From 3d1e5b98120677d187bb54f7f90304ac87f294c7 Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 6 Aug 2026 17:17:31 +0200 Subject: [PATCH 1/6] docs(site): use Quantify for the brand wordmark, matching cocoon and zilkworm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit docusaurus-design-spec.md §7 Font Roles specifies Quantify 700 for the navbar title and the footer brand wordmark. This site was the only Erigon docs property not following it — it rendered both in Montserrat 800, while cocoon.erigon.tech, zilkworm.erigon.tech and erigon.tech itself all use Quantify. The font was dropped here during a licensing question that was later resolved in Quantify's favour, and never restored. - Vendor static/fonts/Quantify.woff2 (byte-identical to the copy already shipping on cocoon, zilkworm and the main website: md5 8ea91606…) and add the @font-face, with the license note the spec asks for — Erigon Technologies AG holds a commercial extended license covering the brand wordmark on Erigon-owned sites, and self-hosting is the licensed delivery path, not the free CDN copy. - .navbar__title: Montserrat 800 → Quantify 700. The rule now matches cocoon's byte for byte; letter-spacing was already 0.04em. - Footer wordmark: Montserrat 800 → Quantify 700. - Link the footer brand lockup to erigon.tech, aligning with zilkworm. One anchor wraps logo and wordmark so it is a single hit target rather than two adjacent links to the same URL, with an aria-label because the visible content is a wordmark plus an image. Hover tints it Erigon Orange. Branched off release/3.5 because that is the only branch carrying docs-deploy.yml — changes landed elsewhere do not publish. Needs forward-porting to main and release/3.6 afterwards. Verified: npm ci && npm run build clean, and the built output actually resolves the font rather than silently falling back — build/fonts/ Quantify.woff2 present, built CSS has .navbar__title{font-family:Quantify, sans-serif;font-weight:700}, and the footer wordmark plus the aria-label="Erigon home page" anchor are in build/index.html. Co-Authored-By: Claude Opus 5 (1M context) --- docs/site/src/css/custom.css | 22 +++++++++++++++++++--- docs/site/src/theme/Footer/index.tsx | 12 +++++++++--- docs/site/static/fonts/Quantify.woff2 | Bin 0 -> 23440 bytes 3 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 docs/site/static/fonts/Quantify.woff2 diff --git a/docs/site/src/css/custom.css b/docs/site/src/css/custom.css index 994f772bf63..30a6a4385e2 100644 --- a/docs/site/src/css/custom.css +++ b/docs/site/src/css/custom.css @@ -2,9 +2,17 @@ * Erigon brand colors — light and dark theme. * Primary: #EF7716 (Erigon Orange), Hover: #D4660F * Light bg: #FFFFFF, Dark bg: #0A0A0A - * Fonts: Montserrat ExtraBold (headings), Nunito Sans (body) + * Fonts: Montserrat ExtraBold (headings), Nunito Sans (body), + * Quantify 700 (brand wordmark — navbar title + footer brand, see + * docusaurus-design-spec.md §7 Font Roles) */ +/* Self-hosted fonts — no Google Fonts or CDN. See docusaurus-design-spec.md §7. + Quantify is a non-free webfont; Erigon Technologies AG holds a commercial + extended license covering its use as the brand wordmark on Erigon-owned + sites. Self-hosting this woff2 is the licensed delivery path — do not swap + it for the free CDN copy at fonts.cdnfonts.com/css/quantify. */ + @font-face { font-family: 'Montserrat'; src: url('/fonts/Montserrat-ExtraBold.woff2') format('woff2'); @@ -37,6 +45,14 @@ font-display: swap; } +@font-face { + font-family: 'Quantify'; + src: url('/fonts/Quantify.woff2') format('woff2'); + font-weight: 700; + font-style: normal; + font-display: swap; +} + :root { /* Brand fonts */ --ifm-font-family-base: 'Nunito Sans', sans-serif; @@ -214,8 +230,8 @@ html { } .navbar__title { color: var(--ifm-navbar-link-color); - font-family: 'Montserrat', sans-serif; - font-weight: 800; + font-family: 'Quantify', sans-serif; + font-weight: 700; letter-spacing: 0.04em; } .navbar .clean-btn { diff --git a/docs/site/src/theme/Footer/index.tsx b/docs/site/src/theme/Footer/index.tsx index ccec85b53d6..6c47c18a731 100644 --- a/docs/site/src/theme/Footer/index.tsx +++ b/docs/site/src/theme/Footer/index.tsx @@ -42,10 +42,16 @@ export default function Footer(): React.ReactElement { {/* Brand column */}
-
+ {/* Brand lockup links to the corporate home page. One anchor wraps + both logo and wordmark so it is a single hit target. */} + (e.currentTarget.style.color = '#EF7716')} + onMouseLeave={e => (e.currentTarget.style.color = 'inherit')}> Erigon - erigon.tech -
+ erigon.tech +

