:root{color-scheme:dark;--bg: #0b0c0a;--bg-2: #12140f;--ink: #e8e4d9;--muted: #9a9488;--faint: #6e695e;--line: rgba(232, 228, 217, .12);--line-strong: rgba(232, 228, 217, .28);--copper: #d4a574;--copper-2: #e8c49a;--moss: #8fb57a;--rust: #c46b5a;--paper: #171512;--shadow: 0 24px 60px rgba(0, 0, 0, .35);--serif: "Instrument Serif", "Songti SC", serif;--sans: "IBM Plex Sans", "Source Han Sans SC", "Noto Sans SC", sans-serif;--mono: "IBM Plex Mono", "SFMono-Regular", ui-monospace, monospace;--header-h: 4.75rem;--ease: .14s ease}[data-theme=paper]{color-scheme:light;--bg: #f3eee3;--bg-2: #ebe4d6;--ink: #1b1814;--muted: #5e584d;--faint: #8a8376;--line: rgba(27, 24, 20, .12);--line-strong: rgba(27, 24, 20, .28);--copper: #9a6230;--copper-2: #b5793c;--moss: #3f6b3a;--rust: #a33b2c;--paper: #faf6ea;--shadow: 0 18px 40px rgba(80, 55, 20, .12)}*{box-sizing:border-box}html,body,#root{min-height:100%}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + 12px)}body{margin:0;background:radial-gradient(1200px 600px at 10% -10%,color-mix(in srgb,var(--copper) 14%,transparent),transparent 50%),var(--bg);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.6;letter-spacing:.01em}body:before{content:"";pointer-events:none;position:fixed;inset:0;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)' opacity='.9'/%3E%3C/svg%3E");z-index:0}::selection{background:color-mix(in srgb,var(--copper) 38%,transparent);color:var(--ink)}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.18em}button,input,select{font:inherit;color:inherit}code,kbd,pre{font-family:var(--mono)}kbd{font-size:.82em;border:1px solid var(--line);padding:.05em .4em}#root{position:relative;z-index:1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;left:16px;top:16px;z-index:40;background:var(--paper);border:1px solid var(--copper);color:var(--ink);padding:8px 12px;text-decoration:none;transform:translateY(-160%)}.skip-link:focus{transform:none}.marks{pointer-events:none;position:fixed;inset:12px;z-index:2}.marks span{position:absolute;width:16px;height:16px;border-color:var(--copper);border-style:solid;border-width:0}.marks .tl{top:0;left:0;border-top-width:1px;border-left-width:1px}.marks .tr{top:0;right:0;border-top-width:1px;border-right-width:1px}.marks .bl{bottom:0;left:0;border-bottom-width:1px;border-left-width:1px}.marks .br{right:0;bottom:0;border-right-width:1px;border-bottom-width:1px}.site{position:relative;z-index:3;min-height:100dvh;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:8;background:var(--bg);border-bottom:1px solid var(--line)}.topbar-inner{max-width:1180px;margin:0 auto;padding:14px 28px;display:flex;align-items:center;justify-content:space-between;gap:24px}.shell{flex:1;display:flex;flex-direction:column;width:100%;max-width:1180px;margin:0 auto;padding:12px 28px 80px}#content{flex:1}.brand-nav{display:flex;align-items:baseline;gap:28px;min-width:0}.brand{display:flex;flex-direction:column;gap:2px;text-decoration:none}.brand-kicker{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--copper)}.brand-title{font-family:var(--serif);font-size:28px;line-height:1;white-space:nowrap}.nav{display:flex;flex-wrap:wrap;gap:4px 4px;font-size:14px;flex:1}.nav a{color:var(--muted);text-decoration:none;padding:6px 10px}.nav a:hover,.nav a.is-active{color:var(--ink)}.nav a.is-active{box-shadow:inset 0 -1px 0 var(--copper)}.nav-tools{display:flex;align-items:center;gap:10px}.icon-btn,.search-launch,.copy-btn,.btn,.filter-toggle{background:transparent;border:1px solid var(--line);color:var(--muted);cursor:pointer;padding:8px 12px;min-height:40px}.icon-btn:hover,.search-launch:hover,.copy-btn:hover,.filter-toggle:hover{border-color:var(--copper);color:var(--ink)}.search-launch{display:inline-flex;align-items:center;gap:10px;min-width:220px;justify-content:space-between}.search-launch kbd{font-size:11px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border-color:var(--copper);background:var(--copper);color:var(--bg);text-decoration:none;font-family:var(--mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase}.btn:hover{background:var(--copper-2);border-color:var(--copper-2);color:var(--bg)}.btn-ghost{background:transparent;color:var(--copper)}.btn-ghost:hover{color:var(--ink);background:transparent}.hero{display:grid;grid-template-columns:1.4fr .8fr;gap:48px;padding:48px 0 28px}.hero h1{font-family:var(--serif);font-weight:400;font-size:clamp(48px,7vw,92px);line-height:.92;margin:8px 0 18px}.hero h1 em{font-style:italic;color:var(--copper)}.lede{font-size:18px;color:var(--muted);max-width:38em}.hero-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}.meta-row{display:flex;flex-wrap:wrap;gap:18px;margin-top:24px;font-family:var(--mono);font-size:12px;color:var(--faint);letter-spacing:.08em;text-transform:uppercase}.stack{border-left:1px solid var(--line-strong);padding:8px 0 8px 22px;display:grid;gap:14px;align-self:center}.stack-item{display:grid;grid-template-columns:92px 1fr;gap:12px;font-size:14px}.stack-item b{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--copper);font-weight:500;padding-top:2px}.section-block{margin-top:56px}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin:12px 0 18px}.section-head h2{font-family:var(--serif);font-size:32px;font-weight:400;margin:0}.section-head a{font-family:var(--mono);font-size:12px;color:var(--copper);text-decoration:none}.section-head a:hover{color:var(--ink)}.faq{display:grid;gap:1px;background:var(--line);border:1px solid var(--line);margin:0}.faq-item{background:var(--bg);padding:18px 20px}.faq-item dt{font-family:var(--serif);font-size:22px;font-weight:400;margin:0 0 8px}.faq-item dd{margin:0;color:var(--muted)}.chapters{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}.chapter{background:var(--bg);padding:18px 16px 16px;text-decoration:none;min-height:148px;display:flex;flex-direction:column}.chapter:hover{background:var(--paper)}.chapter .no{font-family:var(--mono);font-size:11px;color:var(--copper);letter-spacing:.16em}.chapter h3{font-family:var(--serif);font-size:22px;font-weight:400;margin:8px 0;line-height:1.15;word-break:keep-all;overflow-wrap:break-word;text-wrap:balance}.chapter p{margin:0;color:var(--muted);font-size:13px;flex:1}.chapter .count,.cat-list .count{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint)}.chapter .count{margin-top:12px}.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.tip-card,.feed-item,.template-list a,.pager a{display:block;border:1px solid var(--line);padding:18px 18px 16px;text-decoration:none;background:color-mix(in srgb,var(--paper) 70%,transparent)}.tip-card:hover,.feed-item:hover,.pager a:hover,.template-list a:hover,.template-list a.is-active{border-color:var(--copper);background:var(--paper)}.tip-card .kicker,.kicker{display:flex;flex-wrap:wrap;gap:8px 10px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint)}.tip-card h3,.feed-item h3{font-family:var(--serif);font-weight:400;margin:10px 0 8px;line-height:1.2}.tip-card h3{font-size:26px}.tip-card p,.feed-item p{margin:0;color:var(--muted)}.related .tip-card h3{font-size:22px}.chip{border:1px solid var(--line);padding:3px 8px;color:var(--muted);background:transparent;font:inherit;line-height:1.3}button.chip{cursor:pointer}span.chip,a.chip{cursor:default}a.chip{cursor:pointer;text-decoration:none}.chip.is-on{border-color:var(--ink);color:var(--ink)}.chip.level-starter{color:var(--moss)}.chip.level-intermediate{color:var(--copper)}.chip.level-advanced{color:var(--rust)}.layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:36px;padding-top:28px}.side{position:sticky;top:calc(var(--header-h) + 8px);align-self:start}.side-title,.page-title{font-family:var(--serif);font-weight:400}.side-title{font-size:clamp(36px,5vw,56px);line-height:.95;margin:0}.page-title{font-size:clamp(36px,5vw,64px);line-height:.95;margin:0 0 10px}.filters{display:grid;gap:10px;margin-top:18px}.catalog-page .filters{margin-top:0;margin-bottom:18px;max-width:420px}.filters label,.filter-label{display:grid;gap:6px;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint)}.filter-label{margin:8px 0}.filters input,.filters select{width:100%;background:var(--paper);border:1px solid var(--line);padding:8px 10px;border-radius:0}.field-wrap{position:relative;display:block}.field-wrap input{padding-right:36px}.field-clear{position:absolute;right:6px;top:50%;transform:translateY(-50%);border:0;background:transparent;color:var(--faint);cursor:pointer;width:28px;height:28px;padding:0}.field-clear:hover{color:var(--ink)}.filter-toggle{width:100%;margin-top:14px;background:var(--paper);font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;text-align:left;display:flex;justify-content:space-between;align-items:center}.cat-list{display:grid;gap:2px;margin-top:22px;max-height:calc(100dvh - 280px);overflow:auto}.cat-list a{display:flex;justify-content:space-between;gap:12px;text-decoration:none;color:var(--muted);font-size:14px;padding:4px 0}.cat-list a.is-active,.cat-list a:hover{color:var(--ink)}.cat-list a.is-active{box-shadow:inset 2px 0 0 var(--copper);padding-left:10px}.results-meta{font-family:var(--mono);font-size:12px;color:var(--faint);letter-spacing:.08em;text-transform:uppercase;margin:12px 0 16px}.results-meta .query-echo{text-transform:none;letter-spacing:.02em}.active-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:16px}.article{max-width:760px}.catalog-page,.cheat-page{max-width:880px}.cheat-page{max-width:none;padding-top:28px}.article header{padding-bottom:18px;border-bottom:1px solid var(--line);margin-bottom:28px}.article h1{font-family:var(--serif);font-size:clamp(36px,6vw,58px);font-weight:400;line-height:1.05;margin:12px 0}.article h2{font-family:var(--serif);font-weight:400}.crumbs{display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin-bottom:12px}.crumbs a{color:var(--muted);text-decoration:none}.crumbs a:hover{color:var(--ink)}.md{font-size:17px}.md h1,.md h2,.md h3{font-family:var(--serif);font-weight:400}.md p,.md li{color:color-mix(in srgb,var(--ink) 92%,var(--muted))}.md a{color:var(--copper)}.md code{font-size:.86em;background:color-mix(in srgb,var(--paper) 80%,var(--bg));padding:.1em .35em}.md pre,.code-frame pre{overflow:auto;border:1px solid var(--line);background:var(--paper);padding:14px 16px;font-size:13px;line-height:1.55;margin:0}.md-pre{position:relative;margin:16px 0}.md-pre pre{padding-top:42px}.md-copy{position:absolute;top:8px;right:8px}.md table{width:100%;border-collapse:collapse;font-size:14px}.md th,.md td{border-bottom:1px solid var(--line);padding:8px 10px 8px 0;text-align:left;vertical-align:top}.md th{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint)}.sources,.related{margin-top:40px}.sources h2,.related h2{font-family:var(--mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--copper)}.sources a{color:var(--muted)}.pager{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:36px;padding-top:18px;border-top:1px solid var(--line)}.pager .dir{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--copper)}.pager strong{display:block;font-family:var(--serif);font-size:20px;font-weight:400;margin-top:4px}.pager .next{text-align:right}.pager-single{grid-template-columns:1fr}.pager-single .next{text-align:left}.cheat-layout{display:grid;grid-template-columns:168px minmax(0,1fr);gap:32px}.cheat-toc{position:sticky;top:calc(var(--header-h) + 8px);align-self:start;display:grid;gap:4px}.cheat-toc a{text-decoration:none;color:var(--muted);font-size:14px;padding:4px 0}.cheat-toc a.is-active,.cheat-toc a:hover{color:var(--ink)}.cheat{display:grid;gap:28px}.cheat-section{scroll-margin-top:calc(var(--header-h) + 16px)}.cheat-section h2{font-family:var(--serif);font-size:28px;font-weight:400;margin:0 0 10px}.cheat-table{width:100%;border-collapse:collapse}.cheat-table td{border-bottom:1px solid var(--line);padding:10px 12px 10px 0;vertical-align:top}.cheat-table td:first-child{width:38%}.cheat-cmd{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;width:100%;background:none;border:0;padding:0;color:var(--copper-2);cursor:pointer;text-align:left}.cheat-cmd code{font-size:13px;white-space:normal;word-break:break-word}.cheat-copy-hint{flex:none;font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--faint);opacity:0}.cheat-cmd:hover,.cheat-cmd:focus-visible{color:var(--copper)}.cheat-cmd:hover .cheat-copy-hint,.cheat-cmd:focus-visible .cheat-copy-hint{opacity:1}.template-list{display:grid;gap:8px;margin:8px 0 24px;max-height:calc(100dvh - 280px);overflow:auto;padding-right:4px}.template-group-label{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--copper);margin:10px 0 6px}.template-list a{padding:12px 14px}.template-file{color:var(--muted);font-size:13px;margin-top:2px;word-break:break-all}.template-head{display:flex;justify-content:space-between;gap:12px;align-items:baseline}.code-frame{border:1px solid var(--line);background:var(--paper);margin-top:18px}.code-frame-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 12px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:12px;color:var(--muted);position:sticky;top:var(--header-h);background:var(--paper);z-index:1}.code-frame pre{border:0}.modal-backdrop{position:fixed;inset:0;z-index:40;display:grid;place-items:start center;padding:10vh 16px 24px;background:#000000b8}[data-theme=paper] .modal-backdrop{background:#1b18147a}.modal-scrim{position:absolute;inset:0;border:0;background:transparent;cursor:default}.modal{position:relative;width:min(720px,100%);background:var(--paper);border:1px solid var(--line-strong);box-shadow:var(--shadow);padding:8px}.modal-head{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center}.modal input{width:100%;background:transparent;border:0;border-bottom:1px solid var(--line);padding:14px 12px;font-size:18px;outline:none}.modal-close{min-height:36px;padding:4px 10px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase}.modal-list{max-height:48vh;overflow:auto}.modal-list .empty{padding:20px 12px}.modal-list a{display:block;padding:10px 12px;text-decoration:none}.modal-list a:hover,.modal-list a.is-active{background:var(--bg-2)}.modal-hit-title{font-family:var(--serif);font-size:20px;line-height:1.25;margin:4px 0 2px}.modal-hit-summary{color:var(--muted);font-size:14px}.modal-foot{display:flex;flex-wrap:wrap;gap:14px;padding:10px 12px 6px;color:var(--faint);font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase}.modal-foot kbd{margin-right:4px}.footer{margin-top:72px;padding-top:18px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:16px;color:var(--faint);font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase}.empty{padding:48px 0;color:var(--muted)}.empty p{margin:0 0 16px}.note{border-left:2px solid var(--copper);padding:4px 0 4px 14px;color:var(--muted);margin:18px 0 28px}.chip-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.chip-row.compact{margin:12px 0 4px}.feed{display:grid;gap:12px}.feed-item{position:relative}.feed-item h3{font-size:24px}.tag-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px;font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}.ext-hint{display:inline-block;margin-top:12px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--copper)}:focus{outline:none}:focus-visible{outline:2px solid var(--copper);outline-offset:2px}.filters input:focus-visible,.filters select:focus-visible,.modal input:focus-visible{outline:1px solid var(--copper);outline-offset:0}@media(prefers-reduced-motion:no-preference){a,button,.tip-card,.feed-item,.chapter,.nav a,.pager a{transition:color var(--ease),border-color var(--ease),background-color var(--ease),box-shadow var(--ease)}.modal{animation:rise .16s ease}}@keyframes rise{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}@media(max-width:1100px){.chapters{grid-template-columns:repeat(2,1fr)}}@media(max-width:960px){.hero,.layout,.cheat-layout,.grid{grid-template-columns:1fr}.stack-item{grid-template-columns:1fr;gap:4px}.search-launch{min-width:0}.topbar-inner,.shell{padding-left:16px;padding-right:16px}.shell{padding-bottom:64px}.side,.cheat-toc{position:static}.cat-list,.template-list{max-height:40vh}.cheat-toc{position:sticky;top:var(--header-h);z-index:4;display:flex;gap:8px;overflow-x:auto;background:var(--bg);border-bottom:1px solid var(--line);margin:0 -16px 18px;padding:8px 16px 10px}.cheat-toc a{white-space:nowrap;border:1px solid var(--line);padding:6px 10px}.cheat-toc a.is-active{border-color:var(--copper);color:var(--ink)}}@media(max-width:860px){:root{--header-h: 6.75rem}.topbar-inner{display:grid;grid-template-columns:1fr auto;gap:10px 16px}.brand-nav{display:contents}.brand{grid-column:1;grid-row:1}.nav-tools{grid-column:2;grid-row:1}.nav{grid-column:1 / -1;grid-row:2;width:100%}}@media(max-width:720px){.hero{padding:28px 0 20px;gap:28px}.hero h1{font-size:44px}.brand-title{font-size:24px}.brand .brand-kicker{display:none}.search-launch{min-width:0;padding:8px 10px}.chapters{grid-template-columns:1fr}.stack{padding-left:16px}.pager{grid-template-columns:1fr}.pager .next{text-align:left}.cheat-table,.cheat-table tbody,.cheat-table tr,.cheat-table td{display:block;width:100%}.cheat-table td:first-child{border-bottom:0;padding-bottom:0;width:100%}.footer{flex-direction:column}.section-block{margin-top:40px}}@media(max-width:560px){.hero-actions{width:100%}.hero-actions .btn{flex:1}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.modal{animation:none}}
