From ef2a98a175c0fbaae318425fa198749a3e67d877 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Tue, 23 Sep 2025 10:07:19 -0400 Subject: [PATCH 1/7] docs(theming): Adds new theming guidelines. --- .../styles/theming}/dark-theme-handbook.md | 6 +- .../styles/theming/img/components-dark.svg | 212 ++++++++++++++++++ .../styles/theming/img/components-light.svg | 212 ++++++++++++++++++ .../styles/theming/img/figma-dark-mode.png | Bin 0 -> 56437 bytes .../styles/theming/theming.md | 80 +++++++ .../content/get-started/release-highlights.md | 2 +- .../content/tokens/develop-with-tokens.md | 2 +- .../get-started/release-highlights.mdx | 2 +- 8 files changed, 510 insertions(+), 6 deletions(-) rename packages/documentation-site/patternfly-docs/content/{developer-resources => design-guidelines/styles/theming}/dark-theme-handbook.md (98%) create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/components-dark.svg create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/components-light.svg create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-mode.png create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md diff --git a/packages/documentation-site/patternfly-docs/content/developer-resources/dark-theme-handbook.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md similarity index 98% rename from packages/documentation-site/patternfly-docs/content/developer-resources/dark-theme-handbook.md rename to packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md index 0badffb58e..8414ebf4de 100644 --- a/packages/documentation-site/patternfly-docs/content/developer-resources/dark-theme-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md @@ -1,7 +1,7 @@ --- -id: Dark theme handbook -title: PatternFly dark theme handbook -section: developer-resources +id: Theming +section: design-foundations +source: dark-theme-handbook --- ## Enabling dark theme diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/components-dark.svg b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/components-dark.svg new file mode 100644 index 0000000000..9a34db1186 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/components-dark.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/components-light.svg b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/components-light.svg new file mode 100644 index 0000000000..298db20125 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/components-light.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-mode.png b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-mode.png new file mode 100644 index 0000000000000000000000000000000000000000..508582f3213cd4c376bf9df58de22bb925a4cc24 GIT binary patch literal 56437 zcmZ^~1z1$y*9J<5NSA_iOG`HbDh-0tAs{8qP(vf#DBYkEO6SlZEewrx$I#t<4+{Q& z_q)&KnQ>7#WXV6oG?# zC~qz)sVpNYNvUjaV`6S;3#286@u%ZJX0~p`hhN9NUKDIzu89;9|NU!M0nPZ3^xYXMBJH`lACMmf{HTH81Kvn z|HZOMfU)9w{6;@CPMMY%&Rgnv3VjTQJ(VaL+zf40*FGGjER~HYkJ69UJgSjT&rzug zRTdr+TB|H@6E+N*;uE*{pQ6LPcNEo+gZF;Px1@RY@nNoH-~a+curiC!7`9>h)YLDD zpp~aI0lc<~H7e<;$G(c~v)n@{JZG0-&+|jFilPu(?ai^g&TkSUZglNI1c)GwmLF+M z7{RaGA08ajy4fe-4y*0d?y3~e zYXSX{6``2n1u+ZTk7*WuUJvFBsPqYHOOotGer=Y&?hF?i^Ih{aH1X64;=#~q)X8o0~QU4 zbaOC8Kkly%f9zIj0%W8gh8@4CW!&>aI*z`9uQ`8|RHbq={Fo&_Aznse26F{1E}fMi z8XX+WExcJXM>Y2t_3saF^(x&^l2&&Q6X(#6_1Hu?%8UT%uHU$;4f~(pBh4h5h-7 z{d}Id6s@X$e&`wnmnQ!55w`+ZbZbIJWctd(05D;5V=ZM5#w6L4dFQb z9!ZtAVcJqmVPFTUi)p0V@osbCbU3>;t4fg0&EM+oU@u{A7x_ck_X!b>nPTesO@=4eLjWH04IJw&0H{0k1C^ zc_m+c7&EWJ`oRdgGV*-Wkc|mT78>Jn@Z828CvN7o%%!VD6Y@@NQ8Xkjrq3rYE?(3? z9QjE0cHt-C$v2xeOeoRNiW2Ye;~J9&F->FoWknvvR7L$a9^fzL;I8;jLYjiQ^u3)> zBfGf>D#JZmgbrL5QwCFYxR{H`^@C&j8XNuR39Pf#XN`z+9(54NNvAX0AwS&3)I7ud zu5)hyCWMFwu9t#{@%`CTEOkA!-R|dsHtC`qC@@4=ccA+MtBG?^kj zmqx=hpga#kHw+%5=|v;mdyeqQmKH@uLgmv#sgI0NiJk7>kTip1Xtbj~yr-~#BoM44 zJ`p9T3NHO)Uwi!AvJ0VJV0wGeJocXTC8^I#4%#t%VRYeUehCzVr3J$Uj z+6}%{L0v=C47ZeUqDTD{{R_{Ysye1F+C9uY_A=};@rz8!Hy0IZCW$VGu4i4mvNX%j zvV8Xwf4r#3c2!->)f@&7Kl{LX^zexMC_E`CDKRNft2{}=s!%I&La*ZB1NLvx9~OC& z-$B1shY8o^emm!;D>r_<4tV)hbKuhKSGn+niWbin!4~|MFN$Q#Yu_BI;e@ZRGhgS} zyUjCAF7Gl?XUw1`prrdBwDSCFbj zT%KkTU0zU*Sm8f`Q4aZ#KIjQ;dIWpOCfStGH`dPIvf59zuCcM}Q0gG-;IvV`?y&J; zqh^(URdJ}GU*yMRZ)<{@JULfjby#&eIQq;yVSuBTW1zULsO!&y-)Mx9@Oh_&sn?5e$6*ZYMZ|2zJ#7)lU6|mk%m5XmPST63; z$kCk64#=j;elWzEU67sLli#z@^PuNAVVW-|sjO$HM?IM@*;zY5Bdj99{I$_uGF{te zt3>nak^PiqH)e}GsXTwRBelMQqkQlP@(9n!iKQ8D1Fx#(Q>(&BJgf1_@k&z5qOnY; zLZ?J0LZ|qx*KT}nC08gHmAHPm0Q3=kp`91&`GV$S&t zycF_j<)tUc-m%MW0_NZxbDZ1%+W#xbt9qwO5D~vRzdnTmDH*qG?`pt6kV&vC;6Vyon+zvCHN&=O(DZjgRL>2m4@-80)iU0s7Eu2jz+ zu(P8USr(=0^>t`O;)aj&!b%{Ce6wz$&b8Rx48KjwlxmBVt zGK7|e9t_U@(ua9<-iVAw3x&E-!(pIdF=Clv4r7I3vtYa9yeEpmeS<$twn-vPb1H>K zMa%O3MJH<-u2NGT%rUSgu=jxoSvENlsT%n);}n|?(F{Kk8L6Pt?=d&rINZ-c=h8U8 zLUjniVqJnCWQRYQ89KaicyTzC@S2m$sJHEzAw%1CmaHj!rJb?iMb)Q8lknP@_ffQpAEfE&7-(&jwjWdQd-j}05RArriAl!KXOK^}HTd$g zH6{2J!vMn`1DQ14H~Q>t`K#v0CG~x`K^OClp&DeJpISdLGSh7KzF+(` zL=TbK%6c()%#@}&BEJ^r|Esba_Y4UvnTB;aVDoy6(Njejdh)BN^M-@RVBN=DYlwD8 zD|=EwU-(M%x$;kTuHDBUANO!6nD!>0*%FzK#Eo}umXG&o&oS zM1q8cEbc;LcAkp}Uy(t?!q-fvIZ4#v)S3eY{(2aEtj)y1#1(Ah^)Ay3Hf_xdp>&FL zS#+%(^!xJf z?}u`L^#y?-*?i9{|G_dXJC)RUv{vb7wc=@Tqf$Tp&h6K6kr1uWM4sUfMfF;B^&Rf1 z>U@-f*TW9mvg3}%&Q03^T7eU+ZV7I(#~b*AQrkz1vW7jamO~eXRR_sEtR{l3S zfx`+#8-;!OHa5~9%!Hn}R#gw=?e*h!&;if39A%;{Z(MTvUf5Q#++S4K zNdCdmqM&xuvwA+HBeuPg)2gHJTu%hdIyW)CQMVCqEj49U``GK?xFAM*3*rw+pZ!&R zunxJL6`f6Wi?l5|ZGc@3q6T0;^@3b^DAj6T3K$)?8@pp0?qiMYEG(qz$IU ziE@F}uBOhws;0^-v108v1A7wZ3n2A@bS9_A( z5H@-5n?++aZIHqBe};S41fp@QTX!E*$N8ODiS2Xa_tvztVF5*)^)e@N`=b{h1a7Pr z6OK7oNeP}Z1VuarRs2;Xc|M|Pbpt4;6lZ??9q4ehe2RP5CS+ay+;>(|JL8QbyyT=8 z{JQ_g^EQzQAt1d7G1ibVQBZ(;3VcU{LxLxPLk7OV18-4y(tqDy!ZX4l{uxJrg9|i= zL%O?15%|3Qivr%a&;0#F{2Ty>3jD$Y-Yyvk_je=0G7#^-!@B_2;GU~W%E$npsz&z4 z#?~M+8;9hI$r@k)-Bwx?1P4b%cl(ByQK8)h=#QAc(QwdEkQX$vv0^iLZ)0f8=3-@g zO9xKaMG*LEW$a);>0)JR4H9$_q5gA+An^Tmn4OyP&n*rXBGeiR%9N5e_QsUFY#eMH z)S?e4DJg~R-f4F_{r%7DxJoTjQ ztb+l3K>rg@N5UuLxo@q7?MJyxe~C{L+8I^EA&1yjOl{0a&S+FfCv)3BWo$9yaQeI& zqlG)_F1Ba3*4&(TY(&#*H4{@)uX?wquVG-5?Cu0kqijKBTpaj6FQ07c{=vb8BGcWu zpWq^kxh5aao26gT_(L8STM$pTbWsny6N|5CLEe8};(|Vq8CPZx)8d>^Kd`uDC^aR* z?W>;_i58mtjoR_?-vLYo@#ebBJSBhPyIJ zF(FKU`5C_Dr^eOM?vBBzbl|$D=mhiK^A)$xV{{1y-q9as0wxqJctj}ohhT;(ZWPDP zo8JYYgm(f|0t6@b`;+eOcR&K}kH{zlh1?00iW9|A6dj_>`IjF-9^ks7?p2M;UoH14 z0{oZF!q<5I{q1@?KXygNvwOv&-cCrlD_C$h0TM7D;v+4ByXkvh-ah}ks!;tef8^-W z38O{@x$<}NDbpa}!FUh~hVJQ+1HZv@X7P9AxP<_IOo|M2)Bg;J(*W$+_-Uy;e(^_r zQW>(qe0fM}4AOv%cNY@3%yH$_lM@SR1qq0v7vUt1CMqqYWNk+z>s}*JZW>~gnl3;Ji&NJ6%43l zrR{6#J=ar6@(GP+u;lGb)j`3Pg@jIVPJJ)_!oy1~lX@EyWsY(-ZJNHn{mY1n}rwPR`F}q(H@2M#b($J&v zg75s{0FNW@>}1w!=Vio`wU^-}%j`}+k%=8JSj(d}e&@yOE0x8SsWwm14BlHPMhegn zt)<|-3X=li)a+PR&Jg1Et9V4@*$v1C`%CYv`F~e~f?U(oL<@#gSWb0O;2JGdl0=K> z&T$q1I}mrseZRA_I1(N(z#u+Ae@?-}~Wlr5ON0dSANz^<$|F96&h| ze&zpcltBp$d<=^D>o?*^DuBv!z6@a9(Zlh{2Rx_jvx?xoHkAOmMDVR}?Im)awaTvw+ruAE?ErV~&CY4!0Nr#mg=;sazHRdAmM0P|`hd8Tmu4o}ojBYG?5 zlC8F4vQ7To!9N>tp_wB2QbdTp)FY-dfI#1O|}lU6ev zd(Tqf?cTw0C|Cl}Mn;=!xSp=UT9?){JaapV(RK@7UEk+GKd8wkBD_~ANhqKsqu=qe zz;@Ul*A#EGQKST(#H-Z*+IObI)sce8vu?GLfN#s zG5gB5p2u*N5ECV5V1l#+HW9D+|7++BYczM#>f*>qopDmm!=RUD={)x4>SpeMQo{8E zYY^_Vv}y|skm(^m1s0KbFcQf?_%z$w?ah~8_KeUE+KVK0eeSI6zz;YfRuKXr;1?NE z2QuFkoDkTvGAOQ zp>t8aro*+YMk^SEe!zd#Rd{o?1-A_f#YH`@I}& zfWWDF4UQGm{qjh%xG;@hMc}2$6vroW0zWIupp{(5De-MTP|y$7=P_SYr)Fs_=rm8E zG2g9jcwELrfahPU4jF*LQ1Kbn5&{=4ju$WJ<7V>L&_MWGuw!e~v15DI4LsP(@=`m- zF5E@G4_du+P-bnfE`_@_AxH;kQ&DrP#thf&0YcjY5dQSp)NkDRZ(MoR1q|@r@k%P^ zr--8b&P&D&pAnDyHfeNA(Jhsu&>~=#W{5A%()v9supUx5-_9&na;v zLEKx~Z^moh;F>)HXdhT9-ZbG$m&K8$xd@I(jvlMO3P0H1{l*7x(?NtkDv_{LKBOps zn^s}@+y1QA^;%_UV65o~?{i`1t>|^bBt!Q{IwgVtpgaKrEg*(4<3OmugPCi{Hw9Yn zn43pes;edhQpbRdsCXgP+6=ti0(*;*Vrkl@`k$+e-Re;+{5sXGepK zsaA#*`6%MW8nTdcck0pgO!9?dD23Oh-3;~PbXnbGKd|1^#NVg{I5ngE#YHdL5 z>~@Pg^p|Bc&zVmNyGy+=XzUIq0Uu-8|RBUSy=B@Kh!;)=gOp?_A!2}s@8CK?V zK9;x|iT;o~NCd)PjwKlU-N_aFLSQmKtWBdy0jmBn)(6;w`i>AJ3EC0f|*Fa4S!^en7~b-6!8pMSO(##OUD zU27`39m?KdTh=F9yD?Iroo&<}NwL##xi80eG6f=bOj8m)Yjwk<)m8lt9<+jMDC^i@C@_GT@;d-;B%Gje)O$&ZgH_oRH=R%vGe;RX@qx zHcPg9g?1c_IwBlHSxSQ@&Ax_TzI$2kdelXBF|4XoP3AO4v_;!Nrd>gU8!>FEHf!pE0t1Hf+{o9~~%z4Vry8dVcBl_H!S)vk1VzALnH##?i}Z5HE2vBoIvQ4;PPS=StDN<8 zbG|-XiH}_wctx>Qv;nLnkgfO7LMZ#T=hcROt;g|rj)H)t@oInOc7)LOZc5|zxdr>u ze9sYE{o!C73o*^<%|ZH2RUo-*r^waekY37=OUbm;q(E=_o5*V43Q7cIG>38yJ`1o2 zu(u@ox0Ypve(hmUl(b7@*A?#5%AY(UsM-Ejnvlyr`hm?LO-g<8Zdn0G2DNfg^ApZn zC#}&mP5q6r_lg|cx>Yf%cRk^fIN>;|JE@z4esFztQ7f>LG9DM8c~C0zo|?#B@3P6a3|eL(E})# z8}qY`l$FwMwgXJG%2~fNz-XJ>wL7AGu7_rg%mlD3SoKcBMUC5bbq62L*cprHMt+%n zofRo2&Z{SOeg&1mdu&y6A2Fs(lC4HegfJh}b>f?O&yg@FrmT*xq&n+)d205HV0pxf zXVCbA;{*mUbXBrgVDuaq!K!kBICQK(^H=;^zgLG6%c`#?F;~wP1`3B(#Ayp`)^wTM zMse^Zh5TD+vh>Q4&6jya4ff0h<)4W=0Urw#y4Wlui&NK`WMW@9Ki?>_aqgjqj{6vs z$?aw*Td(`C(8cR4u-0#0^w@YVo|HU!02(RzL6d!PytUzf^@|~WQ@5^UliHA2$M*SW zfvI11c^w{Pa-0%G-FvSnJeIEa;~T3CS^~hhuD1a$Kx>df(hGdvgU{IV9F=SdC#O&N zAPl0iD62@W@r^Zs!<5Y8m@4qeLSF}*OMZMZ1N%5&zi&2hKWX4Mc$*)eoD=K0{0y1b z+^j#DX;4(t0~_yz7jKq!pSR=lw-}{?VRn6@7x^0#6?tM2xQBg0JHm}&FH+BaXfWx~ zoLCMKQLzp`iaJxX28rV$3CboUGqO8!JJq(zqJzpvi1Bjb*a$K+d4y;8G>673epB-r z=;c1A*4LCzh##5*;?>CF00pk4t_;$~9ji`>^=pRoJVzZ?G*N;euZmmM|&nf4Q) z8N{X#ojNgq9N@%9GsLYkq`MEEWI=@Oj5?kvxolUjxVOM}o5Ti^g*9)~UmZ_Q`=F9b zKb!S`2YB@{0(rb=`-9Wz9nX~rv1^yc*@h~$va#3k2R(f0TPiFFiRcb~97=f0^2q_x z?7ToK75Gu;JIgW}XuoXn0R8maftp2f@VdQUH4i_KXy?Vn6x~G}LE`iXM~u)CsUc@l z+|$d0zS_7rA}>}nRggi)=lYxL3rO`#d{~t{jkR47mT$0mW#Z~XfADAT_fchZaT?9q z&ONSudyQ9HHuZ0xV4MJu#Mm(XL) zMD*Y-K1|!P#2;e9u#9ibOs{m_bF<@hgMob#j!2(irwj4i?`A0rJ5d|6f=t(KSS0&? zArvM-8z#Jb74~SJcgDr2Ffza{LDvv$qmGIcFYpH^F`BwD zT|t@Ypb8m8c<}~;ZoNIR^-)y?evX3rx^bmNc$moaPyw&+m{_F=@hWbDFYkgMsSHdX zS9}s#Rf~fjs%WZP($mM)d7uIg?*Wym4dmL*Do7XzBOcym?yINnk?bNSa|LFc23Z0Q6~6HWP@g+G#vUISU;tTV;j6gU4SWY$xr&8!TwBs|nTuF2c!&{-YF z#}Iv3C4nK>zRQB9tV}20!Y#`W%*b}2+0)_>!}st^>U*&L;EEhEOg(g277f&;X)Ow5 zEV)*xl6Mj&rHI#~AM7F*DB3E zqEbr7kfCvhmSPHl1gC!Ik2D8&9!Mgpc;*J{8x%hbn(!t z4!M3Oe?)teBwh`uWL~2Vy|zfmLQ#2=+YCZ6JGx_3AH|bWhqK~8c=j;I>#a&cbQbz= zdnpr*h7Ze+#a?~iaHK3I|}WQ)@2d`4Y8cf^ULzov1W^MC!0ziAxt zy4_CB)Owraoo0@gAd!d8J`*43_UU1GPNe&z&QYC%vIhqrmJ(^9OblvPh0*XQ(uk56 zVQPJ5dr0T`LmEHfTn>8z-Rj`|9l}f^I}pFlE_&clV0&`|b_)Wep30v}VIUZ`Gf)&{ znfI5ttddw`W`zo*2fvN$F0l=a+qaiuUd~l3eio-Hdcn#b2!xLnA2iPH5hMm`Wu@jP zC0!1>NGS4ODV$aKmt$0?8gH&_8aFB@twDMDr6KxQ{$~%lpmV59lkcMy+|xUOm~A#O z@08u^Ozy<%=EUndK{=re9)p|REXaXn0Xlhgbu#NV9|ZS82OsBj(z>>Q!tqHrAIN1= zl%+Lnsn>lqlQ6BcZm*rxvx{eH-5gH5j;rXrq=S5;O$cmC2>VvxkY?U2oDzpQub?~s zF>(dI?vYPgJ9@T;QK5aaK_D6Im3fD+5AGK3!(ogsPpEFjj3U7(Xr3tNs(;p@Y=SAP zIuQJHeK3q(HbiDH97XY4Jhhi%?@;GT;8=N*rPb5DrQcgk2hGg*i;)5UDiis*;=+P7 z{P+vk4{=R*d69Hg-hDf^svK|M`O?QrlY}pyK=UJ!;>kb{caN*6nw^Yu*S9>xHr8ErA7 z;PI4lG}nJbi;>9CFt8@F-#|@U>azB&_9r@IF=k$_`k(zm*$8x;$8NOIum`~yY zJdS>=J5zWZz9wZZKtE_B(uUS%P`IvU&a8){Npag0|3vW=wTff)Yrgyv%C?`J2)Y0w z+`R?&HbV8og=FHYZ{pRD>r>nxeNEWnmQ8vVlVx)A^iqPkYmJk4i`cm!OE_&noz;Y9mL; z+89f{AueNpcuBLcoS1EyE3wd(CR4{-)dbR4_=S~ebZjq{OnyPM%;n!jdl7vib47l$ zpmm$}mi;H~y|sC)IQfHvKnl+>Qvs(U;&v; zSixWx8cH8nNf{V9KpuS7_Lyk-1+gyo%6aNeg2cs-Po@o^2nw+oeMFs}3rc<0;{iJF zc7lkt@iNoQr3rQfWOM>%=&$~K7)#*7Wd2I)ywl(^#=Kpd*0==~v|tm>0YUc_nh6tM zx4VUwtEZWksVY#DEO@85n~IPMS5e5!~K^N$z; zaBH6k2IUZroMD(#ngeoX6)%RHO3i8IZq;c+`H|LxgYswGL&t`7h@~1MWu>1u`ebF- z{%v`;AfZ_725~rZttM2}#~gs&#iwx?-zI?IgFt?K6bQ|NDbHB*7$YfGxVlg24AOAl zeEJ0yg4=L;R2-$=!VF-P-|~&`P$C?k&j5xgmk{r;xJrqei-@p{b|A>u5Y15(sKwa$ z5D1`W^l1Ar#x!17`1k@)okckh>V#peCi!nejkg*8x z==N?I;v)?364%IjaGz$Ks}Eq3S;aaSj!;=5Jm*YOv>4*x@5E^RkivV5E({f+2h?I#fowO zGCHJI&!&Tv^s%X`Gxn;sGpqiS#7?Jwz3Ea{VgD0A#^kT$j)eER%>)L72pSdHfISW# zK}<1Wyfd~Vv)&Su^8NXHlHkK3Q#u{Vro#5d+x$x`s8(|w z;{3+&Jv%J7{AJNQk^uuRy$2>bl#?Rh}0BAGz;RCGJD1RB<8$w)yEzXP-i)+p(l% zaUTC#KQL%ksOBE=&PDf8PLT5+MXFY${v)(91JYBfF*@kRw`Xr3-Z`<^dxWpAB9Gg4 zhH{i>^aHv89sW5mjBy#?egk~lUl;WrzFeV+dXJ0E3QLU)D%7}RWDxy5E`aH+U6#MP z8*GWF9ZR(hhj72xD2l{vUX zga8)DmWDb>2Mv!fytk_@!Woj?M3#TYSZUi6E&yxrT6I6@iSKSc#y?1WW-Mzmkk&1Q zaWCp~BnboPGc`NINo&rwGUHGTt5AKF&m0hLtNk|=pq4N9_9lt<4qi4aY>JQx{ngC^ zt16AQ1~9j606qcT=GCN}hJJ20S3oaDy4N;PEED3ho~klbEGoaBClkr_cyrD5WP1yi zXi5$NfRsNue?e*2Q|meu3ToDW=zRlW z2Cb$F<4Ii>U6N7`6M+G*V8pKI5$lc#`W z5H{no7@nV_e80HNND!_rPMmKMl1ZmYD_w~7^ra)1N<=py84Z$vG=I&~JVilcusy#1 zw~`B#hC{rAR}3F0=wa64$4gfhzkk%m-};NH3kW16_vuh81jv# z&Z^uAe<|}3pZK>=9DF4AP))`!z=L~TH8bH>9tnwtDMT63i2<Z>O<9TXU(3w>A z7R}29BQmkA@}ViAow{f`i>&)%kfO}HV7j>7n|O@@g@oibVYXge7}8`KihQ$hcv$8A z+9SiujbY@&s1DvoC3k5`br_T((X7YX(0TE9x62hn2wRN^9KXf1UZx}~=d=dd;lnD^ zoag}b{C)Yox37nZtG%{fV}U)hOypOV3LnTr0C+Gf zStCZjC@DclP=f*;_{Kt$&piX)0SFkFG3B zp=l^dV?YO$28RO06N0LV`|ayUf|6kDtP5yTXYY6+aIvQ9*#wW;=^;Y#X6s(l2uQXT zjhFk~WFEb^Q}ZhTE@Q>e%v!6QB9}l)*mlorAd-YnYLSaUjqNy+Ku78H$YYOGuqN0* z`L6u{sG~$S-NK~S4QDW?uN9NIn;L!5A8%_pw1WR&V@L5@c0%x#OgDmT5jNZfA+go0QUi#}#@Y4qNQbb472hZFKDB0HMX8PZ75(#;&eNAF zHC2xou#o_R2jer;05DQt{qcl_f9dGoMg!n%_n}5-flS$N0~q%q+ZGzACM+>am|%6! zk`B5kRepc&kjYcZ*mi`*#I#EZm|G>f0K1ET`Z0hIR;wxs(50o0`~xeWO3mE@JCl}W z;TGoRzt9h=7$dcBD@sWE5ZaB@;;S& zAt(_Dsc%8Tn!LiAF72LKw;hpmX0-$N+e(kbZfy9SLf(87Pg=z~P?RphOQ2 zR?^&h$z0}q4Akx`-9X@l;M2`k3%%WPunep}3KOh2$(G$Z0`9#d^#4TqjO1J=En_Yp z6g?6r`Mj4me>tpG^nGWPOPtm}$IRvM0YLnpk^Q3fOP#zP(8XJRn&)n7#(#ph7&%HA zhd?m>79W-Mng-u%@^*ZBd0PO&bkO%Wiluvd@4wW_bO^V(S}g!VP5}X^yFREa2|t-1 zqI%(B)E<`jft28G-Fl-rJoKR*Ad925@?wNqB|dsh4piG>cYxA~LEL{Nr1k--lI=&E z<6L}>T8v!^xgb~cgQsdAOYh75`ACCO&MxjMB$Fm3=yoG#3H+vSj&Cv0D*)JkST=mW zqX&r-qCc@~#kKC?8HEBEYfLhuX)4f?(k81sa_3=DvEJw#<%cpCEmkZYVnKEYoYtFO z*9Ym-9w*cBP7kd9tFGJ5h}laRpQnRUwxXnWM_YBU1Ln1w!D*M`-5DH0h4WyueDU+( z7%%?P6N_#WCevxZv+IkUotI&cKK&nZS@C)k*l?p06YCd=$&8RkuN9-({%ZgNxh5p1 z3A;b6O$G|%EL8SBqb3VI1Bx2CKC^?A7Pa@D;{%7-l=#z_oEhC8#}!|6>Ls!a*7MKN_1=$P|X7Ja}(>!(>?JWmWeGH$d{ee9F310I zv1jlvO(M0SJ+f>Ddd8<+djIcd_pW3%DtlV_H&`Z32fxY87_u3V=j1uwv5_kZ?*|4B zK6?*nk3D$^NR}!Te6%59df!atge0#FndJ149K5zA?VhheKj3IL> zuE!(Q*iT@is?>;c7QlX3nC}-UB?1q%?Q*QTYpB5XrbegLd#AEEeEj#EMX&u=x$hXm z!Q-$avo2c(QcuUq$%cOaX`~v>o(-7<_R2BCYvi`V-wP#19p`IP)V@AeDmvccB;BV5 zK)me)Ahe0IP&lbjwwhdfS=I$`8az4D``(|U zL;*Qn2)%gu9e{KN<5|n_Y}0_UQSa~WtKYTGHh=c$ec{7?$p&0j^*KS!1i;y*Ez5e; z-k9f(-h$t`Ml5!(rjwnnBf?D6z$Uk)Pq!Jd%UxeDQ5WlOObs&te>k2By!m)rYuyY|PbeL_Gp)5(n6PBpQ zIsI*M(#0;09?3M-QSD|h$VIY~M}o0+uy7s--t2E9OZ_dNTWQjDqu@&J>=wh8`9X3Z z(a`lY&qeOF3pM|3iNoW3EoUC~Iet_Jq;MNqu83R%FrIT!{jpYICbiAN(`}s(-?OGd zmU&)sm3pG$UT|OUPR0=c@gQb;<5jw!IV=UF*r@e^2FR9JcZyrE3Qhacwt)(@BT%o2 zw%R7xBUIO!*BzHMu(sYpJD7S^xS6`(+5h4%J~@o*^NpB_S#PkxR=diwSvYLm=3~m3 z&iIBxLgXXP=Bv}iNT+eV{65Z(ClSOFdU|6wK&@ouIKHeHh&F10;&6LC@MZhAy1oK5 z1Uw^f0_=(_tkuE6>y}@EY^d9X6W2o{2fczwj9$EC__bo!b4i)m1`jeK&1Rr>zA1XP zgx{#s3z$~#9CwzexYfS*Y$bgb12GME+n*ymtKcnks{OX!0ZE{VTIYQCGd#3rWJImw zK&rSst$0(zP}0WVRzGuDYc|=xOEvV$<#WGs0LP-}BLVwwCoGykRi5mmGg?V>jr3_K zD@J1$wDo6wBm@dzQL7>^`6>FQZ*!8#lO{y$@?YdXs{kbRtbN9!sJ^nN!Cp&<0l`7~s}QU%HtKd+U_< z5qxxRim0|bddmE zdO$oL{3V%q7N`IVNny_efS&D6rNjn6*Jx@CY=DO{ofeq640iSnTQ50BwVl+}XP+Ko1<8&XP3?ER*9^ zSTeIv9XcNDg~VI?yA72wUOba{{PfyZqyg%B%9%-yb=l6VGhTu=D#^iYBgz@`jW9AULBs`lDb6%3hd2ANxj3o_N+-3n1-!^?~7n!>eDESaCj44#ja@3ShWDw zsIvu5aC&+?d%j*u-~lc_#RyCOn1)mIU~#x;XNp+C!=+e%y0zvgT2GhfOIe&OrY>Qu zAl4}xw5?se@~geEb=*EwBnjcDS#Nkm;Xa^_nWx|dGQrLG6mZ@*K|Iqcox}k-C@N_u zvHtXeXm6DBeJ9S1`&ffZnC-kIaZtH6&Yn@O7=KHw+t9kGyy+3vtF*rIchejVK%q}Z zR85~-%MX)ymv(kHZ9dIJJL?=jo*K$TygYaP@s*bPr*CdtOU(!E2a?4rd{ce)Bj*dA zfkp|~;Fe@luI{VUthB}D(4wO9L0Rixbn%ueJ(BScw^t%X&pSo-J8AY>_6t=DfyRab zu^}M*lv}^@KV50r$#)dX;Kb~`ti<6@d)J7$q~L+qd;zsVYnYSM@+93l;S6mP-mtN- zecC8JZFi$g-~Opn#cNOaN44kKa{S7*Mb*nO+Z$ZSS!Zm0(r;z0nIk8zSSP~2&4Pm1 z@Yfn;0q%`^G8fHOd&VPMEupGaP(k*s)^K|0W7>xX0scoo8-S&6oKKi7d^;=9N??ve ziAbtRNtXU?7idj5Z|DKcMCT8LsiG$;zdZGL!JlARiSgQD!nwl!Qlk{HZyV z|3qGxvUAh;3MhauGpba#Z&gnAHntAsaLc5$_Ze&i(L~VA1&}&dR5athU=x0 z{VryR9o-7pWwWHi{aQnF(IZOX)OPk5XnsAx4y5xb1*KN)#^VDpQ1K%8r_}_)36UO$ zF#8@#u)91CCm?=+C`eaQd^!D zTQFv)Z6%af*$ihH0fmA6a36=SRJH{!m;n({uKL`G1=QU3mwak#3SxI zL*W36`5vgGw|W&r&L}jTF+GNDDh>d}!+0iWs|P@O>q!@30l0-eu5;ImqT*(h{LS7k z65OIUUOrM*M`L*zvN9tTwh(Ucb6rFxfeTL%OtoEY(;4bsO`+ihbf{b=pqn>8F+o$< zX3B3&33ZE9?wzxIVsq4GFRJduGAi8CO7DQHFU-y%wQ8sDcOp)LzYhO8qG=`Z=SRyv zx@E?!2Kj^`<>#X)X)-8+EhO@(c8c4zfnQK6c6HiDxR$$#tN4Hrnbb>fo2l0v(`A?} zEcd_=aT+t1x&3tpCzC~nL9hknIl4Bbwp*7yzHQ z$Zeq4Wy3t$BBD6`TI@2-wh@$mkWv~R;J16i&+Pl*8-~9?BL+t$_GtP=r=cF^<&c(i zUUZrLU$dLNLCCDCw3x#lmvHy0N-MWy4{P0oV6#hD(!g3mb!pH+`5qb=k5f~BMxxnH ze8?-P>zp&@Bf@e^#WM1KjLWLbrS-;vX#?L z+BO3)Iu04>ed<083o|?3%;#sezm!U6{LDX}Pt({tO_(#VTUrD83h$^D3+_8}_FdQm zrN?Ma4ONufCwAM9^K}ebe09Y}!-FtS6uK*}An5umZ9xux^q9mNxmNGZ3Ne}Kwp(T7 zCs&fZkI?b-^eY?kz%G@fiiHLUEoU|KF~kS3AP7eZ`f<9!u0w7WsY zQEJ$*L~k@6J`16MM@7Cpe6v%H!#U_6zhX_k7NY_?I=1)C-2QQ8Xdsf$#dU^+D`^p8 zdE6ZRo$XxYadf@3mbSjAmI`y)0&=&83;O-75KrDXkPmZ+w|QKm9z12hS`h zuO(GYoCN=N?q~c$U%Hs>gkZDGdum(1H;8aSTj^Z(PmgDU9U3PRztZvABEgs@38L0Z z+QX^>;M@sXcJ+khBc^oiRiG(E&>pW@W<&WP1-lKdFJb2k%V{9HUVBM^ z)A&VQr}4J*XHVqd;yqgt9C3+#Xkp8Vi!LYvy%LOvyH7j$IEXsF{q{xgq4lv@Y5ow= zZJh*kQpr8Bi2J2-&N^8Qm_taZL6dMZ@qHH$iZQL9eAVdQ$N3Yu%&x2GHx$bw#Cqtw zl;3n|>}I8hRfzZ8%Enx=4&=46KYbLIw83lT3P(N`N_Ws1vEuf$W39>_5)Z(kZ5l*r z3FCu%j|)3?Bc{k0%3tF~dsb}t=rhn8(pYe5y<01dCi1%Z;P+6eADGbMD;~BiVQ5bN zU(jtmM!exB^0eW!Mpvb3TIz|Ndm=IW1*O_XkD>KwGywzVHbM3xavHI?j$#RP_j3T< zr+7uZXSi<-IB=tm@f5YnTo{5$&V`JAwQdP~zv1bifw@#;P47r%e&TK-?l6{-^invt zYDd+6W)M;9^_eH_vKm!_GkwP$wk`h^t+~JXws}UAp`?U+Z>)x4|gX?*-}Kcx7-^p`;-6dGf!F8tn{JUEE5? zX4Uq~Ub4i2+gItExdM^J>d23s9mEqrjm;xEW128Yk=?!Sb)&R`ADaQ)ae`hyWMQ#4 z@^}BOOc@*Lbck;0;wlmdLt2b$$t(TSfo8foX@Bd8x`e%jUkp8Mc$~hc5^wzB?ON^X zHUlNP2V8^&B26z8GM)w+wQzT^RoL&O9-@^i#vr=bfM784nj zm6nqwe_gpExV^8`(u*=MXFSElz0ZjtShz|*91UXjWImzq6T*DS{ZOOxDb$Ju{=l`^ zbJk$-+pX#IR%P$Rpg1 zA9iyS=t2DFPt+uVm^f?|b%3L{{R19 zl1Ld5vZJEx%wva0RvPw}WRGKJXC*5#j!i@Z*&I8&9E9w1Z0DHAIQBZf=XqD3?{)pI z%lrLT*KxeYb3JbN+vCc46ImB>OlHTBXi;CK=Agr| zT0V+6?o_R`|I9+e<392xh1uOB9@v)`Cp~;fGl0EJbLT*bA=+L~dXDb*jTy@YcCqRi z+qyF04W-8eF&8e;>AsGTW0Zf1i1Zxeu57$>9pQJjAmHN=6n3i-p?6-I zOVyaNrI?+$bDgD+wCQFjQ46aR5o4u2U0|Li!tVO%QCsEnQkdmgbmm-BxOKWu@?n{B z!#?Caw(oI(;hcB)iifd%q|dd`C0jVJxe3SGKAT^T{l$;g0XZU}y*Vd;P9vkW*pCG^ z_~zowN~y5r4(80*YG8k^VPUCGpR57dvD`4gr8J=C^5#VqQ?sBEC z{uH{Y&)fnELn1iq)q--Kw*T3z@wF+t$Ig)|-Qm%wA?pqW1>FK{zEVnUMe| zbiygAX#;Fb#C6=4A*(I#Je*QJ&-JnO$&d1VNI3k!>|qptGxMYaQm^vxv-Q?Pa&!j^ zn|=R);kgSdoA(xZH69}xx}a*UR|ZpVdb>NPYuM4THAiE5l_RWe8+@_T9dUNe@6T!X zm8ZL@gP~UvZ1@tf#3J&}v6~SWj(SAIkM>UuzJb+}UTf57z;mH29nnp;XoaguNs}fq zEpvkdVKx=TVe&aEhXY*E(^sXXcWQ>w?b6nkIZS=CpXd#N+;YsJ{GLf8{ z?cTc48{c7a7m!r9-#3(SUR)ALeQ}o4p|M%S{Eb$P;2GxVJ06sC%e}|Hf9uCTWA0|M zp~})njp4|k#lb?PNhYss1V~*x_>Eh6&Qc{wgc3Ix~an=x5@cA6(*uKnTaw_UVg zFnbQQX(U`Lp&($N4F(T?rs6}ptvVxfOhO^itRimLGr2iO9GbKR zKV(h^T{s(jX`7iUUSMg*8>4sm6-tS;?WE?3bk9Fe#E!Fvtzc7-T%VTFtSVYG%W$ zc?G>%UdxTH9_rAau1+K=+}MNR&-ur~F&nF3tZ=49t;W7l0M;4OEn;e5??*nNNpDVwaELd zx_}3oREvaBrX~PRIn&WKOiD>)d7k|R54Ae%J^da@5RT)K7j;#0L-6#QNY@D`KVJx) z8tdzzLriFvE0jfKBP17<*2O_dOxMYt2_d=HDRV!-94n*H_^P0gl$^%uG;qmu8*@{D zgyO5Nxu*6~STpYJvvi*e=09+qxN~Y9;ejgLpSFa8q@p85O4+7MBH|9Mx5yuQc61DxY&iwxoNcgir8x2g3Scn^Ci`5 zxu|P;F-KwbFX!|4_u0M+->}KsTSzkO-MoIe^X?-qA~{wsW&39FUF`y~7zJsER6&7- z>O||*O$M)ynkEUZXv$+cT$*|p20|lXSUGaxCMk5(WzAP_H>=lPsG2^FH<4Pa`&A9N zLASIFZ=o#(G&gbjwfi1_u^)hNoSMB?!1j3_`m1%~1Nmqs@UI=p>v=QQs_|DXsy5A2 zC};aEly1!yvnt%ij_5d=JT285m`YE+Ml=%jj9T2?gbJYKOI}OX*_=w!*KPQ%3%%Yv z@S$#;i;+53`z*(PIBS*UU+b4kzw~JFI*~USAxgyiITlBDSq*kmqbL+&Rql^C;5GBO z9BKiZLqD|N6WP1*I`CfOsy}~%R?bO|AmyMdKQYB+AyPvnXijs3yxdDhYTgZL^PuM; z8^4Hbj!L&Ie<4wV%F^A@zIE%}= z_PNC>AlH4ZgGu?K(7oS-X5VFK*PBf2{SxmW;9(ZaDchk$J3pKl>sJq^#m`gHEHm(X zUD`N$@8o~9?@hIEoaw^WpKTuG6K@?b3# zIg~aPF}JRZwYR>gnGAU)(jlo6ijI)rtRobPywSqxMxA7mg65IydM~XL!_pqggAVt1)lOPpXui%u#MZo zy0z5*qO>KIR_}K8&8V31Xp_J_9k7l_s^{e^n>qM5f51tn(QoUn^Lz7rt9R|ac! zar|pCwF>1r+GsTtr-i)yCsojJcQBXIxTE)?Nzb# zSpcwrDD&r4KKRF~y}j8iFRd;R%Kr02wcri3d*U?w%^IhFB`J|B1~Z;N|(BrKVYgc3d?`f;8m= zgAg&2%iMTt$7H+LNQ((g1fJ${N81(j^=o|A*8{2YwBNWmmkit$q}_Y3&`D+XR*vL+ zu3=C^1!thMQ^7=@QJ7S|iJK1Q=*ys2Tfk+`AHspT9eqCotRKKsd~3|#lFhKaV^Op3 zUd0609oiIRpbPf7Zv}k(XQ;3s6+B!AwW>voNmVi~Z*C3WeOgY1o>8I0-LM7Z(2iE1 zvP9tmL&yNh)EE5MM`ZW2p){nS5d6XmQOv=MjM0G9Aqz(f$rT4P0nxl_%eC|2e!Mio zl1r*w8F@)Lg=UF=0E%p0qNscyz+fFgDq7{7yMLd4<$dA9{Zl_lP~6~ubXpZL$$cD5 zc($I*HBu^65VLT@j@0zIL`O{J8Ym3QJ~4@*{Rb=$6ThU*&+;m^lCd?fHjD1w&1w(O zTW%K_&Ql8jWX?oo5+YbK6tu8*tSLTi_lH}HEc0!#c2rgf^`873&-^u?z zG?z3T)S4mP@WdcFk0Z8nJii5)#{nMs_o)Jm4qs4?V))@bW{r1-$lqY+pk9_;RY3>6 z)a|?4-ZA_?#EV?-FZlL}@hoy&pk|s#jyoaa1}%D*jqV~e>Hqsk0PX$iD{1c9dE+X3 z>t`#!t%hhUMBs-0>yPCy%T=peMlYD2^ngkTD;5A^J@J(T|2U;*WPuTZqyaT$VIQ2~2ru21{l-mm}^*rkRIbOI3u03*0zZmQ$zapHRCru|Ima zG1H3531>|eQ2QSSM{(V`7lNq~9oB2rs zwSSCy8T}JGr<}##W1?{JnFpZJ(nv90hPPfccKshiHvEqv`veIhq?C<8IIg&|va$z$ z5HQyo0CG)CA_o8X#8f~KBPO;**Dtjom1>4w7fp0Ww%50fT91~PV-ucemMZ>(o#au} z64;tKBq(XRKKZ0Ae>%7?z{!r#??^PJgT^YE{$)G>1ny!U<1Q_G*QeDGp<#yMOiSnp z@nXQuTCC`G19HQ34^aG=Zi9dDUA7__FBrupZF||IgOWU7i{3TlHOH1N{sTd6HM5sM zlyN%d2_VU4(<-X$1^BB@L0SK3sekss=6~>GbTeRxF^7BW>ycM4LQe-5tu>7_%qM-| zEJ#G8)8eb%ktz2TQKyC(ZSTKt6MJHF-ntxgPS$ViWPdjpTc_)&s-fE(qbY#!rdGZ9 z#`$%G^Dv;g><&__Gnc|HU5j_C`5*jgOl?-N1DF75@xZ7PJhdSk^mO9R+E3Z;__R8> zxU7yveKD5g>Yun`_EVxa+X7g*!4tvR;>YC=q>Dd?!W-Ofm>g_J1E?+GeaH!T{u#cu zGzXnS>6-c_3i$l*8L4F#>|}=4fFl2}(16`bp#tX@Lf-IJetW7b*!2h9c5-gNH2PY(y- zcBEm??YtArSO9Z$FT&3xf?eB$?CsCL=Q){VPamgy8kjqNkScsRLD#Wc)*_a4V5VP# ztzALN;Sc&YocaE-tj07Fi`l_QLgin@yWO@ofbsk3R0&L10XEk-Y3*~OGQ881-SP+F zej3uuRef5@;kc%88=;|x;mk>lt*u$P4~8W(klXyu>B=c(9nIKL8Tysw}!V&LsJhh1jb(o1ncSt1b@h>-VU}P$jU;ZOg3JSaa zh|F`B@E%+zQ{+ZyBp5~kLg}8SoXr0|Q-laqW*vmB7#A@3XuP7)7%1(W#8f((05^<> z)2I4Bf6qr6FC4=EBO5bI%6*t6WPN~?4p-9^^IjEvXUnl+ji~b8GCwby?;qIzkCY2i zW_Jb_GYl{KxO0<>4Y)_DQDW8_0t>JF>Cnu4E+!WhSvdcr)_-|{>`1Vrur`amZ8^gf zo2iPgp`bZyM}5skPV9j)lf!e>|3xKQspMh8`%JHquSI2XY`Rr~a<|H0n6h5J(a--I z;htQ1CzxeY<#N%&vId5;rmu{>k4V1m5=<)|#mEFUSDYNeA1u<;js122tx;2G!s&6!BU<^VZLZ zQkYZOk6Shc1G}0E*-lf9jzQ!ScLmdupXWZL9Ua8?kKesN4<_Imj| zFHC0C_~C7SU@3zgX*#WRBL3-SmZ{{kR+&tg?vT%PjTbs%SkkzxTd-3^`n6u&y{85 z6{x4X8e*)SPfS;LuXX=3c1@t5R=f!|D|=eJcBc4dM)rG_3VbRGNfKFE6Umx3&+6xt zs%yqag^;zRuRi@?j5=!v{XrM-4JrD; zV+7`QRi+kFy>_=>H*TgQ`PNnMw!R;_rk}nVIu93Pf5g3)nakRHsS0vlso*)|ti1(_ zLY;dBMddQ5WcMLS#IgXXti27b5PMMrf)gkLw{;5i9#4;n0M1D6x!F#CUrW0QvK zAVl_2WL)XfgO?Zto1+=bITpaZfr;X`_*okCt=g{wh#BoviL7tB^qyORSjRX>e5^|S z@!pS5X(`*@*!(mfG`}OrR<~0=LFtyJIOaBKdUngopw#a@WhAJ+#8 z%Di0Dsn&0LX)^gK?j~y^llYMF(eZQ76`uDW@Z0;71H<&N%E+U2M;YJN9@!C()!$X+ zJ-^zG@hhzNO}k#u$MPI9NKNl+80IR!qw^d-p+TK<^0aRaNmMN*bt3^!vo>F6s7L+m z+)?X}^EGNsGbXljb}G)Uh#rf{Pc6rQAcO+*$tNj*vVG-1P|tOs2}Ta^->dt)&6|?# z<2djt9ZKqhRnT1B*G5gY9G|re$0t+LPghu)V-UMmUo2Zvs zs5>-ifrb8f<;8E@)b-FGtyAQP?m9eZ>3o9R=&C*XF8;(gYtk6`vuSZz$0Yk}>)pd+ zl_y9cMXvdnl~wYi!r`8^#>e8G2g2`>Lw%LiwZ#q2k%pXQpC*sDZuFI>)_=+p{vesh z&!zHBPjAum`1#wTQ!WfT^CL)GT*PTTS*dQ295WWIzkB)o&JBbOjDbpjea^hK%g#K- zyROz+E`647V)I0igY_fOQ$7B%BmqJcAZgepKs(}+P5`jLcma(BzNr_~XuHDFuvP=j zQJ{Hg7(#w~x@Z>zL2oF4kdlju2pFZdCW|s42X|N`AH%)@sA}^5ajIRhODC(3eVQ82 zeOUF6Yz3YnS~Tq@Saj?N?24#A9eCELko=865^Pa1NP9UuKJ}nM?KbIZn`>Tk4Z|W8 zGUF>z?!T3b9N*tGK=Q=}*3WNtrH*@4x8C)|?xIlX!tO2sHCC^gsNq#S61pIx7#~O0 zwyAy8Os#lpAA4aF_pR1Ucl~O=%s?^zmD`89lgfefpBId^T97|!V=0ZBh8*BeBb}sk zs6WPkuj#fhQT_5$jrbyv!^JX$&PvAcf@)Q)z=Wg#H}6E`!#fDmT^mV|kyNTGT^6bKAAK-l@mCIwC3-EQ7uV7;BRV#E>~ zRV;O%63k@oK!b0>-E^{R*u;!)xzhk7HHSe*1jk^!QN>(mUXdvnO&tM><$8g|?NOco z{6|tKuWmx@k^S~!zfFO=-{H0kP@BXO0%On-5FyrD_c#TQW+goThPf;Npx_`=4F@U; zsW^9_r#cCIL~wgpx9_C1Gp~mW{<>@t&f>ALa{{9L0?3bGNfRW=)hs+YKAu`0f@8AB zd+u-`3^_QLqvMX&qfm7<#@`qKF@2lAyWrlW%>f{1t{NbJJwO;A*q7CO_j{GuB{}ic znto6FcR`BmvQ3WXyhqfD$M!aE=CEO7HO|mWWOyN#tkayj<28P!`U!IMlJe0tgN#<0 zCY5S_EUs(lIIZ-D)%Ty0mUi^wjsw4q@OB|93gw>B#pVwk4ZT=oaxGuHi8<(5M%9PX zMSj&sz|pFM6MW8=>yrcR(J6vM8V~xLJ1#ke#!ab5{G`sjJ+XBsPNnslp?mCPLAule zmJAy~Il!bTW>DYGQttBg=*F^V-OwHqfa`|4aDb>;YH;v24k%Ozn+FRKa}XJ zGd0yVda4&yjaE~xv0Qet?9(17oe|SJnQPWOJ6e^hcn%jbGe*;^%r| zB-bWD{tL-=x^W@==%)F6SDbk~@-Am6C9{NJbuUnM3t$QEobbd6Ud7*Yzj72&p9?aV z36VarCGsMK#9R~sd*1o6XwAYF-9QT#%^xCb32`%W>}9dhY-3<5lsK4wkBV30PnjU> z(T+$c550jYbO}oc^IyK6#6JJ92@klHkw}N#C-lI56%N+BbH0{=ES8tWt5`cOJ+i*c zX|Doa6*huw?5pX?9rZ7N9<+B_Fs*cnQq($kvSm}2K0hDkCzkS3Y?q^GwLhFR$5?TPLbW4jx@x4S1yHC+Ot4=Dp^FZoxG z+(9vC)55xJ-oxbrcy_Z$|*yc(D)Wf*Z>eTs3uX)rD?1wj|^)vbJ1O-Ip>hEeYi1lYw z=zlfzXe^F%cE>tVYPfkO3pN`8G)8jldTp%rWvnHMY&}O=h1|a8(ePEvtmi_QNf|2~ zw$bi;gr}ynfHF#n7r`Jp-t0a1DJR4yTE6w?U~c}tBT3f%50Fb8*Z9L#c0Be;iW+^0 zTC(I7yPL9L^B4BXW6P~NSf(>S&LD{TMw)Vu7IH#X%0%AY&yFWvt$yEusvwyx#Jm^8 z&~x4lX#v5QiP>(|59tnXT!{1iVEjdKyyzhh^Kd?*eXvb~n)+^ruIo~i12f)lA=nr} zX9lnZ$*-@)T)5faliXIjf{r4I;gOns2XwIF`wVJcqnK;tLi}ml=Q~k{aVo5v!&Y9- z(hB|{p9rm)w7%SN#iemb$FNeWaG=F^>0|P4ZuTI1p!gXDhOcl@4E5(F!|>xM6~hI;r-eU0 zdcQQy-Ji+hiL-!J6NjuGnQFPKsrbF3rU`+vr7VWs{~&(p76O0t`$mBDY{tl?!X~{< z>R&bBh*aM*3)9vA#2Eh|+kB04+9UQC#krHOc%hOyw*5=w0^Szx#==*YNEt}vq*jN? z9F(faaOO_xyC?6gW4^2;Y87~CH(LB|%Ir8tj4+R5IOKRsX1BYxJiI(HkS|wG)=?to zE!+PB(Y4<2W~8ovrB>Mf0S2X3Rj;8;{zR=x80s4%ihHnKD zAE%KwOZHQ z-ksvel`r2B$#&*H90)(#N5RNEiZ}R8)hb+Tw9PAY?%W*pFPWQ@W>;Ck7X1_LS%0((15 z)|&9AYZRaJ1hasT&QJFYBi-q4brYPNzlPm%TQACGvz!qWXdJ76laRL&V8aa|XkI3|Y& zXT|8CR~ELt9Ivna5}QaFSgFzAm|Ev%XLpQIHVcp~!)^|kaKr3GKI~{!YiwXkJrJ)V zt7_(QeW|^VjO8ZDjV7#Hm}d|!dT+@{-{V(@QHFi`u}$?wbq~~T3>*55k(@diY2M)Q z;2(pB({p<&6UE5>CZ#4S{=ub`YyIu&RPi zmK-Zbvb%vIdudd|Ybz+U=ffx(6Z5m}w^^);<5oZna$zm;7qO)gEIEyBB=F3~(zD4c zt_pPKz1c1SZwr5kO#V`tS`NV#zwL?%aho4nk7@LKO<%2(nI~x?bY(QJbLe=!Zd^Qx znbG^D{WWh}_H6TOVs6L$jL!n5UHMF;@v>JCA_G)W!rdk4lv3<9FB)dLom>nf)uafA ze)e~CeuGafRy*p9^|B)QZ;XvL#D@3))gw3Zc}`CDB(SYP;b?*L>4t?&Jcr|63ziuz{iJQbzdo}-gR6p$#If+lF}nGs6Lq} zZKH{^C4=(L5S&*3xkUL^aw?O{`m0&AH3N3Qna6N}rB6iA3mz+pWu@t zWb}6K2U;T!VQHi2y-+O~GU%u4bd>r9Y1O>tnsScHJN|c4vko@*3cS9z?0VI__{KW9 zwwImOQB5tJ)LZEOMusG*+^mIJckg?tb}6M1x#z46T_b8~kCi4ZnB)4xCgjxQuibRg z2gq=?7-X@A(ZqqXg9>j0BN@F>5YP~IwlvOJ&AD1k?!KQgty;z2|Lqd@;F98Jz`5&n zXptf(TYae=_3mvln0=}AJ==|$s#?Jo9r&0ePFhQwvaaUxoSmhZ35)beXEUbdM}4ew zlDH?B+ARE?fgZhpR!O0#wRue+&6`Y9MhaafCdc3IukeWF5)`Mrz`M(J>F7Wf)bV&< zBL&_pJmJuGL@^c~`+e{~3f^6u!AQ%^qc_(&1hZX8zEMhRmiWs-TvOkP_0GTleLiUO z64ms!)fBdA&h;{vmw9^Sj>zWaJ}Sp*vu&@@0&qiZ5t1uw6zz3q1uoPw z{Zf&+1T1bwKwU6azd()~0%2i!KPphIx~TxRrKav+CNu1(@`9^mJ2C4!B)>%(mF`oQ zq*Hji$JgCSy~4}vb$QPdIX$OSYonrZBsTNLU68iw7J{q6kRQ8=V0gxsWCAn-64y>k$!WkU;%zzn+&5MZ^{%QMl$k&(x2fW zHM(Q_>1emBdgs}ULud$mhzz^Z6fG?kPh?CIwmLF+LM3`-jTw0%N6`9RjW7pw zR5(e}MnQh$vY;GJQ+2Dk#BG>#qp8boruOCPxz{deeP#wSCmczs<(tj)=3tAdl@6bo zzA96t6?__2+r{?xVxaDWo3Qw5;L%cKr^UF%sWL_a4doT|Z8wD(2h|pbDtjTD)%Fk= zKr7HRo>uD*BE2ORQj85B8Mr!aJ^D%z1<|d9eOcNwM)153gk|13u*Yyfur|T2KCE!5FMP?r#wOHR5)-=we68< zF>S=i&VwzX?iWFo3a%ZLb#oOsN9xf!@&G2JYIsy(%Q47iIuk-aQpX#ue$_!@DKGDX z!zxFzUp*i-{DSYBr#b8E=d=z=QzUT@s{E%&o!d&_lc`rz=N5A_XkRJ4CdrAF+A`6_ z^S)Att@|%{$!)oN6#~%xa`21xR{Z^z^wS#fxcM)VZZ`IFuj7=1jeADEe)a6n&j|`U zZ!`^F?1E#AEYjc6$*AlCKEI%v+wmwXD|T-GamayzHr|bd*fMi-5Ni`4%cDE&wF$4S zCHGjxt`MtzhRa&ZOb!@VJn^i4IbWug9IPEDuW|9#opnEGnbgsD8!K_byPeo8@L5{F z`sx+54wsifI;*I9UMPNTxHZd@vk~tJt_mX;o$q73C0BXB=A}u z3eCA{jQSs~HQ3dyaTX^D27tl7KGM@yWOD<_Q&{qvZRvy{51w$SHm>1uAIm3e)i`Y- z7qCw*jt9Yn9B|nB`P^@zt0=Jk9lPF={(Vjd91?m0L`;%Vfl#Am43-BJ;#Cel}kpXm7LsaNXf$q;mzDNc) z>rdBTn(SDdBkcx0>5eGv>1+GNNV8#+t?%QJL)8g_+tu1~^AGBT9)d&C;FYEi-)9t7 zd{cpl&i|v)dln#qvM!>Lrg>Q?DeGz#@S^sUn7Jc{o)1o$uIO=lF*~n#iEoMIQo6Q-FRb9p1k*%&Q8^e1^gqq{<&a-K z^%ybsgoECkMz^WFv@Fp+xWm)Rm{C@ zhG#Oj-SXOf_cvz#J7@<>xH>jV_RqcqS;(UR;@Ot;E8}=Wim}{~v;<4kXzML56=gYzty%CGq_yfM9?L}wvMop13DAjWY z4MSH(W*-ul&!6rDMPN^><7MbuaMRxfecDzwDQ_JGwT*hZh&WGj^e4DAMIf_FzuY>H zdtM_T*@?f8;m9NFc!)`Unprq;kqlRvD+z&op~=52#hIEfz;|ptViQb$Dw&E$VHY03 zgawZM?L45rg*exQ%U&66u-0pSop2nZo8lvm^lFqp7tu43*#VK3)qsWDe6q~XGIS53 zt2Pk960La&D4`@`B5GZ3jJ)!y0Qbe0D3NL*K>^$s{?(hU9^osh-S*^iIf7b@$3?lJ zkdee&y$(L2D(2$FQP_rF$(0&l((MG3j#U+0qaNwneXukD!=>3YG7L?=hT9S98vY4R z6ONlSTGBJH*{^!$G56EXPH*W$T}-)5N%ZPK5PL1bdk#2EV<+9yAQPoJor++(D@NC( zv$_A)ZY-X|SfCEQ3wDIQ@(hxscLp+J5+#>{S*DA44IW&B9xfPwuf?*{O^%5gjKkJh{X; z(oYAq?5H0kg+C-l2Njs!y-Xd&%}O6U17Vns@^adHpH&z+v#hsv1qy{|!@u<{Q<%dqO82PO*ouSa3)sbl3pAtzw;$#jBY0(N=N2 z=}G?=>Wjk5r`r9bdmF))!|w=pClWwzICWte)>&q9xxN_SFMTinQ3+zTTG1j+JEEF+ z6`UDy@s;x(vm+cD08TpMz=7n&RJxjDkWnqYFIP(x&iI3ZjlJfjTg`I{W9ZwR@iF&h zE)nFspne0JN&xy5RnsjY%Z`xnS3Fq4!KE>VK=a5c%fkYfI$&E-+U>w_oFSuTcKRyc zR4t8&FgVpy!*lr7r)Fv9W9}fXUg28)J*F~r*1YV2zA~@L>)kQ)Mg8I>>^lE z7`fE+38&8Xqb&@@Te|p=0|o89m}eX-`%KymkE=J$EYAw^p`fJ)eRDRI{6q^^B)C#r z>jOlf_eO7i`7I5qsEd*vfjKkG>t+_U=Le&sC|CR;S7hbz&_sjri>&l-SG=kS$MjXq zv5Gv9qg5IZdcVt&$I6TLK;=kuMrSo^2WQCdq=1AUsYod^Uw|uHQx$4qB;Nsh z&K1m1m57+YJ}3vz!C0e~hDb^MkfT1pGge?2Ne&$ld<;4HR%&GVokH=ONke_4B+i%9 zAVusFwW?VRl%&w|OcS9GLhK#Qh8JY&-@=YgMoTS?@uw$H@9|RbY)HRLHgb(W)r5GSnBsvx4dwUV!*vs!GI;rM|!Z= zB`R8?helOKX!7iV;FEh^Q_~GwBQKp5(Ja;mawJAK@?3VM3IYHOuiRg7HUhI1_>v@K z!$_Jw-Ogg$pbD40U3$I+`cj|x=gsDX*SpdQ?{$kp4)CB=9v;6Q+Y`gss;(cp1b1_A4!k|FIQZNCMg(pG;Y682} zE%0rBQ)aV`#*tv2CG>g#1}0V16ew=4W`ZVGdpjehbsFNR-#sv))?`zHuml{R|JQoK zYm%@)1N!oIBOu*D66!Y9ZCBK40QAtq5^%gp5boJkP_7c%#%zyR{Y<#+INKJ11(K|; zr#nO;me+tKWKiG}h;j1|FWTz8SnhE^{4l za8lW`2G$hVZviKExpzP(fY>9#F%!BsV+9n#%ay&wwg@U0AVZ$w%HgXx0ENj~aN<8< zQT(Jp6HBlwr`eaO=DH~XtcHINSeEKQO?fPu88Sd%xDM``^;g>Ij#N9D5}dT?!D|vg z1&o4YGFJ#qD3lTJroNfVd4iLsIx&ZF31$o;MHpq`v$lYz(8Gh|v@59p!0Lcz40WE~ zsQLK;I23p$e+Cbga$B6ncWio6bRMyts!%eDaPRQyaeaQYJ~-KBC0datFvva59WQW& zWZ1-<+7lf+QD;SOH;49LL)Hm5y08VD78yEjiWTc7-#5Zg^zwC~s=j$UHu_9wk+&>k zF@6*96LH(*x@w8N-EAl2Jl=OD$>cXYTGxJs&S4!XHQ3}Hyq>axPW$4?I?&Ho{*tMB ziVup~o-Vac8yc?_CaLfY@WC^AqB(JN<5TT*?#@ixMr|3p)6#nbO^lgb&iT5RmZuMS zo8BDRHbTGoA4ea}M>?TWyDMGfR%_oJ9feQT^yr$jorsShGXsuI8+(jLY*%8YY8!m^ zqt9dClEL2w8S;8!_f9{&KQfK!#*PG-QnoiQ44;$o4j9&*s_k>dxcqp6J2~KB!vsR% z8$S*lkx!vp@cLFUJB)voxfCtb$!}M~@o2bc#FBc%@`qUF+z@1VuW7g@Mj(AlINQ_E zb5?B4xbD8|39l!gY|2Sd+D?-bY74$H`Vp#Vx^IE4#zuvsF~!>F#3z`G_Yxst+~i>a zc(WkGLPe%NMu*0fufnUR-i@&(laxu0bB?3cxkub1rW6f+{O=n~vAc|-CQ8pA#Qf;> z8?T+X<-c~iy@w1{cV6x6QqIbdTw@Brb_>MS-GW!(I(t27CLMh>28uTYTt~d7kfO>{ z5@-ROFJ6Aa%=?u8vL8c$laudZ^pW#$bus3#12T+c?`ux7m6U#vvPiiZq@zDObZkDvpv@*{R61x+`Kk?0SJR4l=fEy zWxfUgS78l7XKoCN3s_K8b9@@zQm<`sV+#Onbp-DRCXWnC+k8$W1k!u$y%8N!r<;{&Fq&#r3Zmz~Y8_B_ z;U0_Z#8{s-JApTa+$#R?P{{ZyY!FVBZ-{9VY@=i*UT%2b=#guxKkX>@$r2n5jfdA9 z4DGI=DCN zeTsUx=>x%}I+?ol!kNMr=CzsggV{UdwI3z@reg6KKHpt%k*0NA1tN3{+*z-pp&IE; z&1w6`#u2~znqp%g)xSEo#~H2=A3pm>QKl$X4?@?&#z)X z+3QegYdEr7*ZsCJEctA}@r3W*vCqdH(F#5;BEI|CkPtXM22`|dZWpkX!&(_@!P!aW zZ_#gKC$l}j2Gj&HY;9sPq=^p+dMjD{F;pBZfb^*UYuhvMkOzK%!}##vfOCtQFZm|5 z0s#QsOqx$(g}5w#F8B{VG+g=yjD@`6rcbX$i8W8P5FC5H4Vj?NApN@+z|oHE!o6DC-T}%zliowhug^cS6k;MV#9|>=m9%ui=}AjoD5P8F5%CT!I7iO& z%Mg#nLxLjg-q7>5*L;MIP<4jV-@#{|XncY74LHIly36_=cW4=gmfULC%wDOYZ;MDz(z4zA$P5JUD*2TkJW-UQlr(uLh7(E!aCi z4Dyi?3`DWo=YSopfz2O`SVNiMjM9qi1{svpQGLj^sHMK_>FSqDRhoJnd%06IQZ`J4I= zz*<3Q!5L?F*4!Z@T9_FZ_d;Cy6FbHCU_o9qY3qmVoYf>}zpx7w%!?TRSVqyG8fjuh zt5h5Be1QwCR%Um!bx#qYmL=_77A!Go7JT_wQIxKdNz&~Tp>0%mBVI2UhKV`9Z1$O8 zda<~l0L~qL{UifhW5sqnBXVxq0QblvAn@=Xovrf_DAZlexocCb<}P*m=8b8zq!TYx z-#A-O+`{3c2WQ1i%#;iq0yr40tJ7(Vbp>-e$Gb%NC!vttb3$43cSJj-Z2}(tbv_0S z%V+b4Lhie-618o?l-YI|s$^R{-V4T3>lmm}H1%SvMEI z#>Z3QpG?24gq6p9V?MBm= z(ngR|@b) zCvU_ktT4x}28f%8CZ=BC!88tFmo)fuhb4k;m{XKS`=G!Qcij;bIlUIvACr^eZVodq zzFPHOXmOa|@scfZzV`7SvVN6%-wQ#8jr#TH|n!FcSZ8y?;M5+eE z{Q7AznRoi}=b!sg^zKXu#OauJ)QI%zUc=`n1-0)rC2#L^=?fG+s&>$H>)w_6;u2TS z+IN8w!}G6o+%qM!4%`UbhKAp6i<y1bJ+LNI7Thj&;-HXZ(%;s-g9BcLti;^%fTu|FZS0g_%oX&xGcJLpu^GhOd!D7;6 zus$$rf8cbj0s6~Z*qdJkRnDmu!gCEB>joLo|NWMCHI!EWu9@A9K*$2#d+YTrN>dDc z4Om$mL0ZFKgekmauznRZssTCsbl7LEjjI9mwB55^z2wJ#S}n_qQUTnT87jxjzlTOiUW8t^S* z=g%5+3%$Lp}aUN(d@6wBxjxnvw6e zvM#eqopL`%BJq;klK}vLO(imraDY1?Y&``(YA%fe=ONzoRDi+h&5mg^*CmGK}%L zt81acu%~~~O+-D2-@Lee>h1E&JAb1QugK(KmZQw=5`L^gg$uOk4NOlOhQN&xByJ@S zCR;MK9)Zple}33$f(T4u9H$EUKIA;a51D+smx;_(A5pn)n9rL3@8aD%(^3z@0NyS= zX|j})Z(T#oMYAN`zx+2^JmpV#-=1DE|L+a)AYzg7aQkm%e(Xx>Lh4*MlZm*zXAo9; zA!NqZ6=a&6oBP8P&%_K976Cntrb0-C#i?v+R1$b}7wd^-VBzMJ~JjyCjle z{-p@&xvXLr3PHnKweu9S=V)v}K4fFTH~-(q$rInDW&lU2OrRYkry8WqgBuao5xuvl z+(;K-R|1>6cOJJUXm0w?oBSm@@G81yb0STq5RC+(9l_2MN+w!60ZxsK){Y?opfNF zm$WHVgkmJlODaKH(xHT=ied&-#dlS{>il_Zm9k%v6@o?q{yRI94L;&m7HDU-Z+FeK zUT0xyrJ8rXf<~Jw(LtxUw*O=)9(^R{MjTKDGRaMK%q6@OQjwrtjG8kc4I&&Y*8wL! z(fx(LmsXzmQV_uqNocBhY9)b%>x4`QV!!WZ+OK!l%Yk>yMIT`$Bz~fP@6W7o=cc@Q z48+0N_e?hBrUM^_J6Pn6i@~pJVR*0*hZ8uOZ^)Rk|JE*GpnB9tY{oJLl>10R!^HFA z_a*$^IA3&G!O7aUOAJik0JBa@_ytPogl5UW5;SZCmzCQ4UkL0=8VJc9JZiph_N}Wy z@66of1(p67iNUxqLV+EsC9{*@0|xZ3Oz&d;X`3Iimw@xFefKWVgY)PUJK-+T?U}T# zbsPx}aJNy1S!Pmp1BWx#C-m=Q@Ff*YK8==|_j)g!Iiwo%I#WWFp^)B!JiG*6Xw2#P z-3pt*hvw$nG z>ec{%Z&>?(GlzT+)&9^o|Aku`sq-5Fw9x#bIzlf-Lg$HLV^3pG(6oJ&SJ$>dIl4kV zWUtYAkm3~ zAi>HJ6L}fPl^x&g8=bfG|`cM2amv*h2Xm7PNN%L2?-vb6HFoc8TPN@A=R zr(5;OC4OFKX<;@uK&13~=+V2#nhC}>-ltY8Kd>S6)*8)a)shsZv;h`^NVRb-@&p-0HiV zk5}$9eRbwoSM?BA&y78gn(l~Z8hHT2O-8ti*`Jr(vS(f!EhBBsNk_rxz?%39dXeVu zNbpSaObc^l)6BgyOl)+EhBJsKA0On`fF`jLo#}MYyj*7747BzCmGvdiP`>@&CE3@k zWenO7GFt3gBo$dpwlF4SU&fxbjFGjXG1*0^kbNmj%~*=bS|Vi2$eJzt@?Q7Q?|t6$ z{?BvH|D301#y!`4UEk}we3pl_DPP9w^4kNFai4eZGaSc3*n&E~_SgPXo%nAlMqW#l32Ng zY4Uj6*tUpM;^gus#4R0el!#>59C|1Kh|RLGjk@b?0*&>Tq;sJ zp>5d1a25e-w%iO`ymFUl9T28o0P-G%Plj_Maz9-esEDaBrWwJb28}JmodGv-E(P7T zU;;I|12|ecA;W;ew#2q_W`wr9BpSR{)RQSwnme0FJ=QDzBV8h4(X_dtTIp zO+DX`Dq+*+C%4;`R?TVHd+oh(KL^JkTE>S78iC%I9?2`IFiWX#UPC zc`+d+e*xy#w7l2Uuc+-w-C&RJmcg~G57{Ni(A}%@7AlH?iJN%2Q|7klz5==pz23~I z2*6Zc@c}^KyYhl&Z}ko*C~f@C8iYIqgIODuxa>#5y&s1MgsTgzOMjtUgn@56;`WZ` zEr^T{vR&-jxVoC}3(lqmKVs}hw{*Tu z_C!HaJH*BxgqjFMUsZ~YG?7(#&B_9g8j*!f17p+yV8WYX+G97h=g^dKi!CGXhCFY? zVm?9f6?3x7DlIaIB-Jc_vPnODoR?+nUUv@0{fkulU_$G9^@aQFT>m^B$j1*L)1;eW z&Fso-VWT|mIh_-F-liY{Hwr0*_iG;QvGd!wHc8T55~_k!fGvMPzRzG>p;0CqKDcCz zh~5T=ZD}0t_v=Xw;?MWD={#hJZU^~B2L>7R{nkm?vux>jO+T;92G70$Ik^X}G(6&1 zYFsqGD_l+}P$L(_T42DGQVnQUq~$7~c2v5VzXr_w< z*bo_`b!PhfUrHWv@yY>f&J&R$*8xffg`EY;$XAuR4W?g8o91YXc@s~g{A4Ywpn>wH zIC1mjk)t_r7sP%N&q=qrowii(vysx&e6s(HE>wUyG!7%^2-sn<3=v3Wz25UVSHs&q z=+yDVf+7Ng#it*NJ$83~eKc{DZ~b5=muw{BG(D_P%1H)|VExm`*maQK#wo2B@4eg! z-JnGdO=Q~5iVmqWlzsR*<^!bGnX?mpd*=r5{c28ltG+{VBA;u%L3keuU_*tv2^MEuH*=s^ z7(3aAB$c4#d5tP%+{sKkD;?K-E;CMJP)BZ@Gkxp*&~{t!qPRFm6O#EIImt2LT$qvs zx#;QeTJT19I(ec%_!)EmO^R;k>*oh@R_8INxX&p}u)rza_r%BMsl0_10aOhV&5=?mFi4lA@{WjcaxJ;^Y#17U0ZL>eQPu2kFplQdr(* zB4$u9j6FBqv*J@Tkw&8uaGqJcp2s1&M%IQ2Rk{~cu1)4#bzmc;FqYeJk&EV{!6>TI z5d%?cf5r7PEM=FxqJ61N*;41Ipw@^$olE0I-Oy3K7b%uyRu-@R8mqi%zkjV~(SH2t z591+w_im6Jpx2d8%;?P2k9m|tYc}} z#EP7Idu*!of~3X;N$d8d5EGS|7ZLJ}BQRnX5dD5k#PP|Tb(LzK*Qhb?1q9bYptS&< zk%p#c;D!ZbuB%ociCxvaA?EJOaBcnCWWJ?H`gqH%Auo@EjFHQr*LOf90Eeq){>lT1 zD8$%}zs~)P<)@&>s+0K_2wu~N5mFwcDC@+s9t`LgP(aezCuC*hfGT$h5ogoEvecXN z1(o!dalF5T3Gxp1Lk0oHg6$D<(T*N|4DAS#sF5g6GEk$>8PYH?nX{~eV%b-!gQkyw z|ID}FlPAZ8UzR>mTNl4=pT7Dod%JfFP;#4jHYZeeCj-f+)5krjU|>A zSg*V(fyybpS?ZvLD9b9)=I$Ix9_Y;{eid*66UawI;gbbo(V$>q;#_X+N%y;Cxgmo_D6Xu<08Hh#!9<#@MD@B zwdA5mKtbaGP91MU@Z@VZ2p^9UZIy>6AmCGxC*~noEI%+3t?L38h&+<)=S1#0hZ zG0Ozgp&2|jWEC8xCi-3|QcDHqbmuk>u-Ir?h`i{dnZ~SZ=R!MSzdB7wKR_*;yB<~` z016wwVmSGksiafxQ+KfksLkSaz`tA2IIWwOBI&Tih`PJ;O5G1C6IN*V zdpozZKQN#b68NnLhUV)z#$+`ZJnz2~QSWpjvXQR>HsE`SIih$wlUbboGOq_i+wa_-ISt9|lX-#xgNN-G+j}F> z%@XvU648p13zHia7l^b?w(DnT?Nj7yGi~e9|7U;aYkB7K@mJ<}moe$+m7}??Kqc3? z7SrMwTTRAi8UAlHQfP*a_PfX`FnB2Qc4)#0oXyfOQ<5`$>SLcjvnX@DcBQ?vxyTUi z*1xZ2U@uxNH}1>cLMTbNEVXbo6}NzZ?3dquX3twNqlHcnuO5I7lH&nt1}s9 zjB(DYYs@6reMuURSC5iAqK=HIAe0q-QCmm)HU6ubIjJynuEkr3FHOlunihn=O;le4 zuBD}tpZ2=wdDh_WM2RTC4~TTIH(j~ZhCKuXhQ4IZ7(e5W^@?QgZA`eKfGevZ_iFyw zdA3(H=^Z=x^Y-;OsRc$|%GQ%eQ_}(RDU5rVy&vUTZtqFHwQpZ}i{mN>xeT<2LvZM( zZk=d?V#ONYv_2wkdOTQJhNI7_fqeutB7l(^mK75Vkk%El+$Wog7?k621!y8kLYo%J!Vw4$)IJ;A1Wkn%>H^U35EaT9gEcYh&YKI8vQmbremV>1pkY~^{a6v zq$hBW=KQ#={IfkeJ@5W|(34hw?r3W*#kVwfm1f(BJ{)`WY-tkuMtgoEzr8-xw@ZTH zn2!$3vwbMy`WYY_B9LQ<;3>gBWN9s_<(0xc8W;WNad}2VaQ0_I;OS?NUSjQ$iUnWF zN|I28a^x9>{qXl1ud0nlFUTl@9XrO!&Wfp0^4c6`D{OIDQY%iy+4Z*{W9e@<)!lEu zIK+q4wkP<9+dFe6^N0y(5sSI6L)o2Vx$YYa5i){PMmB)4aeppUkHB zOtIjOl56SnW|RDN@*N|)0pbJE=}u+s&yDhq zQ(?m7#K{4&bb)EM;!2;b;T%2r?JL$cc;SC-VqmE1n;to<@=Du4{>Rl8Q1gF#0=^{f zuci+)P;X0Bcn=gU+9A)O&U467NDIm3{VX{Ma9`eoyg`<9R{kgC*#r&8KgSEd2UY01 z-y5$fee1uMLkKY9_x0x&HhdA_e2hGN7}ISH-;AvuH_LBS%y%67Z|_P`&jh}~`-_<6 zxtInSSQyC1N#G=rXOV3?ou786EqAB(P-9x>a>Gh&pK<{Ic&6B~!t zR1Y9ou)ayEn$N+k^iyeD1*%(%S*s)Qy3SwdLe8k5pSLh7EG7N0$n?0;_I;vjxw_0a z_pAoK`G@`Wq%c3j->(Y6mZ@b2Nf+k`hzkL0YzK!J9CNa?jgT(=>byFm??N92?L|jZ z+JpClTm3I%rZ`)ggU&spykoBxgD|=9IG>r`&Oo4f;W9T+U2HpO9VJ0FvhcI1wE9T3 z3QF;6SC13i!|yyNM-^rOJ{$Lzhl30uscP@9dP8*K9i)_{5YLDCFOZ9zGZ=$G;4dG; z9PQ6$r2361vBc>=6;%XE+HxM6s>A6-I@}3NOP4-w7-eLMW8`vVJ{CJ^d!BFS5g!rm zv8Df#7rA#DQrYfJ1qz3YIwqU6*oYEQAXqWm*je8D1zdB$4F631T0an0`NI=a$~?-U z3@o*95P-bKR}+4Dky&P7`0V?cbE^Oe@~-gC`whPl&c8-@OW@Qr2eB`pY-#%ItN2QS zYA{i9Vc6HfQS2lM+LjGFsKzF;F(LwwOt$r=&8@wA&wETGq@dw~I z9}!?;#MP;9t-x2XyA~LDK@C4>sNe#*t&c!F?HfrKJ_~HVep5IF#LVsuNf#(UN-ynv zGA=3ie?8G$oY+gbza9w%b{7(4#b9OCFy%#2XkQtB-^h3Eb~5I6*HYilQ?7G}cv`lU z>{|a2$;ls-nS!pxe&r{uiH3OMgP^W!!Vs*bcl(#H%7U_Y7)wNZ33A*^K0h07N_w&i zus+o%;uO0eupbZR8|*<40Mno$+zg+hFCuv!YNJyI8lm!nz^BFJmdMS)3Vf?pzAyhw8Gl&{?WqA5Hcgc5#VR@1xO(No{QVd!ZIs(H+=k=!{H0oF{VFCf1qq@AYN*KPtSJ@84)oJPXC3_x|4(E|-- zlvpF&L9)6QOfS_&8*viZ7O+;P&2xfeq7rkl|AyH9y?>DX-kDJG)ogpgxKBGbJtnN9FCU z;X}W~EAbK(g$^e7o1spkXUhUV(2C_m1qBa~<> zLInoZtkeS?_e8nTVkF|BEWP%{VfLO|d(IZB)TT+Qr~X))^h3o!+zx+&79NF{3r|LA zc#}>|5R(Tdp#WQN7kj~kByp4y!37mU#R;$nuw87c1j#SKo>icDcQ^mPYmIVu-+UGL zV$hm$FyXUtVBmRg3&4Tg#R|%vLL3HuBdbc5B|)H-;X*0De|gZO15Q9zQA=WkKj8m) zCsM+{>Ww2n0p5L)lT7^)i|x=d0_@t{uXtT=-(KPiHD5jPL`3ua8ZeUG(9L&F-0WGe2O>4U z{m$s`M;%duVnB#higGWIOS#V4xo=8;Gcu&s759!6TKs!MnTT`%8dV!&t>l6Xf>*)U zZ)8KPn~(B=fNw^*y}8klS?USR*yZ&3;-g@|;Re|*Lz95kcWZnr?f}vvU&FZu;`VlB zn``wrw@)*_Pw$`@W%PJaJp+1?!kp~pPHh*WuwbY$aSiuIGdwf3S@*(8lPt#o} z-y~zD9UPn{+UCG(0XKITh9G*vA2M5S*PW;)K z-dBdgGJcD9Wqjt$D|<{Gs}D1BCwSfFm-n1kA6J2V|Kdud3!5l+>NB>y1Vkk_T6`F{ zV)YdF{W@Y20sRB`kKp-Ga?M*PG}_JKUvfA2c>46&@VJ`96}0pN;I0h7)5w4}wMu^N z*X=w?y7m=(f{i@PcmL|hF6dP$S#qTA`Jk$LvE5@{m4x0;L@FvvGJxH!lKO$pxeDb^EI$BPE!GjQ=z6OJDvg-Lp3D<8^5|aGL90|E< z3HC?rRY_yx!&9-8Zy5CQPc5Q!UXF)?G69mTNIq{DTOYl)NRzKO-wzPhQHe$qCn=K| zpq}EWa-B2lKEjmK1>`n9TH?i*xzeAp)E)tfV8A@N^X=C?#EiCE3kIQfo2ota4)}@kK@SW@Yc7PBn`?pNU4z@KY@-wiQ{k#gbZ92abUAcReGU+Y z&YuQ+ia~SB)I9K6XEwZoPa(h?g{uI&catl`AC6-sxN&jlZ?|?m`3kNr=ufmB$)iQ? z0EByUyJ+Ie8k^0e6<`qEae=BV1=Y3=MrYs4nr^hy?P15J3 zwqF*}pVwb~@vr+S?*q2Y)M*3&%BoC2iW@x+v)=+mTfLW|`p0Hk+u$ zX7gsUNi44!-@vbcL$0SxRh9%^GH=&eVF02#Lf#PDzb+3_m7gWaMc0DK+4I|$*vHL8 zNh7tL(?0c*xn_5tXw>|LN41Z9G^I?>BZWe~{m8wMOump(%j-~n#|T=liu+YddKdz9! zn*abSuKqPtro6!M=^G9}{|>4n8llI}a1{+5FxYf1X1U$OuM2V+%B&Mik>|oVbVN|C z4zH8wfuD4}J7l5DCuJShx^XewL1C!pBnj$h%SX=V!*l`IL^w3CIMtw6P|=1)UDi1^kv>(RC)>cl6O5 zP?+(6%0-2hUR0I_l+Z)dUkZjBn&Q=IqxmhDLky1W0^zpmFVg*_x68XALC;ROX>=qM zYJEcR02h#Idqc8(WxRC@kQMvpTmBkwxfcR_XQ#)vwBBQ3>tKM~^GS`RRhC+YUt*kd zcHVuES5uDOv&$g~sxg0-!LxttWi|y50C1LQbB`qy_I~(F@sKGOSp~2~2Eb04t^|l0 zznUZDVhbZady}wrM#-9C8s=laWNNBj-TK}|7%=@T`bo5*6jAxYVpNf_c=;T(N|Q>L ztM|V9)+Ol8p1X)ujrEEk_qs|jpz||^pxPNwFsmWGK)~-uVkVB0Y?QD&E*bo}U1*}%=5K*4Hc!*c<0boJu<;}dCh~B5A>|FR8S zlGFv8&juK-L?PdU+4tGCSLFcGJ#_0&*GsLb`62v#s&e2vGr+nr2Qk??w@U9=EZ>{q zES;|0Nd{({bOiE2fAH@1_6ituoUM=ZfDM6zYq@*le#8#wP5kQDVGM}Bf0kP1>!a!% z7Mphe0%G7;)z6?!XO-{%AlkB)4h~eK`RiC7d-8L??g*o<(SEKH97GPpOr&VwLBcf$ zF?LvNy2**U$5Sas^BSNQR`P*Ts#NbEuk@d(5ww8vNM0La5k$1 zv;zpg{>5x!NkJ+UYE%G0?7*}kK=9#LuEbXVlC1-&y|U%G8+cUR&InduPVfjY`@ZtM zK6p2v*5K{M!U+f&0XiBw*s){4Yxv$=(QJug!{6_7@sS z@s<#*xNYWqacB+*;Y^C`n9zQ||Lm5LyRY9Ofb6VK{{$Y|^~UM7E_I=Qf;x2FX7D*5 zb^-x3ej_MVx|uSFU2463$LkgZ%%>K z+zuHJ=p}?m1sDb3W-j;3I5idhnUVRHrd$NNO3g+rqU?1tl+nMPV#$BF*Mz+%2zKX( zOwLgASmm2DK|)55$`h^BVPr8h0OQINx?Xhk2T(gpHNn>dKy8pzfk~mEwfP@18rOVRw0c2B;S&ROkKf$~2D;dUMAoDV6r}26UT5P+Jlya>xO%_BU zS-*2(+;r?P{Yu<)>1d?bJBSJvdUW7z&|jcD1!{u%sW)%uFtUXLZHI6j0G&Gs!Dc7M zglA1T0f<7_xZy2CDx+0d3#}*jvR=8Ju{)2iIxo%wVVyKKWj4*bMqPccdGsQ&)t11f zcBhf9KMY{>eWgO{>VRHWb&T|nPrHLw4fL^x)t-(%{u?>o;QwW$G7Qnos9L2q`g~lC z1=FCop8Jfk|7J}nlv`Era6?xG=yZfY@lQkCNHB4_i>Gu5OxQm#!(=;HEwRszKA=}G z5b7%K;KF)h38!qq)NU!&=Vu>dQ&y~ei`jrsn$>5xl7Ct7T6hSkF`~^tLuN5oYb1&~ z;Png`C(jdTsAd6WbeRffgfb45%jYA8FI+ocqxfNK2y{jISrf6U#KN3@xiaTWj_X9{Y;0rIiXMy;K@e4Jdw3RmnkYpa%IN(_G-@{&J& z{0F*SXR(NE(q=mnP!^42s8T8%t%%9`@^Wc_efcpqyANVmh&=4&4&=;_k$lM0B3LM1S7zP z!qZ~~5QL~l;OZHOdr`Cv$-xE&9iA@=EZ*gx;VJB@~MnBIS zJzr1}2*ttMX6fG+_K@V4p*vkw^opP+0+(`=6omX3{wcI0Jg;O4CFB7BA(kpzGMr}t z=|-q+Efx`uP-ioIJbziF$ttwLCv#FH0C}ys!*zQ8!2x3Y0<%59a;|Zcopqm|Yh-jV zqa{v2BoJ5qM!kD*+EqZp8MFBaL{cU+=>&(~ffz^Ne89$icN(y!SR@hi)(4UD0W$nJ zB|05*j_Hn`$3p5`e?xEaN-C-$S=b|{G5R!C8jeE!_EY6F^}v3kxVmNtB0>UP5x*y^+2WVDpRn}^jSA$`kOeJ=z?Ji*smwz0{OEpbe!GfUF|#+8`~qXjxt77_qzlSrK6msdWC`Xm|d)UCf} z5wOr01RxZX#1cQC)UJW$C}j!|m!&C=92vvMF=I!*mX+i_x44{FRb+pppitD(@_;{8l^waWJnXUO66?2KLSSCLS%&X$N!9t|v{~$kuW%N^VM&#z z8z*zs!?yXnKJz>{Ch3xovaH12PZkK*8t1Gq{Oqemj~1&!O?>A>#;zEv-1q>Rc!d{$ zC+Xvc{=$oH|DjJlp~}f zOvEE-IwSp7dQ8CfUthb)C;pE2@PQ~_AKSzjP)hxVb|!!Y}z9^#J}xw&HHM;iTza>1FQyeN5Ip%CU~ z$2*yIF0IGS&*T=RUT;b^!!KcOWFpBG=CTR3j~nqXs`RR_dld9k*hqn<*2*36tLTnP zwCmOC#vO-QWGn`T=XI%f-K1{jpMtr(;EfFDJG)cex>vBss_<}+GK%S;B7_@g2=h`h zTzuGsu8EXyCk4#c>+1k24t~D1374eoL!K?uSNTJY)3OlBu}SHuH4nE=gaofV zP~tLvg)C?ae>SNO8l@xE2P7{beE26Gjcgl#V&)4sLut5)kruQca?LOJJV@le%K?vy zF+;{4?sKavY8e}+75_bA*Vp1#;0N;+^#IN4oVF1N)wlh^iT8Efvz?J7FpSj29Vbb> zJYaaP2*b!a>Uy~Qq*Y8a+Dhp5nOwD5+ez3M#TiGb^X^#1 z0J^H4w|GvtM)|O;<+1c{1V!rzbNOi1h6O_VaZ)kS^pwIa-T6$%zd;}B+m2Tp#XY|PdzPvTuKeo zP3ZvFh7n+{!JvJjVM*iKT&yPM;-D~7^f0(I+V9pHt%~wu>gRhzo2v;3$wQYfLO546 z^@W7mk*C}s1oqKK_DS*_pZ@kH5t>6BqrV!#F@QpDe>qNC5S1`~AjNuAeT=Bj$fk+! zj?#BCc212Y@Vq$kpkLlNbm7{WfT4l5)TZNTJZtPW@}l3g9=Dh+(T1Ju`{)2NikW+x zvXo55hn1ui1>U?I8`l5=PEVDtP^&IuqVh-L%~NhOvlKTDxef3(K}dvSN6+GJw>df= zeWI&vd}#)PXPYg$-;3F3980f6(OEj*3WEQ^1}4AUFe$sgKY}A=%-1tGHX$Qi-q^ zhn@9{=9iE~ifU!9K5P(|9^ zeL{0rf#9)_)xsA~x;u25aLN9Mmf#@2|BmMqC@gZpR$&RSXcoC&Y{5);(~!)+Zo>zP zSvsk-&V}0$JFR1pe^#m|AOvI7`bY|bHeHer9OmtV0jm##9_VHwKVF=Pi<(7x`KGWc zqbfjwv*DUinpS>q6muvo7ttUfscCihrq#Rn6My&&DuH@~^E;ymhNDo*!ivIw!1%z#U^x$lOG9|A zSuH$!1(Z*P3vKz1+>CYy7R)}Z-AyWXq2JAZb!v_jNC zk?hz=gY~oB>qWCd@2=1TdUx9|dbdYM1dQwp#|S7B+vhf0cJJpiU<`?Pgr*YRA;r66 zKj}lm6Ul3_7sG|st5omqf`Qt|*&5xEs9Ph*)P`E_2Yjo+0}4Xq0zHkFs~&HXQN|aj zd5p%I2wwQyn9cK7z5>{3xDd|~GUOSt+aw*{s~+8GF4~OM4+6f#JlgIUDYaQKxMn7#;}9(qKNjG8K8@-5o6FP)4(n}rSUAqmvYZf`r=ofR zn~0Lz=@k$kLEwk`=Y6k~rt=ZYL(7jT4$nJga?7?7eC_%2HBsOcP<_9Qz9qqyXy1@IpFR0M-LQ|7q3SKoft<3fae>}u*x$HM?$#lth{-O|5v8KQS zeA5zFv|tqrFHToXzLnT4HCoLy%ERqpyyDKxqO`1M$zucNBb_Ybxp;?A*IJZ6bsE>g zKsb-Q@ux2g=w&|flM$$<^VUhkVwADMj*FYJRkWRkc5y`Doma*>YkY*E5eBjR;dBlA zz~&+P9JgWF&f8THr}O{v7EsN}4q2OPF`{8_xF#aht;R640Zk)g!G}}1eq9wa`dZ4r z9s}6IVD37{KGaykfaYutIA7D)EFk@}rF(?=gv;Zq&%})w>0){DpB12k^>jx-CfB>tVVyqJbDP3rpPTM z)^ur}=+D3&y=~*(2p5QD9);loV_&qE2-Ku}_;euu7rd}2?PXB0O_E2!Y~B1h+GdvG z@%yk9D&5=gxhVzY1RqgZ~r`P^`K-mN<5^daNX_+LO(Uv&nDCtrU!f%eP z?fFKAINE5`Hhudm-vzyVM`l7wGmODACwIN%X>O;evMwbSIYxrp?L6ezve_QyCdC`! z&V(YwFf*nz0j^1XXj9uf_c8S_gzy}g+^pizaB7U)XkMJ0qVd6>^0;Dd^gu6Cv^jZn z{%~l)o4w%&)HV(mGt&t**R~Y(t~WjmV;wKL8O}m*e=Xpy;vI& z5|~i?Nwy&QLmJa|^?GwCAhtYOs4;x|=!rK)Zaic~8EhlR{YE_#2ki{H z$Mh;^JOD!clhgLuob4Xdii-?OJuR={vCxc0@ke_UJ9+ISEqTN0liW_GtvkLxT;m#o z6dmP|0oRa$Bc!krWMdiv3~g>D+MFWAbf;Z@OSGqu!cNaf0$W_hTuJ;&`1)(!A4y)m zj)rd)@;~$fKeTb@*8#*Hu}NDfBAfvEVu4QJ+zbY0w?Y;SWzKoPa{t(<9m#am2>le2vZ`q zRsL<{ECr_*YD#J2UKDB(^-d-_=s3!)u;^QmYFtPQji%zpa ziI@ob4GH$KELBmGA}I@r1%-4WIle}h<4RUyl<>PE!U$O`V!^>s#s?nrfjPX zVz}vXfSb{A^c-&XBqbe6eZ`C10a%gs%wI(*V;|WHwGz+noOdX?H)i&FEr2>8V2+7Z zOG~0WVR!B>xMS-0A61V}q@ZIhtNE=3aI}%daR%mD0>qJ^i!dBl33x`d3HYMvM1@^u{2VWEJJMR7wn%_Mx)sIrUi3~k2xBK z$&vF|`Q^XLL}?7I00PeLPj( zKN2XSwOw`&AA49#Q91P{Y5s4SGz19MQ=u;UAf-IiQ{mkITV`S!8`hQpR^b$>kLTDr zz+Q0sKNM_|fwzOoL&o82UI5=(z%k{laNU=w{!_2kJ!x0~UuE}sSq>e#uq9R+S@2=1 z9Kt52n-Gh@&N;d&GElS1qOi2h5KM8T>4skl)h)#G-2bwmwEiQ* zsNYVAGI}4m2L9(%;^YcYC~snZ&fi#sh+xnFB_^NUv7j6WCF(UVsnXS-D+l@qsetLM zm&~AN{50s$$BUDV@LBHSXRyz77dpbf^%Y-#zqdM!(CXl6Fp_>BuE$Io>?K2AsOO!c zI~9RRK$#5U)>8HF-d1&0%7Kdqq}p|;qjL@b$d_2v=O-bG&?>-2duRShAV#tR{2T zWHND@s$4gu$AcO5cH8j|>F9NQurNt#mFdkJ2=3Q7|E8}5V4F`$RkEUy%3$cf3Va6N zcV=mB$_5uZ>1285;MDbkO9F0|nC5`vBktss6-$d`SBq^rhBEE`hPZ8%sBq z$-Q6O3e+QtH)O9!j~qS|pt$_8xz)glj@YSr%=~GbB2#(TG>{rwHR;iOkX}}kaqpTw zlTGtuZ`pt(rU@|$c=+4p1O5-wJsa4(3-tAG+Fbz+RK?%t^pgM#gVx9}5hEODr$=o!@+PK78_!y5okqDVGH| zKTy`DOe*gl*E1x*?6jpUULyo9+DQG zKe4J0^3;2OB}rH>kpO$4REF!e4g#&5>dEfh?^~Gf^m{$ouPmWw@4TxrbE$s$1d$7f z{}}J2#uOXXMxcP>n4A7vd;e8QhQ2#OE_(soFND;?t3(ZR%6^LFoY><|v4w_wIOdo? zQdl(_c@qe7-1vAS)TJAb&2cs+D25aOWC7)8+=SZnE-rHUO%bi1+i+n@O|OUwAcUW!(ViU^Ri++AS&Cg(b>yBU~pKYie&@bxJWb% z)}ohW5`5MTyD7B_USQ-;L`J8nj(nT-DS;NRzyRPWHCRl{sjh`sDsx?Dsq^eov#2W8LS zdV$i+8T(x-Q;CBCry*gGr5+DJwI>NRv11WfRxAP|KPCkTp!u0I|IhOJ5MZ*R9ipEm z)f3cHQ1?e432zZ~Y!=>l?Vm1@)B_gB{{X8si^qlu>Jf%`GmuFfM_R}`e%sgD2)%wJ z&lJfb!q(dZ(FLprHaLG>%_>hJ_OT~^8yNexPuvtcsp?qG^{XtY+rR|_pn>xvPqz@R zJ^3be0da7pns$HXBU{tmf7QZjvW(>KWjz6M&JHSRs1_VStQ*buAJ~BKN5d z019;)+F85+MShwj^?eIW)Vv|WAj%`n!4kR^h>0PvSILjPVW&sE zQKm`liuCBm`z`W!C_O!%x zD+qD`v{Y;?61oj^h9c2nBS6lrH%DrQ1Fb@`dlx46d7orw`>PuE9v@`i5J!c~Q zmYt6gkB|k0{yhpfUf%(;E%gOVxnKhC7%RICIBHEJX2t)uJy1Y`_=*rX-|yoMM!7(i zJ7CowB)E()HhNIKUrQPK!e|8cjSDXG$)NelmQpD+hz z3OLnUjOdKe$2ln3DAr77Y{|gWFu!}(($CpMS{7_SWK|w6{HIT&+DD&X)^$DTuU9~+ zVp%lc9RRJUF!fJnPhua6b5`1%B((;ae9PEBpW>G@UWduWroBkEvxX$ohOtOK>{?TJ z*+~$8i%mBH-E;r|So|n=929*roTzD-c!y&Z7e8%HO|x|a4G4!e&ovmq1tUX1!f5Tg zeLJ*E*Ez`mmv^@~&vp6=qX-4o34K`biRv2;vaA6ExmO?S2kCBo*+zFHb4}=FfEJ$nza>^d_8+77+f5xo#1M%SEtEjmWqubBnOFfpcX(D_8$2Dks$dh z4NK}<|IQ+CE5o`Be+VrM-re!L1ZVhzaM4g`lxdWWI7d><*1wFc`%;ReM|b@1A<{y! zWM_VZ*>jF^PAm&GJf}@}C!c5K{tFnzL}aL}aTh2UAKCsBBN4oA1)y;YICt@xo?PAZ z8jX|(e4|H^rVY>AWS1rlBT#lsSSm%)Sb5U__lNwEEQ*|c(kTf|p3_()gLC!?CY7?M zrA$jl?f4^>p|&IAUuc-N4e)#3-MP9xfCT?CS;p1E=Iv|KeIUXuYIz`^D(^El15q2^ z`TUuK>`x^d?*E;7#xrJQ-e1Hub`?bF$qE>ucbMR2aICvP09@slF8`B?Iir;^6(;AV zcaj6^X-Ach^4p9&#{DurEowQrcg++;9XRYhlb1jKBhtR7 z*q-SGE7FN`6mXN*fy9eDlRc7brXs-vCT@W35^AlF4cHq(LcOdm`m*cD*zRi_xqD)~ zT1(Dw4YWuednMl#A{H@*8x`dHwvOL|11 znBxlEw(!HUKrh7JO*{&*SS*#&SZPCW6GFBHW~Tic-a+6;aPuBw#+(h{(`kA5*w!S{ zA*a&;-lU&qbF^a9`hLw#={WlyySf{Od&Itszid~JywuK(J8=ciH)f=FKKfjy*Fcm0 zcbo=();(BCMH|I$DYr`8Lfj#wg#D)~1ki|K2wJ$9H42&2xRre&yFW%vaaljy9?9zt z7wBK4C*w`RCzs>9o=fgAmNIPUjinsp!X}rWU=fuFID<0|<^LN{;hf@?7kPD-oGo~- z0E9c|{(X8mqlEgk0shc65mRSHZd+4s74buzG0bfnBASk>f>7(_Oi}SLDKwO z&>l3Pzgd82rpJzUHvt~4z|!+8d7PbBr?-0l5U2#(~xWJzfkeTA1wGn zhh%~P?)DxDBI6uT66`V#!gF)<6<_!|7G6rw8<} zxSkxlEdFr1?HiaQZY`q$%7PaCtdLMOr;K zuA-E?f1hBDUC6I1i08fnhxI>0xDIFjd(C+#LyaT>+W`~ifKTVPg9r92cRvlVh(M$} z3#R&MGftmuWPEu(y>5`T`~R}94?ASy;#)A2((rJ0*6t$9WZN-q-9?m*^D%;3{t%lZ zEDo52C{BOgPnQp}i^Kre7<5Jvp`h_R3EuC(dXF-ZE-ZhAUDtBP_t ztFF`EWq(IXpU>Q?`e|OqBB3P7$}6e2}Ee&<0JP-vp^vO7W$fvEE_21 zf|4a{l~sK~$u7?-qx_`ndlCJN(?U9St%w`{R_26N<69;9?K`DXs8;bb1eN?HFE@#+c32LGp8T1(jps}Y#SH3zU(ZQ(-}8jTwr{Z+~=V^fuVz_jCxO(!^KeDPYL(h$;E*= zot5MGD=IjiiujAM0G*qCYA;%;+q0Cq*ZXXOGG#Ev;2e!idp@m4P-+9X!F3pHYF zYS35Y+(cZIzC#%3()&jZKcfyMVc=Plz_UsKb~ta2z?_PxQq9c@^WJa?K3u7v{RogG zDSt(wQs>!G8O?ALg5g z9;B?qvh +![A collage of multiple light-themed PatternFly components, like a calendar, alert, and menu. The components have white backgrounds and black text.](./img/components-light.svg) + + +### Dark mode + +In dark mode, light text is presented on dark backgrounds backgrounds, and our color palette adapts to maintain a [text contrast ratio of at least 4.5:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#contrast-minimum) and [non-text contrast ratio of at least 3:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#non-text-contrast). Some users might prefer dark mode for aesthetics, while others find it to be easier on the eyes and less straining for those with light sensitivities. + +
+![A collage of multiple dark-themed PatternFly components, like a calendar, alert, and menu. The components have dark gray backgrounds and white text.](./img/components-dark.svg) +
+ +### High contrast mode + + +Learn more + +} +> +

