/* ════════════════════════════════════════════════════════════════════
   Webcoda Proposals — UNIFIED design system
   Consolidates the v1 warm/cool token split into one warm-neutral set.
   Coral = signature + CLIENT CTAs · Blue = ADMIN CTAs/links (per DS rule)
   ════════════════════════════════════════════════════════════════════ */
:root{
  /* Brand */
  --coral:#FF5E54; --coral-deep:#E63E33; --coral-soft:#FFEDEB;
  --teal:#2A3E43;  --teal-soft:#3A565D;  --teal-900:#1F2E32;
  --blue:#2A62D3;  --blue-deep:#1F4FB0;  --blue-soft:#EAF0FC;

  /* Ink */
  --ink:#1C2A2E;          /* headings (warm teal-ink) */
  --ink-body:#2C3538;     /* body text */
  --muted:#6B7177;        /* secondary text */
  --faint:#969A9A;        /* tertiary / meta */

  /* Surfaces — single warm-neutral ramp */
  --paper:#FAF9F5;        /* app canvas */
  --surface:#FFFFFF;      /* cards */
  --sunken:#F2F1EA;       /* table headers, inset, alt rows */
  --line:#E7E4DB;         /* hairline borders */
  --line-strong:#D6D3C8;  /* stronger dividers / input rest */

  /* Status */
  --good:#2F7D54; --good-soft:#E7F3EC;
  --bad:#C8302E;  --bad-soft:#FBEAE9;
  --warn:#A6680A; --warn-soft:#FAF0DA;
  --info:#1F5BC4; --info-soft:#EAF0FC;

  /* Radius */
  --r-sm:6px; --r-md:8px; --r-lg:12px; --r-pill:999px;

  /* Elevation (used sparingly — sticky/elevated only) */
  --shadow-sm:0 1px 2px rgba(20,28,30,.05);
  --shadow:0 8px 28px rgba(20,28,30,.10);
  --shadow-pop:0 14px 40px rgba(20,28,30,.16);

  --font-display:"Poppins","Helvetica Neue",Arial,sans-serif;
  --font-body:"Open Sans","Helvetica Neue",Arial,sans-serif;
  --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --ease:cubic-bezier(.2,0,0,1);

  /* v2 layout system (REDESIGN-SPEC §1) */
  --side-w:236px;           /* sidebar, was 248 */
  --side-w-mini:64px;       /* icon rail */
  --page-max:1600px;        /* content cap on ultrawide */
  --rail-w:332px;           /* detail-page right rail */
  --form-max:880px;         /* settings/forms reading cap */
  --gutter:clamp(20px, 2.6vw, 44px);

  color-scheme: light;
}

/* ── Dark theme — overrides the surface/ink/line ramp; brand teal/coral stay.
   Applied via [data-theme="dark"] on <html> (set before paint in _Layout). ── */
[data-theme="dark"]{
  color-scheme: dark;

  --ink:#EEF1F2; --ink-body:#D5DBDD; --muted:#9BA3A8; --faint:#7C858A;

  --paper:#13181A; --surface:#1B2225; --sunken:#232B2E;
  --line:#2E3739; --line-strong:#3D474A;

  /* Brand: keep coral; lift blue for contrast on dark surfaces. */
  --blue:#5B8DEF; --blue-deep:#7AA3F2; --blue-soft:#1B2A47;
  --coral-soft:#3A211E;

  /* Status: lift text hues, darken soft backgrounds. */
  --good:#56B888; --good-soft:#15301F;
  --bad:#F0736E;  --bad-soft:#3A1D1C;
  --warn:#D7A23F; --warn-soft:#33290F;
  --info:#5B8DEF; --info-soft:#1B2A47;

  --shadow-sm:0 1px 2px rgba(0,0,0,.45);
  --shadow:0 10px 30px rgba(0,0,0,.55);
  --shadow-pop:0 16px 44px rgba(0,0,0,.65);
}

/* Theme switch (3-way segmented control in the teal sidebar foot). */
.theme-seg{display:flex;gap:2px;background:rgba(255,255,255,.08);border-radius:var(--r-pill);padding:3px;margin-bottom:10px;}
.theme-seg button{flex:1;display:grid;place-items:center;background:none;border:none;color:rgba(255,255,255,.6);cursor:pointer;border-radius:var(--r-pill);padding:6px 0;font:inherit;}
.theme-seg button svg{width:15px;height:15px;}
.theme-seg button:hover{color:#fff;}
.theme-seg button[aria-pressed="true"]{background:rgba(255,255,255,.16);color:#fff;}
.side-mini .theme-seg{display:none;}
/* Straggler: the wizard brief card uses a hardcoded white gradient — give it a dark variant. */
[data-theme="dark"] .wz-brief-card{background:linear-gradient(180deg,var(--surface) 0%,var(--sunken) 100%);}
/* Dark contrast fixes (the base colours below are brand teal, which stays dark in
   both themes — fine on light surfaces, illegible on dark ones). */
[data-theme="dark"] code,
[data-theme="dark"] .mono{color:var(--ink-body);}
[data-theme="dark"] .signin-brand span{color:var(--ink);}
[data-theme="dark"] .note{color:var(--ink-body);border-color:var(--line-strong);}
/* Auth backdrop ends in a hardcoded cream stop — swap for a dark surface in dark mode. */
[data-theme="dark"] .auth-bg-admin{background:radial-gradient(900px 460px at 22% 0%,rgba(255,94,84,.10),transparent 60%),linear-gradient(135deg,var(--paper),var(--sunken));}

*{box-sizing:border-box;}

.wc{
  font-family:var(--font-body);
  color:var(--ink-body);
  background:var(--paper);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  font-size:14px;
  line-height:1.5;
}
.wc h1,.wc h2,.wc h3,.wc h4{font-family:var(--font-display);font-weight:700;color:var(--ink);margin:0;letter-spacing:-.01em;}

/* ── Admin shell ───────────────────────────────────────────────── */
.shell{display:grid;grid-template-columns:var(--side-w) 1fr;min-height:100vh;background:var(--paper);transition:grid-template-columns .22s var(--ease);}
.side{
  background:var(--teal);color:#fff;display:flex;flex-direction:column;
  padding:18px 12px;gap:4px;position:relative;
}
.side::after{content:"";position:absolute;top:0;right:0;bottom:0;width:1px;background:rgba(0,0,0,.18);}
.side-brand{display:flex;align-items:center;gap:8px;padding:4px 8px 20px;overflow:hidden;}
.side-brand img{display:block;flex:none;}
.side-toggle{margin-left:auto;flex:none;width:26px;height:26px;border-radius:var(--r-sm);border:none;background:rgba(255,255,255,.07);color:rgba(255,255,255,.7);display:grid;place-items:center;cursor:pointer;transition:background .15s,color .15s;}
.side-toggle:hover{background:rgba(255,255,255,.14);color:#fff;}
.side-mini .side-brand{justify-content:center;padding-left:0;padding-right:0;}
.side-mini .side-toggle{position:absolute;top:18px;right:-13px;background:var(--teal);box-shadow:var(--shadow-sm);border:1px solid rgba(0,0,0,.15);z-index:2;}
.side-mini .nav-i{justify-content:center;padding:10px 0;}
.side-mini .side-user{justify-content:center;padding-left:0;padding-right:0;}
.side-label{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:rgba(255,255,255,.4);font-weight:700;padding:12px 10px 5px;}
.nav-i{
  display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r-sm);
  color:rgba(255,255,255,.82);text-decoration:none;font-size:13px;font-weight:500;
  transition:background .15s var(--ease),color .15s var(--ease);
}
.nav-i svg{width:16px;height:16px;flex:none;opacity:.78;}
.nav-i:hover{background:rgba(255,255,255,.07);color:#fff;}
.nav-i.on{background:var(--teal-soft);color:#fff;}
.nav-i.on svg{opacity:1;}
.side-foot{margin-top:auto;padding-top:14px;border-top:1px solid rgba(255,255,255,.1);}
.side-user{display:flex;align-items:center;gap:10px;padding:8px 10px;}
.side-avatar{width:30px;height:30px;border-radius:var(--r-pill);background:var(--coral);color:#fff;display:grid;place-items:center;font-weight:700;font-size:12px;flex:none;}
.side-user .nm{font-size:12.5px;font-weight:600;color:#fff;line-height:1.2;}
.side-user .em{font-size:11px;color:rgba(255,255,255,.55);}

.main{padding:26px var(--gutter) 56px;min-width:0;}
.main-in{max-width:var(--page-max);margin:0 auto;min-width:0;}
.page-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:18px;}
.kicker{text-transform:uppercase;font-size:11px;letter-spacing:.13em;color:var(--faint);font-weight:700;margin-bottom:4px;}
.main h1.title{font-size:26px;line-height:1.1;}
.sub{color:var(--muted);font-size:13.5px;max-width:64ch;}
/* Opt out of the 64ch measure. For a .sub that is a card's own explanatory blurb rather than a page
   subtitle: capped at 64ch inside a full-width card it wraps early and leaves a dead gutter. */
.sub-wide{max-width:none;}

/* ── Buttons ───────────────────────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;gap:7px;font-family:var(--font-body);
  font-weight:600;font-size:13.5px;border-radius:var(--r-sm);padding:9px 15px;
  border:1px solid transparent;cursor:pointer;text-decoration:none;line-height:1;
  transition:background .15s var(--ease),border-color .15s,color .15s;white-space:nowrap;
}
.btn svg{width:16px;height:16px;}
.btn-blue{background:var(--blue);color:#fff;}
.btn-blue:hover{background:var(--blue-deep);}
.btn-coral{background:var(--coral);color:#fff;}
.btn-coral:hover{background:var(--coral-deep);}
.btn-outline{background:var(--surface);color:var(--ink);border-color:var(--line-strong);}
.btn-outline:hover{border-color:var(--teal);background:var(--sunken);}
.btn-ghost{background:transparent;color:var(--muted);padding:9px 11px;}
.btn-ghost:hover{background:var(--sunken);color:var(--ink);}
.btn-danger{background:var(--bad);color:#fff;border-color:var(--bad);}
.btn-danger:hover{filter:brightness(0.92);}
.btn-sm{padding:6px 11px;font-size:12.5px;}
/* Batch-select action bar (e.g. Quotes list) */
.batchbar{display:flex;align-items:center;gap:10px;padding:9px 14px;margin-bottom:10px;
  background:var(--bad-soft);border:1px solid var(--line);border-radius:var(--r-md);}
.batchbar[hidden]{display:none;}
.batchbar-count{font-size:13px;color:var(--ink);}
.lnk{color:var(--blue);font-weight:600;text-decoration:none;cursor:pointer;}
/* link-styled <button>s must shed the browser's default button chrome
   (otherwise they render as a light grey box — jarring in dark mode). */
button.lnk{background:none;border:0;padding:0;font:inherit;line-height:inherit;}
.lnk:hover{text-decoration:underline;text-underline-offset:2px;}
.lnk-danger{color:var(--bad);}
.lnk-muted{color:var(--muted);text-decoration:none;}
.lnk-muted:hover{color:var(--ink);}

/* ── Cards ─────────────────────────────────────────────────────── */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);}
.card-pad{padding:20px 22px;}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 20px;border-bottom:1px solid var(--line);}
.card-h h3{font-size:15px;}
.card-h .ic{font-size:12.5px;color:var(--muted);}

/* ── Tables ────────────────────────────────────────────────────── */
.tbl{width:100%;border-collapse:collapse;font-size:13.5px;}
.tbl thead th{
  background:transparent;color:var(--faint);text-align:left;font-weight:700;
  font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;
  padding:9px 16px;border-bottom:1px solid var(--line);
}
.tbl tbody td{padding:13px 16px;border-bottom:1px solid var(--line);vertical-align:middle;color:var(--ink-body);}
.tbl tbody tr:last-child td{border-bottom:0;}
.tbl tbody tr{transition:background .12s var(--ease);}
.tbl tbody tr:hover{background:var(--paper);}
.tbl .num{text-align:right;font-variant-numeric:tabular-nums;}
.cell-strong{color:var(--ink);font-weight:600;}
.cell-sub{color:var(--muted);font-size:12px;}
code,.mono{font-family:var(--mono);font-size:12.5px;background:var(--sunken);padding:2px 7px;border-radius:5px;color:var(--teal);}

/* ── Pills / badges ────────────────────────────────────────────── */
.pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r-pill);font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;line-height:1.4;}
.pill .dot{width:6px;height:6px;border-radius:50%;background:currentColor;}
.pill-active,.pill-accepted{background:var(--good-soft);color:var(--good);}
.pill-draft{background:var(--warn-soft);color:var(--warn);}
.pill-sent{background:var(--info-soft);color:var(--info);}
.pill-declined{background:var(--bad-soft);color:var(--bad);}
.pill-neutral,.pill-expired{background:var(--sunken);color:var(--muted);}
.pill-coral{background:var(--coral-soft);color:var(--coral-deep);}
.pill-open{background:var(--warn-soft);color:var(--warn);}
/* Secondary open indicator on the quotes list — subordinate to the main status pill.
   Shrinks it, drops the uppercase + letter-spacing, and dims the colours so it reads as
   "additional info" rather than a second status. Uses only existing tokens (light + dark safe). */
.pill-quiet{font-size:10px;font-weight:600;letter-spacing:0;text-transform:none;padding:2px 8px;}
.pill-quiet.pill-open{background:var(--good-soft);color:var(--good);}
.pill-quiet.pill-neutral{background:transparent;color:var(--faint);border:1px solid var(--line);}

/* ── Forms ─────────────────────────────────────────────────────── */
.fld{display:block;}
.fld>label,.lbl{display:block;font-size:12px;font-weight:700;color:var(--ink);margin-bottom:6px;}
.inp,.sel,.ta{
  width:100%;padding:9px 11px;border:1px solid var(--line-strong);border-radius:var(--r-sm);
  background:var(--surface);font-size:13.5px;color:var(--ink);font-family:var(--font-body);
  transition:border-color .15s,box-shadow .15s;
}
.inp::placeholder,.ta::placeholder{color:var(--faint);}
.inp:focus,.sel:focus,.ta:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft);}
.hint{font-size:11.5px;color:var(--muted);margin-top:5px;}
.sel-mini{width:auto;padding:5px 26px 5px 9px;font-size:12px;font-weight:600;color:var(--muted);border-color:var(--line);border-radius:var(--r-pill);background:var(--surface);cursor:pointer;}
.sel-mini:hover{border-color:var(--line-strong);color:var(--ink);}
.check{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-body);cursor:pointer;}
.check input{width:16px;height:16px;accent-color:var(--blue);}

