From cfdbaea6f3b7bf1a72dcea4591baf3e9cf90ccd5 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 10 Jul 2026 12:19:56 +0100 Subject: [PATCH] Tighten novella reader page chrome --- .../static/fiction/the-burden-of-proof.epub | Bin 520031 -> 390359 bytes .../fiction/build_the_burden_of_proof_epub.py | 66 ++---------------- site/quartz.layout.ts | 17 +++-- site/quartz/components/AetheriaEpubReader.tsx | 4 +- .../scripts/aetheriaEpubReader.inline.ts | 12 +--- .../components/styles/aetheriaEpubReader.scss | 5 +- 6 files changed, 25 insertions(+), 79 deletions(-) diff --git a/Aetheria/static/fiction/the-burden-of-proof.epub b/Aetheria/static/fiction/the-burden-of-proof.epub index d4c775ac9280d6f4fb580c8874bbf390069b73a4..e21d65fa4ed6f6726d41d16861d81d36db07e0cb 100644 GIT binary patch delta 4835 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 delta 34719 zcmaJ~3A|0!_kZ`^bKZOA*^}X!%21x(V0cpUOi39+ibNDo%B(aHMaWNsZk&=SiXoqaFIK=}d~;HTQ>_Cx`O=q5R}f3xB8u z4q>32Y#gJ|o737jFp!fp0u7AfKRMSqxk>h*2z$_&Jt)K;ugD%vm_2CB9*3AcXv`jm zm_2CB9*3AcXv`jmm_2CB9*3AcXu=+}_~x_%3@!9o!#ScxnUA5>sC2d>>Nu^O_)TtW zR)9R&)Go$0KKC5rPM(N7S-me-KKC5rPF6&otnM$)zI^UEKKESCJhI9uQ4qh)ah^frJmV1O88pr_4so7A<2>UK=NUA~Gia1&9N|2(hP$y#>UB=D zBz;hXK4?rI6rzt;q>m;{A2gcarw4~PJ)m)VaEQ|b8m9+`I6a_AdO*YU#LoiN{3KOSgequE6%?Y1 zSEPz2OcgYyibG5lG^UC}OcgYyibG5lG^UC}OcgYyibG5lG@%L_tt5`{O0tFr6KZ@g zp%orXI6~BMT68eQd!$|Gv`Eeo6qzGvJV#Jyj(Ej6q6yCtG@c_4@f<{fn=(l0q(RK53{pbl z(e&QQyCsbKw@VjQp(Hm<2ZvzVKncx+5~xB62Za)-LJ0?j5~xB62Za)-LJ0?%QXilM z=QOSsPy#KPB~XPD9^;fHREQFq2_;a45)KL_P=yi>3MEj55)KL_P=yi>5+xT|VBHBH zDmks1h9qIr>0|4o9b~ z8)(Vsph|SmI65j69nB;ks1h9qW!*rPb;ChfH&A8WaFEt5{yOl4 zBUpIiVN6emZVsrz6ExsiK^5*eDBM96?l>siK^5*eDBM96?l>siK}~W8l@z4%`N${5;UGADl|(plUaf)v&2D}C8#n>9F$ptDzn5v znI)()OB|$G#;caF?nSxgUW6)BLX9Yqf|SUNDWS@gXpkwP%9Lo3DWS@gXpkwP%9Lo3 z6OSq^Bs!=P9glw8TDhoDbTpIbph|Qcl<1&JbR4AU@j4}Yn;SLebGoqJt{YaZsXzD$#LJqJt{Yagd_BxuD99!$H|`pvsQJK|boxQjR)Q;ixM} zr7=G1M8&g?RGN=Nmhf23V>BHKNe|Yd!GzcjKJ&*vFV#NYI<1163x}kn1hiyIK$Vo> z8A>TZg;IiMk`hoQB{(Q40aa3hgOUv>Yq5&#-NrhbE2>C>XoT5Tr(anIene=94Vp*gJFG0R3T|K_EbPYah;6G5w z!%>Lzw4p(*# z3OfgdorA*8L4n+6%6kQLj zl;&0AE4rmsIZ!$i7L%ODtCp$3`xvtZ8-z)K!X$9ZAWyh52~d~>C`=G1m30HOr3cCb_U4p_cL7{oUl~+VQ`T|+`$cu^W2?60*fCGZU0YTw_ zpin@#QuW72m&xQ$u2Ax*&|X1>HVZ1WTTmeYDzslvp$!v%3|zpCH5YdcD(nIjb^!{z z0EJzE!Y)8T7cF^T%_@USfoQxU7_W%sCE_b0@xKv>SKO?!v1-QO0V+_jOa&CC0t!18vybaDDnbc_Urk)SXV6h?x=(+7nz zh$uR9;`P86+*g5n!oEOZU!ah$7${ILHR<|jnVRu-;2X-4eS^Zj zL1EvZuy0Vs7Lk*3i||weS*S1L1CYuuuo9fCn)R_6yl3l z;49S)NrjWMhCF3sim9kY;V>}5VUksiHXH^NJb+tbwcqBqOrc!)um*(>Yf$*G289o6Q24M0g%0cZ=YWLAK}LeYNKhCF3L`-w zWc+skKwUBb6b69808khJ3Ii&aliI}_3DhM6Kw$tV3;>0>fx_IH01}FiLxI9bP#6gc zBSB##D2(h5NT@JIg2G5p7zqj^L182)j2sC_s2@gx!bngU2?`@YVI(MoL=@dkW1!&e zl&+)7WF{YCVEXtXmG7vek#EwP#7C8@9Uoh+8Z2xs=(xana>akc|86SRW^!#Ff3#dJ z_%>?onsNh+;k8n=G3D?&qftQ=uX`Hr=C7%G*8c8_VreNU#nR#hW6oQ=W zuN;1dH6UeM)28r`D4FrihvdsE@0tQURT}qZmjN4Y{OUZfe{+#6h0#x^Gx6Sfdz3Q;itjshAby(|g9% z_rM&*K$>aD-Q9+#n%NgNF0uKK)RYty18J@y$9nB`y>U-FOl-*SS3Jwvv?2K#vZ3z* z*CcGsH`ApG>j$z^+K;wQC0sHyOBf_#J)D2LuYC@C!Vz^{D9b zBxr5jTmN$XjJ4kVW%;^pN(zcUmz*3;tk#GM4t;kyqH$ie0`OdrwzgnQcdH;)%=)NG z4E_Oy-N4?@&P6v%c z#h6neu=%d3sn+^ja{ZakYrqu6m{S$7`3Ex}u_~a^O}{;OF_@wlbE*I~9~id_`OmxF zy|OE;Jc===)o1gOPc^cZ@$$dc*XRJAQH(jQJex0AP}k!Ad#_bJR)8rAnd3oAtGPJOS`W)zb{M^#h6=5+UCO+sb({K z|J{4rKgn22I^i=Q)B9REEcfhbxBeV#FBI}li_{hOG46~}Uwv*dKRhNfVOTUJ1%-_1 zM(Y)fit_q*K6o>q&#UvZSC#_4rTBc_cgRgMXU7*Si~n2>{t*Se&=;YyboU*;XYE%% z9JSWs{gXHB8U~gqzO}3zTJQL=omECF7EYP^7~~bjx0Z!N>(aj$n&YMa)Q?XN0=Fo> zu`C-Jk2`m%<$7S}xx;#aC5mq?s|MDIS7MPYtK`a$t)JZml8WM+%c`OIp<oOsnS zd<4(f`t+76z!}B2mPJGB5~U-j9RFPWz2h~jD}p5oS;Ng#wjmmyEg$*87+*N|irV%H z6Ce{4XoV9qYenuz zGyFEqZT1;(LqRu{@snrrz^$5D-RoLAGB^=y5P9A#MwcDYqxXSB6oZk4_Ax87BAu-@ z89!%Xi-S4f2ZPeTH@;gkzdWzz%^Gc8Z{aI5rv(>)2>vBH+5j-zQn#E zkzTI1{SKEmN#$K@SGR?%pcnv`2m>x29;s{sbiDWNr}QHl2H@&o`zyvq8mF4WFn!9^ zy>&SufGdLmzyl9P zezO1z%G8R#0Nznd1g-`K-20!%1Pkze#maY117j2d;0F$_1h)V4u}B}Y?Zzj%%)Aov zi9+TvFsCA5>t1sr)vayt+{A4;=fE?HPe%%X0b}Pyj`8B(_eGtaZ-Co3_=uRYIP!`) zB080+H+>-dBMLi$4=l;Wzi3Hhe4^zGk>*x~ztPmqxEhR63_up20Ap82YFh{J#?`I! zs)8|!0m$kTzc=FsW4}dX>0m$kTVEV?$bykFmhuY-3V2ok_vib!0W=rH} zPR8=n7rm7Qc3GT^zjj0}u%1vanz>+%eJ83+KTwf-;-@t$c(3e)1GCQF$YoYWhR#0G zQI|J-7|WIu(+3UsB$8)=?sl4dsh@-pBqwGP6z{$)Be8OSF;j z41Or)Lo*5SYX8@*G5e$FA9MuH?Qz?e(e#v*XgVE%XCl!*t!JSzh2PAzA1W&2YnbFV zcsd%Lo;Y1BTGLv;rM1?bdItES@H`P9+kgP&%0`D;fb%PFZ@3eTQ4Bz~0Rbjdjy`T} z@v9DZZM+MNQ4Bz~0Y|72jhigK^Zue|D}ybHv6o#y_DkzVzqSs|9UbyEw1=l66a$bm zkO0#fMoT;9k@oOkGwvM)6@+2{at0E>%ZgrNmEFmWEw@ewV-y15OEWnG$^OIK=rxx8 z_p3_{=@0Z#$UX-4dVY#MW!0`Bo~fe&epk^=cwOLKEOzpXd>5x4!<-n947~#86BG zsV@S2cT;qdHMwgV=S|S>G%$kH7XgM8M&V71|30Vps_hT=gG`{92vT4K_+VJHBWL61 z@5Z#)4RhU%*{G6$51ZRk%@faMr%LTx0so4Ep5XTe@Sc*>vCMmYbhLtZc2u-5k$PA3 zesha_>b>FH*{4ELPHfae6Qa*px07LCUYva)Bn8C^Mwzi-%Nk9NTG?4Q;_G|c00PBA zQF<&?qVYq~Di*BWh5LqI0uU4nMoF?^9UqOBP4(&zm3J4<^m@D05P+aqFxrbYtk3Ld zD=XUE=`VjdJOYp1AQp^vqy_WpOpI3b);%3lIvN#Bn#WAos%cJm--LI)x zOL{-l7$Tuq(PVK9tl3M^h!rh%{QUi41nl*64YO!JDIJOyNG+H7jdxEF}fSVk^t! zLlb?sM>j@ki3Yu!e)C|M+hAUzR=cA8%_E!hceNWngMUO3cm8{{W!`JMqZPfscEJiQ zd_TI%x}S9J>%LtcASf10R>;7*ev0Rc|59?ysa~7+z&=H>V6s96mj6|Bv2`5PYL|Oy zCPvcHWQ7cD|H0_bR+bM8m@~_Mx`Y+NxycF{*!#z#wXFlCL66j1#*u z-E5#2T2$+>7?uV_W)9zvB)98oCw5<=Ps!L=Yh~JBI@64j)hdDf zHjyjmLuOH|7*Ya+*pU$%VP)sO35zfN78s#e2w8nXw8)IDvlf0r=gU*S0BaNrAq!84 zQ*~o2Emorr74G>J@`z#~WX%b&pkeGAPUL{gE4-Qm^mBMaJ=Z99VVb!g{XQV~&G#WN zin#J$lq~bQWW^>Y-p`A{x#fRGdAQBfj+!Dz#GSt*Tzm+!N-+<^_6-+6-8X( zCtkjB#H(bK_2z7I3lk6Zjs4H6#$|O{Y7dW>~S>9_sz&YKVhkp*W!i)o6I^A*+__uXt)#cR-+6C{C(DCC0`svQFE&-(|en z0uU$`iW6&4hwh1$w_^30a=1%3K%iJCK8$>nm)kQ^F;VjVSS53em3^*UuZQ6=0ELil zPV#-j^9ERVT5KZSVD^7pp}{8*7R(H+rJ#E1n#X`va0}-hsTU|P6SgUyL3#umCu8y5@%)zs_{>&NnhxtnMn{By^ zP_!nm#12_G$UO0%`KlNl{Mj_$K*+x8hFGSlirJs9TmA`D1d1WYACY(=y-PO7Hc&}) zA5yj23`p$^Dv9{KjCAk10_U0dh6^esKHCy|+j>7&eL&vl>%bI6+~Oy8+3EoB05CYQ zXs6mpQwI#XxHn`8#X`we_fZ$^jWxDrJY#3+jNbr(VxeTK`=}c}j=f{8{PISp?)w1{ zC>Bb#x{qr3MGU@g@=x`QnbY=P3v)uTP_osNC~wWdSjEKu4#ccioL8=$zUn%Ng<>IP zyC;!}j3Y7l+Rwiy%-ftc?m~!#VxeTa`>6KE)sZ>sX!oA&0D(d%mwqD8U;6r>4nM`t zGlkH<;NWxi7YguOZh2p_92c0^YryZZXZhpXl*aqZ)ByK2_;|SJY^<_%yS)C*9WPgd ziJ}N?|82>#`0p8&yklo$g^9K?2Ws7)?2(k$htC8AiiMKp_fbvKotvy1)VGbluU8G2 zpjaqbejhcblmo92{aAzE-nhYjLk%}VWGKt;qo!4GGOQ!%;8(wOX$tI6tXQ)AK5Ef< zPBAOi%=b3-dlwKW7D|@hN3Fi6 zsauOnljHSIA`{nK=#(<+f7_N_-^~DmC=`x<%TMQqS+JY3oqpENn}5sy*1ZAtD2AdO z9tQPRQwP2g_P=Y{^}>b~#{hw1q2z4v>Gf#oe8O*JTSou)*%B~b!cP_OmFGO`PJd_H zU)S%1+YpMlqc)qWP_|CB=FB&%!nN zmW`G!1QI9~k>+Aud7v}W%5crkRxf!M9(qwM>wK}EUg)gnhu%F$_Fga=>T5Kg=;N!T zCx#DoZni$`A6j?qx)NZ4lIdMD)Umz;_DbL8+?)7tl=F=h`;CtOt)C7oQ4E0g@KOf6 zI?nmZT9Fd5GSB*-Py7h9eFZRQymOb8i-u3PKmG}LM==p-=L(?g1I~+9nQnY|*p!>V z7{vf+(+c3tX%5`6{qNhlclqntj$n*p0JL8j;644cTQyPkVaG8GTK&{@RsA1P`17Fc zDp4vwuGVzp9rrhz32(|!IEw$}Fej?glg_<-+MaIl=Fp9>0vmaq`ZY*Ty!o`V(tP4C z{H|QzC18M(={@tbTBd&UoSBJXOC0-0QA3+WxAlkVp%{QH69M)uch0x6UUJiy?H7PC ziUG(n5#Zb^=Vp_R*6-E&a4XoN7<*YIvLCq4nQrVWyqmSXBd|v?_OeK1fBZE#ugq6~ zbJjHLv1D?BC_=zO3Z57vP{mu@I6(LVWavGu1k4d#qaNU4YaX$=?icFxggu`#t%=#VzqeyW71;EmHp9`ydQ|38? z6E9`EubCzMuxYUo8v%e~fjEx_G_;xfA1gEMTfWp--Bl{{A6oF}r-Xi}-&(q(T)%{e z-5)(M3D~1pp*WpZr~-cEU?((Z=!-p;u3&m;m zQQqv%?gaYqbzg}^HNJxg-*IO1ySQJQ<3H!ar`{}52mZ(LrQU%q?gNSQdbwLoQnzP6 zde;U>D2hZ!fD|VIzPiDMS0nyUI+hG9Th9Mk4VN<_q&NvNbbt%LsqqmLx>o;$AKO$6 zDNaI+D|AO&#aXG{SC6N|98oM*Qk;bN;dXbQb*7%FHD*T>IO|X>gcK(swvBeH^Lf`G zHUA0z$Vcx=_gs{oD1E29-<){|SGK)i0%Qaw)BEub{>vZqV7k;>b*Fo8;`n%|bn_bI zf%)~XFpnZhfMk&X1rNCPqsZZc<{gHCcN7yrl1PA4)7-XZo$h&TPlLl?i(>30g=F94 zVRwVE|Hf@`>khC*G4_%`vj6dMcY(1lJns=N8*EXGy`+!qXFchrS~DJZ?wzLQ%udc& zo^lBA)O>fmwGsa~9)Ht3Xdu8m<&b^G61S-p;K46iEl!2?M`1?EU%~MTba~$0Zxukn z){V~&0rDvR1d`wIlK)1lTzH@9Kcv66ZTKIh!8eKl*lT?ITKAC2&|_1-y#E()j$-WX zCGP&3yW85>_xJ0vX(ikPQ4GLZV()`5qSX^EH@TDerRnnaJFhmcRTAH9bthX7;8z{~ zwb=s@8$~MI|0uoGduW?GHZgd&+usmwTj}5d|7$4Ts0a|o1lYdUg-^A9N}lP^zv1PO z4iqbdP$tBIPu%KepN#8T;qDiJ4~hklvLwLY``u}V)A+YeHvAflQ7nMeB>|>=>u$7` z>4~A2-FOae+9(!6Dw7cHkGj8Lvw?T%4{j5@j{d=ILuaM=+gRR~AKdI#*lV!4)!fDT z#ZppGO4Faz;{P`(^4b*mg+sS%+gv<+z@3fn8Zvg+?cJ`5L@TBw|L~TVecY`ct?`K0 z<+xiF;|#_Bete-f{kU5P|NBM!?~k8}f7v*rk%oTX*YrQY@0(QE#Y?>ATh-p5OOX%@GRS^JPLii1yZ;a4S+Y)fu7eYrk$qYZ4qy zbxA1n`ps6ff|C+WwMZ!YdONLX&4Qz;ZV83{W3LtM{bV%NDxvHfe`-a`500j~CKP(i z*H*Lvr(|xbUqadUJz}EeWCur6-4hDE@uU^)$7D3qKT))(s+}Qw@7ClJtBwlg`iZ~D zv_&?3&Iu-_8Y~q0!)U}Cxj0gheuRz%RU6A!byz6-$;H_|AESj7lxnz8=%eMVXjo7b zO?6x-`;X7FqJnrhNe_S4#1(Q<>UMD=Va^yQtcX!oC%XsT&L+4t*dMGL7C z)x)9CH{4)FEBB*BQ%xMo{>1@Sw2&%MJsk?YZip4_nPfE8)S>LJ9%)4jsS?%Wq0sa1 zw4&wwBy&@39?Jfc@g`bs$gyL3KZ+hB6DKm-d-;T0fht6`f~ZK_rb;AwJrGxQTDITwxWepi0T$m=&AFpX#P2(`bCs|{b#LcAr+$9M-=+C6;?F= z98nD<%D(LyD_Tf}sD=`S_7YY!{~S?0CCdKD8zx%VIik8u6uQuD1GK3q)qkSw=X`BN3#lm8h@#M~zq6wG z6{UJml>Pb>R2 zmz8QM@9Shm3n?qr-J;NMTw_J^%SyGkDEmp*n`mKWrMg`d+P%q&=9iV}cqv*| ztqRG$T2|3da;gtTg~%I0kV^Cmhv2$WJuwRW{+$fQw;cX+wCada=DqJTu|ld!b;l_1 zOAne@eo?937-c@}VG}E)rcAR;(LAntg1{BM4^GM>gle5pfhx>n+x&mYpz5Jf=ygjN zP5m8y3RU}zvcGDD6)hx(s)t6QhrVn@^OLCBXO#V$uUXMTvZ(rK6nf@cRy2QSsumh$ zfA0<}TFA~+%`^&q;yo*xzcW=Mjj~_A&qNE`nWn3zXoZ~jdDJ@)iT-n^sa6{mu*bIq z`L~^>+HMs1@G%Cfou-;@l=+q)O{|bAQ4Kf>y!{Uo%P$huf1}LzL}His_O~X#n(ruj|qbDN|nt0N@TTjWehw9-`{zqTVfPDIC zO7J~GHS{QSr4Eda0ovRoR6mchFYIhZ3#nbz+@sLlueGB2#jARIl>G%aTG2wP*L3?7 zP35KmF)wRWwA#d?_gmEhqylak65|)PV+Y+e_Trm|3>Z0f(C92~5DHGMY7A1omX8o$ z<^JJ}GCdJrYpDhy1z&wy+sPX>WKh2Qwce7Ovh2t`nY~hfG_X#DYp`lP|Zk+#P{<9fLYYe z6LLJL4khL5j^_e=K|Ydi(}{}eR8sKqF9yJwN=TKc_9f-(yR`wngopo;g16cg0B0&8RbrZ+idIP{_^BIxhhy(z@3LLdV*fZ- zRCAOfboAo@Ct3XG*n`g%)iI@fo%>RJ6**Vn^|v`!ROgg}Uv)T?N=U`1b}Hqo=kWkv zuuMqBuNc)A z0AE4{pKNGLt8Od>-&{5TPE^7kbWEpK(c)cHF~FBM>9ibis)0+9$gU9p%;LYnA6&4i zwM+RbeSUy1$Vc+MEagM>c`5ktivr+GC8S_g2bl78MP7g}q2d>;Y6nyBL6-!;nMz2( zszx#8YkWa~FQMW;Yn#@wqARWs*W@T?>{sE&QwCyQT3`RUnNHc z_!27qI-2gaqU(6^ILG@txsIxhO+~r!zJMrM)Mgd($f26sl&?(>2KWNT$=8pxj;hN| z!J9oC0B0&8>!^C)l&`u^1o#pv{yM5AI0Y{=F96O|Le^2W#wlO(mjw6{D*g>b^~foB z`4s_hrV?@kQC)M&*MgS=dm0Ack8(7qb~+X1j*S6PvaqEqJEWvk zqn+}#dP{&WU<}U8Gl}ZDQ*ikGbI{$FegznON~wN4isCZBO|+@l}8?q2ia6>fuxH_~8IJQwb?4)zYVYl|LTfOQ`tIB&xwr!3X~w04FM8 z&m^k*Px(6YXMiuE;=hbB4S_|gJN2C7J(8?$)eNYj>~P$mlKPj|z^X-1`C4Bxz!xwE zXQsMUub_f=t`GnxblA^TR0pB*HK}TVFQMXBw`wI+@MX0F;7lc?x>a+b@|E8(z?V?* zt6Oy$D){b;1K><0q`Fn_q4Jf}JiwPw@vB?4Au9NqRsnFL5?0-&N3m#mE@>O!%RBm` zJaMb`MMdKGP65Cy{vYuPJ_A)#qw>}DngCyr5BRmFDOlCrsNfmb2f&$1$Q@qwJStzq z`v>?EDt^JL=0^oTF*pFuR6+_?wL~gk{e}hj5-NVds@_NiA2K!o&QwAQRy9j1UwiKj z@Fi6If>nK!3f_Kl0Gz0V6|Cx~RK7~g2=FCT@HnQYLDg8P;Lv{=bk0Jh<%B#%n4Zg` zd#B-(0lvKKpJeZ-c1%rTVE{0TS|meAsAf&&tJre^z91jT7vz)=)xD|U>!73RAFqp; zO32<(y`9R}gKGkO2^D|usBTXM|6qLpoT-HD9n}k}d|mQZfG?qfduJHF%vQ~z3SMb@ z0Gz3W>>blTTC_@P!cXECZE-5bCsaxM$5-j9sZ>$e`2oZ7>92hSpQx(CRH4g$&gdAR z=?JA?gs28nW#1G2m^hN8Xdw%)x=j^27ybwmqA41#G(}U*rpmq@{NV{dTFBa}&Qpax zaK?&;i%HQ`)2Xt*O`94f_ zr7HiE%dma^zx_36O^5RDeS!dO}s?dGlZ-DyI{B<@BtVJ{5sX5vI^ILS)(W*kUyPP2Z_AR<< zZdKsi4h&Y`qN~;QUvcF`a6)hx-rct(N7VAxBv^O`IMb$W~BAuKek>J&2*vkynM61vRvt(Y$7n^hj zs1{mfzwk*bT1XaEJFP-5T4+V{v#6SBmHpnORWJ{uDQ~R=AQwkx3*~3H>_oQ zuT?|%^Zmzumg85o+o}LVHwe9d`6;C8yH)7Nwg|oCyGTmC>bO<*(|20YLQ=0|fsA zsm5G|o_boCC12N3)>T`svY+sq6)hy|szq0!fBD;r=4V|s=qmeMp!ist`@Omzb*`$ulGqJ>n6X$>yA1ICSFbd!)ZP;J91Zi~AmF0~N{f5cKf#0ve} zM44ssEfwtr)j_Q6hfTAhh0Id56D#!5N33Z6UQpe{%KqKiRI3;*sK!`d#2p3*w)1Px(I(7x#z& diff --git a/scripts/fiction/build_the_burden_of_proof_epub.py b/scripts/fiction/build_the_burden_of_proof_epub.py index 3635174..cdcb163 100644 --- a/scripts/fiction/build_the_burden_of_proof_epub.py +++ b/scripts/fiction/build_the_burden_of_proof_epub.py @@ -28,27 +28,6 @@ class Chapter: blocks: list[str] -@dataclass -class SpinePage: - chapter_index: int - page_index: int - title: str - movement: str - blocks: list[str] - - @property - def href(self) -> str: - if self.page_index == 1: - return f"text/chapter-{self.chapter_index:02}.xhtml" - return f"text/chapter-{self.chapter_index:02}-p{self.page_index:02}.xhtml" - - @property - def item_id(self) -> str: - if self.page_index == 1: - return f"chapter-{self.chapter_index}" - return f"chapter-{self.chapter_index}-p{self.page_index}" - - def inline_markup(text: str) -> str: placeholders: dict[str, str] = {} @@ -113,40 +92,6 @@ def chapter_xhtml(chapter: Chapter) -> str: return xhtml_page(chapter.title, body, "chapter") -def paginate_chapters(chapters: list[Chapter], target_chars: int = 1400) -> list[SpinePage]: - pages: list[SpinePage] = [] - for chapter_index, chapter in enumerate(chapters, 1): - chunks: list[list[str]] = [] - current: list[str] = [] - current_chars = 0 - for block in chapter.blocks: - block_chars = len(block) - if current and current_chars + block_chars > target_chars: - chunks.append(current) - current = [] - current_chars = 0 - current.append(block) - current_chars += block_chars - if current: - chunks.append(current) - for page_index, blocks in enumerate(chunks, 1): - pages.append(SpinePage(chapter_index, page_index, chapter.title, chapter.movement, blocks)) - return pages - - -def page_xhtml(page: SpinePage) -> str: - paragraphs = [] - for block in page.blocks: - rendered = inline_markup(block) - css_class = " class=\"pov\"" if re.fullmatch(r"[^<]+", rendered) else "" - paragraphs.append(f"{rendered}

