:root{--bg: #ebe9e2;--ink: #111110;--paper: #ffffff;--line: #111110;--hair: #cdcabf;--accent: #2b2bff;--accent-2: #ff4d2b;--muted: #76746c;--soft: #d8d5cc;--fill: #111110;--fill-ink: #ebe9e2;--on-accent: #ffffff;--dot: rgba(17, 17, 16, .05)}html[data-theme=dark]{--bg: #16150f;--ink: #ece7d8;--paper: #1e1d16;--line: #3c3b31;--hair: #2a2922;--accent: #8f8fff;--accent-2: #ff9264;--muted: #8c897b;--soft: #2a2920;--fill: #2c2b21;--fill-ink: #f3efe2;--on-accent: #1a190f;--dot: rgba(236, 231, 216, .05)}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--ink)}body{font-family:Space Grotesk,sans-serif;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;background-image:radial-gradient(var(--dot) 1px,transparent 1px);background-size:22px 22px;background-position:-1px -1px}a{color:inherit;text-decoration:none}.mono{font-family:JetBrains Mono,monospace}::selection{background:var(--accent);color:var(--on-accent)}.nav{position:sticky;top:0;z-index:40;display:flex;align-items:stretch;border-bottom:2px solid var(--line);background:var(--bg);height:52px}.nav .brand{display:flex;align-items:center;padding:0 20px;font-weight:700;font-size:15px;letter-spacing:-.02em;border-right:2px solid var(--line);white-space:nowrap}.nav .menu{display:flex;flex:1}.nav .menu a{display:flex;align-items:center;padding:0 18px;font-family:JetBrains Mono,monospace;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);border-right:1px solid var(--soft);transition:all .15s}.nav .menu a:hover{background:var(--fill);color:var(--fill-ink)}.nav .menu a.active{color:var(--ink);background:transparent}.nav .menu a.active:before{content:"→ ";color:var(--accent-2)}.nav .right{display:flex}.nav .right button,.nav .right .lang-wrap>button{height:100%;border:0;border-left:2px solid var(--line);background:transparent;color:var(--ink);cursor:pointer;font-family:JetBrains Mono,monospace;font-size:12px;padding:0 16px;display:flex;align-items:center;gap:6px;transition:all .15s}.nav .right button:hover{background:var(--accent);color:var(--on-accent)}.lang-wrap{position:relative}.lang-menu{position:absolute;top:100%;right:0;min-width:160px;background:var(--paper);border:2px solid var(--line);border-top:0;display:none;z-index:50}.lang-menu.open{display:block}.lang-menu button{width:100%;border:0;border-bottom:1px solid var(--soft);background:transparent;color:var(--ink);font-family:JetBrains Mono,monospace;font-size:12px;padding:10px 14px;text-align:left;cursor:pointer;display:flex;justify-content:space-between}.lang-menu button:last-child{border-bottom:0}.lang-menu button:hover{background:var(--fill);color:var(--fill-ink)}.lang-menu button[aria-current=true]{color:var(--accent-2)}.nav .right .nav-toggle{display:none;height:100%;width:52px;border:0;border-left:2px solid var(--line);background:transparent;color:var(--ink);cursor:pointer;align-items:center;justify-content:center;padding:0}.nav-toggle:hover{background:var(--accent);color:var(--on-accent)}.nav-toggle .bars,.nav-toggle .bars:before,.nav-toggle .bars:after{content:"";display:block;width:20px;height:2px;background:currentColor;transition:transform .2s ease,opacity .2s ease}.nav-toggle .bars{position:relative}.nav-toggle .bars:before{position:absolute;top:-6px;left:0}.nav-toggle .bars:after{position:absolute;top:6px;left:0}.nav-toggle[aria-expanded=true] .bars{background:transparent}.nav-toggle[aria-expanded=true] .bars:before{top:0;transform:rotate(45deg)}.nav-toggle[aria-expanded=true] .bars:after{top:0;transform:rotate(-45deg)}.nav .right .nav-toggle[aria-expanded=true]{background:var(--accent);color:var(--on-accent)}.hero{border-bottom:2px solid var(--line);padding:clamp(40px,8vw,64px) clamp(20px,5vw,40px) clamp(36px,7vw,56px);position:relative;overflow:hidden}.hero .tagrow{display:flex;flex-wrap:wrap;gap:0;font-family:JetBrains Mono,monospace;font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);border:1px solid var(--line);width:fit-content;max-width:100%;margin-bottom:clamp(24px,5vw,36px)}.hero .tagrow span{padding:5px 12px;border-right:1px solid var(--line)}.hero .tagrow span:last-child{border-right:0}.hero .tagrow .on{background:var(--accent-2);color:var(--on-accent)}.hero h1{font-size:clamp(44px,13vw,104px);line-height:.86;font-weight:700;letter-spacing:-.04em;margin:0;text-transform:uppercase;max-width:1100px}.hero h1 .o{-webkit-text-stroke:2px var(--ink);color:transparent}.hero .sub{display:grid;grid-template-columns:1fr auto;gap:30px;align-items:end;margin-top:44px;border-top:2px solid var(--line);padding-top:24px}.hero .sub p{margin:0;font-size:17px;max-width:460px}.hero .sub .actions{display:flex;gap:12px}.btn{font-family:JetBrains Mono,monospace;font-size:12px;text-transform:uppercase;letter-spacing:.06em;padding:12px 18px;border:2px solid var(--line);background:var(--ink);color:var(--bg);cursor:pointer;transition:all .15s;display:inline-flex;align-items:center;gap:8px}.btn:hover{background:var(--accent);border-color:var(--accent);color:var(--on-accent);transform:translate(-2px,-2px);box-shadow:4px 4px 0 var(--line)}.btn.ghost{background:transparent;color:var(--ink)}.btn.ghost:hover{background:var(--fill);color:var(--fill-ink);box-shadow:4px 4px 0 var(--accent-2)}section{border-bottom:2px solid var(--line);opacity:1}@keyframes secIn{0%{opacity:0}to{opacity:1}}section.in{animation:secIn .6s ease both}.sec-head{display:grid;grid-template-columns:80px 1fr;align-items:center;border-bottom:2px solid var(--line)}.sec-head .idx{font-family:JetBrains Mono,monospace;font-size:13px;font-weight:700;padding:16px;border-right:2px solid var(--line);background:var(--accent);color:var(--on-accent);text-align:center}.sec-head h2{margin:0;padding:14px clamp(16px,4vw,24px);font-size:clamp(22px,6vw,30px);font-weight:700;text-transform:uppercase;letter-spacing:-.02em}.sec-body{padding:clamp(20px,5vw,36px) clamp(16px,5vw,40px) clamp(28px,6vw,48px)}.about-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:0;border:2px solid var(--line)}.about-grid .txt{padding:30px;border-right:2px solid var(--line)}.about-grid .txt p{margin:0 0 16px}.about-grid .txt p:last-child{margin:0}.about-grid .side{padding:30px;background:var(--paper);font-family:JetBrains Mono,monospace;font-size:12px}.about-grid .side .k{color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-size:10.5px}.about-grid .side .row{padding:12px 0;border-bottom:1px solid var(--soft)}.about-grid .side .row:last-child{border-bottom:0}.about-grid .side .v{font-size:14px;margin-top:2px;font-family:Space Grotesk,sans-serif}.stack{display:grid;grid-template-columns:repeat(2,1fr);border:2px solid var(--line)}.stack-cell{padding:22px 24px;border-right:2px solid var(--line);border-bottom:2px solid var(--line)}.stack-cell:nth-child(2n){border-right:0}.stack-cell:nth-last-child(-n+2){border-bottom:0}.stack-cell .cat{font-family:JetBrains Mono,monospace;font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--accent-2);margin-bottom:14px}.stack-cell .items{display:flex;flex-wrap:wrap;gap:8px}.stack-cell .chip{font-family:JetBrains Mono,monospace;font-size:12.5px;padding:5px 11px;border:1.5px solid var(--line);transition:all .15s}.stack-cell .chip:hover{background:var(--fill);color:var(--fill-ink);transform:translate(-1px,-1px);box-shadow:2px 2px 0 var(--accent)}.proj{display:grid;grid-template-columns:repeat(2,1fr);border:2px solid var(--line)}.pcell{padding:26px;border-right:2px solid var(--line);min-height:170px;display:flex;flex-direction:column;justify-content:space-between;transition:all .2s}.pcell:last-child{border-right:0}.pcell:hover{background:var(--paper)}.pcell .pn{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--muted)}.pcell .pt{font-size:26px;font-weight:700;text-transform:uppercase;color:var(--muted);margin-top:12px}.pcell.filled .pt{color:var(--ink)}.pcell .pd{font-size:13px;color:var(--muted);margin-top:6px}.pcell .pb{font-family:JetBrains Mono,monospace;font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--on-accent);background:var(--accent-2);padding:3px 9px;align-self:flex-start;margin-top:16px}.proj-note{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--muted);padding:16px clamp(16px,5vw,40px);border-top:2px solid var(--line)}.langs{border:2px solid var(--line)}.lrow{display:grid;grid-template-columns:200px 1fr 120px;align-items:center;border-bottom:1.5px solid var(--soft)}.lrow:last-child{border-bottom:0}.lrow .ln{padding:18px 24px;font-size:19px;font-weight:600;border-right:1.5px solid var(--soft)}.lrow .lt{height:100%;position:relative;min-height:56px}.lrow .lt .fill{position:absolute;inset:0 auto 0 0;width:0;background:var(--accent);transition:width 1.2s cubic-bezier(.22,1,.36,1)}.lrow .ll{padding:0 18px;font-family:JetBrains Mono,monospace;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);text-align:right}.contact{display:grid;grid-template-columns:1fr}.crow{display:grid;grid-template-columns:160px 1fr 50px;align-items:center;border-bottom:2px solid var(--line);transition:all .15s}.crow:last-of-type{border-bottom:0}.crow:hover{background:var(--fill);color:var(--fill-ink)}.crow:hover .ck{color:var(--fill-ink);border-color:var(--fill-ink)}.crow .ck{font-family:JetBrains Mono,monospace;font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted);padding:22px 24px;border-right:2px solid var(--line)}.crow .cv2{padding:0 24px;font-size:20px;font-weight:600}.crow .ca{text-align:center;font-size:18px}.contact-cta{padding:clamp(20px,5vw,28px) clamp(16px,5vw,40px);border-top:2px solid var(--line);display:flex;flex-wrap:wrap;gap:14px}.footer{padding:clamp(22px,5vw,30px) clamp(16px,5vw,40px);font-family:JetBrains Mono,monospace;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}@media(max-width:1040px){.nav .menu a{padding:0 13px}}@media(max-width:920px){.nav .right .nav-toggle{display:flex}.nav .right{margin-left:auto}.nav .menu{position:absolute;top:100%;left:0;right:0;z-index:45;flex:none;flex-direction:column;background:var(--bg);border-bottom:2px solid var(--line);box-shadow:0 10px 24px #1111101f;display:none}.nav .menu.open{display:flex}.nav .menu a{padding:15px 22px;font-size:13px;border-right:0;border-bottom:1px solid var(--soft)}.nav .menu a:last-child{border-bottom:0}.about-grid,.stack,.proj{grid-template-columns:1fr}.about-grid .txt{border-right:0;border-bottom:2px solid var(--line)}.stack-cell,.stack-cell:nth-child(2n){border-right:0}.stack-cell,.stack-cell:nth-last-child(-n+2){border-bottom:2px solid var(--line)}.stack-cell:last-child{border-bottom:0}.pcell{border-right:0;border-bottom:2px solid var(--line);min-height:0}.pcell:last-child{border-bottom:0}.sec-head{grid-template-columns:56px 1fr}.sec-head .idx{padding:12px}}@media(max-width:760px){.hero .sub{grid-template-columns:1fr;gap:22px;align-items:start}.hero .sub p{max-width:none;font-size:16px}.hero .sub .actions{width:100%;flex-wrap:wrap}.hero .sub .actions .btn{flex:1 1 auto;justify-content:center}.lrow{grid-template-columns:1fr auto;grid-template-areas:"name level" "track track";align-items:center}.lrow .ln{grid-area:name;border-right:0;padding:14px 20px 8px;font-size:17px}.lrow .ll{grid-area:level;padding:14px 20px 8px;text-align:right}.lrow .lt{grid-area:track;min-height:14px;background:var(--soft);border-top:1.5px solid var(--soft)}.crow{grid-template-columns:1fr 46px;grid-template-areas:"key arrow" "val arrow";align-items:center}.crow .ck{grid-area:key;border-right:0;padding:16px 20px 2px}.crow .cv2{grid-area:val;padding:0 20px 16px;font-size:17px;overflow-wrap:anywhere}.crow .ca{grid-area:arrow;align-self:center;border-left:2px solid var(--line);padding:18px 0;height:100%;display:flex;align-items:center;justify-content:center}.crow:hover .ca{border-color:var(--fill-ink)}}@media(max-width:420px){.nav .brand{padding:0 14px;font-size:14px}.nav .right button,.nav .right .lang-wrap>button{padding:0 12px}.nav .right .nav-toggle{width:46px}.about-grid .txt,.about-grid .side{padding:22px}.stack-cell,.pcell{padding:18px 20px}}@media(max-width:400px){.hero .tagrow{flex-direction:column}.hero .tagrow span{border-right:0;border-bottom:1px solid var(--line)}.hero .tagrow span:last-child{border-bottom:0}}@media(prefers-reduced-motion:reduce){section.in{animation:none}.lrow .lt .fill{transition:none}.btn:hover{transform:none}}