/* ── Documents & contracts (Phase 8.1) ─────────────────────────── */
.contracts-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:12px;margin-bottom:18px;}
.contracts-stat{display:grid;gap:3px;padding:14px 16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);color:var(--ink);text-decoration:none;}
.contracts-stat:hover{border-color:var(--line-strong);box-shadow:var(--shadow-sm);}
.contracts-stat strong{font:700 25px/1.05 var(--font-display);}.contracts-stat span{font-size:12px;color:var(--muted);}
.contracts-filter,.contracts-form{display:flex;align-items:end;gap:12px;flex-wrap:wrap;margin-bottom:18px;}
.contracts-filter .fld{flex:1 1 150px;}.contracts-filter .inp,.contracts-filter .sel{box-sizing:border-box;}
.contracts-table-wrap{overflow:auto;}.contracts-table{width:100%;border-collapse:collapse;font-size:13px;}.contracts-table th{padding:10px 14px;text-align:left;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);border-bottom:1px solid var(--line);}.contracts-table td{padding:12px 14px;border-bottom:1px solid var(--line);vertical-align:top;}.contracts-table tr:last-child td{border-bottom:0;}.contracts-table tr:hover{background:var(--paper);}
.contracts-pager{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:16px;font-size:13px;color:var(--muted);}
.contracts-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:16px;}.contracts-card{padding:20px 22px;}.contracts-card h2{font-size:16px;margin:0 0 12px;}.contracts-card form{display:grid;gap:12px;}.contracts-card label,.contracts-form label{display:grid;gap:6px;font-size:12px;font-weight:700;color:var(--ink);}.contracts-card input,.contracts-card select,.contracts-card textarea,.contracts-filter input,.contracts-filter select{width:100%;box-sizing:border-box;padding:9px 11px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);font:13.5px var(--font-body);color:var(--ink);}.contracts-card textarea{min-height:70px;resize:vertical;}.contracts-card input:focus,.contracts-card select:focus,.contracts-card textarea:focus,.contracts-filter input:focus,.contracts-filter select:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft);}.contracts-detail-list{display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px 14px;margin:0;}.contracts-detail-list dt{font-size:12px;font-weight:700;color:var(--muted);}.contracts-detail-list dd{margin:0;overflow-wrap:anywhere;}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}
@media (max-width:719px){.contracts-grid{grid-template-columns:1fr;}.contracts-filter{align-items:stretch;}.contracts-filter .fld{flex-basis:100%;}.contracts-table th,.contracts-table td{padding:10px;}.contracts-card{padding:16px;}}

/* ── Tabs ──────────────────────────────────────────────────────── */
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:24px;}
.tab{
  display:flex;align-items:center;gap:8px;padding:11px 16px 13px;font-size:13.5px;font-weight:600;
  color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px;cursor:pointer;
  text-decoration:none;transition:color .15s;
}
.tab svg{width:16px;height:16px;}
.tab:hover{color:var(--ink);}
.tab.on{color:var(--ink);border-bottom-color:var(--coral);}
.tab .cnt{background:var(--sunken);color:var(--muted);font-size:11px;font-weight:700;padding:1px 7px;border-radius:var(--r-pill);}
.tab.on .cnt{background:var(--coral-soft);color:var(--coral-deep);}

/* ── Stat cards ────────────────────────────────────────────────── */
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px;}
.stat .k{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);font-weight:700;}
.stat .v{font-family:var(--font-display);font-weight:700;font-size:26px;line-height:1.1;color:var(--ink);margin-top:5px;}
/* Stat strip stretches across the full content width (REDESIGN-SPEC §2). */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(196px,1fr));gap:14px;}
.stat .v.good{color:var(--good);}
.stat .m{font-size:12px;color:var(--muted);margin-top:4px;display:flex;align-items:center;gap:5px;}
.trend-up{color:var(--good);font-weight:700;}
.trend-down{color:var(--bad);font-weight:700;}

/* Engagement — "Active time" 14-day bar chart */
.etb{display:flex;gap:8px;padding:18px 22px 14px;}
.etb-col{flex:1;display:flex;flex-direction:column;align-items:center;min-width:0;}
.etb-track{height:150px;width:100%;display:flex;align-items:flex-end;justify-content:center;}
.etb-bar{width:100%;max-width:34px;min-height:3px;border-radius:5px 5px 0 0;background:var(--teal-soft);}
.etb-bar.is-peak{background:var(--coral);}
.etb-x{margin-top:8px;font-size:10.5px;color:var(--faint);font-weight:600;white-space:nowrap;}

/* misc */
.row{display:flex;align-items:center;gap:10px;}
.between{display:flex;align-items:center;justify-content:space-between;gap:12px;}
.divider{height:1px;background:var(--line);border:0;margin:24px 0;}
.avatar-sm{width:26px;height:26px;border-radius:var(--r-pill);background:var(--teal-soft);color:#fff;display:grid;place-items:center;font-size:10.5px;font-weight:700;flex:none;}

/* Inline name editor (admin Users) — a no-JS disclosure: name + subtle "edit", reveals a form */
details.namedit>summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:8px;}
details.namedit>summary::-webkit-details-marker{display:none;}
details.namedit>summary .nm-edit{font-size:12px;font-weight:400;opacity:0;transition:opacity .12s;}
details.namedit:hover>summary .nm-edit,details.namedit[open]>summary .nm-edit{opacity:1;}
details.namedit[open]>summary .nm-edit{visibility:hidden;}
.copybox{display:inline-flex;align-items:center;gap:8px;background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-sm);padding:6px 10px;font-family:var(--mono);font-size:12.5px;color:var(--teal);}
.copybox--trunc{display:inline-block;min-width:0;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:middle;}
/* A .copybox--trunc is white-space:nowrap, so its min-content width is the whole URL. Grid and
   flex items default to min-width:auto (= min-content), so wrappers refuse to shrink and shove
   the box outside narrow cards. These let the wrappers shrink so the ellipsis engages. */
.copybox-field{min-width:0;}
.copybox-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;}
.note{background:var(--info-soft);border:1px solid #cfe0fb;border-radius:var(--r-md);padding:12px 14px;font-size:12.5px;color:#1c3e7e;}
.dot-stat{width:9px;height:9px;border-radius:50%;flex:none;}

/* ════ CLIENT QUOTE VIEW (premium) ════ */
.cq{font-size:15px;color:var(--ink-body);}
.cq-topbar{display:flex;align-items:center;justify-content:space-between;padding:20px 40px;max-width:920px;margin:0 auto;}
.cq-help{font-size:13px;color:var(--muted);}
.cq-head{display:flex;align-items:flex-start;gap:28px;padding:8px 0 28px;}
.cq-kicker{font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--coral-deep);margin-bottom:10px;}
.cq-title{font-family:var(--font-display);font-weight:700;font-size:32px;line-height:1.15;color:var(--ink);letter-spacing:-.01em;text-wrap:balance;}
.cq-meta{display:flex;align-items:center;gap:12px;margin-top:12px;font-size:13.5px;color:var(--muted);}
.cq-meta strong{color:var(--ink-body);font-weight:600;}
.cq-dot{width:4px;height:4px;border-radius:50%;background:var(--line-strong);}
.cq-badge{background:var(--teal);color:#fff;border-radius:var(--r-lg);padding:18px 24px;text-align:right;flex:none;box-shadow:var(--shadow);}
.cq-badge-k{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.6);font-weight:700;}
.cq-badge-v{font-family:var(--font-display);font-weight:700;font-size:30px;line-height:1.1;margin-top:6px;}
.cq-badge-c{font-size:12px;color:rgba(255,255,255,.6);}
.cq-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--shadow-sm);}
.cq-group{padding:14px 26px;background:var(--sunken);font-family:var(--font-display);font-weight:700;font-size:14px;color:var(--teal);letter-spacing:.01em;display:flex;align-items:center;gap:10px;border-bottom:1px solid var(--line);}
.cq-group-opt{border-top:1px solid var(--line);}
.cq-group-hint{font-family:var(--font-body);font-weight:400;font-size:12px;color:var(--muted);text-transform:none;letter-spacing:0;}
.cq-line{display:flex;align-items:flex-start;gap:16px;padding:18px 26px;border-bottom:1px solid var(--line);}
.cq-line:last-child{border-bottom:0;}
.cq-line-opt{background:var(--coral-soft);}
.cq-num{width:24px;height:24px;border-radius:var(--r-pill);background:var(--sunken);color:var(--muted);font-size:12px;font-weight:700;display:grid;place-items:center;flex:none;margin-top:1px;}
.cq-line-t{font-weight:700;color:var(--ink);font-size:15px;display:flex;align-items:center;gap:9px;}
.cq-opt-tag{font-size:10px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--coral-deep);background:#fff;border:1px solid var(--coral);padding:2px 7px;border-radius:var(--r-pill);}
.cq-line-d{font-size:13px;color:var(--muted);margin-top:4px;line-height:1.5;max-width:54ch;}
.cq-line-q{font-size:13px;color:var(--muted);white-space:nowrap;text-align:right;flex:none;font-variant-numeric:tabular-nums;}
.cq-line-tot{font-weight:700;color:var(--ink);width:96px;text-align:right;flex:none;font-variant-numeric:tabular-nums;}
.cq-check{display:flex;align-items:center;flex:none;margin-top:1px;cursor:pointer;}
.cq-check input{display:none;}
.cq-box{width:24px;height:24px;border-radius:6px;border:2px solid var(--coral);background:#fff;display:grid;place-items:center;color:#fff;}
.cq-check.on .cq-box{background:var(--coral);}
.cq-subtotal{display:flex;justify-content:flex-end;gap:64px;padding:14px 26px;background:var(--paper);font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;}
.cq-totals-wrap{display:flex;justify-content:flex-end;margin-top:22px;}
.cq-totals{width:340px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 22px;}
.cq-tot-row{display:flex;justify-content:space-between;padding:5px 0;font-size:14px;color:var(--muted);font-variant-numeric:tabular-nums;}
.cq-tot-grand{display:flex;justify-content:space-between;align-items:baseline;border-top:2px solid var(--line);margin-top:8px;padding-top:12px;}
.cq-tot-grand span:first-child{font-weight:700;color:var(--ink);}
.cq-tot-grand span:last-child{font-family:var(--font-display);font-weight:700;font-size:26px;color:var(--ink);font-variant-numeric:tabular-nums;}
.cq-accept{margin-top:32px;padding:28px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);}
.cq-statement{font-size:14px;color:var(--ink-body);margin:0 0 18px;max-width:64ch;}
.cq-secure{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--muted);margin:16px 0 0;}
.cq-footer{display:flex;align-items:center;gap:12px;margin-top:40px;padding-top:22px;border-top:1px solid var(--line);font-size:12.5px;color:var(--muted);}

/* accept / e-sign modal */
.cq-modal{width:560px;background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);overflow:hidden;}
.cq-modal-h{display:flex;align-items:flex-start;justify-content:space-between;padding:22px 26px 16px;border-bottom:1px solid var(--line);}
.cq-x{border:none;background:none;color:var(--muted);cursor:pointer;padding:4px;border-radius:6px;}
.cq-x:hover{background:var(--sunken);color:var(--ink);}
.cq-modal-b{padding:20px 26px;}
.cq-sigtabs{display:inline-flex;background:var(--sunken);border-radius:var(--r-sm);padding:3px;gap:2px;margin:4px 0 10px;}
.cq-sigtab{padding:6px 18px;font-size:13px;font-weight:600;color:var(--muted);border-radius:5px;cursor:pointer;}
.cq-sigtab.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm);}
.cq-sigpad{height:96px;border:1.5px dashed var(--line-strong);border-radius:var(--r-md);background:var(--paper);display:grid;place-items:center;}
.cq-sig{font-family:"Brush Script MT","Segoe Script",cursive;font-size:38px;color:var(--teal);}
.cq-modal-f{display:flex;align-items:center;justify-content:space-between;padding:16px 26px;border-top:1px solid var(--line);background:var(--paper);}

