@font-face{font-family:Hack Nerd Font;src:url(/fonts/HackNerdFont-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Hack Nerd Font;src:url(/fonts/HackNerdFont-Italic.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Hack Nerd Font;src:url(/fonts/HackNerdFontMono-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Hack Nerd Font;src:url(/fonts/HackNerdFont-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:Hack Nerd Font Mono;src:url(/fonts/HackNerdFontMono-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Hack Nerd Font Mono;src:url(/fonts/HackNerdFontMono-Italic.ttf) format("truetype");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Hack Nerd Font Mono;src:url(/fonts/HackNerdFontMono-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Hack Nerd Font Mono;src:url(/fonts/HackNerdFontMono-BoldItalic.ttf) format("truetype");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:Hack Nerd Font Propo;src:url(/fonts/HackNerdFontPropo-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Hack Nerd Font Propo;src:url(/fonts/HackNerdFontPropo-Bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Sauce Code Pro;src:url(/fonts/SauceCodeProNerdFontMono-Regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Spectral;src:url(/fonts/Spectral-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{--paper:#fdf9ef;--paper-2:#f6efe0;--paper-3:#e5d8bf;--ink:#1a1a1a;--ink-2:#3a352e;--ink-3:#6b6458;--ink-4:#9a9182;--rule:#2a2a2a;--rule-soft:#c8bfa8;--panda-red:#c8532a;--panda-red-deep:#a03e1d;--bamboo:#2e6b3f;--bamboo-deep:#1f4a2b;--mustard:#c9923b;--bg:var(--paper);--fg:var(--ink);--muted:var(--ink-3);--accent:var(--panda-red);--link:var(--panda-red-deep);--font-serif-en:"Instrument Serif","Source Serif 4",Georgia,serif;--font-serif-zh:"Noto Serif SC","Songti SC","SimSun",serif;--font-sans-en:"Spectral","Hack Nerd Font Propo","Inter",system-ui,-apple-system,sans-serif;--font-sans-zh:"Noto Sans SC","PingFang SC","Hiragino Sans GB",sans-serif;--font-mono:"Hack Nerd Font Mono","Sauce Code Pro","SF Mono",Menlo,Consolas,monospace;--font-terminal:"Sauce Code Pro","Hack Nerd Font Mono",monospace;--font-body:"Spectral",var(--font-sans-zh),var(--font-sans-en);--font-display:var(--font-body);--step--1:clamp(0.78rem,0.75rem + 0.15vw,0.875rem);--step-0:clamp(0.95rem,0.9rem + 0.25vw,1.05rem);--step-1:clamp(1.1rem,1.02rem + 0.4vw,1.25rem);--step-2:clamp(1.35rem,1.2rem + 0.7vw,1.6rem);--step-3:clamp(1.75rem,1.5rem + 1.2vw,2.25rem);--step-4:clamp(2.4rem,1.9rem + 2.2vw,3.5rem);--step-5:clamp(3.25rem,2.4rem + 3.8vw,5.5rem);--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--sp-7:48px;--sp-8:64px;--sp-9:96px;--radius:2px;--radius-md:6px;--max-w:1160px;--read-w:68ch}@media (prefers-color-scheme:dark){:root[data-theme=auto]{--paper:#141210;--paper-2:#1b1814;--paper-3:#25201a;--ink:#ece4d3;--ink-2:#d6ccb6;--ink-3:#9e9684;--ink-4:#6b6456;--rule:#bfb8a6;--rule-soft:#3a342a;--bg:var(--paper);--fg:var(--ink);--muted:var(--ink-3)}}:root[data-theme=dark]{--paper:#141210;--paper-2:#1b1814;--paper-3:#25201a;--ink:#ece4d3;--ink-2:#d6ccb6;--ink-3:#9e9684;--ink-4:#6b6456;--rule:#bfb8a6;--rule-soft:#3a342a;--bg:var(--paper);--fg:var(--ink);--muted:var(--ink-3)}*{box-sizing:border-box}body,html{margin:0;padding:0}html{background:var(--bg);color:var(--fg);font-family:var(--font-body);font-size:16px;line-height:1.65;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}body{min-height:100vh;background-color:var(--bg);background-image:radial-gradient(circle at 20% 10%,rgba(200,83,42,.035) 0,transparent 40%),radial-gradient(circle at 80% 80%,rgba(46,107,63,.04) 0,transparent 45%),url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.1  0 0 0 0 0.08  0 0 0 0 0.06  0 0 0 0.03 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");background-blend-mode:multiply}h1,h2,h3,h4{font-family:var(--font-display);font-weight:500;color:var(--fg);margin:0 0 var(--sp-4);letter-spacing:-.01em;line-height:1.15;text-wrap:balance}h1{font-size:var(--step-5);letter-spacing:-.02em}h1,h2{font-weight:400}h2{font-size:var(--step-4)}h3{font-size:var(--step-3)}h3,h4{font-weight:500}h4{font-size:var(--step-2)}p{margin:0 0 var(--sp-4);text-wrap:pretty}a{color:var(--link);text-decoration:none;text-underline-offset:3px;text-decoration-thickness:1px;transition:color .12s ease,-webkit-text-decoration-color .12s ease;transition:color .12s ease,text-decoration-color .12s ease;transition:color .12s ease,text-decoration-color .12s ease,-webkit-text-decoration-color .12s ease}a:hover{text-decoration:underline;-webkit-text-decoration-color:var(--panda-red);text-decoration-color:var(--panda-red)}.course-card:focus-visible,.offer-card:focus-visible,.project-card:focus-visible,a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--panda-red);outline-offset:3px}em{font-style:italic;font-family:var(--font-body)}strong{font-weight:600}code,kbd,pre{font-family:var(--font-mono);font-size:.92em}code{padding:1px 6px;border-radius:var(--radius)}code,pre{background:var(--paper-3);border:1px solid var(--rule-soft)}pre{padding:var(--sp-4) var(--sp-5);border-radius:var(--radius-md);overflow-x:auto;line-height:1.5}pre code{background:none;border:none;padding:0}blockquote{margin:var(--sp-5) 0;padding:var(--sp-2) 0 var(--sp-2) var(--sp-5);border-left:3px solid var(--panda-red);font-family:var(--font-body);font-size:var(--step-1);font-style:italic;color:var(--ink-2)}hr{border:none;height:0;border-top:1px dashed var(--rule-soft);margin:var(--sp-6) 0}.container{max-width:var(--max-w)}.container,.container-narrow{margin:0 auto;padding:0 var(--sp-6)}.container-narrow{max-width:760px}.row{align-items:center;gap:var(--sp-4)}.col,.row{display:flex}.col{flex-direction:column}.sp{flex:1 1 auto}.site-header{--header-height:106px;padding:18px 0;border-bottom:0;background:transparent;position:-webkit-sticky;position:sticky;top:0;z-index:20;-webkit-backdrop-filter:blur(10px) saturate(140%);backdrop-filter:blur(10px) saturate(140%);background:color-mix(in oklab,var(--bg) 74%,transparent)}.site-header .inner{gap:var(--sp-6);width:100%;max-width:min(1920px,calc(100vw - 48px));margin:0 auto;padding:18px 24px;border:1px solid color-mix(in oklab,var(--rule-soft) 82%,transparent);border-radius:16px;background:color-mix(in oklab,var(--paper) 90%,#fff 10%);box-shadow:0 16px 45px color-mix(in oklab,var(--ink) 10%,transparent)}.brand,.site-header .inner{display:flex;align-items:center}.brand{gap:var(--sp-4);flex:0 0 315px;min-width:315px;color:var(--fg);font-family:var(--font-display);font-size:var(--step-1);letter-spacing:-.01em}.brand,.brand:hover{text-decoration:none}.brand-avatar{display:inline-block;width:64px;height:64px;border-radius:50%;overflow:hidden;background:var(--paper-3);border:1.5px solid var(--ink);box-shadow:1.5px 1.5px 0 var(--panda-red);flex-shrink:0;position:relative}.brand-avatar-img{position:absolute;inset:0;width:130%;height:130%;left:50%;top:50%;transform:translate(-50%,-50%);object-fit:cover;object-position:center}.brand-name{display:flex;flex-direction:column;line-height:1.08;gap:4px;min-width:0}.brand-name .zh{font-family:var(--font-display);font-size:1.7rem;font-weight:500;letter-spacing:-.015em;white-space:nowrap}.brand-name .en{font-size:.95rem;letter-spacing:0;text-transform:none;color:var(--muted);font-variant-ligatures:none;font-feature-settings:"liga" 0,"calt" 0,none;white-space:nowrap}.brand-name .en,nav.primary{font-family:var(--font-body)}nav.primary{display:flex;gap:var(--sp-4);flex:1 1 auto;min-width:0;padding-left:var(--sp-4);font-size:1.04rem;font-weight:600}nav.primary,nav.primary a{align-items:center;font-variant-ligatures:none;font-feature-settings:"liga" 0,"calt" 0,none}nav.primary a{display:inline-flex;gap:9px;color:var(--ink-2);text-decoration:none;padding:12px 8px 18px;position:relative;letter-spacing:0;text-transform:none;white-space:nowrap}nav.primary a:hover{color:var(--ink)}nav.primary a .nav-icon{width:21px;height:21px;opacity:.82;flex:0 0 auto}nav.primary a:hover .nav-icon{opacity:1}nav.primary a.active{color:var(--panda-red-deep)}nav.primary a.active .nav-icon{opacity:1;color:var(--panda-red)}nav.primary a.active:after{content:"";position:absolute;left:50%;bottom:0;width:34px;height:2px;border-radius:999px;background:var(--panda-red);transform:translateX(-50%)}nav.primary .nav-rss{margin-left:auto;flex:0 0 50px;width:50px;height:50px;padding:0;border-radius:12px;text-transform:none}nav.primary .nav-rss:after{content:none}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:color-mix(in oklab,var(--paper) 88%,#fff 12%);border:1px solid var(--rule-soft);color:var(--ink-2);font-family:var(--font-body);font-size:.98rem;font-weight:600;min-width:104px;padding:12px 16px;border-radius:12px;cursor:pointer;letter-spacing:0;transition:all .12s ease}.theme-toggle:hover{color:var(--ink);border-color:var(--ink-3)}.theme-toggle-icon{width:20px;height:20px}.mobile-menu-toggle,.nav-rss{display:inline-flex;align-items:center;justify-content:center;width:50px;height:50px;border:1px solid var(--rule-soft);border-radius:12px;color:var(--ink-2);background:color-mix(in oklab,var(--paper) 88%,#fff 12%);text-decoration:none;transition:color .12s ease,border-color .12s ease,transform .12s ease}@media (max-width:1320px){.brand{flex-basis:270px;min-width:270px}.brand-name .zh{font-size:1.52rem}.brand-name .en{font-size:.86rem}nav.primary{gap:var(--sp-3);font-size:.98rem;padding-left:var(--sp-4)}nav.primary a{gap:6px;padding-left:4px;padding-right:4px}nav.primary a .nav-icon{width:19px;height:19px}.theme-toggle{min-width:92px;padding-left:13px;padding-right:13px}}.mobile-menu-toggle:hover,.nav-rss:hover{color:var(--panda-red-deep);border-color:var(--panda-red);transform:translateY(-1px);text-decoration:none}.mobile-actions{display:none;align-items:center;gap:var(--sp-3);margin-left:auto}.mobile-menu{display:none}@media (max-width:1020px){.site-header{--header-height:86px;padding:var(--sp-3) var(--sp-4)}.site-header .inner{max-width:100%;padding:var(--sp-3);gap:var(--sp-3)}.brand{flex:1 1 auto;min-width:0}nav.primary.nav-desktop{display:none}.mobile-actions{display:flex;flex:0 0 auto}.mobile-menu{display:flex;flex-direction:column;gap:2px;max-width:min(420px,calc(100vw - 32px));margin:var(--sp-3) auto 0;padding:var(--sp-3);border:1px solid var(--rule-soft);border-radius:14px;background:color-mix(in oklab,var(--paper) 94%,#fff 6%);box-shadow:0 16px 45px color-mix(in oklab,var(--ink) 10%,transparent)}.mobile-menu a{display:flex;align-items:center;gap:var(--sp-3);padding:11px 14px;border-radius:10px;color:var(--ink-2);text-decoration:none;font-weight:600;text-transform:capitalize}.mobile-menu a.active,.mobile-menu a:hover{color:var(--panda-red-deep);background:color-mix(in oklab,var(--panda-red) 10%,transparent);text-decoration:none}.mobile-menu .nav-icon,.mobile-tool svg{width:18px;height:18px;flex:0 0 auto}.mobile-menu-tools{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--sp-2);gap:var(--sp-2);margin-top:var(--sp-3);padding-top:var(--sp-3);border-top:1px solid var(--rule-soft)}.mobile-tool{justify-content:center}.mobile-tool.theme-tool{display:flex;align-items:center;justify-content:center}.mobile-tool.theme-tool .theme-toggle{width:100%;min-height:44px;border:0;background:transparent;padding:0}}@media (max-width:560px){.container,.container-narrow{padding-left:var(--sp-4);padding-right:var(--sp-4)}.site-header{--header-height:74px;padding:var(--sp-2)}.site-header .inner{padding:9px 10px;border-radius:14px}.brand{gap:var(--sp-3)}.brand-avatar{width:44px;height:44px}.brand-name .zh{font-size:1.08rem}.brand-name .en,.brand-name .zh{overflow:hidden;text-overflow:ellipsis}.brand-name .en{font-size:.72rem;max-width:min(46vw,150px);line-height:1.15}.mobile-actions{gap:0}.mobile-actions .theme-toggle,.mobile-menu-toggle,.nav-rss{width:40px;height:40px;border-radius:10px}.mobile-menu{max-width:calc(100vw - 16px);margin-top:var(--sp-2)}}.site-footer{margin-top:var(--sp-9);padding:var(--sp-7) 0 var(--sp-6);border-top:1px solid var(--rule-soft);font-family:var(--font-mono);font-size:.8rem;color:var(--muted)}.site-footer .inner{max-width:var(--max-w);margin:0 auto;padding:0 var(--sp-6);display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:var(--sp-4)}.site-footer a{color:var(--ink-2)}.eyebrow{font-family:var(--font-mono);font-size:.75rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);display:inline-flex;align-items:center;gap:var(--sp-2)}.eyebrow:before{content:"";display:inline-block;width:24px;height:1px;background:currentColor}.tag{display:inline-block;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);background:var(--paper-2);padding:2px 8px;border:1px solid var(--rule-soft);border-radius:999px}.tag.red{color:var(--panda-red-deep);background:color-mix(in oklab,var(--panda-red) 12%,var(--paper));border-color:color-mix(in oklab,var(--panda-red) 30%,var(--rule-soft))}.tag.green{color:var(--bamboo-deep);background:color-mix(in oklab,var(--bamboo) 12%,var(--paper));border-color:color-mix(in oklab,var(--bamboo) 30%,var(--rule-soft))}.tag.mustard{color:#7b5414;background:color-mix(in oklab,var(--mustard) 14%,var(--paper));border-color:color-mix(in oklab,var(--mustard) 30%,var(--rule-soft))}.btn{display:inline-flex;align-items:center;gap:var(--sp-2);padding:10px 18px;font-family:var(--font-mono);font-size:.85rem;letter-spacing:.04em;background:var(--ink);border:1.5px solid var(--ink);border-radius:var(--radius-md);cursor:pointer;transition:transform 80ms ease,box-shadow .12s ease;box-shadow:3px 3px 0 var(--panda-red)}.btn,.btn:hover{color:var(--paper);text-decoration:none}.btn:hover{transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--panda-red)}.btn:active{transform:translate(1px,1px);box-shadow:1px 1px 0 var(--panda-red)}.btn.ghost{background:transparent;color:var(--ink);box-shadow:3px 3px 0 var(--rule-soft)}.btn.ghost:hover{color:var(--ink);box-shadow:4px 4px 0 var(--rule-soft)}.hero{padding:var(--sp-8) 0 var(--sp-7);display:grid;grid-template-columns:1.3fr 1fr;grid-gap:var(--sp-7);gap:var(--sp-7);align-items:center}.hero-copy .kicker{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin-bottom:var(--sp-5);display:flex;align-items:center;gap:var(--sp-2)}.hero-copy .kicker:before{content:"●";color:var(--panda-red);animation:blink 2s ease-in-out infinite}@keyframes blink{0%,70%{opacity:1}85%{opacity:.25}to{opacity:1}}.hero h1{font-size:clamp(2.8rem,2rem + 3vw,4.5rem);margin-bottom:var(--sp-4)}.hero h1 .stroke{font-family:var(--font-body);font-style:italic;color:var(--panda-red-deep)}.hero .lede{font-size:var(--step-1);color:var(--ink-2);margin-bottom:var(--sp-5);max-width:46ch}.hero-actions{display:flex;gap:var(--sp-3);flex-wrap:wrap}.hero-portrait{position:relative;aspect-ratio:1/1;max-width:380px;margin-left:auto}.hero-portrait .frame{position:absolute;inset:0;background:var(--paper-2);border:1.5px solid var(--ink);border-radius:var(--radius-md);box-shadow:8px 8px 0 var(--panda-red);overflow:hidden}.hero-portrait img{width:100%;height:100%;object-fit:cover}.hero-portrait .stamp{top:-10px;right:-10px;background:var(--paper);border:1.5px solid var(--ink);font-size:.68rem;padding:4px 10px;letter-spacing:.12em;text-transform:uppercase;transform:rotate(4deg);color:var(--panda-red-deep);z-index:2}.hero-portrait .caption,.hero-portrait .stamp{position:absolute;font-family:var(--font-mono)}.hero-portrait .caption{bottom:-32px;left:6px;font-size:.7rem;color:var(--muted);letter-spacing:.08em}@media (max-width:820px){.hero{grid-template-columns:1fr;gap:var(--sp-6)}.hero-portrait{max-width:220px;margin-left:0}}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-5);padding-bottom:var(--sp-4);margin-bottom:var(--sp-6);border-bottom:1px solid var(--rule)}.section-head h2{margin:0;font-size:var(--step-3);font-family:var(--font-display);font-weight:400}.section-head .index{font-family:var(--font-mono);font-size:.75rem;color:var(--muted);letter-spacing:.14em;text-transform:uppercase;white-space:nowrap}.section-head .index a{color:var(--ink-2)}.post-list{list-style:none;padding:0;margin:0}.post-item{display:grid;grid-template-columns:110px 1fr auto;grid-gap:var(--sp-5);gap:var(--sp-5);padding:var(--sp-5) 0;border-bottom:1px dashed var(--rule-soft);align-items:baseline}.post-item .date{font-family:var(--font-mono);font-size:.8rem;color:var(--muted);letter-spacing:.04em}.post-item .title{font-family:var(--font-display);font-size:var(--step-2);font-weight:500;line-height:1.25;color:var(--fg);text-decoration:none;display:block;margin-bottom:4px}.post-item .title:hover{color:var(--panda-red-deep);text-decoration:none}.post-item .excerpt{color:var(--muted);font-size:.95rem;max-width:62ch;margin-top:4px}.post-item .meta{font-family:var(--font-mono);font-size:.7rem;color:var(--muted);white-space:nowrap;align-self:start;padding-top:10px}.post-item:last-child{border-bottom:none}.post-item-main{display:flex;gap:var(--sp-4);align-items:flex-start;min-width:0}.post-item-text{min-width:0;flex:1 1}.post-thumb{flex-shrink:0;width:120px;aspect-ratio:4/3;border:1.5px solid var(--ink);border-radius:var(--radius);overflow:hidden;display:block;box-shadow:3px 3px 0 var(--panda-red);transition:transform .12s ease,box-shadow .12s ease}.post-thumb:hover{transform:translate(-1px,-1px);box-shadow:4px 4px 0 var(--panda-red)}.post-thumb img{width:100%;height:100%;object-fit:cover;display:block}@media (max-width:680px){.post-thumb{width:88px}}.article-cover{max-width:var(--read-w);margin:0 auto var(--sp-6);border:1.5px solid var(--ink);border-radius:var(--radius-md);box-shadow:6px 6px 0 var(--panda-red);overflow:hidden;aspect-ratio:16/9}.article-cover img{width:100%;height:100%;object-fit:cover;display:block}@media (max-width:680px){.post-item{grid-template-columns:1fr;gap:var(--sp-2)}.post-item .meta{order:3}.section-head{align-items:flex-start;flex-direction:column;gap:var(--sp-3)}.section-head .index{white-space:normal}}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));grid-gap:var(--sp-5);gap:var(--sp-5)}.project-card{background:var(--paper-2);border:1.5px solid var(--ink);border-radius:var(--radius-md);padding:var(--sp-5);position:relative;display:flex;flex-direction:column;gap:var(--sp-3);text-decoration:none;color:inherit;transition:transform .12s ease,box-shadow .12s ease;box-shadow:4px 4px 0 var(--ink);overflow:hidden}.project-card:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--panda-red);text-decoration:none}.project-card .head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3)}.project-card .emoji{font-size:1.75rem;line-height:1;font-family:var(--font-mono);background:var(--paper);border:1.5px solid var(--ink);width:48px;height:48px;display:grid;place-items:center;border-radius:var(--radius);flex-shrink:0;font-weight:700;color:var(--ink);letter-spacing:-.05em}.project-card h3{font-size:var(--step-1);margin:0;line-height:1.2;font-weight:600;font-family:var(--font-body);letter-spacing:-.005em}.project-card .project-desc{color:var(--ink-2);font-size:.95rem;line-height:1.55;flex:1 1;margin:0}.project-audience{color:var(--muted);font-size:.84rem;line-height:1.5;margin:0}.project-card .project-meta{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);font-family:var(--font-mono);font-size:.72rem;color:var(--muted);letter-spacing:.04em;padding-top:var(--sp-3);border-top:1px dashed var(--rule-soft)}.project-card .tags{display:flex;gap:6px;flex-wrap:wrap}.project-card .status{display:inline-flex;align-items:center;gap:5px}.project-card .status .dot{width:7px;height:7px;border-radius:50%;background:var(--bamboo)}.project-card .status.ship .dot{background:var(--bamboo)}.project-card .status.wip .dot{background:var(--mustard)}.project-card .status.idea .dot{background:var(--ink-4)}.article{padding:var(--sp-7) 0}.article header{max-width:var(--read-w);margin:0 auto var(--sp-7);text-align:left}.article h1,.article header .eyebrow{margin-bottom:var(--sp-4)}.article h1{font-size:clamp(2.2rem,1.6rem + 2.2vw,3.2rem)}.article header .meta{display:flex;gap:var(--sp-4);font-family:var(--font-mono);font-size:.78rem;color:var(--muted);letter-spacing:.04em;border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft);padding:var(--sp-3) 0;margin-top:var(--sp-5);flex-wrap:wrap}.article .prose{max-width:var(--read-w);margin:0 auto;font-size:1.075rem;line-height:1.75;color:var(--ink-2)}.article .prose p{margin-bottom:var(--sp-5)}.article .prose h1{font-size:var(--step-3);font-weight:600;font-family:var(--font-display);line-height:1.2}.article .prose h1,.article .prose h2{margin-top:var(--sp-7);margin-bottom:var(--sp-4);color:var(--fg)}.article .prose h2{font-size:var(--step-2);font-weight:500}.article .prose h3{font-size:var(--step-1)}.article .prose h3,.article .prose h4{margin-top:var(--sp-6);margin-bottom:var(--sp-3);font-weight:600;font-family:var(--font-body);color:var(--fg)}.article .prose h4{font-size:1.15rem}.article .prose h5{font-size:1rem;font-family:var(--font-body);color:var(--fg);letter-spacing:.02em}.article .prose h5,.article .prose h6{margin-top:var(--sp-5);margin-bottom:var(--sp-2);font-weight:700}.article .prose h6{font-size:.85rem;font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}.article .prose ol,.article .prose ul{padding-left:1.25em;margin-bottom:var(--sp-5)}.article .prose li{margin-bottom:var(--sp-2)}.article .prose li::marker{color:var(--panda-red)}.article .prose blockquote{margin:var(--sp-5) 0;padding-left:var(--sp-5);border-left:3px solid var(--panda-red);color:var(--ink-2);font-style:italic}.article .prose blockquote p{margin-bottom:var(--sp-3)}.article .prose a{color:var(--panda-red-deep);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.article .prose a:hover{color:var(--panda-red)}.article .prose code{font-family:var(--font-mono);font-size:.9em;padding:1px 6px;background:var(--paper-2);border:1px solid var(--rule-soft);border-radius:4px}.article .prose hr{border:0;border-top:1.5px dashed var(--rule-soft);margin:var(--sp-7) auto;width:60%}.article .prose .post-img,.article .prose img{display:block;max-width:100%;height:auto;margin:var(--sp-5) auto;border:1.5px solid var(--ink);border-radius:var(--radius);box-shadow:4px 4px 0 var(--panda-red)}.article .prose strong{color:var(--fg)}.article .prose .post-table,.article .prose table{width:100%;border-collapse:collapse;margin:var(--sp-5) 0;font-size:.97rem}.article .prose table td,.article .prose table th{border:1.5px solid var(--ink);padding:10px 12px;vertical-align:top;line-height:1.55}.article .prose table th{background:var(--paper-2);font-weight:600;text-align:left}.article .prose table td>p,.article .prose table th>p{margin:0}.article .prose .table-wrap{overflow-x:auto}.article .prose .post-code-pre,.article .prose pre{background:var(--paper-3);color:var(--ink);border:1.5px solid var(--ink);border-radius:var(--radius);padding:16px 18px;margin:var(--sp-5) 0;overflow-x:auto;font-family:var(--font-mono);font-size:.88rem;line-height:1.65;box-shadow:4px 4px 0 var(--panda-red)}.article .prose .post-code-pre code,.article .prose pre code{background:transparent;border:0;padding:0;color:inherit;font-size:inherit;white-space:pre}.hljs{color:var(--ink);background:transparent}.hljs-comment,.hljs-quote{color:color-mix(in oklab,var(--ink) 50%,transparent);font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-tag{color:#b91c3d;font-weight:600}.hljs-attr,.hljs-attribute,.hljs-regexp,.hljs-string{color:#5b7b16}.hljs-built_in,.hljs-builtin-name,.hljs-bullet,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-symbol{color:#7b5414}.hljs-class .hljs-title,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#1f4e89;font-weight:600}.hljs-params{color:#1f4e89}.hljs-deletion{background:color-mix(in oklab,var(--panda-red) 18%,transparent)}.hljs-addition{background:color-mix(in oklab,#5b7b16 18%,transparent)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.page-intro{padding:var(--sp-8) 0 var(--sp-6);display:grid;grid-template-columns:auto 1fr;grid-gap:var(--sp-6);gap:var(--sp-6);align-items:end;border-bottom:1px solid var(--rule);margin-bottom:var(--sp-7)}.page-intro .num{font-family:var(--font-mono);font-size:.82rem;color:var(--muted);letter-spacing:.16em;margin-bottom:var(--sp-3)}.page-intro h1{font-size:clamp(3rem,2rem + 3vw,5rem);margin:0}.page-intro .side{max-width:42ch;color:var(--ink-2);padding-bottom:var(--sp-3)}@media (max-width:820px){.page-intro{grid-template-columns:1fr;align-items:start;gap:var(--sp-4)}}.about-grid{display:grid;grid-template-columns:1fr 1.6fr;grid-gap:var(--sp-7);gap:var(--sp-7);padding:var(--sp-7) 0;align-items:start}.about-grid .side{position:-webkit-sticky;position:sticky;top:120px}.about-card{background:var(--paper-2);border:1.5px solid var(--ink);padding:var(--sp-5);border-radius:var(--radius-md);box-shadow:5px 5px 0 var(--bamboo)}.about-card img{width:100%;aspect-ratio:1/1;object-fit:cover;background:var(--paper);border:1.5px solid var(--ink);border-radius:var(--radius)}.about-card .name{margin-top:var(--sp-4);font-family:var(--font-display);font-size:var(--step-2);line-height:1.1}.about-card .handle{font-family:var(--font-mono);font-size:.8rem;color:var(--muted);margin-top:4px;letter-spacing:.04em}.about-card .stats{margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px dashed var(--rule-soft);display:grid;grid-gap:var(--sp-2);gap:var(--sp-2);font-family:var(--font-mono);font-size:.78rem}.about-card .stats .k{color:var(--muted)}.about-card .stats .v{color:var(--fg)}.about-card .stats .row{display:flex;justify-content:space-between}.about-grid .main .prose{font-size:1.05rem;line-height:1.8;color:var(--ink-2);max-width:62ch}.about-grid .main .prose p{margin-bottom:var(--sp-5)}.about-grid .main .prose h2{font-size:var(--step-2);font-weight:500;margin-top:var(--sp-7);margin-bottom:var(--sp-4);color:var(--fg);display:flex;align-items:center;gap:var(--sp-3)}.about-grid .main .prose h2:before{content:"";display:inline-block;width:24px;height:1px;background:var(--panda-red)}.timeline{list-style:none;padding:0;margin:var(--sp-5) 0}.timeline li{display:grid;grid-template-columns:80px 1fr;grid-gap:var(--sp-4);gap:var(--sp-4);padding:var(--sp-3) 0;border-bottom:1px dashed var(--rule-soft);align-items:baseline}.timeline li:last-child{border-bottom:none}.timeline .year{font-family:var(--font-mono);font-size:.82rem;color:var(--panda-red-deep);letter-spacing:.04em}.timeline .what{color:var(--fg);font-size:.98rem}.timeline .what .detail{color:var(--muted);display:block;font-size:.88rem;margin-top:2px}@media (max-width:820px){.about-grid{grid-template-columns:1fr}.about-grid .side{position:static}}.socials{display:flex;gap:var(--sp-2);margin-top:var(--sp-4);flex-wrap:wrap}.socials a{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--rule-soft);border-radius:var(--radius);font-family:var(--font-mono);font-size:.75rem;color:var(--ink-2);letter-spacing:.04em;background:var(--paper);transition:all .12s ease}.socials a:hover{border-color:var(--ink);color:var(--ink);text-decoration:none;transform:translateY(-1px)}.now-bar{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4);background:var(--paper-2);border:1px solid var(--rule-soft);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:.82rem;color:var(--ink-2);margin:var(--sp-5) 0}.now-bar .dot{width:8px;height:8px;border-radius:50%;background:var(--bamboo);box-shadow:0 0 0 3px color-mix(in oklab,var(--bamboo) 20%,transparent);animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{box-shadow:0 0 0 3px color-mix(in oklab,var(--bamboo) 25%,transparent)}50%{box-shadow:0 0 0 6px color-mix(in oklab,var(--bamboo) 5%,transparent)}}.now-bar .label{color:var(--muted);text-transform:uppercase;letter-spacing:.12em;font-size:.7rem}.ascii-divider{font-family:var(--font-mono);color:var(--ink-4);text-align:center;letter-spacing:.2em;font-size:.85rem;margin:var(--sp-7) 0;opacity:.7}.ascii-divider,.bamboo-deco{-webkit-user-select:none;-moz-user-select:none;user-select:none}.bamboo-deco{position:absolute;pointer-events:none;opacity:.35}.tweaks-panel{position:fixed;bottom:20px;right:20px;z-index:50;background:var(--paper);border:1.5px solid var(--ink);box-shadow:5px 5px 0 var(--panda-red);border-radius:var(--radius-md);padding:var(--sp-4);width:260px;font-family:var(--font-mono);font-size:.8rem;display:none}.tweaks-panel.open{display:block}.tweaks-panel h4{margin:0 0 var(--sp-3);font-family:var(--font-mono);font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-weight:500}.tweaks-panel .field{display:flex;flex-direction:column;gap:4px;margin-bottom:var(--sp-3)}.tweaks-panel .field label{color:var(--muted);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase}.tweaks-panel .swatch-row{display:flex;gap:6px}.tweaks-panel .swatch{width:24px;height:24px;border:1.5px solid var(--ink);cursor:pointer;border-radius:var(--radius)}.tweaks-panel .swatch.active{box-shadow:0 0 0 2px var(--paper),0 0 0 3.5px var(--ink)}.tweaks-panel input[type=range],.tweaks-panel select{width:100%;font-family:var(--font-mono);font-size:.78rem;padding:4px 6px;background:var(--paper-2);border:1px solid var(--rule-soft);color:var(--fg);border-radius:var(--radius)}.muted{color:var(--muted)}.mono{font-family:var(--font-mono)}.serif{font-family:var(--font-display)}.back-link{font-family:var(--font-mono);font-size:.8rem;color:var(--muted);text-decoration:none;display:inline-flex;align-items:center;gap:6px;margin-bottom:var(--sp-5)}.back-link:hover{color:var(--ink);text-decoration:none}.back-link:before{content:"←"}.route-enter{animation:fadeUp .3s ease both}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}::selection{background:color-mix(in oklab,var(--panda-red) 40%,transparent);color:var(--ink)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:var(--paper-2)}::-webkit-scrollbar-thumb{background:var(--ink-4);border-radius:10px;border:2px solid var(--paper-2)}::-webkit-scrollbar-thumb:hover{background:var(--ink-3)}.admin-shell{min-height:100vh}.admin-header{padding:var(--sp-5) 0;border-bottom:1px solid var(--rule);background:var(--paper-2);position:-webkit-sticky;position:sticky;top:0;z-index:20}.admin-header .inner{display:flex;align-items:center;gap:var(--sp-6);max-width:var(--max-w);margin:0 auto;padding:0 var(--sp-6)}.admin-header .brand-name .zh{color:var(--panda-red-deep)}.admin-body{padding:var(--sp-7) 0 var(--sp-9)}.admin-toolbar{display:flex;justify-content:space-between;align-items:baseline;gap:var(--sp-4);margin-bottom:var(--sp-6);flex-wrap:wrap}.admin-toolbar h1{margin:0;font-size:var(--step-3)}.muted-link{font-family:var(--font-mono);font-size:.78rem;color:var(--muted);text-decoration:none}.muted-link:hover{color:var(--ink)}.admin-table{width:100%;border-collapse:collapse;font-family:var(--font-body);font-size:.95rem}.admin-table td,.admin-table th{text-align:left;padding:var(--sp-3) var(--sp-3);border-bottom:1px dashed var(--rule-soft);vertical-align:top}.admin-table th{font-family:var(--font-mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:500;border-bottom:1px solid var(--rule)}.admin-table td .row-title{font-family:var(--font-display);font-size:1.1rem}.admin-table td .row-meta{font-family:var(--font-mono);font-size:.75rem;color:var(--muted);margin-top:4px}.admin-table td.actions{white-space:nowrap;text-align:right}.admin-table .link-action{font-family:var(--font-mono);font-size:.78rem;margin-left:var(--sp-3);color:var(--ink-2)}.admin-table .link-action.danger{color:var(--panda-red-deep)}.form-card{background:var(--paper-2);border:1.5px solid var(--ink);border-radius:var(--radius-md);padding:var(--sp-6);box-shadow:4px 4px 0 var(--panda-red);max-width:760px}.settings-form{display:grid;grid-gap:var(--sp-6);gap:var(--sp-6)}.settings-form .form-card{max-width:none}.settings-form .form-card h2{font-size:var(--step-2);margin-bottom:var(--sp-5)}.settings-toggles{display:flex;flex-wrap:wrap;gap:var(--sp-4);padding:var(--sp-3) 0 0}.form-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:var(--sp-4);gap:var(--sp-4)}.form-grid .full{grid-column:1/-1}@media (max-width:680px){.form-grid{grid-template-columns:1fr}}.form-field{display:flex;flex-direction:column;gap:6px}.form-field label{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.form-field input,.form-field select,.form-field textarea{font-family:var(--font-body);font-size:.95rem;padding:8px 10px;background:var(--paper);border:1.5px solid var(--rule-soft);border-radius:var(--radius);color:var(--fg);transition:border-color .12s ease}.form-field input:focus,.form-field select:focus,.form-field textarea:focus{outline:none;border-color:var(--ink)}.check-field{display:inline-flex;align-items:center;gap:var(--sp-2);font-family:var(--font-mono);font-size:.78rem;color:var(--ink-2)}.check-field input{accent-color:var(--panda-red)}.form-field textarea{resize:vertical;min-height:240px;font-family:var(--font-mono);font-size:.88rem;line-height:1.55}.form-field .hint{font-family:var(--font-mono);font-size:.68rem;color:var(--muted);letter-spacing:.04em}.form-actions{display:flex;gap:var(--sp-3);margin-top:var(--sp-5);align-items:center}.form-actions .spacer{flex:1 1}.alert{border:1px solid color-mix(in oklab,var(--panda-red) 40%,var(--rule-soft));background:color-mix(in oklab,var(--panda-red) 8%,var(--paper));color:var(--panda-red-deep);border-radius:var(--radius);font-family:var(--font-mono);font-size:.82rem}.alert,.notice{padding:var(--sp-3) var(--sp-4);margin-bottom:var(--sp-4)}.notice{border:1px solid color-mix(in oklab,#b58400 50%,var(--rule-soft));background:color-mix(in oklab,#ffd24a 14%,var(--paper));color:#6e5210;border-radius:var(--radius);font-family:var(--font-body);font-size:.9rem;line-height:1.5}.notice-detail{margin-top:6px;font-family:var(--font-mono);font-size:.74rem;opacity:.78;word-break:break-word}.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-gap:var(--sp-4);gap:var(--sp-4)}.stat-card{background:var(--paper-2);border:1.5px solid var(--ink);border-radius:var(--radius-md);padding:var(--sp-5);box-shadow:4px 4px 0 var(--ink)}.stat-card .k{font-family:var(--font-mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;color:var(--muted)}.stat-card .v{font-family:var(--font-display);font-size:var(--step-4);margin-top:var(--sp-2);line-height:1.1}.login-wrap{min-height:70vh;display:grid;place-items:center}.login-card{width:100%;max-width:400px;background:var(--paper-2);border:1.5px solid var(--ink);border-radius:var(--radius-md);padding:var(--sp-6);box-shadow:5px 5px 0 var(--panda-red)}.login-card h1{font-size:var(--step-3);margin:0 0 var(--sp-2)}.composer{max-width:984px;margin:0 auto;background:var(--paper-2);border:1.5px solid var(--ink);border-radius:var(--radius-md);padding:var(--sp-6);box-shadow:4px 4px 0 var(--panda-red)}.hidden-file{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.cover-dropzone{width:100%;aspect-ratio:5/2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:var(--paper);border:2px dashed var(--rule-soft);border-radius:var(--radius-md);color:var(--muted);cursor:pointer;font-family:var(--font-body);font-size:.95rem;transition:border-color .12s ease,color .12s ease,background .12s ease;padding:var(--sp-5)}.cover-dropzone:hover{border-color:var(--panda-red);color:var(--ink);background:color-mix(in oklab,var(--panda-red) 5%,var(--paper))}.dropzone-icon{display:inline-flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:50%;background:var(--paper-2);border:1.5px solid var(--rule-soft);color:var(--muted)}.cover-dropzone:hover .dropzone-icon{border-color:var(--panda-red);color:var(--panda-red)}.dropzone-hint{font-size:.85rem;letter-spacing:.01em}.cover-frame{position:relative;width:100%;aspect-ratio:5/2;border-radius:var(--radius-md);overflow:hidden;border:1.5px solid var(--ink);box-shadow:4px 4px 0 var(--panda-red);background:var(--paper)}.cover-img{width:100%;height:100%;object-fit:cover;display:block}.cover-overlay{position:absolute;inset:0;background:rgba(20,18,14,.45);display:flex;align-items:center;justify-content:center;gap:10px;opacity:0;transition:opacity .14s ease}.cover-frame:focus-within .cover-overlay,.cover-frame:hover .cover-overlay{opacity:1}.overlay-btn{background:var(--paper);color:var(--ink);border:1.5px solid var(--ink);border-radius:var(--radius);padding:6px 14px;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}.overlay-btn:hover{transform:translate(-1px,-1px);box-shadow:3px 3px 0 var(--panda-red)}.overlay-btn.danger{color:var(--panda-red-deep);border-color:var(--panda-red-deep)}.cover-uploading{position:absolute;bottom:10px;right:14px;background:var(--ink);color:var(--paper);font-family:var(--font-mono);font-size:.72rem;padding:4px 10px;border-radius:var(--radius)}.composer-title{margin-top:var(--sp-5)}.composer-title input{width:100%;background:transparent;border:0;font-family:var(--font-display);font-size:clamp(1.7rem,3.4vw,2.4rem);line-height:1.18;color:var(--ink);padding:4px 0;outline:none;font-weight:600}.composer-title input::placeholder{color:color-mix(in oklab,var(--ink) 28%,transparent)}.composer-author{display:flex;align-items:center;gap:10px;margin-top:var(--sp-3);font-family:var(--font-body);font-size:.9rem}.composer-avatar{width:32px;height:32px;border-radius:50%;border:1.5px solid var(--ink);object-fit:cover;background:var(--paper)}.composer-name{font-weight:600;color:var(--ink)}.composer-handle{color:var(--muted)}.composer-body{margin-top:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-3)}.composer-body .hint{font-family:var(--font-mono);font-size:.7rem;color:var(--muted);letter-spacing:.04em}.rich{display:flex;flex-direction:column;gap:var(--sp-3)}.rich-loading{font-family:var(--font-mono);font-size:.85rem;color:var(--muted);padding:var(--sp-4)}.rich-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:4px;position:-webkit-sticky;position:sticky;top:0;z-index:5;background:var(--paper-2);border-bottom:1px solid var(--rule-soft);padding:6px 0;margin:0 calc(-1 * var(--sp-6));padding-left:var(--sp-6);padding-right:var(--sp-6)}.tb-btn{font-family:var(--font-mono);font-size:.78rem;font-weight:600;letter-spacing:.02em;background:transparent;border:0;border-radius:6px;color:var(--ink-2);padding:6px 10px;cursor:pointer;min-width:32px;line-height:1.1;transition:background .1s ease,color .1s ease}.tb-btn:hover:not(:disabled){background:var(--paper);color:var(--ink)}.tb-btn.is-active{background:var(--ink);color:var(--paper)}.tb-btn:disabled{opacity:.35;cursor:not-allowed}.tb-sep{width:1px;height:18px;background:var(--rule-soft);margin:0 6px}.tb-spacer{flex:1 1}.rich-outline{position:fixed;top:200px;left:24px;width:240px;max-height:calc(100vh - 220px);overflow-y:auto;z-index:15;padding:var(--sp-3) 0;background:var(--paper);border-right:1px solid var(--rule-soft);padding-right:var(--sp-3)}@media (max-width:1280px){.rich-outline{display:none}}.outline-title{font-family:var(--font-mono);font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-bottom:var(--sp-3);padding:0 6px}.outline-empty{font-family:var(--font-mono);font-size:.74rem;color:color-mix(in oklab,var(--muted) 70%,transparent);padding:6px;font-style:italic}.outline-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:2px}.outline-item.lvl-1 .outline-link{padding-left:6px;font-weight:600}.outline-item.lvl-2 .outline-link{padding-left:6px}.outline-item.lvl-3 .outline-link{padding-left:18px}.outline-item.lvl-4 .outline-link{padding-left:30px}.outline-item.lvl-5 .outline-link{padding-left:42px}.outline-item.lvl-6 .outline-link{padding-left:54px}.outline-link{display:block;width:100%;text-align:left;background:transparent;border:0;padding:4px 6px;font-family:var(--font-body);font-size:.85rem;line-height:1.45;color:var(--ink-2);cursor:pointer;border-left:2px solid transparent;border-radius:2px;transition:background .1s ease,color .1s ease,border-color .1s ease;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.outline-link:hover{background:var(--paper);color:var(--ink)}.outline-item.is-active .outline-link{color:var(--panda-red-deep);border-left-color:var(--panda-red);background:color-mix(in oklab,var(--panda-red) 6%,transparent)}.outline-placeholder{color:color-mix(in oklab,var(--muted) 70%,transparent);font-style:italic}.rich-content{font-family:var(--font-body);font-size:1.1rem;line-height:1.75;color:var(--ink)}.rich-content .ProseMirror{outline:none;min-height:240px;padding:var(--sp-3) 0 var(--sp-6)}.rich-content .ProseMirror p{margin:0 0 var(--sp-4)}.rich-content .ProseMirror h1{font-size:1.85rem;line-height:1.2;margin:var(--sp-6) 0 var(--sp-3)}.rich-content .ProseMirror h1,.rich-content .ProseMirror h2{font-family:var(--font-display);font-weight:600;color:var(--ink)}.rich-content .ProseMirror h2{font-size:1.5rem;line-height:1.25;margin:var(--sp-5) 0 var(--sp-3)}.rich-content .ProseMirror h3{font-size:1.25rem;font-weight:600;margin:var(--sp-5) 0 var(--sp-2);color:var(--ink)}.rich-content .ProseMirror h4{font-size:1.08rem;font-weight:600;margin:var(--sp-4) 0 var(--sp-2);color:var(--ink)}.rich-content .ProseMirror h5{font-size:.95rem;font-weight:700;margin:var(--sp-4) 0 var(--sp-1);color:var(--ink)}.rich-content .ProseMirror h6{font-family:var(--font-mono);font-size:.78rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:var(--sp-4) 0 var(--sp-1)}.rich-content .ProseMirror ol,.rich-content .ProseMirror ul{padding-left:1.4em;margin:0 0 var(--sp-4)}.rich-content .ProseMirror li{margin-bottom:4px}.rich-content .ProseMirror li::marker{color:var(--panda-red)}.rich-content .ProseMirror blockquote{margin:var(--sp-4) 0;padding-left:var(--sp-4);border-left:3px solid var(--panda-red);color:var(--ink-2);font-style:italic}.rich-content .ProseMirror a{color:var(--panda-red-deep);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.rich-content .ProseMirror code{font-family:var(--font-mono);font-size:.9em;padding:1px 6px;background:var(--paper);border:1px solid var(--rule-soft);border-radius:4px}.rich-content .ProseMirror hr{border:0;border-top:1.5px dashed var(--rule-soft);margin:var(--sp-6) auto;width:60%}.rich-content .ProseMirror .post-img,.rich-content .ProseMirror img{display:block;max-width:100%;height:auto;margin:var(--sp-4) auto;border:1.5px solid var(--ink);border-radius:var(--radius);box-shadow:4px 4px 0 var(--panda-red)}.rich-content .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);float:left;color:color-mix(in oklab,var(--ink) 28%,transparent);pointer-events:none;height:0}.rich-content .ProseMirror-selectednode{outline:2px solid var(--panda-red);outline-offset:2px}.rich-content .ProseMirror table{border-collapse:collapse;table-layout:fixed;width:100%;margin:var(--sp-4) 0;overflow:hidden}.rich-content .ProseMirror table td,.rich-content .ProseMirror table th{border:1.5px solid var(--ink);padding:8px 10px;vertical-align:top;position:relative;min-width:80px;font-size:.95rem;line-height:1.55}.rich-content .ProseMirror table th{background:var(--paper-2);font-weight:600;text-align:left}.rich-content .ProseMirror table td>p,.rich-content .ProseMirror table th>p{margin:0}.rich-content .ProseMirror table .selectedCell{background:color-mix(in oklab,var(--panda-red) 14%,var(--paper))}.rich-content .ProseMirror table .column-resize-handle{position:absolute;right:-2px;top:0;bottom:-2px;width:4px;background-color:var(--panda-red);pointer-events:none}.rich-content .ProseMirror.resize-cursor{cursor:col-resize}.rich-content .ProseMirror pre{background:var(--paper-3);color:var(--ink);border:1.5px solid var(--ink);border-radius:var(--radius);padding:14px 16px;margin:var(--sp-4) 0;overflow-x:auto;font-family:var(--font-mono);font-size:.85rem;line-height:1.6}.rich-content .ProseMirror pre code{background:transparent;border:0;padding:0;color:inherit;font-size:inherit;white-space:pre}.crop-dialog{position:fixed;inset:0;z-index:80;display:flex;flex-direction:column;background:rgba(20,18,14,.94);color:var(--paper)}.crop-header{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid color-mix(in oklab,var(--paper) 18%,transparent);gap:var(--sp-3)}.crop-back{background:transparent;border:0;color:var(--paper);font-size:1.5rem;line-height:1;cursor:pointer;padding:6px 10px;border-radius:var(--radius)}.crop-back:hover{background:color-mix(in oklab,var(--paper) 14%,transparent)}.crop-title{margin:0;font-family:var(--font-display);font-size:1.05rem;font-weight:600;letter-spacing:.02em}.crop-header .btn{margin-left:auto}.crop-stage{flex:1 1;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5)}.crop-stage,.crop-viewport{position:relative;overflow:hidden}.crop-viewport{border:2px solid var(--panda-red);box-shadow:0 12px 40px rgba(0,0,0,.5);cursor:-webkit-grab;cursor:grab;touch-action:none}.crop-viewport.is-dragging{cursor:-webkit-grabbing;cursor:grabbing}.crop-img{position:absolute;max-width:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.crop-loading{font-family:var(--font-mono);font-size:.85rem;color:color-mix(in oklab,var(--paper) 70%,transparent)}.crop-controls{display:flex;gap:14px;padding:16px 20px;border-top:1px solid color-mix(in oklab,var(--paper) 18%,transparent)}.crop-controls,.zoom-btn{align-items:center;justify-content:center}.zoom-btn{width:36px;height:36px;border-radius:50%;border:1.5px solid color-mix(in oklab,var(--paper) 35%,transparent);background:transparent;color:var(--paper);font-size:1.1rem;cursor:pointer;display:inline-flex}.zoom-btn:disabled{opacity:.35;cursor:not-allowed}.zoom-btn:hover:not(:disabled){background:color-mix(in oklab,var(--paper) 10%,transparent)}.zoom-range{width:min(360px,60vw);accent-color:var(--panda-red)}.home{padding-top:var(--sp-6);padding-bottom:var(--sp-7)}.home-hero{display:grid;grid-template-columns:1.4fr 1fr;grid-gap:var(--sp-7);gap:var(--sp-7);align-items:center;padding:var(--sp-7) 0 var(--sp-6)}.home-hero-copy .kicker{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin-bottom:var(--sp-5);display:flex;align-items:center;gap:var(--sp-2)}.home-hero-copy .kicker:before{content:"●";color:var(--panda-red);animation:blink 2s ease-in-out infinite}.home-title{font-size:clamp(2.6rem,1.8rem + 3vw,4.2rem);margin:0 0 var(--sp-4);font-weight:400;letter-spacing:-.02em}.home-title .stroke{font-style:italic;color:var(--panda-red-deep)}.home-lede{font-size:var(--step-1);color:var(--ink-2);margin:0 0 var(--sp-5);max-width:52ch;line-height:1.55}.home-hero-portrait{max-width:320px;margin-left:auto;aspect-ratio:1/1;width:100%;position:relative}.home-hero-portrait .frame{position:absolute;inset:0;background:var(--paper-2);border:1.5px solid var(--ink);border-radius:var(--radius-md);box-shadow:6px 6px 0 var(--panda-red);overflow:hidden}.home-hero-portrait img{width:100%;height:100%;object-fit:cover}@media (max-width:820px){.home-hero{grid-template-columns:1fr;gap:var(--sp-5)}.home-hero-portrait{max-width:200px;margin-left:0}}@media (max-width:560px){.home{padding-top:var(--sp-4)}.home-hero{padding:var(--sp-5) 0 var(--sp-6)}.home-hero-copy .kicker{font-size:.68rem;letter-spacing:.16em;margin-bottom:var(--sp-4)}.home-title{font-size:clamp(2.4rem,14vw,3.25rem);letter-spacing:0}.home-lede{font-size:1.05rem}.hero-actions{flex-direction:column}.hero-actions .btn{width:100%;justify-content:center;text-align:center}.now-bar{display:grid;grid-template-columns:auto 1fr;align-items:start}.now-bar .label,.now-bar .label+span{grid-column:2}}.home-social-block{padding:var(--sp-5) 0 var(--sp-6);border-top:1px dashed var(--rule-soft);border-bottom:1px dashed var(--rule-soft);margin:var(--sp-5) 0 var(--sp-6)}.home-social-block>.eyebrow{margin-bottom:var(--sp-4)}.home-socials{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-gap:var(--sp-3);gap:var(--sp-3)}.home-social{display:flex;flex-direction:row;align-items:center;gap:var(--sp-3);padding:12px 14px;border:1px solid var(--rule-soft);border-radius:var(--radius-md);background:var(--paper);color:var(--ink-2);text-decoration:none;transition:transform .12s ease,border-color .12s ease,box-shadow .12s ease}.home-social:hover{transform:translate(-1px,-1px);border-color:var(--ink);box-shadow:3px 3px 0 var(--panda-red);text-decoration:none}.home-social-icon{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;flex-shrink:0;color:var(--ink)}.home-social-icon svg{width:100%;height:100%}.home-social-text{display:flex;flex-direction:column;gap:2px;min-width:0}.home-social-label{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}.home-social-handle{font-family:var(--font-mono);font-size:.92rem;color:var(--ink);letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.home-section{padding:var(--sp-7) 0 0}.home-section+.home-section{margin-top:var(--sp-6)}.blog-toolbar{gap:var(--sp-3);margin-bottom:var(--sp-4);flex-wrap:wrap}.blog-search,.blog-toolbar{display:flex;align-items:center}.blog-search{position:relative;flex:1 1 320px;min-width:0;box-sizing:border-box;background:var(--paper);border:1.5px solid var(--rule-soft);border-radius:var(--radius-md);padding:0 12px;transition:border-color .12s ease,box-shadow .12s ease}.blog-search:focus-within{border-color:var(--ink);box-shadow:0 0 0 3px color-mix(in oklab,var(--panda-red) 22%,transparent)}.blog-search-icon{font-family:var(--font-mono);color:var(--muted);font-size:1rem;margin-right:8px}.blog-search-input{flex:1 1;min-width:0;border:0;background:transparent;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;color:var(--ink);font:inherit;font-size:.95rem;padding:10px 0;font-family:var(--font-body)}.blog-search-input::placeholder{color:var(--muted)}.blog-search-clear{border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:1.2rem;padding:0 4px;line-height:1}.blog-search-clear:hover{color:var(--ink)}.rss-pill{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border:1.5px solid var(--ink);border-radius:var(--radius-md);font-family:var(--font-mono);font-size:.78rem;letter-spacing:.12em;text-transform:uppercase;background:var(--paper);box-shadow:2px 2px 0 var(--mustard);transition:transform .12s ease,box-shadow .12s ease}.rss-pill,.rss-pill:hover{color:var(--ink);text-decoration:none}.rss-pill:hover{transform:translate(-1px,-1px);box-shadow:3px 3px 0 var(--mustard)}.rss-icon{font-size:.95rem}@media (max-width:640px){.blog-toolbar{align-items:stretch}.blog-search,.rss-pill{width:100%}.rss-pill{justify-content:center}}.blog-tags{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:var(--sp-6)}.blog-count{font-size:.75rem;letter-spacing:.1em;margin-left:auto}.blog-count,.blog-subhead{font-family:var(--font-mono);color:var(--muted);text-transform:uppercase}.blog-subhead{font-size:.78rem;letter-spacing:.16em;margin:var(--sp-5) 0 var(--sp-2)}.post-item.is-pinned{position:relative}.post-item.is-pinned:before{content:"";position:absolute;left:-10px;top:var(--sp-5);bottom:var(--sp-5);width:2px;background:var(--panda-red);border-radius:2px}.tag.pinned{color:var(--panda-red-deep);background:color-mix(in oklab,var(--panda-red) 14%,var(--paper));border-color:color-mix(in oklab,var(--panda-red) 35%,var(--rule-soft));font-weight:600}.empty-state{border:1.5px dashed var(--rule-soft);border-radius:var(--radius-md);padding:var(--sp-8) var(--sp-6);text-align:center;background:var(--paper-2)}.empty-glyph{font-size:2.2rem;margin-bottom:var(--sp-3)}.empty-title{font-family:var(--font-display);font-size:var(--step-2);font-weight:500;margin:0 0 var(--sp-3)}.empty-copy{color:var(--ink-2);max-width:52ch;margin:0 auto}.trust-strip{display:inline-flex;align-items:center;gap:var(--sp-2);margin-top:var(--sp-4);font-family:var(--font-mono);font-size:.82rem;color:var(--muted);letter-spacing:.04em}.trust-strip strong{color:var(--fg);font-weight:700}.course-grid,.offer-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));grid-gap:var(--sp-5);gap:var(--sp-5)}.course-card,.offer-card{display:flex;flex-direction:column;gap:var(--sp-4);min-height:100%;background:var(--paper-2);border:1.5px solid var(--ink);border-radius:var(--radius-md);padding:var(--sp-5);color:inherit;text-decoration:none;box-shadow:4px 4px 0 var(--ink);transition:transform .12s ease,box-shadow .12s ease}.course-card:hover,.offer-card:hover{color:inherit;text-decoration:none;transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--panda-red)}.offer-card.featured{box-shadow:5px 5px 0 var(--panda-red)}.offer-cover{overflow:hidden;border:1px solid var(--line);border-radius:var(--radius-sm);background:#f5f6f7;aspect-ratio:750/412}.offer-cover img{display:block;width:100%;height:100%;object-fit:cover}.course-card-meta,.offer-card-top{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);font-family:var(--font-mono)}.offer-price{font-family:var(--font-display);font-size:var(--step-2);line-height:1;color:var(--panda-red-deep)}.course-card h3,.offer-card h3{margin:0;font-family:var(--font-body);font-size:var(--step-2);font-weight:600}.course-card p,.offer-card p{margin:0;color:var(--ink-2)}.offer-meta{color:var(--muted);font-size:.88rem;line-height:1.55;flex:1 1}.offer-action{margin-top:auto;font-family:var(--font-mono);font-size:.78rem;color:var(--panda-red-deep);letter-spacing:.08em;text-transform:uppercase}.course-cover,.offer-cover{aspect-ratio:16/9;overflow:hidden;border:1.5px solid var(--ink);border-radius:var(--radius);background:var(--paper)}.course-cover img,.offer-cover img{width:100%;height:100%;object-fit:cover;display:block}.course-card{padding:0;overflow:hidden}.course-card-body{display:flex;flex:1 1;flex-direction:column;gap:var(--sp-3);padding:var(--sp-5)}.course-cover{border:0;border-bottom:1.5px solid var(--ink);border-radius:0}.course-cover.placeholder{display:grid;place-items:center;font-family:var(--font-mono);letter-spacing:.18em;color:var(--muted);background:var(--paper-3)}.join-box{border:1.5px solid var(--ink);border-radius:var(--radius-md);padding:var(--sp-5);background:var(--paper-2);box-shadow:4px 4px 0 var(--panda-red);margin:var(--sp-5) 0}.join-box p{margin:var(--sp-2) 0 0}.community-qr-card{margin:var(--sp-4) 0 var(--sp-5);border:1.5px solid var(--ink);border-radius:var(--radius-md);overflow:hidden;background:#fff;box-shadow:4px 4px 0 #07c160}.community-qr-card img{display:block;width:100%;height:auto}.faq-item{border-top:1px dashed var(--rule-soft);padding-top:var(--sp-4);margin-top:var(--sp-4)}.faq-item h3{font-size:var(--step-1);margin-bottom:var(--sp-2)}.wechat-promo{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,.9fr);grid-gap:var(--sp-5);gap:var(--sp-5);align-items:center;scroll-margin-top:calc(var(--header-height) + var(--sp-4));margin:0 0 var(--sp-7);padding:var(--sp-5);border:1.5px solid var(--ink);border-radius:var(--radius-md);background:var(--paper-2);box-shadow:5px 5px 0 #07c160}.wechat-promo.compact{grid-template-columns:1fr auto;margin:var(--sp-5) 0 var(--sp-6);box-shadow:4px 4px 0 #07c160}.wechat-promo h2{margin:var(--sp-2) 0 var(--sp-3);font-size:var(--step-2)}.wechat-promo p{color:var(--ink-2);margin:0}.wechat-promo-visual{display:grid;grid-template-columns:auto minmax(0,1fr);grid-gap:var(--sp-3);gap:var(--sp-3);align-items:center}.wechat-promo.compact .wechat-promo-visual{grid-template-columns:auto}.wechat-qr{width:132px;aspect-ratio:1/1;border:1.5px solid var(--ink);border-radius:var(--radius);background:#fff;display:block}.wechat-material{width:100%;max-height:150px;object-fit:contain;display:block}@media (max-width:680px){.course-grid,.offer-grid,.project-grid,.wechat-promo,.wechat-promo-visual,.wechat-promo.compact{grid-template-columns:1fr}.wechat-promo-visual{justify-items:start}.trust-strip{align-items:center;flex-wrap:wrap}}