:root{--bg: #fafaf8;--bg-raised: #f2f1ec;--ink: #1b1d1f;--ink-soft: #55585e;--ink-faint: #8a8d93;--accent: #2f5d50;--accent-soft: #dce8e3;--line: #e3e2dc;--mono: "IBM Plex Mono", monospace;--sans: "Inter", sans-serif;--display: "Inter Tight", sans-serif}[data-theme=dark]{--bg: #1a1a1a;--bg-raised: #252525;--ink: #fafafa;--ink-soft: #c0c0c0;--ink-faint: #8a8a8a;--accent: #5ac8fa;--accent-soft: #1e3a5f;--line: #333333}*{box-sizing:border-box;margin:0;padding:0;transition:background-color .3s ease,color .3s ease,border-color .3s ease}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;line-height:1.5}a{color:inherit;text-decoration:none}::selection{background:var(--accent-soft);color:var(--accent)}.wrap{max-width:920px;margin:0 auto;padding:0 28px}.tabbar{position:sticky;top:0;z-index:50;background:var(--bg-raised);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}.tabbar-inner{max-width:920px;margin:0 auto;padding:0 28px;display:flex;align-items:center;justify-content:space-between;height:56px}.logo{font-family:var(--mono);font-size:14px;font-weight:500;display:flex;align-items:center;gap:8px}.logo .dot{width:7px;height:7px;border-radius:50%;background:var(--accent);display:inline-block}.tabs{display:flex;gap:2px}.tabs a{font-family:var(--mono);font-size:12.5px;color:var(--ink-soft);padding:8px 14px;border-radius:6px 6px 0 0;transition:color .15s ease,background .15s ease}.tabs a:hover{color:var(--ink);background:var(--bg-raised)}.theme-toggle{background:none;border:none;font-size:1rem;cursor:pointer;padding:6px 10px;border-radius:6px;margin-left:8px;transition:background .2s ease,color .2s ease}.theme-toggle:hover{background:var(--bg)}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (max-width: 640px){.tabs{display:none}}.hero{padding:120px 0 88px;border-bottom:1px solid var(--line)}.eyebrow{font-family:var(--mono);font-size:12.5px;color:var(--accent);letter-spacing:.02em;display:flex;align-items:center;gap:8px;margin-bottom:22px}.eyebrow:before{content:"";width:16px;height:1px;background:var(--accent);display:inline-block}h1{font-family:var(--display);font-weight:800;font-size:clamp(40px,6.4vw,68px);line-height:1.04;letter-spacing:-.02em;max-width:11ch}.cursor{display:inline-block;width:.5ch;background:var(--accent);animation:blink 1.1s steps(1) infinite;margin-left:4px}@keyframes blink{50%{opacity:0}}.hero-sub{margin-top:22px;font-size:17px;color:var(--ink-soft);max-width:52ch;line-height:1.65}.hero-sub b{color:var(--ink);font-weight:600}.stack-row{margin-top:34px;display:flex;flex-wrap:wrap;gap:8px}.pill{font-family:var(--mono);font-size:12px;color:var(--ink-soft);background:var(--bg-raised);border:1px solid var(--line);padding:6px 11px;border-radius:100px}.cta-row{margin-top:40px;display:flex;gap:12px;flex-wrap:wrap}.btn{font-size:14px;font-weight:600;padding:12px 20px;border-radius:8px;display:inline-flex;align-items:center;gap:8px;transition:transform .15s ease,background .15s ease}.btn-primary{background:var(--ink);color:var(--bg)}.btn-primary:hover{transform:translateY(-1px);background:var(--accent)}.btn-ghost{border:1px solid var(--line);color:var(--ink)}.btn-ghost:hover{border-color:var(--ink)}section{padding:80px 0;border-bottom:1px solid var(--line)}.section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:44px;gap:20px;flex-wrap:wrap}.section-head h2{font-family:var(--display);font-size:26px;font-weight:700;letter-spacing:-.01em}.section-head .path{font-family:var(--mono);font-size:12.5px;color:var(--ink-faint)}.project{display:grid;grid-template-columns:28px 1fr;align-items:start;gap:20px;padding:26px 16px;margin:0 -16px;border-radius:10px;border-bottom:1px solid var(--line);transition:background .15s ease}.project:last-child{border-bottom:none}.project:hover{background:var(--bg-raised)}.project-index{font-family:var(--mono);font-size:12px;color:var(--ink-faint);padding-top:4px}.project-title{font-family:var(--display);font-size:19px;font-weight:700;margin-bottom:8px}.project-desc{color:var(--ink-soft);font-size:14.5px;max-width:56ch;line-height:1.6;margin-bottom:14px}.project-tags{display:flex;gap:6px;flex-wrap:wrap}.tag{font-family:var(--mono);font-size:11px;color:var(--accent);background:var(--accent-soft);padding:4px 8px;border-radius:5px}.project-links{display:flex;gap:14px;flex-wrap:wrap;margin-top:14px}.project-link{font-family:var(--mono);font-size:12.5px;color:var(--ink-soft);transition:color .15s ease}.project-link:hover{color:var(--accent)}.about-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:56px}@media (max-width: 700px){.about-grid{grid-template-columns:1fr;gap:36px}}.about-text p{color:var(--ink-soft);font-size:15.5px;line-height:1.75;margin-bottom:16px;max-width:56ch}.about-text b{color:var(--ink);font-weight:600}.skill-group{margin-bottom:22px}.skill-group:last-child{margin-bottom:0}.skill-label{font-family:var(--mono);font-size:11.5px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.06em;margin-bottom:10px}.skill-list{display:flex;flex-wrap:wrap;gap:7px}.skill-list .pill{background:var(--bg)}footer{padding:80px 0 60px}.contact-title{font-family:var(--display);font-weight:800;font-size:clamp(32px,5vw,46px);letter-spacing:-.02em;max-width:14ch;margin-bottom:28px}.contact-links{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:64px}.contact-links a{font-family:var(--mono);font-size:13.5px;padding:10px 16px;border:1px solid var(--line);border-radius:8px;transition:border-color .15s ease,color .15s ease}.contact-links a:hover{border-color:var(--accent);color:var(--accent)}.foot-meta{display:flex;justify-content:space-between;align-items:center;font-family:var(--mono);font-size:11.5px;color:var(--ink-faint);flex-wrap:wrap;gap:10px;padding-top:24px;border-top:1px solid var(--line)}@media (prefers-reduced-motion: reduce){.cursor{animation:none}html{scroll-behavior:auto}}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
