@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(../media/fc0a7394b875fa43-s.2ytmazkdrg7t9.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(../media/7ebf22b5a21034f8-s.p.3j3877k49yy0l.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../media/ccf27e5a7366fb23-s.1icgra-w5i50b.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../media/e41d5df559864f9e-s.p.1g73gv09-xcb6.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Instrument Serif Fallback;src:local(Times New Roman);ascent-override:117.94%;descent-override:36.93%;line-gap-override:0.0%;size-adjust:83.94%}.instrument_serif_6f743e1b-module__EKsWTW__className{font-family:Instrument Serif,Instrument Serif Fallback;font-weight:400}.instrument_serif_6f743e1b-module__EKsWTW__variable{--font-serif:"Instrument Serif", "Instrument Serif Fallback"}
@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/04c5164763c40239-s.1kd-r_s9smv5m.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/26f284dcc38c84c0-s.3hlisc-pwq13z.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/7e7f32a39836f228-s.0-oo9_1x_xmvg.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/fa39153a3fc630ba-s.36fqqi66-3tjb.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/6a5386fd6038edbe-s.3_z45zcoc-xoz.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(../media/051742360c26797e-s.p.1bkzbscqrt8rl.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/04c5164763c40239-s.1kd-r_s9smv5m.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/26f284dcc38c84c0-s.3hlisc-pwq13z.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/7e7f32a39836f228-s.0-oo9_1x_xmvg.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/fa39153a3fc630ba-s.36fqqi66-3tjb.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/6a5386fd6038edbe-s.3_z45zcoc-xoz.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(../media/051742360c26797e-s.p.1bkzbscqrt8rl.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/04c5164763c40239-s.1kd-r_s9smv5m.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/26f284dcc38c84c0-s.3hlisc-pwq13z.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/7e7f32a39836f228-s.0-oo9_1x_xmvg.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/fa39153a3fc630ba-s.36fqqi66-3tjb.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/6a5386fd6038edbe-s.3_z45zcoc-xoz.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:600;font-display:swap;src:url(../media/051742360c26797e-s.p.1bkzbscqrt8rl.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_ea259e4e-module__iIb9MG__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_ea259e4e-module__iIb9MG__variable{--font-mono:"JetBrains Mono", "JetBrains Mono Fallback"}
:root{--mono:var(--font-mono), ui-monospace, Menlo, monospace;--serif:var(--font-serif), "Times New Roman", serif;--bg:#0b0b0b;--bg-1:#0f0f0f;--bg-2:#141414;--fg:#edeae4;--fg-dim:#9a968c;--fg-fade:#54524c;--line:#edeae414;--line-strong:#edeae42e;--accent:#edeae4;--accent-dim:#edeae473;--green:#6fcf6b;--red:#e26a6a;--yellow:#e3c26a;--blue:#7fa8d6;--purple:#b48ee0;--selection:#edeae438}html[data-theme=light]{--bg:#f5f2ec;--bg-1:#efebe3;--bg-2:#e7e2d8;--fg:#151311;--fg-dim:#5e5a52;--fg-fade:#a8a39a;--line:#1513111a;--line-strong:#15131138;--accent:#151311;--accent-dim:#15131173;--green:#3f8f3b;--red:#b04747;--yellow:#a07e20;--blue:#345f86;--purple:#6b4da0;--selection:#15131129}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--fg);margin:0;padding:0}body{font-family:var(--mono);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.6;transition:background .4s,color .4s;overflow-x:hidden}::selection{background:var(--selection);color:var(--fg)}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0;padding:0}img{max-width:100%;display:block}input,textarea{font:inherit;color:inherit;background:0 0;border:0;outline:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}html{--density:1.25}html[data-density=compact]{--density:.78}html[data-density=comfy]{--density:1}html[data-density=spacious]{--density:1.25}.ide{grid-template-columns:260px 1fr;min-height:100vh;display:grid;position:relative}.sidebar{background:var(--bg-1);border-right:1px solid var(--line);z-index:40;flex-direction:column;height:100vh;font-size:12px;display:flex;position:sticky;top:0}.side-head{border-bottom:1px solid var(--line);align-items:center;gap:10px;min-height:48px;padding:14px 16px;display:flex}.monogram{border:1px solid var(--line-strong);width:26px;height:26px;font-family:var(--serif);place-items:center;font-size:17px;font-style:italic;display:grid}.side-head .meta{font-size:11px;line-height:1.25}.side-head .meta b{font-weight:600}.side-head .meta span{color:var(--fg-dim);font-size:10px;display:block}.status-dot{background:var(--green);border-radius:50%;width:8px;height:8px;margin-left:auto;animation:2.4s infinite pulse}@keyframes pulse{0%{box-shadow:0 0 #6fcf6b8c}80%{box-shadow:0 0 0 10px #6fcf6b00}to{box-shadow:0 0 #6fcf6b00}}.tree-section{color:var(--fg-fade);letter-spacing:.16em;text-transform:uppercase;padding:10px 8px 4px;font-size:10px}.tree ul{margin:0;padding:0;list-style:none}.tree li>.row{cursor:pointer;color:var(--fg-dim);white-space:nowrap;text-overflow:ellipsis;align-items:center;gap:8px;padding:4px 10px;display:flex;position:relative;overflow:hidden}.tree li>.row:hover{color:var(--fg);background:var(--bg-2)}.tree li.folder>.row:before{content:"▸";color:var(--fg-fade);width:10px;font-size:9px;transition:transform .18s;display:inline-block}.tree li.folder.open>.row:before{transform:rotate(90deg)}.tree li.file>.row{padding-left:30px}.tree li.file>.row:before{content:"";border:1px solid var(--fg-fade);clip-path:polygon(0 0,70% 0,100% 30%,100% 100%,0 100%);width:9px;height:11px;position:absolute;top:50%;left:16px;transform:translateY(-50%)}.tree li.file.active>.row{color:var(--fg);background:var(--bg-2)}.tree li.file.active>.row:after{content:"";background:var(--accent);width:2px;position:absolute;top:0;bottom:0;left:0}.tree ul.children{padding-left:14px;display:none}.tree li.folder.open>ul.children{display:block}.ext{color:var(--fg-fade)}.side-foot{border-top:1px solid var(--line);color:var(--fg-dim);align-items:center;gap:10px;margin-top:auto;padding:10px 14px;font-size:11px;display:flex}.side-foot .branch:before{content:"⎇ ";color:var(--fg-fade)}.side-foot .sep{color:var(--fg-fade)}.kbd{border:1px solid var(--line-strong);color:var(--fg-dim);background:var(--bg);border-radius:3px;align-items:center;gap:3px;padding:1px 6px;font-size:10px;display:inline-flex}.main{min-width:0;position:relative}.topbar{background:color-mix(in oklab, var(--bg) 70%, transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid var(--line);z-index:30;align-items:center;gap:20px;height:48px;padding:0 20px;font-size:12px;display:flex;position:sticky;top:0}.tabs{scrollbar-width:none;display:flex;overflow-x:auto}.tabs::-webkit-scrollbar{display:none}.tab{border-right:1px solid var(--line);height:48px;color:var(--fg-dim);white-space:nowrap;cursor:pointer;align-items:center;gap:8px;padding:0 14px;display:flex;position:relative}.tab:first-child{border-left:1px solid var(--line)}.tab.active{color:var(--fg);background:var(--bg)}.tab.active:after{content:"";background:var(--accent);height:1px;position:absolute;top:0;left:0;right:0}.tab .close{color:var(--fg-fade);font-size:14px}.topbar-right{align-items:center;gap:12px;margin-left:auto;display:flex}.cmd-trigger{border:1px solid var(--line-strong);color:var(--fg-dim);border-radius:4px;align-items:center;gap:8px;min-width:220px;padding:6px 10px;font-size:11px;display:inline-flex}.cmd-trigger .kbd{margin-left:auto}.cmd-trigger:hover{color:var(--fg);border-color:var(--fg-dim)}.admin-link{border:1px solid var(--line);color:var(--fg-dim);border-radius:4px;align-items:center;gap:6px;padding:6px 10px;font-size:11px;display:inline-flex}.admin-link:hover{color:var(--fg);border-color:var(--line-strong)}.theme-toggle{border:1px solid var(--line);width:32px;height:32px;color:var(--fg-dim);border-radius:4px;place-items:center;display:grid}.theme-toggle:hover{color:var(--fg);border-color:var(--line-strong)}.content{position:relative}.bg-field{pointer-events:none;z-index:0;opacity:0;transition:opacity .7s;position:fixed;inset:0}.bg-field.live{opacity:.4}.bg-field:before{content:"";background-image:radial-gradient(circle, var(--line-strong) 1px, transparent 1.2px);-webkit-mask-image:radial-gradient(circle at var(--mx,50%) var(--my,50%), #000 0%, transparent 45%);-webkit-mask-image:radial-gradient(circle at var(--mx,50%) var(--my,50%), #000 0%, transparent 45%);mask-image:radial-gradient(circle at var(--mx,50%) var(--my,50%), #000 0%, transparent 45%);background-size:28px 28px;transition:-webkit-mask-image .26s;position:absolute;inset:0}.bg-field:after{content:"";opacity:.06;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.5 0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");position:absolute;inset:0}section{z-index:1;position:relative}.wrap{max-width:1280px;margin:0 auto;padding:0 clamp(20px,4vw,48px);position:relative}#hero{padding:calc(80px * var(--density)) 0 calc(48px * var(--density));border-bottom:1px solid var(--line);position:relative;overflow:hidden}.hero-chrome{color:var(--fg-dim);align-items:center;gap:10px;margin-bottom:28px;font-size:11px;display:flex}.hero-chrome .lights{gap:6px;display:flex}.hero-chrome .lights i{opacity:.6;border-radius:50%;width:10px;height:10px;display:block}.hero-chrome .lights i:first-child{background:var(--red)}.hero-chrome .lights i:nth-child(2){background:var(--yellow)}.hero-chrome .lights i:nth-child(3){background:var(--green)}.hero-chrome .path{color:var(--fg-fade)}.hero-chrome .path b{color:var(--fg-dim);font-weight:400}.terminal-line{color:var(--fg-dim);white-space:pre;margin-bottom:14px;font-size:clamp(12px,1.4vw,14px)}.terminal-line .prompt{color:var(--green)}.terminal-line .cursor{background:var(--accent);vertical-align:-.14em;width:.55em;height:1em;margin-left:2px;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}h1.hero-name{font-family:var(--serif);letter-spacing:-.035em;color:var(--fg);min-height:1.1em;margin:8px 0 0;font-size:clamp(3.2rem,10.4vw,9.6rem);font-weight:400;line-height:.94}h1.hero-name .accent-italic{color:var(--fg-dim);font-style:italic}.hero-caret{background:var(--accent);vertical-align:-.04em;width:.45em;height:.85em;margin-left:.08em;animation:1s step-end infinite blink;display:inline-block;transform:translateY(-.08em)}.hero-grid{grid-template-columns:1.55fr 1fr;align-items:start;gap:56px;margin-top:36px;display:grid}.hero-sub{color:var(--fg-dim);max-width:48ch;font-size:15px;line-height:1.55}.hero-sub .hl{color:var(--fg)}.status-pill{border:1px solid var(--line-strong);color:var(--fg-dim);border-radius:999px;align-items:center;gap:8px;padding:6px 12px;font-size:11px;display:inline-flex}.status-pill .status-dot{width:7px;height:7px;margin:0}.hero-ctas{flex-wrap:wrap;gap:12px;margin-top:20px;display:flex}.btn{border:1px solid var(--line-strong);color:var(--fg);border-radius:4px;align-items:center;gap:10px;padding:12px 18px;font-size:12px;font-weight:500;transition:background .2s,border-color .2s;display:inline-flex}.btn:hover{border-color:var(--fg)}.btn.primary{background:var(--accent);color:var(--bg);border-color:var(--accent)}.btn.primary:hover{background:var(--fg)}.btn .arrow{transition:transform .26s cubic-bezier(.22,1,.36,1)}.btn:hover .arrow{transform:translate(3px,-3px)}.hero-side{border-left:1px solid var(--line);color:var(--fg-dim);align-self:start;padding-top:6px;padding-left:24px;font-size:11px;line-height:1.7}.hero-side dl{grid-template-columns:90px 1fr;gap:4px 16px;margin:0;display:grid}.hero-side dt{color:var(--fg-fade)}.hero-side dd{color:var(--fg);margin:0}.marquee{border-bottom:1px solid var(--line);font-family:var(--serif);letter-spacing:-.02em;white-space:nowrap;z-index:2;background:var(--bg);padding:18px 0;font-size:clamp(24px,3.2vw,40px);position:relative;overflow:hidden}.marquee:hover .track{animation-play-state:paused}.track{gap:48px;padding-right:48px;animation:40s linear infinite scroll;display:inline-flex}.track .sep{color:var(--fg-fade)}.track em{color:var(--fg-dim);font-style:italic;font-weight:400}@keyframes scroll{to{transform:translate(-50%)}}.sec-head{padding:calc(64px * var(--density)) 0 calc(32px * var(--density));border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;gap:20px;display:flex}.sec-num{color:var(--fg-fade);letter-spacing:.24em;text-transform:uppercase;font-size:11px}.sec-title{font-family:var(--serif);letter-spacing:-.02em;white-space:nowrap;margin:10px 0 0;font-size:clamp(28px,3.5vw,48px);font-weight:400;line-height:1}.sec-title em{color:var(--fg-dim);font-style:italic}.sec-meta{color:var(--fg-dim);text-align:right;max-width:320px;font-size:11px;line-height:1.6}.sec-meta b{color:var(--fg);font-weight:500}#about .cols{padding:calc(48px * var(--density)) 0 calc(32px * var(--density));grid-template-columns:5fr 7fr;gap:56px;display:grid}.photo-wrap{aspect-ratio:4/5;background:var(--bg-1);position:relative;overflow:hidden}.photo-wrap img{object-fit:cover;filter:grayscale()contrast(1.04)brightness(.94);width:100%;height:100%;transition:filter .6s}.photo-wrap:hover img{filter:grayscale(0)contrast(1.04)brightness(.96)}html[data-theme=light] .photo-wrap img{filter:grayscale()contrast(1.03)brightness(1.02)}html[data-theme=light] .photo-wrap:hover img{filter:grayscale(0)contrast(1.03)}.photo-wrap .caption{color:var(--fg-dim);letter-spacing:.12em;text-transform:uppercase;justify-content:space-between;font-size:10px;display:flex;position:absolute;bottom:-24px;left:0;right:0}.photo-wrap .caption span:first-child{color:var(--fg)}.about-heading{font-family:var(--serif);letter-spacing:-.02em;color:var(--fg);margin:0 0 24px;font-size:clamp(24px,2.8vw,38px);font-weight:400;line-height:1.15}.about-body{font-family:var(--serif);color:var(--fg-dim);letter-spacing:-.01em;max-width:52ch;font-size:clamp(15px,1.3vw,18px);line-height:1.65}.about-body p{margin:0 0 .75em}.about-body em{color:var(--fg-dim)}.about-meta{font-family:var(--mono);color:var(--fg-dim);max-width:52ch;margin-top:32px;font-size:12px;line-height:1.7}.about-meta p{margin:0 0 12px}.stats{border-top:1px solid var(--line);border-bottom:1px solid var(--line);grid-template-columns:repeat(4,1fr);margin-top:40px;display:grid}.stat{border-right:1px solid var(--line);padding:24px 20px}.stat:last-child{border-right:0}.stat .n{font-family:var(--serif);letter-spacing:-.02em;font-size:clamp(36px,4vw,56px);line-height:1}.stat .n em{color:var(--fg-dim);font-style:italic}.stat .l{color:var(--fg-dim);text-transform:uppercase;letter-spacing:.14em;margin-top:10px;font-size:11px}#work .project{padding:calc(60px * var(--density)) 0;border-bottom:1px solid var(--line);grid-template-columns:7fr 5fr;align-items:center;gap:56px;display:grid}#work .project.flip{grid-template-columns:5fr 7fr}#work .project.flip .p-visual{order:2}#work .project.flip .p-body{order:1}.p-visual{aspect-ratio:16/10;border:1px solid var(--line);background:var(--bg-1);cursor:pointer;position:relative;overflow:hidden}.p-visual .mock{transition:transform .6s cubic-bezier(.22,1,.36,1);position:absolute;inset:0}.p-visual .mock img{object-fit:cover;width:100%;height:100%}.p-visual .overlay{background:color-mix(in srgb, var(--bg) 10%, transparent);z-index:1;transition:background .3s;position:absolute;inset:0}.p-visual:hover .overlay{background:color-mix(in srgb, var(--bg) 45%, transparent)}.p-visual:hover .mock{transform:scale(1.02)}.p-visual .view-badge{color:var(--fg);border:1px solid var(--line-strong);background:color-mix(in srgb, var(--bg) 70%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);letter-spacing:.12em;text-transform:uppercase;opacity:0;z-index:2;padding:5px 9px;font-size:10px;transition:opacity .25s;position:absolute;top:14px;right:14px}.p-visual:hover .view-badge{opacity:1}.p-visual .label{color:var(--fg-dim);letter-spacing:.12em;text-transform:uppercase;z-index:2;font-size:10px;position:absolute;top:14px;left:14px}.p-body .p-index{color:var(--fg-fade);letter-spacing:.2em;font-size:11px}.p-body h3{font-family:var(--serif);letter-spacing:-.025em;margin:10px 0 14px;font-size:clamp(30px,3.5vw,48px);font-weight:400;line-height:1.05;display:inline-block;position:relative}.p-body h3:after{content:"";background:var(--accent);height:1px;transition:right .5s cubic-bezier(.22,1,.36,1);position:absolute;bottom:-2px;left:0;right:100%}.p-body:hover h3:after{right:0}.p-body .p-desc{color:var(--fg-dim);max-width:44ch;margin-bottom:20px;font-size:14px;line-height:1.55}.pills{flex-wrap:wrap;gap:6px;margin-bottom:24px;display:flex}.pill{letter-spacing:.08em;border:1px solid var(--line-strong);color:var(--fg-dim);text-transform:uppercase;border-radius:2px;padding:4px 8px;font-size:10px}.p-links{flex-wrap:wrap;gap:18px;display:flex}.p-links a{color:var(--fg);border-bottom:1px solid var(--line-strong);padding-bottom:3px;font-size:12px;transition:border-color .2s}.p-links a:hover{border-color:var(--accent)}.p-links a.secondary{color:var(--fg-dim)}.p-meta{color:var(--fg-dim);grid-template-columns:90px 1fr;gap:4px 16px;margin-bottom:18px;font-size:11px;display:grid}.p-meta dt{color:var(--fg-fade)}#skills .stack-list{padding:calc(40px * var(--density)) 0 calc(80px * var(--density))}.stack-row{border-bottom:1px solid var(--line);grid-template-columns:90px 1fr auto;align-items:baseline;gap:24px;padding:20px 0;display:grid}.stack-row .n{color:var(--fg-fade);letter-spacing:.2em;font-size:11px}.stack-row .items{font-family:var(--serif);letter-spacing:-.015em;font-size:clamp(26px,3vw,40px);line-height:1.2}.stack-row .items span{text-underline-offset:6px;padding:0 2px;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;text-decoration-thickness:1px;transition:color .2s,text-decoration-color .2s}.stack-row .items span:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);color:var(--fg)}.stack-row .items .sep{color:var(--fg-fade);padding:0 4px}.stack-row .context{color:var(--fg-dim);text-align:right;max-width:220px;font-size:11px;line-height:1.5}#experience .xp{padding:calc(60px * var(--density)) 0;position:relative}#experience .xp:before{content:"";background:linear-gradient(to bottom, transparent 0%, var(--line-strong) 8%, var(--line-strong) 92%, transparent 100%);transform-origin:top;width:1px;transform:scaleY(var(--xp-progress,0));transition:transform .4s cubic-bezier(.22,1,.36,1);position:absolute;top:0;bottom:0;left:0}.xp-row{border-bottom:1px solid var(--line);opacity:0;grid-template-columns:140px 1fr 1fr 120px;align-items:baseline;gap:32px;padding:32px 0 32px 24px;transition:opacity .8s cubic-bezier(.22,1,.36,1),transform .9s cubic-bezier(.22,1,.36,1);display:grid;position:relative;transform:translateY(60px)}.xp-row.in{opacity:1;transform:none}.xp-row:first-child{transition-delay:0s,0s}.xp-row:nth-child(2){transition-delay:.12s,.12s}.xp-row:nth-child(3){transition-delay:.24s,.24s}.xp-row:nth-child(4){transition-delay:.36s,.36s}.xp-row:nth-child(5){transition-delay:.48s,.48s}.xp-row:first-child{border-top:1px solid var(--line)}.xp-row .dot{background:var(--bg);border:1px solid var(--fg-dim);border-radius:50%;width:11px;height:11px;transition:transform .4s cubic-bezier(.22,1,.36,1) .2s,background .3s,border-color .3s,box-shadow .3s;position:absolute;top:40px;left:-5px;transform:scale(0)}.xp-row.in .dot{transform:scale(1)}.xp-row:hover .dot{background:var(--fg);border-color:var(--fg);box-shadow:0 0 0 5px var(--bg), 0 0 0 6px var(--line-strong)}.xp-row.current .dot{background:var(--green);border-color:var(--green)}.xp-row.current .dot:after{content:"";border:1px solid var(--green);border-radius:50%;animation:2.4s cubic-bezier(.22,1,.36,1) infinite dotRing;position:absolute;inset:-3px}@keyframes dotRing{0%{opacity:.7;transform:scale(1)}to{opacity:0;transform:scale(2.4)}}.xp-row .date{color:var(--fg-dim);letter-spacing:.06em;font-size:11px;position:relative}.xp-row.current .date{color:var(--green)}.xp-row .role{font-family:var(--serif);letter-spacing:-.015em;font-size:clamp(22px,2.2vw,30px);line-height:1.15;transition:transform .4s cubic-bezier(.22,1,.36,1)}.xp-row:hover .role{transform:translate(6px)}.xp-row .org{color:var(--fg-dim);margin-top:4px;font-size:12px}.xp-row .desc{color:var(--fg-dim);max-width:44ch;font-size:12px;line-height:1.55}.xp-row .tag{color:var(--fg-fade);text-align:right;letter-spacing:.1em;text-transform:uppercase;align-self:start;font-size:10px}#testimonials .quotes{padding:calc(60px * var(--density)) 0;position:relative}.quote-slide{grid-template-columns:2fr 1fr;align-items:end;gap:60px;display:none}.quote-slide.on{animation:.5s cubic-bezier(.22,1,.36,1) qfade;display:grid}@keyframes qfade{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.quote-slide blockquote{font-family:var(--serif);letter-spacing:-.015em;color:var(--fg);margin:0;font-size:clamp(28px,3.2vw,44px);font-weight:400;line-height:1.25}.quote-slide blockquote:before{content:"“";color:var(--fg-fade);margin-bottom:16px;font-size:2em;font-style:italic;line-height:.5;display:block}.quote-who{color:var(--fg-dim);border-left:1px solid var(--line);padding-left:20px;font-size:12px;line-height:1.6}.quote-who b{color:var(--fg);font-weight:500;display:block}.quote-nav{grid-column:1/-1;gap:8px;margin-top:32px;display:flex}.quote-nav button{border:1px solid var(--line-strong);border-radius:1px;width:26px;height:10px}.quote-nav button.on{background:var(--accent);border-color:var(--accent)}#contact{padding:calc(100px * var(--density)) 0 calc(60px * var(--density));border-top:1px solid var(--line)}.contact-hero{font-family:var(--serif);letter-spacing:-.035em;margin:0;font-size:clamp(48px,9vw,140px);font-weight:400;line-height:.95}.contact-hero em{color:var(--fg-dim);font-style:italic}.contact-email{font-family:var(--serif);letter-spacing:-.025em;border-bottom:1px solid var(--line-strong);margin:40px 0 10px;font-size:clamp(28px,4.5vw,64px);line-height:1.1;transition:border-color .2s;display:inline-block}.contact-email:hover{border-color:var(--accent)}.contact-grid{grid-template-columns:1fr 1fr;gap:60px;margin-top:60px;display:grid}.contact-meta{grid-template-columns:1fr;gap:26px;display:grid}.cmeta-row{border-top:1px solid var(--line);grid-template-columns:110px 1fr;gap:20px;padding-top:14px;font-size:12px;display:grid}.cmeta-row:last-child{border-bottom:1px solid var(--line);padding-bottom:14px}.cmeta-row dt{color:var(--fg-fade);letter-spacing:.12em;text-transform:uppercase;font-size:10px}.cmeta-row dd{color:var(--fg);margin:0}.cmeta-row dd a{border-bottom:1px solid var(--line-strong)}.form{border:1px solid var(--line);background:var(--bg-1);font-family:var(--mono);padding:4px}.form-head{border-bottom:1px solid var(--line);color:var(--fg-dim);align-items:center;gap:8px;padding:10px 14px;font-size:11px;display:flex}.form-head .lights{gap:5px;display:flex}.form-head .lights i{border-radius:50%;width:8px;height:8px;display:block}.form-head .lights i:first-child{background:var(--red)}.form-head .lights i:nth-child(2){background:var(--yellow)}.form-head .lights i:nth-child(3){background:var(--green)}.form-body{padding:18px 14px 22px;font-size:13px;line-height:2}.form-line{flex-wrap:wrap;align-items:baseline;gap:4px;display:flex}.form-line .num{color:var(--fg-fade);text-align:right;flex-shrink:0;width:22px}.form-line .key{color:var(--blue)}.form-line .col{color:var(--fg-fade)}.form-line .val{flex:1;min-width:140px}.form-line input,.form-line textarea{color:var(--green);border-bottom:1px dashed var(--line);width:100%;padding:0 4px;transition:border-color .2s}.form-line input:focus,.form-line textarea:focus{border-color:var(--accent);outline:0}.form-line textarea{resize:vertical;min-height:60px;padding-top:4px;font-family:inherit}.form-line .quote{color:var(--fg-fade)}.form-foot{border-top:1px solid var(--line);justify-content:space-between;align-items:center;padding:14px;display:flex}.form-foot .note{color:var(--fg-dim);font-size:11px}.form-success{text-align:center;font-family:var(--serif);color:var(--fg);padding:40px 20px;font-size:28px;line-height:1.3;display:none}.form-success em{color:var(--fg-dim);font-style:italic}.form.sent .form-body,.form.sent .form-foot{display:none}.form.sent .form-success{display:block}footer{border-top:1px solid var(--line);padding:calc(80px * var(--density)) 0 32px;z-index:1;position:relative}.footer-name{font-family:var(--serif);letter-spacing:-.04em;white-space:nowrap;margin:0;font-size:clamp(48px,10vw,140px);font-weight:400;line-height:.88;overflow:hidden}.footer-name em{color:var(--fg-dim);font-style:italic}.footer-cols{border-top:1px solid var(--line);grid-template-columns:repeat(4,1fr);gap:30px;margin-top:60px;padding-top:30px;font-size:11px;display:grid}.footer-cols h5{letter-spacing:.2em;text-transform:uppercase;color:var(--fg-fade);margin:0 0 14px;font-size:10px;font-weight:500}.footer-cols a{color:var(--fg-dim);padding:3px 0;display:block}.footer-cols a:hover{color:var(--fg)}.footer-bot{border-top:1px solid var(--line);color:var(--fg-fade);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;margin-top:40px;padding-top:18px;font-size:10px;display:flex}.to-top{border:1px solid var(--line-strong);background:var(--bg-1);width:44px;height:44px;color:var(--fg-dim);z-index:50;opacity:0;pointer-events:none;border-radius:50%;place-items:center;transition:opacity .3s,transform .3s;display:grid;position:fixed;bottom:24px;right:24px;transform:translateY(12px)}.to-top.show{opacity:1;pointer-events:auto;transform:translateY(0)}.cmd-overlay{background:color-mix(in srgb, var(--bg) 65%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:100;justify-content:center;align-items:flex-start;padding-top:12vh;display:none;position:fixed;inset:0}.cmd-overlay.on{animation:.18s cfade;display:flex}@keyframes cfade{0%{opacity:0}to{opacity:1}}.cmd{background:var(--bg-1);border:1px solid var(--line-strong);border-radius:6px;width:min(640px,92vw);animation:.22s cubic-bezier(.22,1,.36,1) cup;overflow:hidden;box-shadow:0 30px 80px #00000073}@keyframes cup{0%{opacity:0;transform:translateY(-10px)scale(.98)}to{opacity:1;transform:none}}.cmd-input-row{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:14px 16px;font-size:14px;display:flex}.cmd-input-row .chev{color:var(--green)}.cmd-input{font-family:var(--mono);flex:1}.cmd-input::placeholder{color:var(--fg-fade)}.cmd-list{max-height:420px;padding:6px;overflow-y:auto}.cmd-group-label{color:var(--fg-fade);letter-spacing:.16em;text-transform:uppercase;padding:10px 10px 4px;font-size:10px}.cmd-item{cursor:pointer;color:var(--fg-dim);border-radius:4px;align-items:center;gap:12px;padding:9px 10px;font-size:13px;display:flex}.cmd-item .ic{width:18px;color:var(--fg-fade);text-align:center;font-size:12px}.cmd-item .desc{color:var(--fg-fade);margin-left:auto;font-size:11px}.cmd-item.sel{background:var(--bg-2);color:var(--fg)}.cmd-foot{border-top:1px solid var(--line);color:var(--fg-fade);gap:14px;padding:8px 14px;font-size:10px;display:flex}.case-topbar{z-index:2;border-bottom:1px solid var(--line);background:color-mix(in oklab, var(--bg) 85%, transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);height:48px;color:var(--fg-dim);align-items:center;padding:0 20px;font-size:12px;display:flex;position:sticky;top:0}.case-topbar .crumbs{align-items:center;gap:8px;display:flex}.case-topbar .crumbs b{color:var(--fg);font-weight:500}.case-topbar .close-case{border:1px solid var(--line-strong);border-radius:4px;margin-left:auto;padding:6px 10px;font-size:11px}.case-body{max-width:1100px;margin:0 auto;padding:80px 32px 140px}.case-kicker{color:var(--fg-fade);letter-spacing:.2em;text-transform:uppercase;font-size:11px}.case-title{font-family:var(--serif);letter-spacing:-.035em;margin:16px 0 20px;font-size:clamp(48px,7vw,96px);font-weight:400;line-height:.98}.case-summary{font-family:var(--serif);color:var(--fg-dim);max-width:38ch;margin-bottom:56px;font-size:clamp(22px,2.2vw,30px);line-height:1.4}.case-summary em{color:var(--fg);font-style:italic}.case-hero-img{aspect-ratio:16/9;border:1px solid var(--line);background:var(--bg-1);margin-bottom:80px;position:relative;overflow:hidden}.case-hero-img img{object-fit:cover;width:100%;height:100%}.case-specs{border-top:1px solid var(--line);border-bottom:1px solid var(--line);grid-template-columns:repeat(4,1fr);gap:32px;margin-bottom:80px;padding:26px 0;display:grid}.case-specs .s dt{color:var(--fg-fade);letter-spacing:.16em;text-transform:uppercase;font-size:10px}.case-specs .s dd{color:var(--fg);margin:6px 0 0;font-size:13px;line-height:1.5}.case-section{grid-template-columns:180px 1fr;gap:40px;margin-bottom:72px;display:grid}.case-section>h3{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--fg-fade);margin:4px 0 0;font-size:11px;font-weight:500}.case-section>.body{font-family:var(--serif);color:var(--fg);max-width:52ch;font-size:clamp(20px,1.7vw,24px);line-height:1.45}.case-section>.body p{margin:0 0 1em}.case-next{border-top:1px solid var(--line);justify-content:space-between;align-items:center;padding-top:40px;display:flex}.case-next .label{color:var(--fg-fade);letter-spacing:.16em;text-transform:uppercase;font-size:10px}.case-next a{font-family:var(--serif);letter-spacing:-.02em;align-items:center;gap:16px;font-size:clamp(28px,3.5vw,48px);display:inline-flex}.reveal{opacity:0;transition:opacity .7s cubic-bezier(.22,1,.36,1),transform .7s cubic-bezier(.22,1,.36,1);transform:translateY(40px)}.reveal.in{opacity:1;transform:none}.mock-ph{background:linear-gradient(135deg, var(--bg-1), var(--bg-2));place-items:center;display:grid;position:absolute;inset:0}.mock-ph svg{opacity:.85;width:58%;height:58%}@media (max-width:1060px){.hero-side{display:none}.hero-grid{grid-template-columns:1fr;gap:28px}#about .cols{grid-template-columns:1fr;gap:36px}#work .project,#work .project.flip{grid-template-columns:1fr;gap:24px}#work .project.flip .p-visual{order:0}.case-section{grid-template-columns:1fr;gap:14px}.case-specs{grid-template-columns:repeat(2,1fr);gap:20px}.contact-grid{grid-template-columns:1fr;gap:40px}.stack-row{grid-template-columns:60px 1fr}.stack-row .context{text-align:left;grid-column:1/-1;max-width:100%;margin-top:4px}.xp-row{grid-template-columns:110px 1fr;gap:14px}.xp-row .desc,.xp-row .tag{text-align:left;grid-column:2}}@media (max-width:860px){.ide{grid-template-columns:1fr}.sidebar{display:none}.footer-cols{grid-template-columns:repeat(2,1fr);gap:28px}.stats{grid-template-columns:repeat(2,1fr)}.stats .stat:nth-child(2){border-right:0}.stats .stat:nth-child(-n+2){border-bottom:1px solid var(--line)}.cmd-trigger{min-width:0;padding:6px}.cmd-trigger span.hint{display:none}.sec-head{flex-direction:column;align-items:flex-start}.sec-meta{text-align:left}.quote-slide{grid-template-columns:1fr;gap:26px}.footer-bot{flex-direction:column;align-items:flex-start;gap:10px}body{font-size:13px}}@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms!important;animation-duration:.01ms!important}.reveal,.xp-row{opacity:1;transform:none}.xp-row .dot{transform:scale(1)}#experience .xp:before{transform:scaleY(1)}.bg-field{display:none}}.admin-shell{min-height:100vh;font-family:var(--mono);grid-template-columns:240px 1fr 360px;display:grid}.admin-side{background:var(--bg-1);border-right:1px solid var(--line);flex-direction:column;height:100vh;padding:14px 0;display:flex;position:sticky;top:0}.admin-side .head{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:0 16px 14px;font-size:12px;display:flex}.admin-side .head b{font-weight:600}.admin-side .head span{color:var(--fg-dim);font-size:10px;display:block}.admin-side .nav{flex:1;padding:14px 8px;overflow-y:auto}.admin-side .nav-item{color:var(--fg-dim);cursor:pointer;border-radius:3px;align-items:center;gap:8px;padding:8px 10px;font-size:12px;display:flex}.admin-side .nav-item:hover{background:var(--bg-2);color:var(--fg)}.admin-side .nav-item.active{background:var(--bg-2);color:var(--fg);position:relative}.admin-side .nav-item.active:before{content:"";background:var(--accent);width:2px;position:absolute;top:4px;bottom:4px;left:0}.admin-side .nav-section{color:var(--fg-fade);letter-spacing:.16em;text-transform:uppercase;padding:14px 16px 6px;font-size:10px}.admin-side .side-foot{border-top:1px solid var(--line);flex-direction:column;gap:8px;padding:12px 14px;font-size:11px;display:flex}.admin-main{min-width:0;padding:32px clamp(20px,3vw,40px) 80px;overflow-y:auto}.admin-main h1{font-family:var(--serif);letter-spacing:-.02em;margin:0 0 6px;font-size:36px;font-weight:400}.admin-main .crumb{color:var(--fg-fade);letter-spacing:.16em;text-transform:uppercase;margin-bottom:8px;font-size:11px}.admin-main .lede{color:var(--fg-dim);max-width:60ch;margin:0 0 28px;font-size:13px}.field{margin-bottom:18px}.field label{color:var(--fg-dim);letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px;font-size:11px;display:block}.field input,.field textarea,.field select{border:1px solid var(--line);background:var(--bg-1);width:100%;color:var(--fg);font-family:var(--mono);border-radius:3px;padding:10px 12px;font-size:13px;transition:border-color .18s}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--fg-dim);outline:0}.field textarea{resize:vertical;min-height:90px;line-height:1.55}.field .help{color:var(--fg-fade);margin-top:6px;font-size:11px}.row-2{grid-template-columns:1fr 1fr;gap:14px;display:grid}.row-3{grid-template-columns:1fr 1fr 1fr;gap:14px;display:grid}.card{border:1px solid var(--line);background:var(--bg-1);border-radius:3px;margin-bottom:14px;padding:18px;position:relative}.card .card-head{align-items:center;gap:10px;margin-bottom:14px;display:flex}.card .card-head .ix{color:var(--fg-fade);letter-spacing:.14em;font-size:11px}.card .card-head h3{font-family:var(--serif);margin:0;font-size:18px;font-weight:400}.card .card-actions{gap:6px;margin-left:auto;display:flex}.btn-mini{border:1px solid var(--line-strong);color:var(--fg-dim);background:0 0;border-radius:3px;padding:4px 8px;font-size:11px}.btn-mini:hover{color:var(--fg);border-color:var(--fg-dim)}.btn-mini.danger:hover{color:var(--red);border-color:var(--red)}.add-btn{border:1px dashed var(--line-strong);color:var(--fg-dim);cursor:pointer;border-radius:3px;align-items:center;gap:8px;padding:10px 14px;font-size:12px;display:inline-flex}.add-btn:hover{color:var(--fg);border-color:var(--fg)}.admin-aside{background:var(--bg-1);border-left:1px solid var(--line);height:100vh;padding:18px;font-size:12px;position:sticky;top:0;overflow-y:auto}.admin-aside h4{letter-spacing:.14em;text-transform:uppercase;color:var(--fg-fade);margin:0 0 12px;font-size:11px}.admin-aside .pre{background:var(--bg);border:1px solid var(--line);max-height:260px;color:var(--fg-dim);white-space:pre;border-radius:3px;padding:12px;font-size:11px;line-height:1.6;overflow:auto}.toolbar{border-bottom:1px solid var(--line);background:var(--bg);z-index:5;align-items:center;gap:10px;margin-bottom:26px;padding-top:4px;padding-bottom:16px;display:flex;position:sticky;top:0}.toolbar .saved{color:var(--green);font-size:11px}.toolbar .unsaved{color:var(--yellow);font-size:11px}.empty{border:1px dashed var(--line-strong);text-align:center;color:var(--fg-dim);border-radius:3px;padding:40px;font-size:13px}.checkbox-row{align-items:center;gap:10px;padding:10px 0;display:flex}.checkbox-row input[type=checkbox]{accent-color:var(--accent);width:16px;height:16px}.upload-zone{border:1px dashed var(--line-strong);text-align:center;color:var(--fg-dim);cursor:pointer;border-radius:3px;padding:20px;font-size:12px;transition:border-color .18s}.upload-zone:hover{border-color:var(--fg-dim);color:var(--fg)}.upload-zone.has-image{padding:8px}.upload-zone img{max-height:200px;margin:0 auto}.btn.small{padding:8px 12px;font-size:11px}@media (max-width:1000px){.admin-shell{grid-template-columns:1fr}.admin-side,.admin-aside{display:none}}
