@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*),[data-astro-transition-scope]{animation:none!important}}:root{--paper:#101214;--paper-raised:#171a1d;--grid:#1d2125;--line:#2e3338;--ink:#e8e9e5;--ink-muted:#9ba1a7;--ink-faint:#5f656b;--lane:#f0b429;--lane-ink:#f0b429;--lane-soft:#2e2410;--on-lane:#101214;--asphalt:#2a2f35;--marking:#d6d8d3;--agent:#b4b9be;--font-display:"Overpass", "Helvetica Neue", Arial, sans-serif;--font-serif:"Source Serif 4", Georgia, "Times New Roman", serif;--font-mono:"Overpass Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-6:24px;--space-8:32px;--space-12:48px;--space-16:64px;--space-24:96px;--radius-0:0px;--radius-sm:2px;--radius-full:999px;--fs-xs:clamp(12px, 10.4px + .2vw, 15px);--fs-sm:clamp(13px, 10.9px + .25vw, 16.5px);--fs-small:clamp(15px, 12.2px + .33vw, 19px);--fs-text-2:clamp(16px, 12.8px + .42vw, 21px);--fs-body:clamp(18px, 13.3px + .5vw, 23px);--fs-lead:clamp(19px, 14.4px + .72vw, 29px);--fs-h3:clamp(19px, 14.6px + .55vw, 27px);--fs-h2:clamp(24px, 16.5px + 1vw, 38px);--fs-h1:clamp(34px, 20px + 1.8vw, 62px);--fs-name:clamp(44px, 12px + 5.6vw, 132px);--fs-brand:clamp(18px, 14px + .5vw, 27px);--page-max:clamp(1120px, 72vw, 1720px);--date-col:calc(var(--fs-sm) * 8.5);--lane-w:clamp(46px, 8px + 3vw, 84px);--car-w:calc(var(--lane-w) * .46);--car-h:calc(var(--car-w) * 1.8);--lane-dash:12px;--lane-gap:18px;--gutter:clamp(16px, 5vw, 80px);--ease-drive:cubic-bezier(.7, 0, .2, 1);--ease-out:cubic-bezier(.2, .7, .2, 1);color-scheme:dark}:root[data-theme=light]{--paper:#f3f4f1;--paper-raised:#fafaf8;--grid:#e3e5e0;--line:#cfd2cb;--ink:#14161a;--ink-muted:#575c63;--ink-faint:#8a8f95;--lane:#e3a008;--lane-ink:#8f5800;--lane-soft:#f7e7bf;--on-lane:#14161a;--asphalt:#1f2327;--marking:#f5f5f1;--agent:#c3c7cb;color-scheme:light}*,:before,:after{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:var(--space-12)}body{background:var(--paper);color:var(--ink);font-family:var(--font-serif);font-size:var(--fs-body);font-optical-sizing:auto;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;flex-direction:column;min-height:100vh;margin:0;line-height:1.65;display:flex}img,video,canvas,svg{max-width:100%;display:block}::selection{background:var(--lane-soft);color:var(--ink)}:focus-visible{outline:2px solid var(--lane-ink);outline-offset:3px}a{color:inherit}h1,h2,h3{text-wrap:balance}p{text-wrap:pretty}button{font:inherit;color:inherit}.wrap{width:100%;max-width:calc(var(--page-max) + 2 * var(--gutter));padding-inline:var(--gutter);margin-inline:auto}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;overflow:hidden;position:absolute!important}.skip{left:var(--space-4);z-index:200;background:var(--ink);color:var(--paper);padding:var(--space-2) var(--space-4);font-family:var(--font-mono);font-size:var(--fs-sm);position:absolute;top:-100px}.skip:focus{top:var(--space-4)}.label{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted);margin:0;font-weight:600;line-height:1.4}.meta{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-muted);margin:0;line-height:1.5}.meta b,.meta strong{color:var(--ink);font-weight:600}.h1{font-family:var(--font-display);font-weight:700;font-size:var(--fs-h1);margin:0;line-height:1.1}.h2{font-family:var(--font-display);font-weight:700;font-size:var(--fs-h2);margin:0;line-height:1.2}.h3{font-family:var(--font-display);font-weight:600;font-size:var(--fs-h3);margin:0;line-height:1.35}.lead{font-size:var(--fs-lead);margin:0;line-height:1.55}.prose{gap:var(--space-4);flex-direction:column;display:flex}.prose p{margin:0}.prose em{font-style:italic}.link,.prose a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--lane);text-underline-offset:4px;text-decoration-thickness:2px;transition:color .2s}.link:hover,.prose a:hover{color:var(--lane-ink)}.lane-progress{z-index:50;pointer-events:none;background:repeating-linear-gradient(90deg, var(--line) 0 var(--lane-dash), transparent var(--lane-dash) calc(var(--lane-dash) + var(--lane-gap)));opacity:0;height:3px;transition:opacity .3s;position:fixed;top:0;left:0;right:0}.lane-progress.on{opacity:1}.lane-progress span{background:var(--lane);width:16px;height:7px;transform:translateX(calc(var(--p,0) * (100vw - 16px)));border-radius:2px;position:absolute;top:-2px;left:0}.side-lane{display:none}@media (width>=1300px){.lane-progress{display:none}.side-lane{--edge:max(2px, calc(var(--lane-w) * .05));--dash:calc(var(--lane-w) * .38);z-index:5;pointer-events:none;width:var(--lane-w);top:0;bottom:0;left:calc((100vw - var(--page-max)) / 4 - var(--lane-w) / 2);background:linear-gradient(var(--marking), var(--marking)) left top / var(--edge) 100% no-repeat, linear-gradient(var(--marking), var(--marking)) right top / var(--edge) 100% no-repeat, repeating-linear-gradient(180deg, color-mix(in srgb, var(--marking) 45%, transparent) 0 var(--dash), transparent var(--dash) calc(var(--dash) * 2.5)) center top / var(--edge) 100% no-repeat, var(--asphalt);transition:opacity .6s;display:block;position:fixed}html[data-intro] .side-lane{opacity:0}}.side-car{width:var(--car-w);height:var(--car-h);margin-left:calc(var(--car-w) / -2);will-change:transform;position:absolute;top:0;left:50%;transform:translateY(12px)}.side-car i{display:block;position:absolute}.side-car .body{background:linear-gradient(90deg, #0003, transparent 22%, transparent 78%, #0003), var(--lane);border-radius:26%/14%;inset:0}.side-car .wheel{background:#0c0d0f;border-radius:2px;width:16%;height:17%}.side-car .fl{bottom:13%;left:-8%}.side-car .fr{bottom:13%;right:-8%}.side-car .rl{top:13%;left:-8%}.side-car .rr{top:13%;right:-8%}.side-car .front{background:#101214b8;border-radius:3px 3px 2px 2px;height:17%;top:57%;left:15%;right:15%}.side-car .rear{background:#10121499;border-radius:2px;height:10%;top:13%;left:19%;right:19%}.side-car .roof{background:#ffffff1f;border-radius:3px;height:28%;top:26%;left:20%;right:20%}.side-car .head{background:#fff6d8;border-radius:2px;width:22%;height:4.5%;bottom:-1%}.side-car .hl{left:10%}.side-car .hr{right:10%}.side-car .tail{background:#c2362b;border-radius:2px;width:20%;height:3.5%;top:-1%}.side-car .tl{left:10%}.side-car .tr{right:10%}.side-car .beam{background:radial-gradient(50% 100% at 50% 0,#ffecaa4d,#0000 72%);height:150%;top:99%;left:-45%;right:-45%}:root[data-theme=light] .side-car .beam{opacity:.55}.site-header{padding-block:var(--space-6);z-index:10;position:relative}.site-header .wrap{justify-content:space-between;align-items:center;gap:var(--space-3) var(--space-8);flex-wrap:wrap;display:flex}.brand{align-items:center;gap:var(--space-3);color:var(--ink);text-decoration:none;display:inline-flex}.brand .logo{width:calc(var(--fs-brand) * 1.7);height:calc(var(--fs-brand) * 1.7);flex:none}.brand-word{font-family:var(--font-display);font-weight:800;font-size:var(--fs-brand);white-space:nowrap;padding-top:3px;line-height:1}.site-nav{align-items:center;gap:var(--space-2) var(--space-6);font-family:var(--font-mono);font-size:var(--fs-sm);flex-wrap:wrap;line-height:1.5;display:flex}.site-nav a{color:var(--ink-muted);padding-block:var(--space-2);text-decoration:none;transition:color .2s;position:relative}.site-nav a:hover{color:var(--ink)}.site-nav a:after{content:"";background:var(--lane);transform-origin:0;height:2px;transition:transform .35s var(--ease-drive);position:absolute;bottom:2px;left:0;right:0;transform:scaleX(0)}.site-nav a:hover:after,.site-nav a[aria-current=page]:after{transform:scaleX(1)}.site-nav a[aria-current=page]{color:var(--ink)}.toggle{font-family:var(--font-mono);font-size:var(--fs-sm);border:1px solid var(--line);color:var(--ink-muted);padding:2px var(--space-2);border-radius:var(--radius-sm);cursor:pointer;background:0 0;align-items:center;gap:6px;line-height:1.5;display:inline-flex}.toggle:hover{color:var(--ink);border-color:var(--ink-muted)}.toggle i{background:linear-gradient(90deg,currentColor 50%,#0000 50%);border:1.5px solid;border-radius:50%;width:10px;height:10px;display:inline-block}@media (width<=640px){.site-header{padding-block:var(--space-4) 0}.site-nav{gap:0 var(--space-4);width:100%}}.logo{color:var(--ink);overflow:visible}.logo-car{opacity:0}.intro{z-index:100;background:var(--paper);cursor:pointer;place-items:center;display:none;position:fixed;inset:0}.intro .logo{width:min(38vmin,200px);height:auto}.intro-hint{bottom:var(--space-8);text-align:center;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.08em;text-transform:uppercase;position:absolute;left:0;right:0}html[data-intro] .intro{animation:0s linear 4.5s forwards failsafe-hide;display:grid}html[data-intro] body{overflow:hidden}html[data-intro] .brand .logo{visibility:hidden}html[data-intro] .brand-word{clip-path:inset(0 100% 0 0);animation:0s linear 4.5s forwards failsafe-clip}html[data-intro] .site-nav,html[data-intro] main,html[data-intro] .site-footer{opacity:0;animation:0s linear 4.5s forwards failsafe-show}@keyframes failsafe-hide{to{visibility:hidden}}@keyframes failsafe-show{to{opacity:1}}@keyframes failsafe-clip{to{clip-path:inset(0)}}html.theme-vt::view-transition-old(root),html.theme-vt::view-transition-new(root){mix-blend-mode:normal;animation:none}html.theme-vt::view-transition-new(root){z-index:2}html.js [data-reveal]{transition:opacity .7s var(--ease-out), transform .7s var(--ease-out);transition-delay:var(--d,0s)}html.js [data-reveal]:not(.in){opacity:0;transform:translateY(14px)}html.js .lane-rule[data-reveal]{transition:background-size 1.1s var(--ease-drive);opacity:1;transform:none}html.js .lane-rule[data-reveal]:not(.in){background-size:0% 100%}.lane-rule{height:3px;margin:var(--space-16) 0;background:repeating-linear-gradient(90deg, var(--lane) 0 var(--lane-dash), transparent var(--lane-dash) calc(var(--lane-dash) + var(--lane-gap))) left center / 100% 100% no-repeat;border:0}.lane-rule.solid{background:linear-gradient(var(--lane), var(--lane)) left center / 100% 100% no-repeat}@media (width<=640px){.lane-rule{margin:var(--space-12) 0}}main{flex:1}.section{gap:var(--space-6);flex-direction:column;display:flex}.section-head{justify-content:space-between;align-items:baseline;gap:var(--space-4);display:flex}.page-head{padding-top:var(--space-12);gap:var(--space-6);flex-direction:column;display:flex}.two-col{gap:var(--space-16);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}@media (width<=900px){.two-col{gap:var(--space-12);grid-template-columns:1fr}}.with-margin{gap:var(--space-6) var(--space-12);grid-template-columns:minmax(0,1fr) minmax(220px,280px);align-items:start;display:grid}@media (width<=900px){.with-margin{grid-template-columns:1fr}}.hero{gap:var(--space-4);padding-top:var(--space-12);grid-template-areas:"label""name""lead""links""cta";display:grid}.hero-label{grid-area:label}.hero-name{font-family:var(--font-display);font-weight:800;font-size:var(--fs-name);letter-spacing:-.01em;grid-area:name;margin:18px 0 0;line-height:.95}.hero-lead{margin-top:var(--space-2);grid-area:lead}.hero-links{grid-area:links}.hero .hero-dashcam{grid-area:stage;display:none}.hero-cta{align-items:center;gap:var(--space-3) var(--space-6);margin-top:var(--space-4);flex-wrap:wrap;grid-area:cta;display:flex}.hero-live{font-variant-numeric:tabular-nums;max-width:52ch}.town-hero{position:relative}.town-stage,.town-scrim{display:none}@media (width>=900px){.town-hero{isolation:isolate;align-items:center;min-height:clamp(560px,100vh - 110px,1000px);display:flex;overflow:hidden}.town-stage{z-index:-2;background-color:var(--paper-raised);background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);background-size:24px 24px;display:block;position:absolute;inset:0}.town-stage canvas{opacity:0;transition:opacity 1.4s var(--ease-out);position:absolute;inset:0;width:100%!important;height:100%!important}.town-stage.ready canvas{opacity:1}.town-scrim{z-index:-1;pointer-events:none;background:linear-gradient(90deg, var(--paper) 0%, color-mix(in srgb, var(--paper) 92%, transparent) 32%, color-mix(in srgb, var(--paper) 55%, transparent) 55%, transparent 74%), linear-gradient(0deg, var(--paper) 0%, transparent 16%), linear-gradient(180deg, var(--paper) 0%, transparent 10%);display:block;position:absolute;inset:0}.town-hero .hero{padding-block:var(--space-12);pointer-events:none;transition:opacity .5s var(--ease-out), transform .6s var(--ease-drive)}.town-hero .hero :is(a,button,.detect){pointer-events:auto}.town-hero .hero-lead,.town-hero .hero-live{max-width:min(58%,40em)}.town-hero .hero-cta{transition:opacity .6s var(--ease-out)}.town-hero:not(.has-town) .hero-cta{visibility:hidden;opacity:0}.town-scrim{transition:opacity .6s var(--ease-out)}html.hero-in-view .side-lane{opacity:0}.town-hero.is-driving .hero{opacity:0;transform:translate(-24px)}.town-hero.is-driving .hero :is(a,button,.detect){pointer-events:none}.town-hero.is-driving .town-scrim{opacity:0}.town-hud{z-index:3;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .5s var(--ease-out), visibility 0s linear .5s;position:absolute;inset:0}.town-hero.is-driving .town-hud{opacity:1;visibility:visible;transition:opacity .5s var(--ease-out) .15s, visibility 0s}.town-hud .hud{font-family:var(--font-mono);color:#f5f5f1;margin:0;position:absolute}.town-hud .hud-tl{top:var(--space-4);left:var(--gutter);flex-direction:column;align-items:flex-start;gap:6px;display:flex}.town-hud .hud-tr{top:var(--space-4);right:var(--gutter)}.town-hud .hud-line{font-family:var(--font-mono);font-size:var(--fs-xs);color:#f5f5f1;background:#101214b8;margin:0;padding:6px 8px;line-height:1.3}.town-hud .speed{background:#101214b8;align-items:baseline;gap:6px;margin:0;padding:6px 10px;display:flex}.town-hud .speed span{font-family:var(--font-display);font-weight:800;font-size:calc(var(--fs-h1) * .8);font-variant-numeric:tabular-nums;min-width:2ch;line-height:1}.town-hud .speed small{font-size:var(--fs-xs)}.town-bar{left:var(--gutter);right:var(--gutter);bottom:var(--space-6);justify-content:space-between;align-items:center;gap:var(--space-3) var(--space-6);pointer-events:auto;flex-wrap:wrap;display:flex;position:absolute}.town-bar .acts{gap:var(--space-2);flex-wrap:wrap;display:flex}.town-bar .toggle{color:#f5f5f1;background:#101214b8;border-color:#f5f5f159}.town-bar .toggle:hover{border-color:#f5f5f1}.town-bar .toggle[aria-pressed=true]{color:var(--on-lane);background:var(--lane);border-color:var(--lane)}.town-bar .stop{border-color:#f5f5f1}.town-bar .keys{color:#f5f5f1;background:#101214b8;padding:6px 8px}.town-bar .hud-world{flex-basis:100%}.town-bar kbd{font-family:var(--font-mono);font-size:calc(var(--fs-xs) * .9);border-radius:var(--radius-sm);border:1px solid #f5f5f166;border-bottom-width:2px;margin:0 1px;padding:0 4px}.town-hero .toast{z-index:4;font-family:var(--font-mono);font-size:var(--fs-sm);background:var(--lane);color:var(--on-lane);pointer-events:none;text-align:center;max-width:calc(100% - 48px);margin:0;padding:8px 12px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.town-hud .touch{left:var(--gutter);right:var(--gutter);bottom:calc(var(--space-24) + var(--space-8));justify-content:space-between;display:none;position:absolute}.town-hud .pad{pointer-events:auto;gap:10px;display:flex}.town-hud .touch button{width:64px;height:56px;font-family:var(--font-mono);font-size:var(--fs-sm);color:#f5f5f1;border-radius:var(--radius-sm);touch-action:none;-webkit-user-select:none;user-select:none;background:#10121499;border:1px solid #f5f5f166;font-weight:600}.town-hud .touch button[data-touch=gas]{background:var(--lane);color:var(--on-lane);border-color:var(--lane)}@media (pointer:coarse){.town-hud .touch{display:flex}.town-bar .keys{display:none}}}@media (width<=899px){.hero-cta,.town-hud,.town-hero .toast{display:none}}.detect{margin:-.14em -.22em -.04em;padding:.14em .22em .04em;display:inline-block;position:relative}.detect:before{content:"";pointer-events:none;opacity:0;transition:opacity .3s, transform .45s var(--ease-drive);border:1px solid color-mix(in srgb, var(--lane) 55%, transparent);background:linear-gradient(var(--lane), var(--lane)) left top / 18px 3px no-repeat, linear-gradient(var(--lane), var(--lane)) left top / 3px 18px no-repeat, linear-gradient(var(--lane), var(--lane)) right top / 18px 3px no-repeat, linear-gradient(var(--lane), var(--lane)) right top / 3px 18px no-repeat, linear-gradient(var(--lane), var(--lane)) left bottom / 18px 3px no-repeat, linear-gradient(var(--lane), var(--lane)) left bottom / 3px 18px no-repeat, linear-gradient(var(--lane), var(--lane)) right bottom / 18px 3px no-repeat, linear-gradient(var(--lane), var(--lane)) right bottom / 3px 18px no-repeat;position:absolute;inset:0;transform:scale(1.06)}.detect:after{content:attr(data-chip);font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:0;background:var(--lane);color:var(--on-lane);white-space:nowrap;opacity:0;padding:1px 8px;font-weight:600;line-height:1.5;transition:opacity .3s .12s,transform .3s .12s;position:absolute;bottom:calc(100% + 4px);left:0;transform:translateY(4px)}.detect:hover:before,.detect.on:before,.detect:hover:after,.detect.on:after{opacity:1;transform:none}@media (width<=899px){.hero{padding-top:var(--space-6);grid-template-areas:"label""stage""lead""links""cta"}.hero .hero-dashcam{display:block}.hero-name{z-index:2;grid-area:stage;place-self:start;margin:44px 0 0 18px;font-size:clamp(38px,11vw,60px)}.hero-name .detect{width:min-content}.hero-name .detect:before,.hero-name .detect:after{opacity:1;transform:none}}.links{gap:var(--space-1) var(--space-6);font-family:var(--font-mono);font-size:var(--fs-sm);flex-wrap:wrap;margin:0;padding:0;line-height:1.5;list-style:none;display:flex}.links a{color:var(--lane-ink);padding-block:var(--space-1);background:linear-gradient(var(--lane), var(--lane)) left bottom / 0 1.5px no-repeat;transition:background-size .35s var(--ease-drive);text-decoration:none;display:inline-block}.links a:hover{background-size:100% 1.5px}.links a[href^=http]:after{content:" ↗"}.links .plain{color:var(--ink-muted)}.plate{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--ink);border:1.5px solid var(--ink);border-radius:var(--radius-sm);white-space:nowrap;padding:0 6px;font-weight:600;line-height:1.5;display:inline-block}.plate.is-lane{background:var(--lane);border-color:var(--lane);color:var(--on-lane)}.plate.is-quiet{border-color:var(--line);color:var(--ink-muted)}.tags{gap:var(--space-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.news{gap:var(--space-3);margin:0;padding:0;list-style:none;display:grid}.news li{grid-template-columns:var(--date-col) minmax(0, 1fr);gap:var(--space-4);align-items:baseline;display:grid}.news time{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-muted);font-variant-numeric:tabular-nums;line-height:1.5}.news p{font-size:var(--fs-body);margin:0;line-height:1.55}.news a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--lane);text-underline-offset:4px;text-decoration-thickness:2px}.news .is-new p span{background:var(--lane-soft);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:0 var(--space-1);margin-left:calc(-1 * var(--space-1))}@media (width<=560px){.news li{grid-template-columns:1fr;gap:0}.news{gap:var(--space-4)}}.pubs{gap:var(--space-8);margin:0;padding:0;list-style:none;display:grid}.pub{grid-template-columns:var(--date-col) minmax(0, 1fr);gap:var(--space-2) var(--space-4);align-items:start;display:grid}.pub-venue{padding-top:5px}.pub-body{gap:var(--space-2);flex-direction:column;display:flex}.pub-title{font-family:var(--font-display);font-size:var(--fs-h3);margin:0;font-weight:600;line-height:1.35}.pub-title a{color:var(--ink);text-decoration:none;transition:color .2s}.pub-title a:hover{color:var(--lane-ink)}.pub-authors{font-size:var(--fs-small);color:var(--ink-muted);margin:0;line-height:1.55}.pub-authors b{color:var(--ink);font-weight:600}.pub-summary{font-size:var(--fs-small);margin:0;line-height:1.55}@media (width<=560px){.pub{grid-template-columns:1fr}.pub-venue{padding-top:0}}.projects{margin:0;padding:0;list-style:none}.project{gap:var(--space-1) var(--space-6);padding-block:var(--space-6);border-top:1px solid var(--line);grid-template-columns:minmax(0,1fr) auto;display:grid;position:relative}.project:last-child{border-bottom:1px solid var(--line)}.project:before{content:"";background:var(--lane);transform-origin:0;width:100%;height:1px;transition:transform .5s var(--ease-drive);position:absolute;top:-1px;left:0;transform:scaleX(0)}.project:hover:before{transform:scaleX(1)}.project h3{font-family:var(--font-display);font-size:var(--fs-h3);margin:0;font-weight:600;line-height:1.35}.project p{font-size:var(--fs-text-2);grid-column:1;margin:0;line-height:1.55}.project .stack{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-muted)}.project .links{grid-area:1/2;align-self:baseline}@media (width<=560px){.project{grid-template-columns:1fr}.project .links{grid-area:auto/1}}.timeline{margin:0;padding:0;list-style:none}.timeline li{grid-template-columns:var(--date-col) minmax(0, 1fr) auto;gap:var(--space-1) var(--space-4);padding-block:var(--space-4);border-top:1px solid var(--line);align-items:baseline;display:grid}.timeline li:last-child{border-bottom:1px solid var(--line)}.timeline .when,.timeline .where{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-muted);font-variant-numeric:tabular-nums;line-height:1.5}.timeline .what{flex-direction:column;display:flex}.timeline strong{font-family:var(--font-display);font-size:calc(var(--fs-h3) * .85);font-weight:600;line-height:1.4}.timeline .org{font-size:var(--fs-small);color:var(--ink-muted);line-height:1.5}.timeline .is-current .when:before{content:"";border-radius:var(--radius-full);background:var(--lane);width:8px;height:8px;margin-right:var(--space-2);vertical-align:1px;animation:2s ease-in-out infinite pulse;display:inline-block}@keyframes pulse{50%{opacity:.35}}@media (width<=560px){.timeline li{grid-template-columns:1fr}}.figure{gap:var(--space-2);flex-direction:column;margin:0;display:flex}.figure-plate{background-color:var(--paper-raised);background-image:linear-gradient(var(--grid) 1px, transparent 1px), linear-gradient(90deg, var(--grid) 1px, transparent 1px);border:1px solid var(--line);background-size:24px 24px;position:relative;overflow:hidden}.figure figcaption{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-muted);line-height:1.55}.figure figcaption b{color:var(--ink);font-weight:600}.figure figcaption a{color:var(--ink-muted)}.note{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--ink-muted);gap:var(--space-1);flex-direction:column;max-width:34ch;line-height:1.55;display:flex}.note p{margin:0}.code{background:var(--paper-raised);border:1px solid var(--line);position:relative}.code pre{padding:var(--space-4) var(--space-6);font-family:var(--font-mono);font-size:var(--fs-sm);margin:0;line-height:1.6;overflow-x:auto}.code button{top:var(--space-2);right:var(--space-2);font-family:var(--font-mono);font-size:var(--fs-xs);background:var(--paper);border:1px solid var(--line);color:var(--ink-muted);padding:2px var(--space-2);border-radius:var(--radius-sm);cursor:pointer;position:absolute}.code button:hover{color:var(--ink)}.yt{aspect-ratio:16/9;background:var(--asphalt);border:1px solid var(--line);width:100%;position:relative}.yt button{all:unset;cursor:pointer;background-position:50%;background-size:cover;place-items:center;display:grid;position:absolute;inset:0}.yt button span{font-family:var(--font-mono);font-size:var(--fs-sm);background:var(--lane);color:var(--on-lane);padding:var(--space-2) var(--space-4);transition:transform .25s var(--ease-drive);font-weight:600}.yt button:hover span,.yt button:focus-visible span{transform:scale(1.06)}.yt button:focus-visible{outline:2px solid var(--lane-ink);outline-offset:3px}.yt-frame{border:0;width:100%;height:100%;position:absolute;inset:0}.cta{align-items:center;gap:var(--space-2);font-family:var(--font-mono);font-size:var(--fs-sm);letter-spacing:.04em;color:var(--on-lane);background:var(--lane);padding:var(--space-2) var(--space-4);cursor:pointer;border-radius:var(--radius-sm);transition:transform .25s var(--ease-drive);border:0;font-weight:600;text-decoration:none;display:inline-flex}.cta:hover{transform:translate(4px)}.cta:after{content:"→"}.site-footer{padding-block:var(--space-16) var(--space-12)}.site-footer .lane-rule{margin:0 0 var(--space-6)}.footer-row{justify-content:space-between;gap:var(--space-4);flex-wrap:wrap;align-items:baseline;display:flex}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}
