@font-face{font-family:Geist Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/geist-sans-latin-400-normal-gapTbOY8.woff2) format("woff2"),url(/assets/geist-sans-latin-400-normal-BOaIZNA2.woff) format("woff")}@font-face{font-family:Geist Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/geist-sans-latin-500-normal-uokXdC-Q.woff2) format("woff2"),url(/assets/geist-sans-latin-500-normal-CN2lyvyL.woff) format("woff")}:root{--page-bg: #f2f2f0;--card-bg: #ffffff;--card-radius: 28px;--card-pad-x: 24px;--card-pad-y: 30px;--card-pad-bottom: 18px;--card-max: 420px;--font: "Geist Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--ink: #0a0a0a;--ink-soft: #858582;--muted: #797979;--title-size: 26px;--title-leading: 1.26;--copy-size: 15px;--copy-leading: 1.47;--copy-indent: 10px;--action-bg: #f2f2f2;--action-bg-hover: #e8e8e8;--action-ink: #0a0a0a;--action-radius: 15px;--action-height: 45px;--art-line: #0b0b0b;--art-surface: #ffffff;--art-side: #e5e5e5;--art-side-mid: #dadada;--art-side-dark: #cdcdcd;--art-stroke: 2.8px;--art-stroke-thin: 2.5px;--art-dash: 8 5.2;--art-width: 72%;--focus: #2b6cff}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--page-bg);color:var(--ink);font-family:var(--font);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.visually-hidden{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.page{max-width:1480px;margin:0 auto;padding:clamp(28px,5vw,64px) clamp(16px,4vw,48px) 40px}.page-head{max-width:760px;margin-bottom:clamp(24px,4vw,40px)}.page-head h1{margin:0 0 8px;font-size:15px;font-weight:500;letter-spacing:0}.page-head p{margin:0;font-size:15px;line-height:1.5;color:var(--muted)}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:20px;align-items:start;justify-items:center}.credit{margin-top:40px;font-size:13px;color:var(--muted)}.credit a{color:inherit;text-underline-offset:3px}.credit a:hover{color:var(--ink)}.es-card{width:100%;max-width:var(--card-max);background:var(--card-bg);border-radius:var(--card-radius);padding:var(--card-pad-y) var(--card-pad-x) var(--card-pad-bottom);display:flex;flex-direction:column}.es-title{margin:0;font-size:var(--title-size);line-height:var(--title-leading);font-weight:400;letter-spacing:-.012em}.es-title-main,.es-title-sub{display:block}.es-title-sub{color:var(--ink-soft)}.es-art{width:var(--art-width);min-width:180px;margin:28px 0 22px calc(var(--card-pad-x) * -.55)}.es-art-hit,.es-art-static{display:block;width:100%;padding:0;margin:0;border:0;background:none;border-radius:18px;color:inherit}.es-art-hit{cursor:pointer;-webkit-tap-highlight-color:transparent}.es-art-hit:focus-visible,.es-action:focus-visible{outline:2px solid var(--focus);outline-offset:3px}.es-svg{display:block;width:100%;height:auto;overflow:visible}.es-copy{margin:0 0 18px var(--copy-indent);max-width:34ch;font-size:var(--copy-size);line-height:var(--copy-leading);color:var(--muted)}.es-actions{margin-left:var(--copy-indent)}.es-action{display:inline-flex;align-items:center;gap:8px;height:var(--action-height);padding:0 19px;border:0;border-radius:var(--action-radius);background:var(--action-bg);color:var(--action-ink);font:500 15px/1 var(--font);letter-spacing:-.005em;cursor:pointer;transition:background-color .16s ease}.es-action:hover{background:var(--action-bg-hover)}.es-action:active{transform:translateY(1px)}.es-action-arrow{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.es-note{min-height:18px;margin:10px 0 0;font-size:12.5px;color:var(--muted)}.es-svg .ln{stroke:var(--art-line);stroke-width:var(--art-stroke);stroke-linejoin:round;stroke-linecap:round}.es-svg .thin{stroke-width:var(--art-stroke-thin)}.es-svg .ray{stroke-width:3px}.es-svg .spark{stroke-width:2px}.es-svg .dashed{stroke-dasharray:var(--art-dash);stroke-linecap:butt}.es-svg .fw{fill:var(--art-surface)}.es-svg .fl{fill:var(--art-side)}.es-svg .fs{fill:var(--art-side-mid)}.es-svg .fm{fill:var(--art-side-dark)}.es-svg .fk{fill:var(--art-line)}.es-svg .fn{fill:none}@media(max-width:380px){:root{--title-size: 23px;--card-pad-x: 20px;--copy-indent: 4px;--art-width: 82%}}@media(prefers-reduced-motion:reduce){.es-action{transition:none}}:root{--code-bg: #f6f6f4;--code-border: #e4e4e1;--code-ink: #1d1d1b;--code-font: ui-monospace, "SFMono-Regular", "Cascadia Mono", Consolas, "Liberation Mono", monospace}.page-links{display:flex;flex-wrap:wrap;gap:4px 8px;margin-top:10px!important;font-size:14px!important}.page-links a,.code-foot a{color:var(--ink);font-weight:500;text-underline-offset:3px}.es-cell{width:100%;max-width:var(--card-max);display:flex;flex-direction:column;align-items:flex-start}.code-trigger{display:inline-flex;align-items:center;gap:6px;margin:8px 0 0 6px;padding:6px 10px;border:0;border-radius:10px;background:none;color:var(--muted);font:500 13px/1 var(--font);cursor:pointer}.code-trigger:hover{color:var(--ink);background:#0000000a}.code-icon,.code-close svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.code-trigger:focus-visible,.code-tab:focus-visible,.code-file:focus-visible,.code-btn:focus-visible,.code-close:focus-visible,.code-block:focus-visible,.page-links a:focus-visible,.code-foot a:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.code-dialog{width:min(880px,calc(100vw - 32px));max-height:calc(100dvh - 32px);padding:0;border:0;border-radius:22px;background:var(--card-bg);color:var(--ink);box-shadow:0 24px 80px #0000002e}.code-dialog::backdrop{background:#14141259}.code-inner{display:flex;flex-direction:column;max-height:calc(100dvh - 32px);padding:20px 22px 18px}.code-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.code-head h2{margin:0;font-size:16px;font-weight:500}.code-close{display:grid;place-items:center;width:34px;height:34px;flex:none;border:0;border-radius:10px;background:var(--action-bg);color:var(--ink);cursor:pointer}.code-close:hover,.code-btn:hover:not(:disabled),.code-file:hover{background:var(--action-bg-hover)}.code-tabs{display:flex;gap:4px;margin:14px 0 12px;padding:4px;width:fit-content;border-radius:12px;background:var(--action-bg)}.code-tab{padding:7px 12px;border:0;border-radius:9px;background:none;color:var(--muted);font:500 13.5px/1 var(--font);cursor:pointer}.code-tab[aria-selected=true]{background:var(--card-bg);color:var(--ink);box-shadow:0 1px 2px #00000014}.code-tabpanel{display:flex;flex-direction:column;min-height:0;flex:1}.code-intro{display:flex;align-items:center;gap:16px;margin-bottom:12px}.code-preview{width:120px;flex:none}.code-note{margin:0;font-size:13.5px;line-height:1.5;color:var(--muted)}.code-note code{font-family:var(--code-font);font-size:.95em;color:var(--ink)}.code-files{display:flex;flex-wrap:wrap;gap:6px;flex:none;max-width:55%}.code-file{padding:6px 9px;border:1px solid var(--code-border);border-radius:8px;background:var(--card-bg);color:var(--ink);font:12.5px/1 var(--code-font);cursor:pointer}.code-file[aria-pressed=true]{border-color:var(--ink);background:var(--ink);color:var(--card-bg)}.code-toolbar{display:flex;align-items:center;gap:8px;padding:8px 8px 8px 14px;border:1px solid var(--code-border);border-bottom:0;border-radius:12px 12px 0 0;background:var(--code-bg)}.code-filename{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:12.5px/1.2 var(--code-font);color:var(--muted)}.code-status{font-size:12.5px;color:var(--muted)}.code-btn{padding:7px 11px;border:0;border-radius:8px;background:var(--action-bg);color:var(--ink);font:500 13px/1 var(--font);cursor:pointer}.code-btn:disabled{opacity:.5;cursor:default}.code-block{flex:1;min-height:160px;max-height:52vh;margin:0;padding:14px;overflow:auto;border:1px solid var(--code-border);border-radius:0 0 12px 12px;background:var(--code-bg);color:var(--code-ink);font:12.5px/1.6 var(--code-font);-moz-tab-size:2;tab-size:2;white-space:pre}.code-foot{display:flex;flex-wrap:wrap;justify-content:space-between;gap:6px 16px;margin-top:14px;font-size:13px;color:var(--muted)}@media(max-width:560px){.code-inner{padding:16px 14px 14px}.code-intro{flex-direction:column;align-items:flex-start}.code-files{max-width:none}.code-preview{width:96px}.code-block{max-height:45vh}}
