:root{--paper: oklch(.971 .008 83);--paper-2: oklch(.945 .011 83);--ink: oklch(.205 .012 65);--ink-2: oklch(.205 .012 65 / .62);--line: oklch(.205 .012 65 / .14);--line-2: oklch(.205 .012 65 / .08);--accent: oklch(.605 .196 31);--accent-fg: oklch(.985 .01 83);--accent-soft: oklch(.605 .196 31 / .1);--accent2: var(--accent);--accent-ink: var(--accent);--accent2-ink: var(--accent2);--rail-w: 248px;--gut: clamp(22px, 5vw, 88px);--maxw: 1080px;--serif: "Playfair Display", Georgia, serif;--sans: "Hanken Grotesk", system-ui, sans-serif;--mono: "Space Mono", ui-monospace, monospace;--ease: cubic-bezier(.22, 1, .36, 1)}[data-base=light]{--paper: oklch(.971 .008 83);--paper-2: oklch(.945 .011 83);--ink: oklch(.205 .012 65);--ink-2: oklch(.205 .012 65 / .6);--line: oklch(.205 .012 65 / .14);--line-2: oklch(.205 .012 65 / .07)}[data-base=dark]{--paper: oklch(.185 .012 70);--paper-2: oklch(.225 .013 70);--ink: oklch(.955 .009 83);--ink-2: oklch(.955 .009 83 / .62);--line: oklch(.955 .009 83 / .16);--line-2: oklch(.955 .009 83 / .08)}html[data-base=neon]{--paper: oklch(.968 .003 110);--paper-2: oklch(.93 .004 110);--ink: oklch(.18 .006 280);--ink-2: oklch(.18 .006 280 / .68);--line: oklch(.18 .006 280 / .16);--line-2: oklch(.18 .006 280 / .08);--accent: oklch(.64 .205 148);--accent-ink: oklch(.46 .15 148);--accent-fg: oklch(.155 .006 280);--accent-soft: oklch(.64 .205 148 / .15);--accent2: oklch(.64 .25 352);--accent2-ink: oklch(.46 .19 352)}[data-accent=vermillion]{--accent: oklch(.62 .193 31);--accent-soft: oklch(.62 .193 31 / .11)}[data-accent=cobalt]{--accent: oklch(.58 .18 256);--accent-soft: oklch(.58 .18 256 / .12)}[data-accent=violet]{--accent: oklch(.58 .193 312);--accent-soft: oklch(.58 .193 312 / .12)}[data-accent=pine]{--accent: oklch(.56 .12 168);--accent-soft: oklch(.56 .12 168 / .13)}[data-accent]{--accent-fg: oklch(.985 .01 83)}html[data-base=neon] .hero h1 .dot,html[data-base=neon] .rail-mark .dot,html[data-base=neon] .topbar .tb-mark .dot{text-shadow:0 0 22px var(--accent2)}html[data-base=neon] .btn--accent:hover{box-shadow:0 0 24px -4px var(--accent)}html[data-base=neon] .chip:hover{box-shadow:0 0 16px -4px var(--accent)}html[data-base=neon] .rec-feature{box-shadow:-10px 0 30px -22px var(--accent2)}html[data-base=neon][data-motion=on] .hero-status .pip{box-shadow:0 0 12px 1px var(--accent2)}*{box-sizing:border-box}html{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:18px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;transition:background .5s var(--ease),color .5s var(--ease)}::selection{background:var(--accent);color:var(--accent-fg)}a{color:inherit}.layout{min-height:100vh}.content{margin-left:var(--rail-w);max-width:calc(var(--maxw) + var(--gut) * 2);padding:0 var(--gut)}section.block{padding:clamp(72px,11vh,150px) 0;border-top:1px solid var(--line-2);scroll-margin-top:24px}section.block:first-of-type{border-top:0}.eyebrow{font-family:var(--mono);font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-ink);display:flex;align-items:center;gap:12px;margin:0 0 26px}.eyebrow:after{content:"";flex:1;height:1px;background:var(--line)}.eyebrow .num{color:var(--ink-2)}.rail{position:fixed;inset:0 auto 0 0;width:var(--rail-w);padding:38px 30px;display:flex;flex-direction:column;border-right:1px solid var(--line);background:var(--paper);z-index:40;transition:background .5s var(--ease)}.rail-mark{font-family:var(--serif);font-weight:900;font-size:30px;line-height:.95;letter-spacing:-.01em;margin:0 0 4px}.rail-mark .dot{color:var(--accent2)}.rail-role{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2);margin:0 0 auto;padding-top:6px}.rail-nav{list-style:none;margin:40px 0;padding:0;display:flex;flex-direction:column;gap:2px}.rail-nav a{display:flex;align-items:baseline;gap:11px;text-decoration:none;padding:7px 0;color:var(--ink-2);font-size:15px;font-weight:500;letter-spacing:.01em;transition:color .25s var(--ease),padding .3s var(--ease)}.rail-nav a .idx{font-family:var(--mono);font-size:11px;opacity:.55;transition:color .25s var(--ease)}.rail-nav a:hover{color:var(--ink);padding-left:4px}.rail-nav a.active{color:var(--ink)}.rail-nav a.active .idx{color:var(--accent-ink);opacity:1}.rail-nav a .label{position:relative}.rail-nav a.active .label:after{content:"";position:absolute;left:0;right:0;bottom:-3px;height:2px;background:var(--accent);transform-origin:left;animation:underline .4s var(--ease)}@keyframes underline{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.rail-cta{margin-top:8px;display:flex;flex-direction:column;gap:14px}.btn{font-family:var(--sans);font-weight:600;font-size:14.5px;letter-spacing:.01em;display:inline-flex;align-items:center;justify-content:center;gap:9px;padding:13px 20px;border-radius:2px;border:1px solid var(--ink);background:var(--ink);color:var(--paper);cursor:pointer;text-decoration:none;transition:transform .25s var(--ease),background .25s var(--ease),color .25s var(--ease),box-shadow .25s var(--ease)}.btn:hover{transform:translateY(-2px);box-shadow:0 8px 22px -10px var(--ink)}.btn--accent{background:var(--accent);border-color:var(--accent);color:var(--accent-fg)}.btn--accent:hover{box-shadow:0 10px 26px -10px var(--accent)}.btn--ghost{background:transparent;color:var(--ink)}.btn--ghost:hover{background:var(--ink);color:var(--paper)}.btn svg{width:16px;height:16px}.rail-social{display:flex;gap:16px;font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);padding-top:4px}.rail-social a{text-decoration:none;transition:color .2s var(--ease)}.rail-social a:hover{color:var(--accent-ink)}.topbar,.tb-sheet{display:none}.hero{padding-top:clamp(80px,16vh,180px)}.hero-status{font-family:var(--mono);font-size:12.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2);display:inline-flex;align-items:center;gap:10px;margin-bottom:30px}.hero-status .pip{width:8px;height:8px;border-radius:50%;background:var(--accent2);box-shadow:0 0 0 0 var(--accent2);animation:pip 2.4s var(--ease) infinite}@keyframes pip{0%{box-shadow:0 0 0 0 var(--accent-soft)}70%{box-shadow:0 0 0 12px transparent}to{box-shadow:0 0 0 0 transparent}}.hero h1{font-family:var(--serif);font-weight:900;font-size:clamp(58px,13vw,168px);line-height:.86;letter-spacing:-.025em;margin:0}.hero h1 .ital{font-style:italic;font-weight:500}.hero h1 .dot{color:var(--accent2)}.hero-tag{font-family:var(--serif);font-style:italic;font-weight:500;font-size:clamp(24px,4.2vw,46px);line-height:1.1;margin:28px 0 0;max-width:16ch}.hero-meta{display:flex;flex-wrap:wrap;gap:14px 30px;margin-top:42px;font-family:var(--mono);font-size:13px;letter-spacing:.04em;color:var(--ink-2)}.hero-meta span strong{color:var(--ink);font-weight:700}.about-grid{display:grid;grid-template-columns:1fr;gap:8px}.about-lead{font-family:var(--serif);font-size:clamp(26px,3.6vw,42px);line-height:1.18;letter-spacing:-.01em;margin:0 0 34px;max-width:20ch;text-wrap:balance}.about-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px 48px;max-width:760px}.about-cols p{margin:0;color:var(--ink-2)}.about-cols p strong{color:var(--ink);font-weight:700}.resume-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:56px}.resume-head h2{font-family:var(--serif);font-weight:800;font-size:clamp(40px,7vw,86px);line-height:.92;letter-spacing:-.02em;margin:0}.resume-head h2 em{font-style:italic;font-weight:500;color:var(--accent-ink)}.skills{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);margin-bottom:80px}.skill-cat{background:var(--paper);padding:26px 26px 30px;transition:background .3s var(--ease)}.skill-cat:hover{background:var(--paper-2)}.skill-cat h3{font-family:var(--mono);font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:var(--accent-ink);margin:0 0 16px;display:flex;align-items:center;gap:10px}.skill-cat h3 .ct{color:var(--ink-2);font-size:11px}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{font-size:14px;font-weight:500;padding:6px 12px;border:1px solid var(--line);border-radius:100px;color:var(--ink);white-space:nowrap;transition:border-color .2s var(--ease),color .2s var(--ease),background .2s var(--ease)}.chip:hover{border-color:var(--accent);color:var(--accent-ink)}.xp-label{font-family:var(--mono);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);margin:0 0 34px}.xp{display:flex;flex-direction:column}.job{display:grid;grid-template-columns:150px 1fr;gap:12px 36px;padding:34px 0;border-top:1px solid var(--line);position:relative}.job:last-child{border-bottom:1px solid var(--line)}.job-when{font-family:var(--mono);font-size:12.5px;letter-spacing:.03em;color:var(--ink-2);padding-top:8px}.job-when .yrs{color:var(--ink);display:block;font-size:13px}.job-when .loc{display:block;margin-top:6px;opacity:.8}.job-role{font-family:var(--serif);font-weight:700;font-size:clamp(22px,2.8vw,30px);line-height:1.08;letter-spacing:-.01em;margin:0}.job-co{font-size:15px;font-weight:600;margin:9px 0 0}.job-co .org{color:var(--accent-ink)}.job-desc{font-size:14.5px;color:var(--ink-2);margin:4px 0 0;font-style:italic;font-family:var(--serif)}.job ul{list-style:none;margin:18px 0 0;padding:0;display:flex;flex-direction:column;gap:10px}.job ul li{position:relative;padding-left:22px;font-size:15.5px;color:var(--ink-2)}.job ul li:before{content:"";position:absolute;left:2px;top:11px;width:7px;height:7px;background:var(--accent);border-radius:1px;transform:rotate(45deg)}.job ul li strong{color:var(--ink);font-weight:700}.job--mini{grid-template-columns:150px 1fr}.job--mini .job-role{font-size:clamp(18px,2.2vw,22px)}.resume-foot{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:48px;margin-top:72px}.foot-col h4{font-family:var(--mono);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink);margin:0 0 22px;padding-bottom:14px;border-bottom:1px solid var(--line)}.foot-item{margin-bottom:20px}.foot-item .t{font-weight:600;font-size:15.5px;margin:0}.foot-item .s{font-family:var(--mono);font-size:12px;color:var(--ink-2);margin:4px 0 0;letter-spacing:.02em}.proj-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:26px}.proj-card{border:1px solid var(--line);background:var(--paper);display:flex;flex-direction:column;transition:transform .3s var(--ease),box-shadow .3s var(--ease)}.proj-card:hover{transform:translateY(-4px);box-shadow:0 18px 40px -22px var(--ink)}.proj-shot{aspect-ratio:16 / 10;background:repeating-linear-gradient(45deg,var(--line-2) 0 10px,transparent 10px 20px),var(--paper-2);display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--line)}.proj-shot span{font-family:var(--mono);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);padding:6px 12px;background:var(--paper);border:1px solid var(--line)}.proj-body{padding:22px 24px 26px}.proj-tag{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-ink);margin:0 0 10px}.proj-body h3{font-family:var(--serif);font-weight:700;font-size:25px;line-height:1.1;margin:0 0 8px}.proj-body p{font-size:15px;color:var(--ink-2);margin:0}.proj-note{margin-top:30px;font-family:var(--mono);font-size:12.5px;color:var(--ink-2);letter-spacing:.03em}.rec-feature{border-left:3px solid var(--accent2);padding:6px 0 6px 34px;margin-bottom:56px;max-width:880px}.rec-feature blockquote{font-family:var(--serif);font-size:clamp(22px,3vw,33px);line-height:1.3;letter-spacing:-.01em;margin:0;text-wrap:pretty}.rec-feature blockquote .mark{color:var(--accent2-ink)}.rec-by{display:flex;align-items:center;gap:14px;margin-top:28px}.rec-ava{width:46px;height:46px;border-radius:50%;background:oklch(from var(--accent2) l c h / .14);color:var(--accent2-ink);display:grid;place-items:center;font-family:var(--serif);font-weight:700;font-size:18px;flex-shrink:0}.rec-by .nm{font-weight:700;font-size:15.5px;margin:0}.rec-by .rl{font-family:var(--mono);font-size:11.5px;color:var(--ink-2);margin:3px 0 0;letter-spacing:.03em}.rec-filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:36px}.rec-filter-btn{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:6px 14px;border:1px solid var(--line);border-radius:100px;background:transparent;color:var(--ink-2);cursor:pointer;transition:border-color .2s var(--ease),color .2s var(--ease),background .2s var(--ease)}.rec-filter-btn:hover{border-color:var(--accent);color:var(--accent-ink)}.rec-filter-btn.active{border-color:var(--accent);background:var(--accent);color:var(--accent-fg)}.rec-empty{font-family:var(--mono);font-size:13px;color:var(--ink-2);letter-spacing:.03em;padding:40px 0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.rec-carousel{position:relative;outline:none}.rec-carousel:focus-visible{outline:2px solid var(--accent);outline-offset:14px;border-radius:2px}.rec-viewport{overflow:hidden}.rec-track{display:flex;transition:transform .55s var(--ease);will-change:transform}[data-motion=off] .rec-track{transition:none}.rec-slide{min-width:100%;box-sizing:border-box;padding:6px 0 6px 34px;border-left:3px solid var(--accent2);max-width:900px}.rec-slide.is-draft{border-left-style:dashed}.rec-slide-head{display:flex;align-items:center;gap:14px;margin-bottom:18px;flex-wrap:wrap}.rec-slide .rec-src{margin-bottom:0}.rec-rel{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);border:1px solid var(--line);border-radius:100px;padding:4px 11px}.rec-year{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;color:var(--ink-2);margin-left:auto}.rec-slide blockquote{font-family:var(--serif);font-size:clamp(21px,2.7vw,31px);line-height:1.32;letter-spacing:-.01em;margin:0;text-wrap:pretty;min-height:4.4em}.rec-slide blockquote .mark{color:var(--accent2-ink)}.rec-slide blockquote .rec-body-copy{display:block;margin-top:.7em;font-family:var(--sans);font-size:clamp(14px,1.5vw,16px);font-style:normal;line-height:1.65;letter-spacing:0;color:var(--ink-2)}.rec-slide .rec-by{margin-top:26px}.rec-controls{display:flex;align-items:center;gap:22px;margin-top:36px;padding-left:34px}.rec-arrows{display:flex;gap:10px}.rec-arrow{width:46px;height:46px;display:grid;place-items:center;border:1px solid var(--ink);background:transparent;color:var(--ink);border-radius:50%;cursor:pointer;transition:background .2s var(--ease),color .2s var(--ease),transform .2s var(--ease)}.rec-arrow svg{width:19px;height:19px}.rec-arrow:hover{background:var(--ink);color:var(--paper)}.rec-arrow:active{transform:scale(.94)}.rec-arrow:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.rec-dots{display:flex;gap:9px;align-items:center}.rec-dot{width:9px;height:9px;padding:0;border-radius:50%;border:1px solid var(--ink-2);background:transparent;cursor:pointer;transition:all .25s var(--ease)}.rec-dot.active{background:var(--accent2);border-color:var(--accent2);transform:scale(1.25)}.rec-dot:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.rec-count{margin-left:auto;font-family:var(--mono);font-size:13px;letter-spacing:.04em;color:var(--ink-2)}.rec-count b{color:var(--ink);font-weight:700}.rec-src{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);display:inline-flex;align-items:center;gap:7px;margin-bottom:18px}.rec-src .in{width:17px;height:17px;background:var(--accent);color:var(--accent-fg);border-radius:3px;display:grid;place-items:center;font-size:10px;font-weight:700;font-family:var(--sans)}.contact h2{font-family:var(--serif);font-weight:900;font-size:clamp(44px,9vw,120px);line-height:.9;letter-spacing:-.025em;margin:0 0 36px}.contact h2 .ital{font-style:italic;font-weight:500}.contact-links{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);max-width:760px}.contact-link{background:var(--paper);padding:24px 26px;text-decoration:none;display:flex;flex-direction:column;gap:8px;transition:background .25s var(--ease)}.contact-link:hover{background:var(--paper-2)}.contact-link .k{font-family:var(--mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--ink-2)}.contact-link .v{font-family:var(--serif);font-size:clamp(20px,2.4vw,26px);font-weight:600;display:flex;align-items:center;gap:10px}.contact-link:hover .v{color:var(--accent-ink)}.contact-link .v svg{width:17px;height:17px;opacity:0;transform:translate(-6px);transition:all .25s var(--ease)}.contact-link:hover .v svg{opacity:1;transform:translate(0)}.footer{margin-top:90px;padding:30px 0 60px;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;justify-content:space-between;gap:14px;font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;color:var(--ink-2)}.reveal{opacity:0;transform:translateY(26px)}.reveal.in-view{opacity:1;transform:none;transition:opacity .7s var(--ease),transform .7s var(--ease)}.reveal.d1.in-view{transition-delay:.06s}.reveal.d2.in-view{transition-delay:.12s}.reveal.d3.in-view{transition-delay:.18s}[data-motion=off] .reveal{opacity:1!important;transform:none!important;transition:none!important}[data-motion=off] .hero-status .pip{animation:none}@media(max-width:1020px){:root{--rail-w: 0px}.rail{display:none}.topbar{display:flex;position:sticky;top:0;z-index:50;align-items:center;justify-content:space-between;padding:14px 22px;background:var(--paper);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}.topbar .tb-mark{font-family:var(--serif);font-weight:900;font-size:21px}.topbar .tb-mark .dot{color:var(--accent2)}.tb-menu-btn{border:1px solid var(--ink);background:transparent;color:var(--ink);font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;padding:9px 14px;cursor:pointer;border-radius:2px}.tb-sheet{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--paper);z-index:60;padding:26px;display:flex;flex-direction:column;overflow-y:auto;transform:translateY(-100%);transition:transform .45s var(--ease)}.tb-sheet.open{transform:none}.tb-sheet-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px}.tb-sheet nav{display:flex;flex-direction:column;gap:4px}.tb-sheet nav a{font-family:var(--serif);font-size:32px;font-weight:700;text-decoration:none;padding:9px 0;display:flex;align-items:baseline;gap:14px}.tb-sheet nav a .idx{font-family:var(--mono);font-size:13px;color:var(--accent-ink);font-weight:400}.tb-sheet .btn{margin-top:30px}.content{margin-left:0}}@media(max-width:720px){body{font-size:17px}.skills,.about-cols{grid-template-columns:1fr}.job{grid-template-columns:1fr;gap:6px}.job-when{padding-top:0;display:flex;gap:16px;flex-wrap:wrap}.job-when .loc{margin-top:0}.resume-foot{grid-template-columns:1fr;gap:40px}.proj-grid{grid-template-columns:1fr}.rec-slide{padding-left:22px}.rec-controls{padding-left:22px;flex-wrap:wrap;gap:16px}.rec-count{margin-left:0;order:3;flex-basis:100%}.contact-links{grid-template-columns:1fr}}
