:root{--bg: oklch(14.5% .014 262);--bg-raise: oklch(18.5% .016 262);--ink: oklch(94.5% .009 85);--ink-dim: oklch(74% .012 262);--ink-faint: oklch(63% .014 262);--line: oklch(28% .016 262);--line-soft: oklch(22% .015 262);--ember: oklch(79% .135 72);--ember-deep: oklch(68% .15 62);--sans: "Geist", system-ui, sans-serif;--mono: "JetBrains Mono", ui-monospace, monospace;--fs-xs: .75rem;--fs-sm: .875rem;--fs-base: 1rem;--fs-md: 1.25rem;--fs-lg: clamp(1.35rem, 1.1rem + 1vw, 1.5625rem);--fs-xl: clamp(1.6rem, 1.2rem + 1.6vw, 1.953rem);--fs-2xl: clamp(1.95rem, 1.4rem + 2.3vw, 2.441rem);--fs-3xl: clamp(2.3rem, 1.6rem + 3vw, 3.052rem);--fs-4xl: clamp(2.75rem, 1.9rem + 4.2vw, 4.4rem);--lh-tight: 1.08;--lh-snug: 1.35;--lh-body: 1.6;--pad: clamp(1.25rem, 4vw, 4rem);--maxw: 1320px;--z-stage: 0;--z-content: 1;--z-nav: 10;--ease-out: cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box}html{scrollbar-color:var(--line) var(--bg)}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:var(--fs-base);font-weight:400;line-height:var(--lh-body);-webkit-font-smoothing:antialiased;overflow-x:clip}::selection{background:var(--ember-deep);color:var(--bg)}h1,h2,h3{text-wrap:balance;margin:0}p{margin:0;max-width:68ch;text-wrap:pretty}a{color:inherit}button{font:inherit}:focus-visible{outline:2px solid var(--ember);outline-offset:3px;border-radius:2px}.gl-stage{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--z-stage);pointer-events:none}.gl-stage:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(120% 90% at 50% 10%,transparent 55%,oklch(8% .012 262 / .55) 100%)}.page{position:relative;z-index:var(--z-content)}.shell{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad)}.nav{position:fixed;top:0;left:0;right:0;z-index:var(--z-nav);display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.9rem var(--pad);background:linear-gradient(oklch(12% .013 262 / .85),transparent 140%);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border-bottom:1px solid oklch(28% .016 262 / .4)}.nav-mark{font-family:var(--mono);font-size:var(--fs-sm);letter-spacing:.08em;text-decoration:none;color:var(--ink);white-space:nowrap}.nav-mark b{color:var(--ember);font-weight:500}.nav-links{display:flex;gap:clamp(.75rem,2.5vw,2rem);list-style:none;margin:0;padding:0}.nav-links a{font-size:var(--fs-sm);font-weight:500;color:var(--ink-dim);text-decoration:none;transition:color .25s var(--ease-out)}.nav-links a:hover{color:var(--ink)}.nav-cta{font-family:var(--mono);font-size:var(--fs-xs);letter-spacing:.04em;color:#0a0d13;background:var(--ember);border:0;padding:.5rem .9rem;border-radius:3px;text-decoration:none;white-space:nowrap;transition:background .25s var(--ease-out),transform .25s var(--ease-out)}.nav-cta:hover{background:var(--ember-deep);transform:translateY(-1px)}.scroll-progress{position:absolute;left:0;bottom:-1px;height:1px;width:100%;background:var(--ember);transform-origin:0 50%;transform:scaleX(0)}.hero{position:relative}.hero-pin{min-height:100svh;display:flex;flex-direction:column;justify-content:center;padding-top:4rem}.hero-kicker{font-family:var(--mono);font-size:var(--fs-sm);color:var(--ember);margin-bottom:clamp(1rem,3vh,2rem)}.hero-name{font-size:var(--fs-4xl);line-height:var(--lh-tight);font-weight:700;letter-spacing:-.028em}.hero-name .row{display:block;overflow:clip}.hero-name .row span{display:inline-block}.hero-name .thin{font-weight:300;letter-spacing:-.015em;color:var(--ink-dim)}.hero-sub{display:flex;flex-wrap:wrap;align-items:baseline;gap:.75rem 2.5rem;margin-top:clamp(1.5rem,4vh,3rem);max-width:60ch}.hero-sub p{color:var(--ink-dim);font-size:var(--fs-md);line-height:var(--lh-snug);text-shadow:0 1px 14px oklch(12% .013 262 / .95),0 0 34px oklch(12% .013 262 / .8)}.hero-coords{font-family:var(--mono);font-size:var(--fs-sm);color:var(--ink-faint);display:flex;gap:1.75rem;flex-wrap:wrap;margin-top:clamp(2rem,6vh,4rem)}.hero-hint{position:absolute;bottom:1.5rem;left:50%;translate:-50% 0;font-family:var(--mono);font-size:var(--fs-xs);color:var(--ink-faint);display:flex;align-items:center;gap:.6rem}.hero-hint:after{content:"";width:1px;height:2.4rem;background:linear-gradient(var(--ember),transparent);animation:hint-fall 2.2s var(--ease-out) infinite}@keyframes hint-fall{0%{transform:scaleY(0);transform-origin:top}55%{transform:scaleY(1);transform-origin:top}56%{transform-origin:bottom}to{transform:scaleY(0);transform-origin:bottom}}.sec{padding-block:clamp(6rem,16vh,11rem);position:relative}.sec-title{font-size:var(--fs-2xl);font-weight:650;letter-spacing:-.022em;line-height:var(--lh-tight);margin-bottom:clamp(2.5rem,7vh,5rem)}.sec-title .dim{color:var(--ink-faint);font-weight:300;letter-spacing:-.01em}.rule{height:1px;background:var(--line);transform-origin:0 50%;margin-bottom:clamp(2rem,5vh,3.5rem)}.about-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:clamp(2.5rem,6vw,6rem);align-items:start}.about-lede{font-size:var(--fs-lg);line-height:var(--lh-snug);font-weight:400;color:var(--ink);max-width:34ch}.about-lede em{font-style:normal;color:var(--ember)}.readout{margin:0;font-family:var(--mono);font-size:var(--fs-sm);display:grid;gap:0;border-top:1px solid var(--line)}.readout-row{display:flex;justify-content:space-between;align-items:baseline;gap:1.5rem;padding:.9rem 0;border-bottom:1px solid var(--line-soft)}.readout-row .k{color:var(--ink-faint)}.readout-row .v{color:var(--ink);font-size:var(--fs-base);margin:0}.work{overflow:clip}.work-viewport{position:relative;padding-top:clamp(4.5rem,9vh,6.5rem)}.work-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1.5rem}.work .sec-title{margin-bottom:clamp(1.25rem,3.5vh,2.25rem)}.work-arrows{display:flex;gap:.5rem;margin-bottom:clamp(1.25rem,3.5vh,2.25rem)}.work-arrows button{width:2.75rem;height:2.75rem;border:1px solid var(--line);border-radius:50%;background:#10141c99;color:var(--ink);font-size:var(--fs-md);line-height:1;cursor:pointer;transition:border-color .25s var(--ease-out),color .25s var(--ease-out),background .25s var(--ease-out)}.work-arrows button:hover{border-color:var(--ember);color:var(--ember);background:#161b23b3}.work-track{display:flex;align-items:stretch;will-change:transform;padding-bottom:2rem}.work-panel{flex:0 0 auto;width:min(82vw,720px);min-height:56svh;max-height:calc(100svh - clamp(11rem,22vh,14rem));margin-right:clamp(1.5rem,4vw,4rem);border:1px solid var(--line);background:linear-gradient(160deg,#10141cb8,#090c138c);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:flex;flex-direction:column;border-radius:6px;overflow:clip}.work-media{position:relative;height:clamp(9rem,24svh,13.5rem);flex:0 0 auto}.work-media img{width:100%;height:100%;object-fit:cover;object-position:top left;display:block;filter:saturate(.92)}.work-media:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(#090c1300 55%,#0b0e15eb)}.work-body{display:flex;flex-direction:column;flex:1 1 auto;padding:clamp(1.25rem,3vw,2.25rem);padding-top:clamp(1rem,2.2vw,1.5rem)}.work-panel-top{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;font-family:var(--mono);font-size:var(--fs-xs);color:var(--ink-faint);margin-bottom:clamp(1rem,2.5vh,1.75rem)}.work-panel-top .idx{color:var(--ember)}.work-title{font-size:var(--fs-xl);font-weight:650;letter-spacing:-.02em;line-height:var(--lh-tight)}.work-blurb{margin-top:1rem;color:var(--ink-dim);font-size:var(--fs-md);line-height:var(--lh-snug);max-width:52ch}.work-points{margin:clamp(1.25rem,3.5vh,2.25rem) 0 0;padding:0;list-style:none;display:grid;gap:.6rem;max-width:62ch}.work-points li{padding-left:1.1rem;position:relative;color:var(--ink-dim);font-size:var(--fs-base)}.work-points li:before{content:"";position:absolute;left:0;top:.62em;width:.4rem;height:1px;background:var(--ember)}.work-foot{margin-top:auto;padding-top:clamp(1.5rem,4vh,2.5rem);display:flex;flex-wrap:wrap;align-items:center;gap:1rem 2rem;justify-content:space-between}.stack-line{font-family:var(--mono);font-size:var(--fs-xs);color:var(--ink-faint);letter-spacing:.02em}.work-links{display:flex;gap:1.25rem}.work-links a{font-family:var(--mono);font-size:var(--fs-sm);color:var(--ink);text-decoration:none;border-bottom:1px solid var(--line);padding-bottom:2px;transition:border-color .25s var(--ease-out),color .25s var(--ease-out)}.work-links a:hover{border-color:var(--ember);color:var(--ember)}.skill-rows{border-top:1px solid var(--line)}.skill-row{display:grid;grid-template-columns:minmax(9rem,16rem) 1fr;gap:1rem 2.5rem;padding:clamp(1.25rem,3vh,2rem) 0;border-bottom:1px solid var(--line-soft);align-items:baseline}.skill-row .g{font-family:var(--mono);font-size:var(--fs-sm);color:var(--ink-faint);text-shadow:0 1px 10px oklch(12% .013 262 / .95)}.skill-row .items{font-size:var(--fs-lg);font-weight:500;line-height:1.5;color:var(--ink);text-shadow:0 1px 14px oklch(12% .013 262 / .9)}.skill-row .items i{font-style:normal;color:var(--line);padding-inline:.55rem;font-weight:300}.journey-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:clamp(2.5rem,6vw,6rem);align-items:start}.entry{border-top:1px solid var(--line);padding:1.5rem 0 2.25rem}.entry-meta{font-family:var(--mono);font-size:var(--fs-xs);color:var(--ink-faint);display:flex;justify-content:space-between;gap:1rem;margin-bottom:.7rem}.entry h3{font-size:var(--fs-lg);font-weight:600;letter-spacing:-.015em;line-height:var(--lh-snug)}.entry .org{color:var(--ember);font-weight:500;font-size:var(--fs-base)}.entry ul{margin:.9rem 0 0;padding:0;list-style:none;display:grid;gap:.45rem}.entry ul li{color:var(--ink-dim);font-size:var(--fs-base);padding-left:1.1rem;position:relative}.entry ul li:before{content:"";position:absolute;left:0;top:.62em;width:.4rem;height:1px;background:var(--ember)}.entry .cert-link{display:inline-block;margin-top:.8rem;font-family:var(--mono);font-size:var(--fs-xs);color:var(--ink-dim);text-decoration:none;border-bottom:1px solid var(--line);transition:color .25s var(--ease-out),border-color .25s var(--ease-out)}.entry .cert-link:hover{color:var(--ember);border-color:var(--ember)}.cred-list{border-top:1px solid var(--line)}.cred{display:flex;justify-content:space-between;align-items:baseline;gap:1.25rem;padding:.85rem 0;border-bottom:1px solid var(--line-soft);text-decoration:none;transition:background .25s var(--ease-out)}.cred:hover{background:#10141c80}.cred .n{font-size:var(--fs-base);color:var(--ink)}.cred .m{font-family:var(--mono);font-size:var(--fs-xs);color:var(--ink-faint);white-space:nowrap}.contact{padding-bottom:clamp(3rem,8vh,6rem)}.contact-lede{font-family:var(--mono);font-size:var(--fs-sm);color:var(--ember);margin-bottom:1.5rem}.contact-mail{display:inline-block;font-size:var(--fs-3xl);font-weight:650;letter-spacing:-.025em;line-height:var(--lh-tight);color:var(--ink);text-decoration:none;word-break:break-all;transition:color .3s var(--ease-out)}.contact-mail:hover{color:var(--ember)}.contact-row{margin-top:clamp(2.5rem,6vh,4rem);display:flex;flex-wrap:wrap;gap:1rem 2.5rem;align-items:baseline}.contact-row a{font-family:var(--mono);font-size:var(--fs-sm);color:var(--ink-dim);text-decoration:none;border-bottom:1px solid var(--line);padding-bottom:2px;transition:color .25s var(--ease-out),border-color .25s var(--ease-out)}.contact-row a:hover{color:var(--ember);border-color:var(--ember)}.footer{margin-top:clamp(4rem,10vh,7rem);padding-top:1.5rem;border-top:1px solid var(--line-soft);display:flex;justify-content:space-between;flex-wrap:wrap;gap:.5rem 2rem;font-family:var(--mono);font-size:var(--fs-xs);color:var(--ink-faint)}@media (max-width: 640px){.gl-stage{opacity:.5}}@media (max-width: 860px){.nav-links{display:none}.about-grid,.journey-grid{grid-template-columns:1fr}.skill-row{grid-template-columns:1fr;gap:.35rem}.work-panel{width:92vw;min-height:auto}.work-media{height:clamp(9rem,24svh,13rem)}.work-head{flex-direction:column;align-items:flex-start;gap:.5rem}.work-arrows{margin-bottom:1.5rem}}img,video,canvas{max-width:100%}.gl-stage canvas{max-width:none}@media (prefers-reduced-motion: reduce){.hero-hint:after{animation:none;opacity:.5;transform:none}.work-track{overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}.work-panel{scroll-snap-align:start}*,*:before,*:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