/* ════ CLIENT PROPOSAL VIEW + injected widgets ════ */
.cp{font-size:15px;}
.fp{position:absolute;inset:0;overflow:hidden;background:#fff;}
.fp-nav{display:flex;align-items:center;justify-content:space-between;padding:16px 40px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.9);position:relative;z-index:2;}
.fp-nav-links{display:flex;gap:24px;font-size:13.5px;color:var(--muted);font-weight:600;}
.fp-nav-links .on{color:var(--coral-deep);}
.fp-hero{position:relative;height:300px;background:linear-gradient(120deg,#2A3E43,#1F2E32);display:flex;align-items:flex-end;overflow:hidden;}
.fp-hero-scrim{position:absolute;inset:0;background:linear-gradient(180deg,rgba(28,42,46,.2),rgba(28,42,46,.78));}
.fp-hero-in{position:relative;z-index:1;padding:0 40px 36px;color:#fff;max-width:780px;}
.fp-kick{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--coral);margin-bottom:12px;}
.fp-hero-in h1{font-family:var(--font-display);font-weight:700;font-size:38px;line-height:1.12;color:#fff;letter-spacing:-.01em;text-wrap:balance;}
.fp-hero-in p{font-size:14px;color:rgba(255,255,255,.7);margin:12px 0 0;}
.fp-body{padding:36px 40px;max-width:780px;}
.fp-body h2{font-family:var(--font-display);font-weight:700;font-size:24px;color:var(--ink);margin-bottom:14px;}
.fp-body p{font-size:15.5px;line-height:1.7;color:var(--ink-body);margin:0 0 16px;}
.fp-sel{background:#cfe0fb;border-radius:3px;box-shadow:0 0 0 2px #cfe0fb;}
.fp-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:24px;}
.fp-card{border:1px solid var(--line);border-radius:var(--r-lg);padding:16px 18px;}
.fp-card-k{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint);font-weight:700;}
.fp-card-t{font-family:var(--font-display);font-weight:700;font-size:18px;color:var(--ink);margin-top:6px;}
.fp-card-d{font-size:13px;color:var(--muted);margin-top:2px;}

/* selection tip */
.cp-seltip{position:absolute;top:430px;left:150px;z-index:6;display:inline-flex;align-items:center;gap:6px;background:var(--teal);color:#fff;font-size:12.5px;font-weight:600;padding:7px 12px;border-radius:var(--r-pill);box-shadow:var(--shadow);}
.cp-seltip::after{content:"";position:absolute;top:-5px;left:20px;width:10px;height:10px;background:var(--teal);transform:rotate(45deg);}

/* comment mode bar */
.cp-commentbar{position:absolute;top:78px;left:50%;transform:translateX(-50%);z-index:6;display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:7px 8px 7px 8px;box-shadow:var(--shadow);}
.cp-cb-pill{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;padding:6px 13px;border-radius:var(--r-pill);background:var(--coral);color:#fff;}
.cp-cb-hint{font-size:12px;color:var(--muted);padding-right:8px;}
.cp-pin{position:absolute;z-index:5;width:28px;height:28px;border-radius:50% 50% 50% 2px;background:var(--coral);color:#fff;font-size:12px;font-weight:700;display:grid;place-items:center;box-shadow:var(--shadow);transform:rotate(-45deg);cursor:pointer;}
.cp-pin>*{transform:rotate(45deg);}
.cp-pin-active{background:var(--coral-deep);box-shadow:0 0 0 4px var(--coral-soft),var(--shadow);}
.cp-popover{position:absolute;z-index:7;width:300px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);padding:14px;}
.cp-pop-h{display:flex;align-items:center;gap:9px;margin-bottom:10px;}
.cp-pop-name{font-size:13px;font-weight:700;color:var(--ink);}
.cp-pop-time{font-size:11px;color:var(--muted);}
.cp-pop-body{font-size:13.5px;line-height:1.5;color:var(--ink-body);margin:0 0 12px;}
.cp-pop-reply{display:flex;gap:8px;}
.cp-pop-reply .inp{padding:7px 10px;}

/* AI chat widget */
.cp-chat{position:absolute;right:28px;bottom:28px;z-index:8;width:368px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);overflow:hidden;}
.cp-chat-h{display:flex;align-items:center;gap:10px;padding:12px 14px;background:var(--teal);color:#fff;}
.cp-chat-grip{color:rgba(255,255,255,.5);cursor:grab;display:flex;}
.cp-chat-t{font-size:14px;font-weight:700;font-family:var(--font-display);}
.cp-chat-s{font-size:11px;color:rgba(255,255,255,.6);}
.cp-model{display:inline-flex;align-items:center;gap:3px;font-size:11.5px;font-weight:600;color:#fff;background:rgba(255,255,255,.14);padding:4px 8px;border-radius:var(--r-pill);cursor:pointer;}
.cp-chat-min{border:none;background:none;color:rgba(255,255,255,.8);cursor:pointer;padding:2px;}
.cp-chat-b{padding:16px 14px;display:flex;flex-direction:column;gap:10px;background:var(--paper);max-height:300px;}
.cp-msg{max-width:84%;padding:10px 13px;border-radius:14px;font-size:13.5px;line-height:1.5;}
.cp-msg-ai{background:var(--surface);border:1px solid var(--line);color:var(--ink-body);border-bottom-left-radius:4px;align-self:flex-start;}
.cp-msg-me{background:var(--teal);color:#fff;border-bottom-right-radius:4px;align-self:flex-end;}
.cp-cite{display:inline-flex;align-items:center;gap:5px;margin-top:8px;font-size:11.5px;font-weight:600;color:var(--blue);background:var(--blue-soft);padding:3px 8px;border-radius:var(--r-pill);text-decoration:none;}
.cp-chat-f{display:flex;gap:8px;padding:12px 14px;border-top:1px solid var(--line);align-items:center;}
.cp-chat-f .inp{padding:9px 12px;}

/* ════ CLIENT AUTH (per-proposal gate) ════ */
.ca-card{width:404px;background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);padding:30px 32px 26px;}
.ca-brand{display:flex;align-items:center;gap:9px;margin-bottom:22px;}
.ca-brand span{font-family:var(--font-display);font-weight:700;font-size:18px;color:var(--teal);}
.ca-kick{font-size:11.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--coral-deep);margin-bottom:8px;}
.ca-h{font-family:var(--font-display);font-weight:700;font-size:24px;color:var(--ink);}
.ca-sub{font-size:13.5px;line-height:1.6;color:var(--muted);margin:8px 0 20px;}
.ca-or{display:flex;align-items:center;gap:12px;margin:16px 0;color:var(--faint);font-size:12px;}
.ca-or::before,.ca-or::after{content:"";flex:1;height:1px;background:var(--line);}
.ca-foot{font-size:12.5px;color:var(--muted);margin:18px 0 0;text-align:center;}
.ca-mailicon{width:60px;height:60px;border-radius:var(--r-pill);background:var(--coral-soft);color:var(--coral-deep);display:grid;place-items:center;margin:0 auto 6px;}
.bar-track{height:7px;border-radius:var(--r-pill);background:var(--sunken);overflow:hidden;}
.bar-fill{height:100%;border-radius:var(--r-pill);background:var(--coral);}

/* ── Quote block editor ────────────────────────────────────────── */
.qadd{background:var(--surface);border:1px dashed var(--line-strong);border-radius:var(--r-sm);padding:9px 15px;font-size:13px;font-weight:600;color:var(--ink-body);cursor:pointer;font-family:var(--font-body);transition:border-color .15s,color .15s;}
.qadd:hover{border-color:var(--blue);color:var(--blue);}
.qblock{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:15px 16px;margin-bottom:12px;border-left:3px solid var(--blue);}
.qblock-sub{border-left-color:var(--muted);background:var(--sunken);display:flex;align-items:center;}
.qblock-price{border-left-color:var(--coral);}
.qblock-bar{display:flex;align-items:center;margin-bottom:10px;}
.qblock-kind{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);}
.qblock-kind svg{color:var(--faint);cursor:grab;}
.qblock-tool{background:none;border:none;cursor:pointer;color:var(--muted);padding:4px;border-radius:5px;display:grid;place-items:center;}
.qblock-tool:hover{background:var(--sunken);color:var(--ink);}
.qblock-tool.danger:hover{color:var(--bad);}
.rt-b{background:none;border:none;cursor:pointer;padding:4px 9px;border-radius:5px;font-size:13px;color:var(--ink-body);font-family:var(--font-body);display:inline-flex;align-items:center;}
.rt-b:hover{background:var(--surface);}
.qrt{min-height:54px;border:1px solid var(--line);border-radius:0 0 6px 6px;padding:10px 12px;font-size:13.5px;line-height:1.5;color:var(--ink-body);background:var(--surface);}
.qprice-row{display:grid;grid-template-columns:1fr 90px 80px 130px;gap:10px;align-items:end;margin-top:12px;}
.qprice-row .fld label{font-size:11px;}
.qline-total{display:flex;align-items:center;height:38px;padding:0 11px;border-radius:var(--r-sm);background:var(--sunken);font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;justify-content:flex-end;}

/* ════════════════════════════════════════════════════════════════════
   PRODUCTION ADDITIONS — Razor wiring on top of the design-system above.
   (The block above is the verbatim design-system bundle; everything below
   adapts it to the server-rendered app: base body, auth backdrops, alerts,
   bare-input fallbacks, layout helpers, focus rings and print rules.)
   ════════════════════════════════════════════════════════════════════ */
html,body{margin:0;padding:0;min-height:100%;}
body{
  font-family:var(--font-body);color:var(--ink-body);background:var(--paper);
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
.wc{min-height:100vh;}

/* Accessible focus ring (AA) — keyboard users get a clear 2px blue outline. */
a:focus-visible,button:focus-visible,.btn:focus-visible,.tab:focus-visible,
.inp:focus-visible,.sel:focus-visible,.ta:focus-visible,
input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{
  outline:2px solid var(--blue);outline-offset:2px;border-radius:var(--r-sm);
}

/* Bare form controls (pages that don't use .inp/.sel/.ta still read correctly). */
input[type=text],input[type=email],input[type=password],input[type=number],
input[type=date],input[type=search],input[type=url],textarea,select{
  font-family:var(--font-body);font-size:13.5px;color:var(--ink);
}
input[type=file]{display:block;font-size:13px;color:var(--ink-body);padding:6px 0;}

/* Layout helpers used by the Razor pages. */
.flow>*+*{margin-top:14px;}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;}
.muted{color:var(--muted);}
.faint{color:var(--faint);}
.right{text-align:right;}
.nowrap{white-space:nowrap;}
.mt-0{margin-top:0;}
.full{width:100%;}
.btn-full{width:100%;justify-content:center;}

/* Alerts / banners — restyled to the warm-neutral system. */
.error{background:var(--bad-soft);color:var(--bad);border:1px solid #f1c7c5;
  padding:11px 14px;border-radius:var(--r-md);font-size:13px;margin-bottom:14px;white-space:pre-wrap;}
.success{background:var(--good-soft);color:var(--good);border:1px solid #bfe2cc;
  padding:11px 14px;border-radius:var(--r-md);font-size:13px;margin-bottom:14px;}
.quote-template-success{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;}
.quote-template-success form{margin:0;}
.quote-template-success .lnk{color:inherit;font-weight:700;}
.warn{background:var(--warn-soft);color:var(--warn);border:1px solid #ecd6a3;
  padding:11px 14px;border-radius:var(--r-md);font-size:13px;}
.empty{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:30px;text-align:center;color:var(--muted);font-size:13.5px;}

/* Search field with a leading icon (lists). */
.search{position:relative;flex:0 0 280px;}
.search .inp{padding-left:32px;}
.search svg{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--faint);}

/* Full-screen auth backdrops (admin = warm paper, client = dark teal). */
.auth-bg{position:relative;min-height:100vh;display:grid;place-items:center;padding:24px;}
.auth-bg-admin{background:radial-gradient(900px 460px at 22% 0%,rgba(255,94,84,.10),transparent 60%),linear-gradient(135deg,var(--paper),#F2F0E8);}
.auth-bg-client{background:radial-gradient(1000px 520px at 78% 0%,rgba(255,94,84,.12),transparent 60%),linear-gradient(135deg,var(--teal),var(--teal-900) 70%);}

/* Admin sign-in card (coral rule + blue CTA, per the accent rule). */
.signin-card{width:440px;max-width:100%;overflow:hidden;box-shadow:var(--shadow);}
.signin-rule{height:4px;background:var(--coral);}
.signin-body{padding:26px 28px 28px;}
.signin-brand{display:flex;align-items:center;gap:10px;margin-bottom:20px;}
.signin-brand span{font-family:var(--font-display);font-weight:700;color:var(--teal);font-size:17px;}

/* Sidebar sign-out reads like a nav item. */
.side-signout{display:flex;align-items:center;gap:11px;width:100%;padding:9px 11px;border-radius:var(--r-sm);
  background:none;border:none;cursor:pointer;color:rgba(255,255,255,.7);font:inherit;font-size:13.5px;font-weight:500;text-align:left;
  transition:background .15s var(--ease),color .15s var(--ease);}
.side-signout svg{width:17px;height:17px;flex:none;opacity:.78;}
.side-signout:hover{background:rgba(255,255,255,.07);color:#fff;}
.side-mini .side-signout{justify-content:center;padding:10px 0;}
.side-mini .side-signout span{display:none;}

/* Engagement mini-bar (proposals list). */
.bar-track{height:7px;border-radius:var(--r-pill);background:var(--sunken);overflow:hidden;width:64px;}
.bar-fill{height:100%;border-radius:var(--r-pill);background:var(--coral);}

/* Collapsible sidebar (toggled by a small inline script + localStorage). */
.shell.is-collapsed{grid-template-columns:var(--side-w-mini) 1fr;}
.side-brand .brand-mark{display:none;}
.side-mini .side-brand .brand-full{display:none;}
.side-mini .side-brand .brand-mark{display:block;}
.side-mini .nav-i span,.side-mini .side-label,
.side-mini .side-user .nm,.side-mini .side-user .em{display:none;}

/* Tab panels (progressively-enhanced detail tabs). */
.tabpanel[hidden]{display:none;}

@media print{
  body{background:#fff;}
  [id*="bugherd" i],
  [class*="bugherd" i],
  [id*="bug-herd" i],
  [class*="bug-herd" i],
  bugherd-sidebar,
  #bugherd_embed_communication_frame,
  iframe[src*="bugherd" i],
  iframe[src*="sidebar.bugherd.com" i],
  script[src*="sidebarv2" i]{
    display:none !important;
    visibility:hidden !important;
    opacity:0 !important;
    width:0 !important;
    height:0 !important;
    overflow:hidden !important;
  }
}

/* ════════════════════════════════════════════════════════════════════
   QUOTE BLOCK EDITOR — markup rendered client-side by /js/quote-editor.js.
   Retokenised to the new system (the JS still emits the legacy .q-* names).
   ════════════════════════════════════════════════════════════════════ */
.btn-primary{display:inline-flex;align-items:center;justify-content:center;gap:7px;background:var(--blue);color:#fff;border:1px solid transparent;border-radius:var(--r-sm);padding:9px 16px;font-family:var(--font-body);font-weight:600;font-size:13.5px;cursor:pointer;text-decoration:none;line-height:1;transition:background .15s var(--ease);}
.btn-primary:hover{background:var(--blue-deep);}
.btn-link{background:none;border:none;color:var(--blue);font-weight:600;font-size:13px;cursor:pointer;padding:0;text-decoration:none;font-family:var(--font-body);}
.btn-link:hover{text-decoration:underline;text-underline-offset:2px;}

.q-settings{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px;margin-bottom:14px;display:grid;gap:14px;}
.q-settings .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.q-settings .grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;}
.q-field{display:block;}
.q-field>label{display:block;font-size:12px;font-weight:700;color:var(--ink);margin-bottom:6px;}
.q-field input,.q-field select,.q-field textarea{width:100%;padding:9px 11px;border:1px solid var(--line-strong);border-radius:var(--r-sm);font-size:13.5px;background:var(--surface);color:var(--ink);font-family:var(--font-body);}
.q-field input:focus,.q-field select:focus,.q-field textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft);}
.q-check{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-body);cursor:pointer;}
.q-check input{width:16px;height:16px;accent-color:var(--blue);}

.q-addbar{display:flex;gap:8px;margin:0 0 14px;flex-wrap:wrap;}
.q-addbtn{background:var(--surface);border:1px dashed var(--line-strong);border-radius:var(--r-sm);padding:9px 15px;font-size:13px;font-weight:600;color:var(--ink-body);cursor:pointer;font-family:var(--font-body);transition:border-color .15s,color .15s;}
.q-addbtn:hover{border-color:var(--blue);color:var(--blue);}
.q-addbtn-ai{margin-left:auto;border-color:var(--coral);color:var(--coral-deep);}
.q-addbtn-ai:hover{border-color:var(--coral-deep);color:var(--coral-deep);background:var(--coral-soft);}

.q-wizard-handoff{display:flex;gap:14px;align-items:flex-start;justify-content:space-between;background:var(--info-soft);border:1px solid #cfe0fb;border-radius:var(--r-lg);padding:14px 16px;margin:0 0 14px;}
.qwh-main{min-width:0;}
.qwh-k{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--info);margin-bottom:3px;}
.qwh-t{font-size:13.5px;font-weight:700;color:var(--ink);}
.qwh-d{font-size:12.5px;color:var(--ink-body);margin-top:3px;line-height:1.45;}
.qwh-actions{display:flex;gap:10px;align-items:center;flex:none;}

.qsend-modal{position:fixed;inset:0;z-index:95;background:rgba(20,28,30,.42);display:grid;place-items:start center;overflow:auto;padding:44px 18px;}
.qsend-modal[hidden]{display:none;}
.qsend-panel{width:min(920px,100%);background:var(--paper);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);overflow:hidden;}
.qsend-bar{display:flex;gap:10px;align-items:center;background:#eaf1f8;border-bottom:1px solid #d8e2ec;padding:14px 18px;}
.qsend-body{display:grid;gap:18px;padding:24px 28px 28px;background:var(--paper);}
.qsend-to{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);padding:10px 12px;min-width:220px;}
.qsend-to span{display:block;font-size:10.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);}
.qsend-to strong{display:block;color:var(--ink);font-size:13.5px;margin-top:3px;}
.qsend-to em{display:block;color:var(--muted);font-size:12px;font-style:normal;margin-top:2px;word-break:break-all;}
/* Send modal "nobody will be emailed" state: add a recipient without leaving the dialog. */
.qsend-nobody{display:grid;gap:10px;border:1px solid var(--warn);border-radius:var(--r-md);
  background:var(--warn-soft);padding:14px 16px;}
.qsend-nobody[hidden]{display:none;}
.qsend-nobody strong{color:var(--ink);font-size:13.5px;}
.qsend-nobody p{margin:0;color:var(--ink-body);font-size:12.5px;line-height:1.5;}
.qsend-nobody-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.qsend-nobody-row .inp{flex:1 1 180px;min-width:0;font-size:12.5px;}
.qsend-markonly{display:flex;gap:8px;align-items:flex-start;font-size:12.5px;color:var(--ink-body);cursor:pointer;}
.qsend-markonly input{margin-top:2px;flex:none;}
.qsend-subject{font-size:18px;font-weight:700;padding:16px 18px;}
.qsend-message{min-height:220px;font-size:14px;line-height:1.55;resize:vertical;}
.qsend-preview{display:grid;gap:8px;border-top:1px solid var(--line);padding-top:14px;}
.qsend-card{display:flex;gap:14px;align-items:center;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);padding:12px;}
.qsend-card strong{display:block;color:var(--ink);font-size:14px;}
.qsend-card span{display:block;color:var(--muted);font-size:12.5px;margin-top:2px;}