") - header = "" - if page.page_index == 1: - header = f'

{html.escape(page.movement)}

{html.escape(page.title)}

' - body = header + "\n".join(paragraphs) - return xhtml_page(page.title, body, "chapter") - - def modified_timestamp(source: Path) -> str: epoch = int(os.environ.get("SOURCE_DATE_EPOCH", source.stat().st_mtime)) return datetime.fromtimestamp(epoch, timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") @@ -154,13 +99,12 @@ def modified_timestamp(source: Path) -> str: def build(source: Path, output: Path) -> None: title, chapters = parse_manuscript(source) - pages = paginate_chapters(chapters) output.parent.mkdir(parents=True, exist_ok=True) chapter_items = "\n".join( - f'' - for page in pages + f'' + for i in range(1, len(chapters) + 1) ) - spine = "\n".join(f'' for page in pages) + spine = "\n".join(f'' for i in range(1, len(chapters) + 1)) nav_points = "\n".join( f'
  • {html.escape(chapter.title)}
  • ' for i, chapter in enumerate(chapters, 1) @@ -191,8 +135,8 @@ def build(source: Path, output: Path) -> None: archive.writestr("EPUB/toc.ncx", ncx) archive.writestr("EPUB/styles/book.css", css) archive.writestr("EPUB/text/title.xhtml", title_page) - for page in pages: - archive.writestr(f"EPUB/{page.href}", page_xhtml(page)) + for i, chapter in enumerate(chapters, 1): + archive.writestr(f"EPUB/text/chapter-{i:02}.xhtml", chapter_xhtml(chapter)) validate(output, len(chapters)) diff --git a/site/quartz.layout.ts b/site/quartz.layout.ts index 7c5e76a..3cf1dae 100644 --- a/site/quartz.layout.ts +++ b/site/quartz.layout.ts @@ -25,19 +25,28 @@ export const defaultContentPageLayout: PageLayout = { showCurrentPage: false, showRoot: false, }), - condition: (page) => page.fileData.slug !== "index", + condition: (page) => page.fileData.slug !== "index" && page.fileData.slug !== "Fiction/The-Burden-of-Proof", }), Component.ConditionalRender({ component: Component.ArticleTitle(), - condition: (page) => !page.fileData.slug?.endsWith("/index") && page.fileData.slug !== "index", + condition: (page) => + !page.fileData.slug?.endsWith("/index") && + page.fileData.slug !== "index" && + page.fileData.slug !== "Fiction/The-Burden-of-Proof", }), Component.ConditionalRender({ component: AetheriaAuthorMeta(), - condition: (page) => !page.fileData.slug?.endsWith("/index") && page.fileData.slug !== "index", + condition: (page) => + !page.fileData.slug?.endsWith("/index") && + page.fileData.slug !== "index" && + page.fileData.slug !== "Fiction/The-Burden-of-Proof", }), Component.ConditionalRender({ component: Component.ContentMeta(), - condition: (page) => !page.fileData.slug?.endsWith("/index") && page.fileData.slug !== "index", + condition: (page) => + !page.fileData.slug?.endsWith("/index") && + page.fileData.slug !== "index" && + page.fileData.slug !== "Fiction/The-Burden-of-Proof", }), Component.ConditionalRender({ component: AetheriaEpubReader(), diff --git a/site/quartz/components/AetheriaEpubReader.tsx b/site/quartz/components/AetheriaEpubReader.tsx index 3fd76b2..77dee16 100644 --- a/site/quartz/components/AetheriaEpubReader.tsx +++ b/site/quartz/components/AetheriaEpubReader.tsx @@ -7,7 +7,7 @@ export default (() => { const AetheriaEpubReader: QuartzComponent = () => (
    @@ -32,7 +32,7 @@ export default (() => {