:root{--qv-ink-0:#070808;--qv-ink-1:#0c0d0d;--qv-ink-2:#121313;--qv-ink-3:#1a1c1c;--qv-paper-0:#fbfbfa;--qv-paper-1:#f3f4f2;--qv-paper-2:#ebecea;--qv-paper-3:#e2e3e0;--qv-black:#000;--qv-bone:#f1efe9;--qv-soot:#0e1010;--qv-green-200:#a5ff9c;--qv-green-300:#8df582;--qv-green-700:#06702b;--qv-green-800:#005e1f;--qv-red-400:#ff7264;--qv-red-700:#be2323;--qv-amber-300:#fdc436;--qv-amber-700:#875506;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}@supports (color:lab(0% 0 0)){:root{--qv-green-200:lab(92.8697% -47.9813 44.754);--qv-green-300:lab(88.2206% -47.9693 44.9684);--qv-green-700:lab(40.7426% -39.926 29.5316);--qv-green-800:lab(34.3423% -40.1236 30.1952);--qv-red-400:lab(65.6033% 62.1383 41.8749);--qv-red-700:lab(42.4236% 59.8149 41.9956);--qv-amber-300:lab(82.8053% 12.0677 73.6205);--qv-amber-700:lab(41.1882% 17.1724 47.7752)}}:root,.qv-island,.qv-prose pre,.qv-mermaid{--qv-bg:var(--lightningcss-light,var(--qv-paper-0))var(--lightningcss-dark,var(--qv-ink-0));--qv-bg-1:var(--lightningcss-light,var(--qv-paper-1))var(--lightningcss-dark,var(--qv-ink-1));--qv-bg-2:var(--lightningcss-light,var(--qv-paper-2))var(--lightningcss-dark,var(--qv-ink-2));--qv-bg-3:var(--lightningcss-light,var(--qv-paper-3))var(--lightningcss-dark,var(--qv-ink-3));--qv-term-bg:var(--qv-black);--qv-line:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 10%, transparent))var(--lightningcss-dark,rgba(255,255,255,.08));--qv-line-2:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 18%, transparent))var(--lightningcss-dark,rgba(255,255,255,.14));--qv-line-soft:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 5%, transparent))var(--lightningcss-dark,rgba(255,255,255,.04));--qv-fg:var(--lightningcss-light,var(--qv-soot))var(--lightningcss-dark,var(--qv-bone));--qv-fg-2:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 76%, transparent))var(--lightningcss-dark,color-mix(in srgb, var(--qv-bone) 72%, transparent));--qv-fg-3:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 66%, transparent))var(--lightningcss-dark,color-mix(in srgb, var(--qv-bone) 60%, transparent));--qv-fg-4:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 60%, transparent))var(--lightningcss-dark,color-mix(in srgb, var(--qv-bone) 50%, transparent));--qv-acc:var(--lightningcss-light,var(--qv-green-700))var(--lightningcss-dark,var(--qv-green-300));--qv-acc-hover:var(--lightningcss-light,var(--qv-green-800))var(--lightningcss-dark,var(--qv-green-200));--qv-acc-dim:var(--lightningcss-light,color-mix(in oklch, var(--qv-green-700) 12%, transparent))var(--lightningcss-dark,color-mix(in oklch, var(--qv-green-300) 18%, transparent));--qv-acc-fg:var(--lightningcss-light,#fff)var(--lightningcss-dark,#060a07);--qv-focus:var(--qv-acc);--qv-up:var(--qv-acc);--qv-down:var(--lightningcss-light,var(--qv-red-700))var(--lightningcss-dark,var(--qv-red-400));--qv-warn:var(--lightningcss-light,var(--qv-amber-700))var(--lightningcss-dark,var(--qv-amber-300));--qv-shadow:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 12%, transparent))var(--lightningcss-dark,rgba(0,0,0,.5));--qv-scrim:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 40%, transparent))var(--lightningcss-dark,color-mix(in srgb, var(--qv-ink-0) 72%, transparent));--qv-prose-fg:var(--lightningcss-light,color-mix(in srgb, var(--qv-soot) 86%, transparent))var(--lightningcss-dark,color-mix(in srgb, var(--qv-bone) 82%, transparent))}:root{--qv-sans:"Inter", ui-sans-serif, system-ui, -apple-system, sans-serif;--qv-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--qv-r-1:2px;--qv-r-2:4px;--qv-r-3:8px;--qv-pad:14px;--qv-pad-x:36px;--qv-cols-hero:1.05fr 1fr;--qv-cols-2:1fr 1fr;--qv-cols-2-wide:1fr 1.2fr;--qv-cols-3:repeat(3, 1fr);--qv-cols-4:repeat(4, 1fr);--qv-cols-5:repeat(5, 1fr);--qv-table-min:720px}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark],.qv-island,.qv-prose pre,.qv-mermaid{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.qv-island{background:var(--qv-term-bg);color:var(--qv-fg)}@supports not (color:light-dark(#000, #fff)){:root,.qv-island,.qv-prose pre,.qv-mermaid{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--qv-bg:var(--qv-ink-0);--qv-bg-1:var(--qv-ink-1);--qv-bg-2:var(--qv-ink-2);--qv-bg-3:var(--qv-ink-3);--qv-line:rgba(255,255,255,.08);--qv-line-2:rgba(255,255,255,.14);--qv-line-soft:rgba(255,255,255,.04);--qv-fg:var(--qv-bone);--qv-fg-2:rgba(241,239,233,.72);--qv-fg-3:rgba(241,239,233,.6);--qv-fg-4:rgba(241,239,233,.5);--qv-acc:var(--qv-green-300);--qv-acc-hover:var(--qv-green-200);--qv-acc-dim:rgba(141,245,130,.18);--qv-acc-fg:#060a07;--qv-down:var(--qv-red-400);--qv-warn:var(--qv-amber-300);--qv-shadow:rgba(0,0,0,.5);--qv-scrim:rgba(7,8,8,.72);--qv-prose-fg:rgba(241,239,233,.82)}@supports (color:lab(0% 0 0)){:root,.qv-island,.qv-prose pre,.qv-mermaid{--qv-acc-dim:lab(88.2206% -47.9693 44.9684/.18)}}}.qv{background:var(--qv-bg);color:var(--qv-fg);font-family:var(--qv-sans);font-feature-settings:"ss01", "cv11";-webkit-font-smoothing:antialiased;letter-spacing:-.01em}.qv .mono{font-family:var(--qv-mono);letter-spacing:0}.qv .up{color:var(--qv-up)}.qv .down{color:var(--qv-down)}.qv .dim{color:var(--qv-fg-3)}.qv .dim2{color:var(--qv-fg-4)}:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{outline:2px solid var(--qv-focus);outline-offset:2px}.qv ::selection{background:var(--qv-acc-dim);color:var(--qv-fg)}.qv-grid-bg{background-image:linear-gradient(to right, var(--qv-line-soft) 1px, transparent 1px), linear-gradient(to bottom, var(--qv-line-soft) 1px, transparent 1px);background-size:56px 56px}.qv-scan:after{content:"";pointer-events:none;background:repeating-linear-gradient(transparent 0 3px,rgba(255,255,255,.01) 3px 4px);position:absolute;inset:0}@keyframes qv-ticker{0%{transform:translate(0)}to{transform:translate(-50%)}}@keyframes qv-blink{0%,49%{opacity:1}50%,to{opacity:.3}}@keyframes qv-pulse{0%,to{opacity:.4}50%{opacity:1}}@keyframes qv-sweep{0%{transform:translate(-100%)}to{transform:translate(400%)}}.qv-blink{animation:1.1s step-end infinite qv-blink}.qv-pit{font-family:var(--qv-mono);letter-spacing:.08em;color:var(--qv-acc);background:var(--qv-acc-dim);border:1px solid color-mix(in oklch, var(--qv-acc) 40%, transparent);text-transform:uppercase;border-radius:2px;align-items:center;gap:4px;padding:1px 5px;font-size:9.5px;display:inline-flex}.qv-pit:before{content:"";background:var(--qv-acc);width:4px;height:4px;box-shadow:0 0 6px var(--qv-acc);border-radius:50%}.qv-btn{height:32px;font-size:12.5px;font-weight:500;font-family:var(--qv-sans);cursor:default;-webkit-user-select:none;user-select:none;color:inherit;background:0 0;border:1px solid transparent;border-radius:2px;align-items:center;gap:8px;padding:0 14px;text-decoration:none;transition:background .12s,color .12s,border-color .12s;display:inline-flex}button.qv-btn,a.qv-btn{cursor:pointer}.qv-btn:disabled{opacity:.5;cursor:not-allowed}.qv-btn-primary{background:var(--qv-acc);color:var(--qv-acc-fg)}.qv-btn-primary:hover{background:var(--qv-acc-hover)}.qv-btn-ghost{color:var(--qv-fg);border-color:var(--qv-line-2);background:0 0}.qv-btn-ghost:hover{background:var(--qv-bg-2);border-color:var(--qv-line-2)}.qv-btn-text{color:var(--qv-fg-2);cursor:pointer;background:0 0;border:0;padding:0;font-family:inherit;font-size:12.5px}.qv-btn-text:hover{color:var(--qv-fg)}.qv-code-chip{height:32px;font-family:var(--qv-mono);color:var(--qv-fg-2);background:var(--qv-bg-1);border:1px dashed var(--qv-line-2);border-radius:2px;align-items:center;padding:0 12px;font-size:12px;display:inline-flex}.qv-tag{height:18px;font-family:var(--qv-mono);letter-spacing:.04em;color:var(--qv-fg-2);background:var(--qv-bg-2);border:1px solid var(--qv-line);border-radius:2px;align-items:center;padding:0 6px;font-size:10px;display:inline-flex}.qv-field{border-top:1px solid var(--qv-line);font-family:var(--qv-mono);grid-template-columns:1fr 110px 70px;align-items:center;gap:12px;padding:8px 14px;font-size:11.5px;display:grid}.qv-field:hover{background:var(--qv-bg-1)}.qv-field .ftype{color:var(--qv-acc)}.qv-field .ftag{color:var(--qv-fg-3);font-size:10px}.qv-modal-overlay{z-index:100;background:var(--qv-scrim);backdrop-filter:blur(3px);justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}.qv-modal{background:var(--qv-bg-1);border:1px solid var(--qv-line-2);width:100%;max-width:420px;box-shadow:0 24px 64px var(--qv-shadow);border-radius:3px;padding:28px;position:relative}.qv-modal-close{width:32px;height:32px;color:var(--qv-fg-4);cursor:pointer;background:0 0;border:0;padding:0;font-size:18px;line-height:1;position:absolute;top:6px;right:6px}.qv-modal-close:hover{color:var(--qv-fg)}.qv-modal-kicker{font-family:var(--qv-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--qv-acc);font-size:10px}.qv-modal-title{letter-spacing:-.03em;color:var(--qv-fg);margin:10px 0 0;font-size:24px;font-weight:500}.qv-modal-body{color:var(--qv-fg-2);text-wrap:pretty;margin:12px 0 0;font-size:14px;line-height:1.55}.qv-modal-form{gap:8px;margin-top:20px;display:flex}.qv-modal-input{min-width:0;font-family:var(--qv-mono);color:var(--qv-fg);background:var(--qv-bg-2);border:1px solid var(--qv-line);border-radius:2px;flex:1;padding:9px 11px;font-size:12.5px}.qv-modal-input:focus{border-color:var(--qv-acc);outline:none}.qv-modal-input::placeholder{color:var(--qv-fg-4)}.qv-modal-error{font-family:var(--qv-mono);color:var(--qv-down);margin:12px 0 0;font-size:11.5px}@media (width<=520px){.qv-modal-form{flex-direction:column}}:root{--qv-prose-size:17px;--qv-prose-leading:1.7;--qv-post-width:660px}.qv-post{max-width:var(--qv-post-width);margin:0 auto;padding:56px 24px 40px}.qv-post-meta{font-family:var(--qv-mono);letter-spacing:.04em;color:var(--qv-fg-3);font-size:12px}.qv-post-title{letter-spacing:-.03em;color:var(--qv-fg);text-wrap:balance;margin:14px 0 18px;font-size:clamp(28px,6.4vw,36px);font-weight:500;line-height:1.12}.qv-post-dek{color:var(--qv-fg-2);border-bottom:1px solid var(--qv-line);text-wrap:pretty;margin:0 0 36px;padding-bottom:32px;font-size:19px;line-height:1.5}.qv-post-end{max-width:var(--qv-post-width);margin:0 auto;padding:0 24px 72px}.qv-prose{font-size:var(--qv-prose-size);line-height:var(--qv-prose-leading);color:var(--qv-prose-fg);letter-spacing:-.005em}.qv-prose>:first-child{margin-top:0}.qv-prose h2{letter-spacing:-.02em;color:var(--qv-fg);text-wrap:balance;margin:2.4em 0 .6em;scroll-margin-top:88px;font-size:24px;font-weight:500;line-height:1.25}.qv-prose h3{color:var(--qv-fg);margin:1.9em 0 .5em;scroll-margin-top:88px;font-size:19px;font-weight:500;line-height:1.3}.qv-prose p{text-wrap:pretty;margin:0 0 1.15em}.qv-prose a{color:var(--qv-acc);text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:color-mix(in oklch, var(--qv-acc) 55%, transparent);text-decoration-color:color-mix(in oklch, var(--qv-acc) 55%, transparent);text-underline-offset:3px}.qv-prose a:hover{-webkit-text-decoration-color:var(--qv-acc);text-decoration-color:var(--qv-acc)}.qv-prose ul,.qv-prose ol{margin:0 0 1.15em;padding-left:1.4em}.qv-prose li{margin-bottom:.45em;padding-left:.2em}.qv-prose li::marker{color:var(--qv-fg-3)}.qv-prose strong{color:var(--qv-fg);font-weight:600}.qv-prose hr{border:0;border-top:1px solid var(--qv-line);margin:2.4em 0}.qv-prose img{border:1px solid var(--qv-line);border-radius:4px;max-width:100%;height:auto;display:block}.qv-prose code{font-family:var(--qv-mono);color:var(--qv-fg);background:var(--qv-bg-2);border:1px solid var(--qv-line);border-radius:2px;padding:.1em .35em;font-size:.84em}.qv-prose pre{background:var(--qv-bg-1);border:1px solid var(--qv-line);border-radius:4px;margin:1.6em 0;padding:16px 18px;overflow-x:auto}.qv-prose pre code{color:var(--qv-fg);background:0 0;border:none;padding:0;font-size:13.5px;line-height:1.65}.qv-prose blockquote{border-left:2px solid var(--qv-acc);color:var(--qv-fg-2);margin:1.6em 0;padding:2px 0 2px 18px}.qv-prose blockquote p:last-child{margin-bottom:0}.qv-prose table{border-collapse:collapse;width:100%;margin:1.6em 0;font-size:14px;line-height:1.45}.qv-prose th,.qv-prose td{border-bottom:1px solid var(--qv-line);text-align:left;vertical-align:top;padding:9px 12px}.qv-prose th{border-bottom-color:var(--qv-line-2);font-family:var(--qv-mono);letter-spacing:.04em;color:var(--qv-fg-2);background:var(--qv-bg-1);font-size:11.5px;font-weight:500}.qv-prose td{color:var(--qv-prose-fg)}.qv-prose tbody tr:hover{background:var(--qv-bg-1)}.qv-post-list{border-top:1px solid var(--qv-line);border-left:1px solid var(--qv-line);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.qv-post-card{border-right:1px solid var(--qv-line);border-bottom:1px solid var(--qv-line);flex-direction:column;gap:8px;padding:28px 28px 24px;text-decoration:none;transition:background-color .12s;display:flex}.qv-post-card:hover{background:var(--qv-bg-1)}.qv-post-card:focus-visible{outline-offset:-2px}.qv-post-card>:last-child{margin-top:auto;padding-top:8px}.qv-post-card p{max-width:62ch}@media (width<=760px){.qv-post-list{grid-template-columns:minmax(0,1fr)}.qv-post-card{padding:24px 20px 20px}}.qv-post-card h2{letter-spacing:-.02em;color:var(--qv-fg);text-wrap:balance;margin:0;font-size:22px;font-weight:500;line-height:1.25;transition:color .12s}.qv-post-card:hover h2{color:var(--qv-acc)}.qv-post-card p{color:var(--qv-fg-2);text-wrap:pretty;margin:0;font-size:15px;line-height:1.55}.qv-prose .qv-video{margin:24px 0}.qv-prose .qv-video iframe{aspect-ratio:16/9;border:1px solid var(--qv-line);border-radius:4px;width:100%;display:block}.qv-mermaid{background:var(--qv-bg-1);border:1px solid var(--qv-line);text-align:center;border-radius:4px;margin:1.6em 0;padding:20px;overflow-x:auto}.qv-mermaid code{font-family:var(--qv-mono);color:var(--qv-fg-2);font-size:12.5px}.qv-frame{background:var(--qv-bg);flex-direction:column;width:100%;height:100dvh;display:flex;overflow:hidden}.qv-frame-chrome{border-bottom:1px solid var(--qv-line);background:var(--qv-bg-1);height:28px;font-family:var(--qv-mono);color:var(--qv-fg-3);flex-shrink:0;align-items:center;gap:10px;padding:0 12px;font-size:11px;display:flex}.qv-frame-body{flex:1;min-height:0;position:relative;overflow:auto}.qv-nav{z-index:5;padding:16px var(--qv-pad-x);border-bottom:1px solid var(--qv-line);background:color-mix(in oklch, var(--qv-bg) 86%, transparent);backdrop-filter:blur(8px);color:var(--qv-fg-2);align-items:center;gap:28px;font-size:12.5px;display:flex;position:sticky;top:0}.qv-nav-compact{padding:12px var(--qv-pad-x)}.qv-nav-links{color:var(--qv-fg-2);gap:22px;font-size:12.5px;display:flex}.qv-nav-link{color:var(--qv-fg-2);white-space:nowrap;border-bottom:1px solid transparent;padding-bottom:2px}.qv-nav-link-active{color:var(--qv-fg);border-bottom-color:var(--qv-acc)}.qv-nav-link-soon{color:var(--qv-fg-4);cursor:default}.qv-nav-link-soon:after{content:"soon";font-family:var(--qv-mono);letter-spacing:.04em;margin-left:6px;font-size:10px}.qv-nav>a:first-child{flex-shrink:0}.qv-nav-spacer{flex:1}.qv-nav-build{color:var(--qv-fg-4);letter-spacing:.06em;white-space:nowrap;font-size:10.5px}.qv-nav-toggle{width:38px;height:38px;color:var(--qv-fg);cursor:pointer;background:0 0;border:0;border-radius:2px;justify-content:center;align-items:center;margin:-5px -8px -5px 0;display:none}.qv-nav-toggle:hover{background:var(--qv-bg-2)}.qv-theme-toggle{width:32px;height:32px;color:var(--qv-fg-2);cursor:pointer;background:0 0;border:0;border-radius:2px;flex-shrink:0;justify-content:center;align-items:center;margin:-6px -6px -6px 0;display:inline-flex}.qv-theme-toggle:hover{color:var(--qv-fg);background:var(--qv-bg-2)}.qv-nav-panel{padding:6px var(--qv-pad-x) 14px;border-bottom:1px solid var(--qv-line);background:var(--qv-bg);box-shadow:0 18px 40px var(--qv-shadow);flex-direction:column;display:none;position:absolute;top:100%;left:0;right:0}.qv-nav-panel .qv-nav-link{border-bottom:1px solid var(--qv-line-soft);padding:13px 0;font-size:15px}.qv-nav-panel .qv-nav-link-active{color:var(--qv-acc);border-bottom-color:var(--qv-line-soft)}.qv-nav-panel-actions{flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;display:flex}.qv-nav-panel-actions .qv-btn{height:36px}.qv-search:focus-within{border-color:var(--qv-acc)!important}.qv-search input:focus-visible{outline:none}.qv-scroll-x{-webkit-overflow-scrolling:touch;overflow-x:auto}.qv-scroll-x>*{min-width:var(--qv-table-min)}.qv-split-2>*,.qv-split-3>*,.qv-split-4>*{min-width:0}#main :where(img,svg,pre){max-width:100%}@media (width<=900px){:root{--qv-pad-x:24px;--qv-cols-hero:1fr;--qv-cols-2:1fr;--qv-cols-2-wide:1fr;--qv-cols-3:1fr;--qv-cols-4:repeat(2, 1fr);--qv-cols-5:repeat(3, 1fr)}.qv-split-2>*,.qv-split-3>*{border-right:none!important}.qv-split-2>*+*,.qv-split-3>*+*{border-top:1px solid var(--qv-line)}.qv-split-4>:nth-child(2n){border-right:none!important}.qv-split-4>*+*+*{border-top:1px solid var(--qv-line)}}@media (width<=1100px){.qv-nav-build{display:none}}@media (width<=900px){.qv-nav{gap:16px}.qv-nav-links,.qv-nav>.qv-nav-actions{display:none}.qv-nav-toggle{display:inline-flex}.qv-nav-panel{display:flex}.qv-nav-spacer{flex:1}}@media (width<=760px){.qv-catalog-head,.qv-skill-head{display:none!important}.qv-catalog-row,.qv-skill-row{flex-wrap:wrap;align-items:center;gap:8px 12px;min-width:0;display:flex!important}.qv-catalog-row>:nth-child(-n+2),.qv-skill-row>:nth-child(3){flex:0 0 100%}.qv-card-flag{text-align:center;left:-1px;right:-1px}div:has(>.qv-card-flag){padding-top:34px!important}}@media (width<=640px){:root{--qv-pad-x:18px}.qv-prose table{display:block;overflow-x:auto}.qv-frame-chrome{display:none}.qv-frame{height:auto;min-height:100dvh;overflow:visible}.qv-frame-body{overflow:visible}}@media (width<=560px){:root{--qv-cols-4:1fr;--qv-cols-5:repeat(2, 1fr)}.qv-split-4>*{border-right:none!important}.qv-split-4>*+*{border-top:1px solid var(--qv-line)}.qv-log-row{grid-template-columns:1fr!important;gap:0!important;padding-bottom:12px!important}}.qv-nav-static{flex-wrap:wrap}@media (width<=760px){.qv-nav-static .qv-nav-links{flex-wrap:wrap;gap:14px 18px;width:100%;display:flex}}@media (pointer:coarse){.qv-btn{min-height:44px}.qv-btn-text{min-height:44px;padding:0 4px}.qv-nav-toggle,.qv-theme-toggle,.qv-modal-close{width:44px;height:44px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}