:root{--maroon: #532638;--maroon-deep: #401E2B;--maroon-ink: #2A121B;--coral: #BE5133;--peach: #E59A63;--cream: #FCF3D8;--cream-soft: #F6F4E9;--pink: #FB6A76;--palm: #27E62B;--palm-ink: #16A534;--berry: #6A1E23;--paper: #FBF6E8;--rule: rgba(42, 18, 27, .14);--rule-strong: rgba(42, 18, 27, .35);--muted: rgba(42, 18, 27, .58);--gold: #F5D76E;--lavender: #C9B8F5;--taupe: #978A74;--stone: #C5B7A0;--serif: "Source Serif 4", ui-serif, Georgia, serif;--sans: "Inter", -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, Arial, sans-serif;--mono: "JetBrains Mono", ui-monospace, Menlo, monospace;--side: 280px;--toc: 240px}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--paper);color:var(--maroon-ink)}body{font-family:var(--sans);font-size:15.5px;line-height:1.65;-webkit-font-smoothing:antialiased}a{color:var(--coral);text-decoration:none}a:hover{text-decoration:underline}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:10px 18px;border-radius:999px;font-family:var(--sans);font-size:14px;font-weight:500;line-height:1.2;text-decoration:none;white-space:nowrap;cursor:pointer;border:1px solid var(--maroon);color:var(--maroon);background:transparent;transition:background .16s ease,color .16s ease,border-color .16s ease,transform .12s ease}.btn:hover{text-decoration:none}.btn:focus-visible,.btn.is-focus{outline:2px solid var(--coral);outline-offset:2px}.btn[disabled],.btn.is-disabled{opacity:.45;pointer-events:none}.btn-coral,.btn-coral:hover{color:var(--cream)}.btn-coral{background:var(--coral);border-color:var(--coral)}.btn-coral:hover,.btn-coral.is-hover{background:var(--maroon);border-color:var(--maroon)}.btn-primary,.btn-primary:hover{color:var(--cream)}.btn-primary{background:var(--maroon);border-color:var(--maroon)}.btn-primary:hover,.btn-primary.is-hover{background:var(--maroon-deep);border-color:var(--maroon-deep)}.btn-outline{border-color:var(--maroon);color:var(--maroon);background:transparent}.btn-outline:hover,.btn-outline.is-hover{background:var(--maroon);color:var(--cream);border-color:var(--maroon)}.btn-outline-muted{border-color:var(--rule-strong);color:var(--maroon-ink);background:transparent}.btn-outline-muted:hover,.btn-outline-muted.is-hover{background:var(--maroon);color:var(--cream);border-color:var(--maroon)}.btn-ghost{border-color:transparent;color:var(--maroon-ink);background:transparent}.btn-ghost:hover,.btn-ghost.is-hover{color:var(--coral)}.btn-mono{font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;border-color:var(--rule-strong);color:var(--maroon-ink)}.btn-mono:hover,.btn-mono.is-hover{border-color:var(--coral);color:var(--coral)}.btn-sm{padding:6px 12px;font-size:13px}.btn-lg,.btn-xl{padding:13px 22px;font-size:15px}.btn-rounded{border-radius:8px}.btn-icon{padding:0;width:36px;height:36px;border-radius:8px}.btn-icon.btn-sm{width:28px;height:28px}.btn-icon.btn-lg,.btn-icon.btn-xl{width:44px;height:44px}.btn-icon-circle{border-radius:999px}.btn-social{width:32px;height:32px;padding:0;border-radius:6px;border-color:var(--rule);color:var(--maroon);background:transparent}.btn-social:hover,.btn-social.is-hover{border-color:var(--coral);color:var(--coral);background:transparent}.caps{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.mono{font-family:var(--mono)}nav.top{position:sticky;top:0;z-index:50;background:color-mix(in oklab,var(--paper) 92%,transparent);backdrop-filter:blur(12px);border-bottom:1px solid var(--rule)}.nav-in{max-width:1480px;margin:0 auto;padding:14px 32px;display:flex;align-items:center;gap:28px}.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--maroon-ink);line-height:1}.logo:hover,.logo:hover span{text-decoration:none}.logo img{width:28px;height:28px;display:block;transform:translateY(-3px)}.logo span{font-family:var(--sans);font-size:18px;font-weight:600;letter-spacing:-.02em;line-height:1;display:inline-block}.nav-links{display:flex;gap:28px;margin-left:24px}.nav-links a{font-size:14px;color:var(--maroon-ink);text-decoration:none;padding:6px 0;position:relative}.nav-links a:hover{color:var(--coral)}.nav-dd{position:relative}.nav-dd-trigger{display:inline-flex!important;align-items:center;gap:6px}.nav-dd-trigger svg{color:var(--muted);transition:transform .15s ease}.nav-dd:hover .nav-dd-trigger svg,.nav-dd:focus-within .nav-dd-trigger svg{color:var(--coral);transform:rotate(180deg)}.nav-dd-menu{position:absolute;top:calc(100% + 8px);left:0;min-width:180px;padding:6px;background:var(--paper);border:1px solid var(--rule-strong);border-radius:10px;opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity .15s ease,transform .15s ease,visibility 0s linear .15s;display:flex;flex-direction:column;gap:2px;z-index:60}.nav-dd:hover .nav-dd-menu,.nav-dd:focus-within .nav-dd-menu{opacity:1;visibility:visible;transform:translateY(0);transition-delay:0s}.nav-dd-menu:before{content:"";position:absolute;top:-10px;left:0;right:0;height:10px}.nav-dd-menu a{display:flex!important;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px;border-radius:6px;font-size:13px;color:var(--maroon-ink);text-decoration:none}.nav-dd-menu a:hover,.nav-dd-menu a.on{color:var(--coral)}.nav-dd-menu .ver{font-family:var(--mono);font-size:13px;font-weight:500}.nav-dd-menu .tag{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;padding:2px 7px;border-radius:999px;background:color-mix(in oklab,var(--coral) 14%,var(--cream));color:var(--coral);border:1px solid color-mix(in oklab,var(--coral) 28%,transparent)}.nav-dd-menu .tag.legacy{background:transparent;color:var(--muted);border-color:var(--rule-strong)}.nav-cta{margin-left:auto;display:flex;gap:10px;align-items:center}.stars{font-family:var(--mono);font-size:12px;padding:6px 10px;border:1px solid var(--rule-strong);border-radius:999px;display:inline-flex;gap:6px;align-items:center;min-width:74px;justify-content:center;text-decoration:none;color:var(--maroon);transition:border-color .2s ease,background .2s ease,color .2s ease}.stars:hover{border-color:#be513373;background:color-mix(in oklab,var(--peach) 14%,var(--cream));color:var(--coral)}.stars .count{width:4ch;min-width:4ch;display:inline-block;text-align:center;font-variant-numeric:tabular-nums}.layout{display:grid;grid-template-columns:var(--side) 1fr var(--toc);max-width:1480px;margin:0 auto}aside.side{position:sticky;top:57px;align-self:start;height:calc(100vh - 57px);overflow-y:auto;padding:28px 20px 40px 28px;border-right:1px solid var(--rule)}aside.toc{position:sticky;top:57px;align-self:start;height:calc(100vh - 57px);overflow-y:auto;padding:28px 28px 40px 20px;border-left:1px solid var(--rule)}main.content{padding:48px 56px 96px;max-width:100%;min-width:0}.side-group{margin-bottom:22px}.side-group>h5{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 8px;padding:0 10px;display:flex;justify-content:space-between;align-items:center}.side-group>h5 .dot{width:5px;height:5px;border-radius:50%;background:var(--coral)}.side-group ul{list-style:none;margin:0;padding:0}.side-group li a{display:flex;align-items:center;gap:10px;padding:6px 10px;color:var(--maroon-ink);font-size:13.5px;border-radius:5px;text-decoration:none;line-height:1.3}.side-group li a:hover{color:var(--coral);text-decoration:none}.side-group li a.on{background:var(--maroon);color:var(--cream);font-weight:500}.side-group li a.on:before{content:"";width:3px;height:14px;background:var(--peach);border-radius:2px;margin-left:-7px;margin-right:7px}.side-group li a .num{font-family:var(--mono);font-size:10px;color:var(--muted);min-width:18px}.side-group li a.on .num{color:#fcf3d8a6}aside.toc h6{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin:0 0 12px;padding-bottom:10px;border-bottom:1px solid var(--rule)}aside.toc ul{list-style:none;margin:0;padding:0}aside.toc li a{display:flex;align-items:baseline;gap:8px;padding:4px 10px;color:var(--muted);font-size:13px;text-decoration:none;border-left:2px solid transparent;line-height:1.4}aside.toc li a:hover{color:var(--coral);text-decoration:none}aside.toc li a.on{color:var(--coral);border-left-color:var(--coral)}aside.toc li a.on .n{color:var(--coral)}aside.toc li a .n{font-family:var(--mono);font-size:12px;color:var(--muted);min-width:12px}aside.toc li a .n:after{content:" ·";opacity:.65}aside.toc li.sub a{padding-left:22px;font-size:12.5px}aside.toc .meta{margin-top:28px;padding-top:20px;border-top:1px solid var(--rule);display:flex;flex-direction:column;gap:4px}aside.toc .meta a,aside.toc .meta .edited{font-size:12.5px;color:var(--maroon-ink);padding:6px 10px;display:flex;gap:10px;align-items:center;text-decoration:none;border:1px solid transparent;border-radius:6px;transition:border-color .2s ease,background .2s ease,color .2s ease}aside.toc .meta svg{flex:none}aside.toc .meta a:hover{color:var(--coral)}aside.toc .meta .edited{color:var(--muted);cursor:default}.breadcrumb{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin-bottom:20px}.breadcrumb a{color:var(--muted);text-decoration:none}.breadcrumb a:hover{color:var(--maroon-ink)}.breadcrumb .sep{margin:0 8px;opacity:.5}.breadcrumb .now{color:var(--coral)}.prose h1{font-family:var(--serif);font-weight:400;font-size:clamp(40px,4.6vw,60px);line-height:1.02;letter-spacing:-.03em;margin:0 0 18px}.prose h1 em{font-style:italic;color:var(--coral)}.prose .lede{font-family:var(--sans);font-size:clamp(17px,1.4vw,20px);font-weight:400;line-height:1.5;letter-spacing:-.005em;margin:0 0 14px;color:var(--maroon-ink);max-width:62ch}.prose .intro-meta{display:flex;flex-wrap:wrap;gap:22px;margin:20px 0 8px;padding:14px 0 18px;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);max-width:none}.prose .intro-meta .m{display:flex;flex-direction:column;gap:2px;margin:0}.prose .intro-meta .k{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.prose .intro-meta .v{font-size:13px;font-weight:500;margin:0;display:inline-flex;align-items:center;gap:6px}.prose .intro-meta .check{flex:none}.prose h2{font-family:var(--sans);font-weight:600;font-size:28px;line-height:1.1;letter-spacing:-.025em;margin:56px 0 12px;scroll-margin-top:80px}.prose h2 em{font-style:normal;color:var(--coral)}.prose h3{font-family:var(--sans);font-weight:600;font-size:18px;line-height:1.3;letter-spacing:-.01em;margin:28px 0 10px;scroll-margin-top:80px}.prose h4{font-family:var(--sans);font-weight:600;font-size:15px;line-height:1.3;letter-spacing:-.005em;margin:22px 0 8px;scroll-margin-top:80px}.prose p{margin:12px 0;max-width:68ch}.prose ul,.prose ol{max-width:68ch;padding-left:22px}.prose li{margin:6px 0}.prose :not(pre)>code{font-family:var(--mono);font-size:13px;background:#be51331f;color:var(--berry);padding:1px 6px;border-radius:3px}.prose pre{margin:20px 0;border-radius:8px;overflow:hidden;overflow-x:auto;border:1px solid rgba(42,18,27,.2);background:var(--maroon-ink)!important;padding:18px 22px;font-family:var(--mono);font-size:13px;line-height:1.7;color:var(--cream)}.prose pre code{background:none;color:inherit;padding:0;font-size:inherit}.code-figure{margin:24px 0;border-radius:14px;overflow:hidden;background:var(--maroon-ink);border:1px solid rgba(42,18,27,.2)}.code-figure .bar{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid rgba(252,243,216,.06);font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:#fcf3d899}.code-figure .bar .dots{display:flex;gap:6px}.code-figure .bar .dots span{width:9px;height:9px;border-radius:50%;background:#fcf3d826}.code-figure .bar .right{display:flex;align-items:center;gap:12px}.code-figure .bar .file{font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:#fcf3d8b8;text-transform:none}.code-figure .bar .copy{display:inline-flex;align-items:center;gap:6px;margin:-3px 0;padding:3px 9px;font-family:var(--mono);font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:#fcf3d8b3;background:transparent;border:1px solid rgba(252,243,216,.16);border-radius:999px;cursor:pointer;opacity:0;transform:translateY(-1px);transition:opacity .18s ease,transform .18s ease,color .15s ease,border-color .15s ease,background .15s ease}.code-figure:hover .bar .copy,.code-figure:focus-within .bar .copy,.code-figure .bar .copy.copied{opacity:1;transform:none}.code-figure .bar .copy:hover{color:var(--cream);border-color:#fcf3d86b;background:#fcf3d80f}.code-figure .bar .copy:focus-visible{outline:2px solid var(--coral);outline-offset:2px}.code-figure .bar .copy .copy-ok{display:none}.code-figure .bar .copy.copied{color:#8ef09e;border-color:#8ef09e73}.code-figure .bar .copy.copied .copy-i{display:none}.code-figure .bar .copy.copied .copy-ok{display:inline-block}.code-figure .bar .copy .copy-lbl{line-height:1}@media(prefers-reduced-motion:reduce){.code-figure .bar .copy{transition:opacity .12s ease;transform:none}}.code-figure pre{margin:0!important;padding:18px 22px!important;border:0!important;border-radius:0!important;background:var(--maroon-ink)!important;font-family:var(--mono);font-size:13px;line-height:1.7;overflow-x:auto}.code-figure pre code{background:transparent;padding:0;border:0;color:inherit;font-family:var(--mono);font-size:13px}.prose .co{display:flex;gap:14px;padding:14px 16px;border:1px solid var(--rule-strong);border-radius:8px;background:var(--cream);font-size:13.5px;color:var(--maroon-ink);margin:18px 0}.prose .co .ico{width:24px;height:24px;flex:none;border-radius:50%;display:grid;place-items:center;font-family:var(--mono);font-size:12px;font-weight:500;color:var(--cream);background:var(--coral)}.prose .co .body{flex:1;line-height:1.5;min-width:0;font-size:inherit;margin:0;max-width:none}.prose .co .body>b{display:block;font-family:var(--sans);font-weight:600;font-size:11px;letter-spacing:.05em;text-transform:uppercase;margin-bottom:2px}.prose .co .body>:is(p,ul,ol):first-of-type{margin-top:0}.prose .co .body>:last-child{margin-bottom:0}.prose .co.note .ico{background:var(--berry)}.prose .co.info{border-color:color-mix(in oklab,var(--coral) 45%,transparent);background:color-mix(in oklab,var(--peach) 16%,var(--cream))}.prose .co.tip{border-color:color-mix(in oklab,var(--palm) 50%,var(--rule-strong));background:color-mix(in oklab,var(--palm) 7%,var(--cream))}.prose .co.tip .ico{background:var(--palm);color:var(--maroon-ink)}.prose .co.warn{border-color:var(--coral);background:color-mix(in oklab,var(--pink) 10%,var(--cream))}.prose .co.warn .ico{background:var(--pink);color:var(--maroon-ink)}.prose .co.danger{border-color:var(--coral);background:color-mix(in oklab,var(--pink) 20%,var(--cream))}.prose .co.danger .ico{background:var(--coral);color:var(--cream)}.prose blockquote{margin:20px 0;padding:14px 20px;border:1px solid var(--rule-strong);border-left:3px solid var(--coral);border-radius:6px;background:var(--cream);color:var(--maroon-ink)}.prose blockquote p{margin:6px 0}.prose blockquote strong{font-weight:600}.prose table{width:100%;border-collapse:collapse;margin:20px 0;font-size:14px}.prose th,.prose td{text-align:left;padding:10px 14px;border-bottom:1px solid var(--rule);vertical-align:top}.prose th{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);border-bottom-color:var(--rule-strong)}.prose img,.prose svg{max-width:100%}.prose hr{border:none;border-top:1px solid var(--rule);margin:40px 0}.pager{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:56px}.pager a{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:4px;padding:20px 22px;border:1px solid var(--rule-strong);border-radius:8px;text-decoration:none;color:var(--maroon-ink);transition:border-color .2s ease}.pager a>*{position:relative;z-index:1}.pager a:before{content:"";position:absolute;inset:0 0 0 auto;width:80px;background-image:radial-gradient(circle,rgba(190,81,51,.24) 1.2px,transparent 1.6px);background-size:11px 11px;opacity:0;transition:opacity .25s ease;pointer-events:none;-webkit-mask-image:linear-gradient(to right,transparent,#000 55%);mask-image:linear-gradient(to right,transparent,#000 55%)}.pager a.next:before{inset:0 auto 0 0;-webkit-mask-image:linear-gradient(to left,transparent,#000 55%);mask-image:linear-gradient(to left,transparent,#000 55%)}.pager a:hover{border-color:color-mix(in oklab,var(--coral) 45%,var(--rule-strong));text-decoration:none}.pager a:hover:before{opacity:1}.pager a.next{text-align:right}.pager a .dir{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.pager a .ttl{font-family:var(--sans);font-size:16px;font-weight:600;letter-spacing:-.015em;color:var(--maroon);margin-top:2px}.pager a .ttl:before{content:"← ";color:var(--coral)}.pager a.next .ttl:before{content:""}.pager a.next .ttl:after{content:" →";color:var(--coral)}.doc-foot{display:flex;justify-content:space-between;align-items:center;margin-top:40px;font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.doc-foot a{color:var(--muted);text-decoration:none;padding:4px 10px;border:1px solid var(--rule);border-radius:4px}.doc-foot a:hover{color:var(--coral);border-color:var(--coral);text-decoration:none}@media(max-width:1120px){.layout{grid-template-columns:var(--side) 1fr}aside.toc{display:none}}@media(max-width:820px){.layout{grid-template-columns:1fr}aside.side{display:none}main.content{padding:32px 24px 64px}.nav-links{display:none}}
