:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--ground:#e7eaec;--surface:#f6f8f9;--surface-2:#dde2e5;--ink:#191d21;--ink-soft:#4a555d;--ink-faint:#545f66;--rule:#c3cbd0;--rule-strong:#191d21;--accent:#7a4610;--accent-line:#a75f14;--focus:#0b4f6c;--good:#2f6b4f;--serif:Charter, "Bitstream Charter", "Iowan Old Style", "Palatino Linotype", Georgia, "Times New Roman", serif;--mono:ui-monospace, "SF Mono", "Cascadia Mono", "Segoe UI Mono", Consolas, "Liberation Mono", monospace;--measure:68ch;--gutter:7.5rem;--step:1.5rem}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ground:#101418;--surface:#171d22;--surface-2:#212a31;--ink:#dfe5e9;--ink-soft:#a3aeb6;--ink-faint:#8b98a2;--rule:#2c363e;--rule-strong:#dfe5e9;--accent:#e9a94a;--accent-line:#c98a31;--focus:#7fc4e8;--good:#6fbf95}}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--ground:#101418;--surface:#171d22;--surface-2:#212a31;--ink:#dfe5e9;--ink-soft:#a3aeb6;--ink-faint:#8b98a2;--rule:#2c363e;--rule-strong:#dfe5e9;--accent:#e9a94a;--accent-line:#c98a31;--focus:#7fc4e8;--good:#6fbf95}*,:before,:after{box-sizing:border-box}html{scrollbar-gutter:stable}body{background:var(--ground);color:var(--ink);font-family:var(--serif);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;padding:0 1.5rem 6rem;font-size:17px;line-height:1.62}.wrap{max-width:calc(var(--measure) + var(--gutter) + 2rem);margin:0 auto}.skip{background:var(--surface);color:var(--ink);border:2px solid var(--accent);z-index:10;padding:.75rem 1rem;position:absolute;top:0;left:-9999px}.skip:focus{top:1rem;left:1rem}:where(a,button,summary,[tabindex]):focus-visible{outline:3px solid var(--focus);outline-offset:3px;border-radius:2px}.masthead{border-bottom:2px solid var(--rule-strong);margin-bottom:2.5rem;padding:4rem 0 2rem}.masthead h1{letter-spacing:-.025em;text-wrap:balance;margin:0 0 .75rem;font-size:clamp(2.1rem,6vw,3.2rem);font-weight:600;line-height:1.05}.role{color:var(--ink-soft);max-width:58ch;margin:0 0 1.5rem;font-size:1.15rem}.masthead-links{font-family:var(--mono);flex-wrap:wrap;gap:.4rem 1.5rem;margin:0;padding:0;font-size:.82rem;list-style:none;display:flex}section{margin:0 0 4rem;scroll-margin-top:1.5rem}.sec-head{border-top:1px solid var(--rule);grid-template-columns:1fr;align-items:baseline;gap:.2rem 2rem;margin:0 0 1.5rem;padding-top:.9rem;display:grid}.sec-num{font-family:var(--mono);letter-spacing:.13em;color:var(--accent);text-transform:uppercase;font-size:.7rem}h2{letter-spacing:-.02em;text-wrap:balance;margin:0;font-size:1.7rem;font-weight:600}h3{letter-spacing:-.01em;text-wrap:balance;margin:0 0 .5rem;font-size:1.22rem;font-weight:600}h4,h3.label-head{font-family:var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--ink-faint);margin:1.6rem 0 .5rem;font-size:.72rem;font-weight:500}h3.label-head{letter-spacing:.13em}.body{max-width:var(--measure)}@media (min-width:900px){.sec-head{grid-template-columns:var(--gutter) 1fr}.body{margin-left:calc(var(--gutter) + 2rem)}}p{margin:0 0 1.05rem}a{color:var(--accent);text-underline-offset:2px;text-decoration-thickness:1px}strong{font-weight:600}em{font-style:italic}code{font-family:var(--mono);background:var(--surface-2);border-radius:2px;padding:.1em .35em;font-size:.85em}ul,ol{margin:0 0 1.05rem;padding-left:1.2rem}li{margin-bottom:.4rem}li::marker{color:var(--ink-faint)}hr{border:none;border-top:1px solid var(--rule);margin:2.5rem 0}.toc{border:1px solid var(--rule);background:var(--surface);margin:0 0 3rem;padding:1.1rem 1.35rem}.toc h2{font-family:var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 .6rem;font-size:.72rem;font-weight:500}.toc ol{columns:2;column-gap:2rem;margin:0;padding-left:1.2rem}@media (max-width:620px){.toc ol{columns:1}}.toc li{break-inside:avoid;margin-bottom:.3rem}.thesis{background:var(--surface);border:1px solid var(--rule);border-top:3px solid var(--accent-line);margin:0 0 1.5rem;padding:1.5rem;font-size:1.14rem;line-height:1.45}.thesis p:last-child{margin-bottom:0}.note{border-left:3px solid var(--rule);background:var(--surface);margin:0 0 1.3rem;padding:.9rem 1.15rem;font-size:.95rem}.note p:last-child{margin-bottom:0}.note-label{font-family:var(--mono);letter-spacing:.13em;text-transform:uppercase;color:var(--ink-faint);margin-bottom:.35rem;font-size:.66rem;display:block}.scroller{border:1px solid var(--rule);background:var(--surface);margin:0 0 1.3rem;overflow-x:auto}table{border-collapse:collapse;width:100%;min-width:460px;font-size:.9rem}th,td{text-align:left;border-bottom:1px solid var(--rule);vertical-align:top;padding:.6rem .85rem}th{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);background:var(--surface-2);font-size:.66rem;font-weight:500}tbody tr:last-child td{border-bottom:none}td.num,th.num{font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}tfoot td{border-top:2px solid var(--rule);font-weight:600}.era{border-left:2px solid var(--rule);margin:0 0 1.8rem;padding:0 0 .2rem 1.25rem}.era-when{font-family:var(--mono);letter-spacing:.08em;color:var(--accent);text-transform:uppercase;font-variant-numeric:tabular-nums;margin-bottom:.25rem;font-size:.7rem}.era h3{margin-bottom:.3rem}.era-lede{color:var(--ink-soft);margin-bottom:.6rem;font-style:italic}.repos{font-family:var(--mono);color:var(--ink-faint);margin:0;font-size:.74rem;line-height:1.7}.project{border:1px solid var(--rule);border-top:3px solid var(--accent-line);background:var(--surface);margin:0 0 1.5rem;padding:1.5rem;scroll-margin-top:1.5rem}.project-top{border-bottom:1px solid var(--rule);margin-bottom:1rem;padding-bottom:.85rem}.project-period{font-family:var(--mono);letter-spacing:.1em;color:var(--ink-faint);text-transform:uppercase;font-variant-numeric:tabular-nums;margin-bottom:.35rem;font-size:.7rem;display:block}.standfirst{color:var(--ink-soft);margin:0}.meta{grid-template-columns:1fr;gap:.1rem 1rem;margin:0 0 1.2rem;font-size:.9rem;display:grid}@media (min-width:620px){.meta{grid-template-columns:6.5rem 1fr}}.meta dt{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);padding-top:.3rem;font-size:.66rem}.meta dd{margin:0 0 .6rem}.repo-list{font-family:var(--mono);margin:0;padding:0;font-size:.82rem;list-style:none}.repo-list li{margin-bottom:.15rem}.tag{color:var(--ink-faint);font-size:.92em}.stack{font-family:var(--mono);color:var(--ink-soft);font-size:.78rem;line-height:1.75}.index-list{border-top:1px solid var(--rule);margin:0 0 1.5rem;padding:0;list-style:none}.index-list li{border-bottom:1px solid var(--rule);grid-template-columns:1fr;gap:.1rem 1rem;margin:0;padding:.7rem 0;display:grid}@media (min-width:700px){.index-list li{grid-template-columns:15rem 3rem 1fr;align-items:baseline}}.index-name{font-family:var(--mono);font-size:.84rem;font-weight:600}.index-year{font-family:var(--mono);color:var(--ink-faint);font-variant-numeric:tabular-nums;font-size:.74rem}.index-what{color:var(--ink-soft);font-size:.93rem}.contact-list{margin:0 0 1.2rem;padding:0;font-size:1.02rem}.contact-list>div{grid-template-columns:1fr;gap:0 1rem;margin-bottom:.5rem;display:grid}@media (min-width:620px){.contact-list>div{grid-template-columns:6.5rem 1fr;align-items:baseline}}.contact-list dt{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-faint);padding-top:.35rem;font-size:.68rem}.contact-list dd{margin:0}.visually-hidden-caption{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.theme-toggle{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;background:var(--surface);color:var(--ink-soft);border:1px solid var(--rule);cursor:pointer;text-align:center;min-width:8.5rem;padding:.4rem .7rem;font-size:.72rem}.theme-toggle:hover{color:var(--ink);border-color:var(--ink-faint)}.foot{border-top:2px solid var(--rule-strong);font-family:var(--mono);color:var(--ink-faint);margin-top:3.5rem;padding-top:1.25rem;font-size:.72rem;line-height:1.8}.foot p{margin:0 0 .5rem}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}.project.theme-toggle{transition:border-color .18s,color .18s}}@media print{body{color:#000;background:#fff;padding:0;font-size:11pt}.toc.theme-toggle.skip{display:none}.project.note.thesis{break-inside:avoid;background:0 0}a:after{content:" (" attr(href) ")";color:#444;font-size:.85em}}.help-guide-root{align-items:center;display:inline-flex;position:relative}.help-btn{font-family:var(--mono,monospace);color:#cfeaef;cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0f1926bf;border:1px solid #00ffff47;border-radius:4px;align-items:center;gap:6px;padding:4px 10px;font-size:12px;transition:all .18s;display:inline-flex}.help-btn:hover{color:#fff;background:#00ffff26;border-color:#0ff9}.help-key{color:#0ff;background:#0ff3;border-radius:3px;justify-content:center;align-items:center;width:16px;height:16px;font-size:11px;font-weight:700;display:inline-flex}.help-card{z-index:100;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);color:#cfeaef;background:#080e17f2;border:1px solid #00ffff59;border-radius:6px;width:clamp(280px,85vw,360px);padding:14px 16px;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 12px 32px #0009,0 0 16px #00ffff26}.help-card-head{border-bottom:1px solid #ffffff1a;justify-content:space-between;align-items:center;margin-bottom:10px;padding-bottom:8px;display:flex}.help-card-title{color:#0ff;letter-spacing:.02em;font-size:13px;font-weight:600}.help-close{color:#8fa3b0;cursor:pointer;background:0 0;border:none;padding:2px 6px;font-size:14px}.help-close:hover{color:#fff}.help-card-body{flex-direction:column;gap:10px;font-size:12px;line-height:1.45;display:flex}.help-step strong{color:#fff}.help-step kbd{font-size:10px;font-family:var(--mono,monospace);color:#0ff;background:#ffffff1f;border:1px solid #ffffff40;border-radius:3px;padding:1px 4px}.help-card-foot{color:#8fa3b0;border-top:1px solid #ffffff1a;margin-top:12px;padding-top:8px;font-size:11px}
