@import "https://fonts.googleapis.com/css2?family=Figtree:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap";:root,[data-theme=light]{color-scheme:light;--primary:#2563eb;--primary-hover:#1d4ed8;--on-primary:#fff;--primary-text:#1d4ed8;--primary-soft:#eff5ff;--primary-bright:#4f9cf9;--primary-deep:#030776;--surface:#fff;--surface-raised:#f8fafc;--surface-sunken:#f1f5f9;--code-surface:#0f1729;--code-ink:#e2e8f0;--code-muted:#94a3b8;--syntax-keyword:#93c5fd;--syntax-string:#a7f3d0;--syntax-attribute:#c4b5fd;--syntax-variable:#fde68a;--code-highlight:#60a5fa24;--code-added:#34d3991f;--code-added-ink:#34d399;--code-removed:#f871711f;--code-removed-ink:#f87171;--border:#e2e8f0;--border-control:#8190a5;--ink:#0f1729;--ink-muted:#475569;--ink-subtle:#64748b;--success:#047857;--success-soft:#ecfdf5;--warning:#b45309;--warning-soft:#fffbeb;--danger:#dc2626;--danger-soft:#fef2f2;--overlay:#0f172973;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-12:48px;--space-16:64px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:16px;--radius-full:9999px;--shadow-sm:0 1px 2px 0 #0f17290f;--shadow-lg:0 12px 32px -8px #0f17292e, 0 4px 8px -4px #0f172914;--header-height:64px;--sidebar-width:256px;--toc-width:224px;--content-width:720px;--page-width:1440px;--z-header:30;--z-drawer:40;--z-dialog:50;--font-sans:"Figtree", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace}[data-theme=dark]{color-scheme:dark;--primary:#60a5fa;--primary-hover:#93c5fd;--on-primary:#0f1729;--primary-text:#93c5fd;--primary-soft:#15254a;--primary-deep:#c7d7fe;--surface:#0f1729;--surface-raised:#172033;--surface-sunken:#1e293b;--code-surface:#0a101f;--border:#263248;--border-control:#5b6b83;--ink:#f1f5f9;--ink-muted:#94a3b8;--ink-subtle:#7c8ba1;--success:#34d399;--success-soft:#0f2a26;--warning:#fbbf24;--warning-soft:#2b2111;--danger:#f87171;--danger-soft:#2f1619;--overlay:#020610b8;--shadow-sm:0 1px 2px 0 #0006;--shadow-lg:0 12px 32px -8px #0009, 0 4px 8px -4px #0006}:where(code,kbd,pre,samp){font-variant-ligatures:none}:where(body){background:var(--surface);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:28px}.ph-btn{justify-content:center;align-items:center;gap:var(--space-2);box-sizing:border-box;height:40px;padding:0 var(--space-4);border-radius:var(--radius-md);font:600 14px/20px var(--font-sans);cursor:pointer;white-space:nowrap;border:1px solid #0000;text-decoration:none;transition:background-color .15s ease-out,color .15s ease-out,border-color .15s ease-out;display:inline-flex}.ph-btn svg{flex:none;width:20px;height:20px}.ph-btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-btn--primary{background:var(--primary);color:var(--on-primary)}.ph-btn--primary:hover{background:var(--primary-hover)}.ph-btn--secondary{background:var(--surface);color:var(--ink);border-color:var(--border-control);box-shadow:var(--shadow-sm)}.ph-btn--secondary:hover{background:var(--surface-sunken)}.ph-btn--ghost{color:var(--primary-text);background:0 0}.ph-btn--ghost:hover{background:var(--primary-soft)}.ph-btn--danger{background:var(--danger);color:var(--surface)}.ph-btn--sm{height:32px;padding:0 var(--space-3);font-size:13px}.ph-btn[disabled],.ph-btn[aria-disabled=true]{opacity:.5;cursor:not-allowed}.ph-spinner{border-radius:var(--radius-full);border:2px solid;border-right-color:#0000;width:16px;height:16px;animation:.7s linear infinite ph-spin}@keyframes ph-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.ph-spinner{animation-duration:2s}}.ph-badge{align-items:center;gap:var(--space-1);padding:2px var(--space-2);border-radius:var(--radius-full);font:600 12px/16px var(--font-sans);background:var(--surface-sunken);color:var(--ink-muted);border:1px solid var(--border);display:inline-flex}.ph-badge--primary{background:var(--primary-soft);color:var(--primary-text);border-color:#0000}.ph-badge--success{background:var(--success-soft);color:var(--success);border-color:#0000}.ph-badge--solid{background:var(--primary);color:var(--on-primary);border-color:#0000}.ph-callout{gap:var(--space-3);padding:var(--space-4);border-radius:var(--radius-lg);border:1px solid var(--border);background:var(--surface-raised);color:var(--ink);font:400 15px/24px var(--font-sans);display:flex}.ph-callout>svg{width:20px;height:20px;color:var(--ink-muted);flex:none;margin-top:2px}.ph-callout p{margin:0}.ph-callout strong{font-weight:700}.ph-callout code{font:500 .875em/1 var(--font-mono);font-variant-ligatures:none;background:var(--surface-sunken);border-radius:var(--radius-sm);padding:2px 5px}.ph-callout--info{background:var(--primary-soft);border-color:var(--primary)}.ph-callout--info>svg{color:var(--primary-text)}.ph-callout--tip{background:var(--success-soft);border-color:var(--success)}.ph-callout--tip>svg{color:var(--success)}.ph-callout--warning{background:var(--warning-soft);border-color:var(--warning)}.ph-callout--warning>svg{color:var(--warning)}.ph-code{border-radius:var(--radius-lg);background:var(--code-surface);color:var(--code-ink);border:1px solid var(--border);overflow:hidden}.ph-code__bar{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3) var(--space-2) var(--space-5);font:500 12px/16px var(--font-mono);font-variant-ligatures:none;color:var(--code-muted);border-bottom:1px solid #94a3b82e;display:flex}.ph-code__copy{border-radius:var(--radius-sm);width:28px;height:28px;color:var(--code-muted);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.ph-code__copy:hover{color:var(--code-ink);background:#94a3b824}.ph-code__copy:focus-visible{outline:2px solid var(--syntax-keyword);outline-offset:1px}.ph-code__copy svg{width:16px;height:16px}.ph-code pre{padding:var(--space-4) var(--space-5);font:400 14px/24px var(--font-mono);font-variant-ligatures:none;margin:0;overflow-x:auto}.ph-code .k{color:var(--syntax-keyword)}.ph-code .s{color:var(--syntax-string)}.ph-code .a{color:var(--syntax-attribute)}.ph-code .v{color:var(--syntax-variable)}.ph-code .c{color:var(--code-muted);font-style:italic}.ph-nav{gap:var(--space-8);box-sizing:border-box;width:256px;padding:var(--space-6) var(--space-4);background:var(--surface-raised);border-right:1px solid var(--border);flex-direction:column;display:flex}.ph-nav__group{flex-direction:column;gap:2px;display:flex}.ph-nav__title{margin:0 0 var(--space-2) var(--space-3);font:700 12px/16px var(--font-sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink)}.ph-nav__link{padding:6px var(--space-3);border-radius:var(--radius-sm);font:500 14px/20px var(--font-sans);color:var(--ink-muted);text-decoration:none;transition:color .15s ease-out,background-color .15s ease-out;display:block;position:relative}.ph-nav__link:hover{color:var(--ink);background:var(--surface-sunken)}.ph-nav__link:focus-visible{outline:2px solid var(--primary);outline-offset:0}.ph-nav__link[aria-current=page]{color:var(--primary-text);background:var(--primary-soft);font-weight:600}.ph-nav__link[aria-current=page]:before{content:"";border-radius:var(--radius-full);background:var(--primary);width:3px;position:absolute;top:6px;bottom:6px;left:0}.ph-field{flex-direction:column;gap:6px;max-width:360px;display:flex}.ph-label{font:600 14px/20px var(--font-sans);color:var(--ink)}.ph-input{box-sizing:border-box;height:40px;padding:0 var(--space-3);border:1px solid var(--border-control);border-radius:var(--radius-md);background:var(--surface);color:var(--ink);font:400 15px/20px var(--font-sans);transition:border-color .15s ease-out}.ph-input::placeholder{color:var(--ink-subtle)}.ph-input:hover{border-color:var(--ink-muted)}.ph-input:focus{outline:2px solid var(--primary);outline-offset:2px;border-color:var(--primary)}.ph-input[aria-invalid=true]{border-color:var(--danger)}.ph-hint{font:400 13px/18px var(--font-sans);color:var(--ink-muted)}.ph-error{align-items:center;gap:var(--space-1);font:500 13px/18px var(--font-sans);color:var(--danger);display:flex}.ph-error svg{flex:none;width:16px;height:16px}.ph-code--lines pre{padding-left:0;padding-right:0}.ph-code--lines .line{min-height:24px;padding:0 var(--space-5);display:block;position:relative}.ph-code .line--hl{background:var(--code-highlight);box-shadow:inset 2px 0 0 var(--syntax-keyword)}.ph-code .line--add{background:var(--code-added)}.ph-code .line--del{background:var(--code-removed)}.ph-code .line--add:before,.ph-code .line--del:before{font-weight:500;position:absolute;left:6px}.ph-code .line--add:before{content:"+";color:var(--code-added-ink)}.ph-code .line--del:before{content:"-";color:var(--code-removed-ink)}.ph-code__tabs{align-items:center;gap:var(--space-1);padding:0 var(--space-2) 0 var(--space-3);border-bottom:1px solid #94a3b82e;display:flex}.ph-code__tab{padding:var(--space-3) var(--space-2);color:var(--code-muted);font:500 12px/16px var(--font-mono);font-variant-ligatures:none;cursor:pointer;background:0 0;border:0;position:relative}.ph-code__tab:hover,.ph-code__tab[aria-selected=true]{color:var(--code-ink)}.ph-code__tab[aria-selected=true]:after{content:"";left:var(--space-2);right:var(--space-2);background:var(--syntax-keyword);border-radius:2px;height:2px;position:absolute;bottom:-1px}.ph-code__tab:focus-visible{outline:2px solid var(--syntax-keyword);outline-offset:-2px;border-radius:var(--radius-sm)}.ph-code__tabs .ph-code__copy{margin-left:auto}.ph-code [role=tabpanel][hidden]{display:none}.ph-code__copy.is-copied{color:var(--code-added-ink)}.ph-icon{flex:none;width:20px;height:20px}.ph-sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ph-skip{left:var(--space-4);z-index:var(--z-dialog);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);background:var(--primary);color:var(--on-primary);font:600 14px/20px var(--font-sans);text-decoration:none;position:absolute;top:-64px}.ph-skip:focus{top:var(--space-3);outline:2px solid var(--primary);outline-offset:2px}.ph-icon-btn{border-radius:var(--radius-md);width:36px;height:36px;color:var(--ink-muted);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;text-decoration:none;transition:color .15s ease-out,background-color .15s ease-out;display:inline-flex}.ph-icon-btn:hover{color:var(--ink);background:var(--surface-sunken)}.ph-icon-btn:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-icon-btn svg{width:20px;height:20px}.ph-btn[aria-pressed=true]{background:var(--primary-soft);color:var(--primary-text);border-color:var(--primary)}.ph-kbd{box-sizing:border-box;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);min-width:20px;height:20px;color:var(--ink-muted);font:600 11px/1 var(--font-sans);vertical-align:middle;border-bottom-width:2px;justify-content:center;align-items:center;padding:0 5px;display:inline-flex}.ph-kbd+.ph-kbd{margin-left:2px}.ph-header{z-index:var(--z-header);background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0}.ph-header__inner{align-items:center;gap:var(--space-6);max-width:var(--page-width);height:var(--header-height);padding:0 var(--space-6);box-sizing:border-box;margin:0 auto;display:flex}.ph-header__brand{align-items:center;gap:var(--space-2);color:var(--ink);font:800 20px/1 var(--font-sans);letter-spacing:-.025em;white-space:nowrap;text-decoration:none;display:inline-flex}.ph-header__brand:focus-visible{outline:2px solid var(--primary);outline-offset:4px;border-radius:var(--radius-sm)}.ph-header__nav{gap:var(--space-1);display:flex}.ph-header__link{padding:6px var(--space-3);border-radius:var(--radius-sm);color:var(--ink-muted);font:500 14px/20px var(--font-sans);text-decoration:none;transition:color .15s ease-out,background-color .15s ease-out}.ph-header__link:hover{color:var(--ink);background:var(--surface-sunken)}.ph-header__link[aria-current=page]{color:var(--primary-text);font-weight:600}.ph-header__link:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-header__end{align-items:center;gap:var(--space-2);margin-left:auto;display:flex}.ph-header__menu{display:none}@media (width<=767px){.ph-header__inner{gap:var(--space-2);padding:0 var(--space-4)}.ph-header__nav,.ph-header__end .ph-select,.ph-header__end .ph-theme{display:none}.ph-header__menu{display:inline-flex}.ph-search-trigger{background:0 0;border-color:#0000;justify-content:center;width:36px;padding:0}.ph-search-trigger__label,.ph-search-trigger__keys{display:none}}.ph-search-trigger{align-items:center;gap:var(--space-2);width:240px;height:36px;padding:0 var(--space-2) 0 var(--space-3);box-sizing:border-box;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-sunken);color:var(--ink-muted);font:400 14px/20px var(--font-sans);cursor:pointer;transition:border-color .15s ease-out;display:inline-flex}.ph-search-trigger:hover{border-color:var(--border-control)}.ph-search-trigger:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-search-trigger svg{flex:none;width:18px;height:18px}.ph-search-trigger__label{text-align:left;flex:1}.ph-search-trigger__keys{display:inline-flex}.ph-search{border:1px solid var(--border);border-radius:var(--radius-xl);background:var(--surface);width:min(640px,100vw - 32px);max-width:none;max-height:min(560px,100vh - 96px);color:var(--ink);box-shadow:var(--shadow-lg);margin:10vh auto auto;padding:0;overflow:hidden}.ph-search[open]{flex-direction:column;display:flex}.ph-search::backdrop{background:var(--overlay)}.ph-search__field{align-items:center;gap:var(--space-3);height:56px;padding:0 var(--space-4);border-bottom:1px solid var(--border);flex:none;display:flex}.ph-search__field:focus-within{box-shadow:inset 0 -2px 0 var(--primary)}.ph-search__field>svg{width:20px;height:20px;color:var(--ink-muted);flex:none}.ph-search__input{min-width:0;height:100%;color:var(--ink);font:400 16px/24px var(--font-sans);background:0 0;border:0;outline:0;flex:1}.ph-search__input::placeholder{color:var(--ink-subtle)}.ph-search__results{padding:var(--space-2);flex:1;overflow-y:auto}.ph-search__group-title{margin:var(--space-3) var(--space-3) var(--space-1);font:700 12px/16px var(--font-sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-muted)}.ph-search__item{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:var(--ink);text-decoration:none;display:flex}.ph-search__item>svg{width:20px;height:20px;color:var(--ink-subtle);flex:none}.ph-search__item-text{flex-direction:column;min-width:0;display:flex}.ph-search__item-title{font:600 14px/20px var(--font-sans)}.ph-search__item-path{font:400 13px/18px var(--font-sans);color:var(--ink-muted);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.ph-search__item-enter{width:16px;height:16px;color:var(--primary-text);visibility:hidden;flex:none;margin-left:auto}.ph-search__item:hover{background:var(--surface-sunken)}.ph-search__item[aria-selected=true]{background:var(--primary-soft)}.ph-search__item[aria-selected=true]>svg:first-child{color:var(--primary-text)}.ph-search__item[aria-selected=true] .ph-search__item-enter{visibility:visible}.ph-search__item[hidden],.ph-search__group[hidden]{display:none}.ph-search mark{color:var(--primary-text);background:0 0;font-weight:700}.ph-search__empty{padding:var(--space-12) var(--space-4);text-align:center;font:400 14px/20px var(--font-sans);color:var(--ink-muted)}.ph-search__foot{gap:var(--space-4);padding:var(--space-2) var(--space-4);border-top:1px solid var(--border);background:var(--surface-raised);font:400 12px/20px var(--font-sans);color:var(--ink-muted);flex-wrap:wrap;flex:none;display:flex}.ph-search__foot span{align-items:center;gap:var(--space-1);display:inline-flex}.ph-banner{justify-content:center;align-items:center;gap:var(--space-2);min-height:40px;padding:var(--space-2) var(--space-12);box-sizing:border-box;background:var(--primary);color:var(--on-primary);font:500 14px/20px var(--font-sans);text-align:center;display:flex;position:relative}.ph-banner[hidden]{display:none}.ph-banner>svg{flex:none;width:18px;height:18px}.ph-banner a{color:inherit;text-underline-offset:3px;font-weight:700;text-decoration:underline}.ph-banner a:focus-visible,.ph-banner__close:focus-visible{outline:2px solid var(--on-primary);outline-offset:2px;border-radius:var(--radius-sm)}.ph-banner__close{right:var(--space-2);border-radius:var(--radius-md);width:28px;height:28px;color:inherit;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.ph-banner__close:hover{background:var(--primary-hover)}.ph-banner__close svg{width:18px;height:18px}.ph-breadcrumbs ol{align-items:center;gap:var(--space-1);font:500 14px/20px var(--font-sans);color:var(--ink-muted);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.ph-breadcrumbs li{align-items:center;gap:var(--space-1);display:inline-flex}.ph-breadcrumbs svg{width:16px;height:16px;color:var(--ink-subtle)}.ph-breadcrumbs a{color:var(--ink-muted);border-radius:var(--radius-sm);text-decoration:none}.ph-breadcrumbs a:hover{color:var(--ink);text-underline-offset:3px;text-decoration:underline}.ph-breadcrumbs a:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-breadcrumbs [aria-current=page]{color:var(--ink);font-weight:600}.ph-drawer{border:0;border-right:1px solid var(--border);background:var(--surface-raised);width:min(320px,88vw);max-width:none;height:100%;max-height:none;color:var(--ink);box-shadow:var(--shadow-lg);z-index:var(--z-drawer);margin:0;padding:0;position:fixed;inset:0 auto 0 0;overflow-y:auto}.ph-drawer::backdrop{background:var(--overlay)}.ph-drawer__head{height:var(--header-height);padding:0 var(--space-4) 0 var(--space-6);border-bottom:1px solid var(--border);box-sizing:border-box;justify-content:space-between;align-items:center;display:flex}.ph-drawer .ph-nav{background:0 0;border-right:0;width:auto}.ph-theme{border:1px solid var(--border);border-radius:var(--radius-full);background:var(--surface-sunken);gap:2px;padding:2px;display:inline-flex}.ph-theme button{border-radius:var(--radius-full);width:28px;height:28px;color:var(--ink-muted);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;transition:color .15s ease-out,background-color .15s ease-out;display:inline-flex}.ph-theme button svg{width:16px;height:16px}.ph-theme button:hover{color:var(--ink)}.ph-theme button[aria-pressed=true]{background:var(--surface);color:var(--primary-text);box-shadow:var(--shadow-sm)}.ph-theme button:focus-visible{outline:2px solid var(--primary);outline-offset:1px}.ph-select{align-items:center;display:inline-flex;position:relative}.ph-select select{-webkit-appearance:none;appearance:none;height:32px;padding:0 var(--space-8) 0 var(--space-3);border:1px solid var(--border-control);border-radius:var(--radius-md);background:var(--surface);color:var(--ink);font:600 13px/20px var(--font-sans);cursor:pointer}.ph-select select:hover{border-color:var(--ink-muted)}.ph-select select:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-select>svg{right:var(--space-2);width:16px;height:16px;color:var(--ink-muted);pointer-events:none;position:absolute}.ph-toc{width:var(--toc-width);max-width:100%;font:500 13px/20px var(--font-sans)}.ph-toc__title{margin:0 0 var(--space-3);font:700 12px/16px var(--font-sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink)}.ph-toc ul{margin:0;padding:0;list-style:none}.ph-toc>ul{border-left:1px solid var(--border)}.ph-toc a{padding:4px 0 4px var(--space-3);color:var(--ink-muted);border-left:2px solid #0000;margin-left:-1px;text-decoration:none;transition:color .15s ease-out,border-color .15s ease-out;display:block}.ph-toc ul ul a{padding-left:var(--space-6);font-weight:400}.ph-toc a:hover{color:var(--ink)}.ph-toc a:focus-visible{outline:2px solid var(--primary);outline-offset:0;border-radius:var(--radius-sm)}.ph-toc a[aria-current=true]{color:var(--primary-text);border-left-color:var(--primary);font-weight:600}.ph-toc__extra{gap:var(--space-2);margin-top:var(--space-6);padding-top:var(--space-4);border-top:1px solid var(--border);flex-direction:column;display:flex}.ph-toc__extra a{align-items:center;gap:var(--space-2);border:0;margin:0;padding:0;display:inline-flex}.ph-toc__extra svg{width:16px;height:16px}.ph-pager{gap:var(--space-4);grid-template-columns:1fr 1fr;display:grid}.ph-pager__link{gap:var(--space-1);padding:var(--space-4) var(--space-5);border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;text-decoration:none;transition:border-color .15s ease-out;display:flex}.ph-pager__link:hover{border-color:var(--primary)}.ph-pager__link:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-pager__link--next{text-align:right;grid-column:2;align-items:flex-end}.ph-pager__dir{align-items:center;gap:var(--space-1);font:500 13px/20px var(--font-sans);color:var(--ink-muted);display:inline-flex}.ph-pager__dir svg{width:16px;height:16px}.ph-pager__title{font:600 16px/24px var(--font-sans);color:var(--primary-text)}@media (width<=640px){.ph-pager{grid-template-columns:1fr}.ph-pager__link--next{grid-column:auto}}.ph-meta{justify-content:space-between;align-items:center;gap:var(--space-3);padding-top:var(--space-6);border-top:1px solid var(--border);font:400 14px/20px var(--font-sans);color:var(--ink-muted);flex-wrap:wrap;display:flex}.ph-meta a,.ph-meta span{align-items:center;gap:var(--space-2);display:inline-flex}.ph-meta a{color:var(--ink-muted);border-radius:var(--radius-sm);font-weight:500;text-decoration:none}.ph-meta a:hover{color:var(--primary-text)}.ph-meta a:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-meta svg{width:16px;height:16px}.ph-feedback{align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-5);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-raised);font:600 15px/24px var(--font-sans);color:var(--ink);flex-wrap:wrap;display:flex}.ph-feedback__actions{gap:var(--space-2);margin-left:auto;display:flex}.ph-feedback__thanks{align-items:center;gap:var(--space-1);font:500 14px/20px var(--font-sans);color:var(--success);flex-basis:100%;display:inline-flex}.ph-feedback__thanks[hidden]{display:none}.ph-feedback__thanks svg{width:16px;height:16px}.ph-footer{border-top:1px solid var(--border);background:var(--surface-raised);font:400 14px/20px var(--font-sans);color:var(--ink-muted)}.ph-footer__inner{max-width:var(--page-width);padding:var(--space-12) var(--space-6) var(--space-8);box-sizing:border-box;margin:0 auto}.ph-footer__grid{gap:var(--space-8);grid-template-columns:2fr repeat(3,1fr);display:grid}.ph-footer__brand{margin:0 0 var(--space-3);font:800 18px/24px var(--font-sans);letter-spacing:-.025em;color:var(--ink)}.ph-footer__about{max-width:32ch;margin:0}.ph-footer__title{margin:0 0 var(--space-3);font:700 12px/16px var(--font-sans);letter-spacing:.08em;text-transform:uppercase;color:var(--ink)}.ph-footer ul{gap:var(--space-2);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}.ph-footer a{color:var(--ink-muted);border-radius:var(--radius-sm);text-decoration:none}.ph-footer a:hover{color:var(--ink);text-underline-offset:3px;text-decoration:underline}.ph-footer a:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-footer__bottom{justify-content:space-between;gap:var(--space-3);margin-top:var(--space-8);padding-top:var(--space-6);border-top:1px solid var(--border);flex-wrap:wrap;font-size:13px;display:flex}@media (width<=767px){.ph-footer__grid{grid-template-columns:1fr 1fr}.ph-footer__grid>:first-child{grid-column:1/-1}}.ph-prose{max-width:var(--content-width);color:var(--ink);font:400 16px/28px var(--font-sans)}.ph-prose :where(h1,h2,h3,h4,p,ul,ol,blockquote,figure,pre,hr,table){margin:0}.ph-prose>*+*{margin-top:var(--space-6)}.ph-prose :where(h1,h2,h3,h4){color:var(--ink);scroll-margin-top:calc(var(--header-height) + var(--space-6))}.ph-prose h1{font:700 36px/40px var(--font-sans);letter-spacing:-.02em}.ph-prose h2{font:700 24px/32px var(--font-sans);letter-spacing:-.01em}.ph-prose h3{font:600 18px/28px var(--font-sans)}.ph-prose h4{font:600 16px/28px var(--font-sans)}.ph-prose>h2{margin-top:var(--space-12)}.ph-prose>h3{margin-top:var(--space-8)}.ph-prose>:is(h1,h2,h3,h4)+*{margin-top:var(--space-3)}.ph-prose>:first-child{margin-top:0}.ph-prose .ph-lead{color:var(--ink-muted);font-size:20px;line-height:32px}.ph-prose a:not([class]){color:var(--primary-text);text-underline-offset:3px;font-weight:500;text-decoration:underline 1px}.ph-prose a:not([class]):hover{text-decoration-thickness:2px}.ph-prose a:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:2px}.ph-prose strong{font-weight:700}.ph-prose :not(pre)>code{border-radius:var(--radius-sm);background:var(--surface-sunken);color:var(--ink);font:500 .875em/1 var(--font-mono);font-variant-ligatures:none;padding:2px 6px}.ph-prose :where(ul,ol){padding-left:var(--space-6)}.ph-prose li+li{margin-top:var(--space-2)}.ph-prose li::marker{color:var(--ink-subtle)}.ph-prose ol>li::marker{font-weight:600}.ph-prose blockquote{padding-left:var(--space-5);border-left:3px solid var(--border);color:var(--ink-muted)}.ph-prose hr{border:0;border-top:1px solid var(--border);margin:var(--space-12) 0}.ph-prose img{border:1px solid var(--border);border-radius:var(--radius-lg);max-width:100%;height:auto;display:block}.ph-prose figure:not(.ph-code) figcaption{margin-top:var(--space-2);font:400 14px/20px var(--font-sans);color:var(--ink-muted);text-align:center}.ph-anchor{margin-left:var(--space-2);color:var(--ink-subtle);opacity:0;font-weight:400;text-decoration:none;transition:opacity .15s ease-out}:is(h1,h2,h3,h4):hover>.ph-anchor,.ph-anchor:focus-visible{opacity:1}.ph-anchor:hover{color:var(--primary-text)}.ph-table-wrap{border:1px solid var(--border);border-radius:var(--radius-lg);overflow-x:auto}.ph-table{border-collapse:collapse;width:100%;font:400 14px/20px var(--font-sans)}.ph-table th{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);background:var(--surface-raised);color:var(--ink);text-align:left;white-space:nowrap;font-weight:600}.ph-table td{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);color:var(--ink-muted);vertical-align:top}.ph-table tr:last-child td{border-bottom:0}.ph-table td:first-child{color:var(--ink)}.ph-table code{border-radius:var(--radius-sm);background:var(--surface-sunken);color:var(--ink);font:500 13px/1 var(--font-mono);font-variant-ligatures:none;white-space:nowrap;padding:2px 6px}.ph-table .ph-type{color:var(--primary-text)}.ph-tabs__list{gap:var(--space-1);border-bottom:1px solid var(--border);display:flex;overflow-x:auto}.ph-tabs__tab{padding:var(--space-2) var(--space-3);color:var(--ink-muted);font:600 14px/20px var(--font-sans);white-space:nowrap;cursor:pointer;background:0 0;border:0;transition:color .15s ease-out;position:relative}.ph-tabs__tab:hover{color:var(--ink)}.ph-tabs__tab[aria-selected=true]{color:var(--primary-text)}.ph-tabs__tab[aria-selected=true]:after{content:"";left:var(--space-3);right:var(--space-3);background:var(--primary);border-radius:2px;height:2px;position:absolute;bottom:-1px}.ph-tabs__tab:focus-visible{outline:2px solid var(--primary);outline-offset:-2px;border-radius:var(--radius-sm)}.ph-tabs__panel{padding-top:var(--space-4)}.ph-tabs__panel[hidden]{display:none}.ph-steps{counter-reset:ph-step;margin:0;padding:0;list-style:none}.ph-steps>li{padding:0 0 var(--space-8) var(--space-12);counter-increment:ph-step;position:relative}.ph-steps>li:last-child{padding-bottom:0}.ph-steps>li:before{content:counter(ph-step);box-sizing:border-box;border:1px solid var(--primary);border-radius:var(--radius-full);background:var(--primary-soft);width:32px;height:32px;color:var(--primary-text);font:700 14px/1 var(--font-sans);justify-content:center;align-items:center;display:flex;position:absolute;top:0;left:0}.ph-steps>li:not(:last-child):after{content:"";top:40px;left:15.5px;bottom:var(--space-2);background:var(--border);width:1px;position:absolute}.ph-steps__title{margin:2px 0 var(--space-2);font:600 18px/28px var(--font-sans);color:var(--ink)}.ph-steps>li>p{margin:0 0 var(--space-3)}.ph-tree{padding:var(--space-4) var(--space-5);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-raised);color:var(--ink);font:400 14px/26px var(--font-mono);font-variant-ligatures:none;overflow-x:auto}.ph-tree ul{margin:0;padding:0;list-style:none}.ph-tree li ul{padding-left:var(--space-4);border-left:1px solid var(--border);margin-left:7px}.ph-tree__item{align-items:center;gap:var(--space-2);white-space:nowrap;display:inline-flex}.ph-tree__item svg{width:16px;height:16px;color:var(--ink-subtle);flex:none}.ph-tree__dir>.ph-tree__item svg{color:var(--primary-text)}.ph-tree__hl>.ph-tree__item{color:var(--primary-text);font-weight:500}.ph-tree__note{margin-left:var(--space-3);color:var(--ink-muted);font:400 13px/20px var(--font-sans)}.ph-cards{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(240px,1fr));display:grid}.ph-card{gap:var(--space-2);padding:var(--space-5);border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);color:var(--ink);flex-direction:column;text-decoration:none;transition:border-color .15s ease-out;display:flex}.ph-card:hover{border-color:var(--primary)}.ph-card:focus-visible{outline:2px solid var(--primary);outline-offset:2px}.ph-card__icon{width:36px;height:36px;margin-bottom:var(--space-2);border-radius:var(--radius-md);background:var(--primary-soft);color:var(--primary-text);justify-content:center;align-items:center;display:inline-flex}.ph-card__icon svg{width:20px;height:20px}.ph-card__title{align-items:center;gap:var(--space-1);font:600 16px/24px var(--font-sans);display:flex}.ph-card__title svg{width:16px;height:16px;color:var(--ink-subtle);transition:color .15s ease-out}.ph-card:hover .ph-card__title svg{color:var(--primary-text)}.ph-card__desc{font:400 14px/22px var(--font-sans);color:var(--ink-muted)}.ph-accordion{border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.ph-accordion details+details{border-top:1px solid var(--border)}.ph-accordion summary{justify-content:space-between;align-items:center;gap:var(--space-4);padding:var(--space-4) var(--space-5);color:var(--ink);font:600 15px/24px var(--font-sans);cursor:pointer;list-style:none;transition:background-color .15s ease-out;display:flex}.ph-accordion summary::-webkit-details-marker{display:none}.ph-accordion summary:hover{background:var(--surface-raised)}.ph-accordion summary:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}.ph-accordion summary svg{width:20px;height:20px;color:var(--ink-muted);flex:none;transition:transform .15s ease-out}.ph-accordion details[open] summary svg{transform:rotate(180deg)}.ph-accordion__body{padding:0 var(--space-5) var(--space-5);color:var(--ink-muted);font:400 15px/26px var(--font-sans)}.ph-accordion__body p{margin:0}.ph-accordion__body p+p{margin-top:var(--space-3)}.ph-accordion__body code{border-radius:var(--radius-sm);background:var(--surface-sunken);color:var(--ink);font:500 .875em/1 var(--font-mono);font-variant-ligatures:none;padding:2px 6px}.ph-hero{align-items:center;gap:var(--space-12);max-width:var(--page-width);padding:var(--space-16) var(--space-6);box-sizing:border-box;grid-template-columns:minmax(0,1fr) minmax(0,1fr);margin:0 auto;display:grid}.ph-hero__title{margin:var(--space-4) 0 0;color:var(--ink);font:800 56px/60px var(--font-sans);letter-spacing:-.025em}.ph-hero__title em{color:var(--primary-text);font-style:normal}.ph-hero__lead{margin:var(--space-5) 0 0;max-width:34em;color:var(--ink-muted);font:400 20px/32px var(--font-sans)}.ph-hero__actions{align-items:center;gap:var(--space-3);margin-top:var(--space-8);flex-wrap:wrap;display:flex}.ph-install{align-items:center;gap:var(--space-2);height:40px;padding:0 var(--space-1) 0 var(--space-4);box-sizing:border-box;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-sunken);color:var(--ink);font:500 13px/20px var(--font-mono);font-variant-ligatures:none;display:inline-flex}.ph-install__prompt{color:var(--ink-muted)}.ph-install .ph-icon-btn{width:32px;height:32px}.ph-install .ph-icon-btn svg{width:16px;height:16px}.ph-install .ph-icon-btn.is-copied{color:var(--success)}.ph-hero .ph-code{border-radius:var(--radius-xl);box-shadow:var(--shadow-lg)}@media (width<=960px){.ph-hero{padding:var(--space-12) var(--space-6);grid-template-columns:1fr}.ph-hero__title{font-size:40px;line-height:44px}}.ph-docs{grid-template-columns:var(--sidebar-width) minmax(0, 1fr) var(--toc-width);max-width:var(--page-width);align-items:start;margin:0 auto;display:grid}.ph-docs>.ph-nav{top:var(--header-height);height:calc(100vh - var(--header-height));position:sticky;overflow-y:auto}.ph-docs__main{min-width:0;padding:var(--space-8) var(--space-12) var(--space-16)}.ph-docs__content{gap:var(--space-8);max-width:var(--content-width);flex-direction:column;margin:0 auto;display:flex}.ph-docs__aside{top:var(--header-height);padding:var(--space-8) var(--space-6) var(--space-8) 0;max-height:calc(100vh - var(--header-height));box-sizing:border-box;position:sticky;overflow-y:auto}@media (width<=1023px){.ph-docs{grid-template-columns:var(--sidebar-width) minmax(0, 1fr)}.ph-docs__aside{display:none}.ph-docs__main{padding:var(--space-8)}}@media (width<=767px){.ph-docs{grid-template-columns:minmax(0,1fr)}.ph-docs>.ph-nav{display:none}.ph-docs__main{padding:var(--space-6) var(--space-4) var(--space-12)}}.home-section{max-width:var(--page-width);padding:0 var(--space-6) var(--space-16);box-sizing:border-box;margin:0 auto}.home-section__title{margin:0 0 var(--space-6);color:var(--ink);font:700 24px/32px var(--font-sans);letter-spacing:-.01em}.header-github{align-items:center;gap:var(--space-1);display:inline-flex}@media (width<=767px){.header-github{display:none}}.ph-hero .ph-code{min-width:0;margin:0}
