:root {
  /* ====================================================================
     ANVIL DESIGN TOKEN LAYER  (added 2026-06 — token-only reskin)
     Source of truth: 04_ui_baseline_reference/anvil-studio (27).html (LOCKED).
     New custom properties only; no selectors, no layout, no forced-priority rules.
     The Quick Quote V46.9 variable names below are REMAPPED to these tokens
     (names preserved, values changed only).
     ==================================================================== */
  /* clay — primary brand / action accent (Forge coral retained, clay-led) */
  --coral: #DA8065; --clay: #BC5B38; --clay-deep: #9C4729; --clay-wash: #F6E7DD; --clay-tint: rgba(188,91,56,.10); --clay-line: #E8CFC1; --clay-rgb: 188, 91, 56;
  /* slate — secondary technical / drafting accent */
  --slate: #3F4D5A; --slate-2: #5C6B79; --slate-wash: #E8ECEF; --slate-line: #CFD8DD;
  /* warm linen desk (shell) */
  --linen: #E6DFD0; --linen-2: #DCD4C3; --linen-3: #EEE8DA;
  /* paper — light matte working surfaces */
  --paper-2: #F3EDE0; --paper-3: #FDFBF6; --sheet: #FFFFFF;
  --rule: #E3DAC9; --rule-2: #D0C5AF; --grid: #EAE3D4;
  /* ink ramp (warm charcoal) */
  --ink-2: #564E44; --ink-3: #867C6E; --ink-4: #A99E8D; --ink-5: #CABFAD;
  /* espresso — sparing dark accent */
  --espresso: #2A251F; --espresso-2: #332D25; --espresso-ink: #F2EBDD; --espresso-ink-2: #C7BCA9; --espresso-ink-3: #9B8F7C; --espresso-line: rgba(242,235,221,.14);
  /* semantic status families */
  --ok: #2C7A54; --ok-bg: #E6F0E9; --ok-line: #C4DDCD;
  --warn-bg: #F6ECD6; --warn-line: #E8D3A6;
  --bad-bg: #F7E4DD; --bad-line: #EDC7BC;
  /* elevation */
  --e1: 0 1px 2px rgba(50,36,22,.05); --e2: 0 6px 20px rgba(50,36,22,.08); --e3: 0 18px 46px rgba(35,25,15,.13);
  /* motion */
  --motion-fast: 220ms; --motion-med: 340ms; --motion-slow: 520ms;
  --ease-standard: cubic-bezier(.22,.72,.22,1); --ease-out: cubic-bezier(.16,1,.3,1); --ease-soft: cubic-bezier(.25,.8,.25,1);
  /* typography */
  --serif: 'Fraunces', Georgia, 'Times New Roman', serif;
  --serif-head: 'Newsreader', Georgia, 'Times New Roman', serif;
  --sans: 'Inter', system-ui, -apple-system, sans-serif;
  --mono: 'JetBrains Mono', ui-monospace, monospace;

  /* ====================================================================
     QUICK QUOTE V46.9 VARIABLES — REMAPPED TO ANVIL TOKENS
     Names preserved exactly. Values only changed. Semantics held:
       clay = brand / action   ·   ok = positive / pass
       warn = warning / near break-even   ·   bad = danger / below break-even
     Original V46.9 values kept inline as comments for rollback reference.
     ==================================================================== */
  --forge: var(--clay);            /* brand / action            (was #d98263) */
  --forge-dark: var(--clay-deep);  /* dark brand accent         (was #9f4f38) */
  --ink: #23201B;                  /* primary text              (was #171717) */
  --muted: var(--ink-3);           /* secondary text            (was #68635f) */
  --paper: #FBF7EF;                /* page background / header bar (= #fbf7ef) */
  --card: #f8f4eb;                 /* card surface (2E-DASH-1A-2; --sheet stays #fff for true white) */
  --line: var(--rule);             /* borders                   (was #e7ded8) */
  --soft: var(--paper-2);          /* soft fill                 (was #f5ece6) */
  --good: var(--ok);               /* positive / pass           (was #147a55) */
  --bad: #B2371F;                  /* danger / below break-even (was #b42318) */
  --warn: #956207;                 /* warning / near break-even (was #b56a00) */
  --shadow: var(--e3);             /* large soft elevation      (was 0 20px 70px rgba(26,16,11,.10)) */
  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

* { box-sizing: border-box; }
html {
  /* Phase 2D-NAV-3A-2: paint the page background on the ROOT so it always covers
     the full canvas/viewport. Previously the gradient lived on <body>, whose
     `overflow-x: clip` stops its background propagating to the canvas — so on pages
     shorter than the viewport (Dashboard / Takeoff / Reports) the unpainted area
     below the content showed through as a horizontal seam. Quick Quote is tall
     enough to mask it. Root background fills short and tall pages alike. */
  min-height: 100vh;
  /* Phase 2E-DASH-1A-1: page/canvas base = baseline shell #dcd4c3 (= --linen-2).
     Only the canvas changes; cards keep their lighter surfaces (sheet/paper-2/paper-3),
     and the top-left clay glow + root-canvas seam strategy are preserved. */
  background: radial-gradient(circle at top left, rgba(var(--clay-rgb), .14), transparent 34%), #dcd4c3;
}
body {
  margin: 0;
  color: var(--ink);
  /* `overflow-x: clip` contains the full-bleed 100vw header's gutter so no
     horizontal scrollbar appears. `clip` (not `hidden`) keeps overflow-y visible,
     so page scroll and window.scrollTo are unaffected. Background now lives on
     <html> (above) for reliable full-viewport coverage. */
  overflow-x: clip;
}
.app-shell {
  max-width: 1500px;
  margin: 0 auto;
  padding: 28px;
}
.app-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  margin-bottom: 26px;
}
.brand-lockup {
  display: flex;
  align-items: center;
  gap: 24px;
}
.brand-logo {
  width: 220px;
  max-width: 38vw;
  height: auto;
  filter: drop-shadow(0 10px 20px rgba(0,0,0,.12));
}
.eyebrow {
  text-transform: uppercase;
  letter-spacing: .14em;
  color: var(--forge-dark);
  font-size: 12px;
  font-weight: 800;
  margin: 0 0 6px;
}
h1 {
  margin: 0;
  font-size: clamp(30px, 4vw, 54px);
  line-height: 1;
  letter-spacing: -0.04em;
}
.subtitle {
  margin: 10px 0 0;
  color: var(--muted);
  max-width: 760px;
  font-size: 15px;
}
.header-actions, .button-row {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.btn {
  border: 0;
  background: #2a2725;
  color: white;
  padding: 12px 16px;
  border-radius: 999px;
  font-weight: 800;
  cursor: pointer;
  box-shadow: 0 8px 18px rgba(0,0,0,.12);
}
.btn:hover { transform: translateY(-1px); }
.btn-primary { background: var(--forge); }
.btn-secondary { background: #fff; color: var(--ink); border: 1px solid var(--line); box-shadow: none; }
.btn-danger { background: #fff1f0; color: var(--bad); border: 1px solid #ffd2cc; box-shadow: none; }

.grid {
  display: grid;
  gap: 18px;
  margin-bottom: 18px;
}
.two-col { grid-template-columns: minmax(0, 1.2fr) minmax(360px, .8fr); }
.three-col { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.hero-summary {
  display: grid;
  grid-template-columns: 1.4fr repeat(3, 1fr);
  gap: 16px;
  margin-bottom: 18px;
}
.card, .metric-card {
  background: rgba(255,255,255,.88);
  border: 1px solid rgba(231,222,216,.86);
  border-radius: 26px;
  box-shadow: var(--shadow);
  padding: 20px;
  backdrop-filter: blur(6px);
}
.metric-card {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-height: 128px;
}
.metric-card.primary {
  background: linear-gradient(135deg, #26201d, #5a3329);
  color: white;
}
.metric-label { font-size: 13px; color: var(--muted); font-weight: 800; text-transform: uppercase; letter-spacing: .08em; }
.metric-card.primary .metric-label, .metric-card.primary .metric-sub { color: rgba(255,255,255,.75); }
.metric-card strong { font-size: clamp(24px, 2.6vw, 42px); line-height: 1; letter-spacing: -0.05em; }
.metric-sub { color: var(--muted); font-weight: 700; }
.card-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  border-bottom: 1px solid var(--line);
  margin: -2px 0 16px;
  padding-bottom: 12px;
}
.card-header h2 { margin: 0; font-size: 19px; letter-spacing: -0.02em; }
.card-header span { color: var(--muted); font-size: 13px; font-weight: 700; }
.form-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}
label span, .notes-field span {
  display: block;
  font-size: 12px;
  font-weight: 900;
  color: #4a403b;
  margin: 0 0 7px;
  text-transform: uppercase;
  letter-spacing: .06em;
}
input, textarea {
  width: 100%;
  border: 1px solid var(--line);
  border-radius: 16px;
  padding: 12px 14px;
  background: #fffaf7;
  font: inherit;
  color: var(--ink);
  outline: none;
}
input:focus, textarea:focus {
  border-color: var(--forge);
  box-shadow: 0 0 0 4px rgba(var(--clay-rgb),.14);
}
.input-with-unit { display: flex; align-items: center; }
.input-with-unit input { border-radius: 16px 0 0 16px; }
.input-with-unit > span {
  display: flex;
  align-items: center;
  align-self: stretch;
  padding: 0 12px;
  border: 1px solid var(--line);
  border-left: 0;
  border-radius: 0 16px 16px 0;
  background: var(--soft);
  color: var(--muted);
  font-weight: 900;
  white-space: nowrap;
}
.notes-field { display: block; margin-top: 14px; }
.summary-list { display: grid; gap: 8px; }
.summary-list div {
  display: flex;
  justify-content: space-between;
  gap: 14px;
  align-items: center;
  padding: 12px 14px;
  border-radius: 16px;
  background: #fffaf7;
  border: 1px solid var(--line);
}
.summary-list.compact div { padding: 10px 12px; }
.summary-list span { color: var(--muted); font-weight: 800; font-size: 13px; }
.summary-list strong { font-size: 16px; text-align: right; }
.summary-list .emphasis { background: var(--soft); }
.summary-list .dark { background: #2a2725; color: white; }
.summary-list .dark span { color: rgba(255,255,255,.75); }
.table-card { overflow: hidden; }
.table-wrap { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; font-size: 13px; }
th, td { padding: 11px 10px; text-align: right; border-bottom: 1px solid var(--line); white-space: nowrap; }
th:first-child, td:first-child { text-align: left; color: var(--muted); font-weight: 800; }
th { background: #2a2725; color: #fff; font-weight: 900; }
tbody tr:nth-child(even) td { background: #fffaf7; }
.status-yes { color: var(--good); font-weight: 900; }
.status-no { color: var(--bad); font-weight: 900; }
.positive { color: var(--good); }
.negative { color: var(--bad); }
.warning { color: var(--warn); }
.note-box {
  margin-top: 14px;
  border-left: 4px solid var(--forge);
  background: var(--soft);
  border-radius: 14px;
  padding: 12px 14px;
  color: #4e403a;
}
.note-box p { margin: 5px 0 0; }
details summary {
  cursor: pointer;
  font-weight: 900;
  color: #2a2725;
  font-size: 17px;
}
.settings-grid { margin-top: 16px; }
.saved-quotes { display: grid; gap: 10px; margin-bottom: 14px; }
.saved-item {
  display: grid;
  grid-template-columns: 1fr auto auto auto;
  gap: 8px;
  align-items: center;
  border: 1px solid var(--line);
  border-radius: 16px;
  padding: 10px;
  background: #fffaf7;
}
.saved-title { font-weight: 900; }
.saved-meta { color: var(--muted); font-size: 12px; margin-top: 2px; }
.print-report { display: none; }


.metric-chip {
  margin-top: auto;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 999px;
  background: rgba(var(--clay-rgb),.12);
  border: 1px solid rgba(var(--clay-rgb),.22);
  color: var(--ink);
}
.metric-chip span {
  font-size: 11px;
  font-weight: 900;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--muted);
}
.metric-chip strong {
  font-size: 14px;
  letter-spacing: 0;
  white-space: nowrap;
}
.help-dot {
  appearance: none;
  border: 0;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: #e8ddd6;
  color: #4d433e;
  font-size: 11px;
  line-height: 18px;
  font-weight: 900;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-left: 5px;
  cursor: help;
  position: relative;
  vertical-align: middle;
  box-shadow: none;
  padding: 0;
}
.help-dot::after {
  content: attr(data-tip);
  display: none;
  position: absolute;
  z-index: 50;
  left: 50%;
  bottom: calc(100% + 10px);
  transform: translateX(-50%);
  width: min(300px, 70vw);
  padding: 10px 12px;
  border-radius: 12px;
  background: #2a2725;
  color: #fff;
  font-size: 12px;
  line-height: 1.35;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
  text-align: left;
  white-space: normal;
  box-shadow: 0 14px 32px rgba(0,0,0,.2);
}
.help-dot:hover::after, .help-dot:focus::after { display: block; }
.markup-table-strong table { font-size: 14px; }
.markup-table-strong th, .markup-table-strong td { font-weight: 900; }
.markup-table-strong td:first-child { color: #4a403b; }
.compare-markup-label {
  display: flex;
  flex-direction: column;
  gap: 6px;
  align-items: flex-end;
  color: #fff;
  font-size: 12px;
  font-weight: 900;
}
.compare-markup-label select {
  border: 1px solid rgba(255,255,255,.38);
  border-radius: 999px;
  background: #fffaf7;
  color: var(--ink);
  padding: 6px 10px;
  font-weight: 900;
}
.settings-card.locked #settingsContent {
  opacity: .55;
  filter: grayscale(.2);
}
.settings-card input:disabled {
  background: #eee6e0;
  color: #777;
  cursor: not-allowed;
}
#settingsStatus {
  display: inline-flex;
  margin-left: 8px;
  padding: 4px 9px;
  border-radius: 999px;
  background: #fff1f0;
  color: var(--bad);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: .08em;
}
.settings-card.unlocked #settingsStatus {
  background: #e7f6ef;
  color: var(--good);
}
.settings-warning {
  margin-top: 14px;
  padding: 12px 14px;
  border-radius: 16px;
  border: 1px solid #f0cfc1;
  background: #fff7f2;
  color: #4e403a;
}
.settings-warning p { margin: 6px 0 12px; }
.settings-card.unlocked .settings-warning { display: none; }

@media (max-width: 1100px) {
  .two-col, .three-col, .hero-summary { grid-template-columns: 1fr; }
  .app-header { flex-direction: column; align-items: flex-start; }
  .header-actions { justify-content: flex-start; }
}
@media (max-width: 720px) {
  .app-shell { padding: 16px; }
  .brand-lockup { flex-direction: column; align-items: flex-start; }
  .form-grid { grid-template-columns: 1fr; }
  .saved-item { grid-template-columns: 1fr; }
  .brand-logo { width: 180px; }
}

@media print {
  html, body { background: white; }
  .no-print, .app-header .header-actions, main > section:not(.print-report) { display: none !important; }
  .app-shell { max-width: none; padding: 0; }
  .app-header { display: none; }
  .print-report { display: block; padding: 24px; color: #111; }
  .print-header { display: flex; gap: 18px; align-items: center; border-bottom: 2px solid #222; padding-bottom: 16px; margin-bottom: 18px; }
  .print-header img { width: 160px; }
  .print-header h2 { margin: 0; font-size: 26px; }
  .print-header p { margin: 6px 0 0; color: #555; }
  .print-table { width: 100%; border-collapse: collapse; margin: 14px 0 22px; }
  .print-table th, .print-table td { border: 1px solid #ddd; padding: 8px; text-align: left; }
  .print-table th { background: #f2f2f2; color: #111; }
  .print-table td:last-child { text-align: right; font-weight: 700; }
}

/* v3 polish */
.card { border-color: rgba(231,222,216,.95); }
.summary-list div { min-height: 48px; }
.card-header span { line-height: 1.35; }
.markup-card { overflow: visible; }
.markup-toggle {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 10px;
  margin: 4px 0 16px;
  color: var(--muted);
  font-size: 13px;
  font-weight: 900;
}
.markup-toggle select {
  border: 1px solid var(--line);
  border-radius: 999px;
  background: #fffaf7;
  color: var(--ink);
  padding: 9px 14px;
  font-weight: 900;
  box-shadow: 0 6px 18px rgba(26,16,11,.05);
}
.markup-compare-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 14px;
}
.markup-option-card {
  border: 1px solid var(--line);
  border-radius: 22px;
  background: #fffaf7;
  overflow: hidden;
  box-shadow: 0 12px 34px rgba(26,16,11,.06);
}
.markup-option-card.selected { border-color: rgba(var(--clay-rgb),.45); background: #fff7f2; }
.markup-option-head {
  display: grid;
  gap: 13px;
  padding: 16px 18px;
  background: var(--sheet);
  color: var(--ink);
  border-bottom: 1px solid var(--rule);
}
.markup-option-head .markup-head-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.markup-option-head .markup-head-mode {
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-3);
}
.markup-option-head .markup-head-figures {
  display: flex;
  align-items: flex-end;
  gap: 22px;
  min-height: 54px;
}
.markup-option-head .markup-figure {
  display: grid;
  gap: 4px;
  min-width: 0;
}
.markup-option-head .markup-figure-unit {
  font-family: var(--mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-3);
  line-height: 1;
}
.markup-option-head .markup-figure-value {
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  font-weight: 800;
  letter-spacing: -.02em;
  color: var(--ink);
  line-height: 1;
}
.markup-option-head .markup-figure--primary .markup-figure-value {
  font-size: 30px;
}
.markup-option-head .markup-figure--secondary .markup-figure-value {
  font-size: 17px;
  color: var(--ink-2);
}
.markup-option-card.selected .markup-figure--primary .markup-figure-value {
  color: var(--clay-deep);
}
.markup-option-head .markup-figure-select select {
  appearance: none;
  -webkit-appearance: none;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  font-size: 26px;
  font-weight: 800;
  letter-spacing: -.02em;
  color: var(--ink);
  background-color: var(--paper-2);
  border: 1px solid var(--rule);
  border-radius: 12px;
  padding: 4px 32px 4px 12px;
  line-height: 1.1;
  cursor: pointer;
  background-image: linear-gradient(45deg, transparent 50%, rgba(58,48,43,.8) 50%), linear-gradient(135deg, rgba(58,48,43,.8) 50%, transparent 50%);
  background-position: calc(100% - 16px) 58%, calc(100% - 11px) 58%;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
}
.markup-option-head .markup-figure-select select:hover {
  border-color: rgba(var(--clay-rgb), .55);
}
.markup-option-head .markup-figure-select select:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
.markup-option-head .markup-figure-select select option {
  background: var(--sheet);
  color: var(--ink);
  font-size: 14px;
  font-weight: 700;
}
.markup-option-head span {
  color: var(--ink-3);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: .08em;
  font-weight: 900;
}
.markup-option-head strong { font-size: 18px; white-space: nowrap; }
.markup-metrics { display: grid; gap: 0; }
.markup-metric {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 14px;
  padding: 11px 14px;
  border-top: 1px solid rgba(231,222,216,.8);
}
.markup-metric:first-child { border-top: 0; }
.markup-metric span { color: var(--muted); font-weight: 900; font-size: 12px; line-height: 1.25; }
.markup-metric strong { font-size: 15px; text-align: right; white-space: nowrap; }
.markup-metric.status-yes strong, .status-yes { color: var(--good); font-weight: 900; }
.markup-metric.status-no strong, .status-no { color: var(--bad); font-weight: 900; }
.settings-groups {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
  margin-top: 16px;
}
.settings-group {
  background: #fffaf7;
  border: 1px solid var(--line);
  border-radius: 20px;
  padding: 14px;
  display: grid;
  gap: 10px;
}
.settings-group h3 {
  margin: 0 0 4px;
  font-size: 13px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--forge-dark);
}
.settings-group label { margin: 0; }
.settings-group label > span { margin-bottom: 5px; }
.calculated-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 9px 0;
  border-bottom: 1px solid rgba(231,222,216,.75);
}
.calculated-row:last-child { border-bottom: 0; }
.calculated-row span { color: var(--muted); font-weight: 800; font-size: 12px; }
.calculated-row strong { font-size: 13px; text-align: right; }
.settings-card.locked #settingsContent { opacity: .50; filter: grayscale(.18); }
.settings-card.unlocked #settingsContent { opacity: 1; filter: none; }
@media (max-width: 980px) {
  .markup-compare-grid, .settings-groups { grid-template-columns: 1fr; }
  .markup-toggle { justify-content: flex-start; flex-wrap: wrap; }
}
@media print {
  .markup-toggle, .markup-card { break-inside: avoid; }
}

/* v4 polish */
.help-dot::after {
  bottom: auto;
  top: calc(100% + 10px);
  left: 50%;
  transform: translateX(-50%);
}
.help-dot::before {
  content: '';
  display: none;
  position: absolute;
  z-index: 51;
  left: 50%;
  top: calc(100% + 4px);
  transform: translateX(-50%);
  border-left: 6px solid transparent;
  border-right: 6px solid transparent;
  border-bottom: 6px solid #2a2725;
}
.help-dot:hover::before, .help-dot:focus::before { display: block; }
input[data-no-tooltip], textarea[data-no-tooltip] { pointer-events: auto; }

textarea {
  resize: none;
  overflow: hidden;
  min-height: 112px;
  line-height: 1.45;
  transition: height 0.18s ease;
}
.notes-field { overflow: visible; }

.notes-expand-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-top: 6px;
  padding: 4px 10px 4px 8px;
  background: none;
  border: 1px solid var(--line);
  border-radius: 20px;
  font: 600 11px/1 inherit;
  color: var(--muted);
  cursor: pointer;
  letter-spacing: 0.01em;
  transition: color 0.14s, border-color 0.14s, background 0.14s;
}
.notes-expand-btn:hover {
  color: var(--forge);
  border-color: var(--forge);
  background: rgba(var(--clay-rgb),.06);
}
.notes-expand-btn svg {
  width: 11px; height: 11px;
  transition: transform 0.18s ease;
  flex-shrink: 0;
}
.notes-expand-btn.expanded svg { transform: rotate(180deg); }

/* Fade + slide up animation on result numbers */
@keyframes forge-num-update {
  0%   { opacity: 0; transform: translateY(5px); }
  100% { opacity: 1; transform: translateY(0); }
}
.num-updated {
  animation: forge-num-update 0.22s cubic-bezier(0.22, 1, 0.36, 1) both;
}

/* Input focus ring — subtle pulse to confirm capture */
input:focus, textarea:focus {
  border-color: var(--forge);
  box-shadow: 0 0 0 4px rgba(var(--clay-rgb),.14);
}

.markup-card .card-header { margin-bottom: 12px; }
.markup-toggle { margin: 2px 0 18px; }
.markup-compare-grid { align-items: stretch; }
.markup-option-card {
  position: relative;
  overflow: visible;
}
.markup-option-card.selected {
  border-color: rgba(var(--clay-rgb),.95);
  background: linear-gradient(180deg, #fff7f2, #fffaf7);
  box-shadow: 0 18px 48px rgba(var(--clay-rgb),.18), 0 8px 22px rgba(26,16,11,.06);
  transform: translateY(-2px);
}
.markup-option-card.compare { opacity: .96; }
.markup-option-head {
  padding: 16px 18px;
  border-radius: 21px 21px 0 0;
}
.markup-option-card.selected .markup-option-head {
  background: linear-gradient(180deg, var(--clay-wash), var(--sheet) 62%);
  border-top: 3px solid var(--clay);
}
.markup-option-title {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.active-badge {
  display: inline-flex;
  align-items: center;
  border-radius: 999px;
  background: rgba(255,255,255,.18);
  color: #fff;
  padding: 4px 8px;
  font-size: 10px;
  line-height: 1;
  letter-spacing: .08em;
  text-transform: uppercase;
  font-weight: 900;
  border: 1px solid rgba(255,255,255,.22);
}
.markup-primary-metrics,
.markup-details-content {
  display: grid;
  gap: 0;
}
.markup-metric.primary-line {
  padding: 13px 15px;
}
.markup-metric.primary-line strong { font-size: 16px; }
.markup-metric.target-result {
  background: rgba(var(--clay-rgb),.09);
}
.markup-details {
  border-top: 1px solid rgba(231,222,216,.8);
  background: rgba(245,236,230,.48);
}
.markup-details summary {
  list-style: none;
  cursor: pointer;
  padding: 12px 15px;
  font-size: 12px;
  font-weight: 900;
  color: var(--forge-dark);
  text-transform: uppercase;
  letter-spacing: .08em;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.markup-details summary::-webkit-details-marker { display: none; }
.markup-details summary::after {
  content: '+';
  font-size: 16px;
  color: var(--forge-dark);
}
.markup-details[open] summary::after { content: '−'; }
.markup-details .markup-metric {
  padding: 10px 15px;
  background: rgba(255,250,247,.65);
}

.button-row .btn,
.header-actions .btn { white-space: nowrap; }

.print-report { background: #fff; }
.print-shell {
  font-family: Inter, Arial, sans-serif;
  color: #171717;
  max-width: 900px;
  margin: 0 auto;
}

@media print {
  .print-report { padding: 0; }
  .print-header {
    background: linear-gradient(135deg, #26201d, #5a3329);
    color: white;
    border-bottom: 0;
    padding: 20px 24px;
    border-radius: 18px;
  }
  .print-header p { color: rgba(255,255,255,.75); }
  .print-table th { background: #fff7f2; color: #3b302b; }
}
.muted-badge { background: rgba(255,255,255,.10); color: rgba(255,255,255,.72); }

/* v5 refinements */
.side-stack {
  display: grid;
  gap: 18px;
  align-content: start;
}
.recovery-card {
  background: linear-gradient(135deg, #fff7f2, #fffaf7);
  border-color: rgba(var(--clay-rgb),.38);
  box-shadow: 0 16px 42px rgba(var(--clay-rgb),.11), 0 10px 28px rgba(26,16,11,.05);
}
.recovery-card .compact-header {
  margin-bottom: 8px;
  padding-bottom: 10px;
}
.recovery-card strong {
  display: block;
  font-size: clamp(28px, 3vw, 42px);
  line-height: 1;
  letter-spacing: -0.05em;
  color: #2a2725;
}
.recovery-card > span {
  display: block;
  color: var(--muted);
  font-weight: 800;
  margin-top: 8px;
  font-size: 13px;
}
.totals-priority {
  border-color: rgba(42,39,37,.14);
}
.totals-priority .card-header h2::after {
  content: 'Primary Xero entry area';
  display: inline-flex;
  vertical-align: middle;
  margin-left: 10px;
  padding: 4px 9px;
  border-radius: 999px;
  background: rgba(var(--clay-rgb),.13);
  color: var(--forge-dark);
  font-size: 10px;
  letter-spacing: .08em;
  text-transform: uppercase;
}
.summary-list .xero-main {
  background: linear-gradient(135deg, #fff1ea, #f9e4d9);
  border-color: rgba(var(--clay-rgb),.42);
}
.summary-list .xero-main span {
  color: #704030;
}
.summary-list .xero-main strong {
  font-size: 20px;
}
.visually-hidden {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}
.compare-title-select {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  white-space: nowrap;
}
.compare-title-select select {
  appearance: none;
  border: 1px solid rgba(255,255,255,.38);
  background: rgba(255,255,255,.12);
  color: white;
  border-radius: 999px;
  padding: 7px 28px 7px 12px;
  font-weight: 1000;
  font-size: 17px;
  cursor: pointer;
  background-image: linear-gradient(45deg, transparent 50%, #fff 50%), linear-gradient(135deg, #fff 50%, transparent 50%);
  background-position: calc(100% - 14px) 52%, calc(100% - 9px) 52%;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
}
.compare-title-select select option {
  color: #171717;
  background: #fffaf7;
}
.compare-title-select span {
  color: rgba(255,255,255,.86);
  font-size: 12px;
  font-weight: 900;
  text-transform: uppercase;
  letter-spacing: .08em;
}
.markup-option-card.compare .markup-option-head {
  background: linear-gradient(180deg, var(--slate-wash), var(--sheet) 62%);
  border-top: 3px solid var(--espresso);
}
.help-dot::after,
.help-dot::before {
  content: none !important;
  display: none !important;
}
.floating-help-tip {
  position: fixed;
  z-index: 9999;
  display: none;
  width: min(310px, calc(100vw - 24px));
  padding: 11px 13px;
  border-radius: 14px;
  background: #2a2725;
  color: white;
  box-shadow: 0 18px 40px rgba(0,0,0,.24);
  font-size: 12px;
  line-height: 1.38;
  font-weight: 750;
  pointer-events: none;
}
.markup-option-card .help-dot {
  transform: translateY(-1px);
}
.markup-card .card-header {
  overflow: visible;
}
@media (max-width: 1100px) {
  .side-stack { grid-template-columns: 1fr; }
}

/* v6 refinements */
.input-with-unit > span {
  min-width: 104px;
  justify-content: center;
  text-align: center;
}
.input-card .input-with-unit > span {
  min-width: 90px;
}
.settings-card .input-with-unit > span {
  min-width: 108px;
}
.metric-label,
.card-header h2,
.summary-list span,
.markup-metric span {
  text-wrap: balance;
}
.floating-help-tip {
  max-width: 320px;
}
.help-dot {
  flex: 0 0 auto;
}
.markup-option-title .help-dot,
.markup-option-head .help-dot {
  margin-left: 2px;
}
.compare-title-select select {
  min-width: 86px;
  text-align: center;
}
.summary-list .emphasis strong,
.summary-list .dark strong {
  font-size: 18px;
}

/* v7 refinements */
.advanced-job-settings {
  margin-top: 16px;
  border: 1px solid rgba(var(--clay-rgb),.24);
  border-radius: 20px;
  background: linear-gradient(180deg, #fff7f2, #fffaf7);
  overflow: hidden;
}
.advanced-job-settings > summary {
  list-style: none;
  padding: 14px 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  cursor: pointer;
  font-size: 13px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--forge-dark);
  border-bottom: 1px solid rgba(var(--clay-rgb),.16);
}
.advanced-job-settings > summary::-webkit-details-marker { display: none; }
.advanced-job-settings > summary::after {
  content: '+';
  width: 24px;
  height: 24px;
  border-radius: 999px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: rgba(var(--clay-rgb),.15);
  color: var(--forge-dark);
  font-size: 18px;
  line-height: 1;
}
.advanced-job-settings[open] > summary::after { content: '−'; }
.advanced-grid { padding: 14px; }
.field-hint {
  display: block;
  margin-top: 6px;
  color: var(--muted);
  font-size: 11px;
  font-weight: 800;
}
.break-even-card {
  background: linear-gradient(180deg, #fff8f7, #fffaf7);
  border-color: rgba(180,35,24,.24);
  box-shadow: 0 18px 48px rgba(180,35,24,.06), 0 12px 34px rgba(26,16,11,.05);
}
.break-even-card .card-header {
  border-bottom-color: rgba(180,35,24,.16);
}
.break-even-card .card-header h2::before {
  content: '!';
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  margin-right: 8px;
  background: #fff1f0;
  color: var(--bad);
  font-size: 12px;
  font-weight: 1000;
  border: 1px solid #ffd2cc;
}
.break-even-card .summary-list div {
  border-color: rgba(180,35,24,.16);
}
.break-even-card .summary-list strong {
  color: var(--bad);
}
.break-even-card .note-box {
  border-left-color: var(--bad);
  background: #fff1f0;
}
.markup-option-card {
  font-size: 15px;
}
.markup-option-head strong,
.compare-title-select select {
  font-size: 19px;
}
.markup-metric span {
  font-size: 13px;
}
.markup-metric strong {
  font-size: 17px;
  font-weight: 1000;
}
.markup-metric.primary-line {
  padding: 14px 16px;
}
.markup-details .markup-metric {
  padding: 11px 16px;
}
.floating-help-tip {
  transform: translateY(2px);
}
input:hover + .floating-help-tip,
.input-with-unit:hover .floating-help-tip {
  display: none !important;
}

/* v8 refinements */
.input-with-unit {
  align-items: stretch;
}
.input-with-unit input {
  min-height: 48px;
}
.input-with-unit > span {
  min-height: 48px;
  height: auto;
  align-self: stretch;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.floating-help-tip {
  pointer-events: none;
  z-index: 10000;
}
.help-dot::after,
.help-dot::before {
  display: none !important;
  content: none !important;
}
.markup-option-card .help-dot {
  pointer-events: auto;
}
.markup-primary-metrics .markup-metric span,
.markup-details-content .markup-metric span {
  font-size: 13.5px;
  font-weight: 1000;
}
.markup-primary-metrics .markup-metric strong,
.markup-details-content .markup-metric strong {
  font-size: 18px;
  font-weight: 1000;
}
.markup-details summary {
  font-size: 13px;
  font-weight: 1000;
}


/* v9 polish */
.brand-logo {
  width: 265px;
  max-width: 42vw;
}
h1 {
  font-size: clamp(24px, 3.1vw, 40px);
  letter-spacing: -0.035em;
}
.subtitle {
  max-width: 680px;
}
.input-with-unit {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 94px;
  align-items: stretch;
}
.input-with-unit input {
  min-width: 0;
  height: 42px;
  min-height: 42px;
  padding-top: 0;
  padding-bottom: 0;
  box-sizing: border-box;
  border-radius: 16px 0 0 16px;
}
.input-with-unit > span,
.input-card .input-with-unit > span,
.settings-card .input-with-unit > span {
  min-width: 0;
  width: 94px;
  height: 42px;
  min-height: 42px;
  box-sizing: border-box;
  align-self: stretch;
  justify-content: center;
  padding: 0 9px;
  border-radius: 0 16px 16px 0;
}
.settings-card .input-with-unit {
  grid-template-columns: minmax(0, 1fr) 108px;
}
.settings-card .input-with-unit > span {
  width: 108px;
}
.markup-option-head {
  min-height: 96px;
}
.markup-option-head strong {
  font-weight: 900;
}
.compare-title-select {
  display: inline-grid;
  grid-template-columns: auto auto;
  align-items: center;
  gap: 8px;
  background: #2a2725;
  border: 1px solid rgba(255,255,255,.18);
  border-radius: 999px;
  padding: 4px 8px 4px 4px;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.06);
}
.compare-title-select select {
  min-width: 74px;
  border-color: rgba(255,255,255,.28);
  background-color: #2a2725;
  color: white;
  border-radius: 999px;
  padding: 5px 25px 5px 10px;
  font-size: 14px;
  line-height: 1;
  font-weight: 900;
}
.compare-title-select span {
  font-size: 12px;
  color: rgba(255,255,255,.86);
  letter-spacing: .08em;
}
.markup-primary-metrics .markup-metric span,
.markup-details-content .markup-metric span,
.markup-metric span {
  font-size: 13.5px;
  font-weight: 950;
  color: #463d38;
}
.markup-primary-metrics .markup-metric strong,
.markup-details-content .markup-metric strong,
.markup-metric strong {
  font-size: 16px;
  font-weight: 800;
  letter-spacing: -0.015em;
}
.markup-metric.primary-line strong {
  font-size: 16.5px;
  font-weight: 820;
}
.markup-details summary {
  font-size: 13px;
  font-weight: 950;
}
.markup-option-card .help-dot,
.markup-card .help-dot {
  pointer-events: auto !important;
}
.floating-help-tip {
  pointer-events: none;
}

/* v11 final polish */
.input-with-unit {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 94px;
  align-items: stretch;
}
.input-with-unit input {
  height: 42px;
  min-height: 42px;
  line-height: 42px;
  padding-top: 0;
  padding-bottom: 0;
  box-sizing: border-box;
  border-radius: 16px 0 0 16px;
}
.input-with-unit > span,
.input-card .input-with-unit > span,
.settings-card .input-with-unit > span {
  height: 42px;
  min-height: 42px;
  line-height: 42px;
  box-sizing: border-box;
  align-self: stretch;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 0 16px 16px 0;
  margin: 0;
  transform: none;
}
.settings-card .input-with-unit {
  grid-template-columns: minmax(0, 1fr) 108px;
}
.settings-card .input-with-unit > span {
  width: 108px;
}

/* v12 compare markup header polish */
.markup-option-card.compare .markup-option-head {
  background: linear-gradient(180deg, var(--slate-wash), var(--sheet) 62%);
  border-top: 3px solid var(--espresso);
}
.compare-value-select {
  display: grid;
  gap: 4px;
  justify-items: end;
  color: #fff;
}
.compare-value-select select {
  appearance: none;
  -webkit-appearance: none;
  border: 1px solid var(--rule);
  background-color: var(--sheet);
  color: var(--ink);
  border-radius: 999px;
  padding: 8px 30px 8px 14px;
  min-width: 76px;
  line-height: 1;
  font-size: 16px;
  font-weight: 900;
  text-align: center;
  cursor: pointer;
  box-shadow: 0 1px 2px rgba(40,28,16,.06);
  background-image: linear-gradient(45deg, transparent 50%, rgba(58,48,43,.85) 50%), linear-gradient(135deg, rgba(58,48,43,.85) 50%, transparent 50%);
  background-position: calc(100% - 14px) 52%, calc(100% - 9px) 52%;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
}
.compare-value-select select:hover,
.compare-value-select select:focus {
  border-color: rgba(var(--clay-rgb),.78);
  outline: none;
}
.compare-value-select select option {
  background: #fffaf7;
  color: #171717;
}
.compare-value-select span {
  color: rgba(255,255,255,.95);
  font-size: 17px;
  font-weight: 900;
  letter-spacing: -0.02em;
  text-transform: none;
}
.markup-option-card.compare .markup-option-title {
  align-items: center;
}
@media (max-width: 720px) {
  .compare-value-select span { font-size: 15px; }
  .compare-value-select select { font-size: 15px; min-width: 72px; }
}

/* v13 requested-only corrections: restore input sizing and flush unit tags */
.input-with-unit {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 94px;
  align-items: stretch;
}
.input-with-unit input {
  height: 48px;
  min-height: 48px;
  line-height: 48px;
  padding-top: 0;
  padding-bottom: 0;
  box-sizing: border-box;
  border-radius: 16px 0 0 16px;
}
.input-card .input-with-unit > span,
.input-with-unit > span {
  height: 48px;
  min-height: 48px;
  line-height: 48px;
  width: 94px;
  min-width: 94px;
  box-sizing: border-box;
  align-self: stretch;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 0 16px 16px 0;
  margin: 0;
  transform: none;
}
.settings-card .input-with-unit {
  grid-template-columns: minmax(0, 1fr) 108px;
}
.settings-card .input-with-unit > span {
  height: 48px;
  min-height: 48px;
  line-height: 48px;
  width: 108px;
  min-width: 108px;
}


/* v17 markup/margin clarity */
.input-with-unit.has-margin-chip {
  position: relative;
}
.input-with-unit.has-margin-chip input {
  padding-right: 142px;
}
.input-with-unit.has-margin-chip .margin-equivalent-chip {
  position: absolute;
  right: calc(94px + 36px);
  top: 50%;
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 4px 8px;
  border-radius: 999px;
  background: rgba(var(--clay-rgb),.13);
  color: var(--forge-dark);
  border: 1px solid rgba(var(--clay-rgb),.22);
  font-size: 10.5px;
  line-height: 1;
  font-weight: 900;
  font-style: normal;
  white-space: nowrap;
  pointer-events: none;
  box-shadow: 0 4px 10px rgba(26,16,11,.04);
}
.settings-card .input-with-unit.has-margin-chip input {
  padding-right: 156px;
}
.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: calc(108px + 36px);
}
.markup-head-right {
  display: grid;
  justify-items: end;
  gap: 10px;
  min-width: 0;
}
.markup-head-value-wrap {
  display: grid;
  gap: 4px;
  justify-items: end;
}
.markup-option-head .markup-head-sublabel {
  font-family: var(--mono);
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--ink-3);
  line-height: 1;
}
.markup-margin-badge {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  padding: 5px 9px;
  background: var(--paper-2);
  border: 1px solid var(--rule);
  color: var(--ink-3) !important;
  font-size: 10.5px !important;
  line-height: 1 !important;
  font-weight: 900 !important;
  letter-spacing: .04em !important;
  text-transform: uppercase !important;
  white-space: nowrap;
}
.markup-option-card.selected .markup-margin-badge {
  background: var(--clay-tint);
  border-color: var(--clay-line);
}
.markup-option-head {
  align-items: center;
}
@media (max-width: 720px) {
  .input-with-unit.has-margin-chip input {
    padding-right: 14px;
  }
  .input-with-unit.has-margin-chip .margin-equivalent-chip {
    position: static;
    transform: none;
    grid-column: 1 / -1;
    justify-self: end;
    margin-top: 6px;
  }
  .markup-option-head { flex-wrap: wrap; }
  .markup-head-right { justify-items: start; }
}

/* v18 collapsible detail cards + margin chip spacing */
.input-with-unit.has-margin-chip .margin-equivalent-chip {
  right: calc(94px + 18px);
}
.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: calc(108px + 18px);
}
.collapsible-card {
  transition: box-shadow .25s ease, transform .25s ease, background .25s ease;
}
.collapsible-card:hover {
  transform: translateY(-1px);
}
.collapsible-card-header {
  align-items: center;
  margin-bottom: 0;
}
.collapsible-card-header h2 {
  line-height: 1.12;
}
.collapse-toggle {
  appearance: none;
  border: 1px solid rgba(var(--clay-rgb),.24);
  background: rgba(var(--clay-rgb),.10);
  color: var(--forge-dark);
  border-radius: 999px;
  padding: 7px 9px 7px 12px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  line-height: 1;
  font-weight: 900;
  text-transform: uppercase;
  letter-spacing: .06em;
  cursor: pointer;
  white-space: nowrap;
}
.collapse-toggle i {
  display: inline-block;
  font-style: normal;
  font-size: 14px;
  line-height: 1;
  transition: transform .28s ease;
  transform-origin: center;
  margin-top: -1px;
}
.collapsible-content {
  display: grid;
  grid-template-rows: 0fr;
  opacity: 0;
  margin-top: 0;
  transition: grid-template-rows .36s cubic-bezier(.2,.8,.2,1), opacity .24s ease, margin-top .36s ease;
}
.collapsible-inner {
  overflow: hidden;
  min-height: 0;
}
.collapsible-card.is-open .collapsible-content {
  grid-template-rows: 1fr;
  opacity: 1;
  margin-top: 16px;
}
.collapsible-card.is-open .collapse-toggle i {
  transform: rotate(180deg);
}
.collapsible-card.is-open .collapse-toggle {
  background: rgba(var(--clay-rgb),.16);
  border-color: rgba(var(--clay-rgb),.34);
}
@media (max-width: 720px) {
  .input-with-unit.has-margin-chip .margin-equivalent-chip {
    right: auto;
  }
}

/* v19: allow collapsible detail cards to expand individually without stretching neighbouring cards */
.grid.three-col {
  align-items: start;
}
.grid.three-col > .card {
  align-self: start;
}

/* v20: independent analysis columns and centred dropdown icons */
.analysis-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(340px, .75fr);
  gap: 18px;
  align-items: start;
  margin-bottom: 18px;
}
.analysis-left,
.analysis-right {
  display: grid;
  gap: 18px;
  align-items: start;
}
.detail-mini-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
  align-items: start;
}
.detail-mini-grid > .card,
.analysis-right > .card {
  align-self: start;
}
.collapse-toggle {
  padding: 7px 9px 7px 12px;
  align-items: center;
}
.collapse-toggle i {
  width: 18px;
  height: 18px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  margin-top: 0;
  transform-origin: 50% 50%;
}
.advanced-job-settings > summary::after {
  display: grid;
  place-items: center;
  line-height: 24px;
  text-align: center;
  padding-bottom: 1px;
  box-sizing: border-box;
}
.advanced-job-settings[open] > summary::after {
  padding-bottom: 3px;
}
@media (max-width: 1100px) {
  .analysis-layout,
  .detail-mini-grid {
    grid-template-columns: 1fr;
  }
}

/* v21: make Advanced Job Settings match other smooth dropdown cards */
.grid.two-col {
  align-items: start;
}
.advanced-job-settings {
  margin-top: 16px;
  border: 1px solid rgba(var(--clay-rgb),.24);
  border-radius: 20px;
  background: linear-gradient(180deg, #fff7f2, #fffaf7);
  overflow: hidden;
  padding: 0;
  box-shadow: none;
}
.advanced-job-settings:hover {
  transform: none;
}
.advanced-job-header {
  padding: 14px 16px;
  margin: 0;
  border-bottom: 1px solid rgba(var(--clay-rgb),.16);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.advanced-job-header h3 {
  margin: 0;
  font-size: 13px;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--forge-dark);
  font-weight: 900;
}
.advanced-job-settings .collapse-toggle {
  flex: 0 0 auto;
}
.advanced-job-settings .collapsible-content {
  margin-top: 0;
}
.advanced-job-settings.is-open .collapsible-content {
  margin-top: 0;
}
.advanced-job-settings .advanced-grid {
  padding: 14px;
}
.advanced-job-settings.is-open .advanced-job-header {
  border-bottom-color: rgba(var(--clay-rgb),.18);
}
@media (max-width: 720px) {
  .advanced-job-header {
    align-items: flex-start;
  }
}

/* v22 polish: centered dropdown arrows, sharper dropdown text, custom markup steppers */
.collapse-toggle {
  min-height: 32px;
  padding: 0 8px 0 13px;
  align-items: center;
  gap: 7px;
  font-size: 11.5px;
  line-height: 1;
  font-weight: 950;
  letter-spacing: .055em;
  -webkit-font-smoothing: antialiased;
  text-rendering: geometricPrecision;
}
.collapse-toggle span {
  display: inline-flex;
  align-items: center;
  line-height: 1;
  transform: translateY(.2px);
}
.collapse-toggle i {
  font-size: 0 !important;
  line-height: 0 !important;
  width: 18px;
  height: 18px;
  display: inline-grid;
  place-items: center;
  margin: 0;
  transform: none !important;
}
.collapse-toggle i::before {
  content: '⌄';
  display: block;
  font-size: 13px;
  line-height: 1;
  font-weight: 950;
  transform: translateY(-.5px) rotate(0deg);
  transform-origin: 50% 52%;
  transition: transform .28s ease;
}
.collapsible-card.is-open .collapse-toggle i::before {
  transform: translateY(.5px) rotate(180deg);
}

.input-with-unit.has-custom-stepper input::-webkit-outer-spin-button,
.input-with-unit.has-custom-stepper input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
.input-with-unit.has-custom-stepper input {
  appearance: textfield;
  -moz-appearance: textfield;
  padding-right: 150px;
}
.input-with-unit.has-custom-stepper .margin-equivalent-chip {
  right: calc(94px + 18px);
}
.input-with-unit.has-custom-stepper .markup-stepper {
  position: absolute;
  right: 94px;
  top: 50%;
  transform: translateY(-50%);
  width: 16px;
  height: 32px;
  display: grid;
  grid-template-rows: 1fr 1fr;
  border: 1px solid rgba(var(--clay-rgb),.24);
  border-radius: 8px;
  overflow: hidden;
  background: rgba(255,250,247,.88);
  box-shadow: 0 3px 8px rgba(26,16,11,.04);
  z-index: 3;
}
.input-with-unit.has-custom-stepper .markup-stepper button {
  appearance: none;
  border: 0;
  padding: 0;
  margin: 0;
  display: grid;
  place-items: center;
  background: transparent;
  color: var(--forge-dark);
  font-size: 7.5px;
  line-height: 1;
  cursor: pointer;
}
.input-with-unit.has-custom-stepper .markup-stepper button + button {
  border-top: 1px solid rgba(var(--clay-rgb),.18);
}
.input-with-unit.has-custom-stepper .markup-stepper button:hover {
  background: rgba(var(--clay-rgb),.12);
}
.settings-card .input-with-unit.has-custom-stepper input,
.input-with-unit.settings-margin-chip.has-custom-stepper input {
  padding-right: 164px;
}
.settings-card .input-with-unit.has-custom-stepper .margin-equivalent-chip,
.input-with-unit.settings-margin-chip.has-custom-stepper .margin-equivalent-chip {
  right: calc(108px + 18px);
}
.settings-card .input-with-unit.has-custom-stepper .markup-stepper,
.input-with-unit.settings-margin-chip.has-custom-stepper .markup-stepper {
  right: 108px;
}
@media (max-width: 720px) {
  .input-with-unit.has-custom-stepper input {
    padding-right: 14px;
  }
  .input-with-unit.has-custom-stepper .markup-stepper {
    position: static;
    transform: none;
    grid-column: 1 / -1;
    justify-self: end;
    margin-top: 6px;
    height: 28px;
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 1fr;
    width: 54px;
  }
  .input-with-unit.has-custom-stepper .markup-stepper button + button {
    border-top: 0;
    border-left: 1px solid rgba(var(--clay-rgb),.18);
  }
}

/* v23: restore native markup input arrows, keep margin chip just left of arrows, fix dropdown arrow centering, restore independent analysis layout */
.input-with-unit.has-margin-chip input {
  padding-right: 158px;
}
.input-with-unit.has-margin-chip .margin-equivalent-chip {
  right: calc(94px + 32px);
  z-index: 2;
}
.settings-card .input-with-unit.has-margin-chip input,
.input-with-unit.settings-margin-chip input {
  padding-right: 172px;
}
.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: calc(108px + 32px);
}

/* Make sure the old custom stepper styling cannot affect restored native controls */
.input-with-unit .markup-stepper { display: none !important; }

.collapse-toggle {
  min-height: 34px;
  padding: 0 10px 0 14px;
  gap: 8px;
  font-size: 11px;
  line-height: 1;
  font-weight: 850;
  letter-spacing: .07em;
  font-family: inherit;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
.collapse-toggle span {
  display: inline-flex;
  align-items: center;
  height: 18px;
  line-height: 18px;
  transform: none !important;
}
.collapse-toggle i {
  width: 18px;
  height: 18px;
  display: inline-grid !important;
  place-items: center;
  margin: 0 !important;
  font-size: 0 !important;
  line-height: 0 !important;
  transform: none !important;
}
.collapse-toggle i::before {
  content: '' !important;
  width: 7px;
  height: 7px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
  transform-origin: 50% 50%;
  transition: transform .28s ease;
}
.collapsible-card.is-open .collapse-toggle i::before {
  transform: translateY(2px) rotate(225deg);
}

.analysis-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(340px, .75fr);
  gap: 18px;
  align-items: start;
  margin-bottom: 18px;
}
.analysis-left,
.analysis-right {
  display: grid;
  gap: 18px;
  align-items: start;
}
.detail-mini-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 18px;
  align-items: start;
}
.detail-mini-grid > .card,
.analysis-left > .card,
.analysis-right > .card {
  align-self: start;
}
@media (max-width: 1100px) {
  .analysis-layout,
  .detail-mini-grid {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 720px) {
  .input-with-unit.has-margin-chip input {
    padding-right: 14px;
  }
  .input-with-unit.has-margin-chip .margin-equivalent-chip {
    position: static;
    transform: none;
    grid-column: 1 / -1;
    justify-self: end;
    margin-top: 6px;
    right: auto;
  }
}

/* v24 layout and input polish */
.quote-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.45fr) minmax(360px, .75fr);
  gap: 18px;
  align-items: start;
  margin-bottom: 18px;
}
.quote-left,
.quote-right {
  display: grid;
  gap: 18px;
  align-items: start;
}
.quote-left > .card,
.quote-right > .card,
.quote-left .analysis-left,
.quote-right .analysis-right {
  align-self: start;
}
.quote-left .analysis-left,
.quote-right .analysis-right {
  display: grid;
  gap: 18px;
}
.quote-right .side-stack {
  display: grid;
  gap: 18px;
}
@media (max-width: 1100px) {
  .quote-layout { grid-template-columns: 1fr; }
}

/* Keep total control size the same, but give the input area more room for native arrows */
.input-with-unit {
  grid-template-columns: minmax(0, 1fr) 86px;
}
.input-with-unit > span,
.input-card .input-with-unit > span {
  width: 86px;
  min-width: 86px;
}
.settings-card .input-with-unit {
  grid-template-columns: minmax(0, 1fr) 104px;
}
.settings-card .input-with-unit > span {
  width: 104px;
  min-width: 104px;
}
.input-with-unit.has-margin-chip input {
  padding-right: 150px;
}
.input-with-unit.has-margin-chip .margin-equivalent-chip {
  right: calc(86px + 30px);
}
.settings-card .input-with-unit.has-margin-chip input,
.input-with-unit.settings-margin-chip input {
  padding-right: 164px;
}
.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: calc(104px + 30px);
}

/* Estimated time split picker */
.duration-picker.input-with-unit {
  display: grid;
  grid-template-columns: 1fr 1fr;
  height: 48px;
  min-height: 48px;
  border: 1px solid var(--line);
  border-radius: 16px;
  overflow: hidden;
  background: #fffaf7;
}
.duration-picker input[type="hidden"] { display: none; }
.duration-segment {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 58px;
  min-width: 0;
  height: 48px;
}
.duration-segment:first-of-type {
  border-right: 1px solid var(--line);
}
.duration-segment select {
  appearance: none;
  -webkit-appearance: none;
  border: 0;
  border-radius: 0;
  background: #fffaf7;
  color: var(--ink);
  padding: 0 26px 0 14px;
  height: 48px;
  min-width: 0;
  font: inherit;
  font-weight: 800;
  outline: none;
  background-image: linear-gradient(45deg, transparent 50%, #8a6150 50%), linear-gradient(135deg, #8a6150 50%, transparent 50%);
  background-position: calc(100% - 15px) 52%, calc(100% - 10px) 52%;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
}
.duration-segment span {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 48px;
  border-left: 1px solid var(--line);
  background: var(--soft);
  color: var(--muted);
  font-size: 12px;
  font-weight: 900;
  white-space: nowrap;
}
.duration-segment select:focus {
  box-shadow: inset 0 0 0 3px rgba(var(--clay-rgb),.14);
}

/* Refine dropdown button arrows and copy */
.collapse-toggle {
  min-height: 34px;
  font-size: 11.4px;
  font-weight: 920;
  letter-spacing: .062em;
}
.collapse-toggle i::before {
  transform: translateY(.2px) rotate(45deg);
}
.collapsible-card.is-open .collapse-toggle i::before {
  transform: translateY(.2px) rotate(225deg);
}

/* Markup comparison output values to match detail card output weight */
.markup-primary-metrics .markup-metric strong,
.markup-details-content .markup-metric strong,
.markup-metric strong,
.markup-metric.primary-line strong {
  font-size: 16px !important;
  font-weight: 750 !important;
  letter-spacing: -0.01em;
}
.markup-primary-metrics .markup-metric span,
.markup-details-content .markup-metric span,
.markup-metric span {
  font-size: 13.5px !important;
  font-weight: 930 !important;
}
.markup-metric.status-yes strong,
.markup-metric.status-no strong,
.status-yes,
.status-no {
  font-weight: 820 !important;
}


/* v25: markup native spinner positioning, top total copy, and tiny dropdown arrow correction */
/* Keep the native number arrows visually to the right of the margin chip by not pushing the browser spinner left with excessive input padding. */
.input-card .input-with-unit.has-margin-chip input,
.advanced-job-settings .input-with-unit.has-margin-chip input,
.settings-card .input-with-unit.has-margin-chip input,
.input-with-unit.settings-margin-chip input {
  padding-right: 22px !important;
}
.input-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.advanced-job-settings .input-with-unit.has-margin-chip .margin-equivalent-chip {
  right: calc(86px + 34px) !important;
}
.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: calc(104px + 34px) !important;
}
/* Small visual nudge so the dropdown chevron sits dead-centre in the pill. */
.collapse-toggle i::before {
  transform: translateY(.9px) rotate(45deg) !important;
}
.collapsible-card.is-open .collapse-toggle i::before,
.advanced-job-settings.is-open .collapse-toggle i::before {
  transform: translateY(.9px) rotate(225deg) !important;
}
@media (max-width: 720px) {
  .input-card .input-with-unit.has-margin-chip input,
  .advanced-job-settings .input-with-unit.has-margin-chip input,
  .settings-card .input-with-unit.has-margin-chip input,
  .input-with-unit.settings-margin-chip input {
    padding-right: 14px !important;
  }
}

/* v26: project breakdown / onsite wording / refined markup input spacing */
.metric-note {
  display: block;
  margin-top: 7px;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.25;
  font-weight: 750;
}
.detail-mini-grid.single-detail {
  grid-template-columns: 1fr;
}
.detail-mini-grid.single-detail > .card {
  width: 100%;
}
/* Give the native markup arrows more clear space to the right of the margin chip. */
.input-card .input-with-unit.has-margin-chip input,
.advanced-job-settings .input-with-unit.has-margin-chip input,
.settings-card .input-with-unit.has-margin-chip input,
.input-with-unit.settings-margin-chip input {
  padding-right: 24px !important;
}
.input-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.advanced-job-settings .input-with-unit.has-margin-chip .margin-equivalent-chip {
  right: calc(86px + 43px) !important;
}
.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: calc(104px + 43px) !important;
}


/* v27: Company Settings uses the same smooth dropdown system, markup native spinner spacing, and tiny chevron centring */
.settings-card.collapsible-card {
  padding: 0;
  overflow: hidden;
}
.settings-card-header {
  padding: 18px 20px;
  margin: 0;
  border-bottom: 1px solid rgba(var(--clay-rgb),.16);
}
.settings-card-header h2 {
  margin: 0;
  display: flex;
  align-items: center;
  gap: 8px;
}
.settings-card.collapsible-card .collapsible-inner {
  padding: 0 20px 20px;
}
.settings-card.collapsible-card.is-open .collapsible-content {
  margin-top: 0;
}
.settings-card.collapsible-card .settings-warning {
  margin-top: 16px;
}
.settings-card.collapsible-card .settings-groups {
  margin-top: 16px;
}
/* Move the visible margin chip a touch left so the browser's native arrows can sit on the far right, aligned with standard number inputs. */
.input-card .input-with-unit.has-margin-chip input,
.advanced-job-settings .input-with-unit.has-margin-chip input,
.settings-card .input-with-unit.has-margin-chip input,
.input-with-unit.settings-margin-chip input {
  padding-right: 26px !important;
}
.input-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.advanced-job-settings .input-with-unit.has-margin-chip .margin-equivalent-chip {
  right: calc(86px + 62px) !important;
}
.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: calc(104px + 62px) !important;
}
/* Final fine-tune: the CSS chevron sits very slightly lower in the pill. */
.collapse-toggle i::before {
  transform: translateY(1.8px) rotate(45deg) !important;
}
.collapsible-card.is-open .collapse-toggle i::before,
.advanced-job-settings.is-open .collapse-toggle i::before {
  transform: translateY(1.8px) rotate(225deg) !important;
}

/* v29 cost/sell clarity badges */
.value-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-left: 7px;
  padding: 3px 7px;
  border-radius: 999px;
  font-size: 9.5px;
  line-height: 1;
  font-style: normal;
  font-weight: 900;
  letter-spacing: .055em;
  text-transform: uppercase;
  vertical-align: middle;
  white-space: nowrap;
}
.cost-badge {
  color: #6c5144;
  background: rgba(106, 81, 68, .10);
  border: 1px solid rgba(106, 81, 68, .16);
}
.sell-badge {
  color: #9b4d36;
  background: rgba(var(--clay-rgb), .14);
  border: 1px solid rgba(var(--clay-rgb), .24);
}
.summary-list.compact .value-badge {
  margin-top: 1px;
}
@media (max-width: 720px) {
  .value-badge { font-size: 8.5px; padding: 3px 6px; }
}

/* v32 dynamic staff settings */
.staff-settings-group {
  grid-column: 1 / -1;
}
.staff-add-panel {
  display: grid;
  grid-template-columns: minmax(150px, 1.2fr) minmax(130px, .8fr) minmax(180px, 1fr) auto;
  gap: 10px;
  align-items: end;
  margin-bottom: 14px;
}
.staff-add-panel label {
  min-width: 0;
}
.staff-add-panel select,
.staff-row select,
.staff-row input,
.staff-assignment-block input[type="checkbox"] {
  accent-color: var(--orange);
}
.staff-add-btn {
  height: 46px;
  white-space: nowrap;
}
.staff-list {
  display: grid;
  gap: 8px;
}
.staff-row {
  display: grid;
  grid-template-columns: minmax(150px, 1.2fr) minmax(130px, .8fr) minmax(180px, 1fr) auto;
  gap: 10px;
  align-items: center;
  padding: 10px;
  border: 1px solid rgba(79, 61, 50, .10);
  border-radius: 16px;
  background: rgba(255,255,255,.64);
}
.staff-row .staff-name,
.staff-row .staff-type,
.staff-add-panel select {
  min-height: 46px;
  border: 1px solid rgba(79, 61, 50, .16);
  border-radius: 16px;
  padding: 0 14px;
  background: rgba(255,255,255,.84);
  font-weight: 800;
  color: var(--ink);
}
.staff-cost-field input {
  min-width: 0;
}
.staff-delete {
  height: 42px;
  padding: 0 14px;
}
.staff-empty {
  margin: 0;
  color: var(--muted);
  font-weight: 800;
  font-size: 12px;
  line-height: 1.4;
}
.staff-assignment-block {
  display: block;
  margin: 0;
}
.staff-assignment-block > span {
  display: block;
  margin-bottom: 8px;
  color: var(--muted);
  font-weight: 850;
  font-size: 13px;
}
.onsite-staff-select-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
}
.staff-check-pill {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 11px;
  border: 1px solid rgba(79, 61, 50, .12);
  border-radius: 15px;
  background: rgba(255,255,255,.70);
  min-width: 0;
}
.staff-check-pill input {
  width: 16px;
  height: 16px;
  flex: 0 0 auto;
}
.staff-check-pill span {
  font-weight: 850;
  color: var(--ink);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.staff-check-pill em {
  margin-left: auto;
  font-size: 11px;
  font-style: normal;
  font-weight: 900;
  color: var(--muted);
  white-space: nowrap;
}
.settings-card.locked .staff-list,
.settings-card.locked .staff-add-panel {
  opacity: .55;
  filter: grayscale(.12);
}
@media (max-width: 760px) {
  .staff-add-panel,
  .staff-row,
  .onsite-staff-select-list {
    grid-template-columns: 1fr;
  }
  .staff-delete,
  .staff-add-btn { width: 100%; }
}


/* v34: text-only glossary triggers for Project Inputs and Markup Comparison */
.input-card .text-tip,
.markup-card .text-tip {
  cursor: help;
  text-decoration: underline dotted rgba(111, 83, 68, .42);
  text-underline-offset: 3px;
}
.input-card .text-tip:hover,
.markup-card .text-tip:hover {
  color: var(--ink);
  text-decoration-color: rgba(193, 102, 73, .75);
}
.markup-card .markup-metric .text-tip {
  display: inline;
}


/* v35: precise text/badge tooltip triggers */
.text-tip,
.value-badge[data-tip] {
  cursor: help;
}
.text-tip {
  display: inline-block;
  width: fit-content;
  text-decoration: underline dotted rgba(111, 83, 68, .36);
  text-underline-offset: 3px;
}
.text-tip:hover,
.text-tip:focus,
.value-badge[data-tip]:hover,
.value-badge[data-tip]:focus {
  color: var(--ink);
  text-decoration-color: rgba(193, 102, 73, .78);
}
.value-badge[data-tip]:hover,
.value-badge[data-tip]:focus {
  filter: brightness(.98) saturate(1.08);
}
.floating-help-tip {
  transform: translateZ(0);
}

/* v36: independent markup comparison cards + simplified comparison metrics */
.markup-compare-grid {
  align-items: start !important;
}
.markup-option-card {
  align-self: start !important;
}
.markup-adjustment-block {
  margin: 8px 10px 10px;
  border: 1px solid rgba(var(--clay-rgb),.18);
  border-radius: 16px;
  overflow: hidden;
  background: linear-gradient(180deg, rgba(255,247,242,.72), rgba(255,250,247,.92));
}
.markup-adjustment-block .adjustment-title {
  padding: 9px 12px 7px;
  color: var(--forge-dark);
  font-size: 11px;
  line-height: 1.1;
  font-weight: 900;
  letter-spacing: .08em;
  text-transform: uppercase;
  border-bottom: 1px solid rgba(var(--clay-rgb),.14);
}
.markup-adjustment-block .markup-metric {
  padding-left: 12px;
  padding-right: 12px;
}
.markup-option-card .markup-primary-metrics .markup-metric.positive strong {
  color: var(--good);
}
.markup-option-card .markup-primary-metrics .markup-metric.negative strong {
  color: var(--bad);
}
.markup-details-content .markup-metric strong,
.markup-primary-metrics .markup-metric strong {
  font-weight: 700 !important;
}
.markup-details-content .markup-metric span,
.markup-primary-metrics .markup-metric span {
  font-weight: 850 !important;
}

/* v37: make markup detail dropdowns fluid/independent */
.markup-details{margin-top:10px;border-top:1px solid rgba(50,42,38,.10);padding-top:10px;}
.markup-details .markup-details-content{max-height:0;overflow:hidden;opacity:0;transition:max-height .32s ease,opacity .22s ease,padding-top .22s ease;padding-top:0;}
.markup-details.is-open .markup-details-content{max-height:260px;opacity:1;padding-top:8px;}
.markup-mini-toggle{width:100%;height:34px;border:1px solid rgba(50,42,38,.14);border-radius:999px;background:rgba(255,255,255,.66);display:flex;align-items:center;justify-content:center;gap:8px;font-size:11px;font-weight:800;letter-spacing:.02em;color:#4a403b;cursor:pointer;transition:color .15s ease;}
.markup-mini-toggle i{width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .2s ease;}
.markup-details.is-open .markup-mini-toggle i{transform:translateY(2px) rotate(225deg);}
.markup-adjustment-block .adjustment-title{font-size:11px;}

/* v38: clearer markup impact comparison */
.markup-impact-block {
  margin: 8px 10px 10px;
  border: 1px solid rgba(var(--clay-rgb),.18);
  border-radius: 16px;
  overflow: hidden;
  background: linear-gradient(180deg, rgba(255,247,242,.72), rgba(255,250,247,.92));
}
.markup-impact-block .impact-title {
  padding: 9px 12px 7px;
  color: var(--forge-dark);
  font-size: 11px;
  line-height: 1.1;
  font-weight: 900;
  letter-spacing: .08em;
  text-transform: uppercase;
  border-bottom: 1px solid rgba(var(--clay-rgb),.14);
}
.markup-impact-block .markup-metric {
  padding-left: 12px;
  padding-right: 12px;
}
.markup-option-card .markup-impact-block .markup-metric.positive strong {
  color: var(--good);
}
.markup-option-card .markup-impact-block .markup-metric.negative strong {
  color: var(--bad);
}
.markup-details.is-open .markup-details-content{max-height:640px;}

/* v40: reminder refinements */
.quote-warnings {
  display: none;
  gap: 10px;
  margin: -2px 0 18px;
}
.quote-warnings.is-visible {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.quote-warning-card {
  display: grid;
  gap: 4px;
  padding: 12px 14px;
  border-radius: 18px;
  border: 1px solid rgba(180,35,24,.20);
  background: rgba(255,241,240,.86);
  box-shadow: 0 12px 28px rgba(180,35,24,.06);
}
.quote-warning-card strong {
  color: var(--bad);
  font-size: 13px;
  letter-spacing: .01em;
}
.quote-warning-card span {
  color: #6e332e;
  font-size: 12.5px;
  font-weight: 700;
}
.summary-list .staff-selected-row {
  align-items: flex-start;
  background: rgba(var(--clay-rgb),.10);
  border-color: rgba(var(--clay-rgb),.24);
}
.summary-list .staff-selected-row strong {
  max-width: 58%;
  white-space: normal;
  line-height: 1.3;
  color: var(--ink);
}
#breakEvenBufferRow.positive strong { color: var(--good); }
#breakEvenBufferRow.negative strong { color: var(--bad); }
#breakEvenBufferRow.neutral strong { color: var(--muted); }
#breakEvenBufferRow.negative {
  background: rgba(255,241,240,.95);
  border-color: rgba(180,35,24,.25);
}
#breakEvenBufferRow.positive {
  background: rgba(235,249,242,.95);
  border-color: rgba(20,122,85,.22);
}

/* Stage 1 v41 multipage app shell */
.app-nav {
  display: flex;
  gap: 10px;
  align-items: center;
  overflow-x: auto;
  padding: 0 2px 4px;
  margin: -10px 0 22px;
  scrollbar-width: thin;
}
.app-nav-btn {
  border: 1px solid rgba(44, 38, 34, 0.10);
  background: rgba(255, 255, 255, 0.64);
  color: var(--ink-soft, #5f554f);
  border-radius: 999px;
  padding: 10px 16px;
  font-weight: 800;
  letter-spacing: .01em;
  white-space: nowrap;
  cursor: pointer;
  box-shadow: 0 8px 18px rgba(44, 38, 34, .06);
  transition: transform .18s ease, background .18s ease, color .18s ease, box-shadow .18s ease, border-color .18s ease;
}
.app-nav-btn:hover {
  transform: translateY(-1px);
  color: var(--ink, #2c2622);
  border-color: rgba(204, 114, 77, .32);
}
.app-nav-btn.is-active {
  background: linear-gradient(135deg, #2c2622, #3f342e);
  color: #fff7f1;
  border-color: rgba(204, 114, 77, .44);
  box-shadow: 0 14px 28px rgba(44, 38, 34, .18);
}
.app-page { display: none; }
.app-page.is-active { display: block; animation: pageFadeIn .20s ease both; }
@keyframes pageFadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } }
.page-intro {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 18px;
  padding: 20px 22px;
  margin: 0 0 18px;
  border-radius: 24px;
  background: rgba(255, 250, 245, .74);
  border: 1px solid rgba(44, 38, 34, .08);
  box-shadow: 0 18px 42px rgba(44, 38, 34, .07);
}
.page-intro h2 { margin: 0 0 3px; font-size: clamp(1.4rem, 3vw, 2rem); }
.page-intro p { margin: 0; color: var(--muted, #766c64); max-width: 680px; }
#page-saved .saved-card,
#page-settings .settings-card { max-width: 1120px; margin: 0 auto; }
.info-card-grid, .glossary-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
}
.glossary-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.info-card h3, .glossary-card h3 { margin: 0 0 8px; }
.info-card p, .glossary-card p { margin: 0; color: var(--muted, #766c64); line-height: 1.55; }
@media (max-width: 860px) {
  .page-intro { align-items: flex-start; flex-direction: column; }
  .info-card-grid, .glossary-grid { grid-template-columns: 1fr; }
}


/* V46 cloud auth panel */
.auth-panel {
  margin: 18px 0 22px;
  padding: 18px;
  border: 1px solid rgba(120, 90, 70, 0.18);
  border-radius: 22px;
  background: rgba(255, 250, 245, 0.82);
  box-shadow: 0 14px 34px rgba(70, 50, 35, 0.08);
}

.auth-panel-main {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 20px;
}

.auth-panel h2 {
  margin: 2px 0 6px;
  font-size: 1.1rem;
}

.auth-status-text,
.auth-message {
  margin: 0;
  color: var(--muted, #766b61);
  font-size: 0.92rem;
}

.auth-message {
  margin-top: 10px;
}

.auth-message.negative {
  color: #a33a32;
}

.auth-forms {
  display: grid;
  grid-template-columns: repeat(2, minmax(150px, 1fr));
  gap: 10px;
  min-width: min(520px, 100%);
}

.auth-forms input,
.form-grid select {
  width: 100%;
}

.auth-actions {
  grid-column: 1 / -1;
  display: flex;
  justify-content: flex-end;
  gap: 10px;
  flex-wrap: wrap;
}

.auth-logged-in {
  display: flex;
  align-items: center;
  gap: 12px;
  flex-wrap: wrap;
}

.auth-logged-in strong {
  font-size: 0.95rem;
}

.is-hidden {
  display: none !important;
}

.auth-panel.is-cloud {
  border-color: rgba(42, 118, 82, 0.28);
}

.auth-panel.is-cloud .auth-status-text {
  color: #20744d;
}

@media (max-width: 760px) {
  .auth-panel-main {
    flex-direction: column;
  }

  .auth-forms {
    grid-template-columns: 1fr;
  }

  .auth-actions {
    justify-content: stretch;
  }

  .auth-actions .btn {
    flex: 1;
  }
}

/* V46 strict gatekeeper authentication */
body.auth-loading .app-shell,
body.needs-auth .app-shell {
  display: none;
}

body.is-authenticated .auth-gate {
  display: none;
}

.auth-gate {
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: 28px;
  background:
    radial-gradient(circle at top left, rgba(var(--clay-rgb), .22), transparent 34%),
    radial-gradient(circle at bottom right, rgba(var(--clay-rgb), .16), transparent 28%),
    var(--paper);
}

.auth-gate-card {
  width: min(520px, 100%);
  padding: 34px;
  border: 1px solid rgba(120, 90, 70, 0.18);
  border-radius: 30px;
  background: rgba(255, 250, 245, 0.94);
  box-shadow: 0 24px 90px rgba(26, 16, 11, 0.16);
}

.auth-gate-brand {
  text-align: center;
  margin-bottom: 24px;
}

.auth-gate-logo {
  width: 220px;
  max-width: 70%;
  height: auto;
  margin: 0 auto 18px;
  filter: drop-shadow(0 10px 20px rgba(0,0,0,.10));
}

.auth-gate h1 {
  font-size: clamp(30px, 6vw, 44px);
  margin: 0 0 10px;
}

.auth-gate .auth-status-text {
  max-width: 390px;
  margin: 0 auto;
  line-height: 1.55;
}

.auth-gate .auth-forms {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  min-width: 0;
}

.auth-gate .auth-forms input {
  width: 100%;
  min-height: 48px;
}

.auth-gate .auth-actions {
  grid-column: 1 / -1;
  display: flex;
  justify-content: stretch;
  gap: 10px;
}

.auth-gate .auth-actions .btn {
  flex: 1;
}

body.auth-loading .auth-gate .auth-forms,
body.auth-loading .auth-gate .auth-message {
  display: none;
}

.session-pill {
  align-self: center;
  color: var(--muted);
  font-size: 13px;
  font-weight: 800;
  max-width: 240px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.session-logout {
  background: #fff;
  color: #2a2725;
}

@media (max-width: 760px) {
  .auth-gate {
    padding: 18px;
  }

  .auth-gate-card {
    padding: 24px;
    border-radius: 24px;
  }

  .auth-gate .auth-forms {
    grid-template-columns: 1fr;
  }

  .auth-gate .auth-actions {
    flex-direction: column;
  }
}

/* V46 UX polish: inline margin chips and saved-quote status controls */
.input-with-unit.has-margin-chip {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 94px;
  align-items: stretch;
  position: relative;
}

.input-with-unit.has-margin-chip input {
  height: 48px;
  min-height: 48px;
  padding: 0 128px 0 14px;
  line-height: 48px;
}

.input-with-unit.has-margin-chip > span {
  height: 48px;
  min-height: 48px;
  width: 94px;
  min-width: 94px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  border-radius: 0 16px 16px 0;
}

.input-with-unit.has-margin-chip .margin-equivalent-chip {
  position: absolute;
  top: 50%;
  right: calc(94px + 14px);
  transform: translateY(-50%);
  min-width: 88px;
  height: 24px;
  padding: 0 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  font-size: 10.5px;
  line-height: 1;
  font-weight: 900;
  font-style: normal;
  white-space: nowrap;
  pointer-events: none;
  z-index: 2;
}

.settings-card .input-with-unit.has-margin-chip,
.input-with-unit.settings-margin-chip {
  grid-template-columns: minmax(0, 1fr) 108px;
}

.settings-card .input-with-unit.has-margin-chip input,
.input-with-unit.settings-margin-chip input {
  padding-right: 142px;
}

.settings-card .input-with-unit.has-margin-chip > span,
.input-with-unit.settings-margin-chip > span {
  width: 108px;
  min-width: 108px;
}

.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: calc(108px + 14px);
}

.saved-item {
  grid-template-columns: minmax(0, 1fr) minmax(132px, 150px) auto auto auto;
  align-items: center;
}

.saved-main {
  min-width: 0;
}

.saved-status-control {
  margin: 0;
  display: grid;
  gap: 5px;
  align-self: stretch;
  align-content: center;
}

.saved-status-control span {
  margin: 0;
  font-size: 10px;
  line-height: 1;
  letter-spacing: .08em;
  color: var(--muted);
}

.saved-status-control select {
  width: 100%;
  min-height: 38px;
  border-radius: 13px;
  border: 1px solid var(--line);
  background-color: #fff;
  color: var(--ink);
  font-weight: 900;
  padding: 0 34px 0 12px;
}

.saved-status-control select:disabled {
  opacity: .65;
  cursor: progress;
}

@media (max-width: 860px) {
  .saved-item {
    grid-template-columns: 1fr;
  }

  .saved-status-control {
    width: 100%;
  }

  .saved-item .btn {
    width: 100%;
  }
}

@media (max-width: 720px) {
  .input-with-unit.has-margin-chip input,
  .settings-card .input-with-unit.has-margin-chip input,
  .input-with-unit.settings-margin-chip input {
    padding-right: 14px;
  }

  .input-with-unit.has-margin-chip .margin-equivalent-chip,
  .settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
  .input-with-unit.settings-margin-chip .margin-equivalent-chip {
    position: static;
    transform: none;
    grid-column: 1 / -1;
    justify-self: end;
    margin-top: 6px;
  }
}


/* V46 FINAL: strict two-tab auth gate, polished input chips, saved quote status controls */
body.auth-loading .app-shell,
body.needs-auth .app-shell {
  display: none !important;
}

body.is-authenticated .auth-gate {
  display: none !important;
}

.auth-gate-card {
  width: min(520px, 100%);
}

.auth-tabs {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  padding: 6px;
  margin: 0 0 18px;
  border: 1px solid rgba(120, 90, 70, 0.16);
  border-radius: 18px;
  background: rgba(255, 255, 255, 0.62);
}

.auth-tab {
  min-height: 44px;
  border: 0;
  border-radius: 14px;
  background: transparent;
  color: var(--muted);
  font-weight: 900;
  letter-spacing: .01em;
  cursor: pointer;
  transition: background .18s ease, color .18s ease, box-shadow .18s ease;
}

.auth-tab.is-active {
  background: var(--clay);
  color: #fff;
  box-shadow: 0 10px 22px rgba(var(--clay-rgb), 0.2);
}

.auth-form {
  display: none;
  gap: 12px;
}

.auth-form.is-active {
  display: grid;
}

.auth-form label {
  display: grid;
  gap: 7px;
  margin: 0;
}

.auth-form label span {
  color: var(--muted);
  font-size: 12px;
  font-weight: 900;
  letter-spacing: .03em;
}

.auth-form input {
  width: 100%;
  min-height: 50px;
  border-radius: 16px;
}

.auth-submit {
  width: 100%;
  min-height: 50px;
  margin-top: 4px;
  justify-content: center;
  font-size: 15px;
}

.auth-domain-note {
  margin: 14px 0 0;
  color: var(--muted);
  font-size: 12px;
  line-height: 1.45;
  text-align: center;
}

body.auth-loading .auth-tabs,
body.auth-loading .auth-form,
body.auth-loading .auth-domain-note,
body.auth-loading .auth-message {
  display: none !important;
}

.input-with-unit.has-margin-chip {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) 94px !important;
  align-items: stretch !important;
  position: relative !important;
  overflow: visible;
}

.input-with-unit.has-margin-chip input {
  height: 48px !important;
  min-height: 48px !important;
  padding: 0 132px 0 14px !important;
  line-height: 48px !important;
}

.input-with-unit.has-margin-chip > span {
  height: 48px !important;
  min-height: 48px !important;
  width: 94px !important;
  min-width: 94px !important;
  margin: 0 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  border-radius: 0 16px 16px 0 !important;
}

.input-with-unit.has-margin-chip .margin-equivalent-chip {
  position: absolute !important;
  top: 50% !important;
  right: 108px !important;
  transform: translateY(-50%) !important;
  min-width: 92px;
  height: 24px;
  padding: 0 9px;
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  font-size: 10.5px;
  line-height: 1;
  font-weight: 900;
  font-style: normal;
  white-space: nowrap;
  pointer-events: none;
  z-index: 2;
}

.settings-card .input-with-unit.has-margin-chip,
.input-with-unit.settings-margin-chip {
  grid-template-columns: minmax(0, 1fr) 108px !important;
}

.settings-card .input-with-unit.has-margin-chip input,
.input-with-unit.settings-margin-chip input {
  padding-right: 146px !important;
}

.settings-card .input-with-unit.has-margin-chip > span,
.input-with-unit.settings-margin-chip > span {
  width: 108px !important;
  min-width: 108px !important;
}

.settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.settings-margin-chip .margin-equivalent-chip {
  right: 122px !important;
}

.saved-item {
  grid-template-columns: minmax(0, 1fr) auto !important;
  align-items: center !important;
}

.saved-main {
  min-width: 0;
}

.saved-status-control {
  margin: 0;
  display: grid;
  gap: 5px;
  align-self: stretch;
  align-content: center;
}

.saved-status-control span {
  margin: 0;
  font-size: 10px;
  line-height: 1;
  letter-spacing: .08em;
  color: var(--muted);
  font-weight: 900;
  text-transform: uppercase;
}

.saved-status-control select {
  width: 100%;
  min-height: 38px;
  border-radius: 13px;
  border: 1px solid var(--line);
  background-color: #fff;
  color: var(--ink);
  font-weight: 900;
  padding: 0 34px 0 12px;
}

.saved-status-control select:disabled {
  opacity: .65;
  cursor: progress;
}

@media (max-width: 860px) {
  .saved-item {
    grid-template-columns: 1fr !important;
  }

  .saved-status-control,
  .saved-item .btn {
    width: 100%;
  }
}

@media (max-width: 720px) {
  .input-with-unit.has-margin-chip input,
  .settings-card .input-with-unit.has-margin-chip input,
  .input-with-unit.settings-margin-chip input {
    padding-right: 14px !important;
  }

  .input-with-unit.has-margin-chip .margin-equivalent-chip,
  .settings-card .input-with-unit.has-margin-chip .margin-equivalent-chip,
  .input-with-unit.settings-margin-chip .margin-equivalent-chip {
    position: static !important;
    transform: none !important;
    grid-column: 1 / -1;
    justify-self: end;
    margin-top: 6px;
  }
}

/* V46 Gatekeeper tab animation polish: smooth cross-fade, scale and measured height */
.auth-form-shell {
  position: relative;
  overflow: hidden;
  height: auto;
  transition: height 0.34s ease-in-out;
  will-change: height;
  contain: layout paint;
}

.auth-form-stage {
  position: relative;
  min-height: 1px;
}

.auth-form {
  display: grid !important;
  gap: 12px;
  position: absolute;
  inset: 0;
  width: 100%;
  opacity: 0;
  transform: translate3d(0, 10px, 0) scale(0.985);
  transform-origin: center top;
  pointer-events: none;
  visibility: hidden;
  transition:
    opacity 0.3s ease-in-out,
    transform 0.3s ease-in-out,
    visibility 0s linear 0.3s;
  will-change: opacity, transform;
}

.auth-form.is-active {
  opacity: 1;
  transform: translate3d(0, 0, 0) scale(1);
  pointer-events: auto;
  visibility: visible;
  transition:
    opacity 0.3s ease-in-out,
    transform 0.3s ease-in-out,
    visibility 0s linear 0s;
}

.auth-form.is-exiting {
  opacity: 0;
  transform: translate3d(0, -6px, 0) scale(0.972);
}

.auth-gate-card {
  transition:
    padding 0.24s ease-in-out,
    box-shadow 0.24s ease-in-out,
    transform 0.24s ease-in-out;
  transform: translate3d(0, 0, 0);
}

.auth-tab {
  transition:
    background 0.24s ease-in-out,
    color 0.24s ease-in-out,
    box-shadow 0.24s ease-in-out,
    transform 0.24s ease-in-out;
}

.auth-tab:active {
  transform: scale(0.985);
}

body.auth-loading .auth-tabs,
body.auth-loading .auth-form-shell,
body.auth-loading .auth-domain-note,
body.auth-loading .auth-message {
  display: none !important;
}

@media (prefers-reduced-motion: reduce) {
  .auth-form-shell,
  .auth-form,
  .auth-tab,
  .auth-gate-card {
    transition: none !important;
  }

  .auth-form,
  .auth-form.is-active,
  .auth-form.is-exiting {
    transform: none !important;
  }
}

/* V46 final deployment polish: Forge Estimator Hub, job profile summary, admin locks */
[data-admin-only][hidden],
.admin-only[hidden],
.is-hidden {
  display: none !important;
}

.job-profile-card {
  border: 1.5px dashed rgba(120, 90, 70, 0.34);
  background: linear-gradient(180deg, rgba(255, 250, 245, 0.92), rgba(255, 247, 240, 0.74));
  box-shadow: 0 12px 28px rgba(70, 50, 35, 0.06);
}

.job-profile-card.is-open {
  border-style: solid;
  background: rgba(255, 250, 245, 0.98);
}

.job-profile-header > div {
  display: grid;
  gap: 3px;
}

.job-profile-preview {
  margin-top: 12px;
  padding: 12px 14px;
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.68);
  border: 1px dashed rgba(120, 90, 70, 0.24);
  color: var(--muted);
  font-size: 13px;
  font-weight: 800;
  line-height: 1.45;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.job-profile-card.is-open .job-profile-preview {
  opacity: 0.86;
}

.job-profile-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.job-profile-grid label:nth-child(3) {
  grid-column: 1 / -1;
}

.settings-admin-controls {
  margin-bottom: 18px;
  padding: 16px;
  border: 1px solid rgba(var(--clay-rgb), 0.22);
  border-radius: 20px;
  background: rgba(var(--clay-rgb), 0.07);
}

.settings-admin-controls h3 {
  margin: 0 0 6px;
}

.settings-admin-controls p {
  margin: 0 0 14px;
  color: var(--muted);
  font-size: 13px;
  line-height: 1.45;
}

.lock-toggle-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 12px;
}

.lock-toggle {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 12px;
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.72);
  border: 1px solid rgba(120, 90, 70, 0.14);
  cursor: pointer;
}

.lock-toggle input {
  margin-top: 3px;
  width: 18px;
  height: 18px;
  accent-color: var(--forge-rust);
}

.lock-toggle span {
  display: grid;
  gap: 4px;
}

.lock-toggle strong {
  font-size: 13px;
  color: var(--forge-dark);
}

.lock-toggle small {
  color: var(--muted);
  font-size: 11px;
  line-height: 1.35;
}

.parameter-locked {
  opacity: 0.58;
  filter: grayscale(0.15);
}

.parameter-locked input,
.parameter-locked select,
input[disabled][data-locked-by] {
  cursor: not-allowed;
  background: rgba(235, 231, 226, 0.82) !important;
  color: rgba(42, 39, 37, 0.58) !important;
  border-color: rgba(120, 90, 70, 0.14) !important;
}

.parameter-locked::after {
  content: "Locked";
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: fit-content;
  margin-top: 6px;
  padding: 3px 8px;
  border-radius: 999px;
  background: rgba(120, 90, 70, 0.12);
  color: var(--muted);
  font-size: 10px;
  font-weight: 900;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.input-with-unit.has-margin-chip,
.input-with-unit.has-margin-chip.settings-margin-chip {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 94px;
  align-items: stretch;
  position: relative;
}

.input-with-unit.has-margin-chip input,
.input-with-unit.has-margin-chip.settings-margin-chip input {
  min-height: 48px;
  height: 48px;
  padding-right: 130px;
  line-height: 48px;
}

.input-with-unit.has-margin-chip > span,
.input-with-unit.has-margin-chip.settings-margin-chip > span {
  width: 94px;
  min-width: 94px;
  min-height: 48px;
  height: 48px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin: 0;
  border-radius: 0 16px 16px 0;
}

.input-with-unit.has-margin-chip .margin-equivalent-chip,
.input-with-unit.has-margin-chip.settings-margin-chip .margin-equivalent-chip {
  position: absolute;
  top: 50%;
  right: calc(94px + 14px);
  transform: translateY(-50%);
  min-width: 88px;
  height: 24px;
  padding: 0 9px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  font-size: 10.5px;
  line-height: 1;
  font-weight: 900;
  white-space: nowrap;
  pointer-events: none;
  z-index: 2;
}

@media (max-width: 900px) {
  .lock-toggle-grid,
  .job-profile-grid {
    grid-template-columns: 1fr;
  }

  .job-profile-grid label:nth-child(3) {
    grid-column: auto;
  }
}

@media (max-width: 620px) {
  .job-profile-preview {
    white-space: normal;
  }
}


/* V46 final polish: reinstate visible standalone markup comparison cards */
.markup-card {
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  backdrop-filter: none !important;
  overflow: visible !important;
}
.markup-card > .card-header {
  margin: 0 0 12px !important;
  padding: 16px 18px !important;
  border: 1px dashed rgba(var(--clay-rgb),.34) !important;
  border-radius: 22px !important;
  background: rgba(255,250,247,.74) !important;
  box-shadow: 0 12px 30px rgba(26,16,11,.05) !important;
}
.markup-compare-grid {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;
  gap: 16px !important;
  align-items: start !important;
}
.markup-option-card {
  background: rgba(255,255,255,.92) !important;
  border: 1px solid rgba(231,222,216,.95) !important;
  border-radius: 26px !important;
  box-shadow: var(--shadow) !important;
  min-width: 0;
}
.markup-option-card.selected {
  border-color: rgba(var(--clay-rgb),.48) !important;
  background: linear-gradient(180deg, #fff8f3, #fffaf7) !important;
}
.markup-option-card.compare {
  background: rgba(255,255,255,.92) !important;
  opacity: 1 !important;
}
@media (max-width: 720px) {
  /* Phase 2F-QQ-MOBILE-1A: stack the two Markup Comparison cards to one full-width
     column on phones (was forced 2-col here). Desktop 2-col is unchanged; still two
     dynamic cards only; the existing forced-priority declaration was edited in place
     (no new forced-priority rule added). */
  .markup-compare-grid {
    grid-template-columns: 1fr !important;
    gap: 10px !important;
  }
  .markup-option-head {
    flex-direction: column;
    align-items: stretch;
  }
}

/* V46 final polish: hard-hide admin settings for standard users */
body:not(.is-admin-user) [data-admin-only],
body.is-standard-user [data-admin-only],
body.is-standard-user #page-settings,
body:not(.is-admin-user) #page-settings {
  display: none !important;
  visibility: hidden !important;
  pointer-events: none !important;
}

/* V46 final polish: lock indicators */
.parameter-lock-active {
  position: relative;
}
.parameter-locked input,
.parameter-locked select,
.parameter-locked textarea {
  background: #f3eee9 !important;
  color: #8a7a70 !important;
  cursor: not-allowed !important;
  border-color: rgba(180,35,24,.22) !important;
}
.lock-corner {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 8;
  width: 24px;
  height: 24px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  background: #fff1f0;
  border: 1px solid #ffd2cc;
  color: var(--bad);
  font-size: 12px;
  line-height: 1;
  box-shadow: 0 8px 18px rgba(180,35,24,.10);
  pointer-events: none;
}
label.parameter-lock-active > span:first-child {
  padding-right: 34px;
}
.advanced-job-settings > .lock-corner,
.markup-card > .lock-corner,
.default-markup-settings-group > .lock-corner {
  top: 10px;
  right: 10px;
}
.markup-card.parameter-lock-active > .card-header {
  padding-right: 48px !important;
  border-color: rgba(180,35,24,.32) !important;
}
.default-markup-settings-group.parameter-lock-active,
.advanced-job-settings.parameter-lock-active {
  border-color: rgba(180,35,24,.24) !important;
}
.default-markup-settings-group h3::after {
  content: 'Admin default rates';
  margin-left: 8px;
  padding: 3px 8px;
  border-radius: 999px;
  background: rgba(var(--clay-rgb),.12);
  color: var(--forge-dark);
  font-size: 9px;
  letter-spacing: .07em;
  text-transform: uppercase;
  vertical-align: middle;
}

/* V46.1 repair: visible markup comparison table and robust standalone card layout */
.markup-card {
  display: block !important;
  visibility: visible !important;
}
.markup-table-shell {
  margin-top: 16px;
  padding: 16px;
  border: 1px solid rgba(var(--clay-rgb),.28);
  border-radius: 24px;
  background: rgba(255,255,255,.92);
  box-shadow: 0 14px 36px rgba(26,16,11,.06);
  overflow: hidden;
}
.markup-table-title {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 12px;
}
.markup-table-title strong {
  font-size: 14px;
  font-weight: 950;
  color: var(--dark);
}
.markup-table-title span {
  color: var(--muted);
  font-size: 12px;
  font-weight: 750;
}
.markup-table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.markup-compare-table {
  width: 100%;
  min-width: 760px;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 12px;
}
.markup-compare-table th,
.markup-compare-table td {
  padding: 11px 12px;
  border-bottom: 1px solid rgba(231,222,216,.95);
  text-align: left;
  white-space: nowrap;
}
.markup-compare-table th {
  color: var(--muted);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: .08em;
  background: rgba(255,248,244,.82);
}
.markup-compare-table tbody tr:last-child td {
  border-bottom: 0;
}
.markup-compare-table tr.is-selected td {
  background: rgba(var(--clay-rgb),.08);
}
.markup-compare-table .positive,
.markup-compare-table .positive strong {
  color: var(--positive, #20744d);
  font-weight: 900;
}
.markup-compare-table .negative,
.markup-compare-table .negative strong {
  color: var(--negative, #b04438);
  font-weight: 900;
}
.markup-compare-table .neutral {
  color: var(--muted);
  font-weight: 800;
}
@media (max-width: 720px) {
  .markup-table-title {
    flex-direction: column;
    align-items: flex-start;
  }
}

/* V46.4 ORIGINAL DYNAMIC LAYOUT REVERT
   Home/Quick Quote card positions are intentionally controlled by the original
   dynamic quote-layout and analysis-layout CSS above. Do not force/move the
   Cost & Recovery, Xero / Quote Totals, Project Breakdown, or Break-even cards
   with new grid-column/grid-row overrides. Keep the page dynamic.
   The old repair-pass comparison table remains hidden because the approved
   Markup Comparison UI is the two dynamic cards only. */
.markup-table-shell {
  display: none !important;
}


/* V46.6 fluid home column fix
   Keep the original dynamic home layout, but make both columns able to shrink
   intelligently before the page stacks. The preferred desktop/tablet layout is:
   left calculator/markup column + right summary rail beneath the Annual Profit card.
   Do not hard-pin individual cards. Do not move cards in the DOM. */
.quote-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.55fr) minmax(220px, .72fr) !important;
  gap: clamp(12px, 1.4vw, 18px) !important;
  align-items: start;
}
.quote-left,
.quote-right,
.quote-right .side-stack,
.quote-left .analysis-left,
.quote-left .detail-mini-grid,
.markup-card,
.markup-compare-grid,
.markup-option-card,
.output-card,
.break-even-card,
.recovery-card {
  min-width: 0 !important;
  max-width: 100% !important;
}
.quote-left,
.quote-right,
.quote-right .side-stack {
  width: 100%;
}
.quote-right .side-stack {
  display: grid;
  gap: clamp(12px, 1.4vw, 18px);
  align-content: start;
}
.quote-right .card,
.quote-left .card {
  width: 100%;
  box-sizing: border-box;
}
.quote-right .card-header {
  gap: 8px;
  min-width: 0;
}
.quote-right .card-header h2,
.quote-right .card-header span,
.quote-right .summary-list span,
.quote-right .summary-list strong {
  min-width: 0;
}
.quote-right .card-header span {
  white-space: normal;
}
.quote-right .summary-list div {
  gap: 8px;
}
.quote-right .summary-list strong {
  overflow-wrap: anywhere;
}

/* Let the left column shrink before pushing the right rail underneath. */
@media (max-width: 1180px) and (min-width: 761px) {
  .quote-layout {
    grid-template-columns: minmax(0, 1.35fr) minmax(210px, .65fr) !important;
  }
  .quote-layout .card {
    padding: clamp(14px, 1.6vw, 20px);
  }
  .quote-left .form-grid,
  .quote-left .advanced-grid,
  .quote-left .job-profile-grid {
    grid-template-columns: 1fr;
  }
  .quote-left .input-with-unit {
    grid-template-columns: minmax(0, 1fr) 74px;
  }
  .quote-left .input-with-unit > span,
  .quote-left .input-card .input-with-unit > span {
    width: 74px;
    min-width: 74px;
    padding-left: 8px;
    padding-right: 8px;
  }
  .quote-left .input-with-unit.has-margin-chip input {
    padding-right: 120px;
  }
  .quote-left .input-with-unit.has-margin-chip .margin-equivalent-chip {
    right: calc(74px + 16px);
    min-width: 78px;
    font-size: 9.5px;
  }
  .markup-compare-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 12px;
  }
  .markup-option-card {
    padding: 14px;
  }
  .markup-option-head,
  .markup-head-right {
    min-width: 0;
  }
  .markup-option-head strong,
  .markup-metric strong {
    white-space: normal;
    overflow-wrap: anywhere;
  }
  .quote-right .card-header {
    flex-direction: column;
    align-items: flex-start;
  }
  .quote-right .summary-list div {
    padding: 10px 11px;
  }
  .quote-right .summary-list span {
    font-size: 12px;
  }
  .quote-right .summary-list strong {
    font-size: 14px;
  }
  .recovery-card strong {
    font-size: clamp(24px, 3vw, 34px);
  }
}

/* Only stack the home page when there is no practical room left for readable data. */
@media (max-width: 760px) {
  .quote-layout {
    grid-template-columns: 1fr !important;
  }
}

/* ANVIL SHELL - Phase 1B-i (restyled in Phase 2D-NAV-1) */
/* Single light "studio"-style global app header replacing the earlier espresso
   presentation bar. Same markup/selectors and the same [data-page-target] hooks;
   values only retuned to the light header direction. Active tab uses a clay
   underline. Full-bleed within .app-shell via negative gutters. Additive,
   namespaced, token-based; no forced-priority rules; print-excluded via .no-print.
   Dropdowns, search, +New takeoff and button relocation are deferred to later phases. */
.anvil-topbar {
  display: flex;
  align-items: stretch;
  gap: 22px;
  min-height: 60px;
  width: 100vw;
  padding: 0 28px;
  margin: -28px 0 22px;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  /* Phase 2E-DASH-1A-2: the header is a light sheet bar (#fbf7ef via --paper) over
     the darker #dcd4c3 desk canvas — the colour contrast is the intended separation
     (baseline direction), so the old transparent treatment (NAV-3A-1, needed when
     header and page were near-identical off-whites) is no longer required. Hairline
     border-bottom kept as a soft edge. */
  background: var(--paper);
  border-bottom: 1px solid var(--rule-2);
}
.anvil-brand {
  display: flex;
  align-items: center;
  gap: 11px;
  padding-right: 22px;
  border-right: 1px solid var(--rule);
  flex-shrink: 0;
}
.anvil-wordmark {
  font-family: var(--serif);
  font-weight: 600;
  font-size: 24px;
  letter-spacing: -.015em;
  color: var(--ink);
}
.anvil-wordmark-dot { color: var(--clay); }
.anvil-descriptor {
  font-family: var(--mono);
  font-size: 9px;
  line-height: 1.25;
  max-width: 72px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--ink-4);
}
.anvil-nav {
  display: flex;
  align-items: stretch;
  gap: 2px;
  flex-wrap: wrap;
}
.anvil-navtab {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 0;
  border-bottom: 2px solid transparent;
  background: transparent;
  color: var(--ink-3);
  font-family: var(--mono);
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: .02em;
  padding: 0 14px;
  border-radius: 0;
  cursor: pointer;
  transition: color var(--motion-fast), border-color var(--motion-fast);
}
.anvil-navtab:hover {
  color: var(--ink);
}
.anvil-navtab.is-active {
  color: var(--ink);
  background: transparent;
  border-bottom-color: var(--clay);
}
.anvil-navtab.is-disabled {
  opacity: .55;
  cursor: not-allowed;
}
.anvil-soon {
  font-family: var(--mono);
  font-size: 8.5px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--ink-4);
  border: 1px solid var(--rule);
  border-radius: 999px;
  padding: 1px 6px;
}
.anvil-user-area {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-left: auto;
  flex-shrink: 0;
}
.anvil-gear {
  font-size: 16px;
  line-height: 1;
  color: var(--ink-4);
}
.anvil-avatar {
  width: 30px;
  height: 30px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 7px;
  background: var(--clay);
  color: #fff;
  font-family: var(--mono);
  font-weight: 700;
  font-size: 12px;
}
/* At <=720px the .app-shell top padding tightens to 16px; correct only the top
   pull and inner padding. The viewport-width gutters (width:100vw + calc margins)
   are inherited from the base rule, so the header stays edge-to-edge. */
@media (max-width: 720px) {
  .anvil-topbar {
    margin-top: -16px;
    padding: 0 16px;
  }
}

/* ANVIL SHELL - Phase 1B-ii */
/* Honest, minimal placeholder pages for Dashboard / Takeoff / Reports.
   Show/hide is handled by the existing .app-page / .app-page.is-active rules;
   these selectors only style the placeholder card. Namespaced, additive,
   token-based; no forced-priority rules; no existing selector touched. */
.anvil-placeholder-page {
  padding: 8px 0 40px;
}
.anvil-placeholder-card {
  max-width: 640px;
  margin: 18px auto 0;
  padding: 36px 32px;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1, 0 1px 2px rgba(50, 36, 22, .05));
  text-align: left;
}
.anvil-placeholder-eyebrow {
  margin: 0;
  font-family: var(--mono);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--clay);
}
.anvil-placeholder-title {
  margin: 12px 0 0;
  font-family: var(--serif);
  font-weight: 600;
  font-size: 30px;
  letter-spacing: -.02em;
  color: var(--ink);
}
.anvil-placeholder-copy {
  margin: 6px 0 0;
  font-size: 15px;
  font-weight: 600;
  color: var(--muted);
}
.anvil-placeholder-note {
  margin: 18px 0 0;
  padding-top: 16px;
  border-top: 1px solid var(--line);
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--muted);
}

