:root{color-scheme:dark;--bg: #0a0b0e;--bg-2: #0d0f14;--panel: #101319;--panel-2: #151922;--txt-hi: #f2f5f9;--txt-mid: #a2adbc;--txt-lo: #7c8797;--accent: #2e6bf0;--accent-hi: #4c86ff;--accent-txt: #7facff;--on-accent: #ffffff;--accent-soft: rgba(76, 134, 255, .14);--accent-line: rgba(76, 134, 255, .32);--ok: #3ecf8e;--ok-soft: rgba(62, 207, 142, .13);--ok-line: rgba(62, 207, 142, .26);--ok-ring: rgba(62, 207, 142, .42);--surf-1: rgba(255, 255, 255, .032);--surf-2: rgba(255, 255, 255, .062);--surf-hover: rgba(255, 255, 255, .045);--edge-hi: rgba(255, 255, 255, .15);--edge-md: rgba(255, 255, 255, .082);--edge-lo: rgba(255, 255, 255, .045);--sheen: inset 0 1px 0 rgba(255, 255, 255, .06);--sheen-strong: inset 0 1px 0 rgba(255, 255, 255, .09);--lift-1: 0 1px 2px rgba(0, 0, 0, .22), 0 8px 24px -12px rgba(0, 0, 0, .5);--lift-2: 0 2px 6px rgba(0, 0, 0, .26), 0 22px 52px -18px rgba(0, 0, 0, .62);--lift-3: 0 4px 10px rgba(0, 0, 0, .3), 0 44px 84px -26px rgba(0, 0, 0, .72);--glass: rgba(13, 15, 20, .68);--scroll-thumb: rgba(255, 255, 255, .16);--grain-op: .03;--halo-a: rgba(46, 107, 240, .17);--halo-b: rgba(46, 107, 240, .07)}:root[data-theme=light]{color-scheme:light;--bg: #f6f7fb;--bg-2: #eef1f8;--panel: #ffffff;--panel-2: #f4f6fb;--txt-hi: #0a0c10;--txt-mid: #4b5565;--txt-lo: #5d6879;--accent: #2563eb;--accent-hi: #1d4ed8;--accent-txt: #1d4ed8;--on-accent: #ffffff;--accent-soft: rgba(37, 99, 235, .09);--accent-line: rgba(37, 99, 235, .26);--ok: #0f7a4d;--ok-soft: rgba(15, 122, 77, .1);--ok-line: rgba(15, 122, 77, .22);--ok-ring: rgba(15, 122, 77, .38);--surf-1: rgba(10, 12, 16, .03);--surf-2: rgba(10, 12, 16, .058);--surf-hover: rgba(10, 12, 16, .04);--edge-hi: rgba(10, 12, 16, .13);--edge-md: rgba(10, 12, 16, .082);--edge-lo: rgba(10, 12, 16, .05);--sheen: inset 0 1px 0 rgba(255, 255, 255, .9);--sheen-strong: inset 0 1px 0 rgba(255, 255, 255, 1);--lift-1: 0 1px 2px rgba(16, 24, 40, .04), 0 10px 26px -14px rgba(16, 24, 40, .16);--lift-2: 0 2px 6px rgba(16, 24, 40, .05), 0 26px 58px -22px rgba(16, 24, 40, .2);--lift-3: 0 4px 12px rgba(16, 24, 40, .06), 0 52px 96px -32px rgba(16, 24, 40, .26);--glass: rgba(255, 255, 255, .74);--scroll-thumb: rgba(10, 12, 16, .22);--grain-op: .035;--halo-a: rgba(37, 99, 235, .11);--halo-b: rgba(37, 99, 235, .04)}:root{--font-display: "Playfair Display", "Iowan Old Style", Georgia, serif;--font-body: "Plus Jakarta Sans", system-ui, -apple-system, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, Menlo, monospace;--fs-display: clamp(2.6rem, 6.5vw, 5.4rem);--fs-h2: clamp(2rem, 4.2vw, 3.35rem);--fs-h3: clamp(1.25rem, 2.2vw, 1.55rem);--fs-lede: clamp(1.0625rem, 1.5vw, 1.1875rem);--fs-body: 1rem;--fs-sm: .9375rem;--fs-xs: .8125rem;--fs-label: .6875rem;--bezel-pad: 6px;--r-shell: 24px;--r-core: calc(var(--r-shell) - var(--bezel-pad));--r-chip: 7px;--r-pill: 999px;--shell-w: 1240px;--gut: clamp(1.25rem, 4vw, 2.75rem);--sec-y: clamp(5.5rem, 11vw, 9.5rem);--ease-fluid: cubic-bezier(.32, .72, 0, 1);--ease-soft: cubic-bezier(.22, .61, .24, 1)}body,.bezel,.core,.chip,.btn,.hdr-island,.eyebrow,.card{transition-property:background-color,background-image,color,box-shadow;transition-duration:.45s;transition-timing-function:var(--ease-fluid)}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:7rem}body{background-color:var(--bg);color:var(--txt-hi);font-family:var(--font-body);font-size:var(--fs-body);line-height:1.68;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}body:after{content:"";position:fixed;inset:0;z-index:3;pointer-events:none;opacity:var(--grain-op);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E")}body:before{content:"";position:fixed;inset:0 0 auto;height:100vh;z-index:0;pointer-events:none;background:radial-gradient(52% 46% at 76% 16%,var(--halo-a),transparent 68%),radial-gradient(46% 40% at 12% 4%,var(--halo-b),transparent 70%)}a{color:inherit;text-decoration:none}ul{list-style:none}button{font-family:inherit;font-size:inherit;color:inherit;cursor:pointer;border:none;background:none}img{display:block;max-width:100%;height:auto}:focus-visible{outline:2px solid var(--accent-txt);outline-offset:3px;border-radius:5px}::selection{background:var(--accent);color:var(--on-accent)}::-webkit-scrollbar{width:11px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border:3px solid var(--bg);border-radius:99px}.skip{position:absolute;left:-9999px;top:0;z-index:60}.skip:focus{left:1rem;top:1rem;padding:.75rem 1.15rem;border-radius:var(--r-pill);background:var(--accent);color:var(--on-accent);font-family:var(--font-mono);font-size:var(--fs-xs)}.shell{width:100%;max-width:var(--shell-w);margin-inline:auto;padding-inline:var(--gut);position:relative;z-index:2}.bezel{padding:var(--bezel-pad);border-radius:var(--r-shell);background:linear-gradient(180deg,var(--surf-2),var(--surf-1));box-shadow:var(--lift-2),var(--sheen)}.core{border-radius:var(--r-core);background:var(--panel);box-shadow:var(--sheen-strong),0 0 0 1px var(--edge-lo);overflow:hidden}.card{display:block;transition:transform .7s var(--ease-fluid),box-shadow .7s var(--ease-fluid);will-change:transform}.card:hover{transform:translateY(-4px);box-shadow:var(--lift-3),var(--sheen)}.card:hover .core{background:var(--panel-2)}.chan{font-family:var(--font-mono);font-size:var(--fs-label);font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--txt-lo)}.chan-accent{color:var(--accent-txt)}.eyebrow{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-mono);font-size:.625rem;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--txt-mid);padding:.42rem .9rem;border-radius:var(--r-pill);background:var(--panel);box-shadow:inset 0 0 0 1px var(--edge-md),var(--lift-1)}.sec{padding-block:var(--sec-y)}.sec-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1rem 2rem;margin-bottom:clamp(3rem,6vw,4.75rem)}.sec-title{font-family:var(--font-display);font-size:var(--fs-h2);font-weight:700;letter-spacing:-.022em;line-height:1.04;text-wrap:balance;margin-top:1rem}.sec-read{font-family:var(--font-mono);font-size:var(--fs-label);letter-spacing:.16em;text-transform:uppercase;color:var(--txt-lo);white-space:nowrap}.chip{display:inline-block;font-family:var(--font-mono);font-size:var(--fs-label);letter-spacing:.045em;color:var(--txt-mid);background:var(--panel-2);border-radius:var(--r-chip);padding:.4rem .68rem;white-space:nowrap;box-shadow:inset 0 0 0 1px var(--edge-lo),var(--sheen)}.chip:hover{color:var(--txt-hi);background:var(--surf-1)}.chip-row{display:flex;flex-wrap:wrap;gap:.45rem}.dot{width:6px;height:6px;border-radius:50%;flex:none;display:inline-block;background:var(--ok)}.dot-live{animation:pulse 2.8s var(--ease-soft) infinite}@keyframes pulse{0%{box-shadow:0 0 0 0 var(--ok-ring)}70%{box-shadow:0 0 0 8px transparent}to{box-shadow:0 0 0 0 transparent}}.badge{display:inline-flex;align-items:center;gap:.45rem;font-family:var(--font-mono);font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;color:var(--ok);background:var(--ok-soft);border-radius:var(--r-pill);padding:.3rem .68rem;width:fit-content;box-shadow:inset 0 0 0 1px var(--ok-line)}.btn{display:inline-flex;align-items:center;gap:.75rem;font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:500;letter-spacing:.04em;padding:.5rem .5rem .5rem 1.35rem;border-radius:var(--r-pill);transition:transform .55s var(--ease-fluid),background-color .55s var(--ease-fluid),box-shadow .55s var(--ease-fluid),color .55s var(--ease-fluid);will-change:transform}.btn-orb{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;flex:none;transition:transform .55s var(--ease-fluid),background-color .55s var(--ease-fluid)}.btn-primary{background-color:var(--accent);color:var(--on-accent);font-weight:500;box-shadow:var(--lift-1),inset 0 1px #ffffff3d}.btn-primary .btn-orb{background-color:#ffffff2e}.btn-primary:hover{background-color:var(--accent-hi);box-shadow:var(--lift-2),inset 0 1px #ffffff4d}.btn-ghost{color:var(--txt-hi);background-color:var(--panel);box-shadow:inset 0 0 0 1px var(--edge-md),var(--lift-1)}.btn-ghost .btn-orb{background-color:var(--surf-2)}.btn-ghost:hover{box-shadow:inset 0 0 0 1px var(--edge-hi),var(--lift-2)}.btn:hover .btn-orb{transform:translate(3px,-1px) scale(1.06)}.btn:active{transform:scale(.978)}.link-more{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--accent-txt);transition:gap .5s var(--ease-fluid)}.link-more svg{transition:transform .55s var(--ease-fluid)}.card:hover .link-more svg,.link-more:hover svg{transform:translate(3px,-3px)}.hdr{position:fixed;top:0;left:0;right:0;z-index:40;display:flex;justify-content:center;padding:1.35rem var(--gut);pointer-events:none}.hdr-island{pointer-events:auto;display:flex;align-items:center;gap:clamp(1rem,3vw,2.25rem);max-width:100%;padding:.5rem .5rem .5rem 1.15rem;border-radius:var(--r-pill);background-color:var(--glass);backdrop-filter:blur(22px) saturate(170%);-webkit-backdrop-filter:blur(22px) saturate(170%);box-shadow:inset 0 0 0 1px var(--edge-md),var(--sheen),var(--lift-2);transition:transform .7s var(--ease-fluid),background-color .7s var(--ease-fluid);will-change:transform}.hdr-hidden{transform:translateY(calc(-100% - 1.6rem))}.hdr-mark{display:flex;align-items:center;gap:.6rem;font-family:var(--font-display);font-size:1.0625rem;font-weight:700;letter-spacing:-.015em;white-space:nowrap}.hdr-nav{display:flex;gap:clamp(.5rem,1.6vw,1.25rem)}.hdr-link{position:relative;font-family:var(--font-mono);font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;color:var(--txt-lo);padding:.5rem .4rem;transition:color .5s var(--ease-fluid)}.hdr-link:hover{color:var(--txt-hi)}.hdr-link:after{content:"";position:absolute;left:.4rem;right:.4rem;bottom:.15rem;height:1.5px;border-radius:2px;background-color:var(--accent-txt);transform:scaleX(0);transform-origin:center;transition:transform .55s var(--ease-fluid)}.hdr-link:hover:after,.hdr-link-on:after{transform:scaleX(1)}.hdr-link-on{color:var(--txt-hi)}.hdr-controls{display:flex;align-items:center;gap:.35rem}.hdr-lang,.hdr-theme{display:grid;place-items:center;height:32px;border-radius:var(--r-pill);color:var(--txt-mid);background-color:var(--surf-1);transition:color .5s var(--ease-fluid),background-color .5s var(--ease-fluid),transform .5s var(--ease-fluid)}.hdr-lang{min-width:58px;padding-inline:.7rem;font-family:var(--font-mono);font-size:var(--fs-label);letter-spacing:.1em;color:var(--txt-hi)}.hdr-theme{width:32px}.hdr-lang:hover,.hdr-theme:hover{color:var(--txt-hi);background-color:var(--surf-2)}.hdr-theme:hover{transform:rotate(-20deg)}.hero{min-height:100dvh;display:flex;align-items:center;padding-top:clamp(8.5rem,18vh,12rem);padding-bottom:clamp(4rem,9vw,7rem)}.hero-grid{width:100%;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);gap:clamp(2.5rem,5vw,4.5rem);align-items:center}.hero-title{font-family:var(--font-display);font-size:var(--fs-display);font-weight:700;line-height:.98;letter-spacing:-.028em;margin-top:1.6rem;max-inline-size:7em;text-wrap:balance}.hero-title-name{display:block}.hero-title em{font-style:normal;font-weight:500;color:var(--txt-mid)}.hero-photo{position:relative}.hero-photo .core{display:block;position:relative;aspect-ratio:4 / 5}.hero-photo img{width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.15) brightness(.9)}.hero-photo .core:after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(115% 85% at 50% 32%,transparent 38%,rgba(0,0,0,.5) 100%)}.hero-lede{margin-top:2.15rem;max-inline-size:52ch;font-size:var(--fs-lede);color:var(--txt-mid);text-wrap:pretty}.hero-acts{display:flex;flex-wrap:wrap;gap:.65rem;margin-top:2.6rem}.panel-head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.6rem 1rem;padding:1.05rem 1.4rem;background-color:var(--panel-2);box-shadow:inset 0 -1px 0 var(--edge-md)}.about-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:clamp(2.5rem,6vw,5rem);align-items:start}.about-lede{font-family:var(--font-display);font-size:clamp(1.5rem,2.9vw,2.15rem);font-weight:600;line-height:1.24;letter-spacing:-.018em;margin-bottom:1.85rem;text-wrap:balance}.about-body p{color:var(--txt-mid);margin-bottom:1.15rem;max-inline-size:62ch}.about-row{padding:1.05rem 1.4rem;display:flex;justify-content:space-between;align-items:baseline;gap:1.25rem;position:relative}.about-row+.about-row:before,.foot-link+.foot-link:before,.tl-item+.tl-item:before{content:"";position:absolute;left:1.4rem;right:1.4rem;top:0;height:1px;background-color:var(--edge-md)}.about-row-v{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--txt-hi);text-align:right;font-variant-numeric:tabular-nums}.about-row-live{color:var(--accent-txt)}.stack-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(236px,1fr));gap:clamp(1rem,2vw,1.4rem)}.stack-card .core{height:100%;padding:1.6rem 1.5rem}.stack-card-label{display:block;padding-bottom:.9rem;margin-bottom:1.1rem;box-shadow:inset 0 -1px 0 var(--edge-md)}.stack-list{display:grid;gap:.65rem}.stack-list li{display:flex;align-items:center;gap:.7rem;font-size:var(--fs-sm);color:var(--txt-mid);line-height:1.4}.tech-mark{width:16px;height:16px;flex:none;fill:currentColor;color:var(--txt-lo);transition:color .6s var(--ease-fluid)}.stack-card:hover .tech-mark{color:var(--txt-hi)}.tl-item{display:grid;grid-template-columns:200px minmax(0,1fr);gap:clamp(1.25rem,4vw,3rem);padding:clamp(1.85rem,4vw,2.6rem) clamp(1.4rem,3vw,2rem);position:relative}.tl-when{display:flex;flex-direction:column;gap:.55rem}.tl-range{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--txt-hi);font-variant-numeric:tabular-nums}.tl-dur{font-family:var(--font-mono);font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;color:var(--txt-lo)}.tl-role{font-family:var(--font-display);font-size:var(--fs-h3);font-weight:700;letter-spacing:-.02em;line-height:1.18}.tl-org{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--accent-txt);margin-top:.45rem}.tl-list{margin-top:1.35rem;display:grid;gap:.8rem}.tl-list li{position:relative;padding-left:1.35rem;color:var(--txt-mid);font-size:var(--fs-sm);max-inline-size:68ch}.tl-list li:before{content:"";position:absolute;left:0;top:.68em;width:8px;height:1.5px;border-radius:2px;background-color:var(--accent-txt)}.proj-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:clamp(1.25rem,2.5vw,1.75rem);align-items:stretch}.proj-card .core{height:100%;display:flex;flex-direction:column;padding:clamp(1.6rem,3vw,2.15rem)}.proj-meta{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem .85rem;font-family:var(--font-mono);font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;color:var(--txt-lo)}.proj-name{font-family:var(--font-display);font-size:clamp(1.6rem,3vw,2.05rem);font-weight:700;letter-spacing:-.024em;line-height:1.1;margin:1.1rem 0 .9rem;text-wrap:balance}.proj-sum{color:var(--txt-mid);font-size:var(--fs-sm);max-inline-size:58ch}.proj-card .tl-list{margin-top:1.35rem}.proj-foot{margin-top:auto;padding-top:1.6rem}.proj-foot .chip-row{padding-top:1.35rem;margin-top:1.35rem;box-shadow:inset 0 1px 0 var(--edge-md)}.edu-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:clamp(1rem,2vw,1.4rem)}.edu-card .core{height:100%;padding:1.6rem 1.5rem;display:flex;flex-direction:column;gap:.65rem}.edu-title{font-family:var(--font-display);font-size:1.2rem;font-weight:600;line-height:1.25;letter-spacing:-.015em;text-wrap:balance}.edu-org{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--txt-mid);margin-top:auto;padding-top:.5rem}.foot{padding-block:var(--sec-y) 3rem}.foot-name{font-family:var(--font-display);font-size:clamp(2.4rem,6vw,4.9rem);font-weight:700;letter-spacing:-.028em;line-height:.98;color:var(--txt-hi)}.foot-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.85fr);gap:clamp(2.5rem,6vw,4.5rem);align-items:end;margin-bottom:clamp(3.5rem,8vw,5.5rem)}.foot-link{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1.05rem 1.4rem;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--txt-mid);position:relative;transition:color .5s var(--ease-fluid),background-color .5s var(--ease-fluid)}.foot-link:hover{color:var(--txt-hi);background-color:var(--panel-2)}.foot-link span:first-child{display:inline-flex;align-items:center;gap:.7rem;min-width:0;overflow-wrap:anywhere}.foot-link-arrow{flex:none;transition:transform .55s var(--ease-fluid)}.foot-link:hover .foot-link-arrow{transform:translate(3px,-3px)}.foot-bar{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.85rem;padding-top:1.85rem;box-shadow:inset 0 1px 0 var(--edge-md)}.reveal{opacity:0;transform:translateY(48px);filter:blur(8px);transition:opacity .95s var(--ease-fluid),transform .95s var(--ease-fluid),filter .95s var(--ease-fluid);transition-delay:var(--d, 0ms);will-change:transform,opacity}.reveal-in{opacity:1;transform:none;filter:blur(0);will-change:auto}@media(max-width:1040px){.hero-grid,.about-grid{grid-template-columns:minmax(0,1fr)}.hero{min-height:auto;padding-top:clamp(7.5rem,16vh,10rem)}.hero-photo{max-inline-size:380px}}@media(max-width:900px){.foot-grid{grid-template-columns:minmax(0,1fr);align-items:start}}@media(max-width:780px){.hdr-nav{display:none}.tl-item{grid-template-columns:minmax(0,1fr)}.tl-when{flex-direction:row;align-items:center;flex-wrap:wrap;gap:.6rem 1rem}.proj-grid,.stack-grid,.edu-grid{grid-template-columns:minmax(0,1fr)}}@media(pointer:coarse){.hdr-mark,.hdr-link,.hdr-lang,.hdr-theme,.link-more,.foot-link{min-height:44px;display:inline-flex;align-items:center}.hdr-lang,.hdr-theme{min-width:44px}.foot-link{display:flex}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.reveal{opacity:1;transform:none;filter:none}.card:hover{transform:none}}
