:root{ --atiq-qp-build:'058500'; }
/* ===== FROZEN QUOTE DOCUMENT CSS (full stylesheet, scoped) =====
   Quote's COMPLETE stylesheet, lifted byte-for-byte and auto-scoped under .quote-view so it
   reproduces Quote's exact styling (fonts, sizes, alignment, edit states, footer) inside the
   quote view — while NOT affecting Track's board (Quote's .btn/.card/.tbl etc. are scoped, so
   they can't touch Track). This replaces the earlier partial keyword-extracted CSS which was
   missing ~two-thirds of Quote's rules (the cause of the footer/edit fidelity drift). */

.quote-view *, .quote-view *::before, .quote-view *::after{box-sizing:border-box;margin:0;padding:0}
.quote-view{
  --dark:#141414;--dark-2:#1e1e1e;--dark-3:#272727;--dark-4:#333;
  --border:rgba(255,255,255,0.08);--border-md:rgba(255,255,255,0.15);
  --text:#f0f0f0;--text-muted:#999;--text-dim:#555;
  --accent:#d4fc00;--info:#4da6ff;--warn:#f5a623;--danger:#e05252;--success:#4caf50;
  --radius:8px;--radius-lg:12px;
  --font:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --font-mono:'SFMono-Regular',Consolas,monospace;
  --page-w:794px
}
body.light .quote-view{
  --dark:#f0efed;--dark-2:#ffffff;--dark-3:#f5f5f3;--dark-4:#e8e8e6;
  --border:rgba(0,0,0,0.08);--border-md:rgba(0,0,0,0.14);
  --text:#1a1a18;--text-muted:#5a5855;--text-dim:#9a9895;
  /* [018700] --accent used to be #1a1a18 (black) in light mode, which is why the quote went
     almost entirely monochrome: accent drives ~99 rules (56 borders, 38 text, 5 backgrounds).
     Dark mode's lime #d4fc00 is unreadable on white, so this is a deeper olive-lime that keeps
     the ATiQ green identity while clearing ~4.5:1 contrast for text on white.
     Print is unaffected — the @media print block forces everything black with !important. */
  --accent:#6b8300;--info:#1a5fbf;--warn:#b85c00;--danger:#b82020;--success:#2d7a3a
}
body.light .quote-view .app-header{background:#1a1a18}
body.light .quote-view .global-nav{background:#ffffff;border-bottom-color:rgba(0,0,0,0.1)}
body.light .quote-view .job-context-bar{background:#f0efed;border-bottom-color:rgba(0,0,0,0.1)}
body.light .quote-view .card{background:#ffffff;border-color:rgba(0,0,0,0.08)}
body.light .quote-view .btn{background:#f0efed;border-color:rgba(0,0,0,0.14);color:#1a1a18}
body.light .quote-view .btn:hover{background:#e8e8e6}
body.light .quote-view .btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}
body.light .quote-view .tbl th{background:#f5f5f3;color:#6b6860;border-bottom-color:rgba(0,0,0,0.1)}
body.light .quote-view .tbl td{border-bottom-color:rgba(0,0,0,0.06)}
.quote-view .tbl input, .quote-view .tbl select{width:100%;background:var(--dark-3);border:1px solid var(--border);border-radius:4px;padding:3px 6px;font-size:11px;color:var(--text);font-family:'Inter',-apple-system,sans-serif}
.quote-view .tbl input:focus, .quote-view .tbl select:focus{outline:none;border-color:var(--accent)}
body.light .quote-view .tbl input, body.light .quote-view .tbl select{background:#f5f5f3;border-color:rgba(0,0,0,0.12);color:#1a1a18}
body.light .quote-view .upload-zone{background:#f5f5f3;border-color:rgba(0,0,0,0.12)}
body.light .quote-view .stage-pill{background:#f0efed;border-color:rgba(0,0,0,0.12);color:#6b6860}
body.light .quote-view .add-item-form{background:#f5f5f3;border-color:rgba(0,0,0,0.12)}
body.light .quote-view .add-item-row input{background:#ffffff;border-color:rgba(0,0,0,0.12)}
body.light .quote-view .project-notes-textarea{background:#f5f5f3;border-color:rgba(0,0,0,0.12)}
body.light .quote-view .theme-fab{background:#f5f5f3;border-color:rgba(0,0,0,0.14);box-shadow:0 4px 16px rgba(0,0,0,0.1)}
.quote-view{scrollbar-gutter:stable}
.quote-view{font-family:var(--font);font-size:13px;color:var(--text);background:var(--dark);min-height:100vh}
.quote-view .app-header{background:#0a0a0a;border-bottom:1px solid rgba(255,255,255,0.06);position:sticky;top:0;z-index:100}
.quote-view #auth-overlay{position:fixed;inset:0;z-index:10000;background:#0a0a0a;display:flex;align-items:center;justify-content:center;padding:20px}
.quote-view #auth-overlay.hidden{display:none}
.quote-view .auth-card{background:var(--dark-2);border:1px solid var(--border-md);border-radius:16px;padding:36px 32px;width:100%;max-width:360px;box-shadow:0 20px 60px rgba(0,0,0,0.5)}
.quote-view .auth-brand{font-size:28px;font-weight:800;letter-spacing:-0.04em;color:var(--text);text-align:center;margin-bottom:4px}
.quote-view .auth-brand span{color:var(--accent)}
.quote-view .auth-brand-sub{font-weight:300;opacity:0.7;letter-spacing:0}
.quote-view .auth-sub{text-align:center;font-size:12px;color:var(--text-muted);margin-bottom:24px}
.quote-view .auth-input{width:100%;box-sizing:border-box;padding:12px 14px;margin-bottom:10px;background:var(--dark-3);border:1px solid var(--border-md);border-radius:8px;color:var(--text);font-size:14px;font-family:var(--font);outline:none}
.quote-view .auth-input:focus{border-color:var(--accent)}
.quote-view .auth-btn{width:100%;padding:12px;margin-top:6px;background:var(--accent);color:#1a1a18;border:none;border-radius:8px;font-size:14px;font-weight:700;cursor:pointer;font-family:var(--font);transition:opacity 0.15s}
.quote-view .auth-btn:hover{opacity:0.9}
.quote-view .auth-btn:disabled{opacity:0.5;cursor:default}
.quote-view .auth-error{background:rgba(239,68,68,0.12);border:1px solid rgba(239,68,68,0.3);color:#ef4444;font-size:12px;padding:9px 12px;border-radius:7px;margin-bottom:12px;display:none}
.quote-view .auth-error.show{display:block}
.quote-view .auth-toggle-row{text-align:center;margin-top:16px;font-size:12px;color:var(--text-muted)}
.quote-view .auth-link{background:none;border:none;color:var(--accent);font-size:12px;font-weight:600;cursor:pointer;font-family:var(--font);padding:0 0 0 4px}
.quote-view .auth-link:hover{text-decoration:underline}
.quote-view .auth-signout{background:none;border:1px solid var(--border-md);border-radius:5px;color:var(--text-muted);cursor:pointer;font-size:10px;padding:3px 11px;font-family:var(--font);transition:all 0.15s}
.quote-view .auth-signout:hover{border-color:var(--text-muted);color:var(--text)}
.quote-view .auth-user-email{font-size:11px;color:var(--text-dim)}
.quote-view .sync-indicator{font-size:10px;color:var(--text-dim);transition:color 0.3s}
.quote-view .sync-indicator.syncing{color:var(--warn)}
.quote-view .sync-indicator.synced{color:var(--success)}
.quote-view .sync-indicator.sync-error{color:#ef4444}
body.light .quote-view .app-header{background:#1a1a18}
.quote-view .app-header-inner{max-width:1060px;margin:0 auto;height:70px;padding:0 24px;display:flex;align-items:center;justify-content:space-between}
.quote-view .brand{display:flex;align-items:center;cursor:pointer}
.quote-view .brand img{height:38px}
.quote-view .brand-name-right{font-size:32px;font-weight:800;color:#f0f0f0;letter-spacing:-0.04em;line-height:1;display:flex;align-items:baseline;gap:8px}
.quote-view .brand-atiq{color:#f0f0f0}
.quote-view .brand-atiq .iq{color:#d4fc00}
.quote-view .brand-sub{font-weight:300;font-size:26px;letter-spacing:0;color:#f0f0f0;opacity:0.7}
.quote-view .app-header-strip{height:30px;display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:0 24px;max-width:1060px;margin:0 auto;border-top:1px solid rgba(255,255,255,0.05)}
.quote-view .app-header-strip:empty{display:none}
.quote-view .global-nav{background:var(--dark-2);border-bottom:1px solid var(--border)}
.quote-view .global-nav-inner{max-width:1060px;margin:0 auto;padding:0 20px;display:flex;align-items:center;justify-content:space-between}
.quote-view .nav-tabs{display:flex;gap:2px}
.quote-view .nav-tab{position:relative;padding:11px 20px;font-size:13px;font-weight:500;cursor:pointer;border:none;background:none;color:var(--text-muted);font-family:var(--font);margin-bottom:-1px;transition:color 0.15s}
.quote-view .nav-tab::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left center;transition:transform 0.25s ease}
.quote-view .nav-tab:hover{color:var(--text)}
.quote-view .nav-tab:hover::after{transform:scaleX(1)}
.quote-view .nav-tab.active{color:var(--accent);font-weight:600}
.quote-view .nav-tab.active::after{transform:scaleX(1)}
body.light .quote-view .nav-tab::after{background:var(--text)}
body.light .quote-view .nav-tab.active{color:var(--text)}
.quote-view .nav-tab.disabled{opacity:0.35;cursor:not-allowed;pointer-events:none}
.quote-view .nav-tab.disabled::after{display:none}
.quote-view .job-context-bar{background:var(--dark-3);border-bottom:1px solid var(--border-md)}
.quote-view .job-context-inner{max-width:1060px;margin:0 auto;padding:0 20px;display:flex;align-items:center;gap:16px;height:44px}
.quote-view .job-context-tabs{display:flex;gap:2px;flex-shrink:0}
.quote-view .job-context-center{flex:1;display:flex;align-items:center;gap:10px;justify-content:center}
.quote-view .job-context-name{font-size:13px;font-weight:600;color:var(--text)}
.quote-view .job-context-actions{display:flex;gap:8px;flex-shrink:0}
.quote-view .save-indicator{font-size:11px;color:var(--text-dim);transition:all 0.3s}
.quote-view .sync-indicator{font-size:11px;color:var(--text-dim);transition:all 0.3s;white-space:nowrap}
.quote-view .sync-indicator.syncing{color:var(--text-muted)}
.quote-view .sync-indicator.synced{color:var(--accent)}
.quote-view .sync-indicator.sync-error{color:#ff6b6b;font-weight:600}
.quote-view .close-job-btn{background:transparent;border:1px solid var(--border-md);color:var(--text-muted);font-family:var(--font);font-size:11px;font-weight:500;padding:4px 10px;border-radius:5px;cursor:pointer;transition:all 0.15s;white-space:nowrap}
.quote-view .close-job-btn:hover{border-color:var(--danger);color:var(--danger)}
.quote-view .lock-banner{display:none;align-items:center;gap:12px;max-width:1060px;margin:0 auto;padding:10px 20px;background:rgba(245,166,35,0.12);border-bottom:1px solid rgba(245,166,35,0.35);color:var(--text);font-size:12px}
.quote-view .lock-banner.show{display:flex}
.quote-view .lock-banner-icon{color:var(--warn);font-size:14px;flex-shrink:0}
.quote-view .lock-banner-text{flex:1;line-height:1.4}
.quote-view .lock-banner-actions{display:flex;gap:6px;flex-shrink:0}
.quote-view .job-readonly .stage-panel input, .quote-view .job-readonly .stage-panel button:not(.no-print):not(.nav-tab), .quote-view .job-readonly .stage-panel textarea{pointer-events:none;opacity:0.7}
.quote-view .job-readonly .view-setup input, .quote-view .job-readonly .view-setup textarea{pointer-events:none;opacity:0.7}
.quote-view .save-indicator.saving{color:var(--warn)}
.quote-view .save-indicator.saved{color:var(--success)}
.quote-view .save-indicator.save-error{color:#ef4444;font-weight:600}
.quote-view .view{display:none;max-width:1060px;margin:0 auto;padding:24px 20px;box-sizing:border-box}
.quote-view .view.active{display:block;animation:viewFadeIn 0.28s ease}
@keyframes viewFadeIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}
.quote-view .card{background:var(--dark-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px 16px;margin-bottom:14px}
.quote-view .card-title{font-size:10px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.08em;margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.quote-view .btn{padding:7px 14px;border:1px solid var(--border-md);border-radius:var(--radius);font-size:12px;font-weight:500;cursor:pointer;background:var(--dark-3);color:var(--text);font-family:var(--font);transition:all 0.15s;display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.quote-view .btn:hover{background:var(--dark-4)}
.quote-view .btn-primary{background:var(--accent);color:#000;border-color:var(--accent);font-weight:700}
.quote-view .btn-primary:hover{opacity:0.88}
.quote-view .btn-danger{color:var(--danger);border-color:rgba(224,82,82,0.3)}
.quote-view .btn-danger:hover{background:rgba(224,82,82,0.1)}
.quote-view .btn-sm{padding:4px 9px;font-size:11px}
.quote-view .btn:disabled{opacity:0.4;cursor:not-allowed;color:var(--text-muted)}
.quote-view .btn:disabled:hover{border-color:var(--border-md)}
.quote-view .btn-ghost{background:none;border-color:transparent;color:var(--text-muted)}
.quote-view .btn-ghost:hover{background:var(--dark-3);color:var(--text)}
.quote-view .field{display:flex;flex-direction:column;gap:5px}
.quote-view .field label{font-size:11px;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.05em}
.quote-view .field input, .quote-view .field select, .quote-view .field textarea{font-size:13px;padding:8px 10px;border:1px solid var(--border-md);border-radius:var(--radius);background:var(--dark-3);color:var(--text);font-family:var(--font);transition:border-color 0.15s}
.quote-view .field input:focus, .quote-view .field select:focus, .quote-view .field textarea:focus{outline:none;border-color:var(--accent)}
body.light .quote-view .field input:focus, .quote-view .field select:focus{border-color:var(--text)}
.quote-view .field input::placeholder, .quote-view .field textarea::placeholder{color:var(--text-dim)}
.quote-view .field input[readonly]{opacity:0.6;cursor:default}
.quote-view .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.quote-view .field{display:flex;flex-direction:column;gap:5px}
.quote-view .field-label{font-size:10px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.07em}
.quote-view .field-input{background:var(--dark-3);border:1px solid var(--border-md);border-radius:var(--radius);padding:9px 12px;font-size:13px;color:var(--text);font-family:var(--font);transition:border-color 0.15s}
.quote-view .field-input:focus{outline:none;border-color:var(--accent)}
body.light .quote-view .field-input{background:#f5f5f3;border-color:rgba(0,0,0,0.12);color:#1a1a18}
body.light .quote-view .field-input:focus{border-color:var(--text)}
.quote-view .msg{font-size:11px;padding:8px 12px;border-radius:var(--radius);border:1px solid;line-height:1.5}
.quote-view .msg-warn{background:rgba(245,166,35,0.08);color:var(--warn);border-color:rgba(245,166,35,0.2)}
.quote-view .msg-info{background:rgba(77,166,255,0.08);color:var(--info);border-color:rgba(77,166,255,0.2)}
.quote-view .io-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.quote-view .divider{border:none;border-top:1px solid var(--border);margin:16px 0}
.quote-view .empty-state{text-align:center;padding:60px 24px;color:var(--text-dim)}
.quote-view .empty-state-icon{font-size:40px;margin-bottom:14px}
.quote-view .empty-state p{font-size:13px;line-height:2}
.quote-view input[type=file]::file-selector-button{padding:5px 10px;border:1px solid var(--border-md);border-radius:var(--radius);background:var(--dark-3);color:var(--text);font-size:12px;cursor:pointer;margin-right:8px;font-family:var(--font)}
.quote-view .jobs-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}
.quote-view .jobs-header h1{font-size:22px;font-weight:700;letter-spacing:-0.02em}
.quote-view .job-list{display:flex;flex-direction:column;gap:10px}
.quote-view .job-card{background:var(--dark-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:13px 18px;cursor:pointer;transition:border-color 0.15s;margin-bottom:11px;position:relative;overflow:visible}
.quote-view .job-card:hover{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.quote-view .job-card-info{flex:1;min-width:0}
.quote-view .job-card-name{font-size:15px;font-weight:700;color:var(--text);margin-bottom:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.quote-view .job-card-meta{font-size:10px;color:var(--text-dim);margin-top:3px}
.quote-view .job-card-total{font-size:18px;font-weight:800;font-family:var(--font-mono);color:var(--accent);white-space:nowrap}
body.light .quote-view .job-card-total{color:var(--text)}
.quote-view .job-card-actions{display:flex;gap:6px;flex-shrink:0}
.quote-view .job-card-left{flex:1;min-width:0}
.quote-view .job-card-client{font-size:12px;color:var(--text-muted);display:flex;align-items:center;gap:4px;margin-bottom:4px}
.quote-view .job-card-client-pill{font-size:11px;font-weight:500;color:var(--text);background:var(--dark-4);border:1px solid var(--border-md);border-radius:20px;padding:4px 13px;white-space:nowrap;max-width:200px;overflow:hidden;text-overflow:ellipsis;display:inline-block}
body.light .quote-view .job-card-stages{background:#e8e8e6}
.quote-view .job-card-right{display:flex;align-items:center;gap:12px;flex-shrink:0}
.quote-view .job-card-menu{position:relative}
.quote-view .job-card-menu-btn{background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:15px;padding:2px 6px;line-height:1;font-family:var(--font);transition:all 0.15s;opacity:0;letter-spacing:1px}
.quote-view .job-card:hover .job-card-menu-btn{opacity:0.7}
.quote-view .job-card-menu-btn:hover{opacity:1!important;color:var(--text)}
.quote-view .job-card-menu-btn:hover{border-color:var(--border-md);color:var(--text)}
.quote-view .job-card-dropdown{display:none;position:absolute;right:0;top:calc(100% + 4px);background:var(--dark-2);border:1px solid var(--border-md);border-radius:var(--radius);box-shadow:0 4px 24px rgba(0,0,0,0.6);z-index:1000;min-width:130px;overflow:hidden}
body.light .quote-view .job-card-dropdown{box-shadow:0 4px 16px rgba(0,0,0,0.12)}
.quote-view .job-card-dropdown.open{display:block}
.quote-view .job-card-dropdown-item{display:block;width:100%;padding:9px 14px;font-size:12px;color:var(--text-muted);background:none;border:none;text-align:left;cursor:pointer;font-family:var(--font);transition:background 0.1s}
.quote-view .job-card-dropdown-item:hover{background:var(--dark-3);color:var(--text)}
.quote-view .job-card-dropdown-item.danger{color:#ef4444}
.quote-view .job-card-dropdown-item.danger:hover{background:rgba(239,68,68,0.1)}
.quote-view .job-card-date{font-size:10px;color:var(--text-dim);margin-top:2px}
.quote-view .jobs-header-row{display:flex;align-items:center;gap:14px;margin-bottom:24px}
.quote-view .jobs-header-row h1{flex-shrink:0}
.quote-view .jobs-search-row{display:flex;align-items:center;gap:8px;padding:7px 4px;margin-left:auto;background:none;border:none;border-radius:0;max-width:280px;flex:1}
.quote-view .jobs-search-row .jobs-search-input{background:none;border:none;width:100%}
.quote-view .jobs-search-row svg{width:14px;height:14px;color:var(--text-dim);flex-shrink:0}
.quote-view .stat-tiles{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:34px}
.quote-view .stat-tile{background:var(--dark-2);border:1px solid var(--border);border-radius:8px;padding:16px 14px;cursor:pointer;transition:border-color 0.15s,box-shadow 0.15s,opacity 0.15s}
.quote-view .stat-tile:hover{border-color:var(--border-md)}
.quote-view .stat-tile.tile-selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.quote-view .stat-tile.tile-dimmed{opacity:0.4}
.quote-view .stat-tile-label{font-size:9px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.08em;margin-bottom:8px;display:flex;align-items:center;gap:5px}
.quote-view .stat-tile-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.quote-view .stat-tile-value{font-size:19px;font-weight:800;letter-spacing:-0.02em;color:var(--text);font-family:var(--font-mono)}
.quote-view .stat-tile-sub{font-size:11px;color:var(--text-muted);margin-top:5px}
.quote-view .status-group-sum{margin-left:auto;font-size:11px;color:var(--text-muted);font-weight:600;font-family:var(--font-mono)}
@media(max-width:640px){
.quote-view .stat-tiles{grid-template-columns:repeat(2,1fr)}
}
.quote-view .clear-filters-row{display:flex;justify-content:flex-end;align-items:center;height:16px;margin-top:-26px;margin-bottom:10px}
.quote-view .jobs-chart-card{position:relative;background:transparent;border:1px solid var(--border);border-radius:var(--radius-lg);padding:18px 18px 18px 54px;margin-bottom:34px}
.quote-view .jobs-chart-svg{display:block;width:100%;height:120px;overflow:visible}
.quote-view .jobs-chart-grid line{stroke:#302f2c;stroke-width:1}
.quote-view .jobs-chart-labels{position:absolute;left:12px;top:18px;height:120px;width:40px;pointer-events:none}
.quote-view .jobs-chart-labels .jcl{position:absolute;left:0;font-size:9px;font-weight:500;color:#5a5955;transform:translateY(-50%);font-family:var(--font)}
.quote-view .jobs-chart-line{filter:drop-shadow(0 0 4px rgba(212,252,0,0.45)) drop-shadow(0 0 8px rgba(212,252,0,0.25))}
@keyframes jobsChartDraw{to{stroke-dashoffset:0}}
.quote-view .jobs-chart-dot{pointer-events:auto}
.quote-view .jobs-chart-tip{position:absolute;top:0;left:0;pointer-events:none;background:var(--dark);border:1px solid var(--border-md);border-radius:8px;padding:9px 13px 7px;box-shadow:0 8px 24px rgba(0,0,0,0.5);opacity:0;white-space:nowrap;z-index:5;display:flex;align-items:center;gap:11px;transition:left 0.28s ease,top 0.28s ease}
.quote-view .jobs-chart-tip .jct-nm{font-size:11px;font-weight:700;color:var(--text)}
.quote-view .jobs-chart-tip .jct-val{font-size:12px;font-weight:800;color:var(--accent);font-family:var(--font-mono);white-space:nowrap}
.quote-view .jobs-chart-tip .jct-client{position:absolute;top:-6px;left:50%;transform:translateX(-50%);font-size:8px;font-weight:600;letter-spacing:0.04em;text-transform:uppercase;color:var(--text-muted);background:var(--dark);padding:0 6px;white-space:nowrap;max-width:88%;overflow:hidden;text-overflow:ellipsis}
.quote-view .jobs-chart-tip .jct-ptr{position:absolute;left:50%;width:8px;height:8px;background:var(--dark);border-right:1px solid var(--border-md);border-bottom:1px solid var(--border-md);transform:translateX(-50%) rotate(45deg)}
.quote-view .jobs-chart-tip.tip-above .jct-ptr{bottom:-5px;border-right:1px solid var(--border-md);border-bottom:1px solid var(--border-md);border-left:none;border-top:none}
.quote-view .jobs-chart-tip.tip-below .jct-ptr{top:-5px;border-left:1px solid var(--border-md);border-top:1px solid var(--border-md);border-right:none;border-bottom:none}
body.light .quote-view .jobs-chart-tip{box-shadow:0 8px 24px rgba(0,0,0,0.15)}
.quote-view .clear-filters-link{font-size:10px;color:var(--text-dim);cursor:pointer;letter-spacing:0.03em;display:inline-flex;align-items:center;gap:4px;opacity:0;pointer-events:none;transition:color 0.15s,opacity 0.2s}
.quote-view .clear-filters-row.show .clear-filters-link{opacity:1;pointer-events:auto}
.quote-view .clear-filters-link:hover{color:var(--text-muted)}
.quote-view .jobs-search-input{background:none;border:none;outline:none;color:var(--text);font-size:13px;font-family:var(--font);flex:1;padding:2px 0}
.quote-view .jobs-search-input::placeholder{color:var(--text-dim)}
.quote-view #jobs-list{transition:opacity 0.22s ease}
.quote-view #jobs-list.filtering-fade{opacity:0}
.quote-view .status-group{position:relative;margin-bottom:38px;padding-left:14px;animation:groupFadeIn 0.3s ease}
@keyframes groupFadeIn{from{opacity:0}to{opacity:1}}
.quote-view .status-group::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;border-radius:2px;background:var(--spine,#666)}
.quote-view .status-group-empty{margin-bottom:22px}
.quote-view .status-group-empty::before{opacity:0.6}
.quote-view .status-drop-zone>.job-card:last-child{margin-bottom:0}
.quote-view .status-group-head{display:flex;align-items:center;gap:8px;margin-bottom:10px;padding:0 0 8px 2px}
.quote-view .status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.quote-view .status-group-name{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--text-muted)}
.quote-view .status-group-count{font-size:9px;color:var(--text-muted);font-weight:600;background:var(--dark-2);padding:1px 7px;border-radius:20px}
.quote-view .status-drop-zone{min-height:20px;border-radius:var(--radius);transition:background 0.15s}
.quote-view .status-drop-zone.drag-over{background:rgba(212,252,0,0.04);outline:1px dashed rgba(212,252,0,0.3)}
.quote-view .status-drop-zone-empty{margin-top:0}
.quote-view .status-drop-placeholder{border:1.5px dashed var(--border-md);border-radius:var(--radius);padding:14px;text-align:center;font-size:10px;color:var(--text-dim);font-style:italic;transition:all 0.15s}
.quote-view .status-drop-zone.drag-over .status-drop-placeholder{border-color:var(--accent);color:var(--accent);background:rgba(212,252,0,0.06);font-style:normal;font-weight:600}
.quote-view .job-card-dim{opacity:0.62}
.quote-view .job-card.dragging{opacity:0.5;cursor:grabbing}
.quote-view .job-card[draggable=true]{cursor:grab}
.quote-view .status-segmented{display:flex;flex-wrap:wrap;gap:6px}
.quote-view .status-seg-btn{font-size:11px;padding:7px 12px;border-radius:7px;background:var(--dark);color:var(--text-muted);border:1px solid var(--border);cursor:pointer;display:flex;align-items:center;gap:6px;font-family:var(--font);transition:all 0.15s}
.quote-view .status-seg-btn:hover{border-color:var(--border-md)}
.quote-view .status-seg-btn.active{background:var(--dark-4);color:var(--text);border-color:var(--border-md)}
.quote-view .status-seg-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.quote-view .upload-zone{border:2px dashed var(--border-md);border-radius:var(--radius-lg);padding:32px;text-align:center;cursor:pointer;background:var(--dark-3);transition:all 0.15s}
.quote-view .upload-zone:hover, .quote-view .upload-zone.drag-over{border-color:var(--accent)}
.quote-view .upload-zone-icon{font-size:28px;margin-bottom:8px}
.quote-view .upload-zone-label{font-size:13px;font-weight:600;color:var(--text);margin-bottom:3px}
.quote-view .upload-zone-sub{font-size:11px;color:var(--text-muted)}
.quote-view .upload-zone.has-file{display:none}
.quote-view .upload-confirmed{display:none;align-items:center;gap:10px;padding:10px 14px;border:1px solid var(--border);border-radius:var(--radius);background:var(--dark-3)}
.quote-view .upload-confirmed.visible{display:flex}
.quote-view .upload-confirmed-icon{font-size:16px;color:var(--success);flex-shrink:0}
.quote-view .upload-confirmed-name{flex:1;font-size:12px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.quote-view .upload-btns{display:flex;gap:6px;flex-shrink:0}
.quote-view .assignment-wrap{margin-top:4px}
.quote-view .unassigned-pool{padding:10px 0;margin-bottom:14px;transition:all 0.3s ease}
.quote-view .unassigned-pool.drag-target{border-color:var(--accent);border-style:solid;background:rgba(212,252,0,0.04)}
.quote-view .unassigned-pool.empty{min-height:0;padding:6px 14px;opacity:0.5}
.quote-view .unassigned-pool-label{display:none}
.quote-view .pool-kanban{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;align-items:start;width:100%}
.quote-view .pool-column{display:flex;flex-direction:column;gap:8px;min-height:40px}
.quote-view .pool-column-header{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:0.1em;padding:3px 8px;border-radius:4px;margin-bottom:4px;display:flex;align-items:center;gap:5px}
.quote-view .section-chip{background:var(--dark-3);border:1px solid var(--border-md);border-radius:8px;padding:22px 14px;cursor:grab;user-select:none;transition:transform 0.15s,box-shadow 0.15s,opacity 0.15s;display:flex;flex-direction:row;align-items:center;gap:10px;width:100%;position:relative}
.quote-view .section-chip:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,0.3)}
.quote-view .section-chip:active{transform:scale(0.98)}
.quote-view .section-chip.dragging{opacity:1;transform:scale(1.02);box-shadow:0 8px 24px rgba(0,0,0,0.4);cursor:grabbing;z-index:99}
@keyframes chipDrop{0%{transform:scale(1.06) translateY(-3px);opacity:0.6}70%{transform:scale(0.98)}100%{transform:scale(1) translateY(0);opacity:1}}
.quote-view .section-chip.just-dropped{animation:chipDrop 0.3s cubic-bezier(0.34,1.56,0.64,1)}
.quote-view .section-chip .chip-type-pill{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:0.06em;padding:3px 9px;border-radius:20px;flex-shrink:0;white-space:nowrap}
.quote-view .section-chip .chip-name{font-size:14px;font-weight:400;color:var(--text);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:uppercase}
.quote-view .section-chip .chip-count{font-size:10px;font-weight:500;font-family:var(--font-mono);color:var(--text-dim);flex-shrink:0;white-space:nowrap}
body.light .quote-view .section-chip{background:#f0f0ee;border-color:rgba(0,0,0,0.1)}
body.light .quote-view .section-chip .chip-name{color:#1a1a18}
.quote-view .chip-group-label{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;color:var(--text-dim);padding:4px 0 2px;border-bottom:1px solid var(--border);margin-bottom:2px}
.quote-view .stage-lane-body{display:none}
.quote-view .sections-pool{display:none}
@keyframes chipDrop{0%{transform:scale(1.06) translateY(-3px);opacity:0.6}70%{transform:scale(0.98)}100%{transform:scale(1) translateY(0);opacity:1}}
.quote-view .stage-lanes-wrap{margin-top:4px}
.quote-view .stage-lanes{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin-bottom:8px;align-items:stretch}
.quote-view .stage-lane{background:var(--dark-2);border:1px solid var(--border-md);border-radius:0;display:flex;flex-direction:column;min-height:300px;transition:all 0.2s ease;overflow:visible;position:relative}
body.light .quote-view .stage-lane{background:#fff;border-color:rgba(0,0,0,0.15)}
.quote-view .stage-lane-label{padding:11px 13px;display:flex;flex-direction:column;gap:2px;background:transparent;border-bottom:1px solid var(--border-md);border-left:2px solid var(--accent)}
body.light .quote-view .stage-lane-label{border-bottom-color:var(--accent)}
.quote-view .stage-num-label{font-size:8px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.12em;margin-bottom:2px}
.quote-view .stage-num-name{font-size:15px;font-weight:600;color:var(--text);letter-spacing:-0.01em}
.quote-view .stage-lane-name-input{font-size:15px;font-weight:600;color:var(--text);font-family:var(--font);background:transparent;border:none;padding:0;outline:none;flex:1;text-align:left}
.quote-view .stage-lane-name-input::placeholder{color:var(--text-dim);font-weight:400}
.quote-view .stage-lane{background:var(--dark-2);border:1px solid var(--border-md);border-radius:0;display:flex;flex-direction:column;min-height:300px;transition:all 0.2s ease;overflow:visible;position:relative}
/* Drop area */
.stage-lane-drop{flex:1;padding:10px 12px;display:flex;flex-direction:column;gap:8px;min-height:120px}
.quote-view .stage-lane-empty{font-size:11px;color:var(--text-dim);pointer-events:none;text-align:center;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);white-space:nowrap}
.quote-view .add-stage-btn{display:flex;align-items:center;justify-content:center;gap:6px;padding:10px;border:1px dashed var(--border-md);border-radius:var(--radius-lg);color:var(--text-dim);font-size:11px;font-weight:500;cursor:pointer;background:none;font-family:var(--font);width:100%;transition:all 0.15s;margin-top:4px;grid-column:1/-1}
.quote-view .add-stage-btn:hover{border-color:var(--accent);color:var(--accent)}
body.light .quote-view .add-stage-btn:hover{border-color:var(--text);color:var(--text)}
.quote-view .stage-pills{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.quote-view .stage-pill{padding:6px 14px;border:1px solid var(--border-md);border-radius:20px;font-size:12px;font-weight:500;cursor:pointer;background:var(--dark-3);color:var(--text-muted);font-family:var(--font);transition:all 0.15s}
.quote-view .stage-pill:hover{color:var(--text)}
.quote-view .stage-pill.active{background:var(--accent);color:#000;border-color:var(--accent);font-weight:700}
.quote-view .email-back-bar{margin-bottom:14px}
body.light .quote-view .stage-pill.active{background:var(--text);color:#fff;border-color:var(--text)}
.quote-view .stage-panel{display:none}
.quote-view .stage-panel.active{display:block}
.quote-view .tbl{width:100%;border-collapse:collapse;font-size:11px}
.quote-view .tbl th{text-align:left;font-size:9px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.07em;padding:3px 7px;border-bottom:1px solid var(--border-md);background:var(--dark-3);white-space:nowrap}
.quote-view .tbl td{padding:3px 7px;border-bottom:1px solid var(--border);vertical-align:middle;color:var(--text)}
.quote-view .tbl tbody tr:last-child td{border-bottom:none}
.quote-view .tbl .num{text-align:right;font-family:var(--font-mono)}
.quote-view input[type=number]::-webkit-inner-spin-button, .quote-view input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.quote-view input[type=number]{-moz-appearance:textfield}
body.light .quote-view .tbl input:focus{border-color:var(--text)}
body.light .quote-view .labour-total-label{font-size:11px;font-weight:600;color:var(--text);font-family:'Inter',-apple-system,sans-serif}
.quote-view .labour-total-value{font-family:var(--font-mono);font-size:11px;color:var(--text);font-weight:700}
.quote-view .btn-add-item{width:100%;justify-content:center;font-size:11px;font-weight:600;background:transparent;border:1px solid #999;border-radius:var(--radius);padding:7px;color:#fff;margin-top:4px;transition:all 0.15s}
.quote-view .btn-add-item:hover{color:var(--accent);border-color:var(--accent);background:rgba(212,252,0,0.06)}
.quote-view .add-item-form{background:var(--dark-3);border:1px solid var(--border-md);border-radius:var(--radius);padding:10px 12px;margin-top:8px;display:none}
.quote-view .add-item-form.visible{display:block}
.quote-view .add-item-row{display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto;gap:8px;align-items:end}
.quote-view .add-item-row input{font-size:11px;padding:5px 7px;border:1px solid var(--border-md);border-radius:var(--radius);background:var(--dark-2);color:var(--text);font-family:'Inter',-apple-system,sans-serif;width:100%}
.quote-view .add-item-row input:focus{outline:none;border-color:var(--accent)}
body.light .quote-view .add-item-row input:focus{border-color:var(--text)}
.quote-view .add-item-row input::placeholder{color:var(--text-dim)}
.quote-view .add-item-label{font-size:9px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.06em;margin-bottom:3px}
.quote-view .pricing-group-title{font-size:11px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.08em;margin:20px 0 4px;padding:0 4px 8px;border-bottom:none}
.quote-view .pricing-group-title:first-child{margin-top:0}
.quote-view .pricing-row-del{width:28px;opacity:0;transition:opacity 0.15s;position:absolute;right:-32px;top:50%;transform:translateY(-50%)}
.quote-view .tbl tr:hover .pricing-row-del{opacity:1}
.quote-view .tbl tr{position:relative}
.quote-view .pricing-group-wrap{position:relative;margin-bottom:8px}
.quote-view .pricing-group-del{opacity:0;transition:opacity 0.15s;font-size:10px;padding:2px 6px;margin-left:8px}
.quote-view .pricing-group-title-row:hover .pricing-group-del{opacity:0.6}
.quote-view .pricing-group-title-row:hover .pricing-group-del:hover{opacity:1}
.quote-view .pricing-group-title-row{display:flex;align-items:center}
.quote-view .pricing-section-drag{cursor:grab;color:var(--text-dim);font-size:12px;margin-right:6px;user-select:none}
.quote-view .pricing-section-drag:hover{color:var(--text-muted)}
.quote-view .pricing-section-dragging{opacity:0.4}
.quote-view .qty-override{color:var(--accent)!important;font-weight:600}
body.light .quote-view .qty-override{color:var(--text)!important}
.quote-view .group-dropdown{position:relative;display:inline-block;width:100%}
.quote-view .group-dropdown-menu{display:none;position:absolute;bottom:calc(100% + 4px);left:0;right:0;background:var(--dark-2);border:1px solid var(--border-md);border-radius:var(--radius);box-shadow:0 4px 16px rgba(0,0,0,0.4);z-index:50;overflow:hidden}
.quote-view .group-dropdown-menu.open{display:block}
.quote-view .group-dropdown-item{padding:8px 12px;font-size:12px;color:var(--text-muted);cursor:pointer;transition:all 0.1s}
.quote-view .group-dropdown-item:hover{background:var(--dark-3);color:var(--text)}
.quote-view .template-subnav{display:flex;gap:2px;margin-bottom:20px;border-bottom:1px solid var(--border);padding-bottom:0}
.quote-view .template-nav-btn{padding:9px 16px;font-size:12px;font-weight:500;cursor:pointer;border:none;background:none;color:var(--text-muted);font-family:var(--font);border-bottom:2px solid transparent;margin-bottom:-1px;transition:all 0.15s}
.quote-view .template-nav-btn:hover{color:var(--text)}
.quote-view .template-nav-btn.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
body.light .quote-view .template-nav-btn.active{color:var(--text);border-bottom-color:var(--text)}
.quote-view .template-section{display:none}
.quote-view .template-section.active{display:block}
.quote-view .summary-page-body{flex:1;padding:18px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}
.quote-view .summary-page-body{padding:11px 12px;display:flex;flex-direction:column;gap:11px;flex:1;background:var(--dark-2);font-family:'Inter',-apple-system,sans-serif}
.quote-view .summary-title-block{padding:18px 14px 12px;flex-shrink:0}
.quote-view .summary-title-eyebrow{font-size:8px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.14em;margin-bottom:4px}
.quote-view .summary-title-main{font-size:16px;font-weight:800;color:var(--text);letter-spacing:-0.02em}
.quote-view .summary-section-label{font-size:8px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.1em;margin-bottom:4px}
.quote-view .summary-stage-row{padding:12px 0;border-bottom:1px solid #2a2a2a}
.quote-view .summary-stage-row:last-of-type{border-bottom:none}
.quote-view .summary-stage-title{border-left:2px solid var(--accent);padding-left:9px;margin-bottom:10px}
.quote-view .summary-stage-eyebrow{font-size:7px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.12em;margin-bottom:2px}
.quote-view .summary-stage-name{font-size:12px;font-weight:600;color:var(--text);letter-spacing:-0.01em}
.quote-view .summary-stage-detail{display:grid;grid-template-columns:minmax(0,190px) 1fr 190px;column-gap:36px;align-items:start}
.quote-view .summary-notes-band{padding:13px 10px 0 0}
.quote-view .summary-price-col{min-width:0;padding-top:13px}
.quote-view .summary-price-stack{display:grid;grid-template-columns:auto 1fr;gap:2px 10px;align-items:baseline}
.quote-view .sps-lbl{font-size:7px;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.07em;font-weight:700;text-align:left;white-space:nowrap;font-family:var(--font)}
.quote-view .sps-val{font-size:9px;color:var(--text);font-weight:600;text-align:right;font-family:var(--font)}
.quote-view .sps-tot-lbl{padding-top:8px;margin-top:2px}
.quote-view .sps-tot-val{padding-top:8px;margin-top:2px;font-size:14px;font-weight:600;color:var(--accent);letter-spacing:-0.02em;font-family:var(--font)}
.quote-view .summary-stage-col{min-width:0}
.quote-view .summary-stage-subhead{font-size:7px;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.08em;margin-bottom:4px;font-weight:700}
.quote-view .summary-inc-list{margin:0;padding:0}
.quote-view .summary-inc-item{font-size:8px;font-weight:700;color:#8a8880;text-transform:uppercase;letter-spacing:0.07em;line-height:1.7;padding-left:11px}
.quote-view .summary-inc-item .sec-type{color:var(--text-muted)}
.quote-view .summary-inc-item .sec-nm{color:var(--text-dim)}
.quote-view .summary-inc-item .sec-dot{margin:0 5px}
.quote-view .summary-stage-notestext{font-size:9px;color:var(--text);line-height:1.5;word-wrap:break-word}
.quote-view .summary-stage-empty{font-size:9px;color:var(--text-dim);font-style:italic}
.quote-view .summary-stage-pricerow{display:flex;align-items:baseline;justify-content:space-between;gap:16px;border-top:1px solid #2a2a2a;padding-top:8px;padding-left:11px}
.quote-view .summary-stage-pricebreak{display:flex;gap:24px}
.quote-view .summary-price-item{font-size:9px;color:var(--text);font-weight:500}
.quote-view .summary-price-lbl{color:var(--text-muted);font-weight:400}
.quote-view .summary-stage-total{font-size:15px;font-weight:800;color:var(--accent);letter-spacing:-0.02em;white-space:nowrap}
body.light .quote-view .summary-stage-row{border-bottom-color:rgba(0,0,0,0.06)}
body.light .quote-view .summary-stage-pricerow{border-top-color:rgba(0,0,0,0.06)}
.quote-view .summary-mini-card{background:var(--dark-2);border:1px solid var(--border-md);overflow:hidden}
.quote-view .summary-mini-header{padding:5px 8px;background:var(--dark-2);border-bottom:1px solid var(--accent);display:flex;align-items:center;gap:6px}
.quote-view .summary-mini-badge{font-size:7px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:0.08em;background:var(--dark-2);padding:2px 6px;border-radius:20px}
.quote-view .summary-mini-name{font-size:9px;font-weight:600;color:var(--text)}
.quote-view .summary-mini-body{padding:10px 12px;display:grid;grid-template-columns:50% 25% 25%;gap:6px 10px;align-items:stretch;box-sizing:border-box}
.quote-view .summary-mini-costs{font-size:8px;display:flex;flex-direction:column;gap:1px;padding-right:9px;border-right:1px solid var(--border);min-width:0}
.quote-view .summary-mini-line{display:flex;justify-content:space-between;align-items:baseline;padding:2px 0;color:var(--text-muted)}
.quote-view .summary-mini-line span:last-child{color:var(--text);font-weight:600}
.quote-view .summary-mini-notes-card{font-size:7px;border:1px solid var(--border-md);border-radius:var(--radius);padding:5px 6px;background:transparent;min-width:0;overflow-wrap:break-word;min-height:62px;box-sizing:border-box}
body.light .quote-view .summary-mini-notes-card{border-color:rgba(0,0,0,0.12)}
.quote-view .summary-mini-total{display:flex;justify-content:space-between;align-items:baseline;padding:5px 0 2px;margin-top:5px;border-top:1px solid var(--border-md)}
.quote-view .summary-mini-total span:first-child{font-size:7px;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.08em;font-weight:700}
.quote-view .summary-mini-total span:last-child{font-size:11px;font-weight:800;color:var(--accent);font-family:'Inter',-apple-system,sans-serif;letter-spacing:-0.02em}
.quote-view .summary-mini-notes{font-size:7px;display:flex;flex-direction:column;gap:6px}
.quote-view .summary-mini-notes-block{}
.quote-view .summary-mini-notes-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:0.08em;font-weight:700;margin-bottom:2px;font-size:6px}
.quote-view .summary-mini-notes-text{color:var(--text);line-height:1.5}
.quote-view .summary-mini-notes-empty{color:var(--text-dim);font-style:italic}
.quote-view .summary-notes-section{padding:8px 0 3px;display:flex;flex-direction:column;gap:4px}
.quote-view .summary-notes-label{font-size:7px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.08em}
.quote-view .summary-notes-textarea{width:100%;font-size:8px;padding:5px 7px;border:1px solid var(--border-md);border-radius:var(--radius);background:var(--dark-3);color:var(--text);font-family:'Inter',-apple-system,sans-serif;resize:none;min-height:47px;line-height:1.5;overflow:hidden}
.quote-view .summary-notes-textarea:focus{outline:none;border-color:var(--accent)}
.quote-view .summary-notes-textarea::placeholder{color:var(--text-dim)}
.quote-view .stage-total-bar.summary-grand-bar{padding:11px 12px;display:flex;flex-direction:row;align-items:center;justify-content:flex-end;gap:18px}
.quote-view .summary-grand-bar .stage-total-breakdown{display:grid;grid-template-columns:auto auto;gap:2px 16px;align-items:baseline}
.quote-view .summary-grand-bar .stage-total-line{display:contents}
.quote-view .summary-grand-bar .stage-total-line .stl-label{color:var(--text-muted);font-weight:400;text-align:left;font-size:11px}
.quote-view .summary-grand-bar .stage-total-line .stl-value{color:var(--text);font-weight:600;text-align:right;font-size:11px;font-variant-numeric:tabular-nums}
.quote-view .summary-grand-bar .stage-total-right{border-left:1px solid var(--border-md);padding-left:18px;text-align:right}
body.light .quote-view .summary-page-body{background:#ffffff}
body.light .quote-view .summary-mini-card{background:#ffffff;border-color:rgba(0,0,0,0.1)}
body.light .quote-view .summary-mini-header{background:#eeeeed}
body.light .quote-view .summary-mini-badge{color:#1a1a18;background:#ffffff}
body.light .quote-view .summary-mini-costs{border-right-color:rgba(0,0,0,0.08)}
body.light .quote-view .summary-notes-textarea{background:#f5f5f3;border-color:rgba(0,0,0,0.12)}
body.light .quote-view .summary-notes-textarea:focus{border-color:var(--text)}
.quote-view .project-notes-textarea{width:100%;font-size:12px;padding:9px 11px;border:1px solid var(--border-md);border-radius:var(--radius);background:var(--dark-3);color:var(--text);font-family:'Inter',-apple-system,sans-serif;resize:vertical;min-height:100px;line-height:1.6}
.quote-view .project-notes-textarea:focus{outline:none;border-color:var(--accent)}
body.light .quote-view .project-notes-textarea:focus{border-color:var(--text)}
.quote-view .project-notes-textarea::placeholder{color:var(--text-dim)}
.quote-view .print-dropdown{
  display:none;
  position:absolute;
  top:calc(100% + 8px);
  right:0;
  background:var(--dark-2);
  border:1px solid var(--border-md);
  border-radius:var(--radius-lg);
  padding:12px;
  min-width:220px;
  box-shadow:0 8px 24px rgba(0,0,0,0.4);
  z-index:1000;
}
body.light .quote-view .print-dropdown{box-shadow:0 4px 16px rgba(0,0,0,0.12)}
.quote-view .print-dropdown.open{display:block}
.quote-view .print-dropdown-title{font-size:10px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.08em;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.quote-view .print-checkbox-row{display:flex;align-items:center;gap:8px;padding:5px 0;cursor:pointer}
.quote-view .print-checkbox-row:hover{color:var(--accent)}
body.light .quote-view .print-checkbox-row:hover{color:var(--text)}
.quote-view .print-checkbox-row input[type=checkbox]{accent-color:var(--accent);width:14px;height:14px;cursor:pointer;flex-shrink:0}
.quote-view .print-checkbox-row label{font-size:12px;color:var(--text);cursor:pointer;flex:1}
.quote-view .print-dropdown-footer{margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.quote-view .theme-fab{position:fixed;bottom:24px;right:24px;display:flex;align-items:center;gap:6px;padding:10px 16px;border:1px solid rgba(255,255,255,0.15);border-radius:24px;background:var(--dark-3);color:var(--text-muted);cursor:pointer;font-size:12px;font-family:var(--font);box-shadow:0 4px 16px rgba(0,0,0,0.4);transition:all 0.2s;z-index:200}
.quote-view .theme-fab:hover{color:var(--text);border-color:var(--accent);box-shadow:0 4px 20px rgba(0,0,0,0.5)}
body.light .quote-view .theme-fab{border-color:rgba(0,0,0,0.15);box-shadow:0 4px 16px rgba(0,0,0,0.12)}
body.light .quote-view .theme-fab:hover{border-color:var(--text)}
.quote-view .page-card{
  width:794px;height:1123px;zoom:1.285;
  background:var(--dark-2);border:1px solid var(--border);border-radius:var(--radius-lg);
  overflow:hidden;margin:0 auto;box-shadow:0 8px 32px rgba(0,0,0,0.4);
  display:flex;flex-direction:column;
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
}
.quote-view .page-card-header{background:var(--dark-3);padding:8px 14px;display:grid;grid-template-columns:1fr 2fr 1fr;align-items:center;border-bottom:2px solid var(--accent);flex-shrink:0;gap:9px}
.quote-view .page-card-brand{display:flex;align-items:center;gap:5px}
.quote-view .page-card-brand-name{font-size:13px;font-weight:800;color:var(--text);letter-spacing:-0.04em;font-family:'Inter',-apple-system,sans-serif}
.quote-view .page-card-brand-name span{color:var(--accent)}
.quote-view .page-card-job-centre{text-align:center}
.quote-view .page-card-job-name{font-size:12px;font-weight:600;color:var(--text);letter-spacing:normal;text-transform:capitalize;font-family:'Inter',-apple-system,sans-serif}
.quote-view .page-card-job-right{text-align:right}
.quote-view .page-card-job-client{font-size:9px;font-weight:400;color:var(--text);margin-top:0}
.quote-view .page-card-stage-banner{background:var(--dark-2);border-bottom:1px solid var(--border-md);padding:8px 14px;flex-shrink:0}
.quote-view .page-card-stage-titlewrap{border-left:2px solid var(--accent);padding-left:11px}
.quote-view .page-card-stage-eyebrow{font-size:8px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.12em;margin-bottom:2px}
.quote-view .page-card-stage-num{font-size:9px;font-weight:600;color:var(--accent);text-transform:uppercase;letter-spacing:0.08em;background:var(--dark-4);padding:2px 8px;border-radius:20px;white-space:nowrap}
.quote-view .page-card-stage-name{font-size:12px;font-weight:700;color:var(--text);letter-spacing:-0.01em;font-family:'Inter',-apple-system,sans-serif}
.quote-view .page-card-body{display:grid;grid-template-columns:1fr 1fr;flex:1;overflow:hidden;min-height:0}
.quote-view .col-right{display:flex;flex-direction:column;overflow:hidden;font-family:'Inter',-apple-system,sans-serif}
.quote-view .col-breakdown{border-right:1px solid var(--border);padding:9px;overflow-y:auto;font-family:'Inter',-apple-system,sans-serif}
.quote-view .col-breakdown-title{font-size:8px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.1em;padding-bottom:6px;margin-bottom:6px;border-bottom:1px solid var(--border-md)}
.quote-view .col-header-bar{display:grid;font-size:7px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.07em;padding:2px 5px;background:var(--dark-4);border-bottom:1px solid var(--border);margin-bottom:5px}
.quote-view .col-header-bar.takeoff-cols{grid-template-columns:60% 20% 20%}
.quote-view .col-header-bar.mat-cols{grid-template-columns:38% 14% 10% 14% 16% 8%}
.quote-view .col-header-bar.mat-cols.editing{grid-template-columns:32% 14% 10% 14% 16% 8%}
.quote-view .col-header-bar > span:not(:first-child){text-align:right}
body.light .quote-view .col-header-bar{background:#eeeeed;color:#666}
.quote-view .page-card .tbl tbody tr td:first-child{color:var(--text)}
body.light .quote-view .page-card .tbl tbody tr td:first-child{color:var(--text)}
.quote-view .page-card .tbl tbody tr:not(.tbl-part-row):not(.lab-group-b3):not(.mat-manual-row) td{font-size:8px}
.quote-view .section-card{background:var(--dark-2);border:1px solid var(--border-md);border-radius:0;margin-bottom:9px;overflow:hidden}
/* [018700] Section headers were 8px — smaller than the group rows beneath them, so they read
   as a faint divider instead of the heading that tells you what you're looking at. Bumped to
   11px, the TYPE (PIERS/FOOTINGS) now carries the --info blue at weight 800, and the bottom
   rule moved from lime to blue so the section boundary reads as wayfinding, not an accent. */
.quote-view .section-card-header{padding:7px 8px;display:flex;align-items:center;justify-content:space-between;background:var(--dark-2);border-bottom:1px solid var(--info);position:relative}
.quote-view .section-header-title{font-size:10px;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:0.04em;text-align:left;flex:1}
.quote-view .sec-type{color:var(--info);font-weight:800}
.quote-view .sec-dot{color:var(--text-dim);margin:0 6px;font-size:0.7em;vertical-align:middle}
.quote-view .sec-nm{color:var(--text-muted)}
.quote-view .section-edit-toggle{background:transparent;border:none;color:var(--text-dim);cursor:pointer;padding:0 4px;font-size:8px;font-family:inherit;opacity:0.6;transition:opacity 0.15s;line-height:1;text-transform:uppercase;letter-spacing:0.05em;font-weight:600}
.quote-view .section-edit-toggle:hover{opacity:1;color:var(--accent)}
.quote-view .section-edit-toggle.active{opacity:1;color:var(--accent);background:rgba(212,252,0,0.1);border-radius:3px}
.quote-view .section-header-clickable{cursor:pointer;transition:background 0.15s}
.quote-view .section-header-clickable:hover{background:var(--dark-3)}
.quote-view .section-edit-hint{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:0.05em;color:#999;opacity:0;transition:opacity 0.15s;white-space:nowrap}
.quote-view .section-header-clickable:hover .section-edit-hint{opacity:1}
.quote-view .section-edit-hint.active{opacity:1;color:var(--accent)}
.quote-view .section-edit-ctrls{display:flex;justify-content:flex-end;gap:5px;padding:4px 8px;background:var(--dark-3);border-bottom:1px solid var(--border-md)}
.quote-view .section-edit-ctrls .group-add-row-btn, .quote-view .section-edit-ctrls .group-del-btn{padding:2px 8px!important;font-size:9px!important}
.quote-view .section-modified-icon{display:inline-block;color:var(--danger);font-size:10px;margin-left:4px;cursor:help;line-height:1}
body.light .quote-view .section-modified-icon{color:#c62828}
.quote-view .tbl-item-row.deleted td{opacity:0.4;text-decoration:line-through}
.quote-view .tbl-part-row.deleted td{opacity:0.4;text-decoration:line-through}
.quote-view .mat-auto-row.deleted td{opacity:0.4;text-decoration:line-through}
.quote-view .tbl-item-row.item-added td{background:rgba(212,252,0,0.05)!important}
.quote-view .tbl-part-row.group-added td{background:rgba(212,252,0,0.05)!important}
.quote-view .value-modified{position:relative;display:inline-flex;align-items:center;gap:3px}
.quote-view .value-modified-icon{color:var(--danger);cursor:pointer;font-size:10px;font-weight:700;line-height:1;display:inline-block}
.quote-view .value-modified-icon:hover{color:var(--danger)}
body.light .quote-view .value-modified-icon{color:#c62828}
.quote-view .edit-mode-cell{cursor:text}
.quote-view .page-card .tbl .edit-mode-cell input{width:100%;background:transparent;border:none;border-radius:2px;padding:0;color:var(--text);font-family:inherit;font-size:inherit;line-height:inherit;height:auto;margin:0;box-sizing:border-box;display:inline-block;vertical-align:baseline}
.quote-view .page-card .tbl .edit-mode-cell input:hover{background:rgba(255,255,255,0.06);border-radius:2px}
body.light .quote-view .page-card .tbl .edit-mode-cell input:hover{background:rgba(0,0,0,0.04)}
.quote-view .edit-mode-cell{position:relative;padding-right:3px}
.quote-view .num.edit-mode-cell{display:flex;align-items:center;gap:3px;justify-content:flex-end}
.quote-view .page-card .tbl .num.edit-mode-cell input{flex:1;min-width:0;text-align:right}
.quote-view .num.edit-mode-cell .value-modified-icon{flex-shrink:0}
.quote-view .mat-auto-row .value-modified{gap:5px}
.quote-view .mat-desc-input{background:var(--dark);border:1px solid var(--border-md);border-radius:5px;color:var(--text);font-family:var(--font);font-size:12px;padding:4px 7px;width:100%;max-width:100%;box-sizing:border-box}
.quote-view .mat-desc-input:focus{outline:none;border-color:var(--accent)}
.quote-view .page-card .tbl .edit-mode-cell input:focus{outline:1px solid var(--accent);outline-offset:-1px;background:rgba(212,252,0,0.06);border-radius:2px}
body.light .quote-view .page-card .tbl .edit-mode-cell input:focus{background:rgba(0,0,0,0.04);outline-color:var(--text)}
.quote-view .row-del-btn, .quote-view .group-del-btn, .quote-view .group-add-row-btn, .quote-view .section-add-group-btn, .quote-view .section-reset-btn{background:transparent;border:1px solid #999;color:#fff;cursor:pointer;padding:4px 10px;font-size:10px;font-weight:600;border-radius:5px;font-family:inherit;line-height:1;transition:all 0.15s}
.quote-view .row-del-btn:hover, .quote-view .group-del-btn:hover{color:var(--danger);border-color:var(--danger)}
.quote-view .group-add-row-btn:hover, .quote-view .section-add-group-btn:hover{color:var(--accent);border-color:var(--accent)}
.quote-view .section-reset-btn:hover{color:var(--warn);border-color:var(--warn)}
.quote-view .section-edit-footer{padding:3px 6px;display:flex;gap:3px;background:var(--dark-3);border-top:1px solid var(--border-md)}
.quote-view .section-add-btn-wrap{opacity:0.75;transition:opacity 0.15s;margin-top:5px}
.quote-view .unmatched-warning{font-size:7px;color:var(--warn);background:rgba(245,166,35,0.1);border:1px solid rgba(245,166,35,0.3);border-radius:20px;padding:1px 8px;display:inline-flex;align-items:center;gap:3px;font-weight:600;margin-left:8px;letter-spacing:0.02em;white-space:nowrap;text-transform:none;vertical-align:middle}
body.light .quote-view .unmatched-warning{color:#b85c00;background:rgba(184,92,0,0.08);border-color:rgba(184,92,0,0.25)}
.quote-view .pricing-ac-wrap{position:relative;display:inline-block;width:100%}
.quote-view .pricing-ac-menu{position:absolute;top:100%;left:0;right:0;background:var(--dark-2);border:1px solid var(--border-md);border-radius:var(--radius);box-shadow:0 4px 16px rgba(0,0,0,0.4);z-index:9999;max-height:140px;overflow-y:auto;font-size:9px;display:none;text-align:left}
.quote-view .pricing-ac-wrap{z-index:auto}
.quote-view .section-card:has(.pricing-ac-menu.open){z-index:9999;position:relative}
.quote-view .pricing-ac-menu.open{display:block}
.quote-view .pricing-ac-item{padding:3px 6px;cursor:pointer;color:var(--text);display:flex;justify-content:space-between;gap:6px;border-bottom:1px solid var(--border)}
.quote-view .pricing-ac-item:last-child{border-bottom:none}
.quote-view .pricing-ac-item:hover, .quote-view .pricing-ac-item.active{background:var(--dark-3);color:var(--accent)}
.quote-view .pricing-ac-item-desc{flex:1;text-align:left}
.quote-view .pricing-ac-item-unit{color:var(--text-muted);font-family:var(--font-mono);font-size:8px}
body.light .quote-view .pricing-ac-menu{background:#fff;box-shadow:0 4px 16px rgba(0,0,0,0.12)}
body.light .quote-view .pricing-ac-item:hover, body.light .quote-view .pricing-ac-item.active{background:#f5f5f3;color:var(--text)}
.quote-view .breakdown-wrap:hover .section-add-btn-wrap{opacity:1}
.quote-view .group-controls{display:inline-flex;gap:3px;margin-left:6px}
.quote-view .group-name-input{background:transparent;border:none;border-bottom:1px dashed var(--border-md);color:inherit;font:inherit;padding:0;width:auto}
.quote-view .group-name-input:focus{outline:none;border-bottom-color:var(--accent)}
.quote-view .section-header-pill{display:inline-flex;align-items:center;font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;padding:2px 8px;border-radius:20px}
.quote-view .col-quantities{padding:9px 9px 6px}
.quote-view .col-section-title{font-size:8px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.1em;padding-bottom:6px;margin-bottom:6px;border-bottom:1px solid var(--border-md);display:flex;align-items:center;justify-content:space-between}
.quote-view .subtotal-row{display:flex;justify-content:space-between;align-items:center;padding:5px 5px 0;margin-top:5px;border-top:1px solid var(--border)}
.quote-view .subtotal-row-padded{display:flex;justify-content:space-between;align-items:center;padding:6px 5px;margin-top:0;border-top:1px solid var(--border)}
.quote-view .tbl-manual-row.manual-first td{border-top:1px solid var(--border-md)}
.quote-view .subtotal-label{font-size:9px;font-weight:600;color:var(--text-muted);font-family:'Inter',-apple-system,sans-serif}
.quote-view .subtotal-value{font-size:9px;font-weight:700;font-family:'Inter',-apple-system,sans-serif;color:var(--text)}
.quote-view .pill-unpriced{display:inline-block;font-size:7px;padding:1px 4px;border-radius:8px;background:rgba(245,166,35,0.15);color:var(--warn);border:1px solid rgba(245,166,35,0.3);font-weight:700;margin-left:3px;vertical-align:middle}
.quote-view .mat-schedule-wrap{position:relative}
.quote-view .mat-add-btn-wrap{opacity:0.75;transition:opacity 0.15s}
.quote-view .mat-schedule-wrap:hover .mat-add-btn-wrap{opacity:1}
.quote-view .mat-total-separator{height:6px}
.quote-view .markup-section{padding:0 5px;margin-top:2px}
.quote-view .markup-row{display:flex;align-items:center;justify-content:space-between;padding:3px 0;font-size:9px;border-top:1px solid var(--border);font-family:'Inter',-apple-system,sans-serif}
.quote-view .markup-label{color:var(--text-muted);font-size:9px;font-family:'Inter',-apple-system,sans-serif}
.quote-view .markup-value{font-family:'Inter',-apple-system,sans-serif;font-size:9px;color:var(--text);font-weight:600}
.quote-view .markup-input-wrap{display:flex;align-items:center;gap:3px}
.quote-view .markup-pct-input{width:34px;font-size:9px;padding:2px 4px;border:1px solid var(--border-md);border-radius:4px;background:var(--dark-3);color:var(--text);font-family:'Inter',-apple-system,sans-serif;text-align:right}
.quote-view .markup-pct-input:focus{outline:none;border-color:var(--accent)}
.quote-view .markup-total-row{display:flex;align-items:center;justify-content:space-between;padding:5px 6px;border-top:2px solid var(--accent)!important;margin-top:2px;background:var(--dark-4)!important}
.quote-view .markup-total-label{font-size:9px;font-weight:600;color:var(--text);font-family:'Inter',-apple-system,sans-serif}
.quote-view .markup-total-value{font-family:'Inter',-apple-system,sans-serif;font-size:12px;color:var(--text);font-weight:700}
.quote-view .col-labour{padding:0 9px 9px;flex:1}
.quote-view .col-labour .tbl thead th{padding-bottom:3px}
.quote-view .col-labour .tbl tbody tr:first-child td{padding-top:8px}
.quote-view .col-labour .tbl tbody td:first-child{padding-left:18px}
.quote-view .lab-section-wrap{position:relative}
.quote-view .lab-add-btn-wrap{opacity:0.75;transition:opacity 0.15s}
.quote-view .lab-section-wrap:hover .lab-add-btn-wrap{opacity:1}
.quote-view .lab-display-row{cursor:pointer}
.quote-view .lab-display-row td{padding:2px 5px!important;vertical-align:middle}
.quote-view .lab-display-row td:first-child{padding-left:16px!important}
.quote-view .lab-display-row .lab-day-desc{padding-left:28px!important}
.quote-view .lab-day-dot{display:inline-block;margin-right:6px;color:var(--text);font-weight:700;line-height:1}
body.light .quote-view .lab-day-dot{color:#1a1a18}
.quote-view .lab-edit-row td{padding:2px 5px!important;background:var(--dark-3)!important;vertical-align:middle}
.quote-view .lab-display-row:hover td{background:rgba(255,255,255,0.03)!important}
.quote-view .lab-display-val{color:var(--text-muted)}
.quote-view .lab-display-val.has-value{color:var(--text);font-weight:500}
.quote-view .lab-display-val.zero{color:var(--text-dim)}
/* The labour table is a .tbl, so `.quote-view .tbl td{color:var(--text)}` (0-2-1) was
   colouring these cells bright even when .zero (0-3-0) said otherwise — the recurring
   "rates won't grey" bug. These two rules are 0-3-1, so they beat .tbl td cleanly, no !important. */
.quote-view .tbl td.lab-display-val.zero{color:var(--text-dim)}
.quote-view .tbl td.lab-display-val.has-value{color:var(--text)}
.quote-view .lab-row-has-value td{background:rgba(212,252,0,0.05)}

.quote-view .lab-day-ctrl{display:inline-flex;gap:4px;margin-left:10px;vertical-align:middle}
.quote-view .lab-day-btn{display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;border:1px solid #999;color:#bbb;font-size:11px;line-height:1;cursor:pointer;transition:opacity 0.15s,color 0.15s,border-color 0.15s;font-weight:600;box-sizing:border-box;padding:0;font-family:-apple-system,Arial,sans-serif;opacity:0}
.quote-view .lab-display-row:hover .lab-day-btn{opacity:1;color:#fff}
.quote-view .lab-day-plus:hover{border-color:var(--accent);color:var(--accent)}
.quote-view .lab-day-minus:hover{border-color:var(--danger);color:#ff8a8a}
.quote-view .lab-day-btn.off{cursor:default;border-color:#555;color:#666}
.quote-view .lab-display-row:hover .lab-day-btn.off{opacity:0.4;color:#666}
.quote-view .lab-day-minus.off:hover{border-color:#555;color:#666}
.quote-view .lab-group-header td{font-size:7px!important;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.08em;padding:3px 5px!important;background:var(--dark-4)!important;border-bottom:1px solid var(--border-md)!important}
.quote-view .lab-group-header:first-child td{border-top:none!important}
.quote-view .lab-group-b3 td{font-size:7px!important;font-weight:700;color:#fff!important;background:transparent!important;padding:5px 6px 2px!important;border-bottom:none!important;text-transform:uppercase;letter-spacing:0.07em;vertical-align:middle}
.quote-view .lab-group-title-editable{cursor:pointer;border-radius:2px;padding:1px 3px;transition:background 0.12s}
.quote-view .lab-group-title-editable:hover{background:rgba(212,252,0,0.1);color:var(--accent)!important}
.quote-view .lab-group-title-input{font-size:7px;font-weight:700;text-transform:uppercase;letter-spacing:0.07em;background:var(--dark-3);border:1px solid var(--accent);color:var(--text);border-radius:2px;padding:1px 3px;font-family:inherit;width:60%}
body.light .quote-view .lab-group-title-input{background:#fff;color:#1a1a18}
.quote-view .qty-stepper{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:20px}
.quote-view .lab-qty-btn{position:absolute;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:14px;height:14px;border-radius:50%;border:1px solid #999;color:#bbb;font-size:11px;line-height:1;cursor:pointer;transition:opacity 0.15s,color 0.15s,border-color 0.15s;font-weight:600;box-sizing:border-box;padding:0;font-family:-apple-system,Arial,sans-serif;opacity:0;z-index:2}
.quote-view .lab-qty-minus{right:100%;margin-right:3px}
.quote-view .lab-qty-plus{left:100%;margin-left:3px}
.quote-view .lab-display-row:hover .lab-qty-btn{opacity:1;color:#fff}
.quote-view .lab-qty-plus:hover{border-color:var(--accent);color:var(--accent)}
.quote-view .lab-qty-minus:hover{border-color:var(--danger);color:#ff8a8a}
.quote-view .lab-qty-btn.off{cursor:default;border-color:#555;color:#666}
.quote-view .lab-display-row:hover .lab-qty-btn.off{opacity:0.4;color:#666}
.quote-view .lab-qty-minus.off:hover{border-color:#555;color:#666}
.quote-view .lab-qty-val{min-width:16px;text-align:center;font-family:var(--font-mono);font-size:11px;color:var(--text)}
.quote-view .lab-qty-val.zero{color:var(--text-dim)}
.quote-view .qty-stepper-btn{width:12px;height:12px;border-radius:3px;border:1px solid var(--border-md);background:var(--dark-3);color:var(--text-muted);cursor:pointer;font-size:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;line-height:1;padding:0;opacity:1}
.quote-view .qty-stepper-btn:hover{border-color:var(--accent);color:var(--accent)}
.quote-view .page-card .tbl .qty-stepper input{width:30px;text-align:center;padding:0;font-size:9px;background:transparent;border:none;outline:none;border-radius:2px;box-sizing:border-box;line-height:1;height:auto;margin:0;box-shadow:none}
.quote-view .page-card .tbl .qty-stepper input:hover{background:rgba(255,255,255,0.08)}
.quote-view .page-card .tbl .qty-stepper input:focus{background:rgba(212,252,0,0.1);outline:none}
body.light .quote-view .page-card .tbl .qty-stepper input:hover{background:rgba(0,0,0,0.05)}
body.light .quote-view .page-card .tbl .qty-stepper input:focus{background:rgba(0,0,0,0.05);outline:none}
.quote-view .lab-total-row{border-top:2px solid var(--accent)!important;margin-top:3px;display:flex;align-items:center;justify-content:space-between;padding:5px 6px;background:var(--dark-4)}
.quote-view .lab-total-row span.labour-total-label{font-size:9px;font-weight:600;color:var(--text);font-family:var(--font)}
.quote-view .lab-total-row span.labour-total-value{font-size:12px;font-weight:700;color:var(--text);font-family:var(--font)}
.quote-view .stage-notes-section{padding:9px;border-top:1px solid var(--border);flex-shrink:0}
.quote-view .stage-notes-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.quote-view .stage-notes-label{font-size:7px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.08em;margin-bottom:3px}
.quote-view .stage-notes-textarea{width:100%;font-size:9px;padding:5px 7px;border:1px solid var(--border-md);border-radius:var(--radius);background:var(--dark-3);color:var(--text);font-family:'Inter',-apple-system,sans-serif;resize:none;line-height:1.5;overflow:hidden}
.quote-view .stage-notes-textarea:focus{outline:none;border-color:var(--accent)}
.quote-view .stage-notes-textarea::placeholder{color:var(--text-dim)}
.quote-view .page-card-footer{border-top:none;padding:0;display:flex;flex-direction:column;background:transparent;flex-shrink:0}
.quote-view .summary-grand-inline{margin-top:10px}
.quote-view .stage-total-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:11px 12px;border-top:2px solid var(--accent);background:var(--dark-3);border-radius:0}
.quote-view .stage-total-breakdown{display:grid;grid-template-columns:auto 1fr;gap:2px 9px;align-items:baseline}
.quote-view .stage-total-line{font-size:11px;color:var(--text-muted);font-family:'Inter',-apple-system,sans-serif;display:contents}
.quote-view .stage-total-line span{color:var(--text);font-weight:600;text-align:right}
.quote-view .stage-total-right{text-align:right}
.quote-view .stage-total-right-label{font-size:8px;letter-spacing:0.1em;color:var(--text-muted);font-weight:700;margin-bottom:2px}
.quote-view .stage-total-value{font-size:19px;font-weight:800;color:var(--accent);font-family:'Inter',-apple-system,sans-serif;letter-spacing:-0.02em}
.quote-view .stage-footer-split{align-items:stretch!important}
.quote-view .stage-footer-notes{flex:1;display:flex;flex-direction:column;padding-right:14px;border-right:1px solid var(--border-md);min-width:0}
.quote-view .stage-footer-notes .stage-notes-label{margin-bottom:4px}
.quote-view .stage-footer-notes .stage-notes-textarea{min-height:52px}
.quote-view .stage-footer-price{flex:1;display:flex;flex-direction:row;align-items:center;justify-content:flex-end;gap:18px;padding-left:14px}
.quote-view .stage-footer-price .stage-total-breakdown{display:grid;grid-template-columns:auto auto;gap:2px 16px;align-items:baseline}
.quote-view .stage-footer-price .stage-total-line{display:contents}
.quote-view .stage-footer-price .stage-total-line .stl-label{color:var(--text-muted);font-weight:400;text-align:left;font-size:11px}
.quote-view .stage-footer-price .stage-total-line .stl-value{color:var(--text);font-weight:600;text-align:right;font-size:11px;font-variant-numeric:tabular-nums}
.quote-view .stage-footer-price .stage-total-right{border-left:1px solid var(--border-md);padding-left:18px;text-align:right}
.quote-view .page-card .tbl{width:100%;border-collapse:collapse;font-size:9px;font-family:'Inter',-apple-system,sans-serif}
.quote-view .page-card .tbl th{text-align:left;font-size:7px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.07em;padding:2px 5px;border-bottom:1px solid var(--border-md);background:var(--dark-4);white-space:nowrap;font-family:'Inter',-apple-system,sans-serif}
.quote-view .page-card .tbl th.num{text-align:right}
.quote-view .page-card .tbl td{padding:2px 5px;border-bottom:1px solid var(--border);vertical-align:middle;color:var(--text);font-family:'Inter',-apple-system,sans-serif}
.quote-view .page-card .tbl input{font-size:9px;padding:2px 5px;border:1px solid var(--border);border-radius:4px;font-family:'Inter',-apple-system,sans-serif;width:100%;background:var(--dark-3);color:var(--text)}
.quote-view .page-card .tbl input:focus{outline:none;border-color:var(--accent)}
.quote-view .tbl-section-row:first-child td{border-top:9px solid transparent!important}
.quote-view .tbl-part-row td{font-size:7px!important;font-weight:700;color:#fff!important;background:transparent!important;padding:5px 6px 2px!important;text-transform:uppercase;letter-spacing:0.07em;vertical-align:middle}
.quote-view .part-row-inner{display:flex;align-items:center;gap:8px;width:100%;min-width:0;max-width:100%;overflow:hidden}
/* [020600] The part title lives in a colspan td which, under the default auto table layout,
   grows to fit its content and defeats the flex ellipsis. table-layout:fixed makes the cell honour
   its column width so the title truncates. Scoped to .section-card (take-off) ONLY — labour and
   materials tables live under .page-card, so their column sizing is untouched. */
.quote-view .section-card .tbl{table-layout:fixed}
.quote-view .section-card .tbl-part-row > td{overflow:hidden}
.quote-view .part-title-txt{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.quote-view .tbl-item-row.row-clickable{cursor:pointer;transition:background 0.12s}
.quote-view .tbl-item-row.row-clickable:hover{background:rgba(255,255,255,0.04)}
body.light .quote-view .tbl-item-row.row-clickable:hover{background:rgba(0,0,0,0.03)}
.quote-view .tbl-item-row.row-editing{background:rgba(212,252,0,0.06);position:relative}
.quote-view .sec-title-input{background:transparent;border:none;border-bottom:1px dashed var(--accent);color:inherit;font:inherit;font-size:8px;font-weight:600;text-transform:uppercase;letter-spacing:0.02em;padding:0 0 1px;width:auto;min-width:180px;outline:none}
.quote-view .tbl-part-row.part-row-clickable{cursor:pointer}
.quote-view .tbl-part-row.part-row-clickable:hover td{background:rgba(255,255,255,0.03)!important}
body.light .quote-view .tbl-part-row.part-row-clickable:hover td{background:rgba(0,0,0,0.03)!important}
.quote-view .tbl-part-row.group-editing td{background:rgba(212,252,0,0.05)!important}
.quote-view .group-name-input{background:transparent;border:none;border-bottom:1px dashed var(--accent);color:inherit;font:inherit;font-size:7px;font-weight:700;text-transform:uppercase;letter-spacing:0.07em;padding:0;width:auto;min-width:140px;outline:none}
.quote-view .group-controls-float{display:inline-flex;gap:5px;margin-left:8px;flex-shrink:0}
.quote-view .group-controls-float .group-add-row-btn, .quote-view .group-controls-float .group-del-btn{padding:1px 7px!important;font-size:8px!important}
.quote-view .row-del-float{position:absolute;right:2px;top:50%;transform:translateY(-50%);z-index:5;background:var(--dark-2);border:1px solid #999;color:#fff;border-radius:50%;width:15px;height:15px;display:inline-flex;align-items:center;justify-content:center;font-size:10px;line-height:1;cursor:pointer;padding:0;transition:all 0.15s}
.quote-view .row-del-float:hover{border-color:var(--danger);color:#ff8a8a}
body.light .quote-view .row-del-float{background:#fff}
.quote-view .section-edit-footer .section-add-group-btn, .quote-view .section-edit-footer .section-reset-btn{padding:2px 9px!important;font-size:9px!important}
.quote-view .tbl-item-row.row-editing td:last-child{padding-right:20px}
.quote-view .tbl-item-row.row-editing td:last-child input{padding-right:2px}
.quote-view .mat-auto-row.row-editing{position:relative}
.quote-view .mat-lastcell{position:relative;padding-right:20px!important}
.quote-view .mat-auto-row .row-del-float{background:var(--dark-2)}
body.light .quote-view .mat-auto-row .row-del-float{background:#fff}
.quote-view .mat-auto-row.row-clickable{cursor:pointer;transition:background 0.12s}
.quote-view .mat-auto-row.row-clickable:hover{background:rgba(255,255,255,0.04)}
body.light .quote-view .mat-auto-row.row-clickable:hover{background:rgba(0,0,0,0.03)}
.quote-view .tbl-part-row td{position:relative}
.quote-view .sec-measures{display:inline-flex;gap:4px;align-items:center;margin-left:auto;flex-shrink:0}
.quote-view .sec-measure-pill{display:inline-flex;align-items:center;font-size:8px!important;font-weight:600;font-family:var(--font)!important;letter-spacing:0.01em!important;padding:1px 7px;border-radius:20px;background:none;border:1px solid var(--info,#4da6ff);color:#fff!important;text-transform:none!important;white-space:nowrap;line-height:1.5}
body.light .quote-view .sec-measure-pill{color:#1a1a18!important;border-color:var(--info)!important}

/* ── Editable measure pill + divide button (Unit / Bill-of-One) ── */
.quote-view .sec-measure-pill.measure-moved{border-color:var(--warn,#f5a623)!important}
.quote-view .sec-measure-pill.measure-moved,
.quote-view .sec-measure-pill.measure-moved .sec-measure-input{color:var(--warn,#f5a623)!important}
.quote-view .sec-measure-input{width:46px;background:none;border:none;color:inherit;font-family:var(--font-mono,monospace)!important;font-size:8px!important;font-weight:600;text-align:right;outline:none;padding:0 2px 0 0;-moz-appearance:textfield;appearance:textfield}
.quote-view .sec-measure-input::-webkit-outer-spin-button,
.quote-view .sec-measure-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.quote-view .sec-measure-reset{background:none;border:none;color:var(--text-dim,#666);font-family:var(--font)!important;font-size:8px!important;text-transform:none!important;letter-spacing:0!important;cursor:pointer;padding:0 2px}
.quote-view .sec-measure-reset:hover{color:var(--text,#f0f0f0)}
.quote-view .sec-divide-btn{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:4px;border:1px solid transparent;background:none;font-family:var(--font)!important;font-size:11px!important;font-weight:700;line-height:1;cursor:pointer;padding:0;color:var(--text-dim,#666);transition:all .12s}
.quote-view .sec-divide-btn.ok{color:var(--success,#4caf50)}
.quote-view .sec-divide-btn.bad{color:var(--danger,#e05252)}
.quote-view .sec-divide-btn:hover{background:rgba(255,255,255,.08)}
body.light .quote-view .sec-divide-btn:hover{background:rgba(0,0,0,.06)}
.quote-view .sec-divide-btn.on{background:rgba(255,255,255,.12);border-color:var(--border-md,rgba(255,255,255,.15))}

/* ── Read-only check band under a group row ── */
.quote-view .sec-check-row td{padding:0;border-bottom:1px solid var(--border,rgba(255,255,255,.08))}
.quote-view .chk-band{display:flex;align-items:flex-end;padding:8px 10px 8px 16px}
.quote-view .chk-band.ok{background:rgba(76,175,80,.06)}
.quote-view .chk-band.bad{background:rgba(224,82,82,.10)}
.quote-view .chk-band.non{background:rgba(255,255,255,.03);padding:7px 10px 7px 16px}
.quote-view .cb-col{padding-right:24px;display:flex;flex-direction:column}
.quote-view .cb-cap{font-size:8px;color:var(--text-muted,#999);text-transform:uppercase;letter-spacing:.06em;font-weight:700;margin-bottom:3px;white-space:nowrap}
.quote-view .cb-tot{font-family:var(--font-mono,monospace);font-size:14px;font-weight:700;line-height:1.1;white-space:nowrap}
.quote-view .cb-tot small{font-size:9px;font-weight:400;color:var(--text-muted,#999);font-family:var(--font);margin-left:2px}
.quote-view .cb-tot.dim{color:var(--text-muted,#999)}
.quote-view .cb-tot.bad{color:#e0736f}
.quote-view .cb-tot.ok{color:var(--success,#4caf50)}
.quote-view .cb-per{font-size:8px;color:var(--text-dim,#666);font-family:var(--font-mono,monospace);margin-top:2px;white-space:nowrap}
.quote-view .cb-sp{flex:1}
.quote-view .cb-money{padding-right:0;text-align:right}
.quote-view .cb-money .cb-tot{color:#e0736f}
.quote-view .cb-note{font-size:10px;color:var(--text-muted,#999);align-self:center}

/* ── Per-1 recipe figure prefixed to qty in unit mode ── */
.quote-view .per1{color:var(--accent,#d4fc00);font-weight:700;margin-right:10px;font-family:var(--font-mono,monospace)}
.quote-view .per1.bad{color:#e0736f}

.quote-view .tbl-item-row td{background:transparent}
.quote-view .tbl-manual-row{border-left:1px solid var(--accent)}
.quote-view .tbl-manual-row td{background:transparent!important;border-left:none!important}
/* [023400] manual add-on rows share .lab-display-row (for click-to-edit) which adds a 16px left
   indent meant for LABOUR rows. In the material schedule that pushed the add-on description right
   of the material rows — pull it back to the normal cell padding so it lines up. */
.quote-view .tbl-manual-row.lab-display-row td:first-child{padding-left:7px!important}
.quote-view .manual-tag{display:none}
body.light .quote-view .page-card{border-color:rgba(0,0,0,0.1);box-shadow:0 2px 12px rgba(0,0,0,0.1)}
body.light .quote-view .page-card-body{background:#ffffff}
body.light .quote-view .page-card-header{background:#f5f5f3;border-bottom-color:var(--accent)}
body.light .quote-view .page-card-brand-name span{color:#1a1a18}
body.light .quote-view .page-card-stage-banner{background:#fff;border-bottom-color:#ddd}
body.light .quote-view .page-card-stage-eyebrow{color:#8a8880}
body.light .quote-view .page-card-stage-num{color:#1a1a18;background:#e4e4e2}
body.light .quote-view .col-breakdown{border-right-color:rgba(0,0,0,0.08)}
body.light .quote-view .col-quantities, body.light .quote-view .col-labour{background:#ffffff}
body.light .quote-view .section-card{background:#fff}
body.light .quote-view .page-card .tbl th{background:#eeeeed}
body.light .quote-view .tbl-section-row td{color:var(--text)!important;background:transparent!important}
body.light .quote-view .tbl-part-row td{background:transparent!important;color:#1a1a18!important}
body.light .quote-view .tbl-manual-row{border-left-color:var(--accent)}
body.light .quote-view .lab-display-row:hover td{background:rgba(0,0,0,0.03)!important}
body.light .quote-view .lab-edit-row td{background:#f5f5f3!important}
body.light .quote-view .lab-group-header td{background:#e8e8e6!important;color:var(--text-muted)!important}
body.light .quote-view .lab-group-b3 td{background:transparent!important;color:#1a1a18!important}
body.light .quote-view .lab-row-has-value td{background:rgba(180,215,0,0.13)}
/* [019400] left border removed — grouping is no longer shown this way */
body.light .quote-view .markup-pct-input:focus{border-color:var(--text)}
body.light .quote-view .markup-total-row{background:#e4e4e2!important;border-top-color:var(--accent)!important}
body.light .quote-view .stage-notes-textarea{background:#f5f5f3;border-color:rgba(0,0,0,0.12)}
body.light .quote-view .stage-notes-textarea:focus{border-color:var(--text)}
body.light .quote-view .page-card-footer{background:#f5f5f3;border-top-color:rgba(0,0,0,0.08)}
body.light .quote-view .stage-total-bar{background:#f5f5f3}
body.light .quote-view .stage-total-value{color:var(--accent)}
.quote-view .page-card .btn{padding:5px 11px;font-size:9px;gap:4px}
.quote-view .page-card .btn-sm{padding:3px 7px;font-size:9px}
.quote-view .page-card .btn-add-item{width:100%;justify-content:center;font-size:8px;background:var(--dark-3);border:1px solid var(--border-md);border-radius:var(--radius);padding:4px;color:var(--text-muted);margin-top:3px}
.quote-view .page-card .group-dropdown-menu{bottom:calc(100% + 3px)}
.quote-view .page-card .group-dropdown-item{padding:6px 9px;font-size:9px}
.quote-view .page-card .add-item-form{background:var(--dark-3);border:1px solid var(--border-md);border-radius:var(--radius);padding:8px 9px;margin-top:6px;display:none}
.quote-view .page-card .add-item-form.visible{display:block}
.quote-view .page-card .add-item-row{display:grid;grid-template-columns:2fr 1fr 1fr 1fr auto;gap:6px;align-items:end}
.quote-view .page-card .add-item-row input{font-size:9px;padding:4px 5px;border:1px solid var(--border-md);border-radius:var(--radius);background:var(--dark-2);color:var(--text);font-family:'Inter',-apple-system,sans-serif;width:100%}
.quote-view .page-card .add-item-label{font-size:7px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:0.06em;margin-bottom:2px}
.quote-view .summary-page-card{width:794px;height:1123px;zoom:1.285;background:var(--dark-2);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;margin:0 auto 20px;box-shadow:0 8px 32px rgba(0,0,0,0.4);display:flex;flex-direction:column;font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
.quote-view .summary-page-card:last-child{margin-bottom:0}
/* ── Summary BoQs tab ── */
/* Font sizes authored for the PRINT scale (zoom:1 / 200mm page), exactly like the summary.
   The card's on-screen zoom:1.285 enlarges them for the monitor; the print rule resets zoom to
   1 so they render at these authored sizes on paper. Same mechanism as the summary — no print overrides. */
.quote-view .boqs-body{overflow:hidden}
.quote-view .boq-tbl-title{font-size:9px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--text);margin:11px 0 3px}
.quote-view .boq-tbl-title:first-child{margin-top:0}
.quote-view table.boq{width:100%;border-collapse:collapse;table-layout:fixed;font-size:9px}
.quote-view .boq th{text-align:left;font-size:7px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;padding:2px 8px;border-bottom:1px solid var(--border-md);background:var(--dark-3)}
.quote-view .boq th.n{text-align:right}
.quote-view .boq td{padding:1px 8px;border-bottom:1px solid var(--border);color:var(--text);font-size:9px;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.quote-view .boq td.boq-el{white-space:normal;word-break:break-word}
.quote-view .boq td.n{text-align:right;font-family:var(--font-mono)}
.quote-view .boq td.u,.quote-view .boq .u{color:var(--text-muted)}
.quote-view .boq .boq-grp td{font-size:7px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:5px 8px 1px;background:transparent;border-bottom:none;color:var(--text-muted)}
.quote-view .boq .boq-sub td{border-top:1px solid var(--border-md);border-bottom:none;color:var(--text-muted);padding-top:3px;font-size:9px}
.quote-view .boq .boq-sub td.n{color:var(--text);font-weight:700}
.quote-view .boq .boq-add{color:var(--accent);font-weight:700;margin-right:3px}
.quote-view .summary-title-block.boqs-title-row{display:flex;align-items:flex-end;justify-content:space-between}
.quote-view .boqs-sec-toggle{display:inline-flex;align-items:center;gap:8px;cursor:pointer;user-select:none;padding-bottom:2px}
.quote-view .boqs-sec-lbl{font-size:8px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted)}
.quote-view .boqs-sw{position:relative;width:30px;height:17px;background:var(--dark-4,#333);border-radius:20px;transition:background .15s;flex-shrink:0}
.quote-view .boqs-sw.on{background:var(--accent)}
.quote-view .boqs-knob{position:absolute;top:2px;left:2px;width:13px;height:13px;background:#fff;border-radius:50%;transition:left .15s}
.quote-view .boqs-sw.on .boqs-knob{left:15px;background:#141414}
body.light .quote-view .summary-page-card{border-color:rgba(0,0,0,0.1);box-shadow:0 2px 12px rgba(0,0,0,0.1)}
@media print{
.quote-view *{font-family:Helvetica,Arial,sans-serif!important}
@page{size:A4 portrait;margin:5mm}
.quote-view, .quote-view, body.light .quote-view{
    --accent:#1a1a18!important;--info:#1a1a18!important;--warn:#1a1a18!important;--danger:#b82020!important;--success:#1a1a18!important;
    --text:#1a1a18!important;--text-muted:#555!important;--text-dim:#888!important;
    --dark:#fff!important;--dark-2:#fff!important;--dark-3:#f5f5f3!important;--dark-4:#eee!important;
    --border:#ddd!important;--border-md:#ccc!important;
  }
.quote-view{background:#fff!important;color:#1a1a18!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.quote-view .theme-fab{display:none!important}
.quote-view .app-header, .quote-view .global-nav, .quote-view .job-context-bar, .quote-view .no-print{display:none!important}
.quote-view .app-body{padding:0!important;max-width:none!important}
.quote-view .view{padding:0!important;max-width:none!important;display:none!important}
.quote-view #view-stages{display:block!important;overflow:visible}
.quote-view .stage-panel{display:none!important}
.quote-view .stage-panel.print-target{display:block!important;page-break-after:always;page-break-inside:avoid!important;overflow:hidden!important;margin:0!important;padding:0!important}
.quote-view .stage-panel.print-target:last-child{page-break-after:auto}
.quote-view #stage-pills-bar{display:none!important}
.quote-view #stage-panels{margin:0!important;padding:0!important}
.quote-view .page-card{zoom:1!important;width:200mm!important;height:287mm!important;box-shadow:none!important;border:none!important;border-radius:0!important;margin:0!important;padding:0!important;overflow:hidden!important;page-break-inside:avoid!important}
.quote-view .page-card-header{background:#f5f5f3!important;border-bottom:2px solid #1a1a18!important}
.quote-view .page-card-brand-name, .quote-view .page-card-brand-name span{color:#1a1a18!important}
.quote-view .page-card-job-name, .quote-view .page-card-job-client{color:#1a1a18!important}
.quote-view .page-card-job-client{font-weight:600!important}
.quote-view .page-card-stage-banner{background:transparent!important;border-bottom-color:#ddd!important}
.quote-view .page-card-stage-num{color:#1a1a18!important;background:#e4e4e2!important}
.quote-view .page-card-stage-eyebrow{color:#666!important}
.quote-view .page-card-stage-name{color:#1a1a18!important}
.quote-view .page-card-stage-titlewrap{border-left-color:#1a1a18!important}
.quote-view .page-card-body, .quote-view .col-quantities, .quote-view .col-labour, .quote-view .section-card{background:#fff!important}
.quote-view .col-breakdown{border-right-color:#ddd!important;background:#fff!important}
.quote-view .col-breakdown-title, .quote-view .col-section-title{color:#888!important;border-bottom-color:#ddd!important}
.quote-view .section-card-header{background:#e4e4e2!important}
.quote-view .section-header-title{color:#1a1a18!important}
.quote-view .sec-type{color:#1a1a18!important}
.quote-view .sec-nm{color:#888!important}
.quote-view .sec-dot{color:#888!important}
.quote-view .page-card .tbl th{background:#f5f5f3!important;color:#888!important;border-bottom-color:#ddd!important}
.quote-view .page-card .tbl td{color:#1a1a18!important;border-bottom-color:#eee!important}
.quote-view .page-card .tbl input{background:transparent!important;border:none!important;color:#1a1a18!important}
.quote-view .tbl-section-row td{background:transparent!important;color:#1a1a18!important;border-bottom:2px solid #1a1a18!important}
.quote-view .tbl-part-row td{background:transparent!important;color:#1a1a18!important;font-weight:700!important}
.quote-view .sec-measure-pill{color:#000!important;border-color:#000!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.quote-view .tbl-manual-row td{background:transparent!important;border-left-color:#999!important}
.quote-view .tbl-item-row.item-added td{background:transparent!important}
.quote-view .tbl-part-row.group-added td{background:transparent!important}
.quote-view .lab-group-header td{background:#e8e8e6!important;color:#666!important}
.quote-view .lab-group-b3 td{background:transparent!important;color:#1a1a18!important}
.quote-view .lab-edit-row td{background:transparent!important}
.quote-view .lab-row-has-value td{background:#f0f0ee!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}

.quote-view .lab-total-row{background:#f5f5f3!important}
.quote-view .lab-total-row span.labour-total-label, .quote-view .lab-total-row span.labour-total-value{color:#1a1a18!important}
.quote-view .markup-total-row{background:#e4e4e2!important;border-top-color:#1a1a18!important}
.quote-view .markup-total-label, .quote-view .markup-total-value{color:#1a1a18!important}
.quote-view .markup-label, .quote-view .markup-value{color:#666!important}
.quote-view .markup-value, .quote-view .markup-total-value{color:#1a1a18!important}
.quote-view .subtotal-row{border-top-color:#eee!important}
.quote-view .subtotal-label{color:#888!important}
.quote-view .subtotal-value{color:#1a1a18!important}
.quote-view .col-quantities{border-bottom-color:#ddd!important}
.quote-view .stage-notes-section{border-top-color:#ddd!important}
.quote-view .stage-notes-label{color:#666!important}
.quote-view .stage-notes-textarea{background:transparent!important;border-color:#ddd!important;color:#1a1a18!important}
.quote-view .stage-notes-textarea::placeholder{color:transparent!important;opacity:0!important}
.quote-view .edit-mode-cell input, .quote-view .section-edit-toggle, .quote-view .row-del-btn, .quote-view .group-del-btn, .quote-view .group-add-row-btn, .quote-view .section-add-group-btn, .quote-view .section-reset-btn, .quote-view .section-edit-footer, .quote-view .section-add-btn-wrap{display:none!important}
.quote-view .value-modified-icon{display:inline-block!important;color:#c62828!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.quote-view .edit-mode-cell{padding:3px 7px!important}
.quote-view .stage-notes-textarea::-webkit-input-placeholder{color:transparent!important;opacity:0!important}
.quote-view .markup-pct-input{background:transparent!important;border:none!important;color:#1a1a18!important;padding:0!important;-webkit-appearance:none!important;-moz-appearance:textfield!important;appearance:none!important;font-weight:600!important}
.quote-view .page-card-footer{background:transparent!important;border-top-color:#ddd!important}
.quote-view .stage-total-bar{background:transparent!important;border-top:2px solid #1a1a18!important}
.quote-view .stage-total-line{color:#666!important}
.quote-view .stage-total-line span{color:#1a1a18!important}
.quote-view .stage-total-right-label{color:#666!important}
.quote-view .stage-total-value{color:var(--accent)}
.quote-view #spanel-summary .summary-page-card{zoom:1!important;width:200mm!important;height:287mm!important;box-shadow:none!important;border:none!important;border-radius:0!important;margin:0!important;overflow:hidden!important;page-break-after:always!important;page-break-inside:avoid!important}
.quote-view #spanel-summary .summary-page-card:last-child{page-break-after:auto!important}
.quote-view #spanel-boqs .summary-page-card{zoom:1!important;width:200mm!important;height:287mm!important;box-shadow:none!important;border:none!important;border-radius:0!important;margin:0!important;overflow:hidden!important;page-break-after:always!important;page-break-inside:avoid!important}
.quote-view #spanel-boqs .summary-page-card:last-child{page-break-after:auto!important}
.quote-view #spanel-summary .page-card-header{background:#f5f5f3!important;border-bottom:2px solid #1a1a18!important}
.quote-view #spanel-summary .page-card-brand-name, .quote-view #spanel-summary .page-card-brand-name span{color:#1a1a18!important}
.quote-view #spanel-summary .page-card-job-name{color:#1a1a18!important}
.quote-view #spanel-summary .page-card-job-client{color:#555!important}
.quote-view #spanel-summary .summary-page-body{background:#fff!important}
.quote-view #spanel-summary .summary-title-eyebrow{color:#666!important}
.quote-view #spanel-summary .summary-title-main{color:#1a1a18!important}
.quote-view #spanel-summary .summary-section-label{color:#666!important}
.quote-view #spanel-summary .summary-stage-row{border-bottom-color:#ddd!important}
.quote-view #spanel-summary .summary-stage-eyebrow{color:#666!important}
.quote-view #spanel-summary .summary-stage-name{color:#1a1a18!important}
.quote-view #spanel-summary .summary-stage-subhead{color:#666!important}
.quote-view #spanel-summary .summary-inc-item{color:#555!important}
.quote-view #spanel-summary .summary-inc-item .sec-type{color:#333!important}
.quote-view #spanel-summary .summary-inc-item .sec-nm{color:#888!important}
.quote-view #spanel-summary .summary-inc-item .sec-dot{color:#888!important}
.quote-view #spanel-summary .summary-stage-notestext{color:#1a1a18!important}
.quote-view #spanel-summary .sps-lbl{color:#666!important}
.quote-view #spanel-summary .sps-val{color:#1a1a18!important}
.quote-view #spanel-summary .sps-tot-val{color:#1a1a18!important}
.quote-view #spanel-summary .summary-mini-card{background:#fff!important;border-color:#ddd!important}
.quote-view #spanel-summary .summary-mini-header{background:#eeeeed!important;border-bottom-color:#1a1a18!important}
.quote-view #spanel-summary .summary-mini-badge{color:#1a1a18!important;background:#fff!important}
.quote-view #spanel-summary .summary-mini-name{color:#1a1a18!important}
.quote-view #spanel-summary .summary-mini-costs{color:#1a1a18!important;border-right-color:#ddd!important}
.quote-view #spanel-summary .summary-mini-line{color:#666!important}
.quote-view #spanel-summary .summary-mini-line span:last-child{color:#1a1a18!important}
.quote-view #spanel-summary .summary-mini-total{border-top-color:#ddd!important}
.quote-view #spanel-summary .summary-mini-total span:first-child{color:#666!important}
.quote-view #spanel-summary .summary-mini-total span:last-child{color:#1a1a18!important}
.quote-view #spanel-summary .summary-mini-notes-label{color:#666!important}
.quote-view #spanel-summary .summary-mini-notes-text{color:#1a1a18!important}
.quote-view #spanel-summary .summary-mini-notes-empty{color:#999!important}
.quote-view #spanel-summary .summary-notes-label{color:#666!important}
.quote-view #spanel-summary .summary-notes-textarea{background:transparent!important;border-color:#ddd!important;color:#1a1a18!important}
.quote-view .summary-grand-bar .stl-label{color:#666!important}
.quote-view .summary-grand-bar .stl-value{color:#1a1a18!important}
.quote-view #spanel-summary .summary-notes-textarea::placeholder{color:transparent!important;opacity:0!important}
.quote-view #spanel-summary .card{box-shadow:none!important;border-color:#ddd!important;background:#fff!important}
}
.quote-view .email-builder{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px;align-items:start}
.quote-view .email-builder-left{display:flex;flex-direction:column;gap:14px}
.quote-view .email-panel{background:var(--dark-2);border:1px solid var(--border-md);border-radius:8px;padding:14px}
.quote-view .email-panel h3{font-size:9px;text-transform:uppercase;letter-spacing:0.08em;color:var(--text-muted);margin:0 0 10px;font-weight:700}
.quote-view .email-tick{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px;color:#ccc;cursor:pointer}
.quote-view .email-tick input{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;flex-shrink:0}
.quote-view .email-tick-all{font-weight:700;color:#fff;padding-bottom:8px;margin-bottom:4px;border-bottom:1px solid var(--border-md)}
.quote-view .email-tick-amt{margin-left:auto;font-family:var(--font-mono);color:var(--text-muted);font-size:11px}
.quote-view .email-tick-oneoff{color:#fff}
.quote-view .email-oneoff-tag{margin-left:6px;font-size:8px;text-transform:uppercase;letter-spacing:0.05em;color:var(--info);border:1px solid var(--info);border-radius:8px;padding:1px 6px}
.quote-view .email-reminder{font-size:11px;color:#9cc9ff;line-height:1.7}
.quote-view .email-reminder-dot{color:#555;margin:0 6px}
.quote-view .email-reminder-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 12px}
.quote-view .email-reminder-chip{font-size:11px;color:#cfe0ff;padding:3px 8px;background:rgba(77,166,255,0.06);border:1px solid rgba(77,166,255,0.18);border-radius:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.quote-view .email-reminder-chip .sec-type{color:#fff;font-weight:600}
.quote-view .email-reminder-chip .sec-nm{color:#9cc9ff}
.quote-view .email-reminder-chip .sec-dot{color:#5a8fd0;margin:0 4px}
.quote-view .email-reminder-empty{font-size:11px;color:var(--text-dim);font-style:italic}
.quote-view .email-field-lbl{display:block;font-size:10px;color:var(--text-muted);margin-bottom:5px;font-weight:600}
.quote-view .email-field{width:100%;box-sizing:border-box;background:#111;border:1px solid var(--border-md);border-radius:6px;padding:8px 10px;color:var(--text);font-size:12px;font-family:inherit;resize:vertical}
.quote-view .email-field:focus{outline:none;border-color:var(--accent)}
.quote-view .email-price-row{display:flex;align-items:center;gap:10px;margin-top:12px}
.quote-view .email-price-lbl{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.05em;font-weight:600}
.quote-view .email-price-val{font-size:16px;font-weight:800;color:var(--accent);font-family:var(--font-mono)}
.quote-view .email-price-edit{margin-left:auto;background:transparent;border:1px solid #999;color:#fff;border-radius:5px;padding:4px 12px;font-size:10px;font-weight:600;cursor:pointer;font-family:inherit;transition:all 0.15s}
.quote-view .email-price-edit:hover{border-color:var(--accent);color:var(--accent)}
.quote-view .email-price-note{font-size:9px;color:var(--text-dim);margin-top:5px}
.quote-view .email-add-row{display:flex;gap:6px;margin-top:8px}
.quote-view .email-add-input{flex:1;background:#111;border:1px solid var(--border-md);border-radius:5px;padding:6px 8px;color:var(--text);font-size:11px;font-family:inherit}
.quote-view .email-add-input:focus{outline:none;border-color:var(--accent)}
.quote-view .email-add-btn{background:transparent;border:1px solid #999;color:#fff;border-radius:5px;padding:6px 12px;font-size:10px;font-weight:600;cursor:pointer;font-family:inherit;transition:all 0.15s;white-space:nowrap}
.quote-view .email-add-btn:hover{border-color:var(--accent);color:var(--accent)}
.quote-view .email-builder-right{position:sticky;top:16px}
.quote-view .email-preview-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.quote-view .email-preview-head>span{font-size:9px;text-transform:uppercase;letter-spacing:0.08em;color:var(--text-muted);font-weight:700}
.quote-view .email-copy-btns{display:flex;gap:8px}
.quote-view .email-preview{background:var(--dark-2);border:1px solid var(--border-md);border-radius:8px;padding:14px}
.quote-view .email-preview-paper{background:#fff;color:#1a1a1a;border-radius:6px;padding:20px 22px;min-height:200px}
.quote-view .incexc-cols{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.quote-view .incexc-h{font-size:11px;text-transform:uppercase;letter-spacing:0.06em;color:var(--text-muted);margin:0 0 10px;font-weight:700}
.quote-view .incexc-chip{display:flex;align-items:center;gap:8px;background:var(--dark-2);border:1px solid var(--border-md);border-radius:5px;padding:6px 10px;margin-bottom:5px;font-size:12px;color:var(--text);position:relative}
.quote-view .incexc-handle{color:var(--text-dim);cursor:grab;font-size:11px;line-height:1;flex-shrink:0;user-select:none}
.quote-view .incexc-handle:active{cursor:grabbing}
.quote-view .incexc-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.quote-view .incexc-chip.dragging{opacity:0.4}
.quote-view .incexc-chip.drop-above{box-shadow:0 -2px 0 var(--accent)}
.quote-view .incexc-chip.drop-below{box-shadow:0 2px 0 var(--accent)}
.quote-view .incexc-x{color:var(--text-muted);cursor:pointer;font-size:14px;padding:0 3px;line-height:1}
.quote-view .incexc-x:hover{color:var(--danger)}
.quote-view .incexc-add{display:flex;gap:6px;margin-top:8px}
.quote-view .incexc-add .field-input{flex:1}

/* ============================================================
   PRINT — merged-app corrections
   THE BUG: every rule above is scoped `.quote-view .app-header` etc. But in the
   merged app the header, nav, board, back-bar and modals are SIBLINGS of
   .quote-view, not children — so those selectors matched NOTHING and the whole
   page printed. These top-level rules hide the app chrome for real.
   ============================================================ */
@media print{
  /* hide everything that isn't the quote itself */
  .app-header, .nav, .board-wrap, .board, .stats, .toolbar,
  .qv-backbar, .qv-pillbar, .qv-details,
  .toast, .fab, .theme-fab, .sync, #err,
  #jobpage, #qv-files-modal, #qv-pricing-modal, #qv-email-modal,
  .no-print{ display:none!important; }

  html, body{ background:#fff!important; margin:0!important; padding:0!important; }
  body > *:not(.quote-view){ display:none!important; }

  .quote-view{ display:block!important; background:#fff!important; padding:0!important; margin:0!important; }
  .quote-view .inner{ width:auto!important; max-width:none!important; margin:0!important; padding:0!important; }
  .qv-body{ display:block!important; }

  /* only the panels the user ticked in the print dropdown */
  .stage-panel{ display:none!important; }
  .stage-panel.print-target{
    display:block!important;
    page-break-after:always; page-break-inside:avoid!important;
    overflow:hidden!important; margin:0!important; padding:0!important;
  }
  .stage-panel.print-target:last-child{ page-break-after:auto; }

  /* the override warning must never appear on a client-facing quote */
  .quote-override-warn{ display:none!important; }
}


/* [5] client name as a teal pill in the printable card headers (summary + stages) */
.quote-view .page-card-client-pill{
  display:inline-block;
  border:1px solid rgba(75,179,168,.55);
  color:#4bb3a8;
  border-radius:20px;
  padding:2px 10px;
  font-size:10px;
  font-weight:700;
  letter-spacing:.02em;
  white-space:nowrap;
}
body.light .quote-view .page-card-client-pill{ border-color:rgba(43,122,114,.55); color:#2b7a72; }
@media print{
  .page-card-client-pill{ border-color:#2b7a72!important; color:#2b7a72!important; }
}

/* ===== EMAIL BUILDER (lifted from the original Quote, scoped to .quote-view) ===== */
.quote-view .email-builder{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:20px;align-items:start}
.quote-view .email-builder-left{display:flex;flex-direction:column;gap:14px}
.quote-view .email-panel{background:var(--dark-2);border:1px solid var(--border-md);border-radius:8px;padding:14px}
.quote-view .email-panel h3{font-size:9px;text-transform:uppercase;letter-spacing:0.08em;color:var(--text-muted);margin:0 0 10px;font-weight:700}
.quote-view .email-tick{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px;color:#ccc;cursor:pointer}
.quote-view .email-tick input{width:15px;height:15px;accent-color:var(--accent);cursor:pointer;flex-shrink:0}
.quote-view .email-tick-all{font-weight:700;color:#fff;padding-bottom:8px;margin-bottom:4px;border-bottom:1px solid var(--border-md)}
.quote-view .email-tick-amt{margin-left:auto;font-family:var(--font-mono);color:var(--text-muted);font-size:11px}
.quote-view .email-tick-oneoff{color:#fff}
.quote-view .email-oneoff-tag{margin-left:6px;font-size:8px;text-transform:uppercase;letter-spacing:0.05em;color:var(--info);border:1px solid var(--info);border-radius:8px;padding:1px 6px}
.quote-view .email-reminder{font-size:11px;color:#9cc9ff;line-height:1.7}
.quote-view .email-reminder-dot{color:#555;margin:0 6px}
.quote-view .email-reminder-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 12px}
.quote-view .email-reminder-chip{font-size:11px;color:#cfe0ff;padding:3px 8px;background:rgba(77,166,255,0.06);border:1px solid rgba(77,166,255,0.18);border-radius:5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.quote-view .email-reminder-chip .sec-type{color:#fff;font-weight:600}
.quote-view .email-reminder-chip .sec-nm{color:#9cc9ff}
.quote-view .email-reminder-chip .sec-dot{color:#5a8fd0;margin:0 4px}
.quote-view .email-reminder-empty{font-size:11px;color:var(--text-dim);font-style:italic}
.quote-view .email-field-lbl{display:block;font-size:10px;color:var(--text-muted);margin-bottom:5px;font-weight:600}
.quote-view .email-field{width:100%;box-sizing:border-box;background:#111;border:1px solid var(--border-md);border-radius:6px;padding:8px 10px;color:var(--text);font-size:12px;font-family:inherit;resize:vertical}
.quote-view .email-field:focus{outline:none;border-color:var(--accent)}
.quote-view .email-price-row{display:flex;align-items:center;gap:10px;margin-top:12px}
.quote-view .email-price-lbl{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.05em;font-weight:600}
.quote-view .email-price-val{font-size:16px;font-weight:800;color:var(--accent);font-family:var(--font-mono)}
.quote-view .email-price-edit{margin-left:auto;background:transparent;border:1px solid #999;color:#fff;border-radius:5px;padding:4px 12px;font-size:10px;font-weight:600;cursor:pointer;font-family:inherit;transition:all 0.15s}
.quote-view .email-price-edit:hover{border-color:var(--accent);color:var(--accent)}
.quote-view .email-price-note{font-size:9px;color:var(--text-dim);margin-top:5px}
.quote-view .email-add-row{display:flex;gap:6px;margin-top:8px}
.quote-view .email-add-input{flex:1;background:#111;border:1px solid var(--border-md);border-radius:5px;padding:6px 8px;color:var(--text);font-size:11px;font-family:inherit}
.quote-view .email-add-input:focus{outline:none;border-color:var(--accent)}
.quote-view .email-add-btn{background:transparent;border:1px solid #999;color:#fff;border-radius:5px;padding:6px 12px;font-size:10px;font-weight:600;cursor:pointer;font-family:inherit;transition:all 0.15s;white-space:nowrap}
.quote-view .email-add-btn:hover{border-color:var(--accent);color:var(--accent)}
.quote-view .email-builder-right{position:sticky;top:16px}
.quote-view .email-preview-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.quote-view .email-preview-head>span{font-size:9px;text-transform:uppercase;letter-spacing:0.08em;color:var(--text-muted);font-weight:700}
.quote-view .email-copy-btns{display:flex;gap:8px}
.quote-view .email-preview{background:var(--dark-2);border:1px solid var(--border-md);border-radius:8px;padding:14px}
.quote-view .email-preview-paper{background:#fff;color:#1a1a1a;border-radius:6px;padding:20px 22px;min-height:200px}
.quote-view .email-back-bar{margin-bottom:14px}
.quote-view #view-email{padding:20px 0 60px}

/* ============================================================
   STAGE PAGE PASS
   ============================================================ */

/* [6] add-buttons now live IN the section header rows (right-aligned), so the
   full-width bars at the bottom of each column are gone entirely. */
.quote-view .col-breakdown-title,
.quote-view .col-section-title{ display:flex; align-items:center; gap:8px; }
.quote-view .hdr-addbtn{
  margin-left:auto; flex-shrink:0;
  display:inline-flex; align-items:center; gap:4px;
  background:transparent;
  border:1px solid rgba(212,252,0,.35);
  border-radius:5px;
  padding:2px 8px;
  font-size:8px; font-weight:600; letter-spacing:.02em;
  color:#fff; cursor:pointer; font-family:inherit; line-height:1.6;
  transition:border-color .12s, background .12s;
}
.quote-view .hdr-addbtn i{ font-size:11px; color:#d4fc00; }
.quote-view .hdr-addbtn .hdr-addcv{ font-size:10px; color:#888; margin-left:1px; }
.quote-view .hdr-addbtn:hover{ border-color:rgba(212,252,0,.7); background:rgba(212,252,0,.06); }
.quote-view .lab-add-btn-wrap{ margin-left:auto; position:relative; }

/* [3] backgrounds -> --dark-2 */
.quote-view .page-card-header{ background:var(--dark-2)!important; }
.quote-view .stage-total-bar{ background:var(--dark-2)!important; }   /* the FOOTER bar (was --dark-3) */
.quote-view .summary-notes-textarea{ background:var(--dark-2)!important; }

/* [5] inherited flag: a take-off edit feeding this material (outline, not solid) */
.quote-view .value-modified-icon.mat-inherit{
  color:#e8a838;            /* amber = came from below, vs red = edited here */
  opacity:.75;
}
.quote-view .value-modified-icon.mat-inherit:hover{ opacity:1; }
/* measure-scaled: red triangle in the take-off that isn't individually revertible
   (reset lives on the group pill) — same colour, but not a click target */
.quote-view .value-modified-icon.meas-scaled{ cursor:default; }
/* measure-inherited: amber in the material schedule, read-only (revert on the pill) */
.quote-view .value-modified-icon.mat-inherit-measure{ color:#e8a838; opacity:.75; cursor:default; }

/* [7] red triangles in the material schedule: match the take-off's spacing
   (take-off wraps them in .value-modified{gap:3px}; the material badges are bare
   spans prepended to the cell, so they were touching the text) */
.quote-view .mat-auto-row .value-modified-icon{ margin-right:4px; }

/* [9] Materials Subtotal — padding was 5px top / 0 bottom (plus a 5px margin), so it
   sat visibly low. Now symmetric and tighter. */
.quote-view .subtotal-row{ padding:3px 5px; margin-top:4px; }
.quote-view .subtotal-row-padded{ padding:5px; margin-top:0; }

/* [9] Markup row — the % input's own padding + border was inflating the line box */
.quote-view .markup-row{ padding:2px 0; }
.quote-view .markup-pct-input{ padding:1px 4px; line-height:1.4; }

/* [4] RESTORE Materials Total — I wrongly stripped its accent border + boxed
   background. It keeps them; only the padding is tightened. */
.quote-view .markup-total-row{
  padding:3px 6px!important;
  margin-top:2px;
  margin-bottom:2px;
}

/* [10] labour qty: was mono + 11px (every other cell in the card is 8px), which
   inflated the row. Now Inter at 9px — still the focal point, but in step. */
.quote-view .lab-qty-val{
  font-family:'Inter',-apple-system,sans-serif;
  font-size:9px;
}
/* [10] rate/total grey when qty is 0 — handled by the existing .lab-display-val.zero
   class; the JS now applies it to the rate cell too (it previously stayed bright). */

/* [12] labour rows: the day buttons were inline (14px circles in a text cell), which
   forced the line box taller than the text. Absolute = they hover over the row and
   cost no height. Vertical padding raised 2px -> 3px to match .tbl td exactly. */
.quote-view .lab-display-row td{ padding:3px 5px!important; position:relative; }
.quote-view .lab-display-row td:first-child{ padding-left:16px!important; }
.quote-view .lab-display-row .lab-day-desc{ padding-left:28px!important; }
.quote-view .lab-day-ctrl{
  position:absolute; right:6px; top:50%; transform:translateY(-50%);
  display:inline-flex; gap:4px; margin-left:0; vertical-align:baseline;
  z-index:2;
}

/* ============================================================
   STAGE PAGE — corrections
   ============================================================ */

/* [1] header add-buttons: icon only, small square */
.quote-view .hdr-addbtn{
  padding:0!important;
  width:15px; height:15px;
  justify-content:center;
  gap:0;
}
.quote-view .hdr-addbtn i{ font-size:11px; }
.quote-view .hdr-addbtn .hdr-addcv{ display:none; }

/* [2] the labour add button was pushing the title onto a new line because
   .group-dropdown is width:100% — inside a header row it must shrink to the button */
.quote-view .col-section-title .group-dropdown,
.quote-view .col-breakdown-title .group-dropdown{
  width:auto!important;
  margin-left:auto;
  flex-shrink:0;
}
.quote-view .col-section-title .group-dropdown-menu,
.quote-view .col-breakdown-title .group-dropdown-menu{ right:0; left:auto; }

/* [3] day buttons: sit right AFTER the row's value, not floated to the far right
   (where they collided with the qty steppers). Inline again — but zero-height, so
   they still don't inflate the row: the circles overflow a 0px line box. */
.quote-view .lab-day-ctrl{
  position:static;
  transform:none;
  display:inline-flex;
  align-items:center;
  gap:4px;
  margin-left:10px;
  height:0;                 /* contributes NO height to the line box */
  overflow:visible;
  vertical-align:middle;
}


/* [7] a labour row with a quantity was tinted LIME. Too much. Now a faint white
   wash (the standard highlight used elsewhere in the build). The lime spine stays
   on screen, but never prints and never shows in light mode. */
.quote-view .lab-row-has-value td{ background:rgba(255,255,255,0.035)!important; }

/* [018900] The active-labour-row highlight was a flat grey wash in light mode (this rule
   overrode the earlier lime one). Dane works in light mode in this panel all day, so it now
   uses a light tint of the --info blue instead — visible, but easy on a white page. */
body.light .quote-view .lab-row-has-value td{ background:rgba(26,95,191,0.07)!important; }
/* [019400] left border removed — grouping is no longer shown this way */
@media print{
  .lab-row-has-value td{ background:transparent!important; }
  
}

/* [8] take-off section title row. It ALREADY had display:flex + align-items:center,
   so the misalignment wasn't the flexbox — it's that the blue pills are taller than
   the title text and the children had inherited line-heights, so the text rode high.
   Normalise the line-height and give the row a little more vertical air. */
.quote-view .section-card-header{ padding:7px 8px!important; }   /* [018700] bumped with the 10px header */
.quote-view .section-card-header > *{ line-height:1.2; }
.quote-view .sec-measures{ align-items:center; line-height:1; }
.quote-view .sec-measure-pill{ display:inline-flex; align-items:center; line-height:1; }

/* [9] the markup % input: drop the box border, and the "%" was hard-coded to 11px
   inline while every other label in the card is 8-9px */
.quote-view .markup-pct-input{
  border:none!important;
  background:transparent!important;
  padding:1px 2px!important;
  width:28px;
  text-align:right;
}
.quote-view .markup-pct-input:focus{
  outline:none;
  border-bottom:1px solid var(--accent)!important;
}
.quote-view .markup-pct-sign{
  font-size:9px;
  color:var(--text-muted);
  font-family:'Inter',-apple-system,sans-serif;
  margin-left:1px;
}

/* ============================================================
   STAGE PAGE — round 2
   ============================================================ */


/* AREA TITLES ("Take-off" / "Material Schedule" / "Labour & Site Prelims") were
   --text-dim (#555) — too faint. Lift to --text-muted (#999). Weight was already 700. */
.quote-view .col-breakdown-title,
.quote-view .col-section-title{ color:var(--text-muted)!important; }

/* TAKE-OFF SECTION CARDS: drop the outline — it's the only bordered thing on the card */
.quote-view .section-card{ border:none!important; }

/* NOTES at the bottom of the stage/summary: no background box (they're 9px Inter) */
.quote-view .stage-notes-textarea,
.quote-view .summary-notes-textarea{
  background:transparent!important;
  border-color:var(--border)!important;
}

/* GAP before the Labour Total bar — the table's last row plus the bar's own margin
   left an odd float above a line that already reads as a divider */
.quote-view .lab-total-row{ margin-top:0!important; }

/* LABOUR "+" DROPDOWN: the menu was left:0;right:0 — i.e. stretched to its wrapper.
   The wrapper is now a 15px button, so the menu collapsed to a sliver. It also opened
   UPWARD (it used to live at the bottom of the column; it's now in the header). */
.quote-view .page-card .group-dropdown-menu,
.quote-view .group-dropdown-menu{
  top:calc(100% + 5px);
  bottom:auto;
  left:auto;
  right:0;
  width:auto;
  min-width:132px;
  background:var(--dark-2);
  border:1px solid var(--border-md);
  border-radius:7px;
  box-shadow:0 10px 28px rgba(0,0,0,.5);
  padding:4px;
  overflow:visible;
}
.quote-view .page-card .group-dropdown-item,
.quote-view .group-dropdown-item{
  padding:6px 9px;
  font-size:9px;
  font-weight:500;
  color:var(--text-muted);
  border-radius:5px;
  white-space:nowrap;
  text-align:left;
}
.quote-view .group-dropdown-item:hover{ background:rgba(255,255,255,.08); color:var(--text); }

/* ============================================================
   STAGE PAGE — round 3
   ============================================================ */

/* ⚑ ROOT CAUSE of the "not vertically centred" pill row (and I'd been styling the
   WRONG element — .section-card-header — for two rounds). The pill lives on
   .tbl-part-row, whose cell had:  padding: 5px 6px 2px  — 5px TOP, 2px BOTTOM.
   Asymmetric, so content always sat low. Same mistake the labour group rows had.
   Symmetric now, and 1px taller than the 3px data rows. */
.quote-view .tbl-part-row td{
  padding:4px 6px!important;
  vertical-align:middle!important;
}
.quote-view .part-row-inner{ align-items:center; line-height:1.4; }
.quote-view .sec-measure-pill{ line-height:1.4; }

/* notes: 10px */
.quote-view .stage-notes-textarea,
.quote-view .summary-notes-textarea{ font-size:10px!important; }
.quote-view .summary-stage-notestext{ font-size:10px!important; }

/* ============================================================
   STAGE PAGE — round 4 (spacing, dialled in)
   ============================================================ */

/* Subtotal + Markup rows: no margins, 3px top/bottom */
.quote-view .subtotal-row{
  padding:3px 5px!important;
  margin:0!important;
}
.quote-view .markup-row{
  padding:3px 0!important;
  margin:0!important;
}
/* (markup-total-row deliberately left as-is) */

/* Summary page columns: stage details | notes | values */
.quote-view .summary-stage-detail{
  grid-template-columns:minmax(0,250px) 1fr 190px!important;
}

/* ============================================================
   LABOUR ROWS — deterministic heights (no more guessing)
   Every value below is explicit, so the height is calculable rather than
   inherited from a browser default.
   ============================================================ */

/* DATA ROW (e.g. "Delivery") */
.quote-view .lab-display-row td{
  font-size:8px;
  line-height:1.2;          /* 8 x 1.2 = 9.6px of text */
  padding:3px 5px!important; /* + 3px top + 3px bottom */
  vertical-align:middle!important;
  position:relative;
}                            /* => 9.6 + 6 = 15.6px */
.quote-view .lab-display-row td:first-child{ padding-left:16px!important; }

/* GROUP TITLE ROW (e.g. "STEEL") — 1px more padding each side than a data row */
.quote-view .lab-group-b3 td{
  font-size:7px!important;   /* unchanged (original) */
  line-height:1.2;           /* 7 x 1.2 = 8.4px of text */
  padding:4px 6px!important; /* + 4px top + 4px bottom */
  vertical-align:middle!important;
  border-bottom:1px solid var(--border)!important;
}                            /* => 8.4 + 8 + 1 border = 17.4px */

/* the title sits in an INLINE span whose vertical padding renders but does NOT
   affect the line box — which is what threw the centring off. Strip it. */
.quote-view .lab-group-title-editable{
  padding:0 3px!important;
  line-height:1.2;
  display:inline-block;
  vertical-align:middle;
}

/* ============================================================
   EMAIL BUILDER MODAL
   The card carries .quote-view so the lifted email rules apply — but .quote-view is
   a PAGE (min-height:100vh, page background, 60px bottom padding). Neutralise those
   so it behaves as a modal card.
   ============================================================ */
#qv-email-modal{ z-index:300; }
#qv-email-card.quote-view{
  min-height:0!important;
  height:auto;
  background:var(--page)!important;
  padding-bottom:0!important;
  font-size:13px;
}
#qv-email-card .fxm-body{ padding-bottom:24px; }
#qv-email-card .email-builder{ margin:0; }

@media print{
  /* never print the builder */
  #qv-email-modal{ display:none!important; }
}

/* ============================================================
   TEXT PASS (queued adjustments)
   The palette only had #555 / #999 / #f0f0f0 — an 87-point jump in the middle.
   These sit in that gap.
   ============================================================ */
.quote-view .sec-nm{ color:#c4c4c4; }
.quote-view .col-breakdown-title,
.quote-view .col-section-title{ color:#b8b8b8!important; }
.quote-view .subtotal-label{ color:#b8b8b8; }
.quote-view .markup-label{ color:#b8b8b8; }
.quote-view .markup-pct-sign{ color:#b8b8b8; }

/* section description row: 8px / 600 / 3px padding (matches the data rows beneath) */
.quote-view .tbl-part-row td{
  font-size:8px!important;
  font-weight:600!important;
  line-height:1.2;
  padding:3px 6px!important;
}

/* light + print pairs — the printed quote renders in LIGHT mode, so these are the
   values the client actually sees */
body.light .quote-view .sec-nm{ color:#5a5a5a!important; }
body.light .quote-view .col-breakdown-title,
body.light .quote-view .col-section-title{ color:#6a6a6a!important; }
body.light .quote-view .subtotal-label{ color:#6a6a6a!important; }
body.light .quote-view .markup-label{ color:#6a6a6a!important; }
body.light .quote-view .markup-pct-sign{ color:#6a6a6a!important; }

/* ============================================================
   TOTALS BACKGROUNDS + LIGHT/PRINT AUDIT (stage card)
   ============================================================ */

/* Labour Total + Materials Total: lighter fill, and the two now MATCH
   (they were --dark-4 #333) */
.quote-view .markup-total-row,
.quote-view .lab-total-row{ background:#3d3d3d!important; }

body.light .quote-view .markup-total-row,
body.light .quote-view .lab-total-row{
  background:#ebebe9!important;
  border-top-color:var(--accent)!important;
}
body.light .quote-view .lab-total-row span.labour-total-label,
body.light .quote-view .lab-total-row span.labour-total-value,
body.light .quote-view .markup-total-label,
body.light .quote-view .markup-total-value{ color:#1a1a18!important; }

/* the in-card add buttons ("+") were white-on-white in light mode */
body.light .quote-view .hdr-addbtn{
  color:#1a1a18!important;
  border-color:rgba(0,0,0,.22)!important;
}
body.light .quote-view .hdr-addbtn i{ color:#6b8000!important; }
body.light .quote-view .hdr-addbtn:hover{ border-color:rgba(0,0,0,.45)!important; background:rgba(0,0,0,.04)!important; }

/* group dropdown (labour "+") */
body.light .quote-view .group-dropdown-menu{
  background:#fff!important;
  border-color:rgba(0,0,0,.15)!important;
  box-shadow:0 10px 28px rgba(0,0,0,.18)!important;
}
body.light .quote-view .group-dropdown-item{ color:#444!important; }
body.light .quote-view .group-dropdown-item:hover{ background:rgba(0,0,0,.06)!important; color:#1a1a18!important; }

/* email builder in light mode */
body.light .quote-view .email-panel{ background:#fff!important; border-color:rgba(0,0,0,.12)!important; }
body.light .quote-view .email-tick,
body.light .quote-view .email-tick-all,
body.light .quote-view .email-tick-oneoff{ color:#1a1a18!important; }
body.light .quote-view .email-add-btn,
body.light .quote-view .email-price-edit{ color:#1a1a18!important; border-color:rgba(0,0,0,.2)!important; }
body.light .quote-view .email-preview{ background:#fff!important; border-color:rgba(0,0,0,.12)!important; }

/* ---------- PRINT ---------- */
@media print{
  /* the printed quote renders in LIGHT mode — totals must stay legible on paper */
  .markup-total-row, .lab-total-row{
    background:#f0f0ee!important;
    border-top:2px solid var(--accent)!important;
  }
  .lab-total-row span.labour-total-label,
  .lab-total-row span.labour-total-value,
  .markup-total-label, .markup-total-value{ color:#1a1a18!important; }

  /* every interactive control is hidden on paper anyway — belt and braces */
  .hdr-addbtn, .group-dropdown, .btn-lime, .csv-btn, .csv-addbtn,
  .fx-menubtn, .fx-addbtn, .pp-add, .qv-back{ display:none!important; }
}

/* ============================================================
   [018700] LABOUR SUB-ROWS
   A parent with sub-activities becomes a SUBTOTAL HEADER: it owns no qty/rate, and its figures
   are rolled up from its children. Those derived figures use --info (blue) — the colour this
   app already uses for measured/derived values (take-off measure pills), never for a typed one.
   The row highlight stays lime, so "this row is active" and "this figure is derived" remain two
   separate signals.
   ============================================================ */
/* [018900] SPECIFICITY: the labour table is a .tbl inside .page-card, so
   `.quote-view .page-card .tbl td{color:var(--text)}` (0-3-1) and the 8px size rule
   `... tbody tr:not():not():not() td` (0-6-3) both out-rank a plain class selector — which is
   why the blue and the weight silently didn't land first time. Same trap the "rates won't grey"
   fix hit. These are written as `.tbl td.x` (0-3-1) for colour/weight, and the size uses
   !important to clear the 0-6-3 rule, matching how padding is already handled in this file. */
/* (subtotal sizing/colour now defined in the [019000] block at the end of this file) */
/* the summed qty reuses the stepper's value box, so it inherits the same 11px + centring as
   every other qty in the column (it was rendering at the table's 8px and sitting off-line) */

/* the per-child remove control */
.quote-view .lab-day-btn.lab-kid-rm{font-size:11px;line-height:1}
.quote-view .lab-display-row:hover .lab-kid-rm{opacity:1;color:var(--danger)}
/* locked stepper on a subtotal header's edit row */
.quote-view .qty-stepper-locked{opacity:.4;pointer-events:none}
/* print: derived figures go black like everything else, but keep their weight */
@media print{
  .quote-view .lab-subtotal-qty,.quote-view .lab-subtotal-tot{color:#1a1a18!important;font-weight:700!important}
  .quote-view .tbl td.lab-subtotal-qty .lab-qty-val{color:#1a1a18!important;font-weight:700!important}
  /* [018900] 0-qty labour rows were PRINTING dark: `.page-card .tbl td{color:#1a1a18!important}`
     earlier in this block forces every cell dark and beat `.lab-display-val.zero`. Restore the
     grey so an unpriced/zero row reads as inactive on paper, same as it does on screen. */
  .quote-view .page-card .tbl td.lab-display-val.zero{color:#8a8a8a!important}
  .quote-view .page-card .tbl td.lab-display-val.zero .lab-qty-val{color:#8a8a8a!important}
}

/* ============================================================
   [018900] LIGHT-MODE AUDIT — quote view
   A number of controls hardcode color:#fff. In dark mode that's correct; in light mode they sit
   on white or near-white and vanish. Dane works in light mode all day, so each of these now has
   a light counterpart. (Rules that already had a body.light override are left alone.)
   ============================================================ */

/* the qty and sub-row steppers: their hover state went white -> invisible on a white row.
   These are the "white circles" that show against the labour rows. */
body.light .quote-view .lab-qty-btn{color:#666;border-color:#bbb}
body.light .quote-view .lab-display-row:hover .lab-qty-btn{color:#1a1a18;border-color:#666}
body.light .quote-view .lab-day-btn{color:#666;border-color:#bbb}
body.light .quote-view .lab-display-row:hover .lab-day-btn{color:#1a1a18;border-color:#666}
body.light .quote-view .lab-day-plus:hover{border-color:var(--accent);color:var(--accent)}
body.light .quote-view .lab-day-btn.lab-kid-rm:hover{border-color:var(--danger);color:var(--danger)}

/* transparent-background buttons that relied on white text */
body.light .quote-view .btn-add-item{color:#1a1a18;border-color:#bbb}
body.light .quote-view .btn-add-item:hover{border-color:#1a1a18}
body.light .quote-view .row-del-btn,
body.light .quote-view .group-del-btn,
body.light .quote-view .group-add-row-btn,
body.light .quote-view .section-add-group-btn,
body.light .quote-view .section-reset-btn{color:#1a1a18;border-color:#bbb}

/* reminder chip: pale blue text on a pale blue wash is unreadable on white */
body.light .quote-view .email-reminder-chip{color:#1a5fbf;background:rgba(26,95,191,0.07);border-color:rgba(26,95,191,0.25)}
body.light .quote-view .email-reminder-chip .sec-type{color:#1a5fbf}

/* [018900] section-type pills (PIERS / FOOTINGS / SLAB …). Their colour is set inline from JS,
   so this needs !important to win. Coloured text on a pale coloured pill was washing out. */
body.light .quote-view .section-chip .chip-type-pill{color:#1a1a18!important}

/* ============================================================
   [019200] LABOUR PANEL — grouped rows
   Two separate signals, deliberately not overlapping:
     BACKGROUND  = "this row carries data"  -> standard rows AND the sub-group heading
     LEFT LINE   = "this row belongs to the heading above" -> sub-ROWS only
   The heading therefore gets the background but no line; its children get the line but no
   background. Both blues are full --info; only the background stays a tint, because a solid
   blue behind text is unreadable.
   ============================================================ */

/* --- BACKGROUND: rows with data, plus the sub-group heading. Never the sub-rows. --- */
.quote-view .lab-row-has-value td{background:rgba(77,166,255,.10)!important}
body.light .quote-view .lab-row-has-value td{background:rgba(26,95,191,.10)!important}
.quote-view .tbl tr.lab-child-row td{background:transparent!important}

/* --- LEFT LINE: sub-rows only. Standard rows and the heading carry none. --- */
.quote-view .lab-row-has-value td:first-child{border-left:2px solid transparent!important}
.quote-view .tbl tr.lab-subtotal-row td:first-child{border-left:2px solid transparent!important}

/* --- GROUP HEADINGS (LABOUR / CONCRETE / …): same height as a data row, full --info, and the
       rule DRAWN rather than a border — border-collapse merges an equal-width border away. --- */
.quote-view .lab-group-b3 td{
  padding:9px 6px 3px!important;   /* 3 + 6px of space above */
  color:var(--info)!important;
  position:relative;
}
/* [019400] no rule above the heading — 6px of space does the separating instead
   (a <td> can't take a margin, so this is padding on the cell) */
/* delete control is absolutely positioned: a float inside a td grows the cell and was
   inflating these rows, dumping the slack below the text */
.quote-view .lab-group-del{
  position:absolute;right:6px;top:50%;transform:translateY(-50%);
  opacity:0;padding:0 5px!important;font-size:9px!important;line-height:1.3!important;
  transition:opacity .12s;
}
.quote-view .lab-group-b3:hover .lab-group-del{opacity:1}
.quote-view .lab-group-title-editable{cursor:pointer}

/* --- SUBTOTAL HEADER: bold, no colour. The QTY takes the STANDARD qty styling with nothing
       overridden — the standard is 9px Inter (set further up at the second .lab-qty-val rule,
       which supersedes the older 11px monospace one). Forcing 8px mono here made it both
       smaller and the wrong family. Only weight differs. --- */
.quote-view .tbl td.lab-subtotal-desc{font-weight:600;font-size:8px!important}
.quote-view .tbl td.lab-subtotal-tot{font-weight:700;font-size:8px!important;color:var(--text)}
.quote-view .tbl td.lab-subtotal-qty{font-weight:700;color:var(--text)}
.quote-view .tbl td.lab-subtotal-qty .lab-qty-val{color:var(--text);font-weight:700}

/* --- sub-rows carry no left line --- */
.quote-view .tbl tr.lab-child-row td:first-child{border-left:2px solid transparent!important}

/* --- sub-rows sit one step below the standard qty size, so a group's children read as
       supporting detail rather than competing with the rows around them. Scoped to
       .lab-child-row, so it only applies once a row is made a child — the global qty
       size (9px) is untouched. --- */
.quote-view .tbl tr.lab-child-row td.num .lab-qty-val{font-size:8px!important}

/* print: no screen blocking on paper */
@media print{
  .quote-view .lab-row-has-value td{background:#f0f0ee!important}
  .quote-view .tbl tr.lab-child-row td{background:transparent!important}

  .quote-view .lab-group-b3 td{color:#1a1a18!important}
  .quote-view .lab-group-del{display:none!important}
}

/* ============================================================
   [019500] 0-qty rows: the DESCRIPTION greys with the qty and total.
   This needs unusually high specificity because of an existing rule:
       .quote-view .page-card .tbl tbody tr td:first-child{color:var(--text)}   (0,4,3)
   which forces EVERY first cell bright and was silently beating
       .quote-view .tbl td.lab-display-val.zero                                 (0,4,1)
   so the description could never grey no matter what was declared. These two are
   (0,6,3) and (0,7,4) respectively, so they clear it without !important.
   ============================================================ */
.quote-view .page-card .tbl tbody tr td:first-child.lab-display-val.zero{color:var(--text-dim)}
body.light .quote-view .page-card .tbl tbody tr td:first-child.lab-display-val.zero{color:var(--text-dim)}

/* ============================================================
   [019700] CHILD ROWS — indent + tree elbow
   Child rows were never actually indented: the winning rule is
       .quote-view .lab-display-row td:first-child{padding-left:16px!important}   (0,3,1)
   which beats the intended
       .quote-view .lab-display-row .lab-day-desc{padding-left:28px!important}    (0,3,0)
   so a child sat at exactly the same x as its parent and there was no room to draw
   anything. The rules below are (0,4,2), so they clear it.
   The elbow replaces the bullet: a spine dropping from the parent with a short branch
   into each child, and the spine stopping halfway down the LAST child so the group
   visibly closes rather than trailing off.
   ============================================================ */
.quote-view .tbl tr.lab-child-row td:first-child{
  padding-left:36px!important;
  position:relative;
}
/* the elbow does the bullet's job now */
.quote-view .tbl tr.lab-child-row .lab-day-dot{display:none}

/* vertical spine */
.quote-view .tbl tr.lab-child-row td:first-child::before{
  content:"";position:absolute;left:20px;top:0;bottom:0;width:1px;
  background:var(--info);opacity:.6;pointer-events:none;
}
/* last child: stop halfway, so the branch closes the group */
.quote-view .tbl tr.lab-child-last td:first-child::before{bottom:50%}

/* horizontal branch into the child's text */
.quote-view .tbl tr.lab-child-row td:first-child::after{
  content:"";position:absolute;left:20px;top:50%;width:10px;height:1px;
  background:var(--info);opacity:.6;pointer-events:none;
}

@media print{
  /* keep the structure on paper but in ink, not colour */
  .quote-view .tbl tr.lab-child-row td:first-child::before,
  .quote-view .tbl tr.lab-child-row td:first-child::after{background:#999!important;opacity:1!important}
}

/* [020000] TEXT RATE — a labour rate that's a word (SUB, TBC…) rather than a number.
   Shows blue so it reads as "flagged, not a dollar figure"; the row highlights as populated
   and contributes $0 to totals. */
.quote-view .lab-rate-text{color:var(--info);font-weight:700;font-family:var(--font);font-size:9px;letter-spacing:.02em}
.quote-view .lab-rate-input.is-text{color:var(--info);font-weight:700;text-align:left}
@media print{ .quote-view .lab-rate-text{color:#1a1a18!important} }

/* [020000] TAKE-OFF COMPACT — collapse to section + group headers only. Screen aid; not printed. */
.quote-view .takeoff-compact .tbl-item-row{display:none}
.quote-view .takeoff-compact .sec-check-row{display:none}
.quote-view .takeoff-compact .group-add-row-btn{display:none}
.quote-view .tk-compact-btn.on{background:var(--info);border-color:var(--info);color:#fff}
.quote-view .lab-compact-btn.on{background:var(--info);border-color:var(--info);color:#fff}
.quote-view .tk-compact-btn svg{width:12px;height:12px;display:block}

/* [020100] labour within-group drag grip — absolutely placed in the first cell, no extra column */
.quote-view .lab-display-row .lab-day-desc,
.quote-view .lab-display-row td:first-child{position:relative}
.quote-view .lab-drag-grip{
  position:absolute;left:2px;top:50%;transform:translateY(-50%);
  cursor:grab;color:var(--text-dim);font-size:11px;line-height:1;opacity:0;
  transition:opacity .12s;user-select:none;touch-action:none;padding:0 2px;z-index:2;
}
.quote-view .lab-display-row:hover .lab-drag-grip{opacity:.65}
.quote-view .lab-drag-grip:hover{color:var(--info);opacity:1}
.quote-view .lab-drag-grip:active{cursor:grabbing}
.quote-view .lab-row-dragging{opacity:.5;background:rgba(77,166,255,.08)}
.quote-view .lab-drop-target td{box-shadow:inset 0 2px 0 var(--info)}

/* [020100] PRICING AUTOCOMPLETE — body-portal menu (fixed, above everything) */
.pricing-ac-menu-portal{
  position:fixed;z-index:99999;background:var(--dark-2,#1e1e1e);
  border:1px solid var(--border-md,rgba(255,255,255,.15));border-radius:8px;
  box-shadow:0 8px 28px rgba(0,0,0,.55);overflow:hidden;max-width:340px;
}
body.light .pricing-ac-menu-portal{background:#fff;box-shadow:0 8px 28px rgba(0,0,0,.16)}
.pricing-ac-menu-portal .pac-scroll{max-height:230px;overflow-y:auto}
.pricing-ac-menu-portal .pac-item{display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:center;
  padding:8px 11px;cursor:pointer;border-bottom:1px solid var(--border,rgba(255,255,255,.08));font-size:12px}
.pricing-ac-menu-portal .pac-item:last-child{border-bottom:none}
.pricing-ac-menu-portal .pac-item.active,.pricing-ac-menu-portal .pac-item:hover{background:var(--dark-3,#272727)}
body.light .pricing-ac-menu-portal .pac-item.active,body.light .pricing-ac-menu-portal .pac-item:hover{background:#eef3fb}
.pricing-ac-menu-portal .pac-desc{color:var(--text,#f0f0f0);text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pricing-ac-menu-portal .pac-desc b{color:var(--accent,#d4fc00);font-weight:800}
body.light .pricing-ac-menu-portal .pac-desc b{color:var(--info,#1a5fbf)}
.pricing-ac-menu-portal .pac-unit{color:var(--text-muted,#999);font-family:var(--font-mono);font-size:11px;justify-self:end}
.pricing-ac-menu-portal .pac-rate{color:var(--text,#f0f0f0);font-family:var(--font-mono);font-size:11px;font-weight:700;justify-self:end;min-width:52px;text-align:right}
.pricing-ac-menu-portal .pac-none{padding:9px 11px;font-size:11px;color:var(--text-muted,#999);display:flex;align-items:center;gap:7px}
.pricing-ac-menu-portal .pac-none .pac-plus{color:var(--accent,#d4fc00);font-weight:800}
.pricing-ac-menu-portal .pac-foot{padding:5px 11px;font-size:9px;color:var(--text-dim,#555);border-top:1px solid var(--border,rgba(255,255,255,.08));display:flex;gap:14px;background:var(--dark,#141414)}
body.light .pricing-ac-menu-portal .pac-foot{background:#f7f7f5}
.pricing-ac-menu-portal .pac-foot kbd{font-family:var(--font-mono);background:var(--dark-3,#272727);padding:0 4px;border-radius:3px;color:var(--text-muted,#999)}
body.light .pricing-ac-menu-portal .pac-foot kbd{background:#e8e8e6}
@media print{ .pricing-ac-menu-portal{display:none!important} }

/* [020200] take-off header controls grouped on the right (compact toggle + the + button) */
.quote-view .tk-ctrl-group{margin-left:auto;display:inline-flex;align-items:center;gap:6px;flex-shrink:0}
.quote-view .tk-ctrl-group .hdr-addbtn{margin-left:0}

/* [020500] section reorder grip — left of the section header, hover-reveal */
.quote-view .section-card-header{position:relative}
.quote-view .sec-drag-grip{
  cursor:grab;color:var(--text-dim);font-size:12px;line-height:1;margin-right:4px;
  opacity:0;transition:opacity .12s;user-select:none;touch-action:none;flex-shrink:0;
}
.quote-view .section-card-header:hover .sec-drag-grip{opacity:.6}
.quote-view .sec-drag-grip:hover{color:var(--info);opacity:1}
.quote-view .sec-drag-grip:active{cursor:grabbing}
.quote-view .sec-card-dragging{opacity:.5}
.quote-view .sec-drop-target > .section-card-header{box-shadow:inset 0 2px 0 var(--info)}

/* [020500] light-mode pills are handled inline via getTypeColorThemed (solid fill + white text) */

/* ===== [044500] QUOTE EMAIL BUILDER — reorder grips, padding, ordered tick lists =====
   ⚠ NOTE FOR NEXT TIME: the .email-* block above this is DUPLICATED VERBATIM in this file
   (once around the print overrides, once under its own header). These rules are appended at
   the end so they win by cascade over both copies. Worth deleting the stray copy properly. */
.quote-view .email-builder{ gap:22px; }
.quote-view .email-builder-left{ gap:16px; }
.quote-view .email-panel{ padding:16px 18px; }
.quote-view .email-panel h3{ margin:0 0 12px; }
#qv-email-card .fxm-body{ padding:8px 34px 30px 40px; }
.quote-view .email-preview{ padding:16px 18px; }

/* chosen list = the printed order, each row draggable by its grip */
.quote-view .email-tick-list{ display:flex; flex-direction:column; }
.quote-view .email-tick-row{ display:flex; align-items:center; gap:8px; padding:5px 4px; border-radius:5px; position:relative; }
.quote-view .email-tick-row:hover{ background:rgba(255,255,255,.035); }
.quote-view .email-tick-lbl{ flex:1 1 auto; min-width:0; }
.quote-view .email-grip{ flex:0 0 12px; width:12px; text-align:center; cursor:grab; color:#4a4a4a; font-size:12px; letter-spacing:-2px; user-select:none; }
.quote-view .email-grip:active{ cursor:grabbing; }
.quote-view .email-tick-row:hover .email-grip{ color:var(--text-muted); }
.quote-view .email-grip-blank{ cursor:default; }
.quote-view .email-dragging{ opacity:.45; }
.quote-view .email-drop-above{ box-shadow:inset 0 2px 0 0 var(--accent); }
.quote-view .email-drop-below{ box-shadow:inset 0 -2px 0 0 var(--accent); }

/* unticked library items sit below, visibly secondary */
.quote-view .email-avail-hd{ font-size:8.5px; text-transform:uppercase; letter-spacing:.12em; color:var(--text-muted); margin:10px 0 3px 4px; }
.quote-view .email-tick-avail{ cursor:pointer; }
.quote-view .email-tick-avail .email-tick-lbl{ color:var(--text-muted); }
.quote-view .email-tick-avail:hover .email-tick-lbl{ color:#ccc; }

/* [052000] Document / Email toggle + the scaled A4 preview inside the quote modal.
   The document preview renders a real 794px .qd-page, then scales it down with a transform so
   it fits the pane — that way the preview and the print are literally the same DOM, not two
   renderings that can drift. */
.quote-view .email-modetabs{display:flex;background:var(--dark-2);border:1px solid var(--border-md);border-radius:6px;padding:2px;gap:2px}
.quote-view .email-modetab{font-size:11px;font-family:inherit;padding:5px 14px;border-radius:4px;border:none;background:transparent;color:var(--text-muted);cursor:pointer}
.quote-view .email-modetab:hover{color:var(--text)}
.quote-view .email-modetab.active{background:#2b7fff;color:#fff;font-weight:600}
.quote-view .email-docprev{background:var(--dark-2);border:1px solid var(--border-md);border-radius:8px;padding:14px;overflow:hidden}
.quote-view .email-docprev .qd-page{
  box-shadow:0 4px 24px rgba(0,0,0,.4);margin:0;
  /* transform + transform-origin + margin-bottom are set by qdFitPreview() in quotedoc.js,
     measured against the actual pane width. A hardcoded scale never matched the output. */
}
.quote-view .email-docprev .qd-pagenum{display:none}

/* ===== [054000] ⚠ THE .quote-view UNIVERSAL RESET — READ BEFORE ADDING STYLES =====
   Line 9 of this file is:
       .quote-view *, .quote-view *::before, .quote-view *::after{...margin:0;padding:0}
   `*` contributes ZERO specificity, so `.quote-view *` scores the same (0,1,0) as a plain
   single-class rule — and this file loads AFTER app.css, so it WINS every tie. Any padding or
   margin declared on a single class in app.css is silently flattened inside .quote-view.

   #qv-email-card carries .quote-view (the Files modal does not) — which is why the Files modal
   header looked right and this one had its title jammed into the corner, and why the document
   PREVIEW lost all its page padding while the printed document (rendered in an overlay appended
   to <body>, outside .quote-view) was correct.

   That's also why every pre-existing rule here is written `.quote-view .email-panel{...}` — the
   extra class buys (0,2,0) and beats the reset. New rules must do the same, or be scoped to an
   id. Below: restore the modal chrome and the quote document's spacing. */

#qv-email-card .fxm-head{padding:24px 30px 16px 40px}
#qv-email-card .fxm-title{gap:12px}
#qv-email-card .jp-closebtn{margin-left:2px}

.quote-view .qd-pad{padding:50px 58px}
.quote-view .qd-hd{padding-bottom:18px}
.quote-view .qd-eyebrow{margin-bottom:6px}
.quote-view .qd-sub{margin-top:5px}
.quote-view .qd-date{margin-top:10px}
.quote-view .qd-sec{margin-bottom:8px}
.quote-view .qd-scope{margin-top:26px}
.quote-view .qd-ie{margin-top:33px}
.quote-view .qd-iehd{padding-bottom:5px;margin-bottom:9px}
.quote-view ul.qd-iel li{padding:2px 0 2px 15px}
.quote-view .qd-price{padding:22px 0;margin-top:33px}
.quote-view .qd-plbl{margin-bottom:8px}
.quote-view .qd-pgst{margin-left:8px}
.quote-view .qd-accept{margin-top:11px}
.quote-view .qd-terms{padding-top:28px}
.quote-view .qd-termshd{padding-bottom:5px;margin-bottom:8px}
.quote-view .qd-term{padding:0 0 4px 13px}
.quote-view .qd-conthd{padding-bottom:14px;margin-bottom:20px}

/* [055000] — remember the .quote-view * reset above: these need the extra class to survive */
.quote-view .qd-notes{margin-top:20px}
.quote-view .qd-notes-body{font-size:11px;line-height:1.55;color:#666}

/* scope/notes textareas grow instead of scrolling; the wand sits on the field's label row */
.quote-view .email-field{overflow:hidden;resize:none;min-height:44px}
.quote-view .email-field-hd{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:5px}
.quote-view .email-field-hd .email-field-lbl{margin-bottom:0}
.quote-view .email-wand{flex:0 0 auto;width:26px;height:22px;display:flex;align-items:center;justify-content:center;border-radius:5px;border:1px solid var(--border-md);background:transparent;color:var(--text-muted);cursor:pointer;font-size:13px;padding:0}
.quote-view .email-wand:hover{color:var(--accent);border-color:var(--accent)}
.quote-view .email-wand.busy{opacity:.5;cursor:default}
.quote-view .email-wand.busy i{animation:qdWandSpin 1s linear infinite}
@keyframes qdWandSpin{to{transform:rotate(360deg)}}
.quote-view .email-wand-undo{display:flex;align-items:center;gap:9px;margin-top:6px;font-size:10.5px;color:var(--text-muted)}
.quote-view .email-undo-btn{background:none;border:none;color:var(--accent);font-size:10.5px;font-family:inherit;cursor:pointer;text-decoration:underline;padding:0}

/* [056000] ⚠ the .quote-view * reset again — it ate margin-top:auto, which is why the terms sat
   under the price in the PREVIEW but at the foot of the printed page. Restore it explicitly. */
.quote-view .qd-terms{margin-top:auto;padding-top:28px}
.quote-view .qd-notes{margin-top:20px}
.quote-view .qd-eyedate{margin-left:10px;padding-left:10px}
.quote-view ul.qd-rich-list{margin:5px 0 0;padding:0}
.quote-view ul.qd-rich-list li{padding:2px 0 2px 14px}
.quote-view .qd-rich-line + ul.qd-rich-list{margin-top:7px}