/* ANVIL DASHBOARD - Phase 2A */
/* Static, honest workspace landing. Quick Quote is the only working module;
   Takeoff is positioned as the primary future workflow but is NOT connected.
   Routing reuses the existing [data-page-target] switcher. Namespaced, additive,
   token-based; no forced-priority rules; no existing selector edited. */
.anvil-dashboard {
  max-width: 1040px;
  margin: 0 auto;
  padding: 8px 0 48px;
}
.anvil-dashboard-header {
  padding: 8px 4px 24px;
}
.anvil-dashboard-eyebrow {
  margin: 0;
  font-family: var(--mono);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--slate);
}
.anvil-dashboard-title {
  margin: 8px 0 0;
  font-family: var(--serif);
  font-weight: 600;
  font-size: clamp(34px, 5vw, 52px);
  letter-spacing: -.02em;
  line-height: 1;
  color: var(--ink);
}
.anvil-dashboard-copy {
  margin: 12px 0 0;
  max-width: 620px;
  font-size: 15px;
  line-height: 1.55;
  color: var(--muted);
}
.anvil-dashboard-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 18px;
}
.anvil-dashboard-card {
  display: flex;
  flex-direction: column;
  gap: 18px;
  padding: 24px;
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1, 0 1px 2px rgba(50, 36, 22, .05));
}
.anvil-dashboard-card-primary {
  grid-column: 1 / -1;
  padding: 32px;
  background:
    radial-gradient(circle at top right, rgba(var(--clay-rgb), .10), transparent 60%),
    var(--card);
  border-color: var(--clay-line);
}
.anvil-dashboard-card-body {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.anvil-dashboard-card-eyebrow {
  margin: 0;
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--clay);
}
.anvil-dashboard-card-title {
  margin: 0;
  font-family: var(--serif);
  font-weight: 600;
  font-size: 22px;
  letter-spacing: -.015em;
  color: var(--ink);
}
.anvil-dashboard-card-primary .anvil-dashboard-card-title {
  font-size: 30px;
}
.anvil-dashboard-card-copy {
  margin: 0;
  font-size: 14px;
  line-height: 1.55;
  color: var(--muted);
}
.anvil-dashboard-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: auto;
}
@media (max-width: 720px) {
  .anvil-dashboard-grid { grid-template-columns: 1fr; }
}