.q-block{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:15px 16px;margin-bottom:12px;border-left:3px solid var(--blue);}
.q-block.q-price{border-left-color:var(--line-strong);}
.q-block.q-text{border-left-color:var(--teal-soft);}
.q-block.q-subtotal{border-left-color:var(--muted);background:var(--sunken);}
.q-block-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px;}
/* Compact mode: the expanded block's header is the collapse affordance (BugHerd #86). Mirrors the
   .q-msum row treatment so expand and collapse look like the same control. */
.q-block-head-toggle{cursor:pointer;margin:-4px -6px 8px;padding:4px 6px;border-radius:var(--r-sm);}
.q-block-head-toggle:hover{background:var(--sunken);}
.q-block-head-toggle:focus-visible{outline:2px solid var(--blue);outline-offset:2px;}
.q-block-head-toggle>svg{color:var(--faint);flex:none;width:16px;height:16px;}
.q-block-kind{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);}
.q-block-tools button{background:none;border:none;cursor:pointer;color:var(--muted);font-size:14px;padding:3px 7px;border-radius:5px;}
.q-block-tools button:hover{background:var(--sunken);color:var(--ink);}
.q-block-tools button.q-del:hover{color:var(--bad);}
.q-insert{position:relative;width:max-content;max-width:100%;margin-top:12px;}
.q-insert>summary{list-style:none;cursor:pointer;color:var(--blue);font-size:12.5px;font-weight:700;padding:5px 2px;}
.q-insert>summary::-webkit-details-marker{display:none;}
.q-insert>summary:focus-visible{outline:2px solid var(--blue);outline-offset:2px;border-radius:4px;}
.q-insert-menu{position:absolute;z-index:12;left:0;top:100%;display:grid;min-width:170px;padding:6px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-pop);}
.q-insert-menu button{border:0;background:transparent;color:var(--ink-body);font:inherit;font-size:13px;text-align:left;border-radius:6px;padding:8px 10px;cursor:pointer;}
.q-insert-menu button:hover,.q-insert-menu button:focus-visible{background:var(--sunken);color:var(--ink);outline:none;}

.q-rt-toolbar{display:flex;gap:2px;border:1px solid var(--line);border-bottom:none;border-radius:6px 6px 0 0;padding:4px;background:var(--sunken);}
.q-rt-toolbar button{background:none;border:none;cursor:pointer;padding:4px 9px;border-radius:5px;font-size:13px;color:var(--ink-body);}
.q-rt-toolbar button:hover{background:var(--surface);}
.q-rt-toolbar button:focus-visible,.q-block-tools button:focus-visible{outline:2px solid var(--blue);outline-offset:1px;}
.q-rt{min-height:54px;border:1px solid var(--line);border-radius:0 0 6px 6px;padding:10px 12px;font-size:13.5px;line-height:1.5;color:var(--ink-body);background:var(--surface);outline:none;}
.q-rt:focus{border-color:var(--blue);}
.q-rt img{max-width:100%;height:auto;border-radius:6px;}

.q-price-row{display:grid;grid-template-columns:1fr 90px 80px 130px;gap:10px;align-items:end;margin-top:12px;}
.q-price-row .q-field label{font-size:11px;}
.q-lineamt{font-variant-numeric:tabular-nums;}

.q-totline{display:flex;justify-content:space-between;padding:4px 0;font-size:13.5px;color:var(--muted);}
.q-totline span:last-child{font-variant-numeric:tabular-nums;color:var(--ink-body);}
.q-totline.q-grand{font-size:18px;font-weight:700;color:var(--ink);border-top:1px solid var(--line);margin-top:6px;padding-top:9px;}
.q-totline.q-grand span:last-child{font-family:var(--font-display);font-weight:700;color:var(--ink);}

.q-atts{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 8px;}
.q-att{position:relative;border:1px solid var(--line);border-radius:8px;background:var(--sunken);}
.q-att-img{width:72px;height:72px;overflow:hidden;}
.q-att-img img{width:100%;height:100%;object-fit:cover;display:block;}
.q-att-file{display:flex;align-items:center;padding:8px 26px 8px 10px;max-width:220px;}
.q-att-name{font-size:12.5px;color:var(--teal);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.q-att-rm{position:absolute;top:-7px;right:-7px;width:18px;height:18px;border-radius:50%;border:none;background:var(--bad);color:#fff;font-size:12px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.q-att-add{background:var(--surface);border:1px dashed var(--line-strong);border-radius:var(--r-sm);padding:7px 12px;font-size:13px;color:var(--ink-body);cursor:pointer;}
.q-att-add:hover{border-color:var(--blue);color:var(--blue);}

.q-savebar{position:sticky;bottom:0;background:var(--paper);padding:12px 0;display:flex;align-items:center;gap:12px;border-top:1px solid var(--line);margin-top:8px;}
.q-saved{color:var(--good);font-size:13px;}
.q-saveerr{color:var(--bad);font-size:13px;}

/* ════════════════════════════════════════════════════════════════════
   PROPOSALS LIST — toolbar, view toggle, engagement bar, cards grid.
   All tokens come from the design system above; no new colours added.
   ════════════════════════════════════════════════════════════════════ */

/* Toolbar row */
.prop-toolbar{
  display:flex;align-items:center;justify-content:space-between;
  gap:12px;margin-bottom:18px;flex-wrap:wrap;
}
.prop-toolbar-left{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1 1 auto;}
.prop-toolbar-right{display:flex;align-items:center;gap:10px;flex:none;}

/* sel-mini is already defined above (line ~163); no redeclaration needed. */

/* View-toggle button group */
.viewtoggle{display:inline-flex;border:1px solid var(--line-strong);border-radius:var(--r-sm);overflow:hidden;}
.viewtoggle-btn{
  display:inline-flex;align-items:center;gap:5px;
  padding:6px 11px;font-size:12px;font-weight:600;font-family:var(--font-body);
  background:var(--surface);color:var(--muted);border:none;cursor:pointer;
  transition:background .13s,color .13s;line-height:1;
}
.viewtoggle-btn+.viewtoggle-btn{border-left:1px solid var(--line-strong);}
.viewtoggle-btn:hover{background:var(--sunken);color:var(--ink);}
.viewtoggle-btn.is-active{background:var(--sunken);color:var(--ink);}

/* Engagement bar — replaces the older .bar-track/.bar-fill used here.
   The existing .bar-track/.bar-fill rules remain for the auth onboarding bar;
   we add .engage-bar as a separate component so there is no collision. */
.engage-bar{
  height:6px;border-radius:var(--r-pill);background:var(--sunken);
  overflow:hidden;width:80px;
}
.engage-bar .fill{
  height:100%;border-radius:var(--r-pill);background:var(--line-strong);
  transition:width .3s var(--ease);
}
.engage-bar .fill.fill-healthy{background:var(--good);}
.engage-bar .fill.fill-low{background:var(--warn);}

/* Slug pill — wraps the existing <code> to keep it inline + low-key */
.slugpill code{
  font-size:11.5px;background:var(--sunken);color:var(--teal);
  padding:2px 7px;border-radius:4px;font-family:var(--mono);
}

/* Proposals cards grid */
.prop-cards{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  gap:16px;
}

/* Individual proposal card */
.prop-card{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:18px 20px;display:flex;flex-direction:column;gap:12px;
  transition:box-shadow .15s var(--ease),border-color .15s;
}
.prop-card:hover{box-shadow:var(--shadow-sm);border-color:var(--line-strong);}

.prop-card-pills{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;}

.prop-card-title{font-size:15px;line-height:1.3;}
.prop-card-title a{color:var(--ink);text-decoration:none;}
.prop-card-title a:hover{color:var(--teal);}

.prop-card-meta{font-size:12.5px;display:flex;align-items:center;gap:5px;flex-wrap:wrap;}
.prop-card-sep{color:var(--line-strong);}

/* Three-column stats inside a card */
.prop-card-stats{
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:4px;background:var(--sunken);border-radius:var(--r-md);
  padding:10px 12px;
}
.prop-stat{text-align:center;}
.prop-stat-val{
  font-family:var(--font-display);font-weight:700;font-size:20px;
  color:var(--ink);line-height:1.1;
}
.prop-stat-lbl{
  font-size:9.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--faint);margin-top:3px;
}

/* Engagement bar inside cards — full width */
.prop-card-bar{width:100%;}

/* Card footer */
.prop-card-foot{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding-top:12px;border-top:1px solid var(--line);
  font-size:12.5px;
}

/* ════════════════════════════════════════════════════════════════════
   REDESIGN v2 LAYER (REDESIGN-SPEC.md) — widescreen layout system,
   connected-flow components, quote editor v2, AI wizard (Concept A),
   and the mobile system. Loads after everything above; values mirror
   the v2 design layer exactly. No new colors/radii/fonts beyond tokens.
   ════════════════════════════════════════════════════════════════════ */

/* ── §2 Page layout types ─────────────────────────────────────────── */
.grid-side{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:16px;align-items:start;}
.layout-rail{display:grid;grid-template-columns:minmax(0,1fr) var(--rail-w);gap:24px;align-items:start;}
.layout-rail>aside{position:sticky;top:20px;display:grid;grid-template-columns:minmax(0,1fr);gap:14px;}
.layout-form{max-width:var(--form-max);}
.layout-split{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:24px;align-items:start;}
.ov-pair{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px;align-items:start;}
.canvas-cap{max-width:980px;}   /* quote editor / document canvases */

/* Toolbar row (filters etc.) */
.toolbar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap;}
.toolbar .grow{flex:1;}
.seg{display:inline-flex;background:var(--sunken);border-radius:var(--r-sm);padding:3px;gap:2px;}
.seg .sg{padding:5px 12px;font-size:12.5px;font-weight:600;color:var(--muted);border-radius:5px;cursor:pointer;border:none;background:none;display:inline-flex;align-items:center;gap:6px;}
.seg .sg.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm);}

