[hidden]{display:none!important}:root{--bg:#f2eef4;--band:#e8e0ee;--card:#f9f6fa;--ink:#2a2131;--muted:#5a5163;--accent:#71409b;--accent-ink:#fff;--deep:#2a0f3a;--line:#dccde6;--code:#ebe4f0;--shadow:0 1px 2px #2a0f3a0f, 0 8px 24px -12px #2a0f3a2e;--display:"Bricolage Grotesque", "Avenir Next", system-ui, sans-serif;--body:"Atkinson Hyperlegible", system-ui, sans-serif;--mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--ease:cubic-bezier(.2, .7, .2, 1);--grad:linear-gradient(110deg, #7d4aa8 0%, #b8479c 52%, #e0805a 100%);--glow1:#b8479c38;--glow2:#e0805a33;--glow3:#7d4aa833;color-scheme:light}:root[data-theme=dark]{--bg:#16121a;--band:#221a2a;--card:#1e1824;--ink:#ece6f1;--muted:#a59fae;--accent:#c4a1e0;--accent-ink:#2a0f3a;--deep:#e6d2f0;--line:#352b3e;--code:#241c2b;--shadow:0 1px 2px #0000004d, 0 10px 28px -14px #0009;--grad:linear-gradient(110deg, #c4a1e0 0%, #ec8fc4 52%, #f4b08a 100%);--glow1:#b8479c38;--glow2:#e0805a24;--glow3:#a06edc33;color-scheme:dark}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--bg);scroll-padding-top:5rem}body{background:var(--bg);color:var(--ink);font-family:var(--body);-webkit-font-smoothing:antialiased;margin:0;font-size:1.0625rem;line-height:1.55;transition:background .3s,color .3s}img{max-width:100%}a{color:inherit}:focus-visible{outline:3px solid var(--accent);outline-offset:3px}.in{max-width:70rem;padding-left:max(16px, env(safe-area-inset-left,0px));padding-right:max(16px, env(safe-area-inset-right,0px));margin:0 auto}.skip{position:absolute;left:-999px}.skip:focus{z-index:20;background:var(--card);border-radius:8px;padding:.5rem 1rem;top:1rem;left:1rem}header.top{z-index:10;background:color-mix(in srgb, var(--band) 85%, transparent);backdrop-filter:blur(10px);position:sticky;top:0}header.top .in{justify-content:space-between;align-items:center;gap:1rem;padding-block:.8rem;display:flex}.brand{white-space:nowrap;font-family:var(--display);align-items:center;gap:.55rem;font-size:1.05rem;font-weight:600;text-decoration:none;display:flex}.brand img{object-fit:cover;border-radius:10px;width:32px;height:32px;transition:transform .4s cubic-bezier(.3,1.6,.5,1)}.brand:hover img{transform:rotate(-12deg)scale(1.08)}.top nav{flex-wrap:wrap;align-items:center;gap:.25rem;display:flex}.top nav a,.theme{border-radius:99px;padding:.35rem .75rem;font-size:.95rem;text-decoration:none;transition:background .2s}.top nav a:hover,.top nav a[aria-current=page]{background:var(--card)}.top nav a{white-space:nowrap}.theme{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;place-items:center;padding:.4rem;display:grid}.theme:hover{background:var(--card)}.theme svg{width:1.15rem;height:1.15rem}:root[data-theme=dark] .theme .sun,:root:not([data-theme=dark]) .theme .moon{display:none}.chips{flex-wrap:wrap;gap:.5rem;display:flex}.btn{background:var(--card);color:var(--ink);box-shadow:var(--shadow);transition:transform .2s var(--ease);border-radius:99px;align-items:center;gap:.4rem;padding:.6rem 1.1rem;font-size:.95rem;font-weight:700;text-decoration:none;display:inline-flex}.btn.primary{background:var(--accent);color:var(--accent-ink)}.btn:hover{transform:translateY(-2px)}.btn.sm{padding:.4rem .85rem;font-size:.88rem}.tags{flex-wrap:wrap;gap:.35rem;display:flex}.tags :is(span,button,a){font:inherit;background:var(--band);color:var(--deep);border:0;border-radius:6px;padding:.15rem .55rem;font-size:.78rem;font-weight:700;text-decoration:none}.tags :is(button,a){cursor:pointer;transition:background .2s, color .2s, transform .2s var(--ease)}.tags :is(button,a):hover{background:color-mix(in srgb, var(--accent) 22%, var(--band));transform:translateY(-1px)}.tags button[aria-pressed=true]{background:var(--deep);color:var(--bg)}.kicker{font-family:var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--accent);font-size:.74rem;font-weight:600}.intro{background:var(--band);isolation:isolate;position:relative}.intro:before{content:"";z-index:-1;pointer-events:none;background-image:radial-gradient(color-mix(in srgb, var(--accent) 26%, transparent) 1px, transparent 1.3px);background-size:22px 22px;position:absolute;inset:0;mask-image:linear-gradient(100deg,#000 0%,#00000080 45%,#0000 75%)}.prompt{font:.85rem/1 var(--mono);color:var(--muted);align-items:center;gap:.1rem;margin:0 0 1rem;display:flex}.prompt .u{color:var(--accent);font-weight:600}.prompt .cur{background:var(--accent);border-radius:2px;width:.55em;height:1.1em;margin-left:.25rem;animation:1.1s step-end infinite blink}@keyframes blink{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.prompt .cur{animation:none}}.intro .in{grid-template-columns:1.25fr 1fr;align-items:center;gap:3rem;padding-block:3.5rem 4rem;display:grid}.intro h1{font-family:var(--display);letter-spacing:-.035em;color:var(--deep);text-wrap:balance;margin:0 0 1.25rem;font-size:clamp(2.1rem,4.6vw,3.4rem);font-weight:800;line-height:1}.intro .lede{max-width:34rem;margin:0 0 1.5rem;font-size:1.2rem}.photo{justify-self:end;width:min(100%,22rem);position:relative}.photo .ph{aspect-ratio:1;border-radius:46% 54% 42% 58%/52% 44% 56% 48%;animation:14s ease-in-out infinite alternate morph;display:block;overflow:hidden}.photo img{object-fit:cover;object-position:50% 25%;transform-origin:50% 35%;width:100%;height:100%;display:block;scale:1.12}@keyframes morph{to{border-radius:54% 46% 56% 44%/44% 56% 46% 54%}}.photo .tag{background:var(--card);box-shadow:var(--shadow);border-radius:14px;padding:.6rem .9rem;font-size:.85rem;line-height:1.3;text-decoration:none;position:absolute;bottom:1.5rem;left:-1rem}.photo .tag b{font-family:var(--display);font-size:1rem;display:block}main>section{padding-block:4rem 0}.sh{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:1rem;margin-bottom:1.5rem;display:flex}main>section{counter-increment:sec}.sh h2[data-path]:before{content:counter(sec, decimal-leading-zero) "  ~/" attr(data-path);white-space:pre;font:600 .74rem/1 var(--mono);letter-spacing:.02em;color:var(--accent);margin-bottom:.55rem;display:block}.sh h2{font-family:var(--display);letter-spacing:-.02em;margin:0;font-size:clamp(1.8rem,4vw,2.5rem);font-weight:800}.sh p{color:var(--muted);margin:0}.filters{flex-wrap:wrap;gap:.4rem;display:flex}.filters button{font:inherit;cursor:pointer;border:1.5px solid var(--line);color:var(--ink);background:0 0;border-radius:99px;padding:.4rem .9rem;font-size:.9rem;font-weight:700;transition:background .2s,color .2s,border-color .2s}.filters button[aria-pressed=true]{background:var(--deep);border-color:var(--deep);color:var(--bg)}.filters button .n{opacity:.7;margin-left:.25rem;font-weight:400}.grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem;display:grid}.card{background:var(--card);box-shadow:var(--shadow);transition:transform .35s var(--ease);border-radius:18px;flex-direction:column;text-decoration:none;display:flex;overflow:hidden}.card:hover{transform:translateY(-4px)}.card .thumb{aspect-ratio:16/10;background:var(--card);overflow:hidden}.card .thumb img{object-fit:contain;width:100%;height:100%;transition:transform .6s var(--ease);padding:.75rem}.card:hover .thumb img{transform:scale(1.04)}.card .body{align-content:start;gap:.35rem;min-width:0;padding:1rem 1.15rem 1.2rem;display:grid}.card h3{font-family:var(--display);margin:0;font-size:1.25rem;font-weight:600;line-height:1.2}.card p{color:var(--muted);margin:0;font-size:.97rem}.card .tags{margin-top:.3rem}.card{position:relative}.card h3 a.stretch{color:inherit;text-decoration:none}.card a.stretch:after{content:"";z-index:1;position:absolute;inset:0}.card a.stretch:focus-visible{outline:none}.card:has(a.stretch:focus-visible){outline:3px solid var(--accent);outline-offset:3px}.card .tags{z-index:2;position:relative}.filters .tagchip{background:var(--grad);color:#fff;border-color:#0000;align-items:center;gap:.45rem;display:inline-flex}.filters .tagchip[hidden]{display:none}:root[data-theme=dark] .filters .tagchip{color:#241430}.card.feature{flex-direction:row;grid-column:1/-1}.card.feature .thumb{aspect-ratio:16/10;flex:1}.card.feature .thumb img{object-fit:cover;padding:0}.card.feature .body{flex:1;align-content:center;padding:1.5rem}.card.feature h3{font-size:1.75rem}.card.small{border:1.5px solid var(--line);box-shadow:none;background:0 0}.card.small:hover{border-color:var(--accent)}.card.small h3{font-size:1.1rem}.pubs{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;display:grid}.pub{background:var(--card);box-shadow:var(--shadow);border-radius:16px;grid-template-columns:7.5rem minmax(0,1fr);align-items:start;gap:1rem;padding:1rem;display:grid}.pub img{aspect-ratio:4/3;object-fit:cover;background:#fff;border-radius:10px;width:100%}.pub h3{font-family:var(--display);margin:.15rem 0 .35rem;font-size:1.05rem;font-weight:600;line-height:1.25}.pub p{color:var(--muted);margin:0;font-size:.9rem}.pub p b{color:var(--ink)}.pub p.sum{color:var(--ink);margin-top:.5rem;font-size:.92rem;line-height:1.45}.pub .chips{gap:.35rem;margin-top:.6rem}.pub .chips a,.pub .chips .more{color:var(--accent);text-underline-offset:3px;font-size:.82rem;font-weight:700}.pub{position:relative}.pub h3 a.stretch{color:inherit;text-decoration:none}.pub a.stretch:after{content:"";z-index:1;position:absolute;inset:0}.pub a.stretch:focus-visible{outline:none}.pub:has(a.stretch:focus-visible){outline:3px solid var(--accent);outline-offset:3px}.pub .chips a{z-index:2;position:relative}.pub .more .arr{transition:transform .3s var(--ease);display:inline-block}.pub:hover .more .arr{transform:translate(4px)}.pub:hover h3{color:var(--accent)}.paper{grid-template-columns:minmax(0,1fr) 19rem;align-items:start;gap:2.5rem;padding-block:2.5rem 4rem;display:grid}.paper .prose{max-width:none;padding:0}.paper .prose .figrow{margin-inline:0}.preview{grid-template-columns:minmax(0,1fr);gap:.9rem;min-width:0;display:grid;position:sticky;top:5.5rem}.sheet{color:#1d1626;transition:transform .4s var(--ease), box-shadow .4s var(--ease);background:#f9f6fa;border-radius:6px;padding:1.1rem 1rem 1rem;text-decoration:none;display:block;position:relative;transform:rotate(-1.2deg);box-shadow:0 1px 2px #0000001f,0 18px 40px -18px #28143c73}.sheet:before{content:"";z-index:-1;background:#f1ecf3;border-radius:6px;position:absolute;inset:0;transform:rotate(2.6deg)translate(6px,4px);box-shadow:0 10px 30px -18px #28143c66}a.sheet:hover{transform:rotate(0)translateY(-4px);box-shadow:0 1px 2px #0000001f,0 28px 50px -20px #28143c8c}.sheet .s-venue{letter-spacing:.08em;text-transform:uppercase;color:#7d4aa8;font-size:.62rem;font-weight:700}.sheet .s-title{text-align:center;margin:.45rem 0 .35rem;font-family:Georgia,Times New Roman,serif;font-size:.98rem;font-weight:700;line-height:1.25}.sheet .s-auth{text-align:center;color:#5a5064;margin:0 0 .7rem;font-family:Georgia,serif;font-size:.66rem}.sheet .s-auth b{color:#1d1626}.sheet img{aspect-ratio:4/3;object-fit:cover;border:1px solid #eee;border-radius:3px;width:100%}.sheet .s-lines{gap:4px;margin-top:.7rem;display:grid}.sheet .s-lines i{background:#ebe6ef;border-radius:2px;height:4px}.sheet .s-lines i:nth-child(3n){width:82%}.sheet .s-cta{opacity:0;white-space:nowrap;background:var(--grad);color:#fff;transition:opacity .3s, transform .3s var(--ease);border-radius:99px;padding:.45rem .9rem;font-size:.85rem;font-weight:700;position:absolute;bottom:1.1rem;left:50%;transform:translate(-50%,6px)}a.sheet:hover .s-cta,a.sheet:focus-visible .s-cta{opacity:1;transform:translate(-50%)}.preview .chips{justify-content:center}.cite{font-size:.85rem}.cite summary{cursor:pointer;color:var(--accent);font-weight:700}.cite pre{background:var(--band);border-radius:10px;margin:.5rem 0 0;padding:.75rem;font-size:.72rem;line-height:1.45;overflow-x:auto}.cite button{margin-top:.4rem}@media (width<=860px){.paper{grid-template-columns:minmax(0,1fr)}.preview{box-sizing:border-box;order:-1;width:100%;max-width:22rem;margin-inline:auto;padding-inline:.6rem;position:static}}.phead{background:var(--band)}.phead .in{gap:1rem;padding-block:3rem;display:grid}.phead .authors{color:var(--muted);margin:0;font-size:.95rem}.phead .authors b{color:var(--ink)}.phead .authors a{color:inherit;text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--accent) 45%, transparent);text-underline-offset:3px;transition:color .2s,text-decoration-color .2s}.phead .authors a:hover{color:var(--accent);text-decoration-color:var(--accent)}.phead h1{font-family:var(--display);letter-spacing:-.03em;color:var(--deep);text-wrap:balance;max-width:22ch;margin:0;font-size:clamp(2.2rem,5.5vw,3.75rem);font-weight:800;line-height:1}.phead p.tagline{color:var(--muted);margin:-.4rem 0 0;font-size:1.1rem}.phead p.desc{max-width:42rem;margin:0;font-size:1.2rem}.back{color:var(--accent);font-size:.95rem;font-weight:700;text-decoration:none}.back:hover{text-underline-offset:3px;text-decoration:underline}.prose{max-width:44rem;margin:0 auto;padding-block:2.5rem 1rem}.prose h2{font-family:var(--display);letter-spacing:-.02em;text-wrap:balance;margin:2.75rem 0 .75rem;font-size:1.75rem;font-weight:800}.prose h3{font-family:var(--display);margin:2rem 0 .5rem;font-size:1.3rem;font-weight:600}.prose p,.prose li{max-width:68ch}.prose a{color:var(--accent);text-underline-offset:3px}.prose strong{color:var(--deep)}.prose code{font-family:var(--mono);background:var(--code);border-radius:5px;padding:.1em .35em;font-size:.88em}.prose pre{color:var(--ink);border-radius:12px;padding:1rem 1.25rem;font-size:.9rem;line-height:1.45;overflow-x:auto;background:var(--code)!important}.prose pre code{background:0 0;padding:0}:root:not([data-theme=dark]) :is(.card .thumb img,.pub img,.prose .figrow img,.lightbox img){filter:brightness(.95)}:root[data-theme=dark] .astro-code,:root[data-theme=dark] .astro-code span{color:var(--shiki-dark)!important}.prose .figrow{grid-auto-columns:minmax(0,1fr);grid-auto-flow:column;gap:1rem;margin:1.75rem -4rem 0;display:grid}.prose .figrow img{width:100%;box-shadow:var(--shadow);background:#fff;border-radius:12px;display:block}.prose .figrow.narrow{grid-auto-flow:row;max-width:340px;margin-inline:auto}.prose .caption{color:var(--muted);text-align:center;margin:.75rem 0 1.75rem;font-size:.9rem}.prose .figrow img{cursor:zoom-in;transition:transform .25s var(--ease)}.prose .figrow img:hover{transform:scale(1.015)}.lightbox{background:var(--card);width:max-content;max-width:min(96vw,1400px);max-height:96vh;color:var(--ink);border:0;border-radius:18px;padding:1.25rem 1.25rem 1rem;overflow:auto;box-shadow:0 30px 80px -20px #00000080}.lightbox::backdrop{backdrop-filter:blur(3px);background:#160a1ed1}.lightbox figure{justify-items:center;gap:.9rem;margin:0;display:grid}.lightbox img{background:#fff;border-radius:10px;width:auto;max-width:100%;height:auto;max-height:calc(96vh - 9rem);display:block}.lightbox figcaption{max-width:65ch;color:var(--muted);text-align:center;font-size:.98rem}.lightbox .lb-close{background:var(--band);width:2.25rem;height:2.25rem;color:var(--ink);cursor:pointer;border:0;border-radius:50%;font-size:1.5rem;line-height:1;position:absolute;top:.5rem;right:.6rem}.lightbox .lb-nav{color:var(--muted);justify-content:center;align-items:center;gap:1rem;margin-top:.75rem;font-size:.9rem;display:flex}.lightbox .lb-nav button{border:1.5px solid var(--line);color:var(--ink);cursor:pointer;background:0 0;border-radius:999px;padding:.3rem .9rem;font-size:1rem}.lightbox .lb-nav button:hover,.lightbox .lb-close:hover{border-color:var(--accent);color:var(--accent)}.lightbox.single .lb-nav{display:none}@media (prefers-reduced-motion:reduce){.prose .figrow img{transition:none}.prose .figrow img:hover{transform:none}}.r-driver{--c:#963f19}.r-method{--c:#71409b}.r-model{--c:#1b6e66}.r-app{--c:#4a6b22}:root[data-theme=dark] .r-driver{--c:#f2a47e}:root[data-theme=dark] .r-method{--c:#c4a1e0}:root[data-theme=dark] .r-model{--c:#6cd0c2}:root[data-theme=dark] .r-app{--c:#a9cf74}.role{font:600 .72rem/1.2 var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--c)}.through{grid-template-columns:minmax(0,1fr);gap:1.75rem;display:grid}.through .say{gap:1.25rem;display:grid}.through .say p{margin:0}.through .say p.big{font-family:var(--display);color:var(--deep);letter-spacing:-.01em;font-size:1.6rem;font-weight:600;line-height:1.25}.through .lead{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);align-items:center;gap:2rem;display:grid}.areas{border-top:1px dashed var(--line);gap:1rem;padding-top:1.25rem;display:grid}.areas h3{font-family:var(--display);letter-spacing:-.02em;color:var(--ink);margin:0;font-size:1.45rem;font-weight:800}.topics{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:auto 1fr 1fr 1fr;gap:.6rem 1.5rem;display:grid}.tgroup{grid-row:span 4;grid-template-rows:subgrid;display:grid}.tgroup .role{align-self:end}.tcard{color:inherit;background:var(--card);border:1px solid var(--line);border-left:3px solid var(--c);box-shadow:0 2px 10px var(--shadow);border-radius:12px;align-content:start;gap:.2rem;padding:.7rem .85rem;text-decoration:none;transition:transform .2s,border-color .2s;display:grid}.tcard:hover,.tcard:focus-visible{border-color:var(--c);transform:translateY(-2px)}.tcard b{font-family:var(--display);color:var(--ink);font-size:1.02rem}.tcard span{color:var(--muted);font-size:.84rem;line-height:1.4}.say-foot{color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.say-foot p{flex:28rem;max-width:46rem;margin:0;font-size:.95rem;line-height:1.55}.rp{max-width:50rem;margin:0 auto;padding-block:2.5rem 1rem}.rp>.rmap.rmap{margin-bottom:1rem;margin-inline:calc(50% + -1*min(560px,50vw - 1rem))}.rp-h{margin:0 calc(50% + -1*min(560px,50vw - 1rem)) 1rem}.rp-h h2{font-family:var(--display);letter-spacing:-.02em;margin:.2rem 0 .3rem;font-size:1.6rem;font-weight:800}.rp-h p{color:var(--muted);margin:0}.rp-h.topics-h{margin-top:3rem}.phead details.statement{max-width:42rem;margin-top:.9rem}.phead details.statement summary{cursor:pointer;font:600 .8rem var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--accent);width:fit-content}.phead details.statement p{color:var(--muted);margin:.75rem 0 0;font-size:1rem}.rts{grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;margin-inline:calc(50% + -1*min(560px,50vw - 1rem));display:grid}.rt{background:var(--card);border-top:3px solid var(--c);box-shadow:0 2px 12px var(--shadow);border-radius:16px;padding:1.25rem 1.35rem 1rem;scroll-margin-top:5rem;font-size:.95rem}.rt h2{font-family:var(--display);letter-spacing:-.02em;margin:.25rem 0 .6rem;font-size:1.35rem;font-weight:800}.rt>p{margin:0 0 .8rem}.rt .cols{gap:1rem;margin-top:1rem;display:grid}.rt .cols:empty{display:none}.rt .cols>:only-child{grid-column:1/-1}.rt .box{background:color-mix(in srgb, var(--c) 6%, transparent);border-radius:12px;padding:.85rem 1rem;font-size:.9rem}.rt .box .kicker{color:var(--c);margin-bottom:.5rem;display:block}.rt .box ul{gap:.6rem;margin:0;padding:0;list-style:none;display:grid}.rt .box li a,.rt .box li b{color:var(--ink);font-weight:700}.rt .box li a{text-decoration:underline;text-decoration-color:color-mix(in srgb, var(--c) 60%, transparent);text-underline-offset:3px}.rt .box li a:hover{color:var(--c)}.rt .box li span{color:var(--muted);font-size:.88rem;display:block}.rt .box p{margin:0}.rt.hub{background:color-mix(in srgb, var(--c) 7%, var(--card))}.rp .outro{justify-content:center;margin-top:3rem;display:flex}.partof{color:var(--muted);flex-wrap:wrap;align-items:center;gap:.4rem;font-size:.85rem;display:flex}.partof a{font:600 .72rem/1 var(--mono);letter-spacing:.04em;text-transform:uppercase;color:var(--c);border:1.5px solid color-mix(in srgb, var(--c) 45%, transparent);border-radius:99px;padding:.35rem .6rem;text-decoration:none;transition:background .2s}.partof a:hover{background:color-mix(in srgb, var(--c) 14%, transparent)}@media (width<=860px){.through .lead{grid-template-columns:1fr;gap:1.25rem}.topics{grid-template-columns:repeat(2,minmax(0,1fr))}.tgroup:nth-child(n+3) .role{margin-top:1rem}}@media (width<=600px){.through .say p.big{font-size:1.25rem}.topics{grid-template-columns:1fr;grid-auto-rows:auto;row-gap:1.6rem}.tgroup{grid-row:auto;grid-template-rows:none;gap:.6rem}.tgroup:nth-child(n+3) .role{margin-top:0}.rts{grid-template-columns:1fr}}.cv{gap:3rem;max-width:52rem;margin:0 auto;padding-block:2.5rem 0;display:grid}.cv h2{font-family:var(--display);letter-spacing:-.02em;margin:0 0 1rem;font-size:1.6rem;font-weight:800}.cv .item{border-top:1px solid var(--line);grid-template-columns:9rem minmax(0,1fr);gap:1.25rem;padding-block:1rem;display:grid}.cv .item.wide{grid-template-columns:minmax(0,1fr)}.cv .when{color:var(--muted);font-variant-numeric:tabular-nums;padding-top:.15rem;font-size:.9rem}.cv h3{font-family:var(--display);margin:0;font-size:1.1rem;font-weight:600}.cv .sub{color:var(--muted);margin:.1rem 0 0}.cv ul{margin:.5rem 0 0;padding-left:1.1rem}.cv li{margin-bottom:.3rem}.cv a{color:var(--accent);text-underline-offset:3px}footer.site{background:var(--band);margin-top:5rem}footer.site .in{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding-block:2.5rem;display:flex}footer.site p{color:var(--muted);margin:0}.sr{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.progress{z-index:30;pointer-events:none;background:var(--grad);transform-origin:0;height:3px;position:fixed;top:0;left:0;right:0;transform:scaleX(0)}@supports (animation-timeline:scroll()){.progress{animation:linear both grow scroll(root)}}@keyframes grow{to{transform:scaleX(1)}}.intro,.phead{isolation:isolate;position:relative;overflow:hidden}.intro:before,.intro:after,.phead:before,.phead:after{content:"";z-index:-1;pointer-events:none;border-radius:50%;position:absolute}.intro:before,.phead:before{background:radial-gradient(circle, var(--glow1), transparent 62%);width:42rem;height:42rem;animation:24s ease-in-out infinite alternate drift-a;top:-20rem;left:-14rem}.intro:after,.phead:after{background:radial-gradient(circle, var(--glow2), transparent 62%), radial-gradient(circle at 30% 30%, var(--glow3), transparent 55%);width:36rem;height:36rem;animation:30s ease-in-out infinite alternate drift-b;bottom:-22rem;right:-10rem}.plife{z-index:-1;pointer-events:none;opacity:.5;width:100%;height:100%;position:absolute;inset:0;-webkit-mask-image:linear-gradient(90deg,#0000004d 0%,#00000073 45%,#000 75%);mask-image:linear-gradient(90deg,#0000004d 0%,#00000073 45%,#000 75%)}:root[data-theme=dark] .plife{opacity:.4}:root.lumpmode .plife{opacity:.8}.plife-ctl{z-index:1;flex-direction:column;align-items:center;gap:.35rem;display:flex;position:absolute;bottom:.85rem;right:1rem}.plife-link{font:.68rem/1 var(--mono);color:var(--muted);background:color-mix(in srgb, var(--card) 70%, transparent);text-underline-offset:2px;border-radius:999px;padding:.2rem .45rem;text-decoration:underline}.plife-link:hover{color:var(--accent)}.plife-btn{font:600 .72rem/1 var(--mono);color:var(--muted);background:color-mix(in srgb, var(--card) 70%, transparent);border:1px solid var(--line);cursor:pointer;border-radius:999px;padding:.4rem .7rem}.plife-btn:hover{color:var(--accent);border-color:var(--accent)}@media (width<=600px){.plife{opacity:.3;-webkit-mask-image:none;mask-image:none}}@keyframes drift-a{to{transform:translate(22rem,9rem)scale(1.15)}}@keyframes drift-b{to{transform:translate(-18rem,-7rem)scale(.9)}}.split .w{vertical-align:top;margin-bottom:-.12em;padding-bottom:.12em;display:inline-block;overflow:hidden}.split .w>span{display:inline-block}h2[data-text]{isolation:isolate;position:relative}h2[data-text]:after{content:attr(data-text);z-index:-1;pointer-events:none;background:var(--grad);color:#0000;opacity:.3;transition:transform .9s var(--ease) .2s, opacity .9s var(--ease) .2s;-webkit-background-clip:text;background-clip:text;position:absolute;inset:auto 0 0;transform:translate(.08em,.08em)}.top nav a{position:relative}.top nav a:after{content:"";background:var(--grad);transform-origin:0;height:2px;transition:transform .35s var(--ease);border-radius:2px;position:absolute;bottom:.15rem;left:.75rem;right:.75rem;transform:scaleX(0)}.top nav a:hover:after,.top nav a[aria-current=page]:after{transform:scaleX(1)}.btn{transition:transform .25s var(--ease), box-shadow .25s var(--ease)}.btn:hover{box-shadow:var(--shadow), 0 12px 24px -14px color-mix(in srgb, var(--accent) 70%, transparent)}.btn.primary{isolation:isolate;position:relative;overflow:hidden}.btn.primary:after{content:"";z-index:-1;pointer-events:none;background:linear-gradient(110deg,#0000 30%,#ffffff59 50%,#0000 70%);position:absolute;inset:0;transform:translate(-120%)}.btn.primary:hover:after{transition:transform .75s var(--ease);transform:translate(120%)}.btn.primary{z-index:0}.card{transition:transform .35s var(--ease), box-shadow .35s var(--ease), border-color .25s}.card:hover{box-shadow:var(--shadow), 0 22px 40px -22px color-mix(in srgb, var(--accent) 60%, transparent)}.card .thumb{position:relative}.card .thumb:after{content:"";pointer-events:none;background:var(--grad);opacity:0;mix-blend-mode:multiply;transition:opacity .4s var(--ease);position:absolute;inset:0}.card:hover .thumb:after{opacity:.16}:root[data-theme=dark] .card .thumb:after{mix-blend-mode:normal}:root[data-theme=dark] .card:hover .thumb:after{opacity:.12}.card .go{color:var(--accent);justify-self:start;align-items:center;gap:.35rem;margin-top:.45rem;font-size:.9rem;font-weight:700;display:inline-flex}.card .go .arr{transition:transform .3s var(--ease);display:inline-block}.card:hover .go .arr{transform:translate(5px)}.pub{transition:transform .35s var(--ease), box-shadow .35s var(--ease)}.pub:hover{box-shadow:var(--shadow), 0 18px 36px -22px color-mix(in srgb, var(--accent) 55%, transparent);transform:translateY(-3px)}@media (prefers-reduced-motion:no-preference){html.first header.top{animation:drop .8s var(--ease) backwards}.split .w>span{animation:word .9s var(--ease) calc(var(--i) * 65ms + .15s) backwards}.intro .lede{animation:rise .8s var(--ease) .55s backwards}.intro .chips{animation:rise .8s var(--ease) .7s backwards}.photo{animation:pop 1.1s var(--ease) .25s backwards}.photo .tag{animation:rise .7s var(--ease) .95s backwards}.phead .back,.phead .kicker{animation:rise .6s var(--ease) 50ms backwards}.phead .desc{animation:rise .8s var(--ease) .45s backwards}.phead .tags,.phead .chips{animation:rise .8s var(--ease) .6s backwards}html.js :is(.sh,.pub,.card,.rt,.tl-item,.prose>:is(p,ul,ol,pre,h2,h3,.figrow,.caption),.cv .item,.cv h2):not(.on){opacity:0}html.js :is(.sh:not(.on) h2,.prose h2:not(.on),.cv h2:not(.on)):after{opacity:0;transform:none}.on{animation:rise .8s var(--ease) var(--d,0s) backwards}.sh.on{animation-name:fade}.sh.on h2,.prose h2.on,.cv h2.on{animation:slide .8s var(--ease) var(--d,0s) backwards}}@keyframes drop{0%{opacity:0;transform:translateY(-100%)}}@keyframes word{0%{transform:translateY(110%)rotate(3deg)}}@keyframes rise{0%{opacity:0;transform:translateY(26px)}}@keyframes fade{0%{opacity:0}}@keyframes slide{0%{opacity:0;transform:translate(-36px)}}@keyframes pop{0%{opacity:0;transform:scale(.92)rotate(-2deg)}}header.top{view-transition-name:site-header}html:not([data-vt=filter])::view-transition-old(root){animation:vt-out .3s var(--ease) both}html:not([data-vt=filter])::view-transition-new(root){animation:vt-in .4s var(--ease) both}@keyframes vt-out{to{opacity:0;transform:translateY(-6px)}}@keyframes vt-in{0%{opacity:0;transform:translateY(10px)}}::view-transition-group(*){animation-duration:.45s;animation-timing-function:var(--ease)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}html{scroll-behavior:auto}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}@media (width<=960px){.prose .figrow{margin-inline:0}}@media (width<=860px){.grid{grid-template-columns:repeat(2,minmax(0,1fr))}.pubs{grid-template-columns:1fr}}@media (width<=600px){.intro .in{grid-template-columns:1fr;gap:2rem;padding-block:2.5rem 3rem}.photo{order:-1;justify-self:start;width:70%}.grid{grid-template-columns:1fr}.card.feature{flex-direction:column}.photo .tag{left:0}header.top .in{gap:.5rem}.top nav{flex-wrap:nowrap;gap:0}.brand{font-size:.98rem}.brand img{width:28px;height:28px}.pub{grid-template-columns:5.5rem minmax(0,1fr)}.top nav a{padding:.35rem .45rem;font-size:.9rem}.prose .figrow{grid-auto-flow:row}.cv .item{grid-template-columns:1fr;gap:.25rem}}@media (width<=440px){.top nav .wide-only{display:none}.brand-name{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}}.edit-links[data-astro-cid-gsz3dkk5]{z-index:60;background:var(--card);border:1px solid var(--line);max-width:calc(100vw - 6rem);box-shadow:var(--shadow);border-radius:999px;flex-wrap:wrap;align-items:center;gap:.35rem;padding:.35rem .5rem;font-size:.78rem;transition:opacity .2s;display:flex;position:fixed;bottom:1rem;left:1rem}.edit-links[data-astro-cid-gsz3dkk5]:hover,.edit-links[data-astro-cid-gsz3dkk5]:focus-within{opacity:1}.edit-links[data-astro-cid-gsz3dkk5] span[data-astro-cid-gsz3dkk5]{color:var(--ink);padding-inline:.25rem;font-weight:700}.edit-links[data-astro-cid-gsz3dkk5] a[data-astro-cid-gsz3dkk5]{color:var(--accent);background:var(--band);border-radius:999px;padding:.15rem .5rem;text-decoration:none}.edit-links[data-astro-cid-gsz3dkk5] a[data-astro-cid-gsz3dkk5]:hover{text-decoration:underline}.lump{all:unset;cursor:pointer;z-index:3;opacity:.75;transition:transform .3s var(--ease), opacity .3s, filter .3s;line-height:0;display:inline-block;position:relative}.lump:hover,.lump:focus-visible{opacity:1;transform:scale(1.4)rotate(-8deg)}.lump:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:50%}.lump.found{opacity:.35;filter:grayscale(.6)}.lump.found:after{content:"✓";font:700 11px/1 var(--body);color:var(--accent);position:absolute;top:-8px;right:-6px}.lump.caught{animation:caught .6s var(--ease)}@keyframes caught{40%{transform:scale(1.8)rotate(12deg)}}.brand{position:relative}.brand:after{content:"psst! poke me";z-index:50;background:var(--card);color:var(--accent);font:700 .62rem/1.2 var(--body);white-space:nowrap;box-shadow:var(--shadow);pointer-events:none;border-radius:9px 2px 9px 9px;margin-top:2px;padding:.18rem .45rem;animation:2.6s ease-in-out infinite peek;position:absolute;top:100%;right:calc(100% - .5rem)}:root.hunt-started .brand:after{display:none}:root:not(.hunt-started) .brand img{cursor:pointer}@keyframes peek{50%{translate:0 3px}}@media (prefers-reduced-motion:reduce){.brand:after{animation:none}}@media (width<=760px){.brand:after{border-radius:2px 9px 9px;left:0;right:auto}}.intro:has(.lump-particles){position:relative}.intro .lump-particles{opacity:.5;animation:14s ease-in-out infinite pdrift;position:absolute;bottom:9%;left:47%}.intro .lump-particles:hover,.intro .lump-particles:focus-visible{opacity:1;animation-play-state:paused}@keyframes pdrift{25%{translate:18px -10px}50%{translate:34px 2px}75%{translate:14px 9px}}@media (prefers-reduced-motion:reduce){.intro .lump-particles{animation:none}}.lump.letter{vertical-align:-.14em;opacity:1;z-index:auto;filter:grayscale()brightness(.24);width:.92em;margin:0 .02em}:root[data-theme=dark] .lump.letter{filter:grayscale()brightness(1.12)}.lump.letter svg{width:100%;height:auto;display:block}.lump.letter:hover,.lump.letter:focus-visible{filter:none;transform:scale(1.7)rotate(-8deg)}.lump.letter.found{opacity:.8;filter:none}.lump.letter.found:after{top:-.9em;right:-.5em}.prose .figrow:has(.on-img){position:relative}.lump.on-img{opacity:1;width:17px;position:absolute;bottom:7%;right:2.5%}.lump.on-img svg,.lump.bullet svg{width:100%;height:auto;display:block}li:has(>.lump.bullet){list-style:none;position:relative}.lump.bullet{opacity:.9;width:.8em;position:absolute;top:.3em;left:-1.15em}.lump-swimmer{opacity:1;animation:8s linear infinite swimby;position:absolute;top:64%;left:0}.lump-swimmer svg{animation:1.4s ease-in-out infinite wiggle}.lump-swimmer:hover,.lump-swimmer:focus-visible,.lump-swimmer.found{animation-play-state:paused}@keyframes swimby{0%,25%{translate:-60px}to{translate:calc(100vw + 60px) -50px}}@keyframes wiggle{50%{transform:translateY(-4px)rotate(-6deg)}}@media (prefers-reduced-motion:reduce){.lump-swimmer,.lump-swimmer svg{animation:none}.lump-swimmer{translate:80vw}}.lump-flip{vertical-align:middle;margin-left:.5rem}@media (prefers-color-scheme:dark){:root[data-theme=dark] .lump-flip{display:none}}@media not (prefers-color-scheme:dark){:root:not([data-theme=dark]) .lump-flip{display:none}}:root:not([data-theme=dark]) .lump:not(.letter) svg,:root:not([data-theme=dark]) .lump:not(.letter):not(.found){opacity:1}.hunt-toast{z-index:40;background:var(--deep);width:min(26rem,100vw - 32px);color:var(--bg);border:2px solid var(--accent);box-shadow:0 0 0 4px color-mix(in srgb, var(--accent) 25%, transparent), 0 22px 50px -16px #1e082db3;animation:toast-in .5s var(--ease);cursor:pointer;border-radius:16px;padding:.9rem 1.1rem;position:fixed;top:4.6rem;left:50%;transform:translate(-50%)}.hunt-toast[hidden]{display:none}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,-20px)}}.ht-head{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.ht-title{font-family:var(--display);font-size:1.05rem}.ht-count{background:var(--accent);color:var(--accent-ink);border-radius:99px;padding:.1rem .5rem;font-size:.8rem;font-weight:700}.ht-clue{color:color-mix(in srgb, var(--bg) 85%, var(--deep));margin:.35rem 0 0;font-size:.92rem}.hunt-badge{z-index:35;background:var(--card);color:var(--ink);font:700 .85rem var(--body);box-shadow:var(--shadow);cursor:pointer;transition:transform .25s var(--ease);border:0;border-radius:99px;align-items:center;gap:.4rem;padding:.3rem .75rem .3rem .3rem;display:inline-flex;position:fixed;bottom:1rem;right:1rem}.hunt-badge:hover{transform:translateY(-2px)}.hunt-badge[hidden]{display:none}.hunt-badge img{object-fit:cover;border-radius:50%}.hunt-panel{background:var(--card);width:min(22rem,100vw - 32px);color:var(--ink);box-shadow:var(--shadow), 0 24px 60px -24px #3c145a80;border:0;border-radius:18px;margin:auto 1rem 4.5rem auto;padding:1.1rem 1.2rem}.hunt-panel h2{font-family:var(--display);margin:0 0 .3rem;font-size:1.2rem}.hp-lumpy{text-align:center;justify-items:center;gap:.35rem;margin:0 0 .8rem;display:grid}.hp-lumpy img{object-fit:cover;width:140px;height:140px;box-shadow:var(--shadow);border-radius:28px}.hp-lumpy figcaption{color:var(--muted);font-size:.8rem}.ht-lumpy{object-fit:cover;border:2px solid var(--accent);border-radius:24px;width:120px;height:120px;margin:0 auto .6rem;display:block}.ht-lumpy[hidden]{display:none}.hp-intro{color:var(--muted);margin:0 0 .75rem;font-size:.88rem}.hp-about{background:var(--band);border-radius:10px;margin:.25rem 0 .75rem;padding:.6rem .75rem;font-size:.85rem;line-height:1.45}.hp-about a{color:var(--accent);white-space:nowrap;font-weight:700}.hp-list{gap:.45rem;margin:0;padding-left:1.3rem;font-size:.88rem;display:grid}.hp-list li.done{color:var(--muted)}.hp-list li.done::marker{content:"✓  ";color:var(--accent)}.hp-list li.next{font-weight:700}.hp-list li.later{color:var(--muted);font-style:italic}.hunt-toast.win{text-align:center;padding:1.2rem 1.3rem}.hunt-toast.win .ht-head{flex-direction:column;justify-content:center;align-items:center;gap:.1rem}.hunt-toast.win .ht-title{font-size:1.4rem}.lump-pop{z-index:45;pointer-events:none;border:1.5px solid var(--accent);background:color-mix(in srgb, var(--accent) 15%, transparent);width:10px;height:10px;animation:lpop .9s var(--ease) forwards;border-radius:50%;position:fixed}@keyframes lpop{to{transform:translate(var(--dx), var(--dy)) scale(.4);opacity:0}}:root.lumpmode .prose ul>li::marker{content:"◦  ";color:var(--accent)}:root.lumpmode .brand img{animation:3.5s ease-in-out infinite bob}@keyframes bob{50%{transform:translateY(-3px)rotate(-6deg)}}.hp-actions{flex-wrap:wrap;gap:.5rem;margin-top:.9rem;display:flex}@view-transition{navigation:auto}
