@font-face{font-family:Bricolage Grotesque;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/bricolage-grotesque-vietnamese-700-normal-BLYPkJbo.woff2)format("woff2"),url(/assets/bricolage-grotesque-vietnamese-700-normal-CHrFuVHU.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:Bricolage Grotesque;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/bricolage-grotesque-latin-ext-700-normal-fBkt-7fi.woff2)format("woff2"),url(/assets/bricolage-grotesque-latin-ext-700-normal-BXpPFNFj.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:Bricolage Grotesque;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/bricolage-grotesque-latin-700-normal-gtcctNPv.woff2)format("woff2"),url(/assets/bricolage-grotesque-latin-700-normal-DvJDmrLu.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:Figtree;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/figtree-latin-ext-400-normal-CXAzuTZb.woff2)format("woff2"),url(/assets/figtree-latin-ext-400-normal-Gbh-3PTk.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:Figtree;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/figtree-latin-400-normal-g7Dtegnw.woff2)format("woff2"),url(/assets/figtree-latin-400-normal-BD4aNku5.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:Figtree;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/figtree-latin-ext-600-normal-DJlfifZj.woff2)format("woff2"),url(/assets/figtree-latin-ext-600-normal-CQqsimlV.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:Figtree;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/figtree-latin-600-normal-Cv_xCTDl.woff2)format("woff2"),url(/assets/figtree-latin-600-normal-BM_oTo4n.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{--bg:#f4f1ea;--surface:#fff;--surface-2:#f8f6f1;--text:#1d2b33;--muted:#5f6f77;--border:#ded8cc;--accent:#f2a541;--accent-strong:#d9861a;--accent-text:#1d2b33;--focus:#2f7fb8;--danger:#b33a2e;--warning-bg:#fff4dc;--warning-text:#7a4b00;--error-bg:#fde8e5;--logo-bg:#1f3b4d;--logo-bed:#f2a541;--logo-layer:#e8eef2;--logo-layer-2:#c9d6de;--logo-tip:#fff;--shadow:0 2px 12px #1d2b331f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#121b20;--surface:#1a262d;--surface-2:#213139;--text:#e7edf0;--muted:#9aaab2;--border:#2f424c;--accent:#f2a541;--accent-strong:#f7bb68;--accent-text:#1d2b33;--focus:#6bb3e6;--danger:#ff8a7a;--warning-bg:#3a3020;--warning-text:#f7cf8a;--error-bg:#3d2523;--logo-bg:#f2a541;--logo-bed:#1a262d;--logo-layer:#1a262d;--logo-layer-2:#33474f;--logo-tip:#fff;--shadow:0 2px 12px #0006;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:15px/1.45 Figtree,system-ui,-apple-system,Segoe UI,sans-serif}button,input{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.app{flex-direction:column;height:100%;display:flex}.topbar{background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:10px 16px;display:flex}.brand{align-items:center;gap:10px;display:flex}.brand h1{letter-spacing:-.01em;margin:0;font-family:Bricolage Grotesque,Figtree,system-ui,sans-serif;font-size:1.35rem}.panel-section h2,.about h2,.result-title{font-family:Bricolage Grotesque,Figtree,system-ui,sans-serif}.topbar-actions{align-items:center;gap:8px;display:flex}.text-button{border:1px solid var(--border);background:var(--surface-2);cursor:pointer;border-radius:999px;padding:7px 12px;font-weight:600}.credits{color:var(--muted);margin-top:24px;font-size:.78rem;line-height:1.5}.credits a,.credits .link-button{color:var(--muted);font-size:inherit}.about{border:1px solid var(--border);background:var(--surface);width:min(640px,100vw - 32px);max-height:calc(100vh - 48px);color:var(--text);box-shadow:var(--shadow);border-radius:16px;padding:20px 24px 24px}.about::backdrop{background:#121b2073}.about-head{justify-content:space-between;align-items:center;display:flex}.about h2{margin:0}.about h3{margin:18px 0 6px;font-size:1rem}.about ul{margin:0;padding-left:20px}.about li{margin:4px 0}.about a{color:var(--focus)}.tagline{color:var(--muted);margin:0;font-size:.85rem}.logo{flex:none;width:36px;height:36px}.icon-button{border:1px solid var(--border);background:var(--surface-2);cursor:pointer;border-radius:50%;width:36px;height:36px}.workspace{flex:1;grid-template-columns:1fr minmax(300px,380px);min-height:0;display:grid}.map-pane{min-width:0;position:relative}.map{position:absolute;inset:0}.panel{background:var(--surface);border-left:1px solid var(--border);padding:4px 18px 24px;overflow-y:auto}@media (width<=820px){.workspace{grid-template-rows:minmax(320px,58vh) auto;grid-template-columns:1fr}.panel{border-left:0;border-top:1px solid var(--border)}}.panel-section h2{margin:16px 0 4px;font-size:1rem}.muted{color:var(--muted);margin:0 0 12px}.hint{color:var(--muted);margin:12px 0 0;font-size:.85rem}.field-row{grid-template-columns:1fr 1fr;gap:10px;display:grid}.field{min-width:0;color:var(--muted);flex-direction:column;gap:4px;font-size:.85rem;display:flex}.field input{border:1px solid var(--border);background:var(--surface-2);font-variant-numeric:tabular-nums;border-radius:8px;width:100%;padding:8px 10px;font-size:1rem}.field input[aria-invalid=true]{border-color:var(--danger)}.button-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-top:12px;display:flex}.button-row button{border:1px solid var(--border);background:var(--surface-2);cursor:pointer;border-radius:8px;padding:7px 12px}.button-row button:disabled{opacity:.5;cursor:default}.toggle{cursor:pointer;align-items:center;gap:6px;display:flex}.input-unit{display:block;position:relative}.input-unit input{padding-right:40px}.unit{color:var(--muted);pointer-events:none;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.slider-row{grid-template-columns:1fr 120px;align-items:end;gap:12px;display:grid}.slider-row input[type=range]{width:100%;accent-color:var(--accent-strong);margin-bottom:12px}.readout{font-variant-numeric:tabular-nums;margin:10px 0 0;font-size:.88rem}.toggle.small{color:var(--muted);margin-top:10px;font-size:.85rem}.note{border-radius:8px;margin:10px 0 0;padding:8px 10px;font-size:.85rem}.note.warning{background:var(--warning-bg);color:var(--warning-text)}.note.error{background:var(--error-bg);color:var(--danger)}.primary{background:var(--accent);width:100%;color:var(--accent-text);cursor:pointer;border:0;border-radius:10px;padding:12px;font-size:1.05rem;font-weight:700}.primary:hover:not(:disabled){background:var(--accent-strong)}.primary:disabled{opacity:.45;cursor:not-allowed}.secondary{border:1px solid var(--border);background:var(--surface-2);cursor:pointer;border-radius:8px;padding:7px 14px}.link-button{color:var(--focus);cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.progress-block{justify-items:start;gap:8px;display:grid}.progress-label{font-variant-numeric:tabular-nums;justify-content:space-between;width:100%;font-size:.9rem;display:flex}progress{width:100%;height:10px;accent-color:var(--accent-strong)}.result{background:var(--surface-2);border-radius:10px;margin-top:14px;padding:12px 14px;font-size:.9rem}.result p,.result ul{margin:0 0 8px}.result ul{color:var(--muted);padding-left:18px}.result-title{font-size:1.05rem;font-weight:700}.search{z-index:2;width:min(360px,100% - 70px);position:absolute;top:12px;left:12px}.search form{background:var(--surface);box-shadow:var(--shadow);border-radius:10px;display:flex;overflow:hidden}.search input{background:0 0;border:0;flex:1;min-width:0;padding:10px 12px}.search input:focus-visible{outline:none}.search form:focus-within{outline:2px solid var(--focus)}.search form button{background:var(--accent);color:var(--accent-text);cursor:pointer;border:0;padding:0 16px;font-weight:600}.search form button:disabled{opacity:.6;cursor:default}.search-results{background:var(--surface);box-shadow:var(--shadow);border-radius:10px;max-height:50vh;margin:6px 0 0;padding:4px;list-style:none;overflow-y:auto}.search-results button{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;flex-direction:column;width:100%;padding:8px 10px;display:flex}.search-results button:hover,.search-results button:focus-visible{background:var(--surface-2)}.search-results span{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;overflow:hidden}.search-note{background:var(--surface);box-shadow:var(--shadow);border-radius:10px;margin:6px 0 0;padding:8px 12px;font-size:.9rem}.search-note.error{color:var(--danger)}.corner-handle{border:3px solid var(--accent);touch-action:none;background:#fff;border-radius:50%;width:18px;height:18px;box-shadow:0 1px 4px #00000059}@media (pointer:coarse){.corner-handle{width:28px;height:28px}}.side-label{background:var(--surface);color:var(--text);font-variant-numeric:tabular-nums;box-shadow:var(--shadow);pointer-events:none;white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:.8rem;font-weight:600}.maplibregl-ctrl.maplibregl-ctrl-attrib{background:color-mix(in srgb, var(--surface) 85%, transparent);color:var(--muted)}.maplibregl-ctrl-attrib a{color:var(--text)}.map-pane{flex-direction:column;display:flex}.tabs{background:var(--surface);border-bottom:1px solid var(--border);gap:4px;padding:6px 8px 0;display:flex}.tabs button{color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-bottom:0;border-radius:8px 8px 0 0;padding:7px 14px;font-weight:600}.tabs button[aria-selected=true]{background:var(--bg);border-color:var(--border);color:var(--text);margin-bottom:-1px}.tabs button:disabled{opacity:.5;cursor:default}.tab-panel{flex:1;min-height:0;position:relative}.tab-panel[hidden]{display:none}.preview{position:absolute;inset:0}.preview canvas{touch-action:none;display:block}.preview-overlay{pointer-events:none;justify-content:space-between;align-items:center;gap:8px;display:flex;position:absolute;top:12px;left:12px;right:12px}.preview-dims,.preview-buttons button,.preview-colour{pointer-events:auto;background:var(--surface);box-shadow:var(--shadow);font-variant-numeric:tabular-nums;border-radius:8px;padding:5px 10px;font-size:.85rem}.preview-buttons{gap:6px;display:flex}.preview-buttons button{cursor:pointer;border:0}.preview-colour{position:absolute;bottom:36px;left:12px}.preview-hint{text-align:center;color:var(--muted);pointer-events:none;margin:0;font-size:.8rem;position:absolute;bottom:8px;left:0;right:0}.preview-fallback{color:var(--muted);padding:24px}.build{border-top:1px solid var(--border);margin-top:20px;padding-top:16px}.secondary.wide{width:100%;padding:10px}.result.stale{opacity:.9}.result .primary{margin-top:4px}.file-name{color:var(--muted);word-break:break-all;margin:8px 0 0;font-size:.8rem}.readout+.field-row,.rebuild{margin-top:12px}.indent{margin-left:24px}.field-row.indent{margin-top:8px}.toggle.spaced{margin-top:14px}.segmented{border:1px solid var(--border);border-radius:10px;margin-bottom:4px;display:inline-flex;overflow:hidden}.segmented button{background:var(--surface-2);color:var(--muted);cursor:pointer;border:0;padding:7px 14px;font-weight:600}.segmented button+button{border-left:1px solid var(--border)}.segmented button[aria-checked=true]{background:var(--accent);color:var(--accent-text)}.segmented+.field-row{margin-top:10px}.format{border:0;gap:4px;margin:0 0 12px;padding:0;display:grid}.format legend{margin-bottom:4px;padding:0;font-weight:700}.format label{cursor:pointer;align-items:baseline;gap:6px;display:flex}.muted-inline{color:var(--muted);font-size:.85rem}