/* ANVIL QUICK QUOTE SKIN - Phase 2C-1 */
/* Visual-only Anvil token alignment of the main Quick Quote calculator surfaces.
   Every rule is scoped under .anvil-qq (the #page-quickquote root) so Saved Quotes,
   Company Settings, Cheat Sheets and Glossary are unaffected. No layout/grid changes,
   no id/DOM changes, no app.js, no forced-priority rules. The Markup Comparison
   JS-emitted classes are intentionally NOT targeted in this phase. */

/* Card surfaces — consistent Anvil card treatment on the calculator page */
.anvil-qq .card {
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1, 0 1px 2px rgba(50, 36, 22, .05));
}

/* Panel / card headers — serif headings, warm secondary subtext */
.anvil-qq .card-header h2 {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--ink);
}
.anvil-qq .card-header > span {
  color: var(--ink-3);
}

/* Hero summary cards */
.anvil-qq .hero-summary .metric-card {
  background: var(--card);
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1, 0 1px 2px rgba(50, 36, 22, .05));
}
.anvil-qq .hero-summary .metric-label {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--ink-3);
}
.anvil-qq .hero-summary .metric-card strong {
  font-family: var(--serif);
  letter-spacing: -.02em;
  color: var(--ink);
}
.anvil-qq .hero-summary .metric-sub,
.anvil-qq .hero-summary .metric-note {
  color: var(--ink-3);
}
.anvil-qq .hero-summary .metric-chip {
  background: var(--paper-2);
  border: 1px solid var(--rule);
  border-radius: var(--r-sm, 8px);
}
/* Primary hero card — espresso emphasis with clay glow (prototype hero treatment) */
.anvil-qq .hero-summary .metric-card.primary {
  background:
    radial-gradient(circle at top right, rgba(var(--clay-rgb), .14), transparent 62%),
    var(--espresso);
  border-color: transparent;
}
.anvil-qq .hero-summary .metric-card.primary .metric-label,
.anvil-qq .hero-summary .metric-card.primary .metric-sub,
.anvil-qq .hero-summary .metric-card.primary strong {
  color: var(--espresso-ink);
}

