pax_global_header00006660000000000000000000000064146662501220014516gustar00rootroot0000000000000052 comment=3faa07fc91b8ffbe6243bc4f91e880a00185d0a2 modern-normalize-3.0.1/000077500000000000000000000000001466625012200150015ustar00rootroot00000000000000modern-normalize-3.0.1/.editorconfig000066400000000000000000000002571466625012200174620ustar00rootroot00000000000000root = true [*] indent_style = tab end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.yml] indent_style = space indent_size = 2 modern-normalize-3.0.1/.gitattributes000066400000000000000000000000231466625012200176670ustar00rootroot00000000000000* text=auto eol=lf modern-normalize-3.0.1/.github/000077500000000000000000000000001466625012200163415ustar00rootroot00000000000000modern-normalize-3.0.1/.github/security.md000066400000000000000000000002631466625012200205330ustar00rootroot00000000000000# Security Policy To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. modern-normalize-3.0.1/.github/workflows/000077500000000000000000000000001466625012200203765ustar00rootroot00000000000000modern-normalize-3.0.1/.github/workflows/main.yml000066400000000000000000000006531466625012200220510ustar00rootroot00000000000000name: CI on: - push - pull_request jobs: test: name: Node.js ${{ matrix.node-version }} runs-on: macos-latest strategy: fail-fast: false matrix: node-version: - lts/* - lts/-1 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - run: npm install - run: npm test modern-normalize-3.0.1/.gitignore000066400000000000000000000000271466625012200167700ustar00rootroot00000000000000node_modules yarn.lock modern-normalize-3.0.1/.npmrc000066400000000000000000000000231466625012200161140ustar00rootroot00000000000000package-lock=false modern-normalize-3.0.1/license000066400000000000000000000022311466625012200163440ustar00rootroot00000000000000MIT License Copyright (c) Sindre Sorhus (https://sindresorhus.com) Copyright (c) Jonathan Neal Copyright (c) Nicolas Gallagher Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. modern-normalize-3.0.1/media/000077500000000000000000000000001466625012200160605ustar00rootroot00000000000000modern-normalize-3.0.1/media/logo.sketch000066400000000000000000003246571466625012200202440ustar00rootroot00000000000000PK>r; document.jsonPn@}vSAG@RfYa4ˮYDcVmfmrNdUߓ9)U RO(L#3C/H糘IBŔ8 ) Q.`tO*%T(4B|Dڵo̲.˼َ@Tp Z?Nm \LTnj+cV.:,`5=)ix%Ar/#| 6>{~J*l̀ucf-@o~¥7q<:'? GڼPKq`/pages/2715B1E2-F523-4604-93F0-D158B27B6274.jsonYsG%WeF })~HlX%VQ ]kV$K&T9L M(/>~ݻٛϞ~gO^׏/OM?gfu]*s:>xLty_߼Qw뷿<|^z'OO~DQ}ٻ}۷/~O>6[>|oo_ (>ϞOVa^}簂;y>gwyz?')eo,;99[]ir:G.A;:mRVQ&M:r0uPG9_~G[}W9/_~S~GZWl7˫g8}?yb~|uW߭yzO~O/?޽_v/t(_~y~_˯^Oyq~g'x{=}Ûco_޻RrՓ/7q_~ypO7__Y~{}/O_x_?ƿ=~3r}o_׏An췓/N:ҟZ_uw|߭8ky_Ǐ3\{}SW (}縟P4x;'>)Gʼgoy~qg?|;5~w??zݣ{=yogg,{p?pO{d}/p\Gɿy_|_{?|_snp;/䋿g/\|O&Z;_~vEG? G{O~88?l_.?_;r-J=}o|O{k볯>;i}g~to֯}N^zYKgks߭ógw~;{ϻuos<܄3ٿq)`ųW)31Z (NqqGP۶QL{˧_ӷ+HOJ6x go_~s1>y_VtO(;ӷW˜˿}c#rh ϟgs_|''k!ga{'Ks1|;.M|i51&80ޑvZe4fl7df䉷oHsyH))Џ6XOp̥s>㲳uLxYexaa_Ol\ A+ o5&fV T2t;$%{+/6f\r)bcGzX lag 0qNұ'dug)/K@+ܡiqp}{&^V8x p|0E+2+7|=ޅŹ8)&R$,|b0-tdN\L? #IwbW c5(vbx僳$oxͩ`Lo%qԵ"hQ/1KV!9@ǫ1\b SRAYmC s},Ok tjtרE~? ./O: ^phoD8e֝6;&E`8u$g.%m I=h<#s9x!OPtgq&̺Fc`_vj nir6؟$R.*`xĀ ^*>zho*؃jŃ/BMXDEp*"XQv-mN# Z1cO,@R p@"մDB|e)cMZ}PK W@ dh#Ҧ<NCR ]|/x֪Pr lgr ԑ;yٸ3 q8rYﭗy~cL8uxrMa7.tYD`JC ozй^?QbȨ'L Si0M@<\r&v˜J[: */W463{ڈMvoӖ=yۻU84ڎ ;$Άڎ_w MS جU W)K/Zi>sVJ%Ez`;d(chXյyɳz{N)'Y׎1 o|aaGfȚT=9=` Mɶh6Yؠ t|΍Z"SghMbS]䰹#\+;T,Qe70pj1 irW>`]I ŒC*B aRDZсaD!uzNtM ]mm*9s̃.t(Gg!!p`gݙ~˫ΏWnWVg$9mvG0(1@EMn.#uUU7-ѻtvQ(.3>L>Y "BiJgeL룍fK2Ѧ$קVy4P`=[Df2RIzw`:P V8Xux @(eh8W%L-܄EcS=Ö0T"1SIZC y'AXo.Hcaf̲G@ns' %l=}aCf j˙ጃG'-VxUȁ: 5}4 ,`0(Y`0L`qrӕhh3e$˽y󍱬9+AV 2߱GK#]igCI8=rBrCbR"^z5wd@ӁT3R_Hj M%[Xb[JXI5Q)3gzd#B}$Xu[̹h1mb3qa`/!̓((yS4vL&vp&z^LHTº:N9uڋu{q'ӫa|.U75R}Br\XSTM+bDY-d;$j\Fj/qL2vLRe);&SĘ5zO> 3aŲq4!4j8;A]aȟG41TMǂ;n"ZT'tC&' 8gqnKNP/{frs#D]kaX#g8;à{ĩ}C٧i\mΙ-EEjZ@P'n=X-3۲[F})ąߓZFMx6 ī m''~mYZsr'~iZǵ5x}O8G0EM$L̊@ǝ?#NZ-t7#b P5lC Tk:R]!4rd$ZMP N؍P}%˟z 97 >`3K@`lqC΃yw:tȬRrEf*F{غܥ58 Qz kqevL ^M))a,jio<;?E1te3R͜ r5C`Yazp, m!ʟlgHJ?AUYK! N7ɭဎ ˌ+ZIĂ2Nbұg2捆$.-t]{vMohמ]Z qlE\eN=I@Xxgc*E;Cr[gjMHَ@ }1;z5Dda)3/.\VcڀU IY坓e ?̽o"޵<+2zoGu Y8n(gv-{) 0$.BDob"+tZ',{f v_zx?ACxQa5?b/(*|ŭ=+_nSyCugc&ØƓ]Ƈ=tL1WT%C:6LՑxn5ĘjPq0F; q0̎@]ҹ Euf"\&r2tY¼|q]օ2>]lzd"HRZis@xU w@tpɑ=܆"w,`MPlJiqu/4 Ū ;'d\[vݬ2y{U,FytDo+Z pj@E+IX!LdC&(JwOIZJ+h‰rV2WX#&Ni,jj8TNQVtub]n:h0-. A1eKW/釬,"ͪHP/.VN$Ømv<|w ?!}"WVĕ r*S }*$XcKo\<@0Ԥٳ r=gypdY'l~TascīM<'IIupe>1l Te݂V`RbGgS=ۀg._"FH`zҎ<-ӮUL;¯Wm0xEK'j±'쎒ޱΎgE2RA1XܓIϊlL? u.gE"=W4?HzV( 2D},3l\ g=[=HAҳB[W/ҳcvͫu^3gvu>qSsn:= ߲& 7"ef옗[[Ά·#JDIm`Fv@а!{Uڑxx%k=GJ% x23ϹX1Bm V( P`GAf&Vi!0Te`0N˾F~REVɊIێqX B+˴,G KG> Q-I:a%qBgsvḽ`OK&6MaDqvs$F˂D.4!qy!EP,Iy`R ۬.wjEi_k(]8)BD JrtٌbGPj(Q"M+*w3(6"QjżʺحIuţ[愧&wru{Ru@`~@9e)H@*T(';͕e zB&F`Zruj1y9!Atdp"y]5gK8l ,[/,B&wk Dj+|0TNwЕVJ7!!И ѐoT'o8kd\pCr)ߦbe ԱF 1u؂i9u]ɌsfՌ|B*S6ebn T:]huSQwR;z$&OJb54?-Qv~O[FJa{ C2 Xfe}d 1VUo S~?WHn0n͑W2L&GVfPHvn̖ԥV&_r$6*V@(xzP2Q+mR ~:qI}I-NTu8,, ] V.ɤ/NTI崱%GZ.ႜ/ThJ,6%\=&%UO6ڛCA}hqa:S,]:/t)@,Oh[:Lj[jv)[퉐y6cnOJ/ ,KY & 棲{a XƧc*w%Jn檰{K]L ,J;lnM=ozJug.#$߷18`bvy9Ɔm{dNdbh.`M7i`r5`jz߲BvjTos[b 7O1;&zb떜c!*(Yd =+ BVՎ߅7y|Y&D}Q/6듕I||+svzO '<n;"lǪ}!a&ʡG6хl 2B~ÖWPBT]T% Tv#ڡ&E,jj l_flEI3}2pO,%1P̺캜$("6iunFu۷afw=)Pb3HZPOʒ[*[w+R֭=_A9?9d]l;PV21[-b+vFm zIJ3]{*dh98ti ٞ=+$$;TerzX** 2[@zQ[A˲`:u]lmOڬR+WVIJ??;]VG!4k &1ѹ{6G-#+W#s@ ŐKez&ҟ1Y`IB қĹmR%!7IHNjMm;YڵcOIZ9{̮BԧvX1K@VKie]Ԩs.kV k:̺YpHcѐL{LNj4g҅K EB3Rgc+%Ϧ45u˅sS)febEZّ2)sYHb7J_- SN&3ln{2.g,% *z,\ߧ0.1L9srz̕ )s5k߾.('pfZ|!9 XXKsvN'/%#ꨊMWz$lf|`/yתT|$ Ζqmf< $j>fVzxu`e'de.{ 97/vb/8;yIt|`Z%/.;oe6WIHqGQ^1wB'P`pL8Cj[WVz:D3 '|xI!pvVdZ#70{*+N&鰇wP!y ʋ ۍ"L~BLh㔖Uv{^d219W_ V.0=饣HRSKĮ(GT*-ibC<hee3Q1iM齈.^I%\o~4~Z|!RUzҟꂾܸ~@P6]5&y'T5~8[UgkܵPm|&2Z(2Wra0v[['i?v Qb%(\$N:b Z۔?]`ϘsB$Yhn sM{蟚TqC7 ,#TՕ:kY.p+Wƭ=cZ]cIP3M.iHN檉9:]FIl]sYx8ŦSKV~ DȪ%Ү΅rIbJ~_jDdn ޏݳ^6b6f:6FS/Kj YPd=w%VdAA,aIa0[mu5iOuk}%!o`^y%FgE7aiB,aUKۯ m وyYׯlzwM|\8/^y%؃1_wNNRcVy Ir4"疦i:|`߼u\{+CަЊRQ>ھQ W >I}c,$",V%(7adݡ19Tυ{9k&mJۭU"lIMiY()tď.c&{8Id&C\h 4x \5-[^)E㘤b5jxSeaؘnOGإ˵\`5ˤ ?uA)K^[P_vWDJ("\ٰ mj+j0L%%+)=e3ͺtpi٤w&Djp,qkFmx ^:$U ' -ɻ6wr{3Jֳ'3Q,22tdM[:*m}Z)<1\v˖:^BP]eC5h6bt9^!  . {_+S"Za7@n:"%~M+Tm b'spvT'٘ Ϻ YXMabJ3 ~jMkڅ= 4cEz,{ՠOL4 NR9HNT\p kFiӃ7V|V+@;'5 7(Olt+&g0nUH cLx I|l! CGHگD %l p!P^8,e;.:+cmb[ZlONӵbUDM#}4>0$>P휭uT(qem$A.Uc;Ɠ_!v ]mrviB\=G$Efe%?HSX:@ jW~s13WcXɉ?.T4>~pn30I$ik <3et:7;]"lp]l&=eN0F)ke:Q0e&;Xq$p ]$S!z["(LMimh ['](W9I:8@MO87kȥ#F ȅ#=r}U)ӓϩx:>lfx oVIPgnV\!A:_C.\jܧu6&m؞d%L 9*yIg, }f5G){r,\_qeP_L\2BؓbWn=xBud-LlV9[LIס&ûlOa|pp{{|P*;g6T罃 d.La@Z,G'w[I2<:Z$6?Yj˖=8fcC|^Dݺ"`}$Vhq[2]Baլֱ2b"I5$ZlI+fԄ]ٓ#W; ]35cl TDf䙄 у3TWf*LȺC3 Icن7rUfzCބ*e(7B:vHgagg ևf;H*\P*C8j93WY^(ƺJЋAP^hכ)rqaw+\2!^r Kk.Oqvm H(8㌏v6KَGc>F'&5} U;<%HlӒ˜DaYo7w$-(u)N)n!|$X̣dEb(c噤L cᜣqlOʝ[D7+*cud^P_Ҡw:7MB|U}>.,`OVlQjKL] hHMɻ/aQc!5HqݡjЀ㲁:)-C&Z LPJȦ*i0/~3"0635E&Bh2R%V]d=[!}aB&e2s1AMR R/zK䕕ĭfyC*i|sA0eo Y*K’cKxɥ'iURk•%VܧG/4b9<1ѴC C(z=&<0y+Z 89PfC2XleKY~@(ci,.hI剭3{sPْ3u[\PLy=05)&^fR4鷁Y&]ŷ aN*˝nb`1B?csbt?1&"^Q367V<;*hKzᚗ2dE#$~&maf=ߕG)+T*:u_~HqT-@=ܫ33sجz`NgΝ}aW\:_t$v.f Gq\t;’ˢpۗ#pjv2.`2&0%Z _zý+d $ijОŭ@T̵ fˆ}7krWSeO{(^e悱FKcbEV+vH, XT"9&[.N&B2FI )k*1W`Qg%Pi  jRs<Nr&@"4c+ӎW#)T>Gz~wESi^^}T [AlKMH2ҲĘ$쫃gh6nhR:f)Lv!mbrccPiKiOdg{cyuf*H^pyW1&3#2GMZڄ3P-pImnAεt:РS GaVZ&ympX sϼHgb(ٿ::7j`2FF`MY)[ ZNWkp/kVp LrJ +F2N[~<$S^Z}lY4!0K68R ~ vϻtlEP +-QvX3yzt8qR\` t*;(V5SݻKƄ3>MUtb- 0WƗ‘ =Yz4r z)A^Ch[W*G#_%bFK#&O*(:4TL7HA'<-62&5܀oX[?' a3̠ZNQ8|n12*>sxj__awdH>VlÔ5z`iX6y5%-!I C¦mؓ.V/`&^,U #bjmɃռ6$0yRm#5=GJH f0$ `DvKgK I(&n,"V ɻ~ޮyGld ow3>77r#INB{ZSQZ"wY̬&Bt:61r3qE0)jbp)`iF9 ijxњڽCoWMv \uh7}m*r ,iG;w7 v~fV 4q>Y1Y'{'\CM*P-3d"@]ԶUyAu1慱 ,Glm*ݒV@?NHs.daTfO#!.x]hdc` 6)1SyJ:f~n,sfY Bux.U` r̲_MZPzӛⶎ=eC,R[h҂Y-q!3lfGY]й" !ƳXOHB1U6.?tQ rFpH^6\hKP 8d%cr.qwa j+H9],"l9/k@6 E[춂yt Cl !tgz54 91[cުs®4˳5>3v9}=fr\@::{P^i[֏rkD%E4U5J* s%:oJ̼jQ@5X`W,;d|}gI=pU3,6҂@zGA,ڈcLWQ¦%?$DB22!k] CҫXEQiN#rkA&e|m^8ۤb:@Qg9;8՞ZnMJ|*w)@$L5`f,p-?ڢ9g#%~UU8E2F9֓^zAiB1Z1 jYA)lѣz5|FbT4D!)'(ez?L4Qcjyn.qH̕ [S86Rde}"hg1M6Iv8ֽ۽{ S.ݺKǞYXo ;EO]WlnǛ1ّs`+k묻IVٖň i8ݭ 8Ԋ \gcxc7IdZ1BVV.%Ӿ4mb&~Z˞+pcG񸳒n@+&8r牠LHf83q4qݩr8Yf݁anhYY_r}8c%pZ\S-(*ʎG|ù-H KǞYܜQ1`bK 3׫7H5RG ] |r8Wm9g漐Dv LlTT$)f1x`N1rNn^" W'/iJZ˨aH ^g{^d=?vgخ^T'kMű:7,_{9,3+o7>KKǞI_4̾b=$4ڵwM+Jdl5-"$:bBES 2ݝQ(qMg 6<Lέ8!ZFEv&A:s$?:[׬ACĬ\xRl>Pd`/c .(.XfqRy,DA)Sgታ]&|p {U/>/ t]m= d5d 7_^ = /r* =[ 㰠>S叫@fVe4;\A#+c]z!fs zÁEOp3vDriMעHtő}A!5".h%dlc)XZEcS:0^) !_sSnpd+YS.4@`$=H!EJS# uS'Ue\Xw h+AtĚSS؊j|gsZ&]HEk-R[uZ'鶋-\"~=:z 6*$B wIOr$&cNVJ:9W9KW&BY}T7JKz]&Hr9d =?USby.5P[ɉlϴ7FCl!|}t22t>|ϹPE[;ļRN[w˾r񍺘M2D9Wa mS_3kjl4pEJ B-P`uo(? KLqd 'kQqm;w 0k5md>0UhEBVV1YU_T{glַi~hn$uCO&3;2-dW-LE;IV5ئŖk'[>giwsbyuQsU %dd}܅6>7NWf4PFB6&܌fT{ɱ}Kht05KɽŲEtTq"7OB-S~*Vn!oKE"R'S`2S0C _+p*[V!:=/(ѭ(d]nn[1A`Ej6`%!$Kr%Ӯ@}k 4P_QEn.U@Ae"}11b\RD%_#ã-|EXt\X 9GMVzc\nKy[rNpyzfu|mʝ3=81qTkxd&i!RCZn>بu GF lmo[OA!A' Y^uׄ?&!Sٕ 1V l#ɛޑ[_N7<j-[ԥ 4Jt }cǶH;k17j%⮳a(rBGᕨLd{qCkjc54i  cQN_ʿFBjԂT}du Cs:v6J1VD;LЙwlF~UE)^b 3n'_v0}dܶ.@KLȂ9+=y6TEVnf;uLQN7qT K\Qfxi M5pX!B E3}v΄qѪ-ᜅ]&xrqVPF+Ljڛ9yBV ;8&uHUfRĒ4Lp|T)ᡦ4{Is M%͎ 9h':o|v\i#p`,!}2INC3j6/oيKDs5qוe8CDd4atp+<ǞeZcfcc_j Dעȍ;C>tdfƚm: 4ђkxmAKI|ǹ-H KǞYQlWMj9٩;}&gu2|@(siZWs潐(SԤpi:bA@_Ar8ĘFM[kbm+ {xTˠaH^Ug{^eTY<[8[zuJoNf{@x#'=a@h< $ni ?iHr4@@@@29H][#@@@@~L4@( $kJ suAAAA~Ds+Ɋ|AMNm|4TRNLhWH#(["?6qE|Ϻ0,nMZfZ,܊^T0ASTKT|{G0 N'ieL!P(U\: V*h:'5y0 TRcSVLSG3.yu=c0.;ËOY(.9JX0F&9T 2@,pF3gtVs+nWOMGi#4i#3^k;-& $kdMƪpT`7w߭JPX\GMgjdэC4OA#ȸ;L7*.-%iBP=KX<}|Y:ĠO^1ߍ)9j:B4σNV0&VD/'0tR[^N}V+S,xn{(jd7MJHQ=Ü߾®_DFmGK5Գ.Fw(3i;W۠I|nGԋXCZ+aKH6n?aaCuHefS6u, [e.͆ha~\i%y<:㜿('Gb+tMY,#d[oݚ[S|fAN^y,y^:Z#HaL`dlxZLbP ʑ`_뉭!ȏW%sx,5t0==yP\GR $IdgJ^*ݎvo ^nO#،+t5S)FtQk{ZNNMV)ޞKe\$2:l m <&}:e0+e+.2,h f3'O%!.2GzHoTٙ뭊b>g2I2ՑA8 y:B ׸ ]3yP疙E24eƒ SZNu9J>2&jBL#BCm'Ό12U$5rVrb.Y/,5V5M.NnC8ŽC`ؤX}Gy4inr0jtq0U?ׂU{})[s7/Ɛ0vj| ]yramH{*ɇ εa1&In`G61p2QN?ȃ ;mVf E{L,s@CЭrX@ z|!$l 蹂ҥ pϿozss@9z#О1h5f@1haQN,ThX" /شD'͟I^_IpQL :n2~ maB W"ibЏ;Bf0cvP.&WΙPyq!;!:60gVz+=P_cq +5 J-N`zl\3rEWKYԱPtq 덌.A5 [(juc(y')c{G)ڪUޱmbVQ!O]}kJ@rʪ/]pyl .,4d0<,* =*v #)ga߻&Py4}|&ߚ-4qXT%KOcR/9,`8&$ dE,biU\߯/4rmTnXz0}A%7bOWq:]5{&j4[=yfcJ $4Е i{Ďɻ-,hR][$hMUW pɳU2@AJ 0̻PklΌl_rf rl]{3tTTWŌ\j@P"y/,׹Z9cCH$V5e"W2 vLr$#D9m7, =A|*l_|$jς6:[WŹ}Vr &XA2EpA-Rj+,4lgHI_8` cnt:uJc"9Z޸ݍ;w/w9j_!oq.V!8.4>'rו\R2,܎n`Z359YtlYNps$mĊTwꦮr Gi4"f8/MKL W,A{L$608WH5{G=g UhOBjxAnL?[9f~^4ɕ 9!auSmIA>"Hr`.`pK!H>('!?ԨE!HNk9G4 'ޡt]oQM0v F=~a(R1/Z+bcf&2\AR̟^ ˆӃH?Z ͎#׵]ylH4x^L7JtdsX`$xLK뫫vfw}iU*^ Ŋ# #F|A ^+Eš=_}ĉ9NuMքR2"$+ s5@\U?.Y] ]SJ]pN)yVW6Nn\{FG cA;MHЋ) b.6L~tjo3(2bfn"]U] 8[Z̀$s8D#ɧ~tO0lR8LJT;13a\trOvyx$Y"\N1D;Sf4'WӜD4I6hNR ?\`֜<QW9d5Ң9l`%E %ItU^Җ8CxDQ{.f!,p<^Ċ|$)eFGIsr#H.89|"WNig[מB;M,d%'+yH99t[[@4ez݀Cm)ŀbx{ĕ}>_FHpk] ڶJ 2vC Rj'71zORpJ&g55i9]$" '誇F97OYآH[]v2繈:eル*o| dV.rǓ5\<{5qvľo؃M.n3f%%|UO"q=p]R[;S5Y};z,35WE[ T"]KZ-s-0Px N˓0>ϩt:VPBV*&.*odn^DЃ:eHO9Q9LTGt-LKxu \R_=(TkAnĠ)TN֔' 1ע #~D/^K5f'g^I?gDRS=hC3%ΪHcEt ?y`椐l)U'(p# ,T<P"'[T֞ l!^k4+9n0JDvq*|RǦL]iibj8 v}9nq|mVLևapxy z1޲c!xe3{+@< Q5PcaR 5Jpm3Pcs+t$%f%X_9qt;tmpPL7IV| 7Sw "[:$y09JIU[6I_ꀝ}Jؿ`h.ʬ0Tnzs6q63_5:ֵ8BtuRw {u1wUB(L AJ 4$<Ei nAڌd7%!o=CkQ5΅e4SY_px~3SCpHaLM+E"3Q}b"\ȅMp$gT `#łD/)TbZ9߈B~ +1A˫4L$`u)`OĴN j'8K9gM+rhyhU j9"ʤW/7H*K،@6Qp YI@o5ސD4I5UAf{  !@𮫩Crt35e}"fT7gK0`5!(E9۷ .Uzdi#qdNauQƥNebǴV,0>vAg$&oށM`kO*j*a.7ze{P3bFf)w|.o(r{Y4N鹉-M\PYd.4TnUËQ68K:e uu:rHPIb[^s·ԊdNkj}΃zp9husnI<4)9O6Xws8v8I!YsܕaI Z%OIWJ߫jYNX=pPYR9 Fweʟ(2,$l"1%IkiKS㦫Q(=\,Ơ#e5+ns4/NW:Nq̈PQ|oIjS!&}E~4 vCJtn؎,0ˊnEyLNd\̂VBؓ"FʏÂ3!\ό,OεheP*ŅjS jƳ;?G-.N4QeId g]M- o|,gRdPC8#[өL=؂@X: 6krY*ePLZ2,a fQq&ɤ R*[ʸ±U}>cZj$AʚT*(l\5g!t&/d 9}@&]-vɤOYsEMWC6ÞK|,h!4K 'ɤJuN;إ-5,Vy<9Cx` p2H1Fh} ŤKP0zv|jቶ~)ARX̉뿼ݻ;s7noK2H<)5%߱#?!x;t3Y78!G5|n ,H2AӚ*n+RI0nկkZ,5*Z2:jbh1z ]$zBvGDrDS3ka+ W#6eݶib8ᔑ{$IѬOo6m,xiuRڈ[Nm2D)S ˦R7#1TȘ*mF|%[24) {ɉɫ\w( EHX0xkUyX 8~L:<#b, fl!TJF< C`(+ )7 CdfUY Q/#`p{Hg7Rp8b=o  UX&D6my򲥵S"jAx_N.7d`0S[̩Xr!&AZCG1Ŗ•='$( K<6jwuk͎n;wҤW7Nb cȢCy9B>Omex[_> o#T$ U[Y#%Gݨܶg ̴FWrY%LW N゘LQFBO6aVvV6)B#VcTzZ`b(ƴ,E!߶_)fYp{]*; Pu;~gɑ F@o;TN22ǿz$2asBE55N~J1hg{(}#a{`)w:'iHߥqܙʜ&3lB)h}Ub|R-Fv{*%Aֶʞ}Ylj sQV rX ѓ`^!SPTو[a]dJ )dն͍LN-W'Yu$~UⰨbp;JOĚ&N໫OFZ~Gr*Rxϗ]. 'ϰ]vzʤ2ftԶ=A:qseh4A>كE.!@[gR+ eqPZ~{x`꽂vXc|qG^6wquC+w5+6Lgwd} Spt„1Nv%Qڴ[#˨=Kh$f!9^;6Hl  >rcJ +w XE`TK8v $rOM%Ւ,`׸ ܣӖ{-$:D]%2XZlK!FAwwgm\=v> &nm r#{p7n]{J=,{ֻ ͩ#9!!)g6#&8B+rLP$Y%Km$HV/5b@TZ6qmySw2+)d$1551"ەͷ(ӋtZ Q!Ҝh-%O:)No$AUoJK ^Qxu P!|1kޏ@=ǧ0lnD>GfrC+!y~9Y/u5KaLrF{W;[IhxêŒYtLS>.\/vU'bP1ΫJ֜lX^Zߢ>੉sU>6vY[R|osov^>]{CFC}M Q:$ aՙlD(_Gğ!dhj]^+uu X刼aaBX[S0džcD(=-(v %diWM~Z<[ل靪a.J"m͹;![lZ% jw9;̲M#5>7]lQOn9f4#.'߸rC" 2;%5zjP sU;M8Ÿ$ ="$sSd17)lR&ʍ.SՀ8Ϛ*R0Yj0+7Pdgn91Jd@h3 KGMfNIy[e'}9pVT a\]S.XLB] QYye&p/wK9a3ɶRoYXjߗU7p*k\ԔiRy EcS?5Udg(sdZOD!&pliD}e c)9KݺJ^۰jwumov^]ڧe3R7RosP..mP?PaK^_xY*ۿ^e{CwpO9)ackQ>9ӳS#Igpk}uAﭏ8Cc uS)lلpۺ HhbJB[I`L{:]( cck:4%+_'{EBQgҐEg|wV`} 8ԬU4܊pƻDCGkiN'|m=HF.hD|kW( 2OҦ0΢DE6P!A0) k-鈨s"8 XݍZLYWam}\d"7>n"#R8bU|rN! 9:RU~ll\{+ytDlCth){{㑣ъ"qYaa8_b~2RdOdn_xo&m+sTdavIUƈp"QI_S6FƢ> 7tudWۘN$.IS3 LEGp9j|V"0؞pã$yy\HS$"|m!viw ]ƔEi[vT9c*=DJAu  ^,eX'Ѝ?DjĬj|"OE G?\"X!K1!"RŒH#uyȨ +cYy|'P^N`3\,f[/fMqKW~21՞ (u 70$,́lo% a.s\Ƒ:j,t7zȪX\Yc\E!d[[J1-c9|4 S:_QfDUlJJj ?$'VumdYƇ*Ūl RYVЗ/S8n#;5q0qIQ4g[ |y-}tZExHbl(T>UByX-k(fr}H|>' Tnk r`]rj[G}sg1VʵP:es*5wᒋdk N&*Bƻ:)6tIKmm8"Dzmpt#kor5׎DFцVX n$`Ts[ՕYGS?p">hڬI.3#ɓcl;8hzl*O2?"w*,TA 3)"k7TdFuM$(1|  hYکgғ] ,?U?7TJ: (?ebwU̙ZäbX~zph:V!+n.;:8iA1M&RHB.Q-t{uImL*4=(%Ω5;△!fI;$kwkҟz,YFQ x { { { SQi,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,i,e, JN%L +ww.\^?utVy&aFd4$4Qb) v"OM׬IHɌΠ;':1AdӝAl DOHUoTqTq 1 鎥M7/Xuˋ AkL3 Q*rI]0+Y7ڃSYeSԜV)+=?t5,x >)Xa3!zٙ&]ϩ`5%dR:6 稐Tu`oM)Ŗ"^^՞ǹd0uA㧵ϹzYM%0;5%k;Q)l֎8!)Yع&JhZE%]]Q8]p5XD*m2v* (h=U鷈$RL>cew5DOU;‚O>ښ28Uj.MJ;`yuɐjd><oT+H+VTbFMua>X#w [m%#x9/l]9ڂP KY+m-#g]O RR2% 0?͍9adl&0 ׅc{Y#eUȤhV\w |IJRxCTT2myu؋XqDWA7`rZȖj|s8Ak<S]Zd 6?LJheHjjp+J A*N Oui*Ejwx.}؝F\x% Wp}A >\%κM6H٧# #82t[t 6 =T"E7(1wËEZ%ch*KgWAӕdp 3c'R$jGfPђm#P3x=?CM-pW=  bRGo!ק;\hkm*\A>j~s.E58.Yr5ZnvM4kteFc;92wZϴ=uySseTI!,_|HVDꚬFq8y*IsRaw4%̤$i X]IC+wegZp} 8ʁ\U{NzS4  !rPCe'0,$"$͂e<*SI{ T-<)Q \ KְQd8s~XMՈ2 Icك#=gf3jm5o)]@RU K-Ҙ۰swIxT[K݁|gfz-zTGϔ)ȁR& "AO ,L$Q,D`{#DGSOxyxgf]479{^CSkw{o<8V N^ X ^%K&1ZUQ>U}U7}#_)y^8QD/`' e][| _hN6=6NBRo Vnauf}0DN|rl[d@h3(īG~ stunl 9nT\W 9J$P8Ɠ]76fqзZ\@`8TyD_WoMJXd5}aw" +JpHDawϲ1F¦ѵ. ه4C2i(y; 2&&ʋFXr[YNG틉pwcyopVVȑ[mN Ȃ /:ZBeyRMd8K^zsUr"ȈpP=W^"NAruF]u8C)U@ceT Ӓp2VK(+.n܂memkOLq1kr `3YdrԗS$QҰVfz(D9K~A#P1 ',aRt=$(VD2I QlP_g?o]g.|3|׷s/{qsӿ?|pg_ճ}}/_7靛w?D//|/;OS/fw/??f~{g|^>z3|/|w~O}u_o;/gK[]~Sӫgza>~ηϯw~7?Ϳ~;G}Է}/W>?<_w~z|2}|߿/|Ǘ&o7~{o_|so淫߿soWf7W/8{w/o˷7??t{ov#~uyf/}m}1?^~"6mw/x㏓4$Ͽ=\W߳{o}_??|Xꛟ߽~Ûy?}#^_pn~W~'~u<ٷʾ1̏_=>>[/r_b]˯]~/Y \/>[{7o~'#?{?.x}O/?~'ܛG~Ǐg~}wc|⳿~'>=nw}o_^oOa_?]Kտx7׷w?zo7{Om߿_v߾\N+8Cx`o~kd_] %B_RH µEv.Kݕo.N)\,-vmo]uT)X'x xZ¼|VbZr9׽ " J ϯ-mۢ"&p8>@EWo0G8'|Ir":Y!%/7!j^xV*H}q L=gM qh3[PhHGS Qs$/0XR5+/5j#UliQX2[2S(R!~!/?HA] hMz+mqX3čZamʂj/6Uڣ7Zޤ%`qпf{99[\Nwt}=/mOwp*ܨ٩w\I wP6矷Nv@—M"sw`ARM6"؈vN$W6>mm[pb (IÖw̛lXE:MJā |?g[מtlLآNz{ME(;)Xui->SEqw0JųO_z '>%ϵz12E+?`x%kLS4Vy-OGgXwvH5R]QÖ V{ƀWi W9XOӜZN9:YՠE6[< "`pB4>k3"GF)\T#A,FGж > HG;^q"I+l]{j z$}__,La #Q+"fc^ϒٳwnx\$8e*i8{_3\ 䨋eD(aYS.1<֤R2gɬAvKljU҉3&IϞSZxV8͈!oLqtLJ3'3Ja9FND n9]hCmB:F"3z͋O%LPQ7QDEav$ep@f JVF~v sv/GF5F렕')UNEtc<i $LGf¨{MXwfYhh{!jFtVc.uJs ̥a0ss ݠl5^)^lCc\ͩ7 !$yiHAd/;$EAiLA*,4f!EηLF KlVlٶWW!&rrX ف_-s|V{ғԜahAȔQvcRqjx6sZhW*c"H sȏTvy HcPdjYApmAzigN)kj Àȯ0+/N=s 4Q bc]JD [܅$!V΁&}Z=::}VsM JB䇔—ZX{iOd9ZlL;ݤfK!/QX{EfXFyrw8cE-GYR]x zvUJQ{HTE4r;_ʘR$J#U<(a&HCEJ* my@3ګۉYS~,tP"۩,B-/E}+ϡٔs<R zȔkF~uٟhˮKAt.guF3|SrKGFIa'kp‰ ??+iv ۡ9G$vdZD v^E'qTE<)֊j͖ۡs8SQ9$䈭208Q#tZdUbO_ +f$gނ6kF[מH< $@25{,8+f$HwpV9"%j,R0DUXy,8 #ap>pV qĄaXpVsyӍJo|f`rQkK6!ALF6ιr])4Ϳ(A$}MsZjV' )$;Lr"!)m/^;ۈ<"c[KOJャ [X L3wd8RQ Y3`~DFocձHkM{MqX2 y2vƵrU ->幺̪KmKH8 dbv*Cm+S]≉!=Jyfx˕hjra8F$)SհpD#ί#{Ot4BL Ar6X r`\'EGm&Qoד HdqмF#-*iΊ{s|1e|AHpF&a|:%m텈IK`"&V g{L] r.U]^no㍿Nj3ҧ^D".]XXO_<x !;mP T-ړQ2١WX&jJ~A[DE&RˆHf؇Oh#hy𳌈-9pY>&B4E#bGM2B%C P &A9?8Zq[>N4Bo*Z*!АF&`xm[І~ey7 ;䇵X4 l9-S(Yp`#تwHh RP+t(^<|v&\pzWooGgo|;{bILHiqmzܽS&*dDH/3"q^t=: GY-8a(jCCR$!-ap}"!KpHG1>/U,2X8.dmL6| cbR`Uv~\iiT)DԳYɱ- :|dSK"ATjW- 8OcJT\ ~N3۠IהK_)$JdeP%GdLWd$"3HpOA8>_8Lٽ0'@X_+! lG舃6d-GN/C9(4s\nï|i Tc2SWO62#` )Gb&ī,gJ52|"z4E/\FgCS.5XFPjh`e"9ђ=!fa7nd2yDI -}A"NQ׉ӬWyw{{v@`UVt<;ol`EiH4"R|Su='`l^ 0.D&vJ# ҭ4> (Ɣe@BOќB4>7OE"$E1P+ȳȗS^`X}IHجc'N! ґZg{!:ȅ 幰0p&?]'!Y ].љa~^fU4e:E#2 r> 4rDQʹq,k4Q=*poptb?kK0G;gX#5Q%@CinGn? GW8o "5={P.6dpk"/RӔ$7>@!=V =0U4LYמrG9!ʷ4u _Sfb*s"˙{>;9)XP%cI@P갞bE`v;fJ"^~hy0a0JOsD>-hRYo-T%t$LI2t; 8 ]&@$8cgCGaق "k2$"Z`)V7rI撍nl=+YM8lN;8X+D3>19duQDZ`q!*aWAږav$VSA!L<c'7XBXP100:xAxRy0қ\QH8dwGU)ef["$ 4ڮ2*N?#rςe+$=b1Zi$QBk %.J+s"e.UşJE0*X#Q{HǨKIqqEZ^ 7(Ӛ]N;{xؖ^~%"]91Ǚ;tR7H_׌ -yljׂXA8W^-Kz4,TUf+,]qHĒF.TbFNfD19z1g7]nq.}Mox"q(g̅UE[B9}9GqBȼVz{M!.bԍӣyWUe (,羽I)yч:ϥ n\Jl|H;K/aoQ',Y |Խ݊ ĎIP@#ɛPWtmȦn+*X6nоo,q>F1W7_Cxr N,ͶGi#;6lPy|~qe]'eʢm]s5"hO:"ln܂mw֞f꿈NLZ4G84mw2 `av1:&&9`:iisE* \#)JB|j8Sѹ#Gf@k!ZDbIxf&s#ִ(8VT S:wdfX=1J17SK8K}7xdA6]Oyuʘmޮ.Z̡ `}O ۛ}2ˀNr! ~1W)2:BD*ጎKPASF:25\Hһp'ݚIÃ3M94s ndeuG]`&R1.)A3.$QfTzFw9=iN"P'NJW༱]tdETpN %sQN-j}P4HMAŇ F&u2R%G%ϑK\[ d'[SڶEl+O-^gP dRm0JSɋNs8L-(80@2@_HMݛT<+B&1Uwb494`$6씿tԄ$QK ;q9.œ5(?D03MUNid>\pP P r KTҁzn<]n:3^M;;LUY\,E6kXiC\{(RNM8Ciz.ay/br*;pHlUuV-ʃ«K;7bX[]Ί+7^/A 0R^DXmL6Eȼ%Vr(Dw]w߶=5$ 9C%Շo|hkz?*'7ӫ xWS'< ͮt4% OBzRxyZx֥u.1Ř9`")z[.Ϟ(QQ7XjD%ܞY;ImD6 }`Bw=J\wӓ7wYYaRk*2Rba@Xr`%*Eq5wveΔ3vK/#C:s=і{'g3K6*Z%^US+TrK:PXR=d:򐣶$ܺl]]$EH4_?X*];l&iƘ'(s`ő 8)pr魟I6CQN7JY*x9_u֠"=Fiiw7 :rmؖW-,.}u(@B=["rS}]*{jbnu>>U9w sACmmgN],@::"TrzGvcwlC Fr@H"DݢnR+,UXd.;˴ǿd8g䖸ęs0 ;#P[UgrVq,(5˩^Z-ҧiT],756Kw#ټqZU\ޔl<gCUDuaSכ Y_ĕO3 m|3o-0ad \//m]{`5Sk̻V Q5+)єu0v=ug Ύ9@ݠŽ^ dE0>s]J1:jq9 |{uű3`KB,6C)hj[__1`?`y BѦ ֈۺ*\EgC8)G"4=g8uƞֵg`:w#E΂X_ PӤ$G"4;NE< wZIgh|RuР&\Baip9Eɥ~4BV$ RO *=4k7|~7#<;fa39[q9۵ 9S:8+Bc[p5X[$0YpR@b{4DY| l^w T&M S,]Z,bڽK=Ǝ3\~Y3k\-eVsګ\J Dj3&*KGmTTJ#X>d/2`̠e~ڶJ-Z&\ =elcd$l)T4dpDʹs#- ADcW)]L%/f_q}%`pcN۟20 ?O`'0 ?O`'0 v0\:"OX',ĂUW‚?aM4ˀuS `h`0kܪݭvn:, }}}Ƣt`8l hp !r.`;_GR9$M8I)S6*1AXVeϟsp 5\*x5J\["̕|) %yC2Zh )6aK~VX\AXϱH^Co7w.n1#T*)HB(p21Ee֧6dH EFAL-:3mp%R>ŭ!{>D :mVԈzn1e#r}0^`uȡa5{ hs PvXY#^"}L *X`%0" 8800 RT^ц%S~ڌ똺:Dso {f/ׁRKTވ/U-'{_g& b q~sݣ"<sT^awɏwm~s!)15cRtC/RN_m5m79Fa)2#1YBb\_M=׊K"~BSDt!-@(.Ÿ1l'4E|I ڢY ,n(J N4Boȏ7L uz!_ޱ (nRyb-(UKSybc%cp)j3~ED+\DGW0-hÆa]^NcCC=󲐣PPrbFN)*w(xyq#]x(2!QuD(AUAjT6\~` bk[W]|wJ_]]#ѻe._xsuE(-],"Ջ< ݟ]"S"^ ΁`=r(;0Vv b4(b]r[Ż~8$+sJ_2Gj{՝Kw;$>`|㎸%_Aсf'c4%T}=810p싈yv!v:[ʇlt?&.Xd3{H|=6*"v4A'r9MeP@YǛ/)+ɩc.NzmjyY}g;ɴ-櫡Й^L;>ݢaYqQJ5h g␗GGODF+Ulg?^CwKfO qYť0C.텩Ҕ((1G8ۤP6% T 0U!MA I$)+4jJC Gt=>Ϯ71Xt"7Vu މrz=f" $[>OJ`O&ՋtoNހ8U&#/w;)yzy+Na6 ]mOFZPY y0 A䪃g@M׫!s@=7] Ȓ!EZyauib우1^/1W<虦>čC"f 2,>#x3[5 F"ZY_,?Ks'CFB)y {౴c ?%]:?a&GY:S5r'Vz?vg!16"Bun3MxB&$&?ŸK+\ȫά '؈:'@D&' qUSīǦĨpNgu-KA+lhgm!.STi.}k9ij5?Ĺe%/Y_q?=Uv\]_vVr!6ܸ?Siٞ)[~W*O L#Zbux-CeKdmRxCgF-P Kr[آDĚfp"{+YpN.!8oX2LZBظX8!)լ")!.}&!DF:G/|g/!?ʠWF%i2i'E``2% XB4 y48f2.B6d@EEQcx`sVl=+ sY_Yt))lLWreesVrXD*R5CD2l-7l}`VXoఁ+!žcy?ڴXvҼpA{ZY9l7dYz,}VO[,=\h,'WQI:9dz6 {1wTBM!b_90X,/>vH5x,auD ?w>OdPe"@tB|t"ggނGq&ϭkOǙRdgH`4sA :`Nl1Hc,c?cu-8"gח>g^?=I:Sm.s)2tFq |=}GzQY<\P;m.Q@U2I0:2]<U*(Gc !Q(?9~F 1bDri#5iKp8 [Ʉ%!y$$)y3@:!Tp9BrN4OqUB*Tu^!H<&4/{<"z&s+0Pp1ߺu-]uP!Pkؕ0=xn'^ BM@zbT|7AHWb *9& P5tU?DjzYlt-i-F<KP :-~uhӬ~B!5KE hDfRfr͞Q>y!I#3putÚʄ v˗W S&4|_W68( |1In hX묈?:7AWد2p8ipL~^S7o {ajZۖP1tBp4`茑L&GWhְU٧Hsx%9+.A35Ή):49d+4AV߹u =GUI4By349|%ٔP40/0'kF!?3ၦ=Z̩)'3C\ a"4g朂|7D FxC{=~ĵLwVp2zjH:9Rxdۿ:?sM ?E^y|-Y~湋?k#)#00mMa ʋ̞k/%tdV*""VÅ%T#H(mzG;b4iުᅫܪ!aPipA 9GBmJ,CG.eplÁHef@:!6G;TϖZ f̝ΫgYQyJEZζ5q d[N/6if@Xӈ<]Y `n'qGՅLpZJxs1R#.MҺa,2p?pJROVXWv*Ta 슨eӱK gRsi0 Y`9^}|@HnVѫHNFԋB &UUAE>_ZQ#z>#X gy:,_"*]upUeQ- +Y(}q7ϯҭVH>!S1_na!F'Z&W!lr=X\d!C5ȤADTBED$af)HyR1#vRL)f l;/ăːċ4WchsdIT.Zͳmk8֋KCXhqYB}Ħ]LC3+K@{k H@AܵBGڑ>|/N]8) jŦDrl@eHmn-U*O K &ǍqZDžw%8Vw kJD%OHvM8y* N$nVG9S"YuuAUl7epT]߈BY<|gUi#pA:߃8)ۮ?i)NHgK/vip- StNRA)d.zj} 3"m۵'/= hRN<OQlB,KMm;HϑȐÞ&2#Y m1@ 60y^ŽW?ha+2RN9=z3jOhu [6OwHU.躊?}?Ϫb*. ,ε΀XOPǦ!ٜ-T,Ih ]i-:<θSirACg@wgu G{*Ϊ%@Z8w $ #óҏ!?9|.R7 ̯eyʙ3)@EZ>!,qBW=w*O+U&ؼ>6b}r=]$w ikɮ)yL-GTY*Rjz"ƾx;\m0S2j\rHNvzڕua)ͩ 3--#U-"u]#p2=2o{T(%L7aߗ*FJ*.qMCtA5k8T!L%9n!T0?&E۷3Uev6*1L?kE]CU{7kf]#م>U3 R̼n*CcE-Ģ-ىPiVc}M,l{9WhK~HOhiSUJZS8#<.dj"YB eȶ%_2(Wmw.j*ꙗ<<^ri &o]MT^$n'G_z$9R(mbT iOՌڔr=a\/y OvE^ ++*1f NXZ~}ý-lȁ1wi;;7ǹHyVelH^ն:iP̠M_ dAM D3_H6OcD˘,| J a?+nAT2bs[Ҍ\Q ((8"2/TP$ m篖jc*=n=z#җjỌؽ .BgڬVs={[SƢ׻ -"3T_c2:zSvrX_Ϣ4!F*OfR' ~!#a_Dpn١VjvXCmW҅<q԰H+,ϳR>4d_V+zպ{W3,y8L ~L]v@%#j,ثa#lYkiO}kUʆt22gdxM-+TQ gC/'meSզ6zy0^ _y:?s\F] ,B=105cTwΕ{;`M7A?PAS~ YxJ?' ?VL>{Lv 3&Vjp*9= *֞-KrrZ$^yQrZPu o m4{ቑ{6|ÉK !(K0\ Cbs"%Bv@ G0U0!֒'k! ,&["ʲFh!1_¬s̊ Bh"/2";cl Q2~x#G"QP6$`*i-/նnI&|aydFVvO7QyH ]} >۽H?З$+RB@|ehD!'>Qcmn=΁`?6AJ|s&o֌ Y֮7[)BZ+ݐWM՘$!V"uIiuEr*+ 4MOd\I(:RPdz Ym.}U^U@!% VSȌhgIcuyqVi `܃Im8)R|,eG7yU!$^t6F T?\2ReIOD9Rې戀 K,km& w횦ϑCDNU:*̳ ue:&@Oa $l7*-yȆQXUB ,p}1P$ ^=PM6lEX=Ō)0125SUByi빻]XļrsK[ 56 L@UMel,acPsPZGjQ8K[^)t_l+C!a\>NjT9d#8-tlOɎUc0V ?C< ;hj h\U Q7LyD?eua=Ϧ?FP6NCBl{oڒjMNH)E4jPkr`[ gG%!WT!D$B|`%zRHfl-/6C#n\ 6i6R HEf/%æ,{y;#"_0RÇtW?%`uQWځ B|pl<-3<xFfI| dZ&W ϊ[sFEfHG4+]4k>SM*݉(~V4,df…M4=RLhgRwKUvwP:Awr pv( ;)kT| q>r͟tP15z1= t+^Bf4`\,dʕ$ي[a lo IZ4i4P G(8e:So?fI6zջvEo^S(c,ic׆BSpCm+6$ H"#"޷)#T L$=G*[2:!O6fۅfaEa8\ڟ.Ҡ_ul3lhiCZ"mΛmf`ynQ+ ^#%|Asm[)~NG;fT*Nt NTWª$@nЊN6e[Ҹ CbRmb2ݙ?w788(^~.?=)oo?}=9MjcT=}xy$اMcv7Ǘׇ{8۝#Uq9({eQv˕쯔wJrney ?M!>=>x#g0Ogwles5^uw/vnַW{㛵|t 4<եucN7Gj eh͑>4:\ޘ]N@''"}w&&Oߗ%{\'FoO&X_ڸ>==;ٯ uWg+3}ރu Jms_vOxG{q~xčT?~(6'g[ `Rf ~`gFQ!p]xm{%SW8yu_\Z)O208zsi_G%{v|uq{_w&'/~T򷝽ޤ>OxIh:j_a@8[y{py:|O31I|%%d}x~\{] _]s?_]"џc"ޑݝå:{qw}|Y|=Y)a#Fa[+ߍJ~oX.]w]W޻rE7)YBq\.u?ewOҏ_2ntw=~\z[u?ʃn<^r<~+˓[,OCnpG+wwY~ޏWB1F~y۽[V^]ޮ>~.?vySw.˯?>^}ލ+rMoʵ0wK?+ͨ>zZAva 7}Q1~s߇h^#ڥ?޽J^=Vlb6WoNwo6/Y/tՄҕ?c++)(X;BwL~jnZR;Z:[w;xà-/pYzJĬO&.\U?3fXͻ?3JF@N 7L l,*%8%9JxNdX9=pp&N}u=%}=k&_rPr*.ϢLO|lLN7^%7` }v$aT|x!<_}<ӇO}ş ItNjoNއQ_r{wR(ݖo%/\3t',F}WDwP44' pN0˻WHv _گǗ a;8Y·{ЈCI6: ώڥB\epZdWq!^! ؚ G3{6_/l1Ipڋ{אZy]B^~C8~1!ӻ󥋷77?۲obꪄ%fh?9&\l-Lvp9V9?M-:fAt θ:ɱ:Ù ߻Xl`HRfY~)?-o^e9./nƌ<9&sbGߔ'pt|W(|Lc-Jar%}u5^ղQ~o'm(O!n ?({{kūzK;F ]><+xۛjP,37H.FWfpa_=nK._rD :)q;{gw啛}s\~rmPQrM1Ǻ[t^Bwm4ۡ3~*h˽ݰ(WgP>dr=(Qy8>^^uߖ']=^\nqʳ w+FwǕzw1zS~}+ozFޖ=3~z_}*oFk_ݚ,_߭XoK?_J^?ᅱ~4ǭ9v;[/96׊g>/j:/30e'x:m(DznߘQaS i$΋-:'PEǸnّB!#m*`^l$%|x$3?J"j/wx5f^У'D)}3· nwyfy-ԣ8W{d2}O7eK οF'Oo>w:yloISFkw=0&Ûs,Iq!?9ڌ BnNߝ^oS GZMRB+3ňq'JV7$׷gWin 'W?&U{"LScYT[?1QXn+H=n%/Wp$VpYy{zu7L JP{[MҘUʁSB8;N)}u}]^0+IU&ޔshKv 3NCո|J*cW^9VA/98H^LImsUǃ;7ъIhYW؀"1 Y ${zv%dg X[ SaB}b/v-U?>:FW&mlXﱸ8HSЊ≮r/>ƑgfdT ()(PVO,J32j39" >_XJx|=9J5$ZxOEB9֬\DzKiMs uɊ)#h{6 z‡v1W%mxws\CO6{k^Az"uم t{4y31T%ix!|ϋhDCGaѵ[l¬R͑q+R>rxRe:٫Rg kU?1zaįszu~z2_/nL p*z0ʞkt;E;]{ם0wi8c|O3oQ 6gHUCL19_PU+R^3̴!EJIrVD|B b6+ѕYx\H>_:2Vi:sWԶ섮,a4=%-N&;&sã,%TyL 1נ"Y I"᥈~Gpϕ XpċDD.0GlEVW0Xd<|KA*$A I=M("b̄CA?ni.dsЀh[0\d61~Ti|*[ fYzQѴMRC 4\,@BD-pStexh!jJAYH6djd &e@ڤP! {@w&"JrYRЭ!%ݒW)͏c5X!{Z$|D!}1ʐOEe2GVBȣp^;,@g _%Q4Ĭl|zJMTăڀI{xĖ IiumU =TbfIhҴ2.ȄފL Jk|9~LLdY8a2AX%h!y-> *&"5n .nɆa#f0^#ߵDi=wilt`${smQ )(Z{adfV.dBъ U۝'=;Ǥ{$$R7߰;fY M=$\QIp[" OJpaj@/5L` VaM`b q0X=4PH6'/%}$dU |S@Ahn IAbam@ʧ̻h3 &ՙo6Y8cρ pǠIs0}b<{WDuDGEc-D* Y8(^T`3,*gkxHqƢH 떙Ab4+*acc 6@ɲN5D6y@fOAp,&?h'W6߷sIeǼ&UTf dJ$ ƥE7) 7|3LuV6qH¡DXK& [>zd \a-h fwxi"qmu f՘G%# Q+5u#vӤ&36WN 0h)O>hAcNeVܟO&A{=ԤА -waG|sG*@Ko>%I!)$N4\4lM2o;Jᙸ]aAdlEyw0AY f56I7&cGl3MSfQ6,а(J4(\Oȕ h c5yf[1 j.dd Ts\`^-4Pf lJ !=+ lB[jej3, D JK@S\sv2{xMдe i#{GdG@oӶkPߐ[(Erea)tjD8zoNd:̝5S2`-m8PEL:Z>l"@Zʆ0%D5Xv ֖\[BibjV;5fbk,84%HH!NJ8Y%)d<' sWsj\귥9`+CWI="x;݄K CBITb1,76LBK'T U:`5qیjFk`q~ Erpu/ѯ %҉Na-ZY@8#1vj=[]+Pk!E&n0GB]N/\Djl#~a ̶Lc'pCRTjǮ%N#L;InV3`TΖK: 0V {Hb=n ItA|*\  0t|Y̛sH+HR.:CLǔEP#Eg5'xn'_nO7Nq2Hëm^ DgY8z"L/ߎ LzwX逤k7ޚò ªF]v嫶L7Xn<~NVζL Jl`SŖRQL:A&5np kxv +RYIJl*1sI:'rgY(cPv'A1,W-'R59xgMŘdeyl$rrre h,L9ZQd=,7xbE8AIƨsXNX 2'(a7@, XP@  ,5yu' s- #45,l:nYG8ވ5=5 j\|q]+)Iw5+).mmfC-9wB(crEE&̠r uqmض=LLWP@ɫ3 Fvӧ~*ϒ)|t5:? uC~Gf˿s2xϘm8$W֗Z UU0eZVԞOݴv <_Eij 7G!֭Yՙ1'&Wr&qEz1:M;z׮vN3_/W̼9$oyR}֡}|&+R:bd峜\H,Z,A(,,|ڀ,l²0t3_1 TݶtѤyGL3TuWSgY؂w"%4`J*|TЀ* ]PA9LA70`9O`2AWȦ$f6 M}g( 9)3 @j_~$:\tS> Z۠xaYu: @QOjPo@\,t&(&-KL„x]ɜ5(a9P_|)0?A .0A* t*0R @jV (^g_wx'O#x ;e 6D,'7`cNQXN?nSkQ2XZXB3ʣv:||WS2ir_.%XzkAڲi+:@2bX|Å(^J?}avsFnJehLM89.\?z:}G4 g~EQ\ԛUkFv^X!όԱ{+u2AԋI&M,fB]eeB~Х}H_.q1*r^qA?y+E.Uџ[>+EXV aߖe Vǐ|2V+#*.8ZM:qp鷺*R}Z/D^?|e+_LCz+y}F׏Rׯۨ9S;g}%*?csh#e>ˆghc,j,A(, l!,Z'e$maـQ`XYA XNe$mpNCk^\ 4 h0,-JgP:qf IK]b$H +[m[rڠ``Z3, J71, *y۠j`5T ,rtEư1(AVz;S/KG.Ei;Tqb+M&jgCoXM>rmeۤXvQ1SWhjtڏzsRk1[v a{n\]=ٖ>|6ݸ ;N,pᵋ{v}GEԟxzՏI-orzΧeZkҌWD+n (7lRޚ"!yh:Lj6 ׹r=w+;M/}-r^fhD}TTH=tՉ y}c }\<'.R^\rf,mݲ~BN4>1>jQԌ5eEh{J8JYFW2\a*þ Y{,_@| &~U-wQ=`/9?cL(#8ZWrWdwlIq 5oDҒ mݦ븹yqTQ]!bxTc(`2ĦٍwQqc^FnEx a ^{M⪻^xjo踽{uw]J.=MN0~w^D_q&|Fy.5i֐|2>coGλ/:n2Qn,Pʻ̀=61-<࠮ ;?㬜f}4GG[xݾ ~GNcj기.qr67Oymr?{]墘MB$^ )PsfKB="狷ljOMӬOtO4Q^^mbt:F4GGcPGIh[7xeeg*<?G1ѝܷ"Θ v +X1( 6 +X1(\! V  B V  B V  B V  B V  B V ò`]}N:VVjRt}3  ɨd6R̀R jʭcSҩڎؑM" KL %>)#amWm6MߨZ KҬQ2Xa7XƘa4a1Xb Y K{9WЌ,V凢3FS~헑° K#aIAZFi "&7,dymNY$ + 1V5HV7T K֜56 Llel?e"LH Ӕ;~V7ooE,42Xk!eGXϑ"j-ك= ae}j4ՀOe0.9j%YB{8'b6,)ੌS --j,ړ\ m6N*Bp K!\4,7JxDQ>6z7PGSDžĦbZQTBE+tQ).-njVv3߸rԶP>2TgeeW0HTph ٩,4ͯAcjQ:8bYJV*x;XM+d7:ŋvPoTMPI/(N,Ԫ 9rXOҰUj>KTہ{XN%lTq`؍*ԆŋwʸJYLE׽C*)*e%"ǙT!(o5j=eXZssRJ lk-bTHo$Sfǎ,NQCc镖ǢlHSz*1WWzlZYEB&jF[s^hT02KDKUb3,T+FY qEݨ"mXA58U +haŸdT1,+nF+˸hT3,+FKʸlT5,+Fkr˸`TL6?TnNb g-qaXydc\n98WaXfb\lT-CzjgaX:v F*°T0D֊q-# ˘ł0T0, }sˑxՊ4FpQVvŤ7 +&z(xLaD^o5Ê& k1E{Mc2 +&z0,d>VL6kX#zjqWj>f͗{ ~l+@V(}T+{ sR3 7$62a}oyk_J]ꓻtA^o u9r<ɔWi5J>ӯ J(eu~#7Kg'Rˌ2^ymXD';!m޸EG=x=tTR\4k(uWnP#$ڝp(&CՂޚJMIdrv#G%XrO3ismokV3JaJ{z<*xIz !cp7 ~B99+'4}^ݗGOMzN,/-)Ք6˲W*ZJ~Go?;4^K%EtÅC57ӾfWQ5?&}SSګ\nؤ^_Xj}ߺ5IRQzAGVSe< E)T=Z0l*/+=MP1nEV&kּF~Ԕ ٥K=,;v@GU}rez֮,?*TOՆIݏ{TwQ:mݲM]%Hv0a[{ߗ4NjjGw:S 'ytSi*WjkyW^ө]W+^Am[UM6+`2EFݏEx2(oKƍF^h|և>>7 L$<~a}|J?UYxNy٤cM床 duZH]LAsJ ,[2i[+?z4RA__.v z}Fm\IȄA)ctJ>LV% zx<(λ6')6{enrz6xnnlp]0DWBSg=I='߭,sA.(i3iSU}Or=;_M>>JceHx{﷛ޏZq2I/OkgϜ+7h\OYyE}?^ `-\)rct%#ˈ۶Va~OtIn{wzh|6i6C_ d]:f2VB /Ú" dٷtn3\QIՇ}7}7'9t_vƭ)rNR5|YmٜϦgƋ[b]x[w_32e 鬼Rs])o{QM0 =G׷@(< %їϏx 3com/^?*ktuAQ:= |Fdάy O.7}Te o Q:aX mO=0Qn ^ nZ@2߬D?/V& kՏ]/6QgFLC)}[3M9v闂^Tڮ=n%/u&ŚN #rԿ-r?IH^QN (6%O)*׭4xP/fX'gEV9$z9bnru!ec$ x?h$#>fƏT|+2g|һ?oϢ-*2|~49tb=vBΟ"*]SQާQE#X~PwhNWuh謇aehAV4]h, =n0$ aEC +p*Ƃ`Xcv J V4]h,FCĂ> cflA+z.@ bflA+z.@ bflA+z.@ bflA+z.@ bflA+z.@ bflAwFv)ﶭ{WW[S=7&TtgQ#dC7?gC/}S9*=8.=3%)DPK.gDPJ*9DPNG+HDPNE+{DPq/GGǥ' %HGWpX1:*JD[Ê_+F:ҫKO$>e8:*J*8.=":*D[Ên^+B:ҫKO$:e8Xp\\\ bQYS5Na tkX*bpXV~ipTz"2^pXAB5Qa3W|#tSQ#L;3 6Qmm~⋤U6xUksRՊFֺ(um~VqIpX8y"嵣JXD{i)iQ|L7ngzP~, We=rTB%?,SW%̸rjWO7p B3j4۩p\~P7˜ApT 9*_V_)7~rmXKWX?]*WSF/]Dy54sasq6JQ7՚r[Nh6=50TݧRZupXZ<6\_)jJ ǝKW(*;TmsxWS?^9'XʗњsWӔj0҂r4QWj?ꪤ|Y%]\feyt Oi];ݠuL5N7W5؛: ޯBh\4"Pv"'7e/7L7֤ACa9l΢r3P,hi|^(Y]kPH95(K9uSns=rݨ/b FpQV=%pXP˰O(WY0t9ukPW5rruR/q|jJ{S{N37Hk:?֔jL _詩 J_Ma?hfVèDJ]jR' * 8P Ҩ;H{Е/^KktBW7/as/Ǖ\RS'_n'zC::ݤpT.tvso)]+c>D1 *ZZ"*q r Ca!Ḝ&Z5U0 krNYpTαr$8,/i;4W 2gpXABk: KaY;ǕUj6al R U(ఢ{ィAlUԬx?pX\"UeG)SM8#%G8,;""fG#ppXB09.8(X\{ʞaGィ y98,Gq{ 9.8pے[rlq= ܡ%^bqwpX ^:.8Pg ux'rqQ.X9C: *F|V@qQQY3Vptq\pTSo  HkQf *\ jᰂo4uRjQno?hXj8aCOX%D0 P8,@haFUX(l@ 4B*,@ 6 pXQ   8Ш ֮*C3ߟtJC`7iJTtTs+n.l %BjJedY 1"psa49SRiI}WtQma1S@DXqfנ?-ſ-]vQL"o?j)i3+gӿeN-񧷣\ߊgϜ+L2MeTP;`aƆrʍ7QzU hۖb:4\غe,TVZFmlMyy$EamTXK;3'7<|?I3.;|8ծ[,)).jrd?%ά_}b[P74Riv{ԋ ZV*q-ҕ2=ZH+dFiem-U=v@`U?捛U=g0;]|wX(5]Џ,Hҧ~M>o+VS}*o u9rY}comO~$mzN:4yrI}. y xsoG\2Z gTҒRS4{^t){S?%/Sچ?w;u!J9ޡw=zm|Jm‡#i(euFe'hA{c'M8$n農L^^wmF,Y.]vr;ӋC̚'#;ۗ&?.mټU7AuQ(OM5+יFK9 ڼrSg=E͚7t,t }b)Ϋ˲!?c~\xb؋Z9gWI?}>;JlQW$oP e*t7Ԯ+:/MrSKmGӾ1W+uM5iVDFsYߗD;;O*M55m?f;7_=i7*M {7G}h[ufZ:GNG=OUA=Z鎇h~?\eiUO*Gv&>9?:|i#{eq5>=vxz7jrGo}I=,9,A߰WU}$g#7jldJAFWx>.ґ#G%%ŕ>#RݴD}c.eOߏԪk98:ݫ+_]8+N6igNlHؐֆꯇI!+ͺE)RWoڰYis#OfJONm|G{-1_vܥ(Z>;"XOň+:.qNDvJUW՜9Ub'·TYoO.O>O ׬Lv*gҽk9>])?JjO'wO;T7XFaeuT~]R*t~w^,"m~,4Ί;+W:_Wk޶xkpVߊR}S.9,>ߔjI\E9?pW+Ў8-];d޾Ǖ^@^2̈IL~~}jCw&ꓽ3uؽrBXDݏ]T9=4'%'K?(^ן41 9q9L/;?wseH|C7W8ÿ_MH?6TE7nޤrۈ!)-<7bn$]zsuhk)_Բr] tځ(PSʏ=N!mlK幅͗ s~Ï9Pw wZ?rfPW͛W@ D}ԩ_ҏ\ Uy+аC:,a@bB1m8@@pXp, r"@rM_V3K[ףRfiO(l2~)5 BӪz х0Z-b)>lle0a홤/6L:_&6Icߒ~|ؔߓܾnz>~b>oS_/_vwsw:EzZ9o[+yuJg?7Ks( )z&\A$)!Z<|öV sbpbWvzc鰮p|i(YFNLOmkS>ghدS}r"5h\vuQ}DjԬgcoe׽I׊qzפ[Zy2˅'yFdN|2[\wh#ķ8qTeG;NaWq);c!Oq|#:96$E5u|m_olj׫Tf_OKႇzoywiU|8ȠgOܘKU'=ͩ-_Igw"7SXFu%)e*Ɏ0;Z<c׍qνf\,eNңF/]TMO?aE SW)3uBꑐ5oJY.>5l[*^[ɋht(*G)KXٯtNb_*dOxtaBe1Z7FpI8mLC=Nz2EB9I`{gTT GcM󲂸~?u  Xʈ:Nw` V aY%9 a,@*8,  ;8,UX%e@|' బ|W `UR%]XU|W `UR*@òJ r ]XUpXVIA@wpX J*)ȁNw` V aY%9 a,@*8,  ;8,UX%e@|' బ|W `UR*@òJ r ]XUpXVIA@w +K+ʶ){`j_'ENPJIi?ڿ^R=*@ SJ)9 rV8`Od=HcC̜%H8,'(p +J`$p̖VcߎxdUʌ[l{esZpZZ\d38-ALaeB-}pV ]pXvPIg%i 8!eV epV# UpXVIPMg%pi 8Z!eR epV+ c:pXŰKg%i 826? %HV*21Y pZFఌİ.J`$pa9HJ$pTRӈa>JNKQ$bx $pdpX108+8-AG8@P #VFg%T%H#݇Y 5i 8-A"G87JNK+Bj$yÊ^ᬪ U"j98h*YpZLPr-YV Vj6am uYWVzFa TkRHJ(DpX!RX* aeU%ᰂY@XeTD3 R8 id-pV&pl6i q8)#RRɼN+sv~򓾅,@PN+Cp>v~ʾN+{^b.kvVsRK(oTY[Ta *m7G.?I6^Ͽ`fK,aVkgȤ ԭAM_Tob˄h_7uaߕpZ~k J^;}cĆm(6+5rVt[_&pX3tl&(gh[u~5iEڼZH9Dg%ŇbfZ{ 2F ǝoT%ӟVAiIڵaiyRY6j5<]aYesUkКϚ [;yxoSM G~;+yɌLw\h%l*ckiMqJ9HApZARJJTOJNIVۧ)5x^R Zy &}btC\UOjUjR],~_sTGz&sAN lY}%ҪEcn.56ڴ4H65i^ %Hxt R0H7@ /7ov1t7Tk:5T`Ƒ;#2Dܶ+QR'=x "Ɠxo}j0=m ']?\TMPesqZ׆rkKJ',D~-8岊lWuy/c5pkcvM(A!5W#s)\Ky )Q!V>t,kӄbtK. 1%|aXӶw҆{f./ahTw[ςȯ?t܂C[PG6񣱦^=G6m}g)j537n~kf5PaoO웭GY N[JM4)=A:/e'>^b~i~.?+h aGZVrc3ƦQʑg a:-ժS㔥D-YG#;+GͳAJn9+l!◫Y8,$提'ff~F|Ze2jCde{satNc3K<yY,YAe?ֶ7QEQ¿L(UL{{igY7ˡᰲTwƑnm_{nsVh@_U~8wvL]zl7k0+p<$RKYOE׿&]йrբnPEe `wߔqקF/]QĦ R_]pXuj8S8pVTW~|= ( Wg*^rsi9h$8+#* ~NYQ&pZ@T g,VH匢ଜ(pX~`^8 Y`4 2ie08̸V4ba=pZ DT0B ᴬ)HaES2RH+䊄2V 1a]ᴴJR +"ڄӪT$UD :6R cuܝUޚ t\UMӑa91XiY\ t};.N G#aj8,{5eԝWyం WVUg効~P8(FiYeoa+8-8+8Vj;|zi#ͶÊ bg5Jؕb{gC#Me8`^H *hopXxEJ:N *RfAkSnM!;hN *$2|)ଂhYVptJvZpV@xy@zlpXa՜iŸ 1:S8pXsFtiYeXwÊo-g=$ a%3AN JE,SN *vᰲ%:-8K[r lTiYE"#1]g bpXPCaiYOA^1VsZpVW`R׍% tʹͫFwuBuSpXO:e]@@K`I?zT[iPZ|Am0CjG= ~tPYY9DVSV= 2#pP֙uP@8-Qa?Qjd~]JPu,c_RNNw @IDATմq&ҕl&9gӿ {LǜrxکKK%T/PdY~[tR'2D֯HU|*Zo^wjRD6߬aEԒvةiY~z>mڰvo ~́^ԫ2^@ rzٺew_̣\ٞ8.c:TQWўz^4kHMwlJr=M_kky_|75h\NԦYwI"[Fuחs#_g~Ei䷗is%{ɵݨ JbOQ&Q/EqĀ 5}6oGI*yމtWm/ukk <ɲS4Pȑ>>+O9eܻg5ӷ;`bC,iڸpso?x~JY9 I +0xut4Go}I"v*eyhr#\FEB9Rb镙Qݒ(]&Y[{EpB7G %WXGgzSd֌-^. =+rb0#w^XT4Z,v4kS nM3s/Wszҝ\rk9ΰr ?ޝ {cJ3nCѬz^Յ~[av秏P"<~g>m"9Q4PGG,@k*U6)e#e;v@Gigͧ=S9,gz@3fss{[S,RY ^x2,U>yF$|a W?B,L2J78i >N9瘔YHU+/BqKK4b`8QNPV$HFާB\۝w#׈rt<{۔yfu74 EVd[$zYqsBjgmTn^pλ6iϽYq/(Ίע:NY*}o"͞v S8TuҔe80Jꓲ_|Fה*12Zԏҷ Sf'SU;Ntb,Y> ׭_u}ÄhCn54fi~:V}џ+E:#DV9֮[K Sǒ߫H1&U)DRVG"1dt2_Ow4: (Λq_GοI5m`:}tV{Mt5lҀ3f¾쭴o7uFczE.BߨHUǪ]P:V#οnr[‫RFGoTi OFJVT$lU<$lQN&D,Of32l(֧䓥f)1tI+iխ_0nFf F$ fv*͗dub'VBHQtT8Aji]$ bE\$U>U?k-ʐ-[ۻr]>k<^ɩU^zLT2F[閭wWFrj[ujfw]h'>oZO~yKWgz_qw(y6jݵשFb3Xy*R}R[TogHv.">kH[6Wq:q"uR/J yYzr7Jjys)\lGdtIboyIufG> "#lA_:Pyu<_)[eBfiwS՗o(akjY|շuzƦKs'_R5qP:\_mJ)bSe?nJ@;-"m,v_t(ҹ|:=Ʒc"/8 G>;&]ywѓ[_$#_c'/kI}^ƨ]/QCOOō"q:h^b -<"D=nޤO=[Gy2">MTZ̜|E']z[_rnS`Fۅ|8_E?(>ض4rW q+OvRxƷ(cZFԩ|~)It}L=VoL]NkRp^ƋIrsY׏_2fjC&̐/{"3I=, &j䟿gΕhwƂ }p$)U($52~tBs]sϓb!,qw{ʯjm{4Rkv}7Vo |/(Z_?!!7X/"99rQrؑ<5їޟ EXQmtH|KpV\̓NU|ޖM +G}QWQq_Ml|u80y8^*m(2 q__ƙ>SΊ/N̠tu/Z aeA&5q 18ѡ#఼&@2&+_+cb\^' {kr._N7\xO~6<䲤7eDˇSunv1LW;koqb(+]{݊v%TTz'79OK~d gI0ōfk۲tFSϾ]T?'>]? 򛀶nǹQ}sYG]I<-L.mrX|3in)o@2GN,? zV~u? 7N~6qӓM ~:;R%~̍0!v3]ڛlyJHKyL|WM߫Lόv}} ^yve+!$0or;_ѕgIoMHf>|CrJ=}ʯ^ÞNY=KUʑo0]+|C?z, F[DzQS"Gq%|S>?_GWi֓xL~e|x:׿J%څSLIB2ؤ/h q e;Bzם\f܇˒c%]sh6] 齉r?% Jz|Tgr&z(}J +\V+RFz2O8nJ3McLHR8/FkIB6!=*q.Yq}߮ '!2"I*!9M;)*o((KJl޴UK7lG+qI">vBz"{ife.yHrVIX?P$s 'P;ש 1U^r %rWuۏ0eHU[v(Kҫ[RzQi1IezRSc.vx3Oz =b?YvrY ~1,?\m~G(R$LJ@t\Rg3e5hoQ=$%%oI4)򛇿{sDi TIVz[ve%[ŏUDsO w۟0ңwS떣ʻtoV?LLz \__!_[O[RYF1税;%F}V _<$k#* _GΈgLqӤ$̎i6k0sI1J{? ;B~?盟FAzv՘iUOpD!BE3aԼ|v.L#?kލsC59FKM&;`!x5 I7!E`+%:HK8r17sR{J/ŵF gl8=:j"sA;>%Y8"Czc/R↑|ښ̈I@P/58B=%k-׿PP;?~0%d-Cf~ bi$aޥ?h h?SPT  'X~ ݶ4|T*@)ڿnO 3&4ҏ@KOe @-` #NVzdDP,?cn+=B9j$tX?٠  XޱL K^VzDP,/ic.+=bZz"(xA1Ĉ@P+=rZz"(It16Ĉ@P+ h鉠  XnPŘ #a *A'2`9Ic@5ҫ N@E1"J2Zz"(dCV6bD ^DPȄLĈ@\+Jh鉠  `,; 1"JbZz"(X! %Ȁ@ 2V6-c.0&˘ jA vXYS9-k q'+ǞLVf BV\4}+ 2n q"`lX8SF GQ!+*>@ Vi9Ԍ@!BNV@:r;\1*h X8-bX8XWv KyZp,  $*KuGhL>@0=dKU@"+Ҙ&a> @'\&e&icAX@V`eA;cLA9c@\Ah^EX @e V @e$A<IhNeXp `!*8JhY;XT@U9+_~RZW!6q"`l/XW7aZ0i kXq6-VT +VUW@+ڣDV@%Byc'+ KUxu#Њ60@&ma *j"hNذ`L(V ik %VT[@+&.@2` ]8 VzI1W$  Z: (@`e C U'S-Jͩ[ mK5HuxUhRtʼ GS{ʡ*ȁ@6`eC}cA UٟkhmDeFTΎT}4ne̱TTM=/hUطS`9ED@+ wOm/E[ǜը(US[2.c5pB݉QϢZd>Fz"Њ±] r % VB_|inFǼ]S'QnZF͎֕|nx=1Άzh8q@+N^ #XiVZNEE%,T-٘<ޕ8q;mm6/iԢKVYm5 J*nWbXmfTs(v 0tmݞR}μu4(&֝6B Ę+?[G`Ѻ~Sy&U;x? ʩY0VTІ!R5#kr5A`@+!Ǖj>F`e]6SQW|z $9`pk\MR~t*׬ɭ_B-x?3( XQ6VPLo~:_pToH'~I[p5ZoO'iwI~& Ъb\ c{VY~>C+0uy;g<ԖMg7ڨݿ=wEocD`%]nzjmyav֓봊6 |a٤'::RNA^6Ħ/ب@b V[Y@H)t#_ד/^r)EPg HZV(A&J`EI1 + e:PAݨ@1 w!JƑ3i[tH5N7qbVLm'B@ -.{W/DvgPO";G*BG*?T5vlɵ}tµ10E?E:B`Ym\\ݳY QTmwC|gat`t;_,_ʬ/r'i:O5O]V^7=ش-5CjdEVզ 0x=ݻfW@J[ ަ撬 ū'UkoGd9ʗ&/-j]R3,RO;[Աb >§3؄-8.6m~k$~tB~GSͮf3YQs}q# p9PLT & Z,;ߦg5~^ZϦ=e5NR0iۻ ӊ +r>TX` bxnz/c50*VmjvNܺ^Sv ]Iy;ԡzwf3L"YX: (Fgf/K^)SΓ\.?wԬ^,hۜ ?ӝd@*j<&c_/fDqvwjhK9l(y]zOqb+;Hz 8*[NIVJ4h2Z[b)2uQTCODN)0; ϕkn# :@E`@̽k>c%X#/-וU68\V7%3VJ^id+˨ Cbtl9-,e{ƪ'QfuX9Y6jjvoKu+Z+Xq+Gh1.@`Mc~@'}9"HmUԉ+ 'Z[TW*žLVЫ0@`ja!'+ AV8U"&0@fa#@+t* ՂXJ]Xl `@LuUª9;`EY[ @VVsbn~0 ² Vag}=phN%Z@SL!@AUP5u@jRA N*u|ŏA +‡ Zp, 2'+sv @9rO'D`)nL@*^ @WFE`y @[ @:bW'@`*^ @+~L@ GFA`i@{ @8RGD`(N &+@ 32V/VnŸ \ &@+kY *+| &+AZ89%UOVu) l ʆ^3ąhZ*dX9C@ BCZɲ@,X!вg4đ8j{h9T@U9hiMJ  J [qXqȚb>ZX cϱqc X.Ű EQXEj',cV5ZBmX<@p{*vU@ ְfZf@XD*[=B`e`^X9v ZucX: (8G@ sH  :B`@Qʼn@h!26/ 6 8h!ai6B`#cVA d`LaX.D@AxW`M{@Ub# ~mLKK7nfςtKi^uvT@P &ȍNXQ   K@@@ `DX@t .@E`   !+:N@@@BV@eD;XQ   K@@@ `DX@t .@E`   !+:N@@@BV@eD;XQ   K@@@ `DX@t .:Xn#x}&@JTkG}+=u_4{援qf*-)PAjҬ!Hjؤ~Ж@!:uYQ3 H 4G9{w* ^"!_9o7ٷ{~wf~;df'IX<} M<.VJiQFx֛NB[di1tk­̉~IPnC)RL,>)XpӭiQ}BejJ>3FxTL]9DKwNT^v/Գr-KQ,`+?XJKjsF #>s+(a!-)s)yBB4n_B{IF}bwY'ZV+0A@S{^AH!5<8k6+>~K %U1@"(q kG@PZ8N>XN]#7oܢ;J'IH?~7}OKvcϵnh K3QbR$YQ </Dyh ? FeXq=q\t\c=CdVhьOh熃.ō 2iYΥ J~P"\p9̳wRvuv:Ze@ˏ ыd.=6]OʫJÇ`;Έ%Y 2*|z6}|hM/.PFCpȴ4kǎV ,7ŵ2+'*;ON\'}8d>㯞/@vb|aNy ɞJJ,GYr`*u'(Ҫ9:'€n6GGӕK^]*PvJΟKV)eH Z|_VJI}1׳yI̖6, 3lS`0=ex%݃Jf偩iH'Z8eM`$&]FTy%7Rfʰ0 ky->T^rd{lMg0XCqayϿ  K zv!2Fq&w&X1o1oQk_w2A DPTftRXht:9B yQ02oRj]!>nj=7X`Ur3ݼj xot/<'켅rHg{!K!>rϦKWtm͏VU{ѩc2(6{M=XPt}x((O)dX0+M4AdRYʼM~Wj|EX\CU|&U,yv+uJGy(+2cf`pW~VN#mnbl/anߘa'*f~[zzkxDER4~M  ۉBGDfN9^XmFĘ3Zukf)g_*-"DX8(7ViM *+U0Y@ a uz (fץp1g&L0uvnG 2x5WHc̰Fa@S̀EEf<~Y(|.d? Y}&Ti+|=Կ]-Ruס Lz;!cCR$Ti9TXw@Y1eܤcMal jP̀ӚVM)D\׏ލxUm32 %hXɶUl5 (f a ̲8_q~l 81T3K/!͐&XZSjw[];ϋш\a.ynS5`<cݛcc&E)W<:| ?qUO& dC0+ʸh9 +9Y[4j i|tun }pOV(*bt%z6c%(Ig(GMLU~MB?",V uoжz@ r{0v!"&Tq|3ͧ.bT":sT[кmɘ)X<~7[` bRyK,^_t'Idei%I |n랧]]T#LmBȐ<=\)ىĴp)!*j6[+V~?>-J>V %HxAn_)13O;),`b .*B?dS.'W, *ҽ* z ]dIuyU$(U+˂޽bK9ɧjMBFECT<±-=mSܖgSYeαBJnl\Kc-z~D\ucŌ*VQsV[cq[z6 n.ت`Eks/Ǻ (I?wCG}1]!V;­Q["0 2եn2`Es=jqB,KfqWǺ>udϩ0SNA` 4z D*yQ)]NeV qX墲^nhޯixtTL3+e `:l& wb<&L܎XwUui5n*1q4d|Xg)WJl2iNAN()D[{2yRk~O/ye:Wz];P:"nKL[mə|-4*,0G^6V݋e;8ɤa0dKA'CKơ˛BP^2~W AR5!ύGzw?!/ke5t{r0t᫋"Ϩ XR_jUm(*z!:9J@|NǘVrCՏ6ANquVn0MUd"oudizfed0:mJ8bK kf;:57/.`C@%#s61|,jDyFNSTpVц;Ɖ4+%dXFV? R},*0nS@u2oQ -}ҩ"XM{8W"$E6SVԯh(XDu\᪲rџ W‡+U+VD\ak*Wn3X> vVjv'mtY%qz>VHauI ̾.6NT+T6t(-$ӜA1o:R ++Wrq6UM޺fm@!io#7NVnߛF+`}JawF ھVWa*6x5Βh]=^ ]CS+q/^tYtճQ2)NtmYPA)Pk}7c+U$lܰl'"{^ˉA?EAvf5*!Q\H(dۙt w}z:`Xbr gUa[laJ;cR74y@[bg)W "I/RB+tY%LNSs&,Vr"ď6/:0rYcݢZμ+u&C&NiWPN#KmR=ZdueZ:׽7:B9=¶Y{,Jn%a-V+bsK?]!trZ-{)En*k:9No`Ԝ4.^=ԯ}]lufΓ(lԼK(K. . `uӚ l֙2z3dͣ:׽: \;@;nݫmaXPxjK>@#gn\wW/J^U(6>}2y2ճxyy h-c.OrQn\VI9}昂gIDATʀ0X>o#mgi܍q}qǴZwv~hnKӏf! 薜>De:a5[atAB]†:wkyΛYَg0%RnH>>O4Mv V:ZJ+\\tGκ< jZQXtPK= +z#]ʖ.^t cyu^ualϬ4LuskTDX{b bӶA8(t/K(q1O|J.B ?"(ē1ɖ'<^S}OJQ<c}]X…%"X@%SDiϐ_Fݞ:zN%a Eԭ5 1Su *\g`6SJ[ϔ6Kksssל`F`)AM W`F`b0`UgF`+XpF`F # V ~x\uF`F= ׊`F`b0`UgF`+XpF`F # V ~x\uF`F=Kk5}"hT,c \ǩY%ۋ kɱ;sHP=t?H_3ܾ#2Tjl7n0rwjS,k|Y:1O 65ާuKp9{aODV6}[ک.?\ᑽ|؅aB3C#&F `A)ʴ ?#Lr]D#;AFՐjEW)!ؾWe8Abʒ>\t@)E\zJ:9!X9H%Ft*c ޤCMzQ69C h ZV2{TBD"$Lw= B נUċ-9QtnGԪ{]վljؿj={6);e ({1 +bj18-#_S`PF-eK;Эe0t_Zʼ\()]~kVJ %2?X>=9!ϳRXr_~O1 Y:=sKc*}u;љ'|̄k!z|"dlE^Y?=*[ KTbQ-$y]ۏvKvHI%ם1@ߜiDo]i~zZ'"{9޽{IG&dq0q\a1l?.cx1cBh,tDyèg_r >ui4DXP_sA:ҿlۑ=I|7o{΃;M wқ S矡kүF VIttI+ȘiMYXO=(+/vsx%L ۅ©h2x¹誈o냁,Bre}ێʘ|SUa^0HiQ꾢`ELJ䣿Ļzp 5RG ,ûM)sNΕY/[\Fa@S_Ɓ (g+}u @X@dz33k>9b #7~MAgN9^Wb/[H$Y w -G{a9 !(A؇FcD;$O%P1Y?5IQ4d7H6X@CIW[m$χvPޱsq!oQ֮v?K>_P|i7KVWʊi_Ҳ$cA>u;nMCݫieKCL~m) 楟+k_qo wCux8?iO4Ϗt"DZ~b"8~r㗆9gGH1cS$_|T8kL/k/|0Ǘ ӿɴ!'yǔb?lNO)+0ķs7|֏/,GU$6}0pǬK6ؾ38̳b{HLqR镦2͊MʺSP 7+qҖY/=ݏoCxɼw1=:Yo0oRc紲B21xƁJy]+}i됾~I[ƄR@-XXO L/=1D@kl#X/{A)I'%GFe +DӻN~1an&=qۧDO@2=+GH2I1!H|':|A9i,ŋq<ƀ`QY>g/)@kWqarKF=/ am,+y32Yq@)2(Oa%`_UI(VTVI1\IZV@נɫl$ZbaZ2s-U~ XXx0] HGU 0 E3y' ?[sMbZk۹E]-,NdezȞ>Ӧq":k5nV+NM:֤d`zN(Ң +/,\K=mN_ȨO#o"B=FR ek,GWN)6t0lR H+`1z棒cNIn=7'}lj]|JF||Qn  L}|Ybga#g>-ì6zwՖk$ ^8nx Pz)Ci0_aξn@uĔv+#T9 L-S+oS**NOH 7*_V*Wf\^1-ȩOL|iO ͥZ*ҤGlg-J(#ﯗ~a|h7xJ5tpKL0MKLft}pjk-SrrJ| @w|og lo⤉Bv6>@) i!,uY(mP1娢g.߈`iZU .ڸ,\ʻ-i:yoqġJ_'f uk2L}tj4d9A |@~Pvl!EB_^JO á_Ig6,IЃp[?>fs֏0 GfM8"QKAb*p*3mUF:V1M&|nʏfڌRס-(k9 Q+\]`+@G -/?>20FbHqoiG"ĔN JKJeFwr$d=B{֓~`ȋUber6:^T? a+l/aI@=S4`RGmvˇ nòd7*SQ0)^h0G4f~o?6uBh䃟RNϐ]}V9(U 42ʅ>cۙo} U-C|#Ty3 87*|`5#w9룝mW w1Hw >Qh#hTOFwb˙VW*4f>BQ6;a['(e×>VL utمd(r㝘&aFߋ #:nn(c/`gw0#X䪋 Ɍ{x=V,0#CmOZt4d l j`F` 9d$F`F`gXrƇSF`F+X! #0#8# 3>0#0gX g`F`FVTF`F`<# g8#0#02#0#V0#0gX g`F`FVTF`F`<# g8#0#02#0#qTO(IENDB`PK>r; document.jsonPKq`/fpages/2715B1E2-F523-4604-93F0-D158B27B6274.jsonPKS] user.jsonPKcŨ& meta.jsonPKSt*previews/preview.pngPKHQmodern-normalize-3.0.1/media/logo.svg000066400000000000000000001060351466625012200175460ustar00rootroot00000000000000 modern-normalize-3.0.1/modern-normalize.css000066400000000000000000000064121466625012200210000ustar00rootroot00000000000000/*! modern-normalize v3.0.1 | MIT License | https://github.com/sindresorhus/modern-normalize */ /* Document ======== */ /** Use a better box model (opinionated). */ *, ::before, ::after { box-sizing: border-box; } html { /* Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) */ font-family: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji'; line-height: 1.15; /* 1. Correct the line height in all browsers. */ -webkit-text-size-adjust: 100%; /* 2. Prevent adjustments of font size after orientation changes in iOS. */ tab-size: 4; /* 3. Use a more readable tab size (opinionated). */ } /* Sections ======== */ body { margin: 0; /* Remove the margin in all browsers. */ } /* Text-level semantics ==================== */ /** Add the correct font weight in Chrome and Safari. */ b, strong { font-weight: bolder; } /** 1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3) 2. Correct the odd 'em' font sizing in all browsers. */ code, kbd, samp, pre { font-family: ui-monospace, SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; /* 1 */ font-size: 1em; /* 2 */ } /** Add the correct font size in all browsers. */ small { font-size: 80%; } /** Prevent 'sub' and 'sup' elements from affecting the line height in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sub { bottom: -0.25em; } sup { top: -0.5em; } /* Tabular data ============ */ /** Correct table border color inheritance in Chrome and Safari. (https://issues.chromium.org/issues/40615503, https://bugs.webkit.org/show_bug.cgi?id=195016) */ table { border-color: currentcolor; } /* Forms ===== */ /** 1. Change the font styles in all browsers. 2. Remove the margin in Firefox and Safari. */ button, input, optgroup, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 1 */ line-height: 1.15; /* 1 */ margin: 0; /* 2 */ } /** Correct the inability to style clickable types in iOS and Safari. */ button, [type='button'], [type='reset'], [type='submit'] { -webkit-appearance: button; } /** Remove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers. */ legend { padding: 0; } /** Add the correct vertical alignment in Chrome and Firefox. */ progress { vertical-align: baseline; } /** Correct the cursor style of increment and decrement buttons in Safari. */ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { height: auto; } /** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ [type='search'] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } /** Remove the inner padding in Chrome and Safari on macOS. */ ::-webkit-search-decoration { -webkit-appearance: none; } /** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to 'inherit' in Safari. */ ::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } /* Interactive =========== */ /* Add the correct display in Chrome and Safari. */ summary { display: list-item; } modern-normalize-3.0.1/package.json000066400000000000000000000030671466625012200172750ustar00rootroot00000000000000{ "name": "modern-normalize", "version": "3.0.1", "description": "Normalize browsers' default style", "license": "MIT", "repository": "sindresorhus/modern-normalize", "funding": "https://github.com/sponsors/sindresorhus", "author": { "name": "Sindre Sorhus", "email": "sindresorhus@gmail.com", "url": "https://sindresorhus.com" }, "main": "modern-normalize.css", "style": "modern-normalize.css", "sideEffects": true, "engines": { "node": ">=6" }, "scripts": { "test": "npm run test:stylelint", "test:all": "npm run test:stylelint && npm run test:chrome && npm run test:firefox && npm run test:safari", "test:stylelint": "stylelint modern-normalize.css", "test:chrome": "testcafe chrome:headless test/acceptance/chrome --app \"http-server . --silent\"", "test:firefox": "testcafe firefox:headless test/acceptance/firefox --app \"http-server . --silent\"", "test:safari": "testcafe safari test/acceptance/safari --app \"http-server . --silent\"", "version": "replace-in-files --regex='v\\d+\\.\\d+\\.\\d+' --replacement=v$npm_package_version modern-normalize.css && git add ." }, "files": [ "modern-normalize.css" ], "keywords": [ "normalize", "css", "reset", "browser", "style" ], "devDependencies": { "http-server": "^14.1.1", "replace-in-files-cli": "^3.0.0", "stylelint": "^16.8.1", "stylelint-config-xo": "^1.0.2", "testcafe": "^3.6.2" }, "stylelint": { "extends": "stylelint-config-xo", "rules": { "no-duplicate-selectors": null, "no-descending-specificity": null, "property-no-vendor-prefix": null } } } modern-normalize-3.0.1/readme.md000066400000000000000000000035451466625012200165670ustar00rootroot00000000000000
modern-normalize

