:root{--font-display: "Space Grotesk", system-ui, sans-serif;--font-body: "Hanken Grotesk", system-ui, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, monospace;--bg: oklch(.165 .006 265);--bg-2: oklch(.205 .008 265);--surface: oklch(.225 .009 265);--surface-2: oklch(.26 .01 265);--text: oklch(.96 .004 265);--muted: oklch(.72 .012 265);--faint: oklch(.55 .012 265);--line: oklch(.32 .01 265);--line-soft: oklch(.28 .008 265);--accent-h: 230;--accent-c: .13;--accent-l: .8;--accent: oklch(var(--accent-l) var(--accent-c) var(--accent-h));--accent-dim: oklch(var(--accent-l) calc(var(--accent-c) * .4) var(--accent-h) / .16);--accent-ink: oklch(.18 .05 var(--accent-h));--maxw: 1100px;--gutter: clamp(40px, 7vw, 96px)}[data-theme=light]{--bg: oklch(.97 .004 265);--bg-2: oklch(.94 .005 265);--surface: oklch(1 0 0);--surface-2: oklch(.965 .004 265);--text: oklch(.22 .01 265);--muted: oklch(.44 .012 265);--faint: oklch(.6 .012 265);--line: oklch(.88 .008 265);--line-soft: oklch(.92 .006 265);--accent-l: .62;--accent-c: .15;--accent-ink: oklch(.99 .02 var(--accent-h))}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:90px}body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:clip}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:0;background-image:radial-gradient(oklch(.5 .01 265 / .1) 1px,transparent 1px);background-size:30px 30px;-webkit-mask-image:radial-gradient(ellipse 120% 80% at 50% 0%,#000 30%,transparent 75%);mask-image:radial-gradient(ellipse 120% 80% at 50% 0%,#000 30%,transparent 75%)}[data-theme=light] body:before{background-image:radial-gradient(oklch(.4 .01 265 / .1) 1px,transparent 1px)}::selection{background:var(--accent);color:var(--accent-ink)}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer}.shell{position:relative;z-index:1}.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--gutter)}.eyebrow{font-family:var(--font-mono);font-size:12.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);display:inline-flex;align-items:center;gap:10px}.eyebrow .idx{color:var(--faint)}.eyebrow:before{content:"";width:22px;height:1px;background:var(--accent);display:inline-block}.section{padding-top:clamp(64px,11vh,130px);padding-bottom:clamp(64px,11vh,130px);position:relative}.section+.section{border-top:1px solid var(--line-soft)}.sec-head{margin-bottom:48px;max-width:720px}.sec-title{font-family:var(--font-display);font-weight:600;font-size:clamp(30px,4.4vw,50px);line-height:1.05;letter-spacing:-.02em;margin:18px 0 0;text-wrap:balance}.sec-sub{color:var(--muted);margin-top:16px;font-size:17.5px;max-width:560px}.btn{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:13.5px;letter-spacing:.02em;padding:13px 20px;border-radius:9px;border:1px solid var(--line);background:transparent;color:var(--text);transition:border-color .2s,background .2s,transform .15s,color .2s}.btn:hover{border-color:var(--accent);transform:translateY(-1px)}.btn-primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:600}.btn-primary:hover{background:oklch(calc(var(--accent-l) + .05) var(--accent-c) var(--accent-h))}.btn .arr{transition:transform .2s}.btn:hover .arr{transform:translate(2px,-2px)}.ph{position:relative;width:100%;height:100%;background:repeating-linear-gradient(135deg,oklch(.5 .02 265 / .07) 0 2px,transparent 2px 11px),var(--bg-2);display:grid;place-items:center;overflow:hidden}.ph span{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);border:1px solid var(--line);padding:5px 11px;border-radius:100px;background:var(--bg)}.ph img{width:100%;height:100%;object-fit:cover;display:block}.nav{position:fixed;top:0;left:0;right:0;z-index:50;transition:background .3s,border-color .3s,backdrop-filter .3s;border-bottom:1px solid transparent}.nav.scrolled{background:color-mix(in oklab,var(--bg) 78%,transparent);-webkit-backdrop-filter:blur(14px) saturate(1.2);backdrop-filter:blur(14px) saturate(1.2);border-bottom-color:var(--line-soft)}.nav-in{max-width:var(--maxw);margin:0 auto;padding:16px var(--gutter);display:flex;align-items:center;justify-content:space-between}.brand{display:flex;align-items:center;gap:11px;font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;font-size:17px}.brand .mark{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;background:var(--accent);color:var(--accent-ink);font-family:var(--font-mono);font-weight:700;font-size:15px;box-shadow:0 0 0 1px var(--accent),0 6px 18px oklch(var(--accent-l) var(--accent-c) var(--accent-h) / .25)}.brand .dot{color:var(--accent)}.nav-links{display:flex;align-items:center;gap:4px}.nav-links a{font-family:var(--font-mono);font-size:13px;letter-spacing:.02em;color:var(--muted);padding:8px 13px;border-radius:7px;transition:color .2s,background .2s;position:relative}.nav-links a:hover{color:var(--text)}.nav-links a.active{color:var(--accent)}.nav-links a .num{color:var(--faint);margin-right:6px;font-size:11px}.nav-cta{margin-left:8px}.nav-burger{display:none;background:none;border:1px solid var(--line);border-radius:8px;padding:9px 11px;color:var(--text)}.hero{padding-top:150px;padding-bottom:clamp(60px,10vh,110px);position:relative}.hero-grid{display:grid;gap:40px}.hero-status{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:12.5px;letter-spacing:.06em;color:var(--muted);border:1px solid var(--line);border-radius:100px;padding:7px 15px 7px 12px;width:max-content}.hero-status .pulse{width:8px;height:8px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 0 var(--accent);animation:pulse 2.4s infinite}@keyframes pulse{0%{box-shadow:0 0 color-mix(in oklab,var(--accent) 60%,transparent)}70%{box-shadow:0 0 0 9px transparent}to{box-shadow:0 0 0 0 transparent}}.hero h1{font-family:var(--font-display);font-weight:600;font-size:clamp(44px,9.2vw,124px);line-height:.95;letter-spacing:-.035em;text-wrap:balance}.hero h1 .line2{color:var(--faint)}.hero h1 em{font-style:normal;color:var(--accent)}.hero-lead{margin-top:28px;font-size:clamp(18px,2.2vw,22px);color:var(--muted);max-width:540px;line-height:1.55}.hero-lead b{color:var(--text);font-weight:600}.hero-actions{margin-top:38px;display:flex;gap:14px;flex-wrap:wrap}.hero-meta{margin-top:56px;display:flex;flex-wrap:wrap;gap:40px;padding-top:30px;border-top:1px solid var(--line-soft)}.hero-meta .stat .k{font-family:var(--font-display);font-size:30px;font-weight:600;letter-spacing:-.02em}.hero-meta .stat .k em{color:var(--accent);font-style:normal}.hero-meta .stat .l{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin-top:4px}.scroll-cue{position:absolute;bottom:26px;right:var(--gutter);display:flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--faint)}.scroll-cue .bar{width:1px;height:38px;background:linear-gradient(var(--accent),transparent)}.skills-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}.skill-card{border:1px solid var(--line-soft);border-radius:14px;background:color-mix(in oklab,var(--surface) 55%,transparent);padding:26px 24px 24px;position:relative;overflow:hidden;transition:border-color .25s,transform .25s,background .25s}.skill-card:hover{border-color:var(--accent);transform:translateY(-3px);background:var(--surface)}.skill-card .sc-no{font-family:var(--font-mono);font-size:12px;color:var(--faint)}.skill-card h3{font-family:var(--font-display);font-weight:600;font-size:19px;margin:14px 0 4px;letter-spacing:-.01em}.skill-card p{color:var(--muted);font-size:14.5px;margin-bottom:18px}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{font-family:var(--font-mono);font-size:12px;letter-spacing:.01em;color:var(--muted);border:1px solid var(--line);border-radius:7px;padding:5px 10px;transition:color .2s,border-color .2s,background .2s}.skill-card:hover .chip{border-color:var(--line)}.chip:hover{color:var(--accent);border-color:var(--accent)}.proj-top{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;flex-wrap:wrap;margin-bottom:38px}.filters{display:inline-flex;gap:6px;padding:5px;border:1px solid var(--line);border-radius:11px;background:color-mix(in oklab,var(--surface) 50%,transparent)}.filters button{font-family:var(--font-mono);font-size:13px;letter-spacing:.02em;background:none;border:none;color:var(--muted);padding:8px 15px;border-radius:8px;transition:color .2s,background .2s}.filters button:hover{color:var(--text)}.filters button.on{background:var(--accent);color:var(--accent-ink);font-weight:600}.proj-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:20px}.proj-card{grid-column:span 1;border:1px solid var(--line-soft);border-radius:16px;overflow:hidden;background:color-mix(in oklab,var(--surface) 50%,transparent);cursor:pointer;transition:border-color .28s,transform .28s,box-shadow .28s;display:flex;flex-direction:column}.proj-card.feat{grid-column:span 2}.proj-card:hover{border-color:var(--accent);transform:translateY(-4px);box-shadow:0 24px 60px -30px #000000b3}.proj-thumb{aspect-ratio:16/10;position:relative;border-bottom:1px solid var(--line-soft)}.proj-card.feat .proj-thumb{aspect-ratio:21/9}.proj-thumb .badge{position:absolute;top:14px;left:14px;z-index:2;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;background:var(--bg);color:var(--accent);border:1px solid var(--line);padding:5px 10px;border-radius:100px}.proj-thumb .year{position:absolute;top:14px;right:14px;z-index:2;font-family:var(--font-mono);font-size:11px;color:var(--faint);background:var(--bg);border:1px solid var(--line);padding:5px 9px;border-radius:100px}.proj-body{padding:22px 22px 24px;display:flex;flex-direction:column;gap:10px;flex:1}.proj-body h3{font-family:var(--font-display);font-weight:600;font-size:22px;letter-spacing:-.015em;display:flex;align-items:center;justify-content:space-between;gap:12px}.proj-body h3 .arr{color:var(--faint);transition:transform .2s,color .2s}.proj-card:hover h3 .arr{color:var(--accent);transform:translate(3px,-3px)}.proj-body p{color:var(--muted);font-size:15px}.proj-tags{display:flex;flex-wrap:wrap;gap:7px;margin-top:4px}.proj-tags .t{font-family:var(--font-mono);font-size:11.5px;color:var(--faint)}.proj-tags .t:before{content:"·";margin-right:7px;color:var(--line)}.proj-tags .t:first-child:before{display:none}.modal-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#020306a8;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:grid;place-items:center;padding:clamp(16px,4vw,48px);animation:fade .25s ease}@keyframes fade{0%{opacity:0}}.modal{width:min(820px,100%);max-height:88vh;overflow-y:auto;background:var(--surface);border:1px solid var(--line);border-radius:20px;animation:pop .3s cubic-bezier(.2,.7,.2,1)}@keyframes pop{0%{opacity:0;transform:translateY(16px) scale(.98)}}.modal-thumb{aspect-ratio:16/8;position:relative;border-bottom:1px solid var(--line);border-radius:20px 20px 0 0;overflow:hidden}.modal-x{position:absolute;top:14px;right:14px;z-index:3;width:38px;height:38px;border-radius:10px;background:var(--bg);border:1px solid var(--line);color:var(--text);display:grid;place-items:center;font-size:18px;transition:border-color .2s,transform .2s}.modal-x:hover{border-color:var(--accent);transform:rotate(90deg)}.modal-body{padding:clamp(24px,4vw,40px)}.modal-body .badge{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent)}.modal-body h2{font-family:var(--font-display);font-weight:600;font-size:clamp(26px,4vw,38px);letter-spacing:-.02em;margin:10px 0 16px}.modal-body .lead{color:var(--muted);font-size:17px;max-width:60ch}.modal-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line-soft);border:1px solid var(--line-soft);border-radius:12px;overflow:hidden;margin:28px 0}.modal-meta div{background:var(--surface);padding:16px 18px}.modal-meta .l{font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}.modal-meta .v{margin-top:5px;font-size:15px;font-weight:500}.modal-body h4{font-family:var(--font-mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin:24px 0 10px}.modal-body ul{list-style:none;display:grid;gap:9px}.modal-body li{color:var(--muted);padding-left:22px;position:relative}.modal-body li:before{content:"—";position:absolute;left:0;color:var(--accent)}.modal-stack{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}.modal-actions{display:flex;gap:12px;margin-top:30px;flex-wrap:wrap}.about-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:clamp(32px,6vw,80px);align-items:start}.about-copy p{color:var(--muted);font-size:18px;margin-bottom:18px;max-width:56ch}.about-copy p b{color:var(--text);font-weight:600}.about-portrait{border:1px solid var(--line-soft);border-radius:16px;overflow:hidden;aspect-ratio:4/5;position:sticky;top:100px}.about-facts{margin-top:30px;display:grid;gap:0;border-top:1px solid var(--line-soft)}.about-facts .row{display:flex;justify-content:space-between;gap:16px;padding:14px 0;border-bottom:1px solid var(--line-soft)}.about-facts .k{font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}.about-facts .v{font-size:15px;text-align:right}.resume-grid{display:grid;grid-template-columns:1fr;gap:0}.tl-row{display:grid;grid-template-columns:170px 1fr;gap:30px;padding:26px 0;border-top:1px solid var(--line-soft);transition:background .2s}.tl-row:hover{background:color-mix(in oklab,var(--surface) 30%,transparent)}.tl-when{font-family:var(--font-mono);font-size:13px;color:var(--faint);padding-top:3px}.tl-what h3{font-family:var(--font-display);font-weight:600;font-size:21px;letter-spacing:-.01em}.tl-what .org{color:var(--accent);font-size:15px;margin:2px 0 10px;font-family:var(--font-mono)}.tl-what p{color:var(--muted);font-size:15.5px;max-width:60ch}.resume-cta{margin-top:36px;display:flex;gap:14px;flex-wrap:wrap;align-items:center}.resume-cta .note{font-family:var(--font-mono);font-size:12.5px;color:var(--faint)}.resume-subhead{font-family:var(--font-mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);margin:44px 0 4px}.footer{border-top:1px solid var(--line-soft);padding:40px 0}.footer-in{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap}.footer .c{font-family:var(--font-mono);font-size:12.5px;color:var(--faint)}.footer .top{font-family:var(--font-mono);font-size:12.5px;color:var(--muted);display:inline-flex;align-items:center;gap:8px;transition:color .2s}.footer .top:hover{color:var(--accent)}.footer-links{display:flex;align-items:center;gap:22px;flex-wrap:wrap}.footer-links a{font-family:var(--font-mono);font-size:12.5px;color:var(--muted);transition:color .2s}.footer-links a:hover{color:var(--accent)}.reveal{opacity:0;transform:translateY(22px);transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}.reveal.in{opacity:1;transform:none}@media (prefers-reduced-motion: reduce){.reveal{opacity:1;transform:none;transition:none}html{scroll-behavior:auto}.hero-status .pulse{animation:none}}@media (max-width: 1200px){:root{--gutter: clamp(48px, 7vw, 88px)}}@media (max-width: 920px){:root{--gutter: clamp(40px, 6.5vw, 64px)}.skills-grid{grid-template-columns:repeat(2,1fr)}.about-grid{grid-template-columns:1fr}.about-portrait{position:static;max-width:380px}.proj-top{align-items:stretch}.filters{overflow-x:auto}}@media (max-width: 680px){body{font-size:16px}html{scroll-padding-top:72px}:root{--gutter: 36px}.section{padding-top:56px;padding-bottom:60px}.section+.section{padding-top:56px}.nav-in{padding:14px var(--gutter)}.nav-links{display:none}.nav-burger{display:inline-block}.nav-links.open{display:flex;flex-direction:column;align-items:stretch;position:absolute;top:100%;left:0;right:0;background:var(--bg);border-bottom:1px solid var(--line);padding:12px var(--gutter) 20px;gap:2px}.nav-links.open a{padding:12px 4px}.nav-cta{display:none}.hero{padding-top:100px;padding-bottom:56px}.hero h1{font-size:clamp(42px,12vw,72px);line-height:.98;letter-spacing:-.03em}.hero-lead{margin-top:20px;font-size:17px}.hero-actions{margin-top:26px;gap:10px}.hero-actions .btn{flex:1 1 auto;justify-content:center;padding:12px 14px}.hero-meta{margin-top:36px;padding-top:22px;gap:22px 32px}.hero-meta .stat .k{font-size:26px}.scroll-cue{display:none}.sec-head{margin-bottom:32px}.sec-title{font-size:clamp(26px,7vw,36px)}.sec-sub{font-size:16px}.skills-grid{grid-template-columns:1fr}.skill-card{padding:22px 20px 20px}.about-portrait{max-width:280px;aspect-ratio:1/1;margin:0 auto}.about-copy p{font-size:16.5px}.about-facts .v{font-size:14px}.proj-top{gap:18px;margin-bottom:28px}.filters{width:100%;-webkit-overflow-scrolling:touch;scrollbar-width:none}.filters::-webkit-scrollbar{display:none}.filters button{flex:0 0 auto;white-space:nowrap;padding:8px 12px}.proj-grid{grid-template-columns:1fr;gap:16px}.proj-card.feat{grid-column:span 1}.proj-card.feat .proj-thumb{aspect-ratio:16/10}.proj-body{padding:18px 18px 20px}.proj-body h3{font-size:19px}.tl-row{grid-template-columns:1fr;gap:6px;padding:20px 0}.tl-when{font-size:12px}.tl-what h3{font-size:18px}.resume-cta{gap:10px}.resume-cta .btn{flex:1 1 auto;justify-content:center}.modal{border-radius:16px;max-height:92vh}.modal-thumb{border-radius:16px 16px 0 0;aspect-ratio:16/10}.modal-meta{grid-template-columns:1fr}.modal-actions .btn{flex:1 1 auto;justify-content:center}.footer{padding:28px 0}.footer-in{gap:14px;flex-direction:column;align-items:flex-start}.footer-links{gap:14px 18px}}@media (max-width: 380px){:root{--gutter: 28px}.hero h1{font-size:clamp(38px,11.5vw,60px)}.hero-actions{flex-direction:column}.hero-actions .btn,.resume-cta .btn{width:100%}}