/* Right summary rail — emphasise the recovery/totals numbers */
.anvil-qq .recovery-card strong {
  font-family: var(--serif);
  letter-spacing: -.02em;
  color: var(--ink);
}
.anvil-qq .output-card .card-header h2 {
  font-family: var(--serif);
}

/* ANVIL QUICK QUOTE SKIN - Phase 2C-2 MARKUP COMPARISON */
/* Scoped, CSS-only polish of the dynamically-rendered Markup Comparison cards.
   Targets only the JS-emitted markup classes under .anvil-qq. No DOM/JS changes,
   no grid-template changes, no new comparison table, no forced-priority rules.
   Semantic positive/negative metric-value colours are deliberately left untouched. */

/* Card surfaces — selected = clay-tinted emphasis, compare = neutral paper */
.anvil-qq .markup-option-card {
  background: var(--sheet);
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1, 0 1px 2px rgba(50, 36, 22, .05));
}
.anvil-qq .markup-option-card.selected {
  background:
    radial-gradient(circle at top right, rgba(var(--clay-rgb), .08), transparent 60%),
    var(--sheet);
  border-color: var(--clay-line);
}
.anvil-qq .markup-option-card.compare {
  background: var(--paper-3);
  border-color: var(--rule);
  opacity: 1;
}

