@font-face{font-family:'Inter Var';src:url("/assets/fonts/inter-var.woff2") format("woff2");font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Inter Display';src:url("/assets/fonts/inter-display-var.woff2") format("woff2");font-weight:100 900;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'JetBrains Mono';src:url("/assets/fonts/jetbrains-mono-var.woff2") format("woff2");font-weight:100 800;font-style:normal;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:light;--paper: #F8F7F2;--ink: #182B45;--amber: #A84A08;--ink-soft: #46586E;--line: #64748B;--code-bg: #EFEDE4;--code-ink: #22344E;--link-line: #AD6430;--amber-tint: rgba(168, 74, 8, 0.06);--amber-deep: #8F3F06;--scrim: rgba(24, 43, 69, 0.55);--tk-key: var(--amber);--tk-str: #336852;--tk-num: #7C4A1D;--tk-com: var(--ink-soft);--tk-fn: var(--code-ink);--tk-punct: var(--ink-soft)}[data-theme='light']{color-scheme:light;--paper: #F8F7F2;--ink: #182B45;--amber: #A84A08;--ink-soft: #46586E;--line: #64748B;--code-bg: #EFEDE4;--code-ink: #22344E;--link-line: #AD6430;--amber-tint: rgba(168, 74, 8, 0.06);--amber-deep: #8F3F06;--scrim: rgba(24, 43, 69, 0.55);--tk-key: var(--amber);--tk-str: #336852;--tk-num: #7C4A1D;--tk-com: var(--ink-soft);--tk-fn: var(--code-ink);--tk-punct: var(--ink-soft)}[data-theme='dark']{color-scheme:dark;--paper: #0F1B2E;--ink: #EDF1F7;--amber: #E97625;--ink-soft: #A3B0C4;--line: #6E82A0;--code-bg: #0B1524;--code-ink: #E4EAF2;--link-line: #B8763A;--amber-tint: rgba(233, 118, 37, 0.10);--amber-deep: #F08A3C;--scrim: rgba(2, 6, 12, 0.62);--tk-key: var(--amber);--tk-str: #8CC4A5;--tk-num: #D2A468;--tk-com: var(--ink-soft);--tk-fn: var(--code-ink);--tk-punct: var(--ink-soft)}:root{--font-body: 'Inter Var', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;--font-display: 'Inter Display', 'Inter Var', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;--font-mono: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--fs-h1: clamp(1.75rem, 1.3rem + 2vw, 2.25rem);--fs-hero: clamp(2rem, 1.4rem + 3.2vw, 3.4rem);--fs-section: clamp(1.5rem, 1.3rem + 1vw, 2rem);--pad-hero: clamp(3.5rem, 2rem + 6vw, 6.5rem);--pad-section: clamp(2.5rem, 1.5rem + 3vw, 4rem);--header-h: 4rem;--gutter: max(1rem, calc(50vw - 43.75rem))}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;scrollbar-gutter:stable}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:1rem;line-height:1.65;font-optical-sizing:auto;overflow-wrap:break-word}::selection{background:var(--amber);color:var(--paper)}:focus-visible{outline:2px solid var(--amber);outline-offset:2px}[id]{scroll-margin-top:calc(var(--header-h) + 1.5rem)}.visually-hidden{position:absolute !important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}.skip-link{position:absolute;top:-100%;left:0;z-index:100;padding:.75rem 1.25rem;background:var(--paper);color:var(--ink);border:2px solid var(--amber);font-weight:600;text-decoration:none}.skip-link:focus{top:0}main{min-width:0}main h1,main h2,main h3,main h4,main h5,main h6{font-family:var(--font-display);color:var(--ink);line-height:1.25;text-wrap:balance}main h1{font-size:var(--fs-h1);font-weight:800;letter-spacing:-0.01em;line-height:1.2;margin:0 0 1em}main h1+p{font-size:1.075rem;line-height:1.6}main h1+h2{margin-top:1.5em}main h2{font-size:1.5rem;font-weight:700;margin:2.5em 0 .75em;padding-bottom:.35em;border-bottom:1px solid var(--line)}main h3{font-family:var(--font-body);font-size:1.2rem;font-weight:600;margin:2em 0 .6em}main h4,main h5,main h6{font-family:var(--font-body);font-size:1rem;font-weight:600;margin:1.5em 0 .5em}main p{margin:0 0 1.1em;text-wrap:pretty}main ul,main ol{margin:0 0 1.1em;padding-inline-start:1.5em}main li{margin-block:.25em}main li::marker{color:var(--amber)}main li>ul,main li>ol{margin-block:.25em}main a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--link-line);text-decoration-thickness:1px;text-decoration-skip-ink:auto;text-underline-offset:.2em}main a:hover{text-decoration-color:var(--amber)}main blockquote{margin:1.5em 0;padding:.5em 1.25em;border-left:3px solid var(--amber);background:var(--code-bg);color:var(--ink)}main blockquote strong:first-child{color:var(--amber)}main blockquote p{margin-bottom:.5em}main hr{border:0;border-top:1px solid var(--line);margin:3em 0}main .anchor{margin-inline-start:.4em;font-family:var(--font-mono);font-size:.8em;font-weight:400;color:var(--ink-soft);text-decoration:none;opacity:0}main h2:hover .anchor,main h3:hover .anchor,main .anchor:focus-visible{opacity:1}main h2:target,main h3:target,main h4:target{background:var(--amber-tint)}main h2:target{border-bottom-color:var(--amber)}main h2:target .anchor,main h3:target .anchor{opacity:1;color:var(--amber)}main img{max-width:100%;height:auto}main code,main kbd,main samp{font-family:var(--font-mono)}main .task-list{list-style:none;padding-inline-start:0}main .task-list-item{display:flex;align-items:baseline;gap:.6rem}main .task-list-item-checkbox{flex:none;accent-color:var(--amber)}main details>summary::marker{color:var(--amber)}main :not(pre)>code,main :not(pre)>samp{font-size:.95em;background:var(--code-bg);color:var(--code-ink);padding:.15em .4em}main kbd{font-size:.85em;background:var(--code-bg);color:var(--ink);padding:.15em .45em;border:1px solid var(--line)}main table{display:block;width:100%;overflow-x:auto;border-collapse:collapse;margin:2em 0;font-variant-numeric:tabular-nums}main th,main td{overflow-wrap:anywhere}main th{text-align:left;font-weight:600;padding:.6em .7em;border-top:1px solid var(--line);border-bottom:2px solid var(--ink)}main td{padding:.6em .7em;border-bottom:1px solid var(--line);vertical-align:top}main tbody tr:hover{background:var(--code-bg)}main table[data-scroll='right']{background-image:linear-gradient(to left, var(--paper), transparent);background-position:right center;background-repeat:no-repeat;background-size:2.5rem 100%}main table[data-scroll='left']{background-image:linear-gradient(to right, var(--paper), transparent);background-position:left center;background-repeat:no-repeat;background-size:2.5rem 100%}main table[data-scroll='both']{background-image:linear-gradient(to right, var(--paper), transparent),linear-gradient(to left, var(--paper), transparent);background-position:left center, right center;background-repeat:no-repeat, no-repeat;background-size:2.5rem 100%, 2.5rem 100%}main caption{text-align:left;color:var(--ink-soft);font-size:.9rem;padding-bottom:.75em}.highlighter-rouge{position:relative;margin:1.75em 0}main pre,.terminal pre{position:relative;margin:0;background:var(--code-bg);border:1px solid var(--line);padding:1.1rem 1.25rem;overflow-x:auto;font-family:var(--font-mono);font-size:.95rem;line-height:1.7;color:var(--code-ink)}main pre.has-copy{padding-right:4.5rem}main pre code,.terminal pre code{font-family:inherit;font-size:inherit;background:transparent;padding:0;color:inherit}.highlight .c,.highlight .cm,.highlight .c1,.highlight .cs,.highlight .cp,.highlight .cpf{color:var(--tk-com);font-style:italic}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt,.highlight .kc,.highlight .ow{color:var(--tk-key)}.highlight .s,.highlight .sa,.highlight .sb,.highlight .sc,.highlight .dl,.highlight .sd,.highlight .s2,.highlight .se,.highlight .sh,.highlight .si,.highlight .sx,.highlight .sr,.highlight .ss,.highlight .s1{color:var(--tk-str)}.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .il,.highlight .mo,.highlight .mx,.highlight .l,.highlight .ld,.highlight .no{color:var(--tk-num)}.highlight .n,.highlight .na,.highlight .nb,.highlight .bp,.highlight .nc,.highlight .nd,.highlight .ni,.highlight .ne,.highlight .nf,.highlight .fm,.highlight .nl,.highlight .nn,.highlight .nx,.highlight .nt,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi,.highlight .vm{color:var(--tk-fn);font-weight:600}.highlight .o,.highlight .p{color:var(--tk-punct)}main div.highlighter-rouge::after{position:absolute;right:0;bottom:-1.4rem;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft);opacity:0;transition:opacity .15s ease;pointer-events:none}main div.highlighter-rouge:hover::after,main div.highlighter-rouge:focus-within::after{opacity:1}@media (hover: none){main div.highlighter-rouge::after{opacity:1}}.terminal div.highlighter-rouge::after{display:none}main div.highlighter-rouge[data-file]::before,main pre[data-file]::before{content:attr(data-file);position:absolute;top:-1.3rem;left:0;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.04em;color:var(--ink-soft);pointer-events:none}main pre[data-file]{margin-top:1.75em}.terminal div.highlighter-rouge[data-file]::before,.terminal pre[data-file]::before{display:none}main div.highlighter-rouge.language-php::after{content:"php"}main div.highlighter-rouge.language-bash::after{content:"shell"}main div.highlighter-rouge.language-sh::after{content:"shell"}main div.highlighter-rouge.language-shell::after{content:"shell"}main div.highlighter-rouge.language-zsh::after{content:"shell"}main div.highlighter-rouge.language-console::after{content:"console"}main div.highlighter-rouge.language-json::after{content:"json"}main div.highlighter-rouge.language-yaml::after{content:"yaml"}main div.highlighter-rouge.language-yml::after{content:"yaml"}main div.highlighter-rouge.language-xml::after{content:"xml"}main div.highlighter-rouge.language-html::after{content:"html"}main div.highlighter-rouge.language-js::after{content:"javascript"}main div.highlighter-rouge.language-javascript::after{content:"javascript"}main div.highlighter-rouge.language-jsx::after{content:"jsx"}main div.highlighter-rouge.language-ts::after{content:"typescript"}main div.highlighter-rouge.language-typescript::after{content:"typescript"}main div.highlighter-rouge.language-tsx::after{content:"tsx"}main div.highlighter-rouge.language-diff::after{content:"diff"}main div.highlighter-rouge.language-ini::after{content:"ini"}main div.highlighter-rouge.language-sql::after{content:"sql"}main div.highlighter-rouge.language-python::after{content:"python"}main div.highlighter-rouge.language-ruby::after{content:"ruby"}main div.highlighter-rouge.language-neon::after{content:"neon"}main div.highlighter-rouge.language-toml::after{content:"toml"}main div.highlighter-rouge.language-lua::after{content:"lua"}main div.highlighter-rouge.language-vim::after{content:"vim"}main div.highlighter-rouge.language-elisp::after{content:"elisp"}main pre,main table,.toc,.site-sidebar,.terminal-body{scrollbar-width:thin;scrollbar-color:var(--line) transparent}main pre::-webkit-scrollbar,main table::-webkit-scrollbar,.toc::-webkit-scrollbar,.site-sidebar::-webkit-scrollbar,.terminal-body::-webkit-scrollbar{width:11px;height:11px}main pre::-webkit-scrollbar-track,.terminal-body::-webkit-scrollbar-track{background:var(--code-bg)}main pre::-webkit-scrollbar-thumb,.terminal-body::-webkit-scrollbar-thumb{background:var(--line);border:3px solid var(--code-bg)}.toc::-webkit-scrollbar-track,.site-sidebar::-webkit-scrollbar-track{background:var(--paper)}.toc::-webkit-scrollbar-thumb,.site-sidebar::-webkit-scrollbar-thumb{background:var(--line);border:3px solid var(--paper)}main table::-webkit-scrollbar-track{background:var(--paper)}main table::-webkit-scrollbar-thumb{border-color:var(--paper)}.copy-btn{position:absolute;top:.5rem;right:.5rem;z-index:1;min-width:2rem;min-height:2rem;padding:.3rem .55rem;font-family:var(--font-mono);font-size:.78rem;line-height:1;background:var(--paper);color:var(--ink-soft);border:1px solid var(--line);cursor:pointer;opacity:0;transition:opacity .15s ease}.has-copy:hover .copy-btn,.has-copy:focus-within .copy-btn,.copy-btn:focus-visible{opacity:1}.copy-btn::before{content:'';position:absolute;top:-6px;bottom:-6px;left:-4px;right:-4px}@media (hover: none){.copy-btn{opacity:1}}.copy-btn:hover{color:var(--ink);border-color:var(--ink)}.copy-btn[data-copied]{color:var(--amber);border-color:var(--amber)}.terminal{--code-bg: #182B45;--code-ink: #EDF1F7;--ink-soft: #A3B0C4;--tk-key: #F08A3C;--tk-str: #93CCAA;--tk-num: #D9AE72;--tk-com: #A3B0C4;--tk-fn: #EDF1F7;--tk-punct: #A3B0C4;--term-hairline: rgba(237, 241, 247, 0.18);background:var(--code-bg);border:1px solid var(--line)}.terminal-bar{display:flex;align-items:center;gap:.75rem;padding:.6rem 1.25rem;border-bottom:1px solid var(--term-hairline);color:var(--ink-soft);font-family:var(--font-mono);font-size:.78rem;line-height:1.4}.terminal-bar::before{content:'';width:.45rem;height:.45rem;flex:none;background:var(--tk-key)}.terminal-body{margin:0;border:0;background:transparent;padding:1.25rem 1.5rem 1.5rem;overflow-x:auto;font-family:var(--font-mono);font-size:.95rem;line-height:1.7;color:var(--code-ink)}.terminal pre.highlight{border:0;background:transparent;padding:0;color:inherit}.terminal .highlighter-rouge{margin:0}.terminal-body .command{font-weight:600}.terminal-body .t-key{color:var(--tk-key)}.terminal-body .t-str{color:var(--tk-str)}.site-header{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:1rem;min-height:var(--header-h);padding-inline:var(--gutter);background:var(--paper);border-bottom:1px solid var(--line)}.brand{display:inline-flex;align-items:center;gap:.6rem;min-height:44px;color:var(--ink);font-family:var(--font-display);font-weight:700;font-size:1.05rem;letter-spacing:-0.01em;text-decoration:none}.mark{width:28px;height:28px;flex:none;color:currentColor}.brand:hover .mark{color:var(--amber)}.mark-node{fill:var(--amber)}.brand-name{white-space:nowrap}.site-header nav{display:flex;align-items:center;margin-inline-start:auto}.site-header nav a{display:inline-flex;align-items:center;min-height:44px;padding-inline:.75rem;color:var(--ink-soft);text-decoration:none;border-bottom:1px solid transparent}.site-header nav a:hover,.site-header nav a:focus-visible{color:var(--ink);border-bottom-color:var(--amber)}.site-header nav a[aria-current='page']{color:var(--ink);border-bottom-color:var(--amber)}.site-header button{display:inline-flex;align-items:center;gap:.5rem;min-height:44px;padding-inline:.875rem;font-family:var(--font-body);font-size:.95rem;background:transparent;color:var(--ink-soft);border:1px solid var(--line);cursor:pointer}.site-header button:hover{color:var(--ink);border-color:var(--ink)}.site-header button+button{margin-inline-start:.5rem}.theme-toggle{width:44px;justify-content:center;padding-inline:0}.theme-toggle::before{content:'';width:1.25rem;height:1.25rem;flex:none;background-color:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8Z'/%3E%3C/svg%3E") center/contain no-repeat}[data-theme='dark'] .theme-toggle::before{-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Cpath d='M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4'/%3E%3C/svg%3E") center/contain no-repeat}.search-toggle kbd,.search-dialog kbd{font-family:var(--font-mono);font-size:.72rem;padding:.15em .4em;border:1px solid var(--line);background:var(--code-bg);color:var(--ink-soft)}@media (max-width: 639px){.site-header nav{display:none}.search-toggle .search-label,.search-toggle kbd{display:none}}@media (max-width: 899px){.search-toggle kbd{display:none}}@media (min-width: 1024px){.sidebar-toggle{display:none}}.page-shell{padding-inline:var(--gutter);padding-block:2rem 4rem;display:grid;grid-template-columns:minmax(0, 1fr);align-items:start}.page-main{min-width:0;display:grid;grid-template-columns:minmax(0, 1fr);gap:2rem}.page-main>main{max-width:70ch}.github-only{display:none}.icon{flex-shrink:0;width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:square;stroke-linejoin:miter}.site-sidebar{position:fixed;inset:0 auto 0 0;z-index:40;width:min(20rem, 85vw);padding:1.25rem;background:var(--paper);border-right:1px solid var(--line);overflow-y:auto;overscroll-behavior:contain;transform:translateX(-100%);transition:transform .25s ease}.site-sidebar.open{transform:translateX(0)}.sidebar-close{display:block;min-height:44px;width:100%;margin:0 0 1rem;padding:.5rem .75rem;border:1px solid var(--line);background:transparent;color:var(--ink);font:inherit}.drawer-overlay{position:fixed;inset:0;z-index:35;padding:0;border:0;background:var(--scrim)}@media (min-width: 1024px){.site-sidebar{position:sticky;inset:auto;top:calc(var(--header-h) + 1rem);z-index:auto;width:auto;max-height:calc(100vh - var(--header-h) - 2rem);max-height:calc(100dvh - var(--header-h) - 2rem);padding:0;background:transparent;border-right:0;transform:none;transition:none}.drawer-overlay{display:none}.sidebar-close{display:none}.page-shell{grid-template-columns:17rem minmax(0, 1fr);column-gap:3rem}}.nav-section+.nav-section{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--line)}.nav-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;padding-inline:.75rem;font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.nav-title::before{content:'';width:.45rem;height:.45rem;background:var(--amber)}.nav-list{list-style:none;margin:0;padding:0}.nav-list a{display:flex;align-items:center;min-height:44px;padding:.25rem .75rem;border-left:3px solid transparent;color:var(--ink-soft);font-size:.95rem;text-decoration:none}.nav-list a:hover{color:var(--ink);background:var(--code-bg)}.nav-list a[aria-current='page']{color:var(--ink);font-weight:600;border-left-color:var(--amber);background:var(--code-bg)}.nav-list .nav-list{margin-left:.75rem;padding-left:.75rem;border-left:1px solid var(--line)}.nav-list .nav-list a{min-height:44px;font-size:.9rem}.breadcrumbs{margin:0 0 1.25rem;font-size:.85rem}.breadcrumbs ol{display:flex;flex-wrap:wrap;gap:.35rem 0;align-items:center;list-style:none;margin:0;padding:0;color:var(--ink-soft)}.breadcrumbs li+li::before{content:'/';margin:0 .5rem;color:var(--line)}.breadcrumbs a{color:var(--ink-soft)}.breadcrumbs a:hover{color:var(--ink)}.breadcrumbs [aria-current='page']{color:var(--ink)}.pager{display:flex;justify-content:space-between;gap:1rem;margin-top:3rem;padding-top:1.25rem;border-top:1px solid var(--line)}.pager a.pager-prev,.pager a.pager-next{display:flex;flex-direction:column;gap:.2rem;min-height:44px;padding:.5rem .75rem;border:1px solid var(--line);color:var(--ink);text-decoration:none}.pager a.pager-prev:hover,.pager a.pager-next:hover{border-color:var(--ink);background:var(--amber-tint)}.pager a.pager-next{margin-left:auto;text-align:right}.pager-label{font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft)}.pager-title{font-weight:600}.toc{display:none;position:sticky;top:calc(var(--header-h) + 1rem);max-height:calc(100vh - var(--header-h) - 2rem);max-height:calc(100dvh - var(--header-h) - 2rem);overflow-y:auto;overscroll-behavior:contain;font-size:.9rem}.toc::before{content:'On this page';display:block;margin:0 0 .35rem;padding:0 .5rem .6rem .75rem;border-bottom:1px solid var(--line);font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.toc ul{list-style:none;margin:0;padding:0}.toc ul ul{padding-inline-start:.75rem}.toc[hidden]{display:none}.toc a{display:block;padding:.3rem .5rem .3rem .75rem;border-left:2px solid transparent;color:var(--ink-soft);line-height:1.45;text-decoration:none}.toc a:hover{color:var(--ink)}.toc a[aria-current='location']{color:var(--ink);font-weight:600;border-left-color:var(--amber)}@media (min-width: 1280px){.toc{display:block}.page-main{grid-template-columns:minmax(0, 1fr) 14rem}}.site-footer{border-top:1px solid var(--line);padding-block:2.5rem 3rem;padding-inline:var(--gutter);display:grid;grid-template-columns:repeat(auto-fit, minmax(13rem, 1fr));gap:2rem}.footer-title{display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem;font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.footer-title::before{content:'';width:.45rem;height:.45rem;flex:none;background:var(--amber)}.footer-list{list-style:none;margin:0;padding:0}.footer-list a{display:inline-block;padding-block:.3rem;color:var(--ink-soft);text-decoration:none}.footer-list a:hover{color:var(--ink)}.footer-install code{display:inline-block;font-family:var(--font-mono);font-size:.9rem;background:var(--code-bg);color:var(--code-ink);border:1px solid var(--line);padding:.6rem .8rem;overflow-wrap:anywhere}.search-dialog{position:fixed;inset:0;z-index:50;display:flex;flex-direction:column;align-items:center;padding:8vh 1rem 2rem;background:var(--scrim);overflow-y:auto}.search-dialog[hidden]{display:none}.search-dialog input[type='search']{width:min(40rem, 100%);padding:.8rem 1rem;font-family:var(--font-body);font-size:1.1rem;color:var(--ink);background:var(--paper);border:1px solid var(--line)}.search-dialog input[type='search']::placeholder{color:var(--ink-soft)}.search-dialog ul{width:min(40rem, 100%);list-style:none;margin:-1px 0 0;padding:0;background:var(--paper);border:1px solid var(--line)}.search-dialog ul:empty{display:none}.search-dialog li a{display:flex;flex-direction:column;justify-content:center;gap:.15rem;min-height:44px;padding:.5rem 1rem;color:var(--ink);text-decoration:none}.search-dialog li+li a{border-top:1px solid var(--line)}.search-dialog li a:hover,.search-dialog li a:focus-visible,.search-dialog li.active a,.search-dialog li[aria-selected='true'] a{background:var(--code-bg)}.search-dialog li a strong{font-weight:600;line-height:1.4}.search-dialog li a .result-url{font-family:var(--font-mono);font-size:.78rem;color:var(--ink-soft);overflow-wrap:anywhere}.search-dialog li a .result-section{font-size:.78rem;font-weight:400;color:var(--ink-soft)}.search-dialog li a .result-excerpt{font-size:.82rem;line-height:1.45;color:var(--ink-soft);display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}.search-dialog mark{padding:0 .05em;color:inherit;background:var(--amber-tint)}.search-panel{width:min(40rem, 100%);margin:-1px 0 0;padding:.25rem 0 .5rem;background:var(--paper);border:1px solid var(--line)}.search-panel[hidden]{display:none}.search-panel-title{margin:0;padding:.6rem 1rem .4rem;font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.search-panel a{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.1rem 1.25rem;min-height:44px;padding:.4rem 1rem;color:var(--ink);text-decoration:none}.search-panel a:hover,.search-panel a:focus-visible{background:var(--amber-tint)}.search-panel-name{font-weight:600}.search-panel-hint{font-size:.82rem;line-height:1.45;color:var(--ink-soft)}.button{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;min-height:44px;padding:.6rem 1.25rem;font-family:var(--font-body);font-size:1rem;font-weight:600;text-decoration:none;background:transparent;color:var(--ink);border:1.5px solid var(--ink);cursor:pointer}.button:hover{background:var(--code-bg)}.button-primary,.button--primary,.hero-ctas>a.button:first-of-type,main>section:not([class]) p>a.button{background:var(--amber);color:var(--paper);border-color:var(--amber)}.button-primary:hover,.button--primary:hover,.hero-ctas>a.button:first-of-type:hover,main>section:not([class]) p>a.button:hover{background:var(--amber-deep);border-color:var(--amber-deep);color:var(--paper);text-decoration:underline;text-underline-offset:.25em}.button-primary:focus-visible,.button--primary:focus-visible,.hero-ctas>a.button:first-of-type:focus-visible,main>section:not([class]) p>a.button:focus-visible{outline-color:var(--ink)}.button-secondary,.button--secondary{background:transparent;color:var(--ink);border:1.5px solid var(--ink)}.hero{padding-block:var(--pad-hero);border-bottom:1px solid var(--line)}.hero-inner{padding-inline:var(--gutter);display:grid;grid-template-columns:minmax(0, 1fr);gap:2rem 3rem;align-items:center}.hero-copy{display:grid;gap:2rem}@media (min-width: 1024px){.hero-inner{grid-template-columns:minmax(0, 1fr) minmax(0, 1fr);align-items:start}.hero-inner>.terminal{grid-column:2;align-self:center;min-width:0}}.wordmark{display:block;width:min(560px, 100%);height:auto;color:var(--ink)}.wordmark-php{fill:var(--ink)}.wordmark-regex{fill:var(--amber)}.hero-claim{margin:0;font-family:var(--font-display);font-weight:800;font-size:var(--fs-hero);line-height:1.08;letter-spacing:-0.02em;text-wrap:balance}.hero-sub{max-width:60ch;margin:0;font-size:1.125rem;line-height:1.6;color:var(--ink-soft)}.hero-ctas{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:0}.hero-ctas .install{flex:0 0 auto;width:max-content;max-width:100%}.install{position:relative;font-family:var(--font-mono);font-size:.95rem;background:var(--code-bg);border:1px solid var(--line);padding:1rem 4rem 1rem 1.25rem;overflow-x:auto}.install pre{margin:0;border:0;background:transparent;padding:0;overflow-x:auto;font-size:inherit}.install code{font-family:inherit;font-size:inherit;background:transparent;padding:0;color:var(--code-ink)}.install pre.has-copy{padding-right:0}.facts{border-block:1px solid var(--line);padding-block:2.5rem}.facts-list{padding-inline:var(--gutter);list-style:none;display:grid;grid-template-columns:repeat(auto-fit, minmax(12rem, 1fr));gap:1.5rem 2.5rem;margin-block:0}.fact strong{display:block;font-family:var(--font-display);font-weight:700;font-size:1.4rem;line-height:1.2;letter-spacing:-0.01em;font-variant-numeric:tabular-nums;color:var(--ink)}.fact span{display:block;margin-top:.25rem;font-size:.9rem;line-height:1.45;color:var(--ink-soft)}.section-title{margin:0 0 1.25rem;font-family:var(--font-display);font-weight:700;font-size:var(--fs-section);letter-spacing:-0.01em;line-height:1.2;text-wrap:balance}.pipeline,.constellation,.proof,main>section:not([class]){padding-inline:var(--gutter);padding-block:var(--pad-section)}.pipeline>p:not(:last-child),.constellation>p:not(:last-child),.proof>p:not(:last-child),main>section:not([class])>p:not(:has(a.button)){max-width:60ch;margin:0 0 2rem;font-size:1.05rem;line-height:1.6;color:var(--ink-soft)}.constellation>h3{display:flex;align-items:center;gap:.5rem;margin:2rem 0 1.25rem;padding-bottom:.6rem;border-bottom:1px solid var(--line);font-family:var(--font-body);font-size:.72rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.constellation>h3:first-of-type{margin-top:0}.constellation>h3::before{content:'';width:.45rem;height:.45rem;flex:none;background:var(--amber)}.pipeline-steps{list-style:none;margin-block:0;padding:0;display:grid;grid-template-columns:minmax(0, 1fr);gap:2rem;counter-reset:step}.step{counter-increment:step;display:grid;grid-template-columns:2.5rem minmax(0, 1fr);grid-template-areas:'mark number' 'mark title' 'text text';column-gap:1rem;row-gap:.5rem}.step::before{content:counter(step,decimal-leading-zero);grid-area:number;align-self:end;justify-self:end;font-family:var(--font-mono);font-size:.78rem;line-height:1;color:var(--ink-soft)}@media (min-width: 1024px){.pipeline-steps{grid-template-columns:repeat(3, minmax(0, 1fr))}}.step-mark{grid-area:mark;align-self:start;width:2.5rem;height:2.5rem;display:grid;place-items:center;border:1px solid var(--line)}.step-mark::before{content:'';width:12px;height:12px;background:radial-gradient(circle 5px at center, var(--amber) 99%, transparent 100%)}.step h3{grid-area:title;align-self:end;margin:0}.step p{grid-area:text;margin:0;color:var(--ink-soft)}.component-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(16rem, 1fr));gap:1.25rem}.component{display:flex;flex-direction:column;gap:.5rem;padding:1.5rem;border:1px solid var(--line);color:var(--ink);text-decoration:none}.component:hover{border-color:var(--amber);background:var(--amber-tint)}.component-name{margin:0;font-family:var(--font-display);font-weight:700;font-size:1.05rem;line-height:1.3}.component-desc{margin:0;flex-grow:1;color:var(--ink-soft);font-size:.92rem;line-height:1.5}.component-link,.component>a{margin-top:.5rem;font-size:.9rem;color:var(--amber)}.component-link:hover,.component>a:hover{color:var(--amber-deep);text-decoration:underline;text-underline-offset:.25em}.component pre{padding:.65rem .8rem;font-size:.82rem;line-height:1.55}.proof-grid{display:grid;grid-template-columns:minmax(0, 1fr);gap:1.25rem}@media (min-width: 1024px){.proof-grid{grid-template-columns:repeat(2, minmax(0, 1fr))}}.proof-card{padding:1.5rem;border:1px solid var(--line)}.proof-card:hover{border-color:var(--ink)}.proof-card-title{margin:0 0 .5rem;font-family:var(--font-display);font-weight:700;font-size:1.05rem;line-height:1.3}.proof-card p{margin:0 0 .75rem;color:var(--ink-soft);font-size:.92rem;line-height:1.5}.proof-card ul{list-style:none;margin:0;padding:0}.proof-card ul a{display:inline-block;padding-block:.3rem;color:var(--ink-soft);text-decoration:none}.proof-card ul a:hover{color:var(--ink)}.error-page{padding:var(--pad-hero) var(--gutter);display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:55vh;text-align:center}.mark-large{width:120px;height:120px;margin-bottom:1.5rem;color:var(--ink)}.error-page h1{margin:.5rem 0 .75rem}.error-page p{color:var(--ink-soft);max-width:50ch}.error-hint{font-size:.95rem}.error-code{margin:1.5rem 0 0;font-family:var(--font-display);font-weight:800;font-size:clamp(4rem, 12vw, 7rem);line-height:1;letter-spacing:-0.03em;color:var(--amber)}.error-page .error-sub{max-width:44ch;color:var(--ink-soft)}.error-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:.75rem;list-style:none;margin:1.5rem 0 0;padding:0}.error-actions a{color:var(--ink)}.error-suggest{margin:1.75rem 0 0}.error-suggest-title{margin:0 0 .5rem;font-size:.95rem;color:var(--ink-soft)}.error-suggest ul{display:flex;flex-wrap:wrap;justify-content:center;gap:.35rem 1.25rem;list-style:none;margin:0;padding:0}.error-suggest a{color:var(--ink)}.error-suggest-section{font-size:.82rem;color:var(--ink-soft)}@media (prefers-reduced-motion: no-preference){html{scroll-behavior:smooth}}@media (prefers-reduced-motion: reduce){*,*::before,*::after{transition-duration:0.01ms !important;animation:none !important}}@media print{:root,[data-theme='dark']{--paper: #fff;--ink: #182b45;--amber: #a84a08;--ink-soft: #46586e;--line: #64748b;--code-bg: #f4f2ec;color-scheme:light}body{background:#fff;color:var(--ink)}.site-header,.site-sidebar,.toc,.search-dialog,.search-panel,.drawer-overlay,.skip-link,.pager,.copy-btn,.anchor,.to-top,.site-footer{display:none !important}.page-shell,.page-main{display:block;padding:0;max-width:none}main{width:100%}pre,code,table{white-space:pre-wrap;word-break:break-word}pre,table,figure{break-inside:avoid}h1,h2,h3{break-after:avoid}a{color:var(--ink);text-decoration:underline}main a[href^='http']::after{content:" " attr(href);font-size:.85em;color:var(--ink-soft);word-break:break-all}main div.highlighter-rouge::after{position:static;display:block;margin-top:.35rem;text-align:right;opacity:1}main div.highlighter-rouge[data-file]::before,main pre[data-file]::before{position:static;display:block;margin:0 0 .35rem}.terminal{border:1px solid var(--line)}}body.drawer-open,body.search-open{overflow:hidden}.page-meta{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;margin:1rem 0 0;font-size:.85rem}.page-meta .edit-link{color:var(--ink-soft)}.copy-source{min-height:24px;padding:0;border:0;background:none;color:var(--ink-soft);font:inherit;text-decoration:underline;cursor:pointer}.copy-source:hover{color:var(--amber)}.search-toggle,.sidebar-toggle{display:inline-flex;align-items:center;gap:.45rem}.pager-label,.edit-link,.copy-source{display:inline-flex;align-items:center;gap:.35rem}.to-top{display:none;position:fixed;right:max(1rem, var(--gutter));bottom:1rem;z-index:20;align-items:center;justify-content:center;width:44px;height:44px;padding:0;background:var(--paper);color:var(--ink-soft);border:1px solid var(--line);cursor:pointer}@media (max-width: 1279px){.to-top{display:flex}.to-top[hidden]{display:none}}.to-top:hover,.to-top:focus-visible{color:var(--ink);border-color:var(--ink)}@media (max-width: 639px){.pager{flex-direction:column;align-items:stretch}.pager a.pager-next{margin-left:0;text-align:left}}@media (max-width: 359px){.brand-name{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}}@media (forced-colors: active){main :not(pre)>code,main :not(pre)>samp,main kbd{border:1px solid CanvasText}main blockquote{border-left:3px solid CanvasText}}
