:root{--bg:#0a0a0b;--bg-2:#0f1012;--panel:#131417;--border:hsla(0,0%,100%,.1);--ink:#e9ebed;--ink-dim:#c2c6cb;--muted:#868c93;--accent:#17c964;--accent-2:#4ade80;--accent-ink:#042713;--js:#f0db4f;--ts:#4f9fff;--maxw:1200px}[data-theme=light]{--bg:#f5f6f7;--bg-2:#fff;--panel:#fff;--border:rgba(0,0,0,.13);--ink:#15171a;--ink-dim:#2f343a;--muted:#5b6168;--accent:#0a9d4a;--accent-2:#0a9d4a;--accent-ink:#fff}*{box-sizing:border-box}body,html{margin:0}html{scroll-behavior:smooth}body{font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--ink);line-height:1.55;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}::selection{background:rgba(23,201,100,.3)}.ico{width:18px;height:18px;flex-shrink:0}.ico-sm{width:15px;height:15px}.topbar{position:-webkit-sticky;position:sticky;top:0;z-index:50;gap:16px;height:60px;padding:0 22px;background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border)}.brand,.topbar{display:flex;align-items:center}.brand{gap:12px;cursor:pointer;color:inherit;text-decoration:none}.brand:hover{opacity:.85}.monogram{width:36px;height:36px;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:.95rem;color:var(--ink);border:1.5px solid var(--ink)}.brand b{font-weight:700;font-size:.98rem}.topbar .spacer{flex:1 1}.ctrl{gap:4px}.ctrl,.iconbtn{display:flex;align-items:center}.iconbtn{justify-content:center;width:36px;height:36px;border:1px solid var(--border);background:var(--bg-2);color:var(--ink-dim);cursor:pointer;transition:border-color .15s,color .15s}.iconbtn:hover{border-color:var(--accent);color:var(--accent)}.lang{font-size:.78rem;font-weight:600;letter-spacing:.5px;padding:0 10px}.tabnav{position:-webkit-sticky;position:sticky;top:60px;z-index:49;display:flex;gap:2px;padding:0 16px;background:var(--bg);border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:none}.tabnav::-webkit-scrollbar{display:none}.tab{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:.9rem;font-weight:500;padding:14px;white-space:nowrap;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s,border-color .15s}.tab.on,.tab:hover{color:var(--ink)}.tab.on{border-bottom-color:var(--accent)}.tab .ico{width:17px;height:17px}.layout{max-width:var(--maxw);margin:0 auto;display:grid;grid-template-columns:300px 1fr;align-items:start}.sidebar{position:-webkit-sticky;position:sticky;top:110px;padding:32px 26px;border-right:1px solid var(--border)}main{padding:32px 30px;min-width:0}.portrait{position:relative;width:100%;aspect-ratio:3/4;background:linear-gradient(160deg,#1a1d22,#0c0e11);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;margin-bottom:18px;overflow:hidden}.portrait .corner{position:absolute;top:-1px;left:-1px;width:38px;height:38px;background:var(--accent);-webkit-clip-path:polygon(0 0,100% 0,0 100%);clip-path:polygon(0 0,100% 0,0 100%)}.portrait .mono{font-weight:800;font-size:3.4rem;color:#2b3038}.portrait .note{position:absolute;bottom:10px;left:0;right:0;text-align:center;font-size:.66rem;color:#565d66}.portrait img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 22%}.avail{display:inline-flex;align-items:center;gap:7px;font-size:.74rem;font-weight:600;color:var(--accent);border:1px solid var(--accent);padding:5px 10px;margin-bottom:14px}.avail .dot{width:7px;height:7px;background:var(--accent);border-radius:50%;box-shadow:0 0 8px var(--accent)}h1.name{font-size:1.5rem;font-weight:800;margin:0 0 2px;letter-spacing:-.4px}.role{font-size:.82rem;font-weight:500;color:var(--muted);margin:0 0 16px;text-transform:uppercase;letter-spacing:1.5px}.bio{font-size:.9rem;color:var(--ink-dim);margin:0 0 18px}.meta-list{list-style:none;padding:0;margin:0 0 18px;display:flex;flex-direction:column;gap:11px}.meta-list li{display:flex;align-items:center;gap:10px;font-size:.86rem;color:var(--ink-dim)}.meta-list .ico,.meta-list a:hover{color:var(--accent)}.cv-btn{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;padding:12px;font-weight:600;font-size:.88rem;background:var(--accent);color:var(--accent-ink);border:1px solid var(--accent)}.cv-btn:hover{filter:brightness(1.08)}.page{animation:fade .35s ease both}@keyframes fade{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.page-title{font-size:1.4rem;font-weight:800;margin:0 0 4px;letter-spacing:-.4px}.page-sub{color:var(--muted);font-size:.95rem;margin:0 0 26px}.lede{font-size:1.04rem;line-height:1.75;color:var(--ink-dim);margin:0 0 18px;max-width:660px}.lede strong{color:var(--ink);font-weight:600}.quick{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:1px;gap:1px;background:var(--border);border:1px solid var(--border);margin-top:28px}.quick div{background:var(--bg);padding:18px 16px}.quick .k{font-size:.68rem;letter-spacing:1.5px;text-transform:uppercase;color:var(--accent);margin:0 0 6px;font-weight:600}.quick .v{font-size:.92rem;color:var(--ink);font-weight:600;margin:0}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:8px}.toggle{display:flex;border:1px solid var(--border)}.toggle button{display:flex;align-items:center;gap:7px;background:var(--bg-2);border:none;color:var(--muted);cursor:pointer;font:inherit;font-size:.82rem;font-weight:600;padding:8px 14px}.toggle button+button{border-left:1px solid var(--border)}.toggle button.on{background:var(--accent);color:var(--accent-ink)}.tbl{font-size:.78rem;color:var(--muted);font-weight:600}.pill-btn{display:flex;align-items:center;gap:8px;border:1px solid var(--border);background:var(--bg-2);color:var(--ink-dim);font:inherit;font-size:.82rem;font-weight:600;padding:8px 14px;cursor:pointer}.pill-btn:hover{border-color:var(--accent);color:var(--accent)}.searchbox{display:flex;align-items:center;gap:9px;border:1px solid var(--border);background:var(--bg-2);padding:8px 12px;color:var(--muted)}.searchbox input{background:none;border:none;outline:none;color:var(--ink);font:inherit;font-size:.88rem;width:100%}.toolbar-search{flex:1 1;min-width:180px}.tags{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0 4px}.tagchip{font-size:.78rem;font-weight:600;padding:6px 13px;cursor:pointer;border:1px solid var(--border);background:var(--bg-2);color:var(--muted)}.tagchip:hover{color:var(--ink)}.tagchip.on{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.projects{margin-top:14px}.projects.list .proj{display:block;padding:22px 0;border-bottom:1px solid var(--border)}.projects.list .proj-thumb{display:none}.proj-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:7px}.proj-title{font-size:1.12rem;font-weight:700;color:var(--accent-2)}.proj:hover .proj-title{text-decoration:underline}.badge{font-size:.64rem;font-weight:700;letter-spacing:.5px;text-transform:uppercase;padding:3px 8px;border:1px solid var(--border);color:var(--muted)}.badge.live{color:var(--accent)}.badge.feat,.badge.live{border-color:var(--accent)}.badge.feat{color:var(--accent-ink);background:var(--accent)}.proj-desc{font-size:.92rem;color:var(--ink-dim);margin:0 0 12px;max-width:720px}.proj-meta{flex-wrap:wrap;gap:18px;font-size:.82rem;color:var(--muted)}.proj-meta,.proj-meta .m{display:flex;align-items:center}.proj-meta .m{gap:7px}.proj-meta a.m:hover{color:var(--accent)}.lang-dot{width:11px;height:11px;border-radius:50%}.projects.grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:18px;gap:18px}.projects.grid .proj{border:1px solid var(--border);background:var(--panel)}.projects.grid .proj-thumb{display:block;height:130px;border-bottom:1px solid var(--border);background:linear-gradient(135deg,rgba(23,201,100,.25),rgba(0,0,0,.5))}.projects.grid .proj-body{padding:18px}.projects.grid .proj-desc{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.cards{display:grid;grid-template-columns:1fr 1fr;grid-gap:1px;gap:1px;background:var(--border);border:1px solid var(--border)}.cards article{background:var(--bg);padding:24px}.cards .full{grid-column:1/-1}.cards .ck{display:flex;align-items:center;gap:10px;margin:0 0 10px}.cards .ck .ico{color:var(--accent)}.cards h3{font-size:1.04rem;font-weight:700;margin:0}.cards p{font-size:.9rem;color:var(--ink-dim);margin:0}.res-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:36px;gap:36px}.res-block h2{font-size:.82rem;letter-spacing:1.5px;text-transform:uppercase;color:var(--accent);margin:0 0 18px;font-weight:700}.timeline{border-left:1px solid var(--border);padding-left:22px}.tl{position:relative;padding-bottom:22px}.tl:last-child{padding-bottom:0}.tl:before{content:"";position:absolute;left:-26px;top:5px;width:9px;height:9px;background:var(--accent)}.tl h3{font-size:1rem;margin:0 0 3px}.tl .when{font-size:.78rem;color:var(--accent-2);font-weight:600;margin:0 0 6px}.tl p{font-size:.88rem;color:var(--ink-dim);margin:0}.skill{margin-bottom:15px}.skill-head{display:flex;justify-content:space-between;font-size:.85rem;margin-bottom:6px}.skill-head .lvl{color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.track{height:6px;background:var(--border);overflow:hidden}.fill{height:100%;width:0;background:var(--accent);transition:width 1s cubic-bezier(.2,.7,.2,1)}.contact-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:36px;gap:36px}.field{display:flex;flex-direction:column;gap:7px;margin-bottom:16px}.field label{font-size:.76rem;letter-spacing:1px;text-transform:uppercase;color:var(--muted);font-weight:600}.field input,.field textarea{background:var(--bg-2);border:1px solid var(--border);color:var(--ink);font:inherit;font-size:.92rem;padding:11px 13px;outline:none;width:100%}.field input:focus,.field textarea:focus{border-color:var(--accent)}.field textarea{resize:vertical;min-height:120px}.send{display:inline-flex;align-items:center;gap:8px;cursor:pointer;background:var(--accent);color:var(--accent-ink);border:1px solid var(--accent);font:inherit;font-weight:600;font-size:.9rem;padding:12px 24px}.send:hover{filter:brightness(1.08)}.fab{position:fixed;right:24px;bottom:24px;z-index:60;display:flex;align-items:center;gap:9px;cursor:pointer;background:var(--panel);border:1px solid var(--border);color:var(--ink);padding:12px 16px;font:inherit;font-weight:600;font-size:.86rem;box-shadow:0 12px 30px rgba(0,0,0,.4)}.fab:hover{border-color:var(--accent)}.fab .ico{color:var(--accent)}.helper{position:fixed;right:24px;bottom:76px;z-index:60;width:300px;background:var(--panel);border:1px solid var(--border);box-shadow:0 16px 40px rgba(0,0,0,.5);animation:fade .25s ease both}.helper-head{padding:14px 16px;border-bottom:1px solid var(--border);font-weight:700;font-size:.92rem;display:flex;align-items:center;gap:9px}.helper-head .ico{color:var(--accent)}.helper-body{padding:14px 16px}.helper-q{display:flex;flex-direction:column;gap:8px}.helper-q button{text-align:left;background:var(--bg-2);border:1px solid var(--border);color:var(--ink-dim);font:inherit;font-size:.83rem;padding:9px 12px;cursor:pointer}.helper-q button:hover{border-color:var(--accent);color:var(--ink)}.helper-a{font-size:.86rem;color:var(--ink-dim);line-height:1.6;margin:0 0 12px}.helper-back{background:none;border:none;color:var(--accent);font:inherit;font-size:.8rem;font-weight:600;cursor:pointer;padding:0}.menu-btn{display:none;align-items:center;justify-content:center;width:38px;height:38px;border:1px solid var(--border);background:var(--bg-2);color:var(--ink);cursor:pointer}.menu-btn:hover{border-color:var(--accent);color:var(--accent)}.menu-btn svg{width:20px;height:20px}@media (max-width:920px){.layout{grid-template-columns:1fr}.sidebar{position:static;border-right:none;border-bottom:1px solid var(--border)}.sidebar .inner{max-width:460px;margin:0 auto}.portrait{max-width:260px;margin:0 auto 18px}main{padding:24px 20px}.cards,.contact-grid,.projects.grid,.quick,.res-grid{grid-template-columns:1fr}.desktop-only{display:none!important}.menu-btn{display:flex}body[data-route]:not([data-route="/"]) .sidebar{display:none}}@media (max-width:520px){.topbar{padding:0 14px}.brand b{display:none}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.menu-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.55);opacity:0;pointer-events:none;transition:opacity .25s ease;z-index:90}.menu-backdrop.show{opacity:1;pointer-events:auto}.mobile-menu{display:none;position:fixed;top:0;right:0;height:100dvh;width:min(86vw,360px);background:var(--bg-2);border-left:1px solid var(--border);z-index:100;overflow-y:auto;padding:22px 20px 40px;-webkit-overflow-scrolling:touch}.mobile-menu.open{display:flex;flex-direction:column;animation:mmSlideIn .28s cubic-bezier(.2,.7,.2,1)}@keyframes mmSlideIn{0%{transform:translateX(100%)}to{transform:translateX(0)}}.mm-close{position:absolute;top:16px;right:16px;width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:none;border:1px solid var(--border);color:var(--ink-dim);cursor:pointer}.mm-close:hover{color:var(--ink);border-color:var(--accent)}.mm-close svg{width:18px;height:18px}.mm-profile{text-align:center;padding:8px 0 18px;border-bottom:1px solid var(--border);margin-bottom:18px}.mm-avatar{width:84px;height:84px;border-radius:50%;overflow:hidden;margin:0 auto 12px;border:2px solid var(--accent);background:linear-gradient(160deg,#1a1d22,#0c0e11);display:flex;align-items:center;justify-content:center}.mm-avatar img{width:100%;height:100%;object-fit:cover;object-position:center 22%}.mm-avatar span{font-weight:800;font-size:1.6rem;color:#2b3038}.mm-profile h2{margin:0;font-size:1.25rem}.mm-role{margin:2px 0 10px;font-size:.76rem;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted)}.mm-bio{margin:0;font-size:.86rem;color:var(--ink-dim);line-height:1.5}.mm-section{margin-bottom:22px}.mm-label{font-size:.68rem;letter-spacing:1.6px;text-transform:uppercase;color:var(--muted);margin:0 0 10px}.mm-pair{display:grid;grid-template-columns:1fr 1fr;grid-gap:8px;gap:8px;margin-bottom:8px}.mm-pair button{display:flex;align-items:center;justify-content:center;gap:7px;padding:10px;font:inherit;font-size:.85rem;color:var(--ink-dim);background:var(--panel);border:1px solid var(--border);cursor:pointer}.mm-pair button:hover{color:var(--ink);border-color:var(--accent)}.mm-pair button.on{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}.mm-pair button svg{width:16px;height:16px}.mm-links,.mm-nav{display:flex;flex-direction:column;gap:2px}.mm-links a,.mm-nav a{display:flex;align-items:center;gap:12px;padding:12px 10px;font-size:.95rem;color:var(--ink-dim);border-radius:6px}.mm-links a svg,.mm-nav a svg{width:18px;height:18px;flex-shrink:0}.mm-links a:hover,.mm-nav a:hover{background:var(--panel);color:var(--ink)}.mm-nav a.on{color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,transparent)}.mm-links a span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mm-links{font-size:.9rem}