:root{--bg:#fafaf7;--surface:#fff;--ink:#17181c;--ink-soft:#2a2c33;--muted:#6f7378;--line:#e8e6df;--line-strong:#d8d5cc;--accent:#c8f169;--accent-ink:#14171a;--orange:#f5a25d;--blue:#6ba6e8;--green:#7fc98a;--purple:#b18cd9;--radius:14px;--radius-lg:20px;--shadow:0 1px 2px #14161a0a, 0 8px 24px #14161a0f;--shadow-lg:0 4px 8px #14161a0f, 0 16px 40px #14161a1a;--sans:"PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, "JetBrains Mono", "Cascadia Code", Consolas, monospace}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{font-family:var(--sans);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;font-size:16px;line-height:1.7}a{color:inherit;text-decoration:none}img{max-width:100%;display:block}h1,h2,h3,h4{letter-spacing:-.02em;margin:0;font-weight:700;line-height:1.25}p{margin:0}button{cursor:pointer;font-family:inherit}::selection{background:var(--accent);color:var(--accent-ink)}.site{flex-direction:column;min-height:100vh;display:flex}.site-main{flex:1;width:100%}.container{width:100%;max-width:1080px;margin:0 auto;padding:0 24px}.blank-layout{min-height:100vh}.nav{z-index:50;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--line);background:#fafaf7db;position:sticky;top:0}.nav-inner{justify-content:space-between;align-items:center;height:64px;display:flex}.brand{letter-spacing:-.01em;align-items:center;gap:10px;font-size:17px;font-weight:800;display:inline-flex}.brand-mark{background:var(--ink);width:30px;height:30px;color:var(--accent);border-radius:9px;place-items:center;font-size:15px;font-weight:900;display:inline-grid}.nav-links{align-items:center;gap:4px;display:flex}.nav-link{color:var(--muted);border-radius:999px;padding:7px 14px;font-size:14.5px;font-weight:500;transition:color .15s,background .15s}.nav-link:hover{color:var(--ink);background:#17181c0d}.nav-link.router-link-active{color:#fff;background:var(--ink)}.nav-cta{background:var(--ink);color:#fff;border-radius:999px;align-items:center;gap:6px;padding:8px 16px;font-size:14px;font-weight:600;transition:transform .15s,box-shadow .15s;display:inline-flex}.nav-cta:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.mobile-toggle{color:var(--ink);background:0 0;border:0;padding:4px;font-size:22px;display:none}.btn{border:1px solid #0000;border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:11px 22px;font-size:15px;font-weight:600;transition:transform .15s,box-shadow .15s,background .15s;display:inline-flex}.btn:hover{transform:translateY(-1px)}.btn-primary{background:var(--ink);color:#fff}.btn-primary:hover{box-shadow:var(--shadow-lg)}.btn-accent{background:var(--accent);color:var(--accent-ink)}.btn-ghost{border-color:var(--line-strong);color:var(--ink);background:0 0}.btn-ghost:hover{border-color:var(--ink)}.hero{border-bottom:1px solid var(--line);padding:88px 0 64px}.hero-badge{background:var(--accent);color:var(--accent-ink);border-radius:999px;align-items:center;gap:8px;margin-bottom:22px;padding:6px 14px;font-size:13px;font-weight:700;display:inline-flex}.hero h1{letter-spacing:-.03em;margin-bottom:18px;font-size:clamp(40px,7vw,68px);line-height:1.08}.hero h1 .dot{color:#b6d856}.hero p{color:var(--muted);max-width:620px;margin-bottom:30px;font-size:18px}.hero-actions{flex-wrap:wrap;gap:12px;display:flex}.section{padding:64px 0}.section-head{justify-content:space-between;align-items:flex-end;margin-bottom:28px;display:flex}.section-title{letter-spacing:-.02em;font-size:28px}.section-sub{color:var(--muted);margin-top:6px;font-size:14.5px}.section-link{color:var(--muted);align-items:center;gap:4px;font-size:14px;font-weight:600;display:inline-flex}.section-link:hover{color:var(--ink)}.posts-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:20px;display:grid}.post-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);flex-direction:column;padding:26px;transition:transform .18s,box-shadow .18s,border-color .18s;display:flex}.post-card:hover{box-shadow:var(--shadow-lg);border-color:var(--line-strong);transform:translateY(-3px)}.post-card-top{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.post-card h3{margin-bottom:10px;font-size:19px}.post-card h3 a:hover{color:#3d4a17}.post-card .excerpt{color:var(--muted);flex:1;font-size:14.5px}.post-card-foot{border-top:1px solid var(--line);color:var(--muted);justify-content:space-between;align-items:center;margin-top:20px;padding-top:16px;font-size:13px;display:flex}.chip{border-radius:999px;align-items:center;padding:4px 12px;font-size:12.5px;font-weight:600;line-height:1.4;display:inline-flex}.chip.orange{color:#b45309;background:#fdeee0}.chip.blue{color:#1d4ed8;background:#e3f0fd}.chip.green{color:#15803d;background:#e4f6e8}.chip.purple{color:#7c3aed;background:#f1e7fb}.chip.ink{color:#374151;background:#eceef0}.projects-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px;display:grid}.project-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:26px;transition:transform .18s,box-shadow .18s,border-color .18s;position:relative}.project-card:hover{box-shadow:var(--shadow-lg);border-color:var(--line-strong);transform:translateY(-3px)}.project-card .status-dot{border-radius:50%;width:8px;height:8px;margin-right:6px;display:inline-block}.project-card h3{margin:14px 0 8px;font-size:19px}.project-card .desc{color:var(--muted);font-size:14.5px}.project-card .stack{flex-wrap:wrap;gap:6px;margin-top:16px;display:flex}.project-card .stack span{background:var(--bg);border:1px solid var(--line);color:var(--muted);border-radius:6px;padding:3px 10px;font-size:12px}.project-card .arrow{color:var(--muted);font-size:18px;position:absolute;top:26px;right:26px}.color-bar{border-radius:3px;height:6px;margin-bottom:18px}.color-bar.orange{background:var(--orange)}.color-bar.blue{background:var(--blue)}.color-bar.green{background:var(--green)}.color-bar.purple{background:var(--purple)}.color-bar.ink{background:#3a3d45}.page-head{padding:56px 0 20px}.page-head h1{letter-spacing:-.03em;margin-bottom:10px;font-size:40px}.page-head p{color:var(--muted)}.filter-bar{flex-wrap:wrap;gap:8px;margin:20px 0 32px;display:flex}.filter-pill{border:1px solid var(--line-strong);color:var(--muted);background:0 0;border-radius:999px;padding:7px 16px;font-size:13.5px;font-weight:500;transition:all .15s}.filter-pill:hover{border-color:var(--ink);color:var(--ink)}.filter-pill.active{background:var(--ink);border-color:var(--ink);color:#fff}.search-input{border:1px solid var(--line-strong);background:var(--surface);width:100%;max-width:360px;color:var(--ink);border-radius:999px;outline:none;padding:11px 18px;font-family:inherit;font-size:14.5px;transition:border-color .15s,box-shadow .15s}.search-input:focus{border-color:var(--ink);box-shadow:0 0 0 3px #17181c14}.empty{text-align:center;color:var(--muted);padding:80px 0}.article{max-width:760px;margin:0 auto;padding:56px 24px 80px}.article-head{margin-bottom:32px}.article-head .meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:14px;margin-top:16px;font-size:13.5px;display:flex}.article-head h1{letter-spacing:-.02em;font-size:clamp(28px,5vw,40px)}.article-body{font-size:17px;line-height:1.9}.article-body p{white-space:pre-wrap;margin-bottom:22px}.back-link{color:var(--muted);align-items:center;gap:6px;margin-bottom:20px;font-size:14px;font-weight:500;display:inline-flex}.back-link:hover{color:var(--ink)}.comments{border-top:1px solid var(--line);margin-top:56px;padding-top:32px}.comments h3{margin-bottom:22px;font-size:20px}.comment-item{border-bottom:1px solid var(--line);padding:16px 0}.comment-item .who{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.comment-item .name{font-size:14.5px;font-weight:600}.comment-item .time{color:var(--muted);font-size:12.5px}.comment-item .content{color:var(--ink-soft);font-size:14.5px}.comment-form{flex-direction:column;gap:12px;margin-top:26px;display:flex}.comment-form input,.comment-form textarea{border:1px solid var(--line-strong);background:var(--surface);width:100%;color:var(--ink);border-radius:12px;outline:none;padding:12px 16px;font-family:inherit;font-size:14.5px;transition:border-color .15s,box-shadow .15s}.comment-form textarea{resize:vertical;min-height:110px}.comment-form input:focus,.comment-form textarea:focus{border-color:var(--ink);box-shadow:0 0 0 3px #17181c14}.chat-shell{max-width:820px;margin:0 auto;padding:48px 24px 60px}.chat-intro{text-align:center;margin-bottom:30px}.chat-intro h1{margin-bottom:10px;font-size:34px}.chat-intro p{color:var(--muted)}.chat-box{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);overflow:hidden}.chat-messages{flex-direction:column;gap:16px;height:420px;padding:24px;display:flex;overflow-y:auto}.msg{white-space:pre-wrap;word-break:break-word;border-radius:16px;max-width:82%;padding:12px 16px;font-size:14.5px;line-height:1.7}.msg.user{background:var(--ink);color:#fff;border-bottom-right-radius:4px;align-self:flex-end}.msg.assistant{background:var(--bg);border:1px solid var(--line);border-bottom-left-radius:4px;align-self:flex-start}.msg.typing:after{content:"▋";color:var(--muted);animation:1s step-end infinite blink}@keyframes blink{50%{opacity:0}}.chat-input{border-top:1px solid var(--line);background:var(--surface);gap:10px;padding:16px;display:flex}.chat-input textarea{resize:none;border:1px solid var(--line-strong);border-radius:12px;outline:none;flex:1;min-height:46px;max-height:140px;padding:12px 16px;font-family:inherit;font-size:14.5px;transition:border-color .15s}.chat-input textarea:focus{border-color:var(--ink)}.chat-input button{background:var(--accent);color:var(--accent-ink);border:0;border-radius:12px;padding:0 22px;font-size:15px;font-weight:700;transition:transform .15s}.chat-input button:hover:not(:disabled){transform:translateY(-1px)}.chat-input button:disabled{opacity:.5;cursor:not-allowed}.chat-suggestions{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:14px;display:flex}.chat-suggestions button{border:1px solid var(--line-strong);color:var(--muted);background:0 0;border-radius:999px;padding:7px 14px;font-size:13px;transition:all .15s}.chat-suggestions button:hover{border-color:var(--ink);color:var(--ink)}.footer{border-top:1px solid var(--line);margin-top:40px;padding:40px 0}.footer-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;display:flex}.footer .brand{font-size:15px}.footer p{color:var(--muted);font-size:13.5px}.skills{flex-wrap:wrap;gap:10px;display:flex}.skills span{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:9px 16px;font-size:14px;font-weight:500}@media (width<=720px){.nav-links{background:var(--bg);border-bottom:1px solid var(--line);flex-direction:column;align-items:stretch;gap:4px;padding:12px 16px;display:none;position:fixed;inset:64px 0 auto}.nav-links.open{display:flex}.nav-link{text-align:center;padding:12px}.mobile-toggle{display:block}.hero{padding:56px 0 44px}.section{padding:44px 0}.posts-grid,.projects-grid{grid-template-columns:1fr}.section-head{flex-direction:column;align-items:flex-start;gap:10px}}
