:root{--font-sans:var(--font-geist);--font-mono:var(--font-geist-mono);--fs-xs:11px;--fs-sm:13px;--fs-base:15px;--fs-md:17px;--fs-lg:22px;--fs-xl:32px;--fs-2xl:48px;--fs-3xl:72px;--fs-4xl:104px;--fs-5xl:160px;--fw-light:300;--fw-regular:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;--lh-tight:1.05;--lh-snug:1.18;--lh-body:1.5;--lh-loose:1.7;--tracking-hero:-.035em;--tracking-tight:-.02em;--tracking-normal:-.005em;--tracking-wide:.02em;--tracking-caps:.08em;--zinc-0:#fff;--zinc-50:#fafafa;--zinc-100:#f4f4f5;--zinc-200:#e4e4e7;--zinc-300:#d4d4d8;--zinc-400:#a1a1aa;--zinc-500:#71717a;--zinc-600:#52525b;--zinc-700:#3f3f46;--zinc-800:#27272a;--zinc-900:#18181b;--zinc-950:#09090b;--accent:#1f9dff;--accent-hover:#47b5ff;--accent-press:#0e7ee5;--accent-text:#006fcf;--accent-soft:#1f9dff24;--accent-line:#1f9dff4d;--head-clay:var(--zinc-200);--head-fill:var(--accent);--bg:var(--zinc-0);--bg-elevated:var(--zinc-50);--bg-sunken:var(--zinc-100);--bg-overlay:#ffffffb8;--fg:var(--zinc-950);--fg-muted:var(--zinc-600);--fg-subtle:var(--zinc-500);--fg-faint:#62626b;--border:var(--zinc-200);--border-strong:var(--zinc-300);--border-soft:var(--zinc-100);--selection-bg:var(--accent);--selection-fg:#fff;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--space-9:96px;--space-10:128px;--space-11:192px;--r-none:0;--r-xs:2px;--r-sm:4px;--r-md:6px;--r-lg:10px;--r-xl:16px;--r-full:999px;--shadow-xs:0 1px 2px #09090b0a;--shadow-sm:0 1px 2px #09090b0f, 0 1px 3px #09090b0a;--shadow-md:0 4px 8px -2px #09090b0f, 0 2px 4px -2px #09090b0a;--shadow-lg:0 12px 24px -6px #09090b14, 0 4px 8px -4px #09090b0a;--shadow-inset:inset 0 1px 0 0 #ffffff80;--ease-out-expo:cubic-bezier(.16, 1, .3, 1);--ease-out-quart:cubic-bezier(.25, 1, .5, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--ease-spring:cubic-bezier(.34, 1.56, .64, 1);--dur-instant:80ms;--dur-fast:.16s;--dur-base:.24s;--dur-slow:.42s;--dur-glide:.72s;--container:1280px;--container-read:680px;--container-wide:1440px;--page-gutter:32px}:root[data-theme=dark],:root.dark{--bg:var(--zinc-950);--bg-elevated:var(--zinc-900);--bg-sunken:#000;--bg-overlay:#09090bb8;--fg:var(--zinc-0);--fg-muted:var(--zinc-400);--fg-subtle:#91919b;--fg-faint:#85858f;--border:var(--zinc-800);--border-strong:var(--zinc-700);--border-soft:var(--zinc-900);--accent-soft:#1f9dff2e;--accent-line:#1f9dff66;--accent-text:var(--accent-hover);--head-clay:var(--zinc-500);--head-fill:#d4d8dc;--shadow-xs:0 1px 2px #00000059;--shadow-sm:0 1px 2px #0006, 0 1px 3px #0000004d;--shadow-md:0 4px 8px -2px #00000073, 0 2px 4px -2px #00000059;--shadow-lg:0 12px 24px -6px #0000008c, 0 4px 8px -4px #00000059;--shadow-inset:inset 0 1px 0 0 #ffffff0a}*,:before,:after{box-sizing:border-box}html,body{background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:var(--fs-base);line-height:var(--lh-body);font-feature-settings:"ss01" on, "cv11" on;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-synthesis:none;margin:0;padding:0}::selection{background:var(--selection-bg);color:var(--selection-fg)}h1,.h1{font-size:var(--fs-4xl);font-weight:var(--fw-medium);line-height:var(--lh-tight);letter-spacing:var(--tracking-hero);margin:0}h2,.h2{font-size:var(--fs-3xl);font-weight:var(--fw-medium);line-height:var(--lh-tight);letter-spacing:var(--tracking-tight);margin:0}h3,.h3{font-size:var(--fs-2xl);font-weight:var(--fw-medium);line-height:var(--lh-snug);letter-spacing:var(--tracking-tight);margin:0}h4,.h4{font-size:var(--fs-xl);font-weight:var(--fw-medium);line-height:var(--lh-snug);letter-spacing:var(--tracking-tight);margin:0}h5,.h5{font-size:var(--fs-lg);font-weight:var(--fw-medium);line-height:var(--lh-snug);letter-spacing:var(--tracking-normal);margin:0}p,.body{font-size:var(--fs-base);line-height:var(--lh-body);color:var(--fg);margin:0 0 var(--space-4) 0;text-wrap:pretty}.lead{font-size:var(--fs-md);line-height:var(--lh-loose);color:var(--fg-muted);letter-spacing:var(--tracking-normal)}.meta,.caption{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:var(--tracking-wide);color:var(--fg-subtle);text-transform:uppercase}.label{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:var(--tracking-caps);color:var(--fg-muted);text-transform:uppercase}small{font-size:var(--fs-sm);color:var(--fg-muted)}a{color:inherit;transition:color var(--dur-fast) var(--ease-out-quart);text-decoration:none;position:relative}a.link{color:var(--fg);border-bottom:1px solid var(--border-strong);transition:border-color var(--dur-base) var(--ease-out-expo), color var(--dur-base) var(--ease-out-expo);padding-bottom:1px}a.link:hover{color:var(--accent-text);border-bottom-color:var(--accent-text)}code,.code{font-family:var(--font-mono);background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--fg);padding:1px 6px;font-size:.92em}pre{font-family:var(--font-mono);font-size:var(--fs-sm);line-height:var(--lh-body);background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--space-4);margin:0;overflow-x:auto}hr{border:0;border-top:1px solid var(--border);margin:var(--space-6) 0}.mono{font-family:var(--font-mono)}.sans{font-family:var(--font-sans)}.caps{text-transform:uppercase;letter-spacing:var(--tracking-caps)}.muted{color:var(--fg-muted)}.subtle{color:var(--fg-subtle)}.faint{color:var(--fg-faint)}.accent{color:var(--accent-text)}.u-transition{transition:all var(--dur-base) var(--ease-out-expo)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}:root{color-scheme:light dark}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}html,body{overflow-x:hidden}svg{max-width:100%}.app{background:var(--bg);min-height:100vh;color:var(--fg);transition:background var(--dur-base) var(--ease-out-quart), color var(--dur-base) var(--ease-out-quart);flex-direction:column;display:flex}.nav{z-index:50;padding:18px var(--page-gutter);width:100%;max-width:1440px;transition:background var(--dur-base) var(--ease-out-quart), border-color var(--dur-base) var(--ease-out-quart), backdrop-filter var(--dur-base);border-bottom:1px solid #0000;justify-content:space-between;align-items:center;margin:0 auto;display:flex;position:fixed;top:0;left:0;right:0}.nav[data-scrolled=true]{background:var(--bg-overlay);-webkit-backdrop-filter:blur(14px)saturate(1.2);border-bottom-color:var(--border)}.mark{user-select:none;-webkit-user-drag:none;touch-action:none;font-family:var(--font-sans);letter-spacing:-.02em;color:var(--fg);cursor:pointer;align-items:baseline;gap:0;padding:4px 2px;font-size:16px;font-weight:500;line-height:1;display:inline-flex;position:relative}.mark__word{display:inline-block}.mark__dot{background:var(--accent);cursor:grab;will-change:transform;touch-action:none;width:7px;height:7px;transition:box-shadow var(--dur-base) var(--ease-out-expo);border-radius:999px;margin-left:7px;display:inline-block;position:relative;transform:translate(0)}.mark__dot:hover{box-shadow:0 0 0 4px var(--accent-soft)}.mark__dot[data-dragging=true]{cursor:grabbing;box-shadow:0 0 0 6px var(--accent-soft)}.rogue-dot{background:var(--accent);width:10px;height:10px;box-shadow:0 0 0 4px var(--accent-soft);z-index:49;pointer-events:auto;cursor:grab;will-change:transform, left, top;touch-action:none;border-radius:999px;position:fixed}.rogue-dot:before{content:"";border-radius:999px;position:absolute;inset:-14px}.rogue-dot[data-dragging=true]{cursor:grabbing}.rogue-dot__trail{background:var(--accent);opacity:.35;z-index:48;pointer-events:none;border-radius:999px;width:6px;height:6px;position:fixed}.nav__links{font-family:var(--font-sans);color:var(--fg-muted);flex-shrink:0;gap:32px;font-size:13px;display:flex;position:absolute;left:50%;transform:translate(-50%)}.nav__links a{cursor:pointer;white-space:nowrap;transition:color var(--dur-fast) var(--ease-out-quart);align-items:center;gap:6px;display:inline-flex}.nav__links a:hover{color:var(--fg)}.nav__links a .dot-cursor{background:var(--accent);opacity:0;width:5px;height:5px;transition:opacity var(--dur-fast) var(--ease-out-expo), transform var(--dur-base) var(--ease-spring);border-radius:999px;display:inline-block;transform:scale(.5)}.nav__links a:hover .dot-cursor{opacity:1;transform:scale(1)}.page{width:100%;max-width:1440px;padding:0 var(--page-gutter);flex:1;margin:0 auto;padding-top:72px}.hero{grid-template-columns:minmax(0,1fr);align-items:center;min-height:clamp(540px,100vh - 72px,760px);padding:32px 0;display:grid}.hero-head{display:none}@media (width>=900px){.hero{grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:48px}.hero-head{aspect-ratio:1;touch-action:none;cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='28' viewBox='0 0 24 24' fill='none' stroke='%231F9DFF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6c0 2-2 2-2 4v10a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2V10c0-2-2-2-2-4V2h12z'/%3E%3Cpath d='M6 6h12'/%3E%3Cpath d='M12 12h.01'/%3E%3C/svg%3E") 14 5,grab;opacity:0;width:100%;max-height:560px;transition:opacity .6s var(--ease-out-expo);display:block}.hero-head canvas{width:100%;height:100%;display:block}.hero-head[data-state=ready]{opacity:1}}.hero__content{flex-direction:column;gap:28px;display:flex}.hero__name{font-family:var(--font-sans);letter-spacing:-.04em;margin:0;font-size:clamp(40px,8vw,120px);font-weight:500;line-height:.95}@media (width>=900px){.hero__name{font-size:clamp(40px,7vw,116px)}}.hero__name-letter{font-variation-settings:"wght" 500;transition:font-variation-settings var(--dur-base) ease;display:inline-block}.hero__name-letter:hover{font-variation-settings:"wght" 900}.hero__title{font-family:var(--font-sans);letter-spacing:-.025em;color:var(--fg-muted);flex-wrap:wrap;align-items:baseline;gap:.25em;margin:0;font-size:clamp(32px,4.2vw,56px);font-weight:400;line-height:1;display:inline-flex}.hero__oneliner{font-family:var(--font-sans);color:var(--fg-muted);letter-spacing:-.005em;text-wrap:pretty;max-width:620px;margin:24px 0 0;font-size:clamp(17px,1.7vw,22px);font-weight:400;line-height:1.55}.reveal{display:block;position:relative;overflow:hidden}.reveal>.reveal__inner{opacity:0;transition:transform .82s var(--ease-out-expo), opacity .82s var(--ease-out-expo);transition-delay:inherit;will-change:transform, opacity;display:block;transform:translateY(112%)}.reveal.is-in>.reveal__inner{opacity:1;transform:translateY(0)}.reveal--inline{vertical-align:baseline;display:inline-block}.projects{border-top:1px solid var(--border);padding:96px 0}.projects__head{justify-content:space-between;align-items:baseline;margin-bottom:56px;display:flex}.projects__label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-subtle);font-size:11px}.projects__archive{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-subtle);transition:color var(--dur-base) var(--ease-out-expo);align-items:center;gap:6px;font-size:11px;text-decoration:none;display:inline-flex}.projects__archive:hover{color:var(--accent-text)}.projects__archive svg{width:12px;height:12px;transition:transform var(--dur-base) var(--ease-out-expo)}.projects__archive:hover svg{transform:translate(2px,-2px)}.projects.projects--archive{border-top:0;padding-top:128px}.projects__head--archive{margin-bottom:16px;display:block}.projects__grid{background:var(--border);border:1px solid var(--border);grid-template-columns:repeat(3,1fr);gap:1px;display:grid}.project{background:var(--bg);cursor:pointer;min-height:340px;transition:background var(--dur-base) var(--ease-out-expo);isolation:isolate;color:inherit;flex-direction:column;justify-content:space-between;padding:40px 32px 36px;text-decoration:none;display:flex;position:relative;overflow:hidden}.project:hover{background:var(--bg-elevated)}.project--empty{cursor:default;pointer-events:none}.project--empty:before{display:none}.project--empty:hover{background:var(--bg)}.project__top{justify-content:space-between;align-items:baseline;display:flex}.project__num{font-family:var(--font-mono);letter-spacing:.12em;color:var(--fg-faint);transition:color var(--dur-base) var(--ease-out-expo);font-size:11px}.project:hover .project__num{color:var(--accent-text)}.project__year{font-family:var(--font-mono);letter-spacing:.1em;color:var(--fg-subtle);text-transform:uppercase;font-size:10.5px}.project__body{flex-direction:column;gap:10px;margin-top:auto;display:flex}.project__title{font-family:var(--font-sans);letter-spacing:-.025em;color:var(--fg);transition:color var(--dur-base) var(--ease-out-expo), transform var(--dur-slow) var(--ease-out-expo);margin:0;font-size:clamp(28px,3vw,38px);font-weight:500;line-height:1;position:relative}.project:hover .project__title{color:var(--accent-text)}.project__kind{font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-subtle);font-variant-numeric:tabular-nums;font-size:11px}.project__stack{flex-wrap:wrap;gap:6px;margin-top:4px;display:flex}.project__stack span{font-family:var(--font-mono);letter-spacing:.06em;color:var(--fg-muted);border:1px solid var(--border);background:var(--bg);transition:border-color var(--dur-base), color var(--dur-base);border-radius:2px;padding:3px 8px;font-size:10.5px}.project:hover .project__stack span{border-color:var(--border-strong)}.project__stack-slot,.project__desc-slot{transition:grid-template-rows var(--dur-slow) var(--ease-out-expo);display:grid}.project__stack-slot>*,.project__desc-slot>*{min-height:0;overflow:hidden}.project__stack-slot{grid-template-rows:1fr}.project:hover .project__stack-slot,.project__desc-slot{grid-template-rows:0fr}.project:hover .project__desc-slot{grid-template-rows:1fr}.project__stack-wrap{transition:opacity var(--dur-base) var(--ease-out-expo);flex-direction:column;gap:10px;display:flex}.project:hover .project__stack-wrap{opacity:0}.project__desc{font-family:var(--font-sans);color:var(--fg-muted);text-wrap:pretty;opacity:0;transition:opacity var(--dur-base) var(--ease-out-expo), transform var(--dur-base) var(--ease-out-expo);pointer-events:none;margin:0;font-size:14px;line-height:1.55;transform:translateY(10px)}.project:hover .project__desc{opacity:1;transition-delay:60ms;transform:translateY(0)}.project__arrow{width:14px;height:14px;color:var(--fg-faint);transition:transform var(--dur-base) var(--ease-out-expo), color var(--dur-base) var(--ease-out-expo);position:absolute;top:24px;right:24px}.project:hover .project__arrow{color:var(--accent-text);transform:translate(3px,-3px)}.project__arrow svg{width:100%;height:100%}.project:before{content:"";background:var(--accent);transform-origin:bottom;width:2px;transition:transform var(--dur-slow) var(--ease-out-expo);position:absolute;top:0;bottom:0;left:0;transform:scaleY(0)}.project:hover:before{transform-origin:top;transform:scaleY(1)}.stack{border-top:1px solid var(--border);flex-direction:column;gap:24px;padding:96px 0;display:flex}.stack__head{justify-content:space-between;align-items:baseline;gap:24px;display:flex}.stack__label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-subtle);font-size:11px}.stack__card{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--bg-elevated);font-family:var(--font-sans);font-size:13px;overflow:hidden}.stack-row{border-bottom:1px solid var(--border);grid-template-columns:140px 1fr;align-items:baseline;gap:24px;padding:16px 24px;display:grid}.stack-row:last-child{border-bottom:0}.stack-row__k{font-family:var(--font-sans);letter-spacing:-.005em;color:var(--fg-subtle);font-size:13px}.stack-row__v{font-family:var(--font-sans);color:var(--fg);letter-spacing:-.005em;font-size:15px;line-height:1.5}.stack-row__v .sep{color:var(--fg-faint);font-family:var(--font-mono);margin:0 10px;font-size:.82em;position:relative;top:-1px}.stack-row__v em{color:var(--fg-subtle);font-style:normal;font-family:var(--font-mono);letter-spacing:.04em;margin-left:5px;font-size:.78em}.xp{border-top:1px solid var(--border);grid-template-columns:1fr 1fr;gap:64px;padding:96px 0;display:grid}.xp__col{flex-direction:column;gap:32px;display:flex}.xp__head{justify-content:space-between;align-items:baseline;gap:24px;display:flex}.xp__label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-subtle);font-size:11px}.xp__list{flex-direction:column;padding-left:24px;display:flex;position:relative}.xp__list:before{content:"";background:var(--border);width:1px;position:absolute;top:16px;bottom:16px;left:0}.xp-item{border-bottom:1px solid var(--border);grid-template-columns:1fr auto;align-items:baseline;gap:32px;padding:28px 0;display:grid;position:relative}.xp-item:last-child{border-bottom:0}.xp-item:before{content:"";background:var(--bg);border:1px solid var(--border-strong);width:8px;height:8px;transition:background var(--dur-base), border-color var(--dur-base), transform var(--dur-base);border-radius:999px;position:absolute;top:36px;left:-28px}.xp-item:hover:before{background:var(--accent);border-color:var(--accent-text);transform:scale(1.2)}.xp-item__main{flex-direction:column;gap:6px;display:flex}.xp-item__role{font-family:var(--font-sans);letter-spacing:-.02em;color:var(--fg);font-size:clamp(20px,1.9vw,28px);font-weight:500;line-height:1.15}.xp-item__sub{font-family:var(--font-sans);color:var(--fg-muted);letter-spacing:-.005em;font-size:15px}.xp-item__sub em{font-style:normal;font-family:var(--font-sans);color:var(--fg-subtle);letter-spacing:.02em;border:1px solid var(--border);border-radius:2px;margin-left:8px;padding:2px 6px;font-size:.82em}.xp-item__dates{font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-subtle);font-variant-numeric:tabular-nums;white-space:nowrap;padding-top:8px;font-size:12px}.now{border-top:1px solid var(--border);padding:96px 0}.now__card{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--bg-elevated);position:relative;overflow:hidden}.now__bar{border-bottom:1px solid var(--border);background:var(--bg-sunken);justify-content:space-between;align-items:center;padding:14px 20px;display:flex}.now__bar-left{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--fg-muted);align-items:center;gap:10px;font-size:11px;display:inline-flex}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:0;transform:scale(1.5)}}.now__bar .pulse{background:var(--accent);border-radius:999px;width:7px;height:7px;display:inline-block;position:relative}.now__bar .pulse:before{content:"";box-shadow:0 0 0 3px var(--accent-soft);animation:pulse 2.4s var(--ease-out-expo) infinite;border-radius:999px;position:absolute;inset:-3px}.now__bar-right{font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-faint);font-variant-numeric:tabular-nums;align-items:baseline;gap:14px;font-size:10.5px;display:inline-flex}.now__body{flex-direction:column;gap:20px;padding:36px 40px;display:flex}.now-line{letter-spacing:-.005em;grid-template-columns:auto 1fr;align-items:baseline;gap:20px;font-size:18px;line-height:1.5;display:grid}.now-line__prompt{font-family:var(--font-sans);color:var(--accent-text);letter-spacing:0;text-transform:lowercase;min-width:120px;padding-top:2px;font-size:15px}.now-line__text{font-family:var(--font-sans);color:var(--fg)}.now-line__text .mono-inline{font-family:var(--font-mono);background:var(--bg);border:1px solid var(--border);color:var(--fg);white-space:nowrap;border-radius:3px;padding:1px 7px;font-size:.88em}.now-line__text em.hl{color:var(--accent-text);font-style:normal;font-weight:500}.writing{border-top:1px solid var(--border);padding:96px 0}.writing__head{justify-content:space-between;align-items:baseline;gap:24px;margin-bottom:48px;display:flex}.writing__label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-subtle);font-size:11px}.writing__list{border-top:1px solid var(--border);flex-direction:column;display:flex}.post{border-bottom:1px solid var(--border);color:inherit;transition:background var(--dur-fast), padding var(--dur-base) var(--ease-out-expo);cursor:pointer;grid-template-columns:130px 1fr auto;align-items:baseline;gap:32px;padding:28px 8px;text-decoration:none;display:grid;position:relative}.post:before{content:"";background:var(--accent);width:0;transition:width var(--dur-base) var(--ease-out-expo);position:absolute;top:0;bottom:0;left:0}.post:hover{padding-left:20px;padding-right:20px}.post:hover:before{width:3px}.post__date{font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-subtle);font-variant-numeric:tabular-nums;padding-top:6px;font-size:11.5px}.post__main{flex-direction:column;gap:8px;min-width:0;display:flex}.post__title{font-family:var(--font-sans);letter-spacing:-.02em;color:var(--fg);transition:color var(--dur-fast);font-size:clamp(20px,2.2vw,26px);font-weight:500;line-height:1.15}.post:hover .post__title{color:var(--accent-text)}.post__dek{font-family:var(--font-serif,Georgia, serif);color:var(--fg-muted);letter-spacing:0;max-width:58ch;font-size:15px;font-style:italic;line-height:1.55}.post__tags{flex-wrap:wrap;justify-content:flex-end;justify-self:end;gap:6px;padding-top:6px;display:flex}.post__tag{font-family:var(--font-mono);letter-spacing:.06em;color:var(--fg-muted);border:1px solid var(--border);background:var(--bg);white-space:nowrap;transition:border-color var(--dur-base), color var(--dur-base);border-radius:2px;padding:3px 8px;font-size:10.5px}.post:hover .post__tag{border-color:var(--border-strong)}.post__tag--draft{color:var(--accent-text);border-color:var(--accent-soft)}.contact{border-top:1px solid var(--border);flex-direction:column;gap:48px;padding:96px 0 160px;display:flex}.contact__head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:24px;display:flex}.contact__label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-subtle);font-size:11px}.contact__email{font-family:var(--font-sans);letter-spacing:-.04em;color:var(--fg);cursor:pointer;transition:color var(--dur-base) var(--ease-out-expo);width:fit-content;max-width:100%;padding:4px 0;font-size:clamp(24px,6.5vw,108px);font-weight:500;line-height:1;text-decoration:none;display:inline-block;position:relative}.contact__email:after{content:"";transform-origin:0;height:2px;transition:transform var(--dur-slow) var(--ease-out-expo), background-color var(--dur-base) var(--ease-out-expo);background:currentColor;position:absolute;bottom:6px;left:0;right:0;transform:scaleX(0)}.contact__email:hover{color:var(--accent-text)}.contact__email:hover:after{background:var(--accent);transform:scaleX(1)}.contact__email .copy-flash{font-family:var(--font-mono);letter-spacing:.04em;color:var(--accent-text);opacity:0;pointer-events:none;white-space:nowrap;transition:opacity var(--dur-base) var(--ease-out-expo), transform var(--dur-base) var(--ease-out-expo);font-size:11px;position:absolute;top:50%;left:calc(100% + 20px);transform:translateY(-50%)}.contact__email .copy-flash[data-shown=true]{opacity:1;transform:translateY(-50%)translate(4px)}.contact__social{border-top:1px solid var(--border);flex-wrap:wrap;gap:48px;margin-top:8px;padding-top:16px;display:flex}.contact__social a{font-family:var(--font-sans);letter-spacing:-.005em;color:var(--fg-muted);cursor:pointer;transition:color var(--dur-base) var(--ease-out-expo);align-items:center;gap:10px;padding:14px 0;font-size:13.5px;display:inline-flex;position:relative}.contact__social a svg{width:16px;height:16px;transition:transform var(--dur-base) var(--ease-out-expo);flex:0 0 16px}.contact__social a:after{content:"↗";font-family:var(--font-mono);color:var(--fg-faint);transition:transform var(--dur-base) var(--ease-out-expo), color var(--dur-base) var(--ease-out-expo);margin-left:4px;display:inline-block}.contact__social a:hover{color:var(--accent-text)}.contact__social a:hover:after{color:var(--accent-text);transform:translate(3px,-3px)}.contact__social .contact__cv:after{content:"→"}.contact__social .contact__cv:hover:after{transform:translate(3px)}.footer{max-width:1440px;padding:48px var(--page-gutter);border-top:1px solid var(--border);width:100%;font-family:var(--font-sans);letter-spacing:-.005em;color:var(--fg-subtle);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:24px;margin:0 auto;font-size:13px;display:flex}.footer__group{flex-wrap:wrap;align-items:baseline;gap:12px 20px;display:flex}.footer__group--meta{color:var(--fg-faint)}.footer a{cursor:pointer;transition:color var(--dur-fast)}.footer a:hover{color:var(--accent-text)}.nav__controls{align-items:center;gap:10px;margin-left:32px;display:inline-flex}.toggle{background:var(--bg-elevated);border:1px solid var(--border);cursor:pointer;width:56px;height:26px;transition:border-color var(--dur-base);border-radius:999px;padding:0;position:relative;overflow:visible}.toggle:hover{border-color:var(--border-strong)}.toggle__track{color:var(--fg-faint);pointer-events:none;justify-content:space-between;align-items:center;padding:0 7px;display:flex;position:absolute;inset:0}.toggle__track svg{width:11px;height:11px}.toggle__handle{background:var(--accent);color:#fff;width:20px;height:20px;transition:left .42s var(--ease-spring), transform .42s var(--ease-spring);border-radius:999px;justify-content:center;align-items:center;display:flex;position:absolute;top:2px;box-shadow:0 2px 6px #1f9dff59}html[data-theme=light] .toggle .toggle__handle{left:3px}html[data-theme=dark] .toggle .toggle__handle{left:32px}html[data-theme=light] [data-theme-icon=dark],html[data-theme=dark] [data-theme-icon=light]{display:none}.toggle__handle svg{width:11px;height:11px}.toggle:active .toggle__handle{transform:scale(.9)}.lang-toggle{background:var(--bg-elevated);border:1px solid var(--border);cursor:pointer;height:26px;font-family:var(--font-mono);letter-spacing:.1em;color:var(--fg-subtle);transition:border-color var(--dur-base), color var(--dur-base);border-radius:999px;align-items:center;gap:2px;padding:5px 10px;font-size:10.5px;display:inline-flex}.lang-toggle:hover{border-color:var(--border-strong)}.lang-toggle__slot{font-variant-numeric:tabular-nums;color:var(--fg-faint);transition:color var(--dur-base);padding:0 1px}.lang-toggle__slot[data-active=true]{color:var(--accent-text);font-weight:500}.lang-toggle__sep{color:var(--fg-faint);opacity:.5}@media (width<=960px){.projects__grid{grid-template-columns:1fr}.project{min-height:260px}.project--empty{display:none}.stack-row{grid-template-columns:90px 1fr;gap:16px;padding:14px 18px}.post{grid-template-columns:1fr;gap:10px;padding:22px 8px}.post__date{padding-top:0}.post__tags{justify-content:flex-start;justify-self:start;padding-top:0}.post:hover{padding-left:12px;padding-right:12px}.xp{grid-template-columns:1fr;gap:40px}.xp-item{grid-template-columns:1fr;gap:8px}.xp-item__dates{padding-top:0}.now__body{padding:24px 22px}.now-line{grid-template-columns:1fr;gap:4px}.now-line__prompt{min-width:0;padding-top:0}}@media (width<=640px){.nav__links{gap:14px}.nav__links a .dot-cursor{display:none}.nav__controls{gap:8px;margin-left:14px}.nav__controls .lang-toggle{padding:5px 8px;font-size:10px}.hero{min-height:0;padding:40px 0 56px}.hero__oneliner{margin-top:12px}.xp,.projects,.stack,.writing,.now{padding:72px 0}.contact{padding:72px 0 96px}.projects__head,.writing__head{margin-bottom:28px}.projects.projects--archive{padding-top:96px}.xp__head,.stack__head{margin-bottom:24px}.footer{padding:32px var(--page-gutter);flex-direction:column;gap:12px}.contact__social{gap:24px}.contact__email .copy-flash{top:100%;left:0;transform:translateY(6px)}.contact__email .copy-flash[data-shown=true]{transform:translateY(6px)}.stack-row__v{white-space:nowrap;overscroll-behavior-x:contain;scrollbar-width:none;overflow-x:auto;mask-image:linear-gradient(90deg,#000 calc(100% - 28px),#0000 100%)}.stack-row__v::-webkit-scrollbar{display:none}.detail{padding:96px 0 64px}}@media (width<=520px){.nav__links{display:none}:root{--page-gutter:20px}.hero{padding:24px 0 40px}.xp,.projects,.stack,.writing,.now{padding:56px 0}.contact{padding:56px 0 72px}.detail{padding:64px 0 48px}.projects.projects--archive{padding-top:64px}}.detail{max-width:720px;margin:0 auto;padding:128px 0 96px}.detail__meta{font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-subtle);flex-wrap:wrap;align-items:baseline;gap:10px;margin-bottom:20px;font-size:11px;display:flex}.detail__meta>span:not(.detail__meta-lead){border:1px solid var(--border);color:var(--fg-muted);border-radius:2px;padding:3px 8px}.detail__meta-lead{color:var(--fg-faint);margin-right:6px}.detail__title{font-family:var(--font-sans);letter-spacing:-.03em;color:var(--fg);margin:0 0 24px;font-size:clamp(40px,5vw,72px);font-weight:500;line-height:1.05}.detail__dek{font-family:var(--font-sans);font-size:var(--fs-md);line-height:var(--lh-body);color:var(--fg-muted);text-wrap:pretty;max-width:60ch;margin:0 0 40px}.detail__stack{flex-wrap:wrap;gap:6px;margin-bottom:48px;display:flex}.detail__links{flex-wrap:wrap;gap:8px;margin:-32px 0 48px;display:flex}.detail__link{font-family:var(--font-sans);letter-spacing:-.005em;color:var(--fg-muted);border:1px solid var(--border);background:var(--bg);transition:color var(--dur-base), border-color var(--dur-base);border-radius:2px;align-items:center;gap:8px;padding:8px 14px;font-size:13px;text-decoration:none;display:inline-flex}.detail__link:hover{color:var(--accent-text);border-color:var(--accent-text)}.detail__link svg{width:14px;height:14px}.detail__stack span{font-family:var(--font-mono);letter-spacing:.06em;color:var(--fg-muted);border:1px solid var(--border);background:var(--bg);border-radius:2px;padding:4px 10px;font-size:10.5px}.detail__video{background:var(--bg-elevated);border:1px solid var(--border);border-radius:4px;margin:0 0 48px;padding:8px}.detail__video video{aspect-ratio:16/9;background:#0d0b0a;border-radius:2px;width:100%;height:auto;display:block}.detail__body{font-family:var(--font-sans);font-size:var(--fs-base);line-height:var(--lh-loose);color:var(--fg)}.detail__body>*+*{margin-top:1.1em}.detail__body h2{font-size:var(--fs-lg);letter-spacing:-.02em;margin-top:2em;font-weight:500}.detail__body h3{font-size:var(--fs-md);letter-spacing:-.01em;margin-top:1.6em;font-weight:500}.detail__body a{color:var(--accent-text);border-bottom:1px solid;text-decoration:none}.detail__body a:hover{opacity:.75}.detail__body code{font-family:var(--font-mono);background:var(--bg-elevated);border:1px solid var(--border);border-radius:3px;padding:2px 6px;font-size:.9em}.detail__body pre{font-family:var(--font-mono);background:var(--bg-elevated);border:1px solid var(--border);border-radius:4px;padding:16px;font-size:13px;overflow-x:auto}.detail__body pre code{background:0 0;border:0;padding:0}.detail__body blockquote{border-left:2px solid var(--border-strong);color:var(--fg-muted);margin:0;padding-left:20px;font-style:italic}.detail__body ul,.detail__body ol{padding-left:22px}.detail__body li+li{margin-top:.4em}.detail__body hr{border:0;border-top:1px solid var(--border);margin:2em 0}.detail__body img{background:var(--bg-elevated);border:1px solid var(--border);border-radius:4px;max-width:100%;height:auto;padding:8px;display:block}.detail__body table{border-collapse:collapse;width:100%;margin:1.5em 0;font-size:14px;display:block;overflow-x:auto}.detail__body th,.detail__body td{text-align:left;vertical-align:top;border-bottom:1px solid var(--border);padding:8px 12px}.detail__body th{font-family:var(--font-mono);letter-spacing:.04em;text-transform:uppercase;color:var(--fg-subtle);border-bottom-color:var(--border-strong);font-size:11px;font-weight:500}.detail__body td{color:var(--fg-muted)}.detail__body td:first-child{color:var(--fg);white-space:nowrap}.detail__diagram{--d-bg:var(--bg);--d-fg:var(--fg);--d-line:var(--border-strong);--d-surface:var(--bg-elevated);--d-muted:var(--fg-muted);max-width:480px;margin:1.5em auto}.detail__diagram svg{width:100%;height:auto;font-family:var(--font-sans);display:block}.detail__model{background:var(--bg-elevated);border:1px solid var(--border);border-radius:4px;margin:2em 0 0;padding:8px}.detail__model-canvas{aspect-ratio:4/3;touch-action:none;cursor:grab;opacity:0;transition:opacity .6s var(--ease-out-expo)}.detail__model-canvas:active{cursor:grabbing}.detail__model-canvas canvas{width:100%;height:100%;display:block}.detail__model-canvas[data-state=ready]{opacity:1}.detail__empty{font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-faint);border-top:1px solid var(--border);padding:24px 0;font-size:11.5px}.detail__back{font-family:var(--font-sans);letter-spacing:-.005em;color:var(--fg-subtle);transition:color var(--dur-base);align-items:center;gap:6px;margin-bottom:48px;font-size:13px;text-decoration:none;display:inline-flex}.detail__back:hover{color:var(--accent-text)}.cv__head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px 24px;margin-bottom:24px;display:flex}.cv__head .detail__title{margin-bottom:10px}.cv__head .detail__dek{margin:0}.cv__pdf{margin-top:14px}.cv__contacts{font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-muted);flex-wrap:wrap;gap:8px 20px;font-size:12px;display:flex}.cv__contacts a{color:inherit;border-bottom:1px solid var(--border-strong);transition:color var(--dur-base), border-color var(--dur-base);text-decoration:none}.cv__contacts a:hover{color:var(--accent-text);border-color:currentColor}.cv__section{margin-top:64px}.cv__label{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--fg-subtle);border-bottom:1px solid var(--border);margin:0 0 20px;padding-bottom:10px;font-size:11px;font-weight:500}.cv__summary{font-size:var(--fs-base);line-height:var(--lh-loose);color:var(--fg);text-wrap:pretty;margin:0}.cv__grid{grid-template-columns:max-content 1fr;gap:14px 24px;margin:0;display:grid}.cv__grid dt{font-family:var(--font-mono);letter-spacing:.04em;color:var(--fg-subtle);padding-top:3px;font-size:11px}.cv__grid dd{color:var(--fg-muted);margin:0;font-size:14.5px;line-height:1.5}.cv__entry+.cv__entry{margin-top:40px}.cv__entry-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 16px;display:flex}.cv__role{letter-spacing:-.01em;color:var(--fg);font-size:15.5px;font-weight:600}.cv__project{border-bottom:1px solid var(--border-strong);transition:color var(--dur-base), border-color var(--dur-base);text-decoration:none}.cv__project:hover{color:var(--accent-text);border-color:currentColor}.cv__org{color:var(--fg-muted);margin-left:6px}.cv__tag,.cv__stack{font-family:var(--font-mono);letter-spacing:.04em;color:var(--fg-subtle);margin-left:8px;font-size:10.5px}.cv__dates{font-family:var(--font-mono);letter-spacing:.02em;color:var(--fg-subtle);font-variant-numeric:tabular-nums;font-size:11px}.cv__lead{color:var(--fg);text-wrap:pretty;margin:10px 0 0;font-size:14.5px;font-weight:500;line-height:1.55}.cv__bullets{color:var(--fg-muted);margin:14px 0 0;padding-left:18px;font-size:14.5px;line-height:1.6}.cv__bullets li+li{margin-top:9px}.cv__bullets strong{color:var(--fg);font-weight:600}@media (width<=640px){.cv__section{margin-top:48px}.cv__grid{grid-template-columns:1fr;gap:2px 0}.cv__grid dt{padding-top:12px}.cv__grid dt:first-child{padding-top:0}.cv__entry-head{flex-direction:column}}