/* Header hierarchy */
.anvil-qq .markup-option-head {
  border-bottom: 1px solid var(--rule);
}
.anvil-qq .markup-option-title span:not(.active-badge) {
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: .12em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.82);
}
.anvil-qq .markup-head-right strong {
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
  font-size: 22px;
  font-weight: 800;
  line-height: 1;
  letter-spacing: -.01em;
  color: var(--ink);
}

/* Status badges */
.anvil-qq .active-badge {
  font-family: var(--mono);
  font-size: 9.5px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--clay-deep);
  background: var(--sheet);
  border: 1px solid var(--clay-line);
  border-radius: 999px;
  padding: 2px 8px;
}
.anvil-qq .active-badge.muted-badge {
  color: var(--slate);
  background: var(--sheet);
  border-color: var(--slate-line);
}
.anvil-qq .markup-margin-badge {
  font-family: var(--mono);
  font-size: 10px;
  color: var(--ink-3);
  background: var(--paper-2);
  border: 1px solid var(--rule);
  border-radius: 999px;
  padding: 2px 8px;
}

/* Metric labels only (values keep their existing semantic colours) */
.anvil-qq .markup-primary-metrics .markup-metric span {
  color: var(--ink-3);
}

/* Impact-vs-selected block */
.anvil-qq .markup-impact-block {
  background: var(--paper-2);
  border: 1px solid var(--rule);
  border-radius: var(--r-sm, 8px);
}
.anvil-qq .markup-impact-block .impact-title {
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--slate);
}

