:root{--bg:#FBFAFF;--bg-2:#F3EEFC;--ink:#1C1340;--ink-soft:#5C5288;--ink-dim:#8E84AE;--violet:#7C3AED;--fuchsia:#DB2D9E;--indigo:#5B2BD9;--amber:#F5970B;--line:rgba(28,19,64,.11);--line-2:rgba(28,19,64,.17);--wire:rgba(124,58,237,.32);--card:#FFFFFF;--card-hi:#FFFFFF;--grad:linear-gradient(120deg,#7C3AED,#DB2D9E 55%,#FF8A3D);--shadow:0 14px 36px -22px rgba(124,58,237,.45);--maxw:1080px}html[data-theme=dark]{--bg:#0D0820;--bg-2:#171033;--ink:#F1ECFF;--ink-soft:#B5ACDB;--ink-dim:#8076AE;--violet:#A989FF;--fuchsia:#FF6FD0;--indigo:#8B6CF0;--amber:#FFB454;--line:rgba(255,255,255,.1);--line-2:rgba(255,255,255,.18);--wire:rgba(169,137,255,.34);--card:#15102E;--card-hi:#1B1440;--grad:linear-gradient(120deg,#A989FF,#FF6FD0 55%,#FFB454);--shadow:0 18px 44px -22px rgba(0,0,0,.7)}html[data-theme=dark] .mono-card{background:linear-gradient(155deg,#12092e,#2a1556 55%,#5d2bb0)}html[data-theme=dark] .stack .it:hover{background:#221a45}html{transition:none}html.theming,html.theming *{transition:background-color .35s ease,border-color .35s ease,color .35s ease,box-shadow .35s ease!important}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:Inter,system-ui,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden;position:relative}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-2;pointer-events:none;background:radial-gradient(55vw 48vh at 10% -5%,rgba(124,58,237,.16),transparent 62%),radial-gradient(50vw 45vh at 96% 8%,rgba(219,45,158,.14),transparent 62%),radial-gradient(48vw 42vh at 82% 102%,rgba(255,138,61,.13),transparent 62%),radial-gradient(40vw 40vh at 40% 60%,rgba(56,189,248,.08),transparent 60%)}body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;opacity:.025;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}.aurora{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-2;pointer-events:none;overflow:hidden;filter:blur(64px);opacity:.62}html[data-theme=dark] .aurora{opacity:.5}.aurora b{position:absolute;display:block;width:48vw;height:48vw;min-width:380px;min-height:380px;border-radius:50%}.aurora .b1{top:-12%;left:-6%;background:radial-gradient(circle,rgba(124,58,237,.55),transparent 66%);animation:au1 24s ease-in-out infinite}.aurora .b2{top:-4%;right:-8%;background:radial-gradient(circle,rgba(219,45,158,.5),transparent 66%);animation:au2 30s ease-in-out infinite}.aurora .b3{bottom:-16%;left:24%;background:radial-gradient(circle,rgba(255,138,61,.42),transparent 66%);animation:au3 27s ease-in-out infinite}@keyframes au1{0%,to{transform:translate(0) scale(1)}50%{transform:translate(16vw,10vh) scale(1.15)}}@keyframes au2{0%,to{transform:translate(0) scale(1)}50%{transform:translate(-12vw,14vh) scale(1.1)}}@keyframes au3{0%,to{transform:translate(0) scale(1)}50%{transform:translate(10vw,-12vh) scale(1.2)}}a{color:inherit}.mono{font-family:JetBrains Mono,monospace}.wrap{max-width:var(--maxw);margin:0 auto;padding:0 28px}.gradtext{background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}.spine{position:fixed;left:max(28px,calc((100vw - var(--maxw))/2 - 64px));top:0;bottom:0;width:64px;pointer-events:none;z-index:5;display:flex}.spine svg{height:100%;width:100%;overflow:visible}.spine .track{stroke:var(--wire);stroke-width:1.5;fill:none}.spine .flow{stroke:url(#sg);stroke-width:2.5;fill:none;filter:drop-shadow(0 0 6px rgba(139,92,255,.7));stroke-dasharray:1400;stroke-dashoffset:1400;animation:draw 2.6s cubic-bezier(.7,0,.2,1) .3s forwards}@keyframes draw{to{stroke-dashoffset:0}}.node{position:fixed;left:max(28px,calc((100vw - var(--maxw))/2 - 64px));width:64px;z-index:6;pointer-events:none;transform:translateY(-50%)}@media(max-width:1240px){.spine,.node{display:none}}header.nav{position:sticky;top:0;z-index:20;-webkit-backdrop-filter:saturate(1.6) blur(14px);backdrop-filter:saturate(1.6) blur(14px);background:color-mix(in srgb,var(--bg) 72%,transparent);border-bottom:1px solid var(--line)}.nav .wrap{display:flex;align-items:center;justify-content:space-between;height:64px}.brand{font-family:Bricolage Grotesque;font-weight:700;font-size:18px;letter-spacing:-.01em;display:flex;align-items:center;gap:10px}.brand .dot{width:9px;height:9px;border-radius:50%;background:var(--amber);box-shadow:0 0 14px 2px var(--amber)}nav.menu{display:flex;gap:26px;font-size:13.5px;font-weight:500}nav.menu a{text-decoration:none;color:var(--ink-soft);transition:color .2s}nav.menu a:hover{color:var(--ink)}nav.menu a.active{color:var(--ink)}nav.menu a.active:after{content:"";display:block;height:2px;margin-top:3px;border-radius:2px;background:var(--grad)}.nav-right{display:flex;align-items:center;gap:10px}.progress{position:fixed;left:0;top:0;height:3px;width:0;z-index:30;background:var(--grad);box-shadow:0 0 10px #8b5cff99;transition:width .08s linear}.iconbtn{width:40px;height:40px;border-radius:12px;border:1.5px solid var(--line-2);background:var(--card);color:var(--ink);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:border-color .2s,transform .15s,background .2s}.iconbtn:hover{border-color:var(--violet);transform:translateY(-2px)}.iconbtn svg{width:19px;height:19px;display:block}.iconbtn .moon,html[data-theme=dark] .iconbtn .sun{display:none}html[data-theme=dark] .iconbtn .moon{display:block}.hamb{display:none}@media(max-width:640px){nav.menu{position:fixed;inset:64px 0 auto 0;flex-direction:column;gap:0;background:color-mix(in srgb,var(--bg) 96%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--line);padding:8px 0;transform:translateY(-12px);opacity:0;pointer-events:none;transition:opacity .22s,transform .22s;font-size:16px}nav.menu.open{opacity:1;transform:none;pointer-events:auto}nav.menu a{padding:13px 28px}nav.menu a.active:after{display:none}.hamb{display:inline-flex}}.totop{position:fixed;right:22px;bottom:22px;z-index:25;width:46px;height:46px;border-radius:50%;border:none;cursor:pointer;background:var(--grad);color:#fff;font-size:20px;display:flex;align-items:center;justify-content:center;box-shadow:0 12px 30px -8px #8b5cff99;opacity:0;transform:translateY(14px) scale(.9);pointer-events:none;transition:opacity .25s,transform .25s}.totop.show{opacity:1;transform:none;pointer-events:auto}.totop:hover{transform:translateY(-3px)}.toast{position:fixed;left:50%;bottom:30px;transform:translate(-50%,20px);z-index:40;background:var(--ink);color:var(--bg);font-size:13.5px;font-weight:600;padding:11px 20px;border-radius:999px;box-shadow:0 14px 36px -14px #00000080;opacity:0;pointer-events:none;transition:opacity .25s,transform .25s}.toast.show{opacity:1;transform:translate(-50%)}.links button.copy{font-family:inherit}.langbtn{height:40px;padding:0 14px;border-radius:12px;border:1.5px solid var(--line-2);background:var(--card);color:var(--ink);font-family:JetBrains Mono,monospace;font-size:12.5px;font-weight:500;letter-spacing:.04em;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:border-color .2s,transform .15s}.langbtn:hover{border-color:var(--violet);transform:translateY(-2px)}.langbtn .globe{width:15px;height:15px}.ptr{position:fixed;top:0;left:0;width:520px;height:520px;margin:-260px 0 0 -260px;border-radius:50%;z-index:-1;pointer-events:none;opacity:0;transition:opacity .4s;background:radial-gradient(circle,rgba(124,58,237,.16),rgba(219,45,158,.1) 38%,transparent 64%);will-change:transform}@media(hover:hover)and (pointer:fine){.ptr.on{opacity:1}}.pcard,.fcard{--mx:50%;--my:50%}.fcard{position:relative;overflow:hidden}.pcard .spot,.fcard .spot{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:radial-gradient(240px circle at var(--mx) var(--my),color-mix(in srgb,var(--violet) 22%,transparent),transparent 62%);opacity:0;transition:opacity .3s;pointer-events:none;z-index:0}.pcard:hover .spot,.fcard:hover .spot{opacity:1}.pcard>*{position:relative;z-index:1}.fcard>*{position:relative;z-index:1}.tilt{transition:transform .12s ease-out,border-color .2s,box-shadow .3s,background .2s}.hero{padding:clamp(70px,12vw,140px) 0 clamp(48px,7vw,90px)}.eyebrow{font-family:JetBrains Mono,monospace;font-size:12.5px;letter-spacing:.06em;color:var(--violet);text-transform:uppercase;display:flex;align-items:center;gap:10px;margin-bottom:26px}.eyebrow:before{content:"";width:26px;height:1px;background:var(--grad)}.eyebrow .role{color:var(--ink);font-weight:600;white-space:nowrap}.eyebrow .role:after{content:"";display:inline-block;width:2px;height:1.05em;background:var(--fuchsia);margin-left:2px;vertical-align:-2px;animation:caret 1.05s steps(1) infinite}@keyframes caret{50%{opacity:0}}h1{font-family:Bricolage Grotesque;font-weight:800;font-size:clamp(38px,7.6vw,78px);line-height:1;letter-spacing:-.03em;max-width:15ch}.lede{margin-top:30px;max-width:56ch;font-size:clamp(17px,2.3vw,20px);color:var(--ink-soft)}.lede strong{color:var(--ink);font-weight:600}.cta-row{margin-top:40px;display:flex;flex-wrap:wrap;gap:14px}.btn{font-family:Inter,system-ui,sans-serif;font-weight:600;font-size:15px;text-decoration:none;padding:14px 26px;border-radius:999px;transition:transform .15s,box-shadow .25s,opacity .2s,border-color .2s,color .2s;display:inline-flex;align-items:center;gap:9px;position:relative;cursor:pointer;background:transparent}.btn.primary{background:var(--grad);color:#fff;box-shadow:0 8px 30px -8px #8b5cff99}.btn.primary:hover{transform:translateY(-2px);box-shadow:0 14px 40px -8px #c861ffbf}.btn.ghost{border:1.5px solid var(--line-2);color:var(--ink)}.btn.ghost:hover{border-color:var(--violet);transform:translateY(-2px);box-shadow:0 0 0 1px var(--violet) inset}.strip{margin-top:64px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;grid-template-columns:repeat(4,1fr)}.strip .cell{padding:22px 18px 22px 0}.strip .cell+.cell{padding-left:24px;border-left:1px solid var(--line)}.strip .num{font-family:Bricolage Grotesque;font-weight:700;font-size:clamp(20px,2.7vw,28px);letter-spacing:-.02em;line-height:1.05;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}.strip .lab{font-size:12.5px;color:var(--ink-dim);margin-top:8px}@media(max-width:680px){.strip{grid-template-columns:repeat(2,1fr)}.strip .cell{border-left:none!important;padding-left:0!important}.strip .cell:nth-child(2n){border-left:1px solid var(--line)!important;padding-left:24px!important}}section{padding:clamp(60px,9vw,110px) 0;position:relative}.sec-head{display:flex;align-items:baseline;gap:16px;margin-bottom:46px;flex-wrap:wrap}.sec-tag{font-family:JetBrains Mono,monospace;font-size:12.5px;color:var(--amber);letter-spacing:.04em}h2{font-family:Bricolage Grotesque;font-weight:700;font-size:clamp(26px,4.4vw,40px);letter-spacing:-.02em;line-height:1.05}.about{display:grid;grid-template-columns:1.4fr 1fr;gap:54px;align-items:start}.about p{font-size:clamp(16px,2vw,18.5px);color:var(--ink-soft)}.about p strong{color:var(--ink);font-weight:600}.about p+p{margin-top:18px}.edu{margin-top:26px;font-size:14px;color:var(--ink-soft);border-left:2px solid;border-image:var(--grad) 1;padding-left:16px}.edu b{color:var(--ink);font-weight:600;display:block;font-family:Bricolage Grotesque}.mono-card{position:relative;aspect-ratio:4/5;border-radius:20px;background:linear-gradient(155deg,#1a0f3a,#3a1d6e 55%,#7d3bd6);overflow:hidden;display:flex;align-items:center;justify-content:center;box-shadow:0 40px 80px -30px #8b5cff99,0 0 0 1px var(--line-2) inset}.mono-card .portrait{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center top;z-index:4}.mono-card .glow{position:absolute;width:70%;height:70%;border-radius:50%;background:radial-gradient(circle,rgba(255,180,84,.35),transparent 65%);top:-12%;right:-12%;filter:blur(8px)}.mono-card .grid{position:absolute;top:0;right:0;bottom:0;left:0;opacity:.55}.mono-card .ini{font-family:Bricolage Grotesque;font-weight:800;font-size:clamp(28px,5.4vw,44px);color:#fff;letter-spacing:-.02em;line-height:1.05;text-align:center;z-index:2;padding:0 22px;text-shadow:0 4px 30px rgba(0,0,0,.4)}.mono-card .tagline{position:absolute;bottom:18px;left:18px;right:18px;z-index:2;font-family:JetBrains Mono,monospace;font-size:11.5px;color:#ffffffe6;display:flex;justify-content:space-between}@media(max-width:780px){.about{grid-template-columns:1fr;gap:36px}.mono-card{max-width:300px}}.focus{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.fcard{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:26px 24px;box-shadow:var(--shadow);transition:transform .2s,border-color .2s,box-shadow .3s,background .2s}.fcard:hover{transform:translateY(-5px);border-color:var(--line-2);box-shadow:0 28px 56px -26px #7c3aed80}.fcard .n{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--violet)}.fcard h3{font-family:Bricolage Grotesque;font-weight:600;font-size:20px;margin:14px 0 10px;letter-spacing:-.01em}.fcard p{font-size:14.5px;color:var(--ink-soft)}@media(max-width:780px){.focus{grid-template-columns:1fr}}.proj{display:flex;flex-direction:column;gap:14px}.pcard{display:grid;grid-template-columns:auto 1fr auto;gap:28px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:20px;padding:28px 30px;box-shadow:var(--shadow);transition:border-color .2s,transform .2s,box-shadow .3s,background .2s;text-decoration:none;position:relative;overflow:hidden}.pcard:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--grad);opacity:0;transition:opacity .25s}.pcard:hover{border-color:var(--line-2);transform:translateY(-4px);box-shadow:0 32px 60px -28px #db2d9e80}.pcard:hover:before{opacity:1}.pcard .idx{font-family:JetBrains Mono,monospace;font-size:13px;color:var(--ink-dim)}.pcard .role{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--amber);letter-spacing:.03em}.pcard h3{font-family:Bricolage Grotesque;font-weight:600;font-size:clamp(19px,2.6vw,24px);letter-spacing:-.015em;margin-top:3px}.pcard p{font-size:14.5px;color:var(--ink-soft);margin-top:8px;max-width:62ch}.pcard .tags{margin-top:13px;display:flex;flex-wrap:wrap;gap:7px}.pcard .tags span{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--ink-soft);border:1px solid var(--line-2);border-radius:6px;padding:3px 8px}.pcard .arrow{font-size:22px;color:var(--violet);transition:transform .2s}.pcard:hover .arrow{transform:translate(4px,-4px)}.pcard .lock{font-size:17px;opacity:.55;filter:grayscale(.2)}div.pcard:hover{transform:translateY(-4px)}@media(max-width:680px){.pcard{grid-template-columns:1fr;gap:6px}.pcard .arrow,.pcard .lock,.pcard .idx{display:none}}.more{margin-top:22px;font-size:14px;color:var(--ink-dim)}.more a{color:var(--violet);font-weight:600;text-decoration:none}.more a:hover{text-decoration:underline}.stack{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:16px;overflow:hidden}.stack .it{background:var(--bg-2);padding:18px 20px;transition:background .2s}.stack .it:hover{background:#ece4fb}.stack .it .k{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--amber);text-transform:uppercase;letter-spacing:.04em}.stack .it .v{margin-top:8px;font-size:14.5px;line-height:1.75;color:var(--ink-soft)}.contact{text-align:center;padding-bottom:clamp(80px,12vw,140px)}.contact h2{font-size:clamp(28px,5.6vw,52px);max-width:18ch;margin:0 auto 22px}.contact .lede{margin:0 auto;color:var(--ink-soft);max-width:48ch;font-size:18px}.links{margin-top:38px;display:flex;flex-wrap:wrap;gap:14px;justify-content:center}.links a,.links button.copy{text-decoration:none;font-weight:500;font-size:15px;padding:12px 22px;border-radius:999px;border:1.5px solid var(--line-2);transition:all .2s;display:inline-flex;align-items:center;gap:8px;color:var(--ink);background:transparent;cursor:pointer;font-family:Inter,system-ui,sans-serif}.links a:hover,.links button.copy:hover{border-color:var(--violet);transform:translateY(-2px);box-shadow:0 0 0 1px var(--violet) inset,0 10px 30px -12px #8b5cff99}footer{border-top:1px solid var(--line);padding:30px 0;font-size:13px;color:var(--ink-dim)}footer .wrap{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px}.reveal{opacity:0;transform:translateY(22px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1)}.reveal.in{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto}.reveal{opacity:1;transform:none}.spine .flow{stroke-dashoffset:0}}:focus-visible{outline:2.5px solid var(--fuchsia);outline-offset:3px;border-radius:4px}::selection{background:#c861ff59;color:#fff}@media print{html,html[data-theme=dark]{--bg:#fff;--bg-2:#fff;--ink:#111;--ink-soft:#333;--ink-dim:#666;--violet:#5B2BD9;--fuchsia:#b01f74;--amber:#9a5b00;--line:#ddd;--line-2:#ccc;--card:#fff;--shadow:none;--grad:linear-gradient(120deg,#5B2BD9,#b01f74)}@page{margin:14mm}body{overflow:visible}body:before,body:after,.spine,.node,.progress,.totop,.toast,.ptr,.nav-right,.cta-row,.mono-card,.pcard .arrow,.pcard .lock,.spot{display:none!important}header.nav{position:static;background:none;border-bottom:1px solid var(--line);-webkit-backdrop-filter:none;backdrop-filter:none}.reveal{opacity:1!important;transform:none!important}section{padding:14px 0!important;break-inside:avoid}.hero{padding:8px 0 14px!important}.strip{margin-top:18px}h1{font-size:30px!important}h2{font-size:21px!important}.about{grid-template-columns:1fr!important;gap:0!important}.focus{grid-template-columns:repeat(3,1fr)!important}.pcard,.fcard{box-shadow:none!important;border:1px solid var(--line)!important;transform:none!important;break-inside:avoid;padding:14px 16px!important}.pcard{grid-template-columns:auto 1fr!important;gap:14px!important}a[href]{color:var(--ink)!important;text-decoration:none}a.pcard[href^=http] h3:after{content:" (" attr(href) ")";font-family:JetBrains Mono,monospace;font-size:9px;font-weight:400;color:var(--ink-dim)}.links{justify-content:flex-start}}
