From 71ffedfaa4ed2b3d61dd45a5a427bbeb3ee79899 Mon Sep 17 00:00:00 2001 From: Till Heidrich Date: Tue, 15 Sep 2026 15:42:22 +0000 Subject: [PATCH] German page, and a section for the image module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit / and /de/ are now two pages from one shared component and one copy file, with hreflang between them and a language button in the header. Separate URLs rather than a runtime switch: each language is linkable and indexable, and the page still works without JavaScript. The sheet playground takes its labels from the page, so its readout says "29,7 cm" in German and "29.7 cm" in English. New section for the `ai` module, because the page so far read as if Klarbild were print-only. It says plainly what the module costs and that the endpoint is configurable, and it carries a preset builder: pick tasks and a target size, see the exact pixels and the recipe that gets saved. It composes; it does not generate. A generator here would need a key on a public page and would show a picture from a model rather than anything about Klarbild — the part worth showing is the recipe. The target pixels come from engine/format.ts, copied verbatim from the application like the layout files. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Nh4A79bbqT9dcd2inzYUdg --- README.md | 13 +- public/shots/studio.png | Bin 0 -> 171643 bytes src/components/Page.astro | 415 ++++++++++++++++++++++++++++++++++++++ src/engine/format.ts | 77 +++++++ src/lib/copy.ts | 394 ++++++++++++++++++++++++++++++++++++ src/lib/playground.ts | 39 +++- src/lib/recipe.ts | 148 ++++++++++++++ src/pages/de/index.astro | 5 + src/pages/index.astro | 364 +-------------------------------- src/styles/site.css | 43 ++++ 10 files changed, 1126 insertions(+), 372 deletions(-) create mode 100644 public/shots/studio.png create mode 100644 src/components/Page.astro create mode 100644 src/engine/format.ts create mode 100644 src/lib/copy.ts create mode 100644 src/lib/recipe.ts create mode 100644 src/pages/de/index.astro diff --git a/README.md b/README.md index 42c125a..8205df6 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,10 @@ The product and demo page for [Klarbild](https://github.com/tillheidrich/klarbild), live at **klarbild-demo.heidrich-digital.de**. -A single static Astro page. The interesting part is `src/lib/playground.ts`: it +Two static Astro pages — `/` in English and `/de/` in German, from one shared +component and one copy file (`src/lib/copy.ts`). The languages are separate URLs +rather than a runtime switch, so each one is linkable, indexable and works without +JavaScript; the button in the header is an ordinary link. The interesting part is `src/lib/playground.ts`: it imports `src/engine/printlayout.ts` and `src/engine/paper.ts` **verbatim from the Klarbild repository** and runs them in the visitor's browser. So the sheet you see being laid out is not a mock-up — it is the application's own arithmetic, and the @@ -11,6 +14,12 @@ PDF the page hands you is drawn from the same placements (with pdf-lib in the browser rather than sharp on a server, which is why it carries outlines instead of photographs). +The preset builder in the image-generation section does the same with +`src/engine/format.ts`: it composes a real Klarbild recipe and shows the exact +target pixels, but it never calls a model. Generating on a public page would mean +a key on that page and a bill for every curious visitor — and the picture would +say something about the model rather than about Klarbild. + Nothing is uploaded and there is no backend. ```bash @@ -23,7 +32,7 @@ npm run dev `src/engine/*` are copies. When the print engine changes upstream, copy them again: ```bash -cp ../klarbild/src/lib/{printlayout,paper,printoversize}.ts src/engine/ +cp ../klarbild/src/lib/{printlayout,paper,printoversize,format}.ts src/engine/ cp ../klarbild/src/styles/tokens.css src/styles/tokens.css # printoversize.ts imports './printlayout.ts'; drop the extension for the bundler sed -i "s#from './printlayout.ts'#from './printlayout'#" src/engine/printoversize.ts diff --git a/public/shots/studio.png b/public/shots/studio.png new file mode 100644 index 0000000000000000000000000000000000000000..ae843abce560251f7b3cf5d87ae2effc0f4a4daa GIT binary patch literal 171643 zcmYg%WmH^Cv~-+6f&_PhTX1&>?rwv-yX%Ay+}+&=26qh}+}+*X{X2Q@yZ7Ds!K}ra zKHaBf@2c9>L2@#p@Nn30uU@@^7Z(#!c=ZbI^wlevk00Lv|FL=YZF=6N&UfRbzK z;nI6uMb(AhXDO3Qaq;LbHx+~ny8f2FR)bzrD-A6xTrO<7;e%ML{!L9ywQ?>uB+{)h z%hCDb^Z8bw@$(nxC-R+i>b{l+=X8&719h_~5(*OWf)`cQs93B5(i|zTvrk*a6eMY- z<`Ub)e|!J`pC8krs%VaKqU=81U!*56@-t%{hH|hV(vo_NWstdp&*EvkI`UTQ7$30g z;lckj0=_fz=!?$ETv^_Iz=U~^*?|bj#&$H;djl5(rk?OWean%>EH&S({yxob(odWM zLQ}OCHe9HtOxYPQn)Hq3KhG)mAY*wJp`pcOtB{lY=F?$lKJ^U6mNbc#OBQ0l??eKh`0^GxA!Wkhv)>p6bNpEBZjeh9utW??*`GNMr=O1Q#R zEmmlNGEU$6JID@JTN(Nry>Yc)KkGmI=K&xDzudxQBj0RyOMWZ)cjJESuhaZGwztqQ zIxwl4Qt5xm?|zO#f}4nLPe&|6gal_ge#Pwl8M6!Z2!k8vK%9oI2Quby1_)iJ(H zc7htW1y94XE7h19**mHnkzN?AQHaj2$BB}r9!^4+p>FU++2-~Cwda@AQ`oZ!)RLQ= z788^{!lMX%fYQS;(YqBh=jP56!=tinC$f%Y){iQSNJAM%zyG&u8Zr2|XHG$`k5iop zgAZ+bd)g$F+(rfXi4O?P;^JB*(6LdlOPxESaxGLi>=CC?) ziI@AfSyD#3z8$WI5P7M7YKuL~@2V|v?;EP%Vzv|$X$$1B{N^mt-u-vwN5>PDZd7HJ zYDRTYzh}~WgR?@1O@9VsbGp(0Vqll3p_QHb++FRcP_st~(Z?nc-1U{;L4}LC{u(Mu zlK-E%`++WGLg_^)(ms0X(?JoL$!LU1BZuaiS*SgTY?Ky4xc9BLQ*OaDcwd@Jtfuvn4GKY;%Fij5P|Cpl&x@P- zguZzN49prgR1n8e!AkD~*^?p#M0VkHd5m2{k2MMccAP4(U~Yj-e;vg3lcNaLr$(K^ zPW#UzUeWm4VZdX&d4&pBrR)3Y3?8n?Jq50Z5T+5r{%$}X4nu_b$iCxyu8$iV=2TNX zaA;EHfBS|1e*d3mfQZvd-4hTR_r*8-F{B=X%8}A^@pV>B&$Z>f%%k(%Qhv!(4EC^@ zb!F{KOT$b2r{yb;e0u4`%Nt$f2|1c`eiJiJk+*2^Z{T8kwB&Zbg_jnZ{mA=(=@>_d z0OzOv?3eYQrkQ?YSjta0@)Wec=n~l)b)yZIjeXT?*II^~2ZGG~LdkQB@#o~cvZwNk z3pKxGWBjM7DRi^&Ra#b%|2_?+*mfB0B$BtBqNz_#hiQGsc;Uks@ZWT`ipxTHn3tF!+}=2GqlAl$MYFn!M| zWcZa?`76&ZOtge6v;CY=nFUs_`W?oHy-*FKLi}CbtP|LvA0Mib^#@cf9I?Yxiu0bA zV|{&Z71=qcK#CKn|8{1|=_l;x=l5RN?>(oMky9m*S5i`%6joM$(5+wZ9D>A1CrtQf)}aRxL~nGZRFJ_G7Fb{h^XyB2}zV2MH%h{yEFR&LuuP42MAV z@4yPhy#=hDRcb|Y;;HuMmzH>hgqs2i3cd>@?9}E?n1#T7`ULk0n5NCbFXZF}uU`0N z>1>L7*le-{AcU-|9c^$SMkTN~g_w|HrpzpRhHorbdTyu}Jwzmpsrw%-TA4D&#)&Jq8SX4u$ z9M(oTDZF!7V(Ywq`hUT@sIZWpoV>WYS}9jcQ}gYcpNmUNq|9aO>+6SypF2UPh#yaF zZ%Qg0rC-CdpcV6o8ZV~$+I94!V?*+dC~LDpCMZs{1h3&uE4uQv6(CdQq|DI@lno73 zW-I?@_|@pViM{c01z^&0gJ}^TpWe2V9G<_D&dL1B$Hk?nH74V)hSA=h70(r0#+2Ev zK=Q+^7sZKnN0*uMsop40INGp*GypOS(`O0l8T-PS!vRVycH@6LY9DKn7aeWSs<|-M z(7?eys_^ey{mv_BZssQCD5|a&Dsuez@$>2Rwesn=61>qp$Gf`*^(1wWRYP&HhMFr5 z3=E9q7L~RItZC%nI*em{_Q%klNai8R^zWF}a4i`!1x%3Zb(>?S5=I>LOtW6oM1r8y z%4TRnOtZ1G;`N-=X{om=|1KXbp%J7qc9SGbL`&VM)G<<5w!dbpPdv!TC@(x*X3dHy zH7&Imp0)U_4hd5ixk-)(cswrmSLK1psZ-Aed4Asxg}vm5(sCqcd9Ttb^kiD{(Km7N zW-QpS(p_Wn_D)$@|Kf%plHcX+#_wx)0IN)_gvM&+u-1V}^#&W&shfIoQtj8-IOf)_oZhY;*@dGDaFw_X#boE{)2d($dvSWGUVlDUSPG54>im|5_$ryV($Wexq95G zY*T%6;gCmbk+VSc@r!(`rS%1oQ{0R(-;5dwofr`^!@K|a1@rk^>>E(DLN->i-)(fa zD$T!Bmw81+OFJwkivi2`@+un(^lLPdp6`V}3W>V3zP|9fL)qu`l)(o_mUt$8+;||d z<`OBYZ?Kb1C@a}qw14w#PxgBa`c=uO#SwQnB>TV6 z$jOU_qZ9t-`#m$GQ&K-Uxyh)ke&lEI8L=D_lt~Zwou1N?*T^dYrH84gNc=lj$RNCC# zMV({q2WD$}oFxEPjlkw>l1vvxW)>NXlSNixh1-XL5dHC-54zy~0jKUf(EBs?AsO<$ z#U)(ak7oajKhuwbl7@zoa=K6%2uFBO^%k zI#CUX2GQQu_Vee@$Tbk;Lu~;)0pJLH&oV{%vbX;o2Zu&O+)UhF;ipW&CwPmEy|uYn zbZqlJW;!Fn%y!S~cg&eJ6Q+)NMwST}8O0$TV^Q0h|IBhZ@%#68>T^lS!G&+wTwHAE z2oPlv^Ew2~X_M`x#qI38y|u-~D_jpYH*t}WcK5_B;IAboJ$t(|P!>Wnz`8%cKYqp2 zF;Nqu5W)VpZ-Q(P zCk<&sd7)f%=f^j`+&nyaAq9oy^h`{GP?ezSf&x`B)5PxrPvJcM14Dg(#9VA`1B0#0 za(mBI1d6A6(jsW+=nxSQuCC82WNJw|N_Ee9)ddOF>Z~}!pI}2#g z7Ab*D$Pq06=~~lpYyLcTvkM5%Q3#(upI=?g>}XG#^CBY3o+YHkq@~5ltEtJQ=fWaJ z$Waukl+$HzYm^X1o!%hI1=k2p*%p6Q$piEAi@3Y1sQ4$;)qPiBmTlqVv*A}Lnv0nK zq5|_zM;K}OnrV?psvrhGf(^CYY@#dNg8ckQct5Kd_5D74co+0b zt$XM?hd6UhAt5D!%jS8d?U9q5kU_iga@R3hLU5^JNxs;LQ{~gYFC#8t9xah)Z*LzQ z8VdZ4Ka38kk~Gw)aFx-QpBRrOoelW;lUsi3Xn%iuZ;di*>g@8;-oXK-SgpjgNS$3G zA(6-9+Vg2@$G>i)N4EZ`b^%J@bubMrYrE#_T%fFzb=!;*%?rtjA`o)sJzm69%+Jlu z4ZQ5d$6t9mo!IIO81S{c67MG5Y==2!X%4f*d3t^z5OWrUj;UN8ziA>?39CZ+qWaHh znd?FatE1QT^Axbq@z*jPBM%eRxGN%qVC{s3g_Dx7e0&6uX=}6DOmPPO(E>V%&h`%u z$g|?k&(5eRDJiL_F3sX=EJa_#uMGC3vy$)hc|4^z*1z!aGpvp6;fj~sH z1THR!u+Uhw27R=I*x0}+s1oztMPGvECwTf=haK9DI$-QO8^fZa!jcJ}r5lF*X_z5VqqOG*7#nay7U*8&Ov_DThA8E4Ay`=yWjM)ssFTCMzjBV(aXT z01FF?0EhyA_*Cpp@~sQMra$Dzv=qu{)%9+$xC$wY>WlXKa& zlf7unT)hpN*mrih&!Fm2KQpbenZDE%P4`af(~PD=7`023EyFkUO0{BWbLQ@Bk)pvc zPYE9!Gv-b_u&v6e*K4(nMUusCZ|`d}|GbiK+21;f$w)|vOZxI8YltveE~uVgt0pCJU<=B~0DG?N@-%3?En!=S_4g6f#P`wb+hR6nMsEKfNb}5e zK}v`N6RYIuh7Jb^%F9sFR*XApyQ(%Px?&t8WbAw=c~U@=goTA{Yj=&TKNX0!xj8F^ z_wx|r`UoEWQw>>WR&(>?ge)H~_&BvLVq~DKdH+Ops&KHvK$Oj9ezw#L<_$J2r(4>z zLZ(9kE!&c#gQFu?5wE%WLm0^l^~qv`WS#X=Zaf_g&(%(bw^X1k{br$(5x{I17))F& zSG?y=2W*;-SWR}O-CCEk)518oOr}c)2R{pj*LP7-QAvmet~8q|wmmMi|qb8}>`;n8Po zicRdf;o;%&7!6HnwlKb_MFQN>)uTJ`%RA=T1{LQIL?J;uO`da%oeRzdoXljI?e{tS zZ<&`GNP#sS)ddouk&zJs0>ZPmk3tAC5|Wydnj8qEpcZ+uw?#9T*ZkOA)^`7$MB8H{ z?6jOUS{jejQ*6--Z?x?tvt2MZM061by-ZrGkEXOhCWALEK3+jV0UH;0yw&SL5)wRt z@9OFri;97PzKt^aBj4$U$EEG&xXHhcO*VORmKP7p;uf0ek znv?G*M6+78^BLg5w6uwBL^?8bca)6WoBGdGBRvUN<69s~UU7$tH`uwsXp@$&;jg08 zVrY&zf`z=bmy;At{6DuOntUisi-}QOsFm;G=<8e8|!NMyRPXSazJV-nn|K|7e6D4JzEZ;?H znQSKxd&4`sN&b+0rG42RPM5v)%}v+C-HII1h)Lwp$kFG&vduw}n^j;DBItZ6@K3I*ka*S$gb8nmuJFyok3-YPXX zq(6U{p$NFo)mV5?@`} z@2(1*%{R%ect730+z-&{=kVCtW_Z<_cQX72d^9R7gmu*6QGJ)ARYU zp{uLwVrK;WvQ!siljJ$2Y_Qc~VlW(>GDY+S2j!wYfIvLq^I1FJ!=?cS#tdECJ;iBh2(s!x;?&RYk_y6g*?I{E>-Q;gDPH ze38q{h{|i}as0|}gcoylTfa@-$Eq{c*lT*bPPjoEzyE>kp`l58@|9FtcC+Trs;-Mp zg0FAqhAgk0?u$>YRnE_!KS`^Z*A1;F3#sw&@Vbknko%9e~g@$ek>(yA1Vcdwz>> zxKd|wWBmqu-|y)I2u7ZP+va!$VAvHq`kd7#rWJz~Irl&O@p(J~?+rLaO$yeEOotd5 znZ_rsmY%Nn7G|cVpn?GiCL`%Qp1YA=ADC@JfhGFU0$?1}ves5_nrgSV6|(@x#lqSH zgsB7&zi&pyN~a>hQjLSh%kx{}c_A^3Ac)jUtjz?=(8CTvn~AYua7fVufvfHBA3pw% z+3Ou`&yNl#={y%ZLnrf4j}+S{HvWMqX=zOt49JvG9_c&gY9;*w@abq)Zf@6MNlD~t zWbN2k8kf`Ax%s&YEerNg=~C0U;zVU-l_RH>shDYiOqvksugTc1fTboE9RO&^$dtCV z&6<30JXk)`uQ4{rvtQtO%81Qp$nDi$GeW*$tu9-brRI(=naFq-8@H!FT#abUgS z;pq6hD(uk^r&5Y`b4$WSV*c<=bm!{hlE@JL#*O0j`~J`~Y3QtiQMuEL?bkc=)0ssSI8(U|k9n;l^75XWr(Z%|!vpDsfq@~KH!}<0i{mvbfDZ7BvR5kbmpsJoow40B z094#{wxN&WWLMGqiQ#|48UbfoX}#Kt`i~~j7V4_&V{-7g+)Ljc55O78x5GvfSz`+T`QoihPf&opIEvvGK8(J0ZSZn|*bU zH{cfsC%d@A=u)#rCR;gBqGd`s1kc4jIo|{$A@=joI*XtEa8Q-9*W=@}O?rZ;(femS zl$K`dajF_-2kp|-Io@%zLo|G{37sbBu4O7nW`(P-H}`$uFQu#XsrMd;3Ef=@L9Yqh zWzure2pT%ss20!H45yo$8Ec*uf4!ryY3%v_YU7UNYLWE)LqvRT?tuw5`r%|<(*X^e zt5ayD*Ke(E^U7Y7@PEOv>O+k7!_5ho)4tOGvTGo5rLcZ^g86)UaaF}$Ga4C5C>Q{6 z!*pIR30%7x&=Jdw<_3tTP}&fm(~*LZkd}r8T3A2YyFgA)VLF&tQEFUaGcDz?a1Bku zN|KkCC-aiPI-ISb;o%_$IAMr4!lY2gLUj-qSi9t_U^vT)hP1_stL7Oi1Et+VEmU1S zX}!5YI^~am?+5~VAarJ!JLPF+SOTtI*@4fx?Qv?(U9YG*rD zHDq;re|t3(wIF?6aYm_Upy@m_G9g7(kzY_k;(RPew5v!=UA<`b9OiQg4gO;71M@~7 ztM1X}rt!&A6*(mXB^zDu(vYC0jmyDUPJDf;d&QJ@jtp=txt;cN#ooQU)$zXjxFImd zp}tUSJ@n_#;K+!R%gyJHA2HcYb(I!O_r{H5Rx114LqoX8Sr0=)Lpy%H;d}Y<=TD&b z6U^;>^(5w3t8R{}#r5wu$2_cg1q6J~hdnqpjC5|BrbafX+34!2FKVeE#Z(WqHgX1} z?r=N~_v6RA!$T>n2G*}%%e?{+T0Cy-oS;Yjd3pvxolh0SqR7Z7T}#Y0AYz%1oeRIN zjuuwd&sy|W5KX?4A*ecfjkky*ii$oRg||L^_@-Gdhr1e%&%>$v`$uvQWJdn?Ef*av z<#MglK!d~1qt2SnsL_>l}Qn?JZL`x0m5S!V1U`>NH=<0+`G z;imuu&13uG)id_FgFM62*o(On$ENvtAa#xfeyLtB=eFti{=j7LR;IEe6l;R-Zg!qm ztJZpn^C~L9DSqCG$N6x#YJ}He|1v2-+r7`9D?g_4SB`aN*{avm(o+X_dRu)s;X*?nvYM*B7SQN;}Yw4J_=H;i;WD9?U?(6 z6;DC;4(0S^w19a9<%X=&L~8EAx7e(Q6xt0%jNI$fIL%>ivE!{MJa-O0*Nml;u*#4= z*B((PJ((pM_8s1F_;uggE~1ij&((P`|_$h0_8?WIr|bLic&Iq1RPu3LHs{H$JWz6IBrNgNPSqFK>w)8>7% z?2)0z2~b|53BxFT{o!Ch(*fW}ZOQ(-JF=$Sh%`t}Rzl<|lHKi}!9m7h%RyGR-P0@p zGZ3>C%$GU=@CQFV9mqcX07Q}QXWMB8y|Z&4tByQxk*k8YHe|Ef~lckHv5=9_DE(2m- z=@y}DN`}Xzg)EV>W^M@p`Szl_$+C9VZ)lI5mtIzV(W%RESmP<0E$5=AidB*V8b(qc zZdM5e^Q9UlhM*vNq0UxmE-Rg>HQV2d9t z{rwW%#Q~y%KVLPfxNh&g0HmEx)76ocgVbzk-f5xE>gj1lXT|+ND`W{t%Igq_^L%~z zU7|=Cc_k%-0O!ujBX!swB1_f}k9-r}&9ER^dBintpsU?L#&7w%rO$u>6RKa(Cv7EI~9 z=i+4TbI|cWFb$ixhi}Z#`QbV=T-tbqivez}FC<}Ro*Wr*WRjGWU1~J4P*BL8W%TtG z6bZwp(fQQd(-Rw4l%2DHrBgdF0c(Ro768cz<4B23l+)B4&zBZba$NYpY(h<|TW2{3 zRE9MHVPN9`W2toMbihA_&%j~(P~FZ93k}bR;VT(0VQFEx+Owm+Add@SG%=~Nj#Kf3 znQSV%9tG|k>-a=x4-f30F)^SHH`(>kw2UFZOV0J zhwHrqm-Au$)Aa&LQ*Mn`M62p&yPGSO?d^jIT3E{clmas6Q2W+1>@wP;v?eDA=L^R_PaanG9nBtU@?wo&zVg+O_!!L#T%NQnF zagi`9EX&D>+qyHL3#ED79O0m1Dkx~iCdJiwFU@CXXR{Qm2EAch;qEhx4ZRF~f3Y2e z7gbhP2IkMqz9-blQ;>eRKd7!|mKXneY$hUHo93%px2f+( z6U|*g7q9M)tLl5L7z?9T7W(6;yYY51S62%QO$i8AN=iZhC1gNt-d^&0YnNs^d^a7EX`J)hq0JmSQ-h_=<^a#??Q*8z?XEvV zDQ(<0kLe8;P8;nCVw+}e#2u2`iKny3_5yWIhZi2M)H;PIjeX6!o%DJAnzqzhp8+5X z;M>zRFgi_ia(diD7|3$5+U__594J(GyoB#{3A=&w4oI<4Iar(kq&X3wCn6%|p&{gb zK3x+mkV#MG^_ssJX`|3`PhPKkJZTF7L^dGr)6EEhEN3&{e{sq0a;hnO0vKMVn~ijD z1YR5!en>*H#q9x>n=?BD|Rz!+iMVb zoB^bbt(_e{`^&-~Klm9M>-DO^FW&MStsXO_z~;}6S0jAh z7nine=a6FH7*32UsFZ2bT+=Xt?+H)iR1X%~g*GDoiaS5z`dRKJ^f4BMhx`L-8Xk^4 zDyx`e)7cwLMoQhU9v3i&(X0ZBr>Kg?szK0tH~Z^Btf=td@bJJu)S#}ecXrAYGLzk; zzpd($dMI$&ZC7_PTIuL!f)C1QwHgDP)YkQdQu|I8nsx^FCJ<%4a`WBLP&dI`295Pn zC^M$`$HzrQMeFe${b&PScQ3cFD7<&O8;u$wNmkObU3>V~@I$+Cs@n6FZdG=}A#^RCBTF|Rj{77g6W)hQ#f?+}Ul`d$ zdV#|w1%>DYTJ_4MT{9>m-=pnrxto~0T4bW`I7$~r z2H3e9EkVOFD6jSTr0s=!P_vkAa#Lj7%$uh$0ot3ID4#>m&8`-dAHIPd!* zB|-kg!mF1{n5P6{>x8TQea>U5h%;4pE}Wy@j-Pl0tu2+cHV@0|1}0PB&-or07Rs3%?PK#pZ}z6!)ekjfGG-nd*y{>&y>;4m_>8c!vAT8|FGMo%@w8$Q z#>W(m+MZ&_!5QZ;;G-h`J`v0Mxa=P5Z*lna)}3awY}6js-x-~)3$H&a zEMi53aABZL$v}2PAK&L_doQ~^&{SA`#^WrBhckF6Xc|2ai-W$N+hoJfK&mrcdlR)g z)im=Kk=yVwb$u&A=j=*V$Jp37c4fchZWkbF7YEDG2d^8x)83P|Af}}}$!Dz! zPjy$zbZMZ!|X&rdkI zwXauO!J+6RorHtK?g|n|GzJK!b}xTUUyc3_mSMyAme}Szw9f~A$q{@&=%Kk|vn;8< zy*NjC(Q0&dGu$`mk(Ceh8pr@YS2ztA+x6RpGMYt+5F9 zyo*z%wWRm@0FQsZ%w==XnW9qS3FsoxQ`q3Y65Okj0zjO>th)1p5(@gKaoaJ{&}f;{ z+Jj+08qB_J?pIWH7hPk0dwef$`HBTH{*T0>;e(0KVfBWXoQ{EK9B$4s({v8T!NKNy zd@sEjp5yF7tA}${D_&er1q9xOX4<_G1Q>OzpRaa>yM-NI?kz@+wYX|+xE$_d+uB|P zBe-$#r$xs3sz9d;Wex}goXyrp$qWX)$$S`wV-*Iy5)#2Mi1?lhM=qGOO5IX`z?^V+ zc*y7d@|2gL9gi)o_yv7qca}s;1~5iwI$b4#FchG zVEKz3q5JOXGLJ_Wb{$#0(4g0Rb(sthe)2Q9{7r#IqDtX*5 zoA~x+y&Oe7O+|ha>aNx85LoPz?dJ zu$ap;Tj_D=mUPEQ!|Nn*m3YM$?vuUeWq5yz5l6$8{||pI^4nhlv)igkiIC;WCN&uk zHwy3rBR5esW9~X+ZTtwO`PiFv&d|&vDo*2hWWPUNsau5S=t%A?YO78a@dlH3bmMF$ zni`uw`dLeZ{z|4z7rcO5ylI`HK_qX(Y_~2HBgMzpCQ9IO2xVJAa^aXM)%J3^x)rEs za=ncbHQzVj0*cqTklyf?o?Id!Lv6cmwDsz3P0NxywHnzA1zqhiWi_?L^mJp>M9IVA zp|%VWZ=0w4tG4HR94Rt(yLIU%m!n~zre0-&$d+bhu@#KA&PEDZCU7@}h*vqS-!NWP z^zyl$XxWK)Z|+7VyLZ%%xM`sZ`hPweuQ{lNE?gfk#U)24MZd?BBUmS=zcz$3Ql^OV6o0^d zUk0k#FKs%G2UQ;Pxa0D;D``5VaPN6v?lPS1Z){MnsF~qkEya|K-#llcCEUn9?eJ|w zFIQYQq}Q>@*~mpvn_iw_a5$#-eF=Gx=_#Z$*!RC<%hsI@7=UU z0cKtD!Onq8cVLu07>Hn$Md@l)K>RUf#eig6X*%s5Z4mDn{A9}8UYC<6hpMpEMk{O1 zSuH`pNca9Y*7V`VkyLN)o19L_Xd@BvI1N2zS{?hw$Hy7vqaHgX>FyuiV@8Yv5u-QV zb$ud&uhb|Uk@wQp(Q#{%dy%Kh>K8!c0TCx;0ky2{E`N=XfKIjyfGxXu3F$MFqoLV= zBlf-5{dLQWPe3SBlgkP3)-{)j)C;hOq})Y7wsL`!?Di*b5&H8XKU$9)4?=>2>nxXD zYk&TM{rnl5*;Vf4^;@W=p8noAcqEmV<`|#*>XHdS9SoZh*c|3BK2Lm4r(QHeYa>q= z5zAigAvhBLJ(#p@o?QT=K!2$+eQK;x)pk-&n}X9n)~~X2a&o&*+WC9{!sM{OT;^#4 zKi?Ig4J6cAtYoQ>-bZ>IO1I(_3Si+Bi}d zf^SheZBZrITSXpL(?vUFZNo_nUdeXh^$chI)MXM^XXBD|THq%qi|G>WT1$0fk)EcL zRukNAvhfk_hg8B$fpJl@tx1j{7<|uN@QcS#|BhzCqIWM0fv0IIaX2R;A9sypg7wX^ zLjs}0Mo$=E<9huZ=I+0o`_mSHfNhWW0e$w%Kur~xR&)=y7!{(!UwP9aIC&NxJANx7 zv~!Vdx^8QIiHtE>4R`Y+;QrykXo3_t0!h|^5qxhxwo=q%b2c;9WM zuvyKwflsttRt%ca?(ZI^>!#aqreIT{8>6=RV^=N=`@yQ_X8lIgBG0fr6&&-m~c5J&981&M%bM%6YIrVZDmb zX}+Mv$?#<@Ykj(Z;&HK7SKmvjG6@w-iolzIVZPj*Q#2R3nvV%=vVXYV=OV6mAH-CZ zgcbzr>tocJZv}JbSmgtnvehAfck5QNMOn?PR`Kiy>qfJ2fTR}WlK^FtsY>{nPbObQ z!||h14i5QrBl|L!z3z`^TaQk&1Qqiat^ZhV$^-t-8P6rZ0M*)d<7JSzt1z1haPmOV zT5Z|p3S+>dIBH4t78}=6(}_aID*=^l*G$4lK`EaNxXIvjVq{`6=sw?Cr=wuM4W=$dx_Pu{xFO=*-j>E8eaaC)3CqDU1PWe%Y2`Fj zOJiae(7;_*tmbRFW-Deaml`>!nGQzV-vR(C-rP9xVJLs}BWGy%y@d zwcY}bmuzEGtCqgE*!e?6P4mmM$AWq5BgxUMu%<{0m&r92%dSsO8-p6w4Od5XD{=c} zCL`MGCvzqlvJx_vmzT^~*m!71``gBaOCv+joDJIwN+A1#q0JkV$1$zvkgboQUx-Dd zn$PmPUzDz&D6b0u#ReBBpcQ>_K3X&q3ju{i@IKG3+t=ExoSpS%+&)&x=1Ka_`Yv%# zYdmgY#ASp}krWiy9Z_mGLHEBt4RkCHz%;<`&f#i}=NqeZ3pyQ{>V>y7HHxW7N|bS) z>M)FU4E_Ddz-##L67Dep`g0sW3It)tTF;cW6pmBS&TwOpL9rm}jXr?35E?~=@XNfWzddVyzQ`dNn(ii?5L0C!CZ^VlfaiX7ys@r-r#hN= zGBh=nmmf~`NF}592@Z~QRz}7;T+=BkGEz;k>f$^v#Enh-nw!pJ6tJG0kryE1bC-MG zDcJc`Tg(ivM`!mEfctZ8-`09A98X}^Ix|)=Zv8kg&3QhRsN ztZKbozi_Bv(7yz7O}{>!d*wlC)AgSDty1d8^qxx+yvCI*y%EBtTMHB16Hq1!ybPipmab;Nw`09wi|QDt zsNb||nK>vcs+EjV%b2(~OToCg;q_qvqXMmz|23I-Hd}a-d3T`^e+IU)r)CaF2E8rY zVF!|I6K0LE)T$K*FBh_s4tN^^@rt1PWUUW5jI7-&s%{5Y_l@W_hygw=U1c*yK$%8V zHqPtW;W`T?uK1yh)QuIf<$ffQ3I;Nx@uw9-hn2N8dUJk(<0WbGWeg20ThYDPO^Bl6Q!6FE<~t z*h0TX)p079VMRk%S5DfON_N$e=2-*kH{%z>vB8`8O`+(rSJVX&v50rDuCKYdpEqt3 zq1+-0@LkOvG#|FN`@#TsQnumVW$X(FDo2OAR1v1IZb6P7jE87p%{?N4M z#r}$pj_(#!bn!Ze;*3nmzrM{M@gfn7^Ci>i{$zPWr1crH_xfNlIA~#jHK1+OJ8bO&yKZ`?l0$vy1UPx8T67#Cx6?)CBt6`f`GHIIz>hbuRPVNEx2oHbosULv_LbQMIFs0`dV1ZDV$ zq0I=1M(nc*i^7OrsF8O1s>58Lu)SkuKBtfykQdi$8irT@A0R3d9*(e|Ulz>z1rP5? zcbZH{Y-mPtx?GR6SVFnh^X?q*ujJ*E%&4>PbSN7N2^mTobr72$q6=h|oGEmWWsp*o z_tY+Ik-<1};wT-nbFu^ee0yk*xILh?rlcI4uBisL0eBVg50q%vFcR_}_Y$;%?~Dcz zeN6IA#O}#%JioCnQ0}$mt%B06;Xal>;<+nv@5m{rhFqzm@pRtb-OVV$grGK%Iko6pzR*}KYw;`I2aE-Je;^{T-M;?YeyiM z=46|Dl#oNTYD|3BH#YJ_#H1vctqaLHsT$)u@VFeK52I&QXZMFk=swvGDBYX+z32M# z8otNf+3s%pX!J{6YQhQ`30rL#u|vZhI&V;jMO$}2jlm{D% zZT@V@4%*kNn?WcktX4qstHd1r+H}^F!djxEpA(Y$gFjkA{LBPi% zhV~@jxVJbrw6sLO3%D#R(BRRrcOBzoGa!?YeLPT2ASfBUcmT4(Z-LRzkzLEoE8xg6!0#zch9E zTbtPCF+P63OoOL|+k$F!f1eDUzjz8ggnIEuBY7dsj08qpGY=Pg_2UnJ@{<~8w(1An zJ^;b^KGY)|dyJ(cH(iu^V0+@wl9NA7YmjH~IH*)cxhrpdc>jKyk@;IS2!|1C&rE^X z(9jUG4gO;ZjnJQgfr-ve!9}Zt!%zjnxqVf9>`lys+&1yFWcgAB$zkIFF*XywS)T!q zxDS(~O-(Aoh=w~!Jzq_0#*;44ol69sl{L=CnDWvVlJL21@Sq!aW(I5R${G8&Sjq(y z6GeDDT23hRB!7&p1}HR)`2|7d5;TH}(J`Asx|ua=PJsFpdosg!mr>y1c%sMX2-sZU zKbc0lxByrC(CD%Du#n{l?h7#AzF}fw8b6qK1q^Rr5D5vVhADB%rSBge`eD5aWO??_ z3~e2Ti-k|2roR9`LMGs!>0COetO4#@CM2j@TWfoJ=VYh-ubOFKO2bXVGIjd9GzbV6 z&CQy9iMbZ5|7Zc}e|me$PXhtp+iJ)NFG@kCj_38>WH0^+U~}m{Uq_|@Zo>dRhZQ>A z+f(Y?wRzc3AGue5Ih~J+*tDfWtA?x(x->(a9j?M zr6jrRZpzax;D$-tm_J?2Y4tz`gF8=nmh}1Zze|`)Jl@?p-(V%XC%U#&kxx2fGsw{|s4|sopaz8BW+4{iE#T3C6XjlHP>S)R- zt%OEXH)W0sH#$j0t&XzruxYZo+%1*@D&GURF+V@(<0e292Xgc-zeG3YBi3Aqg z&|L<<@vfw&Bxp!pbcR{3>ZE(nShXAP81{u#;@~etro8%Aw)T4K@X&HEJK8rOIm;y! z;Lxu7+TbTuXbhDOX^xQ7ir5_BZfv!_m#2+3dA^uD0Y6U_xDXUQYrF3Wes^0xNaSb#s*6&8*nkzT!*($xJ(Y09xoFNkme41f)R*TXEKc+ha0*+le-g?bK`a`V(~1eB@Hs- z)?;&Jx?Bq`gNXKeKQcYs%j3(0E3agNavshiAVu(pW>tx~==0wN-5Q)%TD{(W_*~BJ zxHFs<-Kw`>Yf?;5CsAZNNJURE`sm#fnHWjI5@;hFGs7ax9+c8?p7pUXA#!vTh`C-K zH=#IurTOk>f&qwqPZjTBR6Qt~UoYeqMxI_>4Gj&2MTC?U>7W0JA_i_jFq@#w{1=Zj_>7osuLzfb`W+}2;=e6q};`jH~%t+`(_tZ>emSBI)z7F_q>oSRH zJTEuMdte&(N$|kovQA^&ybZ8Wh(_S@ct6hmiOLyC3yFJ3Kb$K*wxGaC{~Lq1y;Mo6w>lP2^8Ar1Qiyhjc^`C79y^!Gt zb~cO9&H#j<832&Vr2Rkk-tw=iE$aKmKGI4_i*$o@D@b=E4N3?C($ad622qfZ?(UFg zBi$h#f^>KHGw{T9?&lAjh1Zlwb|!B?u|cU^74&$HX5C^6*Q9Cqk6qfwB}YB4={J|u02<)q8Uf7y%JO|>YgxMtHTA=M=hgA(34+`T~( zzPa+jdzq9Uv&~0~vFzjinsN_&Z6Q4M?Ek)(rug%r1i^}Y2wQjLwF{p=t*LU8@Gp&0%oXz4B(CbSipvr`o(d;f)MqrK#5 zaG2ncRC{Kmb4hP+Re*F=Yr7i0(vOZ!4_2eo+WXu1wkYjo>+}_yUSGZhwwqQhamt-L zkF3enBzbZ6J(LW%d`{uh_Z4%$e39P$F+6;DPFl_p$<8ivr&e-%SH~!97zQ3DWr<}i zc~Y^q3GYw;puCiNavntBmYRYQ#&~p5wfXG4%<28nhw@Q2kMO-N+hg{f?V z%|1|#U8RBcR;ToSsCyC%+71b8WR;g_e6#a=X%cwDv#GQTg}HX3P?_2~^8k{YaBSa~ z@&+oBnjUV4@+)lfzh6$FJDIXk(6v#&2_bae?vjvc@54-0u;b}(1+33L994^dTsn=$ ztg@?!Xc-#?!+y;r<6d4G#(f+THnw)3F_)=%akpjcQ_LMQ=}Eh?V?vm&0ZA^0tRUSZ`NSyxNC?2!|!{qFuF` zKfm)%8}g{Di}#2dOqIriQYVM*^TSCjb=&l4T;dVE^@AaDC{;OGPESrA!#8Peif3k| z{T$UiWHGMPuVhYevMCf0IOXldL6`8o_|Itzs1vF^KTRbtIS+mr@%rs*tp~>Ndoi>J zzEKzAy0ZAT>Sw-M-BX9cJ8Mo(l&N8-jo+p}CNr~HsAkGa3~ru<1^>7cC`5g+;Z{4A z+cQqBw%=}h^lVuzd?0nq!q(OEJ%cLXDnN8KTIeWwRvL`x|nz>QT_d2soX_7i=His<=no(*NR%y|W zj9eb}*-Uw#A!mV|0aWb4vM2o_I#LK z4wg6!=OjLJ+n(%cS=Bl%^^#RcT97ddIUesAk-BZY&mh6H+N{_V45cD!ISy(JE>(n9cX#*A)eCDcj?VEy>6Es;n6)Zp zC<1#vFyE8i)^f17r=@AVTx!6W!O9{&Z*t&RHF3j^$j{#lQy-dLvg$e68yv>Z9$bO_ zG6`SWrd5)96Rrj|cq4Xwd7Cbd;iJ>l@#`_iyTLA5LYTI5t)HO+Caa`GX6-D$);VxH z;r2)Sb&egyg@7I*Hm9S7*PWvv5tIm=|Mlz5tSp!GAR_)YQ8YoOeaw3z-jrZP%rcjg zgLN%wRwoewx067!g(4iH-{2TRo5L;a#lftiBAeVUCQMxB3&;~-%{;EwyS%1UjESPB zrbZ{|o9+`az`Y|IHt=P@epQWdF`#35(^w`VUo0S-OUb>V+HhT~u}R5=8Szp$2tr|4y0PJHkKok3pglsjK;LP6c9_>hpZ z?H1CeSRrOhJZ+bC4(~IA2puL>ep3S*7lZL{j2#h-5zMc;Xz9&{L8M$x&CEer;eu`w zL1p#1q>Y?vEoLO$xAJ%tapv4H7mbD%nwFOK({@ZkG>Jf^)>4DU zYmH_rMnS}&ekvtpyz5z?NxYkZplOpoj#inP%d_Po|6BxX-UC*{rk$+d-HmZ8rjwTX z8zSjFF}SDLZA_zY94Q=7NNex!^h&oahMEO%n`5o8&(H`(7GUuB<4yIGqBSsPHBeib3 zX+b_1q$>lN#gP)m#+BUnutoGdcDtB`E`=G+%r6f;X4dI1&#getZceqjw)V*E3nH48 zoQ-Wan^`CVkAsWda2`` zo%_@FmyOY^U7VZ+&RPeophAF=F_!Ca(*u_Y8IU7y4hL537U>9RkkL@wX4=was!lilLQenk1gJ&uT^z!8>b7G)zWy3WUgJjEu93j@jVX$#bOwje$6)ANWW zuN_pSSD#y4{ONXBh zDAQ=&I}E1pC5r_`aqKQ)OcuND;n}|SJMYt&TU;f*fB#Y5nL3kRxWc{K(PDLGbFq@? z3UN@?&76A7^@*Fv#4~*qXEV6~N#5nj(UI?zyRos@tIUg?@t;4>x2fY1tky(;CEOR^TnKtO)Z(8B2Nu3<~EU`n-j3repO9Tg>!{ zc=w&c7+Sg9CY+#h-6~K(3rsK$SGz-npp7~n)y3{!KiXdFh9PN?g-#(nv+H8n^HOdQ9-W*VAD#HRa2wt_J~|RStVhvv+xBv$oW#D3{va|g{M+1AlMe>5`~FhE z`k3P%7*@7SoNBI*Bt1;(j^F!`pmSB~^ycd!I=uC2-Nx0dT@2v#)PkJ6Y2iyq$RkUG zpm>(;vkHxhbs4OSYbPdb&t&)RY}SxIctG=GolgUAs^XtqfL;0Vf@Fy7D|Rz$4o0=I z0Ncc5M3OF<<(qQC$nE8 z_elB|2l8!WC5N5SmgaZX^D77)aPft{Q<}--)lSUz@wp|Bb4!0qQT{d}R?xJ)&=jE; z#pa?W?E2>fWd65%M<9f!l8s~7h>_a2Ta0xKi2gMbUQ-@x_Lf&+!m4KT;*O`Muw~_P z8l+dlB8K^7vP^+)cjwwtjf^1Y z{aJ)Si`{yN1H=V+4|oi}pB>MnC=f-@DNBBD=(p`n_>M&_my=oheTI`(j@9Y`S1r^t zB|U1H(Eurd)9!j19%Cc|PNS^Xq-8T-7fHlOqan_ABtxmRs*hfEJC$OW{p3tFFS885 zW0aDV#2t=r9yCsB-e}Lxs|BSC_BT`hbid!J(4Up|F0;913l|)Ra3X2QAadw4V>2^( zx`7jstR($#s6*gzf|{vPEl-0f>uuBR^VWfuxx7bEgjs#oe#v-zcvUm#OHa8?9sJ1q zU{y%JGm>>jwJY_?jDeVZdlv)3@Tn%bo;Q1VCx@ggApbab)f&Wl@U!v|QwX<09bJ)Y zD%k~tUi@!Erf88o<+>Z|g|fIgRsr5b6?8x^x}0`I$9Xt^ffPm z;t+q&s`BB7ivfD(`MNcY)Eu|DQ1Gmx}EWU&B;KYl0?pgODU8i}~Qhv5K zP~Z`8jOI?Kk>`J~XZCs*HDm&D#?}Mqk9^2lw*flI!^YhQotX6P5}Ak4<#dEzp~Wh0 zDD0jdVBRO#Ih;Ur#|T0td`)%|rHVDH%`pzSW%V*uW+|3lRCJZk2#LQxa!rjZg%%c9 zxSsp`plATD#dswkv=}%SUaxtf^>qDogCe_OT^F5LE*6*$=O@utuO~~6dlN-6Y1;t7 zWjJ9FfrfDUK_QPJpXukPmD9IA#uzCiKk<~;WubEv#Vzh&ZE$yJ+!6zseLZF#^g*~~ z6I>P(Z zlusVd1TeR~vJO3rtJ?fB{yltuqaWlb3zZcW!|W$m@`C&ID9rwiexcNPTxLkmvP_xn zCXTG{eYQB<97h;;wHKRo50yyh$wv#iPaKU!*xQGskJ9KIGCBPsNj`fzTLK=%d%HVj!gQ{ zh~VTSN)g*VmFLdk&25r>>CxutG$!L}?ReO)dMLAQxDkV%H#bLxjyb}Cn8`0lnTMMu zi9F`^fenWhO_FYrO$P=My=>QjV-Oa>(nxx=^e4o6a&n_^WjVW5JeKT}i6wc-zG1VQ zH*ealOtekqE9%&!q^58DES67JJiT)SG#GKQ64j9mEp)|sa6Ev2SX)@2vyAFUq|kFa zK86U+2NmCW>KsGjiKj10Fb;iq$4_^}!O7}0hn=^-m0i{@>Bg|KZ z)$aZ1u#s~Xi^|Z&8BDr%aY4-MP{}SLw(>IDHrRVzQc6k+$|FCAg(>C@`t#k2<#jyR z*)vNjl#-T~i{*{|{5h@f%PNgN1{#?fZ8!x~v*B(#Sx0Um?4#cR-!Gi~fp`m>8G9cwWQWdQr+>n%7}% zAWz4|E2(MNQ6saU;2{UcXhQ=zL+4o4ceID!21iClN=m*=Ot|XlU7@qk*ZJ6gN#o*q zhFpB#&w6v9uIo>dQRjvO?@}FnI9v+tt>*LQ|cfLR5V&Nl!_Hq6g(8)rslwB z#xUAs+IM-W;QFKEq(aBIs{7$}SK>U94KfbaJL6@dcK7VE9*+8Q$NhZMfTo0nY4X;B zJei_ysL{wX-^z$658)wj-I?HOzR zDJ=DG-5um;vVzs|>`XEvEVo;L;2X8It?l}7e!Pl2RCWLY00hcP0@jv8XPW1~j{yq2 z%cH3+XZ*6_p^6m)qbFST4l`ZrW48S;wTlbD8C+CYywuvJ9#n2{ja8%eFSPw>J#VZt zbK_iA2ChV>)@@?fZ~ST89Y=icxt84^m}3Ubl98@1xp*2IJC!Ah@v>edEo-}Km3o}_ zLtXRrwyA)X60)9Ytk^BQe>I!oQ#H4~zPdD*qLhh@yqk(kDI}zxtj5Q~=i)M6n|?z> zK2xQ#vU1t3a%QH|`EG&q!SSbWHMC5$xY;9vU8PPZAJe^VD?3iPSs5Dsz?kwdX?1tJ~cjiqhk^ zI#1@Zy0$~mr$dX$+oilI8M6L^YCPbUk{dX%ej_If1|nan&E!d;McD^ zIHC#r0?9Ytou2|lf%7-o$Oj66pZ|%&eRwq}NT(4|Q4Cr3#6(1JFb*})k_WQNd2+tN zSU4|rCk4sAcd3y2Xnry8nC)&cD;+D?;w0JVQdzX9X-sK6oOG%RzYaQcH&BdHXrz1s zf}pZe$QLOi6+4&02ve0m-sj{U?7d3-et?ZE+7nmP6mQ4syKX#zHk-0Azp=q;GbfRG z%f?0}OGWeUfp`wVUA*Xsh~a_`rq%JX{G04@Z{Oa0ii-4(*LveOLeSw6J3BuuPi;y$ z1!$Ka73F&Va3@q9T4`?*4v&bas;a{3(x+~`4JC?DxC=!#uY9hd!O8xxuA`f*NJB&Y z3C07O#M`{FO!V|36lZ5=(H1>VP|(T;!opq+65MrY8kJmLWB3PF_$~lSS*U&^6~)EV zw>a;0%N@KOu9Z;@4~a?X%ZQDQC4ZE(R!z7k?LXo^Gh^7%(IFySUtPUao4DV~+$t?E zjZ@{7vE+a(srW+wU4>XlZyg3<1TP+5YD&hc&z}n^z4y9)zX140ooI>*-M%$yHxoe+ zFDqFdZ~=?hplHGG?lw*zDia{{{EQ3e4ef8eMk3e-~8}l7l>XgEUm*43&&cX6BDnu`)#eQ{d|3uXmAFv zBcTH1(G)r9MEmKjN;gdUKTZF|l&-z6jrA^&sNk$jNceSD5!so8ntPBWKu%}OxS|Ym zsI?EZ*8Rf3;2r=~sTB`#F)W^59UB8PBw51mohmjiynXL z2B*;d_gQj)8%ub=a(3WJE@)@!ZWqA{elDNnTOvxoqo9Kvr;Srj}?{R+au|Zd$PxB$6rA6_tt#i`Fy1ab;r%x<~1e&;jDvgTL zR#CY+CCA5ybgn{fGotp|jnbDx{7(U0`RNbSx>R9+Mt@lz3FZ_klzwBY$o*sVUotl1 zGs#ze3FDu<;{VA7C}uy?DNXw`H>zHZ4hI;eAJNePe*0(|aKi8v zJwhyXLQjM{J_AWAIyzT{j{H$F0CHu`&nzDFDs*IY5%eOB)I1K8%cYu0tKi|G)s7hz z|7YNlN`#w4;Xq%KH@16tScrv2LRk9K=g*%bqH`5!>c^i!ME@22Tk^ZxqWeu*i>O&r zKZI{+`i3Z3I8}Two?W7;s2oXCXZ-iqMgRa86BuasdF%JQSEtJ)EYj1=WuoLL1WsLw zr-*QMjVt|~kt{Fos7II#A2o4$6Ed7`u98!sVog6cFL_BxIc76n;{Sn{1}CJ7Pn_YO zUw)^Smytok$niXTke83or_2uu0YdaW*a_^R_*yeni7t#RaT-b>hdyRz^UNjaGP0}0 zOOOLHRI7l%_6j&0Bu9-CVQT+6Lslm7%Y;rC@(hgh-yf!HfANMDjW&M$!Xy}K?i!T+ zQ-GG1QBqctj+xof&JNiMYkF-?+u}_wBl`d`r#?UNtZ-=&Hq59u3es4ZII4&RX|-J7 zN|=6?>aZg~BQ#e|Ouzfj@4u6l1zzS~9OV=@*R!)5*NMKM-)G`1)CCDL^3LwFv92yg z_M9NEeI?r`p07UCdC7P+Nn8)j91Ky$?^SSVt2$JCAtAb4vEbbwVF(r6T{dY3zZeOBiZ~~FlQB+v`X$l7BKRCTAzN>1iiE7$A z*c){NE?HQjnVFKKot}zbTZk>y)+L&#vLpL1=<-QBb8AO;`xp9w*qE3J0g#GZLDnhQ zQ$v1))YqRS)jtXnV_bIecLZ$9-p)?u3-)3H50v-Uyq{d3RSdj-x06tf#lrUc%P5;C zo=x8?qv~lW`rqBwk?k-k`m)d^g~TZSRVrPn@BCQ<4+xEBFBe4O0o|b)5rkV3+)4SWYyrJF??Mk~J-p zT$D0u3b-H@-=0~UnVVnERbWrD4&c3kWM*df-7w{SQu75Bs?iF%X+ibN=3^>i`GJAc zTQJ3H?0A8zOE`54M}<*4q_6%nbz}adOY+2 zP5TeiH!2dwp`UW1WBQbau(=Ymj}RZ9BQeHgRO8_s%Y8&1_Lp+YRZAaS#^TLQ8C>48 zD$UJu*K=i0RZ3T(`!b_UyBEYtv!CC{^6yoUB9L_Ev#qO8aRXG+%$9AE(h6?t%s&y| zb#3xu-IrxvlCkMBPRJHaNlHm9uYXHs8hI@ONilQtSHc^X_D}!wGYNy`m`DKPM#@0F z->ZuAIdD?b7njA~UqSnU8A+smg%4_MTMEt~HJxN>i>5}aTBPh%Yny*QCD5MZ8(J1x z;Y8hg$$Tu1MzVnc&OeizGF6kaD-d^=g+?Y9=zH&CMX;B0~(SimF8J*(&DVyQ5S3;E$8If36DuPH2Me z2oZ#QECi+rY$XVNR^fybt=gGo#>}*vQFQ z9^{q&L)Z+>H)uMw^jT!2OnAn(bW_4YQu`R65l6CLGiX(b6cy6ekc-`xs6@$UAOFu? zKM6=?%R1p|SBSJl=zQTz}k_TOj) zenFF^SPUqE6E}gJn1P zCm}^!4*h>;cW;u$l4d=(?^6>^4Ml_+EDgaAqFjV{lo1`~LEiqVOy2jBg8Ab{q?^NSQux zs|0+@phf%7*VeS5zYns==~aIpnHzTl2Z^He?^h>9{0Yx zyazRQ^wEF5{0{ef%8x0`@&vY3pL*`+A})8l-(2@nVeG7%%T2ET=G0_hkd!oW|;Y z*+cxw7=_3nCRIJ`S%z2@kt$68thcusCUC?;l?O)R{yTjN^!!(Xm}mmoQc=jzOB?S? z48Fjy8+=TWd>a?_ZcAiwI>mqP8_8vc=0A6UG=ksq?%l(G!z=ikb#eb^C#3?uo9zGn zfhv*z+2z2W|L_0)YjFN|SbmSg|J&1{{3zT?$zn2<*I6v|Yc90OdRK$Ir@pr~$8F=g zYfm1V+DuDNubQbs5Tuzs2rW74Y9V5T-bj%2!^2b0wC0B90|}x9(|x2!1d^YlLLOeL z6AcMVc012baua8VY^W*E?L%wlU7?MOTB*#7XX~N{2DO^G5T`zoo}HUpTVAF#<4!r5 zC4wu5XRwNUAQjxbPJpB>6O2$SxXdut5K14neB)=CytVf$2Y7?0sv0Q*@hPXaua@&X zqu$rVq}43b4(jQ;=ZWRwI*PcSU)R=-36r`5>wknR_gi(2Oju~_a}^aDGmh#Sx4$oh z+er2MLM!OkwAllOzo8bzZ0s;pm_EUzIUObG6)d9$OFKCsQ zJqbEE_R-DeuI>dl>-+C}xf)h>uO{B@m5nrr1)l`WtY-?jni#L9IR9AQOQs29$G!u9 zI`=C9!)(B;6f*bd@V8I~ehQwilj75#PZZ=}h&H3D_>?~Q1$FlO)7?Inb@_Vj?Rs|*1UgdnjO ztrJ?)!9o`?a8j_`k05#c($}tS9O2>d^l735U^Ibmq4oDKtlj_X#cSS(mE!_(2GqXi zXVy(O_~cjHbcQn$0$Y|@XDrTXp(2*g(XWwXI8dkPW#Qk>e1sC_9DGV{_ow#&(&6n| zp*U37V8aIsYj?M&7@bs*;qjo^K9>BM$?A|SY|;KXKRFfq?UUaP{elN&OIhr>bgBQa zjW-!ou^3lHEmLmY5uQ8KRqJ*NsANIIMx1}Ym-aj7kl-aPEzM`UkP}lo`*A!d34f2D zpC1Z&*&4<{v7i~_tCk%UEI(3euKs$B2l9%ep&(EM(*OEo4WEF3&fgEug!b1gH{EvF zfMV$>hwpK%L^`twbJS7&lcm~qFJV!r`%6<();m)0cu9nK(o-#Ku^EB zkM_yOzfab?JBG)+Gt&GSh@($+-H%&+eKXw8Z(l$gl2YbDDB0PpSQOm$YaE~NQ1`vQ zI&8&)&El$)t(MFA@=E{l_lW4rFWFo@&Xa&LK&y#VN=Go^c2pmXU511zKYPT_-^qPB zsD61mYN8j3&BVl{TWFYiq*ZA*+WA$8HjJbBPq@L@Z1sHBYMqM5_VewkPndqjq`g%a6b_xxG5;OAG2;I{(W)mV_(h-{T$kZjpjGwo+a9d(0EqSd`}Z)* z1w90rARpO%JR2+omF!1|%k$wG_IQ_#TiYvZYZE~7I6JF`$<}%dil`soEauGf&*j|- zF)>-3_cB2BEPdkZqe_MKyviY$3<^iMMNZ&{I6fMi4m0u6&>X=6GAq@rh6{}bFxQ@) zA5KLv4{}Y(fM2}&ybBLzqQ3eM?WFeh_KQQrFq+kr+hOe7+y^wmAy@zh5qic|m6h$s zq^?^Aa2hU)wLF}!_j>Is^f3WI%Uj@upvh9X?snO+x``C7<|E|fD5$APd2AZrBCifv ze8Ot*(Zj`68+CqWX}RG;>Q0dkPsEhwu`=M7tHlLb=Skb1pEegc&x-+JU~UZ@$>d3= z#dV{OaQGv$)=%FbEwIpE=br_5<{br>n!+IWN+_$*6%A9r=Zr{1nVFj;ncP1bV3p&yK ztgwwpocnMW3w4>pdbXFDCtAMtJXp_=IW_3M9!^9i?-I=~kqAw^`|xP$)S2LQaY zso-qRZO#)zFl5}A8(Ks((FPJaij05z+{^>>XWl$t_1np(PoMN#LCnWz+M57MB`B`N z9|A=ao6W__pgF3MWra}@ncLZsHP7_YQn~A~)V2vf9)vGEfRB-D>jdrtDl6{QWnqzY zi2h}EaC=5a+dipfbKrJ##tBf<(msd7D_2sFGgiqdUf~e_3=y9LkSS8l;~#fvkV^{?ND*+I=jnE;bPn5%AzwpM?43zs7=5*Uqklj2H{+MPcV+yvO#CmQ?`a z77A_@s*SaEDYt)sw2{aknz`ME*Q~5a+stNL)DLJ9l`=UkCn!{J(m#MCH)@#Q(-0gu zOa14k!yrElmv|B|4E9gN`SgHz;Z{*m5dhdhpy6m=-e2YN9ftGA#rgR*p4nzq6w^OYP(ra_FralJovL4x5Ua%B=2MgQZ}a~a zD#jkC05JI*u=rEz0`aF_m1^?9L^7Iw>Uq2UZmH&Z2Qwlnu*j%mh|Q#1mxf28$cxY_ zhK3qM2RLg=A_$3`7G3;Qis-C)$CWsJPQ1iq*KqM>wG34e=Y=`6dXlJKdh11>}>N_uQDYr z4-uDG%i~t@k1#ZgjjvXbLF7e>B$xCz7R!lpdBI~D3d0vYO^uCtI$HR>ELVW55W`Uj zBIjBI)peap#eerR`E(~&4>7%*9zSTx4#nqR1<#{(Yn&zbQ&iNvzY&i4T*aGwAk?)& zoV)ML(OOT)OG|J5NR@_KzuV|UEcPqp3lW!Bb4L>s#=S%igulSI9R-!J*~H}@xa`KM znWlh+p376vW3LY9BMd+uz73q9&;4X%WLKW9cgFQ}eGlvyB{g-x-a?nwSm~;1;YfCV zt>MzE`i>6sl>r~Xix6fe$@{x()?A4Z*2YS&aN(gLA*jhRas0Hryi!G8i6TC}6&+X} z=lfiZ*E^1>&Sn3YoSZaN6a`?WpC2*zn=N4LrusKiG^U4k#0Zh%VPZZU)O+^K2!p`z zT1@QExxJ6XTC$pcV5lwt4~jTm7zZ<3vps(~iR^K! z^*uenZkfFDdcD{C=5M}JlSuCuINLghclWq9*5C?W1zam&xr<-L;hGTUFluw>A4KmD z>o~4^T7AXOxmsoT;%vTmyCYd;i|%;|vx2wa5wMzc<++E6`33-z z(Rl7xb~8v4I8*srWx8iTas<+3@#|5<^z^jSIlgo4)f>Z#xWuBKWVaaGi(m*HcOuP4}7_K7m3L`G1R7UbxaS`k5wltiio z5io4f&a1Ca@yg+X;QkuY8`c;eH{l;#%-AaVg;7gH2_`+0P{8@Q9|gCQjop(%m3{Kf zTonz|T6gg*3q}qWvhi+AjHD*&%6TV{fu3gPF$Y zz-0Us|8z!pb6wlB`Jq!JLhdqf&Y<-C`71+1!>3Q5LIM1fC;GATqHSPjp@-AWJ3b=^ z)7@!QbaIWPa3{^`Y_yPhpN#yA<~HWcsycaINf952uh2Tc6Yz< z!=i4y1-&&R5eUQpch|1Kl_5cU5`l%J8GYl<0pX9?7OjltrJ-CGQ`5*8L5H=Bm$8V; zi`8zv^u3kA^(gbaDE{MSGLhTb9_J&#Yd0+{D8IGUOqd@;#8a(@h%1}038mqAqaP2z zc#SHDAjvl1Hh&~eo`?fm3_QAwNGJ^T@G! zuU%Phc#kbCcDoC*9E>8y#?1qn82*%qop$=h`os0{7dvy&jV*t5BrPDc8NX3Pt8B@} z3~`W)2(t=kcA@DIYzSb*ZSSKk{jA!Yj|dL*^<5dZ`UNJ^KuJbB9gZN|pcX-v8A3q> zw4NF%9QO7RhaHAx{Rcvi)Ad75rg1{fh-C3#h{N2-$fjr3cjoB>rJ)+(Vo|8aZe@Uy zg=Nm4Ud%7k%ljMtG1YjL-|wskzc0i0nA=X2IUD;rgitPTqGU}BRi6*1?=Wt zO8`Q>&k)~wJ3cOs>HZMEL&Bihk45UXmv}gJxdaft0rvd#IA_<6@GJ#SaO}PaaNPcdU)mS` zcq%R7>#_CyRAz=Bon(Uf0-c!mXwrrBucoUb??Il3{{xm%k%sY5PW;X;%Cq|Z{)SJq zOuL)qvw2=9cwez$4vd^13IVmJ9zcrDE-qRzzre9nINJ{vBh#y=_<{}tNWdTrfU5aFxuTlBs#VJKL$HH&jSQOgtq1oBp zMSBGpp#USx8vFK8`3v#0!TVbJTjz&tu%sT5lLKIXac+(Rp;KnL4!eaH+82NfW_iZ8 zx7>gDS)8P1A<7&r)&VAJ70{J&P4>F^tSm>1+D1n!fcdvRR?0Qk6MuPF@=8y#OL!vp zQ!+k~+4nbv>dK4#Dr_&ctB**32c$@RpCZ)lk2j~MEemB3?&o43iO4QM^R3@{b~Gy= zWWGIK8bHGTwqW|P$MO#&=Gvp8rc8)HQDEbAFJc{n*|muZx(|lkF?y3On{J`?XmK5| zt0;cZ^^pH;i`?7P8^WNPt$JH%dY3%y?HQ>LOyifOx0%Ucmh{H_VT$x_42q1pz!k|k zt_(O$*L!fi9^v)45CR(<$G(iq<1txX;e(<6O~+|x?yktmv`;#dM!^w4Q)30sPkC(J zL)oC!6HH{K{x#>lr3#}Cbk+zCbI#6~2ON)(zespV-`IjjQ-TDRQg z@ICYxYhqc7wyG_uz5MGyZB6z+n-kc9hbyPc0q=~KiRl37(&4)%T~RfTP)MA7xH`E)XBYMYE{AHIQrl;{ zJ(lC&j$!u|&3D)X3h1`405%1UC9L&62r(Kr2X37{)1K^eWd; z`n8Ni$m?FW-z#LcX(J`7P7*~5nl?tF%gt+1qIAmaywf;>pCe_r zc5sN}-7oYZaen3wM8FDY9ChW#A@!L0sy_{^$=A#MWo0MHTGKuu*u2>|!&-t+jVArZ zjT;_E(^UW^Xt%mNnq}VgtE#Bzisl;bb($Y3e4*>QeTyeHI=af%WN_c+#lrpj_lxXT z7b5iBtve&L#Xk~32=Z|85c;f9Qf`Css)U>fa6RosoD_|>ezhm~ylD9-IrOUYx0UH? zQ@oBeu-5st{TmV3e6H6T%ol+^ynI!ye&?sz&Kq`)ju6uo!eY>?a*!1kt`<{fS`4Tn zw0XqF)<097S7|2m_ATLT%ydKk(O!S>yq%3r(ZC)+m$T~X9)@;GhFYF4r<2a@LD21u zivL$6-g})`$X#2`x8n?Q6QFZW^zJw#=5vS&=ChnY11&niqPE+9SbmKfzSh;|Ewlnc z$2LqhgZhSs7m((G2voD^<*UC^GmDFJFFX87Kw!!n^!)dW=DF94lu&AIW5bz(Hhe&} z&=nmW4lT1Gz5&H-zDhCld~8U8YSZE<|J0O}2S0$8zS~Ak3WcB&``GvH8HCI(E}BSi z$wy$_yZ3qFD?GU}U6^LBT1tO^|6f~CCQd~xD^Twd(6>m*=2mCnL>$A0!9lj^_bv@O z*vQzR1~DL~rlxX!l{Pgsm7Tvl+s(f`MO;!+QAq|3MN)z%MvB7Hkpuhwh&(%MZg!?y zi(wbKU%DR8o6Pj|_P>;ccGfSw0KzqdhfXwdxYNaDFYd-Wu{UVi0 zrUyRo_ngvx{q(8oI!beMbGsijr4df0V?9H|e?0OsCo0aB<#TMTMcnfGI{EW-R@=)bujq=Rn}V8wK}PPalT&IM)u7YYDHd7Q zh#tYyi8l??5a!0P7*r=dZvij23=Uh#jlJi$QkI?Mw;LEMH8+vC-066|>wJDyb$J-4 zpjhsfixmn;0(xqY2y#4hWf$Ql}_-d*!l zQdUl-GM*Spb=qp&nU_wj%+V@q?(OjYUhQOywhYSOe?}TSJm>%HR{_=?_SwMMi|_5$ zLmov11po;mhbBTgqd$bwUXO1$lXk)8D!pL6+r`xtbKD=qB}c?#^Wlh4@T_QV?qz0N z)Z%ZaMiBh&>JSe?FS2Of7Ugmu!WIrNY?X+pE4fu`ZRr zBI9W5=*;ikA+0u_^`(Tci!nG`UopwINEH5oRgkEJoK+`;5qLvL?RQclK z;<+;5+bZ>A#%H)3lGr#;*B@uAsZNIUnzHM8oX-#CYOTZwJ2)ID%L|YY625q_UA1Z4 z8MR-0#>vh77W(T!919;jEftk<^E`a|bXXTHLD8Q+DU7lh7#lBu3xnO}i-i|gI9W?e zOPdpLx&kho%`B$pCus6Q=WF2510S%ifJIj#XK&I*4SGyPO-(rU=Iv|{7n(I8So3B$ zZwNbd-`&|sN&Cxu)An9%+Lme#1$p1-duVD#NoXfParllAiU9ukByjeP33 zw=2+H>E80uQMvVO-ujfsI~B!#<}`)~Ng0`~-Q9?O$N>qu9OOv&-g>}hyytt595T#t z0##^a*F$P?K9myki3x1gH9&Uh5_TfT3vD*zsB~c~e$*srsHpz_{=9A{c2A$yhACr8 zLy9r1uW$YA{2WRdfGKVIfZeE_*t_b=FGChkThDEOzBe&qeqq6X4^kCXcFRMxZhX)x z1a4t~-M_5t5cbYHC#zPzb`bH@z4!D%Bc%H=Gvl_q(B6X79UqMH#~+^v5@{EHAUt53 zDCge@3%9Y$2QpLsD3`DWjpMZ+Q!s{@0+Pr*{JZgxw3nz3^7Z|++e8C>S|RCdU-$0X z-{E?Ycn$VDwbquF#nVj>*e$v+8i@hNWXcUgLM@Va-&#ZjosyCgGWa+i5OVbP_5w8= z?QZ5;g|ZC1VP!d>xzQ~N^a3bDZ4Qnvf4jW{5dnUWV|UC{a#B)|G;q8; zF3;rwV!I7{^U5$b3l?hXbfL?$)6DcZbTl-!mmgtr!zNYNVRVaEob>U_rL*J9Kmv|2 z?qaK{i<#)N)qE$}nyufHWS|46EJOLQ^(!5YoWpp)qCb@Lb$Z%hAsM_Q*bs~6z*i7x zvv=b~9GCrcSl#%^=e)l{$r07Hcr_`)=p*dcM!s{iv9P>>Weoicf5G1UwR@M~s~=r3 z8zKj^rLWqsvELFkllt=}5?({EB+rcfIR!4g~u#l}>T|s)xM@C0C*1P?(#5b>0h`X@JdxisQb(NnE5O(^mGd#`EVV=y81Z z8&uaIbH3cUj5WjY@L`7T3yub!I+zSFVd5hrDYDM)pcCmYStR1lJofniZOx5MJ^H*~ z^Wj-H7);lTva%M=NI^lYAROTUCMtp;-KiE%EIS5&Z@I5dD4C*+QB0q#!#)=YNr4Zt zU@xFUm`Qg`TW9M7cvoXDB;QN-hId7SQB6)7yXA9J+Vpsh^C}z4eh>b(wlkqLUDNXg6N`SliTjc=A0!x_w9CU)qrbo>)~Snvmk z#S2v>Z3YC;{(aw~K^gh*&qL_x@ze|ljM7lvbDUAmEDr#91QbE<;0llP(F*B^77`C7 zGe&58Kk0UAp;)#)J3F51atMCn^r)nDp#>QkS&czY&}P6i`VM=^1mjTT@lbSVD7g*T zg`d#LIq34%UUV*ahe=3 zKz!`7QIl`Gm?u~(n3+inEgtj`mg}%AC!J4!4)xu80^o^^x6naSBOsgPV^9zyEiDgp z6&dh9J6L6gcTzUtJf6{~4nkB3mVTQujTZ+6`<(9hW}0|iTg$*rV7z!XGuMVCbbi#Z ziMSX8Xb%^c+zTeCpFRygtP_PqL7iQgwS za`JJp$)Ta9CZnbuBcO)hly=`|id)S?Og1zm>r@>mL3@HQx4qWS;P`dy_aEHNjS_fW zBU^^rb-Y~Zub^-9I8(?H_6v55OS8r2g;=ukm;w>?cS;%e14ue_!ov zxl!Kuq8b5+;wOIzk?IKkId=>R4Q+%9@1LD_Dk>@hoV)h+>}ES5a}q>21gS)BN}jf# zKLzOMPKr91H~Z7`tz}db`TofT;Ip>JJZJNP_AF;R^ibPfYqdEU7`O*>5X@a5zDsUd zS(!Ei8@cUJXFRmX<_D6dtnoQCIRqr5yuf*2adAM5vce~X!FeUH(9+Y=AY}@*6HDXy zm%WJ%3{Vj;Y<0MyQ^7L|-9%B*(VrK(etnSDXWF<5vl+SZeQdiNq0(TF#;Wv&ylbXDLbYJ<0qv7i*}aHl-Z@kvP|q9gEdapCf1*0av{po%u)jp(7Dw!(nP0*P;GO~DmtPHXo_-&Gs#9(rJ3ul3^1*Ctst-AMDtv?{+ zVVL&5!ii^fI2UWb7Eao|D}4Q@0RiT)JT{2g_2!`S>t<~%)517d6@acnbsn*hgNzIv zxq!vl2SPOR_FYD1W_bx;M|*n|G_){+_HXeey7Bcf{1Lvb68-X7gZ|FFc|R-B9&m2~ z8yo5_LH)kcmpmLbNDuwGh)GBswtjtwGy~+yWTITN`DZ%g-Lb7NT&yZs3 z3ub)p&lwIGUapU_I2?rB`Txh>dk00eechsX444oR0R<5S$pRu71XMskau%8(Aejcq z8H`921<6Tr?v|Vzm7Ft8MsfxTO=!}cc+R=M?|XG`)vJ0{x9U~h{^uMCP4B(eT64}Z z#~j1R7%nNrFzsU^=Ex_VUc{b>i*DqFeu369NDgX(^ik0XrNz5NuR*yb4u+u{|+{i)tPuTi$*QDbe-<)~f=Y@qw#G(DRv5x5Fsh=b)O+n_g3q`*ad{l5Kfo>5|) zf@&kxli^B>G-v7uFVgpm($jwrUGH`fT&A+F1XVN!ldvyWy>PV@pgVl+!HbCW_dIc{ zyBo8hQ1QVgWJ%Z!7rdE3bsc>$mIZO9WEHF`jgOLX2Uq(p^Mpgo`zaKN5?T(;Y&4i7 zPfJTk2bKI{tF{#?vijL;Bin+JOpw#TS*+8PSI+W$K${2ue!5=Hk*!r2P z?rOfwjoFwvq%Zm)N#m8MfgZKJzUF%vw};(#@uF(4SMZko`QlRWWP?f8&6+6 zdTiH*#kJ(O`%&r%NcJ3hZuEv5BtfI-ZlePll`Q8AYyaf zV^UO|%TzV0n-&%pUai=>DVDYRG{yF(_<>k&ntUwxm+OM|CC*?ah+gvnOp?@)=-R!9 zp5=z+o)`mdG4Lhmq^`>;mLnl^Fu*W04?v85($~&Y%b2s8_U#E4H8N#-=EuN*k*S2x z{)E~`}}3xDQ9$bDYK5^11Wi2f4=jrBb^^m(bHpH@Fi;2)Y1~%0(6rnd!6x0 z^Yxpfb5iSTZy zHi<2c_BJPjAbk*Tgs|T(dLVB3fLHI#;y<^oCaSRSp85)@C8iec6}PALp9uWT1jYp6 z_3H{P_7aFqbl=hI33Hh5LJsvom}ds<4e$Lq$7R`@KZwttztZcl>jI`kzdrqf!Au|u zTm;_ zp2Q&@h){BPUrH{y#qeQQfO#k!78oKyMn0^CrTITM0vZggnry5>GD)4!mfU}+$EP^< zxgYge_VVN!=kNsJhTeh%6dn~`_s?3{3V<>mUTkq6(lF!|B_;h69WaS40%}C1vwBzO ze?ImwN~k^m?fXNIRB5)aXmq?Z=ljRdOk>iJr@9C*@hG&ns2}i~{=VFpU3D%Yy+o>_ zNw_t-nd9EF@o3ZvmpS%od;uo@CndRPMmkYWMn%GiTZVD11fK1O==U-APw{$%K?7Ig z(>c2fJR5Un;S7wMpP6C5dbP)mDt*;aEu>C%ww%T@cp(otq@H`e#>9PVm%@C(_UC`S zG+UZpaTO~+wj#`8%9@+Z@ddpSru&B&Kmjc=-R|x#py?QhY<@pHz<6S8wR-5D;y=V~ zj0_LU`uWPPEzGMeYnroWHF;m6;`JIGg9ha1la!EqvM#W~{~I#h;_LmrCA3NiX?ANO zvxwP-*Lgeece}gb@j=IN0LW67SWIQQK3OENOAcnTIEak2Sw(Ce)r(vLA$ojV8~V?B z4oN>936p~C?3XTP_dW3D8G7hZoRu2)QNot{?K6^gk)y{iULfWT?!JA^GgifeaFB~a z365oYJSMfwZOzv`zBmH5_kVJ@SLEz>xK%4w#){kBJ0iJE05}nQ{CK(;puhjjZ0AqK-ZMY0M%@hN)%; z!3d7qw{-)of?Ys*<{z#~1Y~?9D%mQ5TGiPyTiCBaLX0UA^Pv{_t>&=+TbO9cWds&0f60E!Fek0GhNw zM41c*`>O{OR8YF;?XKa^fV0~(Xof-`9SlA*y@ZzTPbL^(664m#YW?kO^8(?1L~mDb zk1eNT`W?C!>>a|){1nWG6gr;+DL93Nt3oZS7fxleb0hE3MxZNKT3U|QEnJ`Lr1LgN z^mZ5>vr|!44q)uP8sC67Gd416kJ{~?X{90(=;J8eE#ZOMOdDhAYxD7G3f^r+FBp^c zB|%x3$FltXm_hVP_%%vO*X_z};f>)9Kw``}2JD-kw=}I*wdD+|7x2b@#UZkBQ6`ng zH-kXyd|Ax#e>)}wgvy8QR!@R-@a~c(7d)uZ3>6bTzU|5SkAP*QWoKLd`uZdBk}Uf? zC@D;T6gu2lF6M*&wNjF#q_{Xa8AZIHi?S*ZXNt#c!h00KX3xpSW}wJH=Fub1=g*(R zf(`uO7lW{lzQ2tY9rN4>R7yez`1t`PN7!MZ20}IzAD2*b=|3r97=8lR-Hm!wN z7iVXYtsPRhnA!q#)fHCSJfy0$jg4%JX5bSp$lAdSw1XkOVW3t*m6wA2s-!5c%R}WR*tXcjg-RsiAY|q58$RD#4oO9{fuZ4X_iSq*6ITsK8OW7gJoESBQ%=&X+Wr;?cRhFi%^R&ZSN?PF|4CubK&I-l z99V38upg2>LFQ$f`u1)0&N)6^uWF(?ddYxmF#pVNy`m=*t}4t+J%Ty_%?;evRv2Xy zxdRL z&|1uDJ#YJz>ETH1VTe!UtW$`H2#qXt+eXcIW5Vp9l-p`Z3PKK+==U~3Gl_!&S2KZF z7%pw*Y8Mf;9vw4bg`r5?+<@Ks)X+z2A%iT1DK(P%Pm!T!S2~^_aKC-?SBhT_H_XU> zGMf%Y+`!U$9TBXh9Ds4K*ZyHNe69w`fE&jeU&&`Ou#RfYuqKS5)k`M0SgaVD$C% zm4(BHqije?Ndc>1Q=;(PqjqYtzOa5loE8q`eeUGC++IhATuZW0n85{_FV-Q(4J z*lb-bp!rt?`U=p`#~WTKJ@lp;5?AGIjE;{lcI^#5ank#8$4g&QiVdhZ!SpJs+f5U!mTd?H@aiJ)G&UKrNM^WJ6akce0CK(_P+Tv1VwwsL#*ZnR}zO3Ak` zWJjXgktY0Z#*Q;B*+TiN<+IMtt#NiAdgf6hTnSmDIXZ3?Wtb;}qz;USgT1}u@*t~%z8xw@n_`Htes2jAYvS;`dt*o6 z#gw<#@mU=HlT7h6*9D#mky3JtYLsu0q2rxkE-&`&yE6nMirP!LxJC8r*RRV(x+Z=2 zP+a=HcDh-B*3^FLWzYI_)!mAtbFi|`%{h~iP1E{N-56etg2vo(m|nTtAW2yf4@|p5 z{ARxsA5!)cXV+F7juO^=SnR~knF}K7Dff8P`lJ&unAgdiq@>-QhILkBMYs>32I|&~ zTy}mx(22NIz`@hrkH_Pwg^Fr#1UWiwpFKv$2HP7+Z3+tu-<~0EEVZ8p$O`y?%h5l3 zkzYbXk;C8gLF6x%{0_zufcMbw@OTl2rwh6@fk8fn{zo6;537zSubHk&NX*7(RRC_& zVSI<1V9u(BXm)Ek+TPxNrDOwhQ#fYoy}W$eg#PpAOcQEQ;#?E5@;gN^()lUjb6p(+ z5J9e>PT%18D(10w3>2IWY{ubmP^F}7-SenxNlxDQaOq}1P!KWE^5XdT?Vn&7>K$w> zsNekB(Y}{!OI&*xx@EOPcUZZqyPC{@=s58WWSr|T=By9$&)D(e7ZO^8i{h+Lk~V$i z4N8fY(EkDBE(eanLWkgNgogJPEw6qNy}mGK|HJ4gY*>P7EJPL3Cq`$m@WN+QSkY z>?TP1g&KZ5>i%prWYG-ezW9T>=B)5{sFw!?M{4c;5H)qnz!0*@yr!XHp368QQpZE} z)Rnbsb`4E5f_3!k7}P~O{5Y~_?364m1#|@) zP$Bk4E5V9|5`_l(Ue3h(KD5pNV~Mrt*zc1{ULxOE@b7=X7+9!HVZFiYkiVF)@2fAJQe|MIK+trK)QVRcQ9m!wo(=9i76NNyvxpXCG zVY;bk&?;-WU=U$xi!5$0m(_E8nk6) zU7Y8#`qCkRir=bQxbC+4bB~QJ=PnzcN(T8+A=2X7AT@wEZ@C}uEr{6Jv#v6Jku18~ z!{rwo${GerJN}Uw-BxFpMi9D8A8S*Is2F5pu3n)W{8@y%aDht53P=w{3p-8J!mi-2 zOP7&B0eToWT=~5}5MLA3e>1U2SGuzkqO`Z2mX@O1*1FtT-C14j(bPkgcb}^^H`-6JJ1^Edv*N*ybjQ<`NJH6|oe^6bk+puUqygN4R zXzq!!+F3;JgfJd^QC+-|tbG%Xn!UapsBO87+mw&Us8nVnc>6NLEbF&V6A)kpuTT=$ zA6qILm?I6bQ~5!{Ywped{-63YL#uqKteuEgza5^GVB!>D<{V$j*so}&d-72QRqBY# z3t=>rU{ZRwE$+@bZLq!q=8)aWGcA=Wx(Q`vENsh(`Tj#RS)Q$>UzTT9rWa;z_c_k} z!sMIC!}CaD+g#O9*J236ZD<6B_4f7o+1hP*o&4mdv3pQV18OkBl@&T859|Q4@nPj0 zmwn`kYBFZc%Ff=OPOGJ-mjHcVU0soBqm;1Nw&hPA$jAN&G+NxCr}M;OfcbLZsc zN|_7-p+G9Gc;2!$hoTOo0n-5PMLhB7+G)D0jF5WHMwiGkI z7E^tWHhKnj{KAD?r03xwts`h{yRnFf%4NAZ|D%V;niT|LhV!9(Re z(@b<>4)(831363*@y&iZt*%FA4`S<9OJ>qHJV_+=_xh^9u+O*^Bj+B-z;TtQ*h;es zx%fnS(gXXGYdjNyYINx;a&le$su+rSIH6GI<9(ltPs6>SuqYI=%d*_b&iWcM%a;vf z8j1-Xdk2M{9@>_c&F6^nhP(AV$-`d+J;0aHHn6R#{(7jYiq;jW_6}0K>It~Y#N(C5 zw750gMhJ!9g`Z$yDb3$;d&l& z?|LQ13o0tGx*jgj$>)=e&uCy9Epo7UDb-*YB+72kxPFC1<8Ub?h;JXK;p{A~U^2_F zomfyXmBmqYIs83G<$4sYCkKj5bayUEj*1Tg&e9yy9`9F$m*1SFh&qQU;@o(dm`o3K zoQm~@sb2tgPC{~0&lBfRi~Je9N=_qe>)gJg<2OpuGxiwJ{K~w|G5>XQgC{qBFsr0d z^Is1A^y#Z}XF(6Q&0tBXn^aEE;H2An%{h`?a>DH&9}bBej-b4?O~cmpK+P--!vzvPf;}YaFW1x-w6QDOW!vgUo?s`&wuHCD!v2G1*>6uj!ry zsOeT{aA>OD6%tY@RUCdK7xO@+b3W#*WZ*Ss#KO<_cQOtlA|hnV^*_>XF#}!`bX}+v zgE^e*eA~*VrlT|PP5S6e@5PH38Ra55P1+tvB(t$^J%d`L>f2d~3hm$ng3cE+cL!F3 z4GlhKWUHvE_~vAeWiDX9sH7o#2PAP=N7|K={+|iePgp0S-t2Vg|E!_PMp}x0Qy-3c zYOd&&rPVi>)UDQIG1N!xq0p|oeyymd!}SM|A?K+Nn<4ez=m(;E2HVll9Cff-nPw=? zto&#!X*y2rG1YKlIx29?rd4T!$%n)7xL{~7{)7d9B=fD9kUMc=tjXhMZUKeC=~z#g z@+`Dak3c+wna;{#K#e%iOS+SM8*^z%v!L#!#{=G_sDG z+JZ;q=I5#IFvhB|qqERt-7-%j&tDRbVUUetpMWTFecH%q{pbE0ZBDh7bBc5GOPRwI zF}GGGYCNPsdAP?DCe|cQsit&b6~dkarDR}OIZhV?JYBfIOe`#$o9mpM;B>Uql@%Uu zOP%}HfbzFHc$3tIa}mq) zf~%#fy{ij9mUEmB5fIpG)CbW}bpPtOJpJ?2rw(uljCnwU6|ERxUz|Fz3aDKA7X$*~ z4>p2M91^|{9zzWr^i-3yt#pl*Vr$0Osh<+r`{rLInC>VMxFAgOjmzGrBTo+?D z^gMEqC)VO0f?Q!y4nq9Z5im`vB?DCLFPGyed~D7Sbbdo@_erNPsQcJfzOQ__br)IkxVp2c5rTJ!#p2sxz(L$LrKm zE(v$b+~e<+!6@Ib(!|x(h0Q+P?t(5R`EP$;U$ff@j}BGdG3*%zUE`l?ippE8tb48d zV^mi?{f6EbO7>k!Y{kO2h$2V1;l4;8#fl6w8yh7%nMRI%&%?D3aKBirwuW9^(hADM zyE<5CA+mHW{TE$4JUm}hD2n<*`pqWn_<4u)Bd{g(>Rk!b9%so812uS%0}?)vf-f3vjGbRk>?;r3)X6%qp@ zH%DtBG8(EYlrZQ;U_#;K@_T82_nlGI(N|@agO^EpGjD8aTc=#Z!+34Nfr751q@<5T zvhpY_&F2)4>1b-+UNldvSZbLMNt>9&9Ig1ft+=%`JtY?n*>={{RLU6MtJHqv8P{Z; z6rJpum8qv9-&$0;0A~a*iBcG4*I99G&1vS{oDAO#-{hM-#ZS#Y<0aDyO;q=k(MW{T zCQsU7=hA+k#W*$6u)A(cX_1MWTS7@6Baw8(=y@cS1j}X z^lq?g&-LvDHN@P^is$%aTQf5=U0syvLp?pwT}thd;VYz9lD#}xR|oF#OGqM$9Rq#b zi9xhv=l5sb(b09%`yz)^Ch_js>4w8E&4I4T^HG0xRQh9E%ym=BB|5UnE5rN3+A}hU5 zNXW=3_w=bMGa7|b)*PQ#VXVoK5AUYK>x|F!9~8)K+vWuSz_$2y30GD(t$Z6<0`jC@9{oXPFZDUUr*Ayt+Wa?vvqfk$-Z$w4}sue!hE+Wm-)w zw6p%>Q}gZ@!eL=~R{fNWFYf3`g$*iX6)BG59(V0-n6$@yKAew!6ikGg4UdacS5k@# z3u8&FwOT>WCnOYpq!y-KVOovx3U@;5`k{laQcE#e|Mn%dfk>t@p}J2NzWqNRwbsyI zoSgN1)`L^?^SFgY>s`WAFruz;Q8L>_NKun?_A_-Bv`}! z%NJXt`}`sg4+wdREmyxjw_(jQ+2##>v|406v{RosHUZO^NMzvpD=!|NUdc<6(nNY* zQj~TJ^Vw->@%AFQW%#j2V<1YtwLH-I;^58x{=pu~`RUyfhh|q!(yKj79VgX7$x6dH zVg>AKmvbx7ZaTszcjF&<;C=V@b%cu3#qEM_3Mc~ec#-0kP9Q#KFmp>IL~t)%B=`LU zgB=!?Gd-;lU}n26F8jpQ&or=3m|iMRX?bzzn;PK$7TCL@H%F9dyccL<`{I;ZkuJ>( z-2A&j6LWevvfc+#%e}4(H&jZ=M?0wnBcxtRdC?h8iV<%6p%1UVpO7g)B96-31tbq} z+6a?3d3A`>UP3yzu?~|PS%_rU+DGnv7L?ryDVAx zr{_Tx#fF9$`BGqZ-MgxfIb2mujZLpewJ3w6)zkNOk(@R;N++KI;FVJMX+N?t_sY5N zuhSXA&D}ePif|33ZY7J0i}mpV6ja$vSBulVV2GeFULBc`79M`5nM7JnR`wnzPbgvV zX_9vGvHlnVI|eqk!nFK+!Kzo*6cc;2B+u3NnXOhFSNa*4Jv_Lb8!qR@B6zJ~u4b&l z#D=cOU^fr)muWRK+vLGiySAelQ)d(ybZ}@^^tZHFj-Mpdn!U9i*ulDx!`gEk0mbyqwcV_H7vk~HSZa6D_(tzXf-WCPA zd?#8#Z14Th5Dxm#g0?%a`gbBG<)(u7cJPukLU&gh4-VX-5zlnn8ez0o(MC!C+0i4& z6I&~vI@f$6Wi-H|bmO`>0MUs@ebjYvnUB*M5?|`ui%${fM>h3n(%#%^O$@5lEq8O) zQ2(MQCBpI8Uf7kN=(^y#d3l%LadM0Afl>>IYeDh+$Zl^QJulqr{>Qm$M$^+29CvEt z14tC)Vz|XpFclQt$s6Z@RDOjI1+wO^E5&+-S#lfZRcvTY7nUYw`dfn5dqo9vgp;C% z)@KTeJPrRj{w&db5W$;HpV~58r=}Kp{xan4d;tZt^rDT&Fq_3RVF!mv(a|50LhOtr zB+M6T2L}fmlqQ{)hi!X#wEa!qXxkx12c0VOiVluK?B&DcXyvcC1jpRZJ+a>Tu*W*Z zt6k89k1vC@VE2NuTESp2%6vbspC*vY%*YV1 z!xxk=uCH57oENxLfG*(-61XWmJ5wshZe?cXGP{3T27}mN_vZivaC>8$gM*cnHQ=Mj z%)|to#xEq~5Qw4D;!*q%M^(kFE8A5IIUzL=q=y7e;;O~HseOh zL575m_Dp6^@wZRY&2{k)cIz`kU0urz^za{uO{-nMT&JWAye{OpktzqE)%qv>YBxcg ztb)Q=sbP74QhKWQUuMy;=Sm**VX+GQZVYfTwzn%Nt*p}AYV)J}a7m}F^udd{dl@P| zXP%|*~q`(*j@&8@NG_;EwzxSl#~y&tp9BINjadhlho0 z2ApBM&?Z50W zqdm@RjXw0$n;G3dsKjIn9R9u5fuia;{EnLq32zC7g)4`JQmkPVW02w;5kc8)lHYsn zl|eq&g3pfoe5g=VP_V9Puo3$p0WyL<6n<{RBq#g^t7LQy49xq4m|nE>GdDHv0qD=h z(jw||-*GpOW|}@Ot`ZEtK#h-(SbUkJ+3##fa->ocV_$D?ZQYHLLc{!?%a&B!&f>7Q z-_u$#K{6D+)EbmE*OnhIhc6 z6&~eZ?5nFvAz!9zduQ0A{%!MLEI<;54!%hSPycw=AeOvf8Jd++N}hK3ftYg5+NuCS>-L*iLtzN4wl?XyZFaccUI@MiGWT+m?ZjQjjKso+6E zLg}QgmR1??3P`FU_eX1^4zKru!~3v};1Ssg?GN&CK3OQ#3Pqn@=XCjfn@&(n0cZ6u zpFgwz9FjxbHu!ZbcL`>^S>AX}+~&BrNaI;wA*6Pul!lX5SwX?8HZNrndobktCM|s1 z;{t`2me$kdAANmRgGAj`nw!1WRfn`3Btrm%P7NchkS;%zlIo!#1>0<8@n_TYGvwss zC(jIX@6FUvw9~#}O^hptAd}}3(sMan?VTl}@Fp3Tb%nI{J!>E(;b^j^=%LRUC1UtQ zh=IGn{DK6J2H!T9iM$L^wJcLpt-gbegK%F5Syj0tW37Fyeru)sF7℞b&CbxpnLJ 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 literal 0 HcmV?d00001 diff --git a/src/components/Page.astro b/src/components/Page.astro new file mode 100644 index 0000000..54743b8 --- /dev/null +++ b/src/components/Page.astro @@ -0,0 +1,415 @@ +--- +import '@fontsource/space-grotesk/400.css'; +import '@fontsource/space-grotesk/500.css'; +import '@fontsource/space-grotesk/700.css'; +import '@fontsource/space-mono/400.css'; +import '@fontsource/space-mono/700.css'; +import '../styles/tokens.css'; +import '../styles/site.css'; +import type { Copy } from '../lib/copy'; + +interface Props { copy: Copy; canonical: string } +const { copy: c, canonical } = Astro.props; + +const GITHUB = 'https://github.com/tillheidrich/klarbild'; +const SITE = 'https://klarbild-demo.heidrich-digital.de'; + +// The output sizes the preset builder offers, straight from the application's +// own table. `sticker` carries its own 5 × 5 cm. +const FORMATS = [ + { id: 'keep', label: c.htmlLang === 'de' ? 'Original behalten' : 'Keep original' }, + { id: '9x13', label: '9 × 13 cm' }, { id: '10x15', label: '10 × 15 cm' }, + { id: '13x18', label: '13 × 18 cm' }, { id: '15x20', label: '15 × 20 cm' }, + { id: '20x30', label: '20 × 30 cm' }, { id: '30x40', label: '30 × 40 cm' }, + { id: '30x45', label: '30 × 45 cm' }, { id: '40x50', label: '40 × 50 cm' }, + { id: '40x60', label: '40 × 60 cm' }, { id: '50x70', label: '50 × 70 cm' }, + { id: '60x90', label: '60 × 90 cm' }, + { id: 'A4', label: 'DIN A4' }, { id: 'A3', label: 'DIN A3' }, { id: 'A2', label: 'DIN A2' }, + { id: '20x20', label: '20 × 20 cm' }, { id: '30x30', label: '30 × 30 cm' }, + { id: 'sticker', label: c.htmlLang === 'de' ? 'Sticker 5 × 5 cm' : 'Sticker 5 × 5 cm' }, +]; + +const dpiLine = c.htmlLang === 'de' ? '{w} × {h} px bei {dpi} dpi' : '{w} × {h} px at {dpi} dpi'; +--- + + + + + + + + {c.title} + + + + + + + + + + + + + + +

+ +
+ +
+
+
+
+ {c.hero.kicker} +

{c.hero.h1a}{c.hero.h1accent}.

+

{c.hero.lead}

+ +
+ +
+
+ + +
+
+
+

{c.pg.title}

+

{c.pg.fine}

+
+ +
+
+
+ + +
+ +
+ +
+ + +
+
+ +
+ + +
+ +
+
+ + +
+
+ +
+ + + +
+
+
+ +
+
0 mm
+ +
+ +
+
5 mm
+ +
+ +
+ + {c.pg.rotate} +
+
+ +
+
+ +
+ +
+
{c.pg.outFit}
–
+
{c.pg.outSheets}
–
+
{c.pg.outCell}
–
+
{c.pg.outPaper}
–
+
{c.pg.outGap}
–
+
+ +

+
+
+ +
+ +

{c.pg.footnote}

+
+
+
+ + +
+
+ {c.what.kicker} +

{c.what.h2}

+
+ {c.what.facts.map((f) => (

{f.h}

{f.p}

))} +
+
+
+ +
+
+
+ {c.shot1.kicker} +

{c.shot1.h2}

+

{c.shot1.lead}

+

{c.shot1.body}

+
+
+ {c.shot1.h2} +
{c.shot1.caption}
+
+
+
+ + +
+
+ {c.ai.kicker} +

{c.ai.h2}

+
+
+

{c.ai.lead}

+

{c.ai.body}

+
+
+ {c.ai.caption} +
{c.ai.caption}
+
+
+ +
+
+

{c.ai.builderTitle}

+

{c.ai.builderFine}

+
+ +
+
+
+ +
+ {c.ai.presets.map((p, i) => ( + + ))} +
+
+ +
+ +
+ {c.ai.tasks.map((t) => ( + + ))} +
+
+ +
+
+ + +
+
+ +
+ + +
+
+
+ +
+ +
+ + + +
+
+
+ +
+
+
{c.ai.resultLabel}
–
+
+

+
+ +

+                
+
+
+ +
+

{c.ai.honest}

+
+
+
+
+ +
+
+
+ {c.lang.kicker} +

{c.lang.h2}

+

{c.lang.lead}

+

{c.lang.body}

+
+
+ {c.lang.h2} +
{c.lang.caption}
+
+
+
+ + +
+
+ {c.modules.kicker} +

{c.modules.h2}

+

{c.modules.lead}

+ +
+ {c.modules.rows.map((m) => ( +
+ {m.id} +

{m.title} — {m.what}

+ {m.need} +
+ ))} +
+ +
+

{c.modules.off}

+
{c.modules.envComment1}
+KLARBILD_MODULES=print
+
+{c.modules.envComment2}
+KLARBILD_MODULES=print,ai,share
+
+{c.modules.envComment3}
+KLARBILD_MODULES=all
+
+
+
+ + +
+
+
+ {c.install.kicker} +

{c.install.h2}

+

{c.install.p1}

+

{c.install.p2}

+ +
+
+
git clone {GITHUB}.git
+cd klarbild
+cp .env.example .env    {c.install.comment1}
+docker compose up -d
+
+docker compose logs app {c.install.comment2}
+

{c.install.stack}

+
+
+
+ +
+
+ {c.privacy.kicker} +

{c.privacy.h2}

+

{c.privacy.lead}

+

{c.privacy.body}

+
+
+
+ + + + + + diff --git a/src/engine/format.ts b/src/engine/format.ts new file mode 100644 index 0000000..2d26682 --- /dev/null +++ b/src/engine/format.ts @@ -0,0 +1,77 @@ +// Target sizes & exact pixel calculation (see 01 §5, 06 §3). +// px = round(cm / 2.54 * dpi) + +export type Orientation = 'portrait' | 'landscape'; + +export interface Dimensions { w: number; h: number; cm?: [number, number]; label: string; } + +// cm sizes: [width, height] in the portrait convention (short side × long side) +const CM: Record = { + '9x13': [9, 13], '10x15': [10, 15], '13x18': [13, 18], '15x20': [15, 20], + '20x30': [20, 30], '30x40': [30, 40], '30x45': [30, 45], '40x50': [40, 50], + '40x60': [40, 60], '50x70': [50, 70], '60x90': [60, 90], + A4: [21, 29.7], A3: [29.7, 42], A2: [42, 59.4], + '20x20': [20, 20], '30x30': [30, 30], +}; + +// Pure screen sizes (fixed pixels, no cm/dpi) +const SCREEN: Record = { + tv169: [3840, 2160], // 16:9 landscape + portrait916: [2160, 3840], // 9:16 portrait +}; + +export const cmToPx = (cm: number, dpi: number) => Math.round((cm / 2.54) * dpi); + +export interface ResolveInput { + format: string; // a key from above, 'sticker', 'custom' or 'keep' + orientation?: Orientation; + dpi?: number; + customCm?: [number, number]; // for 'sticker'/'custom' +} + +/** Returns exact target pixels + label. `keep` → null (keep the original). */ +export function resolveDimensions(input: ResolveInput): Dimensions | null { + const { format } = input; + const dpi = input.dpi ?? 300; + const orient = input.orientation ?? 'portrait'; + + if (format === 'keep') return null; + + if (format in SCREEN) { + const [w, h] = SCREEN[format]; + return { w, h, label: format === 'tv169' ? 'TV 16:9' : 'Portrait' }; + } + + let cm: [number, number] | undefined; + if (format in CM) cm = CM[format]; + else if (format === 'sticker' || format === 'custom') cm = input.customCm ?? [5, 5]; + else { + // Read freely defined sizes straight out of the key — no database migration needed: + // "sticker5" / "sticker-7,5" → square N×N cm; "25x35" / "25×35" → W×H cm. + const sq = /^sticker[-_ ]?(\d+(?:[.,]\d+)?)$/i.exec(format); + const wh = /^(\d+(?:[.,]\d+)?)\s*[x×*]\s*(\d+(?:[.,]\d+)?)$/i.exec(format); + const num = (s: string) => parseFloat(s.replace(',', '.')); + if (sq) { const n = num(sq[1]); cm = [n, n]; } + else if (wh) cm = [num(wh[1]), num(wh[2])]; + } + if (!cm || !cm[0] || !cm[1] || cm[0] > 300 || cm[1] > 300) + throw new Error(`Unknown format: ${format}`); + + // Portrait convention → apply the requested orientation + let [wCm, hCm] = cm; + if (orient === 'landscape') [wCm, hCm] = [hCm, wCm]; + return { w: cmToPx(wCm, dpi), h: cmToPx(hCm, dpi), cm: [wCm, hCm], + label: `${cm[0]}×${cm[1]} cm` }; +} + +/** Simplified aspect ratio as "w:h" for the image API. */ +export function aspectRatio(w: number, h: number): string { + const g = gcd(w, h); + return `${Math.round(w / g)}:${Math.round(h / g)}`; +} +function gcd(a: number, b: number): number { return b === 0 ? a : gcd(b, a % b); } + +/** Is the native resolution enough for real 300 dpi? (A hint in the UI.) */ +export function upscaleWarning(srcW: number, srcH: number, target: Dimensions): boolean { + return srcW < target.w * 0.95 || srcH < target.h * 0.95; +} diff --git a/src/lib/copy.ts b/src/lib/copy.ts new file mode 100644 index 0000000..3a780c1 --- /dev/null +++ b/src/lib/copy.ts @@ -0,0 +1,394 @@ +/** + * Every sentence on this page, in both languages. + * + * The site is static, so the two languages are two pages (`/` and `/de/`) + * rather than a runtime switch. That keeps the page working without + * JavaScript, gives each language its own URL to link and to index, and means + * the language button is an ordinary link. + */ + +export type Lang = 'en' | 'de'; + +export interface Copy { + htmlLang: string; + otherHref: string; + otherLabel: string; + title: string; + description: string; + nav: { try: string; ai: string; modules: string; install: string; source: string }; + hero: { + kicker: string; + h1a: string; + h1accent: string; + lead: string; + ctaPrimary: string; + ctaSecondary: string; + stats: { n: string; t: string }[]; + }; + pg: { + title: string; + fine: string; + paper: string; + orientation: string; + portrait: string; + landscape: string; + size: string; + count: string; + marks: string; + marksNone: string; + marksCorner: string; + marksGrid: string; + bleed: string; + margin: string; + rotate: string; + outFit: string; + outSheets: string; + outCell: string; + outPaper: string; + outGap: string; + download: string; + downloadBusy: string; + footnote: string; + noteAllFit: string; + noteAllFitMulti: string; + notePartial: string; + noteNone: string; + }; + what: { kicker: string; h2: string; facts: { h: string; p: string }[] }; + shot1: { kicker: string; h2: string; lead: string; body: string; caption: string }; + ai: { + kicker: string; + h2: string; + lead: string; + body: string; + caption: string; + builderTitle: string; + builderFine: string; + presetLabel: string; + tasksLabel: string; + tasks: { id: string; name: string; hint: string }[]; + formatLabel: string; + orientationLabel: string; + extLabel: string; + resultLabel: string; + resultKeep: string; + recipeLabel: string; + examplesLabel: string; + presets: { name: string; tasks: string[]; format: string; orientation: 'portrait' | 'landscape'; ext?: string; note: string }[]; + honest: string; + }; + lang: { kicker: string; h2: string; lead: string; body: string; caption: string }; + modules: { + kicker: string; h2: string; lead: string; off: string; + rows: { id: string; title: string; what: string; need: string; core?: boolean }[]; + envComment1: string; envComment2: string; envComment3: string; + }; + install: { kicker: string; h2: string; p1: string; p2: string; cta1: string; cta2: string; comment1: string; comment2: string; stack: string }; + privacy: { kicker: string; h2: string; lead: string; body: string }; + footer: { fine: string }; +} + +const TASKS_EN = [ + { id: 'clean', name: 'Clean up', hint: 'Frame, wall and shop interface removed.' }, + { id: 'cutout', name: 'Cut out', hint: 'Subject only, background transparent.' }, + { id: 'format', name: 'Format', hint: 'Brought to an exact size.' }, + { id: 'contour', name: 'Contour', hint: 'White sticker edge. Needs Cut out.' }, +]; + +const TASKS_DE = [ + { id: 'clean', name: 'Bereinigen', hint: 'Rahmen, Wand und Shop-Oberfläche weg.' }, + { id: 'cutout', name: 'Freistellen', hint: 'Nur das Motiv, Hintergrund transparent.' }, + { id: 'format', name: 'Format', hint: 'Auf ein exaktes Maß gebracht.' }, + { id: 'contour', name: 'Kontur', hint: 'Weißer Stickerrand. Braucht Freistellen.' }, +]; + +/** The examples that ship as seeded recipes, plus two the page adds for range. */ +const PRESETS_EN = [ + { name: 'Clean up only', tasks: ['clean'], format: 'keep', orientation: 'landscape' as const, + note: 'A marketplace screenshot with the frame, the wall and the shop chrome taken out. Size untouched.' }, + { name: 'Poster 30 × 40', tasks: ['clean', 'format'], format: '30x40', orientation: 'portrait' as const, + note: 'Cleaned and brought to poster size — 3543 × 4724 px at 300 dpi, ready for the print studio.' }, + { name: 'Cut out, transparent PNG', tasks: ['clean', 'cutout'], format: 'keep', orientation: 'landscape' as const, ext: 'png', + note: 'Subject free of its background. PNG, because JPG has no transparency.' }, + { name: 'Sticker 5 cm', tasks: ['clean', 'cutout', 'format', 'contour'], format: 'sticker', orientation: 'landscape' as const, + note: 'Cut out, squared off and given a 3 mm white edge, so a cutting machine has something to follow.' }, + { name: 'Square 30 × 30 for social', tasks: ['clean', 'format'], format: '30x30', orientation: 'landscape' as const, + note: 'One source, one square, no guesswork about where the crop lands.' }, + { name: 'DIN A3 for the wall', tasks: ['clean', 'format'], format: 'A3', orientation: 'portrait' as const, + note: 'The same picture at 29.7 × 42 cm. Change one line of the preset and it is A2.' }, +]; + +const PRESETS_DE = [ + { name: 'Nur bereinigen', tasks: ['clean'], format: 'keep', orientation: 'landscape' as const, + note: 'Ein Marktplatz-Screenshot ohne Rahmen, Wand und Shop-Oberfläche. Maß bleibt, wie es war.' }, + { name: 'Poster 30 × 40', tasks: ['clean', 'format'], format: '30x40', orientation: 'portrait' as const, + note: 'Bereinigt und auf Postermaß gebracht — 3543 × 4724 px bei 300 dpi, fertig fürs Druckstudio.' }, + { name: 'Freistellen, transparentes PNG', tasks: ['clean', 'cutout'], format: 'keep', orientation: 'landscape' as const, ext: 'png', + note: 'Motiv ohne Hintergrund. PNG, weil JPG keine Transparenz kann.' }, + { name: 'Sticker 5 cm', tasks: ['clean', 'cutout', 'format', 'contour'], format: 'sticker', orientation: 'landscape' as const, + note: 'Freigestellt, quadratisch gesetzt und mit 3 mm weißem Rand, damit der Schneideplotter etwas zum Folgen hat.' }, + { name: 'Quadrat 30 × 30 für Social', tasks: ['clean', 'format'], format: '30x30', orientation: 'landscape' as const, + note: 'Eine Quelle, ein Quadrat, kein Raten, wo der Beschnitt landet.' }, + { name: 'DIN A3 für die Wand', tasks: ['clean', 'format'], format: 'A3', orientation: 'portrait' as const, + note: 'Dasselbe Bild auf 29,7 × 42 cm. Eine Zeile im Preset ändern und es ist A2.' }, +]; + +const MODULES_EN = [ + { id: 'print', title: 'Print studio', core: true, + what: 'Exact physical sizes, sheet layout with crop marks, bleed, tiling, 1:1 PDF.', need: 'Nothing. Always on.' }, + { id: 'ai', title: 'Image generation', + what: 'Clean up a screenshot, convert a photo, combine several, generate from text.', need: 'A key for an images API. Paid per image.' }, + { id: 'delivery', title: 'Delivery', + what: 'Push finished files to an SFTP or FTPS server, plus extra targets per folder.', need: 'A server you already have.' }, + { id: 'mirror', title: 'Backup mirror', + what: 'A second copy of every result, filed by month.', need: 'A second SFTP/FTPS target.' }, + { id: 'share', title: 'Share links', + what: 'Public links that expire, can be revoked, can carry a passphrase, and ZIP up a whole set.', need: 'A publicly reachable address.' }, + { id: 'mail', title: 'Email', + what: 'Password reset, job notices, sending share links.', need: 'Your own SMTP mailbox.' }, + { id: 'telegram', title: 'Telegram bot', + what: 'The whole tool from a chat window instead of a browser.', need: 'A bot token from BotFather.' }, +]; + +const MODULES_DE = [ + { id: 'print', title: 'Druckstudio', core: true, + what: 'Exakte physische Maße, Bogen mit Schnittmarken, Beschnittzugabe, Kachelung, 1:1-PDF.', need: 'Nichts. Immer an.' }, + { id: 'ai', title: 'Bildgenerierung', + what: 'Screenshot bereinigen, Foto umwandeln, mehrere kombinieren, aus Text neu erzeugen.', need: 'Ein Schlüssel für eine Bild-API. Kostet je Bild.' }, + { id: 'delivery', title: 'Auslieferung', + what: 'Fertige Dateien auf einen SFTP- oder FTPS-Server schieben, mit Zusatzzielen je Ordner.', need: 'Einen Server, den du schon hast.' }, + { id: 'mirror', title: 'Sicherungsspiegel', + what: 'Eine zweite Kopie jedes Ergebnisses, nach Monat abgelegt.', need: 'Ein zweites SFTP-/FTPS-Ziel.' }, + { id: 'share', title: 'Teilen-Links', + what: 'Öffentliche Links, die ablaufen, widerrufbar sind, ein Zugangswort tragen können und eine ganze Auswahl als ZIP packen.', need: 'Eine öffentlich erreichbare Adresse.' }, + { id: 'mail', title: 'E-Mail', + what: 'Passwort zurücksetzen, Auftragshinweise, Teilen-Links verschicken.', need: 'Ein eigenes Postfach.' }, + { id: 'telegram', title: 'Telegram-Bot', + what: 'Das ganze Werkzeug aus einem Chatfenster statt aus dem Browser.', need: 'Einen Bot-Token von BotFather.' }, +]; + +export const EN: Copy = { + htmlLang: 'en', + otherHref: '/de/', + otherLabel: 'DE', + title: 'Klarbild — print pictures at the size you actually asked for', + description: 'Self-hosted print studio. Put pictures on paper at exact physical sizes, with crop marks, bleed and tiling, and a PDF page that measures what you asked for. Open source, AGPL-3.0. Image generation and delivery are optional modules.', + nav: { try: 'Try it', ai: 'Image generation', modules: 'Modules', install: 'Install', source: 'Source' }, + hero: { + kicker: 'Self-hosted · AGPL-3.0', + h1a: 'Print pictures at the size you ', + h1accent: 'actually asked for', + lead: 'Your printer driver has a checkbox called “fit to page”. Tick it and a 35 × 45 mm passport photo comes out 34 × 44. Untick it and you are guessing. Klarbild lays the sheet out in millimetres and hands you a PDF that measures what it says.', + ctaPrimary: 'Lay out a sheet', + ctaSecondary: 'Read the source', + stats: [ + { n: '210.00', t: '× 297.00 mm on the page when you ask for A4 — measured, not assumed' }, + { n: '0', t: 'outbound requests from the print studio. It is arithmetic, sharp and pdf-lib' }, + { n: '124', t: 'tests over the layout engine, the naming scheme and the path checks' }, + { n: '1', t: 'container and a database for the default install' }, + ], + }, + pg: { + title: 'Lay out a sheet', + fine: "Runs the application's own layout code, here in your browser. Nothing is uploaded.", + paper: 'Paper', orientation: 'Sheet orientation', portrait: 'Portrait', landscape: 'Landscape', + size: 'Picture size', count: 'How many', marks: 'Cutting aid', + marksNone: 'None', marksCorner: 'Corner', marksGrid: 'Lines', + bleed: 'Bleed', margin: 'Printer margin', rotate: 'Rotate pictures to save space', + outFit: 'Fit', outSheets: 'Sheets', outCell: 'Cell', outPaper: 'Paper', outGap: 'Gap', + download: 'Download this sheet as a PDF', downloadBusy: 'Building the PDF …', + footnote: 'The demo draws outlines instead of photographs — the real thing puts your pictures in these boxes at the resolution you choose. Measure the PDF: the page and every box are exactly the millimetres shown above.', + noteAllFit: 'All {n} fit on one sheet. Nothing is scaled.', + noteAllFitMulti: 'All {n} fit across {pages} sheets. Nothing is scaled.', + notePartial: '{placed} of {n} fit on {pages} sheet(s).', + noteNone: '{size} does not fit on this sheet at 100 %. In the application this is where you choose overflow or tiling.', + }, + what: { + kicker: 'The print studio', + h2: "Everything a photo shop's software does, minus the photo shop.", + facts: [ + { h: '86 image sizes', p: 'In ten groups — passport photo, small prints, photo formats, US inches, instant-camera, poster and frame sizes, squares, DIN, cards, plain aspect ratios. Or type your own: 25x35, 13x18, 10x7.5.' }, + { h: '19 paper formats', p: 'A6 to A1 including A3+, photo paper from 9 × 13 to 20 × 30 cm, US Letter and Legal — or a custom sheet.' }, + { h: 'Crop marks', p: 'Corner marks at 0.25 pt outside the trim, or continuous lines when every cell is the same size. Bleed 0 to 10 mm.' }, + { h: 'Oversize, handled', p: 'A 20 × 30 print on A4 is not an error. Fit tells you it will not go; overflow centres it over the whole sheet and quantifies the loss first; tile spreads it over several sheets with a glue flap and a page number.' }, + { h: 'Crop or letterbox', p: 'When a picture does not match the target ratio you choose per picture — crop with a zoom-and-pan preview, or a border in a colour you pick. Nothing is ever stretched.' }, + { h: 'One engine', p: 'The browser preview and the server-side PDF run the same arithmetic. That file is printlayout.ts, it has no dependencies, and it has its own tests.' }, + ], + }, + shot1: { + kicker: 'In the application', + h2: 'Eight passport photos, one sheet, one cut line each.', + lead: 'Pick the size, say how many, and the sheet fills itself. Equal sizes snap to an exact grid; mixed sizes go through a packer. Every cell carries its measurement as a caption, and the caption gets out of the way when there is no room at that edge.', + body: 'The same picture may appear twice at two different sizes. Layouts you repeat become presets. The last hundred runs are kept as instructions rather than as PDFs — one to three kilobytes each instead of eighty megabytes — so “print that again” costs nothing.', + caption: 'The print studio. Print-only install — no library, no queue, no model.', + }, + ai: { + kicker: 'Optional module: ai', + h2: 'And if you do want a model, it is one switch and your own key.', + lead: 'Image generation is a module. It is off until you turn it on, it needs a key you bring yourself, and it costs money per image — which is exactly why it is not the default. With it on, the studio gets four tasks and every combination of them can be saved as a preset.', + body: 'Requests go to {base}/images in the OpenAI image shape. The default base is OpenRouter — one key, many models, and the model list fills itself in. Point IMAGE_API_BASE_URL at a LiteLLM gateway, a company proxy or a server of your own and Klarbild talks to that instead. Either way the pictures go to exactly one endpoint, and you chose which.', + caption: 'The studio with the module on: three modes, four tasks, saved presets, exact output size.', + builderTitle: 'Build a preset', + builderFine: 'Not a generator — this composes the recipe and shows what it would run. No key, no request, no picture leaves this page.', + presetLabel: 'Start from an example', + tasksLabel: 'What should happen?', + tasks: TASKS_EN, + formatLabel: 'Output size', + orientationLabel: 'Orientation', + extLabel: 'File format', + resultLabel: 'Result', + resultKeep: 'Original size kept', + recipeLabel: 'The recipe this saves', + examplesLabel: 'What it is for', + presets: PRESETS_EN, + honest: 'The demo stops at the recipe on purpose. Generating here would mean a key on a public page and a bill for whoever is curious — and it would show you a picture from a model rather than anything about Klarbild. What Klarbild does is the part above: the tasks, the exact target size, and the preset you save once and reuse.', + }, + lang: { + kicker: 'Two languages', + h2: 'English by default, German all the way through.', + lead: 'Not a half-translated interface: 1,067 entries, covering every translatable string in the source. The English sentence is the translation key, so a missing entry falls back to readable English rather than to print.sheet.title.', + body: 'One environment variable sets the default; visitors switch with the button in the corner and the choice sticks. Adding a third language means copying one JSON file and translating its values.', + caption: 'The same screen, ?lang=de.', + }, + modules: { + kicker: 'Modules', + h2: 'You decide what this install is.', + lead: 'Klarbild is one codebase but not one product. The print studio is the core. Everything that needs an account somewhere else is a module, and every module is off until you switch it on.', + off: 'A module that is off is off: no navigation entry, no settings card, the page redirects, and its API routes answer 404 rather than 403 — a disabled instance does not advertise what it could have done.', + rows: MODULES_EN, + envComment1: '# the default: the print studio and nothing else', + envComment2: '# pick what you want', + envComment3: '# everything', + }, + install: { + kicker: 'Install', + h2: 'Four lines, then a password in the log.', + p1: 'The default compose file runs the application and a PostgreSQL, with files on a volume. No object store, no API key, no account anywhere. A second compose file adds MinIO and turns every module on, for people who want that.', + p2: 'There are no built-in accounts. The first boot creates one administrator — from ADMIN_USERNAME and ADMIN_PASSWORD if you set them, and otherwise with a generated password printed to the log exactly once.', + cta1: 'Source on GitHub', cta2: 'Releases', + comment1: '# four values at the top; the file says which', + comment2: '# your admin password, printed once', + stack: 'Astro on Node, PostgreSQL, sharp and pdf-lib. About 13,700 lines across 117 files. Sixteen forward-only migrations that run themselves on boot. Type check, tests and a secret scan run in CI on every push.', + }, + privacy: { + kicker: 'Why self-hosted', + h2: 'These are passport photos and family pictures.', + lead: 'The print studio never makes an outbound request at all. With the image module on, only what you hand the model leaves the building, and the key is yours.', + body: 'Share links are built to be careful rather than convenient: they expire after thirty days by default, can be revoked, can carry a passphrase, and are noindex. Access hangs on the link rather than on the picture, so guessing an image id returns a 404. The view counter records when and with what, never who — the address is hashed with a server secret and the link id, one row per visitor per hour, deleted after ninety days.', + }, + footer: { fine: 'A demo page. The layout engine is real; the pictures are outlines. Built by' }, +}; + +export const DE: Copy = { + htmlLang: 'de', + otherHref: '/', + otherLabel: 'EN', + title: 'Klarbild — Bilder drucken in genau dem Maß, das du wolltest', + description: 'Selbst gehostetes Druckstudio. Bilder in exakten physischen Maßen aufs Papier bringen — mit Schnittmarken, Beschnittzugabe und Kachelung, und einer PDF-Seite, die misst, was draufsteht. Open Source, AGPL-3.0. Bildgenerierung und Auslieferung sind abschaltbare Module.', + nav: { try: 'Ausprobieren', ai: 'Bildgenerierung', modules: 'Module', install: 'Installieren', source: 'Quellcode' }, + hero: { + kicker: 'Selbst gehostet · AGPL-3.0', + h1a: 'Bilder drucken in genau dem Maß, ', + h1accent: 'das du wolltest', + lead: 'Im Druckertreiber gibt es ein Häkchen namens „an Seite anpassen". Mit Häkchen kommt ein 35 × 45 mm Passbild als 34 × 44 heraus. Ohne Häkchen rätst du. Klarbild rechnet den Bogen in Millimetern und gibt dir ein PDF, das misst, was draufsteht.', + ctaPrimary: 'Bogen setzen', + ctaSecondary: 'Quellcode lesen', + stats: [ + { n: '210,00', t: '× 297,00 mm auf der Seite, wenn du A4 sagst — nachgemessen, nicht angenommen' }, + { n: '0', t: 'Anfragen nach außen aus dem Druckstudio. Es ist Rechnen, sharp und pdf-lib' }, + { n: '124', t: 'Tests über Layout-Engine, Namensschema und Pfadprüfungen' }, + { n: '1', t: 'Container und eine Datenbank für die Standardinstallation' }, + ], + }, + pg: { + title: 'Bogen setzen', + fine: 'Rechnet mit dem Layout-Code der Anwendung, hier in deinem Browser. Nichts wird hochgeladen.', + paper: 'Papier', orientation: 'Bogenlage', portrait: 'Hochformat', landscape: 'Querformat', + size: 'Bildmaß', count: 'Wie viele', marks: 'Schnitthilfe', + marksNone: 'Keine', marksCorner: 'Eckmarken', marksGrid: 'Linien', + bleed: 'Beschnittzugabe', margin: 'Druckerrand', rotate: 'Bilder drehen, um Platz zu sparen', + outFit: 'Passen', outSheets: 'Bögen', outCell: 'Zelle', outPaper: 'Papier', outGap: 'Abstand', + download: 'Diesen Bogen als PDF laden', downloadBusy: 'PDF wird gebaut …', + footnote: 'Die Demo zeichnet Umrisse statt Fotos — im Original stehen deine Bilder in diesen Kästen, in der Auflösung, die du wählst. Miss das PDF nach: Seite und jeder Kasten sind genau die Millimeter von oben.', + noteAllFit: 'Alle {n} passen auf einen Bogen. Nichts wird skaliert.', + noteAllFitMulti: 'Alle {n} passen auf {pages} Bögen. Nichts wird skaliert.', + notePartial: '{placed} von {n} passen auf {pages} Bogen.', + noteNone: '{size} passt bei 100 % nicht auf diesen Bogen. In der Anwendung wählst du hier Überstehen oder Kacheln.', + }, + what: { + kicker: 'Das Druckstudio', + h2: 'Alles, was die Software im Fotoladen kann, ohne den Fotoladen.', + facts: [ + { h: '86 Bildmaße', p: 'In zehn Gruppen — Passbild, kleine Abzüge, Fotoformate, US-Zoll, Sofortbild, Poster- und Rahmenmaße, Quadrate, DIN, Karten, reine Seitenverhältnisse. Oder selbst tippen: 25x35, 13x18, 10x7,5.' }, + { h: '19 Papierformate', p: 'A6 bis A1 inklusive A3+, Fotopapier von 9 × 13 bis 20 × 30 cm, US Letter und Legal — oder ein freies Maß.' }, + { h: 'Schnittmarken', p: 'Eckmarken mit 0,25 pt außerhalb des Endformats, oder durchgehende Linien, wenn alle Zellen gleich groß sind. Beschnittzugabe 0 bis 10 mm.' }, + { h: 'Größer als der Bogen', p: 'Ein 20 × 30-Abzug auf A4 ist kein Fehler. „Fit" sagt dir, dass es nicht geht; „Überstehen" setzt ihn mittig aufs ganze Blatt und beziffert den Verlust vorher; „Kacheln" verteilt ihn auf mehrere Blätter, mit Klebefalz und Blattnummer.' }, + { h: 'Zuschneiden oder Rand lassen', p: 'Passt ein Bild nicht zum Zielverhältnis, entscheidest du je Bild — zuschneiden mit Zoom-und-Schieben-Vorschau, oder ein Rand in einer Farbe deiner Wahl. Verzerrt wird nie.' }, + { h: 'Ein Rechenkern', p: 'Browser-Vorschau und Server-PDF rechnen dasselbe. Die Datei heißt printlayout.ts, hat keine Abhängigkeiten und eigene Tests.' }, + ], + }, + shot1: { + kicker: 'In der Anwendung', + h2: 'Acht Passbilder, ein Bogen, je eine Schnittlinie.', + lead: 'Maß wählen, Anzahl sagen, der Bogen füllt sich selbst. Gleiche Größen rasten in ein exaktes Raster, gemischte laufen durch einen Packer. Jede Zelle trägt ihr Maß als Beschriftung — und die verschwindet von selbst, wenn an der Kante kein Platz ist.', + body: 'Dasselbe Bild darf zweimal in zwei Maßen vorkommen. Layouts, die sich wiederholen, werden Vorlagen. Die letzten hundert Läufe liegen als Anleitung statt als PDF — ein bis drei Kilobyte statt achtzig Megabyte —, damit „nochmal drucken" nichts kostet.', + caption: 'Das Druckstudio. Reine Druck-Installation — keine Bibliothek, keine Warteschlange, kein Modell.', + }, + ai: { + kicker: 'Abschaltbares Modul: ai', + h2: 'Und wenn du ein Modell willst, ist es ein Schalter und dein eigener Schlüssel.', + lead: 'Bildgenerierung ist ein Modul. Es ist aus, bis du es anschaltest, es braucht einen Schlüssel, den du selbst mitbringst, und es kostet Geld je Bild — genau deshalb ist es nicht der Standard. Ist es an, bekommt das Studio vier Aufgaben, und jede Kombination davon lässt sich als Vorlage speichern.', + body: 'Die Anfragen gehen an {base}/images im OpenAI-Bildformat. Voreingestellt ist OpenRouter — ein Schlüssel, viele Modelle, und die Modellliste füllt sich selbst. Zeigt IMAGE_API_BASE_URL auf ein LiteLLM-Gateway, einen Firmen-Proxy oder einen eigenen Server, redet Klarbild mit dem. So oder so gehen die Bilder an genau einen Endpunkt, und den hast du ausgesucht.', + caption: 'Das Studio mit eingeschaltetem Modul: drei Modi, vier Aufgaben, gespeicherte Vorlagen, exaktes Zielmaß.', + builderTitle: 'Eine Vorlage bauen', + builderFine: 'Kein Generator — hier entsteht das Rezept, und es zeigt, was es ausführen würde. Kein Schlüssel, keine Anfrage, kein Bild verlässt diese Seite.', + presetLabel: 'Von einem Beispiel ausgehen', + tasksLabel: 'Was soll passieren?', + tasks: TASKS_DE, + formatLabel: 'Zielmaß', + orientationLabel: 'Ausrichtung', + extLabel: 'Dateiformat', + resultLabel: 'Ergebnis', + resultKeep: 'Originalmaß bleibt', + recipeLabel: 'Das Rezept, das dabei gespeichert wird', + examplesLabel: 'Wofür das gut ist', + presets: PRESETS_DE, + honest: 'Die Demo hört beim Rezept auf, und zwar mit Absicht. Hier zu generieren hieße: ein Schlüssel auf einer öffentlichen Seite und eine Rechnung für jeden, der neugierig ist — und es würde dir ein Bild aus einem Modell zeigen statt irgendetwas über Klarbild. Was Klarbild macht, ist der Teil darüber: die Aufgaben, das exakte Zielmaß und die Vorlage, die du einmal speicherst und dann wiederverwendest.', + }, + lang: { + kicker: 'Zwei Sprachen', + h2: 'Englisch als Standard, Deutsch vollständig daneben.', + lead: 'Keine halb übersetzte Oberfläche: 1.067 Einträge, jeder übersetzbare String im Quelltext ist abgedeckt. Der englische Satz ist der Schlüssel — fehlt ein Eintrag, steht da lesbares Englisch und nicht print.sheet.title.', + body: 'Eine Umgebungsvariable setzt den Standard; Besucher schalten mit dem Knopf in der Ecke um, und die Wahl bleibt. Eine dritte Sprache heißt: eine JSON-Datei kopieren und ihre Werte übersetzen.', + caption: 'Derselbe Bildschirm, ?lang=de.', + }, + modules: { + kicker: 'Module', + h2: 'Du entscheidest, was diese Installation ist.', + lead: 'Klarbild ist eine Codebasis, aber nicht ein Produkt. Das Druckstudio ist der Kern. Alles, was ein Konto woanders braucht, ist ein Modul — und jedes Modul ist aus, bis du es anschaltest.', + off: 'Ein abgeschaltetes Modul ist wirklich aus: kein Navigationseintrag, keine Einstellungskarte, die Seite leitet um, und seine API-Routen antworten 404 statt 403 — eine abgeschaltete Installation verrät nicht, was sie könnte.', + rows: MODULES_DE, + envComment1: '# der Standard: das Druckstudio und sonst nichts', + envComment2: '# nimm, was du willst', + envComment3: '# alles', + }, + install: { + kicker: 'Installieren', + h2: 'Vier Zeilen, dann steht ein Passwort im Log.', + p1: 'Die Standard-Compose-Datei startet die Anwendung und ein PostgreSQL, Dateien liegen auf einem Volume. Kein Objektspeicher, kein API-Schlüssel, kein Konto irgendwo. Eine zweite Compose-Datei nimmt MinIO dazu und schaltet alle Module an — für die, die das wollen.', + p2: 'Es gibt keine eingebauten Konten. Der erste Start legt genau einen Administrator an — aus ADMIN_USERNAME und ADMIN_PASSWORD, wenn du sie setzt, sonst mit einem erzeugten Passwort, das genau einmal ins Log geschrieben wird.', + cta1: 'Quellcode auf GitHub', cta2: 'Releases', + comment1: '# vier Werte ganz oben; die Datei sagt, welche', + comment2: '# dein Admin-Passwort, einmalig ausgegeben', + stack: 'Astro auf Node, PostgreSQL, sharp und pdf-lib. Rund 13.700 Zeilen in 117 Dateien. Sechzehn vorwärts-nur-Migrationen, die beim Start selbst laufen. Typprüfung, Tests und ein Secret-Scan laufen in der CI bei jedem Push.', + }, + privacy: { + kicker: 'Warum selbst gehostet', + h2: 'Das sind Passbilder und Familienfotos.', + lead: 'Das Druckstudio macht überhaupt keine Anfrage nach außen. Mit eingeschaltetem Bildmodul verlässt nur das Haus, was du dem Modell gibst — und der Schlüssel gehört dir.', + body: 'Teilen-Links sind auf Vorsicht gebaut, nicht auf Bequemlichkeit: Sie laufen standardmäßig nach dreißig Tagen ab, lassen sich widerrufen, können ein Zugangswort tragen und sind noindex. Der Zugriff hängt am Link, nicht am Bild — eine geratene Bildkennung ergibt 404. Der Zähler hält fest, wann und womit, nie wer: Die Adresse wird mit einem Server-Geheimnis und der Link-Kennung gehasht, eine Zeile je Besucher und Stunde, gelöscht nach neunzig Tagen.', + }, + footer: { fine: 'Eine Demoseite. Der Layout-Kern ist echt, die Bilder sind Umrisse. Gebaut von' }, +}; + +export const COPY: Record = { en: EN, de: DE }; diff --git a/src/lib/playground.ts b/src/lib/playground.ts index 5b1b070..0272134 100644 --- a/src/lib/playground.ts +++ b/src/lib/playground.ts @@ -14,6 +14,11 @@ import { layout, cutMarks, effectiveGap, recommendedGap, type PlaceSpec, type SheetSpec, type MarkMode } from '../engine/printlayout'; import { PAPERS, PHOTO_SIZES, labelMm } from '../engine/paper'; +/** German writes 29,7 cm where English writes 29.7 cm. Only the separator differs. */ +function localiseNumbers(text: string, lang: string): string { + return lang === 'de' ? text.replace(/(\d),(?=\d)/g, '$1\u2009').replace(/(\d)\.(?=\d)/g, '$1,') : text; +} + const MM_PT = 72 / 25.4; type State = { @@ -174,7 +179,17 @@ async function buildPdf(): Promise { /* ---------------------------------------------------------------------- wire */ -export function mountPlayground(root: HTMLElement) { +interface PgLabels { + downloadBusy: string; + noteAllFit: string; + noteAllFitMulti: string; + notePartial: string; + noteNone: string; +} + +export function mountPlayground(root: HTMLElement, labels: PgLabels) { + const lang = document.documentElement.lang || 'en'; + const mm = (w: number, h: number) => localiseNumbers(labelMm(w, h), lang); const svg = root.querySelector('#sheet')!; const out = { fits: root.querySelector('[data-out=fits]')!, @@ -193,7 +208,7 @@ export function mountPlayground(root: HTMLElement) { for (const p of PAPERS.filter((x) => x.group === group)) { const o = document.createElement('option'); o.value = p.id; - o.textContent = `${p.label} · ${labelMm(p.w, p.h)}`; + o.textContent = `${p.label} · ${mm(p.w, p.h)}`; og.appendChild(o); } paperSel.appendChild(og); @@ -222,18 +237,24 @@ export function mountPlayground(root: HTMLElement) { out.fits.textContent = String(placed); out.pages.textContent = String(result.pages.length); - out.cell.textContent = labelMm(s.w, s.h); - out.paper.textContent = labelMm(sheet.wMm, sheet.hMm); - out.gap.textContent = `${effectiveGap(sheet).toFixed(1)} mm`; + out.cell.textContent = mm(s.w, s.h); + out.paper.textContent = mm(sheet.wMm, sheet.hMm); + out.gap.textContent = localiseNumbers(`${effectiveGap(sheet).toFixed(1)} mm`, lang); + + const fill = (t: string) => t + .replace('{n}', String(wanted)) + .replace('{placed}', String(placed)) + .replace('{pages}', String(result.pages.length)) + .replace('{size}', s.label); if (placed === 0) { - out.note.textContent = `${s.label} does not fit on this sheet at 100 %. In the application this is where you choose overflow or tiling.`; + out.note.textContent = fill(labels.noteNone); out.note.dataset.tone = 'warn'; } else if (placed < wanted) { - out.note.textContent = `${placed} of ${wanted} fit on ${result.pages.length} sheet${result.pages.length > 1 ? 's' : ''}.`; + out.note.textContent = fill(labels.notePartial); out.note.dataset.tone = 'warn'; } else { - out.note.textContent = `All ${placed} fit${result.pages.length > 1 ? ` across ${result.pages.length} sheets` : ' on one sheet'}. Nothing is scaled.`; + out.note.textContent = fill(result.pages.length > 1 ? labels.noteAllFitMulti : labels.noteAllFit); out.note.dataset.tone = 'ok'; } } @@ -269,7 +290,7 @@ export function mountPlayground(root: HTMLElement) { dl.addEventListener('click', async () => { const label = dl.textContent; dl.disabled = true; - dl.textContent = 'Building the PDF …'; + dl.textContent = labels.downloadBusy; try { const blob = await buildPdf(); const url = URL.createObjectURL(blob); diff --git a/src/lib/recipe.ts b/src/lib/recipe.ts new file mode 100644 index 0000000..4774565 --- /dev/null +++ b/src/lib/recipe.ts @@ -0,0 +1,148 @@ +/** + * The preset builder. + * + * This composes a Klarbild recipe and shows what it would run — it does not + * run anything. Generating on a public page would mean putting an API key on + * that page and paying for every curious visitor, and the picture it produced + * would tell you about the model rather than about Klarbild. What Klarbild + * decides is the part this does show: which tasks, which exact target size, + * and the preset you save once and reuse. + * + * The target pixels come from `engine/format.ts`, copied verbatim from the + * application, so the numbers here are the numbers it would produce. + */ + +import { resolveDimensions } from '../engine/format'; + +export interface PresetExample { + name: string; + tasks: string[]; + format: string; + orientation: 'portrait' | 'landscape'; + ext?: string; + note: string; +} + +interface Labels { + resultKeep: string; + contourNeedsCutout: string; + dpiLine: string; // "{w} × {h} px at {dpi} dpi" +} + +const ALL_TASKS = ['clean', 'cutout', 'format', 'contour']; + +export function mountRecipe(root: HTMLElement, presets: PresetExample[], labels: Labels) { + const state = { + tasks: new Set(presets[0]?.tasks ?? ['clean']), + format: presets[0]?.format ?? 'keep', + orientation: (presets[0]?.orientation ?? 'landscape') as 'portrait' | 'landscape', + ext: presets[0]?.ext ?? '', + name: presets[0]?.name ?? '', + note: presets[0]?.note ?? '', + }; + + const out = { + result: root.querySelector('[data-r=result]')!, + note: root.querySelector('[data-r=note]')!, + recipe: root.querySelector('[data-r=recipe]')!, + }; + + function dims() { + if (state.format === 'keep') return null; + const customCm: [number, number] | undefined = state.format === 'sticker' ? [5, 5] : undefined; + try { + return resolveDimensions({ format: state.format, orientation: state.orientation, dpi: 300, customCm }); + } catch { + return null; + } + } + + function render() { + // Contour without Cut out is refused by the application, so the builder + // refuses it too rather than composing a recipe that would be rejected. + if (state.tasks.has('contour') && !state.tasks.has('cutout')) state.tasks.delete('contour'); + + for (const b of root.querySelectorAll('button[data-task]')) { + const id = b.dataset.task!; + b.setAttribute('aria-pressed', String(state.tasks.has(id))); + b.disabled = id === 'contour' && !state.tasks.has('cutout'); + } + for (const b of root.querySelectorAll('button[data-orient]')) { + b.setAttribute('aria-pressed', String(b.dataset.orient === state.orientation)); + } + for (const b of root.querySelectorAll('button[data-ext]')) { + b.setAttribute('aria-pressed', String((b.dataset.ext || '') === state.ext)); + } + const sel = root.querySelector('#recipe-format'); + if (sel && sel.value !== state.format) sel.value = state.format; + + const d = dims(); + out.result.textContent = d + ? labels.dpiLine.replace('{w}', String(d.w)).replace('{h}', String(d.h)).replace('{dpi}', '300') + : labels.resultKeep; + + out.note.textContent = state.note; + + const recipe: Record = { + name: state.name || '…', + tasks: ALL_TASKS.filter((t) => state.tasks.has(t)), + output_format: state.format, + orientation: state.orientation, + crop_mode: 'crop', + dpi: 300, + }; + if (state.ext) recipe.output_ext = state.ext; + if (state.tasks.has('contour')) recipe.contour_mm = 3; + out.recipe.textContent = JSON.stringify(recipe, null, 2); + } + + root.addEventListener('click', (e) => { + const el = e.target as HTMLElement; + const task = el.closest('button[data-task]'); + if (task && !task.disabled) { + const id = task.dataset.task!; + state.tasks.has(id) ? state.tasks.delete(id) : state.tasks.add(id); + state.name = ''; + state.note = ''; + return render(); + } + const orient = el.closest('button[data-orient]'); + if (orient) { + state.orientation = orient.dataset.orient as 'portrait' | 'landscape'; + return render(); + } + const ext = el.closest('button[data-ext]'); + if (ext) { + state.ext = ext.dataset.ext || ''; + return render(); + } + const preset = el.closest('button[data-preset]'); + if (preset) { + const p = presets[Number(preset.dataset.preset)]; + state.tasks = new Set(p.tasks); + state.format = p.format; + state.orientation = p.orientation; + state.ext = p.ext ?? ''; + state.name = p.name; + state.note = p.note; + for (const sib of root.querySelectorAll('button[data-preset]')) { + sib.setAttribute('aria-pressed', String(sib === preset)); + } + return render(); + } + }); + + root.addEventListener('change', (e) => { + const sel = e.target as HTMLSelectElement; + if (sel.id === 'recipe-format') { + state.format = sel.value; + state.name = ''; + state.note = ''; + render(); + } + }); + + const first = root.querySelector('button[data-preset="0"]'); + first?.setAttribute('aria-pressed', 'true'); + render(); +} diff --git a/src/pages/de/index.astro b/src/pages/de/index.astro new file mode 100644 index 0000000..f9dc249 --- /dev/null +++ b/src/pages/de/index.astro @@ -0,0 +1,5 @@ +--- +import Page from '../../components/Page.astro'; +import { DE } from '../../lib/copy'; +--- + diff --git a/src/pages/index.astro b/src/pages/index.astro index 9a34d8d..48db425 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,363 +1,5 @@ --- -import '@fontsource/space-grotesk/400.css'; -import '@fontsource/space-grotesk/500.css'; -import '@fontsource/space-grotesk/700.css'; -import '@fontsource/space-mono/400.css'; -import '@fontsource/space-mono/700.css'; -import '../styles/tokens.css'; -import '../styles/site.css'; - -const GITHUB = 'https://github.com/tillheidrich/klarbild'; - -const modules = [ - { id: 'print', title: 'Print studio', core: true, - what: 'Exact physical sizes, sheet layout with crop marks, bleed, tiling, 1:1 PDF.', - need: 'Nothing. Always on.' }, - { id: 'ai', title: 'Image generation', - what: 'Clean up a screenshot, convert a photo, combine several, generate from text.', - need: 'An OpenRouter key. Paid per image.' }, - { id: 'delivery', title: 'Delivery', - what: 'Push finished files to an SFTP or FTPS server, plus extra targets per folder.', - need: 'A server you already have.' }, - { id: 'mirror', title: 'Backup mirror', - what: 'A second copy of every result, filed by month.', - need: 'A second SFTP/FTPS target.' }, - { id: 'share', title: 'Share links', - what: 'Public links that expire, can be revoked, can carry a passphrase, and ZIP up a whole set.', - need: 'A publicly reachable address.' }, - { id: 'mail', title: 'Email', - what: 'Password reset, job notices, sending share links.', - need: 'Your own SMTP mailbox.' }, - { id: 'telegram', title: 'Telegram bot', - what: 'The whole tool from a chat window instead of a browser.', - need: 'A bot token from BotFather.' }, -]; - -const facts = [ - { h: '86 image sizes', p: 'In ten groups — passport photo, small prints, photo formats, US inches, instant-camera, poster and frame sizes, squares, DIN, cards, plain aspect ratios. Or type your own: 25x35, 13x18, 10x7.5.' }, - { h: '19 paper formats', p: 'A6 to A1 including A3+, photo paper from 9 × 13 to 20 × 30 cm, US Letter and Legal — or a custom sheet.' }, - { h: 'Crop marks', p: 'Corner marks at 0.25 pt outside the trim, or continuous lines when every cell is the same size. Bleed 0 to 10 mm.' }, - { h: 'Oversize, handled', p: 'A 20 × 30 print on A4 is not an error. Fit tells you it will not go; overflow centres it over the whole sheet and quantifies the loss first; tile spreads it over several sheets with a glue flap and a page number.' }, - { h: 'Crop or letterbox', p: 'When a picture does not match the target ratio you choose per picture — crop with a zoom-and-pan preview, or a border in a colour you pick. Nothing is ever stretched.' }, - { h: 'One engine', p: 'The browser preview and the server-side PDF run the same arithmetic. That file is printlayout.ts, it has no dependencies, and it has its own tests.' }, -]; +import Page from '../components/Page.astro'; +import { EN } from '../lib/copy'; --- - - - - - - - - Klarbild — print pictures at the size you actually asked for - - - - - - - - - - -
- -
- -
-
-
-
- Self-hosted · AGPL-3.0 -

Print pictures at the size you actually asked for.

-

- Your printer driver has a checkbox called “fit to page”. Tick it and a - 35 × 45 mm passport photo comes out 34 × 44. Untick it and you are guessing. - Klarbild lays the sheet out in millimetres and hands you a PDF that measures - what it says. -

- -
- -
-
- - -
-
-
-

Lay out a sheet

-

Runs the application's own layout code, here in your browser. Nothing is uploaded.

-
- -
-
-
- - -
- -
- -
- - -
-
- -
- - -
- -
-
- - -
-
- -
- - - -
-
-
- -
-
0 mm
- -
- -
-
5 mm
- -
- -
- - Rotate pictures to save space -
-
- -
-
- -
- -
-
Fit
–
-
Sheets
–
-
Cell
–
-
Paper
–
-
Gap
–
-
- -

-
-
- -
- -

- The demo draws outlines instead of photographs — the real thing puts your - pictures in these boxes at the resolution you choose. Measure the PDF: the page - and every box are exactly the millimetres shown above. -

-
-
-
- - -
-
- The print studio -

Everything a photo shop's software does, minus the photo shop.

-
- {facts.map((f) => ( -

{f.h}

{f.p}

- ))} -
-
-
- -
-
-
- In the application -

Eight passport photos, one sheet, one cut line each.

-

- Pick the size, say how many, and the sheet fills itself. Equal sizes snap to an - exact grid; mixed sizes go through a packer. Every cell carries its measurement - as a caption, and the caption gets out of the way when there is no room at that edge. -

-

- The same picture may appear twice at two different sizes. Layouts you repeat become - presets. The last hundred runs are kept as instructions rather than as PDFs — - one to three kilobytes each instead of eighty megabytes — so “print that again” costs - nothing. -

-
-
- The Klarbild print studio with eight passport photos laid out on an A4 sheet, each with corner marks -
The print studio. Print-only install — no library, no queue, no model.
-
-
-
- -
-
-
- Two languages -

English by default, German all the way through.

-

- Not a half-translated interface: 1,038 strings, both complete. The English - sentence is the translation key, so a missing entry falls back to readable - English rather than to print.sheet.title. -

-

- One environment variable sets the default; visitors switch with the button in the - corner and the choice sticks. Adding a third language means copying one JSON file - and translating its values. -

-
-
- The same print studio screen rendered in German -
The same screen, ?lang=de.
-
-
-
- - -
-
- Modules -

You decide what this install is.

-

- Klarbild is one codebase but not one product. The print studio is the core. - Everything that needs an account somewhere else is a module, and every module is - off until you switch it on. A module that is off has no navigation entry, no - settings card, and its API routes answer 404 rather than 403 — a disabled instance - does not advertise what it could have done. -

- -
- {modules.map((m) => ( -
- {m.id} -

{m.title} — {m.what}

- {m.need} -
- ))} -
- -
-
# the default: the print studio and nothing else
-KLARBILD_MODULES=print
-
-# pick what you want
-KLARBILD_MODULES=print,ai,share
-
-# everything
-KLARBILD_MODULES=all
-
-
-
- - -
-
-
- Install -

Four lines, then a password in the log.

-

- The default compose file runs the application and a PostgreSQL, with files on a - volume. No object store, no API key, no account anywhere. A second compose file - adds MinIO and turns every module on, for people who want that. -

-

- There are no built-in accounts. The first boot creates one administrator — from - ADMIN_USERNAME and ADMIN_PASSWORD if you set them, and - otherwise with a generated password printed to the log exactly once. -

- -
-
-
git clone {GITHUB}.git
-cd klarbild
-cp .env.example .env    # three secrets, the file says which
-docker compose up -d
-
-docker compose logs app # your admin password, printed once
-

- Astro on Node, PostgreSQL, sharp and pdf-lib. About 13,700 lines across 117 - files. Sixteen forward-only migrations that run themselves on boot. Type check, - tests and a secret scan run in CI on every push. -

-
-
-
- -
-
- Why self-hosted -

These are passport photos and family pictures.

-

- The print studio never makes an outbound request at all. With the AI module on, only - what you hand the model leaves the building, and the key is yours. -

-

- Share links are built to be careful rather than convenient: they expire after thirty - days by default, can be revoked, can carry a passphrase, and are noindex. - Access hangs on the link rather than on the picture, so guessing an image id returns - a 404. The view counter records when and with what, never who — - the address is hashed with a server secret and the link id, one row per visitor per - hour, deleted after ninety days. -

-
-
-
- - - - - - + diff --git a/src/styles/site.css b/src/styles/site.css index 6bbd7c5..c8f7bef 100644 --- a/src/styles/site.css +++ b/src/styles/site.css @@ -202,3 +202,46 @@ footer a { color: var(--ink-soft); text-decoration: none; font-size: 0.88rem; } footer a:hover { color: var(--accent); } footer .fine { font-size: 0.8rem; color: var(--ink-soft); margin-left: auto; } @media (max-width: 620px) { footer .fine { margin-left: 0; width: 100%; } } + +/* ------------------------------------------------- language switch & nav bits */ + +.top nav a.langswitch { font-family: var(--font-mono); font-size: 0.72rem; letter-spacing: .08em; + border: 1px solid var(--line); padding: 6px 9px; border-radius: 999px; line-height: 1; } +.top nav a.langswitch:hover { color: var(--accent); border-color: var(--accent); background: transparent; } +@media (max-width: 980px) { .top nav a.hide-m { display: none; } } + +/* ------------------------------------------------------------ preset builder */ + +.recipe { margin-top: clamp(28px, 4vw, 48px); } +.recipe-body { display: grid; grid-template-columns: minmax(0, 1fr); } +@media (min-width: 900px) { .recipe-body { grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr); } } +.recipe-controls { padding: 20px 18px; display: grid; gap: 18px; align-content: start; } +@media (min-width: 900px) { .recipe-controls { border-right: 1px solid var(--line); } } +.recipe-out { padding: 20px 18px; display: grid; gap: 14px; align-content: start; + background: repeating-linear-gradient(45deg, transparent 0 11px, oklch(21% 0.01 95 / 0.015) 11px 22px); } + +.chips { display: flex; flex-wrap: wrap; gap: 6px; } +.chips button { font-family: inherit; font-size: 0.82rem; padding: 7px 11px; cursor: pointer; + border: 1px solid var(--line); border-radius: 999px; background: var(--paper); color: var(--ink-soft); + transition: border-color .15s, color .15s, background .15s; } +.chips button:hover { color: var(--ink); border-color: var(--ink-soft); } +.chips button[aria-pressed=true] { background: var(--accent-bg); border-color: var(--accent); + color: var(--accent); font-weight: 600; } + +.tasklist { display: grid; gap: 6px; } +@media (min-width: 560px) { .tasklist { grid-template-columns: 1fr 1fr; } } +.tasklist button { display: grid; gap: 2px; text-align: left; font-family: inherit; cursor: pointer; + border: 1px solid var(--line); border-radius: var(--radius-sm); background: var(--paper); + padding: 10px 12px; transition: border-color .15s, background .15s; } +.tasklist button b { font-size: 0.92rem; color: var(--ink); font-weight: 600; } +.tasklist button em { font-style: normal; font-size: 0.78rem; color: var(--ink-soft); line-height: 1.4; } +.tasklist button[aria-pressed=true] { background: var(--accent-bg); border-color: var(--accent); } +.tasklist button[aria-pressed=true] b { color: var(--accent); } +.tasklist button[aria-pressed=true] b::after { content: ' ✓'; } +.tasklist button:disabled { opacity: .45; cursor: not-allowed; } + +.readout.single { grid-template-columns: minmax(0, 1fr); } +.recipe-out pre { font-size: 0.78rem; line-height: 1.65; max-height: 280px; } +.mod-after { display: grid; gap: 22px; margin-top: 26px; align-items: start; } +@media (min-width: 880px) { .mod-after { grid-template-columns: minmax(0, 1fr) minmax(0, 0.8fr); gap: 40px; } } +.stackline { font-size: .84rem; color: var(--ink-soft); margin-top: 14px; }