:root{color-scheme:light;--g-pink: #FFD0FB;--g-lemon: #FFFFCC;--g-mint: #CFFFE9;--gradient: linear-gradient(135deg, var(--g-pink) 0%, var(--g-lemon) 50%, var(--g-mint) 100%);--ink: #1c1b22;--ink-soft: #4a4854;--card: rgba(255, 255, 255, .55);--card-line: rgba(28, 27, 34, .14);--lang-python: #2e7d32;--lang-sql: #6a3fb5;--lang-js: #b8860b;--lang-bash: #3c6e71;--lang-html: #e34f26;--lang-css: #2965f1;--radius: 14px;--max-w: 68rem}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;font-family:Inter,system-ui,-apple-system,sans-serif;color:var(--ink);background:var(--gradient) fixed;line-height:1.65;-webkit-font-smoothing:antialiased}main{max-width:var(--max-w);margin:0 auto;padding:0 1.25rem}section{padding:5.5rem 0;scroll-margin-top:5rem}h1,h2,h3{line-height:1.15;letter-spacing:-.02em}h1{font-size:clamp(2.4rem,6vw,4.2rem);font-weight:800;margin:.4em 0}h2{font-size:clamp(1.6rem,3.5vw,2.2rem);font-weight:700}a{color:var(--ink);text-underline-offset:3px}.nav{position:sticky;top:0;z-index:50;display:flex;justify-content:space-between;align-items:center;flex-wrap:nowrap;padding:.75rem 1rem;backdrop-filter:blur(10px);background:color-mix(in srgb,var(--g-lemon) 35%,transparent);border-bottom:1px solid var(--card-line)}.nav .brand{font-weight:800;letter-spacing:.06em;text-decoration:none;display:flex;align-items:center;gap:.65rem;font-size:clamp(.7rem,2.5vw,1rem);white-space:nowrap}.brand-logo{width:34px;height:34px;border-radius:9px;flex-shrink:0}.nav ul{display:flex;gap:clamp(.5rem,2vw,1.4rem);list-style:none;margin:0;padding:0;flex-shrink:0}.nav a{text-decoration:none;font-weight:600;font-size:clamp(.7rem,2vw,.92rem)}.tag-filter{display:flex;flex-wrap:wrap;gap:.5rem;margin:1.8rem 0 0}.tag-filter-btn{padding:.25rem .85rem;border-radius:999px;border:1.5px solid var(--ink);background:transparent;color:var(--ink);font:700 .75rem/1 Inter,sans-serif;letter-spacing:.03em;cursor:pointer;transition:background .18s,color .18s}.tag-filter-btn:hover,.tag-filter-btn.active{background:var(--ink);color:#fff}.section-label{font-size:1.15rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft);margin-top:3rem}.tag-pill{display:inline-block;margin:0 .3rem .3rem 0;padding:.15rem .7rem;border-radius:999px;font-size:.72rem;font-weight:700;letter-spacing:.04em;background:transparent;border:1.5px solid var(--ink);color:var(--ink)}@media(hover:hover){.projects-grid:hover>.card{opacity:.35}.projects-grid>.card{transition:opacity .25s ease,transform .25s ease}.projects-grid>.card:hover{opacity:1;transform:translateY(-4px)}}.nav ul{display:flex;gap:1.4rem;list-style:none;margin:0;padding:0}.nav a{text-decoration:none;font-weight:600;font-size:.92rem}.nav a:hover{text-decoration:underline}.spine{position:fixed;right:2rem;top:0;bottom:0;width:2px;z-index:10;pointer-events:none}.spine .track{position:absolute;inset:0;background:#1c1b221f}.spine .flow{position:absolute;inset:0;background:var(--ink);transform-origin:top;transform:scaleY(0)}.spine .node{position:absolute;left:50%;width:12px;height:12px;transform:translate(-50%);border-radius:50%;border:2px solid var(--ink);background:var(--g-lemon);transition:background .3s,box-shadow .3s}.spine .node.active{background:var(--ink);box-shadow:0 0 0 5px #1c1b221f}.spine .node span{position:absolute;right:1.2rem;top:-.2rem;font-size:.65rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft);opacity:0;transition:opacity .3s;white-space:nowrap}.spine .node.active span{opacity:1}@media(max-width:900px){.spine{display:none}}.hero{min-height:82vh;display:flex;flex-direction:column;justify-content:center;text-align:center}@media(max-width:600px){.hero{min-height:60vh}section{padding:3rem 0}.nav ul{gap:.6rem}.nav a{font-size:.72rem}.nav .brand{font-size:.75rem}.brand-logo{width:26px;height:26px}}.hero .kicker{font-weight:600;letter-spacing:.08em;color:var(--ink-soft)}.hero .slogan{font-size:clamp(1.15rem,2.4vw,1.5rem);font-weight:700;margin-top:.5rem}.hero .mission{max-width:42rem;margin:1.4rem auto 0;padding-left:1rem;border-left:3px solid var(--ink);text-align:left;color:var(--ink-soft)}.hero .word{display:inline-block}.card{background:var(--card);border:1px solid var(--card-line);border-radius:var(--radius);padding:1.6rem;backdrop-filter:blur(6px)}.project-list{list-style:none;margin:0;padding:0}.project-list li{border-bottom:1px solid var(--card-line)}.project-list a{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;padding:1.5rem .25rem;text-decoration:none;font-size:clamp(1.15rem,2.6vw,1.7rem);font-weight:700;transition:opacity .25s,transform .25s}.project-list a .date{font-size:.8rem;font-weight:600;color:var(--ink-soft);white-space:nowrap}.project-list.dimmed a{opacity:.25}.project-list.dimmed li:hover a{opacity:1;transform:translate(6px)}.preview{position:fixed;z-index:40;pointer-events:none;width:270px;padding:1rem 1.2rem;background:var(--ink);color:#fff;border-radius:var(--radius);opacity:0;transform:scale(.9);font-size:.9rem;line-height:1.5}.preview .chips{margin-top:.6rem}.chip{display:inline-block;margin:0 .3rem .3rem 0;padding:.12rem .6rem;border-radius:999px;font-size:.72rem;font-weight:700;color:#fff;background:var(--ink-soft)}.chip.python{background:var(--lang-python)}.chip.sql{background:var(--lang-sql)}.chip.javascript,.chip.js{background:var(--lang-js)}.chip.bash{background:var(--lang-bash)}.chip.html{background:var(--lang-html)}.chip.css{background:var(--lang-css)}.resume-embed{width:100%;height:78vh;border:1px solid var(--card-line);border-radius:var(--radius);background:#fff}.btn{display:inline-block;margin-top:1rem;padding:.7rem 1.4rem;border-radius:999px;background:var(--ink);color:#fff;font-weight:700;text-decoration:none}.timeline{position:relative;margin-top:3.5rem;padding-left:2rem}.timeline:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--ink)}.tl-item{position:relative;margin-bottom:2.6rem}.tl-item:before{content:"";position:absolute;left:-2rem;top:.4rem;width:10px;height:10px;border-radius:50%;background:var(--ink);margin-left:-4px}.tl-item h3{margin:0 0 .1rem}.tl-item .meta{font-size:.85rem;font-weight:600;color:var(--ink-soft)}.tl-item ul{margin:.6rem 0 .4rem;padding-left:1.1rem}.tl-item li{margin:.35rem 0}.post{max-width:46rem;margin:0 auto}.post header{margin:3rem 0 2rem}.post .prose{font-size:1.05rem}.post .prose h2{margin-top:2.4rem}.img-carousel{margin:1.5rem 0;border:1px solid var(--card-line);border-radius:var(--radius);background:#ffffff8c;overflow:hidden}.img-carousel figure{margin:0;padding:0}.img-carousel figure[hidden]{display:none}.img-carousel img{display:block;max-width:100%;height:auto;margin:0 auto;border-radius:0;border:none;background:#fff}.img-carousel figcaption{padding:.45rem .9rem .6rem;font-size:.8rem;font-weight:600;color:var(--ink-soft);text-align:center;border-top:1px solid var(--card-line)}.img-carousel-controls{display:flex;align-items:center;justify-content:center;gap:1rem;padding:.6rem;border-top:1px solid var(--card-line);background:#ffffffb3}.carousel-btn{display:inline-flex;align-items:center;gap:.3rem;padding:.35rem .9rem;border:1.5px solid var(--ink);border-radius:999px;background:transparent;font-family:inherit;font-size:.82rem;font-weight:700;cursor:pointer;transition:background .18s,color .18s}.carousel-btn:hover:not(:disabled){background:var(--ink);color:#fff}.carousel-btn:disabled{opacity:.3;cursor:not-allowed}.carousel-counter{font-size:.82rem;font-weight:700;color:var(--ink-soft);min-width:3.5rem;text-align:center}.prose img{max-width:100%;height:auto;display:block;margin:1.5rem auto;border-radius:10px;border:1px solid var(--card-line);background:#fff}.scroll-x{overflow-x:auto;margin:1.5rem 0;border:1px solid var(--card-line);border-radius:10px;-webkit-overflow-scrolling:touch}.scroll-x img{max-width:none;display:block;margin:0;border:none;border-radius:0}.scroll-x:after{content:"⟷ scroll";display:block;padding:.25rem .6rem;font-size:.7rem;font-weight:700;letter-spacing:.08em;color:var(--ink-soft);text-transform:uppercase}.prose table{border-collapse:collapse;margin:1.5rem 0;font-size:.92rem;width:100%;background:#fff9}.prose th,.prose td{border:1px solid var(--card-line);padding:.5rem .8rem;text-align:left}.prose th{background:var(--ink);color:#fff;font-weight:700}.prose tbody tr:nth-child(2n){background:#ffffffd9}.prose tbody tr:hover{background:var(--g-lemon)}.prose pre{position:relative;border-radius:var(--radius);padding:2.4rem 1.2rem 1.2rem;overflow-x:auto;font-size:.88rem;line-height:1.55}.prose pre:before{content:attr(data-language);position:absolute;top:.6rem;left:1rem;padding:.05rem .6rem;border-radius:999px;font-family:Inter,sans-serif;font-size:.68rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#fff;background:var(--ink-soft)}.prose pre[data-language=python]:before{background:var(--lang-python)}.prose pre[data-language=sql]:before{background:var(--lang-sql)}.prose pre[data-language=js]:before,.prose pre[data-language=javascript]:before{background:var(--lang-js)}.prose pre[data-language=bash]:before{background:var(--lang-bash)}.prose pre[data-language=html]:before{background:var(--lang-html)}.prose pre[data-language=css]:before{background:var(--lang-css)}.contact-form{display:grid;gap:.8rem;max-width:32rem}.contact-form .field-wrap{display:flex;flex-direction:column;gap:.25rem}.contact-form label{font-weight:700;font-size:.9rem}.contact-form input,.contact-form textarea{padding:.8rem;border:1px solid var(--card-line);border-radius:10px;font:inherit;background:#ffffffb3;transition:border-color .2s}.contact-form input:focus,.contact-form textarea:focus{outline:none;border-color:var(--ink);border-width:2px}.contact-form input.invalid,.contact-form textarea.invalid{border-color:var(--html-orange);border-width:2px}.field-error{display:none;font-size:.82rem;font-weight:600;color:var(--html-orange)}.char-count{font-size:.78rem;font-weight:600;color:var(--ink-soft);text-align:right}.contact-form button{padding:.8rem;border:none;border-radius:999px;background:var(--ink);color:#fff;font-weight:700;font-size:1rem;cursor:pointer;transition:opacity .2s}.contact-form button:disabled{opacity:.5;cursor:not-allowed}footer{text-align:center;padding:3rem 1rem 2rem;font-size:.85rem;color:var(--ink-soft)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation:none!important;transition:none!important}}
