:root{--night:#0b1426;--night-raised:#111d33;--line:#22304a;--water:#1f4e6b;--thread:#ffb547;--tech:#5ce1e6;--text:#f5f2ec;--muted:#a3adbd;--font-display:"Fraunces", Georgia, "Times New Roman", serif;--font-body:"Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--gutter:clamp(1rem, 4vw, 3rem);--measure:68ch;--header-h:3.5rem;--ease:cubic-bezier(.22, 1, .36, 1)}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + 1rem);-webkit-text-size-adjust:100%}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{background:var(--night);color:var(--text);font:400 1rem/1.6 var(--font-body);-webkit-font-smoothing:antialiased;margin:0}h1,h2,h3{font-family:var(--font-display);margin:0 0 .5em;font-weight:600;line-height:1.15}p{margin:0 0 1em}a{color:var(--thread);text-underline-offset:.2em}a:hover{color:var(--text)}:focus-visible{outline:2px solid var(--tech);outline-offset:3px;border-radius:4px}.mono{font-family:var(--font-mono);letter-spacing:.04em;font-size:.8125rem}.skip-link{z-index:100;background:var(--thread);color:var(--night);border-radius:6px;padding:.5rem 1rem;font-weight:600;position:absolute;top:-4rem;left:1rem}.skip-link:focus{top:1rem}.site-header{z-index:10;height:var(--header-h);padding:0 var(--gutter);background:linear-gradient(var(--night) 30%, transparent);justify-content:space-between;align-items:center;gap:1rem;display:flex;position:fixed;inset:0 0 auto}.site-header__name{color:var(--text);font:600 1.125rem var(--font-display);text-decoration:none}.site-header__links{gap:clamp(.75rem,2.5vw,1.75rem);margin:0;padding:0;font-size:.875rem;list-style:none;display:flex}.site-header__links a{color:var(--muted);text-decoration:none}.site-header__links a:hover,.site-header__links .mode-toggle{color:var(--text)}@media (max-width:560px){.site-header__links li:nth-child(-n+3){display:none}}.hero{min-height:100svh;padding:calc(var(--header-h) + 2rem) var(--gutter) 3rem;align-content:end;display:grid;position:relative}.hero__inner{max-width:44rem}.hero__eyebrow{color:var(--tech);text-transform:uppercase}.hero__title{letter-spacing:-.02em;margin-bottom:.25em;font-size:clamp(3rem,11vw,7rem);font-weight:400}.hero__lede{font:400 clamp(1.25rem, 2.6vw, 1.625rem) / 1.35 var(--font-display)}.hero__bio,.hero__nz{max-width:var(--measure);color:var(--muted)}.hero__nz{color:var(--text)}.hero__actions{flex-wrap:wrap;gap:.75rem;margin-top:1.5rem;display:flex}.button{border:1px solid var(--line);color:var(--text);transition:border-color .3s var(--ease), background-color .3s var(--ease);border-radius:999px;padding:.7rem 1.2rem;font-weight:500;text-decoration:none;display:inline-block}.button:hover{border-color:var(--thread)}.button--primary{background:var(--thread);border-color:var(--thread);color:var(--night)}.button--primary:hover{color:var(--thread);background:0 0}.hero__loader{max-width:44rem;margin-top:2.5rem}.loader{transition:opacity .8s var(--ease)}.loader.is-complete{opacity:0}.loader__svg{width:100%;height:2.5rem;display:block;overflow:visible}.loader__track,.loader__thread{fill:none;stroke-width:2px;stroke-linecap:round;vector-effect:non-scaling-stroke}.loader__track{stroke:var(--line)}.loader__thread{stroke:var(--thread);stroke-dasharray:1;stroke-dashoffset:1px;filter:drop-shadow(0 0 6px #ffb54799);transition:stroke-dashoffset .4s var(--ease)}.loader__label{color:var(--muted);justify-content:space-between;margin:.5rem 0 0;display:flex}.board{padding:4rem var(--gutter);background:var(--night)}.board__heading{color:var(--thread);text-transform:uppercase;font-size:.875rem}.board__list{border-top:1px solid var(--line);max-width:60rem;margin:0;padding:0;list-style:none}.board__row{border-bottom:1px solid var(--line);color:var(--text);transition:background-color .3s var(--ease);grid-template-columns:4.5rem minmax(10rem,14rem) 1fr;align-items:baseline;gap:1rem;padding:1rem .5rem;text-decoration:none;display:grid}.board__row:hover{background:var(--night-raised);color:var(--text)}.board__time{color:var(--thread);font-size:1rem}.board__port{color:var(--tech)}.board__title{font:400 1.125rem var(--font-display)}@media (max-width:560px){.board__row{grid-template-columns:3.5rem 1fr}.board__title{grid-column:2}}.chapters{background:var(--night)}.chapter,.about{max-width:72rem;padding:5rem var(--gutter);border-top:1px solid var(--line);margin:0 auto}.chapter__meta{color:var(--thread);text-transform:uppercase;gap:1.5rem;display:flex}.chapter__title{font-size:clamp(2rem,5vw,3.25rem);font-weight:400}.chapter__place{color:var(--muted)}.chapter__caption{max-width:var(--measure);font-size:1.125rem}.chapter__projects{grid-template-columns:repeat(auto-fill,minmax(min(100%,20rem),1fr));gap:1.25rem;margin-top:2.5rem;display:grid}.project{background:var(--night-raised);border:1px solid var(--line);border-radius:12px;padding:1.5rem}.project:target{border-color:var(--thread)}.project__title{font-size:1.375rem}.project__meta{color:var(--tech);font-size:.875rem}.project__case{margin:1rem 0 0}.project__case div+div{margin-top:.75rem}.project__case dt{color:var(--muted);font:500 .75rem var(--font-mono);text-transform:uppercase;letter-spacing:.08em}.project__case dd{margin:.25rem 0 0}.project__stack{flex-wrap:wrap;gap:.5rem;margin:1.25rem 0 0;padding:0;list-style:none;display:flex}.project__stack li{border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:.2rem .6rem}.about p{max-width:var(--measure)}.about h2{font-size:clamp(2rem,5vw,3.25rem);font-weight:400}.about h3{margin-top:2.5rem;font-size:1.25rem}.about__education{padding:0;list-style:none}.about__education li{margin-bottom:.5rem}.about__education .mono,.about__skills dt{color:var(--thread)}.about__skills{gap:.75rem;max-width:50rem;display:grid}.about__skills div{grid-template-columns:minmax(8rem,12rem) 1fr;gap:1rem;display:grid}.about__skills dd{margin:0}@media (max-width:560px){.about__skills div{grid-template-columns:1fr;gap:0}}.next-port__nz{max-width:var(--measure)}.pass{background:var(--text);max-width:40rem;color:var(--night);border-radius:16px;margin-top:2.5rem;padding:2rem;position:relative}.pass:after{content:"";border-top:2px dashed #0b142633;position:absolute;top:5.25rem;left:1.5rem;right:1.5rem}.pass__title{margin-bottom:2.5rem;font-size:1.25rem}.pass__route{grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:1rem;margin:0 0 1.5rem;display:grid}.pass__route dt{color:#5a6475;text-transform:uppercase;font-size:.75rem}.pass__route dd{margin:.25rem 0 0;font-size:1rem;font-weight:500}.pass__tagline{font:400 1.5rem var(--font-display)}.pass__links{gap:.5rem;margin:0;padding:0;list-style:none;display:grid}.pass__links li{grid-template-columns:5.5rem minmax(0,1fr);align-items:baseline;display:grid}.pass__links a{overflow-wrap:anywhere}.pass__links .mono{color:#5a6475}.pass a{color:var(--night);font-weight:500}.pass a:hover{color:#8a5a00}.site-footer{padding:2rem var(--gutter) 3rem;color:var(--muted);text-align:center;background:var(--night);font-size:.875rem}.webgl{z-index:0;opacity:0;width:100%;height:100%;transition:opacity 1.2s var(--ease);pointer-events:none;position:fixed;inset:0}.is-3d-ready .webgl{opacity:1}main,.site-footer{z-index:1;position:relative}.is-3d{scroll-behavior:auto}.is-3d .hero{background:linear-gradient(90deg,#0b1426d9,#0b142659 45%,#0000 65%)}.is-3d .chapters,.is-3d .board{background:0 0}.is-3d .board,.is-3d .chapter,.is-3d .about{--panel:#0b1426db;max-width:none;padding-right:var(--gutter);padding-left:var(--gutter);border-top:0;margin:0}.is-3d .chapter{padding-top:2rem;padding-bottom:90vh}.is-3d .next-port{padding-bottom:40vh}.is-3d .board__list,.is-3d .board__heading,.is-3d .chapter__header,.is-3d .chapter__projects,.is-3d .about>*,.is-3d .pass{max-width:min(34rem,42vw)}.is-3d .board,.is-3d .about{padding-bottom:20vh}.is-3d .board__list,.is-3d .chapter__header,.is-3d .about{background:var(--panel)}.is-3d .chapter__header{border:1px solid var(--line);border-radius:12px;padding:1.5rem}.is-3d .about{max-width:min(37rem,45vw);margin-left:var(--gutter);border:1px solid var(--line);border-radius:12px;padding:2rem 1.5rem}.is-3d .about>*{max-width:none}.is-3d .chapter__projects{grid-template-columns:1fr;gap:.75rem;margin-top:.75rem}.is-3d .project{background:var(--panel)}.is-3d .site-footer{background:var(--night)}@media (max-aspect-ratio:1){.is-3d .hero{background:linear-gradient(to top, var(--night) 45%, #0b142699 75%, transparent)}.is-3d .board__list,.is-3d .board__heading,.is-3d .chapter__header,.is-3d .chapter__projects,.is-3d .about,.is-3d .pass{max-width:none}.is-3d .chapter{padding-top:38vh;padding-bottom:70vh}.is-3d .about{margin-right:var(--gutter)}}.timeline{--progress:0;z-index:9;top:50%;right:var(--gutter);transition:opacity .6s var(--ease);gap:.75rem;display:flex;position:fixed;transform:translateY(-50%)}.timeline.is-home{opacity:.5}.timeline__track{background:var(--line);border-radius:2px;width:2px;position:relative}.timeline__fill{background:var(--thread);transform:scaleY(var(--progress));transform-origin:top;position:absolute;inset:0;box-shadow:0 0 8px #ffb547b3}.timeline__list{gap:.25rem;margin:0;padding:0;list-style:none;display:grid}.timeline__item{color:var(--muted);transition:color .3s var(--ease), background-color .3s var(--ease);background:#0b142699;border-radius:6px;padding:.35rem .6rem;text-decoration:none;display:grid}.timeline__item:hover,.timeline__item[aria-current]{color:var(--text);background:#0b1426e6}.timeline__time{color:inherit;font-size:.875rem}.timeline__item[aria-current] .timeline__time{color:var(--thread)}.timeline__port{font-size:.6875rem}@media (min-width:761px){.timeline__port{display:none}.timeline__item[aria-current] .timeline__port,.timeline__item:hover .timeline__port,.timeline__item:focus-visible .timeline__port{display:block}}.is-html .timeline{display:none}@media (max-width:760px){.timeline{padding-bottom:env(safe-area-inset-bottom);border-top:1px solid var(--line);background:#0b1426eb;flex-direction:column;gap:0;inset:auto 0 0;transform:none}.timeline__track{width:auto;height:2px}.timeline__fill{transform:scaleX(var(--progress));transform-origin:0}.timeline__list{grid-auto-columns:1fr;grid-auto-flow:column;gap:0}.timeline__item{background:0 0;border-radius:0;place-items:center;min-height:44px;padding:.4rem 0}.timeline__port{display:none}.is-3d .site-footer{padding-bottom:5rem}}.is-html .hero{background:radial-gradient(at 20% 110%,#ffb54724,#0000 55%),radial-gradient(at 90% 0,#1f4e6b80,#0000 60%)}
