:root{--bg:#fff;--bg-elev:#f9fafb;--surface:#f3f4f6;--surface-2:#e5e7eb;--line:#d1d5db;--line-soft:#e5e7eb;--ink:#111827;--ink-2:#374151;--ink-3:#6b7280;--accent:#3b82f6;--accent-ink:#2563eb;--accent-soft:#dbeafe;--accent-line:#93c5fd;--on-accent:#fff;--radius:14px;--radius-sm:10px;--radius-lg:20px;--font-sans:"Hanken Grotesk", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--shadow:0 1px 3px #00000014, 0 4px 12px #0000001f;--sidebar-w:306px;--maxw:880px;--maxw-wide:1160px}[data-theme=dark]{--bg:#0f172a;--bg-elev:#1e293b;--surface:#334155;--surface-2:#475569;--line:#64748b;--line-soft:#475569;--ink:#f1f5f9;--ink-2:#cbd5e1;--ink-3:#94a3b8;--accent:#60a5fa;--accent-ink:#93c5fd;--accent-soft:#1e3a8a;--accent-line:#3b82f6;--on-accent:#fff;--shadow:0 1px 3px #0006, 0 4px 12px #0009}*{box-sizing:border-box}html,body{height:100%}body{font-family:var(--font-sans);background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:20.5px;line-height:1.6;transition:background .35s,color .35s}::selection{background:var(--accent-soft)}a{color:inherit}button{font-family:inherit}.mono{font-family:var(--font-mono);font-feature-settings:"ss01"}.eyebrow{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--accent-ink);font-size:14.5px;font-weight:500}#root{height:100dvh}.app{height:100dvh;display:flex;overflow:hidden}.neural-bg{z-index:0;pointer-events:none;position:fixed;inset:0}.sidebar,.main{z-index:1;position:relative}.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);background:var(--bg-elev);border-right:1px solid var(--line);flex-direction:column;min-width:0;height:100dvh;transition:width .28s cubic-bezier(.22,.61,.36,1),flex-basis .28s cubic-bezier(.22,.61,.36,1);display:flex;position:relative}.sidebar.collapsed{flex-basis:76px;width:76px}.sidebar.dragging{-webkit-user-select:none;user-select:none;transition:none}.sb-resize{cursor:col-resize;z-index:30;width:8px;height:100%;position:absolute;top:0;right:-4px}.sb-resize:after{content:"";background:0 0;width:2px;height:100%;transition:background .18s;position:absolute;top:0;left:3px}.sb-resize:hover:after{background:var(--accent-line)}.sidebar.collapsed .sb-resize{display:none}.sb-inner{flex-direction:column;height:100%;padding:18px 14px 14px;display:flex;overflow:hidden}.sb-head{flex-shrink:0;align-items:center;gap:6px;padding:6px 4px 14px;display:flex;position:relative}.sb-home{border-radius:var(--radius-sm);cursor:pointer;text-align:left;min-width:0;color:inherit;background:0 0;border:none;flex:1;align-items:center;gap:12px;padding:6px 8px;display:flex}.sb-home:hover{background:var(--surface)}.sb-collapse{width:30px;height:30px;color:var(--ink-3);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;flex:none;place-items:center;transition:background .15s,color .15s;display:grid}.sb-collapse:hover{background:var(--surface);color:var(--ink)}.sb-collapse svg{stroke:currentColor;fill:none;stroke-width:1.6px;width:18px;height:18px}.avatar{object-fit:cover;object-position:50% 22%;border:1px solid var(--line);background:var(--surface-2);border-radius:50%;flex:none;width:42px;height:42px}.sb-collapsed-only{display:none}.sidebar.collapsed .sb-collapsed-only{display:flex}.sb-id{min-width:0;line-height:1.25}.sb-name{letter-spacing:-.01em;white-space:nowrap;color:var(--ink);font-size:18px;font-weight:600}.sb-tag{color:var(--ink-3);white-space:nowrap;text-overflow:ellipsis;font-size:13.5px;overflow:hidden}.sidebar.collapsed .sb-id,.sidebar.collapsed .sb-head-meta{display:none}.sidebar.collapsed .sb-head{flex-direction:column;gap:8px;padding:6px 0 14px}.sidebar.collapsed .sb-home{justify-content:center;padding:6px}.sb-nav{scrollbar-width:thin;scrollbar-color:var(--line) transparent;flex-direction:column;flex:1;gap:2px;min-height:0;margin-top:6px;display:flex;overflow:hidden auto}.sb-nav::-webkit-scrollbar{width:6px}.sb-nav::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px}.sb-nav::-webkit-scrollbar-track{background:0 0}.sb-section-label{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);padding:12px 10px 6px;font-size:12.5px}.sidebar.collapsed .sb-section-label,.sidebar.collapsed .social-row{display:none}.sidebar.collapsed .sb-nav{scrollbar-width:none;margin-top:2px;overflow:hidden}.sidebar.collapsed .sb-nav::-webkit-scrollbar{display:none}.sidebar.collapsed .sb-foot{padding-top:10px}.navitem{border-radius:var(--radius-sm);color:var(--ink-2);cursor:pointer;text-align:left;white-space:nowrap;background:0 0;border:none;align-items:center;gap:13px;width:100%;padding:10px 11px;font-size:19.5px;font-weight:500;transition:background .15s,color .15s;display:flex}.navitem:hover{background:var(--surface);color:var(--ink)}.navitem.active{background:var(--accent-soft);color:var(--accent-ink)}.navitem .ico{flex:0 0 21px;place-items:center;width:21px;height:21px;display:grid}.navitem .ico svg{stroke:currentColor;fill:none;stroke-width:1.6px;width:21px;height:21px}.sidebar.collapsed .navitem{justify-content:center;padding:11px 0}.sidebar.collapsed .navitem .lbl{display:none}.sb-foot{border-top:1px solid var(--line-soft);flex-direction:column;flex-shrink:0;gap:8px;padding-top:12px;display:flex}.sidebar.collapsed .sb-foot .btn .lbl{display:none}.sidebar.collapsed .sb-foot .btn{justify-content:center;padding:10px 0}.btn{border-radius:var(--radius-sm);border:1px solid var(--line);color:var(--ink);cursor:pointer;white-space:nowrap;background:0 0;justify-content:center;align-items:center;gap:9px;padding:11px 16px;font-size:19px;font-weight:500;text-decoration:none;transition:background .16s,border-color .16s,transform .16s,color .16s;display:inline-flex}.btn:hover{background:var(--surface);border-color:var(--ink-3);transform:translateY(-1px)}.btn:active{transform:translateY(1px)}.btn .ico svg{stroke:currentColor;fill:none;stroke-width:1.6px;width:16px;height:16px}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn.primary:hover{background:var(--accent-ink);border-color:var(--accent-ink)}.btn.ghost{color:var(--ink-2);border-color:#0000}.btn.ghost:hover{color:var(--ink);background:var(--surface)}.btn.block{width:100%}.btn.sm{padding:7px 12px;font-size:16.5px}.dropdown{position:relative}.menu{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);z-index:40;padding:6px;animation:.16s pop;position:absolute;bottom:calc(100% + 8px);left:0;right:0}@keyframes pop{0%{opacity:0;transform:translateY(4px)}}.menu-row{color:var(--ink-2);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:8px;justify-content:space-between;align-items:center;gap:10px;width:100%;padding:9px 10px;font-size:17.5px;display:flex}.menu-row:hover{background:var(--surface);color:var(--ink)}.menu-sep{background:var(--line-soft);height:1px;margin:5px 4px}.switch{background:var(--surface-2);border:1px solid var(--line);border-radius:999px;flex:none;width:36px;height:20px;transition:background .2s;position:relative}.switch.on{background:var(--accent);border-color:var(--accent)}.switch:after{content:"";background:var(--bg-elev);border-radius:50%;width:16px;height:16px;transition:transform .2s;position:absolute;top:1px;left:1px}.switch.on:after{background:var(--on-accent);transform:translate(16px)}.main{scroll-behavior:smooth;flex:1;min-width:0;height:100dvh;position:relative;overflow-y:auto}.topbar{z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#fffc;border-bottom:1px solid #0000;align-items:center;gap:12px;height:64px;padding:14px 28px;transition:border-color .2s;display:flex;position:sticky;top:0}[data-theme=dark] .topbar{background:#0f172acc}.topbar.scrolled{border-color:var(--line-soft)}.icon-btn{width:34px;height:34px;color:var(--ink-2);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:9px;place-items:center;transition:background .15s,color .15s;display:grid}.icon-btn:hover{background:var(--surface);color:var(--ink)}.icon-btn svg{stroke:currentColor;fill:none;stroke-width:1.7px;width:18px;height:18px}.crumb{font-family:var(--font-mono);letter-spacing:.04em;color:var(--ink-3);font-size:15px}.crumb b{color:var(--ink-2);font-weight:500}.page{max-width:var(--maxw);margin:0 auto;padding:34px 48px 130px;animation:.5s cubic-bezier(.22,.61,.36,1) rise}.page.wide{max-width:var(--maxw-wide)}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}.reveal{opacity:0;transition:opacity .6s cubic-bezier(.22,.61,.36,1),transform .6s cubic-bezier(.22,.61,.36,1);transform:translateY(18px)}.reveal.in{opacity:1;transform:translateY(0)}@media (prefers-reduced-motion:reduce){.reveal{opacity:1;transition:none;transform:none}}.page-head{margin-bottom:46px}.page-head h1{letter-spacing:-.025em;margin:14px 0 12px;font-size:clamp(30px,3.4vw,42px);font-weight:700}.page-head p{color:var(--ink-2);text-wrap:pretty;max-width:65ch;margin:0;font-size:18.5px}.card{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);padding:22px 24px;transition:border-color .18s,transform .18s,box-shadow .18s}.card.hover:hover{border-color:var(--accent-line);box-shadow:var(--shadow);transform:translateY(-3px)}.stack{flex-direction:column;gap:16px;display:flex}.stack-lg{flex-direction:column;gap:22px;display:flex}.timeline{flex-direction:column;gap:10px;display:flex}.tl-item{border-top:1px solid var(--line-soft);grid-template-columns:130px 1fr;gap:24px;padding:22px 0;transition:padding-left .2s;display:grid}.tl-item:hover{padding-left:6px}.tl-item:first-child{border-top:none}.tl-when{font-family:var(--font-mono);color:var(--ink-3);padding-top:3px;font-size:15px;line-height:1.5}.tl-body h3{letter-spacing:-.01em;margin:0 0 2px;font-size:21.5px;font-weight:600}.tl-org{color:var(--accent-ink);margin-bottom:10px;font-size:19px;font-weight:500}.tl-body ul{color:var(--ink-2);margin:8px 0 0;padding-left:18px;font-size:20px}.tl-body ul li{margin:5px 0;padding-left:2px}.tl-body ul li::marker{color:var(--accent)}.meta-row{flex-wrap:wrap;align-items:center;gap:8px;margin-top:4px;display:flex}.tag{font-family:var(--font-mono);background:var(--surface);border:1px solid var(--line-soft);color:var(--ink-2);white-space:nowrap;border-radius:7px;padding:5px 10px;font-size:15.5px}.tag.accent{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent-ink)}.proj-filters{flex-wrap:wrap;gap:8px;margin-bottom:28px;display:flex}.qlink.active{color:var(--accent-ink);border-color:var(--accent-line);background:var(--accent-soft)}.grid2{grid-template-columns:1fr 1fr;gap:16px;display:grid}@media (width<=720px){.grid2{grid-template-columns:1fr}}.proj{flex-direction:column;gap:14px;min-height:180px;display:flex}.proj-thumb{aspect-ratio:16/9;border-radius:var(--radius-sm);border:1px solid var(--line);background:var(--surface);width:100%;margin-bottom:2px;position:relative;overflow:hidden}.proj-thumb img{object-fit:cover;width:100%;height:100%;transition:transform .5s cubic-bezier(.22,.61,.36,1);display:block}.proj.clickable:hover .proj-thumb img{transform:scale(1.06)}.proj-featured{position:absolute;top:10px;right:10px}.proj-top{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.proj h3{letter-spacing:-.01em;margin:0;font-size:23px;font-weight:650}.proj .kicker{font-family:var(--font-mono);color:var(--ink-3);letter-spacing:.04em;font-size:14px}.proj p{color:var(--ink-2);text-wrap:pretty;flex:1;margin:0;font-size:20px}.proj-foot{flex-wrap:wrap;align-items:center;gap:7px;display:flex}.dot{background:var(--accent);border-radius:50%;flex:none;width:7px;height:7px}.skill-group{margin-bottom:26px}.skill-group h3{font-size:16.5px;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--ink-3);margin:0 0 14px;font-weight:500}.chips{flex-wrap:wrap;gap:9px;display:flex}.chip{border:1px solid var(--line);background:var(--bg-elev);color:var(--ink);border-radius:999px;padding:9px 15px;font-size:19px;font-weight:500;transition:border-color .16s,background .16s,transform .16s}.chip:hover{border-color:var(--accent-line);transform:translateY(-1px)}.chip .lvl{color:var(--accent-ink);font-family:var(--font-mono);margin-left:6px;font-size:14px}.hero{grid-template-columns:1.15fr .85fr;align-items:center;gap:64px;max-width:1240px;margin:0 auto;padding:28px 48px 0;display:grid}@media (width<=900px){.hero{grid-template-columns:1fr;gap:36px;max-width:600px;padding:60px 28px}.hero-photo{order:-1;max-width:100%;max-height:400px}}@media (width<=600px){.hero{gap:28px;padding:50px 18px 60px}.hero-photo{max-height:350px}}.hero-l{animation:.6s cubic-bezier(.22,.61,.36,1) rise}.hero h1{letter-spacing:-.035em;text-align:left;margin:18px 0 0;font-size:clamp(38px,6.4vw,72px);font-weight:700;line-height:1}@media (width<=600px){.hero h1{font-size:clamp(28px,7vw,40px)}}.hero h1 .accent{color:var(--accent-ink)}.hero .lead{color:var(--ink-2);text-wrap:pretty;max-width:50ch;margin:24px 0 0;font-size:25.5px}.hero-stats{flex-wrap:wrap;gap:26px;margin:30px 0;display:flex}.hero-stat .n{letter-spacing:-.02em;font-size:32px;font-weight:700}.hero-stat .l{color:var(--ink-3);font-size:15.5px;font-family:var(--font-mono)}.hero-cta{flex-wrap:wrap;gap:12px;display:flex}.quick-links{flex-wrap:wrap;gap:10px;margin-top:30px;display:flex}.qlink{border:1px solid var(--line);background:var(--bg-elev);color:var(--ink-2);cursor:pointer;border-radius:999px;align-items:center;gap:7px;padding:7px 13px;font-size:17px;transition:all .16s;display:inline-flex}.qlink:hover{color:var(--accent-ink);border-color:var(--accent-line);background:var(--accent-soft)}.qlink .ar{transition:transform .18s}.qlink:hover .ar{transform:translate(2px)}.hero-photo{border-radius:var(--radius-lg);border:1px solid var(--line);aspect-ratio:3/3.7;background:linear-gradient(135deg, var(--surface) 0%, var(--surface-2) 100%);box-shadow:var(--shadow);justify-content:center;align-items:center;width:100%;max-width:100%;min-height:300px;margin:0 auto;animation:.7s cubic-bezier(.22,.61,.36,1) rise;display:flex;position:relative;overflow:hidden}.hero-photo img{object-fit:cover;object-position:50% 18%;background:var(--surface);width:100%;height:100%;display:block}@media (width<=900px){.hero-photo{aspect-ratio:3/3.7;max-width:400px;min-height:320px}}@media (width<=600px){.hero-photo{aspect-ratio:1/1.2;width:100%;max-width:280px;min-height:280px;margin:0 auto}}.hero-photo .badge{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);font-family:var(--font-mono);border-radius:999px;align-items:center;gap:8px;padding:7px 13px;font-size:14.5px;display:flex;position:absolute;bottom:14px;left:14px}.pulse{background:#10b981;border-radius:50%;width:8px;height:8px;animation:2s infinite pulse;box-shadow:0 0 #10b98180}@keyframes pulse{70%{box-shadow:0 0 0 7px #10b98100}to{box-shadow:0 0 #10b98100}}.chat{flex-direction:column;height:100dvh;display:flex}.chat-scroll{flex:1;padding:60px 0 24px;overflow-y:auto}.chat-thread{flex-direction:column;gap:26px;max-width:720px;margin:0 auto;padding:0 24px;display:flex}.msg{gap:14px;animation:.35s rise;display:flex}.msg.user{justify-content:flex-end}.msg .who{width:30px;height:30px;font-size:15px;font-weight:700;font-family:var(--font-mono);border-radius:8px;flex:0 0 30px;place-items:center;margin-top:1px;padding:0;display:grid;overflow:hidden}.msg .who img{object-fit:cover;object-position:50% 20%;width:100%;height:100%}.msg .bubble{min-width:0;padding-top:2px}.msg.user .bubble{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius);max-width:80%;padding:10px 16px}.msg .name{color:var(--ink-3);font-size:15.5px;font-weight:600;font-family:var(--font-mono);letter-spacing:.02em;margin-bottom:5px}.msg .text{color:var(--ink);font-size:19.5px;line-height:1.65}.msg .text p{margin:0 0 10px}.msg .text p:last-child{margin-bottom:0}.msg .text strong{font-weight:650}.msg .text ul{margin:8px 0;padding-left:18px}.msg .text li{margin:4px 0}.typing{gap:4px;padding:4px 0;display:inline-flex}.typing span{background:var(--ink-3);border-radius:50%;width:7px;height:7px;animation:1.2s infinite blink}.typing span:nth-child(2){animation-delay:.18s}.typing span:nth-child(3){animation-delay:.36s}@keyframes blink{0%,60%,to{opacity:.25;transform:translateY(0)}30%{opacity:1;transform:translateY(-3px)}}.section-link-card{border:1px solid var(--accent-line);background:var(--accent-soft);border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:12px;margin-top:14px;padding:12px 15px;transition:transform .16s,box-shadow .16s;display:inline-flex}.section-link-card:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.section-link-card .slc-ico{background:var(--accent);width:34px;height:34px;color:var(--on-accent);border-radius:8px;flex:none;place-items:center;display:grid}.section-link-card .slc-ico svg{stroke:currentColor;fill:none;stroke-width:1.7px;width:18px;height:18px}.section-link-card .slc-t{font-size:19.5px;font-weight:600}.section-link-card .slc-s{color:var(--ink-3);font-size:15.5px}.section-link-card .slc-ar{color:var(--accent-ink);margin-left:8px}.chat-foot{border-top:1px solid var(--line-soft);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#ffffffb3;padding:14px 0 18px}[data-theme=dark] .chat-foot{background:#0f172ab3}.chat-foot-inner{max-width:720px;margin:0 auto;padding:0 24px}.suggest{flex-wrap:wrap;gap:8px;margin-bottom:12px;display:flex}.suggest .qlink{font-size:16.5px}.composer{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius);align-items:flex-end;gap:10px;padding:10px 10px 10px 16px;transition:border-color .18s,box-shadow .18s;display:flex}.composer:focus-within{border-color:var(--accent-line);box-shadow:0 0 0 4px var(--accent-soft)}.composer textarea{resize:none;font-family:var(--font-sans);color:var(--ink);background:0 0;border:none;outline:none;flex:1;max-height:160px;padding:6px 0;font-size:19.5px;line-height:1.55}.composer textarea::placeholder{color:var(--ink-3)}.send-btn{background:var(--accent);width:38px;height:38px;color:var(--on-accent);cursor:pointer;border:none;border-radius:10px;flex:none;place-items:center;transition:background .16s,opacity .16s,transform .16s;display:grid}.send-btn:hover{background:var(--accent-ink)}.send-btn:disabled{opacity:.4;cursor:default}.send-btn svg{width:18px;height:18px}.chat-disclaimer{text-align:center;color:var(--ink-3);font-size:14.5px;font-family:var(--font-mono);margin-top:9px}.scrim,.mobile-only{display:none}@media (width<=760px){.sidebar{z-index:60;box-shadow:var(--shadow);transition:transform .28s cubic-bezier(.22,.61,.36,1);position:fixed;top:0;left:0;transform:translate(0)}.sidebar.mobile-hidden{transform:translate(-104%)}.sb-resize{display:none}.scrim.show{z-index:50;background:#0000004d;display:block;position:fixed;inset:0}.mobile-only{display:grid}.page{padding:60px 18px 100px}.hero{padding:50px 18px 60px}.topbar{padding:12px 16px}}.hero-divider{background:var(--accent);border-radius:2px;width:38px;height:3px}.contact-grid{grid-template-columns:1fr 1fr;gap:12px;display:grid}@media (width<=600px){.contact-grid{grid-template-columns:1fr}}.contact-row{border:1px solid var(--line);border-radius:var(--radius);background:var(--bg-elev);align-items:center;gap:13px;padding:15px 16px;text-decoration:none;transition:all .16s;display:flex}.contact-row:hover{border-color:var(--accent-line);background:var(--surface)}.contact-row .ci{background:var(--surface-2);width:36px;height:36px;color:var(--accent-ink);border-radius:9px;flex:none;place-items:center;display:grid}.contact-row .ci svg{stroke:currentColor;fill:none;stroke-width:1.6px;width:18px;height:18px}.contact-row .cl{font-size:14px;font-family:var(--font-mono);color:var(--ink-3);text-transform:uppercase;letter-spacing:.08em}.contact-row .cv{color:var(--ink);font-size:19.5px;font-weight:500}.memory-game{margin-top:4px}.memory-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:16px;display:flex}.memory-title{font-size:20px;font-weight:650}.memory-sub{color:var(--ink-3);margin-top:2px;font-size:16.5px}.memory-stats{align-items:center;gap:14px;display:flex}.memory-stat{text-align:right}.memory-stat span{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;color:var(--ink-3);font-size:12px;display:block}.memory-stat b{font-family:var(--font-mono);font-size:20px;font-weight:600}.memory-done{background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--accent-ink);border-radius:var(--radius-sm);margin-bottom:16px;padding:10px 16px;font-size:17.5px;font-weight:500}.memory-grid{grid-template-columns:repeat(8,1fr);gap:8px;max-width:560px;display:grid}@media (width<=600px){.memory-grid{grid-template-columns:repeat(8,1fr);gap:5px}}.memory-card{aspect-ratio:1;cursor:pointer;perspective:600px;background:0 0;border:none;padding:0}.memory-card-inner{width:100%;height:100%;transform-style:preserve-3d;transition:transform .35s cubic-bezier(.22,.61,.36,1);position:relative}.memory-card.flipped .memory-card-inner{transform:rotateY(180deg)}.memory-card-back,.memory-card-front{backface-visibility:hidden;border:1px solid var(--line);border-radius:7px;place-items:center;display:grid;position:absolute;inset:0}.memory-card-back{background:var(--surface);color:var(--ink-3)}.memory-card-back svg{stroke:currentColor;fill:none;stroke-width:1.6px;opacity:.5;width:40%;height:40%}.memory-card-front{background:var(--bg-elev);color:var(--ink);transform:rotateY(180deg)}.memory-card-front.accent{color:var(--accent-ink);background:var(--accent-soft);border-color:var(--accent-line)}.memory-card-front svg{stroke:currentColor;fill:none;stroke-width:1.6px;width:46%;height:46%}.memory-card.matched .memory-card-front{opacity:.45}.social-row{justify-content:space-between;gap:8px;padding:2px 2px 10px;display:flex}.soc{border:1px solid var(--line);background:var(--bg-elev);height:38px;color:var(--ink-2);font-family:var(--font-mono);letter-spacing:.02em;cursor:pointer;border-radius:9px;flex:1 1 0;place-items:center;font-size:15.5px;font-weight:500;text-decoration:none;transition:all .16s;display:grid}.soc:hover{background:var(--accent);border-color:var(--accent);color:var(--on-accent);transform:translateY(-1px)}.sidebar.collapsed .social-row{flex-direction:column}.toggle-stack{z-index:70;gap:8px;display:flex;position:fixed;top:14px;right:18px}.theme-toggle{border:1px solid var(--line);background:color-mix(in oklch, var(--bg-elev) 86%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);width:38px;height:38px;color:var(--ink-2);cursor:pointer;border-radius:10px;place-items:center;transition:all .18s;display:grid}.theme-toggle:hover{color:var(--ink);border-color:var(--ink-3);background:var(--bg-elev)}.theme-toggle svg{stroke:currentColor;fill:none;stroke-width:1.7px;width:18px;height:18px}.hero-ask-wrap{max-width:440px;margin-top:30px;position:relative}.hero-ask-wrap:before{content:"";background:conic-gradient(from var(--glow-angle,0deg), var(--accent) 0%, var(--accent-line) 25%, transparent 45%, transparent 55%, var(--accent-line) 75%, var(--accent) 100%);filter:blur(14px);opacity:.55;z-index:0;pointer-events:none;border-radius:999px;transition:opacity .3s,filter .3s;animation:5s linear infinite glow-spin;position:absolute;inset:-3px}.hero-ask-wrap:focus-within:before{opacity:.9;filter:blur(18px)}@property --glow-angle{syntax:"<angle>";inherits:false;initial-value:0deg}@keyframes glow-spin{to{--glow-angle:360deg}}@media (prefers-reduced-motion:reduce){.hero-ask-wrap:before{animation:none}}.hero-ask{z-index:1;background:var(--bg-elev);border:1px solid var(--line);border-radius:999px;align-items:center;gap:8px;padding:7px 7px 7px 16px;transition:border-color .18s,box-shadow .18s,transform .18s;animation:3.2s ease-in-out infinite ask-pulse;display:flex;position:relative}.hero-ask:focus-within{border-color:var(--accent-line);box-shadow:0 0 0 4px var(--accent-soft), 0 8px 28px -8px var(--accent);animation:none;transform:translateY(-1px)}@keyframes ask-pulse{0%,to{box-shadow:0 0 0 0 var(--accent-soft)}50%{box-shadow:0 0 0 6px transparent, 0 4px 22px -6px var(--accent-line)}}@media (prefers-reduced-motion:reduce){.hero-ask{animation:none}}.hero-ask-spark{width:18px;height:18px;color:var(--accent-ink);flex:none;place-items:center;animation:2.4s ease-in-out infinite spark-twinkle;display:grid}.hero-ask-spark svg{width:16px;height:16px}@keyframes spark-twinkle{0%,to{opacity:.55;transform:scale(.9)rotate(0)}50%{opacity:1;transform:scale(1.08)rotate(8deg)}}@media (prefers-reduced-motion:reduce){.hero-ask-spark{animation:none}}.hero-ask input{font-family:var(--font-sans);color:var(--ink);background:0 0;border:none;outline:none;flex:1;font-size:19px}.hero-ask input::placeholder{color:var(--ink-3)}.hero-ask .send-btn{border-radius:999px;width:40px;height:40px}.hero-hint{color:var(--ink-3);flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;font-size:16.5px;display:flex}.hero-hint .try{font-family:var(--font-mono);font-size:15px}.hero-hint button{cursor:pointer;color:var(--accent-ink);font-size:16.5px;font-family:var(--font-sans);text-underline-offset:2px;background:0 0;border:none;padding:0;text-decoration:underline}.blog-list{flex-direction:column;display:flex}.blog-item{border-top:1px solid var(--line-soft);cursor:pointer;grid-template-columns:1fr auto;align-items:start;gap:20px;padding:26px 0;transition:padding-left .2s;display:grid}.blog-item:first-child{border-top:none}.blog-item:hover{padding-left:8px}.blog-meta{align-items:center;gap:10px;margin-bottom:9px;display:flex}.blog-date{font-family:var(--font-mono);color:var(--ink-3);font-size:15px}.blog-item h3{letter-spacing:-.015em;margin:0 0 9px;font-size:28px;font-weight:650;line-height:1.25}.blog-item:hover h3{color:var(--accent-ink)}.blog-item p{color:var(--ink-2);text-wrap:pretty;max-width:62ch;margin:0;font-size:19.5px}.blog-read{font-family:var(--font-mono);color:var(--ink-3);white-space:nowrap;padding-top:3px;font-size:14.5px}.blog-more{color:var(--accent-ink);align-items:center;gap:5px;margin-top:10px;font-size:16.5px;font-weight:600;display:inline-flex}.modal.post .blog-meta{margin-bottom:14px}.modal.post .blog-meta .blog-read{margin-left:auto}.blog-actions{gap:10px;margin:22px 0 6px;display:flex}.blog-comments{border-top:1px solid var(--line-soft);margin-top:26px;padding-top:20px}.blog-no-comments{color:var(--ink-3);margin:0 0 12px;font-size:18px}.blog-comment-list{flex-direction:column;gap:10px;margin:0 0 14px;padding:0;list-style:none;display:flex}.blog-comment-list li{background:var(--surface);border-radius:var(--radius-sm);color:var(--ink-2);padding:10px 14px;font-size:17.5px}.blog-comment-form{gap:10px;display:flex}.blog-comment-form input{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg-elev);color:var(--ink);flex:1;padding:10px 14px;font-family:inherit;font-size:17.5px}.blog-comment-form input:focus{border-color:var(--accent-line);box-shadow:0 0 0 4px var(--accent-soft);outline:none}.gallery-grid{grid-template-columns:repeat(4,1fr);gap:20px;display:grid}@media (width<=1080px){.gallery-grid{grid-template-columns:repeat(3,1fr)}}@media (width<=720px){.gallery-grid{grid-template-columns:repeat(2,1fr)}}.gallery-cell{cursor:pointer;flex-direction:column;gap:10px;display:flex}.gallery-frame{aspect-ratio:1;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);width:100%;transition:border-color .2s,transform .25s cubic-bezier(.22,.61,.36,1),box-shadow .25s;display:block;position:relative;overflow:hidden}.gallery-cell:nth-child(3n+1) .gallery-frame{aspect-ratio:1/1.18}.gallery-cell:nth-child(3n+2) .gallery-frame{aspect-ratio:1/.85}.gallery-cell:hover .gallery-frame{border-color:var(--accent-line);box-shadow:var(--shadow);transform:translateY(-4px)}.gallery-frame img{object-fit:cover;width:100%;height:100%;transition:transform .5s cubic-bezier(.22,.61,.36,1);display:block}.gallery-cell:hover .gallery-frame img{transform:scale(1.08)}.gallery-placeholder{width:100%;height:100%;color:var(--ink-3);background:linear-gradient(135deg, var(--surface) 0%, var(--surface-2) 100%);justify-content:center;align-items:center;transition:color .2s;display:flex}.gallery-cell:hover .gallery-placeholder{color:var(--accent-ink)}.gallery-zoom{color:#fff;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);opacity:0;background:#1118278c;border-radius:8px;place-items:center;width:30px;height:30px;transition:opacity .2s,transform .2s;display:grid;position:absolute;top:10px;right:10px;transform:translateY(-4px)}.gallery-cell:hover .gallery-zoom{opacity:1;transform:translateY(0)}.gallery-tag{font-family:var(--font-mono);color:#fff;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);letter-spacing:.02em;background:#1118278c;border-radius:999px;padding:4px 9px;font-size:11.5px;position:absolute;bottom:10px;left:10px}.gallery-cell .cap{font-family:var(--font-mono);color:var(--ink-3);letter-spacing:.02em;padding-left:2px;font-size:15.5px}.lightbox-scrim{gap:18px}.lightbox{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-lg);width:100%;max-width:620px;max-height:calc(100vh - 48px);box-shadow:var(--shadow);padding:20px 24px 26px;animation:.2s pop;position:relative;overflow-y:auto}.lightbox-frame{aspect-ratio:4/3;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);width:100%;margin-top:6px;overflow:hidden}.lightbox-frame img{object-fit:cover;width:100%;height:100%;display:block}.gallery-placeholder.lg{color:var(--ink-3)}.lightbox-meta{align-items:center;gap:10px;margin-top:18px;display:flex}.lightbox-title{letter-spacing:-.015em;margin:8px 0 4px;font-size:22px;font-weight:700}.lightbox-desc{color:var(--ink-2);text-wrap:pretty;margin:0;font-size:16px;line-height:1.6}.lightbox-nav{color:#fff;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#11182766;border:1px solid #ffffff40;border-radius:50%;flex:none;place-items:center;width:44px;height:44px;transition:background .15s,transform .15s;display:grid}.lightbox-nav:hover{background:#111827a6;transform:scale(1.06)}@media (width<=720px){.lightbox-scrim{gap:8px}.lightbox-nav{width:36px;height:36px}}.soc svg{display:block}.modal-scrim{z-index:90;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:oklch(20% .01 60/.42);place-items:center;padding:24px;animation:.18s fadein;display:grid;position:fixed;inset:0}@keyframes fadein{0%{opacity:0}}.modal{background:var(--bg-elev);border:1px solid var(--line);border-radius:var(--radius-lg);width:100%;max-width:460px;max-height:calc(100vh - 48px);box-shadow:var(--shadow);padding:28px 28px 24px;animation:.2s pop;position:relative;overflow-y:auto}.modal.project{max-width:560px}.modal.post{max-width:680px}.modal-x{width:32px;height:32px;color:var(--ink-3);cursor:pointer;background:0 0;border:none;border-radius:8px;place-items:center;transition:background .15s,color .15s;display:grid;position:absolute;top:16px;right:16px}.modal-x:hover{background:var(--surface);color:var(--ink)}.modal-head h2{letter-spacing:-.02em;margin:8px 0 6px;font-size:29px;font-weight:700}.modal-head p{color:var(--ink-2);text-wrap:pretty;max-width:42ch;margin:0 0 20px;font-size:19.5px}.modal-form{flex-direction:column;gap:16px;display:flex}.field{flex-direction:column;gap:7px;display:flex}.field span{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);font-size:14px}.field input,.field textarea,.field select{font-family:var(--font-sans);color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:var(--radius-sm);resize:vertical;outline:none;padding:11px 13px;font-size:19px;transition:border-color .16s,box-shadow .16s}.field input::placeholder,.field textarea::placeholder{color:var(--ink-3)}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--accent-line);box-shadow:0 0 0 4px var(--accent-soft)}.field input[aria-invalid=true]{border-color:#ef4444}.field-error{color:#ef4444;margin-top:-2px;font-size:15.5px}.modal-actions{justify-content:flex-end;gap:10px;margin-top:4px;display:flex}.modal-sent{color:var(--ink);align-items:center;gap:12px;padding:28px 4px;font-size:20px;font-weight:500;display:flex}.sent-dot{background:oklch(65% .16 145);border-radius:50%;width:11px;height:11px;animation:1.5s infinite pulse;box-shadow:0 0 oklch(65% .16 145/.5)}.proj.clickable{cursor:pointer}.proj.clickable:hover h3{color:var(--accent-ink)}.proj-more{font-family:var(--font-mono);color:var(--accent-ink);align-items:center;gap:5px;margin-top:2px;font-size:14.5px;display:inline-flex}.proj-more svg,.blog-more svg{transition:transform .18s}.proj.clickable:hover .proj-more svg,.blog-item:hover .blog-more svg{transform:translate(3px)}.pm-media{aspect-ratio:16/9;border-radius:var(--radius);border:1px solid var(--line);background:var(--surface);width:100%;margin-bottom:18px;position:relative;overflow:hidden}.pm-media img{object-fit:cover;width:100%;height:100%;display:block}.pm-media-nav{color:#fff;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#11182773;border:1px solid #ffffff40;border-radius:50%;place-items:center;width:34px;height:34px;transition:background .15s,transform .15s;display:grid;position:absolute;top:50%;transform:translateY(-50%)}.pm-media-nav:hover{background:#111827b3}.pm-media-nav.prev{left:10px}.pm-media-nav.next{right:10px}.pm-media-count{font-family:var(--font-mono);color:#fff;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#1118278c;border-radius:999px;padding:4px 9px;font-size:11.5px;position:absolute;bottom:10px;right:10px}.proj-thumb-count{font-family:var(--font-mono);color:#fff;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#1118278c;border-radius:999px;align-items:center;gap:5px;padding:4px 9px;font-size:11.5px;display:inline-flex;position:absolute;bottom:10px;right:10px}.pm-kicker{font-family:var(--font-mono);color:var(--ink-3);letter-spacing:.04em;font-size:14.5px}.pm-title{letter-spacing:-.02em;margin:6px 0 12px;padding-right:28px;font-size:32px;font-weight:700;line-height:1.1}.pm-meta{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}.pm-long{color:var(--ink-2);text-wrap:pretty;margin:0 0 18px;font-size:19px;line-height:1.65}.blog-body{color:var(--ink-2);text-wrap:pretty;margin:0 0 20px;font-size:19.5px;line-height:1.75}.blog-body p{margin:0 0 16px}.blog-body p:last-child{margin-bottom:0}.pm-sub{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin:0 0 10px;font-size:14px}.pm-highlights{flex-direction:column;gap:9px;margin:0 0 20px;padding:0;list-style:none;display:flex}.pm-highlights li{color:var(--ink);align-items:flex-start;gap:11px;font-size:19.5px;line-height:1.5;display:flex}.pm-highlights li .dot{margin-top:7px}.pm-tags{border-top:1px solid var(--line-soft);flex-wrap:wrap;gap:7px;padding-top:16px;display:flex}.pm-links{flex-wrap:wrap;gap:10px;margin-top:18px;display:flex}.pm-links .btn .ico svg{display:block}@media (width<=980px){.hero{gap:36px}}@media (width<=600px){.page-head h1{font-size:34px}.hero h1{font-size:clamp(34px,10vw,44px)}.grid2{grid-template-columns:1fr}.tl-item{grid-template-columns:1fr;gap:6px}.tl-when{padding-top:0}.gallery-grid{grid-template-columns:repeat(2,1fr)}.modal{border-radius:var(--radius);padding:22px 20px 20px}.pm-title{font-size:28px}.blog-item{grid-template-columns:1fr;gap:8px}.blog-read{order:-1}.hero-ask-wrap{max-width:none}}@media (width<=380px){.gallery-grid{grid-template-columns:1fr}}