1vD0E-p~7zu)N3WCr;g0M;wqyPan0we>55EHOk3xf&(1Rw>8 zI|qYL3}72p?Hh=^?LJXPLI6N+8^DxK_V=+|#dMqSayJE(i;(px;KnEq8wUe6E(Wsy z|NsC0|NsBru}orY+l_Jm`v)FGP}5YcDn&pcOew37EIF$pH9|#}AtH}SO_Zi)DP@+0 zDibswXg<(fA|VnEvL-bh72yIKAt^)~BoV=+s5ZT$siUp4utmeA+c1Z*>RCsswZm$z z#$%}cv<_KU|L2Q*Aj%bS^)kv#GZBRpn#j(sA&s-TsTuGlNj_E1y4|H1a(APCsH(z9 za0JPayPC|&A>~P$k__&$x#7XjvcLtrRLG#JaYRK@SNl#xOnXbM$d01*w=;zD&CbSIi$cQI~&C2B%x0RREa z>q6=i9?3{hg0L4RbE{-#U&%dzaw^`YXQJQTuNno4>DJdAOWOSR2bljkvzXU^5QGvY ze8B&BahvT+GvOojjNjP;piWUEj33^ z2%R}~<`9C+m2(i4lbeM<~{GJ~mNxN?2k?#aQU@BY)*n}siI`WC- z`3crd_4|to;IeE*mCcpU6DZs^Yb4$iFpvxu9)mL!BQ3ZWbuuju=}KXtBqqR%blJ&s z+I)bBh>5TWjJ&|efXbHt;?ijySV;Kn3=c3fTzQ1%Fxt5q+F_W!r(XM5ks&c3k&BReq5 z>>oHiVo|0`Q9c+;^WKx}nUTF`JfHPZ(!xkG&^fWSqyS$5(w{t|Z~>XS05 zwoXZPm!eAreX0~)6?pz%)w0!np8zRm9&Rk>$SD?;ITSVH)VXt2ksqJHf{!1Vz}>8I zh;ojDK#CF|Z3wa4qID>mTr@74%H2*k#}w+tzo4|$E(4VjpJr?3KRYXPO6 z^<%F&piXnoYfQFwj}kc z`Ge)?*b77?WJJ=RhjXy(-tW~cunu7=(aMIuNqyf zpG=HNG#hP@&9eIwkL0i9OX;ujURRRFq=V_s^riRrT))^4`i=gQ|HAt)eF6!)0K87VInaao}#l6XpyR^)&(UR9_H4bv3{ zU?LV}BM^P#T!mnOg9>n*Bt%fg6f8+gVQI{BT~w6nGE`|+u^OsMD@jjfM42iJld;vH zt~cJFj68;a8JN|CE!4I;w2OOi;OpW2(UIecS!aRf^8U(NYlFOXccOh;J~U3XNClYA z{pIT0DJ_P>ia0f1U4TV0sblJqwiGgbYYzAmXeL8*FA}Mpqs6&JhyL_;TSY>qBPfXY zR3L2?Mf&YBAL0Ozp>*7K(rpIiARbc!+YkrA`^lPM5sb` zAtc)WFj^2qB96w0o{J1T)dm!Z!^P%kboKYlQD{QO-_Rs2_3gV=J);? z9gScxZf(8eby2TxP#u;u!gP(t7v0O=m9~Z( zxLvmE+iyR>6O07}f=oqjc;c}b8P`T&AU<5I9S)@(kLX+kV89B<`YVwN78P@qq%YHy z&;bWPYp@Y;CJ!xoLqBlO+y>}d6zFaaw2ZddvAW~Efq_2MM*ZWIg_dBYwN0BmZ@rzc zuMh6&L@PuHP<^*h)Jni^1%)JOU%`o@UB$cA2o=)!y2QfmSRnl^!Xj?e@fAch)oVHk z3<7~cpe|laqL&xeGR-S@E%kO5=ux%Uyc0a{QQnO{1uH-VE~rR zb;h%k4yZ|q$2qr9R{}>X6<%F;A8$kvSUY5-B~MdcWT;Fh%XRGuT1(xFaQa=}`q^40 zB0x~5>9PayPnvKd@6;FdYTz00838>OL&=h=awR_xRlNG0tMIt!4v#VdpwM|%g`3|3odGY*q=4*!-u<*$`)**al8n;+!G<~M5U()tP zKh+k>zsL;zGfNw)xS(fFL+V=>n0LXHmp1_!A02IaQDRb-mQ6xwtSo{7O2!*|D;$#+ zX2^Oc-f3eO-A2Cb~1MZUS|z+6jv zAxH-XgA>@3K&>30HEHypQYsjnT5O#A#$-e&a*S53YRvABqg~@S#I5WZ?phjQ+50Fu zt}bryIJcEr_EeALGl!zxf%n1(4`Ov}CoI2Hn8>&2g`XaARSb?R5HKMDnrGxWdEwio z0%c+(jt~mp>C8|M4KY@*bk6s@h4x|#mGtyn5)WG3j1(#5RRz1xD}xjw-mk@1sa|M+ zu3^}g=IA#dP<$nkF1>RdtMzjJzy8N{AXzJ$O_ad2i&J=?g;=L$6{5#KrO&I9XzmUu!kFfR>_}rc&+^f+y0J%@69a7{yktc%9`?vJLX55@ zh<%XFuVU7>T2|N6oFQk}5ex-xA=89#A&h1iaVrWj$YnAp3Je)gFrGaViSPuAz!ya> zn1)7#BuOHr%MvATLXulbp`OwP5ffE5*-ZTl&R`dne7?!D>2TCQC_WlQBdpwFp8B?7GTw){Q$1+8_OH` zJ^+-Y1UlIAj&;;`%DOjzNr1|?T4FH4jq?Iv769^9EdVONbV(_95#;=I^T6Ta7kkq9 z*#W;)ha=fI)tNkga-rZ#;Kr3Zw|a2zqbCnuJfV3N1KkHK%;4Z*OMvS=5grKvj0i!h zH@J6X2nughrkQz6HeR+!TlF0M3hhxVU-H+l}rS=ND5JuBull+)TA_IwB*%M zRHUb5pb|~p7@G28X~ofrr=Nrx8Oll&%_K&W*d~iBEk(Rk3DOvwE^#L8BY=R=p)s(s z@Dzu@BMGRAKvDw9XbR@2VkPZji|v>T2@xr-k`!qvBVz$M*a9jn;i=R}8?>Osbhw`AK<1B>i8eD9_PEOP zHoL;1?5WDV)NYMO+gF$K>HP+_0T_X%1#JqOAr`2$n5_z~htNkFoYXH$H`)jo<6&_o zKX0DMp1X?-={B&i%_2I->yz6e~)3ccnORW znIuV;B2}7n88T%FA|xUfEJUa<;UdT>D5tR}I5dVqoojt~lI zax`dR;^(&6X^(>rIpLh^Zn)>UfBnyA=Alt?Wtp_-?Mi?f-RQ?8mhlwl@%EX5E0j{Y zT#dH)wy@j&&t@l0`^ha2z4V&*#j)hjyyM^m%+mh|iEjX-SVOb`Q2{_?9=Psj*K>mC z1H^t8Ogrza(@rS|abxg*69Bw_CPxwy=OF-=1HfW{tpIy1ROx;sN=tuopB^QZan-^A zU4S$JPFrD_Z|@r{(`V3-VFMy9QKD42YU!$1TcgZ+(N%@~|9H2>m~p+bNiQ3+P8aYS z(7kLgbJ(c``(Z%ssj*+Z`AwkVEn4Qg9Hw~r#U8V3=a>enRbWQBlAIA5RBae&s6QN* zRjsnC3}fNteUE^w$Rz<;*+s+~P?pi7n=wJTWdaK0M|7H+_(5v6aGYiZg;*ZbSo=s= zVkB-9vBrrQ?Zy8Ne?e`T+ezcI`u^fxUEmHin+pdKOm%DZ3T};&5QbqJl2lhVqg`~7 zt!p#XXY4%K>qdKazn;{u%U3_3htvfr9dc0gKa}P~_hky`mgF?vstsd-me$pe?N&%f zO`ZuKMByO8$29h}WmoqmcMyp&27r42$VGsh2DJVFdVT>50p z!{V3KgU>0G23u$Ag`9Pp6eVQRd+r{Ry%`+X=FyHzCYSO~Fd7oue! z0DSa9jd2XF5ycK0jrXi^AxKlj{7kC`n*y->$)Stb9CT)eD_DtDHVVj?4nvCj!P<8m z!KIX9rBV}2Fp6xNULqXzz5U$6R&1GWeR&W-4FWQ{384r8;)E&1a$pOku7T2eCMdhu zv|gGzDdn)2ro!-86UcNl&}18Mbi#OM0{^kS8bFH_WL9EJP8J3iBK53U9cP6yie6{d z$EDF2C7YTfIL`TS2i&zK`Xd5*MJLXMPlb8GJ(Rswftt%@X+?ijaJWG2S?TeaG1hwM z82Q4fIKw;H<#vaKqy<>h5R|hPjx#nEQV}ZDKD||{e2LO(K)&RH6)$yqNlQnqi}~61 zN&+u}+SR_ykc|Yjuibu7&Q|Ju1CjI@o9+kTRF>z6vY`xf`AdZ1*sMogKSD}XU6m&UhjI%PXWFe_w*nDHsN*C(kSoeS4Mc6OH=0!Y$2Y3jp z7QG`kj^#_FB~(|8#yh(h45wh_*$Ujci5JO*{YA2;sTm5mF=bAmX-rRm*1qz*5=&f6 z!SMm>VS+I?5jj}}868&XU&At&hj4|5!lDn#`G?)Sr+o%Zy|sh#)fN_VU#nnUeyRY6 zxgHft^p(6WqbUFa7nAw}kj>owX# zoeIt(oYDnnYZA)~SIn`#2Kj%eLMetf%gH~ug7-A-_eQ+OP}zv{>GavS5(Sd!2p{lp zqFZL?mT**8)Yp6b6J`p!F>S4#-C*4Hkc}o^Z7s-klH{(bdn(X2E11&d%Qke%YL7#K zvW@Z!Ch{|Ml-w0n%%a83>tRLD7B+Cv8aZ~I@0N#$#_KmQEe4Bls@lG-h25Ym(;`CW zQF@3588U?Dwxk_rYsd9hgXX0fWPOWRp%pN`Ql1XEK?_vqMQCoFU&lKZ{od2TS0EaL-`itzz*@QmuBO5+)H1r3w=}DNZ@U7 z!dS3@h=}e@vF7a^uocD$Dy>P7*-DuRR)K7Q6Iyi*r6)SZOnYf)9oN5|&)EYHzsI+; z0*k1Ejace<@CGJbRGGV|tSE<9EEGXp%U^9(SHq9(zG&PyZCiv?#U>eTIGcsr^q zPP;oZAUUDWTTB2v4&CTjlUf{(rmge^(Po@Jh9(<2wDbk__$FDxGl%6M-bB;y1Y5!6 z%>9u6u=#CWO%>8uv^T_Tn>&qa>;qQ<9{`;a(0LS86k`p?1K7Tw_n|{aatRIFjq}n& z|2KYSfF~)o3m<6N^GL!0#D@l9C7t3Pfea~Tbf6=MiZ!N+@V0u)#w)P&D`7m($* z;da$UP)C{lZxnnPq^V4Icg>N*XX^ATXfM%`X(a2 z;YUjUF?RUy!J~uT{=eZLIl|i``A7M?Hw6=oH)^=qf{S`fv?LG&A}NBfkugw}X-*G% zeYSuH*yY43*%-KgfHHFx7Gy>&=tN2+uX+&V8q!`N~~kpkRCVO?a%{3MrguYlv%>pNzwA67TlpPfjT00(3i2)=!BwoVx*Poz z=*ml@OAmaSSe}6sa@T6^+dn( zI;U4}Y?}omX>)&5&pI3wtD~~tnunKI#*u#j%8Xh(@U>vyL-&h>pQ*|^n#{R$3-OfN zmQT~{l$HXa8?g6D)}59HJL-j4u^23?@T`>Ss>`dc1fedixwPhLC_d${ti2q@Enj_g z^(C3{|Ic_F0afeWVVkV{WPz$=k#b^{lv8|aX zNi~unZfUxvqJ|^LFA59EV7*o9rMjEOkYk%_%8aK2a74z2D8GDOE#sZ|3z~KSRQBD} z*Z(4XS=6Xdg8C8B@#y;QNqvQ8&V9|e83RoH=amyfgsMp2Jqr+~xy!G=IpyBG$H_9? z93>IY?2UkIFz4XgRd$Vb*4H{llE);dEm7JokKlCUNa_^yk`4!3R{Yc|(!hl+D-K8X zi4n8KMH+v+cU}-}uVgO}o8+X%!v7?T*UA0&GrM$4E;k!wqS-NKjFFYc1;dn2rZCx> zb@(=tq3-8MB#fA_{ZSvVuCeqpB4@5n0rh%ecL=%reo6B55dJRicf%d!PF)>oDEJE^ z_Hv;cpWbfpzb<1xa9ityV{+_4>9z647A~xYXCBh+3K5BCKR6ztka^$16o1&a==vpA zwp(Ky-r4p8=So$dx>_L{cwAI0M#yNil7;ot1*gWYRdLPoO}wcwfFDH_21XAzw0K{V za|_@Z!8kEcap#OE>!mq5+jzg8hvoozZ3diCu!%Q&MhwC01~eLL<>-l183xh^7D*Pe z_-MxOX>_@w83#Asy$>`+@81T+vh^K+Y^;8GSp4+$2>pkYHzuDp3aFaP7y-U{kljwM5(FByIQGJHEPAYful# zZ>&LJS6xthM$U4vPS-BZ$q~0J7Ppgl&**YDW^nY?x^MC%5$tICMoJ==OG(@qO=r{J z5_KKNqT0rLX_j#d-#ls=#Xgj_QAeoe6X8jV+GcKdQ?#95IcRvrr5pb>(RmvOHhLjz zu6t$@b_B2gqT9FEyaD%>?U5?@gI`Ls3|hPff(D<*M3_s`WX}(J3=dgKep4K%tr*O? zzH7hvR3Cqwd+6}E<@C7I*ur%+XLQShGjoF4by19^%Jdw`24(HI!iPkRV{;H=rjEvD z%Xy`Uk;4(CiQT?8DbCEbbwZ9bSsuJK%PdIsk;{Bi1p+v7Y3!gNMnA9?lXJ|0fU!HC zkJ%$1u!N7*Ot}|Jr7D$NHl^4&xWthmvyrpa& zJw_@_Aqj*gtehUWpi=w2f$UE(RGxSAGW49@Q)>pmGAg^$P<5oCDSsQ8K74E&r7@~B zFd;s$G-`5q5_Ngiq>!2wZZL|RA}Swc43|(L09jc%GE!GB8{TZb@OxR#f4ZnuhH0+%Qp?E1^fkv3=t5h;Gg(7CAQklsV21WbqS4>B~Ka~(Z&V7Z&LcOBX(sde+ zS1@1_LlFG6ezeB{ zchz*|vCTCdHQ@XM*|+=u2l}uebz3#|AvT*Zo0(xST)y1YY3ZE!`J&G5UXMVLczN~L zV9Ame#N27=0%kcp+cnn(f8#KuqueL^clo=SO*0 zl{~sAXupba4xa6u>%Dwr7@etn*ZYn{#ndop_aVSd0+BJx`Y|7sR%>@>g@gESY^Vr{ zYW)o!f54hbLZ~(ew#bf{*-Vw{vLZ1vTcyhW-!Gjl#7hU;NU*TTh`$K>Ppxtf)E_U`MU=UDVO_Dg z)w#Y35*3#FPHM_E2f7lmvv2#}YHB!1P(*YCU;0Pem%cAV3Zs_c{{FY_)vsF@C8r%a zJK`~XX||eK86Q2{54v7&lK9Gei&6RiL482qu%up*oty^M9vPT&=sHj@&S*aP_R!m} zp#yIYe%e~_L*Wl!yHy>Q@7y&4wJwI2K+fJtzw!oRrmwIh6(J^6FN)AXI(O>i1W`@N z(tn~A>Y;kCn%A|n&}=&({yiN2$60=f5PMpiBMQyIwd-ZB)qd%!s3pOTTl3dB#&Y@2 zM)OGo-gC#r$mcs6Ehi~$>Ksv64xwGI$F+y%DzLbtd?advX=I?gU-{hFn$a}S6tVo_ ziM2P6mu5w}HFYo=>I)5HLNg_#N@OViKiG-2F^TTVK9xHZwuekig3o|#9jYh}L z%wcGg_DIjDy?MHM+BK5E?+~Isadx!_`X%yx@yc7j>%_}=Zfmc5qOC73$6(5DTcgp| zx63eX{A8Lmf??$FnTdg0)qZ46jUHhI7?2vW#*bEdgg~B#;qzqjc^IC4Vt2ZIEjhCE zscgIV#L=I<&~GeV3rx1<4Vu0Z@7=pd>i>!09!B!XSwU-(@tY=L^Qyxq?-su+DSn%_ z+C`4iRCRKy5>o_?lAy*(}SvosOz#{AW4CH_bN&O9%Ve~c^ z*X_a~myh_tqox1@xtDARAmfg^y9@?xcXQh=9CW#`$+By6jU*zPm5Sx&BQ`hR9LPr ztgU6M+$>6q8|7~@xKHHI$Qkel%4Z7s0l?q=y{VLcAnHF<@P!I}&VSyM`g>B5`jt>N zo>ut!pVzAkdrV-lkP6S=%imX)+yArm0EP5jBdg%uUBeXM46eQ7L5XL z8X@CV$|V)<_ly4a@c3MN#lz!D?Pm}7=MeM)Iu}S;J=I5{^i8d%NZ`N(ND6Y%tncUb zP61q*TaM!rTSBN>&r2n8WtF_dL|&y##;Y`$DtS_}#_1C6w%UQ*$@DByvqmFq&dNfI zCvQYInKxU~SZOU{SoKBEm0>@G;ZBE3-+zK#_vWtLmTEPD+Mc>H_ff$k@us16RlCah zY+QkSQB%MoLd7JwN3Qn){vlI7FQv15FPMBUu!^+i6?tDWfB7<*|0RnZY(jS!D6Y8{ z?tpXrkaL1z=#=0z?|#Ecj;?C#UUG9 z*iZnhNz&8KCU<3tBt&`r*Ht=gEGOKv?op5EV6iKwGEJ0?|FTei1jVeBQk&M5p>@tx z?q90?PEYphA`d!Ph4<_$7l!YCcKF(n87@*#Bt#HlQ2_$y7l{x=RFr>~gnfv`zQSVW zvG(6${(cTY&cv#Uj0j>ZQo(1j|MYzMll#wn!kCtyUtCzw)m{4?)zke#8QN*jY5KCH z^H_c=O&0DO&km#~aOApXsy{{h*Ix#bKVz?R;p+;M?JAhO9wBg{{rd{H;?f$dXWYx; zj_S;l1t5zBa9g6J$FyaF0$1oY7?DHS5WQ&`kV6V9z?zulNBcS`^)jq-{>P6HBLg0CExRI_Sbk9 zd29V+@p6Jks|P_wi1GK<6=}TvTU^bGOK!@=47W=Pvug{^g*yKjg3OTPV>Ru+q|M&< z$gy;sM6DU2OJSvav3xOQlc%qq{4f9K$B`|{X#b=k8LYOEBRkypoyIqGYIvR5c-xbk zYg%NiSS&ZZfF36cPJ5Odr?YXjvvsxA#U(!rPK%Qk(8Ia0SQ)FOrdoIVZq{`q(x?z! zjJs>=YHR0WdpGW)*eHucu4Uc1y(U%AEa5k=@jklh@aa2+@0Tq6Kf`slUQ<=dsY=9n z_NyUdw}~R7%aV-Ut`q&M-li`pF8Xly2SiUZ(bFgiM0w{bZ}TdClT1%*l=2%_A?8(` zLkCl?*|I;V=^Y|4{pyCNMyghX*o`xsz@dTP3f%+J;EQGgg0{a8%o(&rP z|4bYj6KA$T2Xgl8{U!hPqJmet6;AuS-TT~^Xw3o4yZy6tZTokTZON3e!Li(cV^@O) zKY>YpqpV|e-))Ca-YNRfxe5PmRLgTCbx`-UZcqmXEi&B^RjInFt8X*zyQtO|36zt~ z6q+Mbn#xj6W#1;ucad!eo#?901@~uiVm0fz|#k5#W z)V5K=sg%c9#x2$z3Yt90*o{&dqL*D!uqi4(9M8uQXto3@0Y_U-lOg=>PK~LyWG78m zY&`b+uAcB-zuwT^(w@l=?eUvB(*w!-M(FL6%j(Am)9ceGq8g&=**=>8Oay+A2_vVo z7gXw3i~FCHq4JO;RR6l+^@Mq*+MlRezou^8K{=kuP~yKeC$AYKsr-F#ip9dD#KUSL z(_c+I98@b@j8pu&2F=^`0grpPgNOFw?Rbg9|FMg=5_)2{BxngXXh{(JU^u8Zw22k>Go8 zLvYVOM1CA@okmM`yue_eZDq#`b42Yrpcb`Ksciy{8Y~x5sX^^PtqpF=&2AI3WA5{7fK# z3Lxdy-v6hDCk2qKhC6>bxD;OIdtOWiwa)n@) zqLFe6P@yH#Am5B3>)%glc0TbE?!s#ZutWta(r;J&mx8BFTZ8{X#F)|-5<4s6Gc-SD za|rRNKtd$O2%Zv&)`A!!Q6jJ=Okw6R_7w&Tuo%}x=V#nGQyEj4Ysg*hhdjg4k!WtT zvR_xqsq7|fY6Q(43y8C{7-Cg#7!Cz+jwnuYL=4w{rtj{9zE4CddOWkU54_E&sE(rt zP3QFIOjRsS9Q7_Wo)akcz3>@xSg1E=rawBE=W2OHwzyoIl3&d*w|pwwSGK3Kd{6nl z^v*61b1L>!>|+;v>bxaIzj$BgSyr5F!iF=+|4`g6DQ4U#|B$aocj?Cku$*qf1}&^E zEwEx8UgNrAH)Gfd3WB9mhJM|TK{91sNAO8TT=ZMIHb@nxI;dF=r8NPJJZ_&);6SRs ztVj_%8t)fpFIXt;n~8ex5F)GEh@F!k&~GdCUU#*@Ja2h^90}XHobydQjiQjg?U`^U zGz_ZyQv;;M%GkKkYJZ+;*7aSI^jRQ;3zwY-oFtDRDy4~ zE;5c5v(GW;zqsgF-wqBf&D~;ny)%-YnR#vcSiZM>PlqSZH+1;HA3Jsq5_d}1+;?N- z#!&N6{YZUZ?&-_@_xqdrTSi+3n+ETTUq4!(PU@&StzRylnZt@SW2dq%f&mj_*<2(c zOWy&@%t8{lI3W{QT60$$i8~08Xsdd-RcC5W>so>{nz&N7WTUEfVsM5Ju@aejLRPkI zVy;WqJUH8w&~2qcC3c&rvgg&Ob(O)IWCcNqjTsht?out&)h*x4kTorO_+s_QCz_2A z>)+%oJD2QO5b#chCKYFHV8{QFw)31>(=y!9v^cW`!l$?R>nQ`|1U^p=a7a(}|LVK; zhIYyzWw>FOlFs|;Sq+ar!9OxJesrAo_1IyjvEr}s(IbCTZG^s|O@GVIsfmeBw)tL! z`m~Km?(MWqC+h&L#Fgc7t(0}&=zhvqOU|DqNwM!ks2zM^EKc&a^~vIR%Q-$F%0d%W~f=AB$q-uuh5Q>Ec#d)!&vYT7^GI$oe?syO9B{E2`&@{~%X%fP4 zJpkNP2(9f9^R$e17K-$WCQ&J;vgcRv>|EzZQl6qS!<0ZmiQm2-1@TgS)WWPOFcSGJ zsJBOC0ay)HCsF0|u4BIX1-8gJl4NqQPw*lwEZG3ZcV#Q%W;;KSKK}IV;jfbp6Tb%# zFBPEG(`}6kMS8`Icy_kyBMB#f(TRjy)`W(MQvel@LaRiXzAB|}rby`fxmz=$ODU|w zMyUi_+9;lCNATDhF;2jsEY68u&vs6)E@%c4Hz4%@+;uZmM#nfm>;8{DH|wQI@apJL?k82CTID$O6j|sfdjmby+0l1!Qn0(h<-R7%hMc&@kbM8-AnHe0xPA@Qn`EDLM&PAI?Mb zQIuWgEnPM&5aOgPi~19~AQ7^O&%F3B)(!UuOuDKCP?Z2s%f(SmOjT(sd)bxav&G*{ z2rp)*)kWq{9s2*D0b|JkH}C_XN&xuf;&8pMRWz5ou6hT5VK;d3tWh z&b5CYLcHn+jRna{`t(xE`0f}}LXVXiitjN}!srpfUvLupQJAF* ztb7gKut?JAus?IAzU`k?o*4Bc;Ao=+4?KbP)hNv-JLmZqVeWn3du<&z8H$Ll7f8yn z8S>A4pGj1oS|5-1FCq@=s(Lw9-{a<*!}!aPbKJ6^`T$IZ>{H(-5{2S^cuUw<8d%ly zJ>kv!zW2I1ZZcrS)$=8Pw$JzeiIq|7<8JpN?qE`452QhvdXlN~cQsXLtGOu<+}=C< z*@2qB=sz?{Bj5$C1U`Wve-vSV!*>sLlt6uUl5yzL7}VLE5wq+v%Go>lSN?F^G)uyk zE)AZH&JjDkI3{WC3&UqxQ92YGQo*h22|3L;a$yweZcLA~r=?!r};q%tH4 z>Vt$buazfPkklnGwQ%|GQG~Ae=)3-_&8msbAO34oatVjQd}vAAJGTAcUeWdjBrV+> znjgs2$eRrFp>|mQHEEdnY~6s?yoq0Xs5?OU02cs&E$9ND!4adK{$|jg@VYP-+-9E& zNU5LEjf3CbG@w=XfRBmz`M2}4Ro&t_n*lQaZW^r0FI(A7W*i{>JF3-bBzW^zwBQ%$ zTOfb_LroY0ke%miFcc4@6!{Rr%LaY<`9@=d@D4v4d!|l_`5W_NN|7+^YbOw|ji(P} zCcHnJ!rweDl?c-X?QFw4-GQzXgVEvws>dg-_8C>6r?QP+{qm@PjrK9Xw)_1L(Wit+ zo^zqWykrUva5WTyK=Gci1!DvQZbbqHIr0v)fi-9C2pUF0-a|lK)&MwQV}@dgVLP)N z{4V|k2E=4);pPR9l?2}%`=by3zu zs_fyZ1&yunH`FlZbFQi`|~_aig*zb;OKWO17CH zNf)UDV0sm9Mlg&jdz9 zM07W+SK)~hCr)ud16J|nwcS;;KuZ$yT*4n28e^Kv=BSj+3LD$Gx*l#PW^jG3nq}1u zL(fgiNloIYvsdbQV`^Smyw5BO0F}{TpJ2XbO6VI(@BVn+Ek}4 z7wRT4aXsfQ`a&no@hm4Bav|aZ&^$dID^k3@^J1b4Rk%771VB7-Nd(0Uj^uN%IjK!G z2*~401JF25J(`)V?cD^1LEKIEOnmWec-jYS5&~)O3^AJ5INL^})|#?{CV|jINDOQB z{YdD-NZnqrt{}BHC3njzZ=Re<*a;PMUoe~`nBJ3*dD(g*aJ4xQAdta`G5EQ1!iRWh zV`F2x&9M@)7YR0Y*7*`TI@3X$XEw`M!7v~oAaKf=m7}Ai3`)jML_{ zxzy%fx|4Lzu)|ecntK||d_LeJWR@{UMn-0Da|O{A?-oNQ2(YRc>a=qAbQ~w;8g=!VSi_ch4IYD~xL&pR>b9y#7ju&uH(|PxB~fE5K}{%G zte&X%84zh<(bgwSq`mw(lD-I4+L~_sXv&JWnL@u=0D>XyJw~d2+e% zCVA8Hd9!cDql(0(qN0irs&_BN9BnGB_6dR+0ssK1@rj5c+Si;}^vmegZOO^WEdnvf z>As_GV9O;>q8b!-A1G87D+)0&vAw<nQ?6XO-mRs2l%UMpnuJ6e@U-|Nz1 z027G?jbH9lVIhAluxy97QZCAc*|{KmN+T{7J1|YMd%NJCdw;(;4Am?62$U`xmwR&Ok#p;cxK&Ttq`3XqY_ z5^HkXjS3A>VF43iwh~Gm)rwR*c&8x)DX}TVKHIprdyup_t;7}+7sV(op-WJZE)RWM znrv^@hJKAJ$HcqfYpF0)zRgM6Nmc##kmf2y4kySAnLwdA-TId9nDFr_&zOt4S zya6E~5NK+TFp)8^ir;4XgocLZKo-LJZ`@*#Hs=a}GBzwjcL0G5(iAyMfslH$HZ<(C z^63-cBnOFJa|{OT>MC!bFkvfix4_o+hgqmLyM9qYZ4hgQRkmlyZtZhi*O9X#K7Y?o z(pbG?Ff$j-=w_Ihn9;%$6Pp;51DCDiL_W3iGM`}ZL4=AVim0WVNxtPE=l)yHXP$q0 z&pg!etDIe)bMyBvF|m3@%s<_GM~-(VNA&3~;N9&(b*BLA^hR@Gn|O=HsHWjjPUrH1D^-zM$Pv#B?4@Gu54Py1#^>F>%OdClm+^jzf%xjt?aP zNTDnMGAKDfVLh&nE-Wn*T_PiK4#!H3dmY(IRWK%uyc`C*DV%RoW@~afOW>Y+a}T@y z)#cr&bQ^dULnmVaS`uEF6EpYGH30x94=|!}apIJn&ba5^jf1(>yU;LM6^`TCb+t+E z^oXZc8Mbpb{&v{V(3pl@=Q`otSFtcU=bh`J0T0=QTXb~Q$(c$*cSS&dlc|X&wj?(- zN>=BGuT*I?3Z-h4EVG^eXU9%=cRzE1EhizkcLq?Q{L$Bh>ZlJx0=+@Jy1Z8H(h<;> z3GMQ((X|4%P`!6r4_D2qW{ljfHAj>rQUUe)>9R441)-HW9(VCf7z6@g1ln_F-nbFa zCDOlh>9=yHwz5R8{$b&zy=F4eN$X=vqt-<*%PbC1iEsBtj|Y?tv|UXz7xw1sz+B!y zP7qkB^H%hK!EVaopCXvZNg&F73knAYhJ2`wG2^Fe#pH;*be;-&+IyqapmxD)4&@b- z*v5hvA$&PLRVSS85+%6Bf$++BkNx8N>|y9AenK(OG!U4pwTwm1ZL zcg^CiAxLnS;QsBs@69X!`Rml_>OS2))!oxGXQsO93Bpnb(}PN)-u3VEU#g*o7+jgV zSS3iRtU`v_W}Gl96I#pf(1lPpxg{kfK~=wh0glxa;T-`r1jacs@jkQZAs|o(hXm$} zm&fiM<*gXiC*xeuEAA%mjkd>>wF~6u!R$NI7v1zvlAfzqhBu)1r)e^rVRCXwvKZ>s zGSDv>6gW6INvI^w;&)`q{&n!Kp7HHNI6#Z90l#aB{T-ot^#Mt4M=NBA-4gfa&NC{e zB!@`?Mq}r-*a<*;e0>sIT7&os*_nUR_SU*gU-FWm6tCEf1$@Nv=K7%ye zTe9d+5?2SLp4@h0p^@=(1ULP38aWo}%$X9I*5P1r-(=%>X;wI+@e)C= z6&?6uLUDLDn#TRfYo;@w&~Y}>#r(5^5V|pa+p1JPy+=d|%K3-n&`BGUM^^*OfSMnX z^zG<3?!k*8?>v=45HF@D$-2+336z>G{gKkCV^~4O{p#!+6CrMAW|p_@C}rcP_Y>JW ze#AjyK$edB)d28L5oP}5q_lk~j$11)ORl0GdNIlwungu3E2`yp)iZ z4MwJLtdrHQbD5Z6#G469I|RVT9Qf17P__~nRun%4O9&0~IiiZq4IXVB*%2)cDiflr zA=xtt`j}n^2dmvrpWodVx<+X?p`qFZ!E!rkPQ1=l^Xhsxo<+%bl7pe|xqRzNc~Lqr zYHJ}OFD9hZzT9ygmm(pE#na#kUd`(X8(shU)7LA1u24@Cs062XaZ;@c$f$b*ge0ILAPkA>eyTBv2*Tquz_@K{}@hf`py7uD3uH27m z6n4Yr)X0#2mClSISP)tb5?sJ=jVFV%*0ikp(hKW*2Cabe@gzj_F-y=9bsano5)Hwd z)r@wCiGF-g><471UlSgqMuA*B4e+l_*ai$55r=8FKP)`bUm1W9_=M@g1Lp;Ymy90j z(ZX5+Ith@zZzR9wn*%kauaSx&yUsemC7Ql1sE#wgtW7@^7_C?Sx;~DJlL>EtQXR|167GKLg z7!huu(JlICK|8B^%yYP#9h>mBB=&2k%XRoqCyS^UvZzj((xs<7F; zPbCXUbo&lWQ*}`s-D)v1I&PPN5*S;yx5#fN!^bQ=HUUBO36btwVbUZ4v|ke>eO&YW z)u}DxBp|Tq;GA9!Jjn)|bK7v*Qtd2I$67XUsDm1#*%E$By!!WXBcXF{FH*pQB`h92 z3rR7_1#=?%>Fg0$Cnw?6X2Mh~Zq@ddHIEf`qLLCu<@bGt546l!#_ z{c^*(p}!Ki8h_nATi}#m0k_G7LTZ#4M6c63q3L{EJ1|G(VFs7Lx7)#kaTg+leO3+$ z!;C2=+s;Ya^e{-CMe$hD#DDn7!bt(>&pPj2%+s6NG26|47`#?(`tlidMG2Ee%Z#h` zy(TdPu?RjKtBI?CN!>S%*IZLp z{m-+<+n6IcMvnEhy6;xZNYH-(4GPP(gXibse{jpn^^|S=f~ELIyvqNcxh@xX$G^mU z7Av%ompWzTvu5F~b;&e}t54;wC0~opyowi+qSl_m!_wT|QguT_L+8pd1AmPlh00w3 zg~%(K-R+{8>-oh(`xnw#-n#%KS>|<$Rq#O@)ZeBHsOyG-Qt#c2Uvw{G9+gytrl4ud zkg?5JkM)M+n2=w7VUoO~eA%5o1P_BYVaaRGT56eLbDEuF%cn?uLhg*LD>Z^N6 z(W*_Lu-*7W3W&w}QwRcr7K@N*Ac3i}`R^fPc9Y|h547@O4Q*B%F{r`Ubl)c5M|WHj zS!?|wf7<@cKt;t7@V>op-cxpTv1j5w$CZH3=hfH!5x)K_Y!3)L`zt2(7W*Qn*w2!q zeJ3N9;%7;3O~6U6Ocg$+j+4VCGpG!fY1z~+7mu{TD+UsB#_)nXB zm&7R7qI?`al4DyOmMmrt@9mvCW1d#ncDV45A+)a}f#1kmrUg{TvP2$c&=`iZIZ{b1 z-qggtHslp_F=!6@V28f!?VqvqZg;8n^UrHzWdjSI{w?>#g9qDSbZ)CqgY!mVW&pG2 z+*{$V%|ovKDr8ZYWS(Vv+$S-182;ei9ZpoV)ctb7zC#JbpwpM*K0=Gk8qp*O2SVTb z@a9vN`S(vo@$<@Qier;MQ03B*Hrf8yHvELC238U)D-2I6$KTl zRHW`HwJn?4zg*j^F|9h>1hu&)h;t&vX6zV=$M05LwktUM$k^Mz%5*ZV;xz#eRTDMO z=#cYXf28BuObG17L(A2<%-Z#YLD-Fj=kVL)xo zH zH1cs{YF1N71m_a@a z2%aj-elkTdN=-;WvcgK?v$n1cepmO-{FNph^Pqny28PN43L%TGbW3RL;{MSEE;<|H zl5)2V1r1~b9&@KhOc?4_6ZqLUR}7`REcNmpjpmz-ME1(I*Kp9n+SI~Qz}%xJG#!^*%O|b_p$ao6Fg+kV$6WbiRPsOpg#=GJV zUoIe=Tn}qdc*!_PZJnuTxj+Mgum$5hqb{baBl(B)3wQ<=2sumSr`@eLNj3ILjANEc zCrul$Z}aT;bZg}e_GV6e1>5#{PxSCjAxGLg^U4XFV)}K;257rYA3dFT?spwiifzK1N)AbMG(^k*rrJ-N0~uspJ&!aXt!cfuByB=&(oDYQcd6VYbvS zvyu|+IjUz77fmuOAJH|d-FL|P9@>Vm={p+vU>&GvynjRv-FG9-Nizh?di)J76eAJK z+()^U()4$|8&fvtgZUm%w$Qi@rx`qkjo3C+QVRkJMZ+Xw=%_WRch-&(1n0G5T5v^Db733+ZzK zDDdM=z8OvKjCA`>y|Gxh4i>+A;C*!&EUkb!20vvEM5U462cp7cj>1S+*;81&iR~ey z122D`G9)U(i$ly)A`EbhNtiSwrSOE8&)t@d&d%bAKoM+dmd0!W$*n7; zO|UIrSKAcC@iPAAF(;!H(c0(@SzQ|iJc)Ia{Qior#5FVZ+oy@y=+xcpwWdzQWj3p} zf{oyAXy{v1ouNr{Qp04K;e-+oBGzyeVr22@D3LFIjGeHKpGw<;2D0mL$ z;@ABYBKqHw0nQRGr2H$Xu-cBQ`3VrIjzsyd=F!68qxF;&0ZQ_w=fBD1-R)=7YG$Sx z0EQvJ!0u7b(r!AGEWUBLYr7S&>W{`NKePs)TbHU-f-H4)ii&b)b2wK%7_yf}&e&(JfNHiJYXp%=&*KN5X4lSiIS^mbZ9eM(~}+6XPmk53=dZTdYo z=A8+%>IWJ!!g^}BUPldb8I|K$zD=g$%7@U9$r_*>@R@(8`0irMQjAz~*9KGLKYEg2 zu7PWJI;@~cFYl*XBuK_T>z%@R&o8U?{TCv6MhJ#BJ4)jTN8WUsT;hrTioXuHtX7F3 z$DJ8IhE)zsV*?r_W7$Z+m6fp)JfsD~6BD+@oSiV%E%wTHS16W}*yn`_7XfK7;LL_s zUyoXCFzz2db7_w&;)8QexxRBBzB%x$?yuyFicWhkC7pUmgO!MHaxiceU5AF$kP*pb zW)f;mz zdJNs@BvjjCywtwfLp$g+8lR3`Ch&?P3mHBt($dy)M0PZ08MX=V$}fB~Xj0 zH>Rl4yS8thTi0c9@qI+mV_fdx@UY@}6a+7ubtimL!3Td~ zVH1^w#dc}m<<33pRb>$DR_Mdsvbr>0F~m{cV_FawbR$kqg=pUn?s%Ag5)vZpZ5YY$PR0LVdJJ)a}ZolU&Aj=_TgLc52KNe+57cM3zNu@{9}G|~~1V!v>xnS_V@3RW{4 z7$(}IelhiG@DIy_u@3L@=M{(mypp2ur!aEg?HIvvFuY-mNQ6?S+m@13+(n9qq)~Ay zC2{&GR=8z=5#fTwFGLIW=aVQOACgOGna42aZ`d}3*=y;r;mA5b4jwf3Yyv-gbcPj6 zq%cr!37aJ~67cF>CN?GlS43l3NKj7by#t`YI)qG+&4mko#jjCCak^^4*v^i244zc) ze^~7x{3;O1uE^GKPCui7gsYUk+kfL}v}<&NGyf$A*{iqtMd3zE{@^}nf8&Wi;Ni?O zqMjwAwHBe$b>PYS8p%@q)m~ zgLR>H^XK;V#cvm@FT1znah)&k&HAooH?T!1TcNbI(jiXE8yG&Cr}-%{tK7P%5_xJ27{ z7_kMn%Wt$#D<>b{WSDtJ4Y=M&M!OY_H~T`ohQkVO+!pUAuOET1Gk8-Lb*f&(sMHWE z{VG@)p_utOd;*UwbB|@-Q7ibPZ62-k3e4Z^m=$7>5`1`o>H7V}dBGg}IHlVM4&+A{@klK! zy<*nDy!C@|BY={1e!+`vKpQi-Imdx*3!@*or;peOGYqEN@Wnm1N~HRnY(^wR*1dD4 zsR#?xH9G()Gv&$G?(KFj2-yt%l!K3*;Vl3%7sSDNYdQ?%G}u!nde1R~%8^PW{c!ra zjHhr7AeWj3*eZ98rw8ap<&Zj-zq$;cygw7+Gn4=(f%6?$CydtOFD5~DMiW*o?03m| z0!z%JAfK^V01epditxTw(?>Ve(%ZV1Sw6FQO1qK#gIilnE1&THaDgrk_CK`m5wXdy z!u_4dOv&MYfNr(^)k))Ptp*-Y{omaCH%#uoThh@$>9fTjBH;Q{!z7R6j|Jloh0^t> zg@MJ%>F%1?Mg3FxKN9P|OX7k5UHUtp6c!dnMHLA6OA}2X0L~xa9|l81GyRXwpz=tl z0dFXZ6FLQG0zJw5n>>O481_95OzZs`y(}Dkwx_`976#rSM5*}r*W3`#L6`W{&95nxJVa%2OkGWCK z;?KB=nE%rzuYqNx7Ru!mn6ay(*}h$sBil~qy;1vQkbRMfe~rHTe>5vV|CIkGTBScD zfuX|wbH%yq@vqc>-Qsd9t}kD18d-cq|6ZM^m*^KIbqT2AN* zA(1Itb~P!fY^$YKQxg8ax@>hG};O?ODAokT%|qqoA^9Iq4@)jq0WB-el7C5X!> zf`C8@a{lzmYuFM%33U=w*v)g+-VsR&tuRm*9^O0Y)d70zt0||k)Gs5h^P&}Y$`Rf) z(;?OXxR!ifMDowpYGcDT9Sqkf~)PR1?A zKPyYivE$_jJn-_qU)&MUtIoSBRwAD36sN0|wqJZoGr(b*8bflZZ}#iUeGP#<`8ll? zXN|&ang5GCfMgD^w&zBt@j=RZSw&Z_qHd98HDFO6UD$PXoPI;LznD0rNaV{D@p5Jc z;(DPXTiXW>P`>d2udR4jl}qclzF_LI%Y*ZLO53Zi0?)gtn?Jz6>uf5Q3l~o#gl~Ge zX)*ch3+wD|2dW6}p^#d!Z<)07MlBSzx1bQmqY1k@~}@pbQ((gi>sPRP)$Er5~Ns(Qa5 V!+GGvH9(@+B8X;Lh7R4p{|BE?p_c#v literal 0 HcmV?d00001 From ca20c484ff22eaf64829fc6424421e5b2769ad2a Mon Sep 17 00:00:00 2001 From: Bloxster Date: Thu, 6 Aug 2026 17:40:13 +0200 Subject: [PATCH 2/6] docs(site): replace the five-column footer with the minimal theme-aware one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adopts the single-row footer the docs sites now share (design spec §6.0/§6.1), keeping the brand fonts rather than zilkworm's terminal styling. Rationale for going minimal here: a docs site already has a sidebar, a navbar and search, so five columns of links duplicate navigation the reader is standing in and push the useful part off-screen. The full five-column footer stays on erigon.tech, where it is a primary navigation surface. - Single row: brand lockup → tagline → icon-only social buttons pushed right. Bottom bar keeps copyright plus Privacy / Cookie / Contact / hello@erigon.tech. - Nunito Sans throughout with the Quantify 700 wordmark, per §7 Font Roles. - Every interactive element hovers Erigon Orange #EF7716 — socials (colour, border and a 12% background tint), legal links, and the brand lockup. - The surface now follows the colour mode: white in light, black in dark, via new --footer-* custom properties. Previously it was hardcoded #000000 in both. The text ramp had to move to fixed alpha values in the same change: Infima's emphasis vars invert with the theme and would have rendered dark-on-black. - --footer-top-edge is a light-mode-only hairline. A white footer on a white page body has no edge of its own; the black one separates unaided. - Removed two now-dead CSS blocks: `.footer { background-color: #000000 }` (the swizzled footer sets its surface inline and never sets that class) and `.footer-social-btn` (the new buttons are styled inline). grep finds no remaining references to either. - Mobile: the top row stacks with flex-direction: column. The old rule set grid-template-columns, which is a no-op on a flex container, and the social row's margin-left:auto is reset so it aligns with the brand once stacked. What this drops: the Products / Developers / Company / Community link columns and the Erigon Technologies AG postal address. Cross-site discovery links (Zilkworm / Cocoon / Erigon Docs) went with the columns — worth a look if those carried referral traffic. If the Zug address is needed for imprint reasons, it needs adding back as a compact line. Verified: npm run build clean, and the footer probed over CDP in both colour modes — bg #FFFFFF light / #000000 dark, body Nunito Sans, wordmark Quantify, --footer-accent #EF7716 in both. Co-Authored-By: Claude Opus 5 (1M context) --- docs/site/src/css/custom.css | 66 ++++--- docs/site/src/theme/Footer/index.tsx | 246 ++++++++++++--------------- 2 files changed, 151 insertions(+), 161 deletions(-) diff --git a/docs/site/src/css/custom.css b/docs/site/src/css/custom.css index 30a6a4385e2..09acf59def9 100644 --- a/docs/site/src/css/custom.css +++ b/docs/site/src/css/custom.css @@ -461,39 +461,53 @@ details.alert.alert--info summary { } /* Footer background matches dark brand */ -.footer { - background-color: #000000; -} - -/* ─── Footer social pill buttons ─────────────────────────────────────────── */ - -.footer-social-btn { - display: flex; - align-items: center; - gap: 0.65rem; - padding: 0.55rem 0.85rem; - border-radius: 8px; - border: 1px solid rgba(255,255,255,0.15); - color: rgba(255,255,255,0.65) !important; - text-decoration: none !important; - font-size: 0.875rem; - font-weight: 500; - transition: color 0.2s ease, border-color 0.2s ease, transform 0.2s ease, box-shadow 0.2s ease; +/* ─── Footer palette ─────────────────────────────────────────────────────── */ +/* The footer surface follows the colour mode: white in light, black in dark. + Text is a fixed alpha ramp rather than Infima's emphasis vars, because those + invert with the theme and would render dark-on-black (or light-on-white) + depending on mode. Ramp values 0.55/0.65/0.35/0.15/0.08 come from the + original black corporate footer; light mode mirrors them to black-alpha. + --footer-accent is Erigon Orange, flat across modes, and drives EVERY + interactive hover in the footer. + --footer-top-edge only exists in light mode: a white footer on a white page + body has no edge of its own, whereas the black one separates unaided. */ +:root { + --footer-accent: #EF7716; + --footer-bg: #FFFFFF; + --footer-fg: #000000; + --footer-tagline: rgba(0, 0, 0, 0.55); + --footer-icon: rgba(0, 0, 0, 0.65); + --footer-fine: rgba(0, 0, 0, 0.35); + --footer-box-border: rgba(0, 0, 0, 0.15); + --footer-divider: rgba(0, 0, 0, 0.08); + --footer-top-edge: rgba(0, 0, 0, 0.08); } -.footer-social-btn:hover { - color: #EF7716 !important; - border-color: #EF7716 !important; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(239,119,22,0.15); +[data-theme='dark'] { + --footer-bg: #000000; + --footer-fg: #FFFFFF; + --footer-tagline: rgba(255, 255, 255, 0.55); + --footer-icon: rgba(255, 255, 255, 0.65); + --footer-fine: rgba(255, 255, 255, 0.35); + --footer-box-border: rgba(255, 255, 255, 0.15); + --footer-divider: rgba(255, 255, 255, 0.08); + --footer-top-edge: transparent; } /* ─── Footer responsive (mobile) ────────────────────────────────────────── */ @media (max-width: 768px) { + /* The footer top row is flex, not a grid — stack it, don't set columns. */ .footer-top-grid { - grid-template-columns: 1fr !important; - padding: 2.5rem 1.5rem 2rem !important; - gap: 2.5rem !important; + flex-direction: column !important; + align-items: flex-start !important; + padding: 1.5rem 1.5rem 1rem !important; + gap: 1rem !important; + } + + /* Social row is pushed right by margin-left:auto on desktop; drop that so it + aligns with the brand and tagline once stacked. */ + .footer-top-grid > div:last-child { + margin-left: 0 !important; } .footer-bottom-bar { diff --git a/docs/site/src/theme/Footer/index.tsx b/docs/site/src/theme/Footer/index.tsx index 6c47c18a731..005ea40d6ed 100644 --- a/docs/site/src/theme/Footer/index.tsx +++ b/docs/site/src/theme/Footer/index.tsx @@ -25,173 +25,149 @@ const IconLinkedIn = () => ( ); +/* Brand stack per docusaurus-design-spec.md §7: Nunito Sans for body/UI text, + Quantify 700 for the wordmark only. Colours live in custom.css as --footer-* + vars so the surface can invert between light and dark mode; see "Footer + palette" there. Every interactive element hovers Erigon Orange. */ +const BODY = 'var(--ifm-font-family-base)'; +const ACCENT = 'var(--footer-accent)'; +const SURFACE = 'var(--footer-bg)'; +const FOREGROUND = 'var(--footer-fg)'; +const TAGLINE = 'var(--footer-tagline)'; +const ICON_BASE = 'var(--footer-icon)'; +const FINE_BASE = 'var(--footer-fine)'; +const BOX_BORDER = 'var(--footer-box-border)'; +const DIVIDER = 'var(--footer-divider)'; +const TOP_EDGE = 'var(--footer-top-edge)'; + +const socialBtnStyle: React.CSSProperties = { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + width: '38px', + height: '38px', + border: `1px solid ${BOX_BORDER}`, + borderRadius: '8px', + color: ICON_BASE, + textDecoration: 'none', + background: 'transparent', + transition: 'color 0.15s, border-color 0.15s, background-color 0.15s', +}; + +const fineLinkStyle: React.CSSProperties = { + fontSize: '0.8rem', + color: FINE_BASE, + textDecoration: 'none', + transition: 'color 0.15s', +}; + +const SOCIALS = [ + {label: 'X / Twitter', href: 'https://x.com/erigoneth', Icon: IconX}, + {label: 'Discord', href: 'https://dsc.gg/erigon', Icon: IconDiscord}, + {label: 'GitHub', href: 'https://github.com/erigontech', Icon: IconGitHub}, + {label: 'LinkedIn', href: 'https://www.linkedin.com/company/erigon/', Icon: IconLinkedIn}, +]; + +const LEGAL = [ + {label: 'Privacy Policy', href: 'https://erigon.tech/privacy/'}, + {label: 'Cookie Policy', href: 'https://erigon.tech/cookies/'}, + {label: 'Contact', href: 'https://erigon.tech/contact/'}, + {label: 'hello@erigon.tech', href: 'mailto:hello@erigon.tech'}, +]; + export default function Footer(): React.ReactElement { const logoUrl = useBaseUrl('/img/logo-icon-orange.png'); return ( -