/* ==========================================================================
   claim_plot.css — WT3 claim-plot map UI (A-chassis sidebar cards, stepper,
   reference-point picker, layout toolbench, tri-state QQ legend).
   Matches the dark lm-* rail idiom (see lm_rail.css); palette tokens are the
   CVD-validated set from the design artifact (acd975ec §3).
   Additive only — no existing selector overridden.
   ========================================================================== */

:root {
  /* Tri-state QQ / plot palette — light theme (default for the app chrome) */
  --cp-qq:      #C97D10;   /* unplotted quarter-section (state 1)  */
  --cp-plotted: #2F6DBD;   /* plotted claim boundary (state 2)     */
  --cp-anchor:  #2E8B4A;   /* reference-point / control anchor     */
  --cp-private: #7D4CC9;   /* my private in-window plot            */
  --cp-ours:    #1E7A46;   /* ground THIS project holds (ownership) */
  --cp-theirs:  #8A5A2B;   /* ground this project does not hold     */
  /* Tier line-style colors reuse the plotted token; tiers differ by dash. */
}

/* The rail is dark; the tri-state legend + toolbench are rendered over the map
   (light chrome). Where a control lives on the dark rail we use the lm palette. */

/* ---- Basemap option buttons (top of rail) ------------------------------- */
.cp-basemap-row { display:grid; grid-template-columns:1fr 1fr; gap:6px; }
.cp-basemap-opt {
  display:flex; align-items:center; justify-content:center; gap:6px;
  font-size:12px; font-weight:600; padding:7px 6px; border-radius:7px;
  background:transparent; color:#c9c9d2;
  border:1px solid rgba(255,255,255,.09); cursor:pointer;
}
.cp-basemap-opt i { font-size:13px; opacity:.85; }
.cp-basemap-opt:hover { background:rgba(255,255,255,.07); }
.cp-basemap-opt.is-active {
  border-color:rgba(78,205,196,.55); color:#8fe9e0; background:rgba(78,205,196,.10);
}

