:root{font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;color:#1e293b;background:#f8fafc;font-synthesis:none;--ink:#1e293b;--muted:#64748b;--line:#e2e8f0;--green:#2563eb;--accent:#d97706;--blue:#2563eb;--red:#b91c1c}*{box-sizing:border-box}body{margin:0;font-size:13px}button,input,select{font:inherit;color:inherit}button,select,input[type=number],input[type=search]{border:1px solid var(--line);background:#fff;border-radius:5px;min-height:32px;padding:6px 9px}button{cursor:pointer}button:hover{background:#f1f5f9;border-color:#94a3b8}button:disabled{opacity:.5;cursor:wait}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}input[type=checkbox]{accent-color:var(--green)}[hidden]{display:none!important}.topbar{height:72px;background:#ffffff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 27px}.brand{display:flex;align-items:center;gap:12px}.brand strong{font-size:24px;letter-spacing:-1px}.brand strong span{font-weight:400;font-size:13px;letter-spacing:0;color:var(--muted);margin-left:13px}.top-actions{display:flex;align-items:center;gap:9px}.local-tag{font-size:9px;letter-spacing:1.4px;color:var(--green);margin-right:13px}.local-tag:before{content:'●';font-size:8px;margin-right:7px}.workspace{display:grid;grid-template-columns:330px minmax(420px,1fr) 260px;gap:18px;padding:22px;max-width:1800px;margin:auto;align-items:start}.panel{background:#fff;border:1px solid var(--line);border-radius:9px;box-shadow:0 1px 2px #0f172a0a}.panel-heading{display:flex;align-items:center;justify-content:space-between;padding:21px 19px 15px}.eyebrow{font-size:9px;letter-spacing:1.5px;font-weight:650;color:#64748b}h1,h2,h3,p{margin:0}h1,h2{font-size:19px;letter-spacing:-.5px;font-weight:600;margin-top:8px}h3{font-size:15px;font-weight:600;margin-top:5px}.small-mark{font-size:32px;color:#94a3b8}.region-tabs{display:flex;margin:0 16px 18px;background:#f1f5f9;padding:3px;border-radius:6px}.region-tabs button{flex:1;border:0;background:transparent;min-height:32px;font-size:12px}.region-tabs .active{background:white;box-shadow:0 1px 3px #0f172a14;color:var(--green);font-weight:600}.material-tools{padding:0 19px 13px;border-bottom:1px solid var(--line)}.material-tools>label:first-child{display:flex;justify-content:space-between;font-weight:600;font-size:11px;margin-bottom:7px}.material-tools label span{font-size:8px;letter-spacing:1px;color:var(--muted)}#preset,#search{width:100%}#preset optgroup{font-weight:600;font-style:normal}#search{font-size:11px;background:#f8fafc;margin:12px 0 8px}.mixture-note{font-size:10px;color:var(--muted);line-height:1.5;margin-top:7px}.active-filter{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--muted)}.mineral-list{height:700px;overflow:auto;padding:0 17px 15px;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent}.category{margin-top:11px}.category summary{font-size:10px;text-transform:uppercase;letter-spacing:.8px;color:#64748b;cursor:pointer;padding:9px 0;border-bottom:1px solid #e2e8f0}.category summary .count{float:right;color:#94a3b8}.mineral-row{padding-top:12px}.mineral-label{display:flex;align-items:center;gap:6px;font-size:11px}.mineral-label i{width:7px;height:7px;border-radius:50%;border:1px solid #0002;flex-shrink:0}.mineral-label output{margin-left:auto;font-size:10px;color:#64748b;font-variant-numeric:tabular-nums}.mineral-row input{width:100%;height:16px;margin:6px 0 0;accent-color:var(--green);cursor:pointer}.properties{padding:16px 19px;background:#f8fafc;border-radius:0 0 9px 9px;border-top:1px solid var(--line)}.property-heading{font-size:11px;font-weight:600;display:flex;justify-content:space-between;gap:8px}.property-heading span{font-size:9px;color:var(--green);font-weight:400}.property-row{display:flex;justify-content:space-between;font-size:11px;padding-top:12px}.property-row b{font-weight:600;font-variant-numeric:tabular-nums}.properties p{font-size:9px;color:var(--muted);line-height:1.6;margin-top:13px}.middle{display:flex;flex-direction:column;gap:13px}.context{display:flex;justify-content:space-between;align-items:center;padding:0 2px 5px;min-height:58px}.context h2{font-size:21px;margin-top:6px}.badge{border-radius:4px;padding:5px 8px;background:#eff6ff;font-size:9px;color:#1d4ed8;white-space:nowrap}.badge.stale{background:#fffbeb;color:#b45309}.chart-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 19px 10px}.chart-heading label{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:10px}.chart-heading select{color:var(--ink);max-width:180px;font-size:11px;min-height:29px}.legend{padding:0 19px 3px;display:flex;gap:15px;color:var(--muted);font-size:9px;align-items:center}.legend>span:before{content:'';display:inline-block;width:15px;height:2px;background:#94a3b8;margin-right:6px;vertical-align:middle}.legend .legend-target:before{background:var(--green)}.legend .legend-fit:before{background:var(--accent)}.legend #profile-unit{margin-left:auto}.legend #profile-unit:before{display:none}.plot{height:158px;padding:0 10px}.plot svg{width:100%;height:100%;display:block}.empty{height:100%;min-height:110px;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;color:#64748b;gap:8px;font-size:12px;line-height:1.7;padding:14px}.empty span{font-size:23px;color:#94a3b8}.chart-note,.result-footer{font-size:9px;color:var(--muted);padding:6px 19px 12px;line-height:1.5;min-height:32px}.result-footer{display:flex;justify-content:space-between;gap:10px}#scale{white-space:nowrap;color:var(--green)}#earth{display:block;width:100%;height:215px;touch-action:none;user-select:none}.geometry{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;padding:0 19px}.geometry label{font-size:9px;color:var(--muted)}.geometry input{display:block;width:100%;margin-top:5px;min-height:28px;font-size:11px}.editor-help{font-size:9px;color:var(--muted);padding:12px 19px}.editor-help span{color:var(--accent);font-size:13px;margin-right:5px}.methods h2{font-size:17px}.aside-intro{font-size:11px;color:var(--muted);line-height:1.7;padding:0 19px 15px}.method-card{border-top:1px solid var(--line);padding:15px 17px}.method-title{display:flex;align-items:center;gap:9px}.method-icon{display:grid;place-items:center;border-radius:6px;width:30px;height:30px;background:#eff6ff;color:var(--green);font-size:21px}.method-icon.magnetic{background:#fffbeb;color:#b45309}.method-icon.electric{background:#f5f3ff;color:#6d28d9}.method-icon.seismic{background:#f0fdfa;color:#0f766e}.method-name{font-weight:600;font-size:12px;flex:1}.method-name small{display:block;font-size:9px;font-weight:400;color:var(--muted);margin-top:3px}.method-score{font-weight:600;font-size:18px;color:var(--green);letter-spacing:-.6px}.method-score small{font-size:10px}.score-track{height:3px;border-radius:2px;background:#e2e8f0;margin:12px 0}.score-fill{height:100%;background:#3b82f6;width:0;transition:width .3s}.method-controls{display:flex;justify-content:space-between;align-items:center;gap:5px;margin-top:7px;font-size:10px;color:var(--muted)}.method-controls input{width:65px;min-height:26px;padding:3px 6px;font-size:10px}.method-controls select{width:132px;min-height:26px;padding:3px;font-size:10px}.config-toggle{display:flex;align-items:center;gap:6px;width:100%;margin-top:9px;min-height:28px;padding:0 9px;font-size:10px;color:var(--muted);background:#f8fafc;letter-spacing:.3px}.config-toggle:hover{color:var(--ink)}.config-toggle .config-caret{margin-left:auto;font-size:13px;transition:transform .15s}.config-toggle.open{color:var(--blue);border-color:#bfdbfe;background:#eff6ff}.config-toggle.open .config-caret{transform:rotate(90deg)}.method-config{margin-top:4px}.method-error{font-size:9px;color:var(--red);line-height:1.5;margin-top:7px;overflow-wrap:anywhere}.score-help{font-size:10px;color:var(--muted);padding:12px 18px;border-top:1px solid var(--line)}.score-help summary{cursor:pointer}.score-help p{font-size:10px;line-height:1.7;margin-top:9px}.run-settings{background:#f8fafc;padding:12px 17px;border-top:1px solid var(--line)}.run-settings label{display:flex;justify-content:space-between;align-items:center;font-size:11px}.run-settings input{width:47px;min-height:26px;font-size:11px}.run-settings>span{display:block;color:var(--muted);font-size:9px;margin-top:7px}.run-box{padding:15px 17px}.run-button{background:var(--green);color:white;border:0;width:100%;height:44px;display:flex;align-items:center;gap:9px;padding:0 13px;font-size:13px;font-weight:650;letter-spacing:1px}.run-button:hover{background:#1d4ed8}.run-button small{font-size:8px;letter-spacing:.6px;margin-left:auto;font-weight:400;opacity:.75}#status{font-size:10px;color:var(--muted);line-height:1.6;margin:10px 0 0;overflow-wrap:anywhere}#cancel,#download{margin-top:8px;width:100%;font-size:10px}progress{width:100%;height:5px;accent-color:var(--green);margin-top:12px}footer{display:flex;align-items:center;gap:18px;padding:3px 25px 20px;color:#64748b;font-size:9px;letter-spacing:1px}footer span{letter-spacing:0}footer span:last-child{margin-left:auto;font-size:8px;letter-spacing:1px}#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);padding:15px 22px;max-width:80vw;background:#0f172a;color:#fff;box-shadow:0 4px 20px #0002;border-radius:7px;z-index:10;font-size:12px}@media(min-width:1500px){.workspace{grid-template-columns:360px minmax(440px,1fr) 285px}.mineral-list{height:790px}.plot{height:180px}#earth{height:230px}}@media(max-width:1120px){.workspace{grid-template-columns:290px minmax(390px,1fr);gap:14px;padding:15px}.methods{grid-column:1/-1}#methods{display:grid;grid-template-columns:repeat(3,1fr)}.method-card{padding:12px}.method-title{flex-wrap:wrap}.method-score{font-size:15px}.method-controls{flex-wrap:wrap}.context h2{font-size:18px}.methods .run-box{max-width:400px}.brand strong span{display:none}.mineral-list{height:810px}}@media(max-width:700px){.topbar{padding:0 14px;height:auto;min-height:65px;flex-wrap:wrap;gap:10px;padding-bottom:10px;padding-top:10px}.local-tag{display:none}.brand strong{font-size:21px}.workspace{display:flex;flex-direction:column;padding:12px}.workspace>*,.middle{width:100%}.mineral-list{height:360px}.middle{order:0}.minerals{order:1}.methods{order:2}#methods{grid-template-columns:1fr 1fr}.context{gap:8px}.context h2{font-size:17px}.chart-heading{padding:12px}.chart-heading label{gap:4px}.chart-heading select{max-width:145px}.legend{gap:8px;font-size:8px}.geometry{gap:6px;padding:0 12px}footer{flex-wrap:wrap;line-height:1.5}footer span:last-child{display:none}.run-box{max-width:none!important}}
.result-selects{display:flex;gap:6px}.result-selects select{max-width:145px}@media(max-width:1300px){.result-selects{flex-wrap:wrap;justify-content:flex-end;max-width:180px}.result-selects select{width:145px}}
/* Mineralis web: slate shell, blue actions and the catalogue's banded category table. */
.brand strong{font-family:Arial,Helvetica,sans-serif}.region-tabs .active{background:#eff6ff;color:#1d4ed8}
.mineral-list{padding:0 10px 12px;height:540px;scrollbar-color:#cbd5e1 #f1f5f9}
.category{margin:0}.category h4{margin:0;background:var(--category);color:#fff;font-size:11px;font-weight:600;padding:8px 10px;display:flex;justify-content:space-between;align-items:center}.category .count{font-weight:400;opacity:.9;font-size:10px}
.mineral-row{padding:8px 10px 5px;background:color-mix(in srgb,var(--category) 15%,white);border-bottom:1px solid white}.mineral-row.end-member{padding-left:22px;border-left:3px solid var(--category);background:color-mix(in srgb,var(--category) 7%,white)}
.mineral-label{color:#334155}.mineral-label output{color:#475569}.mineral-label i{border-radius:2px;width:9px;height:9px}
.mineral-row input[type=range]{appearance:none;background:transparent;height:18px;margin:5px 0 0}.mineral-row input[type=range]::-webkit-slider-runnable-track{height:4px;background:#cbd5e1;border-radius:2px}.mineral-row input[type=range]::-webkit-slider-thumb{appearance:none;height:16px;width:8px;border-radius:2px;background:#475569;margin-top:-6px}.mineral-row input[type=range]::-moz-range-track{height:4px;background:#cbd5e1;border-radius:2px}.mineral-row input[type=range]::-moz-range-thumb{height:16px;width:8px;border:0;border-radius:2px;background:#475569}
.method-help{font-size:10px;color:#64748b;line-height:1.5;margin-top:9px}.legend .legend-target:before{background:var(--response,#2563eb)}
@media(min-width:1121px){.workspace{grid-template-columns:360px minmax(420px,1fr) 280px}.minerals{position:sticky;top:12px}.mineral-list{height:calc(100vh - 230px);min-height:480px}}
@media(max-width:700px){.mineral-list{height:630px}.method-name{font-size:11px}}

/* Alteration and volatile sliders, and the assemblage they produce. */
.slider-row{display:block;margin-top:9px;font-size:10px;color:var(--muted)}
.slider-row span{display:flex;justify-content:space-between;gap:8px}
.slider-row b{font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.slider-row input[type=range]{appearance:none;background:transparent;width:100%;height:16px;margin:3px 0 0;cursor:pointer}
.slider-row input[type=range]::-webkit-slider-runnable-track{height:4px;background:#cbd5e1;border-radius:2px}
.slider-row input[type=range]::-webkit-slider-thumb{appearance:none;width:12px;height:12px;margin-top:-4px;border-radius:50%;background:var(--green);border:2px solid #fff;box-shadow:0 0 0 1px #94a3b8}
.slider-row input[type=range]::-moz-range-track{height:4px;background:#cbd5e1;border-radius:2px}
.slider-row input[type=range]::-moz-range-thumb{width:10px;height:10px;border-radius:50%;background:var(--green);border:2px solid #fff}
#assemblage{height:168px;overflow:auto;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:#cbd5e1 transparent;overflow-anchor:none}
.property-row.phase span{display:flex;align-items:center;gap:6px}
.property-row.phase i{width:9px;height:9px;border-radius:2px;border:1px solid #0002;flex-shrink:0}
.property-row.phase.secondary span{font-style:italic;color:var(--accent)}
.score-help .property-heading{margin-top:14px;padding-top:11px;border-top:1px solid var(--line)}

/* Copy one region's rock onto the other, a colour scheme, and the per-method data toggles. */
.region-copy{display:flex;gap:6px;margin:-10px 16px 16px}
.region-copy button{flex:1;min-height:26px;padding:4px 6px;font-size:10px;color:var(--muted)}
.region-copy button:hover{color:var(--ink)}
.palette-pick{display:flex;align-items:center;gap:6px;font-size:9px;letter-spacing:1px;color:var(--muted)}
.palette-pick select{min-height:28px;padding:3px 6px;font-size:11px;letter-spacing:0;max-width:150px}
.data-toggle{display:flex;background:#f1f5f9;padding:2px;border-radius:5px}
.data-toggle button{border:0;background:transparent;min-height:25px;padding:0 8px;font-size:10px;color:var(--muted)}
.data-toggle .active{background:#fff;color:var(--green);font-weight:600;box-shadow:0 1px 3px #0f172a14}

/* Several small charts side by side: MT per-station frequency soundings, and AEM with and without the target. */
.plot.panel-grid{height:auto;display:grid;grid-template-columns:repeat(var(--panel-columns,2),minmax(0,1fr));gap:4px 8px;padding:4px 10px 8px}
.plot.panel-grid figure{margin:0;min-width:0}
.plot.panel-grid figcaption{display:flex;justify-content:space-between;gap:4px;font-size:9px;font-weight:600;color:var(--ink);padding:3px 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.plot.panel-grid figcaption small{font-weight:400;color:var(--muted)}
.plot.panel-grid .panel-plot{height:122px}
.plot.panel-grid .panel-plot svg{width:100%;height:100%;display:block}
@media(max-width:700px){.plot.panel-grid{grid-template-columns:repeat(min(var(--panel-columns,2),2),minmax(0,1fr))}}

/* Survey noise. The relative terms are shown greyed rather than hidden when the data is clean, so
   the panel still says what would be added if it were switched on. */
.noise-box #noise{margin-top:4px}
.noise-box .method-controls.inert{opacity:.45}
.noise-box #noise-note{font-size:9px;line-height:1.6;margin-top:10px;color:var(--muted)}

/* The charts set their own height from their view box, so a section that carries a colour bar is
   not letterboxed into the height a line chart needed. */
.plot{height:auto;min-height:120px}
.plot svg{width:100%;height:auto}
.plot .empty{min-height:150px}
.plot.panel-grid .panel-plot{height:auto}
@media(min-width:1500px){.plot{height:auto}}

/* Per-method noise: a relative term and a floor, each in that method's own units. */
.noise-row{display:grid;grid-template-columns:1fr 44px 10px 56px 34px;align-items:center;gap:4px;margin-top:6px;font-size:10px;color:var(--muted)}
.noise-row input{width:100%;min-height:24px;padding:2px 4px;font-size:10px}
.noise-row i{font-style:normal;font-size:9px;color:#94a3b8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.noise-box #noise-levels{padding:10px 0 0;border-top:0}
.noise-box #noise-levels.inert{opacity:.45}
.noise-box #noise-levels summary{font-size:10px}
.material-tools .mineral-filter{display:flex;align-items:center;gap:7px;margin-top:11px;font-size:11px;font-weight:400;color:var(--muted);text-transform:none;letter-spacing:0;cursor:pointer}
.mineral-filter input{width:14px;height:14px;min-height:0;margin:0;padding:0;accent-color:var(--green)}

/* Hourly commodity valuation and indicative return on survey spend. */
.roi-panel .panel-heading h2,.deposit-panel .panel-heading h2{font-size:17px}
.economics-note{padding:0 18px 13px;font-size:10px;color:var(--muted);line-height:1.65;margin:0;overflow-wrap:anywhere}
.roi-ranking{padding:0 17px 10px}
.risk-help{font-size:9px}
.survey-risk{margin-top:9px;padding-top:8px;border-top:1px dashed var(--line)}
.risk-line{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:3px}
.risk-title{font-size:10px;font-weight:600}.risk-title>span{color:var(--accent);margin-right:3px}
.risk-badge{flex-shrink:0;font-size:9px;padding:4px 6px;border-radius:4px;background:#f1f5f9;color:var(--muted)}
.risk-badge[data-risk=high]{background:#fef2f2;color:var(--red)}.risk-badge[data-risk=moderate]{background:#fffbeb;color:#92400e}.risk-badge[data-risk=lower]{background:#f0fdf4;color:#166534}
.risk-track{height:3px;border-radius:3px;background:#f1f5f9;margin-top:5px;overflow:hidden}.risk-track span{display:block;height:100%;background:var(--muted)}
.risk-track [data-risk=high]{background:var(--red)}.risk-track [data-risk=moderate]{background:var(--accent)}.risk-track [data-risk=lower]{background:#16803c}
.roi-row{display:flex;align-items:flex-start;gap:8px;border-top:1px solid var(--line);padding:13px 0}
.roi-summary{display:flex;align-items:flex-start;gap:8px}.roi-summary>div{flex:1;min-width:0}
.roi-rank{display:grid;place-items:center;flex:0 0 22px;height:22px;border-radius:5px;background:#eff6ff;color:var(--blue);font-size:11px;font-weight:650}
.survey-character{display:block;width:78px;height:80px;flex:0 0 78px;overflow:visible}
.section-scales{display:flex;gap:7px;margin:0 17px 10px}.section-scales button{flex:1;padding:9px 6px;min-width:0;text-align:left}.section-scales strong{display:block;font-size:12px}.section-scales small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.section-scales [aria-pressed=true]{background:#eff6ff;border-color:var(--blue);color:var(--blue)}
@media(max-width:650px){.survey-character{width:54px;height:64px;flex-basis:54px}.roi-row{gap:5px}}
.roi-row>div{flex:1;min-width:0}.roi-row strong{font-size:11px}.roi-row small{display:block;color:var(--muted);font-size:9px;line-height:1.6;font-weight:400}
.roi-summary>b{text-align:right;color:var(--green);font-size:17px;font-variant-numeric:tabular-nums;white-space:nowrap}.roi-row.disabled{opacity:.5}
/* A ranking priced from a run that is no longer the model on screen: still worth reading, so it
   is tinted rather than dimmed, and only the ROI itself changes colour. */
.roi-row.stale .roi-summary>b,.roi-row.stale .roi-summary>b small{color:#b45309}
.survey-controls>summary{cursor:pointer;font-size:11px;padding:12px 18px;border-top:1px solid var(--line);color:var(--muted)}
#survey-cost-settings{max-height:320px;overflow:auto;padding-right:4px}
#survey-cost-settings input{width:85px}.deposit-total{padding:0 18px 13px}.deposit-total strong{display:block;font-size:28px;letter-spacing:-1px;color:var(--green);overflow-wrap:anywhere}
.deposit-total>span{display:block;color:var(--muted);font-size:10px;margin-top:5px}
.deposit-metrics{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:3px 18px 15px}.deposit-metrics span{display:block;font-size:9px;color:var(--muted)}.deposit-metrics b{display:block;margin-top:5px;font-size:11px;font-variant-numeric:tabular-nums}
.deposit-assumptions{padding:0 18px 14px}.deposit-assumptions input{width:82px}
.fallback-prices{margin:0 18px 14px;font-size:10px;color:var(--muted)}
.fallback-prices summary{cursor:pointer;padding:10px 0}
.fallback-prices p{line-height:1.6;padding-bottom:8px}
.fallback-prices input{width:130px}
.backup-price-label{display:block;font-size:8px;color:var(--accent)}
.deposit-table-wrap{overflow:auto;max-height:360px;margin:12px -7px 0}.deposit-table{width:100%;border-collapse:collapse;font-size:9px;font-variant-numeric:tabular-nums}
.deposit-table th,.deposit-table td{padding:7px 4px;text-align:right;border-bottom:1px solid var(--line)}.deposit-table th:first-child{text-align:left}.deposit-table th small{display:block;font-size:8px;font-weight:400;color:var(--muted)}
.market-actions{display:flex;gap:6px;padding:0 18px 12px}.market-actions button{font-size:10px;flex:1}
.deposit-panel .deposit-metrics{grid-template-columns:repeat(4,minmax(0,1fr))}
.deposit-panel .deposit-assumptions{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:700px){.deposit-total strong{font-size:30px}.deposit-panel .deposit-metrics{grid-template-columns:1fr 1fr}.deposit-panel .deposit-assumptions{grid-template-columns:1fr}}
/* Claude rock brief, above the background/target toggles. */
.rock-assistant{padding:0 19px 16px;border-bottom:1px solid var(--line)}
.rock-assistant>label{display:block;font-size:13px;font-weight:600;margin-bottom:9px}
.rock-assistant textarea{display:block;width:100%;resize:vertical;min-height:105px;border:1px solid var(--line);border-radius:6px;padding:10px;background:#f8fafc;color:var(--ink);font:inherit;font-size:11px;line-height:1.6}
.rock-assistant textarea:focus{outline:2px solid var(--green);outline-offset:2px}
.rock-assistant p{font-size:10px;line-height:1.6;color:var(--muted);margin:9px 0 0;overflow-wrap:anywhere;white-space:pre-wrap}
.rock-assistant #rock-summary{padding:10px;background:#eff6ff;border-radius:6px;color:var(--ink)}
.rock-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:12px}
.rock-actions button{font-size:11px}
#rock-submit{background:var(--green);color:white;border-color:var(--green)}
#rock-submit:disabled{opacity:.55;cursor:wait}
.rock-assistant #rock-status:empty{display:none}
#rock-qc{margin-top:12px;padding:10px;border:1px solid var(--line);border-radius:6px;color:var(--ink)}
#rock-qc summary{cursor:pointer;font-weight:600;font-size:12px}
#rock-qc pre{max-height:420px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font-size:11px;line-height:1.6;user-select:text}
.rock-upload{margin-top:13px;padding-top:12px;border-top:1px solid var(--line)}
.rock-upload>label{display:block;font-size:11px;font-weight:600;margin-bottom:8px}
.rock-upload>label span{font-weight:400;color:var(--muted)}
#rock-image-file{width:100%;min-width:0;font:inherit;font-size:10px;padding:5px 0}
#rock-image-preview{width:100%;max-height:190px;object-fit:contain;background:#fff;border:1px solid var(--line);border-radius:6px;margin-top:10px}
#rock-image-remove{margin-top:7px;font-size:10px}
.rock-assistant #rock-image-error{color:var(--red)}
#rock-interpretation{margin-top:10px;padding:10px;background:#f8fafc;border:1px solid var(--line);border-radius:6px}
#rock-interpretation h4{font-size:12px;margin:0 0 10px}
#rock-interpretation strong{display:block;font-size:10px;margin-top:9px}
#rock-interpretation p{margin-top:4px}

/* ── Mineralis branding ──
   Mineralis web is Tailwind slate surfaces with one blue action colour, and its product name is
   its logo, so the wordmark carries Arial rather than the body face. Same exact palette. */
.topbar{box-shadow:0 1px 2px #0f172a0a}
.brand strong{color:#0f172a;font-size:20px;font-weight:800;letter-spacing:-.6px}
.brand{display:flex;align-items:center;gap:10px}.brand-logo{width:36px;height:36px;object-fit:contain;flex:none}
html{scrollbar-gutter:stable}
/* A panel taller than the viewport must stay in document flow while results resize beside it. */
.workspace>.minerals{position:static}
.property-heading{min-height:26px;align-items:start}.property-heading span{max-width:55%;text-align:right}
.property-row b{white-space:nowrap}
#conduction-state,#polarization-state{min-height:24px}
button{color:#475569;border-color:#cbd5e1}
button:hover{background:#f1f5f9;border-color:#94a3b8}
input,select,textarea{border-color:#cbd5e1;color:#334155}
h1,h2,h3{color:#0f172a}
.region-tabs{background:#f1f5f9}
.properties,.run-settings,#search{background:#f8fafc}
.run-button,#rock-submit,#intro-open{background:#2563eb;border-color:#2563eb;color:#fff}
.run-button:hover,#rock-submit:hover,#intro-open:hover{background:#1d4ed8;border-color:#1d4ed8}
#toast{background:#0f172a;color:#f8fafc}

/* ── 00 / Target brief ──
   The app opens on the brief rather than the workbench: the short route to a model is a sentence
   and a picture, not sixty sliders. Nothing in the workspace measures the layout — every chart
   sizes itself from its own view box — so it is built while still hidden and simply revealed. */
.intro{display:grid;justify-items:center;align-content:center;max-width:1020px;margin:auto;padding:46px 26px 64px;min-height:calc(100vh - 150px)}
.intro .rock-assistant{width:100%;border-bottom:0;padding:26px 26px 22px}
.brief-head{max-width:68em}
.brief-head .eyebrow{display:block}
.brief-head h1{font-size:30px;line-height:1.2;letter-spacing:-1.1px;margin-top:11px}
.intro-lede{margin-top:14px;font-size:13px;line-height:1.75;color:#475569}
.brief-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,330px);gap:26px;align-items:stretch;margin-top:22px;padding-top:20px;border-top:1px solid var(--line)}
.brief-grid .rock-upload{margin-top:0;padding-top:0;border-top:0}
.brief-field{display:flex;flex-direction:column}
.intro .rock-assistant textarea{flex:1;min-height:210px;font-size:12px}
.brief-cast{display:flex;align-items:flex-end;gap:0;margin-right:auto}
.brief-cast .survey-character{width:52px;height:54px;flex-basis:52px}
#intro-skip{font-size:10px;color:#64748b}
#rock-submit{font-weight:600}
#intro-open{font-weight:600}
@media(max-width:900px){.brief-grid{grid-template-columns:1fr;gap:20px}.intro .rock-assistant textarea{min-height:150px}.brief-head h1{font-size:25px}}
@media(max-width:700px){.brief-cast .survey-character{width:38px;height:42px;flex-basis:38px}.intro{padding:20px 14px 34px}.intro .rock-assistant{padding:19px 17px 17px}.brief-head h1{font-size:22px}.intro-lede{font-size:12px}#intro-skip{margin-left:0}}

/* The top bar now carries the way back to the brief as well, so its actions are sized to stay on
   one row rather than wrapping under a fixed-height bar. */
.top-actions{gap:8px}
.workbench-actions{display:flex;align-items:center;gap:8px}
.top-actions button{font-size:11px;min-height:30px;padding:5px 9px;white-space:nowrap}
.palette-pick select{max-width:126px}
.local-tag{margin-right:7px}
/* A phone has no room for five actions on one row, and the bar already wraps there. */
@media(max-width:700px){.top-actions{flex-wrap:wrap;justify-content:flex-end}.palette-pick select{max-width:110px}}

/* The picture drop zone. The whole brief panel accepts a drop; this box is what lights up. */
.rock-upload .upload-title{display:block;font-size:11px;font-weight:600;margin-bottom:8px}
.rock-upload .upload-title span{font-weight:400;color:var(--muted)}
.dropzone{display:grid;justify-items:center;gap:4px;padding:18px 14px;border:1.5px dashed #cbd5e1;border-radius:8px;background:#f8fafc;cursor:pointer;text-align:center;transition:border-color .12s,background .12s}
.dropzone:hover{border-color:#94a3b8;background:#f1f5f9}
.dropzone.over{border-color:#2563eb;border-style:solid;background:#eff6ff}
.dropzone-mark{font-size:20px;color:#94a3b8;line-height:1}
.dropzone.over .dropzone-mark{color:#2563eb}
.dropzone strong{font-size:11px;color:#334155}
.dropzone-hint{font-size:10px;color:#64748b}
.dropzone-hint u{color:#2563eb;text-underline-offset:2px}
.dropzone:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}

/* One survey entry owns its value, risk assessment and acquisition controls. */
.workspace{grid-template-columns:minmax(240px,300px) minmax(360px,1fr) minmax(360px,420px)}
.workspace>*{min-width:0}
.survey-section-title{padding:0 19px 8px;font-size:12px;color:var(--muted)}
.roi-panel .roi-ranking{padding:0}
#methods{display:flex;flex-direction:column}
.roi-panel .method-card{padding:16px 18px;min-width:0}
.method-value .roi-row{border-top:0;padding:0 0 12px}
.method-title{justify-content:space-between;gap:12px}
.method-title>small{font-size:9px;color:var(--muted);text-align:right}
.method-enable{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap}
.method-enable input{margin:0;width:14px;height:14px}
.roi-panel .method-controls{flex-wrap:nowrap}
.roi-panel .method-controls>span:first-child{min-width:0}
.roi-panel .method-controls input,.roi-panel .method-controls select{flex-shrink:0}
.roi-panel .score-track{margin:8px 0}
.roi-panel .run-settings label{gap:12px;margin-bottom:8px}
.roi-panel .run-settings select{max-width:58%}
@media(min-width:1500px){.workspace{grid-template-columns:330px minmax(440px,1fr) 450px}}
@media(max-width:1120px){
  .workspace{grid-template-columns:290px minmax(390px,1fr)}
  .roi-panel.methods{grid-column:1/-1}
  #methods{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:700px){
  .workspace{display:flex}
  #methods{display:flex}
  .roi-panel .method-card{padding:15px}
}

/* Keep execution and its overall status in view, including on short and narrow screens. */
body:has(.workspace:not([hidden])){padding-bottom:var(--run-dock-height,104px)}
html{scroll-padding-bottom:calc(var(--run-dock-height,104px) + 16px)}
.run-dock{position:fixed;inset:auto 0 0;z-index:30;padding:14px 22px calc(14px + env(safe-area-inset-bottom));background:#fff;border-top:1px solid var(--line);box-shadow:0 -4px 18px #0f172a0d}
.run-dock-inner{display:grid;grid-template-columns:minmax(190px,230px) minmax(0,1fr) auto;align-items:center;gap:18px;max-width:1756px;margin:auto}
.run-dock .run-button{min-width:0}
.run-overview{min-width:0}
.run-overview .eyebrow{font-size:8px}
.run-dock #status{margin:4px 0 0;font-size:11px}
.run-dock progress{display:block;margin:7px 0 0}
.run-secondary{display:flex;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.run-dock #cancel,.run-dock #download{width:auto;margin:0;min-height:34px}
#toast{bottom:calc(var(--run-dock-height,104px) + 16px);z-index:40}
@media(max-width:700px){
  .run-dock{padding:10px 12px calc(10px + env(safe-area-inset-bottom))}
  .run-dock-inner{display:flex;flex-wrap:wrap;gap:8px 12px}
  .run-dock .run-button{flex:0 1 210px;width:auto}
  .run-secondary{flex:1;min-width:0}
  .run-overview{order:1;flex:0 0 100%}
  .run-dock #status{font-size:10px}
}

/* ── The painted Earth ──
   A lithology is a region like the background and the target are, so the slot list stands exactly
   where the two region tabs do and the sliders below it never know the difference. */
.lithology-list{padding:0 16px 16px;display:grid;gap:5px}
.lith-row{display:flex;align-items:center;gap:7px;padding:5px 6px;border:1px solid transparent;border-radius:6px;cursor:pointer}
.lith-row:hover{background:#f8fafc}
.lith-row.active{background:#eff6ff;border-color:#bfdbfe}
.lith-colour{width:22px;height:22px;min-height:0;padding:0;border:1px solid #cbd5e1;border-radius:4px;background:none;cursor:pointer;flex:0 0 22px}
.lith-colour::-webkit-color-swatch-wrapper{padding:2px}
.lith-colour::-webkit-color-swatch{border:0;border-radius:2px}
.lith-name{flex:1;min-width:0;min-height:26px;padding:3px 6px;font-size:11px;border:1px solid transparent;background:none}
.lith-row.active .lith-name{font-weight:600;color:#0f172a}
.lith-name:hover,.lith-name:focus{border-color:#cbd5e1;background:#fff}
.lith-share{font-size:9px;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:34px;text-align:right}
/* Which units are the deposit: what the survey without the target leaves out, and what is valued. */
.lith-target{display:flex;align-items:center;gap:3px;flex:0 0 auto;font-size:9px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);cursor:pointer;white-space:nowrap}
.lith-target input{width:13px;height:13px;min-height:0;margin:0;padding:0;flex:0 0 13px;accent-color:#b45309;cursor:pointer}
.lith-target.host{cursor:default;opacity:.55}
.lith-row.deposit .lith-target{color:#b45309;font-weight:700}
.lith-remove{min-height:22px;padding:0 6px;font-size:12px;line-height:1;color:var(--muted);flex:0 0 auto}
.lith-add{width:100%;min-height:28px;font-size:10px;color:var(--muted);margin-top:3px}

.painter{padding:0 17px 4px}
.paint-tools{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding-bottom:10px}
.paint-toolset{display:flex;background:#f1f5f9;padding:2px;border-radius:6px;gap:2px}
.paint-toolset button{border:0;background:transparent;min-height:27px;padding:0 8px;font-size:10px;color:var(--muted);white-space:nowrap}
.paint-toolset button[aria-pressed=true]{background:#fff;color:var(--green);font-weight:600;box-shadow:0 1px 3px #0f172a14}
.paint-brush{display:flex;align-items:center;gap:7px;font-size:10px;color:var(--muted)}
.paint-brush.inert{opacity:.4}
.paint-brush input{width:84px;min-height:0;padding:0;border:0;background:none;accent-color:var(--green);cursor:pointer}
.paint-brush output{font-variant-numeric:tabular-nums;width:14px}
.paint-history{display:flex;gap:5px;margin-left:auto}
.paint-history button{min-height:27px;padding:0 8px;font-size:10px}
.paint-view-tools{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding-bottom:9px;font-size:10px;color:var(--muted)}
.paint-view-tools button{min-height:27px;padding:0 8px;font-size:11px}
.paint-view-tools output{min-width:34px;text-align:center;font-variant-numeric:tabular-nums;color:var(--ink)}
.paint-view-hint{margin-left:auto;font-size:9px}
.paint-pan{display:flex;align-items:center;gap:9px;padding-bottom:9px;font-size:10px;color:var(--muted)}
.paint-pan input{flex:1;min-width:0;min-height:0;padding:0;border:0;accent-color:var(--green);cursor:pointer}
/* The grid is 192 × 48, so a 4:1 box makes every painted cell square under the brush; the axes
   carry the real metres, which the grid itself has none of — it is held in section fractions. */
.paint-stage{display:grid;grid-template-columns:40px minmax(0,1fr);grid-template-rows:auto 16px;gap:4px 6px}
#paint-canvas{grid-column:2;grid-row:1;width:100%;aspect-ratio:4/1;display:block;border:1px solid var(--line);border-radius:4px;background:#f1f5f9;touch-action:none;cursor:crosshair}
#paint-canvas:focus-visible{outline:2px solid #3b82f6;outline-offset:2px}
.paint-depth{grid-column:1;grid-row:1;display:flex;flex-direction:column;justify-content:space-between;align-items:flex-end;font-size:8px;color:var(--muted);font-variant-numeric:tabular-nums;padding:1px 0}
.paint-distance{grid-column:2;grid-row:2;display:flex;justify-content:space-between;font-size:8px;color:var(--muted);font-variant-numeric:tabular-nums}
.paint-legend{font-size:9px;color:var(--muted);line-height:1.6;padding:9px 1px 0;overflow-wrap:anywhere}
.earth-panel .result-selects{align-items:center;gap:9px}
.earth-panel .result-selects label{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:10px}
#earth-mode{font-size:11px;min-height:28px;max-width:170px;color:var(--ink)}
@media(max-width:700px){.paint-toolset button{padding:0 6px;font-size:9px}.paint-history{margin-left:0}.paint-stage{grid-template-columns:30px minmax(0,1fr)}}

/* Where gravity and magnetics evaluate their prism kernels. A survey-design control rather than
   a geological one, so it sits with the iteration cap and not with the rocks. */
.run-settings label+label{margin-top:9px}
.run-settings select{max-width:142px;min-height:26px;padding:3px 6px;font-size:11px}
#compute-note{line-height:1.6}
#compute-note.warn{color:#b45309}
.spectral-chart{display:block;width:100%;height:145px;color:var(--muted)}
.spectral-chart text{fill:currentColor;font-size:9px}
#spectral-response{min-height:313px;font-variant-numeric:tabular-nums}
.plot-options{display:flex;align-items:center;flex-wrap:wrap;gap:8px 18px;padding:0 19px 10px;color:var(--muted);font-size:11px}
.plot-options label{display:inline-flex;align-items:center;gap:5px;cursor:pointer;white-space:nowrap}
.plot-options input{accent-color:#2563eb;width:13px;height:13px;margin:0}
.plot-options select{min-height:28px;max-width:210px;font-size:11px;padding:3px 6px;color:var(--ink)}
.plot-options label:has(input:disabled){opacity:.6;cursor:default}
#plot-mask-help{font-size:10px;line-height:1.5;flex-basis:100%}
.result-footer{flex-wrap:wrap;gap:8px}#scale{font-size:10px;color:var(--muted)}

#seismic-profile-toggle{display:flex;gap:5px;padding:0 19px 8px}#seismic-profile-toggle button{min-height:28px;font-size:11px}#seismic-profile-toggle .active{background:#eff6ff;color:#1d4ed8;border-color:#93c5fd}#profile.seismic-section{height:300px}
