/* ATiQ build: build-021700 */
:root{ --atiq-build:'058500'; }
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --cardh:132px;--maxw:1680px;--font:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --page:#141414;--card:#1e1e1e;--card-bd:rgba(255,255,255,.15);--card-hover:#d4fc00;
  --tprimary:#f2f2f2;--tsec:#9a9a9a;--tmut:#6a6a6a;--place:#5f5f5f;
  --value:#d4fc00;--divider:rgba(255,255,255,.08);--nav:#1a1a1a;--nav-bd:rgba(255,255,255,.07);--strip:#111;
  --pill-com:#6f9fd8;--pill-dom:#b28fd6;
  --chip-ok-bg:#242424;--chip-ok-tx:#9a9a9a;--chip-urg-bg:rgba(224,82,82,.16);--chip-urg-tx:#e0736f;--stale:#e0736f;
  --countpill-bg:#242424;--countpill-tx:#c9c9c9;--flag-off:#666;--well:#242424;--well-bd:rgba(255,255,255,.1);
  --compact:#191919;--compact-bd:rgba(255,255,255,.1);--teal:#4bb3a8;--ring:#ffffff;--sb:rgba(255,255,255,.16);--sb-hover:rgba(255,255,255,.28);
}
body.light{
  --page:#f0efed;--card:#ffffff;--card-bd:rgba(0,0,0,.13);--card-hover:#8FB800;
  --tprimary:#1a1a18;--tsec:#6b6860;--tmut:#9a9895;--place:#a8a5a0;
  --value:#8FB800;--divider:rgba(0,0,0,.07);--nav:#ffffff;--nav-bd:rgba(0,0,0,.08);--strip:#e6e4df;
  --pill-com:#3f6fa8;--pill-dom:#8a5fb0;
  --chip-ok-bg:#eeece7;--chip-ok-tx:#6b6860;--chip-urg-bg:#f7dedd;--chip-urg-tx:#b82020;--stale:#b82020;
  --countpill-bg:#e2e0dc;--countpill-tx:#5a5855;--flag-off:#b5b2ac;--well:#f5f5f3;--well-bd:rgba(0,0,0,.1);
  --compact:#e9e7e2;--compact-bd:rgba(0,0,0,.1);--teal:#2f8f85;--ring:#1a1a18;--sb:rgba(0,0,0,.16);--sb-hover:rgba(0,0,0,.30);
}
html{height:100%}
body{font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;font-size:13px;color:var(--tprimary);background:var(--page);height:100vh;display:flex;flex-direction:column;overflow:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
/* In quote mode, release the fixed viewport so the whole page scrolls naturally (fixes drag + stray scrollbar) */
body.quoting{height:auto;min-height:100vh;overflow:visible}
body.dragging-active{user-select:none;cursor:grabbing;overflow-x:hidden;overflow-y:hidden}
.inner{max-width:var(--maxw);margin:0 auto;padding:0 24px;width:100%}
.app-header{background:#0a0a0a;border-bottom:1px solid rgba(255,255,255,.06)}
.app-header .inner{height:66px;display:flex;align-items:center;justify-content:space-between}
.brand img{height:38px;display:block}
.brand-name{font-size:30px;font-weight:800;color:#f0f0f0;letter-spacing:-.04em;line-height:1;display:flex;align-items:baseline;gap:9px}
.brand-name .iq{color:#d4fc00}.brand-name .sub{font-weight:300;font-size:25px;opacity:.68}
.login-email{font-size:11px;color:var(--tmut)}
.signout{font-size:11px;color:var(--tsec);background:none;border:1px solid var(--card-bd);border-radius:5px;padding:3px 10px;cursor:pointer;font-family:inherit}
.nav{background:var(--strip);border-bottom:1px solid var(--nav-bd);box-shadow:0 1px 0 rgba(0,0,0,.2)}
.nav .inner{display:flex;align-items:center;gap:2px}
.nav-sp{flex:1}
.nav-user{display:flex;align-items:center;gap:10px;margin-left:14px}
.nav-user .login-email{font-size:11px;color:var(--tmut)}
.nav .signout{font-size:11px;color:var(--tsec);background:none;border:1px solid var(--card-bd);border-radius:5px;padding:3px 10px;cursor:pointer;font-family:inherit}
.nav .signout:hover{color:var(--tprimary)}
.nav-tab{position:relative;padding:11px 20px;font-size:13px;font-weight:500;cursor:pointer;border:none;background:none;color:var(--tmut);font-family:var(--font);margin-bottom:-1px;transition:color 0.15s}
.nav-tab::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--value);transform:scaleX(0);transform-origin:left center;transition:transform 0.25s ease}
.nav-tab:hover{color:var(--tprimary)}
.nav-tab:hover::after{transform:scaleX(1)}
.nav-tab.active{color:var(--value);font-weight:600}
.nav-tab.active::after{transform:scaleX(1)}
body.light .nav-tab.active{color:var(--tprimary)}
.nav .sp{flex:1}
.sync{font-size:11px;color:var(--tmut);margin-left:16px;transition:opacity .5s;opacity:1}
.sync.fade{opacity:0}
.sync.err{color:#e05252;opacity:1!important;font-weight:600}
.sync.syncing{color:var(--tmut)}
.sync.syncing{color:#f5a623}.sync.synced{color:#4caf50}.sync.err{color:#e05252;font-weight:600}
.err-banner{display:none;max-width:var(--maxw);margin:12px auto 0;padding:12px 24px;background:rgba(224,82,82,.12);border:1px solid rgba(224,82,82,.35);border-radius:8px;color:#e0736f;font-size:12px}
.err-banner.show{display:block}
.control-row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 0 14px 13px}
.control-row .pipe-strip{margin-left:auto}
.controls-left{display:flex;align-items:center;gap:12px}
.pipe-strip{display:flex;align-items:center;gap:20px;flex-wrap:nowrap;flex-shrink:0}
.pipe-stat{display:flex;align-items:baseline;gap:6px}
.pipe-label{font-size:11px;font-weight:600;letter-spacing:.02em;color:var(--tmut)}
.pipe-val{font-size:14px;font-weight:700;letter-spacing:-.01em;font-family:'SFMono-Regular',monospace;color:var(--tprimary)}
.pipe-val.lime{color:var(--value)}
.controls-right{display:flex;align-items:center;gap:12px;flex-shrink:0}
.search{display:flex;align-items:center;gap:8px;padding:7px 4px;background:none;border:none;border-radius:0;max-width:280px}
.search svg{width:14px;height:14px;color:var(--tmut);flex-shrink:0}
.search input{background:none;border:none;outline:none;color:var(--tprimary);font-size:13px;font-family:var(--font);flex:1;padding:2px 0;width:230px}
.search input::placeholder{color:var(--tmut)}
.new-job{display:inline-flex;align-items:center;gap:4px;background:var(--value);color:#000;border:1px solid var(--value);border-radius:7px;padding:6px 11px;font-size:11px;font-weight:700;font-family:inherit;cursor:pointer;white-space:nowrap;transition:color .15s,background .15s}
.new-job:hover{color:#fff;background:#3a3a38;border-color:#3a3a38}
.board-wrap{flex:1;min-height:0;overflow-x:auto;overflow-y:hidden;padding-bottom:14px;scrollbar-width:thin;scrollbar-color:transparent transparent;transition:scrollbar-color .2s}
.board-wrap:hover{scrollbar-color:var(--sb) transparent}
.board-wrap::-webkit-scrollbar{height:8px}
.board-wrap::-webkit-scrollbar-track{background:transparent}
.board-wrap::-webkit-scrollbar-thumb{background:transparent;border-radius:8px;border:2px solid transparent;background-clip:padding-box;transition:background .2s}
.board-wrap:hover::-webkit-scrollbar-thumb{background:var(--sb);background-clip:padding-box}
.board-wrap::-webkit-scrollbar-thumb:hover{background:var(--sb-hover);background-clip:padding-box}
.board{display:flex;gap:9px;align-items:stretch;justify-content:flex-start;min-width:min-content;height:100%}
.col{flex:1 1 215px;min-width:200px;max-width:260px;display:flex;flex-direction:column;min-height:0}

.col-head{display:flex;align-items:center;gap:7px;padding:2px 3px 12px 13px;white-space:nowrap;position:relative}
.col-name{font-size:11px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--col);overflow:hidden;text-overflow:ellipsis}
.col-count{font-size:10px;font-weight:700;padding:1px 8px;border-radius:20px;background:var(--countpill-bg);color:var(--countpill-tx);flex-shrink:0}
.col-sum{font-size:11px;font-weight:600;color:var(--tmut)}
.hd-ctrl{margin-left:auto;flex-shrink:0;position:relative}
.hd-btn{background:none;border:1px solid transparent;color:var(--tmut);cursor:pointer;font-size:14px;padding:3px 5px;display:flex;border-radius:6px;transition:all .15s}
.hd-btn:hover{color:var(--tprimary);background:var(--well)}
.hd-btn.active{color:var(--value);border-color:var(--value)}
.hd-btn.onwhite{background:none;border-color:transparent;color:var(--tmut)}
.hd-btn.onwhite:hover{background:var(--well);color:var(--tprimary)}
.sort-menu{position:absolute;top:26px;right:0;background:var(--card);border:1px solid var(--card-bd);border-radius:8px;padding:4px;min-width:150px;z-index:30;display:none;box-shadow:0 8px 24px rgba(0,0,0,.4)}
.sort-menu.open{display:block}
.sort-menu button{display:flex;align-items:center;justify-content:space-between;width:100%;background:none;border:none;color:var(--tsec);font-family:inherit;font-size:12px;padding:7px 9px;border-radius:5px;cursor:pointer;text-align:left}
.sort-menu button:hover{background:var(--well);color:var(--tprimary)}
.sort-menu button.sel{color:var(--value)}
.sort-menu i{font-size:13px}
.lane{position:relative;padding-left:13px;flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:transparent transparent;transition:scrollbar-color .2s}
.lane:hover{scrollbar-color:var(--sb) transparent}
.lane::-webkit-scrollbar{width:8px}
.lane::-webkit-scrollbar-track{background:transparent}
.lane::-webkit-scrollbar-thumb{background:transparent;border-radius:8px;border:2px solid transparent;background-clip:padding-box;transition:background .2s}
.lane:hover::-webkit-scrollbar-thumb{background:var(--sb);background-clip:padding-box}
.lane::-webkit-scrollbar-thumb:hover{background:var(--sb-hover);background-clip:padding-box}
.spine{position:absolute;left:0;top:0;width:3px;height:var(--cardh);border-radius:2px;background:var(--col);transition:box-shadow .2s,height .3s cubic-bezier(.2,.85,.3,1)}
.col.drag-over .spine{box-shadow:0 0 10px 1px var(--col)}
.drop-zone{display:flex;flex-direction:column;gap:9px;min-height:60px;border-radius:8px;transition:background .2s;padding-bottom:8px}
.col.drag-over:not(.compact) .drop-zone{background:rgba(212,252,0,.04)}
body.light .col.drag-over:not(.compact) .drop-zone{background:rgba(143,184,0,.08)}
.drop-empty{border:1px dashed var(--card-bd);border-radius:10px;padding:18px 8px;text-align:center;font-size:10px;color:var(--tmut);font-style:italic}
.card{position:relative;height:var(--cardh);background:var(--card);border:1px solid color-mix(in srgb,var(--col) 40%,transparent);border-radius:11px;padding:11px 12px;cursor:grab;display:flex;flex-direction:column;overflow:hidden;touch-action:none;transition:border-color .15s,box-shadow .15s}
.card:hover{border-color:var(--col);box-shadow:0 0 0 1px var(--col), 0 0 16px 1px color-mix(in srgb,var(--col) 45%,transparent)}
.card:has(.c-val.hasquote:hover){border-color:var(--card-bd);box-shadow:none}
/* flagged cards: no border — the beer icon marks it */

.card.drag-source{background:transparent;border:1.5px dashed var(--card-hover);box-shadow:none}
.card.drag-source>*{opacity:0}
.drag-clone{position:fixed;left:0;top:0;z-index:200;pointer-events:none;margin:0;cursor:grabbing;box-shadow:0 3px 10px rgba(0,0,0,.3);transition:box-shadow .28s ease;will-change:transform}
.drag-clone.lifted{box-shadow:0 24px 54px rgba(0,0,0,.55)}
body.light .drag-clone.lifted{box-shadow:0 24px 54px rgba(0,0,0,.22)}
.c-title{font-size:14px;font-weight:700;line-height:1.3;color:var(--tprimary);white-space:nowrap;overflow:hidden;position:relative}
.c-title .c-title-inner{display:inline-block;white-space:nowrap;transition:transform .15s}
.c-title::after{content:'';position:absolute;right:0;top:0;bottom:0;width:16px;background:linear-gradient(90deg,transparent,var(--card));pointer-events:none}
.card:hover .c-title::after{opacity:0;transition:opacity .1s}
.c-pillrow{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px}
.c-cpill{font-size:10px;font-weight:600;padding:3px 11px;border-radius:20px;background:transparent;border:1px solid var(--teal);color:var(--teal);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.c-svbadge{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;padding:3px 9px;border-radius:20px;background:rgba(245,166,35,.16);color:#f5a623;border:1px solid rgba(245,166,35,.42);white-space:nowrap}
.c-svbadge i{font-size:11px}
.c-valrow{display:flex;align-items:center;margin-top:auto;padding-top:6px}
.c-valrow-inbox{margin-top:auto;justify-content:flex-end}
.c-val{font-size:17px;font-weight:800;font-family:'SFMono-Regular',monospace;letter-spacing:-.02em;color:var(--value);display:inline-flex;align-items:center;gap:6px}
.c-val.hasquote{cursor:pointer;border-radius:6px;padding:2px 6px;margin:-2px -6px;transition:background .15s,box-shadow .15s}
.c-val.hasquote:hover{background:color-mix(in srgb,var(--value) 12%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--value) 45%,transparent), 0 0 12px 1px color-mix(in srgb,var(--value) 30%,transparent)}
.c-valquote{font-size:17px;opacity:0;transition:opacity .15s,transform .15s;color:var(--value);transform:translateX(-2px)}
.c-val.hasquote:hover .c-valquote{opacity:1;transform:translateX(0)}
.c-place{font-size:11px;font-style:italic;color:var(--place)}
.c-foot{display:flex;align-items:center;gap:8px;margin-top:6px;padding-top:8px;border-top:1px solid var(--divider)}
.duechip{display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:600;padding:3px 7px;border-radius:6px;background:var(--chip-ok-bg);color:var(--chip-ok-tx)}
.duechip.urg,.duechip.red{background:var(--chip-urg-bg);color:var(--chip-urg-tx)}
.duechip.muted{background:transparent;color:var(--tmut);padding-left:0}
.duechip i{font-size:10px}
.c-age{margin-left:auto;font-size:10px;font-weight:600;color:var(--tmut);display:flex;align-items:center;gap:4px}
.c-age.stale{color:var(--stale)}
.c-age .d{width:5px;height:5px;border-radius:50%;background:currentColor}
.c-flag{margin-left:auto;font-size:16px;line-height:1;cursor:pointer;color:var(--flag-off);opacity:.55;z-index:2;flex-shrink:0}
.c-beer{margin-left:auto;font-size:20px;line-height:1;cursor:pointer;color:var(--flag-off);opacity:.5;z-index:2;flex-shrink:0;display:inline-flex;align-items:center;transition:color .15s,opacity .15s}
.c-beer:hover{opacity:.9;color:#e0a854}
.c-beer.on{color:#e0a854;opacity:1}
.c-thumbs{display:inline-flex;gap:8px;margin-left:auto;opacity:0;transition:opacity .15s;z-index:2}
.card:hover .c-thumbs{opacity:1}
.c-thumbs + .c-flag,.c-thumbs + .c-beer{margin-left:10px}
.c-thumb{font-size:17px;font-weight:700;line-height:1;cursor:pointer;color:var(--flag-off);transition:color .15s}
.c-thumb.up:hover{color:#4caf50}
.c-thumb.down:hover{color:#e05252}
.c-flag.on{color:#e05252;opacity:1}
.triage{display:flex;gap:6px;margin-top:auto;padding-top:9px;border-top:1px solid var(--divider)}
.triage button{flex:1;font-size:10px;font-weight:700;font-family:inherit;padding:6px;border-radius:6px;cursor:pointer;border:1px solid var(--well-bd);background:var(--well);color:var(--tsec);display:flex;align-items:center;justify-content:center;gap:4px;z-index:2}
.triage .accept:hover{border-color:var(--value);color:var(--value)}
.triage .dismiss:hover{border-color:#e05252;color:#e05252}
.theme-fab{position:fixed;bottom:20px;right:20px;width:42px;height:42px;border-radius:50%;background:var(--card);border:1px solid var(--card-bd);color:var(--tsec);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px;z-index:60;box-shadow:0 4px 16px rgba(0,0,0,.3)}
.theme-fab:hover{color:var(--tprimary);border-color:var(--card-hover)}
.newjob-fab{position:fixed;bottom:220px;right:20px;width:46px;height:46px;border-radius:50%;background:var(--value);border:none;color:#111;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:400;line-height:1;z-index:61;box-shadow:0 4px 20px rgba(212,252,0,.35);transition:all .15s}
.newjob-fab:hover{filter:brightness(1.06);box-shadow:0 6px 24px rgba(212,252,0,.5)}
.sitevisit-fab{position:fixed;bottom:170px;right:20px;width:42px;height:42px;border-radius:50%;background:var(--card);border:1px solid var(--card-bd);color:var(--tsec);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:19px;z-index:60;box-shadow:0 4px 16px rgba(0,0,0,.3);transition:all .15s}
.sitevisit-fab:hover{color:#f5a623;border-color:#f5a623}
.sitevisit-fab.on{background:#f5a623;border-color:#f5a623;color:#111}
.sitevisit-fab.on:hover{color:#111;filter:brightness(1.06)}
.focus-fab{position:fixed;bottom:120px;right:20px;width:42px;height:42px;border-radius:50%;background:var(--card);border:1px solid var(--card-bd);color:var(--tsec);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:19px;z-index:60;box-shadow:0 4px 16px rgba(0,0,0,.3);transition:all .15s}
.compact-fab{position:fixed;bottom:70px;right:20px;width:42px;height:42px;border-radius:50%;background:var(--card);border:1px solid var(--card-bd);color:var(--tsec);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:19px;z-index:60;box-shadow:0 4px 16px rgba(0,0,0,.3);transition:all .15s}
.compact-fab:hover{color:var(--value);border-color:var(--value)}
.compact-fab.on{background:var(--value);border-color:var(--value);color:#111}
.compact-fab.on:hover{color:#111;filter:brightness(1.06)}

/* ===== Compact view — one line per card; hover smoothly grows it back to the full card =====
   Everything animates on the app's signature easing (same curve the spine/FLIP use). The trick:
   never transition `display` or `height:auto` (they snap). Instead we transition a fixed compact
   height <-> the full --cardh, and cross-fade the two layers with opacity/visibility. */
.c-compactline{
  display:flex;align-items:center;gap:8px;
  position:absolute;left:12px;right:12px;top:50%;transform:translateY(-50%);
  opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .56s cubic-bezier(.2,.85,.3,1);
}
body.compact-cards .card{
  height:44px;
  padding:8px 12px;
  transition:height .8s cubic-bezier(.2,.85,.3,1), padding .8s cubic-bezier(.2,.85,.3,1), border-color .15s, box-shadow .15s;
}
/* full-card content fades out (but keeps its layout) when compact */
body.compact-cards .card > *:not(.c-compactline):not(.spine){
  opacity:0;visibility:hidden;
  transition:opacity .5s cubic-bezier(.2,.85,.3,1);
}
/* the compact line fades in */
body.compact-cards .card .c-compactline{
  opacity:1;visibility:visible;
}
/* hover: grow back to the full card, cross-fade the layers */
body.compact-cards .card:hover{
  height:var(--cardh);
  padding:11px 12px;
}
body.compact-cards .card:hover > *:not(.c-compactline):not(.spine){
  opacity:1;visibility:visible;
  transition:opacity .72s cubic-bezier(.2,.85,.3,1) .16s;
}
body.compact-cards .card:hover .c-compactline{
  opacity:0;visibility:hidden;
}
.cl-flagdot{width:6px;height:6px;border-radius:50%;background:var(--value);flex:0 0 auto}
.c-svpin{color:#f5a623;font-size:13px;margin-right:5px;flex:0 0 auto}
/* [023700] HOLD chip (option F) — red pause-icon chip in the pill row, reason on hover */
.card.held{border-color:color-mix(in srgb,#e0433f 55%,transparent)}
.c-holdchip{position:relative;font-size:10px;font-weight:700;padding:3px 10px 3px 8px;border-radius:20px;background:color-mix(in srgb,#e0433f 16%,transparent);border:1px solid color-mix(in srgb,#e0433f 50%,transparent);color:#ff6b67;display:inline-flex;align-items:center;gap:5px;cursor:default}
.c-holdchip svg{width:12px;height:12px;flex:0 0 auto}
/* fixed-position hold tooltip (appended to body; immune to lane/board overflow clipping) */
.atiq-holdtip{position:fixed;z-index:9999;background:#2a2020;border:1px solid color-mix(in srgb,#e0433f 45%,transparent);color:#f0dede;font-size:11px;font-weight:500;line-height:1.4;padding:8px 11px;border-radius:8px;max-width:240px;white-space:normal;box-shadow:0 8px 24px rgba(0,0,0,.55);pointer-events:none;text-transform:none;letter-spacing:normal}
.atiq-holdtip b{color:#ff6b67;display:block;font-size:9px;text-transform:uppercase;letter-spacing:.06em;margin-bottom:3px}
/* overview hold reason box */
.ov-holdreasonrow{align-items:flex-start!important}
.ov-holdreason-wrap{flex:1;display:flex;flex-direction:column;gap:5px}
.ov-holdreason-lbl{font-size:10px!important;text-transform:uppercase;letter-spacing:.05em;color:var(--tmut)!important}
.ov-holdreason{width:100%;background:var(--dark-2,#151515);border:1px solid var(--card-bd);border-radius:8px;color:var(--tprimary);font-family:inherit;font-size:12px;padding:8px 10px;resize:vertical;min-height:48px}
.ov-holdreason:focus{outline:none;border-color:#e0433f}
.ov-holdtoggle.on{background:#e0433f!important}
.cl-svpin{color:#f5a623;font-size:12px;flex:0 0 auto}
/* spine tracks the card height, in sync with the 800ms compact grow */
body.compact-cards .card .spine{height:44px;transition:box-shadow .2s,height .8s cubic-bezier(.2,.85,.3,1)}
body.compact-cards .card:hover .spine{height:var(--cardh)}
.cl-title{font-size:12px;font-weight:700;color:var(--tprimary);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cl-cpill{font-size:9px;font-weight:600;padding:1px 7px;border-radius:20px;border:1px solid var(--teal);color:var(--teal);white-space:nowrap;flex:0 0 auto;max-width:82px;overflow:hidden;text-overflow:ellipsis}
.cl-date{font-size:10px;font-weight:700;white-space:nowrap;flex:0 0 auto;display:inline-flex;align-items:center;gap:3px}
.cl-date i{font-size:10px}
.cl-due{color:#e2554a}.cl-over{color:#e2554a}.cl-soon{color:#f5a623}.cl-recv{color:var(--tsec)}.cl-sub{color:#97C459}.cl-est{color:#3fb8c4}
.focus-fab:hover{color:#e0a854;border-color:#e0a854}
.focus-fab.on{background:#e0a854;border-color:#e0a854;color:#111}
.focus-fab.on:hover{color:#111;filter:brightness(1.06)}
.scrim{position:fixed;inset:0;background:rgba(0,0,0,.5);opacity:0;pointer-events:none;transition:opacity .2s;z-index:80}
.scrim.open{opacity:1;pointer-events:auto}
.drawer{position:fixed;top:0;right:0;bottom:0;width:420px;max-width:94vw;background:var(--card);border-left:1px solid var(--card-bd);transform:translateX(100%);transition:transform .24s cubic-bezier(.3,.9,.3,1);z-index:81;display:flex;flex-direction:column}
.drawer.open{transform:translateX(0)}
.drawer-head{padding:18px 20px;border-bottom:1px solid var(--divider);display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.drawer-title{font-size:17px;font-weight:700;color:var(--tprimary);line-height:1.3}
.drawer-close{background:none;border:none;color:var(--tmut);font-size:20px;cursor:pointer}
.drawer-body{padding:18px 20px;overflow-y:auto}
.d-row{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--divider);font-size:12.5px}
.d-row .k{color:var(--tmut)}.d-row .v{color:var(--tprimary);font-weight:600;text-align:right}
.d-soon{margin-top:20px;padding:14px;border:1px dashed var(--card-bd);border-radius:8px;font-size:11.5px;color:var(--tmut);line-height:1.5;text-align:center}
.fld{margin-bottom:14px}
.fld label{display:block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--tmut);margin-bottom:5px}
.fld input,.fld select{width:100%;background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:9px 10px;font-size:13px;color:var(--tprimary);font-family:inherit}
.fld input:focus,.fld select:focus{outline:none;border-color:var(--value)}
.fld .two{display:flex;gap:10px}
.drawer-foot{padding:14px 20px;border-top:1px solid var(--divider);display:flex;gap:10px}
.drawer-foot button{flex:1;padding:10px;border-radius:8px;font-size:13px;font-weight:700;font-family:inherit;cursor:pointer}
.btn-cancel{background:var(--well);border:1px solid var(--well-bd);color:var(--tsec)}
.btn-create{background:var(--value);border:none;color:#141414}

/* ===== unsaved confirm ===== */
.jp-confirm{display:none;position:fixed;inset:0;z-index:300;align-items:center;justify-content:center;background:rgba(0,0,0,.5)}
.jp-confirm.open{display:flex}
.jp-confirm-box{background:var(--card);border:1px solid var(--card-bd);border-radius:12px;padding:20px 22px;max-width:360px;box-shadow:0 20px 60px rgba(0,0,0,.6)}
.jp-confirm-t{font-size:15px;font-weight:800;color:var(--tprimary);margin-bottom:8px}
.jp-confirm-d{font-size:12.5px;color:var(--tsec);line-height:1.5;margin-bottom:18px}
.jp-confirm-btns{display:flex;gap:8px;justify-content:flex-end}
.jp-confirm-btns button{font-size:12px;font-weight:700;font-family:inherit;padding:8px 14px;border-radius:7px;cursor:pointer;border:1px solid var(--well-bd)}
.jp-cf-cancel{background:var(--well);color:var(--tsec)}
.jp-cf-discard{background:none;color:#e0736f;border-color:rgba(224,82,82,.4)}
.jp-cf-save{background:var(--value);color:#000;border-color:var(--value)}
/* ===== JOB PAGE (focus mode) ===== */
.jobpage{display:none;position:fixed;inset:0;z-index:120;align-items:center;justify-content:center;padding:32px;opacity:0;transition:opacity .24s ease}
.jobpage.open{display:flex}
.jobpage.shown{opacity:1}
.jobpage.opening .jp-page{animation:jpIn .32s cubic-bezier(.2,.9,.3,1.05) both}
@keyframes jpIn{from{transform:scale(.965) translateY(10px);opacity:.3}to{transform:none;opacity:1}}
.jobpage-scrim{position:absolute;inset:0;background:rgba(0,0,0,.55);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
body.light .jobpage-scrim{background:rgba(40,40,38,.4)}
body.jobview .board-wrap,body.jobview .control-row{filter:none}
/* [043000] CROPPING ON SMALL SCREENS.
   min-height BEATS max-height in the CSS spec. So min-height:848px overrode max-height:90vh
   and the panel rendered 848px tall inside a shorter viewport — with overflow:hidden, the
   bottom (Key Dates) was simply cut off. min-width:900px did the same sideways under ~940px.
   min() lets each floor collapse when the viewport is smaller, so the panel can never exceed
   the screen. The brain, throbber and notes all scroll internally, so they just get shorter. */
.jp-page{position:relative;width:78vw;min-width:min(900px,96vw);max-width:1400px;height:auto;min-height:min(848px,90vh);max-height:90vh;display:flex;flex-direction:column;overflow:hidden;background:var(--page);border:1px solid var(--card-bd);border-radius:16px;box-shadow:0 40px 100px rgba(0,0,0,.65);padding:24px 30px 0 40px}
.jp-page.tab-overview{height:auto;min-height:0;max-height:90vh}
.jp-page.tab-history{height:auto;min-height:0;max-height:90vh}
.jp-mainspine{position:absolute;left:24px;top:24px;bottom:24px;width:4px;border-radius:2px;background:var(--col)}
.jp-page::-webkit-scrollbar{width:8px}.jp-page::-webkit-scrollbar-thumb{background:var(--sb);border-radius:8px;border:2px solid transparent;background-clip:padding-box}.jp-page::-webkit-scrollbar-track{background:transparent}
.jp-head{position:relative;flex-shrink:0;background:#181818;border:1px solid var(--card-bd);border-radius:12px;padding:16px 18px;display:flex;align-items:center;justify-content:space-between;gap:16px}
.jp-headcol{flex:1;min-width:0}
.jp-headactions{display:flex;align-items:center;gap:10px;flex-shrink:0}
body.light .jp-head{background:#fff}
.jp-hrow{display:flex;align-items:center;gap:16px}
.jp-back{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--tsec);background:none;border:1px solid var(--well-bd);border-radius:7px;padding:6px 12px;cursor:pointer;flex-shrink:0;font-family:inherit;transition:all .15s;margin-bottom:4px}
.jp-back:hover{color:var(--tprimary);border-color:var(--ring);box-shadow:0 0 0 1px var(--ring)}
.jp-back.savemode{background:var(--value);color:#000;border-color:var(--value);font-weight:800;box-shadow:0 0 0 1px var(--value),0 0 16px 1px color-mix(in srgb,var(--value) 45%,transparent)}
.jp-back.savemode:hover{background:#3a3a38;color:#fff;border-color:#3a3a38;box-shadow:0 0 0 1px #3a3a38}
.jp-title{font-size:21px;font-weight:800;color:var(--tprimary);letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:60%;padding:2px 4px 2px 0}
.jp-client{font-size:13px;color:var(--teal);border:1px solid var(--teal);border-radius:20px;padding:6px 16px;font-weight:600;flex-shrink:0}
.jp-sp{flex:1}
.jp-statusdd{position:relative;flex-shrink:0;display:inline-flex;align-items:center}
.jp-statusbtn{display:inline-flex;align-items:center;justify-content:center;gap:7px;line-height:1;font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--col);border:1px solid var(--col);border-radius:8px;padding:7px 11px;cursor:pointer;background:color-mix(in srgb,var(--col) 8%,transparent);font-family:inherit}
.jp-statusbtn .chev{font-size:8px;opacity:.7}
.jp-statusmenu{position:fixed;background:var(--card);border:1px solid var(--card-bd);border-radius:9px;padding:4px;min-width:180px;z-index:400;display:none;box-shadow:0 12px 34px rgba(0,0,0,.6);max-height:340px;overflow-y:auto}
.jp-statusmenu.open{display:block}
.jp-statusmenu button{display:flex;align-items:center;gap:9px;width:100%;background:none;border:none;color:var(--tsec);font-family:inherit;font-size:12px;font-weight:600;padding:8px 9px;border-radius:6px;cursor:pointer;text-align:left}
.jp-statusmenu button:hover{background:var(--well);color:var(--tprimary)}
.jp-statusmenu .dot{width:8px;height:8px;border-radius:3px;flex-shrink:0}
.jp-val{font-size:19px;font-weight:800;font-family:'SFMono-Regular',monospace;color:var(--value);flex-shrink:0;letter-spacing:-.02em}
.jp-flag{font-size:16px;color:var(--flag-off);cursor:pointer;flex-shrink:0}
.jp-flag.on{color:#e05252}
.jp-meta{display:flex;gap:18px;margin-top:11px;padding-left:2px;flex-wrap:wrap}
.jp-meta span{font-size:11px;color:var(--tmut);font-weight:600}
.jp-meta b{color:var(--tsec);font-family:'SFMono-Regular',monospace;font-weight:700}
.jp-sub{display:flex;align-items:center;gap:2px;margin-top:16px;flex-shrink:0;border-bottom:1px solid var(--nav-bd)}
.jp-sub-sp{flex:1}
.jp-tab{position:relative;padding:11px 18px;font-size:13px;font-weight:500;color:var(--tmut);cursor:pointer;background:none;border:none;font-family:var(--font);margin-bottom:-1px;transition:color .15s}
.jp-tab::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--value);transform:scaleX(0);transform-origin:left center;transition:transform .25s ease}
.jp-tab:hover{color:var(--tprimary)}
.jp-tab:hover::after{transform:scaleX(1)}
.jp-tab.active{color:var(--value);font-weight:600}
.jp-tab.active::after{transform:scaleX(1)}
.jp-body{margin-top:18px;flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding-bottom:30px;scrollbar-width:thin;scrollbar-color:var(--sb) transparent}
.jp-body::-webkit-scrollbar{width:8px}.jp-body::-webkit-scrollbar-thumb{background:var(--sb);border-radius:8px;border:2px solid transparent;background-clip:padding-box}.jp-body::-webkit-scrollbar-track{background:transparent}
.jp-grid{display:grid;grid-template-columns:38fr 62fr;gap:16px;align-items:stretch}
.jp-lcol{display:flex;flex-direction:column;gap:14px}
.jc{background:var(--card);border:1px solid var(--card-bd);border-radius:11px;padding:15px 17px}
.jc-h{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--tmut);margin:0 0 13px;padding-bottom:11px;border-bottom:1px solid var(--divider);display:flex;align-items:center;justify-content:space-between}
.jc-h .lnk{font-size:11px;color:#5b8fd6;cursor:pointer;font-weight:600;text-transform:none;letter-spacing:0}
.jc-row{display:flex;justify-content:space-between;gap:12px;padding:7px 0;font-size:13px}
.jc-k{color:var(--tmut)}.jc-v{color:var(--tprimary);font-weight:600;text-align:right}.jc-v.mono{font-family:'SFMono-Regular',monospace}
/* pricing card */
.jp-qtop{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.jp-qval{font-size:22px;font-weight:800;font-family:'SFMono-Regular',monospace;color:var(--value);letter-spacing:-.02em}
.jp-qsrc{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:3px 9px;border-radius:20px;border:1px solid;flex-shrink:0}
.jp-qsrc.quote{color:var(--teal);border-color:var(--teal)}
.jp-qsrc.manual{color:#f5a623;border-color:#f5a623}
.jp-qsub{font-size:11px;color:var(--tmut);margin-top:4px}
.jp-qbtn{display:inline-flex;align-items:center;gap:6px;margin-top:14px;font-size:12px;font-weight:700;border-radius:7px;padding:8px 13px;cursor:pointer;border:none;font-family:inherit;transition:all .15s}
.jp-qbtn.primary{color:#000;background:var(--value)}
.jp-qbtn.primary:hover{color:#fff;background:#3a3a38}
.jp-qbtn.ghost{color:var(--tsec);background:var(--well);border:1px solid var(--well-bd)}
.jp-qbtn.ghost:hover{color:var(--tprimary);border-color:var(--tmut)}
/* notes preview + timeline */
.jp-note{padding:10px 0;border-bottom:1px solid var(--divider)}
.jp-note:last-of-type{border-bottom:none}
.jp-ntop{display:flex;align-items:center;gap:8px;margin-bottom:5px}
.jp-nt{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;padding:2px 8px;border-radius:20px;border:1px solid}
.jp-nt.note{color:var(--tsec);border-color:#5a5a5a}
.jp-nt.call{color:#5b8fd6;border-color:#5b8fd6}
.jp-nt.email{color:#b28fd6;border-color:#b28fd6}
.jp-nt.system{color:var(--teal);border-color:var(--teal)}
.jp-nt.variation{color:#f5a623;border-color:#f5a623}
.jp-nwho{font-size:11px;color:var(--tsec);font-weight:600}
.jp-nwhen{font-size:10px;color:var(--place);margin-left:auto;font-family:'SFMono-Regular',monospace}
.jp-nbody{font-size:12.5px;color:var(--tprimary);line-height:1.5;opacity:.85}
.jp-viewall{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:13px;padding-top:11px;border-top:1px solid var(--divider);font-size:11px;color:#5b8fd6;cursor:pointer;font-weight:600}
/* details form */
.jp-fld{margin-bottom:14px}
.jp-fld label{display:block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--tmut);margin-bottom:5px}
.jp-fld input,.jp-fld select,.jp-fld textarea{width:100%;background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:9px 10px;font-size:13px;color:var(--tprimary);font-family:inherit}
.jp-fld input:focus,.jp-fld select:focus,.jp-fld textarea:focus{outline:none;border-color:var(--value)}
.jp-two{display:flex;gap:12px}.jp-two>div{flex:1}
.jp-save{margin-top:6px;background:var(--value);color:#000;border:none;border-radius:8px;padding:10px 18px;font-size:13px;font-weight:700;font-family:inherit;cursor:pointer;transition:all .15s}
.jp-save:hover{color:#fff;background:#3a3a38}
/* history tab */
.jph-list{display:flex;flex-direction:column}
.jph-row{padding:11px 0;border-bottom:1px solid var(--divider)}
.jph-row:last-child{border-bottom:none}
.jph-main{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:13px}
.jph-field{font-weight:700;color:var(--tprimary)}
.jph-old{color:var(--tmut);text-decoration:line-through;font-family:'SFMono-Regular',monospace;font-size:12px}
.jph-arr{color:var(--tmut);font-size:11px}
.jph-new{color:var(--value);font-weight:600;font-family:'SFMono-Regular',monospace;font-size:12px}
.jph-meta{font-size:10px;color:var(--tmut);margin-top:4px;font-family:'SFMono-Regular',monospace}
/* notes tab */
.jp-notes-head{display:flex;align-items:center;gap:10px;margin-bottom:14px;flex-wrap:wrap}
.jp-filter{display:flex;gap:6px;flex-wrap:wrap}
.jp-fchip{font-size:11px;font-weight:600;padding:5px 12px;border-radius:20px;border:1px solid var(--well-bd);background:var(--well);color:var(--tsec);cursor:pointer;font-family:inherit;transition:all .15s}
.jp-fchip:hover{color:var(--tprimary)}
.jp-fchip.active{background:var(--value);color:#000;border-color:var(--value)}
.jp-addnote{display:flex;gap:8px;margin-bottom:16px;align-items:flex-start}
.jp-addnote select{background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:9px;font-size:12px;color:var(--tprimary);font-family:inherit;flex-shrink:0}
.jp-addnote input{flex:1;background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:9px 11px;font-size:13px;color:var(--tprimary);font-family:inherit}
.jp-addnote input:focus{outline:none;border-color:var(--value)}
.jp-addnote button{background:var(--value);color:#000;border:none;border-radius:7px;padding:9px 15px;font-size:12px;font-weight:700;font-family:inherit;cursor:pointer;flex-shrink:0}
.jp-timeline .jp-note{padding:13px 0}
.jp-empty{text-align:center;padding:40px 20px;color:var(--tmut);font-size:12px;font-style:italic}

/* ===== AUTH OVERLAY (B1) ===== */
#auth-overlay{position:fixed;inset:0;z-index:10000;background:var(--page);display:flex;align-items:center;justify-content:center;padding:20px}
#auth-overlay.hidden{display:none}
.auth-card{background:var(--card);border:1px solid var(--card-bd);border-radius:16px;padding:36px 32px;width:100%;max-width:360px;box-shadow:0 20px 60px rgba(0,0,0,.5)}
.auth-brand{font-size:28px;font-weight:800;letter-spacing:-.04em;color:var(--tprimary);text-align:center;margin-bottom:4px}
.auth-brand .iq{color:var(--value)}
.auth-brand .sub{font-weight:300;opacity:.7;letter-spacing:0}
.auth-sub{text-align:center;font-size:12px;color:var(--tmut);margin-bottom:24px}
.auth-input{width:100%;box-sizing:border-box;padding:12px 14px;margin-bottom:10px;background:var(--well);border:1px solid var(--well-bd);border-radius:8px;color:var(--tprimary);font-size:14px;font-family:var(--font);outline:none}
.auth-input:focus{border-color:var(--value)}
.auth-btn{width:100%;padding:12px;margin-top:6px;background:var(--value);color:#1a1a18;border:none;border-radius:8px;font-size:14px;font-weight:700;cursor:pointer;font-family:var(--font);transition:opacity .15s}
.auth-btn:hover{opacity:.9}
.auth-btn:disabled{opacity:.5;cursor:default}
.auth-error{background:rgba(239,68,68,.12);border:1px solid rgba(239,68,68,.3);color:#ef4444;font-size:12px;padding:9px 12px;border-radius:7px;margin-bottom:12px;display:none}
.auth-error.show{display:block}

/* ===== QUOTE LOGIC (B3b) ===== */
.logic-view{padding:22px 0 60px}
.logic-title{font-size:22px;font-weight:800;margin:0 0 4px;color:var(--tprimary)}
.logic-sub{font-size:12px;color:var(--tmut);margin-bottom:18px}
.logic-subnav{display:flex;gap:2px;border-bottom:1px solid var(--nav-bd);margin-bottom:20px;flex-wrap:wrap}
.logic-navbtn{position:relative;padding:10px 15px;font-size:12.5px;font-weight:500;color:var(--tmut);background:none;border:none;font-family:inherit;cursor:pointer;margin-bottom:-1px}
.logic-navbtn.active{color:var(--value);font-weight:600}
.logic-navbtn.active::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--value)}
.logic-navbtn:hover{color:var(--tprimary)}
.logic-section{display:none}.logic-section.active{display:block}
.logic-view .msg{background:rgba(75,179,168,.1);border:1px solid rgba(75,179,168,.28);color:#7fd0c6;font-size:12px;padding:9px 12px;border-radius:8px;margin-bottom:14px}
.logic-view .io-row{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:14px}
.logic-view .btn{font-size:11px;font-weight:600;padding:7px 12px;border-radius:7px;border:1px solid var(--well-bd);background:var(--well);color:var(--tsec);cursor:pointer;font-family:inherit}
.logic-view .btn:hover{color:var(--tprimary);border-color:var(--tmut)}
.logic-view .btn.primary,.logic-view .btn.btn-primary{background:var(--value);color:#000;border-color:var(--value)}
.logic-view .btn.btn-danger{color:#e0736f;border-color:rgba(224,82,82,.4);background:none}
.logic-view .btn.btn-sm{padding:2px 8px;font-size:10px}
.logic-view table.tbl{width:100%;border-collapse:collapse;font-size:12.5px;margin-bottom:8px}
.logic-view .tbl th{text-align:left;font-size:10px;font-weight:600;color:var(--tmut);text-transform:uppercase;letter-spacing:.05em;padding:7px 8px;border-bottom:1px solid var(--card-bd)}
.logic-view .tbl th.num{text-align:right}
.logic-view .tbl td{padding:3px 6px;border-bottom:1px solid var(--divider)}
.logic-view .tbl input,.logic-view .tbl select,.logic-field{background:var(--well);border:1px solid var(--well-bd);border-radius:6px;padding:6px 8px;font-size:12.5px;color:var(--tprimary);font-family:inherit;box-sizing:border-box;width:100%}
.logic-view .tbl input.num{text-align:right;font-family:'SFMono-Regular',monospace}
.logic-view .tbl input:focus,.logic-view .tbl select:focus,.logic-field:focus{outline:none;border-color:var(--value)}
.pricing-group-title{font-size:11px;font-weight:700;color:var(--tmut);text-transform:uppercase;letter-spacing:.08em;margin:16px 0 6px}
.lab-group-header td{background:var(--well);font-size:11px;font-weight:700;color:var(--tprimary);padding:8px}
.incexc-cols{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.incexc-h{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--tsec);margin:0 0 10px}
.incexc-chip{display:flex;align-items:center;gap:9px;background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:8px 11px;margin-bottom:6px;font-size:12.5px}
.incexc-handle{color:#555;cursor:grab;font-size:11px}
.incexc-label{flex:1}
.incexc-x{color:#7a5a5a;cursor:pointer}
.incexc-chip.drop-above{border-top:2px solid var(--value)}
.incexc-chip.drop-below{border-bottom:2px solid var(--value)}
.incexc-add{display:flex;gap:7px;margin-top:8px}
.incexc-add input{flex:1}

/* Pricing/long-section scroll (B3b fix v2) */
#tmpl-pricing, #tmpl-labour{max-height:calc(100vh - 220px);overflow-y:auto;padding-right:8px;padding-bottom:80px;scroll-padding-bottom:80px}
#tmpl-pricing::-webkit-scrollbar,#tmpl-labour::-webkit-scrollbar{width:10px}
#tmpl-pricing::-webkit-scrollbar-thumb,#tmpl-labour::-webkit-scrollbar-thumb{background:var(--sb);border-radius:5px}
#tmpl-pricing::-webkit-scrollbar-thumb:hover,#tmpl-labour::-webkit-scrollbar-thumb:hover{background:var(--sb-hover)}
/* keep group headers visible while scrolling */
#tmpl-pricing .pricing-group-title{position:sticky;top:0;background:var(--page);z-index:2;padding-top:8px}
/* ensure the whole logic view leaves room at the bottom of the page */
.logic-view{padding-bottom:100px}
.pg-grip{color:#555;cursor:grab;text-align:center;user-select:none;font-size:12px;letter-spacing:-2px}
.pg-grip:active{cursor:grabbing}
.logic-view .tbl tr:hover .pg-grip{color:var(--tsec)}

/* Pricing drag — clean preview (B3b v2) */
.logic-view .tbl tr.pg-dragging{opacity:.45}
.logic-view .tbl tr.pg-drop-above td{box-shadow:inset 0 2px 0 0 var(--value)}
.logic-view .tbl tr.pg-drop-below td{box-shadow:inset 0 -2px 0 0 var(--value)}
.logic-view .tbl tr td{transition:box-shadow .08s}
.pg-grip{color:#555;cursor:grab;text-align:center;user-select:none;font-size:12px;letter-spacing:-2px}
.pg-grip:active{cursor:grabbing}
.logic-view .tbl tr:hover .pg-grip{color:var(--tsec)}



/* ===== Job popup — Files tab ===== */
.jp-file-upload{border:2px dashed var(--well-bd);border-radius:10px;padding:22px 18px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s;margin-bottom:14px;position:relative}
.jp-file-upload:hover{border-color:rgba(255,255,255,.28)}
.jp-file-upload.drag-over{border-color:rgba(255,255,255,.4);background:rgba(255,255,255,.03)}
.jp-file-uploadicon{font-size:22px;color:var(--tsec);margin-bottom:5px}
.jp-file-uploadlabel{font-size:13px;font-weight:600;color:var(--tprimary);margin-bottom:10px}
.jp-file-upload select{background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:6px 10px;font-size:12px;color:var(--tprimary);font-family:inherit;cursor:pointer}
.jp-file-list{display:flex;flex-direction:column;gap:8px}












/* ===== NOTES (job popup) ===== */
.nt-wrap{display:flex;flex-direction:column;gap:16px}
.nt-composer{background:var(--card);border:1px solid var(--card-bd);border-radius:12px;padding:13px 15px}
.nt-composer .nt-editable{min-height:150px}
.nt-composer textarea{width:100%;background:var(--well);border:1px solid var(--well-bd);border-radius:8px;padding:10px 12px;font-size:13px;color:var(--tprimary);font-family:inherit;resize:none;height:52px;box-sizing:border-box;margin-bottom:10px}
.nt-composer textarea:focus{outline:none;border-color:var(--value)}
.nt-composer-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.nt-typebtns{display:flex;gap:6px}
.nt-typebtn{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:var(--tsec);background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:6px 11px;cursor:pointer;font-family:inherit}
.nt-typebtn i{font-size:14px}
.nt-typebtn.active{color:var(--c,#fff);border-color:var(--c,var(--value));background:color-mix(in srgb,var(--c,var(--value)) 12%,transparent)}
.nt-remindbtn{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:var(--tsec);background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:6px 11px;cursor:pointer;font-family:inherit}
.nt-remindbtn i{font-size:14px}
.nt-remindbtn.active{color:#e5a94f;border-color:rgba(229,169,79,.4);background:rgba(229,169,79,.1)}
.nt-sp{flex:1}
.nt-addbtn{font-size:12px;font-weight:700;color:#111;background:var(--value);border:none;border-radius:7px;padding:7px 16px;cursor:pointer;font-family:inherit}
.nt-steerbtn.on{color:#e05252;border-color:#e05252;background:rgba(224,82,82,.14)}
.nt-addbtn.nt-steersubmit{background:#e05252;color:#fff}
.nt-addbtn:hover{filter:brightness(1.05)}
.nt-pinned{display:flex;flex-direction:column;gap:8px}
.nt-section-label{font-size:10px;font-weight:700;letter-spacing:.06em;color:var(--tmut);text-transform:uppercase;display:flex;align-items:center;gap:5px;margin-bottom:2px}
.nt-filterbar{display:flex;gap:8px;flex-wrap:wrap}
.nt-fchip{font-size:12px;font-weight:600;color:var(--tsec);background:none;border:1px solid var(--card-bd);border-radius:20px;padding:6px 15px;cursor:pointer;font-family:inherit;transition:all .12s}
.nt-fchip:hover{color:var(--tprimary);border-color:var(--card-hover)}
.nt-fchip.active{color:#fff;border-color:var(--value);background:none}
.nt-timeline{display:flex;flex-direction:column;gap:8px}

.nt-item{padding:11px 14px;border-radius:9px;transition:background .12s}
.nt-item.accented{background:var(--card);border-top:1px solid var(--card-bd);border-right:1px solid var(--card-bd);border-bottom:1px solid var(--card-bd);border-left:3px solid #555;border-radius:0 9px 9px 0;padding:12px 15px}
.nt-item.accented:hover{background:var(--well)}
.nt-item:hover{background:var(--well)}
.nt-item.pinned{border-left-color:var(--value);background:color-mix(in srgb,var(--value) 5%,var(--card))}
.nt-top{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.nt-badge{display:inline-flex;align-items:center;gap:4px;font-size:9px;font-weight:700;border-radius:4px;padding:2px 7px;text-transform:uppercase;letter-spacing:.03em}
.nt-badge i{font-size:11px}
.nt-who{font-size:11px;color:var(--tsec)}
.nt-when{font-size:10px;color:var(--tmut)}
.nt-actions{display:flex;gap:9px;opacity:0;transition:opacity .12s}
.nt-item:hover .nt-actions{opacity:1}
.nt-actions i{font-size:14px;color:var(--tmut);cursor:pointer}
.nt-actions i:hover{color:var(--tprimary)}
.nt-body{font-size:14px;color:var(--tprimary);line-height:1.55;white-space:pre-wrap;word-break:break-word}
.nt-body.sys{font-size:12px;color:var(--tsec);font-style:italic}
.nt-edited{font-size:10px;color:var(--tmut);font-style:italic}
.nt-remind{display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:600;color:#e5a94f;background:rgba(229,169,79,.1);border:1px solid rgba(229,169,79,.25);border-radius:6px;padding:4px 9px;margin-top:8px;cursor:pointer}
.nt-remind i{font-size:12px}
.nt-remind.overdue{color:#e88;background:rgba(224,82,82,.1);border-color:rgba(224,82,82,.3)}
.nt-remind:hover{filter:brightness(1.1)}

/* ===== OVERVIEW (job popup) ===== */
.jp-rcol{position:relative;min-height:0}

.ov-fields{display:flex;flex-direction:column}
.ov-frow{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--divider)}
.ov-frow:last-child{border-bottom:none}
.ov-frow i{font-size:15px;color:var(--tmut);width:16px;text-align:center}
.ov-fl{font-size:12px;color:var(--tsec);flex:1}
.ov-svtoggle{width:38px;height:22px;border-radius:20px;background:var(--card-bd);border:none;cursor:pointer;position:relative;padding:0;transition:background .15s;flex:0 0 auto}
.ov-svtoggle .knob{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:#fff;transition:left .15s}
.ov-svtoggle.on{background:#f5a623}
.ov-svtoggle.on .knob{left:18px}
.ov-svdate{font-size:12px;padding:4px 8px;border-radius:6px;background:var(--well);border:1px solid var(--well-bd);color:var(--tprimary);font-family:inherit}
.ov-fv{font-size:13px;font-weight:600;color:var(--tprimary)}
.ov-fv.none{font-weight:400;color:var(--tmut);font-style:italic;font-size:12px}
.ov-editpencil{font-size:14px;color:var(--tmut);cursor:pointer}
.ov-editpencil:hover{color:var(--tprimary)}
.ov-editactions{display:flex;gap:8px}
.ov-cancel,.ov-save{font-size:11px;font-weight:600;border-radius:6px;padding:5px 12px;cursor:pointer;font-family:inherit;border:1px solid var(--well-bd)}
.ov-cancel{background:var(--well);color:var(--tsec)}
.ov-save{background:var(--value);color:#111;border-color:var(--value)}
/* pricing */
.ov-pricing .ov-psrc{font-size:10px;font-weight:600;display:inline-flex;align-items:center;gap:5px;text-transform:none;letter-spacing:0;border-radius:20px;padding:4px 11px}
.ov-pricing .ov-psrc.quote{color:#8fd14f;background:rgba(143,209,79,.12);border:1px solid rgba(143,209,79,.3)}
.ov-pricing .ov-psrc.manual{color:#e5a94f;background:rgba(229,169,79,.12);border:1px solid rgba(229,169,79,.35)}
.ov-pricing .ov-psrc i{font-size:12px}
.ov-pval{font-size:27px;font-weight:700;letter-spacing:-.01em;margin-bottom:5px;display:flex;align-items:center;gap:8px}
.ov-pval.quote{color:var(--value)}
.ov-pval.manual{color:#e5a94f}
.ov-pvicon{font-size:15px}
.ov-pval.quote .ov-pvicon{color:#8fd14f}
.ov-pvicon.revert{color:#8fd14f;cursor:pointer;font-size:17px}
.ov-pvicon.revert:hover{color:#a5e86a}
.ov-pstrike{color:#999;text-decoration:line-through}
.ov-psub{font-size:11px;color:var(--tmut);margin-bottom:14px}
.ov-pbtns{display:flex;gap:8px}
.ov-pbtn{flex:1;font-size:12px;font-weight:600;color:var(--tsec);background:var(--well);border:1px solid var(--well-bd);border-radius:8px;padding:9px;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;gap:6px}
.ov-pbtn:hover{color:var(--tprimary);border-color:var(--card-hover)}
.ov-pbtn i{font-size:14px}
.ov-pbtn.wide{flex:1;letter-spacing:.03em}
.ov-pbtn.icon{flex:0 0 auto;padding:9px 13px}
/* pinned + activity */
.ov-pinned{display:flex;flex-direction:column;gap:6px}
.ov-activity{display:flex;flex-direction:column;gap:2px}
.ov-addnote{width:100%;margin-top:12px;font-size:11px;font-weight:600;color:var(--tsec);background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:8px;cursor:pointer;font-family:inherit;display:flex;align-items:center;justify-content:center;gap:5px}
.ov-addnote:hover{color:var(--tprimary)}
.ov-addnote i{font-size:13px}

/* ===== Files tab refresh ===== */
.jp-file-uploadicon{font-size:24px;color:var(--tsec);display:block;margin-bottom:6px}
.jp-file-uploadsub{font-size:11px;color:var(--tmut);margin-bottom:12px}

.jp-file.uploading{border-color:rgba(77,166,255,.25)}
.jp-file-bar{height:3px;background:var(--well-bd);border-radius:2px;margin-top:6px;overflow:hidden}
.jp-file-bar-fill{height:100%;background:#5dccff;border-radius:2px;width:40%;animation:fileBar 1.1s ease-in-out infinite}
@keyframes fileBar{0%{width:10%}50%{width:80%}100%{width:10%}}
.jp-file-status{font-size:11px;color:#5dccff;font-weight:600;flex-shrink:0}
.spin{animation:spin360 .9s linear infinite;display:inline-block}
@keyframes spin360{to{transform:rotate(360deg)}}
.jp-file-btn i{font-size:15px}

/* ===== ⋯ actions menu ===== */
.jp-moredd{position:relative;margin-left:8px;z-index:50}
.jp-morebtn{width:36px;height:36px;border-radius:8px;border:1px solid var(--card-bd);background:var(--card);color:var(--tsec);cursor:pointer;display:flex;align-items:center;justify-content:center}
.jp-morebtn i{font-size:18px}
.jp-morebtn:hover{color:var(--tprimary)}
.jp-moremenu{position:absolute;right:0;top:42px;width:174px;background:var(--card);border:1px solid var(--card-bd);border-radius:9px;padding:5px;box-shadow:0 12px 30px rgba(0,0,0,.5);z-index:200;display:none}
.jp-moremenu.open{display:block}
.jp-moremenu button{display:flex;align-items:center;gap:9px;width:100%;padding:8px 10px;font-size:13px;color:var(--tprimary);background:none;border:none;border-radius:6px;cursor:pointer;font-family:inherit;text-align:left}
.jp-moremenu button i{font-size:16px;color:var(--tmut)}
.jp-moremenu button:hover{background:var(--well)}
.jp-moremenu button.danger{color:#e88}
.jp-moremenu button.danger i{color:#e88}

/* ===== dialled-back save & close ===== */
.jp-back{font-size:12px;font-weight:500;color:var(--tsec);background:none;border:1px solid var(--card-bd);border-radius:7px;padding:7px 14px;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:5px}
.jp-back i{font-size:14px}
.jp-back:hover{color:var(--tprimary);border-color:var(--card-hover)}

/* ===== note inline edit ===== */
.nt-item.editing{background:var(--well);border:1px solid rgba(255,255,255,.14);border-radius:9px;padding:12px 14px}
.nt-editbox{width:100%;background:var(--card);border:1px solid var(--well-bd);border-radius:7px;padding:9px 11px;font-size:14px;color:var(--tprimary);font-family:inherit;resize:none;min-height:48px;box-sizing:border-box;margin:8px 0 9px}
.nt-editrow{display:flex;gap:8px;justify-content:flex-end}
.nt-ecancel{font-size:11px;font-weight:600;color:var(--tsec);background:var(--card);border:1px solid var(--well-bd);border-radius:6px;padding:6px 13px;cursor:pointer;font-family:inherit}
.nt-esave{font-size:11px;font-weight:700;color:#111;background:var(--value);border:none;border-radius:6px;padding:6px 15px;cursor:pointer;font-family:inherit}
/* larger always-visible note actions */
.nt-actions{display:flex;gap:11px;opacity:1}
.nt-actions i{font-size:16px;color:var(--tmut);cursor:pointer}
.nt-actions i:hover{color:var(--tprimary)}

/* ===== history timeline ===== */
.jph-timeline{display:flex;flex-direction:column;gap:20px}
.jc-sub{font-weight:400;text-transform:none;letter-spacing:0;color:var(--tmut);font-size:10px}
.jph-day{display:flex;flex-direction:column}
.jph-dayhead{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.jph-daylabel{font-size:11px;font-weight:700;letter-spacing:.04em;color:var(--tsec)}
.jph-dayline{flex:1;height:1px;background:var(--divider)}
.jph-daycount{font-size:10px;color:var(--tmut)}
.jph-daybody{display:flex;flex-direction:column}
.jph-item{display:flex;align-items:flex-start;gap:12px;padding:8px 0}
.jph-old{color:var(--tmut)}
.jph-dot{width:9px;height:9px;border-radius:50%;margin-top:5px;flex-shrink:0}
.jph-body{flex:1;display:flex;align-items:baseline;justify-content:space-between;gap:12px}
.jph-text{font-size:14px;color:var(--tsec)}
.jph-text b{color:var(--tprimary);font-weight:600}
.jph-arr{color:var(--tmut);margin:0 2px}
.jph-meta{font-size:11px;color:var(--tmut);white-space:nowrap}

/* ===== inline price edit ===== */
.ov-pedit{display:flex;align-items:center;gap:4px;margin-bottom:2px}
.ov-pcur{font-size:24px;font-weight:700;color:var(--value)}
#ov-pinput{flex:1;font-size:24px;font-weight:700;color:var(--value);background:var(--well);border:1px solid var(--well-bd);border-radius:8px;padding:6px 10px;font-family:inherit;width:100%;box-sizing:border-box}
#ov-pinput:focus{outline:none;border-color:var(--value)}
.ov-pbtn.save{color:#111;background:var(--value);border-color:var(--value);font-weight:700}

/* ===== Rich-text note composer ===== */
.nt-fmtbar{display:flex;gap:4px;margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--well-bd)}
.nt-fmtbtn{width:30px;height:28px;border-radius:6px;border:1px solid transparent;background:none;color:var(--tsec);cursor:pointer;display:flex;align-items:center;justify-content:center}
.nt-fmtbtn i{font-size:16px}
.nt-fmtbtn:hover{background:var(--well);color:var(--tprimary)}
.nt-editable{min-height:48px;max-height:none;background:var(--well);border:1px solid var(--well-bd);border-radius:8px;padding:11px 13px;font-size:14px;color:var(--tprimary);font-family:inherit;line-height:1.55;outline:none;overflow:visible;word-break:break-word}
.nt-editable:focus{border-color:rgba(255,255,255,.28)}
.nt-editable:empty:before{content:attr(data-placeholder);color:var(--place)}
.nt-editable ul,.nt-editable ol{margin:4px 0;padding-left:22px}
.nt-editable b,.nt-editable strong{font-weight:700}
.nt-attachrow{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.nt-staged{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--tsec);background:var(--well);border:1px solid var(--well-bd);border-radius:6px;padding:4px 8px}
.nt-staged i:first-child{font-size:13px}
.nt-staged-x{font-size:13px;cursor:pointer;color:var(--tmut)}
.nt-staged-x:hover{color:var(--danger,#e05252)}
.nt-attachbtn{width:34px;height:34px;border-radius:7px;border:1px solid var(--well-bd);background:var(--well);color:var(--tsec);cursor:pointer;display:flex;align-items:center;justify-content:center}
.nt-attachbtn i{font-size:16px}
.nt-attachbtn:hover{color:var(--tprimary);border-color:var(--card-hover)}
/* note body rich formatting */
.nt-body ul,.nt-body ol{margin:5px 0;padding-left:22px}
.nt-body b,.nt-body strong{font-weight:700}
.nt-body li{margin:2px 0}
/* attachments shown on a note */
.nt-atts{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
.nt-att{display:inline-flex;align-items:center;gap:6px;max-width:220px;font-size:11px;color:var(--tsec);background:var(--well);border:1px solid var(--well-bd);border-radius:7px;padding:5px 9px;cursor:pointer;font-family:inherit}
.nt-att i{font-size:14px;flex-shrink:0}
.nt-att span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nt-att:hover{border-color:rgba(255,255,255,.3);color:var(--tprimary)}


/* ===== X close button (replaces Save & close) ===== */
.jp-closebtn{width:36px;height:36px;border-radius:8px;border:1px solid var(--value);background:var(--value);color:#111;cursor:pointer;display:flex;align-items:center;justify-content:center;margin-left:2px;transition:all .15s}
.jp-closebtn i{font-size:19px}
.jp-closebtn:hover{color:#111;filter:brightness(1.08)}

/* ===== Overview read-only notes (Option A) ===== */
.ov-noteshead{display:flex;justify-content:space-between;align-items:center;font-size:11px;font-weight:700;letter-spacing:.08em;color:var(--tmut);text-transform:uppercase;margin-bottom:18px}
.ov-noteshead .lnk{font-size:12px;font-weight:600;letter-spacing:0;text-transform:none;color:#5b8fd6;cursor:pointer}
.ov-notelist{display:flex;flex-direction:column;gap:22px}
.ovn{border-left:3px solid #7d8fa8;padding-left:16px}
.ovn.pinned{border-left-color:var(--value)}
.ovn-top{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.ovn-type{font-size:10px;font-weight:700;letter-spacing:.05em}
.ovn-pinlead{font-size:13px;color:var(--value);cursor:pointer}
.ovn-pin{font-size:14px;color:var(--tmut);cursor:pointer;opacity:0;transition:opacity .12s}
.ovn:hover .ovn-pin{opacity:1}
.ovn-pin:hover{color:var(--tsec)}
.ovn-pin.on{color:var(--value);opacity:1}
.ovn-body{font-size:13.5px;color:var(--tprimary);line-height:1.55;white-space:pre-wrap;word-break:break-word}
.ovn-body ul,.ovn-body ol{margin:4px 0;padding-left:20px}
.ovn-body b,.ovn-body strong{font-weight:700}


/* ===== Overview notes Option C (card back, pinned grouped) ===== */
.ov-pinlabel{font-size:9px;font-weight:700;color:var(--value);letter-spacing:.06em;margin:2px 0 14px;display:flex;align-items:center;gap:5px}
.ov-pinlabel i{font-size:12px}
.ov-notescard{flex:1 1 0;display:flex;flex-direction:column;overflow:hidden;min-height:0}
.ov-notescard .ov-notelist{gap:22px}
.jp-grid{position:relative}
/* the right column matches the left column's height; notes fade out if they overflow */
.jp-rcol{min-height:0}
.ov-notescard .ov-notes-scroll{overflow-y:auto;overflow-x:hidden;position:relative;flex:1 1 0;min-height:0;scrollbar-width:none;-ms-overflow-style:none;padding-bottom:14px}
.ov-notescard .ov-notes-scroll::-webkit-scrollbar{width:0;height:0;display:none}
.ov-notescard .ov-recentgroup{margin-top:18px;padding-top:18px;border-top:1px solid var(--divider)}

/* ===== Quote page: manual override warning ===== */
.quote-override-warn{display:flex;align-items:center;gap:10px;margin:16px 0 0;padding:10px 14px 10px 16px;background:rgba(229,169,79,0.08);border-left:3px solid #e0a854;border-radius:0 7px 7px 0;font-size:12px;line-height:1.4;color:#c9a878}
.quote-override-warn i{flex-shrink:0;font-size:15px}
.quote-override-warn i{font-size:15px;color:#e0a854;flex-shrink:0}
.quote-override-warn b{color:#e5b878;font-weight:700}
.qow-revert{color:#5b8fd6;cursor:pointer}
.qow-revert:hover{text-decoration:underline}

/* ===== Quote Project Details: read-only + edit controls ===== */
.pd-title-row{display:flex;align-items:center;justify-content:space-between}
.pd-editctl{display:flex;gap:6px}
.pd-editbtn,.pd-savebtn,.pd-cancelbtn{font-size:11px;font-weight:600;border-radius:6px;padding:5px 11px;cursor:pointer;font-family:inherit;display:inline-flex;align-items:center;gap:5px;border:1px solid var(--card-bd,rgba(255,255,255,.12));background:var(--card,#1e1e1e);color:var(--tsec,#aaa)}
.pd-editbtn i,.pd-savebtn i{font-size:13px}
.pd-editbtn:hover,.pd-cancelbtn:hover{color:var(--tprimary,#fff)}
.pd-savebtn{background:var(--value,#d4fc00);border-color:var(--value,#d4fc00);color:#111;font-weight:700}
.field-input:disabled{opacity:.75;cursor:default;background:transparent;border-color:transparent;padding-left:0}

/* ===== Toast (undo) ===== */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);display:flex;align-items:center;gap:14px;background:var(--card,#1e1e1e);border:1px solid var(--card-bd,rgba(255,255,255,.12));border-radius:10px;padding:11px 16px;box-shadow:0 12px 34px rgba(0,0,0,.5);z-index:400;opacity:0;pointer-events:none;transition:opacity .2s,transform .25s cubic-bezier(.2,.85,.3,1);font-size:13px;color:var(--tprimary,#f0f0f0)}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0);pointer-events:auto}
.toast-action{font-size:12px;font-weight:700;color:var(--value,#d4fc00);background:none;border:none;cursor:pointer;font-family:inherit;padding:2px 4px}
.toast-action:hover{text-decoration:underline}

/* ===== File description ===== */











/* ===== Notes composer: collapsed bar ===== */
.nt-composer-collapsed{display:flex;align-items:center;gap:10px;padding:11px 15px;cursor:text}
.nt-composer-collapsed i{font-size:15px;color:var(--tmut)}
.nt-collapsed-ph{flex:1;font-size:13px;color:var(--place)}
.nt-collapsed-clip{color:var(--tmut)}
.nt-composer:not(.open){padding:0}
.nt-cancelbtn{font-size:12px;color:var(--tsec);background:none;border:none;cursor:pointer;font-family:inherit;padding:8px 6px}
.nt-cancelbtn:hover{color:var(--tprimary)}


/* ===== Pricing: not-yet-priced / create quote ===== */
.ov-psrc.none{color:var(--tmut);font-weight:600}
.ov-pval.none{color:var(--tmut)}
/* [023900] Do & Charge */
.ov-pricing .ov-psrc.dc{color:#59b0e0;background:rgba(89,176,224,.12);border:1px solid rgba(89,176,224,.35)}
.ov-pval.dc{color:var(--value);font-size:27px}
.ov-dc-dim{opacity:.4;pointer-events:none}
.ov-dcfinal{display:flex;align-items:center;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--divider)}
.ov-dcfinal-lbl{font-size:11px;color:var(--tmut);white-space:nowrap;line-height:1.3}
.ov-dcfinal-box{flex:1;display:flex;align-items:center;gap:4px;background:var(--dark-2,#151515);border:1px solid var(--well-bd);border-radius:8px;padding:7px 11px}
.ov-dcfinal-dollar{color:var(--tmut);font-weight:700}
.ov-dcfinal input{background:none;border:none;color:var(--tprimary);font-size:15px;font-weight:700;width:100%;font-family:inherit;outline:none}
.ov-dctoggle.on{background:#59b0e0!important}
.ov-dcrow{margin-top:14px;padding-top:13px;border-top:1px solid var(--divider)}
.card.dc-card{border-color:color-mix(in srgb,#59b0e0 45%,transparent)}
.c-val.dc{color:#59b0e0;font-size:14px}
.ov-pbtn.create{color:#111;background:var(--value);border-color:var(--value);font-weight:700}
.ov-pbtn.create:hover{filter:brightness(1.05)}


/* ===== Email-sourced job badge ===== */
.c-emailbadge{font-size:12px;color:#5dccff;margin-right:5px;flex-shrink:0;vertical-align:middle}


/* ===== File category chip (editable) + replace ===== */






/* ================= FILES v2 (shared: popup Files tab + quote panel) ================= */
.fx-head{display:flex;align-items:center;gap:14px;margin-bottom:14px;padding-bottom:13px;border-bottom:1px solid var(--well-bd,rgba(255,255,255,.09))}
.fx-headlabel{font-size:11px;color:var(--tmut,#888);letter-spacing:.1em;font-weight:600;text-transform:uppercase}

/* groups */
.fx-groups{display:grid;grid-template-columns:1fr;gap:14px 22px}
.fx-groups.two{grid-template-columns:1fr 1fr}
.fx-group{border-radius:8px;transition:background .12s,box-shadow .12s}
.fx-group.drop{background:rgba(93,204,255,.07);box-shadow:0 0 0 1.5px rgba(93,204,255,.45)}
.fx-ghead{display:flex;align-items:center;gap:8px;font-size:10px;color:var(--tmut,#888);letter-spacing:.09em;font-weight:600;margin-bottom:6px;padding:0 2px}
.fx-ghead i{font-size:12px}
.fx-group.notes{opacity:.75}

/* row */
.fx-row{position:relative;margin-bottom:4px}
.fx-line{display:flex;align-items:center;gap:11px;padding:9px 8px;border-radius:7px;background:var(--well,rgba(255,255,255,.04));border:1px solid transparent;cursor:pointer;transition:background .12s,border-color .12s}
.fx-line:hover{background:var(--card,rgba(255,255,255,.07));border-color:var(--well-bd,rgba(255,255,255,.12))}
.fx-row.menuopen .fx-line{background:var(--card,rgba(255,255,255,.08));border-color:var(--well-bd,rgba(255,255,255,.16))}
.fx-icon{font-size:19px;flex-shrink:0}
.fx-name{flex:1;min-width:0;font-size:13px;font-weight:600;color:var(--tprimary,#f0f0f0);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-from{font-size:11px;color:var(--tmut,#777);flex-shrink:0}
.fx-row.uploading .fx-line{cursor:default;opacity:.8}

/* description marker + hover tooltip */
.fx-note{position:relative;display:flex;align-items:center;flex-shrink:0;color:#5dccff;cursor:default;outline:none}
.fx-note i{font-size:14px}
.fx-tip{display:none;position:absolute;bottom:calc(100% + 7px);right:-6px;z-index:30;width:max-content;max-width:230px;background:var(--card,#2b2b2b);border:1px solid var(--card-bd,rgba(255,255,255,.16));border-radius:7px;padding:8px 11px;font-size:11.5px;font-weight:500;line-height:1.45;color:var(--tsec,#ccc);box-shadow:0 8px 24px rgba(0,0,0,.5);white-space:normal;text-align:left}
.fx-note:hover .fx-tip,.fx-note:focus .fx-tip{display:block}

/* ... menu button + menu */
.fx-menubtn{width:26px;height:26px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:none;border:none;border-radius:6px;color:var(--tmut,#777);cursor:pointer;transition:background .12s,color .12s}
.fx-menubtn i{font-size:17px}
.fx-line:hover .fx-menubtn{color:var(--tprimary,#f0f0f0)}
.fx-menubtn:hover{background:rgba(255,255,255,.1)}
.fx-menu{position:absolute;top:calc(100% + 3px);right:0;z-index:40;width:186px;background:var(--card,#2b2b2b);border:1px solid var(--card-bd,rgba(255,255,255,.16));border-radius:9px;padding:5px;box-shadow:0 12px 34px rgba(0,0,0,.5);cursor:default}
.fx-menu-head{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:600;color:var(--tsec,#aaa);padding:6px 9px 7px;border-bottom:1px solid var(--well-bd,rgba(255,255,255,.08));margin-bottom:4px}
.fx-menu-head i{font-size:14px;cursor:pointer}
.fx-menu-head.plain{border:none;margin-bottom:2px;color:var(--tmut,#777);letter-spacing:.06em;text-transform:uppercase;font-size:10px}
.fx-menu-item{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:6px;font-size:12px;font-weight:500;color:var(--tprimary,#f0f0f0);cursor:pointer;transition:background .1s}
.fx-menu-item i{font-size:15px;color:var(--tmut,#999);width:15px;flex-shrink:0}
.fx-menu-item:hover{background:rgba(255,255,255,.08)}
.fx-menu-item.on{background:rgba(255,255,255,.05)}
.fx-menu-item.on i{color:#5dccff}
.fx-menu-item.danger{color:#e05252}
.fx-menu-item.danger i{color:#e05252}
.fx-menu-item.danger:hover{background:rgba(224,82,82,.14)}
.fx-menu-more{margin-left:auto;font-size:13px!important}

/* description editor */
.fx-descedit{display:flex;gap:6px;margin:5px 0 0 30px}
.fx-descinput{flex:1;background:var(--well,#272727);border:1px solid var(--well-bd,rgba(255,255,255,.14));border-radius:6px;padding:6px 9px;font-size:12px;color:var(--tprimary,#f0f0f0);font-family:inherit}
.fx-descinput:focus{outline:none;border-color:rgba(255,255,255,.35)}
.fx-descsave,.fx-desccancel{font-size:11px;font-weight:600;border-radius:6px;padding:5px 11px;cursor:pointer;font-family:inherit;border:1px solid var(--well-bd,rgba(255,255,255,.14));background:var(--well,#272727);color:var(--tsec,#ccc)}
.fx-descsave:hover,.fx-desccancel:hover{border-color:rgba(255,255,255,.35);color:var(--tprimary,#fff)}

/* Add files button + menu */
.fx-addwrap{position:relative;display:inline-flex;flex:0 0 auto;margin-left:auto}
.fx-addbtn{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--tprimary,#f0f0f0);background:none;border:1px solid var(--well-bd,rgba(255,255,255,.18));border-radius:7px;padding:6px 13px;cursor:pointer;font-family:inherit;transition:border-color .12s,background .12s}
.fx-addbtn:hover{border-color:rgba(255,255,255,.35);background:rgba(255,255,255,.05)}
.fx-addbtn i{font-size:14px}
.fx-addcv{font-size:13px!important;color:var(--tmut,#888)}
.fx-addmenu{position:absolute;top:calc(100% + 5px);left:0;right:auto;z-index:40;width:172px;background:var(--card,#2b2b2b);border:1px solid var(--card-bd,rgba(255,255,255,.16));border-radius:9px;padding:5px;box-shadow:0 12px 34px rgba(0,0,0,.5)}

/* quote panel footer (drive link + add) */
.fx-foot{display:flex;align-items:center;gap:12px;margin-top:14px;padding-top:12px;border-top:1px solid var(--well-bd,rgba(255,255,255,.09))}
.fx-drive{flex:1;display:flex;align-items:center;gap:7px;font-size:12px;font-weight:600;color:#5dccff;text-decoration:none;min-width:0}
.fx-drive i{font-size:16px;flex-shrink:0}
.fx-drive span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fx-drive:hover{color:#8adcff}
.fx-drive.none{color:var(--tdim,#666);cursor:default}
.fx-empty{padding:20px 6px;text-align:center;color:var(--tdim,#666);font-size:12px}

body.light .fx-tip,body.light .fx-menu,body.light .fx-addmenu{background:#fff}


/* ===== Files: drag-and-drop overlay (exists only while dragging) ===== */
.fx-droproot{position:relative}
.fx-drop{position:absolute;inset:6px;z-index:60;background:rgba(20,20,20,.94);border:2px dashed rgba(93,204,255,.5);border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:18px}
.fx-drop-head{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:600;color:var(--tprimary,#f0f0f0)}
.fx-drop-head i{font-size:18px;color:#5dccff}
.fx-dropzones{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:9px;width:100%;max-width:520px}
.fx-dropzone{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px 10px;border:1.5px dashed rgba(255,255,255,.18);border-radius:9px;transition:border-color .12s,background .12s}
.fx-dropzone i{font-size:20px;color:var(--tmut,#888);pointer-events:none}
.fx-dropzone span{font-size:12px;font-weight:500;color:var(--tsec,#aaa);pointer-events:none}
.fx-dropzone.over{border-style:solid;border-color:rgba(93,204,255,.75);background:rgba(93,204,255,.13)}
.fx-dropzone.over i{color:#5dccff}
.fx-dropzone.over span{color:var(--tprimary,#f0f0f0)}
body.light .fx-drop{background:rgba(250,250,248,.95)}


/* drag hint strip */
.fx-draghint{display:flex;align-items:center;justify-content:center;gap:7px;padding:9px;margin-bottom:16px;border:1px dashed var(--well-bd,rgba(255,255,255,.12));border-radius:8px;font-size:11.5px;color:var(--tdim,#666)}
.fx-draghint i{font-size:14px}

/* download-all on a group heading */
.fx-gdl{display:inline-flex;align-items:center;gap:4px;margin-left:auto;background:none;border:none;font-family:inherit;font-size:10.5px;font-weight:600;letter-spacing:.04em;color:var(--tdim,#666);cursor:pointer;padding:2px 4px;border-radius:5px;transition:color .12s,background .12s}
.fx-gdl i{font-size:13px}
.fx-gdl:hover{color:var(--tprimary,#f0f0f0);background:rgba(255,255,255,.07)}

/* header drive link (quote modal) */
.fx-head .fx-drive{flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#5dccff;text-decoration:none}
.fx-head .fx-drive i{font-size:15px}
.fx-head .fx-drive:hover{color:#8adcff}

/* ===== Quote "Project Files" modal — 1:1 with the job card ===== */
#qv-files-modal{z-index:300}
.fxm-page{padding:0!important;overflow:hidden}
.fxm-head{display:flex;align-items:center;justify-content:space-between;padding:24px 30px 16px 40px;flex-shrink:0}
.fxm-title{font-size:20px;font-weight:700;color:var(--tprimary,#f0f0f0);display:flex;align-items:baseline;gap:12px}
.fxm-sub{font-size:13px;font-weight:500;color:var(--tmut,#888)}
.fxm-body{flex:1;min-height:0;overflow-y:auto;padding:0 30px 24px 40px}
/* The Brain panel — brain card above the notes composer, whole body scrolls as one */
.qv-brain-body{padding-top:18px;overscroll-behavior:contain}
.qv-brain-body .jc.brb{max-height:none;margin-bottom:18px}
.qv-brain-body .jc.brb .brb-scroll{max-height:none;overflow:visible}
.qv-brain-notes .nt-wrap{margin-top:4px}
/* the modal covers the viewport and captures the wheel so the quote page behind can't scroll */
#qv-brain-modal.open{overscroll-behavior:contain}
#qv-brain-modal .fxm-body{overscroll-behavior:contain}
/* while The Brain panel is open, freeze the quote view behind it. The quote page scrolls at the
   #quote-view / document level (min-height:100vh, no inner scroller), so lock those directly. */
body.qv-brain-lock,
html.qv-brain-lock{overflow:hidden!important}
body.qv-brain-lock #quote-view,
body.qv-brain-lock #tmpl-pricing,
body.qv-brain-lock #tmpl-labour,
body.qv-brain-lock .qv-scroll,
body.qv-brain-lock .stage-scroll,
body.qv-brain-lock .jp-body,
body.qv-brain-lock .quote-view,
body.qv-brain-lock .qv-body,
body.qv-brain-lock .lane{overflow:hidden!important}


/* ===== Project Pricing modal ===== */
#qv-pricing-modal{z-index:300}
.pp-intro{font-size:12px;color:var(--tmut,#888);line-height:1.55;margin-bottom:14px}
.pp-intro strong{color:var(--tprimary,#f0f0f0);font-weight:600}
.pp-banner{display:flex;align-items:center;gap:10px;background:rgba(232,168,56,.1);border:1px solid rgba(232,168,56,.35);border-radius:9px;padding:11px 13px;margin-bottom:14px;font-size:12px;color:#e8a838}
.pp-banner i{font-size:16px;flex-shrink:0}
.pp-banner span{flex:1;line-height:1.45}
.pp-update{flex-shrink:0;background:rgba(232,168,56,.16);border:1px solid rgba(232,168,56,.5);border-radius:7px;padding:6px 12px;font-size:11.5px;font-weight:600;color:#e8a838;cursor:pointer;font-family:inherit;transition:background .12s}
.pp-update:hover{background:rgba(232,168,56,.26)}

/* this job's calculation rules table */
.pp-rules{width:100%;border-collapse:collapse;font-size:12px}
.pp-rules th{text-align:left;font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--tmut,#888);font-weight:600;padding:0 8px 7px}
.pp-rules td{padding:3px 6px}
.pp-in{width:100%;background:var(--well,#272727);border:1px solid var(--well-bd,rgba(255,255,255,.1));border-radius:6px;padding:6px 9px;font-size:12px;color:var(--tprimary,#f0f0f0);font-family:inherit}
.pp-in:focus{outline:none;border-color:rgba(255,255,255,.32)}
.pp-del{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:none;border:none;border-radius:6px;color:var(--tmut,#777);cursor:pointer}
.pp-del:hover{background:rgba(224,82,82,.14);color:#e05252}
.pp-add{display:inline-flex;align-items:center;gap:6px;margin-top:10px;background:none;border:1px solid var(--well-bd,rgba(255,255,255,.16));border-radius:7px;padding:6px 12px;font-size:12px;font-weight:600;color:var(--tsec,#ccc);cursor:pointer;font-family:inherit}
.pp-add:hover{border-color:rgba(255,255,255,.35);color:var(--tprimary,#fff)}


/* toast anchored to the card it relates to (instead of bottom-centre) */
.toast.anchored{bottom:auto;left:0;transform:translateY(8px)}
.toast.anchored.show{transform:translateY(0)}

/* upload progress row */
.fx-main{flex:1;min-width:0}
.fx-bar{height:3px;margin-top:6px;background:rgba(255,255,255,.1);border-radius:2px;overflow:hidden}
.fx-bar-fill{height:100%;width:35%;background:#5dccff;border-radius:2px;animation:fxbar 1.1s ease-in-out infinite}
@keyframes fxbar{0%{margin-left:-35%}100%{margin-left:100%}}


/* download-all: busy while the zip is being built */
.fx-gdl.busy{opacity:.55;pointer-events:none}
.fx-gdl.busy i{animation:fxspin .8s linear infinite}
@keyframes fxspin{to{transform:rotate(360deg)}}

/* Project Pricing body reuses .logic-view styling — trim its page padding inside the modal */
.pp-body.logic-view{padding:0 0 24px}

/* ============================================================
   LIGHT / PRINT MODE AUDIT
   Every control added during this build used white text on a transparent or dark
   fill, with NO light-mode rule — so in light mode they were white-on-white and
   effectively invisible. These are their light counterparts.
   Lime (#d4fc00) is unreadable on white, so icons/accents shift to a dark olive.
   ============================================================ */

/* --- files UI (popup + quote modal) --- */
body.light .fx-addbtn,
body.light .fx-menubtn,
body.light .fx-menu-item,
body.light .fx-descsave,
body.light .fx-desccancel{ color:#1a1a18; }
body.light .fx-addbtn{ border-color:rgba(0,0,0,.2); }
body.light .fx-addbtn i{ color:#6b8000; }
body.light .fx-addbtn:hover{ border-color:rgba(0,0,0,.4); background:rgba(0,0,0,.04); }
body.light .fx-menubtn{ color:#666; }
body.light .fx-menubtn:hover{ background:rgba(0,0,0,.07); color:#1a1a18; }
body.light .fx-menu,
body.light .fx-addmenu{ background:#fff; border-color:rgba(0,0,0,.15); box-shadow:0 12px 34px rgba(0,0,0,.18); }
body.light .fx-menu-item i{ color:#777; }
body.light .fx-menu-item:hover{ background:rgba(0,0,0,.06); }
body.light .fx-line{ background:#f5f5f3; }
body.light .fx-line:hover{ background:#ededea; border-color:rgba(0,0,0,.12); }
body.light .fx-name{ color:#1a1a18; }
body.light .fx-tip{ background:#fff; border-color:rgba(0,0,0,.15); color:#333; }
body.light .fx-descinput{ background:#fff; border-color:rgba(0,0,0,.15); color:#1a1a18; }
body.light .fx-descsave,
body.light .fx-desccancel{ background:#f5f5f3; border-color:rgba(0,0,0,.15); }
body.light .fx-drop{ background:rgba(250,250,248,.95); }
body.light .fx-dropzone span{ color:#555; }
body.light .fx-gdl{ color:#777; }
body.light .fx-gdl:hover{ color:#1a1a18; background:rgba(0,0,0,.06); }

/* --- Project Pricing modal --- */
body.light .pp-in{ background:#fff; border-color:rgba(0,0,0,.15); color:#1a1a18; }
body.light .pp-add{ color:#1a1a18; border-color:rgba(0,0,0,.2); }
body.light .pp-add:hover{ border-color:rgba(0,0,0,.4); }
body.light .pp-del{ color:#777; }
body.light .pp-intro{ color:#666; }
body.light .pp-intro strong{ color:#1a1a18; }

/* --- CSV list (Project Details) --- */
body.light .csv-row{ background:#f5f5f3; border-color:rgba(0,0,0,.1); }
body.light .csv-name{ color:#1a1a18; }
body.light .csv-meta{ color:#777; }
body.light .csv-btn{ color:#333; border-color:rgba(0,0,0,.18); }
body.light .csv-btn:hover{ color:#1a1a18; border-color:rgba(0,0,0,.4); }
body.light .csv-addbtn{ color:#1a1a18; border-color:rgba(0,0,0,.2); }
body.light .csv-addbtn i{ color:#6b8000; }
body.light .csv-addbtn:hover{ border-color:rgba(0,0,0,.4); background:rgba(0,0,0,.04); }

/* the sender's domain, shown next to their name in an email note header */
.nt-dom{ font-size:11px; color:var(--tdim,#666); }


/* ===== BIG RED BRAIN =====
   Its own card, above the notes. Built from EVERY note on the job — 'requests' is what
   the client wants; the unlabelled section below is what WE'VE decided (calls, site
   notes). The internal half is omitted entirely when there's nothing to say. */
.jc.brb{
  background:rgba(224,82,82,.07);
  border:1px solid rgba(224,82,82,.28);
  margin-bottom:10px;
  padding:12px 14px;
}
.brb-h{
  display:flex; align-items:center; gap:7px;
  font-size:10px; font-weight:700; letter-spacing:.09em;
  color:#e05252; margin-bottom:9px;
}
.brb-h i{ font-size:16px; }
.brb-lbl{
  font-size:9px; font-weight:700; letter-spacing:.08em;
  color:var(--tmut,#888); margin-bottom:3px;
}
.brb-body{ font-size:12px; line-height:1.5; color:var(--tprimary,#f0f0f0); }
/* no heading on our side — a hairline and muted text is enough to say "this is us" */
.brb-int{
  margin-top:8px; padding-top:8px;
  border-top:1px solid rgba(224,82,82,.2);
  font-size:12px; line-height:1.5; color:var(--tsec,#aaa);
}
body.light .jc.brb{ background:rgba(224,82,82,.06); border-color:rgba(224,82,82,.3); }
body.light .brb-body{ color:#1a1a18; }
body.light .brb-int{ color:#555; }

/* The brain is ALWAYS alive — a slow, gentle pulse so the card reads as something
   that's watching the job, not a static label. It beats faster and harder while it's
   actually rebuilding the brief. */
@keyframes brbThrob{
  0%,100%{ transform:scale(1);    opacity:.8;  }
  50%    { transform:scale(1.12); opacity:1;   }
}
@keyframes brbThink{
  0%,100%{ transform:scale(1);    opacity:.85; }
  50%    { transform:scale(1.25); opacity:1;   }
}
.brb-h i{
  animation:brbThrob 2.4s ease-in-out infinite;   /* resting heartbeat */
  transform-origin:center;
  display:inline-block;
}
.brb-h i.thinking{
  animation:brbThink 0.8s ease-in-out infinite;   /* working */
}
/* respect people who don't want motion */
@media (prefers-reduced-motion: reduce){
  .brb-h i, .brb-h i.thinking{ animation:none; }
}

/* the sender's domain, shown next to their name in an email note header */


/* ===== NOTES on the Overview — tightened =====
   THE GAP: .ov-notelist{gap:22px} — 22px between EVERY note, declared twice, plus an
   18px margin on the recent group. That's what made them so far apart.
   Now: no gap, a hairline divider between rows, and tighter text. The coloured left
   spine (set inline per note type) still identifies the note at a glance.
   NOTE: the overview uses .ovn (via ovNoteRow) — NOT .nt-item. Style the right one. */
/* 4px of air ABOVE the divider and 4px BELOW it — the gap and the padding were
   fighting each other, which is why it looked lopsided. The divider now sits exactly
   in the middle: 4px padding-bottom on the row, 4px of list gap under the line. */
.ov-notescard .ov-notelist{ gap:4px!important; }

.ov-notescard .ovn{
  padding:0 10px 4px 12px;
  border-left-width:2px;
  border-bottom:1px solid var(--well-bd,rgba(255,255,255,.07));
}
.ov-notescard .ovn + .ovn{ padding-top:0; }
.ov-notescard .ovn:last-child{ border-bottom:none; }
.ov-notescard .ovn:hover{ background:rgba(255,255,255,.03); }
.ov-notescard .ovn-body{ font-size:13.5px; line-height:1.45; }
.ov-notescard .ovn-top{ margin-bottom:3px; gap:6px; }
.ov-notescard .ovn-type{ font-size:9px; }

/* the pinned / recent divider doesn't need 18px of air either */
.ov-notescard .ov-recentgroup{ margin-top:8px!important; padding-top:8px!important; }
.ov-notescard .ov-pinlabel{ margin:2px 0 6px!important; }

body.light .ov-notescard .ovn{ border-bottom-color:rgba(0,0,0,.07); }
body.light .ov-notescard .ovn:hover{ background:rgba(0,0,0,.03); }

/* the sender's domain, shown next to their name in an email note header */

/* the exclude-from-brain toggle on a note.
   ⚠ NEVER swap the icon NAME to show state — 'ti-brain-off' doesn't exist in the Tabler
   set, so it rendered as nothing and the icon vanished on click. Same icon, different
   colour: crossed out and red when excluded. */
.nt-brainoff{ cursor:pointer; opacity:.45; transition:opacity .12s, color .12s; position:relative; }
.nt-brainoff:hover{ opacity:1; }
.nt-brainoff.off{ opacity:1; color:#e05252; }
.nt-brainoff.off::after{
  content:''; position:absolute; left:-1px; top:50%; width:calc(100% + 2px); height:1.5px;
  background:#e05252; transform:rotate(-45deg); transform-origin:center;
}

/* the composer's "don't feed the brain" toggle */
.nt-brainbtn.off{ color:#e05252!important; position:relative; }
.nt-brainbtn.off::after{
  content:''; position:absolute; left:50%; top:50%; width:18px; height:1.5px;
  background:#e05252; transform:translate(-50%,-50%) rotate(-45deg);
}

/* ===== OVERVIEW RIGHT COLUMN =====
   ⚠ WHY THE ABSOLUTE POSITIONING MATTERS (I broke this and the notes card ran long):
   The right column must contribute NO height to the grid. The grid's height comes from
   the LEFT column (Job Summary + Pricing + Key Dates), and the right side fills whatever
   that turns out to be. That's why .ov-notescard was position:absolute;inset:0 in the
   first place — I replaced it with a flex stack and the notes card started driving the
   height, stretching past the bottom of the left column.
   Fix: keep the absolute fill, but on a WRAPPER that stacks brain + notes inside it. */
.jp-rcol{ position:relative; min-height:0; }
.ov-rstack{
  position:absolute; inset:0;
  display:flex; flex-direction:column; gap:10px;
  min-height:0;
}
/* [025500] BRAIN + THROBBER share the column as EQUAL halves. Each gets 50%, scrolls
   internally when its content is longer. The column fills the full height so the throbber
   bottom lines up with the left column (Key Dates) bottom. */
.ov-rstack > .jc.brb,
.ov-rstack > .jc.throb-card{
  flex:1 1 0;
  min-height:0;
  max-height:none;
  margin:0;
  overflow:hidden;
  position:relative;
  display:flex;
  flex-direction:column;
}
.ov-rstack > .jc.brb .brb-h,
.ov-rstack > .jc.throb-card .throb-card-h{ flex:0 0 auto; }
/* the throbber's body scrolls internally like the brain's */
.ov-rstack > .jc.throb-card .throb-read,
.ov-rstack > .jc.throb-card .throb-empty-body{
  flex:1 1 0; min-height:0; overflow-y:auto; overflow-x:hidden;
  scrollbar-width:none; -ms-overflow-style:none;
}
.ov-rstack > .jc.throb-card .throb-read::-webkit-scrollbar{ width:0; height:0; display:none; }
.ov-rstack > .jc.throb-card .throb-cmeta{ flex:0 0 auto; }
.brb-scroll{
  /* ⚠ WAS flex:1 1 0 — and that COLLAPSED THE BRIEF TO ZERO HEIGHT.
     The brain card is flex:0 1 auto (height from its content), so a child with
     flex-basis:0 starts at zero and has nothing to grow into. The card rendered — red
     background, header, 53px tall — but the text inside had no height at all.
     That's why the brain always looked "empty": the card was there, the brief wasn't.
     flex:0 1 auto = take your natural height, shrink only if you must. */
  flex:0 1 auto;
  min-height:0;
  overflow-y:auto;
  overflow-x:hidden;
  scrollbar-width:none;
  -ms-overflow-style:none;
  position:relative;
  padding-bottom:6px;
}
.brb-scroll::-webkit-scrollbar{ width:0; height:0; display:none; }
/* fade the brief out if it doesn't fit, so it never looks arbitrarily chopped */
.jc.brb.overflowing .brb-scroll::after{
  content:'';
  position:absolute; left:0; right:0; bottom:0; height:38px;
  background:linear-gradient(180deg, transparent 0%, #241a1a 92%);
  pointer-events:none;
}
body.light .jc.brb.overflowing .brb-scroll::after{
  background:linear-gradient(180deg, transparent 0%, #f7eded 92%);
}
.ov-rstack > .ov-notescard{
  position:relative!important;
  inset:auto!important;
  flex:1 1 0;
  min-height:0;
}

/* ===== OVERVIEW: no page scrollbar — the NOTES scroll instead =====
   The card is locked to 848px, .jp-body was overflow-y:auto, and .ov-notes-scroll was
   overflow:hidden. So the notes got CLIPPED and the whole page scrolled instead —
   which is that scrollbar that appeared to scroll to nothing.
   Backwards. The page should never scroll; the notes list should. */
.jp-page.tab-overview .jp-body{ overflow:hidden!important; padding-bottom:24px; }
.jp-page.tab-overview .jp-grid{ min-height:0; }
.jp-page.tab-overview .jp-lcol,
.jp-page.tab-overview .jp-rcol{ min-height:0; }
/* No scrollbar. Render EVERY note and let the fixed-height card decide where they stop
   — a clean cutoff with a fade, and breathing room before the card edge. "Go to notes"
   has the full list. */
/* Notes SCROLL on hover-wheel (hidden scrollbar), same as the brain. This block used to force
   overflow:hidden (clip-and-fade), which is why the brain scrolled but the notes didn't. */
.ov-notescard .ov-notes-scroll{
  overflow-y:auto!important;
  overflow-x:hidden!important;
  position:relative;
  flex:1 1 0;
  min-height:0;
  padding-bottom:18px;
  scrollbar-width:none;
  -ms-overflow-style:none;
}
.ov-notescard .ov-notes-scroll::-webkit-scrollbar{ width:0; height:0; display:none; }

/* the brain's structured output: tight lists, no bullet-point sprawl */
.brb-body p, .brb-int p{ margin:0 0 6px; }
.brb-body p:last-child, .brb-int p:last-child{ margin-bottom:0; }
.brb-body ul, .brb-int ul{ margin:0; padding-left:16px; list-style:disc; }
.brb-body li, .brb-int li{ margin:2px 0; }
.brb-body b, .brb-int b{ color:#fff; font-weight:600; }
body.light .brb-body b, body.light .brb-int b{ color:#1a1a18; }

/* ===== attachments ON a note =====
   Files that arrived with the note — an email's attachments, or files staged in the
   composer. The click handler (.nt-att) already existed; there was simply never any
   markup for it to open. */
.nt-atts{ display:flex; flex-wrap:wrap; gap:5px; margin-top:8px; padding-top:8px; border-top:1px solid var(--well-bd,rgba(255,255,255,.07)); }
.nt-att{
  display:inline-flex; align-items:center; gap:5px;
  background:var(--well,rgba(255,255,255,.05));
  border:1px solid var(--well-bd,rgba(255,255,255,.1));
  border-radius:6px; padding:3px 8px;
  font-size:11px; color:var(--tsec,#ccc);
  cursor:pointer; max-width:220px;
  transition:border-color .12s, background .12s;
}
.nt-att i{ font-size:13px; flex-shrink:0; }
.nt-att-name{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.nt-att:hover{ border-color:rgba(255,255,255,.3); background:rgba(255,255,255,.08); color:var(--tprimary,#fff); }
body.light .nt-att{ background:#f5f5f3; border-color:rgba(0,0,0,.1); color:#333; }
body.light .nt-att:hover{ border-color:rgba(0,0,0,.3); background:#ededea; color:#1a1a18; }

   MOBILE (Approach 2, VERTICAL) — additive only. #m-app hidden by default; everything below
   the media query is .m-* namespaced and only applies <=700px. Desktop rules above untouched.
   ============================================================ */
#m-app{display:none}

@media (max-width:700px){
  .app-header,.nav,.control-row,#board-wrap,.err-banner,
  .newjob-fab,.sitevisit-fab,.focus-fab,.compact-fab,.theme-fab{display:none!important}
  #m-app{display:flex;position:fixed;left:0;right:0;top:0;height:100vh;height:100dvh;flex-direction:column;background:var(--page,#0e0e0e);color:var(--tprimary,#f0f0f0);font-family:var(--font,'Inter',-apple-system,sans-serif)}
  body{overflow:hidden}

  /* top bar — brand centred */
  .m-top{display:flex;align-items:center;justify-content:space-between;padding:14px 16px 11px;border-bottom:1px solid var(--card-bd,#1e1e1e);flex:0 0 auto}
  .m-top-l,.m-top-r{width:44px;display:flex;align-items:center}
  .m-top-r{justify-content:flex-end;color:var(--tsec,#888);font-size:21px}
  .m-top-r i{cursor:pointer}
  .m-brand{flex:1;text-align:center;font-size:17px;font-weight:800}
  .m-brand .iq{color:var(--value,#d4fc00)}
  .m-top-search{gap:10px}
  .m-top-search > i{color:var(--tsec,#888);font-size:18px}
  .m-top-search input{flex:1;background:var(--card,#1a1a1a);border:1px solid var(--card-bd,#333);border-radius:9px;color:var(--tprimary,#fff);font-size:15px;padding:9px 12px;outline:none;font-family:inherit}
  .m-search-x{background:none;border:none;color:var(--tsec,#aaa);font-size:19px;padding:4px;cursor:pointer}

  /* vertical scroll — generous bottom pad so the URL bar never clips the last cards */
  .m-scroll{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:8px 13px calc(env(safe-area-inset-bottom,0px) + 120px)}

  .m-sec{margin-bottom:18px}
  .m-sec-h{display:flex;align-items:center;gap:8px;padding:7px 4px 9px;border-bottom:2px solid var(--cc,#4da6ff);margin-bottom:10px;position:sticky;top:0;background:var(--page,#0e0e0e);z-index:2}
  .m-sec-name{font-size:12px;font-weight:800;letter-spacing:.04em;text-transform:uppercase}
  .m-sec-count{font-size:11px;color:var(--muted,#666)}
  .m-empty-sec{text-align:center;color:var(--muted,#555);font-size:14px;padding:10px 0 4px}

  .m-card{display:flex;align-items:center;gap:9px;padding:14px 13px;background:var(--card,#1a1a1a);border:1px solid var(--card-bd,#2a2a2a);border-left:3px solid var(--cc,#4da6ff);border-radius:11px;margin-bottom:8px;cursor:pointer}
  .m-card:active{background:var(--card-hover,#232323)}
  .m-flagdot{width:7px;height:7px;border-radius:50%;background:var(--value,#d4fc00);flex:0 0 auto}
  .m-pin{color:#f5a623;font-size:14px;flex:0 0 auto}
  .m-addr{font-size:14px;font-weight:700;color:var(--tprimary,#f0f0f0);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .m-cpill{font-size:10px;font-weight:600;padding:2px 9px;border-radius:20px;border:1px solid var(--teal,#5DCAA5);color:var(--teal,#5DCAA5);white-space:nowrap;flex:0 0 auto;max-width:110px;overflow:hidden;text-overflow:ellipsis;background:transparent}
  .m-sttag{font-size:9px;font-weight:700;text-transform:uppercase;padding:2px 8px;border-radius:20px;border:1px solid;background:transparent;white-space:nowrap;flex:0 0 auto}
  .m-date{font-size:11px;font-weight:700;white-space:nowrap;flex:0 0 auto}
  .m-empty,.m-empty2{text-align:center;color:var(--muted,#666);font-size:13px;padding:40px 20px}

  .m-grph{font-size:10px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--muted,#666);margin:12px 2px 9px;display:flex;justify-content:space-between}
  .m-lnk{color:#4da6ff;cursor:pointer}

  .m-fab{position:fixed;bottom:calc(env(safe-area-inset-bottom,0px) + 22px);right:18px;width:54px;height:54px;border-radius:50%;background:var(--value,#d4fc00);color:#111;border:none;font-size:28px;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px rgba(212,252,0,.4);z-index:30}

  /* job sheet */
  .m-jv{position:fixed;left:0;right:0;top:0;height:100vh;height:100dvh;display:flex;flex-direction:column;background:var(--page,#0e0e0e)}
  .m-jv-top{padding:13px 15px;border-bottom:1px solid var(--card-bd,#1e1e1e);border-left:3px solid var(--cc,#4da6ff);flex:0 0 auto}
  .m-back{background:none;border:none;color:#4da6ff;font-size:12px;margin-bottom:9px;display:inline-flex;align-items:center;gap:3px;cursor:pointer;padding:0}
  .m-jv-title{font-size:19px;font-weight:800;display:flex;align-items:center;gap:7px}
  .m-jv-sub{display:flex;align-items:center;gap:8px;margin-top:7px}
  .m-jv-st{font-size:9px;font-weight:700;text-transform:uppercase;padding:3px 9px;border-radius:20px;border:1px solid;background:transparent}

  .m-jvtabs{display:flex;gap:20px;padding:0 15px;border-bottom:1px solid var(--card-bd,#1e1e1e);flex:0 0 auto}
  .m-jvtab{font-size:13px;font-weight:700;color:var(--muted,#666);padding:12px 0;background:none;border:none;border-bottom:2px solid transparent;cursor:pointer}
  .m-jvtab.on{color:var(--value,#d4fc00);border-bottom-color:var(--value,#d4fc00)}

  .m-jv-body{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:13px 15px calc(env(safe-area-inset-bottom,0px) + 24px)}

  .m-valrow{display:flex;align-items:center;justify-content:space-between;padding:13px 14px;background:var(--card,#1a1a1a);border:1px solid var(--card-bd,#2a2a2a);border-radius:11px;margin-bottom:14px}
  .m-val-l{font-size:11px;color:var(--tsec,#aaa);text-transform:uppercase;letter-spacing:.04em;font-weight:700}
  .m-val-v{font-size:20px;font-weight:800;color:var(--value,#d4fc00)}
  .m-val-none{font-size:13px;color:var(--muted,#777)}

  .m-brain{background:#2a1416;border:1px solid #4a2023;border-radius:11px;padding:13px 14px;margin-bottom:14px}
  .m-brain-h{font-size:9px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:#e2554a;margin-bottom:8px;display:flex;align-items:center;gap:5px}
  .m-brain-b{font-size:13px;color:#e8e8e8;line-height:1.55}
  .m-brain-b p{margin:0 0 6px}.m-brain-b ul{margin:0;padding-left:16px}.m-brain-b li{margin:3px 0}.m-brain-b b{color:#fff}

  .m-note{border-left:2px solid #6b4ea8;padding:2px 0 2px 11px;margin-bottom:14px}
  .m-note-h{font-size:9px;font-weight:700;color:#9d7fd0;text-transform:uppercase;letter-spacing:.03em;margin-bottom:4px}
  .m-note-b{font-size:13px;color:#ddd;line-height:1.55}

  .m-att{display:flex;align-items:center;gap:11px;padding:12px;background:var(--card,#1a1a1a);border:1px solid var(--card-bd,#2a2a2a);border-radius:10px;margin-bottom:8px;cursor:pointer}
  .m-att:active{background:var(--card-hover,#232323)}
  .m-att-ic{font-size:22px;color:#4da6ff;flex:0 0 auto}
  .m-att-fn{font-size:13px;color:#eee;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .m-att-fs{font-size:10px;color:var(--muted,#777)}

  .m-actions{display:flex;gap:8px;padding:11px 13px calc(env(safe-area-inset-bottom,0px) + 11px);border-top:1px solid var(--card-bd,#1e1e1e);flex:0 0 auto;background:var(--page,#0e0e0e)}
  .m-actions button{flex:1;font-size:11px;font-weight:700;color:#ccc;background:var(--card,#1c1c1c);border:1px solid var(--card-bd,#333);border-radius:9px;padding:10px 4px;display:flex;flex-direction:column;align-items:center;gap:4px;cursor:pointer}
  .m-actions button:active{background:#252525}
  .m-actions button i{font-size:18px}

  /* add-note modal */
  .m-notemodal{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:flex-end;z-index:50}
  .m-nm-card{background:var(--card,#1a1a1a);border-top-left-radius:16px;border-top-right-radius:16px;width:100%;padding:18px 16px calc(env(safe-area-inset-bottom,0px) + 16px);border-top:1px solid var(--card-bd,#333)}
  .m-nm-h{font-size:15px;font-weight:700;margin-bottom:12px}
  .m-nm-text{width:100%;background:var(--page,#0e0e0e);border:1px solid var(--card-bd,#333);border-radius:10px;color:var(--tprimary,#fff);font-size:15px;padding:12px;font-family:inherit;resize:none;outline:none;box-sizing:border-box}
  .m-nm-text:focus{border-color:#4da6ff}
  .m-nm-btns{display:flex;gap:10px;margin-top:14px}
  .m-nm-btns button{flex:1;font-size:14px;font-weight:700;padding:12px;border-radius:10px;cursor:pointer;border:1px solid var(--card-bd,#333)}
  .m-nm-cancel{background:transparent;color:var(--tsec,#aaa)}
  .m-nm-save{background:var(--value,#d4fc00);color:#111;border-color:var(--value,#d4fc00)}
}

/* ============================================================
   [018700] In a quote, the only FAB that applies is the theme toggle.
   The others (new job, site visit, Dane mode, compact) are dashboard-only.
   body.quoting is set by the router whenever state==='quote' (core.js).
   ============================================================ */
body.quoting .newjob-fab,
body.quoting .sitevisit-fab,
body.quoting .focus-fab,
body.quoting .compact-fab{display:none!important}

/* ============================================================
   [018900] Presence indicator — "Dane is also in this quote".
   Sits bottom-left so it never collides with the FAB stack on the right.
   ============================================================ */
#atiq-presence{
  position:fixed;left:18px;bottom:18px;z-index:70;
  display:flex;align-items:center;gap:8px;
  padding:8px 14px;border-radius:20px;
  background:var(--card,#1a1a1a);border:1px solid #4da6ff;
  color:var(--tprimary,#f0f0f0);font-size:12px;font-weight:600;
  box-shadow:0 4px 18px rgba(0,0,0,.35);
  animation:presIn .22s cubic-bezier(.2,.85,.3,1);
  pointer-events:none;max-width:min(360px,60vw);
}
#atiq-presence .pres-dot{
  width:8px;height:8px;border-radius:50%;background:#4da6ff;flex:0 0 auto;
  animation:presPulse 2s ease-in-out infinite;
}
#atiq-presence .pres-txt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
body.light #atiq-presence{background:#fff;color:#1a1a18;border-color:#1a5fbf}
body.light #atiq-presence .pres-dot{background:#1a5fbf}
@keyframes presIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@keyframes presPulse{0%,100%{opacity:1}50%{opacity:.35}}
@media print{ #atiq-presence{display:none!important} }

/* [019800] persistent save-conflict banner — replaces the toast that scrolled away unseen */
#atiq-save-conflict{
  position:fixed;left:50%;bottom:22px;transform:translateX(-50%);z-index:200;
  max-width:560px;width:calc(100% - 32px);
  background:#2a1416;border:1px solid #e05252;border-radius:12px;
  box-shadow:0 10px 40px rgba(0,0,0,.5);
  animation:ascfIn .2s cubic-bezier(.2,.85,.3,1);
}
#atiq-save-conflict .ascf-body{padding:14px 16px;display:flex;flex-direction:column;gap:11px}
#atiq-save-conflict .ascf-txt{font-size:13px;line-height:1.55;color:#f2dede}
#atiq-save-conflict .ascf-hint{font-size:12px;line-height:1.5;color:#ffd9a8;margin-top:6px;font-weight:600}
body.light #atiq-save-conflict .ascf-hint{color:#8a4b00}
#atiq-save-conflict .ascf-txt b{color:#fff}
#atiq-save-conflict .ascf-btns{display:flex;gap:9px;justify-content:flex-end}
#atiq-save-conflict button{font-size:13px;font-weight:700;padding:8px 15px;border-radius:8px;cursor:pointer;border:1px solid transparent}
#atiq-save-conflict .ascf-save{background:#e05252;color:#fff}
#atiq-save-conflict .ascf-save:hover{background:#ec6b6b}
#atiq-save-conflict .ascf-reload{background:transparent;color:#f2dede;border-color:#a05050}
#atiq-save-conflict .ascf-reload:hover{background:rgba(255,255,255,.06)}
body.light #atiq-save-conflict{background:#fff5f5;border-color:#b82020}
body.light #atiq-save-conflict .ascf-txt{color:#7a1f1f} body.light #atiq-save-conflict .ascf-txt b{color:#3a0f0f}
body.light #atiq-save-conflict .ascf-save{background:#b82020} body.light #atiq-save-conflict .ascf-save:hover{background:#cf2a2a}
body.light #atiq-save-conflict .ascf-reload{color:#7a1f1f;border-color:#d9a0a0}
@keyframes ascfIn{from{opacity:0;transform:translate(-50%,8px)}to{opacity:1;transform:translate(-50%,0)}}
@media print{ #atiq-save-conflict{display:none!important} }

/* ============================================================
   [020800] PLAN REGION TAGGING
   ============================================================ */
/* eye button on the section header + hover edit pencil */
.quote-view .sec-plan-eye-wrap{margin-left:8px;display:inline-flex;align-items:center;gap:2px;vertical-align:middle}
.quote-view .sec-plan-eye{width:22px;height:19px;border:none;background:none;color:var(--text-dim);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;flex-shrink:0}
.quote-view .sec-plan-eye.tagged{color:#ff5fa2}
.quote-view .sec-plan-eye:hover{color:#ff5fa2}
.quote-view .sec-plan-eye svg{width:18px;height:auto;display:block}
.quote-view .sec-plan-edit{width:18px;height:18px;border:none;background:none;color:var(--text-dim);cursor:pointer;font-size:12px;line-height:1;padding:0;opacity:0;transition:opacity .12s;flex-shrink:0}
.quote-view .sec-plan-eye-wrap:hover .sec-plan-edit{opacity:.7}
.quote-view .sec-plan-edit:hover{opacity:1;color:var(--info)}

/* prompt / confirm / alert shell */
.pt-prompt-back{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;z-index:1200;padding:20px}
.pt-prompt{background:var(--dark-2,#1e1e1e);border:1px solid var(--border-md,rgba(255,255,255,.16));border-radius:12px;padding:18px;width:340px;box-shadow:0 16px 50px rgba(0,0,0,.6)}
body.light .pt-prompt{background:#fff}
.pt-prompt h3{margin:0 0 6px;font-size:14px;color:var(--text,#f0f0f0)}
.pt-prompt p{margin:0 0 14px;font-size:12px;color:var(--text-muted,#999);line-height:1.55}
.pt-prompt select{width:100%;box-sizing:border-box;background:var(--dark-3,#272727);color:var(--text,#f0f0f0);border:1px solid var(--border-md,rgba(255,255,255,.16));border-radius:7px;padding:8px;font-size:12px;margin-bottom:14px}
body.light .pt-prompt select{background:#f5f5f3;color:#1a1a18}
.pt-prompt .pt-btns{display:flex;gap:8px;justify-content:flex-end}
.pt-prompt button{font-size:12px;font-weight:700;padding:8px 14px;border-radius:8px;border:1px solid var(--border-md,rgba(255,255,255,.16));cursor:pointer}
.pt-prompt .pt-yes{background:var(--info,#4da6ff);color:#fff;border-color:var(--info,#4da6ff)}
.pt-prompt .pt-no{background:none;color:var(--text-muted,#999)}

/* plan viewer modal */
.pt-modal-back{position:fixed;inset:0;background:rgba(0,0,0,.72);display:flex;align-items:center;justify-content:center;z-index:1100;padding:14px}
.pt-modal{background:var(--dark-2,#1e1e1e);border:1px solid var(--border-md,rgba(255,255,255,.16));border-radius:12px;width:98vw;height:96vh;max-width:none;overflow:hidden;display:flex;flex-direction:column}
body.light .pt-modal{background:#fff}
.pt-hd{display:flex;align-items:center;gap:10px;padding:11px 14px;border-bottom:1px solid var(--border,rgba(255,255,255,.09))}
.pt-hd .pt-mt{font-size:13px;font-weight:700;color:var(--text,#f0f0f0)}
.pt-hd .pt-ms{font-size:11px;color:var(--text-muted,#999)}
.pt-hd .pt-spacer{margin-left:auto}
.pt-hd button{background:none;border:1px solid var(--border-md,rgba(255,255,255,.16));color:var(--text-muted,#999);border-radius:6px;padding:5px 11px;font-size:11px;font-weight:700;cursor:pointer}
.pt-hd .pt-save{background:var(--info,#4da6ff);color:#fff;border-color:var(--info,#4da6ff);display:none}
.pt-hd .pt-cancel{display:none}
.pt-stage{position:relative;overflow:hidden;background:#fff;flex:1;user-select:none;cursor:grab;display:flex;align-items:center;justify-content:center}
.pt-zoom{position:relative;transform-origin:0 0;will-change:transform;display:flex;align-items:center;justify-content:center;width:100%;height:100%}
.pt-canvasbox{position:relative;line-height:0;display:inline-block}
.pt-stage .pt-canvas{display:block;max-width:100%;max-height:100%;width:auto;height:auto}
.pt-overlay{position:absolute;inset:0;cursor:crosshair;display:none}
.pt-rects{position:absolute;inset:0;pointer-events:none}
.pt-rect{position:absolute;border:none;background:rgba(212,252,0,.22);box-sizing:border-box;pointer-events:none;border-radius:3px}
.pt-rect .pt-rdel{position:absolute;top:3px;right:3px;width:22px;height:22px;border-radius:50%;background:#e05252;color:#fff;border:2px solid #fff;font-size:14px;font-weight:700;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 1px 4px rgba(0,0,0,.4);pointer-events:auto}
.pt-rect .pt-rdel:hover{background:#ff6b6b;transform:scale(1.12)}
.pt-dim{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}
.pt-outcanvas{position:absolute;top:0;left:0;pointer-events:none}
.pt-style-ctrls{display:inline-flex;align-items:center;gap:10px;margin-left:12px}
.pt-style-ctrls label{font-size:10px;color:var(--text-muted,#999);display:inline-flex;align-items:center;gap:4px}
.pt-style-ctrls select{font-size:11px;padding:2px 5px;border-radius:5px;background:var(--dark-3,#272727);color:var(--text,#f0f0f0);border:1px solid var(--border-md,rgba(255,255,255,.16))}
body.light .pt-style-ctrls select{background:#fff;color:#1a1a18}
.pt-zoombar{display:flex;align-items:center;gap:6px;padding:5px 10px;border-top:1px solid var(--border,rgba(255,255,255,.09));background:var(--dark,#141414)}
body.light .pt-zoombar{background:#f7f7f5}
.pt-zoombar button{width:26px;height:24px;border:1px solid var(--border-md,rgba(255,255,255,.16));background:var(--dark-3,#272727);color:var(--text,#f0f0f0);border-radius:6px;font-size:14px;font-weight:700;cursor:pointer;padding:0}
.pt-zoombar .pt-zreset{width:auto;padding:0 10px;font-size:11px}
body.light .pt-zoombar button{background:#fff;color:#1a1a18}
.pt-zhint{font-size:10px;color:var(--text-dim,#666);margin-left:6px}
.pt-note{font-size:11px;color:var(--text-muted,#999);padding:7px 14px;border-top:1px solid var(--border,rgba(255,255,255,.09));background:var(--dark,#141414)}
body.light .pt-note{background:#f7f7f5}
.pt-note b{color:var(--accent,#d4fc00)}
body.light .pt-note b{color:#6b8300}
@media print{ .pt-modal-back,.pt-prompt-back,.sec-plan-eye{display:none!important} }

/* [022900] restore-backup button + picker */
.btn.btn-restore{background:#8a4b00;color:#fff;border:1px solid #a85a00}
.btn.btn-restore:hover{background:#a85a00}
body.light .btn.btn-restore{background:#ffb066;color:#3a1f00;border-color:#e0851a}
#atiq-restore-picker .rb-list{display:flex;flex-direction:column;gap:6px;margin:4px 0 14px}
#atiq-restore-picker .rb-row{display:flex;justify-content:space-between;align-items:center;gap:10px;width:100%;text-align:left;
  background:var(--dark-3,#272727);color:var(--text,#f0f0f0);border:1px solid var(--border-md,rgba(255,255,255,.16));border-radius:8px;padding:9px 12px;cursor:pointer;font-size:12px}
#atiq-restore-picker .rb-row:hover{border-color:var(--info,#4da6ff)}
#atiq-restore-picker .rb-when{font-weight:700}
#atiq-restore-picker .rb-val{color:var(--text-muted,#999)}
body.light #atiq-restore-picker .rb-row{background:#f5f5f3;color:#1a1a18}

/* [024100] labour compact — hide unused rows/headers; control group mirrors take-off */
.quote-view .lab-compact-hidden{display:none!important}
.lab-ctrl-group{display:inline-flex;align-items:center;gap:6px;margin-left:auto}

/* ═══════════════════════════════════════════════════════════════════
   [024600] JOB SUMMARY COVER SHEET — paginated preview + print-ready A4
   Inter throughout, uppercase address+client, legible brain, 4-col inc/exc,
   inc/exc bottom-aligned, auto-shrink to fit, real page frames.
   ═══════════════════════════════════════════════════════════════════ */
.jp-summarybtn{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:var(--tsec);background:var(--card);border:1px solid var(--card-bd);border-radius:8px;padding:8px 13px;cursor:pointer;margin-right:8px;transition:background .12s,border-color .12s,color .12s}
.jp-summarybtn:hover{background:var(--well);color:var(--tprimary);border-color:var(--card-bd)}
.jp-summarybtn i{font-size:14px;color:#4da6ff}

.cs-overlay{position:fixed;inset:0;z-index:12000;background:rgba(10,10,10,.86);display:flex;flex-direction:column;backdrop-filter:blur(3px)}
.cs-toolbar{flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:12px 20px;background:#1a1a1a;border-bottom:1px solid rgba(255,255,255,.1)}
.cs-tb-title{font-size:13px;font-weight:600;color:#ccc;letter-spacing:.02em}
.cs-tb-actions{display:flex;gap:10px}
.cs-tb-btn{font-size:13px;font-weight:600;padding:8px 15px;border-radius:8px;border:1px solid rgba(255,255,255,.16);background:#2a2a2a;color:#f0f0f0;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.cs-tb-btn:hover{background:#333}
.cs-tb-print{background:#2b7fff;border-color:#2b7fff;color:#fff}
.cs-tb-print:hover{filter:brightness(1.08)}
.cs-scroll{flex:1;overflow-y:auto;padding:28px;display:flex;flex-direction:column;align-items:center}
#cs-doc{display:flex;flex-direction:column;align-items:center}

/* real A4 page frames (shown separately, not continuous) */
.cs-page{width:794px;height:1123px;background:#fff;color:#1a1a1a;margin:0 auto 22px;box-shadow:0 8px 40px rgba(0,0,0,.5);position:relative;overflow:hidden;font-family:'Inter',-apple-system,'Segoe UI',Arial,sans-serif;font-variant-numeric:tabular-nums;flex:0 0 auto}
.cs-pad{position:absolute;inset:0;padding:50px 58px;display:flex;flex-direction:column}
.cs-pad.cs-tight{font-size:.94em}
.cs-pad.cs-tighter{font-size:.88em}
.cs-pagenum{position:absolute;bottom:10px;right:16px;font-size:9px;color:#c4c4c4}

/* header D — blue accent bar, logo right */
.cs-hd{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #e8e8e8;padding-bottom:18px}
.cs-hdleft{display:flex;align-items:stretch;gap:16px}
.cs-bar{width:0;border-left:4px solid #2b7fff;border-radius:2px;flex:0 0 4px}
.cs-eyebrow{font-size:9px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#2b7fff;margin-bottom:6px}
.cs-addr{font-size:21px;font-weight:800;letter-spacing:-.01em;line-height:1.1;color:#1a1a1a}
.cs-sub{font-size:12px;color:#666;font-weight:600;margin-top:5px}
.cs-logo{height:48px;flex:0 0 auto;margin-left:24px}

.cs-conthd{display:flex;justify-content:space-between;align-items:center;border-bottom:1.5px solid #1a1a1a;padding-bottom:10px}
.cs-conthd span{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#1a1a1a}
.cs-conthd img{height:26px}

/* section label (Price Breakdown) — subtle grey, no underline */
.cs-sec{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.16em;color:#8a8a8a;margin-bottom:13px}

/* two-column details: fields (sized to content) left + scope right */
.cs-details{display:grid;grid-template-columns:auto 1fr;gap:48px;margin-top:34px;align-items:start}
.cs-fields{display:grid;grid-template-columns:1fr;gap:11px}
.cs-fld{display:flex;flex-direction:column;font-size:12px;line-height:1.4}
.cs-fld .cs-k{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:#aaa}
.cs-fld .cs-v{font-weight:500;color:#1a1a1a;margin-top:2px;white-space:nowrap}
.cs-fld .cs-v a{color:#1a1a1a;text-decoration:none}

/* scope column (from the brain's Scope group) */
.cs-scopecol{min-width:0}
.cs-scope-h{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#2b7fff;margin-bottom:7px}
.cs-scope-lead{font-size:11.5px;font-weight:600;color:#1a1a1a;line-height:1.4;margin-bottom:8px}
.cs-scope-list{list-style:none;margin:0;padding:0}
.cs-scope-list li{font-size:10.5px;line-height:1.45;color:#1a1a1a;padding:3px 0 3px 13px;position:relative}
.cs-scope-list li:before{content:'';position:absolute;left:1px;top:9px;width:4px;height:4px;border-radius:50%;background:#2b7fff;opacity:.7}
.cs-scope-list li b,.cs-scope-list li strong{color:#1a1a1a;font-weight:700}

/* full-width divider before price (matches under-header rule) */
.cs-divider{height:1px;background:#e8e8e8;margin:34px 0 30px}

.cs-price{margin-top:0}
.cs-stages{width:100%;border-collapse:collapse;font-size:12px;margin-top:2px}
.cs-stages td{padding:9px 4px;border-bottom:1px solid #f0f0f0;vertical-align:middle}
.cs-stages tr:last-child td{border-bottom:none}
.cs-stgnum{width:70px;font-weight:700;font-size:9.5px;color:#2b7fff;letter-spacing:.03em;text-transform:uppercase}
.cs-stgname{font-weight:600;color:#1a1a1a}
.cs-stgamt{text-align:right;font-weight:700;color:#1a1a1a;white-space:nowrap}
/* total: blue border flush to last stage row, light blue bg, black text */
.cs-grand{display:flex;justify-content:space-between;align-items:center;margin-top:0;padding:13px 16px;background:#eef5ff;border-top:2px solid #2b7fff;border-radius:0 0 6px 6px}
.cs-glbl{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:#1a1a1a}
.cs-gamt{font-size:21px;font-weight:800;letter-spacing:-.01em;color:#1a1a1a}

/* inc/exc pinned to bottom, 4 columns (2 each) */
.cs-ie{margin-top:auto;padding-top:26px;display:grid;grid-template-columns:1fr 1fr;gap:30px}
.cs-iehd{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;padding-bottom:5px;margin-bottom:9px;border-bottom:1.5px solid}
.cs-iehd.cs-inc{color:#2f8a4e;border-bottom-color:#cfe6d6}
.cs-iehd.cs-exc{color:#c0392b;border-bottom-color:#eed3d0}
ul.cs-iel{list-style:none;columns:2;column-gap:18px}
ul.cs-iel li{font-size:10px;line-height:1.4;padding:2px 0 2px 15px;position:relative;color:#444;break-inside:avoid}
ul.cs-iel.cs-inc li:before{content:'\2713';position:absolute;left:0;color:#2f8a4e;font-weight:800;font-size:9px}
ul.cs-iel.cs-exc li:before{content:'\2715';position:absolute;left:0;color:#c0392b;font-weight:800;font-size:9px}
ul.cs-iel li.cs-none{padding-left:0;color:#999;list-style:none}
ul.cs-iel li.cs-none:before{content:''}
.cs-loading{color:#ccc;font-size:14px;padding:60px;text-align:center;font-family:'Inter',sans-serif}

/* PRINT: render each .cs-page at true A4 (210×297mm), preserving the on-screen layout exactly.
   We keep the fixed page box (not reflow) so print matches the preview 1:1.
   IMPORTANT: quote-print.css also defines @page{margin:5mm}. Anonymous @page rules merge and the
   later one wins, which would add a 5mm physical margin ON TOP of our full-height 297mm sheet —
   pushing it past the printable area (extra top/bottom whitespace + a stray blank page). We use a
   NAMED page (`cspage`) with its own margin:0 so the shared 5mm rule doesn't apply to our pages. */
@page cspage{ size:A4; margin:0; }
@media print{
  html,body{background:#fff!important}
  body.cs-printing > *{display:none!important}
  body.cs-printing > .cs-overlay{display:block!important;position:static!important;inset:auto!important;background:#fff!important;backdrop-filter:none!important;height:auto!important;width:auto!important;overflow:visible!important}
  body.cs-printing .cs-toolbar{display:none!important}
  body.cs-printing .cs-scroll{display:block!important;overflow:visible!important;padding:0!important;margin:0!important;height:auto!important;width:auto!important}
  body.cs-printing #cs-doc{display:block!important;width:auto!important}
  body.cs-printing .cs-page{
    page:cspage;
    -webkit-print-color-adjust:exact;print-color-adjust:exact;
    box-shadow:none!important;margin:0!important;border:0!important;
    width:210mm!important;height:297mm!important;min-height:297mm!important;max-height:297mm!important;
    overflow:hidden!important;page-break-after:always;break-after:page}
  body.cs-printing .cs-page:last-child{page-break-after:auto;break-after:auto}
  body.cs-printing .cs-pad{position:absolute!important;inset:0!important;padding:50px 58px!important;height:auto!important;display:flex!important;flex-direction:column!important}
  body.cs-printing .cs-pagenum{display:none!important}
}

/* [024900] Big Red Brain marker zones — scannable ⚠ / ⤴ / ⏳ chips (card + cover sheet) */
.brain-marker{display:inline;padding-left:2px}
.brain-marker .brm-glyph{font-weight:700;margin-right:3px}
/* card (dark) */
.brb-body .brm-warn,.brb-int .brm-warn{color:#ffb4a0}
.brb-body .brm-changed,.brb-int .brm-changed{color:#9fd0ff}
.brb-body .brm-wait,.brb-int .brm-wait{color:#ffd98a}
/* cover sheet (light) */
.cs-brain .brm-warn{color:#c0392b;font-weight:500}
.cs-brain .brm-changed{color:#1a5fbf;font-weight:500}
.cs-brain .brm-wait{color:#9a6a00;font-weight:500}
.cs-brain .brain-marker .brm-glyph{font-weight:700}

/* ═══════════════════════════════════════════════════════════════════
   [025100] THE THROBBER — standalone card (brain sibling, magenta) + 2-step picker
   ═══════════════════════════════════════════════════════════════════ */
/* card — same DNA as .jc.brb, magenta hue from the logo */
.jc.throb-card{ background:rgba(232,50,214,.07); border:1px solid rgba(232,50,214,.30); margin-bottom:10px; padding:12px 14px; }
body.light .jc.throb-card{ background:rgba(232,50,214,.06); border-color:rgba(232,50,214,.32); }
.throb-card-h{ display:flex; align-items:center; gap:7px; font-size:10px; font-weight:700; letter-spacing:.09em; color:#e832d6; margin-bottom:9px; }
.throb-ic{ font-size:16px; display:inline-block; transform-origin:center; animation:throbPulse 1.6s ease-in-out infinite; }
.throb-sp{ flex:1; }
.throb-mini{ font-size:10px; font-weight:600; letter-spacing:0; text-transform:none; color:var(--tmut); background:var(--well); border:1px solid var(--card-bd); border-radius:6px; padding:3px 9px; cursor:pointer; margin-left:5px; }
.throb-mini:hover{ color:var(--tprimary); border-color:#e832d6; }
@keyframes throbPulse{ 0%,100%{ transform:scale(1); opacity:.75; } 50%{ transform:scale(1.18); opacity:1; } }
@media (prefers-reduced-motion:reduce){ .throb-ic{ animation:none; } }

/* empty state */
.throb-empty-body{ text-align:center; padding:8px 4px 4px; }
.throb-quip{ font-size:12px; color:var(--tsec); font-style:italic; margin-bottom:12px; }
.throb-cta{ display:inline-flex; align-items:center; gap:8px; font-size:12px; font-weight:700; letter-spacing:.02em; color:#fff; background:linear-gradient(90deg,#e832d6,#ff5bb0); border:none; border-radius:9px; padding:10px 18px; cursor:pointer; box-shadow:0 2px 14px rgba(232,50,214,.32); }
.throb-cta i{ display:inline-block; animation:throbPulse 1.2s ease-in-out infinite; font-size:15px; }
.throb-cta:hover{ filter:brightness(1.08); }
.throb-chint{ font-size:10px; color:var(--text-dim); margin-top:9px; }

/* populated read — A2 schedule table (grouped by level band) */
.throb-read{ font-size:11px; line-height:1.4; color:var(--tprimary); }
.throb-read .ps-grp{ font-size:8.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#e832d6; margin:9px 0 3px; }
.throb-read .ps-grp:first-child{ margin-top:0; }
.throb-read th{ text-align:left; font-size:8px; text-transform:uppercase; letter-spacing:.05em; color:var(--tmut); font-weight:600; padding:1px 8px 3px 0; border-bottom:1px solid rgba(232,50,214,.3); }
.throb-read td{ padding:3px 8px 3px 0; border-bottom:1px solid rgba(255,255,255,.05); vertical-align:top; color:var(--tsec); }
.throb-read td:first-child{ font-weight:500; color:var(--tprimary); }
.throb-read td:nth-child(2){ font-family:'SFMono-Regular',ui-monospace,monospace; color:var(--tprimary); white-space:nowrap; }
.throb-read td:nth-child(3){ color:var(--tsec); font-size:10.5px; }
.throb-read table{ width:100%; border-collapse:collapse; font-size:11px; table-layout:auto; }
.throb-read tr.band td{ background:rgba(232,50,214,.10); font-size:8px; text-transform:uppercase; letter-spacing:.07em; color:#e879de; font-weight:700; padding:3px 8px 3px; border-bottom:none; border-radius:3px; }
.throb-read td b{ color:var(--tprimary); font-weight:600; }
.throb-read .ps-line{ font-size:11px; color:var(--tsec); line-height:1.4; }
.throb-read .ps-flag{ font-size:11px; color:#d99a2b; line-height:1.4; margin-bottom:1px; }
body.light .throb-read{ color:#1a1a18; }
body.light .throb-read td:first-child, body.light .throb-read td:nth-child(2), body.light .throb-read td b{ color:#1a1a18; }
body.light .throb-read td{ color:#444; }
.throb-cmeta{ font-size:10px; color:var(--text-dim); margin-top:10px; padding-top:8px; border-top:1px solid rgba(232,50,214,.18); }

/* [031500] ── provenance tags on every Qty ──
   The whole point of v2: a scaled guess must never look like a printed spec value.
   est = derived/scaled (amber, loud)  ·  stated = printed on the drawing  ·  counted = symbols counted. */
.throb-read td b.est, .throb-read td b.std, .throb-read td b.cnt{
  display:inline-block; font-family:var(--font,inherit); font-size:7.5px; font-weight:700;
  text-transform:uppercase; letter-spacing:.06em; padding:1px 4px; border-radius:3px;
  margin-left:4px; vertical-align:1px; line-height:1.4;
}
.throb-read td b.est{ background:rgba(217,154,43,.20); color:#e0a83c; border:1px solid rgba(217,154,43,.35); }
.throb-read td b.std{ background:rgba(90,200,140,.16); color:#5ac88c; border:1px solid rgba(90,200,140,.30); }
.throb-read td b.cnt{ background:rgba(90,160,230,.16); color:#6aa8e6; border:1px solid rgba(90,160,230,.30); }
body.light .throb-read td b.est{ background:rgba(180,120,10,.14); color:#8a5c05; border-color:rgba(180,120,10,.30); }
body.light .throb-read td b.std{ background:rgba(20,130,70,.12); color:#146d3f; border-color:rgba(20,130,70,.28); }
body.light .throb-read td b.cnt{ background:rgba(30,100,180,.12); color:#155195; border-color:rgba(30,100,180,.28); }

/* excluded band — existing / by others. Deliberately drab: it's scope we are NOT pricing. */
.throb-read tr.band.excl td{ background:rgba(255,255,255,.06); color:var(--tmut); }
.throb-read tr.band.excl ~ tr td{ color:var(--tmut); }
body.light .throb-read tr.band.excl td{ background:rgba(0,0,0,.05); }

/* provenance line — which sheet did what */
.throb-read .ps-src{ font-size:9.5px; color:var(--text-dim); font-style:italic; margin-top:8px; line-height:1.4; }

/* [031500] truncation banner — persists on the card, unlike the modal */
.throb-trunc{
  display:flex; align-items:flex-start; gap:6px; font-size:10px; line-height:1.4;
  background:rgba(226,75,74,.14); border:1px solid rgba(226,75,74,.40); color:#f09595;
  border-radius:5px; padding:6px 8px; margin-bottom:9px;
}
.throb-trunc i{ font-size:12px; flex:0 0 auto; margin-top:.5px; }
body.light .throb-trunc{ background:rgba(200,40,40,.10); color:#a32d2d; border-color:rgba(200,40,40,.32); }

/* [031500] truncation modal — shown once, immediately after a cut-short scan */
.throb-trunc-modal{ position:fixed; inset:0; z-index:13000; background:rgba(10,8,10,.78); display:flex; align-items:center; justify-content:center; padding:24px; backdrop-filter:blur(3px); }
.throb-trunc-modal .ttm-box{ max-width:420px; width:100%; background:#1f1320; border:1px solid rgba(226,75,74,.45); border-radius:10px; padding:18px 20px; }
.throb-trunc-modal .ttm-h{ display:flex; align-items:center; gap:7px; font-size:13px; font-weight:700; color:#f09595; margin-bottom:10px; }
.throb-trunc-modal .ttm-h i{ font-size:16px; }
.throb-trunc-modal .ttm-body{ font-size:12px; line-height:1.5; color:var(--tsec); }
.throb-trunc-modal .ttm-body b{ color:var(--tprimary); }
.throb-trunc-modal .ttm-fix{ margin-top:9px; padding-top:9px; border-top:1px solid rgba(255,255,255,.10); color:var(--text-dim); font-size:11px; }
.throb-trunc-modal .ttm-ok{ margin-top:14px; width:100%; padding:8px; border-radius:6px; border:1px solid rgba(232,50,214,.45); background:rgba(232,50,214,.16); color:#f0a8e8; font-size:12px; font-weight:600; cursor:pointer; }
.throb-trunc-modal .ttm-ok:active{ transform:scale(.98); }
body.light .throb-trunc-modal .ttm-box{ background:#fff; border-color:rgba(200,40,40,.35); }
body.light .throb-trunc-modal .ttm-h{ color:#a32d2d; }

/* [035800] text-layer badge on each page tile + the debug text modal */
.throb-txtbadge{ position:absolute; left:8px; bottom:8px; z-index:3; font-size:8.5px; font-weight:700; letter-spacing:.05em;
  padding:2px 5px; border-radius:3px; cursor:pointer; background:rgba(255,255,255,.10); color:var(--text-dim); border:1px solid rgba(255,255,255,.18); }
.throb-txtbadge.has{ background:rgba(90,200,140,.18); color:#5ac88c; border-color:rgba(90,200,140,.40); }
.throb-txtbadge:active{ transform:scale(.96); }
.throb-txtmodal{ position:fixed; inset:0; z-index:13200; background:rgba(10,8,10,.86); display:flex; align-items:center; justify-content:center; padding:20px; }
.throb-txtmodal .ttx-box{ width:100%; max-width:680px; max-height:80vh; display:flex; flex-direction:column; background:#1f1320; border:1px solid rgba(232,50,214,.35); border-radius:10px; overflow:hidden; }
.throb-txtmodal .ttx-h{ flex:0 0 auto; display:flex; align-items:center; justify-content:space-between; gap:10px; padding:11px 14px; font-size:12px; font-weight:700; color:#f0a8e8; border-bottom:1px solid rgba(232,50,214,.22); }
.throb-txtmodal .ttx-x{ padding:4px 10px; border-radius:5px; border:1px solid rgba(255,255,255,.20); background:transparent; color:var(--tsec); font-size:11px; cursor:pointer; }
.throb-txtmodal .ttx-pre{ flex:1 1 auto; overflow:auto; margin:0; padding:12px 14px; font-family:'SFMono-Regular',ui-monospace,monospace; font-size:10.5px; line-height:1.45; color:var(--tsec); white-space:pre-wrap; word-break:break-word; }
body.light .throb-txtmodal .ttx-box{ background:#fff; }
body.light .throb-txtmodal .ttx-h{ color:#a3138c; }

/* ── picker overlay ── */
.throb-overlay{ position:fixed; inset:0; z-index:12500; background:rgba(10,8,10,.92); display:flex; flex-direction:column; backdrop-filter:blur(3px); }
.throb-bar{ flex:0 0 auto; display:flex; align-items:center; justify-content:space-between; padding:12px 20px; background:#1f1320; border-bottom:1px solid rgba(232,50,214,.25); gap:12px; }
.throb-title{ font-size:13px; font-weight:700; color:#f0f0f0; display:flex; align-items:center; gap:8px; }
.throb-title .throb-ic{ color:#e832d6; }
.throb-bar-actions{ display:flex; align-items:center; gap:10px; }
.throb-est{ font-size:12px; color:#c6f24e; font-weight:600; white-space:nowrap; }
.throb-btn{ font-size:12px; font-weight:600; padding:8px 15px; border-radius:8px; border:1px solid rgba(255,255,255,.16); background:#2a2a2a; color:#eee; cursor:pointer; }
.throb-btn:hover{ background:#333; }
.throb-go{ background:linear-gradient(90deg,#e832d6,#ff5bb0); border:none; color:#fff; }
.throb-go:disabled{ opacity:.4; cursor:not-allowed; }
.throb-step{ flex:0 0 auto; font-size:10px; color:#e832d6; text-transform:uppercase; letter-spacing:.1em; font-weight:700; padding:12px 20px 0; }
.throb-scroll{ flex:1; overflow-y:auto; padding:14px 20px 20px; }
.throb-loading,.throb-err{ color:#bbb; font-size:13px; padding:24px; text-align:center; }
.throb-err{ color:#ff9a9a; padding:10px; text-align:left; }

/* step 1 — file list */
.throb-filelist{ display:flex; flex-direction:column; gap:8px; max-width:620px; margin:0 auto; }
.throb-filerow{ display:flex; align-items:center; gap:12px; padding:12px 14px; border:1px solid var(--card-bd); border-radius:9px; cursor:pointer; background:#1c1c1c; }
.throb-filerow:hover{ border-color:rgba(232,50,214,.4); }
.throb-filerow.sel{ border-color:#e832d6; background:rgba(232,50,214,.09); }
.throb-fico{ width:34px; height:34px; border-radius:7px; background:#2a2a2a; display:flex; align-items:center; justify-content:center; font-size:16px; }
.throb-fmeta{ flex:1; }
.throb-fname{ font-size:13px; font-weight:600; color:#f0f0f0; }
.throb-fsub{ font-size:11px; color:var(--tmut); }
.throb-fcheck{ width:22px; height:22px; border-radius:6px; border:2px solid var(--card-bd); display:flex; align-items:center; justify-content:center; color:#fff; font-weight:800; font-size:13px; }
.throb-filerow.sel .throb-fcheck{ border-color:#e832d6; background:#e832d6; }

/* step 2 — pages: 4 across, full screen width */
.throb-filegroup-h{ font-size:12px; font-weight:700; color:#ddd; margin:14px 0 8px; padding-bottom:5px; border-bottom:1px solid rgba(255,255,255,.1); }
.throb-pages{ display:grid; grid-template-columns:repeat(3,1fr); gap:16px; width:100%; }
.throb-tile{ position:relative; border:2px solid rgba(255,255,255,.14); border-radius:8px; overflow:hidden; cursor:pointer; background:#fff; transition:border-color .12s; }
.throb-tile:hover{ border-color:rgba(255,255,255,.45); }
.throb-tile.sel{ border-color:#c6f24e; box-shadow:0 0 0 3px rgba(198,242,78,.35); }
.throb-tile canvas{ display:block; width:100%; height:auto; }
.throb-pg{ position:absolute; top:6px; left:6px; background:rgba(0,0,0,.72); color:#fff; font-size:11px; font-weight:600; padding:2px 8px; border-radius:4px; pointer-events:none; }
/* visible tick badge — empty circle when unselected, green check when selected */
.throb-check{ position:absolute; top:6px; right:6px; width:26px; height:26px; border-radius:50%; border:2px solid rgba(255,255,255,.7); background:rgba(0,0,0,.35); display:flex; align-items:center; justify-content:center; color:transparent; font-size:15px; font-weight:800; pointer-events:none; }
.throb-tile.sel .throb-check{ background:#c6f24e; border-color:#c6f24e; color:#0e0e0e; }
/* enlarge button — separate action, bottom-right */
.throb-enlbtn{ position:absolute; bottom:6px; right:6px; display:flex; align-items:center; gap:4px; font-size:10px; font-weight:600; color:#fff; background:rgba(0,0,0,.6); border:none; border-radius:5px; padding:4px 8px; cursor:pointer; }
.throb-enlbtn:hover{ background:rgba(0,0,0,.85); }
.throb-enlbtn i{ font-size:13px; }

/* enlarge */
.throb-enlarge{ position:fixed; inset:0; z-index:12600; background:rgba(0,0,0,.93); display:flex; align-items:center; justify-content:center; padding:20px; overflow:auto; }
.throb-enlarge-wrap{ display:flex; flex-direction:column; gap:12px; align-items:center; max-width:95vw; }
.throb-enlarge-bar{ display:flex; gap:10px; }
.throb-enlarge-canvas{ max-width:92vw; max-height:80vh; width:auto; height:auto; border-radius:6px; box-shadow:0 8px 40px rgba(0,0,0,.6); background:#fff; }

/* scanning */
.throb-scanning{ text-align:center; padding:44px 20px; }
.throb-orb{ width:60px; height:60px; border-radius:50%; background:radial-gradient(circle,#ff5bb0,#e832d6); margin:0 auto 16px; animation:throbBig 1s ease-in-out infinite; }
@keyframes throbBig{ 0%,100%{ transform:scale(1); box-shadow:0 0 0 0 rgba(232,50,214,.5); } 50%{ transform:scale(1.15); box-shadow:0 0 30px 10px rgba(232,50,214,.25); } }
.throb-msg{ font-size:14px; color:#e832d6; font-weight:600; }

/* ═══════════════════════════════════════════════════════════════════
   [025300] BIG RED BRAIN — Option A layout (Scope group + Flags group)
   ═══════════════════════════════════════════════════════════════════ */
.bg-brief .bg-grp{ font-size:9px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#e05252; margin:11px 0 4px; }
.bg-brief .bg-grp:first-child{ margin-top:0; }
.bg-brief .bg-lead{ font-size:12.5px; line-height:1.45; color:var(--tprimary); font-weight:600; margin:0 0 3px; }
.bg-brief .bg-list{ list-style:none; margin:0; padding:0; font-size:12px; line-height:1.5; color:var(--tprimary); }
.bg-brief .bg-list li{ padding:2px 0 2px 14px; position:relative; }
.bg-brief .bg-list li:before{ content:''; position:absolute; left:2px; top:9px; width:4px; height:4px; border-radius:50%; background:#e05252; opacity:.6; }
.bg-brief .bg-list li b{ color:var(--tprimary); font-weight:700; }
/* flags — colour-coded rows */
.bg-brief .bg-flag{ font-size:11.5px; line-height:1.45; padding:3px 0 3px 4px; color:var(--tprimary); }
.bg-brief .bg-flag.warn{ color:#e8853a; }
.bg-brief .bg-flag.chg{ color:#5b9fe0; }
.bg-brief .bg-flag.wait{ color:#d9b53a; }
body.light .bg-brief .bg-lead, body.light .bg-brief .bg-list, body.light .bg-brief .bg-list li b{ color:#1a1a18; }
/* internal ("Our side") — matches the Scope/Flags group language */
.brb-int{ margin-top:9px; padding-top:9px; border-top:1px solid rgba(224,82,82,.2); }
.brb-int .bg-grp{ font-size:9px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#c77; margin:0 0 4px; }
.brb-int .bg-int-body{ font-size:12px; line-height:1.5; color:var(--tsec); }
.brb-int .bg-int-body .bg-list li{ color:var(--tsec); }
.brb-int .bg-int-body .bg-list li:before{ background:#c77; }
.brb-int .bg-int-body b{ color:var(--tprimary); }

/* [025400] Re-brain button on the brain card (mirrors .throb-mini) */
.brb-h{ align-items:center; }
.brb-sp{ flex:1; }
.brb-mini{ font-size:10px; font-weight:600; letter-spacing:0; text-transform:none; color:var(--tmut); background:var(--well); border:1px solid var(--card-bd); border-radius:6px; padding:3px 9px; cursor:pointer; }
.brb-mini:hover{ color:var(--tprimary); border-color:#e05252; }

/* ===== [052000] QUOTE DOCUMENT (qd-*) =====
   Client-facing sheet. Shares the design language of the Job Summary (cs-*) but is a separate
   document with its own classes — see the drift note at the top of js/quote/quotedoc.js.
   Reuses .cs-overlay / .cs-toolbar / .cs-scroll for the preview shell. */
.qd-page{width:794px;height:1123px;background:#fff;color:#1a1a1a;margin:0 auto 22px;box-shadow:0 8px 40px rgba(0,0,0,.5);position:relative;overflow:hidden;font-family:'Inter',-apple-system,'Segoe UI',Arial,sans-serif;font-variant-numeric:tabular-nums;flex:0 0 auto}
.qd-pad{position:absolute;inset:0;padding:50px 58px;display:flex;flex-direction:column}
.qd-pad.qd-tight{font-size:.94em}
.qd-pad.qd-tighter{font-size:.88em}
.qd-pagenum{position:absolute;bottom:10px;right:16px;font-size:9px;color:#c4c4c4}
.qd-loading{color:#bbb;font-size:13px;text-align:center;padding:40px}

/* header D — same as the summary, with the date under the logo */
.qd-hd{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:1px solid #e8e8e8;padding-bottom:18px}
.qd-hdleft{display:flex;align-items:stretch;gap:16px}
.qd-hdright{display:flex;flex-direction:column;align-items:flex-end;flex:0 0 auto;margin-left:24px}
/* [058500] border, NOT background — print drops background colours, which is how this bar
   disappeared from the saved PDF while every text colour survived. Same reason the bullets went. */
.qd-bar{width:0;border-left:4px solid #2b7fff;border-radius:2px;flex:0 0 4px}
.qd-eyebrow{font-size:9px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#2b7fff;margin-bottom:6px}
.qd-addr{font-size:21px;font-weight:800;letter-spacing:-.01em;line-height:1.1;color:#1a1a1a}
.qd-sub{font-size:12px;color:#666;font-weight:600;margin-top:5px}
.qd-logo{height:48px;flex:0 0 auto}
.qd-date{font-size:10px;color:#888;margin-top:10px}

.qd-sec{font-size:9px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#2b7fff;margin-bottom:8px}
.qd-scope{margin-top:26px}
.qd-scope-body{font-size:14px;line-height:1.55;color:#1a1a1a}
.qd-scope-body.qd-none{color:#aaa;font-style:italic}

/* inclusions / exclusions — same treatment as the summary */
.qd-ie{margin-top:33px;display:grid;grid-template-columns:1fr 1fr;gap:30px}
.qd-iehd{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;padding-bottom:5px;margin-bottom:9px;border-bottom:1.5px solid}
.qd-iehd.qd-inc{color:#2f8a4e;border-bottom-color:#cfe6d6}
.qd-iehd.qd-exc{color:#c0392b;border-bottom-color:#eed3d0}
ul.qd-iel{list-style:none;columns:2;column-gap:18px;margin:0;padding:0}
ul.qd-iel li{font-size:10px;line-height:1.4;padding:2px 0 2px 15px;position:relative;color:#444;break-inside:avoid}
ul.qd-iel.qd-inc li:before{content:'\2713';position:absolute;left:0;color:#2f8a4e;font-weight:800;font-size:9px}
ul.qd-iel.qd-exc li:before{content:'\2715';position:absolute;left:0;color:#c0392b;font-weight:800;font-size:9px}
ul.qd-iel li.qd-none{padding-left:0;color:#999}
ul.qd-iel li.qd-none:before{content:''}

/* price — centred between two hairlines, no fill. The filled blue bar plus a second filled
   accept box read as two competing announcements; on a one-page quote with a single figure the
   number doesn't need a highlighter to be found. Acceptance is quiet supporting text under it. */
.qd-price{border-top:1px solid #e4e4e2;border-bottom:1px solid #e4e4e2;padding:22px 0;margin-top:33px;text-align:center}
.qd-plbl{font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#2b7fff;margin-bottom:8px}
.qd-pamt{font-size:38px;font-weight:800;letter-spacing:-.025em;line-height:1;color:#1a1a1a}
.qd-pgst{font-size:13px;font-weight:600;color:#888;margin-left:8px;letter-spacing:0}
.qd-accept{font-size:10.5px;color:#888;margin-top:11px}

/* terms — fills the foot of the page */
.qd-terms{margin-top:auto;padding-top:28px}
.qd-termshd{font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:#999;padding-bottom:5px;margin-bottom:8px;border-bottom:1px solid #e8e8e6}
.qd-termslist{columns:2;column-gap:26px}
.qd-term{font-size:8.5px;line-height:1.5;color:#777;padding:0 0 4px 13px;position:relative;break-inside:avoid}
.qd-termn{position:absolute;left:0}
.qd-conthd{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #e8e8e8;padding-bottom:14px;margin-bottom:20px;font-size:12px;color:#666;font-weight:600}
.qd-conthd img{height:32px}

@media print{
  body.qd-printing > *{display:none!important}
  body.qd-printing > #qd-overlay{display:block!important;position:static!important;inset:auto!important;background:#fff!important;backdrop-filter:none!important;height:auto!important;width:auto!important;overflow:visible!important}
  body.qd-printing .cs-toolbar{display:none!important}
  body.qd-printing .cs-scroll{display:block!important;overflow:visible!important;padding:0!important;margin:0!important;height:auto!important;width:auto!important}
  body.qd-printing #qd-doc{display:block!important;width:auto!important}
  body.qd-printing .qd-page{
    page:cspage;
    -webkit-print-color-adjust:exact;print-color-adjust:exact;
    box-shadow:none!important;margin:0!important;border:0!important;
    width:210mm!important;height:297mm!important;min-height:297mm!important;max-height:297mm!important;
    overflow:hidden!important;page-break-after:always;break-after:page}
  body.qd-printing .qd-page:last-child{page-break-after:auto;break-after:auto}
  body.qd-printing .qd-pad{position:absolute!important;inset:0!important;padding:50px 58px!important;height:auto!important;display:flex!important;flex-direction:column!important}
  body.qd-printing .qd-pagenum{display:none!important}
}

/* [052000] Quote Terms tab — single column version of the inclusions layout */
.incexc-cols-single{grid-template-columns:1fr!important;max-width:820px}
.terms-num{color:var(--text-dim);font-size:11px;margin-right:8px;flex:0 0 auto;min-width:16px}

/* [053000] Modal body scrollbars — .fxm-body was the only scroller in the app still showing the
   browser default. Everything else (notes, brain, throbber) uses the hidden-scroll treatment. */
.fxm-body{scrollbar-width:none;-ms-overflow-style:none}
.fxm-body::-webkit-scrollbar{width:0;height:0;display:none}
/* the email/quote card is content-tall — keep it inside the viewport like every other modal */
#qv-email-card.quote-view{max-height:90vh!important;overflow:hidden}

/* [055000] Notes on the quote document — quieter than the scope so it reads as a qualification */
.qd-notes{margin-top:20px}
.qd-notes-body{font-size:11.5px;line-height:1.6;color:#444}
/* date now rides with the Quotation label — it identifies the quote, so it belongs with it */
.qd-eyedate{margin-left:10px;padding-left:10px;border-left:1px solid #cfe0f7;color:#7ba7e0;font-weight:600}
/* bullets from the wand */
ul.qd-rich-list{list-style:none;margin:5px 0 0;padding:0}
ul.qd-rich-list li{position:relative;padding:2px 0 2px 14px;line-height:1.5;break-inside:avoid}
/* [058000] The dot is a text GLYPH, not a background. Browsers drop background colours when
   printing unless print-color-adjust says otherwise — which is why these bullets vanished from
   the saved PDF while every other colour (all of it text colour) survived. */
ul.qd-rich-list li:before{content:'\2022';position:absolute;left:1px;top:0;color:#2b7fff;font-size:13px;line-height:1.5}
.qd-rich-line{line-height:1.55}
.qd-rich-line + ul.qd-rich-list{margin-top:7px}
