.v2{--paper:#ffffff;--tint:#f2f4f6;--wash:#f5f7f8;--wash-on-tint:#ffffff;--ink:#0a0a0a;--ink-inv:#ffffff;--dim:#666b70;--faint:#70757a;--blue:#1c4f6e;--blue-soft:#eaf0f3;--amber:#8f6212;--amber-soft:#faf3e3;--green:#1a6b3f;--green-soft:#e9f2ec;--rust:#a8483e;--rust-soft:#f7ece9;--cat-1:#1c4f6e;--cat-2:#9a6b1a;--cat-3:#2f6b4a;--cat-4:#7d4a6e;--rule:#d6d9dc;--hair:#e9ecee;--hair-on-tint:#e0e3e6;--gutter:24px;--edge:clamp(20px,4vw,46px);--max:1280px;--f-sans:"Helvetica Neue","Archivo Variable",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",Arial,sans-serif;--f-mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--t-display:clamp(38px,5vw,64px);--t-h2:clamp(26px,3.2vw,36px);--t-h3:18px;--t-body:15px;--t-sm:14.5px;--t-xs:13.5px;--t-code:12.5px;--t-label:10.5px;--sec-pad:84px;--sec-pad-sm:62px;--dur:.2s}@media (max-width:720px){.v2{--t-body:16px}}.v2{background:var(--paper);color:var(--ink);font-family:var(--f-sans);font-size:var(--t-body);line-height:1.6;-webkit-font-smoothing:antialiased;display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}.v2>main{flex:1 0 auto}:where(.v2) *,:where(.v2) :after,:where(.v2) :before{box-sizing:border-box}:where(.v2) :is(h1,h2,h3,h4,p,ul,ol,figure,blockquote){margin:0}:where(.v2) :is(ul,ol){list-style:none;padding:0}:where(.v2) a{color:inherit;text-decoration:none}:where(.v2) img{display:block;max-width:100%}:where(.v2) button{font:inherit;color:inherit}.v2 :focus-visible{outline:2px solid var(--blue);outline-offset:3px}.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}.label{font-family:var(--f-mono);font-size:var(--t-label);letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}.label-blue{color:var(--blue)}.label-amber{color:var(--amber)}.label-green{color:var(--green)}@media (prefers-reduced-motion:reduce){.v2 *,.v2 :after,.v2 :before{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.shell{max-width:var(--max);margin:0 auto;padding:0 var(--edge)}.g12{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:var(--gutter)}.col-2{grid-column:span 2}.col-3{grid-column:span 3}.col-4{grid-column:span 4}.col-5{grid-column:span 5}.col-6{grid-column:span 6}.col-7{grid-column:span 7}.col-8{grid-column:span 8}.col-12{grid-column:span 12}.col-r6{grid-column:7/span 6}.col-r5{grid-column:8/span 5}.page-top{padding-top:44px}.sec{padding:var(--sec-pad) 0 0}.sec-tint{background:var(--tint);padding:var(--sec-pad) 0;margin-top:var(--sec-pad)}.sec-tint+.sec{padding-top:0}.sec-tint .chan li,.sec-tint .tbl td{border-bottom-color:var(--hair-on-tint)}.sec-tint .code{background:var(--wash-on-tint)}.sec-head{border-top:1px solid var(--ink);padding-top:14px;display:flex;align-items:baseline;gap:14px}.sec-head .n{color:var(--blue)}.sec-head .n,.sec-head .t{font-family:var(--f-mono);font-size:var(--t-label);letter-spacing:.16em}.sec-head .t{text-transform:uppercase;color:var(--dim)}.sec-title{font-size:var(--t-h2);line-height:1.08;letter-spacing:-.04em;font-weight:700;margin-top:26px;max-width:20ch}.sec-lede{margin-top:18px;font-size:var(--t-body);line-height:1.62;color:var(--dim);max-width:58ch}.sec-body{margin-top:46px}.sec-tint+.sec-ink{margin-top:0}.sec-ink{background:var(--ink);color:var(--ink-inv);margin-top:var(--sec-pad);padding:72px 0}.sec-ink .label{color:rgba(255,255,255,.55)}@media (max-width:720px){.sec{padding-top:var(--sec-pad-sm)}.sec-ink,.sec-tint{padding:var(--sec-pad-sm) 0;margin-top:var(--sec-pad-sm)}}.btn{display:inline-block;font-size:13px;font-weight:500;padding:13px 24px;border:1px solid transparent;transition:background var(--dur),color var(--dur),border-color var(--dur),opacity var(--dur);cursor:pointer}.btn-p{background:var(--ink);color:var(--ink-inv);border-color:var(--ink)}.btn-p:hover{background:var(--blue);border-color:var(--blue)}.btn-s{background:transparent;color:var(--ink);border-color:var(--ink)}.btn-s:hover{background:var(--blue);color:var(--ink-inv);border-color:var(--blue)}.sec-ink .btn-p{background:var(--ink-inv);color:var(--ink);border-color:var(--ink-inv)}.sec-ink .btn-s{color:var(--ink-inv);border-color:rgba(255,255,255,.45)}.sec-ink .btn-s:hover{background:var(--ink-inv);color:var(--ink);border-color:var(--ink-inv)}.btns{display:flex;flex-wrap:wrap;gap:10px}.link{color:var(--blue)}.link:hover{text-decoration:underline;text-underline-offset:3px}.code{background:var(--wash);border-left:2px solid var(--ink);padding:20px 22px;font-family:var(--f-mono);font-size:var(--t-code);line-height:1.9;overflow-x:auto;white-space:pre;color:var(--ink)}.code .c{color:var(--faint)}.code .s{color:var(--blue)}.code .k{color:var(--cat-4);font-weight:600}.code-cap{display:flex;justify-content:space-between;gap:16px;padding-bottom:9px}.tbl-wrap{overflow-x:auto}@media (max-width:720px){.tbl-wrap{background:linear-gradient(90deg,var(--paper) 30%,transparent) 0 /24px 100% no-repeat,linear-gradient(-90deg,var(--paper) 30%,transparent) 100% /24px 100% no-repeat,radial-gradient(farthest-side at 0 50%,rgba(10,10,10,.12),transparent) 0 /12px 100% no-repeat,radial-gradient(farthest-side at 100% 50%,rgba(10,10,10,.12),transparent) 100% /12px 100% no-repeat;background-attachment:local,local,scroll,scroll}}.tbl{width:100%;border-collapse:collapse;min-width:560px}.tbl th{text-align:left;font-family:var(--f-mono);font-size:var(--t-label);letter-spacing:.16em;text-transform:uppercase;color:var(--dim);font-weight:400;padding:0 16px 10px 0;border-bottom:1px solid var(--ink)}.tbl td{padding:15px 16px 15px 0;border-bottom:1px solid var(--hair);font-size:14px;vertical-align:baseline}.tbl td.m{font-family:var(--f-mono);font-size:var(--t-code);color:var(--blue)}.tbl tr td:first-child{font-weight:600}.notice{border:1px solid var(--ink);padding:22px 24px;display:flex;gap:20px;align-items:baseline;flex-wrap:wrap}.notice>.t{font-family:var(--f-mono);font-size:var(--t-label);letter-spacing:.16em;text-transform:uppercase;color:var(--blue);flex:none}.notice p{font-size:var(--t-xs);line-height:1.6;color:var(--dim);flex:1;min-width:260px}.notice b{color:var(--ink);font-weight:600}.notice-amber{border-color:var(--amber);background:var(--amber-soft)}.notice-amber>.t{color:var(--amber)}.notice-amber p{color:#6f4d10}.notice-blue{border-color:var(--blue);background:var(--blue-soft)}.item{border-top:1px solid var(--ink);padding-top:14px}.item h3{font-size:var(--t-body);font-weight:600;letter-spacing:-.02em;margin-top:10px}.item p{margin-top:8px;font-size:var(--t-xs);line-height:1.6;color:var(--dim)}.note-item .n{font-family:var(--f-mono);font-size:var(--t-label);letter-spacing:.16em;color:var(--faint)}.note-item h3{font-size:var(--t-h3);font-weight:600;letter-spacing:-.025em;margin-top:10px}.note-item p{margin-top:9px;font-size:var(--t-xs);line-height:1.6;color:var(--dim)}.stat .n{font-size:clamp(30px,3.4vw,40px);font-weight:700;letter-spacing:-.04em;line-height:1;font-variant-numeric:tabular-nums}.stat .n small{font-size:.38em;font-weight:500;color:var(--dim);margin-left:5px;letter-spacing:0}.stat .l{margin-top:8px}.stat-blue .n{color:var(--blue)}.stat-green .n{color:var(--green)}.stat-amber .n{color:var(--amber)}.stat-rust .n{color:var(--rust)}.chan-h{display:flex;align-items:baseline;justify-content:space-between;border-bottom:2px solid var(--cat,var(--ink));padding-bottom:9px}.chan-h .t{font-size:14px;font-weight:600;letter-spacing:-.01em;color:var(--cat,var(--ink))}.chan-h .c{font-family:var(--f-mono);font-size:11px;color:var(--cat,var(--dim));opacity:.72}.chan ul{margin-top:12px;display:flex;flex-direction:column}.chan li{font-size:var(--t-xs);padding:7px 0;border-bottom:1px solid var(--hair)}.fig figcaption{display:flex;justify-content:space-between;gap:14px;padding-bottom:9px;border-bottom:1px solid var(--ink);margin-bottom:14px}.fig img{border:1px solid var(--rule);width:100%;height:auto}.fig .d{margin-top:12px;font-size:13px;color:var(--dim);line-height:1.55}.top{position:sticky;top:0;z-index:50;background:var(--paper);border-bottom:1px solid var(--ink)}.top-in{height:62px;gap:30px}.brand,.top-in{display:flex;align-items:center}.brand{font-weight:700;font-size:16px;letter-spacing:-.02em;gap:9px}.brand svg{display:block;flex:none}.nav{display:flex;gap:24px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}.nav a{display:inline-flex;align-items:center;min-height:44px;transition:color var(--dur)}.nav a.on,.nav a:hover{color:var(--ink)}.top-r{margin-left:auto;display:flex;gap:20px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}.top-r,.top-r a{align-items:center}.top-r a{display:inline-flex;min-height:44px;transition:color var(--dur)}.top-r .b,.top-r a:hover{color:var(--ink)}.top-r .b{font-weight:500}.top-r .b:hover{color:var(--blue)}.gh{display:inline-flex;align-items:baseline;gap:7px}.gh .k{font-family:var(--f-mono);color:var(--ink);font-weight:500;font-variant-numeric:tabular-nums}.burger{display:none;min-height:44px;margin-left:auto;background:none;border:1px solid var(--rule);padding:8px 12px;font-family:var(--f-mono);font-size:11px;cursor:pointer}.top-drawer{display:none;border-top:1px solid var(--hair);padding:14px 0 18px}.top-drawer.open{display:block}.top-drawer ul{display:flex;flex-direction:column;gap:12px}.top-drawer a{display:flex;align-items:center;min-height:44px;font-size:14px}.foot{background:var(--ink);color:var(--ink-inv);padding:52px 0 44px;margin-top:104px}.foot a{color:rgba(255,255,255,.82);transition:color var(--dur)}.foot a:hover{color:#fff}.foot-top{row-gap:30px}.foot-brand,.foot-col{grid-column:span 3}.foot-brand .m{margin-top:14px;font-family:var(--f-mono);font-size:11px;letter-spacing:.08em;color:rgba(255,255,255,.5);line-height:1.8}.foot-col .h{font-family:var(--f-mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.45)}.foot-col ul{margin-top:14px;display:flex;flex-direction:column;gap:9px}.foot-col a{font-size:13px}.foot-bot{margin-top:46px;border-top:1px solid rgba(255,255,255,.16);padding-top:20px;display:flex;justify-content:space-between;gap:18px;flex-wrap:wrap;font-family:var(--f-mono);font-size:var(--t-label);letter-spacing:.1em;color:rgba(255,255,255,.5)}.dark-end+.foot{margin-top:0;padding-top:0}.dark-end+.foot .foot-top{border-top:1px solid rgba(255,255,255,.16);padding-top:52px}.docs+.foot,.tint-end+.foot{margin-top:0}@media (max-width:1080px){.col-5,.col-6,.col-7,.col-r5,.col-r6{grid-column:span 12}.col-3,.col-4{grid-column:span 6}}@media (max-width:860px){.nav,.top-r{display:none}.burger{display:block}}@media (max-width:720px){.col-2,.col-3,.col-4{grid-column:span 12}}@media (max-width:1080px){.foot-brand{grid-column:span 12}.foot-col{grid-column:span 4}}@media (max-width:720px){.foot-col{grid-column:span 6}.foot-col:last-child{grid-column:span 12}.foot-col:last-child ul{flex-direction:row;flex-wrap:wrap;column-gap:24px}.foot-col a{display:inline-flex;align-items:center;min-height:44px}}.spon-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(340px,100%),1fr));gap:1px;background:var(--ink);border:1px solid var(--ink)}.spon-grid:has(>:only-child) .spon{grid-template-columns:232px 1fr}.spon-grid:has(>:only-child) .spon-logo{padding:22px 26px}.spon-grid:has(>:only-child) .spon-body{padding:22px 26px 20px}.spon{background:var(--paper);display:grid;grid-template-columns:148px 1fr;transition:background var(--dur)}.spon:hover{background:var(--wash)}.spon-logo{border-right:1px solid var(--hair);padding:16px 18px;min-width:0;display:flex;align-items:center;justify-content:center}.spon-logo img{width:100%;height:auto}.spon-body{padding:16px 18px 15px;min-width:0}.spon-body h3{font-size:15px;font-weight:600;letter-spacing:-.02em}.spon-body p{margin-top:6px;font-size:12.5px;line-height:1.6;color:var(--dim)}.spon-cta{margin-top:10px;display:inline-flex;align-items:center;min-height:44px;font-size:12.5px;font-weight:500;color:var(--blue)}.spon-cta:hover{text-decoration:underline;text-underline-offset:3px}.spon-more{margin-top:22px;border-top:1px solid var(--rule);padding-top:18px;gap:32px}.spon-more,.spon-more .who{display:flex;align-items:center;flex-wrap:wrap}.spon-more .who{gap:28px}.spon-more .who a{display:inline-flex;align-items:center;font-size:13px;color:var(--dim);transition:color var(--dur)}.spon-more .who a:hover{color:var(--ink)}.spon-more .who img{display:block}.spon-more .join{margin-left:auto}@media (max-width:520px){.notice{padding:18px 16px}.notice p{min-width:0;flex-basis:100%}.spon{grid-template-columns:1fr}.spon-logo{border-right:none;border-bottom:1px solid var(--hair);padding:18px}.spon-more .join{margin-left:0}}.lang{position:relative}.lang-btn{display:inline-flex;align-items:center;gap:7px;min-height:44px;background:none;border:none;padding:0;cursor:pointer;font-size:12px;letter-spacing:.06em;color:var(--dim);transition:color var(--dur)}.lang-btn:hover,.lang-btn[aria-expanded=true]{color:var(--ink)}.lang-caret{width:0;height:0;border-left:3.5px solid transparent;border-right:3.5px solid transparent;border-top:4px solid}.lang-menu{position:absolute;top:calc(100% + 12px);right:0;z-index:60;min-width:132px;background:var(--paper);border:1px solid var(--ink);display:flex;flex-direction:column}.lang-menu li+li{border-top:1px solid var(--hair)}.lang-menu a{display:flex;align-items:center;width:100%;min-height:44px;text-align:left;background:none;border:none;padding:10px 14px;cursor:pointer;font-size:13px;color:var(--ink);transition:background var(--dur),color var(--dur)}.lang-menu a:hover{background:var(--wash)}.lang-menu a.on{color:var(--blue);font-weight:600}.lang-inline{display:flex;gap:10px;flex-wrap:wrap}.lang-inline button{min-height:44px;background:none;border:1px solid var(--rule);padding:7px 13px;cursor:pointer;font-size:13px;color:var(--dim);transition:border-color var(--dur),color var(--dur)}.lang-inline button.on{border-color:var(--blue);color:var(--blue)}.fig-btn{display:block;width:100%;padding:0;border:1px solid var(--rule);background:none;cursor:zoom-in;position:relative;overflow:hidden;transition:border-color var(--dur)}.fig-btn:hover{border-color:var(--ink)}.fig-btn img{width:100%;height:auto;display:block}.fig-hint{position:absolute;right:0;bottom:0;background:var(--ink);color:var(--ink-inv);font-family:var(--f-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;padding:5px 10px;opacity:0;transition:opacity var(--dur)}.fig-btn:focus-visible .fig-hint,.fig-btn:hover .fig-hint{opacity:1}.lb{padding:0;border:none;background:none;max-width:100vw;max-height:100vh;width:100%;height:100%}.lb::backdrop{background:rgba(8,9,10,.95)}.lb:not([open]){display:none}.lb-in{width:100vw;height:100vh;display:flex;flex-direction:column;background:#0a0b0c}.lb-bar{flex:none;align-items:center;gap:20px;padding:13px 20px;border-bottom:1px solid rgba(255,255,255,.14)}.lb-bar,.lb-cap{display:flex;flex-wrap:wrap}.lb-cap{align-items:baseline;gap:14px;min-width:0}.lb-cap,.lb-note{font-family:var(--f-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#fff}.lb-note{color:rgba(255,255,255,.5)}.lb-acts{margin-left:auto;display:flex;align-items:center;gap:8px}.lb-count{font-family:var(--f-mono);font-size:11px;letter-spacing:.1em;color:rgba(255,255,255,.5);font-variant-numeric:tabular-nums;margin-right:4px}.lb-zoom{display:flex;align-items:center;border:1px solid rgba(255,255,255,.3)}.lb-zoom button{background:none;border:none;color:#fff;cursor:pointer;width:44px;height:44px;font-size:15px;line-height:1;transition:background var(--dur)}.lb-zoom button:hover{background:rgba(255,255,255,.16)}.lb-zoom .pct{font-family:var(--f-mono);font-size:11px;color:#fff;min-width:48px;text-align:center;font-variant-numeric:tabular-nums;border-left:1px solid rgba(255,255,255,.22);border-right:1px solid rgba(255,255,255,.22);line-height:44px}.lb-acts>button{background:none;border:1px solid rgba(255,255,255,.3);color:#fff;cursor:pointer;font-family:var(--f-mono);font-size:11px;letter-spacing:.08em;min-height:44px;padding:7px 12px;transition:background var(--dur),border-color var(--dur),opacity var(--dur)}.lb-acts>button:hover:not(:disabled){background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.6)}.lb-acts>button:disabled{opacity:.34;cursor:default}.lb-stage{flex:1;display:flex;align-items:center;justify-content:center;padding:26px;overflow:hidden;position:relative}.lb-stage img{max-width:100%;max-height:100%;object-fit:contain;display:block;border:1px solid rgba(255,255,255,.16);cursor:zoom-in;user-select:none}.lb-stage.zoomed{overflow:auto;align-items:flex-start;justify-content:flex-start;cursor:grab}.lb-stage.zoomed:active{cursor:grabbing}.lb-stage.zoomed img{cursor:inherit}.lb-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:2;background:rgba(10,11,12,.72);border:1px solid rgba(255,255,255,.28);color:#fff;width:42px;height:62px;cursor:pointer;font-size:17px;transition:background var(--dur),border-color var(--dur)}.lb-nav:hover{background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.6)}.lb-nav.prev{left:14px}.lb-nav.next{right:14px}.lb-stage.zoomed .lb-nav{position:fixed}.lb-tip{flex:none;padding:10px 20px;border-top:1px solid rgba(255,255,255,.14);font-family:var(--f-mono);font-size:10.5px;letter-spacing:.08em;color:rgba(255,255,255,.42);text-align:center}@media (max-width:700px){.lb-bar{gap:10px;padding:11px 13px}.lb-cap{font-size:10px}.lb-acts{gap:6px}.lb-acts>button{padding:6px 9px;font-size:10px}.lb-stage{padding:12px}.lb-nav{width:34px;height:52px}.lb-tip{display:none}}.code-box{position:relative}.code-copy{position:absolute;top:10px;right:10px;background:var(--paper);border:1px solid var(--rule);color:var(--dim);font-family:var(--f-mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;padding:5px 10px;cursor:pointer;opacity:0;transition:opacity var(--dur),color var(--dur),border-color var(--dur)}.code-box:hover .code-copy,.code-copy:focus-visible{opacity:1}.code-copy:hover{color:var(--ink);border-color:var(--ink)}.code-copy[data-state=done]{opacity:1;color:var(--green);border-color:var(--green)}.code-copy[data-state=fail]{opacity:1;color:var(--rust);border-color:var(--rust)}@media (hover:none){.code-copy{min-height:44px;opacity:1}}.code{margin:0}.skip{position:absolute;left:50%;top:0;transform:translate(-50%,-120%);z-index:200;background:var(--ink);color:var(--ink-inv);font-size:13px;padding:11px 20px;transition:transform var(--dur)}.skip:focus{transform:translate(-50%)}.link[target=_blank]:after,.prose a[target=_blank]:after{content:"↗";font-family:var(--f-mono);font-size:.78em;margin-left:3px;vertical-align:super;opacity:.65}.nav-spon{display:inline-flex;align-items:center;gap:5px;color:var(--blue)!important}.nav-spon svg{display:block;flex:none}.nav-spon:hover{color:var(--ink)!important}.nav-spon.on{color:var(--blue)!important;font-weight:500}.rows-30{row-gap:30px}.rows-34{row-gap:34px}.rows-38{row-gap:38px}.rows-40{row-gap:40px}.rows-44{row-gap:44px}.step .n{font-size:72px;font-weight:700;letter-spacing:-.06em;line-height:.8;font-variant-numeric:tabular-nums}.step.hot .n{color:var(--blue)}.step h3{font-size:var(--t-h3);font-weight:600;letter-spacing:-.025em;margin-top:22px;padding-top:14px;border-top:1px solid var(--ink)}.step.hot h3{border-top-color:var(--blue)}.step p{margin-top:9px;font-size:var(--t-xs);line-height:1.6;color:var(--dim)}.step .m{margin-top:12px;font-family:var(--f-mono);font-size:11.5px;color:var(--faint);letter-spacing:.04em}@media (max-width:720px){.step .n{font-size:56px}}