High contrast mode is still under development and will continue to evolve and be enabled for charts and extensions. This beta allows you to preview our progress.

+
+ +High contrast mode adjusts our default colors to meet an [enhanced contrast ratio of at least 7:1](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html), making it more suitable for users who require higher contrast between UI elements. By using wider border strokes and adjusted fill colors, high contrast mode creates more visual distinction and clarity between interactive elements. + +In high contrast mode, distinct borders are also added to components to ensure that their boundaries are clearly defined without requiring users to rely on subtle background colors as a visual cue. + +## Using themes in Figma + +Our Figma libraries fully support theming. Designers can create a single layout and then use Figma's appearance feature to swap a wireframe to light, dark, or high contrast mode. This makes it easy to visually test and validate designs across all supported themes. + +
+![A dark colored flyout menu within an "Appearance" section. The menu expands "Semantic Color Tokens" with selectable options for "Auto (Light)", "Light", and "Dark."](./img/figma-dark-mode.png) +
+ +## Custom themes + +To branch off of our themes and create your own, you can alter design token values to specify new styles. + +Our layered design tokens allow you to create new themes simply by changing base token values in a single file. These adjustments will then apply appropriately to all semantic tokens across your codebase. + +### When to create a custom theme + +| **Don't** | **Do** | +| --- | --- | +| Create a theme just for one-off adjustments, like changing a single button color. Instead, modify small design changes using component props or utility classes. | Create a theme to adjust the overall brand identity of your application. | + +### How to create a custom theme + +When creating a custom theme, it is your responsibility to ensure that your new color combinations and styles continue to meet accessibility standards, such as a minimum text contrast ratio of 4.5:1. + +Add: Technical details and guidance (consider separate tab if this gets long) +- In which files must you override default values? +- Code example snippet. +- Tips or best practices? \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/get-started/release-highlights.md b/packages/documentation-site/patternfly-docs/content/get-started/release-highlights.md index 3ad55eafac..b34c4098c8 100644 --- a/packages/documentation-site/patternfly-docs/content/get-started/release-highlights.md +++ b/packages/documentation-site/patternfly-docs/content/get-started/release-highlights.md @@ -652,6 +652,6 @@ All of our components have a new look to match. As you use the alpha website, ta In order to support PatternFly 6, and any future visual theming capabilities, we have implemented a design token system for PatternFly. For more details and instructions on how to use tokens, you can refer to our new [design token documentation](/tokens/about-tokens). -Our tokens cover both dark and light themes, and make it easier to support both in your product. We also updated our [dark theme handbook](/developer-resources/dark-theme-handbook) to align with our tokens. +Our tokens cover both dark and light themes, and make it easier to support both in your product. We also updated our [dark theme handbook](/design-foundations/theming/dark-theme-handbook) to align with our tokens. **Note:*- The PatternFly 5 design library is not built with tokens. To take advantage of our token system, you must [upgrade your product to PatternFly 6](/get-started/upgrade). diff --git a/packages/documentation-site/patternfly-docs/content/tokens/develop-with-tokens.md b/packages/documentation-site/patternfly-docs/content/tokens/develop-with-tokens.md index 4ac133506a..0c537dc286 100644 --- a/packages/documentation-site/patternfly-docs/content/tokens/develop-with-tokens.md +++ b/packages/documentation-site/patternfly-docs/content/tokens/develop-with-tokens.md @@ -17,7 +17,7 @@ In the event that there isn't a semantic token that fits your use case, then you Our token system supports both light and dark themes by default. To enable dark theme, you just need to add the class `pf-[version]-theme-dark` (for example, `pf-v6-theme-dark`) to your application's `` tag. Then, when dark theme is enabled, your product will automatically pull in dark theme tokens, in order to adapt visual styles appropriately. -For more information, refer to our [dark theme handbook.](/developer-resources/dark-theme-handbook) +For more information, refer to our [dark theme handbook.](/design-foundations/theming/dark-theme-handbook) ## Migrate to tokens diff --git a/packages/site/src/content/get-started/release-highlights.mdx b/packages/site/src/content/get-started/release-highlights.mdx index cef730fe87..8952b70181 100644 --- a/packages/site/src/content/get-started/release-highlights.mdx +++ b/packages/site/src/content/get-started/release-highlights.mdx @@ -437,6 +437,6 @@ All of our components have a new look to match. As you use the alpha website, ta In order to support PatternFly 6, and any future visual theming capabilities, we have implemented a design token system for PatternFly. For more details and instructions on how to use tokens, you can refer to our new [design token documentation](/tokens/about-tokens). -Our tokens cover both dark and light themes, and make it easier to support both in your product. We also updated our [dark theme handbook](/developer-resources/dark-theme-handbook) to align with our tokens. +Our tokens cover both dark and light themes, and make it easier to support both in your product. We also updated our [dark theme handbook](/design-foundations/theming/dark-theme-handbook) to align with our tokens. **Note:*- The PatternFly 5 design library is not built with tokens. To take advantage of our token system, you must [upgrade your product to PatternFly 6](/get-started/upgrade). From 29246f51c51791aee5fc69c9445e5c3bce70f736 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Fri, 3 Oct 2025 10:06:07 -0400 Subject: [PATCH 2/7] iss4770-2 --- .../design-guidelines/styles/theming/theming.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md index 47141c749d..4af5a718e2 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md @@ -28,6 +28,8 @@ Generally, light mode is the default appearance of PatternFly. In this mode, dar In dark mode, light text is presented on dark backgrounds backgrounds, and our color palette adapts to maintain a [text contrast ratio of at least 4.5:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#contrast-minimum) and [non-text contrast ratio of at least 3:1](https://www.w3.org/WAI/WCAG22/quickref/?versions=2.1#non-text-contrast). Some users might prefer dark mode for aesthetics, while others find it to be easier on the eyes and less straining for those with light sensitivities. +For development guidance, refer to the [dark theme handbook](/design-foundations/theming/dark-theme-handbook). +
![A collage of multiple dark-themed PatternFly components, like a calendar, alert, and menu. The components have dark gray backgrounds and white text.](./img/components-dark.svg)
@@ -62,13 +64,13 @@ Our Figma libraries fully support theming. Designers can create a single layout To branch off of our themes and create your own, you can alter design token values to specify new styles. -Our layered design tokens allow you to create new themes simply by changing base token values in a single file. These adjustments will then apply appropriately to all semantic tokens across your codebase. +Our layered design tokens allow you to customize existing themes simply by changing base token values in a single file. These adjustments will then apply appropriately to all semantic tokens across your codebase. -### When to create a custom theme +### When to customize a theme -| **Don't** | **Do** | -| --- | --- | -| Create a theme just for one-off adjustments, like changing a single button color. Instead, modify small design changes using component props or utility classes. | Create a theme to adjust the overall brand identity of your application. | +There are a couple of instances when you might want to adjust an existing PatternFly theme: +- One-off adjustments, like changing a single button color, spacer, or font size, when intentional deviation is needed across your product. +- Application-wide adjustments, like changing all button colors and font sizes to adjust the overall brand identity of your product. ### How to create a custom theme From ca43420b845e4229005ed3e48463d9f0eaf78afa Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Mon, 6 Oct 2025 15:55:26 -0400 Subject: [PATCH 3/7] In progress working towards final draft --- .../styles/theming/dark-theme-handbook.md | 18 ++--- .../styles/theming/high-contrast-handbook.md | 68 ++++++++++++++++++ .../styles/theming/img/figma-dark-hc.svg | 10 +++ .../styles/theming/img/figma-dark-mode.png | Bin 56437 -> 0 bytes .../theming/img/figma-light-default.svg | 10 +++ .../styles/theming/theming.md | 48 +++++++++---- 6 files changed, 129 insertions(+), 25 deletions(-) create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-hc.svg delete mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-mode.png create mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-light-default.svg diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md index 8414ebf4de..23928c973e 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md @@ -4,6 +4,8 @@ section: design-foundations source: dark-theme-handbook --- +# Dark theme developer handbook + ## Enabling dark theme Dark theme styles ship with PatternFly CSS by default. To enable dark theme, add the class `pf-[version]-theme-dark` (for example, `pf-v6-theme-dark`) to your application's `` tag. This class can be added dynamically to toggle dark theme on and off in your application. @@ -45,17 +47,9 @@ To create images that adapt to light and dark themes, there are a few approaches ## Best practices -To make it easier to support light and dark theming in your application, we recommend following these best practices during design and development: - -* **Use PatternFly components without customizations.** Most problems with dark theming are due to the use of custom styles, overrides to PatternFly styles, and non-PatternFly components. To ensure consistent styling and behavior when switching themes, try to use PatternFly components as they are. - -* **Use tokens and component variables to define any overrides.** - * For example, to override a primary button’s background color, declare `.pf-[version]-c-button { --pf-[version]-c-button--m-primary--BackgroundColor: [color token]; }` instead of `.pf-[version]-c-button.pf-m-primary { background-color: [color token]; }`. - -* **Use tokens in custom styles.** - * For example, use `background-color: var(--pf-t--[version]--global--background--color--primary--default)` for a primary background instead of `background-color: #fff` or `background-color: white`. Values like `#fff` and `white` will not change between light and dark theme, but tokens will. +The most important step to ensure your application supports dark theme is to follow our [general theming best practices](/design-foundations/theming#best-practices). Adhering to these guidelines, especially by using design tokens instead of hard-coded values, will resolve most adoption challenges. -* **Always use the most relevant semantic token for your use case.** If there isn't a semantic token for your scenario, then you can use a base token. Never use a palette token directly in your code. - * For example, `--pf-t--[version]--global--text--color--link--default`, `--pf-t--[version]--color--blue--20`, and `#b9dafc` are all the same in PatternFly's default light theme. When you create something custom, where the color should match the application’s link text color, any of these values will work. However, in a different theme, these token values may not always be the same color. +Additionally, keep these key points in mind: -* **Use SVG files or icon fonts for icons, and use tokens for icon colors.** To easily manipulate icon colors between light and dark theme, SVG files and icon fonts can be changed via CSS by using the `fill` and `color` properties. When using semantic tokens, like `--pf-t--[version]--global--color--status--info--default`, colors will automatically adjust between light and dark theme. If images must be used, we advise you to use colors that work well in both light and dark themes and/or hide and show the appropriate images based on the presence of the dark theme body class. \ No newline at end of file +- **Plan for static images:** If you can't use SVGs that are compatible with both light and dark backgrounds, you will need to create two versions of you image and swap them based on the active theme. +- **Test custom components in both themes:** When building custom components, always check your work in both light and dark themes. This helps you catch issues early, like hard-coded colors or styles that don't adapt as expected. \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md new file mode 100644 index 0000000000..306de3a4cc --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md @@ -0,0 +1,68 @@ +--- +id: Theming +section: design-foundations +source: high-contrast-handbook +--- + +# High contrast mode developer handbook + +## High contrast mode vs. forced colors mode + +Our high contrast mode increases the contrast of PatternFly components, often introducing additional borders to distinguish between elements, states, and interactions that otherwise rely on subtle background colors. High contrast mode is enabled by applying styles that are meant to target the [`prefers-contrast: more`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast) media query, which is the mode triggered on MacOS via **System Settings** > **Accessibility** > **Display** > **Increase contrast**. + +This is different from [`forced-colors: active`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors), which is a more aggressive contrast mode where the browser enforces a limited, user-chosen color palette on a webpage, often by replacing author-defined colors with CSS system colors and removing styles like background colors and box shadows. Common triggers for forced colors mode are enabling Windows High Contrast Mode and Firefox High Contrast Mode. As outlined in “Automatically by the user’s OS/browser preferences”, we recommend applying high contrast mode when `forced-colors: active` is `true`. + +## Enabling high contrast mode + +High contrast mode is designed to work with both our standard light and dark themes, with styles shipping by default with PatternFly CSS. To enable high contrast mode, add the class `.pf-v6-theme-high-contrast` to your application’s `` tag. This class can be added dynamically to toggle high contrast mode on and off in your application. + +[Adam Argyle's "Building a theme switch" article](https://web.dev/articles/building/a-theme-switch-component) outlines principles that should be applied to a high contrast mode theme switcher. + +### Automatic high contrast + +To apply high contrast mode automatically, based off of a user’s OS and browser contrast preferences, you can use `window.matchMedia()` to detect the browser’s `prefers-contrast` and `forced-colors` media queries. Because our high contrast mode often introduces additional borders, we recommend detecting `forced-colors: active` and applying high contrast styles when the value is `true`. + +Even when high contrast mode is enabled automatically, it’s important to also add a manual toggle that allows users to toggle the theme on and off. A user's manual toggle of high contrast should always override the OS and browser preference. + +### Dynamic high contrast + +To allow your users to apply high contrast mode dynamically, independent of their OS and browser preferences, you can place an interactive toggle in a prominent location of your application. It is best practice store a user’s most recent toggle selection by storing their preference in `localStorage`, and using it enable or disable high contrast mode automatically when they return. + +## High contrast design tokens + +The following tokens have been introduced specifically for use in high contrast mode. + +| **Token** | **Default theme value** | **High contrast mode value** | +| :---: | :---: | :---: | +| `--pf-t--global--border--color--high-contrast` | `transparent` | `--pf-t--global--border--color--default` | +| `--pf-t--global--border--width--high-contrast--regular` | 0rem | `--pf-t--global--border--width--regular` | +| `--pf-t--global--border--width--high-contrast--strong` | 0rem | `--pf-t--global--border--width--strong` | +| `--pf-t--global--border--width--high-contrast--extra-strong`| 0rem | `--pf-t--global--border--width--extra-strong`| + +**Note:** The `--pf-t--global--border--color--high-contrast` token can be used strategically to support styles in `forced-colors` mode, as a previously transparent border will become visible when this mode is active. + +### Plain action tokens + +We also added the following tokens for plain actions (actions with a transparent background). These are now used in PatternFly anywhere where an action has a transparent background, such as plain buttons or navigation items. + +| **Token** | **Default theme value** | **High contrast mode value** | +| :---: | :---: | :---: | +| `--pf-t--global--border--width--action--plain--default` | 0rem | 0rem| +| `--pf-t--global--border--width--action--plain--hover` | 0rem | `--pf-t--global--border--width--100` | +| `--pf-t--global--border--width--action--plain--clicked` | 0rem | `--pf-t--global--border--width--200` | + +## Best practices + +In addition to the [general theming best practices](/design-foundations/theming#best-practices), ensure that you adhere to the following guidelines when working in high contrast mode. + +### Color and contrast + +- **Meet text contrast ratios:** All normal text must meet a minimum contrast ratio of 7:1 against its background. While WCAG allows a 4.5:1 ratio for large text (18px or larger), it is best to aim for a 7:1 ratio for all text sizes to ensure maximum readability. +- **Meet non-text contrast ratios:** All other UI elements, like icons and borders must meet a minimum contrast ratio of 4.5:1 against their background. + +### Boundaries + +- **Add borders for clarity:** If an element's background color doesn't have a 4.5:1 contrast ratio, add a visible border. For example, add borders to elements with a secondary background color that are placed on top of a primary background. +- **Replace shadows with borders:** To properly separate elements from the background, add a border to any elements that rely on a shadow in default themes. +- **Thicken borders on interaction:** Use border width to provide clear feedback for interactive states. An element's border should become progressively thicker on hover, focus, and click. + - Example: An element with no default border should have a `1px` border on hover and a `2px` border when clicked. \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-hc.svg b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-hc.svg new file mode 100644 index 0000000000..0bd8a44776 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-hc.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-mode.png b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-mode.png deleted file mode 100644 index 508582f3213cd4c376bf9df58de22bb925a4cc24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56437 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 + + + + + + + + + diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md index 4af5a718e2..08421d582a 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md @@ -52,13 +52,7 @@ High contrast mode adjusts our default colors to meet an [enhanced contrast rati In high contrast mode, distinct borders are also added to components to ensure that their boundaries are clearly defined without requiring users to rely on subtle background colors as a visual cue. -## Using themes in Figma - -Our Figma libraries fully support theming. Designers can create a single layout and then use Figma's appearance feature to swap a wireframe to light, dark, or high contrast mode. This makes it easy to visually test and validate designs across all supported themes. - -
-![A dark colored flyout menu within an "Appearance" section. The menu expands "Semantic Color Tokens" with selectable options for "Auto (Light)", "Light", and "Dark."](./img/figma-dark-mode.png) -
+For development guidance, refer to the [high contrast handbook](/design-foundations/theming/high-contrast-handbook). ## Custom themes @@ -72,11 +66,39 @@ There are a couple of instances when you might want to adjust an existing Patter - One-off adjustments, like changing a single button color, spacer, or font size, when intentional deviation is needed across your product. - Application-wide adjustments, like changing all button colors and font sizes to adjust the overall brand identity of your product. -### How to create a custom theme +## Using themes in Figma + +Our Figma libraries fully support theming. Designers can create a single layout and then use various Figma settings to swap a wireframe to light, dark, or high contrast mode. This makes it easy to visually test and validate designs across all supported themes. + +### Dark theme + +To swap your designs to use dark theme, change the selection of **Charts** and **Semantic Color Tokens** to be "Dark": + +
+![A dark colored flyout menu within an "Appearance" section. The menu expands "Semantic Color Tokens" with selectable options for "Auto (Light)", "Light", and "Dark."](./img/figma-light-default.svg) +
+ +### High contrast modes + +To swap your designs to use high contrast mode, change the selection of **Semantic Dimension Tokens** to be "High Contrast". Then, select your preference for light or dark high contrast within **Charts** and **Semantic Color Tokens**. + +For example, your settings for a dark high contrast mode theme would look like this: + +
+![A dark colored flyout menu within an "Appearance" section. The menu expands "Semantic Color Tokens" with selectable options for "Auto (Light)", "Light", and "Dark."](./img/figma-dark-hc.svg) +
+ +## Best practices -When creating a custom theme, it is your responsibility to ensure that your new color combinations and styles continue to meet accessibility standards, such as a minimum text contrast ratio of 4.5:1. +To ensure your application is robust, maintainable, and adaptable across different themes, we recommend following these best practices. -Add: Technical details and guidance (consider separate tab if this gets long) -- In which files must you override default values? -- Code example snippet. -- Tips or best practices? \ No newline at end of file +- **Use default PatternFly components:** Whenever possible, use PatternFly components as they are. This ensures you stay up-to-date with our intended design, functionality, and accessibility standards. It also makes upgrades more seamless, decreases development time, and guarantees consistency across applications. +- **Use design tokens and variables for customizations:** If you must customize a component, use the appropriate method: + - **Design tokens:** For global changes + - **Component variables:** For component-specific changes + - Example: To override a primary button’s background color, declare `.pf-[version]-c-button { --pf-[version]-c-button--m-primary--BackgroundColor: [color token]; }` instead of `.pf-[version]-c-button.pf-m-primary { background-color: [color token]; }`. +- **Always use tokens to create custom styles:** When creating custom components or styles, never use hard-coded values like hex codes or color names (`#fff` or `white`). Instead, use the appropriate design token, such as `var(--pf-t--global--background--color--primary--default)`. Tokens automatically adapt to different themes, while hard-coded values do not. +- **Prioritize semantic tokens:** Always use the most relevant semantic token for your use case to ensure the element's purpose is clear and that it receives the correct styling in any theme. If no semantic token exists, you can fall back to a base token. +- **Never use a palette token**: Do not use palette tokens (like `--pf-t--color--blue--20`) directly in your code, as the value is not guaranteed to be consistent across themes. +- **Use scalable icons:** For icons, use SVG files or icon fonts instead of PNGs or JPEGs. This allows you to control their color with CSS `fill` and `color` properties. By assigning a design token to these properties, your icons will automatically change color to match the active theme. + - If you must use static images, you might need to hide and show different image files based presence of a theme-specific class (like `pf-v5-theme-dark`). \ No newline at end of file From 1a177695c93052fc6cad2785da510be028d84ea1 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Tue, 7 Oct 2025 10:10:43 -0400 Subject: [PATCH 4/7] Update packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md Co-authored-by: Michael Coker <35148959+mcoker@users.noreply.github.com> --- .../design-guidelines/styles/theming/high-contrast-handbook.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md index 306de3a4cc..bead3b1966 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md @@ -20,7 +20,7 @@ High contrast mode is designed to work with both our standard light and dark the ### Automatic high contrast -To apply high contrast mode automatically, based off of a user’s OS and browser contrast preferences, you can use `window.matchMedia()` to detect the browser’s `prefers-contrast` and `forced-colors` media queries. Because our high contrast mode often introduces additional borders, we recommend detecting `forced-colors: active` and applying high contrast styles when the value is `true`. +To apply high contrast mode automatically, based off of a user’s OS and browser contrast preferences, you can use `window.matchMedia()` to detect the browser’s `prefers-contrast` and `forced-colors` media queries. Because our high contrast mode often introduces additional borders, we recommend detecting `forced-colors` and applying high contrast styles when the value is `active`. Even when high contrast mode is enabled automatically, it’s important to also add a manual toggle that allows users to toggle the theme on and off. A user's manual toggle of high contrast should always override the OS and browser preference. From d246ccc25812ca62d4b07d23466f2b94ac1850eb Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Thu, 9 Oct 2025 11:00:06 -0400 Subject: [PATCH 5/7] Updates from PR review --- .../styles/theming/dark-theme-handbook.md | 2 +- .../styles/theming/high-contrast-handbook.md | 20 +++++++++---------- .../styles/theming/theming.md | 10 ++++------ 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md index 23928c973e..84f272dfff 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/dark-theme-handbook.md @@ -8,7 +8,7 @@ source: dark-theme-handbook ## Enabling dark theme -Dark theme styles ship with PatternFly CSS by default. To enable dark theme, add the class `pf-[version]-theme-dark` (for example, `pf-v6-theme-dark`) to your application's `` tag. This class can be added dynamically to toggle dark theme on and off in your application. +Dark theme is available with PatternFly by default. To enable dark theme, add the class `pf-[version]-theme-dark` (for example, `pf-v6-theme-dark`) to your application's `` tag. This class can be added dynamically to toggle dark theme on and off in your application. Dark theme can also be applied based on the browser’s `prefers-color-scheme` media query. When using this method, we recommend using JavaScript to detect the media query and apply the `pf-[version]-theme-dark` class. This allows you to manipulate a single class in order to toggle dark theme based on user preference. [Adam Argyle wrote a great article](https://web.dev/building-a-theme-switch-component/#javascript) on using JavaScript to manage dark theme preference, using the `prefers-color-scheme` media query alongside a manual button that toggles dark theme. diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md index bead3b1966..943c379c9e 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md @@ -10,11 +10,11 @@ source: high-contrast-handbook Our high contrast mode increases the contrast of PatternFly components, often introducing additional borders to distinguish between elements, states, and interactions that otherwise rely on subtle background colors. High contrast mode is enabled by applying styles that are meant to target the [`prefers-contrast: more`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-contrast) media query, which is the mode triggered on MacOS via **System Settings** > **Accessibility** > **Display** > **Increase contrast**. -This is different from [`forced-colors: active`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors), which is a more aggressive contrast mode where the browser enforces a limited, user-chosen color palette on a webpage, often by replacing author-defined colors with CSS system colors and removing styles like background colors and box shadows. Common triggers for forced colors mode are enabling Windows High Contrast Mode and Firefox High Contrast Mode. As outlined in “Automatically by the user’s OS/browser preferences”, we recommend applying high contrast mode when `forced-colors: active` is `true`. +This is different from [`forced-colors: active`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/forced-colors), which is a more aggressive contrast mode where the browser enforces a limited, user-chosen color palette on a webpage, often by replacing author-defined colors with CSS system colors and removing styles like background colors and box shadows. Common triggers for forced colors mode are enabling Windows High Contrast Mode and Firefox High Contrast Mode. As outlined in [“Automatic high contrast”](#automatic-high-contrast), we recommend applying high contrast mode when `forced-colors: active` is `true`. ## Enabling high contrast mode -High contrast mode is designed to work with both our standard light and dark themes, with styles shipping by default with PatternFly CSS. To enable high contrast mode, add the class `.pf-v6-theme-high-contrast` to your application’s `` tag. This class can be added dynamically to toggle high contrast mode on and off in your application. +High contrast mode is designed to work with both our standard light and dark themes, and it's available with PatternFly by default. To enable high contrast mode, add the class `.pf-v6-theme-high-contrast` to your application’s `` tag. This class can be added dynamically to toggle high contrast mode on and off in your application. [Adam Argyle's "Building a theme switch" article](https://web.dev/articles/building/a-theme-switch-component) outlines principles that should be applied to a high contrast mode theme switcher. @@ -34,12 +34,12 @@ The following tokens have been introduced specifically for use in high contrast | **Token** | **Default theme value** | **High contrast mode value** | | :---: | :---: | :---: | -| `--pf-t--global--border--color--high-contrast` | `transparent` | `--pf-t--global--border--color--default` | -| `--pf-t--global--border--width--high-contrast--regular` | 0rem | `--pf-t--global--border--width--regular` | -| `--pf-t--global--border--width--high-contrast--strong` | 0rem | `--pf-t--global--border--width--strong` | -| `--pf-t--global--border--width--high-contrast--extra-strong`| 0rem | `--pf-t--global--border--width--extra-strong`| +| `--pf-t--global--border--color--high-contrast` | `transparent` | `--pf-t--global--border--color--default`

