:root {
  /* MC Bridge light theme (palette from the logo, 03-11-2026) */
  color-scheme: light dark;
  --slate: #2B323B; --grey: #8A939B; --orange: #FF6A13; --offwhite: #FAF8F4;
  --bg: #FAF8F4;
  --card: #FFFFFF;
  --sunk: #F1EFEA;
  --text: #2B323B;
  --muted: #5F6873;
  --accent: #FF6A13;
  --accent-ink: #C2410C;          /* orange text on light: passes contrast */
  --facet: #D6DADE;
  --ok: #1b7f4a; --ok-bg: #DDF3E6; --ok-ink: #14603A;
  --warn: #b86e00; --warn-bg: #FFF1DA; --warn-ink: #7A4A00;
  --err: #c62828; --err-bg: #FDECEA; --err-ink: #8A1C1C; --err-line: #E0A0A0;
  --line: #D6DADE;
  --btn: #2B323B; --btn-hover: #3A434F;
}
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #2B323B;
    --card: #343C46;
    --sunk: #262C34;
    --text: #FAF8F4;
    --muted: #B4BCC4;
    --accent: #FF6A13;
    --accent-ink: #FF8A47;
    --facet: #58626E;
    --ok-bg: #143528; --ok-ink: #8fdfb0;
    --warn-bg: #3a2a10; --warn-ink: #ffc56e;
    --err-bg: #3a1515; --err-ink: #ffb4b4; --err-line: #7a2a2a;
    --line: #4A535E;
    --btn: #FF6A13; --btn-hover: #FF7F33;
  }
}
* { box-sizing: border-box; }
body {
  margin: 0;
  font: 15px/1.45 system-ui, -apple-system, "Segoe UI", sans-serif;
  background: var(--bg);
  color: var(--text);
}
.top {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  align-items: flex-end;
  padding: 1.25rem 1.5rem;
  border-bottom: 1px solid var(--line);
}
.top h1 { margin: 0; font-size: 1.35rem; }
.tag, .meta, .hint, .small, .foot { color: var(--muted); }
.wrap { max-width: 44rem; margin: 0 auto; padding: 1rem 1.25rem 3rem; }
.card {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 1rem 1.1rem 1.15rem;
  margin: 0.85rem 0;
}
.card h2 { margin: 0 0 0.6rem; font-size: 1.05rem; }
.hidden { display: none !important; }
.drop {
  border: 2px dashed var(--line);
  border-radius: 10px;
  padding: 1.75rem 1rem;
  text-align: center;
  background: var(--sunk);
  cursor: pointer;
}
.drop.drag { border-color: var(--accent); background: var(--sunk); }
.linkish { color: var(--accent-ink); cursor: pointer; text-decoration: underline; }
.linkbtn {
  background: none; border: none; color: var(--accent-ink);
  cursor: pointer; padding: 0; font: inherit; text-decoration: underline;
}
.samples { margin: 0.75rem 0 0; font-size: 0.92rem; }
.radios { display: grid; gap: 0.45rem; }
.radios label {
  display: flex; gap: 0.55rem; align-items: center;
  padding: 0.45rem 0.55rem; border-radius: 6px; border: 1px solid transparent;
}
.radios label:has(input:checked) { border-color: var(--accent); background: var(--sunk); }
.btn {
  appearance: none; border: 0; border-radius: 8px;
  background: var(--btn); color: #fff; font-weight: 600;
  padding: 0.55rem 1rem; cursor: pointer;
}
.btn:disabled { opacity: 0.45; cursor: not-allowed; }
.analyse {
  margin-top: 0.5rem;
  padding: 0.75rem 0.85rem;
  border-radius: 8px;
  background: var(--sunk);
  border: 1px solid var(--line);
}
.chip {
  display: inline-block;
  font-size: 0.78rem; font-weight: 700;
  padding: 0.15rem 0.45rem; border-radius: 999px;
  margin-right: 0.4rem; vertical-align: middle;
}
.chip-ok { background: var(--ok-bg); color: var(--ok-ink); }
.chip-warn { background: var(--warn-bg); color: var(--warn-ink); }
.chip-err { background: var(--err-bg); color: var(--err-ink); }
.fail-box {
  margin-top: 0.65rem; padding: 0.7rem 0.8rem;
  border-radius: 8px; background: var(--err-bg); border: 1px solid var(--err-line);
}
.fail-box h3 { margin: 0 0 0.35rem; font-size: 0.95rem; color: var(--err-ink); }
.fail-box p { margin: 0; color: var(--text); }
.kv { width: 100%; border-collapse: collapse; margin-top: 0.5rem; font-size: 0.9rem; }
.kv th { text-align: left; color: var(--muted); font-weight: 500; padding: 0.2rem 0.5rem 0.2rem 0; width: 7rem; }
.kv td { padding: 0.2rem 0; }
.foot { max-width: 44rem; margin: 0 auto; padding: 0 1.25rem 2rem; font-size: 0.85rem; }
.foot code { font-size: 0.85em; }
.caldrop { margin-top: 0.75rem; }

