:root{--bg:#0b1020;--bg2:#0f172a;--card:#131c33;--line:#1f2b4a;--text:#e2e8f0;--muted:#8ea0c0;--accent:#7dd3fc;--accent2:#a5b4fc;--font-body:"Inter",system-ui,sans-serif;--font-head:"Plus Jakarta Sans","Inter",system-ui,sans-serif;--font-mono:"Fira Code",ui-monospace,monospace}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:80px}body{background:var(--bg);color:var(--text);font:16px/1.7 var(--font-body);-webkit-font-smoothing:antialiased}.wrap{max-width:960px;margin:0 auto;padding:0 24px}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}code,.mono{font-family:var(--font-mono)}b,strong{font-weight:600;color:var(--text)}.topnav{position:sticky;top:0;z-index:50;backdrop-filter:blur(10px);background:#0b1020d1;border-bottom:1px solid var(--line)}.topnav .wrap{display:flex;align-items:center;justify-content:space-between;height:58px;gap:12px}.topnav .brand{font-family:var(--font-mono);font-size:14.5px;color:var(--text);white-space:nowrap}.topnav .brand b{color:var(--accent)}.topnav nav{display:flex;gap:18px;flex-wrap:wrap;overflow-x:auto}.topnav nav a{color:var(--muted);font-size:13.5px;white-space:nowrap}.topnav nav a:hover{color:var(--text);text-decoration:none}.topnav .cta{border:1px solid var(--accent);border-radius:8px;padding:5px 13px;font-size:13px;color:var(--accent);white-space:nowrap;transition:.15s}.topnav .cta:hover{background:#7dd3fc1f;text-decoration:none}.hero{position:relative;overflow:hidden;padding:110px 0 70px;background:radial-gradient(700px 340px at 15% -10%,rgba(125,211,252,.14),transparent 60%),radial-gradient(600px 300px at 90% 0%,rgba(165,180,252,.13),transparent 60%)}.kicker{color:var(--accent);letter-spacing:.18em;font-size:13px;text-transform:uppercase;font-family:var(--font-mono)}h1{font-family:var(--font-head);font-size:clamp(34px,6vw,54px);line-height:1.1;margin:14px 0 6px;font-weight:800}h1 .dim{color:var(--muted);font-weight:300}.lead{max-width:720px;color:var(--muted);font-size:18px;margin-top:14px}.lead b{color:var(--text);font-weight:600}.role-line{font-family:var(--font-mono);color:var(--accent);font-size:17px;margin:12px 0 4px}.hero-grid{display:grid;grid-template-columns:1fr auto;gap:28px;align-items:center}.hero-photo{width:186px;height:186px;border-radius:26px;object-fit:cover;border:1px solid var(--line);box-shadow:0 12px 36px #00000073,0 0 0 6px #7dd3fc0f}@media(max-width:760px){.hero-grid{grid-template-columns:1fr}.hero-photo{width:150px;height:150px}}.aboutbox{max-width:800px;border-left:3px solid var(--accent2);padding-left:20px}.aboutbox p{color:var(--text);font-size:16.5px;line-height:1.8}.aboutbox p+p{margin-top:14px}.aboutbox b{color:var(--accent)}.grid4{display:grid;gap:16px;grid-template-columns:repeat(4,1fr)}@media(max-width:960px){.grid4{grid-template-columns:repeat(2,1fr)}}@media(max-width:560px){.grid4{grid-template-columns:1fr}}.cell-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.mini{border:1px solid var(--line);background:#131c33b3;color:var(--text);border-radius:999px;padding:3px 10px;font-size:12.5px}.tag{font-size:11px;padding:2px 9px;border-radius:999px;vertical-align:middle;font-family:var(--font-mono);font-weight:500;letter-spacing:.02em}.tag-i{background:#7dd3fc1f;color:var(--accent);border:1px solid rgba(125,211,252,.35)}.tag-r{background:#a5b4fc24;color:var(--accent2);border:1px solid rgba(165,180,252,.35)}.stats{display:flex;flex-wrap:wrap;gap:12px 32px;margin-top:28px}.stat b{display:block;font-family:var(--font-head);font-size:23px;color:var(--accent)}.stat span{font-size:13px;color:var(--muted)}.cta-row{margin-top:30px;display:flex;gap:12px;flex-wrap:wrap}.btn{border:1px solid var(--line);border-radius:10px;padding:10px 20px;font-size:15px;background:#131c33b3;color:var(--text);transition:.15s}.btn:hover{border-color:var(--accent);text-decoration:none;transform:translateY(-1px)}.btn.primary{background:linear-gradient(135deg,#0ea5e9,#6366f1);border:0;color:#081018;font-weight:700}section{padding:56px 0;border-top:1px solid var(--line)}.idx{color:var(--accent2);font-size:12.5px;letter-spacing:.2em;font-family:var(--font-mono)}h2{font-family:var(--font-head);font-size:27px;margin:8px 0 22px;font-weight:800}h3{font-family:var(--font-head)}.grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(255px,1fr))}.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:20px 22px;position:relative;overflow:hidden;transition:transform .18s,border-color .18s}.card:hover{transform:translateY(-2px);border-color:var(--accent)}.card h3{font-size:17px;margin-bottom:8px;color:var(--accent)}.card p,.card li{color:var(--muted);font-size:14.5px}.job ul{margin:8px 0 0 18px}.job ul.sub{margin:4px 0 8px 18px}.job ul.sub li{margin:3px 0}.card li{margin:4px 0}.job{background:var(--card);border:1px solid var(--line);border-left:3px solid var(--accent2);border-radius:12px;padding:18px 22px;margin-bottom:14px;position:relative;overflow:hidden}.job .top{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;align-items:baseline}.job h3{font-size:18px}.job h3 a{color:var(--text)}.job .when{color:var(--muted);font-size:13.5px;white-space:nowrap;font-family:var(--font-mono)}.job .role{color:var(--accent2);font-size:14px;margin:2px 0 10px}.job ul{margin-left:18px;color:var(--muted);font-size:14.5px}.job ul li{margin:5px 0}.pub{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 20px;margin-bottom:12px;position:relative;overflow:hidden}.pub h3{font-size:15.5px;margin-bottom:4px}.pub h3 a{color:var(--accent)}.pub .meta{color:var(--accent2);font-size:12.5px;font-family:var(--font-mono)}.pub p{color:var(--muted);font-size:14px;margin-top:4px}.more{color:var(--muted);font-size:14px;margin-top:14px}.edu{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 20px;position:relative;overflow:hidden}.edu b{font-family:var(--font-head)}.edu .y{color:var(--muted);font-size:14px}.lbl{color:var(--accent);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;font-family:var(--font-mono);margin:6px 0 10px}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{border:1px solid var(--line);background:#131c33b3;color:var(--text);border-radius:999px;padding:5px 14px;font-size:13.5px}.chip small{color:var(--muted)}.contact-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.contact-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px 20px;transition:.15s;display:block;position:relative;overflow:hidden}.contact-card:hover{border-color:var(--accent);text-decoration:none;transform:translateY(-2px)}.contact-card b{display:block;font-family:var(--font-head);font-size:15.5px}.contact-card span{color:var(--muted);font-size:13.5px}footer{padding:36px 0 60px;color:var(--muted);font-size:14px;border-top:1px solid var(--line)}footer .wrap{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}.lang-lvl{font-family:var(--font-head);font-size:21px;font-weight:700;color:var(--accent);margin:2px 0}.card:after,.job:after,.pub:after,.edu:after,.contact-card:after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(105deg,transparent 42%,rgba(125,211,252,.1) 48%,rgba(255,255,255,.2) 50%,rgba(165,180,252,.1) 52%,transparent 58%);transform:translate(-130%);transition:transform .8s ease}.card:hover:after,.job:hover:after,.pub:hover:after,.edu:hover:after,.contact-card:hover:after{transform:translate(130%)}.grid4 .card:before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .25s;background:radial-gradient(230px circle at var(--mx,50%) var(--my,50%),rgba(125,211,252,.16),transparent 65%)}.grid4 .card:hover:before{opacity:1}.chip,.mini{transition:border-color .15s}.chip:hover,.mini:hover{border-color:var(--accent)}@media(prefers-reduced-motion:reduce){.card,.contact-card{transition:none}.card:after,.job:after,.pub:after,.edu:after,.contact-card:after{transition:none}}@media(max-width:640px){.hero{padding:80px 0 50px}section{padding:42px 0}.topnav nav{display:none}}.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}
