@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/barlow-vietnamese-400-normal.Dpl4UHAZ.woff2)format("woff2"),url(/_astro/barlow-vietnamese-400-normal.BFeobeCK.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/barlow-latin-ext-400-normal.HxX4XjxC.woff2)format("woff2"),url(/_astro/barlow-latin-ext-400-normal.CvBsJvxq.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/barlow-latin-400-normal.qiz4-Cze.woff2)format("woff2"),url(/_astro/barlow-latin-400-normal.fsAxiSwU.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/barlow-vietnamese-500-normal.zTViEIzf.woff2)format("woff2"),url(/_astro/barlow-vietnamese-500-normal.GNfB7rCE.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/barlow-latin-ext-500-normal.DOaysfXq.woff2)format("woff2"),url(/_astro/barlow-latin-ext-500-normal.CJPcKP2Q.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/barlow-latin-500-normal.BPAOfeC8.woff2)format("woff2"),url(/_astro/barlow-latin-500-normal.C1h8hMer.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/barlow-vietnamese-600-normal.DcjprdFV.woff2)format("woff2"),url(/_astro/barlow-vietnamese-600-normal.CA_GiK2e.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/barlow-latin-ext-600-normal.B8NK_A3D.woff2)format("woff2"),url(/_astro/barlow-latin-ext-600-normal.DMVRjfRT.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/barlow-latin-600-normal.DILqtrty.woff2)format("woff2"),url(/_astro/barlow-latin-600-normal.CNwfPWQD.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/barlow-vietnamese-700-normal.D6euyNzi.woff2)format("woff2"),url(/_astro/barlow-vietnamese-700-normal.4Jt4k04K.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/barlow-latin-ext-700-normal.BLuWmldJ.woff2)format("woff2"),url(/_astro/barlow-latin-ext-700-normal.CctuGmmz.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/barlow-latin-700-normal.A9pxMQ4z.woff2)format("woff2"),url(/_astro/barlow-latin-700-normal.__SGTsZ1.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/barlow-semi-condensed-vietnamese-500-normal.DGADhYWF.woff2)format("woff2"),url(/_astro/barlow-semi-condensed-vietnamese-500-normal.hJ2t9k9e.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/barlow-semi-condensed-latin-ext-500-normal.BXdp1BvY.woff2)format("woff2"),url(/_astro/barlow-semi-condensed-latin-ext-500-normal.rZeYuEMb.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/barlow-semi-condensed-latin-500-normal.G0uxJNrM.woff2)format("woff2"),url(/_astro/barlow-semi-condensed-latin-500-normal.CFOoVYFH.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/barlow-semi-condensed-vietnamese-600-normal.b1FQiZcx.woff2)format("woff2"),url(/_astro/barlow-semi-condensed-vietnamese-600-normal.DzVrjA0Q.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/barlow-semi-condensed-latin-ext-600-normal.BkQ9hN72.woff2)format("woff2"),url(/_astro/barlow-semi-condensed-latin-ext-600-normal.BuP8AaxH.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Barlow Semi Condensed;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/barlow-semi-condensed-latin-600-normal.BkLiAYu4.woff2)format("woff2"),url(/_astro/barlow-semi-condensed-latin-600-normal.DyOfdMBA.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--desk:#dcd8c6;--paper:#eeebdd;--sheet:#f8f7ef;--plastic:#1e7f4529;--plastic-edge:#145a3259;--ink:#1f2124;--muted:#50564b;--line:#cbcdb8;--rule:#1f2124;--grid:#e0e3cf;--grid5:#b6bd9c;--block:#2e6b3f;--block-edge:#1d4a2a;--placed:#c5cab6;--placed-edge:#a6ac98;--axis:#d4541d;--tmpl:#1e7f45;--tmpl-ink:#fff;--tmpl-soft:#1e7f4521;--focus:#1e7f45;--err:#b3401a;--shadow:0 1px 2px #1f21241f, 0 6px 18px #1f21241a;--sans:"Barlow", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--cond:"Barlow Semi Condensed", "Barlow", system-ui, sans-serif;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;color-scheme:light}@media (prefers-color-scheme:dark){:root{--desk:#0a1b30;--paper:#0f2a4a;--sheet:#133760;--plastic:#50c88229;--plastic-edge:#96e6b459;--ink:#eaf2fb;--muted:#a8c0dc;--line:#2f5885;--rule:#c4d7ee;--grid:#22497a;--grid5:#3f6c9f;--block:#8fe0a0;--block-edge:#5fbf75;--placed:#2e5578;--placed-edge:#45709a;--axis:#ff9a5c;--tmpl:#45c47a;--tmpl-ink:#062012;--tmpl-soft:#45c47a33;--focus:#7fe0a4;--err:#ffb08a;--shadow:0 1px 2px #0006, 0 8px 24px #00000059;color-scheme:dark}.rail{box-shadow:inset 0 1px #ffffff14}}*{box-sizing:border-box}[hidden]{display:none!important}html{-webkit-text-size-adjust:100%}body{color:var(--ink);font:17px/1.6 var(--sans);font-variant-numeric:tabular-nums;background:var(--desk);margin:0}::selection{background:var(--tmpl-soft);color:var(--ink)}a{color:var(--ink);text-decoration-color:color-mix(in srgb, var(--tmpl) 70%, transparent);text-underline-offset:3px;text-decoration-thickness:1.5px}a:hover{text-decoration-color:var(--tmpl)}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}*{scrollbar-color:var(--grid5) transparent;scrollbar-width:thin}.wrap{max-width:1200px;margin:0 auto;padding-inline:16px}.sr{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.icon{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;flex:none;width:18px;height:18px}header.site{background:var(--paper);border-bottom:1.5px solid var(--rule)}header.site .wrap{flex-wrap:wrap;align-items:center;gap:4px 24px;padding-block:9px;display:flex}.brand{font:700 18px/1 var(--sans);color:var(--ink);letter-spacing:.005em;align-items:center;gap:9px;text-decoration:none;display:inline-flex}.brand img{width:22px;height:22px;display:block}nav.tools{font:600 14px/1 var(--cond);letter-spacing:.05em;text-transform:uppercase;flex-wrap:wrap;gap:0 16px;display:flex}nav.tools a{color:var(--muted);padding:7px 0 6px;text-decoration:none}nav.tools a:hover{color:var(--ink)}nav.tools a[aria-current=page]{color:var(--ink);box-shadow:inset 0 -2px 0 var(--tmpl)}@media (width<=900px){nav.tools{scrollbar-width:none;flex-wrap:nowrap;width:100%;overflow-x:auto;-webkit-mask-image:linear-gradient(90deg,#000 85%,#0000);mask-image:linear-gradient(90deg,#000 85%,#0000)}nav.tools::-webkit-scrollbar{display:none}nav.tools a{white-space:nowrap}body:has(.tool) header.site nav.tools{display:none}}main{padding-block:18px 56px}h1{font:600 clamp(26px, 4.4vw, 34px)/1.15 var(--sans);letter-spacing:-.012em;text-wrap:balance;margin:0 0 6px}h2{font:600 24px/1.25 var(--sans);letter-spacing:-.005em;text-wrap:balance;margin:48px 0 10px}h3{font:600 18px/1.35 var(--sans);margin:26px 0 6px}p.lead{color:var(--muted);max-width:70ch;margin:0 0 14px}p.intro{max-width:72ch;margin:18px 0 0}.prose{max-width:800px}.prose p,.prose li{max-width:70ch}.prose li+li{margin-top:4px}.crumbs ol{font:600 13px/1.4 var(--cond);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);flex-wrap:wrap;gap:6px;margin:0 0 10px;padding:0;list-style:none;display:flex}.crumbs li+li:before{content:"/";color:var(--line);margin-right:6px}.crumbs a{color:var(--muted);text-decoration:none}.crumbs a:hover{color:var(--ink)}.note{color:var(--muted);font-size:15px}kbd,code{font:600 13px/1 var(--cond);background:var(--sheet);border:1px solid var(--line);letter-spacing:.02em;border-bottom-width:2px;border-radius:4px;padding:2px 5px}code{font:13px/1 var(--mono);border-bottom-width:1px}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}th,td{text-align:left;border-bottom:1px solid var(--line);padding:6px 10px}th{font:600 13px/1.3 var(--cond);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);border-bottom:1.5px solid var(--rule)}.tablewrap{background:var(--sheet);border:1px solid var(--line);border-radius:2px;overflow-x:auto}.tablewrap table{margin:0}.tablewrap tr:last-child td{border-bottom:0}details{border-top:1px solid var(--line);padding:10px 0}details summary{cursor:pointer;font-weight:600}details summary::marker{color:var(--tmpl)}.prose details:last-of-type{border-bottom:1px solid var(--line)}.related{gap:10px;padding:0;list-style:none;display:grid}.related li{max-width:none}.related a{font-weight:600}.related span{color:var(--muted)}.ad-slot{display:none}body.ads-on .ad-slot{min-height:250px;margin-block:24px;display:block}footer.site{border-top:1.5px solid var(--rule);background:var(--paper);color:var(--muted);font-size:15px}footer.site .wrap{gap:8px;padding-block:22px 34px;display:grid}footer.site nav{font:600 14px/1.6 var(--cond);letter-spacing:.05em;text-transform:uppercase;flex-wrap:wrap;gap:4px 16px;display:flex}footer.site nav a{color:var(--muted);text-decoration:none}footer.site nav a:hover{color:var(--ink)}footer.site p{margin:0}.disclaimer{font:600 13px/1.5 var(--cond);letter-spacing:.06em}.bp{aspect-ratio:1;background:var(--sheet);width:100%;display:block}.bp path{fill:var(--block)}.tool{--index-w:136px;--tb-w:300px;--r:10px;grid-template-columns:var(--index-w) minmax(0, 1fr) auto var(--tb-w);grid-template-areas:"rail rail rail rail""spec spec spec spec""index paper scale tb""notes notes notes notes""rows rows rows rows";margin-top:14px;display:grid;position:relative}.tool.tb-compact{grid-template-columns:var(--index-w) minmax(0, 1fr) auto;grid-template-areas:"rail rail rail""spec spec spec""index paper scale""index tb tb""notes notes notes""rows rows rows"}.tool button,.tool input,.tool select{font:inherit;color:inherit}.tool button{cursor:pointer}.tool button:disabled{opacity:.4;cursor:default}.rail{background:linear-gradient(var(--plastic), var(--plastic)), linear-gradient(var(--grid5) 1px, transparent 1px) 0 -1px / 60px 60px, linear-gradient(90deg, var(--grid5) 1px, transparent 1px) -1px 0 / 60px 60px, linear-gradient(var(--grid) 1px, transparent 1px) 0 -1px / 12px 12px, linear-gradient(90deg, var(--grid) 1px, transparent 1px) -1px 0 / 12px 12px, var(--sheet);border:1.5px solid var(--rule);border-radius:var(--r) var(--r) 0 0;box-shadow:inset 0 1px 0 #ffffff8c, inset 0 -1px 0 var(--plastic-edge);border-bottom:0;flex-wrap:wrap;grid-area:rail;align-items:center;gap:10px 16px;padding:10px 12px;display:flex}.sizebox{gap:4px;display:grid}.sizebox+.sizebox{margin-left:-4px}.stepper{border:1.5px solid var(--rule);background:var(--sheet);border-radius:6px;align-items:stretch;height:40px;display:inline-flex;overflow:hidden}.stepper label{font:600 15px/1 var(--cond);color:var(--muted);letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;border-right:1px solid var(--line);place-items:center;padding-inline:10px 8px;display:grid}.stepper input{border:0;border-inline:1px solid var(--line);text-align:center;width:3.4em;font:600 20px/1 var(--sans);-moz-appearance:textfield;background:0 0;min-width:0;padding:0}.stepper input:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.stepper input::-webkit-inner-spin-button,.stepper input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.stepper button{background:0 0;border:0;place-items:center;width:36px;padding:0;display:grid}.stepper button:hover{background:var(--tmpl-soft)}.stepper button:active{background:color-mix(in srgb, var(--tmpl) 25%, transparent)}.ruler{width:100%;height:18px;accent-color:var(--tmpl);background:0 0;margin:0}.holes{scrollbar-width:none;scroll-behavior:smooth;flex:300px;gap:3px;min-width:0;padding:2px 10px;display:flex;overflow-x:auto;-webkit-mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000);mask-image:linear-gradient(90deg,#0000,#000 12px calc(100% - 12px),#0000)}.holes::-webkit-scrollbar{display:none}.tool .hole{min-width:42px;color:var(--muted);font:600 12px/1.1 var(--cond);letter-spacing:.03em;background:0 0;border:0;border-radius:6px;flex:none;justify-items:center;gap:2px;padding:2px 3px 1px;display:grid;position:relative}.hole svg{background:var(--sheet);width:36px;height:36px;box-shadow:inset 0 1px 2px #00000038, 0 0 0 1px var(--plastic-edge);border-radius:50%;padding:6px;display:block}.hole svg:not(.icon) path{fill:var(--ink)}.hole:hover{color:var(--ink)}.hole:hover svg{box-shadow:inset 0 1px 2px #00000038, 0 0 0 1.5px var(--tmpl)}.hole[aria-pressed=true],.hole:has(input:checked){color:var(--ink)}.hole[aria-pressed=true] svg,.hole:has(input:checked) svg{background:var(--tmpl);box-shadow:0 0 0 1.5px var(--tmpl)}.hole[aria-pressed=true] svg:not(.icon) path,.hole:has(input:checked) svg:not(.icon) path{fill:var(--tmpl-ink)}.hole input{opacity:0;pointer-events:none;position:absolute}.hole:has(input:focus-visible){outline:2px solid var(--focus);outline-offset:1px}.hole.pick{min-width:72px}.hole.pick svg{width:36px;height:36px;padding:8px}.hole.swatch svg{image-rendering:pixelated}.seg{border:1.5px solid var(--rule);background:var(--sheet);border-radius:6px;height:40px;display:inline-flex;overflow:hidden}.seg label{cursor:pointer;border-left:1px solid var(--line);flex:auto;display:flex;position:relative}.seg label:first-child{border-left:0}.seg input{opacity:0;pointer-events:none;position:absolute}.seg span{font:600 14px/1 var(--cond);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);white-space:nowrap;flex:1;place-items:center;padding-inline:14px;display:grid}.seg label:hover span{color:var(--ink);background:var(--tmpl-soft)}.seg input:checked+span{background:var(--ink);color:var(--sheet)}.seg input:focus-visible+span{outline:2px solid var(--focus);outline-offset:-3px}.fieldlabel{font:600 13px/1 var(--cond);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.spec{background:var(--paper);border-inline:1.5px solid var(--rule);border-top:1px solid var(--plastic-edge);grid-area:spec;grid-template-columns:minmax(0,1fr);gap:10px;padding:10px 12px 12px;display:grid}.spec-row{flex-wrap:wrap;align-items:end;gap:10px 20px;display:flex}.field{gap:5px;min-width:0;display:grid}.field-head{justify-content:space-between;align-items:baseline;gap:10px;display:flex}.field .val{font:600 15px/1 var(--cond);color:var(--ink)}.field input[type=range]{width:170px;accent-color:var(--tmpl);margin:0}.tool select{height:36px;font:500 15px/1 var(--sans);border:1.5px solid var(--rule);background:var(--sheet);border-radius:6px;min-width:0;padding:0 30px 0 10px}.chips{flex-wrap:wrap;gap:6px;display:flex}.chips button{border:1px solid var(--line);background:var(--sheet);height:34px;font:600 14px/1 var(--cond);letter-spacing:.03em;color:var(--muted);white-space:nowrap;border-radius:999px;padding:0 11px}.chips button:hover{color:var(--ink);border-color:var(--muted)}.chips button[aria-pressed=true]{background:var(--ink);border-color:var(--ink);color:var(--sheet)}.switch{height:36px;font:600 14px/1 var(--cond);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);cursor:pointer;white-space:nowrap;align-items:center;gap:10px;display:inline-flex}.switch input{-webkit-appearance:none;appearance:none;background:var(--line);cursor:pointer;border:1.5px solid var(--rule);border-radius:11px;flex:none;width:38px;height:22px;margin:0;transition:background .15s;position:relative}.switch input:after{content:"";background:var(--sheet);width:15px;height:15px;box-shadow:0 0 0 1px var(--rule);border-radius:50%;transition:transform .15s;position:absolute;top:2px;left:2px}.switch input:checked{background:var(--tmpl)}.switch input:checked:after{transform:translate(16px)}.index{background:var(--paper);border:1.5px solid var(--rule);border-right:1px solid var(--line);border-radius:0 0 0 var(--r);grid-area:index;align-content:start;gap:1px;padding:10px 8px;display:grid}.index a{min-height:36px;color:var(--muted);font:600 14px/1.1 var(--cond);letter-spacing:.05em;text-transform:uppercase;border-radius:5px;align-items:center;gap:9px;padding:6px 8px;text-decoration:none;display:flex}.index a:hover{background:var(--tmpl-soft);color:var(--ink)}.index a[aria-current=page]{background:var(--ink);color:var(--sheet)}.paper{background:var(--sheet);border-block:1.5px solid var(--rule);grid-area:paper;grid-template-rows:40px auto;min-width:0;display:grid;position:relative}.tool.tb-compact .paper{border-bottom:1px solid var(--line)}.strip{min-width:0}.hud{z-index:2;font:600 14px/1 var(--cond);letter-spacing:.04em;color:var(--muted);pointer-events:none;opacity:0;white-space:nowrap;transition:opacity .12s;position:absolute;bottom:14px;left:12px}.hud.on{opacity:1}.hud b{color:var(--ink);font-weight:600}.scroller{place-items:center;min-height:260px;max-height:min(74vh,860px);padding:4px 14px 42px;display:grid;overflow:auto}.scroller canvas{image-rendering:pixelated;touch-action:pan-x pan-y;cursor:crosshair;border-radius:1px;display:block}.scroller canvas:focus-visible{outline:2px solid var(--focus);outline-offset:4px}.stage3d{height:min(70vh,820px);min-height:320px;overflow:hidden}.stage3d canvas{cursor:grab;display:block}.paper.empty .scroller:after{content:"Choose an image or a sample to start.";color:var(--muted);font:600 16px/1.4 var(--cond);letter-spacing:.04em}.paper .drop{background:color-mix(in srgb, var(--sheet) 88%, transparent);border:2px dashed var(--tmpl);font:600 18px/1 var(--cond);letter-spacing:.05em;text-transform:uppercase;z-index:3;place-items:center;display:grid;position:absolute;inset:0}.xtools{z-index:4;pointer-events:none;opacity:0;visibility:hidden;flex-direction:column;justify-content:space-between;transition:opacity .16s ease-out,transform .16s ease-out,visibility 0s linear .16s;display:flex;position:absolute;inset:4px 8px 5px;transform:translateY(-3px)}.xrow{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.xrow>*{pointer-events:auto}.xtools .grp{border:1.5px solid var(--rule);background:var(--sheet);height:32px;box-shadow:var(--shadow);border-radius:6px;align-items:stretch;display:inline-flex;overflow:hidden}.xtools .grp>*{border:0;border-left:1px solid var(--line);height:100%;font:600 14px/1 var(--cond);letter-spacing:.04em;white-space:nowrap;background:0 0;border-radius:0;align-items:center;gap:6px;padding:0 10px;display:inline-flex}.xtools .grp>:first-child{border-left:0}.xtools .grp button:hover{background:var(--tmpl-soft)}.xtools .grp select{border:0;border-left:1px solid var(--line);width:118px;height:100%;font:600 14px/1 var(--cond);border-radius:0;padding:0 22px 0 8px}.xtools .grp label.zoom{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;gap:8px}.xtools .grp label.zoom input{width:64px;accent-color:var(--tmpl)}.xtools .grp label.zoom output{min-width:3.4em;color:var(--ink);text-transform:none}.xtools .grp .switch{height:100%;font-size:13px}.xtools .grp .switch input{width:32px;height:18px}.xtools .grp .switch input:after{width:11px;height:11px}.xtools .grp .switch input:checked:after{transform:translate(14px)}.xtools .grp .seg{height:100%;box-shadow:none;border:0;border-radius:0}.xtools .grp .seg span{padding-inline:10px;font-size:13px}.xtools .close{display:none}@media (hover:hover) and (width>=901px){.paper:hover .xtools,.paper:has(:focus-visible) .xtools{opacity:1;visibility:visible;transition-delay:0s;transform:none}}.tool.tools-on .xtools{opacity:1;visibility:visible;transition-delay:0s;transform:none}.scale{background:var(--sheet);border-block:1.5px solid var(--rule);grid-area:scale;grid-template-rows:auto auto auto 1fr auto;justify-items:center;gap:6px;width:64px;padding:14px 0 28px;display:grid}.tool.tb-compact .scale{border-bottom:1px solid var(--line)}.scale .top,.scale .bot{font:600 12px/1 var(--cond);color:var(--muted)}.scale button{border:1.5px solid var(--rule);background:var(--sheet);border-radius:6px;place-items:center;width:36px;height:32px;padding:0;display:grid}.scale button:hover:not(:disabled){background:var(--tmpl-soft)}.scale #next .icon{transform:rotate(-90deg)}.scale #prev .icon{transform:rotate(90deg)}.scale input[type=range]{writing-mode:vertical-lr;width:22px;height:100%;min-height:140px;accent-color:var(--tmpl);direction:rtl;margin:0}.scale-read{display:none}.scale .view{flex-direction:column;width:54px;height:auto;margin-bottom:14px}.scale .view label{border-left:0;border-top:1px solid var(--line)}.scale .view label:first-child{border-top:0}.scale .view span{text-align:center;white-space:normal;padding:6px 2px;font-size:12px;line-height:1.1}.tbcol{background:var(--sheet);border:1.5px solid var(--rule);border-radius:0 0 var(--r) 0;border-left:0;flex-direction:column;grid-area:tb;justify-content:flex-end;min-width:0;display:flex}.tb{border-top:1.5px solid var(--rule);border-left:1.5px solid var(--rule);font:15px/1.3 var(--cond)}.bom+.tb{border-top-width:1px}.tb-head{border-bottom:1.5px solid var(--rule);align-items:center;gap:8px;padding:7px 10px;display:flex}.tb-name{min-width:0;font:600 15px/1.2 var(--cond);letter-spacing:.06em;text-transform:uppercase;overflow-wrap:anywhere;flex:1}.tb-head button{border:1px solid var(--line);background:var(--sheet);height:28px;font:600 13px/1 var(--cond);letter-spacing:.06em;text-transform:uppercase;border-radius:5px;align-items:center;gap:5px;padding:0 9px;display:inline-flex}.tb-head button:hover{border-color:var(--rule);background:var(--tmpl-soft)}.tb-head .tb-tools{color:var(--tmpl);border-color:var(--tmpl);display:none}.tb dl{grid-template-columns:1fr 1fr;margin:0;display:grid}.tb dl>div{border-bottom:1px solid var(--line);border-right:1px solid var(--line);align-content:start;gap:1px;min-width:0;padding:6px 10px 7px;display:grid}.tb dl>div:nth-child(2n){border-right:0}.tb dl>div.wide{border-right:0;grid-column:1/-1}.tb dt{font:600 12px/1.2 var(--cond);letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}.tb dd{font:600 18px/1.25 var(--cond);overflow-wrap:anywhere;margin:0}.tb dl>div.wide dd{font-size:15px}.tb .clear{padding:6px 10px;display:flex}.tb .clear button{border:1px solid var(--line);background:var(--sheet);height:28px;font:600 13px/1 var(--cond);letter-spacing:.05em;text-transform:uppercase;border-radius:5px;padding:0 10px}.tb .clear button:hover{border-color:var(--rule)}.bom{font:14px/1.3 var(--cond);border-top:1.5px solid var(--rule);border-left:1.5px solid var(--rule);max-height:260px;overflow:auto}.bom table{font-size:14px}.bom th,.bom td{padding:4px 10px}.bom th{background:var(--sheet);font-size:12px;position:sticky;top:0}.bom .sw{vertical-align:-1px;border:1px solid #0000004d;width:12px;height:12px;margin-right:7px;display:inline-block}.tool.tb-compact .tbcol{border-left:1.5px solid var(--rule);border-radius:0 0 var(--r) 0;border-top:0}.tool.tb-compact .tb{border-top:0;flex-wrap:wrap;align-items:stretch;display:flex}.tool.tb-compact .tb-head{border-bottom:0;border-right:1.5px solid var(--rule);flex:0 auto}.tool.tb-compact .tb dl{flex-wrap:wrap;flex:1;display:flex}.tool.tb-compact .tb dl>div{border-bottom:0;border-right:1px solid var(--line);align-items:baseline;gap:7px;padding:8px 12px;display:flex}.tool.tb-compact .tb dl>div.wide{border-right:1px solid var(--line)}.tool.tb-compact .tb dd{font-size:16px}.tool.tb-compact .tb .clear{align-items:center}.tool.tb-compact .bom{flex-basis:100%;max-height:none}.tool.tb-compact .bom table{display:block}.tool.tb-compact .bom thead{display:none}.tool.tb-compact .bom tbody{flex-wrap:wrap;display:flex}.tool.tb-compact .bom tr{border-right:1px solid var(--line);gap:6px;padding:5px 12px;display:flex}.tool.tb-compact .bom td{border:0;padding:0}.notes{color:var(--muted);flex-wrap:wrap;grid-area:notes;align-items:baseline;gap:4px 16px;margin:10px 0 0;font-size:15px;display:flex}.notes p{margin:0}.notes .keys kbd{margin-inline:1px}.notes .err{color:var(--err);flex-basis:100%;order:-1;font-weight:600}.rows{grid-area:rows;margin-top:14px}.dock{display:none}@media (width<=900px){.tool,.tool.tb-compact{grid-template-columns:minmax(0,1fr);grid-template-areas:"index""rail""spec""paper""scale""tb""notes""rows"}.index{scrollbar-width:none;scroll-snap-type:x proximity;background:0 0;border:0;border-radius:0;gap:6px;margin-right:-16px;padding:0 24px 10px 0;display:flex;overflow-x:auto;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 48px),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 48px),#0000)}.index::-webkit-scrollbar{display:none}.index a{border:1px solid var(--line);background:var(--sheet);scroll-snap-align:start;white-space:nowrap;border-radius:999px;flex:none;gap:6px;min-height:34px;padding:0 12px 0 9px;font-size:13px}.index a .icon{width:16px;height:16px}.index a[aria-current=page]{border-color:var(--ink)}.rail{gap:8px;padding:8px}.sizebox{flex:0 auto}.sizebox+.sizebox{margin-left:0}.stepper{height:40px}.stepper label{padding-inline:8px 6px}.stepper input{width:3em}.stepper button{width:34px}.rail>.seg{flex:auto}.seg span{padding-inline:9px;font-size:13px}.holes{flex-basis:100%;order:5;margin-inline:-8px;padding-inline:8px 28px;-webkit-mask-image:linear-gradient(90deg,#0000,#000 14px calc(100% - 36px),#0000);mask-image:linear-gradient(90deg,#0000,#000 14px calc(100% - 36px),#0000)}.spec{gap:8px;padding:8px}.spec-row{scrollbar-width:none;flex-wrap:nowrap;margin-right:-8px;padding-right:28px;overflow-x:auto;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 32px),#0000);mask-image:linear-gradient(90deg,#000 calc(100% - 32px),#0000)}.spec-row::-webkit-scrollbar{display:none}.spec-row>*{flex:none}.chips{flex-wrap:nowrap}.field input[type=range]{width:140px}.paper{border-inline:1.5px solid var(--rule);border-bottom:0;grid-template-rows:0 auto}.strip{padding:0}.hud{z-index:2;background:var(--sheet);border:1px solid var(--line);border-radius:4px;padding:4px 6px;position:absolute;top:8px;bottom:auto;left:10px}.scroller{place-items:start center;min-height:200px;max-height:78vh;padding:10px 4px 12px}.scale{border-inline:1.5px solid var(--rule);border-left-width:1.5px;border-block:1px solid var(--line);border-top:1px solid var(--line);grid-template-rows:none;grid-template-columns:auto 1fr auto;grid-template-areas:"read read view""prev range next";align-items:center;row-gap:8px;width:auto;padding:8px 10px}.scale .top,.scale .bot{display:none}.scale-read{font:600 14px/1 var(--cond);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;display:block}.scale input[type=range]{writing-mode:horizontal-tb;direction:ltr;order:2;width:100%;height:24px;min-height:0}.scale #prev{grid-area:prev}.scale #next{grid-area:next}.scale input[type=range]{grid-area:range}.scale-read{grid-area:read;justify-self:start}.scale .view{flex-direction:row;grid-area:view;width:auto;height:32px;margin:0}.scale .view label{border-top:0;border-left:1px solid var(--line)}.scale .view label:first-child{border-left:0}.scale .view span{white-space:nowrap;padding:0 8px}.scale #next .icon,.scale #prev .icon{transform:none}.scale #prev .icon{transform:rotate(180deg)}.tbcol{border:1.5px solid var(--rule);border-radius:0 0 var(--r) var(--r);border-top:0}.tool.tb-compact .tbcol{border-left:1.5px solid var(--rule)}.tb{border-top:1.5px solid var(--rule)}.tb-head .tb-tools{display:inline-flex}.tool.tb-compact .tb{display:block}.tool.tb-compact .tb-head{border-right:0;border-bottom:1.5px solid var(--rule)}.tool.tb-compact .tb dl{display:grid}.xtools{z-index:30;pointer-events:auto;padding:12px 12px calc(12px + env(safe-area-inset-bottom));background:var(--paper);border-top:1.5px solid var(--rule);opacity:1;visibility:hidden;justify-content:flex-start;gap:8px;transition:transform .2s ease-out,visibility 0s linear .2s;position:fixed;inset:auto 0 0;transform:translateY(100%);box-shadow:0 -8px 24px #0000002e}.xtools .grp{height:40px;box-shadow:none}.xrow{justify-content:flex-start;gap:8px}.xtools .grp label.zoom input{width:120px}.xtools .close{height:40px;margin-left:auto;display:inline-flex}.tool.tools-on .xtools{visibility:visible;transition:transform .2s ease-out,visibility;transform:none}.notes{font-size:14px}.dock{z-index:20;padding:8px 10px calc(8px + env(safe-area-inset-bottom));background:var(--paper);border-top:1.5px solid var(--rule);visibility:hidden;align-items:center;gap:8px;transition:transform .18s ease-out;display:flex;position:fixed;bottom:0;left:0;right:0;transform:translateY(110%);box-shadow:0 -6px 18px #00000024}.dock.on{visibility:visible;transform:none}.dock .grp{border:1.5px solid var(--rule);background:var(--sheet);border-radius:6px;align-items:stretch;height:42px;display:inline-flex;overflow:hidden}.dock .grp button{background:0 0;border:0;place-items:center;width:40px;padding:0;display:grid}.dock .grp button:active{background:var(--tmpl-soft)}.dock .grp output{border-inline:1px solid var(--line);min-width:58px;font:600 16px/1 var(--cond);letter-spacing:.03em;white-space:nowrap;place-items:center;padding:0 6px;display:grid}.dock [data-dock=lprev] .icon{transform:rotate(180deg)}.dock .tools{border:1.5px solid var(--tmpl);background:var(--sheet);height:42px;color:var(--tmpl);font:600 14px/1 var(--cond);letter-spacing:.06em;text-transform:uppercase;border-radius:6px;margin-left:auto;padding:0 12px}body:has(.dock){padding-bottom:64px}}@media (width<=380px){.seg span{padding-inline:7px}.stepper button{width:32px}.stepper input{width:2.7em}.rail{gap:8px 6px}.grp output{min-width:50px}.dock{gap:6px;padding-inline:8px}.dock .grp button{width:36px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:0s!important;transition-delay:0s!important;animation:none!important}}@media print{body{color:#000;background:#fff}header.site,footer.site,.crumbs,.ad-slot,.rail,.spec,.index,.scale,.xtools,.strip,.dock,.notes,.tb-head button,.tb .clear,.no-print{display:none!important}.tool,.tool.tb-compact{display:block}.paper{border:0;display:block}.scroller{max-height:none;padding:0;overflow:visible}.scroller canvas{max-width:100%;height:auto!important}.tbcol{break-inside:avoid;border:1px solid #000;margin-top:12px}}.levelbox{flex:300px;gap:4px;min-width:0;display:grid}.prose figure{margin:0}.prose figure .bp{border:1px solid var(--line)}.prose figcaption,.examples span,.chart .fig span{font:500 14px/1.35 var(--cond);letter-spacing:.03em;margin-top:6px;display:block}.examples a,.chart .fig{transition:box-shadow .12s,border-color .12s}body:not(:has(.tool,.chart)) main>.prose,body:not(:has(.tool,.chart,.prose)) main{background:var(--sheet);border:1.5px solid var(--rule);box-shadow:var(--shadow);border-radius:2px;padding:28px clamp(18px,4vw,44px) 36px}body:not(:has(.tool,.chart,.prose)) main{margin-block:22px 56px}body:not(:has(.tool,.chart)) main>.prose h1{border-bottom:1.5px solid var(--rule);margin-bottom:14px;padding-bottom:12px}@media (width>=901px){.tool.tb-compact .tbcol{z-index:5;position:sticky;bottom:0;box-shadow:0 -6px 16px #00000014}}.spec .source{font:600 14px/1 var(--cond);letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}.spec .chips button#clear{border-color:var(--rule);text-transform:uppercase;letter-spacing:.06em;border-radius:6px}
