:root{--ns-font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ns-font-mono: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;--ns-brand-h: 250;--ns-brand: hsl(var(--ns-brand-h) 84% 58%);--ns-brand-soft: hsl(var(--ns-brand-h) 84% 58% / .14);--ns-brand-strong: hsl(var(--ns-brand-h) 84% 48%);--ns-bg: #ffffff;--ns-bg-alt: #f6f7f9;--ns-bg-soft: #f9fafb;--ns-bg-elv: #ffffff;--ns-text: #1f2328;--ns-text-soft: #57606a;--ns-text-muted: #818b98;--ns-border: #e3e6ea;--ns-border-soft: #eef0f2;--ns-shadow: 0 1px 2px rgb(0 0 0 / .04), 0 8px 24px rgb(0 0 0 / .06);--ns-code-bg: #f6f8fa;--ns-code-border: #e3e6ea;--ns-info: #3b82f6;--ns-tip: #10b981;--ns-success: #16a34a;--ns-warning: #f59e0b;--ns-danger: #ef4444;--ns-nav-h: 60px;--ns-sidebar-w: 274px;--ns-toc-w: 232px;--ns-content-max: 768px;--ns-radius: 10px;--ns-radius-sm: 6px;color-scheme:light}html.dark{--ns-bg: #0d1117;--ns-bg-alt: #11161d;--ns-bg-soft: #161b22;--ns-bg-elv: #161b22;--ns-text: #e6edf3;--ns-text-soft: #adbac7;--ns-text-muted: #768390;--ns-border: #21262d;--ns-border-soft: #1b2027;--ns-shadow: 0 1px 2px rgb(0 0 0 / .4), 0 8px 24px rgb(0 0 0 / .5);--ns-code-bg: #161b22;--ns-code-border: #21262d;--ns-brand: hsl(var(--ns-brand-h) 90% 72%);--ns-brand-strong: hsl(var(--ns-brand-h) 90% 78%);color-scheme:dark}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--ns-nav-h) + 16px)}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}}body{margin:0;font-family:var(--ns-font-sans);background:var(--ns-bg);color:var(--ns-text);font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--ns-brand-strong);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--ns-brand);outline-offset:2px;border-radius:3px}.ns-prose{max-width:var(--ns-content-max)}.ns-prose h1,.ns-prose h2,.ns-prose h3,.ns-prose h4,.ns-prose h5,.ns-prose h6{font-weight:650;line-height:1.3;scroll-margin-top:calc(var(--ns-nav-h) + 16px);position:relative}.ns-prose h1{font-size:2.1rem;margin:0 0 1rem;letter-spacing:-.02em}.ns-prose h2{font-size:1.5rem;margin:2.6rem 0 1rem;padding-top:1.6rem;border-top:1px solid var(--ns-border-soft);letter-spacing:-.01em}.ns-prose h3{font-size:1.2rem;margin:2rem 0 .75rem}.ns-prose h4{font-size:1.02rem;margin:1.4rem 0 .6rem}.ns-prose p{margin:0 0 1.1rem}.ns-prose ul,.ns-prose ol{margin:0 0 1.1rem;padding-left:1.4rem}.ns-prose li{margin:.35rem 0}.ns-prose li>ul,.ns-prose li>ol{margin:.35rem 0}.ns-prose blockquote{margin:0 0 1.1rem;padding:.2rem 1rem;border-left:3px solid var(--ns-border);color:var(--ns-text-soft)}.ns-prose hr{border:none;border-top:1px solid var(--ns-border);margin:2rem 0}.ns-prose img{max-width:100%;border-radius:var(--ns-radius-sm)}.ns-prose table{width:100%;border-collapse:collapse;margin:0 0 1.2rem;font-size:.92rem;display:block;overflow-x:auto}.ns-prose th,.ns-prose td{border:1px solid var(--ns-border);padding:.5rem .8rem;text-align:left}.ns-prose th{background:var(--ns-bg-soft);font-weight:600}.ns-prose :not(pre)>code{font-family:var(--ns-font-mono);font-size:.86em;background:var(--ns-brand-soft);color:var(--ns-brand-strong);padding:.15em .4em;border-radius:5px;font-feature-settings:normal}.ns-header-anchor{position:absolute;left:-1.1em;opacity:0;color:var(--ns-text-muted);font-weight:400;text-decoration:none;transition:opacity .15s}.ns-prose h1:hover .ns-header-anchor,.ns-prose h2:hover .ns-header-anchor,.ns-prose h3:hover .ns-header-anchor,.ns-prose h4:hover .ns-header-anchor{opacity:1}.ns-code-block{position:relative;margin:0 0 1.3rem;border:1px solid var(--ns-code-border);border-radius:var(--ns-radius);background:var(--ns-code-bg);overflow:hidden}.ns-code-filename{font-family:var(--ns-font-mono);font-size:.78rem;color:var(--ns-text-soft);padding:.5rem .9rem;border-bottom:1px solid var(--ns-code-border);background:var(--ns-bg-soft)}.ns-code-block pre.shiki{margin:0;padding:.9rem 0;overflow-x:auto;font-size:.86rem;line-height:1.6;background:transparent!important}.ns-code-block code{font-family:var(--ns-font-mono);display:grid;counter-reset:ns-line}.ns-code-block .line{padding:0 1.1rem;border-left:2px solid transparent}.ns-line-numbers .line:before{counter-increment:ns-line;content:counter(ns-line);display:inline-block;width:1.4rem;margin-right:1rem;text-align:right;color:var(--ns-text-muted);opacity:.6}.shiki,.shiki span{color:var(--shiki-light)}html.dark .shiki,html.dark .shiki span{color:var(--shiki-dark)}.ns-code-block .line.highlighted{background:var(--ns-brand-soft);border-left-color:var(--ns-brand)}.ns-code-block .line.diff.add{background:#2eb85c21;border-left-color:var(--ns-success)}.ns-code-block .line.diff.remove{background:#dd3c3c1f;border-left-color:var(--ns-danger)}.ns-code-block .line.diff.add:after{content:"+";position:absolute;margin-left:-.95rem;color:var(--ns-success)}.ns-code-block .line.diff.remove:after{content:"-";position:absolute;margin-left:-.95rem;color:var(--ns-danger)}.ns-code-block:has(.line.focus) .line:not(.focus){filter:blur(1.2px);opacity:.5;transition:.25s}.ns-code-block:has(.line.focus):hover .line:not(.focus){filter:none;opacity:1}.ns-terminal{background:#0b0f14;border-color:#1b2430}.ns-terminal .ns-code-filename{background:#0b0f14;color:#8b98a5;border-color:#1b2430}.ns-terminal .shiki,.ns-terminal .shiki span{color:var(--shiki-dark)}.ns-copy{position:absolute;top:.5rem;right:.5rem;width:30px;height:30px;border:1px solid var(--ns-code-border);border-radius:var(--ns-radius-sm);background:var(--ns-bg-elv);cursor:pointer;opacity:0;transition:opacity .15s,background .15s;z-index:2}.ns-code-block:hover .ns-copy{opacity:1}.ns-copy:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:currentColor;color:var(--ns-text-soft);-webkit-mask:var(--ns-icon-copy) center / 15px no-repeat;mask:var(--ns-icon-copy) center / 15px no-repeat}.ns-copy.copied:after{color:var(--ns-success);-webkit-mask-image:var(--ns-icon-check);mask-image:var(--ns-icon-check)}:root{--ns-icon-copy: url('data:image/svg+xml;utf8,<svg 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"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>');--ns-icon-check: url('data:image/svg+xml;utf8,<svg 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"><polyline points="20 6 9 17 4 12"/></svg>')}.ns-details{margin:0 0 1.3rem;padding:.7rem 1rem;border:1px solid var(--ns-border);border-radius:var(--ns-radius);background:var(--ns-bg-soft)}.ns-details>summary{cursor:pointer;font-weight:600;list-style:revert;-webkit-user-select:none;user-select:none}.ns-details[open]>summary{margin-bottom:.6rem}.ns-details>:not(summary):last-child{margin-bottom:0}.ns-scroll::-webkit-scrollbar{width:8px;height:8px}.ns-scroll::-webkit-scrollbar-thumb{background:var(--ns-border);border-radius:8px}.ns-scroll::-webkit-scrollbar-thumb:hover{background:var(--ns-text-muted)}:root{--color-ink: #f4f1ea;--color-ink-soft: #fbf9f3;--color-ink-line: #e4ded1;--color-ink-elevated: #ffffff;--color-haze: #5d6b73;--color-haze-soft: #8b97a0;--color-fg: #1d2a31;--color-on-accent: #17110a;--color-accent: #df6e2b;--color-accent-soft: #b85c1e;--color-teal: #3f8fa0;--color-teal-soft: #2c6d7c;--color-success: #4ade80;--color-warning: #fbbf24;--color-danger: #f87171;--ns-font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--ns-font-mono: "SF Mono", ui-monospace, "JetBrains Mono", "Fira Code", Menlo, monospace;--ns-bg: var(--color-ink);--ns-bg-alt: var(--color-ink-soft);--ns-bg-soft: var(--color-ink-soft);--ns-bg-elv: var(--color-ink-elevated);--ns-text: var(--color-fg);--ns-text-soft: var(--color-haze);--ns-text-muted: var(--color-haze-soft);--ns-border: var(--color-ink-line);--ns-border-soft: color-mix(in oklab, var(--color-ink-line) 65%, transparent);--ns-code-bg: #fffdfa;--ns-code-border: var(--color-ink-line);--ns-brand: var(--color-accent);--ns-brand-soft: color-mix(in oklab, var(--color-accent) 13%, transparent);--ns-brand-strong: var(--color-accent-soft);--ns-info: var(--color-teal);--ns-tip: var(--color-teal);--ns-success: #22863a;--ns-warning: #9a6700;--ns-danger: #cf222e;--ns-nav-h: 66px;--ns-radius: 8px;--ns-radius-sm: 6px;--ns-shadow: 0 1px 2px rgb(23 17 10 / .05), 0 16px 36px rgb(23 17 10 / .08);color-scheme:light}html.dark{--color-ink: #0d0d10;--color-ink-soft: #16161b;--color-ink-line: #26262e;--color-ink-elevated: #1d1d24;--color-haze: #9a9aa6;--color-haze-soft: #6b6b76;--color-fg: #ededf2;--color-accent-soft: #f2a166;--color-teal-soft: #79c2cf;--ns-bg: var(--color-ink);--ns-bg-alt: var(--color-ink-soft);--ns-bg-soft: var(--color-ink-soft);--ns-bg-elv: var(--color-ink-elevated);--ns-text: var(--color-fg);--ns-text-soft: var(--color-haze);--ns-text-muted: var(--color-haze-soft);--ns-border: var(--color-ink-line);--ns-border-soft: color-mix(in oklab, var(--color-ink-line) 70%, transparent);--ns-code-bg: #101015;--ns-code-border: var(--color-ink-line);--ns-brand: var(--color-accent);--ns-brand-soft: color-mix(in oklab, var(--color-accent) 16%, transparent);--ns-brand-strong: var(--color-accent-soft);--ns-info: var(--color-teal-soft);--ns-tip: var(--color-teal-soft);--ns-success: var(--color-success);--ns-warning: var(--color-warning);--ns-danger: var(--color-danger);--ns-shadow: 0 1px 2px rgb(0 0 0 / .4), 0 16px 36px rgb(0 0 0 / .45)}html{overflow-x:hidden}body{background-color:var(--color-ink);color:var(--color-fg);font-feature-settings:"cv02","cv03","cv04","cv11"}body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;pointer-events:none;opacity:.05;background-image:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='180'%20height='180'%3E%3Cfilter%20id='n'%3E%3CfeTurbulence%20type='fractalNoise'%20baseFrequency='0.8'%20numOctaves='3'%20stitchTiles='stitch'/%3E%3CfeColorMatrix%20type='saturate'%20values='0'/%3E%3C/filter%3E%3Crect%20width='100%25'%20height='100%25'%20filter='url(%23n)'/%3E%3C/svg%3E");background-size:180px 180px}html.dark body:after{opacity:.035}::selection{background:color-mix(in oklab,var(--color-accent) 35%,transparent)}.ns-navbar{background:color-mix(in oklab,var(--color-ink-soft) 82%,transparent);border-bottom-color:var(--color-ink-line)}.ns-navbar-inner{max-width:72rem;padding-inline:1.5rem}.ns-brand{gap:.55rem}.ns-logo{width:28px;height:28px}.ns-brand-title{font-family:var(--ns-font-mono);font-size:1rem;font-weight:500;letter-spacing:0}.ns-nav-links{gap:1.25rem}.ns-nav-links a,.ns-nav-dropdown-btn{color:var(--color-haze);font-size:.88rem;font-weight:500}.ns-nav-links a:hover,.ns-nav-links a.active,.ns-nav-dropdown-btn:hover,.ns-search-trigger:hover,.ns-theme-toggle:hover,.ns-hamburger:hover{color:var(--color-fg)}.ns-nav-links a.active{color:var(--color-accent-soft)}.ns-search-trigger,.ns-ask-trigger,.ns-theme-toggle,.ns-hamburger,.ns-lang-btn,.ns-version-btn{background:var(--color-ink-soft);border-color:var(--color-ink-line);border-radius:6px}.ns-search-trigger:hover,.ns-ask-trigger:hover,.ns-theme-toggle:hover,.ns-hamburger:hover,.ns-lang-btn:hover,.ns-version-btn:hover{border-color:color-mix(in oklab,var(--color-accent) 55%,var(--color-ink-line))}.ns-ask-trigger{background:color-mix(in oklab,var(--color-accent) 12%,var(--color-ink-soft));color:var(--color-accent-soft)}.ns-shell{max-width:72rem;padding-inline:1.5rem}.ns-main{gap:2.25rem}.ns-sidebar-col{border-right:1px solid var(--color-ink-line)}.ns-sidebar{padding-block:1.25rem}.ns-sb-link{border-radius:6px}.ns-sb-link:hover{background:color-mix(in oklab,var(--color-teal) 9%,transparent)}.ns-sb-link.active{background:color-mix(in oklab,var(--color-accent) 15%,transparent);color:var(--color-accent-soft)}.ns-toc-label{color:var(--color-teal-soft);letter-spacing:.08em}.ns-toc a.active{color:var(--color-accent-soft)}.ns-prose{--ns-content-max: 760px}.ns-prose h1,.ns-prose h2,.ns-prose h3,.ns-prose h4,.ns-prose h5,.ns-prose h6,.ns-hero h1{letter-spacing:-.025em}.ns-prose h1{font-size:2.15rem;line-height:1.12}.ns-prose h2{border-top-color:var(--color-ink-line)}.ns-prose a{color:var(--color-accent-soft);text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}.ns-prose :not(pre)>code{background:color-mix(in oklab,var(--color-accent) 13%,transparent);color:var(--color-accent-soft)}.ns-code-block,.ns-callout,.ns-tabs,.ns-api-method,.ns-diagram,.ns-pn{border-radius:8px}.ns-home{max-width:72rem;padding-inline:1.5rem}.ns-home-body>h1:first-child{margin-top:3rem}.ns-hero{position:relative;overflow:hidden;min-height:390px;display:grid;align-content:center;padding:4rem 1.5rem 5rem;margin-inline:calc(50% - 50vw);border-bottom:1px solid var(--color-ink-line);background:var(--color-ink);color:#fff}.ns-hero:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background-image:url(../../../hero-harbor.png);background-size:cover;background-position:64% 58%;transform:scale(1.08);opacity:.86;will-change:transform}.ns-hero>*{position:relative;z-index:1}@media (prefers-reduced-motion: no-preference){.ns-hero:before{animation:heroPan 44s ease-in-out infinite alternate}}@keyframes heroPan{0%{transform:scale(1.08) translateZ(0)}to{transform:scale(1.15) translate3d(-2.5%,-1.5%,0)}}.ns-hero h1{max-width:680px;margin-inline:auto;color:#fff;-webkit-text-fill-color:currentColor;background:none;font-size:3.4rem;font-weight:650;line-height:1.04;text-shadow:0 2px 20px rgb(0 0 0 / .55)}.ns-hero-tagline{max-width:620px;color:#ffffffdb;text-shadow:0 1px 12px rgb(0 0 0 / .6)}.ns-btn{border-radius:6px}.ns-btn.primary{background:var(--color-accent);border-color:var(--color-accent);color:var(--color-on-accent)}.ns-feature-grid{gap:1.25rem}.ns-feature{border:1px solid var(--color-ink-line);border-radius:8px;background:var(--color-ink-soft);padding:1.25rem}.ns-feature-title{color:var(--color-fg)}.ns-footer{border-top-color:var(--color-ink-line);color:var(--color-haze)}.ns-footer-msg:before{content:"";display:inline-block;width:18px;height:18px;margin-right:.5rem;vertical-align:-.25rem;background:currentColor;-webkit-mask:url(../../../fjord-mark.svg) center / contain no-repeat;mask:url(../../../fjord-mark.svg) center / contain no-repeat}@media (max-width: 760px){.ns-navbar-inner,.ns-shell,.ns-home{padding-inline:1rem}.ns-hero{min-height:360px;padding:4rem 1rem 5rem}.ns-hero:before{background-position:58% 52%;opacity:.72}.ns-hero h1{font-size:2.5rem}}