/* ---- Claim cards: deal statement --------------------------------------- */
.cp-deal {
  display:flex; gap:8px; align-items:flex-start;
  font-size:11.5px; line-height:1.4; color:#c9c9d2;
  background:rgba(46,139,74,.10); border:1px solid rgba(46,139,74,.28);
  border-radius:8px; padding:8px 10px; margin:2px 0 10px;
}
.cp-deal i { color:#7fe0b3; font-size:14px; margin-top:1px; flex:0 0 auto; }
.cp-deal strong { color:#e9e9ee; }
.cp-not-survey { color:#9a9aa3; font-style:italic; }

/* ---- Stepper ------------------------------------------------------------ */
.cp-stepper { list-style:none; margin:0 0 10px; padding:0; }
.cp-step {
  display:flex; align-items:center; gap:9px; font-size:12px; color:#6a6a74;
  padding:3px 0;
}
.cp-step-n {
  width:18px; height:18px; border-radius:50%; flex:0 0 18px;
  display:inline-flex; align-items:center; justify-content:center;
  font-size:10.5px; font-weight:700; color:#6a6a74;
  border:1px solid rgba(255,255,255,.14);
}
.cp-step.is-active { color:#e9e9ee; }
.cp-step.is-active .cp-step-n { color:#0b0b0e; background:#4ECDC4; border-color:#4ECDC4; }
.cp-step.is-done { color:#9fe6c8; }
.cp-step.is-done .cp-step-n { color:#9fe6c8; border-color:rgba(82,209,150,.5); }
.cp-step.is-done .cp-step-n::before { content:"\2713"; }
.cp-step.is-done .cp-step-n { font-size:0; }
.cp-step.is-done .cp-step-n::before { font-size:11px; }

/* ---- Upload drop zone --------------------------------------------------- */
.cp-drop {
  border:1.5px dashed rgba(255,255,255,.18); border-radius:9px;
  padding:16px 10px; text-align:center; cursor:pointer;
  color:#9a9aa3; transition:border-color .15s, background .15s;
}
.cp-drop:hover, .cp-drop.cp-drag { border-color:rgba(78,205,196,.55); background:rgba(78,205,196,.06); color:#c9c9d2; }
.cp-drop i { font-size:22px; color:#4ECDC4; }
.cp-drop-t { font-size:12.5px; font-weight:600; color:#e9e9ee; margin-top:4px; }
.cp-drop-s { font-size:10.5px; color:#6a6a74; }
.cp-filelist { list-style:none; margin:8px 0 0; padding:0; }
.cp-filelist li {
  display:flex; align-items:center; gap:7px; font-size:11.5px; color:#c9c9d2;
  padding:4px 6px; border-radius:6px; background:rgba(255,255,255,.04);
  margin-bottom:4px;
}
.cp-filelist li i.cp-fi { color:#9a9aa3; flex:0 0 auto; }
.cp-filelist li .cp-fname { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; flex:1; }
.cp-filelist li .cp-frm { margin-left:auto; color:#6a6a74; cursor:pointer; }
.cp-filelist li .cp-frm:hover { color:#f1a59c; }

/* ---- Reference-point step ---------------------------------------------- */
/* FOUR affordances now (GAP-108's cited tie call + GAP-111's "show me where it is"
   + the original pick/type), and four buttons in a single flex row shred their own
   labels: at the modal's width "Show me where it is" wrapped onto three lines and
   "From tie call" onto two. A 2×2 grid gives each one a readable line — the labels
   ARE the affordance here, since the whole point is that the user can tell which
   kind of tie they have. Caught by looking at the screenshot, which is what
   screenshots are for. */
.cp-ref-actions { display:grid; grid-template-columns:1fr 1fr; gap:6px; margin:8px 0 0; }
.cp-ref-actions .btn {
  width:100%; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  font-size:11.5px; padding:6px 8px;
}
.cp-ref-readout {
  font-size:11.5px; color:#c9c9d2; margin-top:8px; padding:7px 9px;
  border-radius:7px; background:rgba(255,255,255,.04);
  border-left:3px solid var(--cp-anchor);
}
.cp-ref-readout.cp-ref-set { color:#e9e9ee; }
.cp-ref-tier {
  display:inline-block; font-size:9.5px; font-weight:700; letter-spacing:.5px;
  padding:1px 6px; border-radius:4px; margin-left:6px;
  color:#0b0b0e; background:var(--cp-anchor);
}

/* ---- Plotting hand-off -------------------------------------------------- */
.cp-plotting { display:flex; align-items:center; gap:9px; font-size:12px; color:#c9c9d2; padding:6px 0; }

/* ---- Tier chips (delivered) -------------------------------------------- */
.cp-tierchips { display:flex; flex-wrap:wrap; gap:6px; }
.cp-tierchip {
  display:flex; align-items:center; gap:6px; font-size:11px; color:#e9e9ee;
  padding:4px 8px; border-radius:6px; background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.10);
}
.cp-tierchip .cp-tierbadge {
  width:16px; height:16px; border-radius:4px; flex:0 0 16px;
  display:inline-flex; align-items:center; justify-content:center;
  font-size:9.5px; font-weight:800; color:#0b0b0e;
}
.cp-tierbadge.tier-A { background:#3FAE5C; }
.cp-tierbadge.tier-B { background:#4E8BD1; }
.cp-tierbadge.tier-C { background:#C67D0E; }
.cp-tierbadge.tier-D { background:#9a9aa3; }

/* ---- Order-documents cost line ----------------------------------------- */
.cp-costline {
  display:flex; align-items:center; justify-content:space-between;
  font-size:12px; margin:8px 0; padding:6px 9px; border-radius:7px;
  background:rgba(255,255,255,.04);
}
.cp-cost-claims { color:#c9c9d2; }
.cp-cost-total { color:#7fe0b3; font-weight:700; }

.cp-reset { color:#6a6a74; font-size:11px; }

/* ==========================================================================
   Reference-point picker (sub-phase B) — rendered over the light map chrome.
   ========================================================================== */
.cp-crosshair, .cp-crosshair .leaflet-grab, .cp-crosshair .leaflet-interactive { cursor:crosshair !important; }

.cp-coord-readout {
  position:absolute; bottom:14px; left:50%; transform:translateX(-50%);
  z-index:1200; background:rgba(17,17,20,.92); color:#e9e9ee;
  border:1px solid rgba(255,255,255,.14); border-radius:8px;
  padding:7px 14px; font-size:13px; font-variant-numeric:tabular-nums;
  box-shadow:0 4px 18px rgba(0,0,0,.4); pointer-events:none;
}
.cp-coord-readout i { color:#4ECDC4; margin-right:4px; }
.cp-ro-hint { color:#9a9aa3; margin-left:8px; font-size:11px; }

.cp-monument { color:var(--cp-anchor); font-size:20px; text-shadow:0 1px 3px rgba(0,0,0,.5); cursor:pointer; }
.cp-monument:hover { color:#1f6f38; }

.cp-ref-prov { color:#9a9aa3; font-size:10.5px; margin-top:3px; }
.cp-ref-orig { color:#9a9aa3; font-size:10.5px; }
.cp-ref-georef { color:#8fbaf0; font-size:11.5px; text-align:left; padding-left:2px; }

/* Typed-coords inline form (on the dark rail) */
.cp-typed-form { margin-top:8px; padding:9px; border-radius:8px; background:rgba(255,255,255,.04); }
.cp-typed-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.cp-typed-form label { display:flex; flex-direction:column; font-size:10.5px; color:#9a9aa3; gap:3px; }
.cp-typed-form input {
  background:#1a1a1f; color:#e9e9ee; border:1px solid rgba(255,255,255,.12);
  border-radius:6px; padding:5px 7px; font-size:12.5px;
}
.cp-typed-epsg { margin-top:8px; }
.cp-typed-acts { display:flex; gap:6px; margin-top:9px; }
.cp-typed-acts .btn { flex:1; }
.cp-typed-err { color:#f1a59c; font-size:11px; margin-top:6px; min-height:1em; }

/* PLSS tie-call resolver (GAP-108) — reuses the .cp-typed-form chrome above for
   the form itself; these are just the candidate cards it renders beneath it.
   A PROTRACTED corner is styled as a WARNING, not as a result: it was never
   surveyed on the ground, and the card must not let someone adopt it thinking
   they snapped to a monument. */
.cp-plss-form select {
  background:#1a1a1f; color:#e9e9ee; border:1px solid rgba(255,255,255,.12);
  border-radius:6px; padding:5px 7px; font-size:12.5px;
}
.cp-typed-form select {
  background:#1a1a1f; color:#e9e9ee; border:1px solid rgba(255,255,255,.12);
  border-radius:6px; padding:5px 7px; font-size:12.5px;
}
.cp-plss-results { margin-top:8px; }
.cp-plss-ambig { color:#f0c98f; font-size:11px; margin-bottom:7px; line-height:1.35; }
.cp-plss-cand {
  margin-top:7px; padding:8px; border-radius:8px;
  background:rgba(255,255,255,.05); border:1px solid rgba(255,255,255,.09);
}
.cp-plss-cand.is-protracted { border-color:rgba(240,201,143,.45); }
.cp-plss-t { color:#e9e9ee; font-size:12px; font-weight:600; }
.cp-plss-s { color:#c9c9d1; font-size:11px; margin-top:3px; }
.cp-plss-ok { color:#8fd6a6; font-size:10.5px; margin-top:2px; }
.cp-plss-cite { color:#9a9aa3; font-size:10px; margin-top:2px; }
.cp-plss-warn { color:#f0c98f; font-size:10.5px; margin-top:4px; line-height:1.35; }

/* Georeference-confirm modal (side-by-side exhibit ↔ map). It is opened FROM the
   plotting modal, so it has to sit above it — and therefore above Petra too. */
.cp-georef-modal {
  position:fixed; inset:0; z-index:10060; display:flex; align-items:center; justify-content:center;
  background:rgba(0,0,0,.55);
}
.cp-georef-modal.cp-georef-peek { background:transparent; pointer-events:none; }
.cp-georef-modal.cp-georef-peek .cp-georef-box { opacity:.25; pointer-events:none; }
.cp-georef-box {
  width:min(880px,92vw); max-height:88vh; background:#16161b; color:#e9e9ee;
  border:1px solid rgba(255,255,255,.12); border-radius:12px; overflow:hidden;
  box-shadow:0 18px 60px rgba(0,0,0,.6); display:flex; flex-direction:column;
  transition:opacity .15s;
}
.cp-georef-head { display:flex; align-items:center; justify-content:space-between; padding:12px 16px; border-bottom:1px solid rgba(255,255,255,.08); }
.cp-georef-x { background:none; border:none; color:#9a9aa3; font-size:22px; line-height:1; cursor:pointer; }
.cp-georef-x:hover { color:#e9e9ee; }
.cp-georef-body { display:grid; grid-template-columns:1.4fr 1fr; gap:14px; padding:16px; overflow:auto; }
.cp-georef-imgpane input[type=file] { font-size:12px; color:#c9c9d2; margin-bottom:8px; }
.cp-georef-imgwrap { position:relative; border:1px solid rgba(255,255,255,.1); border-radius:8px; overflow:hidden; min-height:220px; background:#0d0d10; display:flex; align-items:center; justify-content:center; }
.cp-georef-imgempty { color:#6a6a74; font-size:12.5px; padding:24px; text-align:center; }
.cp-georef-img-el { max-width:100%; display:block; cursor:crosshair; }
.cp-georef-dot { position:absolute; width:12px; height:12px; margin:-6px 0 0 -6px; border-radius:50%; background:var(--cp-anchor); border:2px solid #fff; box-shadow:0 0 0 1px rgba(0,0,0,.5); pointer-events:none; }
.cp-georef-help { font-size:12.5px; color:#c9c9d2; line-height:1.5; }
.cp-georef-help p { margin:0 0 8px; }

/* Phase 4 — the numbered pair table + live fit chip (claim_plot_georef_
   picker_and_scale.md, "Phase 4 — Show the fit" picker UI section). */
.cp-georef-num {
  display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px;
  border-radius:50%; background:var(--cp-anchor); color:#0d0d10; font-size:10.5px; font-weight:700;
  margin-right:6px; flex:none;
}
.cp-georef-pairtable { list-style:none; margin:8px 0; padding:0; font-size:11px; }
.cp-georef-pairrow {
  display:flex; align-items:center; gap:6px; padding:4px 0; border-bottom:1px solid rgba(255,255,255,.06);
  font-variant-numeric:tabular-nums;
}
.cp-georef-pairrow .cp-georef-pair-coords { flex:1; color:#c9c9d2; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cp-georef-resid { font-weight:600; }
.cp-georef-resid-good { color:#8fd6a6; }
.cp-georef-resid-ok { color:#f0c98f; }
.cp-georef-resid-bad { color:#f0908f; }
.cp-georef-pair-del { background:none; border:none; color:#9a9aa3; cursor:pointer; font-size:14px; line-height:1; padding:0 2px; }
.cp-georef-pair-del:hover { color:#f0908f; }
.cp-georef-chip {
  display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin:10px 0; padding:8px 10px;
  border-radius:8px; background:rgba(255,255,255,.04); font-size:11.5px;
}
.cp-georef-chip-confident { border:1px solid rgba(143,214,166,.4); }
.cp-georef-chip-shaky { border:1px solid rgba(240,144,143,.4); }
.cp-georef-actions { display:flex; gap:8px; margin-top:10px; }
.cp-preview-caution { color:#f0c98f; font-size:11px; }

/* ==========================================================================
   Layout toolbench (sub-phase C) — floating panel + SVG claim overlay.
   ========================================================================== */
.cp-tb {
  position:absolute; top:12px; left:50%; transform:translateX(-50%);
  z-index:1100; background:rgba(17,17,20,.94); color:#e9e9ee;
  border:1px solid rgba(255,255,255,.14); border-radius:10px;
  box-shadow:0 8px 30px rgba(0,0,0,.5); max-width:calc(100% - 24px);
}
.cp-tb-tools { display:flex; align-items:center; gap:4px; padding:7px 9px; flex-wrap:wrap; }
.cp-tb-btn {
  display:inline-flex; align-items:center; gap:5px; background:transparent;
  color:#c9c9d2; border:1px solid rgba(255,255,255,.10); border-radius:7px;
  padding:5px 8px; font-size:12.5px; cursor:pointer; line-height:1;
}
.cp-tb-btn:hover { background:rgba(255,255,255,.08); color:#fff; }
.cp-tb-btn.cp-on { border-color:rgba(78,205,196,.6); color:#8fe9e0; background:rgba(78,205,196,.12); }
.cp-tb-btn.cp-tb-danger:hover { border-color:rgba(231,76,60,.55); color:#f1a59c; background:rgba(231,76,60,.10); }
.cp-tb-btn.cp-tb-ai { border-color:rgba(125,76,201,.5); color:#c3a6ef; }
.cp-tb-btn.cp-tb-exit { margin-left:2px; }
.cp-tb-div { width:1px; align-self:stretch; background:rgba(255,255,255,.10); margin:2px 4px; }
.cp-tb-snapt { display:inline-flex; align-items:center; gap:4px; font-size:11px; color:#9a9aa3; cursor:pointer; }
.cp-tb-snapt input { accent-color:#4ECDC4; }
.cp-tb-status {
  display:flex; align-items:center; gap:6px; flex-wrap:wrap;
  padding:6px 12px; border-top:1px solid rgba(255,255,255,.08);
  font-size:12px; color:#c9c9d2; font-variant-numeric:tabular-nums;
}
.cp-tb-dot { color:#4a4a52; }
.cp-tb-selinfo { color:#8fe9e0; }
.cp-tb-cost { color:#7fe0b3; font-weight:600; }
.cp-tb-confirm {
  display:inline-flex; align-items:center; gap:6px; margin-left:6px;
  background:rgba(231,76,60,.14); border:1px solid rgba(231,76,60,.4);
  border-radius:6px; padding:2px 8px; color:#f1a59c; font-size:11.5px;
}
.cp-tb-confirm button { border:none; border-radius:5px; padding:2px 8px; font-size:11px; cursor:pointer; }
.cp-tb-confirm .cp-tb-yes { background:#c0392b; color:#fff; }
.cp-tb-confirm .cp-tb-no { background:transparent; color:#c9c9d2; }

/* WT-1 "one rail" — block identity + dirty state + the bid CTA, all in the
   status strip. The strip is where the user already reads the truth about
   their layout (count, acres, cost), so this is where "which block is this"
   and "are my changes saved" belong too — not in a second panel. */
.cp-tb-block {
  display:inline-flex; align-items:center; gap:5px; max-width:220px;
  color:#e9e9ee; font-weight:600;
}
.cp-tb-block i { color:#7fe0b3; font-size:12px; }
.cp-tb-block .cp-tb-blockname { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cp-tb-dirty { font-size:11.5px; }
.cp-tb-dirty.is-dirty { color:#f0c98f; }
.cp-tb-dirty.is-saved { color:#8fd6a6; }
.cp-tb-bids { display:inline-flex; align-items:center; gap:7px; }
.cp-tb-bidbtn {
  display:inline-flex; align-items:center; gap:5px; cursor:pointer;
  background:#2E8B4A; color:#fff; border:1px solid rgba(255,255,255,.18);
  border-radius:6px; padding:3px 10px; font-size:11.5px; font-weight:600;
}
.cp-tb-bidbtn:hover { background:#34a057; }
.cp-tb-bidnote { font-size:11.5px; color:#9a9aa3; }
.cp-tb-bidnote.is-out { color:#8fd6a6; }
.cp-tb-link { color:#9ec5f2; font-size:11.5px; text-decoration:none; }
.cp-tb-link:hover { text-decoration:underline; }
.cp-tb-btn.cp-tb-save { border-color:rgba(46,139,74,.5); color:#8fd6a6; }
.cp-tb-btn.cp-tb-save.cp-has-changes { background:rgba(46,139,74,.16); }

/* ==========================================================================
 * WT-1 — the small dialog. The product's answer to window.prompt(): one panel,
 * a body the caller supplies, one primary action. Minimal on purpose — WT-3
 * generalises it to the remaining prompt() sites.
 * Above Petra (10000) and the plotting modal's launcher, below the plotting
 * modal itself is NOT an option — a Save dialog opened from the toolbench must
 * sit over everything on the map. Hence 10070.
 * ========================================================================== */
.cp-dlg { position:fixed; inset:0; z-index:10070; display:none; }
.cp-dlg-backdrop { position:absolute; inset:0; background:rgba(8,8,12,.55); }
.cp-dlg-panel {
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  width:min(420px, calc(100vw - 32px)); max-height:min(80vh, 620px);
  display:flex; flex-direction:column;
  background:#1c1c22; color:#e9e9ee;
  border:1px solid rgba(255,255,255,.14); border-radius:12px;
  box-shadow:0 18px 60px rgba(0,0,0,.55);
}
.cp-dlg-head {
  display:flex; align-items:flex-start; gap:10px;
  padding:14px 16px 10px; border-bottom:1px solid rgba(255,255,255,.09);
}
.cp-dlg-titles { flex:1 1 auto; min-width:0; }
.cp-dlg-t { font-size:14px; font-weight:700; line-height:1.25; }
.cp-dlg-s { font-size:11.5px; color:#9a9aa3; margin-top:3px; line-height:1.45; }
.cp-dlg-x { background:none; border:0; color:#9a9aa3; font-size:22px; line-height:1; cursor:pointer; padding:0 2px; }
.cp-dlg-x:hover { color:#e9e9ee; }
.cp-dlg-body { padding:14px 16px; overflow-y:auto; font-size:12.5px; line-height:1.5; color:#c9c9d2; }
.cp-dlg-body p { margin:0 0 10px; }
.cp-dlg-label { display:block; font-size:10.5px; color:#9a9aa3; margin-bottom:4px; }
.cp-dlg-input {
  width:100%; background:#111116; color:#e9e9ee;
  border:1px solid rgba(255,255,255,.14); border-radius:7px;
  padding:8px 10px; font-size:13px;
}
.cp-dlg-input:focus { outline:none; border-color:rgba(78,205,196,.6); }
.cp-dlg-hint { font-size:10.5px; color:#6a6a74; margin-top:5px; }
.cp-dlg-err { display:none; color:#f0908f; font-size:11.5px; padding:0 16px 6px; }
.cp-dlg-foot {
  display:flex; justify-content:flex-end; gap:8px;
  padding:12px 16px 14px; border-top:1px solid rgba(255,255,255,.08);
}
.cp-dlg-btn {
  background:transparent; color:#c9c9d2; cursor:pointer;
  border:1px solid rgba(255,255,255,.14); border-radius:7px;
  padding:6px 14px; font-size:12.5px;
}
.cp-dlg-btn:hover { background:rgba(255,255,255,.07); color:#fff; }
.cp-dlg-btn:disabled { opacity:.5; cursor:default; }
.cp-dlg-primary { background:#2E8B4A; border-color:#2E8B4A; color:#fff; font-weight:600; }
.cp-dlg-primary:hover { background:#34a057; }
.cp-dlg-danger { border-color:rgba(231,76,60,.5); color:#f1a59c; }

/* The Load picker's block rows. A block you cannot edit still LISTS — you can
   open it to look at the ground; you just can't save over it. */
.cp-dlg-rows { display:flex; flex-direction:column; gap:6px; }
.cp-dlg-row {
  display:flex; align-items:center; gap:10px; width:100%; text-align:left;
  background:rgba(255,255,255,.04); color:#e9e9ee; cursor:pointer;
  border:1px solid rgba(255,255,255,.10); border-radius:8px; padding:9px 11px;
}
.cp-dlg-row:hover { background:rgba(78,205,196,.10); border-color:rgba(78,205,196,.45); }
.cp-dlg-row-main { flex:1; min-width:0; }
.cp-dlg-row-t { font-size:12.5px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.cp-dlg-row-s { font-size:10.5px; color:#9a9aa3; margin-top:2px; }
.cp-dlg-row-lock { font-size:10px; color:#f0c98f; flex:0 0 auto; }
.cp-dlg-empty { color:#9a9aa3; font-size:12px; text-align:center; padding:14px 4px; }

/* ---- WT-3 additions -----------------------------------------------------
 * The live preview line under an ask()'s fields (bulk rename shows the names
 * it is about to write), and the shortcut legend's key table. */
.cp-dlg-input + .cp-dlg-label { margin-top:11px; }
.cp-dlg-preview {
  margin-top:11px; padding:8px 10px; border-radius:7px;
  background:rgba(78,205,196,.07); border:1px solid rgba(78,205,196,.22);
  font-size:11.5px; color:#bfe6e2; line-height:1.5;
}
.cp-dlg-preview .cp-dlg-preview-l { color:#7e7e88; display:block; font-size:10px;
  text-transform:uppercase; letter-spacing:.4px; margin-bottom:2px; }
.cp-dlg-keys { display:flex; flex-direction:column; gap:1px; }
.cp-dlg-keyrow {
  display:flex; align-items:baseline; gap:10px; padding:5px 0;
  border-bottom:1px solid rgba(255,255,255,.05);
}
.cp-dlg-keyrow:last-child { border-bottom:0; }
.cp-dlg-keys kbd {
  flex:0 0 auto; min-width:104px;
  background:#111116; border:1px solid rgba(255,255,255,.16); border-radius:5px;
  padding:2px 6px; font-size:10.5px; font-family:inherit; color:#e9e9ee;
}
.cp-dlg-keydesc { flex:1 1 auto; font-size:12px; color:#c9c9d2; }
.cp-dlg-sect {
  font-size:10px; text-transform:uppercase; letter-spacing:.5px; color:#7e7e88;
  margin:13px 0 4px;
}
.cp-dlg-sect:first-child { margin-top:0; }

/* The docgen modal (its own host, same clothes). */
.cp-dlg-wide { width:min(520px, calc(100vw - 32px)); }
.cp-dlg-block { display:block; width:100%; margin-top:12px; text-align:center; }
.cp-dlg-status { margin-top:10px; font-size:12px; }
.cp-dlg-status:empty { margin-top:0; }
.cp-dlg-list { margin:6px 0 0; padding-left:18px; font-size:12px; }
.cp-dlg-ok { color:#7fd6a0; }
.cp-dlg-warn { color:#f0c98f; }
.cp-dlg-bad { color:#f0908f; }
.cp-dlg-busy { color:#8fd3e8; }

/* SVG claim overlay */
.cp-tb-svg { overflow:visible; }
.cp-tb-claim {
  fill:rgba(47,109,189,.14); stroke:#2F6DBD; stroke-width:2; cursor:move;
  vector-effect:non-scaling-stroke;
}
.cp-tb-claim:hover { fill:rgba(47,109,189,.22); }
.cp-tb-claim.cp-draft { stroke-dasharray:6 4; }
.cp-tb-claim.cp-sel { fill:rgba(78,205,196,.22); stroke:#4ECDC4; stroke-width:3; }
.cp-tb-label {
  fill:#fff; font-size:11px; font-weight:600; text-anchor:middle; dominant-baseline:middle;
  paint-order:stroke; stroke:rgba(0,0,0,.6); stroke-width:2px; pointer-events:none;
}
.cp-tb-lasso {
  position:absolute; z-index:460; border:1.5px dashed #4ECDC4;
  background:rgba(78,205,196,.10); pointer-events:none;
}

/* WT-3 reference claims — the project's OTHER blocks, drawn so they read as
   context rather than as part of what you are laying out: no real fill, a
   thin dashed grey stroke, and a cursor that says "copy", not "move". They
   are never selectable and never carry the cp-sel / cp-draft states. */
.cp-tb-ref {
  fill:rgba(255,255,255,.03); stroke:#8b8b96; stroke-width:1.5;
  stroke-dasharray:5 4; cursor:copy; vector-effect:non-scaling-stroke;
}
.cp-tb-ref:hover { fill:rgba(240,201,143,.14); stroke:#f0c98f; }
.cp-tb-reflabel {
  fill:#c9c9d2; font-size:9.5px; font-weight:500; text-anchor:middle;
  dominant-baseline:middle; opacity:.72; paint-order:stroke;
  stroke:rgba(0,0,0,.55); stroke-width:2px; pointer-events:none;
}
.cp-tb-reft input { accent-color:#f0c98f; }

/* G4 — the empty state, inside the toolbench where the emptiness is. */
.cp-tb-empty { gap:7px; color:#9a9aa3; }
.cp-tb-empty .bi { color:#f0c98f; }
.cp-tb-emptylink {
  background:none; border:0; padding:0; cursor:pointer;
  color:#4ECDC4; font-size:inherit; text-decoration:underline;
  text-underline-offset:2px;
}
.cp-tb-emptylink:hover { color:#7fe3dc; }

/* ==========================================================================
   Claims Layer card (sub-phase D) — tri-state swatches + legend + private badge.
   ========================================================================== */
.cp-layer-check { cursor:pointer; }
.cp-layer-check input { accent-color:#4ECDC4; }
.cp-swatch { display:inline-block; width:13px; height:13px; border-radius:3px; margin:0 3px; vertical-align:-2px; }
.cp-swatch-qq { background:var(--cp-qq); }
.cp-swatch-plotted { background:transparent; border:2px solid var(--cp-plotted); }
.cp-swatch-mlrs { background:transparent; border:1px dashed #8a8a92; }

.cp-legend { margin-top:9px; padding-top:8px; border-top:1px solid rgba(255,255,255,.08); }
.cp-legend-row { display:flex; align-items:center; gap:8px; font-size:11px; color:#9a9aa3; margin-bottom:5px; }
.cp-lg { width:20px; height:12px; border-radius:2px; flex:0 0 20px; }
.cp-lg-unplotted { background:var(--cp-qq); opacity:.5; }
.cp-lg-plotted { background:transparent; border:2px solid var(--cp-plotted); }
.cp-lg-mixed {
  background:repeating-linear-gradient(45deg, transparent, transparent 2px, #000 2px, #000 3px), var(--cp-qq);
  border:1px solid var(--cp-plotted);
}
.cp-lg-private { background:transparent; border:2px solid var(--cp-private); }
/* Ownership + confidence (2026-09-10). Fill = whose ground; hatch = tier C/D
   (provisional). The swatches mirror claim_plot_layers.js plottedStyle — if one
   changes, change both. */
.cp-lg-ours {
  background:var(--cp-ours); opacity:.85; border:2px solid var(--cp-ours);
}
.cp-lg-theirs {
  background:transparent; border:2px solid var(--cp-theirs);
}
.cp-lg-prov {
  background:repeating-linear-gradient(45deg, transparent, transparent 2px,
             var(--cp-theirs) 2px, var(--cp-theirs) 3px);
  border:1px solid var(--cp-theirs);
}

.cp-days-badge {
  display:inline-block; font-size:10px; font-weight:700; color:#fff;
  background:var(--cp-private); border-radius:4px; padding:1px 6px; margin-left:4px;
}

/* §4c anchor marker + tie-line label chip */
.cp-anchor-mk { color:var(--cp-anchor); font-size:20px; text-shadow:0 1px 3px rgba(0,0,0,.55); }
.cp-tie-chip {
  background:rgba(17,17,20,.9); color:#e9e9ee; border:1px solid var(--cp-anchor);
  border-radius:5px; padding:1px 6px; font-size:10.5px; font-weight:600;
  font-variant-numeric:tabular-nums; white-space:nowrap;
}
.cp-tie-chip::before { border:none; }   /* drop Leaflet tooltip arrow on the chip */

/* Phase 2 — per-block panel (block · labels · ties) under "Plotted claims",
   project map only. Rows are rendered by claim_plot_layers.js. */
.cp-blocks { margin:6px 0 2px 22px; }
.cp-blocks[hidden] { display:none; }
.cp-blocks-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:3px; }
.cp-blocks-title { font-size:11px; text-transform:uppercase; letter-spacing:.04em; color:#9a9aa3; }
.cp-blocks-btn {
  background:none; border:1px solid rgba(255,255,255,.14); color:#c9c9d1; border-radius:4px;
  font-size:10px; padding:1px 6px; margin-left:4px; cursor:pointer;
}
.cp-blocks-btn:hover { border-color:#4ECDC4; color:#4ECDC4; }
.cp-block-row { display:grid; grid-template-columns:1fr 38px 42px 36px; align-items:center; gap:2px; padding:2px 0; }
.cp-block-cols { font-size:10px; color:#8a8a92; text-align:center; border-bottom:1px solid rgba(255,255,255,.08); }
.cp-block-cols span:first-child { text-align:left; }
.cp-block-name { display:flex; flex-direction:column; min-width:0; line-height:1.15; }
.cp-block-name strong { font-size:12px; font-weight:600; color:#e9e9ee; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cp-block-name small { font-size:10px; color:#8a8a92; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cp-block-flag { display:flex; justify-content:center; margin:0; cursor:pointer; }
.cp-block-flag input { accent-color:#4ECDC4; margin:0; }

/* claim-name label chips (own markers; hidden when zoomed out) */
.cp-name-chip-wrap { background:none; border:0; }
.cp-name-chip {
  display:inline-block; transform:translate(-50%, -50%);
  background:rgba(17,17,20,.82); color:#e9e9ee; border:1px solid var(--cp-plotted);
  border-radius:4px; padding:0 5px; font-size:10.5px; font-weight:600; white-space:nowrap;
  pointer-events:none;
}
.cp-labels-far .cp-name-chip { display:none; }

/* §4c editing — "Adjust plotted claims" mode affordances. */
.cp-adjust-btn { margin-left: 6px; font-size: 11px; padding: 1px 8px; }
.cp-adjust-menu { display: flex; flex-direction: column; gap: 2px; margin: 4px 0 2px; }
.cp-adjust-item { text-align: left; font-size: 12px; padding: 3px 8px; border: 1px solid var(--lm-border, #d0d7de); border-radius: 4px; background: transparent; cursor: pointer; }
.cp-adjust-item:hover { background: rgba(125,76,201,0.10); }
.cp-affordance { margin-top: 8px; padding: 8px; border-left: 3px solid #7D4CC9; background: rgba(125,76,201,0.08); border-radius: 4px; }
.cp-affordance-msg { font-size: 12px; margin-bottom: 6px; }
.cp-affordance .lm-btn { margin-right: 6px; }
body.cp-edit-mode .cp-tierchip { outline: 1px dashed rgba(125,76,201,0.5); }

/* ==========================================================================
 * WT5 §4e — Block dossier page (cpd-*). A full-page surface (base.html chrome),
 * NOT the map sidebar — but reuses the tier tokens + card idiom of the WT3 cards.
 * ========================================================================== */
.cpd-wrap { max-width: 1080px; margin: 0 auto; padding: 18px 20px 60px; }
.cpd-head { margin-bottom: 14px; }
.cpd-back { font-size: 12.5px; color: #4E8BD1; text-decoration: none; }
.cpd-back:hover { text-decoration: underline; }
.cpd-title { font-size: 22px; font-weight: 700; margin: 6px 0 2px; }
.cpd-sub { font-size: 13px; color: #6a6a74; margin: 0; }
.cpd-note { font-size: 12px; color: #6a6a74; margin: 4px 0 14px; font-style: italic; }

.cpd-health { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 4px; }
.cpd-chip {
  display: inline-flex; align-items: center; gap: 5px; font-size: 12px;
  padding: 3px 10px; border-radius: 20px; background: rgba(78,139,209,.10);
  border: 1px solid rgba(78,139,209,.30); color: #2c3e50;
}
.cpd-chip strong { font-weight: 700; }
.cpd-chip-warn { background: rgba(198,125,14,.12); border-color: rgba(198,125,14,.40); color: #8a5600; }
.cpd-chip-info { background: rgba(125,76,201,.12); border-color: rgba(125,76,201,.40); color: #5a37a0; }

.cpd-card {
  background: #fff; border: 1px solid #e3e6ea; border-radius: 10px;
  padding: 14px 16px; margin: 14px 0; box-shadow: 0 1px 2px rgba(0,0,0,.03);
}
.cpd-h2 { font-size: 14.5px; font-weight: 700; margin: 0 0 8px; display: flex; align-items: center; gap: 7px; }
.cpd-h2 i { color: #4ECDC4; }
.cpd-cardsub { font-size: 12px; color: #6a6a74; margin: -2px 0 10px; }

/* Coverage matrix */
.cpd-matrix-scroll { overflow-x: auto; }
.cpd-matrix { width: 100%; border-collapse: collapse; font-size: 13px; }
.cpd-matrix th, .cpd-matrix td { padding: 7px 10px; border-bottom: 1px solid #eef0f2; text-align: center; }
.cpd-matrix th:first-child, .cpd-matrix td.cpd-claim { text-align: left; }
.cpd-matrix thead th { font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: #8a8a94; }
.cpd-claim { font-weight: 600; }
.cpd-yes { color: #3FAE5C; font-size: 15px; }
.cpd-no { color: #c7ccd1; }
.cpd-row-gap { background: rgba(198,125,14,.05); }
.cpd-gap-tag { font-size: 10px; color: #8a5600; background: rgba(198,125,14,.14); padding: 0 6px; border-radius: 8px; margin-left: 4px; }

/* Tier chips (reuse tier palette) */
.cpd-tierchip, .cpd-chip-tier strong {
  display: inline-block; min-width: 18px; padding: 1px 7px; border-radius: 5px;
  font-weight: 700; font-size: 11px; color: #fff;
}
.cpd-tierchip.tier-A { background: #3FAE5C; }
.cpd-tierchip.tier-B { background: #4E8BD1; }
.cpd-tierchip.tier-C { background: #C67D0E; }
.cpd-tierchip.tier-D { background: #8a8a94; }
.cpd-chip-tier { color: #2c3e50; }

/* Named gaps */
.cpd-gaps { border-left: 3px solid #C67D0E; }
.cpd-gap-list, .cpd-find-list, .cpd-doc-list, .cpd-prop-list, .cpd-net-list { list-style: none; margin: 0; padding: 0; }
.cpd-gap { font-size: 12.5px; padding: 6px 0; border-bottom: 1px dashed #eee; color: #444; }
.cpd-gap:last-child { border-bottom: none; }

/* Findings */
.cpd-find { font-size: 12.5px; padding: 5px 0; border-bottom: 1px solid #f2f2f4; }
.cpd-sev-blocking { color: #b3261e; }
.cpd-sev-annoying { color: #8a5600; }

/* Ledger */
.cpd-doc { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 7px 0; border-bottom: 1px solid #f2f2f4; font-size: 12.5px; }
.cpd-doc-kind { font-weight: 700; font-size: 11px; padding: 1px 8px; border-radius: 5px; background: #eef0f2; }
.cpd-role-survey_grade { background: rgba(63,174,92,.16); color: #226e39; }
.cpd-role-primary { background: rgba(78,139,209,.16); color: #2c5a8f; }
.cpd-role-corroborating { background: rgba(138,138,148,.16); color: #55555f; }
.cpd-role-none { background: rgba(125,76,201,.14); color: #5a37a0; }
.cpd-doc-rec { color: #6a6a74; font-style: italic; }
.cpd-doc-fed { color: #4E8BD1; margin-left: auto; }
.cpd-doc-empty { color: #9a9aa3; }

/* Proposals — the confirm pass */
.cpd-prop { padding: 10px 0; border-bottom: 1px solid #f2f2f4; }
.cpd-prop-main { display: flex; align-items: center; gap: 9px; }
.cpd-prop-kind { font-size: 10.5px; font-weight: 700; text-transform: uppercase; padding: 1px 7px; border-radius: 5px; }
.cpd-kind-alias { background: rgba(125,76,201,.14); color: #5a37a0; }
.cpd-kind-membership { background: rgba(78,139,209,.14); color: #2c5a8f; }
.cpd-prop-text { flex: 1; font-size: 13px; }
.cpd-prop-conf { font-size: 12px; font-weight: 700; color: #3FAE5C; }
.cpd-prop-why { margin: 5px 0 7px; display: flex; flex-wrap: wrap; gap: 6px; }
.cpd-sig { font-size: 10.5px; color: #6a6a74; background: #f4f5f7; padding: 1px 7px; border-radius: 4px; }
.cpd-prop-actions { display: flex; gap: 6px; }
.cpd-btn { font-size: 12px; padding: 3px 12px; border-radius: 6px; border: 1px solid #d0d7de; background: #fff; cursor: pointer; }
.cpd-btn-accept { border-color: #3FAE5C; color: #226e39; }
.cpd-btn-accept:hover { background: rgba(63,174,92,.10); }
.cpd-btn-reject { border-color: #d0d7de; color: #666; }
.cpd-btn-all { border-color: #4E8BD1; color: #2c5a8f; font-weight: 600; }
.cpd-prop-foot { margin-top: 10px; display: flex; align-items: center; gap: 12px; }
.cpd-prop-status { font-size: 12px; }
.cpd-status-ok { color: #226e39; }
.cpd-status-err { color: #b3261e; }
.cpd-status-busy { color: #6a6a74; }

/* Index */
.cpd-net { border-bottom: 1px solid #eef0f2; }
.cpd-net-link { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 6px; text-decoration: none; color: inherit; }
.cpd-net-link:hover { background: rgba(78,139,209,.05); }
.cpd-net-name { font-weight: 600; font-size: 14px; }
.cpd-net-meta { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.cpd-empty { color: #9a9aa3; font-size: 13px; padding: 20px 0; }

/* WT5 §4d/§4e — plotting-TOS acceptance gate in the rail stepper. */
.cp-tos-gate { margin-bottom: 8px; }
.cp-tos-title { font-size: 12.5px; font-weight: 700; color: #e9e9ee; margin-bottom: 4px; }
.cp-tos-deal {
  max-height: 220px; overflow-y: auto; font-size: 11.5px; line-height: 1.45;
  color: #c9c9d2; background: rgba(255,255,255,.03); border: 1px solid rgba(255,255,255,.10);
  border-radius: 6px; padding: 8px 10px;
}
.cp-tos-deal h2, .cp-tos-deal h3 { font-size: 12px; color: #e9e9ee; margin: 6px 0 3px; }
.cp-tos-deal p { margin: 0 0 6px; }
.cp-tos-agree { display: flex; align-items: center; gap: 6px; font-size: 11.5px; color: #c9c9d2; margin-top: 8px; }
.cp-tos-err { color: #e08b8b; font-size: 11px; margin-top: 5px; }

/* A2b — point-of-display disclaimer (popup + card + dossier). Canonical text is
   served from services.claims.plotting.policy.DISPLAY_DISCLAIMER. */
.cp-disclaimer {
  margin-top: 7px; padding-top: 6px; border-top: 1px solid rgba(128,128,136,.35);
  font-size: 10.5px; line-height: 1.35; color: #9a9aa3; max-width: 240px;
}

/* WT-A A1: the funnel-entry pulse is gone. ?plot=1 used to scroll a sidebar card
   into view and flash it, because the card was buried and easy to miss. It now
   OPENS the plotting modal — the new user's next step is the only thing on the
   screen, so there is nothing left to point at. */

/* ==========================================================================
 * WT-A A1 — the plotting MODAL + its launcher.
 *
 * Plotting is a modal on BOTH maps now (includes/claim_plot_modal.html). The
 * card's own styles above are reused verbatim inside it — this section only adds
 * the container, the door, and the PEEK state.
 *
 * Deliberately NOT a Bootstrap modal: a Bootstrap backdrop swallows pointer
 * events over the whole viewport, and the reference-point picker's entire job is
 * to let you click the MAP. This shell can stand aside on demand (.is-peeking),
 * which a bootstrap modal cannot without being fought.
 * ========================================================================== */
/* ABOVE PETRA (user_modal.css: z-index 10000). Petra now opens DOCKED BY DEFAULT
   in the rebrand shell (main@5e543501), so its panel sits over the middle of the
   viewport — which is exactly where a centred modal lands. At the 1200 this
   shipped with, the plotting modal opened UNDERNEATH it and its buttons were
   dead: visible, and unclickable, which is worse than absent.
   Caught by the live screenshot drive, NOT by the QA suite — the QA harness
   clears localStorage, so Petra stays closed there and the two never overlap.
   Real users are the ones who would have found this. */
.cp-modal { position: fixed; inset: 0; z-index: 10050; }
.cp-modal[hidden] { display: none; }

.cp-modal-backdrop {
  position: absolute; inset: 0;
  background: rgba(8, 8, 12, 0.55);
  opacity: 0; transition: opacity .18s ease;
}
.cp-modal.is-open .cp-modal-backdrop { opacity: 1; }

.cp-modal-panel {
  position: absolute; top: 50%; left: 50%;
  transform: translate(-50%, -46%) scale(.98);
  width: min(430px, calc(100vw - 32px));
  max-height: min(84vh, 760px);
  display: flex; flex-direction: column;
  background: #1c1c22; color: #e9e9ee;
  border: 1px solid rgba(255,255,255,.14); border-radius: 12px;
  box-shadow: 0 18px 60px rgba(0,0,0,.55);
  opacity: 0; transition: opacity .18s ease, transform .18s ease;
}
.cp-modal.is-open .cp-modal-panel { opacity: 1; transform: translate(-50%, -50%) scale(1); }

/* PEEK — a picker is armed and needs the map. The panel retreats to a corner and
   stops eating pointer events; the backdrop goes away entirely. The card stays
   VISIBLE on purpose: the user has to be able to read the tie call they are about
   to place while they are placing it. */
.cp-modal.is-peeking .cp-modal-backdrop { opacity: 0; pointer-events: none; }
.cp-modal.is-peeking { pointer-events: none; }
.cp-modal.is-peeking .cp-modal-panel {
  pointer-events: auto;
  top: 12px; left: 12px; transform: none;
  width: min(340px, calc(100vw - 24px)); max-height: min(60vh, 520px);
  box-shadow: 0 10px 34px rgba(0,0,0,.45);
  opacity: .97;
}

.cp-modal-head {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 14px 14px 10px; border-bottom: 1px solid rgba(255,255,255,.09);
}
.cp-modal-icon { font-size: 18px; color: #2E8B4A; margin-top: 1px; }
.cp-modal-titles { flex: 1 1 auto; min-width: 0; }
.cp-modal-t { font-size: 14px; font-weight: 700; line-height: 1.25; }
.cp-modal-s { font-size: 11.5px; color: #9a9aa3; margin-top: 2px; }
.cp-modal-x {
  background: none; border: 0; color: #9a9aa3; font-size: 22px; line-height: 1;
  padding: 0 2px; cursor: pointer;
}
.cp-modal-x:hover { color: #e9e9ee; }
.cp-modal-body { padding: 12px 14px 14px; overflow-y: auto; }
.cp-modal-body .cp-card { border: 0; padding: 0; background: none; }
body.cp-modal-open { overflow: hidden; }

/* The launcher — a Leaflet control, so it mounts identically inside whichever map
   is on the page (project map or public BLM map) with no per-shell DOM guessing.
   This is the affordance that did not exist: plotting was reachable only by
   scrolling a sidebar nobody was told to scroll. */
.cp-launcher { border: 0 !important; background: none !important; }
.cp-launcher button {
  display: flex; align-items: center; gap: 7px;
  padding: 8px 12px; cursor: pointer;
  background: #2E8B4A; color: #fff;
  border: 1px solid rgba(255,255,255,.18); border-radius: 8px;
  font-size: 12.5px; font-weight: 600; white-space: nowrap;
  box-shadow: 0 3px 12px rgba(0,0,0,.35);
}
.cp-launcher button:hover { background: #34a057; }
.cp-launcher button i { font-size: 14px; }
@media (max-width: 640px) {
  .cp-launcher .cp-launcher-t { display: none; }   /* icon-only on a phone */
}

/* The BLM map already owns its top-right corner: .reset-map-btn is
   `position:absolute; top:20px; right:20px; z-index:2000`, which sits directly on
   top of a Leaflet top-right control and swallows its clicks. The QA drive caught
   this — the door was VISIBLE and dead, which is worse than absent, and a user
   aiming for it would have hit "Reset map" instead. Drop below it there, and leave
   the project map's launcher in the corner where nothing competes for the space. */
.blm-map-page .cp-launcher { margin-top: 56px; }

/* Signed-in, no active project — the upload provisions a personal workspace, so
   this is a heads-up, not a wall. */
.cp-noproject {
  font-size: 11.5px; line-height: 1.4; color: #c9c9d2;
  background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.10);
  border-radius: 6px; padding: 7px 9px; margin-bottom: 8px;
}
.cp-noproject i { color: #7fb2e5; margin-right: 4px; }
.cp-noproject a { color: #9ec5f2; }

/* The anonymous pitch (the modal's other face). Copy kept in step with the BLM
   map teaser + the plotting TOS's 90-day window. */
.cp-pitch-lead { font-size: 12.5px; line-height: 1.5; color: #c9c9d2; margin: 10px 0; }
.cp-pitch-steps { list-style: none; margin: 0 0 14px; padding: 0; }
.cp-pitch-steps li { display: flex; gap: 10px; padding: 7px 0; }
.cp-pitch-steps li i { font-size: 15px; color: #2E8B4A; margin-top: 2px; }
.cp-pitch-steps strong { display: block; font-size: 12.5px; color: #e9e9ee; }
.cp-pitch-steps span { display: block; font-size: 11.5px; color: #9a9aa3; line-height: 1.4; }
.cp-pitch-foot { text-align: center; font-size: 11.5px; color: #9a9aa3; margin-top: 9px; }
.cp-pitch-foot a { color: #9ec5f2; }

/* ==========================================================================
 * GAP-111 — "Show me where it is": the user-located tie point.
 *
 * The notice's tie call, verbatim; the historic topo, because that is how a human
 * finds an old mineral-survey corner or a named peak; and the one question no model
 * can answer for them — how sure are you?
 * ========================================================================== */
.cp-locate { display: flex; flex-direction: column; gap: 8px; }

.cp-locate-tie {
  background: rgba(201,125,16,.10); border: 1px solid rgba(201,125,16,.35);
  border-radius: 7px; padding: 8px 10px;
}
.cp-locate-tie-h {
  font-size: 11px; font-weight: 700; color: #e0a94f;
  text-transform: uppercase; letter-spacing: .03em; margin-bottom: 4px;
}
/* The notice's own words. Quoted, monospaced, never paraphrased — if we surfaced the
   wrong sentence the user is looking straight at it and can disregard us. */
.cp-locate-quote {
  margin: 0; padding: 0 0 0 8px;
  border-left: 2px solid rgba(201,125,16,.55);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11.5px; line-height: 1.5; color: #e9e9ee;
}
.cp-locate-tie-n { font-size: 11px; line-height: 1.45; color: #c9c9d2; margin-top: 6px; }
.cp-locate-aliquot { color: #e9e9ee; }
.cp-locate-note { font-size: 10.5px; line-height: 1.4; color: #9a9aa3; margin-top: 6px; }

.cp-locate-topo {
  display: flex; align-items: center; gap: 7px;
  font-size: 11.5px; color: #c9c9d2; cursor: pointer;
}
.cp-locate-topo small { color: #9a9aa3; }

.cp-locate-step {
  font-size: 11.5px; line-height: 1.45; color: #c9c9d2;
  background: rgba(255,255,255,.04); border-radius: 6px; padding: 7px 9px;
}
.cp-locate-step i { color: #7fb2e5; margin-right: 4px; }

.cp-locate-rank-h {
  font-size: 12px; font-weight: 700; color: #e9e9ee; margin-bottom: 6px;
}
/* The ladder. Three rungs, in the user's own words — the σ is only as honest as
   their ability to pick the one that matches what they actually know. */
.cp-rung {
  display: block; width: 100%; text-align: left; cursor: pointer;
  background: rgba(255,255,255,.04); color: #e9e9ee;
  border: 1px solid rgba(255,255,255,.12); border-radius: 7px;
  padding: 7px 9px; margin-bottom: 5px;
}
.cp-rung:hover { background: rgba(46,139,74,.16); border-color: rgba(46,139,74,.55); }
.cp-rung-t { display: block; font-size: 12px; font-weight: 600; }
.cp-rung-s { display: block; font-size: 10.5px; color: #9a9aa3; line-height: 1.35; margin-top: 1px; }
.cp-rung-sig {
  display: inline-block; margin-top: 4px; padding: 1px 6px;
  font-size: 10px; font-weight: 700; color: #c9c9d2;
  background: rgba(255,255,255,.07); border-radius: 4px;
}

/* A user-placed anchor claims NO tier in the picker. Its σ comes from the ladder on
   the server and its tier is derived from that σ at solve time — so the readout says
   "derived" rather than inventing a grade the picker is in no position to know. */
.cp-ref-tier-derived {
  background: rgba(255,255,255,.07) !important; color: #9a9aa3 !important;
  font-weight: 600; cursor: help;
}

/* --- WT-C: the claim the block audit fingered -----------------------------
 * The whole reason to plot a folder at once is that the odd one out becomes
 * visible against its siblings. Amber against the block's cool blue/violet, so
 * it reads at a glance — and it is still DRAWN, never suppressed: the
 * wrong-looking claim is the most informative thing on the map. */
.cp-audit-chip {
  display: inline-block;
  margin-top: 2px;
  padding: 1px 6px;
  border-radius: 3px;
  font-size: 11px;
  font-weight: 600;
  color: #fff;
  background: #D9480F;
}
.cp-audit-box {
  margin-top: 6px;
  padding: 6px 8px;
  border-left: 3px solid #D9480F;
  border-radius: 3px;
  background: #FFF4ED;
  color: #7A2E08;
  font-size: 12px;
  line-height: 1.35;
}
.cp-audit-box small { color: #99502B; }

/* WT-D — the multi-monument ASK. A lead file names several reference points; the
   claims naming one we do not hold are REFUSED, not hung off a sibling's, and this
   is where we ask for it. Styled as a QUESTION, not an error: it is the normal case. */
.cp-asks {
  margin-top: 10px; padding: 10px 12px; border-radius: 6px;
  border: 1px solid rgba(13, 110, 253, .35); background: rgba(13, 110, 253, .06);
}
.cp-asks-head { font-size: .82rem; margin-bottom: 4px; }
.cp-asks-why { font-size: .74rem; opacity: .8; line-height: 1.35; margin-bottom: 8px; }
.cp-ask { padding: 8px 0; border-top: 1px solid rgba(128, 128, 128, .2); }
.cp-ask:first-of-type { border-top: 0; }
.cp-ask-name { font-weight: 600; font-size: .82rem; }
.cp-ask-quote {
  margin: 4px 0; padding: 4px 8px; font-size: .74rem; font-style: italic;
  border-left: 3px solid rgba(13, 110, 253, .5); opacity: .9;
}
.cp-ask-claims { font-size: .72rem; opacity: .75; margin-bottom: 6px; }
.cp-ask-btn { width: 100%; }

/* ---- P4: block STAGE, the staff verbs, and the processing layer ----------
   The geometry stage (proposed → laid out → processed → materialised →
   documented) is a second axis beside the money/fulfilment status, so it gets
   its own chip rather than competing for the same words. The palette follows
   claim_plot_layers.js: green = of record / monument, blue = the claim
   channel, amber = attention. -------------------------------------------- */
.cp-tb-stage { display:inline-flex; align-items:center; }
.cp-tb-stagechip, .cp-dlg-row-stage {
  display:inline-flex; align-items:center; gap:4px; font-size:10px; font-weight:600;
  letter-spacing:.02em; text-transform:uppercase; border-radius:999px;
  padding:1px 7px; border:1px solid rgba(255,255,255,.16); color:#c9c9d2;
  background:rgba(255,255,255,.06); white-space:nowrap;
}
.cp-dlg-row-stage { margin-left:6px; text-transform:none; letter-spacing:0; font-weight:500; }
.cp-stage-laid_out    { color:#9ec5f2; border-color:rgba(47,109,189,.5);  background:rgba(47,109,189,.14); }
.cp-stage-processed   { color:#f0c98f; border-color:rgba(201,125,16,.5);  background:rgba(201,125,16,.14); }
.cp-stage-materialised{ color:#8fd6a6; border-color:rgba(46,139,74,.55);  background:rgba(46,139,74,.16); }
.cp-stage-documented  { color:#c9aef2; border-color:rgba(125,76,201,.5);  background:rgba(125,76,201,.14); }
.cp-tb-stagechip i { font-size:10px; opacity:.9; }

.cp-lock-of_record { color:#8fd6a6; }
.cp-lock-in_fulfillment { color:#f0c98f; }

.cp-tb-staff { display:inline-flex; align-items:center; gap:6px; }
.cp-tb-staffbtn {
  display:inline-flex; align-items:center; gap:5px; cursor:pointer;
  background:rgba(47,109,189,.18); color:#cfe2fa;
  border:1px solid rgba(47,109,189,.5); border-radius:6px;
  padding:3px 10px; font-size:11.5px; font-weight:600;
}
.cp-tb-staffbtn:hover { background:rgba(47,109,189,.3); }
.cp-tb-staffbtn.is-write { background:rgba(46,139,74,.18); color:#a9e4c0; border-color:rgba(46,139,74,.55); }
.cp-tb-staffbtn.is-write:hover { background:rgba(46,139,74,.3); }
.cp-tb-staffbtn.is-quiet { background:rgba(255,255,255,.05); color:#c9c9d2; border-color:rgba(255,255,255,.14); }

/* The per-kind panel for the processing layer. */
.cp-proc-panel {
  display:flex; flex-direction:column; gap:3px; padding:7px 10px;
  border-top:1px solid rgba(255,255,255,.08); font-size:11.5px; color:#c9c9d2;
}
.cp-proc-head { font-size:10px; text-transform:uppercase; letter-spacing:.04em; color:#9a9aa3; margin-bottom:2px; }
.cp-proc-row { display:flex; align-items:center; gap:6px; cursor:pointer; }
.cp-proc-n { margin-left:auto; color:#9a9aa3; font-variant-numeric:tabular-nums; }
.cp-proc-sw { width:10px; height:10px; border-radius:50%; border:2px solid #2F6DBD; background:#fff; flex:0 0 auto; }
.cp-proc-sw-lm_corner, .cp-proc-sw-discovery { background:#2E8B4A; border-color:#17532c; }
.cp-proc-sw-sideline, .cp-proc-sw-endline { background:#2F6DBD; border-color:#1f4e82; }
.cp-proc-sw-waypoint { background:#C97D10; border-color:#8a5a00; }
.cp-proc-sw-witness { background:#7D4CC9; border-color:#4b2c80; }
.cp-proc-sw-centerline { background:transparent; border-color:#6b6b73; border-style:dashed; }
.cp-proc-warn {
  margin-top:4px; align-self:flex-start; cursor:pointer; font-size:11px; font-weight:600;
  color:#f0c98f; background:rgba(201,125,16,.14);
  border:1px solid rgba(201,125,16,.45); border-radius:6px; padding:2px 8px;
}
/* The permanent stake-number chip on the map. */
.cp-proc-chip {
  background:rgba(18,18,22,.82) !important; color:#e9e9ee !important;
  border:1px solid rgba(255,255,255,.18) !important; border-radius:4px !important;
  padding:0 4px !important; font-size:10px !important; font-weight:600 !important;
  box-shadow:none !important;
}
.cp-proc-chip::before { display:none !important; }

/* The warnings list — severity carries colour AND a word, never colour alone. */
.cp-warnlist { list-style:none; padding:0; margin:8px 0 0; display:flex; flex-direction:column; gap:5px; }
.cp-warn { font-size:11.5px; line-height:1.45; padding:5px 8px; border-radius:6px;
  background:rgba(255,255,255,.04); border-left:3px solid rgba(255,255,255,.2); }
.cp-warn-info { border-left-color:#9ec5f2; }
.cp-warn-warning { border-left-color:#C97D10; }
.cp-warn-error { border-left-color:#D9480F; }
.cp-warn-sev { font-size:9.5px; text-transform:uppercase; letter-spacing:.05em;
  font-weight:700; color:#9a9aa3; margin-right:4px; }
