TODO
diff --git a/output/assets/scripts/bigger-picture.min.js b/output/assets/scripts/bigger-picture.min.js
new file mode 100644
index 0000000..93bcaa7
--- /dev/null
+++ b/output/assets/scripts/bigger-picture.min.js
@@ -0,0 +1 @@
+var BiggerPicture=function(){function t(){}const n=t=>t;function e(t,n){for(const e in n)t[e]=n[e];return t}function o(t){return t()}function r(t){t.forEach(o)}function i(t){return"function"==typeof t}function c(t,n){return t!=t?n==n:t!==n}function s(n,e,o){n.u.t.push(((n,...e)=>{if(null==n)return t;const o=n.subscribe(...e);return o.unsubscribe?()=>o.unsubscribe():o})(e,o))}function u(n){return n&&i(n.destroy)?n.destroy:t}let l=()=>globalThis.performance.now(),a=t=>requestAnimationFrame(t);const p=new Set;function f(t){p.forEach((n=>{n.c(t)||(p.delete(n),n.f())})),0!==p.size&&a(f)}function d(t){let n;return 0===p.size&&a(f),{promise:new Promise((e=>{p.add(n={c:t,f:e})})),abort(){p.delete(n)}}}function m(t,n){t.appendChild(n)}function b(t,n,e){t.insertBefore(n,e||null)}function h(t){t.parentNode.removeChild(t)}function g(t){return document.createElement(t)}function x(){return document.createTextNode("")}function v(t,n,e,o){return t.addEventListener(n,e,o),()=>t.removeEventListener(n,e,o)}function w(t,n,e){null==e?t.removeAttribute(n):t.getAttribute(n)!==e&&t.setAttribute(n,e)}function y(t,n,e,o){null===e?t.style.removeProperty(n):t.style.setProperty(n,e)}function $(t,n,e){t.classList[e?"add":"remove"](n)}let k,_,M=0,S={};function z(t,n,e,o,r,i,c,s=0){const u=16.666/o;let l="{\n";for(let t=0;1>=t;t+=u){const o=n+(e-n)*i(t);l+=100*t+`%{${c(o,1-o)}}\n`}const a=l+`100% {${c(e,1-e)}}\n}`,p=`_bp_${Math.round(1e9*Math.random())}_${s}`;if(!S[p]){if(!k){const t=g("style");document.head.appendChild(t),k=t.sheet}S[p]=1,k.insertRule(`@keyframes ${p} ${a}`,k.cssRules.length)}const f=t.style.animation||"";return t.style.animation=`${f?f+", ":""}${p} ${o}ms linear ${r}ms 1 both`,M+=1,p}function I(t,n){t.style.animation=(t.style.animation||"").split(", ").filter(n?t=>0>t.indexOf(n):t=>-1===t.indexOf("_bp")).join(", "),n&&!--M&&a((()=>{if(M)return;let t=k.cssRules.length;for(;t--;)k.deleteRule(t);S={}}))}function P(t){_=t}const T=[],A=[],N=[],O=[],C=Promise.resolve();let E=0;function R(t){N.push(t)}const j=new Set;let q,F=0;function J(){const t=_;do{for(;T.length>F;){const t=T[F];F++,P(t),B(t.u)}for(P(null),T.length=0,F=0;A.length;)A.pop()();for(let t=0;N.length>t;t+=1){const n=N[t];j.has(n)||(j.add(n),n())}N.length=0}while(T.length);for(;O.length;)O.pop()();E=0,j.clear(),P(t)}function B(t){if(null!==t.l){t.update(),r(t.g);const n=t.v;t.v=[-1],t.l&&t.l.p(t.$,n),t.k.forEach(R)}}function D(){return q||(q=Promise.resolve(),q.then((()=>{q=null}))),q}function K(t,n,e){t.dispatchEvent(((t,n,e=0)=>{const o=document.createEvent("CustomEvent");return o.initCustomEvent(t,e,0,n),o})(`${n?"intro":"outro"}${e}`))}const L=new Set;let W;function X(){W={r:0,c:[],p:W}}function Y(){W.r||r(W.c),W=W.p}function G(t,n){t&&t.i&&(L.delete(t),t.i(n))}function H(t,n,e,o){if(t&&t.o){if(L.has(t))return;L.add(t),W.c.push((()=>{L.delete(t),o&&(e&&t.d(1),o())})),t.o(n)}}const Q={duration:0};function U(e,o,r){let c,s,u=o(e,r),a=0,p=0;function f(){c&&I(e,c)}function m(){const{delay:o=0,duration:r=300,_:i=n,M:m=t,css:b}=u||Q;b&&(c=z(e,0,1,r,o,i,b,p++)),m(0,1);const h=l()+o,g=h+r;s&&s.abort(),a=1,R((()=>K(e,1,"start"))),s=d((t=>{if(a){if(t>=g)return m(1,0),K(e,1,"end"),f(),a=0;if(t>=h){const n=i((t-h)/r);m(n,1-n)}}return a}))}let b=0;return{start(){b||(b=1,I(e),i(u)?(u=u(),D().then(m)):m())},S(){b=0},end(){a&&(f(),a=0)}}}function V(e,o,c){let s,u=o(e,c),a=1;const p=W;function f(){const{delay:o=0,duration:i=300,_:c=n,M:f=t,css:m}=u||Q;m&&(s=z(e,1,0,i,o,c,m));const b=l()+o,h=b+i;R((()=>K(e,0,"start"))),d((t=>{if(a){if(t>=h)return f(0,1),K(e,0,"end"),--p.r||r(p.c),0;if(t>=b){const n=c((t-b)/i);f(1-n,n)}}return a}))}return p.r+=1,i(u)?D().then((()=>{u=u(),f()})):f(),{end(t){t&&u.M&&u.M(1,0),a&&(s&&I(e,s),a=0)}}}function Z(t){t&&t.c()}function tt(t,n,e,c){const{l:s,I:u,t:l,k:a}=t.u;s&&s.m(n,e),c||R((()=>{const n=u.map(o).filter(i);l?l.push(...n):r(n),t.u.I=[]})),a.forEach(R)}function nt(t,n){const e=t.u;null!==e.l&&(r(e.t),e.l&&e.l.d(n),e.t=e.l=null,e.$=[])}function et(n,e,o,i,c,s,u,l=[-1]){const a=_;P(n);const p=n.u={l:null,$:null,P:s,update:t,T:c,bound:{},I:[],t:[],A:[],g:[],k:[],context:new Map(e.context||(a?a.u.context:[])),N:{},v:l,O:0,root:e.target||a.u.root};u&&u(p.root);let f=0;p.$=o?o(n,e.P||{},((t,e,...o)=>{const r=o.length?o[0]:e;return p.$&&c(p.$[t],p.$[t]=r)&&(!p.O&&p.bound[t]&&p.bound[t](r),f&&((t,n)=>{-1===t.u.v[0]&&(T.push(t),E||(E=1,C.then(J)),t.u.v.fill(0)),t.u.v[n/31|0]|=1<
{const t=e.indexOf(n);-1!==t&&e.splice(t,1)}}C(t){this.R&&0!==Object.keys(t).length&&(this.u.O=1,this.R(t),this.u.O=0)}}function rt(t){const n=t-1;return n*n*n+1}function it(t,{delay:n=0,duration:e=400,_:o=rt,x:r=0,y:i=0,opacity:c=0}={}){const s=getComputedStyle(t),u=+s.opacity,l="none"===s.transform?"":s.transform,a=u*(1-c);return{delay:n,duration:e,_:o,css(t,n){return`\n\t\t\ttransform: ${l} translate(${(1-t)*r}px, ${(1-t)*i}px);\n\t\t\topacity: ${u-a*n}`}}}const ct=[];function st(n,e=t){let o;const r=new Set;function i(t){if(c(n,t)&&(n=t,o)){const t=!ct.length;for(const t of r)t[1](),ct.push(t,n);if(t){for(let t=0;ct.length>t;t+=2)ct[t][0](ct[t+1]);ct.length=0}}}return{set:i,update(t){i(t(n))},subscribe(c,s=t){const u=[c,s];return r.add(u),1===r.size&&(o=e(i)||t),c(n),()=>{r.delete(u),0===r.size&&(o(),o=null)}}}}function ut(t,n){if(t===n||t!=t)return()=>t;const e=typeof t;if(Array.isArray(t)){const e=n.map(((n,e)=>ut(t[e],n)));return t=>e.map((n=>n(t)))}if("number"===e){const e=n-t;return n=>t+n*e}}function lt(t,o={}){const r=st(t);let i,c=t;function s(s,u){if(null==t)return r.set(t=s),Promise.resolve();c=s;let a=i,p=0,{delay:f=0,duration:m=400,_:b=n,interpolate:h=ut}=e(e({},o),u);if(0===m)return a&&(a.abort(),a=null),r.set(t=c),Promise.resolve();const g=l()+f;let x;return i=d((n=>{if(g>n)return 1;p||(x=h(t,s),"function"==typeof m&&(m=m(t,s)),p=1),a&&(a.abort(),a=null);const e=n-g;return e>m?(r.set(t=s),0):(r.set(t=x(b(e/m))),1)})),i.promise}return{set:s,update(n,e){return s(n(c,t),e)},subscribe:r.subscribe}}const at=st(0),pt=globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches,ft=t=>({_:rt,duration:pt?0:t}),dt=t=>!t.thumb||`url(${t.thumb})`,mt=(t,n)=>{if(n){"string"==typeof n&&(n=JSON.parse(n));for(const e in n)t.setAttribute(e,n[e])}};function bt(t){let n,e,o;return{c(){n=g("div"),n.innerHTML=' ',w(n,"class","bp-load"),y(n,"background-image",dt(t[0]))},m(t,e){b(t,n,e),o=1},p(t,e){1&e&&y(n,"background-image",dt(t[0]))},i(t){o||(e&&e.end(1),o=1)},o(t){t&&(e=V(n,it,{duration:480})),o=0},d(t){t&&h(n),t&&e&&e.end()}}}function ht(n){let e,o;return{c(){e=g("div"),w(e,"class","bp-load"),y(e,"background-image",dt(n[0]))},m(t,n){b(t,e,n)},p(t,n){1&n&&y(e,"background-image",dt(t[0]))},i(t){o||R((()=>{o=U(e,it,{duration:480}),o.start()}))},o:t,d(t){t&&h(e)}}}function gt(t){let n,e,o=!t[1]&&bt(t),r=t[2]&&ht(t);return{c(){o&&o.c(),n=x(),r&&r.c(),e=x()},m(t,i){o&&o.m(t,i),b(t,n,i),r&&r.m(t,i),b(t,e,i)},p(t,[i]){t[1]?o&&(X(),H(o,1,1,(()=>{o=null})),Y()):o?(o.p(t,i),2&i&&G(o,1)):(o=bt(t),o.c(),G(o,1),o.m(n.parentNode,n)),t[2]?r?(r.p(t,i),4&i&&G(r,1)):(r=ht(t),r.c(),G(r,1),r.m(e.parentNode,e)):r&&(r.d(1),r=null)},i(t){G(o),G(r)},o(t){H(o)},d(t){o&&o.d(t),t&&h(n),r&&r.d(t),t&&h(e)}}}function xt(t,n,e){let o;s(t,at,(t=>e(2,o=t)));let{j:r}=n,{loaded:i}=n;return t.R=t=>{"j"in t&&e(0,r=t.j),"loaded"in t&&e(1,i=t.loaded)},[r,i,o]}class vt extends ot{constructor(t){super(),et(this,t,xt,gt,c,{j:0,loaded:1})}}function wt(t){let n,e,o,i,c,s;return{c(){n=g("img"),w(n,"sizes",e=t[8].sizes||t[1]+"px"),w(n,"alt",t[7].alt)},m(e,o){b(e,n,o),i=1,c||(s=[u(t[21].call(null,n)),v(n,"error",t[27])],c=1)},p(t,o){(!i||2&o[0]&&e!==(e=t[8].sizes||t[1]+"px"))&&w(n,"sizes",e)},i(t){i||(o&&o.end(1),i=1)},o(t){o=V(n,it,{}),i=0},d(t){t&&h(n),t&&o&&o.end(),c=0,r(s)}}}function yt(t){let n,e;return n=new vt({P:{j:t[7],loaded:t[2]}}),{c(){Z(n.u.l)},m(t,o){tt(n,t,o),e=1},p(t,e){const o={};4&e[0]&&(o.loaded=t[2]),n.C(o)},i(t){e||(G(n.u.l,t),e=1)},o(t){H(n.u.l,t),e=0},d(t){nt(n,t)}}}function $t(t){let n,e,o,i,c,s,l=`translate3d(${t[0][0]/-2+t[6][0]}px, ${t[0][1]/-2+t[6][1]}px, 0)`,a=t[2]&&wt(t),p=t[3]&&yt(t);return{c(){n=g("div"),e=g("div"),a&&a.c(),o=x(),p&&p.c(),w(e,"class","bp-img"),y(e,"width",t[0][0]+"px"),y(e,"height",t[0][1]+"px"),$(e,"bp-drag",t[4]),$(e,"bp-canzoom",t[11]>1&&t[12]>t[0][0]),y(e,"background-image",dt(t[7])),y(e,"transform",l),w(n,"class","bp-img-wrap"),$(n,"bp-close",t[5])},m(r,l){b(r,n,l),m(n,e),a&&a.m(e,null),m(e,o),p&&p.m(e,null),i=1,c||(s=[u(t[20].call(null,e)),v(n,"wheel",t[15]),v(n,"pointerdown",t[16]),v(n,"pointermove",t[17]),v(n,"pointerup",t[19]),v(n,"pointercancel",t[18])],c=1)},p(t,r){t[2]?a?(a.p(t,r),4&r[0]&&G(a,1)):(a=wt(t),a.c(),G(a,1),a.m(e,o)):a&&(X(),H(a,1,1,(()=>{a=null})),Y()),t[3]?p?(p.p(t,r),8&r[0]&&G(p,1)):(p=yt(t),p.c(),G(p,1),p.m(e,null)):p&&(X(),H(p,1,1,(()=>{p=null})),Y()),(!i||1&r[0])&&y(e,"width",t[0][0]+"px"),(!i||1&r[0])&&y(e,"height",t[0][1]+"px"),(!i||16&r[0])&&$(e,"bp-drag",t[4]),(!i||6145&r[0])&&$(e,"bp-canzoom",t[11]>1&&t[12]>t[0][0]),65&r[0]&&l!==(l=`translate3d(${t[0][0]/-2+t[6][0]}px, ${t[0][1]/-2+t[6][1]}px, 0)`)&&y(e,"transform",l),(!i||32&r[0])&&$(n,"bp-close",t[5])},i(t){i||(G(a),G(p),i=1)},o(t){H(a),H(p),i=0},d(t){t&&h(n),a&&a.d(),p&&p.d(),c=0,r(s)}}}function kt(t,n,e){let o,r,i,c;s(t,at,(t=>e(26,i=t)));let{P:u}=n,{q:l}=n,{j:a,F:p,J:f,next:d,zoomed:m,container:b}=u;s(t,m,(t=>e(25,o=t)));let h,g,x,v,w,y,$,k,_,M,S,z=a.maxZoom||p.maxZoom||10,I=u.B(a),P=I[0],T=0;const A=+a.width,N=[],O=new Map,C=lt(I,ft(400));s(t,C,(t=>e(0,c=t)));const E=lt([0,0],ft(400));s(t,E,(t=>e(6,r=t)));const R=([t,n],o=c)=>{const r=(o[0]-b.w)/2,i=(o[1]-b.h)/2;return 0>r?t=0:t>r?l?(t=w?r+(t-r)/10:r)>r+20&&e(4,w=f()):t=r:-r>t&&(l?-r-20>(t=w?-r-(-r-t)/10:-r)&&e(4,w=d()):t=-r),0>i?n=0:n>i?n=i:-i>n&&(n=-i),[t,n]};function j(t=z,n){if(i)return;const o=I[0]*z;let s=c[0]+c[0]*t,u=c[1]+c[1]*t;if(t>0)s>o&&(s=o,u=I[1]*z),s>A&&(s=A,u=+a.height);else if(I[0]>s)return C.set(I),E.set([0,0]);let{x:l,y:p,width:f,height:d}=v.getBoundingClientRect();const m=n?n.clientX-l-f/2:0,b=n?n.clientY-p-d/2:0;l=s/f*-m+m,p=u/d*-b+b;const h=[s,u];C.set(h).then((()=>{e(1,P=Math.round(Math.max(P,s)))})),E.set(R([r[0]+l,r[1]+p],h))}Object.defineProperty(a,"zoom",{configurable:1,get(){return o},set(t){return j(t?z:-z)}});const q=t=>O.delete(t.pointerId);return t.R=t=>{"q"in t&&e(23,l=t.q)},t.u.update=()=>{if(16777217&t.u.v[0]&&m.set(c[0]-10>I[0]),117440512&t.u.v[0]&&i&&o&&!p.intro){const t=ft(480);E.set([0,0],t),C.set(I,t),e(5,S=1)}},[c,P,h,g,w,S,r,a,p,m,b,z,A,C,E,t=>{p.inline&&!o||(t.preventDefault(),j(t.deltaY/-300,t))},t=>{2!==t.button&&(t.preventDefault(),e(4,w=1),O.set(t.pointerId,t),$=t.clientX,k=t.clientY,_=r[0],M=r[1])},t=>{if(O.size>1)return e(4,w=0),p.noPinch?.(b.el)||(t=>{const[n,e]=O.set(t.pointerId,t).values(),o=Math.hypot(n.clientX-e.clientX,n.clientY-e.clientY);x=x||{clientX:(n.clientX+e.clientX)/2,clientY:(n.clientY+e.clientY)/2},j(((T||o)-o)/-35,x),T=o})(t);if(!w)return;let n=t.clientX,r=t.clientY;y=N.push({x:n,y:r})>2,n-=$,r-=k,o||(-90>r&&e(4,w=!p.noClose&&u.close()),30>Math.abs(r)&&(n>40&&e(4,w=f()),-40>n&&e(4,w=d()))),o&&y&&!i&&E.set(R([_+n,M+r]),{duration:0})},q,function(t){if(q(t),x&&(e(4,w=T=0),x=O.size?x:null),w){if(e(4,w=0),t.target===this&&!p.noClose)return u.close();if(y){const[t,n,e]=N.slice(-3);Math.hypot(n.x-e.x,n.y-e.y)>5&&E.set(R([r[0]-5*(t.x-e.x),r[1]-5*(t.y-e.y)]))}else p.onImageClick?.(b.el,a)||j(o?-z:z,t);y=0,N.length=0}},t=>{v=t,u.D((()=>{e(24,I=u.B(a)),!p.inline&&l||(C.set(I),E.set([0,0]))})),u.K(a).then((()=>{e(2,h=1),u.L()})),setTimeout((()=>{e(3,g=!h)}),250)},t=>{mt(t,a.attr),t.srcset=a.img},u,l,I,o,i,t=>p.onError?.(b,a,t)]}class _t extends ot{constructor(t){super(),et(this,t,kt,$t,c,{P:22,q:23},null,[-1,-1])}}function Mt(t){let n,e,o,i,c,s;return o=new vt({P:{j:t[2],loaded:t[0]}}),{c(){n=g("div"),e=g("iframe"),Z(o.u.l),w(e,"allow","autoplay; fullscreen"),w(e,"title",t[2].title),w(n,"class","bp-if"),y(n,"width",t[1][0]+"px"),y(n,"height",t[1][1]+"px")},m(r,l){b(r,n,l),m(n,e),tt(o,n,null),i=1,c||(s=[u(t[3].call(null,e)),v(e,"load",t[5])],c=1)},p(t,[e]){const r={};1&e&&(r.loaded=t[0]),o.C(r),(!i||2&e)&&y(n,"width",t[1][0]+"px"),(!i||2&e)&&y(n,"height",t[1][1]+"px")},i(t){i||(G(o.u.l,t),i=1)},o(t){H(o.u.l,t),i=0},d(t){t&&h(n),nt(o),c=0,r(s)}}}function St(t,n,e){let o,r,{P:i}=n;const{j:c}=i,s=()=>e(1,r=i.B(c));return s(),i.D(s),[o,r,c,t=>{mt(t,c.attr),t.src=c.iframe},i,()=>e(0,o=1)]}class zt extends ot{constructor(t){super(),et(this,t,St,Mt,c,{P:4})}}function It(t){let n,e,o,r,i;return e=new vt({P:{j:t[2],loaded:t[0]}}),{c(){n=g("div"),Z(e.u.l),w(n,"class","bp-vid"),y(n,"width",t[1][0]+"px"),y(n,"height",t[1][1]+"px"),y(n,"background-image",dt(t[2]))},m(c,s){b(c,n,s),tt(e,n,null),o=1,r||(i=u(t[3].call(null,n)),r=1)},p(t,[r]){const i={};1&r&&(i.loaded=t[0]),e.C(i),(!o||2&r)&&y(n,"width",t[1][0]+"px"),(!o||2&r)&&y(n,"height",t[1][1]+"px")},i(t){o||(G(e.u.l,t),o=1)},o(t){H(e.u.l,t),o=0},d(t){t&&h(n),nt(e),r=0,i()}}}function Pt(t,n,e){let o,r,{P:i}=n;const{j:c,F:s,container:u}=i,l=()=>e(1,r=i.B(c));return l(),i.D(l),[o,r,c,t=>{let n;const r=(t,e)=>{Array.isArray(e)||(e=JSON.parse(e));for(const o of e){n||(n=document.createElement(o.type?.includes("audio")?"audio":"video"),mt(n,{controls:1,autoplay:1,playsinline:1,tabindex:"0"}),mt(n,c.attr));const e=document.createElement(t);mt(e,o),"source"==t&&(e.onError=t=>s.onError?.(u,c,t)),n.append(e)}};r("source",c.sources),r("track",c.tracks||[]),n.oncanplay=()=>e(0,o=1),t.append(n)},i]}class Tt extends ot{constructor(t){super(),et(this,t,Pt,It,c,{P:4})}}function At(n){let e,o,i,s,l,a,p,f,d,x=n[6].i,y=jt(n),k=n[0].length>1&&qt(n);return{c(){e=g("div"),o=g("div"),y.c(),s=g("div"),l=g("button"),k&&k.c(),w(l,"class","bp-x"),w(l,"title","Close"),w(l,"aria-label","Close"),w(s,"class","bp-controls"),w(e,"class","bp-wrap"),$(e,"bp-zoomed",n[10]),$(e,"bp-inline",n[8]),$(e,"bp-small",n[7]),$(e,"bp-noclose",n[5].noClose)},m(t,r){b(t,e,r),m(e,o),y.m(e,null),m(e,s),m(s,l),k&&k.m(s,null),p=1,f||(d=[v(l,"click",n[1]),u(n[14].call(null,e))],f=1)},p(n,o){64&o[0]&&c(x,x=n[6].i)?(X(),H(y,1,1,t),Y(),y=jt(n),y.c(),G(y,1),y.m(e,s)):y.p(n,o),n[0].length>1?k?k.p(n,o):(k=qt(n),k.c(),k.m(s,null)):k&&(k.d(1),k=null),(!p||1024&o[0])&&$(e,"bp-zoomed",n[10]),(!p||256&o[0])&&$(e,"bp-inline",n[8]),(!p||128&o[0])&&$(e,"bp-small",n[7]),(!p||32&o[0])&&$(e,"bp-noclose",n[5].noClose)},i(t){p||(i&&i.end(1),G(y),a&&a.end(1),p=1)},o(t){t&&(i=V(o,it,{duration:480})),H(y),t&&(a=V(s,it,{})),p=0},d(t){t&&h(e),t&&i&&i.end(),y.d(t),k&&k.d(),t&&a&&a.end(),f=0,r(d)}}}function Nt(n){let e,o=(n[6].html??n[6].element.outerHTML)+"";return{c(){e=g("div"),w(e,"class","bp-html")},m(t,n){b(t,e,n),e.innerHTML=o},p(t,n){64&n[0]&&o!==(o=(t[6].html??t[6].element.outerHTML)+"")&&(e.innerHTML=o)},i:t,o:t,d(t){t&&h(e)}}}function Ot(n){let e,o;return e=new zt({P:{P:n[13]()}}),{c(){Z(e.u.l)},m(t,n){tt(e,t,n),o=1},p:t,i(t){o||(G(e.u.l,t),o=1)},o(t){H(e.u.l,t),o=0},d(t){nt(e,t)}}}function Ct(n){let e,o;return e=new Tt({P:{P:n[13]()}}),{c(){Z(e.u.l)},m(t,n){tt(e,t,n),o=1},p:t,i(t){o||(G(e.u.l,t),o=1)},o(t){H(e.u.l,t),o=0},d(t){nt(e,t)}}}function Et(t){let n,e;return n=new _t({P:{P:t[13](),q:t[7]}}),{c(){Z(n.u.l)},m(t,o){tt(n,t,o),e=1},p(t,e){const o={};128&e[0]&&(o.q=t[7]),n.C(o)},i(t){e||(G(n.u.l,t),e=1)},o(t){H(n.u.l,t),e=0},d(t){nt(n,t)}}}function Rt(t){let n,e,o,r=t[6].caption+"";return{c(){n=g("div"),w(n,"class","bp-cap")},m(t,e){b(t,n,e),n.innerHTML=r,o=1},p(t,e){(!o||64&e[0])&&r!==(r=t[6].caption+"")&&(n.innerHTML=r)},i(t){o||(e&&e.end(1),o=1)},o(t){e=V(n,it,{duration:200}),o=0},d(t){t&&h(n),t&&e&&e.end()}}}function jt(t){let n,e,o,i,c,s,u,l,a;const p=[Et,Ct,Ot,Nt],f=[];function d(t,n){return t[6].img?0:t[6].sources?1:t[6].iframe?2:3}e=d(t),o=f[e]=p[e](t);let m=t[6].caption&&Rt(t);return{c(){n=g("div"),o.c(),m&&m.c(),s=x(),w(n,"class","bp-inner")},m(o,r){b(o,n,r),f[e].m(n,null),m&&m.m(o,r),b(o,s,r),u=1,l||(a=[v(n,"pointerdown",t[20]),v(n,"pointerup",t[21])],l=1)},p(t,r){let i=e;e=d(t),e===i?f[e].p(t,r):(X(),H(f[i],1,1,(()=>{f[i]=null})),Y(),o=f[e],o?o.p(t,r):(o=f[e]=p[e](t),o.c()),G(o,1),o.m(n,null)),t[6].caption?m?(m.p(t,r),64&r[0]&&G(m,1)):(m=Rt(t),m.c(),G(m,1),m.m(s.parentNode,s)):m&&(X(),H(m,1,1,(()=>{m=null})),Y())},i(e){u||(G(o),R((()=>{c&&c.end(1),i=U(n,t[12],1),i.start()})),G(m),u=1)},o(e){H(o),i&&i.S(),c=V(n,t[12],0),H(m),u=0},d(t){t&&h(n),f[e].d(),t&&c&&c.end(),m&&m.d(t),t&&h(s),l=0,r(a)}}}function qt(t){let n,e,o,i,c,s=`${t[4]+1} / ${t[0].length}`;return{c(){n=g("div"),e=g("button"),o=g("button"),w(n,"class","bp-count"),w(e,"class","bp-prev"),w(e,"title","Previous"),w(e,"aria-label","Previous"),w(o,"class","bp-next"),w(o,"title","Next"),w(o,"aria-label","Next")},m(r,u){b(r,n,u),n.innerHTML=s,b(r,e,u),b(r,o,u),i||(c=[v(e,"click",t[2]),v(o,"click",t[3])],i=1)},p(t,e){17&e[0]&&s!==(s=`${t[4]+1} / ${t[0].length}`)&&(n.innerHTML=s)},d(t){t&&h(n),t&&h(e),t&&h(o),i=0,r(c)}}}function Ft(t){let n,e,o=t[0]&&At(t);return{c(){o&&o.c(),n=x()},m(t,r){o&&o.m(t,r),b(t,n,r),e=1},p(t,e){t[0]?o?(o.p(t,e),1&e[0]&&G(o,1)):(o=At(t),o.c(),G(o,1),o.m(n.parentNode,n)):o&&(X(),H(o,1,1,(()=>{o=null})),Y())},i(t){e||(G(o),e=1)},o(t){H(o),e=0},d(t){o&&o.d(t),t&&h(n)}}}function Jt(t,n,e){let o,{items:r}=n,{target:i}=n;const c=document.documentElement;let u,l,a,p,f,d,m,b,h;const g=()=>!h.img&&!h.sources&&!h.iframe;let x;const v=t=>x=t,w={},y=st(0);s(t,y,(t=>e(10,o=t)));const $=()=>{l.onClose?.(w.el,h),at.set(1),e(0,r=null),p?.focus({preventScroll:1})},k=()=>M(u-1),_=()=>M(u+1),M=t=>{m=t-u,e(4,u=S(t))},S=t=>(t+r.length)%r.length,z=t=>{const{key:n,shiftKey:e}=t;if("Escape"===n)!l.noClose&&$();else if("ArrowRight"===n)_();else if("ArrowLeft"===n)k();else if("Tab"===n){const{activeElement:n}=document;if(e||!n.controls){t.preventDefault();const{focusWrap:o=w.el}=l,r=[...o.querySelectorAll("*")].filter((t=>t.tabIndex>=0));let i=r.indexOf(n);i+=r.length+(e?-1:1),r[i%r.length].focus()}}},I=({width:t=1920,height:n=1080})=>{const{scale:e=.99}=l,o=Math.min(1,w.w/t*e,w.h/n*e);return[Math.round(t*o),Math.round(n*o)]},P=()=>{if(r){const t=r[S(u+1)],n=r[S(u-1)];!t.preload&&T(t),!n.preload&&T(n)}},T=t=>{if(t.img){const n=document.createElement("img");return n.sizes=l.sizes||I(t)[0]+"px",n.srcset=t.img,t.preload=1,n.decode().catch((t=>{}))}};return t.R=t=>{"items"in t&&e(0,r=t.items),"target"in t&&e(15,i=t.target)},t.u.update=()=>{786545&t.u.v[0]&&r&&(e(6,h=r[u]),a&&l.onUpdate?.(w.el,h))},[r,$,k,_,u,l,h,f,d,b,o,y,(t,n)=>a&&r?it(t,{x:(m>0?20:-20)*(n?1:-1),duration:250}):(e(18,a=n),l.intro?it(t,{y:n?10:-10}):(t=>{let n;if(g()){const e=t.firstChild.firstChild;n=[e.clientWidth,e.clientHeight]}else n=I(h);const e=(h.element||p).getBoundingClientRect(),o=e.left-(w.w-e.width)/2,r=e.top-(w.h-e.height)/2,i=e.width/n[0],c=e.height/n[1];return{duration:480,_:rt,css:(t,n)=>`transform:translate3d(${o*n}px, ${r*n}px, 0) scale3d(${i+t*(1-i)}, ${c+t*(1-c)}, 1)`}})(t)),()=>({j:h,B:I,K:T,L:P,F:l,J:k,next:_,close:$,D:v,zoomed:y,container:w}),t=>{let n;e(19,w.el=t,w),l.onOpen?.(w.el,h),d||globalThis.addEventListener("keydown",z);const o=new ResizeObserver((t=>{n&&(e(19,w.w=t[0].contentRect.width,w),e(19,w.h=t[0].contentRect.height,w),e(7,f=769>w.w),g()||x?.(),l.onResize?.(w.el,h)),n=1}));return o.observe(t),{destroy(){o.disconnect(),globalThis.removeEventListener("keydown",z),at.set(0),c.classList.remove("bp-lock"),l.onClosed?.()}}},i,t=>{e(5,l=t),e(8,d=l.inline),!d&&c.scrollHeight>c.clientHeight&&c.classList.add("bp-lock"),p=document.activeElement,e(19,w.w=i.offsetWidth,w),e(19,w.h=i===document.body?globalThis.innerHeight:i.clientHeight,w),e(7,f=769>w.w),e(4,u=l.position||0),e(0,r=[]);for(let t=0;(l.items.length||1)>t;t++){let n=l.items[t]||l.items;"dataset"in n?r.push({element:n,i:t,...n.dataset}):(n.i=t,r.push(n),n=n.element),l.el&&l.el===n&&e(4,u=t)}},M,a,w,t=>e(9,b=t.target),function(t){2!==t.button&&t.target===this&&b===this&&!l.noClose&&$()}]}class Bt extends ot{constructor(t){super(),et(this,t,Jt,Ft,c,{items:0,target:15,open:16,close:1,J:2,next:3,setPosition:17},null,[-1,-1])}get items(){return this.u.$[0]}get target(){return this.u.$[15]}get open(){return this.u.$[16]}get close(){return this.u.$[1]}get J(){return this.u.$[2]}get next(){return this.u.$[3]}get setPosition(){return this.u.$[17]}}return t=>new Bt({...t,P:t})}();
diff --git a/output/assets/scripts/gallery-init.js b/output/assets/scripts/gallery-init.js
new file mode 100644
index 0000000..8d06245
--- /dev/null
+++ b/output/assets/scripts/gallery-init.js
@@ -0,0 +1,138 @@
+document.addEventListener('DOMContentLoaded', () => {
+ if (typeof window.BiggerPicture !== 'function') {
+ console.error('[gallery-init] BiggerPicture not found. Check script path.');
+ return;
+ }
+
+ // 1) Wrap Org-exported images so theyβre clickable
+ const imgs = document.querySelectorAll('.figure img, img.org-svg');
+ imgs.forEach((img) => {
+ if (img.closest('a')) return; // already wrapped
+ const a = document.createElement('a');
+ const href = img.currentSrc || img.src;
+ a.href = href;
+ a.dataset.img = href; // lets BP pre-size/raster slides
+ a.dataset.alt = img.alt || '';
+ const setDims = () => {
+ a.dataset.width = img.naturalWidth || img.width || 1920;
+ a.dataset.height = img.naturalHeight || img.height || 1080;
+ };
+ if (img.complete) setDims(); else img.addEventListener('load', setDims);
+ img.style.cursor = 'zoom-in';
+ img.parentElement.insertBefore(a, img);
+ a.appendChild(img);
+ });
+
+ // 2) One global BP instance
+ const bp = BiggerPicture({ target: document.body });
+
+ // SVG pan/zoom handle
+ let activePanZoom = null;
+ const destroyPanZoom = () => { try { activePanZoom?.destroy(); } catch(_){} activePanZoom = null; };
+
+ // 3) Build galleries per content container
+ const containers = document.querySelectorAll('main, article, .content, body');
+ containers.forEach((container) => {
+ const links = Array.from(container.querySelectorAll('.figure a, a:has(img.org-svg)'));
+ if (!links.length) return;
+
+ // Start the lightbox on click
+ links.forEach((link, index) => {
+ link.addEventListener('click', (e) => {
+ e.preventDefault();
+ document.querySelectorAll(".theme-toggle").forEach(el => {
+ el.classList.add("hidden");
+ });
+
+
+ bp.open({
+ // IMPORTANT: pass the anchor ELEMENTS, not custom objects
+ items: links,
+ el: link,
+ caption: (el) => el.querySelector('img')?.alt || el.title || '',
+ maxZoom: 40, // for raster images (PNG/JPG); SVG handled separately
+
+ // Fade-out polish + cleanup
+ onClose(containerEl) {
+ destroyPanZoom();
+ if (containerEl) containerEl.classList.add('bp-fadeout');
+ const themeToggle = document.querySelector(".theme-toggle");
+ if (themeToggle) {
+ themeToggle.classList.remove("hidden");
+ }
+ },
+
+ // Called once after open and on every slide change
+ onOpen(containerEl) { enhanceSVG(containerEl); },
+ onUpdate(containerEl){ enhanceSVG(containerEl); }
+ });
+ });
+ });
+ });
+
+ // 4) If current slide is an SVG, swap to inline + enable svg-pan-zoom
+ async function enhanceSVG(containerEl) {
+ try {
+ destroyPanZoom();
+
+ const imgEl = containerEl.querySelector('.bp-img img');
+ if (!imgEl) return;
+
+ const src = imgEl.currentSrc || imgEl.src || '';
+ const isSVG = src.toLowerCase().endsWith('.svg');
+ const htmlLayer = containerEl.querySelector('.bp-html');
+ if (!isSVG || !htmlLayer) {
+ // ensure any previous holder is removed and bitmap is visible
+ const old = htmlLayer?.querySelector('.bp-svg-holder');
+ if (old) old.remove();
+ imgEl.style.visibility = '';
+ return;
+ }
+
+ // Create/clear holder
+ let holder = htmlLayer.querySelector('.bp-svg-holder');
+ if (!holder) {
+ holder = document.createElement('div');
+ holder.className = 'bp-svg-holder';
+ holder.style.maxWidth = '95vw';
+ holder.style.maxHeight = '95vh';
+ htmlLayer.appendChild(holder);
+ }
+ holder.innerHTML = '';
+
+ // Hide the bitmap so only the inline SVG shows
+ imgEl.style.visibility = 'hidden';
+
+ // Inline the SVG
+ const res = await fetch(src, { cache: 'force-cache' });
+ const text = await res.text();
+ holder.innerHTML = text;
+
+ const svg = holder.querySelector('svg');
+ if (!svg) { imgEl.style.visibility = ''; return; }
+
+ svg.style.maxWidth = '95vw';
+ svg.style.maxHeight = '95vh';
+ svg.style.display = 'block';
+
+ if (typeof window.svgPanZoom === 'function') {
+ activePanZoom = svgPanZoom(svg, {
+ zoomEnabled: true,
+ controlIconsEnabled: true,
+ fit: true,
+ center: true,
+ minZoom: 0.05,
+ maxZoom: 400, // effectively "unlimited"
+ zoomScaleSensitivity: 0.25,
+ dblClickZoomEnabled: true
+ });
+ // Keep wheel inside lightbox
+ holder.addEventListener('wheel', (e) => e.stopPropagation(), { passive: true });
+ } else {
+ console.warn('[gallery-init] svg-pan-zoom not loaded');
+ }
+ } catch (err) {
+ console.error('[gallery-init] SVG enhance failed:', err);
+ }
+ }
+});
diff --git a/output/assets/scripts/svg-pan-zoom.min.js b/output/assets/scripts/svg-pan-zoom.min.js
new file mode 100644
index 0000000..844f34d
--- /dev/null
+++ b/output/assets/scripts/svg-pan-zoom.min.js
@@ -0,0 +1,27 @@
+// svg-pan-zoom v3.6.2
+// https://github.com/bumbu/svg-pan-zoom
+/* Copyright 2009-2010 Andrea Leofreddi
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this
+ list of conditions and the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+!function s(r,a,l){function u(e,t){if(!a[e]){if(!r[e]){var o="function"==typeof require&&require;if(!t&&o)return o(e,!0);if(h)return h(e,!0);var n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}var i=a[e]={exports:{}};r[e][0].call(i.exports,function(t){return u(r[e][1][t]||t)},i,i.exports,s,r,a,l)}return a[e].exports}for(var h="function"==typeof require&&require,t=0;tthis.options.maxZoom*n.zoom&&(t=this.options.maxZoom*n.zoom/this.getZoom());var i=this.viewport.getCTM(),s=e.matrixTransform(i.inverse()),r=this.svg.createSVGMatrix().translate(s.x,s.y).scale(t).translate(-s.x,-s.y),a=i.multiply(r);a.a!==i.a&&this.viewport.setCTM(a)},i.prototype.zoom=function(t,e){this.zoomAtPoint(t,a.getSvgCenterPoint(this.svg,this.width,this.height),e)},i.prototype.publicZoom=function(t,e){e&&(t=this.computeFromRelativeZoom(t)),this.zoom(t,e)},i.prototype.publicZoomAtPoint=function(t,e,o){if(o&&(t=this.computeFromRelativeZoom(t)),"SVGPoint"!==r.getType(e)){if(!("x"in e&&"y"in e))throw new Error("Given point is invalid");e=a.createSVGPoint(this.svg,e.x,e.y)}this.zoomAtPoint(t,e,o)},i.prototype.getZoom=function(){return this.viewport.getZoom()},i.prototype.getRelativeZoom=function(){return this.viewport.getRelativeZoom()},i.prototype.computeFromRelativeZoom=function(t){return t*this.viewport.getOriginalState().zoom},i.prototype.resetZoom=function(){var t=this.viewport.getOriginalState();this.zoom(t.zoom,!0)},i.prototype.resetPan=function(){this.pan(this.viewport.getOriginalState())},i.prototype.reset=function(){this.resetZoom(),this.resetPan()},i.prototype.handleDblClick=function(t){var e;if((this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),this.options.controlIconsEnabled)&&-1<(t.target.getAttribute("class")||"").indexOf("svg-pan-zoom-control"))return!1;e=t.shiftKey?1/(2*(1+this.options.zoomScaleSensitivity)):2*(1+this.options.zoomScaleSensitivity);var o=a.getEventPoint(t,this.svg).matrixTransform(this.svg.getScreenCTM().inverse());this.zoomAtPoint(e,o)},i.prototype.handleMouseDown=function(t,e){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),r.mouseAndTouchNormalize(t,this.svg),this.options.dblClickZoomEnabled&&r.isDblClick(t,e)?this.handleDblClick(t):(this.state="pan",this.firstEventCTM=this.viewport.getCTM(),this.stateOrigin=a.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()))},i.prototype.handleMouseMove=function(t){if(this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&this.options.panEnabled){var e=a.getEventPoint(t,this.svg).matrixTransform(this.firstEventCTM.inverse()),o=this.firstEventCTM.translate(e.x-this.stateOrigin.x,e.y-this.stateOrigin.y);this.viewport.setCTM(o)}},i.prototype.handleMouseUp=function(t){this.options.preventMouseEventsDefault&&(t.preventDefault?t.preventDefault():t.returnValue=!1),"pan"===this.state&&(this.state="none")},i.prototype.fit=function(){var t=this.viewport.getViewBox(),e=Math.min(this.width/t.width,this.height/t.height);this.zoom(e,!0)},i.prototype.contain=function(){var t=this.viewport.getViewBox(),e=Math.max(this.width/t.width,this.height/t.height);this.zoom(e,!0)},i.prototype.center=function(){var t=this.viewport.getViewBox(),e=.5*(this.width-(t.width+2*t.x)*this.getZoom()),o=.5*(this.height-(t.height+2*t.y)*this.getZoom());this.getPublicInstance().pan({x:e,y:o})},i.prototype.updateBBox=function(){this.viewport.simpleViewBoxCache()},i.prototype.pan=function(t){var e=this.viewport.getCTM();e.e=t.x,e.f=t.y,this.viewport.setCTM(e)},i.prototype.panBy=function(t){var e=this.viewport.getCTM();e.e+=t.x,e.f+=t.y,this.viewport.setCTM(e)},i.prototype.getPan=function(){var t=this.viewport.getState();return{x:t.x,y:t.y}},i.prototype.resize=function(){var t=a.getBoundingClientRectNormalized(this.svg);this.width=t.width,this.height=t.height;var e=this.viewport;e.options.width=this.width,e.options.height=this.height,e.processCTM(),this.options.controlIconsEnabled&&(this.getPublicInstance().disableControlIcons(),this.getPublicInstance().enableControlIcons())},i.prototype.destroy=function(){var e=this;for(var t in this.beforeZoom=null,this.onZoom=null,this.beforePan=null,this.onPan=null,(this.onUpdatedCTM=null)!=this.options.customEventsHandler&&this.options.customEventsHandler.destroy({svgElement:this.svg,eventsListenerElement:this.options.eventsListenerElement,instance:this.getPublicInstance()}),this.eventListeners)(this.options.eventsListenerElement||this.svg).removeEventListener(t,this.eventListeners[t],!this.options.preventMouseEventsDefault&&h);this.disableMouseWheelZoom(),this.getPublicInstance().disableControlIcons(),this.reset(),c=c.filter(function(t){return t.svg!==e.svg}),delete this.options,delete this.viewport,delete this.publicInstance,delete this.pi,this.getPublicInstance=function(){return null}},i.prototype.getPublicInstance=function(){var o=this;return this.publicInstance||(this.publicInstance=this.pi={enablePan:function(){return o.options.panEnabled=!0,o.pi},disablePan:function(){return o.options.panEnabled=!1,o.pi},isPanEnabled:function(){return!!o.options.panEnabled},pan:function(t){return o.pan(t),o.pi},panBy:function(t){return o.panBy(t),o.pi},getPan:function(){return o.getPan()},setBeforePan:function(t){return o.options.beforePan=null===t?null:r.proxy(t,o.publicInstance),o.pi},setOnPan:function(t){return o.options.onPan=null===t?null:r.proxy(t,o.publicInstance),o.pi},enableZoom:function(){return o.options.zoomEnabled=!0,o.pi},disableZoom:function(){return o.options.zoomEnabled=!1,o.pi},isZoomEnabled:function(){return!!o.options.zoomEnabled},enableControlIcons:function(){return o.options.controlIconsEnabled||(o.options.controlIconsEnabled=!0,s.enable(o)),o.pi},disableControlIcons:function(){return o.options.controlIconsEnabled&&(o.options.controlIconsEnabled=!1,s.disable(o)),o.pi},isControlIconsEnabled:function(){return!!o.options.controlIconsEnabled},enableDblClickZoom:function(){return o.options.dblClickZoomEnabled=!0,o.pi},disableDblClickZoom:function(){return o.options.dblClickZoomEnabled=!1,o.pi},isDblClickZoomEnabled:function(){return!!o.options.dblClickZoomEnabled},enableMouseWheelZoom:function(){return o.enableMouseWheelZoom(),o.pi},disableMouseWheelZoom:function(){return o.disableMouseWheelZoom(),o.pi},isMouseWheelZoomEnabled:function(){return!!o.options.mouseWheelZoomEnabled},setZoomScaleSensitivity:function(t){return o.options.zoomScaleSensitivity=t,o.pi},setMinZoom:function(t){return o.options.minZoom=t,o.pi},setMaxZoom:function(t){return o.options.maxZoom=t,o.pi},setBeforeZoom:function(t){return o.options.beforeZoom=null===t?null:r.proxy(t,o.publicInstance),o.pi},setOnZoom:function(t){return o.options.onZoom=null===t?null:r.proxy(t,o.publicInstance),o.pi},zoom:function(t){return o.publicZoom(t,!0),o.pi},zoomBy:function(t){return o.publicZoom(t,!1),o.pi},zoomAtPoint:function(t,e){return o.publicZoomAtPoint(t,e,!0),o.pi},zoomAtPointBy:function(t,e){return o.publicZoomAtPoint(t,e,!1),o.pi},zoomIn:function(){return this.zoomBy(1+o.options.zoomScaleSensitivity),o.pi},zoomOut:function(){return this.zoomBy(1/(1+o.options.zoomScaleSensitivity)),o.pi},getZoom:function(){return o.getRelativeZoom()},setOnUpdatedCTM:function(t){return o.options.onUpdatedCTM=null===t?null:r.proxy(t,o.publicInstance),o.pi},resetZoom:function(){return o.resetZoom(),o.pi},resetPan:function(){return o.resetPan(),o.pi},reset:function(){return o.reset(),o.pi},fit:function(){return o.fit(),o.pi},contain:function(){return o.contain(),o.pi},center:function(){return o.center(),o.pi},updateBBox:function(){return o.updateBBox(),o.pi},resize:function(){return o.resize(),o.pi},getSizes:function(){return{width:o.width,height:o.height,realZoom:o.getZoom(),viewBox:o.viewport.getViewBox()}},destroy:function(){return o.destroy(),o.pi}}),this.publicInstance};var c=[];e.exports=function(t,e){var o=r.getSvg(t);if(null===o)return null;for(var n=c.length-1;0<=n;n--)if(c[n].svg===o)return c[n].instance.getPublicInstance();return c.push({svg:o,instance:new i(o,e)}),c[c.length-1].instance.getPublicInstance()}},{"./control-icons":1,"./shadow-viewport":2,"./svg-utilities":5,"./uniwheel":6,"./utilities":7}],5:[function(t,e,o){var l=t("./utilities"),s="unknown";document.documentMode&&(s="ie"),e.exports={svgNS:"http://www.w3.org/2000/svg",xmlNS:"http://www.w3.org/XML/1998/namespace",xmlnsNS:"http://www.w3.org/2000/xmlns/",xlinkNS:"http://www.w3.org/1999/xlink",evNS:"http://www.w3.org/2001/xml-events",getBoundingClientRectNormalized:function(t){if(t.clientWidth&&t.clientHeight)return{width:t.clientWidth,height:t.clientHeight};if(t.getBoundingClientRect())return t.getBoundingClientRect();throw new Error("Cannot get BoundingClientRect for SVG.")},getOrCreateViewport:function(t,e){var o=null;if(!(o=l.isElement(e)?e:t.querySelector(e))){var n=Array.prototype.slice.call(t.childNodes||t.children).filter(function(t){return"defs"!==t.nodeName&&"#text"!==t.nodeName});1===n.length&&"g"===n[0].nodeName&&null===n[0].getAttribute("transform")&&(o=n[0])}if(!o){var i="viewport-"+(new Date).toISOString().replace(/\D/g,"");(o=document.createElementNS(this.svgNS,"g")).setAttribute("id",i);var s=t.childNodes||t.children;if(s&&0div:first-child{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.75);animation:bp-fadein .48s cubic-bezier(.215,.61,.355,1)}.bp-vid audio{position:absolute;left:14px;width:calc(100% - 28px);bottom:14px;height:50px}.bp-inner{top:0;left:0;width:100%;height:100%;position:absolute;display:flex}.bp-html{display:contents}.bp-html>:first-child{margin:auto}.bp-img-wrap{top:0;left:0;width:100%;height:100%;position:absolute;contain:strict}.bp-img-wrap .bp-canzoom{cursor:zoom-in}.bp-img-wrap .bp-drag{cursor:grabbing}.bp-close{contain:layout size}.bp-img{position:absolute;top:50%;left:50%;user-select:none;background-size:100% 100%}.bp-img div,.bp-img img{position:absolute;top:0;left:0;width:100%;height:100%}.bp-img .bp-o{display:none}.bp-zoomed .bp-img:not(.bp-drag){cursor:grab}.bp-zoomed .bp-cap{opacity:0;animation:none!important}.bp-zoomed.bp-small .bp-controls{opacity:0}.bp-zoomed.bp-small .bp-controls button{pointer-events:none}.bp-controls{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;text-align:left;transition:opacity .3s;animation:bp-fadein .3s}.bp-controls button{pointer-events:auto;cursor:pointer;position:absolute;border:0;background:rgba(0,0,0,.15);opacity:.9;transition:all .1s;contain:content}.bp-controls button:hover{background-color:rgba(0,0,0,.2);opacity:1}.bp-controls svg{fill:#fff}.bp-count{position:absolute;color:rgba(255,255,255,.9);line-height:1;margin:16px;height:50px;width:100px}.bp-next,.bp-prev{top:50%;right:0;margin-top:-32px;height:64px;width:58px;border-radius:3px 0 0 3px}.bp-next:hover:before,.bp-prev:hover:before{transform:translateX(-2px)}.bp-next:before,.bp-prev:before{content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23fff'%3E%3Cpath d='M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z'/%3E%3C/svg%3E");position:absolute;left:7px;top:9px;width:46px;transition:all .2s}.bp-prev{right:auto;left:0;transform:scalex(-1)}.bp-x{top:0;right:0;height:55px;width:58px;border-radius:0 0 0 3px}.bp-x:before{content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32' fill='%23fff'%3E%3Cpath d='M24 10l-2-2-6 6-6-6-2 2 6 6-6 6 2 2 6-6 6 6 2-2-6-6z'/%3E%3C/svg%3E");position:absolute;width:37px;top:8px;right:10px}.bp-if,.bp-vid{position:relative;margin:auto;background:#000;background-size:100% 100%}.bp-if div,.bp-if iframe,.bp-if video,.bp-vid div,.bp-vid iframe,.bp-vid video{top:0;left:0;width:100%;height:100%;position:absolute;border:0}.bp-load{display:flex;background-size:100% 100%;overflow:hidden;z-index:1}.bp-bar{position:absolute;top:0;left:0;height:3px;width:100%;transform:translateX(-100%);background:rgba(255,255,255,.9);border-radius:0 3px 3px 0;animation:bp-bar 4s both}.bp-o,.bp-o:after{border-radius:50%;width:90px;height:90px}.bp-o{margin:auto;border:10px solid rgba(255,255,255,.2);border-left-color:rgba(255,255,255,.9);animation:bp-o 1s infinite linear}.bp-cap{position:absolute;bottom:2%;background:rgba(9,9,9,.8);color:rgba(255,255,255,.9);border-radius:4px;max-width:95%;line-height:1.3;padding:.6em 1.2em;left:50%;transform:translateX(-50%);width:fit-content;width:-moz-fit-content;display:table;transition:opacity .3s;animation:bp-fadein .2s}.bp-cap a{color:inherit}.bp-inline{position:absolute}.bp-lock{overflow-y:hidden}.bp-lock body{overflow:scroll}.bp-noclose .bp-x{display:none}.bp-noclose:not(.bp-zoomed){touch-action:pan-y}.bp-noclose:not(.bp-zoomed) .bp-img-wrap{cursor:zoom-in}@media (prefers-reduced-motion){.bp-wrap *{animation-duration:0s!important}}@media (max-width:500px){.bp-x{height:47px;width:47px}.bp-x:before{width:34px;top:6px;right:6px}.bp-next,.bp-prev{margin-top:-27px;height:54px;width:45px}.bp-next:before,.bp-prev:before{top:7px;left:2px;width:43px}.bp-o,.bp-o:after{border-width:6px;width:60px;height:60px}.bp-count{margin:12px 10px}}
+/*# sourceMappingURL=/sm/15e96278e1e731ce40eef8d6284cefc81b81dda67c3a0aa386ec893f183bd57f.map */
\ No newline at end of file
diff --git a/output/assets/styles/style.css b/output/assets/styles/style.css
index fba46da..6dffb3a 100644
--- a/output/assets/styles/style.css
+++ b/output/assets/styles/style.css
@@ -2,8 +2,6 @@
Theme variables
========================= */
:root{
- /* Layout */
-
--gutter: 2rem;
--margin: 420px;
--body-pad: 1rem;
@@ -14,21 +12,43 @@
);
--content-min: 60ch;
--content-max: 880px;
- /* Fullwidth media tuning */
--bleed: 48px;
--fullwidth-cap: 860px;
-
- /* Colors */
--bg: #faf9f6;
--fg: #000000;
--link: #1a0dab;
--heading: #004c99;
--code-bg: #f0f0f0;
--active-toc: #cacaca;
-
- /* Notes */
--note-color: #555;
--note-bg: transparent;
+ --border: #d7d7d7;
+ --chip-bg: #f0f0f0;
+ --chip-fg: #444;
+ --muted: #666;
+}
+
+
+/* =========================================
+ Dark mode β manual (data-theme) wins
+ ========================================= */
+
+:root[data-theme="dark"]{
+ --bg: #0f1115;
+ --fg: #e6e6e6;
+ --link: #8ab4ff;
+ --heading: #9ecbff;
+ --code-bg: #1a1d24;
+
+ --note-color: #c2c7cf;
+ --note-bg: transparent;
+
+ --border: #2a2f3a;
+ --chip-bg: #1f2330;
+ --chip-fg: #cfd3da;
+ --muted: #a9b0bb;
+ --active-toc: #313131;
+
}
/* =========================
@@ -46,11 +66,11 @@ h1, h2, h3{ color: var(--heading); }
a {
color: var(--link);
- text-decoration: none; /* removes underline by default */
+ text-decoration: none;
}
a:hover {
- text-decoration: underline; /* only show on hover */
+ text-decoration: underline;
}
/* =========================
@@ -97,11 +117,7 @@ nav{
max-width: 100%;
}
-@media (max-width: 1250px){
- #preamble.status{
- padding-right: var(--body-pad);
- }
-}
+
/* =========================
Footer
@@ -214,25 +230,7 @@ body{ counter-reset: sidenote-counter; }
text-align: center; font-size: .95rem; color: #666; margin-top: .4rem;
}
-@media (max-width: 1250px){
- #content.content{
- padding-right: var(--body-pad);
- }
- .sidenote,
- .marginnote{
- float: none;
- clear: both;
- width: auto;
- display: block; /* β¬
make them start on a new line */
- margin: 0.5rem 0 0.75rem; /* spacing above/below */
- padding-left: 0.75rem;
- border-left: 3px solid rgba(0,0,0,.08);
- margin-right: 0;
- }
- .fullwidth{
- max-width: calc(100vw - 2 * var(--body-pad));
- }
-}
+
/* Ultra-wide comfort tweaks */
@@ -277,7 +275,7 @@ pre {
}
.org-src-container > pre{ overflow: auto; }
-/* Language badges (optional) */
+/* Language badges */
.org-src-container > pre:before{
display: block; position: absolute; top: 0; right: 0;
background-color: #b3b3b3; color: #fff;
@@ -460,34 +458,7 @@ li ol li::before {
.epigraph blockquote::after {
content: none;
}
-/* =========================================
- Dark mode β manual (data-theme) wins
- ========================================= */
-:root {
- /* optional: shared tokens for borders/chips */
- --border: #d7d7d7;
- --chip-bg: #f0f0f0;
- --chip-fg: #444;
- --muted: #666;
-}
-:root[data-theme="dark"]{
- --bg: #0f1115;
- --fg: #e6e6e6;
- --link: #8ab4ff;
- --heading: #9ecbff;
- --code-bg: #1a1d24;
-
- --note-color: #c2c7cf;
- --note-bg: transparent;
-
- --border: #2a2f3a;
- --chip-bg: #1f2330;
- --chip-fg: #cfd3da;
- --muted: #a9b0bb;
- --active-toc: #313131;
-
-}
/* Auto scheme if no manual override is set */
@media (prefers-color-scheme: dark){
@@ -530,13 +501,6 @@ li ol li::before {
}
.epigraph blockquote footer{ color: var(--muted); }
-/* Mobile sidenote rule uses a light border; make it theme-aware */
-@media (max-width: 1250px){
- .sidenote, .marginnote{
- border-left: 3px solid color-mix(in oklab, var(--fg) 12%, transparent);
- }
-}
-
/* Theme toggle button positioning + transparent background */
.theme-toggle {
position: fixed;
@@ -600,14 +564,7 @@ li ol li::before {
line-height: 1.35;
}
-/* Mobile: these already stack under content via your media query; nothing special needed,
- but we can soften the border a touch to match the mobile sidenote rule */
-@media (max-width: 1250px){
- .sidenote .mn-img,
- .marginnote .mn-img{
- border-color: color-mix(in oklab, var(--fg) 12%, transparent);
- }
-}
+
.sidenote img {
margin-top: 0.35rem;
display: block;
@@ -671,22 +628,6 @@ li ol li::before {
/* Headings offset so anchors donβt hide under the sticky header */
h2[id], h3[id], h4[id] { scroll-margin-top: 6.5rem; }
-/* =========================
- Mobile / narrow view
- ========================= */
-@media (max-width: 1250px){
- #table-of-contents{
- float: none;
- position: static; /* no sticky on small screens */
- width: auto;
- margin: 0 0 1rem;
- padding: .5rem .75rem;
- border-right: 0;
- border-left: 3px solid color-mix(in oklab, var(--fg) 12%, transparent);
- background: color-mix(in oklab, var(--bg) 96%, var(--fg) 4%);
- border-radius: 4px;
- }
-}
#text-table-of-contents a.is-active{
// font-weight: 700;
text-decoration: underline;
@@ -694,3 +635,68 @@ h2[id], h3[id], h4[id] { scroll-margin-top: 6.5rem; }
//border: 1px solid var(--border, #ccc);
}
+
+/*BP STUFF*/
+
+/* theme removal */
+.hidden { display: none !important; }
+
+.bp-x{ right:72px; }
+
+.bp-next,.bp-prev{ right:8px; }
+.bp-prev{ left:8px; }
+
+/* Smooth exit */
+.bp-wrap{ transition: opacity .18s ease; }
+.bp-wrap.bp-fadeout{ opacity: 0; }
+
+/* Respect notches */
+.bp-controls{
+ padding-top: env(safe-area-inset-top, 0);
+ padding-right: calc(env(safe-area-inset-right, 0) + 8px);
+}
+
+
+@media (max-width: 1250px){
+ #preamble.status{
+ padding-right: var(--body-pad);
+ }
+
+ #content.content{
+ padding-right: var(--body-pad);
+ }
+ .sidenote,
+ .marginnote{
+ float: none;
+ clear: both;
+ width: auto;
+ display: block;
+ margin: 0.5rem 0 0.75rem;
+ padding-left: 0.75rem;
+ border-left: 3px solid rgba(0,0,0,.08);
+ margin-right: 0;
+ }
+ .fullwidth{
+ max-width: calc(100vw - 2 * var(--body-pad));
+ }
+ .sidenote, .marginnote{
+ border-left: 3px solid color-mix(in oklab, var(--fg) 12%, transparent);
+ }
+ .sidenote .mn-img,
+ .marginnote .mn-img{
+ border-color: color-mix(in oklab, var(--fg) 12%, transparent);
+ }
+
+ #table-of-contents{
+ float: none;
+ position: static;
+ width: auto;
+ margin: 0 0 1rem;
+ padding: .5rem .75rem;
+ border-right: 0;
+ border-left: 3px solid color-mix(in oklab, var(--fg) 12%, transparent);
+ background: color-mix(in oklab, var(--bg) 96%, var(--fg) 4%);
+ border-radius: 4px;
+ }
+
+}
diff --git a/output/blogs/2025/08/spending-the-whole-day-on-this-website.html b/output/blogs/2025/08/spending-the-whole-day-on-this-website.html
index 7eed2c2..c964022 100644
--- a/output/blogs/2025/08/spending-the-whole-day-on-this-website.html
+++ b/output/blogs/2025/08/spending-the-whole-day-on-this-website.html
@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
+
09-08-2025: Website Changes
@@ -194,7 +194,12 @@
+
+
+
+
+
@@ -215,9 +220,9 @@
09-08-2025: Website Changes
-
-
What was worked on
-
+
+
What was worked on
+
I saw a few websites that used marginal notes on the right side of the screen like this one , so I decided to try and implement this feature in this wesbite. In my mind I thought of using an external pre-configured CSS that I can just insert and ta-da it would work.
diff --git a/output/blogs/2025/08/wacom-with-arch.html b/output/blogs/2025/08/wacom-with-arch.html
index 7028957..ebab7b4 100644
--- a/output/blogs/2025/08/wacom-with-arch.html
+++ b/output/blogs/2025/08/wacom-with-arch.html
@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
+
Wacom With Arch
@@ -194,7 +194,12 @@
+
+
+
+
+
@@ -215,9 +220,9 @@
Wacom With Arch
-
-
Setting up Wacom Tablet in Arch Hyprland
-
+
+
Setting up Wacom Tablet in Arch Hyprland
+
I purchased a One by Wacom tablet almost 2 years ago now and it works flawlessly in both Windows and MacOS and even in most Linux distros with some configuration.
diff --git a/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html b/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html
index ee0f97a..854ccf3 100644
--- a/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html
+++ b/output/blogs/2025/08/weekly-review-week-ending-august-10-2025.html
@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
+
Weekly review: Week ending August 10, 2025
@@ -194,7 +194,12 @@
+
+
+
+
+
@@ -219,23 +224,23 @@
Table of Contents
-
-
Reviewing the week
-
+
+
Reviewing the week
+
Mostly continuing reading from the book clean code, also setup the ankii cards and this website. The amount of leetcode problems I solved could improve however.
@@ -249,27 +254,27 @@ I'm thinking of using time-blocks to represent the hours I spent doing each thin
-
-
Next week
-
+
+
Next week
+
-
-
TODO Read as much of Clean Code as possible
+
+
TODO Read as much of Clean Code as possible
-
-
TODO Finish another (misc) book
+
+
TODO Finish another (misc) book
-
-
TODO Write more (metric unspecified, need to experiment to see what works best)
+
+
TODO Write more (metric unspecified, need to experiment to see what works best)
-
-
TODO Start the book Dose Effect
+
+
TODO Start the book Dose Effect
-
-
TODO More leetcode problems to solve (again, metric unspecified)
+
+
TODO More leetcode problems to solve (again, metric unspecified)
-
-
TODO Touch typing: daily practice
+
+
TODO Touch typing: daily practice
diff --git a/output/blogs/2025/08/what-do-i-want-to-do-with-emacs.html b/output/blogs/2025/08/what-do-i-want-to-do-with-emacs.html
index 0fef978..dd818dc 100644
--- a/output/blogs/2025/08/what-do-i-want-to-do-with-emacs.html
+++ b/output/blogs/2025/08/what-do-i-want-to-do-with-emacs.html
@@ -3,7 +3,7 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
+
What Do I Want To Do With Emacs
@@ -194,7 +194,12 @@
+
+
+
+
+
@@ -209,7 +214,7 @@
π Theme
-
Updated: 2025-08-09 Sat 09:13
+
Updated: 2025-08-10 Sun 22:22
What Do I Want To Do With Emacs
@@ -240,7 +245,7 @@ After some thinking I narrowed it down and collated it in the following diagram:
-