:root{--bg: #f6f5f1;--card: #ffffff;--ink: #1f2428;--ink-2: #4b545b;--dim: #6b747b;--line: #dcd9d1;--line-2: #ebe8e1;--accent: #2c5d63;--accent-ink: #ffffff;--accent-soft: #e3eeee;--warn: #9a5b00;--shadow: 0 1px 2px rgba(20, 24, 28, .08), 0 6px 24px rgba(20, 24, 28, .12);--radius: 10px;--font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font:14px/1.45 var(--font);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}[hidden]{display:none!important}.dim{color:var(--dim)}a{color:var(--accent)}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}body[data-tab]{display:flex;flex-direction:column;height:100dvh;overflow:hidden}.top{display:flex;align-items:center;gap:16px;padding:10px 16px;padding-top:max(10px,env(safe-area-inset-top));background:var(--card);border-bottom:1px solid var(--line);z-index:20}.title{min-width:0;flex:1 1 auto}.title h1{margin:0;font-size:17px;font-weight:650;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.title p{margin:1px 0 0;color:var(--dim);font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabs{display:flex;gap:2px;padding:3px;background:var(--bg);border:1px solid var(--line);border-radius:9px;flex:0 0 auto}.tabs [role=tab]{border:0;background:transparent;padding:6px 14px;border-radius:6px;cursor:pointer;color:var(--ink-2);font-weight:550;white-space:nowrap}.tabs [role=tab]:hover{color:var(--ink)}.tabs [role=tab][aria-selected=true]{background:var(--card);color:var(--ink);box-shadow:0 1px 2px #14181c1f}.tabs .count:not(:empty){display:inline-block;min-width:18px;padding:0 5px;margin-left:2px;border-radius:9px;background:var(--line-2);color:var(--ink-2);font-size:11px;line-height:18px;text-align:center}.about-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--card);border-radius:8px;padding:6px 10px;cursor:pointer;color:var(--ink-2);flex:0 0 auto}.about-btn:hover{border-color:var(--accent);color:var(--accent)}.about-btn .i{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:50%;border:1.5px solid currentColor;font:600 11px/1 Georgia,serif;font-style:italic}main{position:relative;flex:1 1 auto;min-height:0}.stage,.canvas{position:absolute;top:0;right:0;bottom:0;left:0}.sheet{position:absolute;top:12px;left:12px;width:300px;max-height:calc(100% - 24px);display:flex;flex-direction:column;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);z-index:10}.sheet-handle{display:flex;align-items:center;gap:8px;width:100%;border:0;background:transparent;padding:10px 14px;font-weight:650;font-size:13px;text-align:left;cursor:pointer;border-bottom:1px solid var(--line-2)}.sheet-handle:after{content:"";margin-left:auto;width:8px;height:8px;border-right:2px solid var(--dim);border-bottom:2px solid var(--dim);transform:rotate(45deg) translate(-2px,-2px);transition:transform .15s}.sheet.collapsed .sheet-handle{border-bottom:0}.sheet.collapsed .sheet-handle:after{transform:rotate(-135deg) translate(-2px,-2px)}.sheet .grip{display:none}.sheet-body{overflow-y:auto;padding:10px 14px 14px;overscroll-behavior:contain}.sheet.collapsed .sheet-body{display:none}.sheet h3{margin:12px 0 4px;font-size:11px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;color:var(--dim)}.sheet h3:first-child{margin-top:0}.row{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin:4px 0}.row .lbl{min-width:82px;color:var(--ink-2)}input[type=range]{flex:1;min-width:80px;accent-color:var(--accent)}input[type=checkbox]{accent-color:var(--accent);width:16px;height:16px;margin:0}.chk{display:flex;gap:8px;align-items:center;cursor:pointer}.val{min-width:46px;text-align:right;color:var(--dim);font-variant-numeric:tabular-nums;font-size:12px}.btn{background:var(--card);border:1px solid var(--line);border-radius:6px;padding:5px 10px;cursor:pointer;color:var(--ink)}.btn.sm{padding:3px 8px;font-size:13px}.btn:hover{border-color:#b9b5aa}.btn.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.seg .btn{flex:1}.icon{border:0;background:transparent;cursor:pointer;color:var(--dim);font-size:16px;line-height:1;padding:4px 6px;border-radius:4px}.icon:hover{color:var(--ink);background:var(--line-2)}.layer{padding:8px 0;border-bottom:1px solid var(--line-2)}.layer:first-child{padding-top:2px}.layer .chk{font-weight:550}.opacity{display:flex;align-items:center;gap:8px;margin:6px 0 0 24px;font-size:12px}.legend{margin:6px 0 0 24px;font-size:12px;color:var(--ink-2)}.lg{display:flex;gap:8px;align-items:flex-start;margin:3px 0}.sw{flex:0 0 26px;height:12px;margin-top:2px;border-radius:2px;background:#5b6168;position:relative}.sw-major:after,.sw-minor:after,.sw-dash:after,.sw-limit:after{content:"";position:absolute;left:3px;right:3px;top:50%}.sw-major:after{border-top:2.5px solid #ffb52e;margin-top:-1px}.sw-minor:after{border-top:1px solid #f6dc9b}.sw-dash:after{border-top:1.5px dashed #f6dc9b;opacity:.8}.sw-limit:after{border-top:2px dashed #fff;margin-top:-1px}.sw-hatch{background:repeating-linear-gradient(135deg,#e9a23b 0,#e9a23b 1.5px,#5b6168 1.5px,#5b6168 5px);outline:1px solid #e9a23b;outline-offset:-1px}.sheet-body>.row:last-child{margin-top:10px}.readout{position:absolute;left:12px;bottom:12px;z-index:5;padding:3px 8px;border-radius:6px;background:#ffffffe0;color:var(--ink-2);font:12px/1.4 var(--mono);font-variant-numeric:tabular-nums;pointer-events:none;white-space:nowrap}.readout:empty{display:none}#tab-map .readout{left:auto;right:12px;bottom:40px}.maplibregl-ctrl-scale{border-color:var(--ink-2);color:var(--ink);background:#ffffffd9}.hud{left:50%;bottom:30px;transform:translate(-50%)}#cross{position:absolute;top:50%;left:50%;width:14px;height:14px;margin:-7px 0 0 -7px;z-index:9;pointer-events:none;display:none}#cross:before,#cross:after{content:"";position:absolute;background:#ffffffd9;box-shadow:0 0 2px #0009}#cross:before{left:6px;top:0;width:2px;height:14px}#cross:after{top:6px;left:0;height:2px;width:14px}#views{margin:4px 0}.view{display:flex;gap:4px;align-items:center;margin:1px 0}.view .k{color:var(--dim);width:14px;font-size:12px}.view .name{flex:1;min-width:0;text-align:left;border:0;background:transparent;cursor:pointer;padding:3px 4px;border-radius:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.view .name:hover{color:var(--accent);background:var(--accent-soft)}#help{color:var(--ink-2);font-size:12px;line-height:1.8}kbd{background:var(--bg);border:1px solid var(--line);border-bottom-width:2px;border-radius:3px;padding:0 4px;color:var(--ink);font:11px var(--mono)}.status{color:var(--dim);font-size:12px;margin-top:8px}.status .bad{color:var(--warn)}.touch-help{display:none;font-size:12px}.pad{display:none}.cesium-viewer-bottom{font-size:11px}@media(hover:none){.keys{display:none}.touch-help{display:block}}@media(pointer:coarse){#tab-3d.free-nav .pad{position:absolute;right:14px;bottom:70px;z-index:11;display:grid;grid-template-columns:repeat(3,48px);grid-template-rows:repeat(2,48px);gap:6px;grid-template-areas:"up w down" "a s d"}.pad button{border:1px solid var(--line);border-radius:10px;background:#ffffffe6;font-size:16px;touch-action:none;user-select:none;-webkit-user-select:none}.pad [data-key=w]{grid-area:w}.pad [data-key=a]{grid-area:a}.pad [data-key=s]{grid-area:s}.pad [data-key=d]{grid-area:d}.pad [data-key=e]{grid-area:up}.pad [data-key=q]{grid-area:down}.pad .fly-only{visibility:hidden}#tab-3d.fly-nav .pad .fly-only{visibility:visible}}.page{position:absolute;top:0;right:0;bottom:0;left:0;overflow-y:auto}.page-inner{max-width:760px;margin:0 auto;padding:28px 16px 48px}.page h2{margin:0 0 4px;font-size:22px;letter-spacing:-.01em}.dl-list{list-style:none;margin:20px 0 0;padding:0;display:grid;gap:10px}.dl{display:flex;gap:14px;align-items:center;padding:14px 16px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);color:var(--ink);text-decoration:none}.dl:hover{border-color:var(--accent);box-shadow:var(--shadow)}.dl-ext{flex:0 0 48px;height:48px;display:grid;place-items:center;border-radius:8px;background:var(--accent-soft);color:var(--accent);font:650 11px var(--mono);letter-spacing:.04em}.dl-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.dl-label{font-weight:650}.dl-desc{color:var(--ink-2);font-size:13px}.dl-meta{color:var(--dim);font:12px var(--mono);overflow-wrap:anywhere}.dl-go{flex:0 0 auto;color:var(--accent);font-weight:600;font-size:13px}dialog{width:min(560px,calc(100vw - 32px));max-height:calc(100dvh - 48px);border:1px solid var(--line);border-radius:12px;padding:18px 20px 16px;color:var(--ink);background:var(--card);box-shadow:var(--shadow)}dialog::backdrop{background:#14181c59}.dialog-head{display:flex;align-items:center;justify-content:space-between;gap:12px}.dialog-head h2{margin:0;font-size:18px}#about-body .lead{font-size:15px}#about-body h3{margin:16px 0 4px;font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--dim)}#about-body ul{margin:4px 0;padding-left:20px}#about-body li{margin:4px 0}.fine{margin:16px 0 0;padding-top:12px;border-top:1px solid var(--line-2);color:var(--dim);font-size:12px}#toast{position:fixed;top:76px;left:50%;transform:translate(-50%);z-index:40;max-width:calc(100vw - 32px);background:var(--ink);color:#fff;border-radius:8px;padding:7px 14px;font-size:13px;opacity:0;transition:opacity .2s;pointer-events:none}#toast.show{opacity:1}@media(max-width:720px){.top{flex-wrap:wrap;gap:8px 10px;padding:8px 12px;padding-top:max(8px,env(safe-area-inset-top))}.title h1{font-size:16px}.title p{font-size:12px}.tabs{order:3;flex:1 1 100%}.tabs [role=tab]{flex:1;padding:7px 8px}.about-btn{padding:6px}.about-btn .about-text{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.sheet{top:auto;left:0;right:0;bottom:0;width:auto;max-height:62%;border-radius:14px 14px 0 0;border-bottom:0;padding-bottom:env(safe-area-inset-bottom)}.sheet-handle{flex-direction:column;gap:4px;padding:6px 14px 10px;text-align:center}.sheet-handle:after{display:none}.sheet .grip{display:block;width:36px;height:4px;border-radius:2px;background:var(--line)}.sheet-body{padding-bottom:18px}#tab-map .readout{right:10px;bottom:96px}.hud{bottom:auto;top:10px;font-size:11px}.maplibregl-ctrl-bottom-right,.maplibregl-ctrl-bottom-left{bottom:58px}.cesium-viewer-bottom{bottom:58px!important}@media(pointer:coarse){#tab-3d.free-nav .pad{bottom:80px}}#toast{top:112px}.dl{flex-wrap:wrap}.dl-go{display:none}}.landing{min-height:100dvh;display:flex;flex-direction:column}.landing header,.landing footer{max-width:980px;width:100%;margin:0 auto;padding:20px}.brand{display:inline-flex;align-items:center;gap:10px;font-weight:700;font-size:17px;letter-spacing:-.01em;color:var(--ink);text-decoration:none}.brand svg{width:26px;height:26px}.hero{flex:1;max-width:980px;width:100%;margin:0 auto;padding:24px 20px 40px;display:grid;grid-template-columns:1.1fr 1fr;gap:48px;align-items:center}.hero h1{font-size:clamp(30px,5vw,46px);line-height:1.08;letter-spacing:-.025em;margin:0 0 16px;font-weight:700}.hero p.lede{font-size:18px;color:var(--ink-2);margin:0 0 24px;max-width:34em}.features{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:1fr 1fr;gap:14px 22px}.features li{display:flex;flex-direction:column;gap:2px;padding-left:14px;border-left:2px solid var(--accent)}.features b{font-weight:650}.features span{color:var(--dim);font-size:13px}.plate{aspect-ratio:1 / 1;border-radius:14px;border:1px solid var(--line);background:var(--card);box-shadow:var(--shadow);overflow:hidden}.plate svg{display:block;width:100%;height:100%}.landing footer{color:var(--dim);font-size:13px;display:flex;flex-wrap:wrap;gap:8px 18px;justify-content:space-between;border-top:1px solid var(--line)}.landing footer a{color:var(--ink-2)}.notfound{flex:1;display:grid;place-items:center;padding:40px 20px;text-align:center}.notfound h1{font-size:26px;margin:0 0 8px}.notfound p{color:var(--ink-2);max-width:30em;margin:0 auto 8px}@media(max-width:760px){.hero{grid-template-columns:1fr;gap:28px;padding-top:8px}.features{grid-template-columns:1fr}.plate{aspect-ratio:4 / 3}}