/* ── §5.1 Journey ribbon — the flow glue on every detail page ─────── */
.journey{display:flex;align-items:center;gap:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:10px 14px;overflow-x:auto;margin-bottom:18px;}
.jnode{display:flex;align-items:center;gap:9px;padding:7px 12px;border-radius:var(--r-md);text-decoration:none;color:var(--ink-body);min-width:0;flex:none;transition:background .15s;}
.jnode:hover{background:var(--sunken);}
.jnode .jic{width:30px;height:30px;border-radius:var(--r-md);display:grid;place-items:center;flex:none;background:var(--sunken);color:var(--muted);}
.jnode .jic svg{width:15px;height:15px;}
.jnode .jk{font-size:10px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--faint);line-height:1.2;display:block;}
.jnode .jt{font-size:12.5px;font-weight:600;color:var(--ink);line-height:1.25;white-space:nowrap;max-width:21ch;overflow:hidden;text-overflow:ellipsis;display:block;}
.jnode .jm{font-size:11px;color:var(--muted);line-height:1.2;white-space:nowrap;display:block;}
.jnode.on{background:var(--teal);}
.jnode.on:hover{background:var(--teal);}
.jnode.on .jt{color:#fff;}
.jnode.on .jk{color:rgba(255,255,255,.55);}
.jnode.on .jm{color:rgba(255,255,255,.65);}
.jnode.on .jic{background:rgba(255,255,255,.12);color:#fff;}
.jnode.ghost{border:1.5px dashed var(--line-strong);color:var(--muted);}
.jnode.ghost:hover{border-color:var(--blue);color:var(--blue);background:var(--surface);}
.jnode.ghost .jic{background:transparent;border:1.5px dashed var(--line-strong);}
.jsep{flex:none;color:var(--line-strong);display:flex;padding:0 2px;}
.jsep svg{width:14px;height:14px;}
.jnode-wrap{position:relative;display:inline-flex;flex:none;}
.jclear{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:999px;
  display:grid;place-items:center;padding:0;cursor:pointer;
  background:var(--surface);border:1px solid var(--line-strong);color:var(--muted);
  opacity:0;transition:opacity .15s,color .15s,border-color .15s;}
.jclear svg{width:11px;height:11px;}
.jnode-wrap:hover .jclear,.jclear:focus-visible{opacity:1;}

/* Combined quote + proposal workspace. This replaces the generic engagement ribbon while an
   author is completing the recommended two-stage journey, so the next action reads as navigation
   between working documents rather than an unrelated downstream tracker task. */
.quote-proposal-workspace{display:grid;grid-template-columns:auto minmax(360px,620px) minmax(180px,1fr);align-items:center;gap:18px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px;margin-bottom:18px;box-shadow:var(--shadow-sm);}
.qpw-intro{display:grid;gap:2px;padding:0 6px;}
.qpw-intro strong{font-size:13px;color:var(--ink);white-space:nowrap;}
.qpw-tabs{display:grid;grid-template-columns:1fr 1fr;background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-md);padding:4px;gap:4px;}
.qpw-tab{display:flex;align-items:center;gap:10px;min-width:0;padding:9px 12px;border:0;border-radius:7px;background:transparent;color:var(--ink-body);font:inherit;text-align:left;text-decoration:none;cursor:pointer;}
.qpw-tab:hover{background:var(--surface);}
.qpw-tab.is-active{background:var(--teal);color:#fff;box-shadow:var(--shadow-sm);cursor:default;}
.qpw-tab strong,.qpw-tab small{display:block;line-height:1.25;}
.qpw-tab strong{font-size:13px;color:inherit;}
.qpw-tab small{font-size:11px;color:var(--muted);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.qpw-tab.is-active small{color:rgba(255,255,255,.65);}
.qpw-step{width:24px;height:24px;display:grid;place-items:center;flex:none;border:1px solid var(--line-strong);border-radius:50%;font-size:11px;font-weight:700;color:var(--muted);background:var(--surface);}
.qpw-tab.is-active .qpw-step{border-color:rgba(255,255,255,.28);background:rgba(255,255,255,.12);color:#fff;}
.qpw-note{font-size:11.5px;line-height:1.4;color:var(--muted);max-width:30ch;}

/* Empty proposal upload: the ZIP is the final step in a guided design handoff, not a file utility. */
.proposal-upload-guide{overflow:hidden;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow-sm);}
.proposal-upload-guide__head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:26px 28px 22px;background:linear-gradient(135deg,var(--blue-soft),var(--surface) 62%);border-bottom:1px solid var(--line);}
.proposal-upload-guide__head h2{font-size:24px;line-height:1.15;margin:6px 0 8px;color:var(--ink);}
.proposal-upload-guide__head p{max-width:68ch;margin:0;color:var(--ink-body);line-height:1.55;}
.proposal-upload-steps{list-style:none;margin:0;padding:8px 28px;}
.proposal-upload-steps li{display:grid;grid-template-columns:34px minmax(0,1fr);gap:14px;padding:17px 0;border-bottom:1px solid var(--line);}
.proposal-upload-steps li:last-child{border-bottom:0;}
.proposal-upload-steps__number{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:var(--teal);color:#fff;font-size:12px;font-weight:750;}
.proposal-upload-steps h3{font-size:14px;margin:1px 0 4px;color:var(--ink);}
.proposal-upload-steps p{font-size:13px;line-height:1.5;margin:0;color:var(--muted);}
.proposal-upload-guide__figure{margin:0 28px 24px;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;background:var(--paper);}
.proposal-upload-guide__figure img{display:block;width:100%;height:auto;}
.proposal-upload-guide__figure figcaption{padding:10px 13px;font-size:12px;line-height:1.45;color:var(--muted);border-top:1px solid var(--line);}
.proposal-upload-guide__check{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:15px 28px;background:var(--sunken);border-top:1px solid var(--line);font-size:12.5px;color:var(--muted);}
.proposal-upload-guide__check strong{color:var(--ink);}
.proposal-upload-guide__check .lnk{margin-left:auto;}
.proposal-upload-card.is-required{border:2px solid var(--blue);box-shadow:0 10px 30px color-mix(in srgb,var(--blue) 14%,transparent);}
.proposal-upload-card__status{display:inline-flex;align-items:center;gap:6px;color:var(--blue);font-size:11px;font-weight:750;letter-spacing:.08em;text-transform:uppercase;}
.proposal-upload-card__status .dot{width:7px;height:7px;border-radius:50%;background:currentColor;}
.proposal-upload-card h2{font-size:18px;line-height:1.2;margin:8px 0 5px;}
.proposal-upload-card>p{font-size:12.5px;line-height:1.45;margin:0 0 12px;color:var(--muted);}
.proposal-upload-drop{border:1.5px dashed var(--line-strong);border-radius:10px;padding:22px 16px;text-align:center;margin:8px 0 12px;background:var(--paper);}
.ck-intro-grid{display:grid;grid-template-columns:1fr;gap:12px;align-items:stretch;margin-top:14px;}
.ck-intro-grid .sub{max-width:none;margin:0;line-height:1.55;}
.ck-intro-grid .note{max-width:none;margin:0;line-height:1.5;}
@media (min-width:1600px){
  .ck-intro-grid{grid-template-columns:minmax(0,1.08fr) minmax(320px,.92fr);gap:24px;}
}
.quote-save-status{min-width:74px;font-size:12px;font-weight:600;color:var(--muted);}
.quote-save-status.is-saved{color:var(--good);}
.quote-save-status.is-error{color:var(--bad);}
.quote-save-status.is-dirty{color:var(--coral-deep);}
.quote-next-card{border-color:color-mix(in srgb,var(--blue) 35%,var(--line));background:linear-gradient(145deg,var(--surface),var(--blue-soft));}
.quote-next-card h3{font-size:18px;margin:5px 0 6px;color:var(--ink);}
.quote-next-card p{font-size:12.5px;line-height:1.5;color:var(--ink-body);margin:0 0 12px;}
.jclear:hover{color:var(--bad);border-color:var(--bad);}

/* ── §5.3 Entity card + §5.2 link-or-create picker ────────────────── */
.ent{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);text-decoration:none;color:var(--ink-body);transition:border-color .15s,background .15s;}
.ent:hover{border-color:var(--line-strong);background:var(--paper);}
.eic{width:34px;height:34px;border-radius:var(--r-md);display:grid;place-items:center;flex:none;}
.eic svg{width:16px;height:16px;}
.eic-quote{background:var(--coral-soft);color:var(--coral-deep);}
.eic-proposal{background:var(--blue-soft);color:var(--blue);}
.eic-tracker{background:var(--good-soft);color:var(--good);}
.eic-contact{background:var(--sunken);color:var(--teal);}
.ent .et{font-size:13.5px;font-weight:600;color:var(--ink);line-height:1.3;display:block;}
.ent .em2{font-size:12px;color:var(--muted);margin-top:1px;display:block;}
.ent .grow{flex:1;min-width:0;}
.ent-arrow{color:var(--faint);flex:none;display:flex;}
.ent-arrow svg{width:15px;height:15px;}
.ent-val{font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;font-size:13px;white-space:nowrap;}

.picker{position:relative;}
.picker-pop{position:absolute;z-index:30;margin-top:6px;width:380px;max-width:min(380px,90vw);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);overflow:hidden;}
.picker-pop[hidden]{display:none;}
.picker-title{padding:12px 14px 0;font-size:12.5px;font-weight:700;color:var(--ink);}
.picker-search{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-sm);padding:8px 11px;margin:10px;color:var(--faint);}
.picker-search svg{width:14px;height:14px;flex:none;}
.picker-search input{border:none;outline:none;font:inherit;font-size:13.5px;color:var(--ink);flex:1;background:none;min-width:0;}
.picker-list{max-height:280px;overflow-y:auto;overflow-x:hidden;padding:0 6px 6px;display:grid;gap:2px;}
.picker-row{min-width:0;max-width:100%;}
.picker-row{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--r-sm);cursor:pointer;border:none;background:none;width:100%;text-align:left;font-family:var(--font-body);}
.picker-row:hover,.picker-row.hl{background:var(--sunken);}
.picker-row .eic{width:28px;height:28px;border-radius:7px;}
.picker-row .eic svg{width:14px;height:14px;}
.picker-row .pt{font-size:13px;font-weight:600;color:var(--ink);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.picker-row .pm{font-size:11.5px;color:var(--muted);white-space:nowrap;}
.picker-foot{border-top:1px solid var(--line);padding:8px;display:grid;gap:2px;}
.picker-new{display:flex;align-items:center;gap:9px;padding:9px 10px;border-radius:var(--r-sm);font-size:13px;font-weight:600;color:var(--blue);cursor:pointer;border:none;background:none;width:100%;text-align:left;font-family:var(--font-body);}
.picker-new svg{width:15px;height:15px;flex:none;}
.picker-new:hover{background:var(--blue-soft);}
.picker-new.ai{color:var(--coral-deep);}
.picker-new.ai:hover{background:var(--coral-soft);}
.picker-empty{padding:14px 12px;font-size:12.5px;color:var(--muted);text-align:center;}

/* §5.3 Next-step prompt (e.g. accepted quote → tracker) */
.nextstep{display:flex;align-items:center;gap:14px;background:var(--good-soft);border:1px solid #CBE5D6;border-radius:var(--r-lg);padding:14px 18px;}
.nextstep .grow{flex:1;min-width:0;}
.nextstep .nt{font-size:13.5px;font-weight:700;color:var(--ink);overflow-wrap:anywhere;}
.nextstep .nd{font-size:12.5px;color:var(--muted);margin-top:2px;overflow-wrap:anywhere;}

/* Phase 1A.4: an empty proposal leads with its setup action, not zero-value reporting. */
.proposal-setup{overflow:hidden;background:var(--surface);border:1px solid var(--info);border-radius:var(--r-lg);box-shadow:0 10px 30px rgba(31,85,132,.08);}
.proposal-setup__eyebrow{padding:10px 18px;background:var(--info-soft);color:var(--info);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;}
.proposal-setup__body{display:flex;justify-content:space-between;gap:24px;padding:22px 24px 18px;align-items:flex-start;}
.proposal-setup__body h2{margin:0 0 7px;font-size:22px;line-height:1.2;color:var(--ink);}
.proposal-setup__body p{max-width:62ch;margin:0;color:var(--muted);font-size:13.5px;line-height:1.55;}
.proposal-setup__actions{display:flex;gap:9px;flex:none;flex-wrap:wrap;justify-content:flex-end;}
.proposal-setup__runway{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:0 24px 18px;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;}
.proposal-setup__runway>div{position:relative;display:grid;grid-template-columns:28px 1fr;column-gap:9px;padding:12px 14px;background:var(--sunken);}
.proposal-setup__runway>div+div{border-left:1px solid var(--line);}
.proposal-setup__runway span{grid-row:1/3;display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--surface);border:1px solid var(--line);font-size:11px;font-weight:800;color:var(--muted);}
.proposal-setup__runway strong{font-size:12.5px;color:var(--ink);}
.proposal-setup__runway small{font-size:11.5px;color:var(--muted);}
.proposal-setup__runway .is-current{background:var(--info-soft);}
.proposal-setup__runway .is-current span{background:var(--info);border-color:var(--info);color:#fff;}
.proposal-setup__relationship{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:13px 18px;border-top:1px solid var(--line);font-size:12.5px;color:var(--muted);}
.proposal-setup__relationship .lnk{margin-left:auto;}
.proposal-admin-disclosure{width:100%;}
.proposal-admin-disclosure>summary{cursor:pointer;list-style:none;display:grid;gap:3px;padding:14px 16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);}
.proposal-admin-disclosure>summary::-webkit-details-marker{display:none;}
.proposal-admin-disclosure>summary>span:first-child{font-size:13px;font-weight:700;color:var(--ink);}
.proposal-admin-disclosure[open]>summary{margin-bottom:14px;}
.proposal-admin-disclosure__body{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;}
.proposal-overview-layout{display:grid;gap:24px;align-items:start;}
.proposal-overview-admin{min-width:0;}
.proposal-admin-disclosure{border-top:1px solid var(--line);padding-top:22px;}
.proposal-admin-disclosure>summary{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:0 2px 14px;background:transparent;border:0;border-radius:0;}
.proposal-admin-disclosure>summary>span:first-child{display:grid;gap:4px;}
.proposal-admin-disclosure>summary>span:first-child .kicker{font-size:10px;}
.proposal-admin-disclosure>summary>span:first-child strong{font-size:20px;line-height:1.15;color:var(--ink);}
.proposal-admin-disclosure>summary>.hint{max-width:54ch;text-align:right;margin:0;}
.proposal-admin-disclosure[open]>summary{margin-bottom:0;}
.proposal-admin-disclosure__body{
  display:grid;
  grid-template-columns:repeat(12,minmax(0,1fr));
  grid-template-areas:
    "link link link link link link link link actions actions actions actions"
    "outcome outcome outcome outcome company company company company presentation presentation presentation presentation"
    "ownership ownership ownership ownership ownership ownership ownership ownership health health health health"
    "archive archive archive archive archive archive archive archive archive archive archive archive";
  gap:16px;
}
.proposal-admin-card{min-width:0;height:100%;}
.proposal-admin-card--link{grid-area:link;}
.proposal-admin-card--actions{grid-area:actions;align-items:center;}
.proposal-admin-card--presentation{grid-area:presentation;}
.proposal-admin-card--company{grid-area:company;}
.proposal-admin-card--ownership{grid-area:ownership;grid-template-columns:minmax(0,1fr) minmax(0,1fr)!important;align-items:start;}
.proposal-admin-card--ownership>div+div{border-top:0!important;border-left:1px solid var(--line);padding-top:0!important;padding-left:20px;}
.proposal-admin-card--outcome{grid-area:outcome;}
.proposal-admin-card--health{grid-area:health;}
.proposal-admin-card--archive{grid-area:archive;grid-template-columns:minmax(0,1fr) auto!important;align-items:center;}
.proposal-admin-card--archive form{justify-self:end;}

/* ── §6 Quote editor v2 ───────────────────────────────────────────── */
.qhead-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 20px;margin-bottom:14px;}
.qgrid{display:grid;grid-template-columns:repeat(12,1fr);gap:12px 14px;}
.qtitle-inp{font-family:var(--font-display);font-weight:700;font-size:20px;color:var(--ink);border:none;border-bottom:1.5px dashed transparent;width:100%;background:none;padding:2px 0;}
.qtitle-inp:hover,.qtitle-inp:focus{border-bottom-color:var(--line-strong);outline:none;}
.qtitle-inp:focus-visible{border-bottom-color:var(--blue);box-shadow:0 3px 0 var(--blue-soft);outline:2px solid var(--blue);outline-offset:4px;border-radius:2px;}
.qmeta-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px;}
.qchip{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--ink-body);background:var(--sunken);border:1px solid var(--line);border-radius:var(--r-pill);padding:5px 12px;cursor:pointer;font-family:var(--font-body);}
.qchip:hover{border-color:var(--line-strong);}
.qchip svg{width:13px;height:13px;color:var(--muted);}
.qchip .qcv{color:var(--ink);font-weight:700;}
.qchip.empty{color:var(--muted);border-style:dashed;background:var(--surface);}

