@font-face{font-family:Spectral;src:url(/fonts/spectral-300.woff2)format("woff2");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Spectral;src:url(/fonts/spectral-400.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Spectral;src:url(/fonts/spectral-400-italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Spectral;src:url(/fonts/spectral-500.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Spectral;src:url(/fonts/spectral-600.woff2)format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Hanken Grotesk;src:url(/fonts/hanken-100-900.woff2)format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/jetbrains-mono-400.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(/fonts/jetbrains-mono-500.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#faf9f5;--surface:#f5f4ed;--ink:#141413;--ink-body:#3d3d3a;--ink-2:#504e49;--muted:#6b6a64;--line:#e8e6dc;--line-strong:#d5d2c4;--accent:#1b365d;--accent-ink:#2d5a8a;--accent-tint:#1b365d24;--font-serif:"Spectral", "Songti SC", "Noto Serif CJK SC", "Source Han Serif SC", "STSong", Georgia, serif;--font-sans:"Hanken Grotesk", "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Microsoft YaHei", sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--pad-x:clamp(20px, 4vw, 40px);--column:900px;--ease-out:cubic-bezier(.16, 1, .3, 1)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);min-height:100dvh;color:var(--ink);font-family:var(--font-sans);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:17px;line-height:1.75}::selection{background:var(--accent-tint);color:var(--ink)}a{color:inherit;text-decoration:none}a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.skip-link{left:var(--pad-x);z-index:30;background:var(--ink);color:var(--bg);font-family:var(--font-mono);transition:top .16s var(--ease-out);padding:8px 14px;font-size:12px;position:absolute;top:-48px}.skip-link:focus-visible{top:8px}.frame{background:var(--bg);flex-direction:column;width:100%;min-height:100dvh;display:flex}.content{flex:1}.shell,main,.site-header,.site-footer{width:min(var(--column), calc(100% - 2 * var(--pad-x)));margin-inline:auto}main{padding-bottom:96px}.site-header{z-index:10;background:var(--bg);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:24px;min-height:64px;display:flex;position:sticky;top:0}.brand{min-height:44px;color:var(--ink);align-items:center;gap:10px;display:inline-flex}.brand-logo{border-radius:5px;width:22px;height:22px;display:block}.brand span{font-family:var(--font-mono);letter-spacing:.1em;font-size:13px;font-weight:500}.nav{font-family:var(--font-mono);letter-spacing:.07em;text-transform:uppercase;color:var(--muted);align-items:center;gap:16px;font-size:12px;display:flex}.nav a{min-height:36px;transition:color .14s var(--ease-out);align-items:center;display:inline-flex;position:relative}.nav a[aria-current=page]{color:var(--ink)}.nav a[aria-current=page]:before{content:"";background:var(--accent);border-radius:50%;width:5px;height:5px;margin-right:7px}.hero{border-bottom:1px solid var(--line);padding:clamp(52px,9vh,88px) 0 44px}.hero-kicker{color:var(--accent-ink);font-family:var(--font-mono);letter-spacing:.13em;text-transform:uppercase;align-items:center;gap:12px;margin:0 0 20px;font-size:12px;display:flex}.hero-kicker:before{content:"";background:var(--accent);width:28px;height:3px}.hero h1{color:var(--ink);font-family:var(--font-serif);letter-spacing:0;text-wrap:balance;margin:0;font-size:clamp(40px,6vw,64px);font-weight:500;line-height:1.28}.hero-sub{max-width:560px;color:var(--ink-2);text-wrap:pretty;margin:18px 0 0;font-size:17px;line-height:1.7}.hero-stats{color:var(--muted);font-family:var(--font-mono);letter-spacing:.07em;text-transform:uppercase;font-variant-numeric:tabular-nums;margin:26px 0 0;font-size:12px}.hero-stats a{color:var(--accent-ink)}.feed{display:grid}.entry-row{margin-inline:calc(-1 * var(--pad-x));padding:24px var(--pad-x) 26px;border-bottom:1px solid var(--line);animation:rise .5s var(--ease-out) both;grid-template-columns:104px minmax(0,1fr) auto;align-items:start;gap:22px;display:grid;position:relative}.entry-row:nth-child(2){animation-delay:40ms}.entry-row:nth-child(3){animation-delay:80ms}.entry-row:nth-child(4){animation-delay:.12s}.entry-row:nth-child(5){animation-delay:.16s}.entry-row:nth-child(6){animation-delay:.2s}.entry-row:nth-child(7){animation-delay:.24s}.entry-row:nth-child(8){animation-delay:.28s}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.entry-meta{color:var(--muted);font-family:var(--font-mono);letter-spacing:.05em;text-transform:uppercase;font-variant-numeric:tabular-nums;flex-direction:column;gap:2px;padding-top:5px;font-size:12px;line-height:1.8;display:flex}.entry-type{color:var(--ink-2)}.entry-main{min-width:0}.entry-main h2{color:var(--ink);font-family:var(--font-serif);text-wrap:balance;margin:0;font-size:22px;font-weight:500;line-height:1.4}.entry-main h2 a{transition:color .14s var(--ease-out)}.entry-main h2 a:hover{color:var(--accent-ink)}.entry-main p{max-width:62ch;color:var(--ink-2);text-wrap:pretty;margin:8px 0 0;font-size:16px;line-height:1.7}.note-snippet{max-width:38em;color:var(--ink-body);font-family:var(--font-serif);transition:color .14s var(--ease-out);font-size:20px;line-height:1.8;display:block}.note-snippet:hover{color:var(--accent-ink)}.entry-arrow{color:var(--accent);font-family:var(--font-mono);opacity:0;transition:opacity .14s var(--ease-out), transform .14s var(--ease-out);padding-top:6px;font-size:15px;transform:translate(-5px)}.tags{font-family:var(--font-mono);letter-spacing:.03em;flex-wrap:wrap;gap:6px 14px;margin-top:14px;font-size:12px;display:flex}.tags .tag{color:var(--muted);transition:color .14s var(--ease-out)}.tags .tag:before{content:"#";color:var(--accent);margin-right:1px}.tags .tag:hover{color:var(--accent-ink)}.entry-latest{color:var(--accent)}.entry-row-featured{grid-template-columns:1fr auto;padding-top:30px;padding-bottom:32px}.entry-row-featured .entry-meta{flex-direction:row;align-items:baseline;gap:14px;padding-top:0}.entry-row-featured .entry-main{grid-column:1/-1}.entry-row-featured .entry-arrow{grid-area:1/2;padding-top:0}.entry-row-featured .entry-main h2{font-size:clamp(26px,3.4vw,32px);font-weight:600}.entry-row-featured .entry-main p{max-width:68ch;font-size:16px}.entry-row-featured .note-snippet{font-size:24px}.feed>.tags{gap:10px 20px;padding:30px 0;font-size:14px}.article{max-width:760px}.article h1{color:var(--ink);font-family:var(--font-serif);text-wrap:balance;margin:0 0 20px;font-size:clamp(34px,5.5vw,50px);font-weight:500;line-height:1.3}.article-meta{border-bottom:1px solid var(--line);color:var(--muted);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;font-variant-numeric:tabular-nums;flex-wrap:wrap;align-items:center;gap:8px 16px;margin:0 0 36px;padding-bottom:24px;font-size:12px;display:flex}.article-meta .back-link{color:var(--accent-ink);margin-right:6px}.article-meta:has(+.article-meta-tags){border-bottom:none;margin-bottom:12px;padding-bottom:0}.article-meta .meta-sep{color:var(--line-strong)}.meta-button{font:inherit;color:var(--muted);cursor:pointer;letter-spacing:inherit;text-transform:uppercase;background:0 0;border:none;padding:0}.meta-button:hover{color:var(--accent-ink)}.article-body pre{position:relative}.copy-button{background:var(--bg);border:1px solid var(--line);color:var(--muted);cursor:pointer;font-family:var(--font-mono);letter-spacing:.05em;opacity:0;transition:opacity .14s var(--ease-out), color .14s var(--ease-out), border-color .14s var(--ease-out);border-radius:999px;padding:3px 10px;font-size:11px;position:absolute;top:8px;right:8px}.copy-button:hover{color:var(--accent-ink);border-color:var(--line-strong)}@media (hover:hover){.article-body pre:hover .copy-button{opacity:1}}@media (hover:none){.copy-button{opacity:1}}.article-meta a:hover{color:var(--accent-ink)}.article-body{color:var(--ink-body);font-size:18px;line-height:1.85}.article-body p{text-wrap:pretty;margin:0 0 1.4em}.article:not(.note-detail) .article-body>p:first-of-type:first-letter{float:left;color:var(--accent);font-family:var(--font-serif);padding:.08em .16em 0 0;font-size:3.1em;font-weight:500;line-height:.86}.article-body h2,.article-body h3,.article-body h4{color:var(--ink);font-family:var(--font-serif);text-wrap:balance;margin:2.2em 0 .7em;font-weight:500;line-height:1.35}.article-body h2{font-size:28px}.article-body h3{font-size:22px}.article-body h4{font-size:18px}.article-body a{color:var(--accent-ink);text-decoration:underline;-webkit-text-decoration-color:color-mix(in oklab, var(--accent) 45%, transparent);text-decoration-color:color-mix(in oklab, var(--accent) 45%, transparent);text-underline-offset:3px;transition:text-decoration-color .14s var(--ease-out)}.article-body a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.article-body code{font-family:var(--font-mono);background:var(--surface);border:1px solid var(--line);border-radius:3px;padding:.15em .38em;font-size:.84em}.article-body pre{background:var(--surface);border:1px solid var(--line);border-radius:3px;margin:1.8em 0;padding:18px 20px;line-height:1.6;overflow:auto}.article-body pre code{background:0 0;border:none;padding:0}.article-body blockquote{border-left:1px solid var(--line-strong);color:var(--muted);font-family:var(--font-serif);margin:1.8em 0;padding:2px 0 2px 20px;font-size:1.05em}.article-body figure{margin:2.2em 0}.article-body img{border:1px solid var(--line);background:var(--surface);border-radius:3px;width:100%;height:auto;display:block}.article-body figcaption{color:var(--muted);font-family:var(--font-mono);text-align:center;margin-top:12px;font-size:12px;line-height:1.5}.article-body hr{border:none;border-top:1px solid var(--line);margin:2.4em 0}.article-annotations{background:var(--surface);border:1px solid var(--line);color:var(--ink-body);border-radius:3px;margin-top:52px;padding:24px 24px 10px}.article-annotations h2{color:var(--muted);font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;margin:0 0 16px;font-size:11.5px;font-weight:500}.annotation-list p{margin:0 0 14px;font-size:15px;line-height:1.75}.annotation-list h2,.annotation-list h3,.annotation-list h4{color:var(--ink-2);font-family:var(--font-mono);letter-spacing:.06em;margin:0 0 8px;font-size:12px;font-weight:500}.tldr{background:var(--surface);border:1px solid var(--line);border-radius:5px;gap:14px;margin:0 0 30px;padding:16px 18px;display:flex}.tldr-label{color:var(--accent);font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;flex-shrink:0;padding-top:3px;font-size:11px}.tldr p{color:var(--ink-2);margin:0;font-size:15px;line-height:1.7}.related{border-top:1px solid var(--line);margin-top:44px;padding-top:20px}.related h2{color:var(--muted);font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;margin:0 0 12px;font-size:11.5px;font-weight:500}.related ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.related li{align-items:baseline;gap:12px;display:flex}.related li a{color:var(--ink);font-family:var(--font-serif);font-size:17px;font-weight:500}.related li a:hover{color:var(--accent-ink)}.related-type{color:var(--muted);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;font-size:11px}.empty-state{padding:40px 0 48px}.empty-title{color:var(--ink);font-family:var(--font-serif);margin:0;font-size:22px;font-weight:500}.empty-sub{color:var(--muted);margin:10px 0 0;font-size:15px}.empty-sub a{color:var(--accent-ink)}.empty-sub a:hover{text-decoration:underline}.hero-compact{padding:clamp(36px,6vh,56px) 0 32px}.hero-compact h1{font-size:clamp(30px,4.5vw,44px)}.site-footer{border-top:1px solid var(--line);color:var(--muted);font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 24px;padding-top:26px;padding-bottom:36px;font-size:11.5px;display:flex}.footer-links{gap:16px;display:flex}.footer-links a{transition:color .14s var(--ease-out)}.footer-links a:hover{color:var(--accent-ink)}@media (hover:hover){.nav a:hover{color:var(--ink)}.entry-row:hover{background:var(--surface)}.entry-row:hover .entry-arrow{opacity:1;transform:translate(0)}}@media (width<=760px){.site-header{flex-direction:column;align-items:flex-start;gap:4px;min-height:0;padding-top:12px;padding-bottom:10px;position:static}.nav{flex-wrap:wrap;gap:4px 14px}.nav a{min-height:32px}main{padding-bottom:72px}.hero{padding:44px 0 34px}.hero h1{font-size:clamp(32px,9vw,40px)}.hero-sub{font-size:16px}.entry-row{padding:22px var(--pad-x) 24px;grid-template-columns:minmax(0,1fr);gap:10px}.entry-meta{flex-direction:row;gap:12px;padding-top:0}.entry-arrow{display:none}.entry-main h2{font-size:21px}.entry-row-featured .entry-main h2{font-size:24px}.note-snippet{font-size:18px}.entry-row-featured .note-snippet{font-size:21px}.article-body{font-size:17px}.site-footer{flex-direction:column;align-items:flex-start}}[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#211f1c;--surface:#2b2925;--ink:#ece7db;--ink-body:#d9d3c5;--ink-2:#b4ad9e;--muted:#8e8779;--line:#3b3831;--line-strong:#4c473e;--accent:#d9a05b;--accent-ink:#e3b57a;--accent-tint:#d9a05b38}[data-theme=dark] .brand-logo{content:url(/panjin-logo-dark.svg)}body{transition:background-color .25s,color .25s}.theme-toggle,.search-button{font:inherit;color:var(--muted);border:1px solid var(--line);cursor:pointer;letter-spacing:.07em;text-transform:uppercase;min-height:32px;transition:color .14s var(--ease-out), border-color .14s var(--ease-out);background:0 0;border-radius:999px;padding:0 12px}.theme-toggle:hover,.search-button:hover{color:var(--ink);border-color:var(--line-strong)}.search-button kbd{font:inherit;opacity:.6;margin-left:2px}.palette-backdrop{z-index:40;background:#14141347;justify-content:center;align-items:flex-start;padding:18vh 20px 20px;display:flex;position:fixed;inset:0}.palette-backdrop[hidden]{display:none}.palette{background:var(--bg);border:1px solid var(--line-strong);border-radius:8px;width:min(560px,100%);overflow:hidden;box-shadow:0 16px 48px #1414132e}#palette-input{border:none;border-bottom:1px solid var(--line);width:100%;color:var(--ink);font-family:var(--font-mono);background:0 0;outline:none;padding:14px 16px;font-size:14px}#palette-results{max-height:320px;margin:0;padding:6px;list-style:none;overflow:auto}#palette-results:empty{padding:0}#palette-results li a{border-radius:5px;flex-direction:column;gap:3px;padding:10px 12px;display:flex}#palette-results li[aria-selected=true] a{background:var(--surface)}#palette-results .p-title{color:var(--ink);font-size:14px;font-weight:600}#palette-results .p-snippet{color:var(--muted);font-family:var(--font-mono);font-size:11.5px;line-height:1.5}.palette-hint{border-top:1px solid var(--line);color:var(--muted);font-family:var(--font-mono);margin:0;padding:10px 16px;font-size:11px}.theme-toggle .tt-to-light{display:none}[data-theme=dark] .theme-toggle .tt-to-light{display:inline}[data-theme=dark] .theme-toggle .tt-to-dark{display:none}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-delay:0s!important}}@media print{.site-header,.site-footer,.skip-link{display:none}main{padding:0}}
