:root{--bg:#071016;--panel:rgba(8,19,25,.86);--line:rgba(186,219,218,.15);--text:#edf5f2;--muted:#91a7a8;--cyan:#47d7c8;--blue:#268ed6;--orange:#f4a94a;--violet:#b55bd8;--red:#e54f4f;--shadow:0 18px 60px rgba(0,0,0,.35)}
*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0;overflow:hidden}body{font-family:"Segoe UI",Inter,system-ui,sans-serif;background:var(--bg);color:var(--text)}button,input{font:inherit}button{color:inherit}#scene{position:absolute;inset:0;width:100%;height:100%;cursor:grab;background:radial-gradient(circle at 70% 28%,#17313a 0,#0a171e 38%,#050a0e 100%)}#scene:active{cursor:grabbing}.ambient-grid{position:absolute;inset:0;pointer-events:none;opacity:.12;background-image:linear-gradient(rgba(86,190,184,.12) 1px,transparent 1px),linear-gradient(90deg,rgba(86,190,184,.12) 1px,transparent 1px);background-size:48px 48px;mask-image:linear-gradient(to right,transparent 0,black 45%,black 100%)}.glass{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);backdrop-filter:blur(18px)}
.topbar{position:absolute;top:18px;left:18px;right:18px;height:66px;border-radius:16px;display:flex;align-items:center;padding:0 16px;z-index:5}.brand{display:flex;align-items:center;gap:12px;min-width:310px}.brand-mark,.loader-mark{width:38px;height:38px;border:1px solid var(--cyan);border-radius:10px;display:grid;place-items:center;font-weight:800;letter-spacing:-1px;color:var(--cyan);background:rgba(71,215,200,.08)}.brand strong{display:block;font-size:13px;letter-spacing:.16em}.brand small{display:block;color:var(--muted);font-size:9px;letter-spacing:.18em;margin-top:3px}.top-status{display:flex;gap:8px;margin:auto}.pill{border:1px solid var(--line);border-radius:999px;padding:6px 10px;font-size:9px;letter-spacing:.12em;color:var(--muted);background:rgba(255,255,255,.03)}.pill.live{color:#9cedbf}.pill.live i{display:inline-block;width:6px;height:6px;border-radius:50%;background:#50d28b;margin-right:6px;box-shadow:0 0 10px #50d28b}.pill.warning{color:#f5c66f}.view-actions{display:flex;gap:7px}.icon-btn{width:35px;height:35px;border-radius:10px;border:1px solid var(--line);background:#0b1a21;cursor:pointer}.icon-btn:hover,.icon-btn.active{border-color:var(--cyan);color:var(--cyan);background:rgba(71,215,200,.1)}
.sidebar{position:absolute;z-index:4;top:100px;left:18px;bottom:48px;width:330px;border-radius:18px;padding:19px 17px;overflow:auto;scrollbar-width:thin;scrollbar-color:#28424a transparent}.intro{padding:3px 5px 16px;border-bottom:1px solid var(--line)}.eyebrow{margin:0 0 9px;color:var(--cyan);font-size:8px;letter-spacing:.17em;font-weight:700}.intro h1{font-size:31px;line-height:.98;margin:0 0 12px;letter-spacing:-.045em;font-weight:650}.intro h1 em{font-style:normal;color:var(--cyan)}.intro>p:last-child,.drawer-lead{font-size:11px;line-height:1.55;color:var(--muted);margin:0}.layers{padding-top:15px}.section-title{display:flex;justify-content:space-between;margin:0 4px 10px}.section-title span{font-size:9px;letter-spacing:.16em;font-weight:700}.section-title small{font-size:9px;color:var(--cyan)}.layer-card{border:1px solid transparent;border-radius:10px;padding:8px 9px 7px;margin-bottom:4px;background:rgba(255,255,255,.018);transition:.2s}.layer-card:has(input:checked){background:rgba(71,215,200,.045);border-color:rgba(71,215,200,.18)}.layer-card.primary{border-color:rgba(71,215,200,.22)}.layer-card label{display:flex;align-items:center;gap:9px;cursor:pointer}.layer-card label>input{display:none}.layer-card label>span:nth-of-type(2){min-width:0;flex:1}.layer-card b{font-size:11px;font-weight:650}.layer-card small{display:block;font-size:8.5px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.swatch{width:9px;height:9px;border-radius:2px;box-shadow:0 0 12px currentColor}.swatch.point{background:#fff;color:#fff;border-radius:50%}.swatch.terrain{background:var(--cyan);color:var(--cyan)}.swatch.morph{background:var(--violet);color:var(--violet)}.swatch.mds{background:var(--orange);color:var(--orange)}.swatch.ortho{background:linear-gradient(135deg,#356b4c,#b58c4c)}.swatch.provenance{background:linear-gradient(135deg,var(--blue) 0 33%,var(--orange) 33% 66%,var(--violet) 66%)}.swatch.confidence{background:linear-gradient(135deg,var(--red),#58d7a9)}.swatch.history{background:#dccd99;color:#dccd99}.layer-card input[type=range]{width:100%;height:2px;display:block;margin:8px 0 1px;accent-color:var(--cyan);opacity:.65}.controls-block{border-top:1px solid var(--line);margin-top:13px;padding:14px 4px 4px}.control-row{display:flex;justify-content:space-between;font-size:10px}.control-row output{color:var(--cyan)}#exaggeration{width:100%;accent-color:var(--cyan)}.switch-row{margin-top:12px;display:flex;align-items:center;gap:9px;cursor:pointer}.switch-row input{display:none}.switch{width:30px;height:16px;border-radius:999px;background:#23343b;position:relative;flex:none}.switch:after{content:"";position:absolute;width:12px;height:12px;left:2px;top:2px;border-radius:50%;background:#82979a;transition:.2s}.switch-row input:checked+.switch{background:rgba(71,215,200,.3)}.switch-row input:checked+.switch:after{left:16px;background:var(--cyan)}.switch-row b{font-size:9.5px}.switch-row small{display:block;color:var(--muted);font-size:8px;margin-top:2px}.history-button{width:100%;border:1px solid rgba(220,205,153,.24);background:rgba(220,205,153,.06);border-radius:11px;padding:10px;display:flex;align-items:center;gap:10px;text-align:left;cursor:pointer;margin-top:12px}.history-button>span:first-child{font-size:23px;color:#dccd99}.history-button>span:nth-child(2){flex:1}.history-button b{font-size:9px;letter-spacing:.08em}.history-button small{display:block;font-size:8px;color:var(--muted);margin-top:2px}.history-button i{font-style:normal;color:#dccd99}.history-button:hover{border-color:#dccd99}.method-note{display:flex;gap:8px;margin-top:12px;padding:9px;border-radius:9px;background:rgba(181,91,216,.08);border:1px solid rgba(181,91,216,.16)}.method-note i{font-style:normal;color:var(--violet);font-weight:800}.method-note p{margin:0;font-size:8px;line-height:1.4;color:#b8a4c2}
.legend{position:absolute;z-index:3;right:20px;bottom:50px;border-radius:12px;padding:10px 13px;display:flex;gap:12px;align-items:center}.legend b{font-size:8px;letter-spacing:.14em;color:var(--muted);margin-right:2px}.legend span{font-size:8px;letter-spacing:.06em}.legend i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:5px}.observed{background:var(--blue)}.reconstructed{background:var(--orange)}.hypothetical{background:var(--violet)}.unsupported{background:#596369}.footer-hud{position:absolute;z-index:3;bottom:12px;left:366px;right:18px;height:28px;border-radius:9px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;font-family:Consolas,monospace;color:var(--muted);font-size:8px;letter-spacing:.05em}
.history-drawer{position:absolute;z-index:10;top:0;right:0;width:min(660px,92vw);height:100%;padding:28px;background:rgba(7,16,22,.97);border-left:1px solid var(--line);box-shadow:-30px 0 80px rgba(0,0,0,.5);transform:translateX(105%);transition:.35s ease;overflow:auto}.history-drawer.open{transform:none}.history-drawer header{display:flex;justify-content:space-between;align-items:flex-start}.history-drawer h2{margin:0;font-size:27px}.history-drawer header button,.lightbox button{border:1px solid var(--line);background:#0c1a20;color:#fff;width:36px;height:36px;border-radius:10px;font-size:20px;cursor:pointer}.drawer-lead{max-width:520px;margin:10px 0 20px}.history-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.history-item{border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#0c171c;cursor:pointer;transition:.2s}.history-item:hover{transform:translateY(-2px);border-color:#dccd99}.history-item img{width:100%;aspect-ratio:1.45;object-fit:cover;background:white}.history-item div{padding:10px}.history-item b{display:block;font-size:11px}.history-item small{font-size:8px;color:var(--muted)}.history-facts{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:20px}.history-facts div{padding:14px;border:1px solid var(--line);border-radius:12px}.history-facts b{font-size:24px;color:#dccd99}.history-facts span{display:block;font-size:9px;color:var(--muted);margin-top:3px}.lightbox{position:absolute;z-index:20;inset:0;background:rgba(0,0,0,.88);display:none;place-items:center;padding:30px}.lightbox.open{display:grid}.lightbox img{max-width:92vw;max-height:84vh;object-fit:contain;background:#fff;box-shadow:0 20px 80px #000}.lightbox button{position:absolute;top:22px;right:22px}.lightbox div{position:absolute;bottom:14px;font-size:10px;color:#ddd}.loading-screen{position:absolute;z-index:30;inset:0;background:#071016;display:grid;place-content:center;justify-items:center;gap:12px;transition:opacity .5s}.loading-screen.hide{opacity:0;pointer-events:none}.loading-screen .loader-mark{width:52px;height:52px}.loading-screen p{font-size:10px;letter-spacing:.16em}.loading-screen span{width:120px;height:2px;background:linear-gradient(90deg,transparent,var(--cyan),transparent);animation:scan 1.2s infinite}@keyframes scan{50%{transform:scaleX(.35)}}.toast{position:absolute;z-index:25;left:50%;bottom:58px;transform:translate(-50%,20px);opacity:0;padding:9px 14px;border-radius:9px;background:#102129;border:1px solid var(--line);font-size:9px;transition:.25s}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:820px){.top-status{display:none}.topbar{left:10px;right:10px;top:10px}.sidebar{left:10px;top:88px;bottom:48px;width:280px}.legend{display:none}.footer-hud{left:300px}.intro h1{font-size:26px}}@media(max-width:600px){.sidebar{width:calc(100% - 20px);height:43%;top:auto;bottom:10px}.topbar{height:58px}.brand{min-width:0}.brand small{display:none}.view-actions{margin-left:auto}.footer-hud{display:none}.history-grid{grid-template-columns:1fr}}

/* Fase 4.1 — modos, curvas e comparação */
.brand{min-width:272px}.mode-switch{display:flex;gap:4px;padding:4px;border-radius:11px;background:rgba(0,0,0,.18);border:1px solid rgba(186,219,218,.09)}.mode-button{height:34px;padding:0 10px;border:0;border-radius:8px;background:transparent;color:var(--muted);font-size:9px;cursor:pointer;white-space:nowrap;transition:background .25s,color .25s}.mode-button span{font-family:Consolas,monospace;color:#49636a;margin-right:5px}.mode-button:hover{color:var(--text)}.mode-button.active{background:rgba(71,215,200,.12);color:var(--cyan);box-shadow:inset 0 0 0 1px rgba(71,215,200,.2)}.mode-button.active span{color:var(--cyan)}.top-status{margin-left:auto;margin-right:10px;gap:6px}.pill{padding:6px 9px;font-size:8px}
.section-title.compact{margin:0 0 9px}.contour-options{display:grid;gap:5px;margin-bottom:9px}.contour-options label{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:9px;cursor:pointer}.contour-options input{accent-color:var(--cyan)}.interval-switch{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:7px 0 10px}.interval-switch button{height:26px;border:1px solid var(--line);border-radius:7px;background:#0b1a21;color:var(--muted);font-size:9px;cursor:pointer}.interval-switch button.active{color:var(--cyan);border-color:rgba(71,215,200,.45);background:rgba(71,215,200,.08)}#contourOpacity{width:100%;accent-color:var(--cyan)}
.swatch.continuous{background:linear-gradient(135deg,#1592a0,#d9ce4c,#d45b3d);color:#47d7c8}.swatch.provenance{background:linear-gradient(135deg,var(--blue) 0 25%,var(--orange) 25% 50%,var(--violet) 50% 75%,#e75b91 75%)}.conditioned{background:#e75b91}.surface-switch{display:grid;grid-template-columns:1fr 1fr;gap:4px}.surface-switch button{min-height:31px;padding:4px 6px;border:1px solid var(--line);border-radius:7px;background:#0b1a21;color:var(--muted);font-size:8.5px;line-height:1.15;cursor:pointer}.surface-switch button.active{color:var(--cyan);border-color:rgba(71,215,200,.45);background:rgba(71,215,200,.08)}
.compare-labels{position:absolute;z-index:3;left:366px;right:18px;top:98px;display:none;grid-template-columns:1fr 1fr;pointer-events:none}.compare-labels.show{display:grid}.compare-labels span{justify-self:center;padding:7px 11px;border-radius:999px;background:rgba(7,16,22,.76);border:1px solid var(--line);font-size:8px;letter-spacing:.13em}.compare-labels i{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--orange);margin-right:6px}.compare-labels span:last-child i{background:var(--cyan)}.mode-caption{position:absolute;z-index:3;left:366px;top:100px;padding:9px 12px;border-radius:10px;pointer-events:none;transition:opacity .25s}.mode-caption b{display:block;color:var(--cyan);font-size:9px;letter-spacing:.13em}.mode-caption span{display:block;margin-top:2px;color:var(--muted);font-size:8px}
@media(max-width:1180px){.brand{min-width:220px}.brand small{display:none}.mode-button{padding:0 7px}.top-status .pill.live{display:none}}@media(max-width:920px){.mode-switch{margin-left:auto}.footer-hud,.mode-caption,.compare-labels{left:300px}}@media(max-width:700px){.mode-button span{display:none}.mode-button{font-size:8px;padding:0 6px}.view-actions{display:none}}@media(max-width:600px){.brand div{display:none}.mode-switch{margin-left:auto}.mode-caption,.compare-labels{display:none!important}}

/* A aplicação usa fetch para malhas binárias; file:// pode exibir assets incompletos ou obsoletos. */
.file-protocol-warning{display:none;position:fixed;z-index:100;inset:0;padding:32px;background:#071016;color:var(--text);place-content:center;text-align:center;gap:12px}
.file-protocol-warning b{font-size:24px;color:#f5c66f}.file-protocol-warning span{max-width:680px;line-height:1.6;color:var(--muted)}.file-protocol-warning code{color:var(--cyan)}.file-protocol-warning a{color:var(--cyan)}
body.file-mode .file-protocol-warning{display:grid}body.file-mode #app{display:none}

/* Fase 6C — interface didática: painéis por modo e "Sobre os dados" recolhido */
.panel{display:none;border-top:1px solid var(--line);margin-top:14px;padding-top:14px}
body[data-mode=vegetation] .panel[data-for~=vegetation],body[data-mode=terrain] .panel[data-for~=terrain],
body[data-mode=compare] .panel[data-for~=compare],body[data-mode=map] .panel[data-for~=map]{display:block}
.intro{padding-bottom:12px}
.intro>p:last-child{font-size:10.5px}
.panel .surface-switch{margin-bottom:9px}
.surface-switch.three{grid-template-columns:1fr 1fr 1fr}
.layer-card label>input{display:none}
.note{margin:8px 4px 0;font-size:8.5px;line-height:1.4;color:#f5c66f}
.about{border-top:1px solid var(--line);margin-top:16px;padding-top:12px}
.about summary{cursor:pointer;font-size:9px;letter-spacing:.16em;font-weight:700;color:var(--muted);list-style:none}
.about summary::before{content:"＋ ";color:var(--cyan)}
.about[open] summary::before{content:"－ "}
.about ul{margin:10px 0 4px;padding-left:16px;font-size:9px;line-height:1.5;color:var(--muted)}
.about ul b{color:var(--text);font-weight:600}
.about .layer-card{margin-top:10px}
.about .contour-options{margin-top:12px}
.tech{margin:12px 4px 0;font-family:Consolas,monospace;font-size:8px;color:#5f777b}
.legend[hidden]{display:none}
.legend{flex-wrap:wrap;max-width:calc(100% - 400px)}
.compare-labels em{font-style:normal}
.mode-caption span{max-width:520px}
/* Fase 6D — cinco abas */
body[data-mode=lidar] .panel[data-for~=lidar]{display:block}
.mode-button{padding:0 9px}

/* Escala do modo Mapa 2D — calculada da projeção ortográfica */
.map-scale{position:fixed;right:24px;bottom:24px;z-index:12;padding:11px 14px;color:#eef5fb;pointer-events:none;font-size:12px;font-weight:700;letter-spacing:.02em;}
.map-scale[hidden]{display:none!important;}
#mapScaleBar{border-left:2px solid currentColor;border-right:2px solid currentColor;border-bottom:3px solid currentColor;height:9px;min-width:20px;max-width:220px;margin-top:4px;}