Light mode value: #4D4D4D
Dark mode value: #C7C7C7 | +| `--pf-t--global--border--width--high-contrast--regular` | 0px | `--pf-t--global--border--width--regular`

Value: 1px | +| `--pf-t--global--border--width--high-contrast--strong` | 0px | `--pf-t--global--border--width--strong`

Value: 2px | +| `--pf-t--global--border--width--high-contrast--extra-strong`| 0px | `--pf-t--global--border--width--extra-strong`

Value: 3px| -**Note:** The `--pf-t--global--border--color--high-contrast` token can be used strategically to support styles in `forced-colors` mode, as a previously transparent border will become visible when this mode is active. +**Note:** The `--pf-t--global--border--color--high-contrast` token can be used strategically to support styles in `forced-colors` mode, as transparent borders will become visible when this mode is active. ### Plain action tokens @@ -47,9 +47,9 @@ We also added the following tokens for plain actions (actions with a transparent | **Token** | **Default theme value** | **High contrast mode value** | | :---: | :---: | :---: | -| `--pf-t--global--border--width--action--plain--default` | 0rem | 0rem| -| `--pf-t--global--border--width--action--plain--hover` | 0rem | `--pf-t--global--border--width--100` | -| `--pf-t--global--border--width--action--plain--clicked` | 0rem | `--pf-t--global--border--width--200` | +| `--pf-t--global--border--width--action--plain--default` | 0px| 0px| +| `--pf-t--global--border--width--action--plain--hover` | 0px | `--pf-t--global--border--width--100`