/* Totals docked in the rail */
.totals-row{display:flex;justify-content:space-between;padding:4px 0;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums;}
.totals-grand{display:flex;justify-content:space-between;align-items:baseline;border-top:2px solid var(--line);margin-top:8px;padding-top:10px;font-variant-numeric:tabular-nums;}
.totals-grand b{font-family:var(--font-display);font-size:22px;color:var(--ink);}

/* ── §7 AI wizard — Concept A · Guided plan (full takeover) ───────── */
.wzA{display:grid;grid-template-columns:240px minmax(0,1fr) 420px;height:100vh;background:var(--paper);}
.wzA-rail{background:var(--teal);color:#fff;display:flex;flex-direction:column;padding:20px 16px;overflow-y:auto;}
.wzA-step{display:flex;gap:11px;padding:11px 10px;border-radius:var(--r-md);align-items:flex-start;color:rgba(255,255,255,.62);text-decoration:none;border:none;background:none;width:100%;text-align:left;font-family:var(--font-body);cursor:default;}
.wzA-step[href],.wzA-step.done{cursor:pointer;}
.wzA-step .wn{width:24px;height:24px;border-radius:50%;background:rgba(255,255,255,.12);display:grid;place-items:center;font-size:11.5px;font-weight:700;flex:none;}
.wzA-step .wn svg{width:12px;height:12px;}
.wzA-step.done .wn{background:var(--good);color:#fff;}
.wzA-step.on{background:rgba(255,255,255,.08);color:#fff;}
.wzA-step.on .wn{background:var(--coral);color:#fff;}
.wzA-step .wt{font-size:13px;font-weight:600;line-height:1.3;display:block;}
.wzA-step .wd{font-size:11px;color:rgba(255,255,255,.45);margin-top:2px;line-height:1.35;display:block;}
.wzA-main{padding:28px 36px;overflow-y:auto;min-width:0;display:flex;flex-direction:column;}
/* One shared content width for every wizard step, so Context/Scope/Pricing/Review align
   identically inside the fluid centre column (no per-step ad-hoc max-widths). */
.wzA-stage{width:100%;max-width:980px;display:flex;flex-direction:column;flex:1 1 auto;min-height:100%;}
/* Use more of the centre column on larger monitors (laptops keep the 980 default). */
@media (min-width:1500px){ .wzA-stage{max-width:1160px;} }
@media (min-width:1920px){ .wzA-stage{max-width:1360px;} }
@media (min-width:2560px){ .wzA-stage{max-width:1600px;} }
.wzA-doc{background:var(--surface);border-left:1px solid var(--line);padding:24px 26px;overflow-y:auto;}
.wzA-ground{margin-top:auto;display:grid;gap:8px;padding:14px 4px 0;border-top:1px solid rgba(255,255,255,.12);}
.wzA-ground-k{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.4);font-weight:700;}
.wzA-ground-i{display:flex;align-items:center;gap:8px;font-size:12px;color:rgba(255,255,255,.75);}
.wzA-ground-i svg{width:13px;height:13px;flex:none;}
.wzA-exit{color:rgba(255,255,255,.55);font-size:12px;margin-top:6px;font-weight:600;text-decoration:none;cursor:pointer;background:none;border:none;padding:0;text-align:left;font-family:var(--font-body);}
.wzA-exit:hover{color:#fff;text-decoration:underline;}

.scope-card{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);padding:14px 16px;display:flex;gap:12px;align-items:flex-start;transition:border-color .15s;}
.scope-card.sel{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue);}
.scope-card .sc-check{width:22px;height:22px;border-radius:6px;border:2px solid var(--line-strong);flex:none;display:grid;place-items:center;color:#fff;margin-top:1px;cursor:pointer;background:var(--surface);padding:0;}
.scope-card .sc-check svg{width:13px;height:13px;}
.scope-card.sel .sc-check{background:var(--blue);border-color:var(--blue);}
.scope-card .sc-t{font-size:14px;font-weight:700;color:var(--ink);}
.scope-card .sc-d{font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.5;}
.scope-card .sc-meta{display:flex;gap:8px;margin-top:9px;flex-wrap:wrap;align-items:center;}
.rate-chip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:600;background:var(--sunken);border-radius:var(--r-pill);padding:3px 10px;color:var(--ink-body);font-variant-numeric:tabular-nums;}
.rate-chip svg{width:12px;height:12px;}
.rate-chip b{color:var(--ink);}
.rate-chip.total{background:var(--blue-soft);color:var(--blue-deep);}
.pend-tag{display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:800;letter-spacing:.06em;border-radius:var(--r-pill);padding:2px 8px;margin-left:8px;text-transform:uppercase;}
.pend-tag.add{background:var(--good-soft);color:var(--good);}
.pend-tag.mod{background:var(--warn-soft);color:var(--warn);}

.wz-ask{display:flex;gap:9px;align-items:flex-end;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-lg);padding:10px 12px;box-shadow:var(--shadow-sm);}
.wz-ask>svg{width:16px;height:16px;color:var(--coral);margin:8px 0 8px 2px;flex:none;}
.wz-ask textarea{flex:1;border:none;outline:none;resize:none;font:inherit;font-size:13.5px;color:var(--ink);min-height:22px;background:none;}
.wz-example{margin-top:6px;background:none;border:none;color:var(--blue);font:inherit;font-size:12.5px;font-weight:700;cursor:pointer;padding:0;}
.wz-example:hover{text-decoration:underline;text-underline-offset:2px;}
.wz-history{margin-bottom:10px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);padding:9px 12px;font-size:12.5px;}
.wz-history summary{cursor:pointer;color:var(--ink);font-weight:700;}
.wz-history-list{display:grid;gap:8px;margin-top:10px;}
.wz-history-msg{display:grid;grid-template-columns:48px minmax(0,1fr);gap:8px;color:var(--muted);}
.wz-history-msg span{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;color:var(--faint);}
.wz-history-msg.user span{color:var(--blue);}
.wz-history-msg.assistant span{color:var(--coral-deep);}
.wz-history-msg p{margin:0;color:var(--ink-body);line-height:1.45;}
.wz-send{width:34px;height:34px;border-radius:var(--r-md);background:var(--coral);border:none;color:#fff;display:grid;place-items:center;cursor:pointer;flex:none;}
.wz-send svg{width:15px;height:15px;}
.wz-send:hover{background:var(--coral-deep);}
.wz-send[disabled]{opacity:.5;cursor:default;}
.sugg{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:10px;}
.sugg .sg-chip{font-size:12px;font-weight:600;border:1px solid var(--line-strong);background:var(--surface);border-radius:var(--r-pill);padding:6px 13px;color:var(--ink-body);cursor:pointer;font-family:var(--font-body);}
.sugg .sg-chip:hover{border-color:var(--coral);color:var(--coral-deep);}

.q-contact-modal{position:fixed;inset:0;z-index:110;background:rgba(20,28,30,.46);display:grid;place-items:center;padding:18px;}
.qcm-panel{width:min(480px,100%);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);padding:18px;display:grid;gap:14px;}
.qcm-head{display:flex;align-items:start;justify-content:space-between;gap:14px;}
.qcm-head b{display:block;color:var(--ink);font-size:16px;}
.qcm-head span{display:block;color:var(--muted);font-size:12.5px;margin-top:2px;}
.qcm-x{width:30px;height:30px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface);color:var(--muted);cursor:pointer;display:grid;place-items:center;}
.qcm-grid{display:grid;gap:10px;}
.qcm-status{min-height:18px;color:var(--warn);font-size:12.5px;}
.qcm-actions{display:flex;justify-content:flex-end;gap:8px;}

.qctx{display:grid;gap:10px;}
.wz-context-grid{display:grid;grid-template-columns:minmax(280px,420px) minmax(360px,1fr);gap:14px;align-items:stretch;}
.wz-setup-card{display:grid;gap:14px;}
.wz-brief-card{display:grid;gap:12px;background:linear-gradient(180deg,#fff 0%,#f8fbfb 100%);border-color:var(--line-strong);}
.wz-brief-input{min-height:142px;resize:vertical;}
.wz-context-panel{margin-top:16px;border-color:var(--line-strong);}
.qctx-list{display:grid;gap:10px;}
.qctx-add{border-top:1px solid var(--line);padding-top:10px;}
.qctx-search{display:grid;gap:8px;margin-top:10px;}
.qctx-results{display:grid;gap:6px;max-height:240px;overflow:auto;}
.qctx-result{display:grid;gap:2px;text-align:left;border:1px solid var(--line);background:var(--surface);border-radius:var(--r-md);padding:9px 10px;cursor:pointer;color:var(--ink-body);}
.qctx-result:hover{border-color:var(--blue);}
.qctx-result[disabled]{opacity:.55;cursor:default;background:var(--sunken);}
.qctx-result span{font-size:12.5px;font-weight:700;color:var(--ink);}
.qctx-result small{font-size:11.5px;color:var(--muted);}
.qctx-side{display:grid;gap:8px;justify-items:end;}
.qctx-count{display:inline-flex;align-items:center;white-space:nowrap;font-size:11.5px;font-weight:800;border:1px solid var(--blue);border-radius:var(--r-pill);padding:5px 9px;color:var(--blue-deep);background:var(--blue-soft);}
.qctx-tabs{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end;}
.qctx-tabs span{font-size:11.5px;font-weight:700;border:1px solid var(--line);border-radius:var(--r-pill);padding:5px 9px;color:var(--muted);background:var(--surface);}
.qctx-tabs span.on{border-color:var(--blue);background:var(--blue-soft);color:var(--blue-deep);}
.qctx-src{border:1px solid var(--line);border-radius:var(--r-md);padding:10px;display:grid;gap:8px;background:var(--paper);}
.qctx-src-head{display:flex;justify-content:space-between;gap:10px;align-items:start;}
.qctx-src-head strong{display:block;font-size:12.5px;color:var(--ink);line-height:1.35;}
.qctx-src-head span{display:block;font-size:11.5px;color:var(--muted);margin-top:2px;}
.qctx-pin{font-size:12px;color:var(--muted);}
.qctx-brief summary{cursor:pointer;font-size:12px;color:var(--blue);font-weight:700;}
.qctx-brief pre{white-space:pre-wrap;font:12px/1.45 var(--font-body);color:var(--ink-body);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm);padding:9px;max-height:260px;overflow:auto;}

/* Live mini-doc (wizard right column) */
.doc-block{padding:11px 0;border-bottom:1px solid var(--line);}
.doc-block .db-k{font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);}
.doc-block .db-t{font-size:13px;font-weight:700;color:var(--ink);margin-top:2px;}
.doc-block .db-d{font-size:11.5px;color:var(--muted);margin-top:2px;line-height:1.45;}
.doc-block .db-amt{font-size:12.5px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;}
.doc-new{background:var(--good-soft);margin:0 -10px;padding:11px 10px;border-radius:var(--r-sm);border-bottom:0;}

/* Review-step checklist rows (also reused for option lists) */
.rich-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;}
.rich-h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 16px;border-bottom:1px solid var(--line);background:var(--paper);}
.rich-h .rt{font-size:13px;font-weight:700;color:var(--ink);display:flex;align-items:center;gap:8px;}
.opt-row{display:flex;align-items:center;gap:12px;padding:11px 16px;border-bottom:1px solid var(--line);}
.opt-row:last-child{border-bottom:0;}
.opt-row .ot{font-size:13.5px;font-weight:600;color:var(--ink);}
.opt-row .od{font-size:12px;color:var(--muted);margin-top:1px;}
.opt-row .oamt{font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;font-size:13.5px;white-space:nowrap;}
.tgl{width:36px;height:21px;border-radius:var(--r-pill);background:var(--line-strong);position:relative;flex:none;cursor:pointer;transition:background .15s;border:none;padding:0;}
.tgl::after{content:"";position:absolute;top:2.5px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .15s;}
.tgl.on{background:var(--good);}
.tgl.on::after{left:17px;}

/* ── Phase 1B: Claude Design checklist (skippable novice walkthrough) ──
   Builds on .rich-card / .opt-row above. States: todo (default), done, skipped. */