/* Details toggle */
.anvil-qq .markup-mini-toggle {
  font-family: var(--mono);
  font-size: 11px;
  color: var(--ink-2);
}
.anvil-qq .markup-mini-toggle:hover {
  color: var(--clay-deep);
}

/* ANVIL QUICK QUOTE SKIN - Phase 2C-3 INPUTS AND JOB PROFILE */
/* Scoped, CSS-only visual alignment of the Job Profile + Project Inputs surfaces.
   No DOM/JS/id changes, no grid-template changes, no forced-priority rules.
   background-color (never the background shorthand) is used so select chevron
   background-images are preserved. Lock/disabled visuals (.parameter-locked /
   .lock-corner) and semantic ok/warn/bad styling are left intact. Input
   border-radius is intentionally unchanged to avoid paired input/unit mismatches. */

/* Field labels — warmer ink, slightly lighter than the heavy default */
.anvil-qq label span,
.anvil-qq .notes-field span {
  color: var(--ink-2);
  font-weight: 700;
}

/* Inputs / selects / textareas — paper surfaces with Anvil borders */
.anvil-qq input,
.anvil-qq textarea,
.anvil-qq select {
  background-color: var(--paper-3);
  border-color: var(--rule);
}
.anvil-qq input:focus,
.anvil-qq textarea:focus,
.anvil-qq select:focus {
  border-color: var(--clay);
  box-shadow: 0 0 0 3px rgba(var(--clay-rgb), .16);
}
.anvil-qq input::placeholder,
.anvil-qq textarea::placeholder {
  color: var(--ink-4);
}

/* Unit suffix chip on input-with-unit */
.anvil-qq .input-with-unit > span {
  background-color: var(--paper-2);
  border-color: var(--rule);
  color: var(--ink-3);
}

/* Helper text + margin-equivalent chip */
.anvil-qq .field-hint {
  color: var(--ink-3);
}
.anvil-qq .margin-equivalent-chip {
  font-family: var(--mono);
  color: var(--ink-3);
}

/* Job Profile summary preview line */
.anvil-qq .job-profile-preview {
  font-family: var(--mono);
  color: var(--ink-3);
}

/* Collapsible + advanced section headings and toggles */
.anvil-qq .collapsible-card-header h2,
.anvil-qq .collapsible-card-header h3,
.anvil-qq .advanced-job-header h3 {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--ink);
}
.anvil-qq .collapse-toggle {
  color: var(--clay-deep);
}

/* Locked/disabled clarity — reinforces existing lock-corner, no behaviour change */
.anvil-qq input:disabled,
.anvil-qq select:disabled,
.anvil-qq textarea:disabled {
  cursor: not-allowed;
}

/* ANVIL QUICK QUOTE SKIN - Phase 2C-4A CHEATS AND GLOSSARY */
/* Scoped, CSS-only Anvil alignment of the static Cheat Sheets and Glossary
   reference pages. Confirmed independent: no app.js logic reads these pages
   (the in-code `glossary` object is a separate tooltip dictionary, unrelated to
   #page-glossary). Scoped to #page-cheats / #page-glossary only; no DOM/JS/
   grid-template changes; no forced-priority rules. */

/* Page intros */
#page-cheats .page-intro h2,
#page-glossary .page-intro h2 {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--ink);
}
#page-cheats .page-intro p,
#page-glossary .page-intro p {
  color: var(--muted);
}

/* Reference cards — warm Anvil card treatment */
#page-cheats .info-card,
#page-glossary .glossary-card {
  background-color: var(--card);
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1, 0 1px 2px rgba(50, 36, 22, .05));
}

/* Card headings — serif; glossary terms accented in clay */
#page-cheats .info-card h3 {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--ink);
}
#page-glossary .glossary-card h3 {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--clay-deep);
}

/* Body copy / definitions */
#page-cheats .info-card p,
#page-glossary .glossary-card p {
  color: var(--ink-2);
  line-height: 1.55;
}

/* ANVIL QUICK QUOTE SKIN - Phase 2C-4B SAVED QUOTES */
/* Scoped, CSS-only Anvil alignment of the Saved Quotes subpage. JS-rendered
   .saved-item rows are styled by class only — no DOM/JS/id/data-* changes, no
   grid-layout changes, no forced-priority rules. The status <select> uses
   background-color so its native chevron is preserved; no controls are hidden,
   disabled, or repositioned. */

/* Page intro + card header */
#page-saved .page-intro h2,
#page-saved .saved-card .card-header h2 {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--ink);
}
#page-saved .page-intro p {
  color: var(--muted);
}

/* Saved quote rows — clearer separation on a warm paper surface */
#page-saved .saved-item {
  background-color: var(--paper-3);
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
}
#page-saved .saved-title {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--ink);
}
#page-saved .saved-meta {
  font-family: var(--mono);
  color: var(--ink-3);
}

/* Status control */
#page-saved .saved-status-control span {
  font-family: var(--mono);
  text-transform: uppercase;
  color: var(--ink-3);
}
#page-saved .saved-status-control select {
  background-color: var(--sheet);
  border-color: var(--rule);
  color: var(--ink);
}
#page-saved .saved-status-control select:focus {
  outline: none;
  border-color: var(--clay);
  box-shadow: 0 0 0 3px rgba(var(--clay-rgb), .16);
}

/* Action buttons — align to Anvil tokens; danger stays clearly safe-destructive */
#page-saved .saved-item .btn-secondary {
  border-color: var(--rule);
}
#page-saved .saved-item .btn-danger {
  background-color: var(--bad-bg);
  color: var(--bad);
  border-color: var(--bad-line);
}

/* Sprint 1 Batch 1: saved-quote card readability — structured header, chips, status
   badge, and a promoted total. Presentation only; the .saved-item grid, data hooks,
   and status control are unchanged, and no forced-priority flags are added. */
#page-saved .saved-head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 8px;
}
#page-saved .saved-head .saved-title {
  min-width: 0;
  overflow-wrap: anywhere;
}
#page-saved .saved-client {
  margin-top: 2px;
  font-family: var(--mono);
  font-size: 12px;
  color: var(--ink-3);
}
/* Batch 1B: the status badge IS the control — a <select> styled as a pill badge
   (closed state reads as a chip, not a form dropdown). Recoloured by data-status-value. */
#page-saved .saved-status-select {
  appearance: none;
  -webkit-appearance: none;
  flex: 0 0 auto;
  margin: 0;
  padding: 3px 11px;
  border-radius: 999px;
  border: 1px solid var(--rule);
  background: var(--paper-2);
  color: var(--ink-3);
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 800;
  letter-spacing: .08em;
  text-transform: uppercase;
  line-height: 1.6;
  white-space: nowrap;
  cursor: pointer;
  transition: border-color .15s ease, background-color .15s ease;
}
#page-saved .saved-status-select:hover:not(:disabled) {
  border-color: rgba(var(--clay-rgb), .5);
}
#page-saved .saved-status-select:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
#page-saved .saved-status-select:disabled {
  cursor: default;
  opacity: .9;
}
#page-saved .saved-status-select[data-status-value="sent"] {
  color: var(--slate);
  background: var(--slate-wash);
  border-color: var(--slate-line);
}
#page-saved .saved-status-select[data-status-value="approved"] {
  color: var(--good);
  border-color: var(--good);
}
#page-saved .saved-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 5px;
  margin-top: 8px;
}
#page-saved .saved-chip {
  display: inline-flex;
  align-items: center;
  padding: 2px 8px;
  border-radius: 999px;
  border: 1px solid var(--rule);
  background: var(--paper-2);
  color: var(--ink-3);
  font-family: var(--mono);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: .02em;
  white-space: nowrap;
}
#page-saved .saved-chip--you {
  color: var(--clay-deep);
  background: var(--clay-tint);
  border-color: var(--clay-line);
}
#page-saved .saved-chip--owner {
  color: var(--slate);
}
#page-saved .saved-chip--muted {
  color: var(--ink-4);
}
#page-saved .saved-total {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-top: 9px;
}
#page-saved .saved-total-value {
  font-size: 19px;
  font-weight: 800;
  letter-spacing: -.01em;
  color: var(--ink);
}
#page-saved .saved-total-label {
  font-family: var(--mono);
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--ink-3);
}

