:root{--bg:#fff;--bg-sunken:#f4f4f2;--bg-raised:#fff;--ink:#0a0a0a;--ink-2:#4a4a48;--ink-3:#6e6e6c;--line:#e2e2df;--line-strong:#0a0a0a;--signal:#d12318;--signal-ink:#fff;--signal-hover:#a91c12;--signal-tint:#fdeceb;--focus:#0a0a0a;--ok:#157041;--warn:#8a5610;--bad:var(--signal);--f-micro:.6875rem;--f-xs:.75rem;--f-sm:.8125rem;--f-base:.9375rem;--f-lg:1.0625rem;--f-xl:1.5rem;--f-2xl:1.9375rem;--f-3xl:3rem;--f-4xl:4.25rem;--u:8px;--u2:16px;--u3:24px;--u4:32px;--u6:48px;--u8:64px;--u10:80px;--u12:96px;--header-h:64px;--maxw:1280px;--measure:68ch;--sans:"Helvetica Neue",Helvetica,Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",Arial,sans-serif;--mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,monospace;--t:.15s cubic-bezier(.2,0,0,1)}@media (prefers-color-scheme:dark){:root{--bg:#0d0d0d;--bg-sunken:#151515;--bg-raised:#141414;--ink:#f2f2f0;--ink-2:#a8a8a5;--ink-3:#8a8a87;--line:#2a2a28;--line-strong:#f2f2f0;--signal:#ff4438;--signal-ink:#0d0d0d;--signal-hover:#ff6459;--signal-tint:#2a1310;--focus:#f2f2f0;--ok:#3fbf7f;--warn:#d9a441}}*,:before,:after{box-sizing:border-box}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:var(--f-base);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;line-height:1.55}h1,h2,h3,h4,p,figure{margin:0}img,svg{max-width:100%;display:block}h1,h2,h3{letter-spacing:-.03em;text-wrap:balance;font-weight:700;line-height:1.05}:where(a,button,input,select,textarea,summary,details,output,[tabindex]):focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:0}::selection{background:var(--signal);color:var(--signal-ink)}.site-header{z-index:5;height:var(--header-h);background:var(--bg);border-bottom:1px solid var(--line-strong);position:sticky;top:0}.brand-row{height:100%;max-width:var(--maxw);padding:0 var(--u4);justify-content:space-between;align-items:center;gap:var(--u3);margin:0 auto;display:flex}.brand{color:var(--ink);font-size:var(--f-lg);letter-spacing:-.02em;align-items:center;gap:10px;font-weight:700;text-decoration:none;display:flex}.mark{background:var(--signal);width:26px;height:26px;color:var(--signal-ink);border-radius:0;flex-shrink:0;place-items:center;font-size:13px;display:grid}.top-links{align-items:center;gap:var(--u3);margin-left:auto;display:flex}.top-links a,.top-links button,.top-links span{font:inherit;font-size:var(--f-xs);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2);cursor:pointer;transition:color var(--t);background:0 0;border:0;padding:0;font-weight:500}.top-links a{text-decoration:none}.top-links a:hover,.top-links button:hover{color:var(--signal)}.top-links span[aria-disabled]{color:var(--ink-3);cursor:default}.language-switcher{flex-shrink:0;position:relative}.language-switcher summary{cursor:pointer;color:var(--ink-2);font:inherit;font-size:var(--f-xs);letter-spacing:.04em;text-transform:uppercase;transition:color var(--t);align-items:center;gap:7px;font-weight:500;list-style:none;display:flex}.language-switcher summary::-webkit-details-marker{display:none}.language-switcher summary:hover{color:var(--signal)}.language-switcher summary:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.language-globe{border:1.25px solid;border-radius:50%;flex-shrink:0;width:1em;height:1em;position:relative}.language-globe:before{content:"";border-left:1px solid;border-right:1px solid;border-radius:50%;width:38%;height:106%;position:absolute;top:-8%;left:28%}.language-globe:after{content:"";border-top:1px solid;border-bottom:1px solid;border-radius:50%;width:106%;height:34%;position:absolute;top:29%;left:-8%}.language-chevron{border-bottom:1.5px solid;border-right:1.5px solid;width:.55em;height:.55em;margin-top:-.25em;transform:rotate(45deg)}.language-switcher[open] .language-chevron{margin-top:.2em;transform:rotate(225deg)}.language-menu{z-index:10;border:1px solid var(--line-strong);background:var(--bg-raised);min-width:190px;box-shadow:4px 4px 0 var(--signal);padding:5px;position:absolute;top:calc(100% + 12px);right:0}.language-menu a{color:var(--ink);font-size:var(--f-sm);letter-spacing:0;text-transform:none;padding:10px 11px;font-weight:500;text-decoration:none;display:block}.language-menu a:hover,.language-menu a:focus-visible{background:var(--signal-tint);color:var(--signal-hover);outline:0}.language-menu .is-current{background:var(--signal-tint);color:var(--signal-hover);font-weight:700}main{max-width:var(--maxw);padding:0 var(--u4);margin:0 auto}.intro{padding:var(--u12)0 var(--u6);text-align:center}.intro-badge{margin:0 auto var(--u4);border:2px solid var(--signal);background:var(--signal-tint);color:var(--signal-hover);font-size:var(--f-sm);letter-spacing:.045em;border-radius:999px;align-items:center;gap:7px;padding:7px 15px;font-weight:700;line-height:1.2;display:inline-flex}.intro-badge span{font-size:var(--f-lg);line-height:1}.intro h1{font-size:clamp(1.5rem,5.1vw,var(--f-4xl));letter-spacing:-.045em;white-space:nowrap;margin:0 auto;font-weight:700;line-height:1.05}.intro p{max-width:88ch;margin:var(--u3)auto 0;color:var(--ink-2);font-size:var(--f-lg);text-wrap:balance;line-height:1.55}.language-suggestion{justify-content:space-between;align-items:center;gap:var(--u3);max-width:1080px;margin:0 auto var(--u6);padding:var(--u2)var(--u3);border-left:3px solid var(--signal);background:var(--signal-tint);color:var(--ink-2);font-size:var(--f-sm);display:flex}.language-suggestion a{color:var(--signal-hover);text-underline-offset:3px;white-space:nowrap;font-weight:700;text-decoration:underline}.tool{max-width:1080px;margin:0 auto var(--u10)}.tool-methods{grid-template-rows:auto auto auto auto;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;display:grid}.method{grid-row:span 4;grid-template-rows:subgrid;padding:var(--u4);border:1px solid var(--line-strong);background:var(--bg-raised);row-gap:var(--u3);margin:0 -1px -1px 0;display:grid}@supports not (grid-template-rows:subgrid){.method{flex-direction:column;display:flex}.method-body{flex:1;display:contents}}.method-head{margin:0}.method-title{margin:0 0 var(--u);font-size:var(--f-lg);letter-spacing:-.02em;font-weight:700}.method-lead{color:var(--ink-2);font-size:var(--f-sm);margin:0;line-height:1.55}.method-body{display:contents}.slot{flex-direction:column;display:flex}.slot-label{color:var(--ink-3);font-size:var(--f-micro);letter-spacing:.12em;text-transform:uppercase;margin-bottom:7px;font-weight:600}.qty{border:1px solid var(--line);grid-template-columns:52px 1fr 52px;height:48px;display:grid}.qty:focus-within{border-color:var(--ink)}.qty button{background:var(--bg-sunken);color:var(--ink);cursor:pointer;transition:background var(--t),color var(--t);border:0;font-family:inherit;font-size:19px}.qty button:hover{background:var(--signal);color:var(--signal-ink)}.qty input{border:0;border-left:1px solid var(--line);border-right:1px solid var(--line);background:var(--bg);color:var(--ink);text-align:center;font-family:inherit;font-size:var(--f-lg);font-variant-numeric:tabular-nums;border-radius:0;font-weight:700}.qty input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.qty input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.qty input[type=number]{-moz-appearance:textfield}.presets{margin-top:var(--u2);flex-wrap:wrap;gap:0;display:flex}.presets button{border:1px solid var(--line);background:var(--bg);min-width:46px;height:38px;color:var(--ink-2);font-family:inherit;font-size:var(--f-xs);font-variant-numeric:tabular-nums;cursor:pointer;transition:background var(--t),color var(--t),border-color var(--t);border-radius:0;flex:auto;margin:0 -1px -1px 0;font-weight:600}.presets button:hover{background:var(--bg-sunken);color:var(--ink);z-index:1;position:relative}.presets button.is-on{background:var(--ink);border-color:var(--ink);color:var(--bg);z-index:2;position:relative}.method textarea{resize:vertical;height:100%;min-height:94px}.blank-box{min-height:62px;padding:var(--u2);border:1px dashed var(--line);background:var(--bg-sunken);color:var(--ink-3);font-family:var(--mono);font-size:var(--f-lg);white-space:pre-wrap;overflow-wrap:anywhere;justify-content:center;align-items:center;display:flex}.box-note{color:var(--ink-3);font-size:var(--f-xs);font-variant-numeric:tabular-nums;margin:7px 0 0}.cta{min-height:54px;padding:0 var(--u3);border:1px solid var(--signal);background:var(--signal);color:var(--signal-ink);font-family:inherit;font-size:var(--f-base);cursor:pointer;transition:background var(--t),border-color var(--t);border-radius:0;margin-top:0;font-weight:700}.cta:hover:not(:disabled){background:var(--signal-hover);border-color:var(--signal-hover)}.cta:disabled{opacity:.35;cursor:not-allowed}.cta.is-copied{background:var(--ink);border-color:var(--ink);color:var(--bg)}.tool-test{padding:var(--u4);border:1px solid var(--line-strong);background:var(--bg-sunken);border-top:0}.test-head{align-items:baseline;gap:var(--u3);margin-bottom:var(--u3);flex-wrap:wrap;display:flex}.test-title{font-size:var(--f-lg);letter-spacing:-.02em;white-space:nowrap;margin:0;font-weight:700}.test-head p{color:var(--ink-2);font-size:var(--f-sm);flex:340px;margin:0;line-height:1.55}.tool-test textarea{resize:vertical;width:100%;min-height:92px}.tool-test .status{margin-top:var(--u2);color:var(--ink-3);font-size:var(--f-xs);font-variant-numeric:tabular-nums}.ref-wrap{max-height:420px;margin-top:var(--u4);border:1px solid var(--line-strong);background:var(--bg-raised);overflow:auto}.ref{border-collapse:collapse;width:100%;font-size:var(--f-sm)}.ref thead th{z-index:1;border-bottom:1px solid var(--line-strong);background:var(--bg-sunken);color:var(--ink-3);font-size:var(--f-micro);letter-spacing:.12em;text-transform:uppercase;text-align:left;padding:12px 14px;font-weight:600;position:sticky;top:0}.ref td{border-bottom:1px solid var(--line);color:var(--ink-2);padding:10px 14px}.ref tr:last-child td{border-bottom:0}.ref code{color:var(--ink);font-family:var(--mono);font-size:var(--f-xs)}.ref-copy{border:1px solid var(--line);background:var(--bg-sunken);min-width:96px;color:var(--ink-3);font-family:var(--mono);font-size:var(--f-xs);cursor:pointer;transition:background var(--t),color var(--t),border-color var(--t);border-radius:0;align-items:center;gap:8px;padding:4px 8px;display:inline-flex}.ref-char{min-width:32px}.ref-hint{color:var(--signal);font-family:var(--sans);font-size:var(--f-micro);letter-spacing:.08em;text-transform:uppercase;opacity:0;transition:opacity var(--t);margin-left:auto;font-weight:600}.ref-copy:hover,.ref-copy:focus-visible{border-color:var(--ink);background:var(--bg)}.ref-copy:hover .ref-hint,.ref-copy:focus-visible .ref-hint{opacity:1}.ref-copy.is-copied{border-color:var(--ok);background:var(--bg)}.ref-copy.is-copied .ref-hint{opacity:1;color:var(--ok)}.ref-note{margin-top:var(--u2);color:var(--ink-3);font-size:var(--f-sm);text-align:center}.demos{gap:var(--u4);margin-top:var(--u6);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.demos figcaption{max-width:40ch}.content-section>.demos+p{margin-top:var(--u8)}.demos figure{margin:0}.demo{width:100%;height:auto;padding:var(--u3);border:1px solid var(--line);background:var(--bg);display:block}.demos figcaption{margin-top:var(--u2);color:var(--ink-2);font-size:var(--f-sm);line-height:1.55}.demos figcaption b{color:var(--ink);margin-bottom:4px;font-weight:600;display:block}.content{max-width:var(--maxw);padding:0 0 var(--u12);margin:0 auto}.content-section{padding:var(--u8)0;border-top:1px solid var(--line)}.content-section:first-child{border-top:1px solid var(--line-strong)}.content-section>h2{max-width:34ch;margin:0 auto var(--u3);text-wrap:balance;font-size:var(--f-2xl);letter-spacing:-.035em;text-align:center;font-weight:700}.content p{max-width:var(--measure);color:var(--ink-2);text-wrap:pretty;line-height:1.65}.content-section>p{text-align:center;max-width:92ch;margin-left:auto;margin-right:auto}.content-section>p+p{margin-top:var(--u3)}.steps,.chars{gap:var(--u4);margin-top:var(--u6);text-align:left;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.steps>div,.chars>div{padding:var(--u3)0 0;border:0;border-top:2px solid var(--line-strong);background:0 0;border-radius:0}.steps>div b,.chars>div b{margin-bottom:var(--u);font-size:var(--f-micro);letter-spacing:.12em;text-transform:uppercase;color:var(--signal);font-variant-numeric:tabular-nums;font-weight:600;display:block}.steps>div p,.chars>div p{color:var(--ink-2);font-size:var(--f-sm)}.chars h3{margin:0 0 var(--u)0;font-size:var(--f-lg);letter-spacing:-.02em;font-weight:700}.faq details{max-width:860px;padding:var(--u3)0;border-bottom:1px solid var(--line);text-align:left;margin:0 auto}.faq summary{justify-content:space-between;align-items:baseline;gap:var(--u3);cursor:pointer;font-size:var(--f-lg);letter-spacing:-.015em;font-weight:600;list-style:none;display:flex}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";color:var(--signal);font-size:var(--f-xl);transition:transform var(--t);flex-shrink:0;font-weight:400;line-height:1}.faq details[open] summary:after{content:"−"}.faq summary:hover{color:var(--signal)}.faq p{margin-top:var(--u2);max-width:var(--measure);color:var(--ink-2);font-size:var(--f-base);text-align:left}.related{margin-top:var(--u4);flex-wrap:wrap;gap:0;display:flex}.related a{padding:14px var(--u3);border:1px solid var(--line);color:var(--ink);font-size:var(--f-sm);transition:background var(--t),color var(--t),border-color var(--t);border-radius:0;margin:0 -1px -1px 0;font-weight:600;text-decoration:none}.related a:hover{background:var(--signal);color:var(--signal-ink);border-color:var(--signal);z-index:1;position:relative}.footer{justify-content:space-between;align-items:center;gap:var(--u3);max-width:var(--maxw);padding:var(--u6)var(--u4);border-top:1px solid var(--line-strong);color:var(--ink-3);font-size:var(--f-xs);flex-wrap:wrap;margin:0 auto;display:flex}.footer b{color:var(--ink);font-size:var(--f-sm);letter-spacing:-.01em}.footer nav{gap:var(--u3);display:flex}.footer a{color:var(--ink-2);transition:color var(--t);text-decoration:none}.footer a:hover{color:var(--signal)}@media (max-width:960px){.tool-methods{grid-template-columns:1fr}.demos{gap:var(--u4);grid-template-columns:1fr}}@media (max-width:900px){.steps,.chars{gap:var(--u3);grid-template-columns:repeat(2,minmax(0,1fr))}.chars,.support{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:640px){:root{--header-h:56px}.brand-row{padding:0 var(--u2);gap:var(--u2)}.brand{font-size:var(--f-sm);white-space:nowrap;flex-shrink:0}.mark{width:22px;height:22px;font-size:11px}.top-links a{letter-spacing:.02em;font-size:10px}.top-links span{display:none}.top-links{gap:var(--u2)}.language-switcher summary{gap:5px;font-size:10px}main{padding:0 var(--u2)}.intro{padding:var(--u8)0 var(--u6);margin-bottom:var(--u6)}.intro-badge{margin-bottom:var(--u3);font-size:var(--f-xs);padding:6px 13px}.intro h1{font-size:clamp(2rem,9vw,2.75rem)}.intro p{font-size:var(--f-base)}.language-suggestion{align-items:flex-start;gap:var(--u2);margin-bottom:var(--u4);padding:var(--u2);flex-direction:column}.method,.tool-row{padding:var(--u3)var(--u2)}.cta{font-size:var(--f-sm);min-height:50px}.chars,.support,.steps,.two-col,.three-col{grid-template-columns:1fr}.tool{margin-bottom:var(--u8)}.ref-wrap{max-height:340px}.ref thead th,.ref td{padding:9px 10px}.content-section{padding:var(--u6)0}.content-section>h2{font-size:var(--f-xl)}.faq summary{font-size:var(--f-base)}.related a{text-align:center;flex:auto}.footer{padding:var(--u4)var(--u2);flex-direction:column;align-items:flex-start}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}@media print{.site-header,.footer,.presets,.tool-row.verify{display:none}.tool,.method{border:1px solid #000}}
