@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-vietnamese-wght-normal.BUzh504Q.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-ext-wght-normal.CcLUaPy7.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Bricolage Grotesque Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/bricolage-grotesque-latin-wght-normal.DLoelf7F.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Atkinson Hyperlegible Next Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/atkinson-hyperlegible-next-latin-ext-wght-normal.C6vrW8VD.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Atkinson Hyperlegible Next Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/atkinson-hyperlegible-next-latin-wght-normal.BcXVPD7q.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--paper: #f6f2ea;--paper2: #ece6d8;--card: #fffdf8;--ink: #14161f;--ink2: #3b3f4e;--muted: #6b6f7d;--mark: #ffd23f;--mark2: #ffe58a;--ok: #178a55;--bad: #c2381e;--line: #d9d2c2;--radius: 16px;--head: "Bricolage Grotesque Variable", "Bricolage Grotesque", system-ui, sans-serif;--body: "Atkinson Hyperlegible Next Variable", "Atkinson Hyperlegible Next", system-ui, sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font:400 1.0625rem/1.6 var(--body)}img,svg,canvas{max-width:100%}a{color:inherit;text-underline-offset:3px}h1,h2,h3{font-family:var(--head);line-height:1.08;letter-spacing:-.02em;margin:0 0 .5em;font-weight:750}h1{font-size:clamp(2.2rem,6vw,4rem)}h2{font-size:clamp(1.5rem,3.4vw,2.2rem)}h3{font-size:1.2rem}p{margin:0 0 1em}.wrap{width:min(1120px,100% - 32px);margin-inline:auto}.narrow{width:min(760px,100% - 32px);margin-inline:auto}.muted{color:var(--muted)}.skip{position:absolute;left:-999px;top:8px;background:var(--ink);color:#fff;padding:8px 12px;border-radius:8px;z-index:99}.skip:focus{left:8px}:focus-visible{outline:3px solid var(--ink);outline-offset:2px}.site-head{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--paper) 88%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}.bar{display:flex;align-items:center;justify-content:space-between;height:62px}.brand{display:inline-flex;align-items:center;gap:10px;text-decoration:none;font:750 1.3rem var(--head);letter-spacing:-.03em}.brand b{color:#8a6d00}.nav{display:flex;align-items:center;gap:6px}.nav>a,.menu summary{padding:8px 12px;border-radius:10px;text-decoration:none;cursor:pointer;font-weight:600;list-style:none}.nav>a:hover,.menu summary:hover{background:var(--paper2)}.nav .lang{border:2px solid var(--ink);padding:4px 9px;font-size:.85rem}.menu{position:relative}.menu summary::-webkit-details-marker{display:none}.menu summary:after{content:" ▾";font-size:.8em}.menu-panel{position:absolute;right:0;top:110%;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:8px;width:270px;box-shadow:0 18px 40px #14161f26;display:grid;gap:2px}.menu-panel a{display:flex;gap:10px;align-items:center;padding:10px 12px;border-radius:10px;text-decoration:none;font-weight:600}.menu-panel a:hover{background:var(--mark2)}.btn{appearance:none;border:2px solid var(--ink);background:var(--ink);color:#fff;padding:11px 20px;border-radius:999px;font:700 1rem var(--body);cursor:pointer;text-decoration:none;display:inline-flex;gap:8px;align-items:center;justify-content:center;min-height:46px;transition:transform .12s,background .12s,color .12s}.btn:hover{background:var(--mark);color:var(--ink);transform:translateY(-1px)}.btn.ghost{background:transparent;color:var(--ink)}.btn.ghost:hover{background:var(--paper2)}.btn.small{padding:6px 14px;min-height:36px;font-size:.92rem}.btn[disabled]{opacity:.45;pointer-events:none}.hero{position:relative;overflow:hidden;padding:36px 0 24px}.hero-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:24px;align-items:center}.hero h1 mark{background:linear-gradient(transparent 58%,var(--mark) 58% 92%,transparent 92%);color:inherit;padding:0 .06em}.hero .lead{font-size:1.25rem;color:var(--ink2);max-width:34ch}.pill{display:inline-flex;align-items:center;gap:8px;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:6px 14px;font-weight:700;font-size:.9rem;margin-bottom:18px}.pill i{width:9px;height:9px;border-radius:50%;background:var(--ok);box-shadow:0 0 0 4px #178a5530}.stage{position:relative;aspect-ratio:1 / 1;max-height:520px;border-radius:28px;background:radial-gradient(circle at 50% 38%,#fffdf8,var(--paper2));border:1px solid var(--line);overflow:hidden;touch-action:pan-y}.stage canvas{position:absolute;inset:0;width:100%;height:100%;display:block}.stage img.poster{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.stage .hint{position:absolute;left:14px;bottom:12px;font-size:.85rem;background:#fffdf8dd;padding:3px 10px;border-radius:99px;z-index:2}.cta-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:8px}.section{padding:48px 0}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px}.tcard{display:grid;gap:6px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:20px;text-decoration:none;transition:transform .15s,box-shadow .15s,border-color .15s;position:relative}.tcard:hover{transform:translateY(-4px) rotate(-.4deg);box-shadow:0 14px 30px #14161f1a;border-color:var(--ink)}.tcard svg{width:38px;height:38px;padding:7px;background:var(--mark);border-radius:12px}.tcard strong{font:750 1.25rem var(--head);letter-spacing:-.02em}.tcard small{color:var(--muted);font-weight:600}.tcard p{margin:0;color:var(--ink2);font-size:.98rem}.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;counter-reset:s;padding:0;list-style:none}.steps li{counter-increment:s;background:var(--card);border-radius:var(--radius);padding:20px;border:1px solid var(--line)}.steps li:before{content:counter(s);display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:var(--ink);color:var(--mark);font:750 1.05rem var(--head);margin-bottom:10px}.band{background:var(--ink);color:#f6f2ea;border-radius:28px;padding:clamp(24px,5vw,48px)}.band h2{color:#fff}.band a{color:var(--mark)}.tool-head{padding:28px 0 8px}.crumbs{font-size:.9rem;color:var(--muted);margin-bottom:8px}.crumbs a{text-decoration:none}.tool-head p.lead{font-size:1.15rem;color:var(--ink2);max-width:60ch}.bench{background:var(--card);border:2px solid var(--ink);border-radius:22px;padding:clamp(14px,3vw,26px);box-shadow:8px 8px 0 var(--ink);min-height:280px}.drop{display:grid;place-items:center;text-align:center;gap:10px;padding:clamp(28px,7vw,64px) 16px;border:3px dashed var(--ink2);border-radius:18px;background:repeating-linear-gradient(45deg,transparent 0 14px,#ffd23f14 14px 28px);cursor:pointer;transition:background .15s,border-color .15s}.drop.over{background:var(--mark2);border-color:var(--ink)}.drop strong{font:750 1.4rem var(--head)}.drop input{position:absolute;width:1px;height:1px;opacity:0}.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.row.between{justify-content:space-between}.stack{display:grid;gap:14px}select,input[type=text],input[type=number],textarea{font:inherit;border:2px solid var(--ink);background:#fff;border-radius:10px;padding:8px 10px;color:var(--ink)}textarea{width:100%;min-height:320px;font:.95rem/1.5 var(--mono);resize:vertical}label.f{display:inline-flex;gap:8px;align-items:center;font-weight:600}.prog{height:14px;border-radius:99px;background:var(--paper2);border:2px solid var(--ink);overflow:hidden}.prog>i{display:block;height:100%;width:0;background:repeating-linear-gradient(45deg,var(--mark) 0 10px,#f0b800 10px 20px);transition:width .2s;background-size:28px 28px;animation:slide 1s linear infinite}@keyframes slide{to{background-position:28px 0}}.status{font-weight:600;min-height:1.6em}.chips{display:flex;gap:8px;flex-wrap:wrap}.chip{background:var(--paper2);border-radius:99px;padding:3px 12px;font-size:.88rem;font-weight:700}.chip.ok{background:#178a5522;color:#0e5c38}.chip.bad{background:#c2381e22;color:#8f2410}.chip.mark{background:var(--mark2)}.tbl-wrap{overflow:auto;max-height:460px;border:2px solid var(--ink);border-radius:12px;background:#fff}table.grid{border-collapse:collapse;width:100%;font-size:.93rem}table.grid th,table.grid td{border:1px solid var(--line);padding:5px 9px;text-align:left;vertical-align:top}table.grid th{background:var(--paper2);position:sticky;top:0}td[contenteditable]:focus{outline:2px solid var(--ink);background:var(--mark2)}.ok{color:var(--ok)}.bad{color:var(--bad)}.ed{position:relative;display:inline-block;max-width:100%;user-select:none;border:2px solid var(--ink);border-radius:8px;overflow:hidden;background:#fff}.ed canvas{display:block;max-width:100%;height:auto}.ed .ln{position:absolute;background:#e5390d;opacity:.85}.ed .ln.v{width:2px;top:0;bottom:0;cursor:col-resize}.ed .ln.h{height:2px;left:0;right:0;cursor:row-resize}.ed .ln:after{content:"";position:absolute;inset:-9px}.ed .ln.v:after{inset:0 -9px}.ed .ln.h:after{inset:-9px 0}.ed .ln{touch-action:none}.ed .ln:hover,.ed .ln.on{background:#0a58ff;opacity:1}.ed .box{position:absolute;border:2px solid #0a58ff;background:#0a58ff14;pointer-events:none}.thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:14px}.thumb{background:var(--paper2);border:2px solid var(--ink);border-radius:12px;padding:8px;display:grid;gap:6px;justify-items:center;cursor:grab;position:relative}.thumb.drag{opacity:.35}.thumb.target{outline:3px dashed #0a58ff}.thumb canvas{max-height:150px;width:auto;background:#fff;box-shadow:0 2px 8px #0003;transition:transform .25s}.thumb .tb{display:flex;gap:4px}.thumb button{border:2px solid var(--ink);background:#fff;border-radius:8px;width:32px;height:32px;cursor:pointer;font:700 15px var(--body)}.thumb button:hover{background:var(--mark)}.thumb .n{position:absolute;top:4px;left:6px;font:700 .75rem var(--mono);background:var(--ink);color:#fff;border-radius:6px;padding:0 5px}.thumb.del canvas{opacity:.25}.thumb.del:after{content:"✕";position:absolute;top:40%;font-size:2rem;color:var(--bad)}.gal{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.gal figure{margin:0;background:#fff;border:2px solid var(--ink);border-radius:12px;padding:8px;display:grid;gap:6px}.gal img{width:100%;height:110px;object-fit:contain;background:repeating-conic-gradient(#eee 0 25%,#fff 0 50%) 0 0/16px 16px}.gal figcaption{font-size:.8rem;color:var(--muted)}.scan-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}.scan-grid>div{min-width:0}.quad{position:relative;display:inline-block;touch-action:none;border:2px solid var(--ink);border-radius:8px;overflow:hidden;max-width:100%}.quad canvas{display:block;max-width:100%;height:auto}.quad svg{position:absolute;inset:0;width:100%;height:100%}.quad .h{position:absolute;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:var(--mark);border:3px solid var(--ink);cursor:grab;touch-action:none}.curl{position:relative;aspect-ratio:3 / 4;background:radial-gradient(circle at 50% 30%,#fffdf8,var(--paper2));border:2px solid var(--ink);border-radius:12px;overflow:hidden}.curl canvas{position:absolute;inset:0;width:100%;height:100%}.net{margin-top:18px;border:2px solid var(--ink);border-radius:14px;padding:12px 16px;background:var(--paper);display:grid;gap:6px;font-size:.95rem}.net .lamp{display:inline-block;width:11px;height:11px;border-radius:50%;background:var(--muted);margin-right:8px}.net.zero .lamp{background:var(--ok);box-shadow:0 0 0 4px #178a5530}.net.some .lamp{background:var(--bad)}.net ul{margin:0;padding-left:18px;font:.82rem var(--mono);word-break:break-all}.prose{max-width:70ch}.prose h2{margin-top:1.6em}.prose li{margin:.35em 0}details.faq{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 16px;margin:8px 0}details.faq summary{font-weight:700;cursor:pointer}.two{display:grid;grid-template-columns:1fr 1fr;gap:24px}table.plain{border-collapse:collapse;width:100%;background:var(--card)}table.plain th,table.plain td{border:1px solid var(--line);padding:8px 12px;text-align:left;font-size:.95rem}.site-foot{margin-top:56px;border-top:1px solid var(--line);padding:36px 0 60px;background:var(--paper2)}.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:28px}.foot-grid h2{font-size:1rem}.foot-grid ul{list-style:none;padding:0;margin:0;display:grid;gap:6px}.consent{position:fixed;left:12px;right:12px;bottom:12px;max-width:560px;background:var(--ink);color:#fff;border-radius:16px;padding:14px 16px;display:flex;gap:14px;align-items:center;flex-wrap:wrap;z-index:50}.consent[hidden]{display:none}.consent p{margin:0;flex:1 1 240px;font-size:.95rem}.consent div{display:flex;gap:8px}.consent .btn{background:var(--mark);color:var(--ink);border-color:var(--mark)}.consent .btn.ghost{background:transparent;color:#fff;border-color:#fff}@media(max-width:820px){.hero-grid,.two,.scan-grid,.foot-grid{grid-template-columns:1fr}.stage{max-height:380px;aspect-ratio:4 / 3}.nav>a:not(.lang){display:none}.menu-panel{right:-60px;width:min(290px,calc(100vw - 24px))}.bench{box-shadow:4px 4px 0 var(--ink)}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}.stage img.poster{transition:opacity .5s .2s}.stage img.poster.behind{opacity:0}
