:root{--bg: #0b0e14;--bg-elevated: #10141d;--surface: #131824;--border: #1e2634;--border-bright: #2a3547;--text: #dfe7f1;--text-muted: #8b98ab;--text-faint: #5b6779;--accent: #2dd4bf;--accent-bright: #5eead4;--accent-dim: rgba(45, 212, 191, .12);--accent-glow: rgba(45, 212, 191, .35);--mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;--sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, sans-serif}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:5rem}body{background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased;overflow-x:hidden}::selection{background:var(--accent);color:var(--bg)}a{color:var(--accent);text-decoration:none;transition:color .2s ease}a:hover{color:var(--accent-bright)}.container{max-width:980px;margin:0 auto;padding:0 1.5rem}.bg-grid{position:fixed;inset:0;z-index:-2;background-image:linear-gradient(var(--border) 1px,transparent 1px),linear-gradient(90deg,var(--border) 1px,transparent 1px);background-size:44px 44px;opacity:.25;mask-image:radial-gradient(ellipse 90% 60% at 50% 0%,black 30%,transparent 75%);-webkit-mask-image:radial-gradient(ellipse 90% 60% at 50% 0%,black 30%,transparent 75%)}.bg-glow{position:fixed;z-index:-1;width:700px;height:700px;top:-300px;right:-200px;background:radial-gradient(circle,var(--accent-dim) 0%,transparent 65%);pointer-events:none}nav{position:fixed;top:0;left:0;right:0;z-index:100;background:#0b0e14eb;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}@supports not ((backdrop-filter: blur(12px)) or (-webkit-backdrop-filter: blur(12px))){nav{background:#0b0e14fa}}.nav-inner{max-width:980px;margin:0 auto;padding:.9rem 1.5rem;display:flex;align-items:center;justify-content:space-between}.nav-logo{font-family:var(--mono);font-size:.9rem;color:var(--text);font-weight:600}.nav-logo .accent{color:var(--accent)}.nav-links{display:flex;gap:1.6rem;list-style:none}.nav-links a{font-family:var(--mono);font-size:.8rem;color:var(--text-muted)}.nav-links a:hover{color:var(--accent)}.nav-links a .idx{color:var(--accent);margin-right:.25rem}@media(max-width:640px){.nav-links{gap:1rem}.nav-links a .idx{display:none}.hero{min-height:auto;padding-top:7rem;padding-bottom:3.5rem}section{padding-top:4rem}}@media(max-width:520px){.nav-logo{display:none}.nav-links{width:100%;justify-content:space-between;gap:.7rem}.nav-links a{font-size:.75rem}}@media(max-width:400px){.container{padding:0 1.15rem}}.hero{min-height:92vh;display:flex;flex-direction:column;justify-content:center;padding-top:5rem}.hero-pre{font-family:var(--mono);font-size:.85rem;color:var(--accent);margin-bottom:1.2rem}.hero h1{font-size:clamp(2.4rem,7vw,4.2rem);font-weight:700;letter-spacing:-.02em;line-height:1.08;overflow-wrap:break-word}.hero h1 .cursor{display:inline-block;width:3px;height:.85em;margin-left:.12em;background:var(--accent);animation:blink 1.1s step-end infinite;vertical-align:baseline}@keyframes blink{50%{opacity:0}}.hero h2{margin-top:.6rem;font-size:clamp(1.15rem,3vw,1.6rem);font-weight:500;color:var(--text-muted);letter-spacing:-.01em}.hero h2 .accent{color:var(--accent)}.hero p.summary{margin-top:1.5rem;max-width:620px;color:var(--text-muted);font-size:1.05rem}.hero-meta{margin-top:1.2rem;font-family:var(--mono);font-size:.82rem;color:var(--text-faint)}.hero-actions{margin-top:2.2rem;display:flex;flex-wrap:wrap;gap:.9rem}.btn{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--mono);font-size:.85rem;padding:.7rem 1.3rem;border-radius:6px;border:1px solid var(--accent);transition:all .2s ease}.btn-primary{background:var(--accent);color:#06251f;font-weight:600}.btn-primary:hover{background:var(--accent-bright);color:#06251f;box-shadow:0 0 24px var(--accent-glow)}.btn-ghost{color:var(--accent);background:transparent}.btn-ghost:hover{background:var(--accent-dim);color:var(--accent-bright)}section{padding:5.5rem 0 1rem}.section-heading{display:flex;align-items:center;gap:1rem;margin-bottom:2.4rem}.section-heading .num{font-family:var(--mono);font-size:1rem;color:var(--accent)}.section-heading h2{font-size:1.6rem;font-weight:700;letter-spacing:-.01em;white-space:nowrap}.section-heading .rule{height:1px;background:var(--border-bright);flex:1;max-width:320px}.about-grid{display:grid;grid-template-columns:3fr 2fr;gap:3rem}.about-text p+p{margin-top:1rem}.about-text p{color:var(--text-muted)}.edu-card{margin-top:1.8rem;padding:1.1rem 1.3rem;background:var(--surface);border:1px solid var(--border);border-left:2px solid var(--accent);border-radius:6px}.edu-card .degree{font-weight:600;font-size:.95rem}.edu-card .inst{font-family:var(--mono);font-size:.8rem;color:var(--text-muted);margin-top:.3rem}.edu-card .notes{font-size:.82rem;color:var(--text-faint);margin-top:.3rem}.skills-block h3{font-family:var(--mono);font-size:.8rem;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:.06em;margin-bottom:.6rem}.skills-block+.skills-block{margin-top:1.4rem}.chips{display:flex;flex-wrap:wrap;gap:.45rem}.chip{font-family:var(--mono);font-size:.74rem;color:var(--text-muted);background:var(--surface);border:1px solid var(--border);padding:.28rem .65rem;border-radius:99px;transition:all .2s ease}.chip:hover{border-color:var(--accent);color:var(--accent)}@media(max-width:760px){.about-grid{grid-template-columns:1fr;gap:2.2rem}}.timeline{position:relative;padding-left:1.75rem}.timeline:before{content:"";position:absolute;left:5px;top:6px;bottom:6px;width:1px;background:var(--border-bright)}.job{position:relative;padding-bottom:3rem}.job:before{content:"";position:absolute;left:-1.75rem;top:7px;width:11px;height:11px;border-radius:50%;background:var(--bg);border:2px solid var(--accent);box-shadow:0 0 10px var(--accent-glow)}.job-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem .9rem}.job-header h3{font-size:1.12rem;font-weight:650}.job-header .company{color:var(--accent);font-weight:600}.job-header .period{font-family:var(--mono);font-size:.78rem;color:var(--text-faint);margin-left:auto}.job-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin:.55rem 0 .8rem}.job ul{list-style:none;margin-top:.4rem}.job ul li{position:relative;padding-left:1.2rem;color:var(--text-muted);font-size:.94rem;margin-bottom:.55rem}.job ul li:before{content:"▹";position:absolute;left:0;color:var(--accent)}.projects-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,310px),1fr));gap:1.3rem}.project-card{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:1.5rem;transition:transform .25s ease,border-color .25s ease,box-shadow .25s ease}.project-card:hover{transform:translateY(-5px);border-color:var(--accent);box-shadow:0 12px 34px #0006,0 0 0 1px var(--accent-dim)}.project-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:.9rem}.project-top .folder{color:var(--accent);width:34px;height:34px}.project-links a{color:var(--text-muted);margin-left:.7rem}.project-links a:hover{color:var(--accent)}.project-links svg{width:20px;height:20px}.project-card h3{font-size:1.15rem;font-weight:650;margin-bottom:.5rem}.project-card h3 a{color:var(--text)}.project-card h3 a:hover{color:var(--accent)}.project-card p{color:var(--text-muted);font-size:.92rem;flex:1}.project-card .chips{margin-top:1.1rem}.contact{text-align:center;padding-bottom:4rem}.contact .lede{color:var(--text-muted);max-width:520px;margin:0 auto 2rem}.contact-email{font-family:var(--mono);font-size:clamp(1.05rem,3.5vw,1.5rem);font-weight:600}.contact-socials{margin-top:2rem;display:flex;justify-content:center;gap:1.4rem}.contact-socials a{color:var(--text-muted)}.contact-socials a:hover{color:var(--accent)}.contact-socials svg{width:22px;height:22px}footer{border-top:1px solid var(--border);padding:1.6rem 0;text-align:center;font-family:var(--mono);font-size:.75rem;color:var(--text-faint)}footer a{color:var(--text-muted)}footer a:hover{color:var(--accent)}.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}.reveal.visible{opacity:1;transform:none}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transform:none;transition:none}.hero h1 .cursor{animation:none}}.writeup-back{font-family:var(--mono);font-size:.8rem;color:var(--text-muted)}.writeup-back:hover{color:var(--accent)}.writeup{max-width:760px;margin:0 auto;padding:7rem 1.5rem 4rem}.writeup-head{margin-bottom:2.6rem}.writeup-eyebrow{font-family:var(--mono);font-size:.8rem;color:var(--accent);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.9rem}.writeup-head h1{font-size:clamp(1.9rem,5vw,2.8rem);font-weight:700;letter-spacing:-.02em;line-height:1.12}.writeup-lede{margin-top:1rem;color:var(--text-muted);font-size:1.08rem}.writeup-meta{margin-top:1.3rem;display:flex;flex-wrap:wrap;align-items:center;gap:.5rem}.writeup-meta>span:first-child{font-family:var(--mono);font-size:.78rem;color:var(--text-faint);margin-right:.4rem}.writeup-body{color:var(--text);font-size:1.02rem;line-height:1.75}.writeup-body>*+*{margin-top:1.15rem}.writeup-body h2{margin-top:2.8rem;margin-bottom:.4rem;padding-top:1.6rem;border-top:1px solid var(--border);font-size:1.5rem;font-weight:700;letter-spacing:-.01em}.writeup-body h3{margin-top:1.9rem;font-size:1.12rem;font-weight:650;color:var(--accent-bright)}.writeup-body p{color:var(--text)}.writeup-body strong{color:var(--text);font-weight:650}.writeup-body em{color:var(--text-muted)}.writeup-body a{color:var(--accent);text-decoration:underline;text-underline-offset:2px;text-decoration-color:var(--accent-dim)}.writeup-body a:hover{text-decoration-color:var(--accent)}.writeup-body ul,.writeup-body ol{padding-left:1.4rem;color:var(--text)}.writeup-body li{margin-top:.4rem}.writeup-body li::marker{color:var(--accent)}.writeup-body :not(pre)>code{font-family:var(--mono);font-size:.86em;background:var(--bg-elevated);border:1px solid var(--border);border-radius:4px;padding:.1em .4em;color:var(--accent-bright)}.writeup-body pre{background:var(--bg-elevated);border:1px solid var(--border);border-radius:8px;padding:1.1rem 1.25rem;overflow-x:auto;font-size:.82rem;line-height:1.55}.writeup-body pre code{font-family:var(--mono);background:none;border:0;padding:0;color:var(--text)}.writeup-body blockquote{border-left:2px solid var(--accent);background:var(--accent-dim);border-radius:0 6px 6px 0;padding:.8rem 1.1rem;color:var(--text-muted)}.writeup-body blockquote p{color:var(--text-muted)}.writeup-body table{width:100%;border-collapse:collapse;font-size:.9rem;display:block;overflow-x:auto}.writeup-body th,.writeup-body td{border:1px solid var(--border);padding:.5rem .75rem;text-align:left;vertical-align:top}.writeup-body th{background:var(--surface);font-family:var(--mono);font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);font-weight:600}.writeup-body hr{border:0;border-top:1px solid var(--border);margin:2.4rem 0}.writeup-body img{max-width:100%;height:auto;border-radius:8px;border:1px solid var(--border)}.writeup-foot{margin-top:3.5rem;padding-top:1.6rem;border-top:1px solid var(--border);font-family:var(--mono);font-size:.82rem}@media(max-width:640px){.writeup{padding-top:5.5rem}.writeup-body h2{margin-top:2.2rem}}.toc{position:static;z-index:auto;backdrop-filter:none;-webkit-backdrop-filter:none;border:1px solid var(--border);border-left:2px solid var(--accent);background:var(--surface);border-radius:8px;padding:1.1rem 1.35rem;margin-bottom:2.6rem}.toc-title{font-family:var(--mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--accent);margin-bottom:.7rem}.toc ul{list-style:none;padding:0;margin:0}.toc li{margin:.26rem 0}.toc li a{color:var(--text-muted);font-size:.9rem}.toc li a:hover{color:var(--accent)}.toc .toc-d3{padding-left:1.1rem}.toc .toc-d3 a{color:var(--text-faint);font-size:.84rem}.writeup-body .diagram{margin:1.9rem 0;overflow-x:auto;border:1px solid var(--border);border-radius:10px;background:var(--bg-elevated);padding:1.1rem}.writeup-body .diagram svg{display:block;width:100%;min-width:640px;max-width:940px;height:auto;margin:0 auto}.writeup-body .diagram figcaption{margin-top:.75rem;text-align:center;font-size:.78rem;color:var(--text-faint);font-family:var(--mono);min-width:640px}.writeup-body .diagram text{font-family:var(--sans)}.writeup-body .diagram .l{fill:var(--text);font-weight:600;font-size:16px}.writeup-body .diagram .s{fill:var(--text-muted);font-size:13px;font-family:var(--mono)}.writeup-body .diagram .p{fill:var(--text);font-size:12.5px;font-family:var(--mono)}.writeup-body .code-wrap{position:relative}.writeup-body .code-wrap+*{margin-top:1.15rem}.copy-btn{position:absolute;top:.5rem;right:.5rem;display:inline-flex;align-items:center;gap:.35rem;font-family:var(--mono);font-size:.7rem;color:var(--text-muted);background:var(--surface);border:1px solid var(--border-bright);border-radius:5px;padding:.25rem .5rem;cursor:pointer;opacity:0;transition:opacity .15s ease,color .15s ease,border-color .15s ease}.writeup-body .code-wrap:hover .copy-btn,.copy-btn:focus-visible{opacity:1}.copy-btn:hover{color:var(--accent);border-color:var(--accent)}.copy-btn.copied{color:var(--accent);border-color:var(--accent);opacity:1}.copy-btn svg{width:13px;height:13px}@media(hover:none){.copy-btn{opacity:1}}