.filelist { list-style: none; padding: 0; margin: 0.75rem 0 0; }
.filelist li {
  font-size: 0.9rem; padding: 0.35rem 0.5rem; border: 1px solid var(--line);
  border-radius: 6px; margin: 0.3rem 0; background: var(--sunk);
}
.dlbtn { display: inline-block; margin-top: 0.65rem; }

.choice{border:1px solid var(--line);border-radius:8px;padding:.6rem .8rem;margin:.6rem 0;background:var(--sunk)}
.choice h3{margin:.1rem 0 .3rem;font-size:1rem}
.choice label{display:block;margin:.25rem 0}
.choice .maxedge input{width:5rem}
.preview{margin-top:.8rem}
.preview canvas{width:100%;max-width:640px;height:auto;border:1px solid #d7dde3;border-radius:6px;background:#fff}
.ramp{display:flex;align-items:center;gap:.4rem;max-width:640px;font-size:.8rem}
.ramp i{flex:1;height:8px;border-radius:4px;background:linear-gradient(90deg,hsl(240,75%,55%),hsl(180,75%,55%),hsl(120,75%,55%),hsl(60,75%,55%),hsl(0,75%,55%))}
/* View on map (29-10-2026) */
.mvrow { margin: .6em 0 0; }
.btn2 { background: var(--btn); color: #fff; border: 1px solid var(--btn); display: inline-flex; align-items: center; gap: .45em; }
.btn:hover:not(:disabled), .btn2:hover:not(:disabled) { background: var(--btn-hover); }
.btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.btn2:disabled { background: var(--btn); color: #fff; opacity: .8; cursor: progress; }
.btn2 .spin { color: #fff; }
.mvdlg { position: fixed; inset: 0; z-index: 1000; background: rgba(0,0,0,.55); display: flex; align-items: center; justify-content: center; padding: 2vh 2vw; }
.mvdlg.hidden { display: none; }
.mvbox { background: #fff; color: #1b1b1b; border-radius: 10px; width: min(1200px, 96vw); height: min(860px, 94vh); display: flex; flex-direction: column; overflow: hidden; }
.mvhead { display: flex; align-items: center; gap: .5em; padding: .55em .8em; border-bottom: 1px solid #ddd; }
.mvtitle { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mvclose { appearance: none; border: 0; background: none; font-size: 1.6em; line-height: 1; cursor: pointer; }
.mvbody { flex: 1; position: relative; min-height: 0; }
.mvmap, .mvbody .jw3d { position: absolute; inset: 0; }
.mvmap[hidden], .mvbody .jw3d[hidden] { display: none; }
.mvfoot { color: #333; display: flex; gap: 1em; align-items: center; justify-content: space-between; padding: .45em .8em; border-top: 1px solid #ddd; flex-wrap: wrap; }
.mvramp { display: inline-flex; align-items: center; gap: .4em; }
.mvramp i { display: inline-block; width: 140px; height: 10px; border-radius: 3px; }
.spviewseg { display: inline-flex; border: 1px solid #ccc; border-radius: 6px; overflow: hidden; }
.spviewseg button { appearance: none; background: transparent; border: 0; padding: .2em .7em; font: inherit; font-weight: 600; cursor: pointer; }
.spviewseg button.on { background: #1b1b1b; color: #fff; }
.jw3d { background: #0a0a0a; overflow: hidden; }
.jw3dstage { position: absolute; inset: 0 0 2.2em 0; outline: none; }
.jw3dstage canvas { display: block; width: 100% !important; height: 100% !important; }
.jw3dbar { position: absolute; left: 0; right: 0; bottom: 0; padding: .35em .7em; background: rgba(0,0,0,.72); color: #bbb; }
.jw3dst { position: absolute; left: 10px; top: 10px; z-index: 2; padding: .35em .6em; border-radius: 6px; background: rgba(0,0,0,.65); color: #eee; font-size: .85em; pointer-events: none; }
.jw3dst:empty { display: none; }
.mvmap .leaflet-control-layers-toggle { background-image: none; width: auto; height: auto; padding: .3em .6em; font: 600 12px/1.4 sans-serif; white-space: nowrap; color: #1b1b1b; text-decoration: none; }
.mvmap .leaflet-control-layers-toggle::after { content: 'Street / Satellite'; }

/* 29-10-2026: per-file cards, loading states */
.fcard{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:0 0 10px}
.sum-box,.note-box{border:1px solid #2f7d4f;background:rgba(47,125,79,.12);border-radius:8px;padding:8px 12px;margin:6px 0 10px}
.note-box{border-color:#8a7a2f;background:rgba(138,122,47,.12)}
.sum-box h3{margin:0 0 6px;font-size:1em}
.warn{color:var(--warn-ink)}
.spin{display:inline-block;width:.9em;height:.9em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:flipspin .8s linear infinite;vertical-align:-2px}
@keyframes flipspin{to{transform:rotate(360deg)}}
.mvbody{position:relative}
.mvmsg{position:absolute;z-index:1000;left:50%;top:40%;transform:translate(-50%,-50%);background:#fff;color:#111;padding:14px 18px;border-radius:8px;box-shadow:0 4px 18px rgba(0,0,0,.35);max-width:80%;font-size:15px}
.mvmsg.err{background:#fdecea;color:#8a1c1c;border:1px solid #e0a0a0}

/* Build progress bar (29-10-2026) */
.prog { margin: 0.75rem 0; padding: 0.7rem 0.85rem; border: 1px solid var(--line); border-radius: 8px; background: var(--sunk); }
.prog-head { display: flex; justify-content: space-between; gap: 1rem; font-weight: 600; color: var(--text); margin-bottom: 0.45rem; }
.prog-pct { font-variant-numeric: tabular-nums; color: var(--accent-ink); }
.prog-track { height: 12px; border-radius: 6px; background: var(--card); border: 1px solid var(--line); overflow: hidden; }
.prog-fill { height: 100%; width: 0; background: linear-gradient(90deg, var(--slate), var(--accent)); transition: width .3s ease; }
.prog .prog-time { margin: 0.4rem 0 0; }
.prog.prog-ok .prog-fill { background: #2ea36a; }
.prog.prog-ok .prog-stage { color: var(--ok-ink); }
.prog.prog-err { background: var(--err-bg); border-color: #7a2a2a; }
.prog.prog-err .prog-fill { background: var(--err); }
.prog.prog-err .prog-stage { color: var(--err-ink); }

/* Amber info (LOK_GRID fallback, 29-10-2026) */
.info-box { margin: 0.6rem 0; padding: 0.65rem 0.8rem; border-radius: 8px; background: var(--warn-bg); border: 1px solid var(--warn); color: var(--text); }
.info-box strong { color: var(--warn-ink); display: block; margin-bottom: 0.25rem; }
.info-box p { margin: 0; line-height: 1.4; }
.info-box.hidden { display: none; }
.analyse:empty { display: none; }

/* ---- MC Bridge brand (03-11-2026) ---- */
a { color: var(--accent-ink); }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.top { align-items: center; background: var(--card); }
.logo-link, .logo { display: inline-block; line-height: 0; }
.logo img { height: 64px; width: auto; }
.btn { color: #fff; }
@media (prefers-color-scheme: dark) { .btn, .btn2, .btn2 .spin { color: #2B323B; } }
.plan { font-size: .75rem; font-weight: 700; padding: .1rem .45rem; border-radius: 999px; border: 1px solid var(--line); }
.plan-expired { color: var(--err-ink); border-color: var(--err-line); }
.plan-active, .plan-trial { color: var(--ok-ink); }
.draft-banner { background: var(--warn-bg); color: var(--warn-ink); border: 2px dashed var(--warn); border-radius: 8px; padding: .6rem .8rem; font-weight: 700; }
.foot a { color: var(--muted); }

/* Conversion loader: vertices leave the left TIN, scatter, re-form the right TIN */
.mcb-loader { text-align: center; margin: .5rem 0 0; }
.mcb-loader svg { max-width: 100%; height: auto; overflow: visible; }
.mcb-loader p { margin: .1rem 0 0; letter-spacing: .08em; text-transform: uppercase; font-size: .72rem; }
.mcb-face { fill: var(--facet); stroke: var(--text); stroke-width: 1.5; stroke-linejoin: round; }
.mcb-acc-face { fill: var(--orange); }
.mcb-wire { fill: none; stroke: var(--text); stroke-width: 1.5; stroke-linejoin: round; opacity: .25; animation: mcb-wire 2.4s ease-in-out infinite; }
.mcb-acc-wire { stroke: var(--orange); }
.mcb-v { fill: var(--text); opacity: .3; animation: mcb-wire 2.4s ease-in-out infinite; }
.mcb-pt { fill: var(--grey); transform-box: fill-box; animation: mcb-cross 2.4s cubic-bezier(.45,0,.55,1) infinite both; }
.mcb-acc { fill: var(--orange); }
@keyframes mcb-cross {
  0%   { transform: translate(0, 0); opacity: 0; }
  10%  { opacity: 1; }
  30%  { transform: translate(calc(var(--dx) * .3), var(--sy)) scale(.8); }
  50%  { transform: translate(calc(var(--dx) * .5), calc(var(--sy) * -.6)) scale(.7); }
  75%  { transform: translate(calc(var(--dx) * .8), calc(var(--sy) * .3)); }
  92%  { transform: translate(var(--dx), 0); opacity: 1; }
  100% { transform: translate(var(--dx), 0); opacity: 0; }
}
@keyframes mcb-wire { 0%, 100% { opacity: .25; } 85% { opacity: 1; } }
.mcb-done .mcb-pt { animation: none; opacity: 0; }
.mcb-done .mcb-wire, .mcb-done .mcb-v { animation: none; opacity: 1; }
.mcb-fail .mcb-pt, .mcb-fail .mcb-wire, .mcb-fail .mcb-v { animation-play-state: paused; }
@media (prefers-reduced-motion: reduce) { .mcb-pt { animation-duration: 6s; } }

/* Legal pages (03-11-2026) */
.legal-wrap { max-width: 50rem; }
.legal h1 { margin: 0 0 .25rem; font-size: 1.5rem; }
.legal h2 { font-size: 1.05rem; margin: 1.5rem 0 .4rem; scroll-margin-top: 1rem; }
.legal p, .legal li { line-height: 1.55; }
.legal li { margin: .25rem 0; }
.legal-meta { color: var(--muted); font-size: .88rem; margin: 0 0 1rem; }
.draft-note { display: inline-block; font-size: .78rem; font-weight: 600; color: var(--warn-ink); background: var(--warn-bg); border-radius: 999px; padding: .05rem .5rem; }
.toc { background: var(--sunk); border: 1px solid var(--line); border-radius: 8px; padding: .5rem 1rem; font-size: .9rem; }
.toc ol { margin: .2rem 0; padding-left: 1.2rem; columns: 2; }
@media (max-width: 560px) { .toc ol { columns: 1; } }
.callout { border-left: 4px solid var(--accent); background: var(--sunk); padding: .5rem .8rem; border-radius: 4px; }
table.legal { border: 1px solid var(--line); }
table.legal th, table.legal td { border-bottom: 1px solid var(--line); padding: .4rem .5rem; vertical-align: top; width: auto; }

/* Check before use (03-11-2026) */
.checkuse { margin: .75rem 0 .25rem; padding: .7rem .9rem; border: 2px solid var(--accent); border-left-width: 6px; border-radius: 8px; background: var(--sunk); color: var(--text); font-size: 1rem; line-height: 1.45; }
.checkuse strong { color: var(--accent-ink); }
.callout strong { color: var(--accent-ink); }

/* View on map follows the theme (03-11-2026): frame, toolbar, Map | 3D toggle, close, footer and Leaflet controls use the palette vars. */
.mvbox { background: var(--card); color: var(--text); border: 1px solid var(--line); }
.mvhead { border-bottom: 1px solid var(--line); background: var(--card); }
.mvclose { color: var(--text); }
.mvclose:hover, .mvclose:focus-visible { color: var(--accent-ink); }
.mvfoot { color: var(--muted); background: var(--card); border-top: 1px solid var(--line); }
.mvmsg { color: var(--text); }
.mvmsg.err { color: var(--err-ink); }
.spviewseg { border: 1px solid var(--grey); }
.spviewseg button { color: var(--text); }
.spviewseg button + button { border-left: 1px solid var(--grey); }
.spviewseg button:hover:not(.on) { background: var(--sunk); }
.spviewseg button.on { background: var(--slate); color: #FAF8F4; }
.spviewseg button:focus-visible, .mvclose:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
@media (prefers-color-scheme: dark) {
  .mvdlg { background: rgba(0,0,0,.7); }
  .spviewseg { border-color: var(--facet); }
  .spviewseg button + button { border-left-color: var(--facet); }
  .spviewseg button.on { background: var(--orange); color: #2B323B; }
  .mvmap.leaflet-container { background: #262C34; }
  .mvmap .leaflet-bar a { background-color: #343C46; color: #FAF8F4; border-bottom-color: #58626E; }
  .mvmap .leaflet-bar a:hover, .mvmap .leaflet-bar a:focus { background-color: #3E4752; }
  .mvmap .leaflet-bar a.leaflet-disabled { background-color: #2B323B; color: #8A939B; }
  .mvmap .leaflet-bar, .mvmap .leaflet-control-layers { border-color: #58626E; }
  .mvmap .leaflet-control-layers, .mvmap .leaflet-control-layers-expanded { background: #343C46; color: #FAF8F4; }
  .mvmap .leaflet-control-layers-toggle { color: #FAF8F4; }
  .mvmap .leaflet-control-layers-separator { border-top-color: #58626E; }
  .mvmap .leaflet-control-attribution, .mvmap .leaflet-control-scale-line { background: rgba(43,50,59,.85); color: #FAF8F4; }
  .mvmap .leaflet-control-scale-line { border-color: #FAF8F4; }
  .mvmap .leaflet-control-attribution a { color: #FF8A47; }
  .mvmap .leaflet-tooltip { background: #343C46; color: #FAF8F4; border-color: #58626E; }
}

/* Logo centred (03-11-2026): header stacks logo over the status line, both centred; login + legal headers follow */
.top { flex-direction: column; justify-content: center; align-items: center; text-align: center; gap: .5rem; }
.top .meta { margin: 0; }
.logo-link { margin: 0 auto; }
.login .brand, .login picture { display: block; margin-left: auto; margin-right: auto; text-align: center; }
@media (max-width: 560px) { .top { padding: 1rem; } .logo img { height: 52px; } }

/* 03-11-2026 linework breakdown */
.kv.brk td, .kv.brk th { text-align: right; padding: 0.15rem 0.5rem; }
.kv.brk tr > th:first-child { text-align: left; }
.kv.brk .brk-sum th, .kv.brk .brk-sum td { font-weight: 600; border-top: 1px solid currentColor; }

/* 03-11-2026 status line back to top right; logo stays centred. Narrow screens: compact row under the logo */
.top { position: relative; }
@media (min-width: 761px) {
  .top .meta { position: absolute; top: 1rem; right: 1.5rem; max-width: calc(50% - 7rem); text-align: right; }
}
@media (max-width: 760px) {
  .top .meta { font-size: .85rem; align-self: stretch; text-align: right; }
}

/* 03-11-2026 sign-up, account, free flips, promo codes */
.mcb-form { max-width: 26rem; margin: 6vh auto; padding: 1.5rem; }
.mcb-form h1 { font-size: 1.3rem; margin: .2rem 0 .4rem; text-align: center; }
.mcb-form .brand { display: block; margin: 0 auto 1rem; text-align: center; }
.mcb-form .brand img { width: min(100%, 240px); height: auto; }
.mcb-form label { display: block; margin: .65rem 0 .2rem; }
.mcb-form input:not([type=checkbox]) { width: 100%; padding: .55rem; box-sizing: border-box; }
.mcb-form .btn { margin-top: 1rem; width: 100%; }
.mcb-form .tick { display: flex; gap: .5rem; align-items: flex-start; margin-top: .9rem; }
.mcb-form .tick input { margin-top: .25rem; }
.btnlink { display: block; text-align: center; text-decoration: none; padding: .6rem; border-radius: 8px; }
.center { text-align: center; }
.hp { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
.err:not(.mvmsg) { color: var(--err-ink); background: var(--err-bg); border: 1px solid var(--err-line, var(--err)); border-radius: 8px; padding: .5rem .7rem; }
.okmsg { color: var(--ok-ink); background: var(--ok-bg); border-radius: 8px; padding: .5rem .7rem; }
.flips { font-weight: 600; }
.flips-out { color: var(--err-ink); }
.plan-box { background: var(--warn-bg); color: var(--warn-ink); border: 1px solid var(--warn); border-radius: 10px; padding: .75rem 1rem; margin: .75rem 0; }
.plan-box h3 { margin: 0 0 .3rem; }
.plan-box a { color: inherit; font-weight: 700; }
.row-form { display: flex; gap: .5rem; flex-wrap: wrap; }
.row-form input { flex: 1 1 12rem; padding: .55rem; }
.row-form .btn { flex: 0 0 auto; }
.grid-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); gap: .6rem 1rem; align-items: end; }
.grid-form label { display: flex; flex-direction: column; gap: .2rem; font-size: .9rem; }
.grid-form input { padding: .5rem; }
.grid-form .wide { grid-column: 1 / -1; }
.tblwrap { overflow-x: auto; }
table.admin { width: 100%; border-collapse: collapse; }
table.admin th, table.admin td { text-align: left; padding: .35rem .5rem; border-bottom: 1px solid var(--line); vertical-align: top; }
table.admin tr.off td { opacity: .55; }
.btn-sm { padding: .25rem .6rem; font-size: .85rem; }
pre.outbox { white-space: pre-wrap; word-break: break-all; font-size: .8rem; background: var(--sunk); padding: .6rem; border-radius: 8px; max-height: 22rem; overflow: auto; }
@media (prefers-color-scheme: dark) {
  .plan-box { background: rgba(255,106,19,.12); color: var(--text); border-color: var(--accent); }
  .plan-box a { color: var(--accent); }
}
.cf-turnstile { margin: .75rem 0 .25rem; min-height: 65px; }

/* Coordinate system picker (04-11-2026) */
.crsbar { display: flex; align-items: center; gap: .5rem; margin: 0 0 .6rem; }
.crsbar select { padding: .2rem .4rem; }
.crsopt.hidden { display: none; }
.crsmore { margin-top: .6rem; }
.crsmore input[type=search] { width: 100%; max-width: 28rem; padding: .35rem .5rem; margin: .4rem 0; }
.crsresults { list-style: none; padding: 0; margin: .2rem 0; max-height: 14rem; overflow: auto; }
.crsresults li { padding: .15rem 0; }
.crsnotices { margin-top: .5rem; }
.muted { opacity: .75; }
