:root{color-scheme:dark;--bg:#0b0b10;--surface:#13131a;--fg:#f4f2ee;--muted:rgba(244,242,238,0.62);--line:rgba(244,242,238,0.14);--glass:rgba(255,255,255,0.1);--glass-hover:rgba(255,255,255,0.2);--ring:rgba(255,255,255,0.35);--accent:#ffb070;--gutter:16px;--font:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif}@media (min-width:768px){:root{--gutter:32px}}*{box-sizing:border-box}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font);line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit}a:focus-visible,button:focus-visible{outline:2px solid var(--fg);outline-offset:3px}.skip-link{position:absolute;left:var(--gutter);top:-100px;z-index:20;background:#15130f;color:#f3eee3;border:1px solid rgba(243,238,227,.6);padding:8px 14px;border-radius:8px;font-weight:600;text-decoration:none}.skip-link:focus{top:12px}.skip-link:focus-visible{outline:2px solid #15130f;outline-offset:2px}.site-header{position:absolute;inset:0 0 auto 0;z-index:10;display:flex;justify-content:space-between;align-items:center;padding:max(14px,env(safe-area-inset-top)) var(--gutter) 14px;pointer-events:none}.site-header a{pointer-events:auto;text-decoration:none}.wordmark{font-weight:700;letter-spacing:-.01em;font-size:17px}.site-header nav{display:flex;gap:18px;font-size:15px}.site-header nav a{color:var(--muted)}.site-header nav a:hover{color:var(--fg)}.main-site,.stage{position:relative}.stage{height:100svh;min-height:520px;overflow:hidden;background:var(--bg);-moz-user-select:none;user-select:none;-webkit-user-select:none}.stage:focus{outline:none}.stage-canvas{position:absolute!important;inset:0;transition:opacity .2s ease}.stage-canvas.fading{opacity:0}.drag-surface{position:absolute;inset:0;cursor:-webkit-grab;cursor:grab;touch-action:pan-y}.drag-surface:active{cursor:-webkit-grabbing;cursor:grabbing}.static-stage{animation:fade-in .25s ease both}.static-bg,.static-stage{position:absolute;inset:0}.static-bg{width:100%;height:100%;object-fit:cover}.static-figure{left:50%;height:54%;translate:-50% -50%;object-fit:contain}.arrow,.static-figure{position:absolute;top:50%}.arrow{translate:0 -50%;z-index:5;width:56px;height:56px;border-radius:50%;border:1px solid var(--ring);background:var(--glass);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:var(--fg);display:grid;place-items:center;cursor:pointer;transition:background .15s ease,scale .15s ease,border-color .3s ease}.arrow:hover{background:var(--glass-hover);border-color:var(--accent)}.arrow:active{scale:.94}.arrow svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.arrow.left{left:max(var(--gutter),env(safe-area-inset-left))}.arrow.right{right:max(var(--gutter),env(safe-area-inset-right))}.caption{position:absolute;left:var(--gutter);right:var(--gutter);bottom:max(28px,env(safe-area-inset-bottom));z-index:5;text-align:center;pointer-events:none;text-shadow:0 2px 12px rgba(0,0,0,.55)}.caption h2{margin:0;font-size:clamp(24px,4vw,36px);font-weight:680;letter-spacing:-.015em;animation:rise .3s ease both}.caption .tagline{margin:6px auto 0;max-width:46ch;color:var(--fg);font-size:15px}.caption .counter{margin:6px 0 0;color:var(--muted);font-size:13px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.callouts{position:absolute;inset:0;z-index:4;pointer-events:none}.callout-list{position:absolute;left:var(--list-left,62%);right:var(--list-right,max(12%,calc(var(--gutter) + 72px)));top:30%;bottom:35%;margin:0;padding:0;list-style:none;display:flex;flex-direction:column;justify-content:center;align-items:flex-start;gap:12px}.callouts[data-side=left] .callout-list{align-items:flex-end}.callout{max-width:100%;padding:9px 14px;border-radius:12px;border:1px solid color-mix(in srgb,var(--accent) 55%,transparent);background:color-mix(in srgb,var(--accent) 16%,rgba(10,10,16,.5));backdrop-filter:blur(10px) saturate(1.2);-webkit-backdrop-filter:blur(10px) saturate(1.2);box-shadow:0 6px 24px rgba(0,0,0,.28);font-size:14px;line-height:1.35;overflow-wrap:anywhere;opacity:0;visibility:hidden}.callouts[data-state=in] .callout{opacity:1;visibility:visible;animation:callout-in .38s cubic-bezier(.2,.7,.2,1) backwards;animation-delay:calc(var(--i) * 90ms)}.callouts[data-state=out] .callout{filter:blur(calc(var(--spin-blur, 0) * 12px));animation:callout-out .12s linear forwards}.callout a{pointer-events:auto;color:inherit;text-underline-offset:3px}.callout-lines{position:absolute;inset:0;width:100%;height:100%;overflow:visible;opacity:0;transition:opacity .15s ease}.callouts[data-lines=on] .callout-lines{opacity:1}.callout-lines path{fill:none;stroke:var(--accent);stroke-opacity:.75;stroke-width:1.25;stroke-dasharray:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.5))}.callout-lines circle{fill:var(--accent)}.callouts[data-lines=on] .callout-lines g{animation:callout-draw .36s ease-out backwards}.callouts[data-lines=on] .callout-lines path{animation:callout-draw-path .36s ease-out backwards}.callouts[data-lines=on] .callout-lines :is(g,path){animation-delay:calc(var(--i) * 90ms + 60ms)}.callouts.reduce[data-lines=on] .callout-lines g,.callouts.reduce[data-state=in] .callout{animation-name:callout-fade}.callouts.reduce[data-lines=on] .callout-lines path{animation:none}.callouts.reduce[data-state=out] .callout{filter:none}@media (max-height:560px) and (min-aspect-ratio:1/1){.callout:nth-child(n+3){display:none}}@media (max-aspect-ratio:1/1){.callout-lines{display:none}.callout-list{left:var(--gutter);right:var(--gutter);top:auto;bottom:calc(max(28px, env(safe-area-inset-bottom)) + var(--caption-h, 96px) + 10px);flex-direction:row;align-items:stretch;gap:0;padding:8px 4px;border-radius:14px;border:1px solid color-mix(in srgb,var(--accent) 45%,transparent);background:color-mix(in srgb,var(--accent) 12%,rgba(10,10,16,.55));backdrop-filter:blur(12px) saturate(1.2);-webkit-backdrop-filter:blur(12px) saturate(1.2);opacity:0;visibility:hidden}.callouts[data-state=in] .callout-list{opacity:1;visibility:visible;animation:callout-fade .24s ease backwards}.callouts[data-state=out] .callout-list{animation:callout-out .12s linear forwards}.callout{flex:1 1;padding:2px 10px;border:0;border-radius:0;background:none;backdrop-filter:none;-webkit-backdrop-filter:none;box-shadow:none;font-size:13px;text-align:center}.callout+.callout{border-left:1px solid var(--line)}.callout:nth-child(n+3){display:none}}.debug{position:absolute;top:56px;left:var(--gutter);z-index:6;font:12px/1.4 ui-monospace,SFMono-Regular,Menlo,monospace;background:rgba(0,0,0,.55);padding:6px 10px;border-radius:6px;pointer-events:none}.resume{border-top:1px solid var(--line);background:var(--surface)}.resume-inner{max-width:760px;margin:0 auto;padding:64px var(--gutter) 72px}.resume h2{font-size:28px;margin:0 0 8px;letter-spacing:-.01em}.resume h3{font-size:13px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin:36px 0 12px}.resume .headline{font-size:18px;font-weight:600;margin:0 0 8px}.resume-items{list-style:none;margin:0;padding:0;display:grid;grid-gap:22px;gap:22px}.resume-row{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.resume-row h4{margin:0;font-size:16px;overflow-wrap:anywhere}.resume .dates,.resume .org{color:var(--muted);font-size:14px;margin:2px 0 0}.resume ul{margin:8px 0 0;padding-left:18px}.resume-actions{display:flex;gap:20px;flex-wrap:wrap;margin-top:36px}.site-footer{padding:28px var(--gutter) max(28px,env(safe-area-inset-bottom));color:var(--muted);font-size:13px;text-align:center}.site-footer p{margin:4px auto;max-width:70ch}.site-footer .fine{font-size:12px}@keyframes rise{0%{opacity:0;translate:0 8px}to{opacity:1;translate:0 0}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes callout-in{0%{opacity:0;translate:0 8px;filter:blur(6px)}}@keyframes callout-fade{0%{opacity:0}}@keyframes callout-out{0%{opacity:1;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes callout-draw{0%{opacity:0}}@keyframes callout-draw-path{0%{stroke-dashoffset:1}to{stroke-dashoffset:0}}@media (prefers-reduced-motion:reduce){.caption h2,.static-stage{animation:none}}