:root{--bg: #0a0e14;--bg-alt: #0d1219;--surface: #131a23;--surface-2: #182029;--border: #232c38;--text: #d9e1e8;--text-dim: #8b96a5;--text-faint: #5c6774;--accent: #4dd8c0;--accent-strong: #7cf0dc;--accent-2: #f2b84b;--danger: #f2665e;--radius: 6px;--mono: "JetBrains Mono", "Fira Code", "SFMono-Regular", Consolas, Menlo, monospace;--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--max-width: 880px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);background-image:radial-gradient(ellipse 80% 50% at 50% -10%, rgba(77,216,192,0.08), transparent);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-strong);text-decoration:underline}::selection{background:rgba(77,216,192,0.3);color:#fff}.wrap{max-width:var(--max-width);margin:0 auto;padding:0 24px}.site-header{border-bottom:1px solid var(--border);background:rgba(10,14,20,0.85);backdrop-filter:blur(8px);position:sticky;top:0;z-index:20}.site-header .wrap{max-width:1040px;display:flex;align-items:center;justify-content:space-between;padding-top:16px;padding-bottom:16px}.brand{font-family:var(--mono);font-weight:700;font-size:1.05rem;color:var(--text);display:flex;align-items:center;gap:8px}.brand:hover{text-decoration:none;color:var(--text)}.brand .prompt{color:var(--accent)}.brand .cursor{display:inline-block;width:8px;height:1.1em;background:var(--accent);margin-left:2px;animation:blink 1.1s steps(1) infinite;vertical-align:text-bottom}@keyframes blink{50%{opacity:0}}.nav{display:flex;align-items:center;gap:22px;font-family:var(--mono);font-size:0.9rem}.nav a{color:var(--text-dim)}.nav a:hover{color:var(--accent);text-decoration:none}.nav .icon-link{display:inline-flex;align-items:center}.nav .icon-link svg{width:18px;height:18px;fill:var(--text-dim);transition:fill .15s}.nav .icon-link:hover svg{fill:var(--accent)}.site-footer{border-top:1px solid var(--border);margin-top:80px;padding:32px 0 48px;color:var(--text-faint);font-size:0.85rem;text-align:center}.site-footer a{color:var(--text-dim)}.site-footer .foot-links{margin-top:8px;display:flex;gap:18px;justify-content:center}.hero{max-width:1040px;margin:0 auto;padding:76px 24px 40px}.hero .eyebrow{font-family:var(--mono);color:var(--accent);font-size:0.85rem;letter-spacing:0.04em;margin-bottom:14px}.hero .eyebrow::before{content:"$ ";color:var(--text-faint)}.hero h1{font-size:clamp(2.2rem, 5vw, 3.4rem);margin:0 0 10px;line-height:1.1;letter-spacing:-0.01em}.hero h1 .accent{color:var(--accent)}.hero .role{font-family:var(--mono);color:var(--text-dim);font-size:1.05rem;margin-bottom:22px}.hero p.lede{max-width:640px;color:var(--text-dim);font-size:1.05rem;margin-bottom:30px}.cta-row{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:36px}.btn{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:0.9rem;padding:11px 20px;border-radius:var(--radius);border:1px solid var(--border);color:var(--text);transition:all .15s}.btn:hover{text-decoration:none;border-color:var(--accent);color:var(--accent-strong)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#06120f;font-weight:600}.btn.primary:hover{background:var(--accent-strong);border-color:var(--accent-strong);color:#06120f}.tag-row{display:flex;flex-wrap:wrap;gap:8px}.tag{font-family:var(--mono);font-size:0.78rem;color:var(--text-dim);border:1px solid var(--border);background:var(--surface);padding:4px 10px;border-radius:999px}.section{max-width:1040px;margin:0 auto;padding:20px 24px 60px}.section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:22px;border-bottom:1px solid var(--border);padding-bottom:14px}.section-head h2{margin:0;font-size:1.4rem}.section-head .view-all{font-family:var(--mono);font-size:0.85rem}.card-grid{display:grid;grid-template-columns:1fr;gap:16px}.wcard{display:block;border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);padding:20px 22px;transition:border-color .15s, transform .15s}.wcard:hover{border-color:var(--accent);text-decoration:none;transform:translateY(-1px)}.wcard-top{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap}.wcard h3{margin:0 0 8px;font-size:1.15rem;color:var(--text)}.wcard p{margin:0;color:var(--text-dim);font-size:0.95rem}.wcard .meta{font-family:var(--mono);font-size:0.78rem;color:var(--text-faint);margin-top:12px}.badge{font-family:var(--mono);font-size:0.72rem;font-weight:700;letter-spacing:0.03em;text-transform:uppercase;padding:3px 9px;border-radius:4px;border:1px solid var(--border)}.badge.level-easy{color:#4dd88a;border-color:rgba(77,216,138,0.4);background:rgba(77,216,138,0.08)}.badge.level-medium{color:var(--accent-2);border-color:rgba(242,184,75,0.4);background:rgba(242,184,75,0.08)}.badge.level-hard{color:var(--danger);border-color:rgba(242,102,94,0.4);background:rgba(242,102,94,0.08)}.badge.plain{color:var(--text-dim)}.writeup-header{max-width:var(--max-width);margin:0 auto;padding:48px 24px 24px}.writeup-header .back-link{font-family:var(--mono);font-size:0.85rem;color:var(--text-dim)}.writeup-header h1{font-size:clamp(1.8rem, 4vw, 2.4rem);margin:14px 0 16px}.writeup-meta{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:18px}.writeup-infobox{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius);padding:16px 20px;margin:20px 0 8px;font-size:0.92rem}.writeup-infobox dl{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0}.writeup-infobox dt{color:var(--text-faint);font-family:var(--mono);font-size:0.82rem}.writeup-infobox dd{margin:0;color:var(--text)}.writeup-body{max-width:var(--max-width);margin:0 auto;padding:8px 24px 60px}.writeup-body h2{margin-top:48px;padding-top:8px;border-top:1px solid var(--border);font-size:1.5rem}.writeup-body h2:first-child{border-top:none;margin-top:20px}.writeup-body h3{margin-top:30px;font-size:1.15rem;color:var(--accent-strong)}.writeup-body p{color:#cdd6de}.writeup-body img{max-width:100%;border-radius:var(--radius);border:1px solid var(--border);display:block;margin:14px 0 6px}.writeup-body em{font-style:italic}.writeup-body p:has(>em:only-child){color:var(--text-faint);font-size:0.85rem;margin-top:-6px;margin-bottom:22px}.writeup-body code{font-family:var(--mono);background:var(--surface-2);padding:2px 6px;border-radius:4px;font-size:0.86em;color:var(--accent-strong)}.writeup-body pre{background:#0d1117;border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px;overflow-x:auto;margin:16px 0 22px}.writeup-body pre code{background:none;padding:0;color:#d9e1e8}.writeup-body ul,.writeup-body ol{color:#cdd6de;padding-left:22px}.writeup-body li{margin-bottom:6px}.writeup-body blockquote{margin:20px 0;padding:4px 18px;border-left:3px solid var(--accent);background:var(--surface);color:var(--text-dim);border-radius:0 4px 4px 0}.writeup-body table{width:100%;border-collapse:collapse;margin:18px 0;font-size:0.92rem}.writeup-body th,.writeup-body td{border:1px solid var(--border);padding:9px 12px;text-align:left}.writeup-body th{background:var(--surface);font-family:var(--mono);font-size:0.8rem;color:var(--text-dim)}.writeup-body hr{border:none;border-top:1px solid var(--border);margin:40px 0}.cv-page{max-width:var(--max-width);margin:0 auto;padding:48px 24px 60px}.cv-head{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:18px;margin-bottom:36px}.cv-head h1{margin:0 0 6px;font-size:2rem}.cv-head .role{font-family:var(--mono);color:var(--accent);font-size:0.95rem}.cv-head .loc{color:var(--text-faint);font-size:0.88rem;margin-top:4px}.cv-section{margin-bottom:34px}.cv-section h2{font-family:var(--mono);font-size:0.95rem;text-transform:uppercase;letter-spacing:0.06em;color:var(--accent);border-bottom:1px solid var(--border);padding-bottom:8px;margin-bottom:16px}.cv-entry{margin-bottom:18px}.cv-entry-top{display:flex;justify-content:space-between;flex-wrap:wrap;gap:6px}.cv-entry-top strong{color:var(--text);font-size:1.02rem}.cv-entry-top span.date{font-family:var(--mono);color:var(--text-faint);font-size:0.82rem;white-space:nowrap}.cv-entry .org{color:var(--text-dim);font-size:0.9rem;margin-bottom:8px}.cv-entry ul{margin:8px 0 0;padding-left:20px;color:#cdd6de;font-size:0.94rem}.cv-entry li{margin-bottom:5px}.cv-skills dt{font-family:var(--mono);font-size:0.82rem;color:var(--text-dim);margin-top:12px}.cv-skills dd{margin:4px 0 0;color:#cdd6de;font-size:0.92rem}.pill-links{display:flex;gap:12px;flex-wrap:wrap}.empty-state{color:var(--text-faint);font-family:var(--mono);font-size:0.92rem;padding:40px 0}@media (max-width: 600px){.nav{gap:14px}.writeup-infobox dl{grid-template-columns:1fr}}@media (prefers-reduced-motion: no-preference){.hero .eyebrow,.hero h1,.hero .role,.hero p.lede,.hero .cta-row,.hero .tag-row{opacity:0;animation:fade-up 0.7s ease forwards}.hero .eyebrow{animation-delay:.02s}.hero h1{animation-delay:.10s}.hero .role{animation-delay:.18s}.hero p.lede{animation-delay:.26s}.hero .cta-row{animation-delay:.34s}.hero .tag-row{animation-delay:.42s}.site-header{animation:fade-down 0.5s ease}}@keyframes fade-up{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes fade-down{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s ease, transform .6s ease}.reveal.in-view{opacity:1;transform:translateY(0)}.brand,.nav a,.btn,.wcard,.tag,.badge{transition:color .15s ease, border-color .15s ease, background-color .15s ease, transform .15s ease, box-shadow .15s ease}.btn:hover{transform:translateY(-1px)}.btn.primary:hover{box-shadow:0 6px 18px -6px rgba(77,216,192,0.55)}.btn:active{transform:translateY(0)}.wcard:hover{box-shadow:0 10px 28px -14px rgba(77,216,192,0.35)}.nav a{position:relative}.nav a:not(.icon-link)::after{content:"";position:absolute;left:0;right:100%;bottom:-4px;height:1px;background:var(--accent);transition:right .18s ease}.nav a:not(.icon-link):hover::after{right:0}.icon-link svg{transition:fill .15s ease, transform .15s ease}.icon-link:hover svg{transform:translateY(-1px)}@keyframes bg-drift{from{background-position:50% 0%}to{background-position:50% 30%}}@media (prefers-reduced-motion: no-preference){body{background-size:200% 200%;animation:bg-drift 18s ease-in-out infinite alternate}}