.ck-progress{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.ck-bar{flex:1;min-width:180px;height:8px;border-radius:var(--r-pill);background:var(--sunken);overflow:hidden;}
.ck-bar-fill{height:100%;background:var(--coral);border-radius:var(--r-pill);transition:width .3s var(--ease);}
.ck-progress-label{font-size:12.5px;color:var(--muted);white-space:nowrap;}
.ck-done-label{color:var(--good);font-weight:700;}
.ck-row .ck-num{width:26px;height:26px;border-radius:50%;background:var(--sunken);color:var(--muted);font-size:12.5px;font-weight:700;display:grid;place-items:center;flex:none;}
.ck-row.ck-done .ck-num{background:var(--good-soft);color:var(--good);}
.ck-row.ck-done .ot,.ck-row.ck-manual-done .ot{color:var(--muted);}
.ck-row.ck-manual-done .ck-num{background:var(--good-soft);color:var(--good);}
.ck-row.ck-manual-done .ck-num{font-size:0;}
.ck-row.ck-manual-done .ck-num::after{content:"✓";font-size:14px;}
.ck-row.ck-skipped{opacity:.55;}
.ck-row.ck-skipped .ot{text-decoration:line-through;}
.ck-row .ck-row-action{flex:none;}
.ck-check{display:inline-flex;align-items:center;gap:7px;border:0;background:transparent;color:var(--muted);font:inherit;font-size:12.5px;font-weight:650;padding:5px 2px;cursor:pointer;white-space:nowrap;}
.ck-check:hover{color:var(--ink);}
.ck-check-box{width:20px;height:20px;border:1.5px solid var(--line-strong);border-radius:6px;display:grid;place-items:center;background:var(--surface);color:transparent;transition:background .15s,border-color .15s,color .15s;}
.ck-check[aria-pressed="true"]{color:var(--good);}
.ck-check[aria-pressed="true"] .ck-check-box{background:var(--good);border-color:var(--good);color:#fff;}
.ck-auto-label{font-size:11.5px;font-weight:700;color:var(--good);white-space:nowrap;}
.ck-row.ck-with-guide{flex-wrap:wrap;}
.ck-export-guide{flex:0 0 calc(100% - 38px);margin:8px 0 4px 38px;padding:14px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--sunken);}
.ck-guide-head{display:flex;justify-content:space-between;align-items:end;gap:14px;margin-bottom:12px;}
.ck-guide-head strong{display:block;font-size:13.5px;color:var(--ink);margin-top:2px;}
.ck-guide-note{font-size:11.5px;font-weight:700;color:var(--coral-deep);background:var(--coral-soft);border-radius:var(--r-pill);padding:5px 9px;}
.ck-guide-grid{display:grid;grid-template-columns:minmax(0,.82fr) minmax(0,1fr);gap:12px;align-items:start;}
.ck-guide-grid figure{margin:0;min-width:0;}
.ck-guide-grid a{display:block;border-radius:10px;overflow:hidden;border:1px solid var(--line);background:#fff;}
.ck-guide-grid img{display:block;width:100%;height:auto;}
.ck-guide-grid figcaption{display:flex;gap:8px;align-items:flex-start;font-size:12px;line-height:1.4;color:var(--muted);margin-top:8px;}
.ck-guide-grid figcaption>span{width:20px;height:20px;border-radius:50%;display:grid;place-items:center;flex:none;background:var(--ink);color:#fff;font-size:10.5px;font-weight:800;}
@media (max-width:719px){
  .ck-row{flex-wrap:wrap;}
  .ck-row .grow{width:100%;}
  .ck-export-guide{margin-left:0;}
  .ck-guide-head{align-items:flex-start;flex-direction:column;}
  .ck-guide-grid{grid-template-columns:1fr;}
}

/* ── Generic small bits ───────────────────────────────────────────── */
.icon-sq{width:34px;height:34px;border-radius:var(--r-md);display:grid;place-items:center;flex:none;}
.kv{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:5px 0;}
.kv .k2{color:var(--muted);}
.kv .v2c{color:var(--ink);font-weight:600;text-align:right;}
.empty-state{padding:36px 20px;text-align:center;color:var(--muted);font-size:13px;max-width:40ch;margin:0 auto;}
.empty-state .es-t{font-weight:700;color:var(--ink);font-size:14.5px;margin-bottom:4px;}
.empty>p,.empty>div{max-width:40ch;margin-left:auto;margin-right:auto;}
.bar-mini{height:5px;border-radius:var(--r-pill);background:var(--sunken);overflow:hidden;width:90px;}
.bar-mini i{display:block;height:100%;background:var(--coral);border-radius:var(--r-pill);}
.spark-ai{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--coral-deep);}

/* ── §4 Mobile system components (used by markup under 720px) ─────── */
.mtopbar{display:none;align-items:center;gap:12px;padding:12px 16px;background:var(--teal);color:#fff;position:sticky;top:0;z-index:40;}
.mtopbar .mt-title{font-family:var(--font-display);font-weight:700;font-size:15px;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff;}
.mtopbar .mt-btn{width:40px;height:40px;border-radius:var(--r-md);border:none;background:rgba(255,255,255,.08);color:#fff;display:grid;place-items:center;flex:none;cursor:pointer;}
.mtopbar .mt-btn svg{width:18px;height:18px;}
.mtopbar img{display:block;}

.mdrawer{position:fixed;inset:0;z-index:60;display:flex;}
.mdrawer[hidden]{display:none;}
.mdrawer .scrim{position:absolute;inset:0;background:rgba(20,28,30,.5);border:none;padding:0;cursor:pointer;}
.mdrawer .panel{position:relative;width:300px;max-width:84vw;background:var(--teal);color:#fff;display:flex;flex-direction:column;padding:18px 14px;box-shadow:var(--shadow-pop);overflow-y:auto;}
.mdrawer .panel .side{display:flex;padding:0;background:none;}
.mdrawer .panel .side::after{display:none;}
.mdrawer .panel .nav-i{padding:11px 10px;font-size:13.5px;}

.mcard{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px 16px;}
.mrow-card{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:13px 15px;text-decoration:none;color:var(--ink-body);min-width:0;}
.mrow-card .grow{flex:1;min-width:0;}
.mrow-card .rt{font-size:14px;font-weight:600;color:var(--ink);line-height:1.3;display:block;overflow-wrap:anywhere;}
.mrow-card .rm{font-size:12px;color:var(--muted);margin-top:2px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;min-width:0;}
.mrow-card .rm>span{min-width:0;}
.mrow-card .rv{font-weight:700;color:var(--ink);font-size:13.5px;white-space:nowrap;font-variant-numeric:tabular-nums;}
.mrow-card>svg{color:var(--faint);flex:none;width:16px;height:16px;}
.mlist{display:grid;gap:8px;}
.mstats{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.mkv{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--line);font-size:13px;}
.mkv:last-child{border-bottom:0;}
.mkv .k2{color:var(--muted);}
.mkv .v2c{font-weight:600;color:var(--ink);text-align:right;}
.mactions{position:sticky;bottom:0;z-index:30;background:linear-gradient(180deg,transparent,var(--paper) 26%);padding:18px 0 14px;display:flex;gap:10px;margin-top:8px;}
.mactions .btn{flex:1;justify-content:center;padding:13px 15px;font-size:14px;min-height:44px;}

/* Wizard takeover shell (Concept A) — fixed overlay over the editor page */
.wzA-overlay{position:fixed;inset:0;z-index:70;}
body.wz-open{overflow:hidden;}
body.wz-open .shell,body.wz-open .mtopbar{display:none;}
.wzA-overlay .mwz-top{display:none;}
.wz-mtotal{display:none;}
.wz-docbtn{display:none;}
@media (max-width:719px){
  .wzA{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr);height:100dvh;}
  .wzA-overlay .mwz-top{display:flex;position:static;}
  .wzA-rail{display:none;}
  .wzA-main{padding:16px 16px 20px;}
  .wzA-doc{display:none;}
  .wzA-doc.open{display:block;position:fixed;inset:auto 0 0 0;top:56px;z-index:80;border-left:0;border-top:1px solid var(--line);box-shadow:var(--shadow-pop);}
  .wz-mtotal{display:inline;}
  .wz-docbtn{display:inline-flex;position:sticky;bottom:8px;align-self:flex-start;margin-top:10px;}
  .wz-foot{position:sticky;bottom:0;background:linear-gradient(180deg,transparent,var(--paper) 26%);padding:14px 0 10px;z-index:5;}
  .wz-foot .btn{min-height:44px;}
  .wz-context-grid{grid-template-columns:1fr;max-width:none;}
  .wz-context-panel{max-width:none;}
  .qctx-side{justify-items:start;}
  .qctx-src-head{display:grid;}
  .qsend-modal{padding:0;place-items:stretch;}
  .qsend-panel{width:100%;min-height:100dvh;border-radius:0;border:0;}
  .qsend-bar{position:sticky;top:0;z-index:2;flex-wrap:wrap;}
  .qsend-body{padding:18px 16px 24px;}
  .qsend-body .between{display:grid;}
  .qsend-to{min-width:0;}
  .qsend-card{align-items:flex-start;}
  .scope-card{padding:12px 13px;}
}

/* Mobile wizard top bar (one step per screen) */
.mwz-top{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--teal);color:#fff;position:sticky;top:0;z-index:40;}
.mwz-top .mt-btn{width:36px;height:36px;border-radius:var(--r-md);border:none;background:rgba(255,255,255,.08);color:#fff;display:grid;place-items:center;flex:none;cursor:pointer;}
.mwz-top .mt-btn svg{width:16px;height:16px;}
.mwz-t{font-family:var(--font-display);font-weight:700;font-size:14px;color:#fff;}
.mwz-s{font-size:11px;color:rgba(255,255,255,.6);}
.mwz-dots{display:flex;gap:5px;align-items:center;}
.mwz-dots i{width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.25);}
.mwz-dots i.done{background:var(--good);}
.mwz-dots i.on{background:var(--coral);width:18px;border-radius:var(--r-pill);}

/* Mobile-only / desktop-only helpers for table↔row-card alternatives */
@media (min-width:720px){.m-only{display:none !important;}}
@media (max-width:719px){.m-none{display:none !important;}}

/* Generic stacked-table fallback for secondary tables (detail tabs etc.):
   under 720px each row becomes a bordered card and each cell a label/value
   pair via td[data-th]. Primary lists use bespoke .mrow-card alternatives. */
@media (max-width:719px){
  .tbl-stack{display:block;}
  .tbl-stack thead{display:none;}
  .tbl-stack tbody{display:grid;gap:8px;}
  .tbl-stack tbody tr{display:block;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:6px 14px;}
  .tbl-stack tbody tr:hover{background:var(--surface);}
  .tbl-stack tbody td{display:flex;justify-content:space-between;align-items:baseline;gap:12px;border-bottom:1px solid var(--line);padding:8px 0;text-align:right;}
  .tbl-stack tbody td:last-child{border-bottom:0;}
  .tbl-stack tbody td::before{content:attr(data-th);font-size:10.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--faint);text-align:left;flex:none;}
  .tbl-stack tbody td:not([data-th])::before{display:none;}
  .tbl-stack tbody td:not([data-th]){justify-content:flex-end;}
  .tbl-stack .num{text-align:right;}
}

/* Quote editor — mobile block summary rows (tap to edit; spec §4) */
.q-msum{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--blue);border-radius:var(--r-lg);padding:13px 15px;margin-bottom:8px;width:100%;text-align:left;cursor:pointer;font-family:var(--font-body);}
.q-msum.q-msum-price{border-left-color:var(--coral);}
.q-msum.q-msum-subtotal{border-left-color:var(--muted);}
.q-msum .qm-k{font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);display:block;}
.q-msum .qm-t{font-size:14px;font-weight:600;color:var(--ink);line-height:1.3;display:block;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.q-msum .grow{flex:1;min-width:0;}
.q-msum .qm-amt{font-weight:700;color:var(--ink);font-size:13.5px;white-space:nowrap;font-variant-numeric:tabular-nums;}
.q-msum>svg{color:var(--faint);flex:none;width:16px;height:16px;}
.q-mdone{margin-left:auto;}

/* Compact-view toggle (BugHerd #35) — sits in the .q-addbar but reads as a view control, not an
   "add" button: solid border (vs the add buttons' dashed), pushed to the far right of the row. */
.q-viewtoggle{margin-left:auto;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-sm);padding:9px 15px;font-size:13px;font-weight:600;color:var(--ink-body);cursor:pointer;font-family:var(--font-body);transition:border-color .15s,color .15s,background .15s;}
.q-viewtoggle:hover{border-color:var(--blue);color:var(--blue);}
.q-viewtoggle:focus-visible{outline:2px solid var(--blue);outline-offset:2px;}
/* No active-state rule here on purpose (BugHerd #87): the button's label is now the ACTION
   ("Detailed view" while compact is on), so a "current mode" highlight would contradict it. */
/* Compact is forced on mobile, so the toggle is meaningless there. */
@media (max-width:719px){.q-viewtoggle{display:none;}}

@media (max-width:980px){
  .quote-proposal-workspace{grid-template-columns:1fr;gap:10px;}
  .qpw-intro{display:flex;align-items:baseline;gap:10px;padding:0 2px;}
  .qpw-note{max-width:none;padding:0 2px;}
}
@media (max-width:560px){
  .qpw-tabs{grid-template-columns:1fr;}
  .qpw-tab{min-height:48px;}
}

/* Reorder affordance on compact summary rows (BugHerd #35) — mirrors .q-block-tools button styling. */
.q-msum .qm-tools{display:flex;gap:2px;flex:none;}
.q-msum .qm-tools button{background:none;border:none;cursor:pointer;color:var(--muted);font-size:14px;line-height:1;padding:3px 7px;border-radius:5px;}
.q-msum .qm-tools button:hover{background:var(--sunken);color:var(--ink);}
.q-msum .qm-tools button:focus-visible{outline:2px solid var(--blue);outline-offset:1px;}

/* .q-msum is now a div[role=button] (it can't be a real <button> because it nests the move buttons),
   so it no longer inherits native button focus/hover — give it explicit affordance. */
.q-msum:hover{background:var(--sunken);}
.q-msum:focus-visible{outline:2px solid var(--blue);outline-offset:2px;}

/* Desktop compact density (BugHerd #35): tighten the summary rows so a long quote scans at roughly
   40% of an expanded block's height while staying readable. Mobile keeps its existing spacing. */
@media (min-width:720px){
  .q-msum{padding:8px 14px;margin-bottom:6px;gap:10px;}
  .q-msum .qm-k{font-size:9.5px;}
  .q-msum .qm-t{font-size:13.5px;margin-top:1px;}
  .q-msum .qm-amt{font-size:13px;}
}

/* Sticky submit row on mobile editors (tracker/contact/create forms) */
@media (max-width:719px){
  .form-actions{position:sticky;bottom:0;z-index:30;background:linear-gradient(180deg,transparent,var(--paper) 26%);padding:18px 0 14px;display:flex;gap:10px;margin-top:8px;}
  .form-actions .btn,.form-actions .btn-primary{flex:1;justify-content:center;min-height:44px;}
  .q-savebar{z-index:30;background:linear-gradient(180deg,transparent,var(--paper) 26%);border-top:0;padding:18px 0 14px;gap:10px;}
  .q-savebar .btn-primary{flex:1;justify-content:center;min-height:44px;}
  .q-savebar .btn-coral{flex:1;justify-content:center;min-height:44px;}
}

/* ── §3 Breakpoints (REDESIGN-SPEC — copy verbatim; selectors mapped
      to this codebase's markup: .brand-full/.brand-mark, .side-signout) ── */
@media (max-width:1023px){            /* icon rail (shell sidebar only — not the drawer copy) */
  :root{--side-w:64px;}
  .shell .side .nav-i span,.shell .side .side-label,.shell .side .side-user>div,
  .shell .side-brand .brand-full,.shell .side .side-signout span{display:none;}
  .shell .side-brand .brand-mark{display:block;}
  .shell .side{padding:18px 8px;}
  .shell .side-brand{justify-content:center;padding-left:0;padding-right:0;}
  .shell .side .nav-i,.shell .side .side-signout{justify-content:center;padding:10px 0;}
  .shell .side .side-user{justify-content:center;padding-left:0;padding-right:0;}
  .shell .side .side-toggle{display:none;}
}
@media (max-width:899px){             /* rails stack */
  .layout-rail,.layout-split,.grid-side,.ov-pair{grid-template-columns:1fr;}
  .layout-rail>aside{position:static;}
  .tabs{overflow-x:auto;scrollbar-width:none;}
  .proposal-admin-disclosure__body{
    grid-template-columns:repeat(2,minmax(0,1fr));
    grid-template-areas:
      "link link"
      "actions actions"
      "outcome company"
      "presentation health"
      "ownership ownership"
      "archive archive";
  }
}
@media (max-width:719px){             /* mobile */
  .shell{grid-template-columns:1fr;}
  .shell .side{display:none;}         /* replaced by topbar + drawer */
  .mtopbar{display:flex;}
  .main{padding:16px 16px 90px;}
  .page-head{flex-wrap:wrap;align-items:flex-start;}
  .page-head>.row{width:100%;min-width:0;flex-wrap:wrap;}
  .page-head>.row .quote-save-status{min-width:0;}
  .canvas-cap,#quote-editor,.q-settings,.q-block{min-width:0;max-width:100%;}
  .q-addbar{display:grid;grid-template-columns:1fr 1fr;}
  .q-addbtn{min-width:0;padding-left:9px;padding-right:9px;}
  .q-price-row{grid-template-columns:minmax(0,1fr) minmax(64px,.38fr);}
  .q-price-row>.q-field:nth-child(3),.q-price-row>.q-field:nth-child(4){grid-row:2;}
  .mactions{min-width:0;flex-wrap:wrap;}
  .mactions .btn{min-width:0;flex:1 1 140px;}
  .main h1.title{font-size:22px;}
  .grid-2,.grid-3{grid-template-columns:1fr;}
  .q-settings .grid2,.q-settings .grid3{grid-template-columns:1fr;}
  .stats{grid-template-columns:1fr 1fr;gap:10px;}
  .stat{padding:13px 14px;min-width:0;}
  .stat .v{font-size:23px;overflow-wrap:anywhere;}
  .tabs{overflow-x:auto;scrollbar-width:none;}
  .tab{padding:10px 13px 12px;white-space:nowrap;font-size:13px;}
  .journey{padding:8px 10px;border-radius:var(--r-md);}
  .jclear{opacity:1;}
  .inp,.sel,.ta{padding:12px 13px;font-size:14px;border-radius:var(--r-md);}
  .btn{padding:12px 16px;font-size:14px;border-radius:var(--r-md);min-height:44px;}
  .btn-sm{padding:8px 12px;font-size:12.5px;min-height:0;}
  .search{flex:1 1 auto;}
  .toolbar .search{min-width:0;}
  .layout-form{max-width:none;}
  .picker-pop{position:fixed;left:12px;right:12px;width:auto;max-width:none;top:auto;}

  /* Dashboard overflow guard (Phase 6). Cards are full-width single columns here, but their
     headers, prompt rows and entity rows still flex and would shove the page wide when title +
     pill + link can't all fit. Let each row wrap and shed its nowrap where it had one. */
  .card-h{flex-wrap:wrap;row-gap:8px;}
  /* The header's right cluster (e.g. trackers "needs attention" pill + "Manage →") is itself a
     flex <div>; cap it so the title always takes the line it needs and the controls reflow below. */
  .card-h>div{min-width:0;flex-wrap:wrap;justify-content:flex-end;}
  /* Title side can't be squeezed below its text either. */
  .card-h h3{min-width:0;overflow-wrap:anywhere;}
  /* Accepted-quote → tracker prompt: stack the action under the copy on narrow screens. */
  .nextstep{flex-wrap:wrap;}
  .nextstep .btn{width:100%;justify-content:center;}
  .proposal-setup__body{display:grid;padding:18px;}
  .proposal-setup__actions{justify-content:stretch;}
  .proposal-setup__actions .btn{flex:1;justify-content:center;}
  .proposal-setup__runway{grid-template-columns:1fr;margin:0 18px 16px;}
  .proposal-setup__runway>div+div{border-left:0;border-top:1px solid var(--line);}
  .proposal-setup__relationship .lnk{margin-left:0;width:100%;}
  .proposal-upload-guide__head{display:grid;padding:20px;}
  .proposal-upload-guide__head .btn{width:100%;justify-content:center;}
  .proposal-upload-steps{padding:6px 20px;}
  .proposal-upload-guide__figure{margin:0 20px 20px;}
  .proposal-upload-guide__check{padding:14px 20px;}
  .proposal-upload-guide__check .lnk{margin-left:0;width:100%;}
  .proposal-upload-layout--empty>aside{order:-1;}
  .proposal-admin-disclosure>summary{display:grid;align-items:start;gap:8px;}
  .proposal-admin-disclosure>summary>.hint{text-align:left;}
  .proposal-admin-disclosure__body{
    grid-template-columns:minmax(0,1fr);
    grid-template-areas:
      "link"
      "actions"
      "outcome"
      "company"
      "presentation"
      "ownership"
      "health"
      "archive";
  }
  .proposal-admin-card--ownership{grid-template-columns:minmax(0,1fr)!important;}
  .proposal-admin-card--ownership>div+div{border-left:0!important;border-top:1px solid var(--line)!important;padding-left:0;padding-top:12px!important;}
  .proposal-admin-card--archive{grid-template-columns:minmax(0,1fr)!important;}
  .proposal-admin-card--archive form{justify-self:start;}
  /* Attention entity rows: the trailing pill + chevron can drop below the title on narrow cards. */
  .ent{flex-wrap:wrap;row-gap:8px;}
  .ent .grow{min-width:0;flex-basis:140px;}
}

/* BugHerd #30: comment body is stored server-sanitised HTML; render it as markup, not pre-wrapped text. */
.rich-comment-body{line-height:1.45;overflow-wrap:break-word;}
.rich-comment-body p{margin:0 0 6px;}
.rich-comment-body p:last-child{margin-bottom:0;}
.rich-comment-body ul,.rich-comment-body ol{margin:4px 0 4px 20px;padding:0;}
.rich-comment-body img{max-width:100%;height:auto;border-radius:4px;}
.rich-comment-body a{color:#FF5E54;}

/* Three-way create-entry group (dashboard + quotes + proposals page heads). */
.createentry{display:grid;gap:5px;justify-items:end;}
.createentry-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;}
.createentry-alt{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end;font-size:12px;}
/* Capped on the sentence, not the grid, so a second action button is free to widen the row. */
.createentry-why{color:var(--muted);font-size:11.5px;line-height:1.35;text-align:right;max-width:292px;}
@media (max-width:719px){.createentry{justify-items:stretch;}.createentry-actions{flex-direction:column;align-items:stretch;}.createentry-alt,.createentry-why{justify-content:flex-start;text-align:left;max-width:none;}}

/* Quotes list creation controls: keep the guided journey dominant and move specialist
   quote-only paths out of the permanent header footprint. */
.quote-head-actions{display:flex;align-items:flex-start;justify-content:flex-end;gap:10px;flex-wrap:wrap;}
.quote-primary-entry{display:grid;justify-items:end;gap:4px;}
.quote-primary-entry form{margin:0;}
.quote-primary-entry>span{font-size:11px;color:var(--muted);}
.quote-proposal-only{align-self:center;color:var(--blue);font-size:12.5px;font-weight:600;text-decoration:none;padding:8px 2px;}
.quote-proposal-only:hover{text-decoration:underline;text-underline-offset:3px;}
.quote-new-menu{position:relative;align-self:flex-start;}
.quote-new-menu>summary{list-style:none;cursor:pointer;white-space:nowrap;}
.quote-new-menu>summary::-webkit-details-marker{display:none;}
.quote-new-menu[open]>summary{border-color:var(--blue);box-shadow:0 0 0 3px var(--blue-soft);}
.quote-new-panel{position:absolute;z-index:45;top:calc(100% + 7px);right:0;width:270px;padding:7px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-pop);display:grid;gap:2px;}
.quote-new-panel form{margin:0;}
.quote-new-option{width:100%;display:flex;align-items:center;gap:11px;text-align:left;border:0;background:transparent;color:var(--ink);padding:10px;border-radius:var(--r-sm);cursor:pointer;font:inherit;}
.quote-new-option:hover,.quote-new-option:focus-visible{background:var(--sunken);outline:none;}
.quote-new-option>span:last-child{display:grid;gap:2px;min-width:0;}
.quote-new-option strong{font-size:13px;}
.quote-new-option small{font-size:11.5px;color:var(--muted);font-weight:400;}
.quote-new-icon{width:28px;height:28px;border:1px solid var(--line);border-radius:7px;display:grid;place-items:center;flex:none;color:var(--blue);font-size:18px;line-height:1;}
.quote-new-icon-ai{color:var(--coral-deep);background:var(--coral-soft);border-color:#f4c4b7;}

.quote-template-dialog{width:min(660px,calc(100vw - 32px));max-height:min(720px,calc(100vh - 40px));padding:0;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);color:var(--ink);box-shadow:var(--shadow-pop);overflow:hidden;}
.quote-template-dialog::backdrop{background:rgba(20,28,30,.48);backdrop-filter:blur(2px);}
.quote-template-dialog form{display:grid;max-height:inherit;margin:0;}
.quote-template-head{display:flex;justify-content:space-between;gap:20px;padding:23px 25px 18px;border-bottom:1px solid var(--line);}
.quote-template-head h2{font-size:20px;line-height:1.25;margin:4px 0 5px;}
.quote-template-head p{margin:0;color:var(--muted);font-size:12.5px;}
.quote-template-close{width:32px;height:32px;border:0;border-radius:50%;background:var(--sunken);color:var(--muted);font-size:23px;line-height:1;cursor:pointer;flex:none;}
.quote-template-close:hover{background:var(--line);color:var(--ink);}
.quote-template-body{padding:18px 25px;display:grid;gap:14px;min-height:0;overflow:auto;}
.quote-template-search{width:100%;box-sizing:border-box;}
.quote-template-list{display:grid;gap:8px;}
.quote-template-choice{display:flex;align-items:center;gap:12px;padding:13px 14px;border:1px solid var(--line);border-radius:var(--r-md);cursor:pointer;background:var(--surface);transition:border-color .12s,background .12s;}
.quote-template-choice:hover{border-color:var(--line-strong);background:var(--paper);}
.quote-template-choice:has(input:checked){border-color:var(--blue);background:var(--blue-soft);box-shadow:0 0 0 1px var(--blue);}
.quote-template-choice input{position:absolute;opacity:0;pointer-events:none;}
.quote-template-choice-copy{display:grid;gap:3px;min-width:0;flex:1;}
.quote-template-choice-copy strong{font-size:13.5px;overflow-wrap:anywhere;}
.quote-template-choice-copy small{font-size:11.5px;color:var(--muted);}
.quote-template-check{width:22px;height:22px;border:1px solid var(--line-strong);border-radius:50%;display:grid;place-items:center;color:transparent;background:var(--surface);flex:none;font-size:12px;font-weight:800;}
.quote-template-choice:has(input:checked) .quote-template-check{background:var(--blue);border-color:var(--blue);color:#fff;}
.quote-template-empty{text-align:center;padding:28px;color:var(--muted);font-size:13px;}
.quote-template-foot{display:flex;justify-content:flex-end;gap:9px;padding:15px 25px;border-top:1px solid var(--line);background:var(--paper);}

@media (max-width:719px){
  .quote-head-actions{width:100%;justify-content:stretch;display:grid;grid-template-columns:1fr 1fr;}
  .quote-primary-entry{grid-column:1/-1;justify-items:stretch;}
  .quote-primary-entry .btn{width:100%;}
  .quote-primary-entry>span{text-align:left;}
  .quote-new-menu>summary{justify-content:center;}
  .quote-new-panel{left:0;right:auto;width:min(290px,calc(100vw - 36px));}
  .quote-proposal-only{text-align:center;}
  .quote-template-head,.quote-template-body,.quote-template-foot{padding-left:18px;padding-right:18px;}
}

/* ── Quote analytics (admin) ─────────────────────────────────────────── */
.qa-legend{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);}
.qa-swatch{width:10px;height:10px;border-radius:2px;display:inline-block;flex:none;}
.qa-swatch-sent{background:var(--sunken);border:1px solid var(--line-strong);}
.qa-swatch-accepted{background:var(--good);}
.qa-bar{cursor:pointer;}
.qa-bar:focus{outline:2px solid var(--teal);outline-offset:2px;border-radius:2px;}

/* ── Won-quote delivery strip ─────────────────────────────────────────────────────────────
   Sits under the header on an accepted quote. Two jobs side by side, each a label + one line
   of state + its action, so the whole post-win handoff reads at a glance instead of as a
   column of stacked pills and full-width buttons squeezed into the rail. */
.won{margin:0 0 14px;padding:16px 18px;border:1px solid var(--good, #2f7d52);
  border-left-width:4px;border-radius:var(--r-lg, 12px);background:var(--good-soft, #eef7f1);}
.won-intro{display:flex;align-items:flex-start;gap:12px;}
.won-title{margin:0;font-family:var(--font-display);font-size:16px;color:var(--ink);}
.won-sub{margin:2px 0 0;font-size:12.5px;color:var(--muted);max-width:78ch;}
.won-jobs{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px;margin-top:14px;}
.won-job{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md, 8px);background:var(--surface);}
.won-job-copy{display:grid;gap:2px;min-width:0;flex:1 1 190px;}
.won-job-label{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink);}
.won-job-state{font-size:12.5px;color:var(--muted);overflow-wrap:anywhere;}
.won-job-bad{color:var(--bad);}
.won-job-act{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex:0 0 auto;}
.won-dismiss{font-size:12px;white-space:nowrap;}
@media (max-width:640px){
  .won-job{align-items:flex-start;}
  .won-job-act{width:100%;}
}
