:root{--bg:#faf7f2;--surface:#fff;--ink:#23211c;--muted:#6f6a5e;--line:#e7e1d5;--accent:#c4633f;--accent-soft:#f3e5dc;--code:#f0ebe1;--r-card:0px;--r-btn:0px;--r-pill:0px;--stack-serif:var(--font-serif), var(--font-serif-sc), serif;--stack-sans:var(--font-sans-sc), -apple-system, "Segoe UI", sans-serif}#app[data-theme=dark]{--bg:#201e19;--surface:#2a2822;--ink:#efece4;--muted:#a49e8f;--line:#3b382f;--accent:#de8560;--accent-soft:#3d2f27;--code:#333028}html,body{height:100%}body{background:var(--bg);color:var(--ink);font-family:var(--stack-sans);margin:0;overflow:hidden}a{color:var(--accent);text-decoration:none;transition:color .25s}a:hover{color:var(--ink)}::selection{background:var(--accent-soft)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@keyframes floatIn{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}@keyframes strokeDraw{0%{stroke-dashoffset:1400px}to{stroke-dashoffset:0}}@keyframes strokeDrawS{0%{stroke-dashoffset:340px}to{stroke-dashoffset:0}}@keyframes fillIn{to{fill-opacity:1}}@keyframes strokeFade{to{stroke-opacity:.25}}#app[data-lang=zh] [data-i18n-block=en],#app[data-lang=en] [data-i18n-block=zh]{display:none}#app.theme-anim,#app.theme-anim *,#app.theme-anim :before,#app.theme-anim :after{transition:background-color .4s,color .4s,border-color .4s,stroke .4s,fill .4s!important}#app{background:var(--bg);height:100dvh;color:var(--ink);color-scheme:light;flex-direction:column;transition:background .4s,color .4s;display:flex;overflow:hidden}#app[data-theme=dark]{color-scheme:dark}.stage{flex:auto;min-height:0;position:relative;overflow:hidden}.track{height:100%;transition:transform .7s cubic-bezier(.76,0,.22,1);display:flex}#app[data-page="1"] .track{transform:translate(-100%)}#app[data-page="2"] .track{transform:translate(-200%)}.panel{overscroll-behavior:contain;flex:0 0 100%;min-width:100%;position:relative;overflow:hidden auto}.panel.enter .float-wrap{animation:.8s cubic-bezier(.22,.8,.3,1) .25s both floatIn}.nav{background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--line);z-index:50;flex:none;justify-content:space-between;align-items:center;padding:16px 40px;display:flex}.nav-logo{cursor:pointer;color:inherit;font:inherit;background:0 0;border:none;align-items:center;padding:0;display:flex}.logo-svg{width:auto;height:30px;display:block;overflow:visible}.logo-text{font-family:var(--stack-serif);letter-spacing:.5px;fill:var(--ink);fill-opacity:0;stroke:var(--accent);stroke-width:1px;stroke-dasharray:340;stroke-dashoffset:340px;font-size:28px;font-weight:700;animation:1.8s cubic-bezier(.4,0,.2,1) .1s forwards strokeDrawS,.9s 1.5s forwards fillIn,.8s 2s forwards strokeFade}.logo-dot{fill:var(--accent)}.nav-links{align-items:center;gap:24px;font-size:14.5px;display:flex}.nav-link{cursor:pointer;color:var(--muted);background:0 0;border:none;border-bottom:2px solid #0000;padding:4px 0;font-family:inherit;font-size:14.5px;text-decoration:none;transition:color .3s,border-color .3s}.nav-link:hover{color:var(--accent)}#app[data-page="1"] .nav-link[data-nav=projects],#app[data-page="2"] .nav-link[data-nav=articles]{color:var(--accent);border-bottom-color:var(--accent)}.pill-btn{cursor:pointer;border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:var(--r-pill);padding:6px 13px;font-family:inherit;font-size:13px;transition:all .3s}.pill-btn:hover{border-color:var(--accent);color:var(--accent)}#app[data-theme=light] .icon-when-dark,#app[data-theme=dark] .icon-when-light{display:none}.pager{background:color-mix(in srgb, var(--surface) 80%, transparent);-webkit-backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:var(--r-pill);z-index:20;align-items:center;gap:12px;padding:6px 10px;display:flex;position:absolute;bottom:22px;right:28px}.pager-btn{cursor:pointer;color:var(--ink);background:0 0;border:none;padding:2px 6px;font-family:inherit;font-size:15px;transition:color .3s}.pager-btn:hover{color:var(--accent)}#app[data-page="0"] .pager-btn--prev,#app[data-page="0"] .pager-btn--prev:hover,#app[data-page="2"] .pager-btn--next,#app[data-page="2"] .pager-btn--next:hover{color:var(--line)}.pager-num{color:var(--muted);font-variant-numeric:tabular-nums;letter-spacing:1px;font-size:12px}.hero{text-align:center;box-sizing:border-box;flex-direction:column;justify-content:center;align-items:center;min-height:100%;padding:40px 32px;display:flex}.hero-title{font-family:var(--stack-serif);text-wrap:pretty;opacity:0;margin:0;font-size:clamp(34px,5vw,58px);font-weight:600;line-height:1.32;animation:1s cubic-bezier(.22,.8,.3,1) .2s both floatIn}.hero-em{color:var(--accent);font-style:normal}.hero-cta{opacity:0;justify-content:center;gap:14px;margin-top:46px;animation:1s cubic-bezier(.22,.8,.3,1) .7s both floatIn;display:flex}.hero-scroll{color:var(--muted);opacity:0;margin-top:10vh;font-size:17px;animation:1.2s 1.5s both floatIn}.btn{cursor:pointer;border-radius:var(--r-btn);padding:12px 26px;font-family:inherit;font-size:15px;transition:transform .25s,opacity .25s,border-color .25s,color .25s}.btn--primary{background:var(--accent);color:#fff;border:none}.btn--primary:hover{opacity:.9;transform:translateY(-2px)}.btn--secondary{border:1px solid var(--line);background:var(--surface);color:var(--ink)}.btn--secondary:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-2px)}.section{border-top:1px solid var(--line);box-sizing:border-box;width:100%;max-width:860px;margin:0 auto;padding:76px 32px}.section--center{text-align:center;padding-bottom:64px}.section-title{font-family:var(--stack-serif);margin:0 0 6px;font-size:30px;font-weight:600}.section--center .section-title{font-size:32px}.section-sub{color:var(--muted);letter-spacing:2px;margin-bottom:40px;font-size:13px}.about-stack{flex-direction:column;gap:20px;display:flex}.about-p{color:var(--ink);text-wrap:pretty;margin:0;font-size:17px;line-height:2}.skills-grid{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px;display:grid}.skill-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);padding:20px 22px;transition:border-color .3s}.skill-card:hover{border-color:var(--accent)}.skill-top{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.skill-name{font-size:17px;font-weight:600;font-family:var(--stack-serif)}.skill-level{color:var(--accent);font-size:12px}.skill-note{color:var(--muted);margin-top:8px;font-size:13px}.friends-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;display:grid}.friend-card{background:var(--surface);border:1px dashed var(--line);border-radius:var(--r-card);color:var(--ink);padding:20px 22px;transition:border-color .3s,transform .3s;display:block}.friend-card:hover{border-color:var(--accent);color:var(--ink);border-style:solid;transform:translateY(-3px)}.friend-name{font-size:16px;font-weight:600}.friend-desc{color:var(--muted);margin-top:6px;font-size:13px}.contact-blurb{color:var(--muted);margin:14px 0 40px;font-size:15px}.contact-cards{flex-wrap:wrap;justify-content:center;gap:16px;display:flex}.contact-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-btn);color:var(--ink);align-items:center;gap:10px;padding:14px 22px;transition:transform .3s,border-color .3s;display:flex}.contact-card:hover{border-color:var(--accent);color:var(--ink);transform:translateY(-3px)}.contact-label{color:var(--accent);letter-spacing:1px;text-transform:uppercase;font-size:12px}.contact-value{font-size:14.5px}.footer-line{color:var(--muted);margin-top:64px;font-size:13px}.wrap{box-sizing:border-box;width:100%;max-width:960px;margin:0 auto;padding:9vh 32px 60px}[data-panel] .section-sub{margin-bottom:14px}.panel-intro{color:var(--muted);margin:0 0 34px;font-size:14px}[data-panel=articles] .panel-intro{margin-bottom:26px}.projects-grid{grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:20px;display:grid}.proj-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);color:var(--ink);flex-direction:column;gap:12px;padding:26px;transition:transform .3s,border-color .3s;display:flex}.proj-card:hover{border-color:var(--accent);color:var(--ink);transform:translateY(-4px)}.proj-title{font-family:var(--stack-serif);font-size:19px;font-weight:600}.proj-desc{color:var(--muted);flex:1;font-size:14.5px;line-height:1.75}.proj-tags{flex-wrap:wrap;gap:8px;display:flex}.pill{color:var(--accent);background:var(--accent-soft);border-radius:var(--r-pill);padding:3px 10px;font-size:12px}.articles-list{flex-direction:column;display:flex}.article-row{border-bottom:1px solid var(--line);color:var(--ink);grid-template-columns:110px 1fr auto;align-items:baseline;gap:24px;padding:22px 8px;transition:background .25s,padding-left .25s;display:grid}.article-row:hover{background:var(--surface);color:var(--ink);padding-left:16px}.art-date{color:var(--muted);font-variant-numeric:tabular-nums;font-size:13px}.art-mid{display:block}.art-title{font-size:16.5px;font-weight:500;display:block}.art-summary{color:var(--muted);margin-top:5px;font-size:14px;line-height:1.7;display:block}.article-row .pill{white-space:nowrap;justify-self:end}.article-page{flex:auto;min-height:0;overflow-y:auto}.article-container{box-sizing:border-box;max-width:720px;margin:0 auto;padding:8vh 32px 80px}.article-head{border-bottom:1px solid var(--line);margin-bottom:40px;padding-bottom:32px}.article-meta{color:var(--muted);align-items:center;gap:12px;margin-bottom:14px;font-size:13px;display:flex}.article-title{font-family:var(--stack-serif);text-wrap:pretty;margin:0;font-size:clamp(28px,4vw,40px);font-weight:600;line-height:1.3}.article-body{font-size:17px;line-height:2}.article-body h2{font-family:var(--stack-serif);margin:44px 0 16px;font-size:24px;font-weight:600;line-height:1.4}.article-body h3{font-family:var(--stack-serif);margin:34px 0 12px;font-size:20px;font-weight:600}.article-body p{text-wrap:pretty;margin:0 0 20px}.article-body ul,.article-body ol{margin:0 0 20px;padding-left:24px}.article-body li{margin:6px 0}.article-body blockquote{border-left:2px solid var(--accent);color:var(--muted);margin:24px 0;padding:4px 0 4px 20px}.article-body code{background:var(--code);border-radius:0;padding:2px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.9em}.article-body pre{background:var(--code);border:1px solid var(--line);margin:0 0 24px;padding:18px 20px;overflow-x:auto}.article-body pre code{background:0 0;padding:0;font-size:13.5px;line-height:1.7}.article-body img{max-width:100%;height:auto}.article-body hr{border:none;border-top:1px solid var(--line);margin:40px 0}.article-body table{border-collapse:collapse;width:100%;margin:0 0 24px;font-size:15px}.article-body th,.article-body td{border:1px solid var(--line);text-align:left;padding:8px 12px}.article-foot{border-top:1px solid var(--line);margin-top:64px;padding-top:24px;font-size:14px}.article-back{align-items:center;gap:8px;display:inline-flex}.nf{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;padding:60px 32px;display:flex}.nf-code{font-family:var(--stack-serif);color:var(--accent);font-size:64px;font-weight:600;line-height:1}.nf-text{color:var(--muted);margin:18px 0 32px;font-size:15px}.nf-link{font-size:15px}@media (width<=820px){.nav{flex-wrap:wrap;row-gap:10px;padding:14px 20px}.nav-links{flex-wrap:wrap;gap:10px 16px}.section,.wrap{padding-left:20px;padding-right:20px}.hero{padding:32px 20px}}@media (width<=640px){.article-row{grid-template-columns:1fr auto}.art-date{grid-column:1/-1}.article-container{padding:6vh 20px 64px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