/* Batch 1B: right-side actions — primary Edit Quote, subtle Delete, and a ⋯ overflow
   menu for the HTML export. Calmer than three full buttons. */
#page-saved .saved-aside {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
}
#page-saved .saved-aside .btn { width: auto; }
#page-saved .saved-edit { white-space: nowrap; }
#page-saved .saved-delete {
  background: transparent;
  border-color: transparent;
  color: var(--ink-3);
}
#page-saved .saved-delete:hover:not(:disabled) {
  color: var(--bad);
  background: var(--bad-bg);
  border-color: var(--bad-line);
}
#page-saved .saved-delete:disabled { opacity: .5; }
#page-saved .saved-overflow {
  position: relative;
  display: inline-flex;
}
#page-saved .saved-overflow-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  padding: 0;
  border-radius: 10px;
  border: 1px solid transparent;
  background: transparent;
  color: var(--ink-3);
  cursor: pointer;
  transition: background-color .15s ease, border-color .15s ease;
}
#page-saved .saved-overflow-btn:hover {
  background: var(--paper-2);
  border-color: var(--rule);
}
#page-saved .saved-overflow-btn:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
#page-saved .saved-overflow-btn svg {
  width: 18px;
  height: 18px;
  fill: currentColor;
}
#page-saved .saved-overflow-menu:not([hidden]) {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  z-index: 40;
  min-width: 186px;
  padding: 6px;
  display: grid;
  gap: 2px;
  border-radius: 12px;
  border: 1px solid var(--rule);
  background: var(--sheet);
  box-shadow: 0 14px 32px rgba(26, 16, 11, .16);
  opacity: 0;
  transform: translateY(-4px);
  transform-origin: top right;
  transition: opacity .14s ease, transform .14s ease;
}
#page-saved .saved-overflow-menu.is-shown {
  opacity: 1;
  transform: none;
}
#page-saved .saved-overflow-item {
  width: 100%;
  text-align: left;
  padding: 9px 11px;
  border: none;
  border-radius: 8px;
  background: transparent;
  color: var(--ink);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
#page-saved .saved-overflow-item:hover { background: var(--paper-2); }
#page-saved .saved-overflow-item:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: -2px;
}

/* Batch 1B: reusable in-app confirm dialog (Anvil-native; replaces window.confirm).
   The overlay keeps the [hidden] attribute as the hard default so it stays hidden even
   if external CSS fails to load; display is only set when not [hidden]. */
.anvil-modal-overlay {
  position: fixed;
  inset: 0;
  z-index: 400;
  padding: 24px;
  background: rgba(26, 16, 11, .42);
  opacity: 0;
  transition: opacity .18s ease;
}
.anvil-modal-overlay:not([hidden]) {
  display: flex;
  align-items: center;
  justify-content: center;
}
.anvil-modal-overlay.is-open { opacity: 1; }
.anvil-modal {
  width: 100%;
  max-width: 400px;
  padding: 24px;
  border-radius: 18px;
  border: 1px solid var(--rule);
  background: var(--sheet);
  box-shadow: 0 24px 60px rgba(26, 16, 11, .26);
  transform: translateY(8px) scale(.985);
  transition: transform .18s ease;
}
.anvil-modal-overlay.is-open .anvil-modal { transform: none; }
.anvil-modal-title {
  margin: 0 0 8px;
  font-family: var(--serif);
  font-size: 19px;
  font-weight: 800;
  letter-spacing: -.01em;
  color: var(--ink);
}
.anvil-modal-message {
  margin: 0 0 20px;
  font-size: 14px;
  line-height: 1.5;
  color: var(--ink-2);
}
.anvil-modal-actions {
  display: flex;
  justify-content: flex-end;
  gap: 10px;
}
/* Batch 1C: interaction polish — Edit "Opening…" feedback, calm card-removal on delete,
   and a light button press. No forced-priority flags. */
#page-saved .saved-item {
  transition: opacity .26s ease, transform .26s ease, max-height .3s ease, margin .3s ease, padding .3s ease;
}
#page-saved .saved-item.is-deleting { opacity: .55; }
#page-saved .saved-item.is-removing {
  opacity: 0;
  transform: scale(.985);
  overflow: hidden;
  pointer-events: none;
}
#page-saved .saved-edit.is-opening { opacity: .85; }
#page-saved .saved-aside .btn:active:not(:disabled),
#page-saved .saved-overflow-btn:active { transform: translateY(1px); }

@media (prefers-reduced-motion: reduce) {
  .anvil-modal-overlay,
  .anvil-modal,
  #page-saved .saved-item,
  #page-saved .saved-overflow-menu:not([hidden]) { transition: none; }
}

/* Batch 2: Saved/Company Quotes search / filter / sort toolbar (client-side). */
#page-saved .saved-toolbar {
  display: flex;
  flex-wrap: wrap;
  align-items: end;
  gap: 10px;
  margin-bottom: 14px;
}
#page-saved .saved-search {
  flex: 1 1 220px;
  min-width: 0;
  min-height: 40px;
  padding: 0 14px;
  border-radius: 12px;
  border: 1px solid var(--rule);
  background: var(--sheet);
  color: var(--ink);
  font-size: 14px;
}
#page-saved .saved-search:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
#page-saved .saved-toolbar-field {
  display: grid;
  gap: 4px;
}
#page-saved .saved-toolbar-field > span {
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--ink-3);
}
#page-saved .saved-toolbar-field select {
  min-height: 40px;
  padding: 0 30px 0 12px;
  border-radius: 12px;
  border: 1px solid var(--rule);
  background-color: var(--sheet);
  color: var(--ink);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}
#page-saved .saved-toolbar-field select:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
@media (max-width: 560px) {
  #page-saved .saved-toolbar { flex-direction: column; align-items: stretch; }
  #page-saved .saved-toolbar-field select { width: 100%; }
}

/* Batch 2: calculator-only actions (Reset / Save / Internal Summary PDF) show only on the
   Quick Quote calculator page. The active page is reflected on <body data-active-page>. */
body:not([data-active-page="quickquote"]) .app-subnav-actions {
  display: none;
}

/* Empty state */
#page-saved #savedQuotes .metric-sub {
  color: var(--ink-3);
  text-align: center;
  padding: 22px 16px;
  font-size: 13px;
}

/* ANVIL QUICK QUOTE BEHAVIOUR - Phase 2C-H1C SAVE TOAST */
/* Sleek, non-blocking save confirmation. Element is created on demand by app.js
   (#anvilToast) and only shown after a confirmed successful save. Token-based;
   pointer-events:none keeps it non-interactive so it never blocks the UI. */
.anvil-toast {
  position: fixed;
  left: 50%;
  bottom: 28px;
  transform: translate(-50%, 12px);
  z-index: 400;
  display: inline-flex;
  align-items: center;
  gap: 9px;
  padding: 11px 18px;
  background-color: var(--espresso);
  color: var(--espresso-ink);
  font-family: var(--mono);
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: .02em;
  border-radius: 999px;
  box-shadow: var(--e3, 0 18px 46px rgba(35, 25, 15, .13));
  opacity: 0;
  pointer-events: none;
  transition: opacity var(--motion-med, 340ms) var(--ease-out, ease),
              transform var(--motion-med, 340ms) var(--ease-out, ease);
}
.anvil-toast::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background-color: var(--clay);
}
.anvil-toast.is-visible {
  opacity: 1;
  transform: translate(-50%, 0);
}

/* ANVIL QUICK QUOTE SKIN - Phase 2C-4C COMPANY SETTINGS */
/* Scoped, CSS-only Anvil alignment of the admin Company Settings subpage.
   #page-settings only — no DOM/JS/id/data-* changes, no grid-layout changes,
   no forced-priority rules. Lock-state signals are deliberately NOT overridden:
   the locked #settingsContent opacity/grayscale, the locked/unlocked
   #settingsStatus colours, the locked .settings-warning visibility, and the
   disabled-field appearance are left to the existing rules. Inputs use :enabled
   so locked/disabled fields keep their disabled look; background-color (not the
   background shorthand) preserves select chevrons. */

/* Page intro */
#page-settings .page-intro h2 {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--ink);
}
#page-settings .page-intro p {
  color: var(--muted);
}

/* Settings card + headers */
#page-settings .settings-card {
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1, 0 1px 2px rgba(50, 36, 22, .05));
}
#page-settings .settings-card-header h2 {
  font-family: var(--serif);
  letter-spacing: -.01em;
  color: var(--ink);
}
#page-settings #settingsStatus {
  font-family: var(--mono); /* font only — locked/unlocked colours preserved */
}
#page-settings .settings-group h3 {
  font-family: var(--serif);
  color: var(--ink);
}
#page-settings .settings-group label > span {
  color: var(--ink-2);
}

/* Locked-state warning — align to Anvil warn tokens (visibility logic untouched) */
#page-settings .settings-warning {
  background-color: var(--warn-bg);
  border-color: var(--warn-line);
  color: var(--ink-2);
}

/* Lock toggle cards */
#page-settings .lock-toggle {
  background-color: var(--sheet);
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
}
#page-settings .lock-toggle strong {
  color: var(--ink);
}
#page-settings .lock-toggle small {
  color: var(--ink-3);
}

/* Calculated totals rows */
#page-settings .calculated-row span {
  color: var(--ink-3);
}
#page-settings .calculated-row strong {
  font-family: var(--mono);
  color: var(--ink);
}

/* Enabled fields only — disabled/locked fields keep their disabled appearance */
#page-settings input:enabled:not([type="checkbox"]),
#page-settings select:enabled,
#page-settings textarea:enabled {
  background-color: var(--paper-3);
  border-color: var(--rule);
}
#page-settings input:enabled:not([type="checkbox"]):focus,
#page-settings select:enabled:focus,
#page-settings textarea:enabled:focus {
  outline: none;
  border-color: var(--clay);
  box-shadow: 0 0 0 3px rgba(var(--clay-rgb), .16);
}

/* Staff empty state */
#page-settings .staff-empty {
  color: var(--ink-3);
}

/* Buttons */
#page-settings .btn-secondary {
  border-color: var(--rule);
}
#page-settings .btn-danger {
  background-color: var(--bad-bg);
  color: var(--bad);
  border-color: var(--bad-line);
}


/* ANVIL QUICK QUOTE SKIN - Phase 2C-P3F AUTH FINAL TUNE */
/* Final tuning to match screenshots/baseline_01_login.png.png: clean (un-dotted)
   warm linen brand panel left, white form panel right, simplified Anvil-led form
   (old .auth-gate-brand cluster hidden — nodes kept in DOM so app.js #authTitle/
   #cloudStatus hooks remain intact; #authMessage errors stay visible). Single
   current auth block (supersedes P3..P3E). CSS-only; no app.js hooks touched. */

#authGate {
  min-height: 100vh;
  display: grid;
  grid-template-columns: 53fr 47fr;
  place-items: stretch;
  padding: 0;
  /* Phase 2E-DASH-1A-3: right-side auth surface = #fbf7ef (= --paper). The left
     column is fully covered by .auth-brand-panel's opaque gradient, so this grid
     background only shows on the right (the form card is transparent). */
  background: #fbf7ef;
}

/* LEFT — clean warm linen panel (no dots) */
.auth-brand-panel {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 28px;
  padding: clamp(32px, 4.5vw, 76px);
  background: linear-gradient(165deg, var(--linen-3) 0%, var(--paper-2) 100%);
  border-right: 1px solid var(--rule);
}
.auth-brand-tag {
  margin: 0;
  font-family: var(--mono);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--ink-4);
}
.auth-brand-mid {
  max-width: 32ch;
}
.auth-brand-wordmark {
  margin: 0;
  font-family: var(--serif-head);
  font-weight: 600;
  font-size: clamp(60px, 8.5vw, 124px);
  letter-spacing: -.03em;
  line-height: .9;
  color: var(--ink);
}
.auth-brand-copy {
  margin: 24px 0 0;
  font-family: var(--serif);
  font-size: clamp(17px, 1.6vw, 22px);
  line-height: 1.45;
  color: var(--ink-2);
  max-width: 30ch;
}
.auth-brand-flow {
  margin: 18px 0 0;
  font-family: var(--mono);
  font-size: 12px;
  font-weight: 600;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--clay);
}
.auth-brand-foot {
  margin: 0;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--ink-4);
}

/* RIGHT — clean white, simplified, Anvil-led */
#authGate .auth-gate-card {
  width: 100%;
  max-width: 376px;
  justify-self: center;
  align-self: center;
  margin: 0;
  padding: clamp(28px, 3vw, 48px);
  background-color: transparent;
  border: 0;
  border-radius: 0;
  box-shadow: none;
}
#authGate .auth-form-identity {
  margin: 0 0 22px;
  font-family: var(--serif-head);
  font-weight: 600;
  font-size: 28px;
  letter-spacing: -.02em;
  color: var(--ink);
}
/* Hide the legacy pricing-tool brand cluster (logo/eyebrow/#authTitle/#cloudStatus).
   Nodes remain in the DOM so app.js keeps its hooks; visual de-emphasis only. */
#authGate .auth-gate-brand {
  display: none;
}
/* Simple baseline form heading */
#authGate .auth-form-head {
  margin-bottom: 18px;
}
#authGate .auth-form-title {
  margin: 0;
  font-family: var(--serif-head);
  font-weight: 600;
  font-size: 23px;
  letter-spacing: -.01em;
  color: var(--ink);
}
#authGate .auth-form-sub {
  margin: 5px 0 0;
  font-size: 13px;
  color: var(--ink-3);
}

/* Tabs — restrained segmented group */
#authGate .auth-tabs {
  padding: 4px;
  gap: 4px;
  margin-bottom: 18px;
  background-color: var(--paper-2);
  border: 1px solid var(--rule);
  border-radius: 11px;
}
#authGate .auth-tab {
  min-height: 38px;
  border-radius: 8px;
  font-family: var(--sans);
  font-weight: 600;
  font-size: 13px;
  color: var(--ink-3);
  transition: background-color var(--motion-fast, 220ms), color var(--motion-fast, 220ms), box-shadow var(--motion-fast, 220ms);
}
#authGate .auth-tab:hover {
  color: var(--ink);
}
#authGate .auth-tab.is-active {
  background-color: var(--sheet);
  color: var(--ink);
  box-shadow: var(--e1, 0 1px 2px rgba(50, 36, 22, .05));
}

/* Forms / inputs — crisp and simple */
#authGate .auth-form {
  gap: 14px;
}
#authGate .auth-form label span {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--ink-2);
}
#authGate .auth-form input {
  min-height: 46px;
  padding: 0 13px;
  background-color: var(--paper-3);
  border: 1px solid var(--rule-2);
  border-radius: 9px;
  font-size: 14px;
  transition: border-color var(--motion-fast, 220ms), box-shadow var(--motion-fast, 220ms);
}
#authGate .auth-form input::placeholder {
  color: var(--ink-4);
}
#authGate .auth-form input:focus {
  outline: none;
  border-color: var(--clay);
  box-shadow: 0 0 0 3px rgba(var(--clay-rgb), .16);
}
#authGate .auth-submit {
  min-height: 48px;
  margin-top: 6px;
  border-radius: 9px;
  font-weight: 700;
  letter-spacing: .01em;
}
#authGate .auth-domain-note {
  margin-top: 16px;
  font-family: var(--mono);
  font-size: 10.5px;
  letter-spacing: .04em;
  color: var(--ink-3);
  text-align: center;
}
#authGate .auth-message {
  margin-top: 12px;
  text-align: center;
}

/* Responsive — stack; left becomes a top band */
@media (max-width: 880px) {
  #authGate {
    grid-template-columns: 1fr;
    background: #fbf7ef;
  }
  .auth-brand-panel {
    border-right: 0;
    border-bottom: 1px solid var(--rule);
    padding: clamp(28px, 7vw, 48px);
    gap: 14px;
  }
  .auth-brand-wordmark {
    font-size: clamp(44px, 13vw, 72px);
  }
  .auth-brand-copy {
    font-size: 16px;
  }
  #authGate .auth-gate-card {
    max-width: 440px;
    align-self: start;
    padding: clamp(26px, 7vw, 40px);
  }
}

/* ANVIL QUICK QUOTE SUB-NAV - Phase 2D-NAV-2A */
/* Repurpose the legacy .app-nav pill row into a light Quick Quote contextual
   strip: relabeled section items on the left, the relocated Quote actions on the
   right. Scoped to Quick Quote context pages via :has(); hidden elsewhere. Reuses
   the existing .app-nav / .app-nav-btn / [data-page-target] / data-admin-only
   hooks (renderAdminAccess + initAppPages unaffected). Additive overrides only;
   no app.js, no forced-priority rules. The .app-header lockup stays this phase. */