Value: 1px | +| `--pf-t--global--border--width--action--plain--clicked` | 0px | `--pf-t--global--border--width--200`

Value: 2px | ## Best practices diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md index 08421d582a..b3980798e5 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md @@ -10,7 +10,7 @@ import ExternalLinkAltIcon from '@patternfly/react-icons/dist/esm/icons/external A **theme** applies a specific visual style to all UI components in order to create a unique, cohesive, and purposeful look. The use of theming can provide more flexibility for user preferences, as well as different options for accessibility needs. -Theming is supported in PatternFly through [our design token system](/tokens/about-tokens), which was intentionally structured so that sets of tokens can be adjusted together to create alternate UI styles. By reassigning color and dimension token values, the fonts, spacing, shadows, and borders in a UI can be changed together to create a theme. This system has enabled us to create multiple PatternFly themes, while also supporting the ability for you to create custom themes. +Theming is supported in PatternFly through [our design token system](/tokens/about-tokens), which was intentionally structured so that sets of tokens can be adjusted together to create alternate UI styles. By reassigning token values, the fonts, spacing, shadows, and borders in a UI can be changed together to create a theme. This system has enabled us to create multiple PatternFly themes, while also supporting the ability for you to create custom themes. ## PatternFly themes @@ -56,9 +56,7 @@ For development guidance, refer to the [high contrast handbook](/design-foundati ## Custom themes -To branch off of our themes and create your own, you can alter design token values to specify new styles. - -Our layered design tokens allow you to customize existing themes simply by changing base token values in a single file. These adjustments will then apply appropriately to all semantic tokens across your codebase. +To branch off of our themes and create your own, you can identify the design tokens you'd like to adjust on our [all tokens page](/tokens/all-patternfly-tokens) and provide new values to use within your application. ### When to customize a theme @@ -96,9 +94,9 @@ To ensure your application is robust, maintainable, and adaptable across differe - **Use design tokens and variables for customizations:** If you must customize a component, use the appropriate method: - **Design tokens:** For global changes - **Component variables:** For component-specific changes - - Example: To override a primary button’s background color, declare `.pf-[version]-c-button { --pf-[version]-c-button--m-primary--BackgroundColor: [color token]; }` instead of `.pf-[version]-c-button.pf-m-primary { background-color: [color token]; }`. + - Example: To override a primary button’s background color, declare `.pf-v6-c-button { --pf-v6-c-button--m-primary--BackgroundColor: [color token]; }` instead of `.pf-v6-c-button.pf-m-primary { background-color: [color token]; }`. - **Always use tokens to create custom styles:** When creating custom components or styles, never use hard-coded values like hex codes or color names (`#fff` or `white`). Instead, use the appropriate design token, such as `var(--pf-t--global--background--color--primary--default)`. Tokens automatically adapt to different themes, while hard-coded values do not. - **Prioritize semantic tokens:** Always use the most relevant semantic token for your use case to ensure the element's purpose is clear and that it receives the correct styling in any theme. If no semantic token exists, you can fall back to a base token. - **Never use a palette token**: Do not use palette tokens (like `--pf-t--color--blue--20`) directly in your code, as the value is not guaranteed to be consistent across themes. - **Use scalable icons:** For icons, use SVG files or icon fonts instead of PNGs or JPEGs. This allows you to control their color with CSS `fill` and `color` properties. By assigning a design token to these properties, your icons will automatically change color to match the active theme. - - If you must use static images, you might need to hide and show different image files based presence of a theme-specific class (like `pf-v5-theme-dark`). \ No newline at end of file + - If you must use static images, you might need to hide and show different image files based presence of a theme-specific class (like `pf-v6-theme-dark`). \ No newline at end of file From ba616792db2a23b33f2eeded40c0e8f91754c3ee Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Fri, 10 Oct 2025 14:38:51 -0400 Subject: [PATCH 6/7] Remove Figma details for now --- .../styles/theming/img/figma-dark-hc.svg | 10 ---------- .../theming/img/figma-light-default.svg | 10 ---------- .../styles/theming/theming.md | 20 +------------------ 3 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-hc.svg delete mode 100644 packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-light-default.svg diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-hc.svg b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-hc.svg deleted file mode 100644 index 0bd8a44776..0000000000 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-dark-hc.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-light-default.svg b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-light-default.svg deleted file mode 100644 index 803f2e17f5..0000000000 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/img/figma-light-default.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md index b3980798e5..e857ed216c 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md @@ -66,25 +66,7 @@ There are a couple of instances when you might want to adjust an existing Patter ## Using themes in Figma -Our Figma libraries fully support theming. Designers can create a single layout and then use various Figma settings to swap a wireframe to light, dark, or high contrast mode. This makes it easy to visually test and validate designs across all supported themes. - -### Dark theme - -To swap your designs to use dark theme, change the selection of **Charts** and **Semantic Color Tokens** to be "Dark": - -
-![A dark colored flyout menu within an "Appearance" section. The menu expands "Semantic Color Tokens" with selectable options for "Auto (Light)", "Light", and "Dark."](./img/figma-light-default.svg) -
- -### High contrast modes - -To swap your designs to use high contrast mode, change the selection of **Semantic Dimension Tokens** to be "High Contrast". Then, select your preference for light or dark high contrast within **Charts** and **Semantic Color Tokens**. - -For example, your settings for a dark high contrast mode theme would look like this: - -
-![A dark colored flyout menu within an "Appearance" section. The menu expands "Semantic Color Tokens" with selectable options for "Auto (Light)", "Light", and "Dark."](./img/figma-dark-hc.svg) -
+Our Figma libraries fully support theming. Designers can create a single layout and then use various Figma "Appearance" settings to swap a wireframe to light, dark, or high contrast mode. This makes it easy to visually test and validate designs across all supported themes. ## Best practices From 5f54bcfb743e1e1286027d92672dbfebfa047a33 Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:01:00 -0400 Subject: [PATCH 7/7] A couple of final edits. --- .../design-guidelines/styles/theming/high-contrast-handbook.md | 2 +- .../content/design-guidelines/styles/theming/theming.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md index 943c379c9e..8a102a9e94 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/high-contrast-handbook.md @@ -65,4 +65,4 @@ In addition to the [general theming best practices](/design-foundations/theming# - **Add borders for clarity:** If an element's background color doesn't have a 4.5:1 contrast ratio, add a visible border. For example, add borders to elements with a secondary background color that are placed on top of a primary background. - **Replace shadows with borders:** To properly separate elements from the background, add a border to any elements that rely on a shadow in default themes. - **Thicken borders on interaction:** Use border width to provide clear feedback for interactive states. An element's border should become progressively thicker on hover, focus, and click. - - Example: An element with no default border should have a `1px` border on hover and a `2px` border when clicked. \ No newline at end of file + - Example: An element with no default border should have a 1px border on hover and a 2px border when clicked. \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md index e857ed216c..7d29c785a1 100644 --- a/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md +++ b/packages/documentation-site/patternfly-docs/content/design-guidelines/styles/theming/theming.md @@ -80,5 +80,5 @@ To ensure your application is robust, maintainable, and adaptable across differe - **Always use tokens to create custom styles:** When creating custom components or styles, never use hard-coded values like hex codes or color names (`#fff` or `white`). Instead, use the appropriate design token, such as `var(--pf-t--global--background--color--primary--default)`. Tokens automatically adapt to different themes, while hard-coded values do not. - **Prioritize semantic tokens:** Always use the most relevant semantic token for your use case to ensure the element's purpose is clear and that it receives the correct styling in any theme. If no semantic token exists, you can fall back to a base token. - **Never use a palette token**: Do not use palette tokens (like `--pf-t--color--blue--20`) directly in your code, as the value is not guaranteed to be consistent across themes. -- **Use scalable icons:** For icons, use SVG files or icon fonts instead of PNGs or JPEGs. This allows you to control their color with CSS `fill` and `color` properties. By assigning a design token to these properties, your icons will automatically change color to match the active theme. +- **Use scalable icons:** For icons, use vector images (SVG) or icon fonts instead of raster or bitmap images (PNG, JPEG, GIF, BMP, and so on). This allows you to control their color with CSS `fill` and `color` properties. By assigning a design token to these properties, your icons will automatically change color to match the active theme. - If you must use static images, you might need to hide and show different image files based presence of a theme-specific class (like `pf-v6-theme-dark`). \ No newline at end of file