## Differences from [`normalize.css`](https://github.com/necolas/normalize.css) - Smaller - Includes only normalizations for the latest Chrome, Firefox, and Safari - [Sets `box-sizing: border-box`](https://www.paulirish.com/2012/box-sizing-border-box-ftw/) - [Improves consistency of default fonts](https://github.com/sindresorhus/modern-normalize/issues/3) - [Sets a more readable tab size](https://github.com/sindresorhus/modern-normalize/issues/17) - Fully tested - Maintained If you have questions about the source, check out the [original source](https://github.com/necolas/normalize.css/blame/master/normalize.css) and [this](https://github.com/necolas/normalize.css#extended-details-and-known-issues) for details. [**The goal of this project is to make itself obsolete.**](https://github.com/sindresorhus/modern-normalize/issues/2) ## Browser support - Latest Chrome - Latest Firefox - Latest Safari ## Install ```sh npm install modern-normalize ``` ###### Download - [Normal](https://cdn.jsdelivr.net/npm/modern-normalize/modern-normalize.css) - [Minified](https://cdn.jsdelivr.net/npm/modern-normalize/modern-normalize.min.css) ###### CDN - [jsdelivr](https://www.jsdelivr.com/package/npm/modern-normalize) - [unpkg](https://unpkg.com/modern-normalize) - [cdnjs](https://cdnjs.com/libraries/modern-normalize) ## Usage ```css @import 'node_modules/modern-normalize/modern-normalize.css'; ``` or ```html ``` ## FAQ ### Can you provide Sass, Less, etc, ports? There's absolutely no reason to have separate ports for these. They are just CSS supersets and can import CSS directly. ## Related - [sass-extras](https://github.com/sindresorhus/sass-extras) - Useful utilities for working with Sass modern-normalize-3.0.1/test/000077500000000000000000000000001466625012200157605ustar00rootroot00000000000000modern-normalize-3.0.1/test/acceptance/000077500000000000000000000000001466625012200200465ustar00rootroot00000000000000modern-normalize-3.0.1/test/acceptance/chrome/000077500000000000000000000000001466625012200213235ustar00rootroot00000000000000modern-normalize-3.0.1/test/acceptance/chrome/rules.ts000066400000000000000000000163501466625012200230320ustar00rootroot00000000000000import {Selector} from 'testcafe'; fixture `Chrome Rules Tests` .page `http://localhost:8080/test/page/with-css.html`; test('Use a better box model (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('box-sizing')).eql('border-box'); }); test('Use a more readable tab size (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('tab-size')).eql('4'); }); test('Correct the line height in all browsers.', async t => { await t .expect(Selector('html').getStyleProperty('font-size')).eql('16px') .expect(Selector('html').getStyleProperty('line-height')).eql('18.4px'); }); test('Prevent adjustments of font size after orientation changes in iOS.', async t => { await t .expect(Selector('html').getStyleProperty('text-size-adjust')).eql('100%'); }); test('Remove the margin in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('margin-top')).eql('0px') .expect(Selector('body').getStyleProperty('margin-right')).eql('0px') .expect(Selector('body').getStyleProperty('margin-bottom')).eql('0px') .expect(Selector('body').getStyleProperty('margin-left')).eql('0px'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('font-family')).eql(`system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"`); }); test('
should be the correct height.', async t => { await t .expect(Selector('hr[data-test--hr]').getStyleProperty('height')).eql('2px'); }); test('Add the correct text decoration in Safari.', async t => { await t .expect(Selector('abbr[data-test--abbr]').getStyleProperty('text-decoration')).eql('underline dotted rgb(0, 0, 0)'); }); test('Add the correct font weight in Chrome and Safari.', async t => { await t .expect(Selector('b[data-test--bold]').getStyleProperty('font-weight')).eql('900') .expect(Selector('strong[data-test--bold]').getStyleProperty('font-weight')).eql('900'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-family')).eql('ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace'); }); test('Correct the odd `em` font sizing in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-size')).eql('16px'); }); test('Add the correct font size in all browsers.', async t => { await t .expect(Selector('[data-test--small]').getStyleProperty('font-size')).eql('12.8px'); }); test('Prevent `sub` and `sup` elements from affecting the line height in all browsers.', async t => { await t .expect(Selector('[data-test--subsup]').getStyleProperty('font-size')).eql('12px') .expect(Selector('[data-test--subsup]').getStyleProperty('line-height')).eql('0px') .expect(Selector('[data-test--subsup]').getStyleProperty('position')).eql('relative') .expect(Selector('[data-test--subsup]').getStyleProperty('vertical-align')).eql('baseline') .expect(Selector('sub[data-test--subsup]').getStyleProperty('bottom')).eql('-3px') .expect(Selector('sup[data-test--subsup]').getStyleProperty('top')).eql('-6px'); }); test('Change the font styles in all browsers.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('font-family')).eql('MYCUSTOMFONT') .expect(Selector('[data-test--forms-1]').getStyleProperty('font-size')).eql('16px') .expect(Selector('[data-test--forms-1]').getStyleProperty('line-height')).eql('18.4px'); }); test('Remove the margin in Firefox and Safari.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-top')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-right')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-bottom')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-left')).eql('0px'); }); test('Text transform should not be inherited.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('text-transform')).eql('none') .expect(Selector('select[data-test--forms-1]').getStyleProperty('text-transform')).eql('none'); }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button') .expect(Selector('[type="button"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button') .expect(Selector('[type="reset"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button') .expect(Selector('[type="submit"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button'); }); test('Correct the padding in Firefox.', async t => { await t .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-top')).eql('5.6px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-right')).eql('12px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('10px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-left')).eql('12px'); }); test('Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers.', async t => { await t .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-top')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-right')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-left')).eql('0px'); }); test('Add the correct vertical alignment in Chrome and Firefox.', async t => { await t .expect(Selector('progress[data-test--forms-2]').getStyleProperty('vertical-align')).eql('baseline'); }); test('Correct the cursor style of increment and decrement buttons in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the odd appearance in Chrome and Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('textfield'); }); test('Correct the outline style in Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('outline-offset')).eql('0px'); }); test('Remove the inner padding in Chrome and Safari on macOS.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Change font properties to `inherit` in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Add the correct display in Chrome and Safari.', async t => { await t .expect(Selector('summary[data-test--interactive]').getStyleProperty('display')).eql('list-item'); }); modern-normalize-3.0.1/test/acceptance/chrome/validation.ts000066400000000000000000000165201466625012200240310ustar00rootroot00000000000000import {Selector} from 'testcafe'; fixture `Chrome Validation Tests` .page `http://localhost:8080/test/page/without-css.html`; test('Use a better box model (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('box-sizing')).notEql('border-box'); }); test('Use a more readable tab size (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('tab-size')).notEql('4'); }); test('Correct the line height in all browsers.', async t => { await t .expect(Selector('html').getStyleProperty('font-size')).eql('16px') .expect(Selector('html').getStyleProperty('line-height')).notEql('18.4px'); }); test('Prevent adjustments of font size after orientation changes in iOS.', async t => { await t .expect(Selector('html').getStyleProperty('text-size-adjust')).notEql('100%'); }); test('Remove the margin in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('margin-top')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-right')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-bottom')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-left')).notEql('0px'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('font-family')).notEql('system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"'); }); test('
should be the correct height.', async t => { await t .expect(Selector('hr[data-test--hr]').getStyleProperty('height')).notEql('2px'); }); test('Add the correct text decoration in Safari.', async t => { await t .expect(Selector('abbr[data-test--abbr]').getStyleProperty('text-decoration')).eql('underline dotted rgb(0, 0, 0)'); }); test('Add the correct font weight in Chrome and Safari.', async t => { await t .expect(Selector('b[data-test--bold]').getStyleProperty('font-weight')).notEql('900') .expect(Selector('strong[data-test--bold]').getStyleProperty('font-weight')).notEql('900'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-family')).notEql('ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace'); }); test('Correct the odd `em` font sizing in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-size')).notEql('16px'); }); test('Add the correct font size in all browsers.', async t => { await t .expect(Selector('[data-test--small]').getStyleProperty('font-size')).notEql('12.8px'); }); test('Prevent `sub` and `sup` elements from affecting the line height in all browsers.', async t => { await t .expect(Selector('[data-test--subsup]').getStyleProperty('font-size')).notEql('12px') .expect(Selector('[data-test--subsup]').getStyleProperty('line-height')).notEql('0px') .expect(Selector('[data-test--subsup]').getStyleProperty('position')).notEql('relative') .expect(Selector('[data-test--subsup]').getStyleProperty('vertical-align')).notEql('baseline') .expect(Selector('sub[data-test--subsup]').getStyleProperty('bottom')).notEql('-3px') .expect(Selector('sup[data-test--subsup]').getStyleProperty('top')).notEql('-6px'); }); test('Change the font styles in all browsers.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('font-family')).notEql('MYCUSTOMFONT') .expect(Selector('[data-test--forms-1]').getStyleProperty('font-size')).notEql('16px') .expect(Selector('[data-test--forms-1]').getStyleProperty('line-height')).notEql('18.4px'); }); test('Remove the margin in Firefox and Safari.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-top')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-right')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-bottom')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-left')).eql('0px'); }); test('Text transform should not be inherited.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('text-transform')).eql('none') .expect(Selector('select[data-test--forms-1]').getStyleProperty('text-transform')).eql('none'); }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button') .expect(Selector('[type="button"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).notEql('button') .expect(Selector('[type="reset"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).notEql('button') .expect(Selector('[type="submit"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).notEql('button'); }); test('Correct the padding in Firefox.', async t => { await t .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-top')).eql('5.6px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-right')).eql('12px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('10px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-left')).eql('12px'); }); test('Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers.', async t => { await t .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-top')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-right')).notEql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-left')).notEql('0px'); }); test('Add the correct vertical alignment in Chrome and Firefox.', async t => { await t .expect(Selector('progress[data-test--forms-2]').getStyleProperty('vertical-align')).notEql('baseline'); }); test('Correct the cursor style of increment and decrement buttons in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the odd appearance in Chrome and Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).notEql('textfield'); }); test('Correct the outline style in Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('outline-offset')).eql('0px'); }); test('Remove the inner padding in Chrome and Safari on macOS.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Change font properties to `inherit` in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Add the correct display in Chrome and Safari.', async t => { await t .expect(Selector('summary[data-test--interactive]').getStyleProperty('display')).notEql('list-item'); }); modern-normalize-3.0.1/test/acceptance/firefox/000077500000000000000000000000001466625012200215105ustar00rootroot00000000000000modern-normalize-3.0.1/test/acceptance/firefox/rules.ts000066400000000000000000000163571466625012200232260ustar00rootroot00000000000000import {Selector} from 'testcafe'; fixture `Firefox Rules Tests` .page `http://localhost:8080/test/page/with-css.html`; test('Use a better box model (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('box-sizing')).eql('border-box'); }); test('Use a more readable tab size (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('tab-size')).eql('4'); }); test('Correct the line height in all browsers.', async t => { await t .expect(Selector('html').getStyleProperty('font-size')).eql('16px') .expect(Selector('html').getStyleProperty('line-height')).eql('18.4px'); }); test('Prevent adjustments of font size after orientation changes in iOS.', async t => { await t .expect(Selector('html').getStyleProperty('text-size-adjust')).eql(undefined); }); test('Remove the margin in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('margin-top')).eql('0px') .expect(Selector('body').getStyleProperty('margin-right')).eql('0px') .expect(Selector('body').getStyleProperty('margin-bottom')).eql('0px') .expect(Selector('body').getStyleProperty('margin-left')).eql('0px'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('font-family')).eql(`system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"`); }); test('
should be the correct height.', async t => { await t .expect(Selector('hr[data-test--hr]').getStyleProperty('height')).eql('2px'); }); test('Add the correct text decoration in Safari.', async t => { await t .expect(Selector('abbr[data-test--abbr]').getStyleProperty('text-decoration')).eql('underline dotted rgb(0, 0, 0)'); }); test('Add the correct font weight in Chrome and Safari.', async t => { await t .expect(Selector('b[data-test--bold]').getStyleProperty('font-weight')).eql('900') .expect(Selector('strong[data-test--bold]').getStyleProperty('font-weight')).eql('900'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-family')).eql('ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace'); }); test('Correct the odd `em` font sizing in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-size')).eql('16px'); }); test('Add the correct font size in all browsers.', async t => { await t .expect(Selector('[data-test--small]').getStyleProperty('font-size')).eql('12.8px'); }); test('Prevent `sub` and `sup` elements from affecting the line height in all browsers.', async t => { await t .expect(Selector('[data-test--subsup]').getStyleProperty('font-size')).eql('12px') .expect(Selector('[data-test--subsup]').getStyleProperty('line-height')).eql('0px') .expect(Selector('[data-test--subsup]').getStyleProperty('position')).eql('relative') .expect(Selector('[data-test--subsup]').getStyleProperty('vertical-align')).eql('baseline') .expect(Selector('sub[data-test--subsup]').getStyleProperty('bottom')).eql('-3px') .expect(Selector('sup[data-test--subsup]').getStyleProperty('top')).eql('-6px'); }); test('Change the font styles in all browsers.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('font-family')).eql('MYCUSTOMFONT') .expect(Selector('[data-test--forms-1]').getStyleProperty('font-size')).eql('16px') .expect(Selector('[data-test--forms-1]').getStyleProperty('line-height')).eql('18.4px'); }); test('Remove the margin in Firefox and Safari.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-top')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-right')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-bottom')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-left')).eql('0px'); }); test('Text transform should not be inherited.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('text-transform')).eql('none') .expect(Selector('select[data-test--forms-1]').getStyleProperty('text-transform')).eql('none'); }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined) .expect(Selector('[type="button"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined) .expect(Selector('[type="reset"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined) .expect(Selector('[type="submit"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined); }); test('Correct the padding in Firefox.', async t => { await t .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-top')).eql('5.6px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-right')).eql('12px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('10px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-left')).eql('12px'); }); test('Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers.', async t => { await t .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-top')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-right')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-left')).eql('0px'); }); test('Add the correct vertical alignment in Chrome and Firefox.', async t => { await t .expect(Selector('progress[data-test--forms-2]').getStyleProperty('vertical-align')).eql('baseline'); }); test('Correct the cursor style of increment and decrement buttons in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the odd appearance in Chrome and Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined); }); test('Correct the outline style in Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('outline-offset')).eql('-2px'); }); test('Remove the inner padding in Chrome and Safari on macOS.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Change font properties to `inherit` in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Add the correct display in Chrome and Safari.', async t => { await t .expect(Selector('summary[data-test--interactive]').getStyleProperty('display')).eql('list-item'); }); modern-normalize-3.0.1/test/acceptance/firefox/validation.ts000066400000000000000000000165011466625012200242150ustar00rootroot00000000000000import {Selector} from 'testcafe'; fixture `Firefox Validation Tests` .page `http://localhost:8080/test/page/without-css.html`; test('Use a better box model (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('box-sizing')).notEql('border-box'); }); test('Use a more readable tab size (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('tab-size')).notEql('4'); }); test('Correct the line height in all browsers.', async t => { await t .expect(Selector('html').getStyleProperty('font-size')).eql('16px') .expect(Selector('html').getStyleProperty('line-height')).notEql('18.4px'); }); test('Prevent adjustments of font size after orientation changes in iOS.', async t => { await t .expect(Selector('html').getStyleProperty('text-size-adjust')).notEql('100%'); }); test('Remove the margin in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('margin-top')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-right')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-bottom')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-left')).notEql('0px'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('font-family')).notEql('system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"'); }); test('
should be the correct height.', async t => { await t .expect(Selector('hr[data-test--hr]').getStyleProperty('height')).notEql('2px'); }); test('Add the correct text decoration in Safari.', async t => { await t .expect(Selector('abbr[data-test--abbr]').getStyleProperty('text-decoration')).eql('underline dotted rgb(0, 0, 0)'); }); test('Add the correct font weight in Chrome and Safari.', async t => { await t .expect(Selector('b[data-test--bold]').getStyleProperty('font-weight')).eql('900') .expect(Selector('strong[data-test--bold]').getStyleProperty('font-weight')).eql('900'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-family')).notEql('ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace'); }); test('Correct the odd `em` font sizing in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-size')).notEql('16px'); }); test('Add the correct font size in all browsers.', async t => { await t .expect(Selector('[data-test--small]').getStyleProperty('font-size')).notEql('12.8px'); }); test('Prevent `sub` and `sup` elements from affecting the line height in all browsers.', async t => { await t .expect(Selector('[data-test--subsup]').getStyleProperty('font-size')).notEql('12px') .expect(Selector('[data-test--subsup]').getStyleProperty('line-height')).notEql('0px') .expect(Selector('[data-test--subsup]').getStyleProperty('position')).notEql('relative') .expect(Selector('[data-test--subsup]').getStyleProperty('vertical-align')).notEql('baseline') .expect(Selector('sub[data-test--subsup]').getStyleProperty('bottom')).notEql('-3px') .expect(Selector('sup[data-test--subsup]').getStyleProperty('top')).notEql('-6px'); }); test('Change the font styles in all browsers.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('font-family')).notEql('MYCUSTOMFONT') .expect(Selector('[data-test--forms-1]').getStyleProperty('font-size')).notEql('16px') .expect(Selector('[data-test--forms-1]').getStyleProperty('line-height')).notEql('18.4px'); }); test('Remove the margin in Firefox and Safari.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-top')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-right')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-bottom')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-left')).eql('0px'); }); test('Text transform should not be inherited.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('text-transform')).eql('none') .expect(Selector('select[data-test--forms-1]').getStyleProperty('text-transform')).eql('none'); }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined) .expect(Selector('[type="button"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined) .expect(Selector('[type="reset"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined) .expect(Selector('[type="submit"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined); }); test('Correct the padding in Firefox.', async t => { await t .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-top')).eql('5.6px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-right')).eql('12px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('10px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-left')).eql('12px'); }); test('Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers.', async t => { await t .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-top')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-right')).notEql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-left')).notEql('0px'); }); test('Add the correct vertical alignment in Chrome and Firefox.', async t => { await t .expect(Selector('progress[data-test--forms-2]').getStyleProperty('vertical-align')).notEql('baseline'); }); test('Correct the cursor style of increment and decrement buttons in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the odd appearance in Chrome and Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql(undefined); }); test('Correct the outline style in Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('outline-offset')).eql('0px'); }); test('Remove the inner padding in Chrome and Safari on macOS.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Change font properties to `inherit` in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Add the correct display in Chrome and Safari.', async t => { await t .expect(Selector('summary[data-test--interactive]').getStyleProperty('display')).notEql('list-item'); }); modern-normalize-3.0.1/test/acceptance/safari/000077500000000000000000000000001466625012200213135ustar00rootroot00000000000000modern-normalize-3.0.1/test/acceptance/safari/rules.ts000066400000000000000000000165751466625012200230330ustar00rootroot00000000000000import {Selector} from 'testcafe'; fixture `Safari Rules Tests` .page `http://localhost:8080/test/page/with-css.html`; test('Use a better box model (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('box-sizing')).eql('border-box'); }); test('Use a more readable tab size (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('tab-size')).eql('4'); }); test('Correct the line height in all browsers.', async t => { await t .expect(Selector('html').getStyleProperty('font-size')).eql('16px') .expect(Selector('html').getStyleProperty('line-height')).eql('18px'); }); test('Prevent adjustments of font size after orientation changes in iOS.', async t => { await t // TODO: Check behavior of `-webkit-text-size-adjust` changing to auto in Safari .expect(Selector('html').getStyleProperty('-webkit-text-size-adjust')).eql('auto'); }); test('Remove the margin in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('margin-top')).eql('0px') .expect(Selector('body').getStyleProperty('margin-right')).eql('0px') .expect(Selector('body').getStyleProperty('margin-bottom')).eql('0px') .expect(Selector('body').getStyleProperty('margin-left')).eql('0px'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('font-family')).eql(`system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"`); }); test('
should be the correct height.', async t => { await t .expect(Selector('hr[data-test--hr]').getStyleProperty('height')).eql('2px'); }); test('Add the correct text decoration in Safari.', async t => { // TODO: Why `text-decoration` is none? // await t // .expect(Selector('abbr[data-test--abbr]').getStyleProperty('text-decoration')).eql('underline dotted'); }); test('Add the correct font weight in Chrome and Safari.', async t => { await t .expect(Selector('b[data-test--bold]').getStyleProperty('font-weight')).eql('900') .expect(Selector('strong[data-test--bold]').getStyleProperty('font-weight')).eql('900'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-family')).eql('ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace'); }); test('Correct the odd `em` font sizing in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-size')).eql('16px'); }); test('Add the correct font size in all browsers.', async t => { await t .expect(Selector('[data-test--small]').getStyleProperty('font-size')).eql('12.800000190734863px'); }); test('Prevent `sub` and `sup` elements from affecting the line height in all browsers.', async t => { await t .expect(Selector('[data-test--subsup]').getStyleProperty('font-size')).eql('12px') .expect(Selector('[data-test--subsup]').getStyleProperty('line-height')).eql('0px') .expect(Selector('[data-test--subsup]').getStyleProperty('position')).eql('relative') .expect(Selector('[data-test--subsup]').getStyleProperty('vertical-align')).eql('baseline') .expect(Selector('sub[data-test--subsup]').getStyleProperty('bottom')).eql('-3px') .expect(Selector('sup[data-test--subsup]').getStyleProperty('top')).eql('-6px'); }); test('Change the font styles in all browsers.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('font-family')).eql('MYCUSTOMFONT') .expect(Selector('[data-test--forms-1]').getStyleProperty('font-size')).eql('16px') .expect(Selector('[data-test--forms-1]').getStyleProperty('line-height')).eql('18px'); }); test('Remove the margin in Firefox and Safari.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-top')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-right')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-bottom')).eql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-left')).eql('0px'); }); test('Text transform should not be inherited.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('text-transform')).eql('none') .expect(Selector('select[data-test--forms-1]').getStyleProperty('text-transform')).eql('none'); }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button') .expect(Selector('[type="button"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button') .expect(Selector('[type="reset"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button') .expect(Selector('[type="submit"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button'); }); test('Correct the padding in Firefox.', async t => { await t .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-top')).eql('5.599999904632568px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-right')).eql('12px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('10px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-left')).eql('12px'); }); test('Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers.', async t => { await t .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-top')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-right')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-left')).eql('0px'); }); test('Add the correct vertical alignment in Chrome and Firefox.', async t => { await t .expect(Selector('progress[data-test--forms-2]').getStyleProperty('vertical-align')).eql('baseline'); }); test('Correct the cursor style of increment and decrement buttons in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the odd appearance in Chrome and Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('textfield'); }); test('Correct the outline style in Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('outline-offset')).eql('0px'); }); test('Remove the inner padding in Chrome and Safari on macOS.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Change font properties to `inherit` in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Add the correct display in Chrome and Safari.', async t => { await t .expect(Selector('summary[data-test--interactive]').getStyleProperty('display')).eql('list-item'); }); modern-normalize-3.0.1/test/acceptance/safari/validation.ts000066400000000000000000000167031466625012200240240ustar00rootroot00000000000000import {Selector} from 'testcafe'; fixture `Safari Validation Tests` .page `http://localhost:8080/test/page/without-css.html`; test('Use a better box model (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('box-sizing')).notEql('border-box'); }); test('Use a more readable tab size (opinionated).', async t => { await t .expect(Selector('html').getStyleProperty('tab-size')).notEql('4'); }); test('Correct the line height in all browsers.', async t => { await t .expect(Selector('html').getStyleProperty('font-size')).eql('16px') .expect(Selector('html').getStyleProperty('line-height')).eql('18px'); }); test('Prevent adjustments of font size after orientation changes in iOS.', async t => { await t // TODO: check behavior of -webkit-text-size-adjust changing to auto in safari .expect(Selector('html').getStyleProperty('-webkit-text-size-adjust')).eql('auto'); }); test('Remove the margin in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('margin-top')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-right')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-bottom')).notEql('0px') .expect(Selector('body').getStyleProperty('margin-left')).notEql('0px'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('body').getStyleProperty('font-family')).notEql('system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"'); }); test('
should be the correct height.', async t => { await t .expect(Selector('hr[data-test--hr]').getStyleProperty('height')).notEql('2px'); }); test('Add the correct text decoration in Safari.', async t => { // await t // .expect(Selector('abbr[data-test--abbr]').getStyleProperty('text-decoration')).notEql('underline dotted'); }); test('Add the correct font weight in Chrome and Safari.', async t => { await t .expect(Selector('b[data-test--bold]').getStyleProperty('font-weight')).notEql('900') .expect(Selector('strong[data-test--bold]').getStyleProperty('font-weight')).notEql('900'); }); test('Improve consistency of default fonts in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-family')).notEql('ui-monospace, SFMono-Regular, Consolas, "Liberation Mono", Menlo, monospace'); }); test('Correct the odd `em` font sizing in all browsers.', async t => { await t .expect(Selector('[data-test--code]').getStyleProperty('font-size')).notEql('16px'); }); test('Add the correct font size in all browsers.', async t => { await t .expect(Selector('[data-test--small]').getStyleProperty('font-size')).notEql('12.800000190734863px'); }); test('Prevent `sub` and `sup` elements from affecting the line height in all browsers.', async t => { await t .expect(Selector('[data-test--subsup]').getStyleProperty('font-size')).notEql('12px') .expect(Selector('[data-test--subsup]').getStyleProperty('line-height')).notEql('0px') .expect(Selector('[data-test--subsup]').getStyleProperty('position')).notEql('relative') .expect(Selector('[data-test--subsup]').getStyleProperty('vertical-align')).notEql('baseline') .expect(Selector('sub[data-test--subsup]').getStyleProperty('bottom')).notEql('-3px') .expect(Selector('sup[data-test--subsup]').getStyleProperty('top')).notEql('-6px'); }); test('Change the font styles in all browsers.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('font-family')).notEql('MYCUSTOMFONT') .expect(Selector('[data-test--forms-1]').getStyleProperty('font-size')).notEql('16px') .expect(Selector('[data-test--forms-1]').getStyleProperty('line-height')).notEql('18px'); }); test('Remove the margin in Firefox and Safari.', async t => { await t .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-top')).notEql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-right')).notEql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-bottom')).notEql('0px') .expect(Selector('[data-test--forms-1]').getStyleProperty('margin-left')).notEql('0px'); }); test('Text transform should not be inherited.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('text-transform')).eql('none') .expect(Selector('select[data-test--forms-1]').getStyleProperty('text-transform')).eql('none'); }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { await t .expect(Selector('button[data-test--forms-1]').getStyleProperty('-webkit-appearance')).eql('button') .expect(Selector('[type="button"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).notEql('button') .expect(Selector('[type="reset"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).notEql('button') .expect(Selector('[type="submit"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).notEql('button'); }); test('Correct the padding in Firefox.', async t => { await t .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-top')).eql('5.599999904632568px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-right')).eql('12px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('10px') .expect(Selector('fieldset[data-test--forms-2]').getStyleProperty('padding-left')).eql('12px'); }); test('Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers.', async t => { await t .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-top')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-right')).notEql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-bottom')).eql('0px') .expect(Selector('legend[data-test--forms-2]').getStyleProperty('padding-left')).notEql('0px'); }); test('Add the correct vertical alignment in Chrome and Firefox.', async t => { await t .expect(Selector('progress[data-test--forms-2]').getStyleProperty('vertical-align')).notEql('baseline'); }); test('Correct the cursor style of increment and decrement buttons in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the odd appearance in Chrome and Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('-webkit-appearance')).notEql('textfield'); }); test('Correct the outline style in Safari.', async t => { await t .expect(Selector('[type="search"][data-test--forms-1]').getStyleProperty('outline-offset')).eql('0px'); }); test('Remove the inner padding in Chrome and Safari on macOS.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Correct the inability to style clickable types in iOS and Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Change font properties to `inherit` in Safari.', async t => { // TODO: Pseudo-elements selector not supported by testcafe (See https://github.com/DevExpress/testcafe/issues/2813). }); test('Add the correct display in Chrome and Safari.', async t => { await t .expect(Selector('summary[data-test--interactive]').getStyleProperty('display')).notEql('list-item'); }); modern-normalize-3.0.1/test/page/000077500000000000000000000000001466625012200166745ustar00rootroot00000000000000modern-normalize-3.0.1/test/page/with-css.html000066400000000000000000000025421466625012200213260ustar00rootroot00000000000000
HTML
BOLD BOLD

		
		
		
		
modern-normalize-3.0.1/test/page/without-css.html000066400000000000000000000024321466625012200220540ustar00rootroot00000000000000
HTML
BOLD BOLD