.app-nav {
  display: none;
  gap: 14px;
  align-items: center;
  overflow-x: auto;
  padding: 8px 12px;
  margin: -6px 0 22px;
  background: var(--paper-3);
  border: 1px solid var(--rule);
  border-radius: 12px;
  box-shadow: var(--e1);
  scrollbar-width: thin;
}
/* Show the contextual strip only on Quick Quote context pages. */
.app-shell:has(#page-quickquote.is-active) .app-nav,
.app-shell:has(#page-saved.is-active) .app-nav,
.app-shell:has(#page-settings.is-active) .app-nav,
.app-shell:has(#page-cheats.is-active) .app-nav,
.app-shell:has(#page-glossary.is-active) .app-nav {
  display: flex;
}
.app-subnav-items {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-wrap: wrap;
}
.app-subnav-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-left: auto;
  flex-wrap: wrap;
}
.app-nav-btn {
  border: 1px solid transparent;
  background: transparent;
  color: var(--ink-3);
  border-radius: 8px;
  padding: 7px 13px;
  font-family: var(--mono);
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: .02em;
  white-space: nowrap;
  box-shadow: none;
  cursor: pointer;
  transition: color var(--motion-fast), background var(--motion-fast), border-color var(--motion-fast);
}
.app-nav-btn:hover {
  transform: none;
  color: var(--ink);
  background: var(--paper-2);
  border-color: transparent;
}
.app-nav-btn.is-active {
  background: var(--sheet);
  color: var(--ink);
  border-color: var(--rule);
  box-shadow: var(--e1);
}
.app-subnav-actions .btn {
  padding: 9px 14px;
  font-size: 12.5px;
  border-radius: 9px;
  box-shadow: none;
}
.app-subnav-actions .btn:hover {
  transform: none;
}

/* ANVIL USER MENU + LEGACY HEADER REMOVAL - Phase 2D-NAV-2B (+ NAV-2B-1 touch fix) */
/* The relocated session email (#authUserEmail) and logout (#authLogoutBtn) live
   in a small account menu under the global-header avatar. NAV-2B-1 makes it a
   native <details>/<summary> disclosure so it opens on click/tap AND keyboard
   (Enter/Space) — no JS, touch-safe. The summary IS the avatar; its default
   marker is hidden. The popover is absolutely positioned (no layout shift) and
   plays a subtle pop on [open]. IDs are unchanged so renderAuthPanel +
   bindAuthEvents keep working. The legacy .app-header lockup was removed from the
   DOM (its print rules are now inert; the PDF builds its own logo + title and
   never read the DOM header). Outside-click / Esc auto-close still needs JS and
   stays deferred; the summary toggles closed on click. */
.anvil-usermenu {
  position: relative;
  display: inline-block;
}
.anvil-usermenu > summary {
  list-style: none;
  cursor: pointer;
}
.anvil-usermenu > summary::-webkit-details-marker { display: none; }
.anvil-usermenu > summary::marker { content: ""; }
.anvil-usermenu > .anvil-avatar {
  border: 0;
  cursor: pointer;
}
.anvil-usermenu > summary:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
.skip-link {
  position: absolute;
  top: 8px;
  left: 8px;
  z-index: 200;
  transform: translateY(-150%);
  padding: 9px 14px;
  background: var(--sheet);
  color: var(--ink);
  border: 1px solid var(--rule);
  border-radius: 9px;
  box-shadow: 0 6px 18px rgba(26,16,11,.14);
  font-weight: 600;
  font-size: 13px;
  text-decoration: none;
  transition: transform .15s ease;
}
.skip-link:focus {
  transform: translateY(0);
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
.btn:focus-visible,
.anvil-navtab:focus-visible,
.anvil-navtab-child:focus-visible,
.app-nav-btn:focus-visible,
.anvil-mobile-navlink:focus-visible,
.auth-tab:focus-visible,
.collapse-toggle:focus-visible,
.help-dot:focus-visible,
.markup-mini-toggle:focus-visible,
.notes-expand-btn:focus-visible,
.lock-toggle input:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
/* Markup card shape: round the bottom of the details section so its child
   backgrounds don't square off past the rounded card shell. The card keeps
   overflow: visible (preserves the fixed help tooltips), so the bottom layer is
   rounded directly instead of being clipped: the details panel covers the
   collapsed state, and the final detail row covers the expanded state. Card
   radius is 26px with a 1px border -> 25px inner radius. */
.markup-option-card .markup-details {
  border-bottom-left-radius: 25px;
  border-bottom-right-radius: 25px;
}
.markup-option-card .markup-details-content > .markup-metric:last-child {
  border-bottom-left-radius: 25px;
  border-bottom-right-radius: 25px;
}
.anvil-usermenu-pop {
  position: absolute;
  top: calc(100% + 10px);
  right: 0;
  min-width: 244px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 12px;
  background: var(--paper-3);
  border: 1px solid var(--rule);
  border-radius: 12px;
  box-shadow: var(--e3);
  z-index: 60;
}
.anvil-usermenu[open] .anvil-usermenu-pop {
  animation: anvilUserMenuPop var(--motion-fast) var(--ease-soft);
}
@keyframes anvilUserMenuPop {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}
/* Email line inside the menu (reset the legacy session-pill chip look). */
.anvil-usermenu-pop .session-pill {
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--rule);
  border-radius: 0;
  box-shadow: none;
  padding: 2px 2px 9px;
  font-family: var(--mono);
  font-size: 11.5px;
  letter-spacing: .01em;
  color: var(--ink-3);
  word-break: break-all;
}
.anvil-usermenu-pop .session-logout {
  width: 100%;
  justify-content: center;
  border-radius: 9px;
  box-shadow: none;
}
.anvil-usermenu-pop .session-logout:hover {
  transform: none;
}

/* ANVIL MOBILE GLOBAL HEADER - Phase 2D-NAV-2B-3 */
/* Responsive correction only. Desktop header is unchanged. At <=720px the global
   header becomes three zones: a native <details> burger (left), the centred Anvil.
   wordmark, and the gear + account menu (right). The desktop tab row is hidden on
   mobile; its targets are duplicated inside the burger. Burger opens on click/tap
   and keyboard via native <details> (no app.js). All items keep [data-page-target]
   so initAppPages drives navigation + active state. Additive; no forced-priority
   rules; the NAV-2B account menu + NAV-2B-2 close helper are untouched. */
.anvil-mobile-menu {
  display: none;
}
@media (max-width: 720px) {
  .anvil-topbar {
    position: relative;
    align-items: center;
    gap: 8px;
  }
  /* Hide the desktop tab row; route navigation through the burger instead. */
  .anvil-nav {
    display: none;
  }
  /* Centre the wordmark; drop the descriptor and brand divider on mobile. */
  .anvil-brand {
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    gap: 0;
    padding-right: 0;
    border-right: 0;
  }
  .anvil-descriptor {
    display: none;
  }
  /* Burger (left zone). */
  .anvil-mobile-menu {
    display: inline-block;
    position: relative;
  }
  .anvil-burger {
    list-style: none;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border-radius: 9px;
    border: 1px solid transparent;
    background: transparent;
    color: var(--ink-2);
    font-size: 18px;
    line-height: 1;
  }
  .anvil-burger::-webkit-details-marker { display: none; }
  .anvil-burger::marker { content: ""; }
  .anvil-burger:focus-visible {
    outline: 2px solid var(--clay);
    outline-offset: 2px;
  }
  .anvil-mobile-menu[open] .anvil-burger {
    background: var(--paper-2);
    border-color: var(--rule);
  }
  .anvil-mobile-nav {
    position: absolute;
    top: calc(100% + 10px);
    left: 0;
    min-width: 220px;
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 10px;
    background: var(--paper-3);
    border: 1px solid var(--rule);
    border-radius: 12px;
    box-shadow: var(--e3);
    z-index: 70;
    animation: anvilUserMenuPop var(--motion-fast) var(--ease-soft);
  }
  .anvil-mobile-navlink {
    border: 0;
    background: transparent;
    color: var(--ink-2);
    text-align: left;
    font-family: var(--mono);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .02em;
    padding: 10px 12px;
    border-radius: 8px;
    cursor: pointer;
    transition: color var(--motion-fast), background var(--motion-fast);
  }
  .anvil-mobile-navlink:hover {
    color: var(--ink);
    background: var(--paper-2);
  }
  .anvil-mobile-navlink.is-active {
    color: var(--clay);
    background: var(--clay-tint);
  }
}

/* ANVIL GLOBAL NAV DROPDOWN - Phase 2D-NAV-3A (Quick Quote) */
/* Desktop-only hover/focus-within dropdown under the Quick Quote global tab. The
   parent stays a real .anvil-navtab[data-page-target="quickquote"] button (click
   still navigates); the dropdown is revealed by CSS only — no app.js. Children are
   static [data-page-target] buttons bound by initAppPages at load; Company Settings
   keeps data-admin-only (hidden for non-admins by renderAdminAccess). Lives inside
   .anvil-nav, which is hidden <=720px, so this never reaches mobile/touch. The
   :has() rule keeps the parent visually active across Quick Quote context pages.
   Additive; no forced-priority rules. */
.anvil-navitem {
  position: relative;
  display: flex;
  align-items: stretch;
}
.anvil-navdrop {
  position: absolute;
  top: 100%;
  left: 0;
  min-width: 204px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 8px;
  background: var(--paper-3);
  border: 1px solid var(--rule);
  border-radius: 12px;
  box-shadow: var(--e3);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity var(--motion-fast) var(--ease-soft),
              transform var(--motion-fast) var(--ease-soft),
              visibility var(--motion-fast);
  z-index: 70;
}
/* Phase 2D-NAV-3B-1: subtle pointer-hover open delay so a quick parent click
   doesn't flash the dropdown. Closing stays immediate (base rule delay 0). Keyboard
   focus opens immediately (focus-within delay 0, placed after hover so it wins). */
.anvil-navitem:hover .anvil-navdrop {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition-delay: 130ms;
}
.anvil-navitem:focus-within .anvil-navdrop {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition-delay: 0s;
}
.anvil-navtab-child {
  border: 0;
  background: transparent;
  color: var(--ink-2);
  text-align: left;
  white-space: nowrap;
  font-family: var(--mono);
  font-size: 12.5px;
  font-weight: 600;
  letter-spacing: .02em;
  padding: 9px 12px;
  border-radius: 8px;
  cursor: pointer;
  transition: color var(--motion-fast), background var(--motion-fast);
}
.anvil-navtab-child:hover {
  color: var(--ink);
  background: var(--paper-2);
}
.anvil-navtab-child.is-active {
  color: var(--clay);
  background: var(--clay-tint);
}
/* Keep the Quick Quote parent reading active across its context sub-pages. */
.app-shell:has(#page-saved.is-active) .anvil-navitem--quickquote > .anvil-navtab,
.app-shell:has(#page-settings.is-active) .anvil-navitem--quickquote > .anvil-navtab,
.app-shell:has(#page-cheats.is-active) .anvil-navitem--quickquote > .anvil-navtab,
.app-shell:has(#page-glossary.is-active) .anvil-navitem--quickquote > .anvil-navtab {
  color: var(--ink);
  border-bottom-color: var(--clay);
}

/* ANVIL GLOBAL NAV DROPDOWN - Phase 2D-NAV-3B (Takeoff) */
/* The Takeoff tab reuses the NAV-3A dropdown pattern (.anvil-navitem /
   .anvil-navdrop / .anvil-navtab-child + hover/focus-within + child-click blur).
   Decking / Custom both route to data-page-target="takeoff" (no decking/custom
   pages exist) and carry a subtle "Soon" chip to signal they are not separate live
   modules yet. Only the chip style is new here. */
.anvil-soon-chip {
  margin-left: 8px;
  font-family: var(--mono);
  font-size: 8.5px;
  font-weight: 600;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--ink-4);
  border: 1px solid var(--rule);
  border-radius: 999px;
  padding: 1px 6px;
  vertical-align: middle;
}

/* ANVIL DASHBOARD - Phase 2E-DASH-1A HERO AND CORE */
/* Static, honest Dashboard hero + Core estimating section, scoped under
   #page-dashboard / new .anvil-dash-* classes. No fake data; CTAs reuse existing
   [data-page-target] (bound by initAppPages). The earlier Phase 2A .anvil-dashboard-*
   child rules are superseded (markup no longer uses them); the .anvil-dashboard
   container rule still applies and is widened here. No forced-priority rules. */
#page-dashboard.anvil-dashboard {
  max-width: 1160px;
  padding: 8px 0 56px;
}
.anvil-dash-hero {
  max-width: 720px;
  padding: 4px 4px 2px;
}
/* Phase 2E-DASH-1B-3: compact baseline-style identity/status row. */
.anvil-dash-id {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px;
}
.anvil-dash-id-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 50%;
  background: var(--clay);
  color: #fff;
  font-family: var(--mono);
  font-weight: 700;
  font-size: 12px;
  flex-shrink: 0;
}
.anvil-dash-id-name {
  font-size: 13.5px;
  font-weight: 600;
  color: var(--ink);
}
.anvil-dash-id-meta {
  font-size: 12.5px;
  color: var(--ink-3);
}
.anvil-dash-id-meta::before {
  content: "·";
  margin: 0 8px 0 2px;
  color: var(--ink-4);
}
/* Clay uppercase kicker (baseline date-style line, honest wording). */
.anvil-dash-eyebrow {
  margin: 16px 0 0;
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--clay);
}
.anvil-dash-title {
  margin: 6px 0 0;
  font-family: var(--serif);
  font-weight: 600;
  font-size: clamp(31px, 4.2vw, 44px);
  letter-spacing: -.02em;
  line-height: 1.03;
  color: var(--ink);
}
.anvil-dash-lede {
  margin: 10px 0 0;
  max-width: 560px;
  font-size: 14.5px;
  line-height: 1.5;
  color: var(--muted);
}
.anvil-dash-section {
  margin-top: 34px;
}
.anvil-dash-section--secondary {
  margin-top: 26px;
}
/* Phase 2E-DASH-1B-4: subtle full-width divider between the hero and the first
   section (Core estimating), matching the baseline. Border only — no background
   seam; dashboard-scoped via the adjacent sibling. */
.anvil-dash-hero + .anvil-dash-section {
  margin-top: 22px;
  padding-top: 22px;
  border-top: 1px solid #d0c5af;
}
.anvil-dash-section-head {
  display: flex;
  align-items: baseline;
  justify-content: flex-start;
  gap: 16px;
  flex-wrap: wrap;
  padding: 0 4px;
  margin-bottom: 14px;
  /* Phase 2E-DASH-1B-5: no underline beneath section headings (baseline .secrow has
     none) — the single divider lives between the hero and Core estimating only. */
}
.anvil-dash-section-title {
  margin: 0;
  font-family: var(--serif);
  font-weight: 600;
  font-size: 21px;
  letter-spacing: -.015em;
  color: var(--ink);
}
.anvil-dash-section-note {
  margin: 0;
  max-width: 460px;
  font-size: 13px;
  line-height: 1.5;
  color: var(--ink-3);
}
.anvil-dash-core-grid {
  display: grid;
  grid-template-columns: 1.7fr 1fr;
  gap: 18px;
  align-items: stretch;
}
.anvil-dash-card {
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding: 24px;
  background: var(--card);
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1);
}
.anvil-dash-card-main {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.anvil-dash-card-title {
  margin: 2px 0 0;
  font-family: var(--serif);
  font-weight: 600;
  font-size: 24px;
  letter-spacing: -.015em;
  color: var(--ink);
}
.anvil-dash-card-copy {
  margin: 0;
  font-size: 13.5px;
  line-height: 1.55;
  color: var(--muted);
}
.anvil-dash-card-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-top: auto;
}
.anvil-dash-card-actions .btn {
  border-radius: 9px;
  box-shadow: none;
}
.anvil-dash-card-actions .btn:hover {
  transform: none;
}
.anvil-dash-badge {
  align-self: flex-start;
  font-family: var(--mono);
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--clay);
  background: var(--clay-tint);
  border: 1px solid var(--clay-line);
  border-radius: 999px;
  padding: 3px 10px;
}
.anvil-dash-kicker {
  font-family: var(--mono);
  font-size: 10px;
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--ink-3);
}
/* Takeoff primary emphasis — clay-tinted, with the decorative plan beside it. */
.anvil-dash-card--takeoff {
  flex-direction: row;
  gap: 24px;
  padding: 28px;
  background:
    radial-gradient(circle at top right, rgba(var(--clay-rgb), .10), transparent 60%),
    var(--card);
  border-color: var(--clay-line);
}
.anvil-dash-card--takeoff .anvil-dash-card-main {
  flex: 1;
  min-width: 0;
}
.anvil-dash-card--takeoff .anvil-dash-card-title {
  font-size: 30px;
}
.anvil-dash-plan {
  flex: 0 0 196px;
  align-self: stretch;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 14px;
  background: var(--paper-2);
  border: 1px solid var(--rule);
  border-radius: 10px;
}
.anvil-plan-svg {
  width: 100%;
  height: auto;
  display: block;
}
.anvil-plan-frame {
  fill: none;
  stroke: var(--rule-2);
  stroke-width: 1.5;
}
.anvil-plan-grid line {
  stroke: var(--rule);
  stroke-width: 1;
}
.anvil-plan-shape {
  fill: rgba(var(--clay-rgb), .08);
  stroke: var(--clay);
  stroke-width: 1.5;
  stroke-linejoin: round;
}
.anvil-plan-node {
  fill: var(--clay);
}
.anvil-dash-card--holding {
  max-width: 520px;
  background: var(--paper-3);
}
@media (max-width: 720px) {
  #page-dashboard.anvil-dashboard { max-width: none; }
  .anvil-dash-core-grid { grid-template-columns: 1fr; }
  .anvil-dash-card--takeoff { flex-direction: column; }
  .anvil-dash-plan { flex-basis: auto; width: 100%; }
  .anvil-dash-section-head { flex-direction: column; gap: 6px; }
}

/* ANVIL DASHBOARD - Phase 2E-DASH-1B TOOL SECTIONS */
/* Honest static placeholder sections (Business & financial, Operations & tools)
   below Core estimating. Cards reuse the accepted --card surface; status chips use
   .anvil-soon-chip (+ a clay --preview variant). Reports & Handoff folds in here
   with a real CTA to data-page-target="reports". Icons are decorative inline SVG
   (stroke: currentColor). No fake data; HTML/CSS only; no forced-priority rules. */
.anvil-dash-tools-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 16px;
}
.anvil-dash-tool {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 20px;
  background: var(--card);
  border: 1px solid var(--rule);
  border-radius: var(--r-md, 12px);
  box-shadow: var(--e1);
}
.anvil-dash-tool-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.anvil-dash-tool-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 9px;
  background: var(--paper-2);
  border: 1px solid var(--rule);
  color: var(--ink-3);
}
.anvil-dash-tool-icon svg {
  width: 18px;
  height: 18px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.5;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.anvil-dash-tool--live .anvil-dash-tool-icon {
  color: var(--clay);
  background: var(--clay-tint);
  border-color: var(--clay-line);
}
.anvil-dash-tool-title {
  margin: 2px 0 0;
  font-family: var(--serif);
  font-weight: 600;
  font-size: 16px;
  letter-spacing: -.01em;
  color: var(--ink);
}
.anvil-dash-tool-copy {
  margin: 0;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--muted);
}
.anvil-dash-tool-actions {
  margin-top: auto;
  padding-top: 4px;
}
.anvil-dash-tool-actions .btn {
  border-radius: 9px;
  box-shadow: none;
  padding: 8px 14px;
  font-size: 12.5px;
}
.anvil-dash-tool-actions .btn:hover {
  transform: none;
}
.anvil-soon-chip--preview {
  color: var(--clay);
  border-color: var(--clay-line);
}
@media (max-width: 720px) {
  .anvil-dash-tools-grid { grid-template-columns: 1fr; }
}

/* Mobile/tablet touch-target + containment polish (2F-QQ-MOBILE safe subset).
   Scoped to <=768px so 768px tablet touch use is improved and desktop (>=769px,
   incl. 1440px) is unaffected. Touch targets get a 44px min tap height; pill/nav
   buttons centre their label, while the left-aligned mobile nav links only
   centre vertically (text stays left). Containment: min-width:0 lets
   value-holding grid/flex children shrink instead of forcing horizontal scroll.
   No forced-priority flags; no layout/structure/hierarchy change; markup stays two cards. */
@media (max-width: 768px) {
  .app-nav-btn,
  .app-subnav-actions .btn {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  .anvil-mobile-navlink {
    min-height: 44px;
    display: flex;
    align-items: center;
  }
  .anvil-qq .hero-summary .metric-card,
  .markup-compare-grid .markup-option-card,
  .quote-right .summary-list div {
    min-width: 0;
  }
  .saved-item .btn {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  .saved-status-control select {
    min-height: 44px;
  }
}

/* PR-1: print/PDF page-break robustness (internal quote summary).
   Keeps report rows intact, keeps the Notes heading with its text, and avoids
   single-line orphans/widows when the report spans multiple pages. Print-scoped,
   additive, content-preserving. No forced-priority flags. */
@media print {
  .print-table tr {
    break-inside: avoid;
    page-break-inside: avoid;
  }
  .print-report h3 {
    break-after: avoid;
    page-break-after: avoid;
  }
  .print-report p {
    orphans: 2;
    widows: 2;
  }
}

/* CQ-3: Saved Quotes My/Company segmented control + disabled non-owner actions.
   Toggle is a button group (aria-pressed); disabling is UX only (RLS enforces). */
.saved-quotes-tabs {
  display: inline-flex;
  gap: 4px;
  margin: 0 0 12px;
  padding: 4px;
  background: var(--paper-2);
  border: 1px solid var(--rule);
  border-radius: 12px;
}
.saved-quotes-tab {
  min-height: 36px;
  padding: 7px 14px;
  border: 0;
  border-radius: 9px;
  background: transparent;
  color: var(--ink-3);
  font-family: var(--mono);
  font-weight: 700;
  font-size: 12.5px;
  letter-spacing: .02em;
  cursor: pointer;
  transition: color .15s ease, background .15s ease;
}
.saved-quotes-tab.is-active {
  background: var(--sheet);
  color: var(--ink);
  box-shadow: var(--e1);
}
.saved-quotes-tab:focus-visible {
  outline: 2px solid var(--clay);
  outline-offset: 2px;
}
.saved-item .btn:disabled {
  opacity: .5;
  cursor: not-allowed;
}
@media (max-width: 768px) {
  .saved-quotes-tab { min-height: 44px; }
}
