html,body{margin:0}img{max-width:100%}[hidden]{display:none!important}:root{--L-bg:#fcf4ea;--L-surface:#fffdf9;--L-ink:#2a1a12;--L-muted:#6f5b4c;--L-line:#ead7c4;--L-accent:#b9541f;--L-accent2:#2f6fa6;--L-accent-ink:#97410f;--L-on-accent:#fff;--L-tint:#f8e3cf;--D-bg:#130c0b;--D-surface:#1c1411;--D-ink:#f7e9dd;--D-muted:#b6a191;--D-line:#382820;--D-accent:#f08a4b;--D-accent2:#7ab8ec;--D-accent-ink:#f5a06b;--D-on-accent:#1c0d05;--D-tint:#2b1c15;--hero-bg:#0a0712;--hero-ink:#fff4ec;--hero-muted:#e2d1c6;--hero-line:#fff4ec2e;--font-main:"Montserrat",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--font-mono:"JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;--radius:14px;--nav-h:68px;--bg:var(--L-bg);--surface:var(--L-surface);--ink:var(--L-ink);--muted:var(--L-muted);--line:var(--L-line);--accent:var(--L-accent);--accent2:var(--L-accent2);--accent-ink:var(--L-accent-ink);--on-accent:var(--L-on-accent);--tint:var(--L-tint)}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:var(--D-bg);--surface:var(--D-surface);--ink:var(--D-ink);--muted:var(--D-muted);--line:var(--D-line);--accent:var(--D-accent);--accent2:var(--D-accent2);--accent-ink:var(--D-accent-ink);--on-accent:var(--D-on-accent);--tint:var(--D-tint);color-scheme:dark}}:root[data-theme=dark]{--bg:var(--D-bg);--surface:var(--D-surface);--ink:var(--D-ink);--muted:var(--D-muted);--line:var(--D-line);--accent:var(--D-accent);--accent2:var(--D-accent2);--accent-ink:var(--D-accent-ink);--on-accent:var(--D-on-accent);--tint:var(--D-tint);color-scheme:dark}:root.mode-light{--bg:var(--L-bg);--surface:var(--L-surface);--ink:var(--L-ink);--muted:var(--L-muted);--line:var(--L-line);--accent:var(--L-accent);--accent2:var(--L-accent2);--accent-ink:var(--L-accent-ink);--on-accent:var(--L-on-accent);--tint:var(--L-tint);color-scheme:light}:root.mode-dark{--bg:var(--D-bg);--surface:var(--D-surface);--ink:var(--D-ink);--muted:var(--D-muted);--line:var(--D-line);--accent:var(--D-accent);--accent2:var(--D-accent2);--accent-ink:var(--D-accent-ink);--on-accent:var(--D-on-accent);--tint:var(--D-tint);color-scheme:dark}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font:400 1.0625rem/1.65 var(--font-main);transition:background-color .3s,color .3s;overflow-x:clip}body:before{content:"";height:env(safe-area-inset-top,0px);z-index:70;background:var(--bg);position:fixed;inset:0 0 auto}.no-anim *{transition:none!important}@media (prefers-reduced-motion:reduce){*{transition:none!important}}a{color:inherit;text-underline-offset:.2em;text-decoration-thickness:1px}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}p{margin:0}h1,h2,h3{text-wrap:balance;margin:0}.wrap{max-width:1120px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px));margin-inline:auto}.mono{font-family:var(--font-mono);letter-spacing:.04em;font-size:.75rem}.ph{font-family:var(--font-mono);color:var(--muted);border:1px dashed var(--line);white-space:nowrap;border-radius:4px;padding:1px 6px;font-size:.75em;font-weight:400}.nav{top:env(safe-area-inset-top,0px);z-index:50;height:var(--nav-h);color:var(--hero-ink);transition:background-color .25s,color .25s,box-shadow .25s;position:sticky}.nav.menu-open{color:var(--ink);background:var(--bg)!important}.nav.glass{background:var(--hero-bg);background:color-mix(in srgb,var(--hero-bg) 74%,transparent);backdrop-filter:blur(14px);box-shadow:0 1px 0 var(--hero-line)}.nav.solid{background:var(--bg);background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(14px);color:var(--ink);box-shadow:0 1px 0 var(--line)}.nav-in{justify-content:space-between;align-items:center;gap:12px;height:100%;display:flex}.brand{letter-spacing:-.01em;white-space:nowrap;align-items:center;gap:10px;min-height:44px;font-size:1rem;font-weight:700;text-decoration:none;display:inline-flex}.brand svg{flex:0 0 28px;width:28px;height:28px}.menu{align-items:center;display:flex}.menu a{border-radius:999px;align-items:center;gap:6px;min-height:44px;padding:0 11px;font-size:.875rem;font-weight:500;text-decoration:none;display:inline-flex;position:relative}.menu a:hover{background:var(--hero-line)}.menu .lk{flex:0 0 11px;width:11px;height:11px;display:none}.menu a.locked .lk{display:inline-block}.menu a.locked{color:var(--hero-muted)}.nav.solid .menu a{color:var(--muted)}.nav.solid .menu a:hover{background:var(--tint);color:var(--ink)}.nav.solid .menu a.on{color:var(--ink);background:var(--tint)}.menu a.open-sec:after{content:"";background:var(--dot);border-radius:50%;order:-1;width:6px;height:6px}.nav-act{align-items:center;gap:6px;display:flex}.icon-btn{width:44px;height:44px;color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:50%;place-items:center;display:inline-grid}.nav.solid .icon-btn{border-color:var(--line)}.icon-btn svg{width:20px;height:20px}.icon-btn .moon,[data-state=dark] .sun{display:none}[data-state=dark] .moon{display:block}.burger{display:none}.burger span{background:currentColor;border-radius:2px;width:18px;height:1.5px;transition:transform .2s,opacity .2s;display:block}.burger span+span{margin-top:4px}.burger[aria-expanded=true] span:first-child{transform:translateY(5.5px)rotate(45deg)}.burger[aria-expanded=true] span:nth-child(2){opacity:0}.burger[aria-expanded=true] span:nth-child(3){transform:translateY(-5.5px)rotate(-45deg)}@media (width<=1000px){.burger{align-content:center;justify-items:center;display:inline-grid}.menu{top:var(--nav-h);padding:8px max(16px,env(safe-area-inset-right,0px)) 18px max(16px,env(safe-area-inset-left,0px));background:var(--bg);color:var(--ink);border-bottom:1px solid var(--line);max-height:calc(100vh - var(--nav-h));opacity:0;visibility:hidden;flex-direction:column;align-items:stretch;transition:opacity .2s,transform .2s,visibility .2s;position:absolute;left:0;right:0;overflow-y:auto;transform:translateY(-6px);box-shadow:0 18px 30px #0000002e}.menu.open{opacity:1;visibility:visible;transform:none}.menu a,.nav.solid .menu a,.menu a.locked{color:var(--ink);border-radius:10px;min-height:52px;padding:0 12px;font-size:1.0625rem}.menu a.locked{color:var(--muted)}.menu a:hover{background:var(--tint)}}.hero{margin-top:calc(-1 * var(--nav-h));background:var(--hero-bg);height:clamp(600px,92vh,920px);color:var(--hero-ink);isolation:isolate;position:relative;overflow:hidden}#heroCv{touch-action:pan-y;cursor:crosshair;width:100%;height:100%;display:block;position:absolute;inset:0}.hero:after{content:"";z-index:1;pointer-events:none;background:linear-gradient(90deg,var(--hero-bg) 0%,transparent 58%);opacity:.55;position:absolute;inset:0}@media (width<=760px){.hero:after{background:linear-gradient(180deg,var(--hero-bg) 8%,transparent 62%);opacity:.6}}.hero-ui{z-index:2;height:100%;padding-top:var(--nav-h);pointer-events:none;flex-direction:column;justify-content:center;padding-bottom:130px;display:flex;position:relative}.hero-ui>.wrap{will-change:transform,opacity;width:100%}.hero-ui a,.hero-ui button{pointer-events:auto}@media (width<=760px){.hero-ui{padding-top:calc(var(--nav-h) + 24px);justify-content:flex-start}}.hero .where{color:var(--hero-muted)}.hero h1{letter-spacing:-.035em;max-width:11ch;margin:.3em 0 .32em;font-size:clamp(2.5rem,1.3rem + 4.8vw,5.25rem);font-weight:800;line-height:1}.hero .lead{max-width:31rem;color:var(--hero-muted);font-size:clamp(1rem,.95rem + .35vw,1.1875rem);line-height:1.6}.cta{flex-wrap:wrap;gap:12px;margin-top:26px;display:flex}.btn{border:1px solid var(--ink);min-height:44px;color:var(--ink);font:600 .875rem/1 var(--font-main);cursor:pointer;background:0 0;border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:0 18px;text-decoration:none;transition:background-color .2s;display:inline-flex}.btn:hover{background:var(--tint)}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn-primary:hover{background:var(--accent-ink);border-color:var(--accent-ink)}.on-dark .btn,.hero .btn{border-color:var(--hero-ink);color:var(--hero-ink)}.on-dark .btn:hover,.hero .btn:hover{background:var(--hero-line)}.hero .btn-primary{background:var(--hero-ink);color:var(--hero-bg)}.hero .btn-primary:hover{background:var(--hero-muted);color:var(--hero-bg)}.hud{z-index:3;left:max(16px,env(safe-area-inset-left,0px));right:max(16px,env(safe-area-inset-right,0px));pointer-events:none;max-width:1120px;margin-inline:auto;display:flex;position:absolute;bottom:22px}@media (width>=1152px){.hud{padding-inline:16px;left:0;right:0}}.hud-card{border-radius:var(--radius);border:1px solid var(--hero-line);background:var(--hero-bg);background:color-mix(in srgb,var(--hero-bg) 64%,transparent);backdrop-filter:blur(10px);pointer-events:auto;flex-wrap:wrap;align-items:center;gap:8px 16px;max-width:100%;padding:10px 12px 10px 14px;display:flex}.hud .hint{color:var(--hero-muted);min-width:0;max-width:27rem;font-size:.8125rem;line-height:1.45}.hud .read{color:var(--hero-ink);font-variant-numeric:tabular-nums;white-space:nowrap}.hud .read b{font-weight:500}.hud .btns{gap:8px;display:flex}.hud .btn{min-height:40px;padding:0 14px;font-size:.8125rem}.built{border-bottom:1px solid var(--line);background:var(--surface)}.built-in{align-items:center;gap:20px;padding-block:14px;display:flex}.built-lbl{color:var(--muted);flex:none}.built ul{scroll-snap-type:x proximity;scrollbar-width:none;gap:8px;min-width:0;margin:0;padding:2px;list-style:none;display:flex;overflow-x:auto}.built ul::-webkit-scrollbar{display:none}.built li{scroll-snap-align:start;flex:none}.tile{border:1px solid var(--line);color:var(--ink);background:var(--bg);border-radius:12px;align-items:center;gap:10px;padding:6px 14px 6px 6px;text-decoration:none;transition:border-color .2s;display:flex}.tile:hover{border-color:var(--accent)}.ico{background:var(--tint);width:36px;height:36px;color:var(--accent-ink);border-radius:9px;flex:0 0 36px;place-items:center;display:grid}.ico svg{width:20px;height:20px}.tile b{font-size:.8125rem;font-weight:700;line-height:1.2;display:block}.tile small{color:var(--muted);font-size:.6875rem;line-height:1.3;display:block}@media (width<=640px){.built-lbl{display:none}}.sec{scroll-margin-top:calc(var(--nav-h) + env(safe-area-inset-top,0px))}.gate{background:var(--hero-bg);height:172px;color:var(--hero-ink);transition:height .65s cubic-bezier(.2,.7,.2,1);position:relative;overflow:hidden}.locked .gate{height:78px}.gate canvas{width:100%;height:100%;transition:filter .9s;display:block;position:absolute;inset:0}.locked .gate canvas{filter:grayscale()brightness(.72)}.gate-in{z-index:1;flex-direction:column;justify-content:center;gap:6px;height:100%;display:flex;position:relative}.gate-t{align-items:baseline;gap:14px;min-width:0;display:flex}.gate .num{font-family:var(--font-mono);color:var(--hero-muted);font-size:.75rem}.gate h2{letter-spacing:-.03em;outline:none;font-size:clamp(1.875rem,1.3rem + 2.2vw,2.875rem);font-weight:800;line-height:1.05;transition:font-size .6s,color .6s}.locked .gate h2{letter-spacing:-.01em;color:var(--hero-muted);font-size:1.0625rem}.gate-state{color:var(--hero-muted);flex-wrap:wrap;align-items:center;gap:6px 12px;font-size:.8125rem;display:flex}.gate-state .sw{background:var(--c);border-radius:50%;flex:0 0 9px;width:9px;height:9px}.locked .gate-state .sw{border:1.5px solid var(--hero-muted);background:0 0}.gate .skip{min-height:32px;color:var(--hero-ink);font:600 .8125rem var(--font-main);text-underline-offset:.2em;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.gate .skip[hidden]{display:none}.gate-state .st{min-width:0}@media (width<=560px){.gate{height:140px}.locked .gate{height:84px}.gate .skip,.gate .tz{display:none}.gate-state{flex-wrap:nowrap}}.sec-body{grid-template-rows:1fr;transition:grid-template-rows .7s cubic-bezier(.2,.7,.2,1);display:grid}.locked .sec-body{grid-template-rows:0fr}.sec-body>.inner{min-height:0;overflow:hidden}.inner>.wrap{padding-block:64px 92px}.intro{max-width:40rem;color:var(--muted);margin-bottom:32px}.about{align-items:start;gap:36px;display:grid}@media (width>=820px){.about{grid-template-columns:16rem minmax(0,1fr);gap:56px}}.photo{width:100%;max-width:16rem;margin:0}.photo img{aspect-ratio:1;object-fit:cover;border-radius:var(--radius);width:100%;height:auto;display:block}.photo figcaption{color:var(--muted);margin-top:10px;font-size:.8125rem}.about .text{gap:1em;max-width:38rem;line-height:1.75;display:grid}.facts{border-top:1px solid var(--line);grid-template-columns:auto minmax(0,1fr);gap:6px 20px;margin:10px 0 0;padding:16px 0 0;font-size:.9375rem;display:grid}.facts dt{color:var(--muted)}.facts dd{margin:0}.feature{grid-template-columns:repeat(auto-fit,minmax(min(100%,24rem),1fr));gap:18px;display:grid}.card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);min-width:0;scroll-margin-top:calc(var(--nav-h) + 20px);flex-direction:column;gap:12px;padding:22px;transition:border-color .2s;display:flex}.card:hover{border-color:var(--accent)}.card-top{align-items:center;gap:12px;display:flex}.card-top .ico{border-radius:11px;flex-basis:44px;width:44px;height:44px}.card-top .ico svg{width:24px;height:24px}.card-top div{min-width:0}.card h3{letter-spacing:-.015em;font-size:1.25rem;font-weight:700;line-height:1.2}.status{color:var(--muted);font-size:.8125rem}.card>p{font-size:.9375rem;line-height:1.65}.stack{border-top:1px solid var(--line);font-family:var(--font-mono);color:var(--muted);flex-wrap:wrap;gap:6px 14px;margin-top:auto;padding-top:6px;font-size:.71875rem;display:flex}.links{flex-wrap:wrap;gap:8px 16px;font-size:.875rem;font-weight:600;display:flex}.links a{color:var(--accent-ink)}.more{border-top:1px solid var(--line);margin:26px 0 0;padding:0;list-style:none}.more li{border-bottom:1px solid var(--line);scroll-margin-top:calc(var(--nav-h) + 20px);grid-template-columns:44px minmax(0,1fr) minmax(0,15rem) auto;align-items:center;gap:6px 18px;padding-block:16px;display:grid}.more h3{font-size:1rem;font-weight:700}.more p{color:var(--muted);font-size:.875rem;line-height:1.55}.more .tech{font-family:var(--font-mono);color:var(--muted);font-size:.6875rem}.more .links{font-size:.8125rem}@media (width<=820px){.more li{grid-template-columns:44px minmax(0,1fr)}.more .tech,.more .links{grid-column:2}}.media{grid-template-columns:repeat(auto-fit,minmax(min(100%,22rem),1fr));gap:30px 20px;display:grid}.media figure{flex-direction:column;gap:12px;min-width:0;margin:0;display:flex}.frame{aspect-ratio:16/10;border-radius:var(--radius);background:var(--tint);place-items:center;max-width:100%;display:grid;position:relative;overflow:hidden}.frame .ph{background:var(--surface)}.media figcaption{gap:4px;display:grid}.media .meta{color:var(--accent-ink)}.media h3{font-size:1.0625rem;font-weight:700}.media figcaption p:last-child{color:var(--muted);font-size:.9375rem;line-height:1.6}.frame img{object-fit:cover;width:100%;height:100%;display:block}.media figure.noimg{border-top:2px solid var(--line);padding-top:16px}.ico img{object-fit:contain;border-radius:4px;width:24px;height:24px}.notes h3 a{text-decoration:none}.notes h3 a:hover{text-decoration:underline;text-decoration-color:var(--accent)}.row{border-top:1px solid var(--line);grid-template-columns:10.5rem minmax(0,1fr);gap:4px 28px;padding-block:20px;display:grid}.row:last-of-type{border-bottom:1px solid var(--line)}.row .when{font-family:var(--font-mono);color:var(--muted);font-variant-numeric:tabular-nums;padding-top:3px;font-size:.8125rem}.row h3{font-size:1.0625rem;font-weight:700}.row .org{color:var(--accent-ink);margin-top:2px;font-size:.875rem;font-weight:600}.row p{color:var(--muted);max-width:44rem;margin-top:6px;font-size:.9375rem;line-height:1.6}@media (width<=640px){.row{grid-template-columns:minmax(0,1fr)}}.skills{grid-template-columns:9rem minmax(0,1fr);gap:10px 24px;max-width:52rem;margin:34px 0 0;font-size:.9375rem;display:grid}.skills dt{font-weight:700}.skills dd{color:var(--muted);margin:0}@media (width<=640px){.skills{grid-template-columns:minmax(0,1fr);gap:2px}.skills dd{margin-bottom:10px}}.cv-actions{flex-wrap:wrap;align-items:center;gap:12px 16px;margin-top:30px;display:flex}.note{color:var(--muted);font-size:.875rem}.notes{margin:0;padding:0;list-style:none}.notes li{border-top:1px solid var(--line);grid-template-columns:9rem minmax(0,1fr) auto;align-items:baseline;gap:4px 24px;padding-block:18px;display:grid}.notes li:last-child{border-bottom:1px solid var(--line)}.notes .when,.notes .tag{color:var(--muted)}.notes h3{font-size:1.0625rem;font-weight:700}@media (width<=640px){.notes li{grid-template-columns:minmax(0,1fr)}}.now{gap:12px;max-width:44rem;margin:0;padding:0 0 0 1.2em;display:grid}.now li{padding-left:4px;line-height:1.65}.now li::marker{color:var(--accent)}.stamp{color:var(--muted);margin-bottom:22px}.contact h3{letter-spacing:-.03em;margin-bottom:10px;font-size:clamp(1.75rem,1.2rem + 2vw,2.5rem);font-weight:800}.mail{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex-wrap:wrap;align-items:center;gap:12px 16px;max-width:40rem;margin-top:22px;padding:16px 18px;display:flex}.mail code{font-family:var(--font-main);overflow-wrap:anywhere;user-select:all;flex:14rem;min-width:0;font-size:clamp(1rem,.85rem + .9vw,1.375rem);font-weight:700}.elsewhere{flex-wrap:wrap;gap:4px 22px;margin-top:12px;font-weight:600;display:flex}.elsewhere a{min-height:44px;color:var(--accent-ink);align-items:center;display:inline-flex}.foot{border-top:1px solid var(--line);color:var(--muted);font-size:.8125rem}.foot-in{flex-wrap:wrap;justify-content:space-between;gap:10px 24px;padding-block:26px 34px;display:flex}.foot .ct{flex-wrap:wrap;align-items:center;gap:4px 18px;display:flex}.foot a{min-height:44px;color:var(--ink);align-items:center;font-weight:600;display:inline-flex}.foot .sel{user-select:all;color:var(--ink);font-weight:600}.orbit-pill{z-index:60;right:max(16px,env(safe-area-inset-right,0px));bottom:calc(16px + env(safe-area-inset-bottom,0px));border:1px solid var(--hero-line);background:var(--hero-bg);min-height:46px;color:var(--hero-ink);font:600 .8125rem var(--font-main);cursor:pointer;border-radius:999px;align-items:center;gap:10px;padding:0 18px;display:inline-flex;position:fixed;box-shadow:0 10px 30px #00000040}.orbit-pill b{font-family:var(--font-mono);font-weight:500}.orbit-pill .dot{background:#ffb25c;border-radius:50%;width:8px;height:8px}
