@import "https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,500..800&family=Hanken+Grotesk:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap";:root{--bg:#f7f6f2;--surface:#fff;--surface-2:#fbfaf7;--line:#e7e4dc;--line-2:#efece5;--ink:#17171c;--ink-2:#55555f;--ink-3:#8b8b95;--c1:#6d3bf5;--c2:#ff5c47;--c3:#07b6a3;--c4:#f59e0b;--c5:#2f6bff;--c6:#ec4899;--primary:var(--c1);--font-disp:"Bricolage Grotesque", system-ui, sans-serif;--font-body:"Hanken Grotesk", system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--pad:clamp(1.25rem, 4vw, 4rem);--maxw:1180px;--radius:16px;--shadow:0 1px 2px #14141e0a, 0 12px 32px -16px #1414282e}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{color:var(--ink);font-family:var(--font-body);-webkit-font-smoothing:antialiased;background:radial-gradient(1100px 620px at 12% -8%, #6d3bf521, transparent 60%), radial-gradient(1000px 520px at 102% -2%, #ff5c471c, transparent 58%), radial-gradient(900px 520px at 50% 112%, #07b6a31a, transparent 62%), var(--bg);background-attachment:fixed;font-size:16.5px;line-height:1.6;overflow-x:hidden}::selection{background:var(--c1);color:#fff}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}.wrap{max-width:var(--maxw);padding-inline:var(--pad);margin-inline:auto}.mono{font-family:var(--font-mono);letter-spacing:.02em;color:var(--ink-3);font-size:.74rem}.tag{font-family:var(--font-mono);color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);white-space:nowrap;border-radius:7px;padding:.24rem .55rem;font-size:.72rem}.sec-label{align-items:center;gap:.9rem;margin-bottom:2.6rem;display:flex}.sec-label .num{font-family:var(--font-mono);color:var(--primary);font-size:.82rem;font-weight:700}.sec-label .txt{font-family:var(--font-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);font-size:.76rem}.sec-label .rule{background:var(--line);flex:1;height:1px}section{padding-block:clamp(3.5rem,8vw,7rem)}h2.h{font-family:var(--font-disp);letter-spacing:-.02em;font-size:clamp(2rem,5.5vw,3.4rem);font-weight:800;line-height:1}.nav{z-index:50;padding:.8rem var(--pad);background:color-mix(in srgb, var(--bg) 80%, transparent);backdrop-filter:blur(12px)saturate(1.4);border-bottom:1px solid var(--line-2);justify-content:space-between;align-items:center;display:flex;position:fixed;inset:0 0 auto}.nav .brand{font-family:var(--font-mono);letter-spacing:-.01em;align-items:center;gap:.55rem;font-weight:700;display:flex}.nav .dot{background:var(--c3);width:9px;height:9px;box-shadow:0 0 0 4px color-mix(in srgb, var(--c3) 22%, transparent);border-radius:50%}.nav .links{gap:1.5rem;display:flex}.nav .links a{font-family:var(--font-mono);color:var(--ink-2);font-size:.8rem;transition:color .18s}.nav .links a:hover{color:var(--primary)}@media (width<=720px){.nav .links{display:none}}.hero{padding-top:clamp(7rem,15vh,10rem);padding-bottom:clamp(3rem,7vw,5rem)}.hero .grid{grid-template-columns:1.55fr 1fr;align-items:end;gap:clamp(1.5rem,4vw,4rem);display:grid}@media (width<=900px){.hero .grid{grid-template-columns:1fr}}.hero .kicker{color:var(--ink-2);font-family:var(--font-mono);margin-bottom:1.5rem;font-size:.82rem}.hero .kicker b{color:var(--c2);font-weight:700}.hero h1{font-family:var(--font-disp);letter-spacing:-.035em;font-size:clamp(3rem,11vw,7.4rem);font-weight:800;line-height:.9}.hero h1 .line2{background:linear-gradient(100deg, var(--c1), var(--c5) 45%, var(--c2));color:#0000;background-clip:text}.hero .sub{max-width:48ch;color:var(--ink-2);margin-top:1.6rem;font-size:clamp(1.05rem,1.6vw,1.22rem)}.hero .sub .sig{color:var(--ink);box-shadow:inset 0 -.5em 0 color-mix(in srgb, var(--c4) 26%, transparent);font-weight:600}.spec{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.spec .row{border-bottom:1px solid var(--line-2);font-family:var(--font-mono);justify-content:space-between;gap:1rem;padding:.8rem 1.1rem;font-size:.76rem;display:flex}.spec .row:last-child{border-bottom:0}.spec .row .k{color:var(--ink-3)}.spec .row .v{color:var(--ink);text-align:right;font-weight:500}.spec .row .v.on{color:var(--c3)}.cta-row{flex-wrap:wrap;gap:.75rem;margin-top:2.2rem;display:flex}.btn{font-family:var(--font-mono);border:1px solid var(--line);color:var(--ink);background:var(--surface);box-shadow:var(--shadow);border-radius:11px;align-items:center;gap:.5rem;padding:.8rem 1.35rem;font-size:.82rem;font-weight:500;transition:all .18s;display:inline-flex}.btn:hover{border-color:var(--primary);color:var(--primary);transform:translateY(-2px)}.btn.primary{background:var(--primary);color:#fff;border-color:#0000}.btn.primary:hover{background:color-mix(in srgb, var(--primary) 88%, #000);color:#fff;box-shadow:0 14px 30px -12px var(--primary)}.projects .grid{grid-template-columns:repeat(2,1fr);gap:1.1rem;display:grid}@media (width<=760px){.projects .grid{grid-template-columns:1fr}}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:.95rem;padding:1.6rem 1.6rem 1.4rem;transition:transform .2s,box-shadow .2s,border-color .2s;display:flex;position:relative;overflow:hidden}.card:hover{box-shadow:var(--shadow);transform:translateY(-4px)}.card:before{content:"";background:var(--accent);opacity:.9;width:100%;height:4px;position:absolute;top:0;left:0}.card:nth-child(6n+1){--accent:var(--c1)}.card:nth-child(6n+2){--accent:var(--c2)}.card:nth-child(6n+3){--accent:var(--c3)}.card:nth-child(6n+4){--accent:var(--c5)}.card:nth-child(6n+5){--accent:var(--c4)}.card:nth-child(6n+6){--accent:var(--c6)}.card:hover{border-color:color-mix(in srgb, var(--accent) 55%, var(--line))}.card .top{justify-content:space-between;align-items:center;gap:1rem;display:flex}.card .code{font-family:var(--font-mono);color:var(--accent);background:color-mix(in srgb, var(--accent) 12%, transparent);border-radius:6px;padding:.15rem .5rem;font-size:.82rem;font-weight:700}.card .status{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.03em;color:var(--ink-3);align-items:center;gap:.4rem;font-size:.66rem;display:inline-flex}.card .status:before{content:"";background:var(--ink-3);border-radius:50%;width:7px;height:7px}.card .status.live:before{background:var(--c3);box-shadow:0 0 0 3px color-mix(in srgb, var(--c3) 20%, transparent)}.card .status.dev:before{background:var(--c4);box-shadow:0 0 0 3px color-mix(in srgb, var(--c4) 20%, transparent)}.card h3{font-family:var(--font-disp);letter-spacing:-.02em;font-size:1.5rem;font-weight:700}.card .tagline{color:var(--ink-2);margin-top:-.35rem;font-size:.92rem;font-weight:500}.card p{color:var(--ink-2);font-size:.92rem;line-height:1.6}.card .stack{flex-wrap:wrap;gap:.4rem;margin-top:auto;display:flex}.card .stores{flex-wrap:wrap;gap:.4rem;margin-top:.15rem;display:flex}.card .store{font-family:var(--font-mono);color:var(--c3);border:1px solid color-mix(in srgb, var(--c3) 35%, transparent);background:color-mix(in srgb, var(--c3) 10%, transparent);white-space:nowrap;border-radius:7px;padding:.24rem .55rem;font-size:.68rem;transition:all .15s}.card a.store:hover{background:color-mix(in srgb, var(--c3) 20%, transparent);transform:translateY(-1px)}.card .foot{border-top:1px solid var(--line-2);justify-content:space-between;align-items:center;margin-top:.2rem;padding-top:.5rem;display:flex}.card .link{font-family:var(--font-mono);color:var(--accent);gap:.3rem;font-size:.76rem;font-weight:500;display:inline-flex}.card .link:hover{text-decoration:underline}.card .year{font-family:var(--font-mono);color:var(--ink-3);font-size:.72rem}.skills .grid{grid-template-columns:repeat(3,1fr);gap:1rem;display:grid}@media (width<=900px){.skills .grid{grid-template-columns:repeat(2,1fr)}}@media (width<=560px){.skills .grid{grid-template-columns:1fr}}.skill{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;gap:1rem;padding:1.4rem 1.5rem;transition:transform .18s,box-shadow .18s;display:flex}.skill:hover{box-shadow:var(--shadow);transform:translateY(-3px)}.skill .glabel{font-family:var(--font-mono);letter-spacing:.02em;font-size:.78rem;font-weight:700}.skill:nth-child(7n+1) .glabel{color:var(--c1)}.skill:nth-child(7n+2) .glabel{color:var(--c2)}.skill:nth-child(7n+3) .glabel{color:var(--c3)}.skill:nth-child(7n+4) .glabel{color:var(--c5)}.skill:nth-child(7n+5) .glabel{color:var(--c4)}.skill:nth-child(7n+6) .glabel{color:var(--c6)}.skill:nth-child(7n+7) .glabel{color:var(--c1)}.skill .tags{flex-wrap:wrap;gap:.45rem;display:flex}.skill .tags .tag{color:var(--ink);font-size:.76rem}.caps .grid{grid-template-columns:1fr 1fr;gap:1.1rem;display:grid}@media (width<=760px){.caps .grid{grid-template-columns:1fr}}.cap{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:2rem 1.9rem}.cap .hd{align-items:center;gap:.8rem;margin-bottom:1.4rem;display:flex}.cap .badge{font-family:var(--font-mono);color:#fff;background:var(--c5);border-radius:8px;padding:.25rem .6rem;font-size:.72rem;font-weight:700}.cap.ind .badge{background:var(--c1)}.cap h3{font-family:var(--font-disp);letter-spacing:-.02em;font-size:1.4rem;font-weight:700}.cap ul{flex-direction:column;list-style:none;display:flex}.cap li{border-top:1px solid var(--line-2);color:var(--ink-2);gap:.75rem;padding:.8rem 0;font-size:.95rem;display:flex}.cap li:first-child{border-top:0}.cap li:before{content:"→";color:var(--c5);font-family:var(--font-mono);font-weight:700}.cap.ind li:before{color:var(--c1)}.about-grid{grid-template-columns:1fr 1.15fr;align-items:start;gap:clamp(2rem,5vw,4.5rem);display:grid}@media (width<=860px){.about-grid{grid-template-columns:1fr}}.bio h2.h{margin-bottom:1.6rem}.bio p{color:var(--ink-2);margin-bottom:1.15rem;font-size:1.04rem;line-height:1.7}.bio p .sig{color:var(--ink);box-shadow:inset 0 -.5em 0 color-mix(in srgb, var(--c3) 22%, transparent);font-weight:600}.facts{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);margin-top:1.6rem;overflow:hidden}.facts .row{border-bottom:1px solid var(--line-2);font-family:var(--font-mono);justify-content:space-between;padding:.8rem 1.1rem;font-size:.78rem;display:flex}.facts .row:last-child{border-bottom:0}.facts .k{color:var(--ink-3)}.facts .v{color:var(--ink);font-weight:500}.cv-block{margin-bottom:2.2rem}.cv-block:last-child{margin-bottom:0}.cv-block .glabel{font-family:var(--font-mono);color:var(--c1);letter-spacing:.06em;text-transform:uppercase;margin-bottom:1.3rem;font-size:.8rem;font-weight:700;display:block}.timeline{flex-direction:column;list-style:none;display:flex}.timeline li{border-left:2px solid var(--line);padding:0 0 1.6rem 1.5rem;position:relative}.timeline li:last-child{padding-bottom:0}.timeline li:before{content:"";background:var(--surface);border:2px solid var(--c1);border-radius:50%;width:12px;height:12px;position:absolute;top:3px;left:-7px}.timeline li:first-child:before{background:var(--c1);box-shadow:0 0 0 4px color-mix(in srgb, var(--c1) 20%, transparent)}.tl-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:1rem;display:flex}.tl-role{font-family:var(--font-disp);color:var(--ink);letter-spacing:-.01em;font-size:1.08rem;font-weight:700}.tl-period{color:var(--ink-3);white-space:nowrap;font-size:.72rem}.tl-company{color:var(--c5);font-size:.9rem;font-weight:600}.tl-note{color:var(--ink-2);margin-top:.35rem;font-size:.9rem;line-height:1.55}.edu{flex-direction:column;list-style:none;display:flex}.edu li{border-top:1px solid var(--line-2);color:var(--ink-2);gap:.7rem;padding:.75rem 0;font-size:.94rem;display:flex}.edu li:first-child{border-top:0;padding-top:0}.edu li:before{content:"▹";color:var(--c2);font-weight:700}.contact{text-align:center}.contact .big{font-family:var(--font-disp);letter-spacing:-.03em;margin-top:.5rem;font-size:clamp(2.4rem,8vw,5.5rem);font-weight:800;line-height:1}.contact .big a{background:linear-gradient(100deg, var(--c1), var(--c2));color:#0000;background-clip:text;transition:opacity .2s}.contact .big a:hover{opacity:.75}.contact .mono{color:var(--ink-2);margin-top:1.8rem}.footer{border-top:1px solid var(--line);margin-top:2rem;padding-block:2.4rem}.footer .row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.footer .mono{color:var(--ink-3)}.rise{opacity:0;animation:.8s cubic-bezier(.2,.7,.2,1) forwards rise;transform:translateY(20px)}@keyframes rise{to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.rise{opacity:1;animation:none;transform:none}}
