:root{
    --bg:#14171a;
    --panel:#1d2126;
    --panel-raised:#262b31;
    --panel-border:#33393f;
    --paper:#f3efe6;
    --paper-line:#ded6c2;
    --ink:#eae6dc;
    --ink-dim:#9aa0a6;
    --signal:#ff7a45;
    --signal-dim:#5c3324;
    --confirm:#5fd9c6;
    --alert:#e4536b;
    --font-display:'Space Grotesk',sans-serif;
    --font-body:'Inter',sans-serif;
    --font-mono:'IBM Plex Mono',monospace;
    /* Radius scale — use these instead of raw px so shapes stay consistent.
       Additive: existing rules keep their literal values until migrated. */
    --radius-sm:6px;
    --radius:8px;
    --radius-lg:12px;
    --radius-pill:999px;
    /* Semantic aliases. These were referenced ~36× (--accent) and several times
       (--danger) but never defined in the dark theme, so they resolved to nothing
       (transparent) or a near-miss fallback. --accent IS the orange brand (--signal),
       proven by its use next to rgba(255,122,69,…); --danger IS the alert red. */
    --accent:var(--signal);
    --danger:var(--alert);
    /* Category label colors (amber = Lead, blue = Contact). These are intentional
       light "label" pills off the dark palette; defined once here so the 3 places
       that render them (badge helper, CV tag styles, compose banner) stay in sync. */
    --lead-bg:#fff4e5;    --lead-ink:#8a4b00;    --lead-line:#ffb95e;
    --contact-bg:#e7f0ff; --contact-ink:#0a4bb3; --contact-line:#8fb6f0;
  }
  *{box-sizing:border-box;}
  body{
    margin:0;
    background:var(--bg);
    color:var(--ink);
    font-family:var(--font-body);
    min-height:100vh;
    overflow-x:hidden;
  }
  .app{max-width:1180px;margin:0 auto;padding:24px 20px 80px;}

  /* header */
  .topbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;margin-bottom:22px;}
  .brand{display:flex;align-items:center;gap:12px;}
  .brand-mark{
    width:38px;height:38px;border-radius:8px;
    background:linear-gradient(135deg,var(--signal),#c0431f);
    display:flex;align-items:center;justify-content:center;
    font-family:var(--font-display);font-weight:700;color:var(--bg);font-size:18px;
    flex-shrink:0;
  }
  .brand-text h1{font-family:var(--font-display);font-size:19px;margin:0;letter-spacing:0.2px;}
  .brand-text p{margin:0;font-size:12px;color:var(--ink-dim);}
  .stat-strip{display:flex;gap:18px;font-family:var(--font-mono);font-size:12px;color:var(--ink-dim);}
  .stat-strip b{color:var(--ink);font-weight:600;}

  /* tabs */
  .tabs{display:flex;gap:6px;border-bottom:1px solid var(--panel-border);margin-bottom:22px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;}
  /* No wrap: tabs stay on one row and the row scrolls sideways instead of the last tab
     falling off an unreachable edge. flex-shrink:0 stops "Conversations" being crushed to
     nothing; the hidden scrollbar keeps it clean on desktop where it never needs to scroll. */
  .tabs::-webkit-scrollbar{display:none;}
  .tabs .tab-btn{flex:0 0 auto;white-space:nowrap;}
  .tab-btn{
    background:none;border:none;color:var(--ink-dim);font-family:var(--font-display);
    font-size:13px;font-weight:600;letter-spacing:0.4px;text-transform:uppercase;
    padding:11px 16px;cursor:pointer;border-bottom:2px solid transparent;position:relative;
  }
  .tab-btn .n{font-family:var(--font-mono);font-weight:400;text-transform:none;margin-right:6px;color:var(--ink-dim);}
  .tab-btn.active{color:var(--ink);border-bottom-color:var(--signal);}
  .tab-btn.active .n{color:var(--signal);}
  .tab-btn .badge{
    background:var(--signal);color:var(--bg);font-family:var(--font-mono);font-size:10px;
    border-radius:20px;padding:1px 6px;margin-left:6px;font-weight:600;
  }

  .panel{display:none;}
  .panel.active{display:block;}

  .card{background:var(--panel);border:1px solid var(--panel-border);border-radius:10px;padding:18px;}
  .card + .card{margin-top:16px;}
  .card h2{font-family:var(--font-display);font-size:14px;margin:0 0 4px;letter-spacing:0.3px;}
  .card .sub{font-size:12px;color:var(--ink-dim);margin:0 0 14px;}

  .grid-2{display:grid;grid-template-columns:1.3fr 1fr;gap:16px;}
  @media (max-width:860px){.grid-2{grid-template-columns:1fr;}}

  label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin-bottom:5px;font-weight:600;}
  input[type=text],input[type=tel],input[type=email],input[type=password],input[type=number],input[type=date],input[type=datetime-local],textarea,select,.signer-f{
    width:100%;background:var(--panel-raised);border:1px solid var(--panel-border);color:var(--ink);
    border-radius:7px;padding:9px 10px;font-family:var(--font-body);font-size:13px;outline:none;
  }
  input[type=date],input[type=datetime-local]{color-scheme:dark;}
  input[type=date]::-webkit-calendar-picker-indicator,input[type=datetime-local]::-webkit-calendar-picker-indicator{filter:invert(0.6);cursor:pointer;}
  input:focus,textarea:focus,select:focus{border-color:var(--signal);}
  /* Show/hide password toggle (added to every password field by app.js) */
  .pw-wrap{position:relative;display:block;}
  .pw-wrap > input{padding-right:40px;}
  .pw-toggle{position:absolute;top:0;right:0;height:100%;width:38px;display:flex;align-items:center;justify-content:center;background:none;border:none;padding:0;margin:0;cursor:pointer;color:var(--ink-dim);}
  .pw-toggle:hover{color:var(--ink);}
  .pw-toggle svg{width:18px;height:18px;display:block;}
  textarea{resize:vertical;font-family:var(--font-mono);line-height:1.5;}
  .field-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:10px;}
  .field-row.full{grid-template-columns:1fr;}

  button{cursor:pointer;font-family:var(--font-body);border:none;}
  .btn{
    background:var(--panel-raised);color:var(--ink);border:1px solid var(--panel-border);
    padding:9px 14px;border-radius:7px;font-size:13px;font-weight:600;
  }
  .btn:hover{border-color:var(--signal);}
  .btn-primary{background:var(--signal);color:#1a1005;border:1px solid var(--signal);}
  .btn-primary:hover{background:#ff8a5c;}
  .btn-primary:disabled{background:var(--panel-raised);color:var(--ink-dim);border-color:var(--panel-border);cursor:not-allowed;}
  .btn-ghost{background:transparent;border:1px solid var(--panel-border);color:var(--ink-dim);}
  .btn-ghost:hover{color:var(--ink);}
  .btn-sm{padding:5px 10px;font-size:12px;border-radius:6px;}
  .btn-danger{background:transparent;border:1px solid var(--alert);color:var(--alert);}

  .row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
  .row.between{justify-content:space-between;}

  .divider{height:1px;background:var(--panel-border);margin:16px 0;}

  /* contacts table */
  .contact-toolbar{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-bottom:12px;}
  .contact-toolbar input[type=text]{flex:1;min-width:160px;}

  /* advanced filter builder */
  .filter-builder{border:1px solid var(--panel-border);border-radius:8px;padding:12px;margin-bottom:12px;background:var(--panel-raised);}
  .filter-builder-head{display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer;}
  .filter-builder-head h3{font-family:var(--font-display);font-size:12px;letter-spacing:0.4px;text-transform:uppercase;margin:0;color:var(--ink);}
  .filter-active-count{font-family:var(--font-mono);font-size:11px;color:var(--signal);}
  .filter-body{margin-top:12px;}
  .filter-body.collapsed{display:none;}
  .filter-bucket{border:1px solid var(--panel-border);border-radius:7px;padding:10px;margin-bottom:8px;background:var(--panel);}
  .filter-bucket-label{font-family:var(--font-mono);font-size:10px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:0.5px;margin-bottom:8px;}
  .filter-cond{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:6px;}
  .filter-cond select,.filter-cond input{background:var(--panel-raised);border:1px solid var(--panel-border);color:var(--ink);border-radius:6px;padding:6px 8px;font-size:12px;font-family:var(--font-body);}
  /* Field / operator / value share ONE row (like the mockup) and wrap only when the
     container is too narrow (e.g. the side rail). Overrides the global select{width:100%}
     that otherwise forced each control onto its own line. */
  .filter-cond .cond-field{flex:2 1 150px;width:auto;min-width:130px;}
  .filter-cond .cond-op{flex:1 1 120px;width:auto;min-width:110px;}
  .filter-cond .cond-value,.filter-cond .cond-chips{flex:2 1 150px;width:auto;min-width:120px;}
  .filter-cond .cond-value-a,.filter-cond .cond-value-b{flex:1 1 90px;width:auto;min-width:80px;}
  .filter-cond input[type=date],.filter-cond input[type=number]{color-scheme:dark;}
  .filter-or-tag{font-family:var(--font-mono);font-size:10px;color:var(--confirm);text-align:center;margin:2px 0;letter-spacing:1px;}
  /* Between-group divider: a line — AND — line rail. */
  .filter-and-tag{display:flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);margin:10px 0;letter-spacing:2px;font-weight:700;}
  .filter-and-tag::before,.filter-and-tag::after{content:"";height:1px;flex:1;background:var(--panel-border);}
  /* Round number badge on each condition — referenced by the Criteria Pattern. */
  .cond-num{width:24px;height:24px;flex:0 0 auto;border-radius:50%;border:1px solid var(--panel-border);background:var(--bg);color:var(--ink-dim);font-family:var(--font-mono);font-size:11px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;}
  .cond-num-off{border-style:dashed;opacity:.4;}
  /* Clickable OR/AND connector — a pill with a swap glyph, left-aligned under the row. */
  .cond-conn{display:flex;justify-content:flex-start;margin:4px 0;}
  .conn-toggle{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono);font-size:10.5px;font-weight:800;letter-spacing:.11em;padding:3px 11px;border-radius:6px;border:1px solid transparent;cursor:pointer;transition:.12s;}
  .conn-toggle::after{content:"\21C4";font-size:10px;opacity:.6;font-weight:600;letter-spacing:0;}
  .conn-toggle.conn-or{color:var(--confirm);background:rgba(95,217,198,.12);border-color:var(--confirm);}
  .conn-toggle.conn-and{color:var(--bg);background:var(--signal);border-color:var(--signal);}
  .conn-toggle:hover{filter:brightness(1.06);box-shadow:0 0 0 3px rgba(255,122,69,.10);}
  /* Criteria Pattern bar — dashed divider, mono expression with coloured keywords. */
  .cond-pattern{display:flex;align-items:center;gap:11px;flex-wrap:wrap;margin:13px 0 2px;padding-top:12px;border-top:1px dashed var(--panel-border);font-size:12.5px;color:var(--ink-dim);}
  .cond-pattern-lbl{font-family:var(--font-mono);font-size:11px;font-weight:700;color:var(--ink-dim);text-transform:uppercase;letter-spacing:.04em;display:inline-flex;align-items:center;gap:6px;flex:0 0 auto;}
  .cp-q{width:16px;height:16px;border-radius:50%;border:1px solid var(--panel-border);font-size:10px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-dim);cursor:help;font-family:var(--font-body);font-weight:600;}
  .pattern-str{font-family:var(--font-mono);font-size:13px;color:var(--ink);flex:1;min-width:170px;letter-spacing:.02em;}
  .pattern-str .pk-and{color:var(--signal);font-weight:700;}
  .pattern-str .pk-or{color:var(--confirm);font-weight:700;}
  .pattern-edit,.pattern-auto{font-size:12.5px;font-weight:650;color:var(--signal);background:none;border:none;cursor:pointer;flex:0 0 auto;padding:2px 0;}
  .pattern-edit:hover,.pattern-auto:hover{text-decoration:underline;}
  .pattern-input{flex:1;min-width:170px;background:var(--bg);border:1px solid var(--signal);color:var(--ink);border-radius:6px;padding:7px 10px;font-family:var(--font-mono);font-size:13px;outline:none;box-shadow:0 0 0 3px rgba(255,122,69,.12);}
  .pattern-input.bad{border-color:var(--alert);box-shadow:0 0 0 3px rgba(228,83,107,.15);}
  .pattern-warn{color:var(--alert);font-size:11px;flex-basis:100%;}
  .filter-builder-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;}
  .batch-picker{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
  .batch-picker span{font-size:11px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:0.5px;margin-right:2px;}
  .batch-btn{
    background:var(--panel-raised);border:1px solid var(--panel-border);color:var(--ink);
    font-family:var(--font-mono);font-size:12px;padding:6px 10px;border-radius:6px;
  }
  .batch-btn:hover{border-color:var(--confirm);}

  /* ---- keep the list card's mobile/laptop stacking identical to before ----
     The filter builder sits between the search bar and the cooldown row. We use
     flex + source-order control (not a DOM change) so nothing about the narrow
     layout shifts. On >=1740px the grid below overrides this into the left rail. */
  .list-card{display:flex; flex-direction:column;}
  /* The Contacts "Add contacts" card is display:none'd (compactContactsAddPanel), but it's
     still a .card sibling before the list card, so ".card + .card" was adding a phantom 16px
     gap above Contacts that Leads/Tasks/Deals don't have. Zero it so the top gap matches. */
  #panel-contacts .list-card{margin-top:0;}
  .list-card > .list-main{display:contents;}
  .list-card > .ll-head{order:0;margin-bottom:4px;}
  .list-card > .ll-sub{order:1;}
  .ll-rail{display:contents;}
  .list-card .ll-filters{order:1;}
  .list-main > #listViewTabs{order:2;}
  .list-main > .contact-toolbar{order:3;}
  .list-card .filter-builder{order:4;}
  .list-main > .ll-cooldown{order:5;}
  .list-main > .batch-picker{order:6;}
  .list-main > #filterCountLine{order:7;}
  .list-main > #pagerBar{order:8;}
  .list-main > #contactList{order:9;}

  /* ---- desktop only: Advanced filters as a Zoho-style left rail ----
     Engages only on wide monitors (>=1740px) where there's enough empty
     side gutter to hold the rail WITHOUT shrinking the contact list.
     Below this width everything stays exactly as it was (incl. mobile). */
  @media (min-width:1200px){
    /* Fill the screen on desktop: the whole app (header, nav, and EVERY module —
       current and future — since they all live inside .app) uses the full width
       instead of a narrow centered column. */
    .app{ max-width:2200px; padding-left:32px; padding-right:32px; }
    /* Contacts: filters in a left rail, the list fills the rest of the width. */
    #panel-contacts{ width:100%; margin-left:0; margin-right:0; }
    /* The rail (col 1) and the entire list side (col 2, one wrapper) are two
       INDEPENDENT cells in a single row. Because they no longer share sub-rows,
       a tall filter rail can never stretch the rows or push the list down —
       which is what left the big empty gap. */
    #panel-contacts .list-card{
      display:grid;
      grid-template-columns:260px minmax(0,1fr);
      column-gap:20px;
      align-items:start;
    }
    #panel-contacts .list-card > .ll-head{grid-column:1 / -1; grid-row:1; order:0;}
    #panel-contacts .list-card > .ll-sub {grid-column:1 / -1; grid-row:2; order:0;}
    /* The rail (quick filters + advanced builder, wrapped in .ll-rail) and the list
       are two INDEPENDENT cells in ONE row, so the tall list can never push the
       advanced filters down — they stack right under the quick filters. */
    #panel-contacts .list-card > .ll-rail{
      display:block;
      grid-column:1; grid-row:3; order:0; align-self:start;
      position:sticky; top:16px; max-height:calc(100vh - 24px);
      overflow-y:auto; overflow-x:hidden;
    }
    #panel-contacts .list-card > .list-main{display:block; grid-column:2; grid-row:3; order:0; min-width:0;}
    #panel-contacts .ll-rail > .ll-filters{margin:0 0 16px;}
    #panel-contacts .ll-rail > .filter-builder{margin:0;}
    /* always open, no toggle on desktop (matches the module rails) */
    #panel-contacts .ll-rail .filter-builder-head{cursor:default;}
    #panel-contacts .ll-rail .filter-body{display:block !important;margin-top:12px;}
    #panel-contacts .ll-rail #filterToggleChevron{display:none;}
  }

  /* Custom-module advanced filter rail (per-field, one impl for all modules) */
  .cm-layout{display:block;}
  .cm-filter-rail{margin-bottom:18px;}
  .cm-filter-head{display:flex;align-items:center;justify-content:space-between;font-size:11px;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin-bottom:10px;}
  .cmf-item{margin-bottom:11px;}
  .cmf-lbl{display:block;font-size:11px;color:var(--ink-dim);margin-bottom:3px;}
  .cmf-in{width:100%;padding:6px 8px;font-size:12px;}
  .cmf-range{display:flex;gap:6px;}
  .cmf-range .cmf-in{width:auto;flex:1;min-width:0;}
  @media (min-width:1200px){
    .cm-layout{display:grid;grid-template-columns:260px minmax(0,1fr);column-gap:20px;align-items:start;}
    .cm-layout.cm-nofilter{grid-template-columns:1fr;}
    .cm-filter-rail{margin-bottom:0;position:sticky;top:16px;max-height:calc(100vh - 32px);overflow-y:auto;padding-right:4px;}
  }
  .cm-nofilter .cm-filter-rail{display:none;}
  /* Make the module filter rails read EXACTLY like the Contacts advanced filters:
     compact 12px description text (the .card .sub rule doesn't reach the rail since
     it's outside the card), and always-open with no toggle on desktop. */
  .cm-filter-rail .sub{font-size:12px;color:var(--ink-dim);}
  .cm-filter-rail .filter-builder{margin-bottom:0;}
  @media (min-width:1200px){
    .cm-filter-rail .filter-builder .filter-builder-head{cursor:default;}
    .cm-filter-rail .filter-builder .gfb-chevron{display:none;}
    .cm-filter-rail .filter-builder .filter-body.collapsed{display:block;}
  }

  .views-bar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;}
  .views-dd{position:relative;}
  .views-dd-btn{
    display:flex;align-items:center;gap:8px;
    background:var(--panel-raised);border:1px solid var(--panel-border);color:var(--ink);
    font-family:var(--font-display);font-size:15px;font-weight:600;letter-spacing:0.2px;
    padding:7px 12px;border-radius:8px;cursor:pointer;max-width:340px;
  }
  .views-dd-btn #activeViewName{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .views-dd-btn:hover{border-color:var(--signal);}
  .views-dd.open .views-dd-btn{border-color:var(--signal);}
  .views-caret{font-size:11px;color:var(--ink-dim);flex-shrink:0;}
  .views-dirty{color:var(--signal);font-size:20px;line-height:0;flex-shrink:0;}
  .views-icon-btn{padding:6px 10px;font-size:14px;}
  .views-menu{
    position:absolute;top:calc(100% + 6px);left:0;z-index:60;width:310px;max-height:62vh;overflow-y:auto;
    background:var(--panel);border:1px solid var(--panel-border);border-radius:10px;
    box-shadow:0 16px 40px rgba(0,0,0,0.45);padding:8px;
  }
  .views-search-wrap{padding:2px 2px 6px;}
  .views-search{width:100%;font-size:13px;}
  .views-section{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:0.6px;color:var(--ink-dim);padding:9px 6px 4px;}
  .views-row{display:flex;align-items:center;gap:2px;border-radius:7px;}
  .views-row:hover{background:var(--panel-raised);}
  .views-row.active{background:rgba(255,122,69,0.10);}
  .views-star{background:none;border:none;color:var(--ink-dim);font-size:14px;cursor:pointer;padding:8px 4px;width:28px;flex-shrink:0;}
  .views-star.on{color:var(--signal);}
  .views-star.placeholder{opacity:0.25;cursor:default;}
  .views-name{flex:1;text-align:left;background:none;border:none;color:var(--ink);font-size:13px;padding:9px 6px;cursor:pointer;font-family:var(--font-body);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .views-row.active .views-name{color:var(--signal);font-weight:600;}
  .views-pen{background:none;border:none;color:var(--ink-dim);font-size:13px;cursor:pointer;padding:8px;width:30px;flex-shrink:0;opacity:0;}
  .views-row:hover .views-pen{opacity:1;}
  .views-pen:hover{color:var(--signal);}
  .views-pen.placeholder{cursor:default;background:none;}
  .views-divider{height:1px;background:var(--panel-border);margin:8px 4px;}
  .views-new{width:100%;text-align:left;background:none;border:none;color:var(--signal);font-size:13px;font-weight:600;padding:10px 8px;cursor:pointer;border-radius:7px;font-family:var(--font-body);}
  .views-new:hover{background:var(--panel-raised);}
  /* view editor (reuses .modal-overlay / .modal-card) */
  .ve-card{max-width:640px;}
  .ve-buckets .filter-bucket{background:var(--panel-raised);}
  .ve-buckets .filter-cond input,.ve-buckets .filter-cond select{background:var(--panel);}

  /* sticky "go to compose" bar */
  .compose-bar{
    position:fixed;left:0;right:0;bottom:0;z-index:50;
    display:flex;align-items:center;justify-content:space-between;gap:12px;
    padding:12px 20px;
    padding-bottom:calc(12px + env(safe-area-inset-bottom));
    background:var(--panel-raised);
    border-top:1px solid var(--panel-border);
    box-shadow:0 -4px 20px rgba(0,0,0,0.35);
    transform:translateY(0);
    transition:transform 0.22s ease-out;
  }
  /* Slide fully out of view when nothing is selected, reclaiming the space. */
  .compose-bar.collapsed{
    transform:translateY(150%);
    pointer-events:none;
  }
  .compose-bar .cb-count{font-family:var(--font-mono);font-size:13px;color:var(--ink);}
  .compose-bar button:disabled{opacity:0.4;cursor:not-allowed;}

  /* settings / account modals */
  .modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.6);z-index:100;display:flex;align-items:flex-start;justify-content:center;padding:60px 16px;overflow-y:auto;}

  /* ---- Full-page custom-view builder (replaces the old view-editor modal) ---- */
  .ve-fullpage{position:fixed;inset:0;z-index:300;background:var(--bg);overflow-y:auto;}
  .ve-top{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:14px;padding:12px 22px;background:var(--panel);border-bottom:1px solid var(--panel-border);}
  .ve-backbtn{width:34px;height:34px;flex:0 0 auto;border:1px solid var(--panel-border);border-radius:6px;background:var(--bg);color:var(--ink-dim);font-size:17px;line-height:1;cursor:pointer;}
  .ve-backbtn:hover{color:var(--ink);border-color:var(--signal);}
  .ve-titlewrap{display:flex;flex-direction:column;gap:2px;flex:1;min-width:0;}
  .ve-eyebrow{font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-dim);}
  .ve-name{border:none;background:transparent;color:var(--ink);font-size:20px;font-weight:650;outline:none;padding:2px 0;width:100%;}
  .ve-name:focus{box-shadow:0 2px 0 var(--signal);}
  .ve-favchip{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:600;color:var(--ink-dim);cursor:pointer;flex:0 0 auto;}
  .ve-favchip input{width:15px;height:15px;accent-color:var(--signal);}
  .ve-actions{display:flex;gap:8px;flex:0 0 auto;align-items:center;}
  .ve-page{max-width:1040px;width:100%;margin:0 auto;padding:20px 22px 90px;display:flex;flex-direction:column;gap:16px;}
  .ve-sec{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;padding:16px 18px;}
  .ve-sec-head{display:flex;align-items:baseline;gap:10px;margin-bottom:12px;flex-wrap:wrap;}
  .ve-sec-head h3{margin:0;font-size:15px;font-weight:700;}
  .ve-sec-hint{font-size:12.5px;color:var(--ink-dim);}
  .ve-sec-hint b{color:var(--signal);}
  .ve-input{padding:9px 11px;border:1px solid var(--panel-border);border-radius:6px;background:var(--bg);color:var(--ink);font-size:13.5px;font-family:inherit;outline:none;width:100%;max-width:360px;}
  .ve-input:focus{border-color:var(--signal);}
  .ve-row2{display:grid;grid-template-columns:1fr 1fr;gap:14px;max-width:720px;}
  .ve-row{display:flex;align-items:center;gap:12px;}
  .ve-lbl{display:block;font-size:12px;color:var(--ink-dim);margin-bottom:5px;}
  @media (max-width:640px){ .ve-row2{grid-template-columns:1fr;} .ve-actions .btn{padding:8px 10px;} }
  /* Two-panel column picker (Available | Shown) — mockup design. */
  .vecol{display:grid;grid-template-columns:1fr 42px 1fr;gap:0;align-items:stretch;}
  .vecol-col{display:flex;flex-direction:column;min-width:0;}
  .vecol-lbl{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-dim);margin-bottom:7px;display:flex;justify-content:space-between;align-items:center;}
  .vecol-n{font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);}
  .vecol-box{border:1px solid var(--panel-border);border-radius:8px;background:var(--panel-raised);height:280px;display:flex;flex-direction:column;overflow:hidden;}
  .vecol-search{padding:8px;border-bottom:1px solid var(--panel-border);}
  .vecol-search input{width:100%;padding:7px 10px;border:1px solid var(--panel-border);border-radius:6px;background:var(--bg);color:var(--ink);font-size:12.5px;font-family:inherit;outline:none;}
  .vecol-search input:focus{border-color:var(--signal);}
  .vecol-note{padding:8px 10px;border-bottom:1px solid var(--panel-border);font-size:11.5px;color:var(--ink-dim);}
  .vecol-items{overflow-y:auto;flex:1;padding:5px;display:flex;flex-direction:column;gap:2px;}
  .vecol-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:6px;font-size:13px;color:var(--ink);cursor:pointer;border:1px solid transparent;user-select:none;}
  .vecol-item:hover{background:var(--bg);border-color:var(--signal);}
  .vecol-op{color:var(--signal);font-size:15px;line-height:1;}
  .vecol-lab{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .vecol-reorder{margin-left:auto;display:inline-flex;gap:3px;flex:0 0 auto;}
  .vecol-reorder button{border:1px solid var(--panel-border);background:var(--bg);color:var(--ink-dim);border-radius:4px;font-size:11px;line-height:1;padding:2px 6px;cursor:pointer;}
  .vecol-reorder button:hover{color:var(--ink);border-color:var(--signal);}
  .vecol-on{background:var(--bg);}
  .vecol-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;color:var(--ink-dim);font-size:15px;}
  .vecol-empty{color:var(--ink-dim);font-size:12.5px;padding:14px;text-align:center;}
  @media (max-width:640px){ .vecol{grid-template-columns:1fr;gap:14px;} .vecol-mid{flex-direction:row;padding:2px 0;} }
  /* Module chips under the editor header (mockup). */
  .ve-mods{display:flex;gap:6px;flex-wrap:wrap;max-width:1040px;margin:12px auto 0;padding:0 22px;width:100%;}
  .ve-modchip{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:600;padding:7px 13px;border-radius:999px;border:1px solid var(--panel-border);background:var(--panel);color:var(--ink-dim);cursor:pointer;transition:.15s;}
  .ve-modchip:hover{color:var(--ink);border-color:var(--signal);}
  .ve-modchip.on{background:var(--signal);color:var(--bg);border-color:var(--signal);}
  .ve-moddot{width:7px;height:7px;border-radius:50%;background:var(--ink-dim);}
  .ve-modchip.on .ve-moddot{background:var(--bg);}
  /* "Who can see this view?" radio option cards (mockup). */
  .ve-vis{display:flex;flex-direction:column;gap:4px;}
  .ve-vis-opt{display:flex;gap:11px;align-items:flex-start;padding:11px 12px;border-radius:8px;cursor:pointer;transition:.12s;border:1px solid transparent;text-transform:none;letter-spacing:normal;}
  .ve-vis-opt *{text-transform:none;letter-spacing:normal;}
  .ve-vis-opt:hover{background:var(--panel-raised);}
  .ve-vis-opt input{margin-top:2px;accent-color:var(--signal);width:16px;height:16px;flex:0 0 auto;}
  .ve-vis-opt.is-disabled{cursor:default;opacity:.7;}
  .ve-vis-opt.is-disabled:hover{background:transparent;}
  .ve-vis-body{display:flex;flex-direction:column;gap:1px;}
  .ve-vis-t{font-size:14px;font-weight:600;color:var(--ink);}
  .ve-vis-s{font-size:12.5px;color:var(--ink-dim);}
  .ve-soon{font-size:10.5px;font-weight:700;color:var(--signal);border:1px solid var(--signal);padding:1px 7px;border-radius:5px;margin-left:8px;letter-spacing:.03em;text-transform:uppercase;}

  /* ---- multi-select chip value control (picklist criteria) ---- */
  .cond-chips{display:flex;flex-wrap:wrap;gap:5px;align-items:center;flex:1;min-width:150px;padding:4px 5px;border:1px solid var(--panel-border);border-radius:6px;background:var(--panel);}
  .cond-chip{display:inline-flex;align-items:center;gap:3px;background:var(--bg);border:1px solid var(--signal);color:var(--signal);border-radius:5px;padding:2px 3px 2px 8px;font-size:12px;font-weight:600;white-space:nowrap;}
  .cond-chip-x{border:none;background:none;color:var(--signal);cursor:pointer;font-size:14px;line-height:1;padding:0 2px;border-radius:3px;}
  .cond-chip-add{border:none;background:transparent;color:var(--ink-dim);font-size:12px;outline:none;cursor:pointer;min-width:72px;padding:2px;font-family:inherit;}
  .modal-overlay.hidden{display:none;}
  .modal-card{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;max-width:520px;width:100%;padding:24px;box-shadow:0 20px 60px rgba(0,0,0,0.5);}
  .modal-card h2{font-family:var(--font-display);margin:0 0 4px;font-size:20px;}
  .modal-card .modal-sub{color:var(--ink-dim);font-size:13px;margin:0 0 20px;}
  .modal-section{border-top:1px solid var(--panel-border);padding-top:16px;margin-top:16px;}
  .modal-section:first-of-type{border-top:none;padding-top:0;margin-top:0;}
  .modal-section h3{font-family:var(--font-display);font-size:13px;text-transform:uppercase;letter-spacing:0.4px;color:var(--ink);margin:0 0 10px;}
  .modal-close{float:right;cursor:pointer;color:var(--ink-dim);font-size:20px;line-height:1;background:none;border:none;}
  .modal-msg{font-size:12px;margin-top:8px;}

  /* Zoho-style Setup hub */
  .setup-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px;margin-top:16px;}
  .setup-card{background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:10px;padding:16px;}
  .setup-card h3{font-family:var(--font-display);font-size:13px;text-transform:uppercase;letter-spacing:0.5px;color:var(--signal);margin:0 0 12px;padding-bottom:8px;border-bottom:1px solid var(--panel-border);}
  .setup-link{display:block;padding:6px 0;color:var(--ink);font-size:13px;cursor:pointer;text-decoration:none;border:none;background:none;text-align:left;width:100%;}
  .setup-link:hover{color:var(--signal);}
  .setup-sub{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-dim);margin:12px 0 2px;}
  .setup-sub.first{margin-top:4px;}
  /* admin accounts panel */
  .acct-form{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
  .acct-form input{width:100%;padding:8px 10px;}
  .acct-form #acctNewPass{grid-column:1 / -1;}
  .acct-perms{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:13px;}
  .acct-perms-label{color:var(--ink-dim);font-size:12px;}
  .acct-perms label{display:inline-flex;align-items:center;gap:5px;cursor:pointer;}
  .accounts-list{display:flex;flex-direction:column;gap:8px;max-height:44vh;overflow-y:auto;}
  /* Commissions modal: position rate cards */
  #commPositions{display:flex;flex-direction:column;gap:12px;}
  .comm-pos{border:1px solid var(--panel-border);border-radius:10px;padding:12px 14px;background:var(--panel-raised);}
  .comm-pos .comm-comp{width:100%;border-collapse:collapse;margin:8px 0 6px;}
  .comm-pos .comm-comp td{padding:3px 4px;vertical-align:middle;}
  .comm-pos .comm-comp-pct{width:64px;text-align:right;}
  .comm-pct-cell{width:78px;white-space:nowrap;color:var(--ink-dim);font-size:12px;}
  .comm-del-cell{width:28px;text-align:center;}
  #commMembers .comm-member-pos{padding:6px 8px;font-size:13px;}
  .comm-ladder{margin-top:10px;border-top:1px dashed var(--panel-border);padding-top:8px;}
  .comm-ladder-head{font-size:12px;font-weight:600;color:var(--ink);margin-bottom:6px;}
  .comm-ladder-sub{font-weight:400;color:var(--ink-dim);font-size:11px;}
  .comm-tiers{border-collapse:collapse;}
  .comm-tier-cell{text-align:center;padding:0 6px 0 0;color:var(--ink-dim);font-size:12px;white-space:nowrap;}
  .comm-tier-lbl{font-size:10px;color:var(--ink-dim);margin-bottom:2px;}
  .comm-tier-inp{width:46px;text-align:right;}
  .comm-special{margin-top:8px;display:flex;flex-direction:column;gap:8px;}
  .comm-special-row{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px;}
  .comm-special-lbl{color:var(--ink-dim);font-size:12px;}
  .comm-special-note{font-size:11px;color:var(--ink-dim);border-top:1px dashed var(--panel-border);padding-top:6px;}
  /* ---- Commission Request worksheet (its own view inside the deal) ---- */
  /* When active, the deal's OTHER content sections hide so only the CRF shows in
     the main area — the app chrome (top bar, side rail, deal header) stays. */
  #dealEditView.crf-active #rehabEstimateSection,
  #dealEditView.crf-active #dealFinancials,
  #dealEditView.crf-active #dealFieldsSection,
  #dealEditView.crf-active #dealActivity,
  #dealEditView.crf-active #dealSectionAllFields,
  #dealEditView.crf-active #dealSaveRow{display:none !important;}
  .crf-page{background:var(--panel);border:1px solid var(--panel-border);border-radius:10px;overflow:hidden;margin-top:14px;}
  .crf-page-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--panel-raised);border-bottom:1px solid var(--panel-border);padding:12px 18px;}
  .crf-page-title{font-weight:700;font-size:15px;color:var(--ink);text-align:center;flex:1;}
  .crf-page-body{padding:20px 22px;}
  .crf-tag{font-size:10px;color:var(--signal);border:1px solid var(--panel-border);border-radius:999px;padding:1px 7px;white-space:nowrap;}
  .crf-badge{font-size:10px;background:var(--confirm);color:#fff;border-radius:999px;padding:2px 8px;margin-left:6px;vertical-align:middle;}
  .crf-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
  @media (max-width:760px){ .crf-grid{grid-template-columns:1fr;} }
  .prod-table tbody tr{border-bottom:1px solid var(--panel-border);}
  .prod-table tbody td{padding:9px 8px;}
  .prod-table tbody td:first-child{padding-left:0;}
  .prod-table tbody td:last-child{padding-right:0;}
  .prod-top-badge{display:inline-block;font-size:10px;background:var(--confirm);color:#fff;border-radius:999px;padding:1px 8px;margin-left:8px;vertical-align:middle;font-weight:600;}
  .crf-head{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-dim);border-bottom:1px solid var(--panel-border);padding-bottom:4px;margin-bottom:6px;}
  .crf-table{width:100%;border-collapse:collapse;}
  .crf-table td{padding:3px 4px;border-bottom:1px solid var(--panel-border);font-size:13px;}
  .crf-table .crf-line{color:var(--ink);}
  .crf-amt{white-space:nowrap;color:var(--ink-dim);width:130px;}
  .crf-amt-in{width:100px;text-align:right;}
  .crf-att{width:28px;text-align:center;}
  .crf-del{width:20px;text-align:center;}
  .crf-line-del,.crf-c-del{background:none;border:none;color:var(--ink-dim);cursor:pointer;}
  .crf-line-del:hover,.crf-c-del:hover{color:var(--alert);}
  .crf-line-label{width:100%;}
  .crf-subtot{display:flex;justify-content:space-between;font-size:12px;font-weight:600;color:var(--ink-dim);border-top:1px dashed var(--panel-border);margin-top:6px;padding-top:5px;}
  .crf-rollup{display:flex;flex-direction:column;gap:4px;margin-top:12px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:8px;padding:10px 12px;}
  .crf-rollup > div{display:flex;justify-content:space-between;font-size:14px;}
  .crf-rollup b{font-family:var(--font-mono,monospace);}
  .crf-comm{width:100%;border-collapse:collapse;font-size:13px;margin-top:6px;}
  .crf-comm th{text-align:left;font-size:10px;text-transform:uppercase;color:var(--ink-dim);border-bottom:1px solid var(--panel-border);padding:4px;}
  .crf-comm td{padding:4px;border-bottom:1px solid var(--panel-border);}
  .crf-num{text-align:right;font-family:var(--font-mono,monospace);white-space:nowrap;}
  .crf-bad{color:var(--alert);}
  .crf-comm-tot td{font-weight:600;color:var(--ink-dim);border-bottom:none;}
  .crf-recon{margin-top:12px;border:2px solid var(--panel-border);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column;gap:5px;}
  .crf-recon.ok{border-color:var(--confirm);}
  .crf-recon.bad{border-color:var(--alert);}
  .crf-check{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink);}
  .crf-check .ok{color:var(--confirm);font-weight:700;}
  .crf-check .bad{color:var(--alert);font-weight:700;}
  .crf-check-d{margin-left:auto;color:var(--ink-dim);font-family:var(--font-mono,monospace);}
  .crf-actions{display:flex;justify-content:flex-end;align-items:center;gap:12px;margin-top:12px;}
  .crf-msg{font-size:12px;}
  /* ---- CRF: deal-type toggle, parties header, add-line row, required items ---- */
  .crf-head-sub{font-size:11px;font-weight:400;text-transform:none;letter-spacing:0;color:var(--ink-dim);margin-left:8px;}
  .crf-dtype{display:flex;flex-wrap:wrap;align-items:center;gap:8px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:8px;padding:8px 12px;margin-bottom:14px;}
  .crf-dtype-lbl{font-size:12px;font-weight:600;color:var(--ink-dim);}
  .crf-dtype-btn{font-size:12px;font-weight:600;border:1px solid var(--panel-border);background:var(--panel);color:var(--ink-dim);border-radius:999px;padding:4px 12px;cursor:pointer;}
  .crf-dtype-btn.on{background:var(--ink);color:var(--panel);border-color:var(--ink);}
  .crf-dtype-note{margin-left:auto;font-size:11px;color:var(--ink-dim);}
  .crf-parties{display:grid;grid-template-columns:1fr 1fr;gap:2px 32px;margin-bottom:16px;}
  @media (max-width:760px){ .crf-parties{grid-template-columns:1fr;} }
  .crf-party{display:flex;justify-content:space-between;gap:12px;padding:3px 0;border-bottom:1px solid var(--panel-border);font-size:13px;}
  .crf-party-l{color:var(--ink-dim);}
  .crf-party-v{color:var(--ink);font-weight:500;text-align:right;}
  .crf-party-blank{color:var(--ink-dim);font-weight:400;}
  .crf-addrow{display:flex;align-items:center;gap:8px;margin-top:6px;}
  .crf-addline{flex:1;font-size:12px;color:var(--signal);border:1px dashed var(--panel-border);background:var(--panel-raised);border-radius:6px;padding:5px 8px;}
  .crf-c-pos{color:var(--ink-dim);font-size:12px;}
  .crf-nopos{color:var(--warn,#d69e2e);font-size:11px;cursor:help;white-space:nowrap;}
  /* "Unsaved draft restored" chip on new-record forms */
  .draft-note{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-dim);background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:8px;padding:6px 10px;margin-bottom:12px;}
  .draft-note .draft-discard{font-size:12px;}
  .crf-required{display:flex;flex-wrap:wrap;gap:16px;margin-top:6px;}
  .crf-req-lbl{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink);}
  /* Drag-to-reorder fund lines */
  .crf-grip-cell{width:16px;text-align:center;padding-left:0 !important;padding-right:0 !important;}
  .crf-grip{color:var(--ink-dim);cursor:grab;font-size:12px;line-height:1;user-select:none;opacity:.55;}
  .crf-row:hover .crf-grip{opacity:1;}
  .crf-row.crf-dragging{opacity:.4;}
  .crf-row.crf-drop-into td{box-shadow:inset 0 2px 0 var(--signal);}
  /* Settlement statement preview overlay */
  .crf-preview-overlay{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;padding:24px;}
  .crf-preview-box{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;width:min(880px,100%);height:min(92vh,100%);display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5);}
  .crf-preview-bar{display:flex;align-items:center;gap:12px;background:var(--panel-raised);border-bottom:1px solid var(--panel-border);padding:12px 16px;}
  .crf-preview-title{font-weight:700;font-size:14px;color:var(--ink);}
  .crf-preview-note{font-size:11px;color:var(--ink-dim);margin-right:auto;}
  .crf-preview-frame{border:none;width:100%;flex:1 1 auto;background:#525659;}
  /* Version history + diff */
  .crf-versions{display:flex;flex-direction:column;gap:4px;margin-top:4px;}
  .crf-ver-row{display:flex;align-items:center;gap:10px;padding:6px 10px;border:1px solid var(--panel-border);border-radius:8px;background:var(--panel-raised);font-size:13px;}
  .crf-ver-row.on{border-color:var(--signal);}
  .crf-ver-lbl{font-weight:700;color:var(--ink);font-family:var(--font-mono,monospace);}
  .crf-ver-meta{color:var(--ink-dim);font-size:12px;}
  .crf-ver-cmp{margin-left:auto;}
  .crf-diff{margin-top:10px;border:1px solid var(--signal);border-radius:8px;padding:12px 14px;background:var(--panel-raised);}
  .crf-diff-h{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:8px;}
  .crf-d-sub{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-dim);margin:10px 0 3px;}
  .crf-d-table{width:100%;border-collapse:collapse;font-size:13px;}
  .crf-d-table th{text-align:left;font-size:10px;text-transform:uppercase;color:var(--ink-dim);border-bottom:1px solid var(--panel-border);padding:3px 4px;}
  .crf-d-table td{padding:3px 4px;border-bottom:1px solid var(--panel-border);}
  .crf-d-delta.up{color:var(--confirm);}
  .crf-d-delta.down{color:var(--alert);}
  .crf-d-delta.same{color:var(--ink-dim);}
  .crf-d-tag{font-size:9px;text-transform:uppercase;letter-spacing:.03em;border-radius:999px;padding:1px 6px;margin-left:4px;vertical-align:middle;}
  .crf-d-tag.added{background:var(--confirm);color:#fff;}
  .crf-d-tag.removed{background:var(--alert);color:#fff;}
  .crf-d-tag.changed{background:var(--signal);color:#fff;}
  .acct-row{border:1px solid var(--panel-border);border-radius:10px;padding:14px 16px;background:var(--panel-raised);display:flex;flex-direction:column;gap:10px;}
  .acct-row.suspended{opacity:.55;}
  /* Expandable member record: name row toggles the body */
  .acct-name-toggle{display:flex;align-items:center;justify-content:space-between;gap:10px;}
  .acct-name-toggle:hover .acct-name{text-decoration:underline;}
  .acct-caret{color:var(--ink-dim);font-size:12px;flex:0 0 auto;}
  .acct-body{display:flex;flex-direction:column;gap:10px;margin-top:4px;}
  .acct-identity{flex-wrap:wrap;gap:8px;align-items:center;}
  .acct-identity .id-inp{width:150px;}
  .acct-identity .id-email{width:210px;}
  .acct-identity .id-phone{width:150px;}
  .id-msg{font-size:11px;color:var(--ink-dim);}
  .acct-mod-price{font-size:10px;color:var(--ink-dim);border:1px solid var(--panel-border);border-radius:4px;padding:0 5px;margin-left:3px;}
  /* ---- Security → Profiles ---- */
  .prof-list{border:1px solid var(--panel-border);border-radius:8px;overflow:hidden;}
  .prof-head,.prof-row{display:grid;grid-template-columns:1.4fr 2fr 1fr 1fr auto;gap:10px;align-items:center;padding:10px 12px;}
  .prof-head{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-dim);border-bottom:1px solid var(--panel-border);}
  .prof-row{border-bottom:1px solid var(--panel-border);}
  .prof-row:last-child{border-bottom:none;}
  .prof-row:hover{background:var(--panel-raised);}
  .prof-name{font-weight:600;color:var(--signal);cursor:pointer;background:none;border:none;padding:0;text-align:left;font-size:14px;}
  .prof-name:hover{text-decoration:underline;}
  .prof-badge{display:inline-block;font-size:10px;padding:1px 6px;border-radius:999px;background:var(--signal-dim);color:var(--signal);margin-left:6px;vertical-align:middle;}
  .prof-desc{font-size:12.5px;color:var(--ink-dim);overflow:hidden;text-overflow:ellipsis;}
  .prof-meta{font-size:12px;color:var(--ink-dim);}
  .prof-actions{position:relative;}
  .prof-menu-btn{background:none;border:none;color:var(--ink-dim);font-size:18px;cursor:pointer;padding:0 6px;line-height:1;}
  .prof-menu{position:absolute;right:0;top:100%;z-index:20;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:8px;min-width:130px;box-shadow:0 8px 24px rgba(0,0,0,.4);overflow:hidden;}
  .prof-menu.up{top:auto;bottom:100%;margin-bottom:4px;}
  .prof-menu button{display:block;width:100%;text-align:left;background:none;border:none;color:var(--ink);padding:8px 12px;font-size:13px;cursor:pointer;}
  .prof-menu button:hover{background:var(--panel-border);}
  .prof-menu button.danger{color:var(--alert);}
  .prof-users{border:1px solid var(--panel-border);border-radius:8px;overflow:hidden;}
  .pu-head,.pu-row{display:grid;grid-template-columns:2fr 1fr 1fr;gap:10px;align-items:center;padding:9px 12px;}
  .pu-head{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-dim);border-bottom:1px solid var(--panel-border);}
  .pu-row{border-bottom:1px solid var(--panel-border);}
  .pu-row:last-child{border-bottom:none;}
  .pu-status{font-size:12px;}
  .pu-status.active{color:var(--confirm);}
  .prof-detail{margin-top:10px;max-height:52vh;overflow:auto;padding-right:4px;}
  .prof-group-title{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-dim);margin:14px 0 6px;}
  .perm-row{display:flex;align-items:center;gap:12px;padding:9px 10px;border:1px solid var(--panel-border);border-radius:8px;margin-bottom:6px;}
  .perm-row.off{opacity:.5;}
  .perm-name{font-weight:600;font-size:13.5px;min-width:150px;}
  .perm-name .tag{font-size:10px;color:var(--ink-dim);font-weight:400;margin-left:6px;}
  .perm-toggle{position:relative;width:38px;height:22px;flex:0 0 auto;}
  .perm-toggle input{opacity:0;width:0;height:0;position:absolute;}
  .perm-slider{position:absolute;inset:0;background:var(--panel-border);border-radius:999px;transition:.15s;cursor:pointer;}
  .perm-slider::before{content:"";position:absolute;height:16px;width:16px;left:3px;top:3px;background:#fff;border-radius:50%;transition:.15s;}
  .perm-toggle input:checked + .perm-slider{background:var(--confirm);}
  .perm-toggle input:checked + .perm-slider::before{transform:translateX(16px);}
  .perm-toggle input:disabled + .perm-slider{cursor:not-allowed;opacity:.6;}
  .perm-actions{display:flex;flex-wrap:wrap;gap:12px;margin-left:auto;}
  .perm-actions label{display:flex;align-items:center;gap:5px;font-size:12.5px;color:var(--ink-dim);cursor:pointer;}
  .perm-actions input{margin:0;}
  .acct-top{display:flex;align-items:center;justify-content:space-between;gap:10px;}
  .acct-name{font-weight:600;font-size:14px;}
  .acct-open[data-openorg]{cursor:pointer;}
  .acct-open[data-openorg]:hover{color:var(--signal);text-decoration:underline;}
  .acct-email{font-size:12px;color:var(--ink-dim);font-family:var(--font-mono);}
  .acct-badge{font-size:10px;border:1px solid var(--panel-border);border-radius:4px;padding:1px 6px;color:var(--ink-dim);margin-left:6px;}
  .acct-badge.admin{color:var(--accent);border-color:var(--accent);}
  .acct-ctrls{display:flex;align-items:center;gap:8px 10px;flex-wrap:wrap;margin-top:0;padding-top:10px;border-top:1px solid var(--panel-border);font-size:13px;}
  /* Access toggles as tidy pills; the chosen ones light up (via :has, degrades gracefully). */
  .acct-ctrls label{display:inline-flex;align-items:center;gap:6px;cursor:pointer;padding:4px 11px;border:1px solid var(--panel-border);border-radius:999px;background:var(--panel);font-size:12px;transition:border-color .12s,color .12s;}
  .acct-ctrls label:has(input:checked){border-color:var(--signal);color:var(--signal);}
  .acct-ctrls label:has(input:disabled){opacity:.6;cursor:default;}
  .acct-perms-label{align-self:center;}
  .acct-susp{background:none;border:1px solid var(--panel-border);border-radius:6px;padding:3px 9px;cursor:pointer;color:var(--ink-dim);font-size:12px;}
  /* platform-admin email usage panel */
  .eu-summary{display:flex;gap:18px;flex-wrap:wrap;font-size:12px;color:var(--ink-dim);font-family:var(--font-mono);margin-bottom:12px;}
  .eu-summary b{color:var(--ink);font-weight:600;}
  .eu-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px;}
  .eu-head .eu-summary{margin-bottom:0;}
  .eu-wrap{border:1px solid var(--panel-border);border-radius:8px;overflow:auto;max-height:56vh;}
  .eu-table{width:100%;border-collapse:collapse;font-size:13px;}
  .eu-table thead th{position:sticky;top:0;z-index:2;background:var(--panel-raised);color:var(--ink-dim);text-align:left;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;padding:8px 12px;border-bottom:1px solid var(--panel-border);white-space:nowrap;}
  .eu-table td{padding:9px 12px;border-bottom:1px solid var(--panel-border);vertical-align:middle;}
  .eu-table tbody tr:last-child td{border-bottom:none;}
  .eu-table tbody tr.eu-paused{background:rgba(228,83,107,0.06);}
  .eu-table th.eu-c,.eu-table td.eu-c{text-align:center;}
  .eu-ws{font-weight:600;color:var(--ink);}
  .eu-owner{font-size:11px;color:var(--ink-dim);font-family:var(--font-mono);margin-top:2px;}
  .eu-domain{color:var(--ink);white-space:nowrap;}
  .eu-dstatus{font-size:11px;}
  .eu-dline{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:2px;}
  .eu-recheck{background:none;border:1px solid var(--panel-border);border-radius:5px;color:var(--ink-dim);font-size:10px;padding:1px 7px;cursor:pointer;white-space:nowrap;}
  .eu-recheck:hover{border-color:var(--signal);color:var(--signal);}
  .eu-recheck:disabled{opacity:.6;cursor:default;}
  .eu-count{font-family:var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap;}
  .eu-bar{width:88px;max-width:100%;height:5px;background:var(--panel-raised);border-radius:20px;overflow:hidden;margin:5px auto 0;}
  .eu-bar-fill{height:100%;border-radius:20px;transition:width .2s;min-width:2px;}
  .eu-cap{width:74px;text-align:center;padding:5px 6px;font-size:13px;font-family:var(--font-mono);}
  .eu-you{font-size:10px;border:1px solid var(--signal);color:var(--signal);border-radius:4px;padding:1px 6px;margin-left:6px;vertical-align:middle;}
  /* fill-in-the-blank field editor */
  .df-wrap{display:flex;gap:12px;margin-top:14px;height:70vh;min-height:420px;}
  .df-palette{width:180px;flex:0 0 auto;overflow-y:auto;border:1px solid var(--panel-border);border-radius:8px;padding:8px;background:var(--panel-raised);}
  .df-toolbar{display:flex;justify-content:flex-end;align-items:center;}
  .df-zoom{display:flex;align-items:center;gap:4px;}
  .df-zoom button{background:var(--panel);border:1px solid var(--panel-border);color:var(--ink);border-radius:6px;min-width:28px;height:26px;padding:0 6px;cursor:pointer;font-size:14px;line-height:1;}
  .df-zoom button:hover{border-color:var(--signal);}
  #dfZoomPct{font-size:12px;color:var(--ink-dim);min-width:44px;text-align:center;font-family:var(--font-mono);}
  #dfZoomFit{font-size:12px;}
  .df-search{display:flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--panel-border);border-radius:7px;padding:4px 8px;margin-bottom:6px;}
  .df-search-ic{color:var(--ink-dim);font-size:13px;}
  .df-search input{flex:1;background:none;border:none;color:var(--ink);font-size:12px;padding:3px 0;width:100%;}
  .df-search input:focus{outline:none;}
  .df-group{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-dim);margin:11px 0 5px;}
  .df-chip{display:flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--panel-border);border-radius:6px;padding:6px 8px;font-size:12px;color:var(--ink);margin-bottom:5px;cursor:grab;}
  .df-chip:hover{border-color:var(--signal);}
  .df-chip.df-wrt{border-color:#3a5750;}
  .df-chip.df-wrt:hover{border-color:var(--confirm);}
  .df-grip{color:var(--ink-dim);font-size:10px;letter-spacing:-2px;cursor:grab;}
  .df-right{flex:1;display:flex;flex-direction:column;gap:8px;min-width:0;}
  .df-props{display:flex;align-items:center;gap:10px;flex-wrap:wrap;border:1px solid var(--panel-border);border-radius:8px;background:var(--panel-raised);padding:8px 10px;min-height:38px;}
  .dfp{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-dim);}
  .dfp label{margin:0;text-transform:none;letter-spacing:0;font-size:11px;color:var(--ink-dim);font-weight:400;}
  .dfp select,.dfp input{background:var(--panel);border:1px solid var(--panel-border);color:var(--ink);border-radius:6px;padding:4px 6px;font-size:12px;font-family:var(--font-body);}
  .dfp-btn{background:var(--panel);border:1px solid var(--panel-border);color:var(--ink);border-radius:6px;width:28px;height:28px;cursor:pointer;font-size:13px;}
  .dfp-btn.on{background:var(--signal);color:#1a1005;border-color:var(--signal);}
  .dfp-btn2{background:var(--panel);border:1px solid var(--panel-border);color:var(--confirm);border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;}
  .dfp-btn2:hover{border-color:var(--confirm);}
  .df-seg{display:flex;border:1px solid var(--panel-border);border-radius:6px;overflow:hidden;}
  .df-seg button{background:var(--panel);border:none;color:var(--ink-dim);padding:4px 8px;cursor:pointer;font-size:12px;}
  .df-seg button.on{background:var(--signal);color:#1a1005;}
  .dfp-del{margin-left:auto;background:none;border:1px solid var(--panel-border);color:var(--alert);border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;}
  .df-pages{flex:1;overflow:auto;border:1px solid var(--panel-border);border-radius:8px;background:var(--panel-raised);padding:16px;display:flex;flex-direction:column;align-items:center;gap:16px;}
  .df-page{position:relative;background:#fff;box-shadow:0 2px 10px rgba(0,0,0,.4);flex:0 0 auto;}

  /* Fill-in fields editor: near-full-viewport panel (desktop). The card is a
     fixed-height flex column (height set inline in app.js); the PDF area (.df-wrap
     → .df-pages) grows to fill it and scrolls internally, so the Save/Cancel bar
     stays pinned at the bottom instead of the whole overlay scrolling. Scoped to
     this modal only. The @media(max-width:640px) block further below overrides
     these for phones and must stay after this rule. min-height:0 at every level
     lets the flex children shrink so the button bar can't be pushed off-screen. */
  #docFieldsModal.modal-overlay{align-items:center;padding:24px 16px;}
  #docFieldsModal .modal-card{overflow:hidden;min-height:0;}
  #docFieldsModal .df-wrap{flex:1 1 auto;height:auto;min-height:0;}
  #docFieldsModal .df-right{min-height:0;}
  #docFieldsModal .df-pages{min-height:0;}
  #docFieldsModal .modal-section{flex:0 0 auto;}
  .df-page canvas{display:block;}
  .df-fld{position:absolute;box-sizing:border-box;background:rgba(255,122,69,.16);border:1px solid var(--signal);border-radius:2px;cursor:grab;touch-action:none;overflow:hidden;min-width:14px;min-height:12px;}
  .df-fld.wrt{background:rgba(95,217,198,.14);border-color:var(--confirm);border-style:dashed;}
  .df-fld.sel{box-shadow:0 0 0 2px rgba(255,122,69,.5);z-index:5;}
  .df-fld.wrt.sel{box-shadow:0 0 0 2px rgba(95,217,198,.5);}
  .df-fld-lbl{position:absolute;left:3px;top:1px;right:15px;font-size:10px;font-weight:600;color:#993c1d;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;}
  .df-fld.wrt .df-fld-lbl{color:#0f6e56;}
  .df-fld-x{position:absolute;top:0;right:0;background:none;border:none;color:#993c1d;cursor:pointer;font-size:10px;line-height:1;padding:1px 2px;}
  .df-fld-rz{position:absolute;right:-1px;bottom:-1px;width:9px;height:9px;background:var(--signal);border:1px solid #fff;cursor:nwse-resize;}
  .df-fld.wrt .df-fld-rz{background:var(--confirm);}
  .df-fld.cbx{overflow:visible;}
  .df-cbx-mark{position:absolute;inset:0;width:100%;height:100%;display:none;pointer-events:none;overflow:visible;}
  .df-fld.cbx.sel .df-cbx-mark{display:block;}
  .df-fld-tag{position:absolute;left:100%;top:50%;transform:translateY(-50%);margin-left:5px;white-space:nowrap;font-size:10px;font-weight:600;color:#993c1d;background:rgba(255,122,69,.16);border:1px solid rgba(255,122,69,.4);border-radius:3px;padding:0 5px;pointer-events:none;}
  .df-fld.wrt .df-fld-tag{color:#0f6e56;background:rgba(95,217,198,.16);border-color:rgba(95,217,198,.4);}
  .df-hint{font-size:12px;color:var(--ink-dim);}
  /* assignee chip + controls */
  .assignee-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;white-space:nowrap;}
  .assignee-dot{width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;color:#1a1005;flex:0 0 auto;}
  /* left-rail stacked filters (search, groups, owned-by, assign) */
  .ll-filters{display:flex;flex-direction:column;gap:11px;margin-bottom:16px;}
  .ll-filters > input[type=text],.ll-filters > select{width:100%;min-width:0;}
  /* Match the compact filter-field sizing the other modules' rails use (.cmf-in) so
     the Contacts filter column doesn't look chunkier/roomier than Leads/Tasks/Deals. */
  .ll-filters > input[type=text],.ll-filters > select,
  .assignee-bar select,.llf-assign select,.llf-assign button{padding:6px 8px;font-size:12px;}
  .llf-label{font-size:11px;color:var(--ink-dim);}
  .assignee-bar{display:flex;flex-direction:column;gap:8px;margin:0;padding-top:10px;border-top:1px solid var(--panel-border);}
  .assignee-bar select{width:100%;padding:6px 8px;}
  .llf-assign{display:flex;flex-direction:column;gap:6px;margin-top:2px;}
  .llf-assign select,.llf-assign button{width:100%;}
  /* resizable columns */
  .contact-table th{position:relative;}
  .contact-table th .col-resize{position:absolute;top:0;right:-4px;width:9px;height:100%;cursor:col-resize;user-select:none;z-index:3;}
  .contact-table th .col-resize:hover{background:rgba(255,122,69,0.4);}
  body.col-resizing{cursor:col-resize!important;user-select:none;}
  body.col-resizing *{cursor:col-resize!important;}
  .setup-card-wide{max-width:960px;}

  .avatar-circle{
    display:inline-flex;align-items:center;justify-content:center;
    width:36px;height:36px;border-radius:50%;
    background:var(--signal);color:#fff;font-family:var(--font-display);
    font-size:14px;font-weight:600;letter-spacing:0.5px;
    text-transform:uppercase;user-select:none;
  }
  .avatar-circle:hover{filter:brightness(1.1);}

  /* module switcher (top-level nav) */
  .module-bar{display:flex;align-items:center;gap:4px;border-bottom:1px solid var(--panel-border);margin-bottom:4px;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none;}
  .module-bar::-webkit-scrollbar{display:none;}
  .module-btn{background:none;border:none;color:var(--ink-dim);font-family:var(--font-display);font-size:14px;padding:10px 16px;border-bottom:2px solid transparent;display:flex;align-items:center;gap:7px;cursor:pointer;letter-spacing:0.3px;flex-shrink:0;white-space:nowrap;}
  .addc-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:60;background:var(--panel);border:1px solid var(--panel-border);border-radius:9px;box-shadow:0 8px 28px rgba(0,0,0,0.4);padding:6px;min-width:210px;display:flex;flex-direction:column;}
  .addc-menu button{background:none;border:none;text-align:left;color:var(--ink);font-size:13px;padding:9px 12px;border-radius:6px;cursor:pointer;font-family:var(--font-body);}
  .addc-menu button:hover{background:var(--panel-raised);}
  .module-btn.active{color:var(--ink);border-bottom-color:var(--signal);}
  .module-btn:hover:not(.active){color:var(--ink);}
  .module-btn.disabled{opacity:0.45;cursor:default;}
  .module-btn .mod-soon{font-size:10px;color:var(--ink-dim);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:0.5px;}

  .ms-dropdown{position:relative;}
  .ms-panel label:hover{background:rgba(95,217,198,0.08);}


  .contact-list{}
  .contact-row{
    display:flex;align-items:center;gap:10px;padding:9px 12px;font-size:13px;
    border-bottom:1px solid var(--panel-border);background:var(--panel);
    flex-wrap:wrap;
  }
  .contact-row:last-child{border-bottom:none;}
  .contact-row:hover{background:var(--panel-raised);}
  .contact-row.selected{background:rgba(255,122,69,0.08);}
  .contact-row input[type=checkbox]{width:16px;height:16px;accent-color:var(--signal);flex-shrink:0;}
  .contact-name{font-weight:600;min-width:150px;}
  .contact-meta{color:var(--ink-dim);font-size:12px;font-family:var(--font-mono);flex:1;min-width:150px;overflow-wrap:anywhere;}
  .contact-group-tag{
    background:var(--panel-raised);border:1px solid var(--panel-border);color:var(--ink-dim);
    font-size:10px;padding:2px 7px;border-radius:20px;font-family:var(--font-mono);
  }
  .contact-row.on-cooldown{opacity:0.55;}
  .dup-group-header{
    background:var(--panel-raised);color:var(--alert);font-family:var(--font-mono);
    font-size:11px;font-weight:600;letter-spacing:0.4px;text-transform:uppercase;
    padding:6px 12px;border-bottom:1px solid var(--panel-border);
  }
  .messaged-marker{
    background:rgba(95,217,198,0.1);border:1px solid rgba(95,217,198,0.3);color:var(--confirm);
    font-size:10px;padding:2px 8px;border-radius:20px;font-family:var(--font-mono);white-space:nowrap;
  }
  .cooldown-badge{
    background:rgba(228,83,107,0.12);color:var(--alert);border:1px solid rgba(228,83,107,0.3);
    font-size:10px;padding:2px 8px;border-radius:20px;font-family:var(--font-mono);white-space:nowrap;
  }
  .cooldown-badge.cooldown-ok{
    background:rgba(95,217,198,0.1);color:var(--confirm);border-color:rgba(95,217,198,0.3);
  }
  .empty-state{padding:30px;text-align:center;color:var(--ink-dim);font-size:13px;border:1px solid var(--panel-border);border-radius:8px;}

  .contact-edit-panel{
    background:var(--panel-raised);border-bottom:1px solid var(--panel-border);
    padding:14px 12px 16px;
  }
  .contact-edit-panel .field-row{margin-bottom:8px;}
  .contact-edit-panel label{margin-bottom:3px;}
  .contact-edit-actions{display:flex;gap:8px;margin-top:10px;}

  /* ---------- Table view (Stage 1) ---------- */
  .contact-table-wrap{max-height:70vh;overflow:auto;border:1px solid var(--panel-border);border-radius:8px;}
  .contact-table{width:max-content;min-width:100%;border-collapse:collapse;font-size:13px;background:var(--panel);}
  .contact-table thead th{
    position:sticky;top:0;z-index:3;background:var(--panel-raised);color:var(--ink-dim);
    font-family:var(--font-mono);font-size:11px;font-weight:600;text-transform:uppercase;
    letter-spacing:0.4px;text-align:left;padding:9px 12px;white-space:nowrap;
    border-bottom:1px solid var(--panel-border);
  }
  .contact-table tbody td{padding:9px 12px;border-bottom:1px solid var(--panel-border);vertical-align:top;overflow-wrap:anywhere;max-width:340px;}
  .contact-trow:hover td{background:var(--panel-raised);}
  .contact-trow.selected td{background:rgba(255,122,69,0.08);}
  .contact-trow.on-cooldown td{opacity:0.55;}
  .contact-table .th-select,.contact-table .col-select{width:34px;text-align:center;}
  .contact-table .col-select input[type=checkbox],.contact-table .th-select input[type=checkbox]{width:16px;height:16px;accent-color:var(--signal);cursor:pointer;}
  .contact-table .contact-name{font-weight:600;color:var(--ink);}
  .contact-table .cell-mono{font-family:var(--font-mono);font-size:12px;color:var(--ink-dim);}
  .contact-table .cell-empty{color:var(--ink-dim);opacity:0.4;}
  .contact-table .col-actions{white-space:nowrap;text-align:right;}
  .contact-table .col-actions .btn{margin-left:6px;}
  .class-pill{display:inline-block;background:rgba(95,217,198,0.14);color:var(--confirm);border-radius:999px;padding:2px 9px;font-size:11px;font-family:var(--font-mono);margin:0 4px 4px 0;}
  .contact-edit-cell{padding:0 !important;background:var(--panel-raised);}
  .dup-group-cell{
    background:var(--panel-raised);color:var(--alert);font-family:var(--font-mono);font-size:11px;
    font-weight:600;letter-spacing:0.4px;text-transform:uppercase;padding:6px 12px;
  }
  .contact-table th.th-sortable{cursor:pointer;user-select:none;}
  .contact-table th.th-sortable:hover{color:var(--ink);}
  .contact-table th.th-active{color:var(--signal);}
  .th-arrow{color:var(--signal);font-size:10px;margin-left:2px;}
  .sort-indicator{font-family:var(--font-mono);font-size:11px;color:var(--ink-dim);margin-bottom:8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
  .sort-indicator b{color:var(--ink);font-weight:600;}
  /* ---------- Manage Columns modal (Stage 3) ---------- */
  .cm-overlay{position:fixed;inset:0;background:rgba(0,0,0,0.55);z-index:1000;display:flex;align-items:flex-start;justify-content:center;padding:60px 16px;overflow:auto;}
  .cm-panel{background:var(--panel);border:1px solid var(--panel-border);border-radius:12px;width:100%;max-width:440px;box-shadow:0 20px 60px rgba(0,0,0,0.5);}
  .cm-head{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--panel-border);}
  .cm-head h3{margin:0;font-family:var(--font-display);font-size:16px;color:var(--ink);}
  .cm-body{padding:14px 18px;max-height:55vh;overflow:auto;}
  .cm-search{width:100%;margin-bottom:6px;}
  .cm-section-label{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin:12px 0 6px;}
  .cm-row{display:flex;align-items:center;gap:10px;padding:7px 8px;border:1px solid transparent;border-radius:7px;}
  .cm-row:hover{background:var(--panel-raised);}
  .cm-row.visible{cursor:grab;}
  .cm-row.dragging{opacity:0.4;}
  .cm-row.drop-target{border-color:var(--signal);}
  .cm-handle{color:var(--ink-dim);font-size:13px;cursor:grab;user-select:none;letter-spacing:-2px;}
  .cm-row input[type=checkbox]{width:15px;height:15px;accent-color:var(--signal);flex-shrink:0;}
  .cm-row label{margin:0;text-transform:none;letter-spacing:0;font-size:13px;color:var(--ink);font-weight:400;cursor:pointer;}
  .cm-empty-note{color:var(--ink-dim);font-size:12px;padding:8px;}
  .cm-foot{display:flex;justify-content:flex-end;gap:8px;padding:14px 18px;border-top:1px solid var(--panel-border);}
  .dup-email-tag{display:block;color:var(--alert);font-family:var(--font-mono);font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:0.4px;margin-top:2px;}

  /* merge tokens */
  .token-list{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}
  .token-chip{
    background:var(--panel-raised);border:1px dashed var(--panel-border);color:var(--confirm);
    font-family:var(--font-mono);font-size:11px;padding:4px 9px;border-radius:20px;
  }
  .token-chip:hover{border-color:var(--confirm);background:rgba(95,217,198,0.08);}

  .preview-card{
    background:var(--paper);color:#2a2620;border-radius:10px;padding:16px;
    font-family:var(--font-mono);font-size:13px;line-height:1.6;white-space:pre-wrap;
    box-shadow:0 3px 0 var(--paper-line);
  }
  .preview-label{font-family:var(--font-display);font-size:10px;text-transform:uppercase;letter-spacing:0.6px;color:#8a7f66;margin-bottom:8px;}

  .channel-toggle{display:flex;border:1px solid var(--panel-border);border-radius:7px;overflow:hidden;width:fit-content;}
  .channel-toggle button{padding:7px 16px;font-size:12px;font-weight:600;background:var(--panel-raised);color:var(--ink-dim);}
  .channel-toggle button.active{background:var(--signal);color:#1a1005;}

  /* queue */
  .queue-progress{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap;}
  .queue-progress .queue-bar{flex:1 1 100%;}
  .queue-progress #varyMessagesBtn,.queue-progress #startDispatchBtn{flex:0 0 auto;}
  .vary-status{font-size:12.5px;color:var(--ink-dim);margin:-8px 0 14px;display:flex;align-items:center;gap:10px;}
  .vary-status.ok{color:var(--confirm);}
  .vary-status .vary-reset{background:none;border:none;color:var(--signal);cursor:pointer;font-size:12.5px;padding:0;text-decoration:underline;}
  .queue-bar{flex:1;height:8px;background:var(--panel-raised);border-radius:20px;overflow:hidden;}
  .queue-bar-fill{height:100%;background:linear-gradient(90deg,var(--signal),var(--confirm));transition:width .3s;}
  .queue-count{font-family:var(--font-mono);font-size:12px;color:var(--ink-dim);white-space:nowrap;}

  .ticket-stack{display:flex;flex-direction:column;gap:14px;}
  .queue-done{display:flex;align-items:center;gap:14px;background:rgba(95,217,198,0.10);border:1px solid var(--confirm);border-radius:10px;padding:14px 16px;margin-bottom:16px;}
  .queue-done-check{width:34px;height:34px;flex-shrink:0;border-radius:50%;background:var(--confirm);color:#0f1418;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:18px;}
  .queue-done-text{flex:1;}
  .queue-done-title{font-family:var(--font-display);font-weight:700;font-size:15px;color:var(--ink);}
  .queue-done-sub{font-family:var(--font-mono);font-size:12px;color:var(--ink-dim);margin-top:2px;}
  .ticket{
    background:var(--paper);color:#2a2620;border-radius:12px;padding:18px;position:relative;
    box-shadow:0 4px 0 var(--paper-line);transition:opacity .25s, transform .25s;
  }
  .ticket.sent{opacity:0.5;}
  .ticket.skipped{opacity:0.35;}
  .ticket-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px;}
  .ticket-name{font-family:var(--font-display);font-weight:700;font-size:15px;}
  .ticket-meta{font-family:var(--font-mono);font-size:11px;color:#8a7f66;margin-top:2px;}
  .ticket textarea{
    background:#fffdf8;border:1px solid var(--paper-line);color:#2a2620;font-size:13px;
  }
  .ticket-actions{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap;}
  .stamp{
    position:absolute;top:14px;right:16px;border:2px solid var(--alert);color:var(--alert);
    font-family:var(--font-display);font-weight:700;font-size:11px;letter-spacing:1px;
    padding:3px 9px;border-radius:4px;transform:rotate(-8deg);opacity:0;
    text-transform:uppercase;
  }
  .stamp.show{animation:stampIn .35s ease-out forwards;}
  @keyframes stampIn{
    0%{opacity:0;transform:rotate(-8deg) scale(1.8);}
    100%{opacity:1;transform:rotate(-8deg) scale(1);}
  }
  .stamp.sent-stamp{border-color:var(--confirm);color:#1e7a6b;}
  @keyframes ticketSentFade{
    0%{opacity:1;box-shadow:0 4px 0 var(--paper-line),0 0 0 3px var(--confirm);}
    100%{opacity:0.5;box-shadow:0 4px 0 var(--paper-line),0 0 0 0 rgba(95,217,198,0);}
  }
  .ticket.sent.just-sent{animation:ticketSentFade 5s ease-out forwards;}

  .a-link{
    display:inline-flex;align-items:center;gap:6px;text-decoration:none;
    background:#1a1005;color:#fff3ea;font-family:var(--font-display);font-weight:600;font-size:12px;
    padding:8px 14px;border-radius:7px;background:var(--signal);
  }
  .a-link:hover{background:#ff8a5c;}

  .callout{
    background:var(--panel-raised);border:1px solid var(--panel-border);border-left:3px solid var(--confirm);
    padding:10px 14px;border-radius:6px;font-size:12px;color:var(--ink-dim);line-height:1.6;
  }
  .callout b{color:var(--ink);}

  ::selection{background:var(--signal);color:var(--bg);}
  .hidden{display:none !important;}

  .auth-overlay{
    position:fixed;inset:0;background:var(--bg);z-index:200;
    display:flex;align-items:center;justify-content:center;padding:20px;
  }
  .auth-card{
    width:100%;max-width:380px;background:var(--panel);border:1px solid var(--panel-border);
    border-radius:14px;padding:32px 28px;
  }
  .auth-card h1{font-family:var(--font-display);font-size:22px;margin:0 0 4px;}
  .auth-card label{margin-top:4px;}

  /* dispatch mode overlay */
  .dispatch-overlay{
    display:none;
    position:fixed;inset:0;background:var(--bg);z-index:100;
    flex-direction:column;padding:20px;
  }
  .dispatch-overlay.active{display:flex;}
  .dispatch-topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:18px;}
  .dispatch-progress-text{font-family:var(--font-mono);font-size:13px;color:var(--ink-dim);}
  .dispatch-card-wrap{flex:1;display:flex;align-items:center;justify-content:center;}
  .dispatch-card{
    width:100%;max-width:440px;background:var(--paper);color:#2a2620;border-radius:16px;
    padding:26px;box-shadow:0 6px 0 var(--paper-line);
  }
  .dispatch-card .dc-name{font-family:var(--font-display);font-weight:700;font-size:22px;margin-bottom:2px;}
  .dispatch-card .dc-meta{font-family:var(--font-mono);font-size:12px;color:#8a7f66;margin-bottom:16px;}
  .dispatch-card textarea{
    width:100%;background:#fffdf8;border:1px solid var(--paper-line);color:#2a2620;
    font-family:var(--font-mono);font-size:14px;line-height:1.6;border-radius:8px;padding:12px;
    min-height:140px;margin-bottom:16px;
  }
  .dispatch-card .dc-actions{display:flex;gap:10px;flex-wrap:wrap;}
  .dc-send-link{
    flex:1;text-align:center;text-decoration:none;background:var(--signal);color:#1a1005;
    font-family:var(--font-display);font-weight:700;font-size:15px;padding:14px;border-radius:10px;
  }
  .dc-send-link:hover{background:#ff8a5c;}
  .dc-missing{
    flex:1;text-align:center;background:var(--panel-raised);color:var(--alert);
    font-family:var(--font-display);font-weight:600;font-size:13px;padding:14px;border-radius:10px;
  }
  .dispatch-waiting{
    position:fixed;inset:0;background:rgba(20,23,26,0.92);z-index:110;
    display:flex;align-items:center;justify-content:center;
  }
  .dispatch-waiting-inner{
    text-align:center;color:var(--ink);font-size:14px;display:flex;flex-direction:column;
    align-items:center;gap:14px;max-width:280px;
  }
  .pulse-dot{
    width:14px;height:14px;border-radius:50%;background:var(--confirm);
    animation:pulseDot 1.2s ease-in-out infinite;
  }
  @keyframes pulseDot{
    0%,100%{transform:scale(1);opacity:1;}
    50%{transform:scale(1.6);opacity:0.5;}
  }
  /* ---------- Rehab / Deals module ---------- */
  .deals-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;flex-wrap:wrap;}
  .deals-list{display:flex;flex-direction:column;gap:10px;}
  .pipeline-header{font-family:var(--font-display);font-weight:700;font-size:16px;color:var(--ink);margin:14px 0 4px;padding-bottom:4px;border-bottom:1px solid var(--panel-border);}
  .stage-group{display:flex;flex-direction:column;gap:8px;margin-bottom:6px;}
  .stage-header{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin-top:8px;}
  .stage-header .stage-count{background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:999px;padding:0 8px;font-size:11px;font-weight:600;letter-spacing:0;}
  .deal-pipeline-tag{font-size:11px;font-weight:600;color:var(--accent);border:1px solid var(--accent);border-radius:5px;padding:1px 7px;text-transform:uppercase;letter-spacing:0.5px;}
  /* stage menu bar on a deal */
  .deal-stage-bar{display:flex;gap:4px;width:100%;overflow-x:auto;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:9px;padding:4px;}
  .stage-chip{flex:1 0 auto;white-space:nowrap;background:none;border:none;color:var(--ink-dim);font-size:12px;padding:8px 12px;border-radius:6px;cursor:pointer;font-family:var(--font-body);}
  .stage-chip:hover{background:var(--panel);color:var(--ink);}
  .stage-chip.done{color:var(--ink);}
  .stage-chip.current{background:var(--accent);color:#fff;font-weight:600;}
  /* Zoho-style sectioned two-column field layout */
  .lay-section{border:1px solid var(--panel-border);border-radius:10px;margin-bottom:14px;background:var(--panel-raised);overflow:hidden;}
  .lay-section-head{font-size:13px;font-weight:600;padding:11px 14px;border-bottom:1px solid var(--panel-border);background:var(--panel);}
  .lay-grid{display:grid;grid-template-columns:1fr 1fr;}
  .lay-field{display:flex;flex-direction:column;gap:3px;padding:10px 14px;border-bottom:1px solid var(--panel-border);}
  .lay-field:nth-child(odd){border-right:1px solid var(--panel-border);}
  .lay-label{font-size:11px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:0.3px;}
  .lay-val{font-size:13px;word-break:break-word;}
  @media(max-width:640px){ .lay-grid{grid-template-columns:1fr;} .lay-field:nth-child(odd){border-right:none;} }
  /* layout designer */
  .lay-des-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px;padding:10px 12px;background:var(--panel);border:1px solid var(--panel-border);border-radius:9px;}
  .lay-des-section{border:1px solid var(--panel-border);border-radius:10px;margin-bottom:12px;background:var(--panel-raised);}
  .lay-des-head{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--panel-border);}
  .lay-sec-name{flex:1;font-weight:600;font-size:13px;}
  .lay-des-actions{display:flex;gap:4px;}
  .lay-des-actions button{background:var(--panel);border:1px solid var(--panel-border);border-radius:6px;width:28px;height:28px;cursor:pointer;color:var(--ink-dim);}
  .lay-des-actions button:disabled{opacity:0.35;cursor:default;}
  .lay-drop{min-height:44px;padding:8px;display:flex;flex-wrap:wrap;gap:6px;}
  .lay-drop.drop-hover{background:rgba(255,122,69,0.08);outline:2px dashed var(--accent);outline-offset:-4px;}
  .lay-drop-empty{color:var(--ink-dim);font-size:12px;padding:8px;}
  .lay-chip{display:inline-flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--panel-border);border-radius:7px;padding:6px 10px;font-size:12px;cursor:grab;}
  .lay-chip.dragging{opacity:0.4;}
  .lay-grip{color:var(--ink-dim);cursor:grab;font-size:11px;}
  /* two-panel layout designer */
  .ld-overlay{position:fixed;inset:0;z-index:400;background:var(--bg);display:flex;flex-direction:column;}
  .ld-topbar{display:flex;justify-content:space-between;align-items:center;padding:14px 20px;border-bottom:1px solid var(--panel-border);background:var(--panel);}
  .ld-title{font-family:var(--font-display);font-weight:700;font-size:16px;}
  .ld-body{flex:1;display:flex;min-height:0;}
  .ld-palette{width:260px;flex:0 0 auto;border-right:1px solid var(--panel-border);padding:16px;overflow-y:auto;background:var(--panel-raised);}
  .ld-palette-head{font-size:13px;font-weight:600;}
  .ld-palette-sub{font-size:11px;color:var(--ink-dim);margin:2px 0 12px;}
  .ld-palette-list{display:flex;flex-direction:column;gap:6px;min-height:40px;}
  .ld-palette-list.drop-hover{outline:2px dashed var(--accent);outline-offset:2px;border-radius:8px;}
  .ld-empty{font-size:12px;color:var(--ink-dim);padding:8px 0;}
  .ld-canvas{flex:1;overflow-y:auto;padding:20px;}
  .ld-section{border:1px solid var(--panel-border);border-radius:10px;margin-bottom:14px;background:var(--panel-raised);}
  .ld-section-head{display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--panel-border);}
  .ld-sec-name{flex:1;font-weight:600;font-size:13px;}
  .ld-sec-actions{display:flex;gap:4px;}
  .ld-sec-actions button{background:var(--panel);border:1px solid var(--panel-border);border-radius:6px;width:28px;height:28px;cursor:pointer;color:var(--ink-dim);}
  .ld-sec-actions button:disabled{opacity:0.35;cursor:default;}
  .ld-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:12px;min-height:60px;}
  .ld-grid.drop-hover{background:rgba(255,122,69,0.08);outline:2px dashed var(--accent);outline-offset:-6px;}
  .ld-drop-empty{grid-column:1 / -1;color:var(--ink-dim);font-size:12px;text-align:center;padding:14px;border:1px dashed var(--panel-border);border-radius:8px;}
  .ld-chip{display:flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--panel-border);border-radius:7px;padding:8px 10px;font-size:12px;cursor:grab;}
  .ld-chip.dragging{opacity:0.4;}
  .ld-pal-group{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin-bottom:8px;}
  .ld-type{background:var(--panel);border:1px solid var(--panel-border);border-radius:7px;padding:8px 10px;font-size:12px;cursor:grab;margin-bottom:6px;display:flex;align-items:center;gap:6px;}
  .ld-type::before{content:"＋";color:var(--accent);font-weight:700;}
  .ld-type:hover{border-color:var(--accent);}
  .ld-fieldchip{justify-content:space-between;}
  .ld-fieldlabel{flex:1;}
  .ld-fieldlabel.editable{cursor:text;border-bottom:1px dashed transparent;}
  .ld-fieldlabel.editable:hover{border-bottom-color:var(--ink-dim);}
  .ld-fieldremove{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:12px;padding:0 2px;}
  .ld-fieldremove:hover{color:var(--danger,#e5484d);}
  .ld-fieldrename{font-size:12px;padding:2px 4px;flex:1;min-width:80px;}
  .ld-fieldmenu{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:13px;letter-spacing:1px;padding:0 4px;line-height:1;}
  .ld-fieldmenu:hover{color:var(--ink);}
  .ld-req{color:var(--accent);font-weight:700;}
  .ld-fieldmenu-pop{position:fixed;z-index:600;background:var(--panel);border:1px solid var(--panel-border);border-radius:9px;box-shadow:0 8px 28px rgba(0,0,0,0.4);padding:6px;min-width:190px;display:flex;flex-direction:column;}
  .ld-fieldmenu-pop button{background:none;border:none;text-align:left;color:var(--ink);font-size:13px;padding:9px 12px;border-radius:6px;cursor:pointer;font-family:var(--font-body);}
  .ld-fieldmenu-pop button:hover{background:var(--panel-raised);}
  .ld-fieldmenu-pop button.danger{color:#e5675f;}
  .fperm-opt{display:flex;gap:10px;align-items:flex-start;padding:9px 10px;border:1px solid var(--panel-border);border-radius:8px;margin-bottom:8px;cursor:pointer;}
  .fperm-opt small{color:var(--ink-dim);}
  .fp-lbl{display:block;font-size:12px;color:var(--ink-dim);margin-bottom:4px;}
  .of-field{margin-bottom:12px;}
  .quickadd-menu{position:absolute;top:110%;right:0;z-index:60;background:var(--panel);border:1px solid var(--panel-border);border-radius:9px;box-shadow:0 8px 28px rgba(0,0,0,0.4);padding:6px;min-width:170px;display:flex;flex-direction:column;}
  .quickadd-menu button{background:none;border:none;text-align:left;color:var(--ink);font-size:13px;padding:9px 12px;border-radius:6px;cursor:pointer;font-family:var(--font-body);}
  .quickadd-menu button::before{content:"＋ ";color:var(--accent);}
  .quickadd-menu button:hover{background:var(--panel-raised);}
  .quickadd-menu button.hidden{display:none;}
  .module-more-wrap{display:inline-block;}
  .module-more-menu{position:absolute;top:105%;left:0;z-index:60;background:var(--panel);border:1px solid var(--panel-border);border-radius:9px;box-shadow:0 8px 28px rgba(0,0,0,0.4);padding:6px;min-width:170px;display:flex;flex-direction:column;}
  .module-more-menu button{background:none;border:none;text-align:left;color:var(--ink);font-size:13px;padding:9px 12px;border-radius:6px;cursor:pointer;font-family:var(--font-body);}
  .module-more-menu button:hover{background:var(--panel-raised);}
  .off-section{margin-bottom:18px;}
  .off-section-head{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin-bottom:10px;border-bottom:1px solid var(--panel-border);padding-bottom:5px;}
  .off-section-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px;}
  @media(max-width:640px){ .off-section-grid{grid-template-columns:1fr;} }
  @media(max-width:640px){ .ld-body{flex-direction:column;} .ld-palette{width:auto;border-right:none;border-bottom:1px solid var(--panel-border);max-height:160px;} .ld-grid{grid-template-columns:1fr;} }
  /* modules & field editor */
  .mod-row{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border:1px solid var(--panel-border);border-radius:9px;margin-bottom:8px;cursor:pointer;background:var(--panel-raised);}
  .mod-row:hover{border-color:var(--accent);}
  .mod-name{font-size:14px;font-weight:600;}
  .mod-count{color:var(--ink-dim);font-size:12px;}
  .fe-row{display:flex;justify-content:space-between;align-items:center;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:8px;padding:9px 12px;margin-bottom:6px;}
  .fe-name{font-size:13px;font-weight:600;}
  .fe-type{font-size:11px;color:var(--ink-dim);}
  .fe-actions{display:flex;gap:6px;align-items:center;}
  /* deal financials / offer calculator */
  .deal-financials{margin-top:8px;}
  /* offer wizard */
  .off-docs{display:flex;flex-direction:column;gap:4px;}
  .off-docs label{display:flex;align-items:center;gap:8px;font-size:12px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:6px;padding:5px 9px;}
  .off-docs .off-empty{color:var(--ink-dim);font-size:12px;padding:6px 0;}
  .off-note{font-size:11px;color:var(--ink-dim);margin-top:10px;border-left:2px solid var(--accent);padding-left:8px;}
  .make-offer-row{margin-top:16px;display:flex;justify-content:flex-end;}
  /* related-lists nav on a deal record */
  .deal-edit-layout{display:flex;gap:16px;align-items:flex-start;}
  .deal-edit-layout > .card{flex:1;min-width:0;}
  /* Definite height so the Deal Library below (a natural-height, internally-scrolling
     block) has real room. The reserve (~210px) keeps the rail's bottom — and its
     scrollbar — clear of the fixed "Make Offer" action bar: the rail sits ~130px below
     the top (app header) at rest, the bar is 64px, plus breathing room. */
  .deal-rail{flex:0 0 185px;position:sticky;top:16px;align-self:flex-start;display:flex;flex-direction:column;gap:12px;height:calc(100vh - 210px);min-height:340px;overflow-y:auto;}
  .deal-nav{position:sticky;top:16px;width:150px;flex:0 0 auto;display:flex;flex-direction:column;gap:2px;}
  .deal-rail .deal-nav{position:static;top:auto;width:100%;}
  /* Deal Library docked in the left rail (compact) */
  .dl-rail{background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:10px;padding:10px;display:flex;flex-direction:column;gap:8px;min-height:0;overflow:hidden;}
  .dl-rail .dl-head h3{font-size:14px;}
  .dl-upload-btn{width:100%;}
  .dl-rail .dl-type{width:100%;max-width:none;font-size:12px;}
  .dl-rail .doc-storage-note{font-size:11px;color:var(--ink-dim);margin:0;}
  /* Let the Deal Library be its natural (full) height — as tall as ALL its documents —
     and make the RAIL the scroll container (overflow-y:auto above). Previously the list
     was pinned at a 200px min inside a too-short card, so only ~2 docs showed and the
     rest was clipped. Now every doc shows inline and you scroll the rail for overflow. */
  .deal-rail .deal-documents{flex:0 0 auto;min-height:0;}
  /* Same treatment for the People rail: it shares .dl-rail styling (raised panel), which
     brings flex-shrink + overflow:hidden. Without flex:0 0 auto the rail's fixed height
     squeezed this box down to just its header (~22px) and clipped every person out of
     view. Pin it to natural height and let the RAIL scroll for overflow, like the docs. */
  .deal-rail .deal-people-rail{flex:0 0 auto;min-height:0;overflow:visible;}
  .dl-rail #documentsList{flex:0 0 auto;overflow:visible;min-height:0;display:flex;flex-direction:column;gap:8px;padding-right:2px;}
  .dl-rail .dl-section-head{margin:6px 0 2px;}
  .dl-rail .doc-item{flex-direction:column;align-items:stretch;gap:3px;padding:6px 7px;margin:0;position:relative;}
  /* Clamp the filename to 2 lines (full name on hover) so each row stays compact and
     more documents are visible in the narrow rail. */
  .dl-rail .doc-name{font-size:12px;font-weight:500;word-break:break-word;line-height:1.25;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
  .dl-rail .doc-meta{font-size:10px;line-height:1.3;}
  .dl-rail .doc-status{font-size:9px;padding:0 6px;}
  .dl-rail .doc-del{top:4px;right:4px;}
  .dl-rail .doc-status{align-self:flex-start;}
  .dl-rail .doc-actions{display:flex;gap:6px;flex-wrap:wrap;}
  .dl-rail .doc-del{position:absolute;top:6px;right:6px;}
  .dl-rail .doc-review-note{font-size:11px;color:var(--ink-dim);width:100%;}
  .deal-nav-head{font-size:11px;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);padding:6px 10px;display:flex;justify-content:space-between;align-items:center;}
  .rel-nav-gear{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:13px;padding:0 2px;line-height:1;opacity:.6;}
  .rel-nav-gear:hover{opacity:1;color:var(--ink);}
  .rel-reorder-pop{position:absolute;z-index:300;background:var(--panel);border:1px solid var(--panel-border);border-radius:10px;box-shadow:0 12px 32px rgba(0,0,0,.55);padding:10px;width:240px;}
  .rrp-head{font-size:11px;text-transform:uppercase;letter-spacing:0.4px;color:var(--ink-dim);font-weight:600;margin-bottom:8px;}
  .rrp-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:7px;background:var(--panel-raised);border:1px solid var(--panel-border);margin-bottom:6px;cursor:grab;font-size:13px;color:var(--ink);}
  .rrp-item.dragging{opacity:.5;}
  .rrp-grip{color:var(--ink-dim);cursor:grab;}
  .rrp-foot{display:flex;justify-content:space-between;margin-top:4px;}
  .deal-nav-link{text-align:left;background:none;border:none;color:var(--ink-dim);padding:8px 10px;border-radius:7px;font-size:13px;cursor:pointer;width:100%;}
  .deal-nav-link:hover{background:var(--panel-raised);color:var(--ink);}
  /* contact edit mode */
  .cr-edit-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
  .cr-edit-grid .cr-field{display:flex;flex-direction:column;gap:4px;}
  .cr-edit-grid .cr-field.full{grid-column:1 / -1;}
  .cr-edit-grid label{font-size:11px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:0.4px;}
  .cr-edit-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px;padding-top:16px;border-top:1px solid var(--panel-border);}
  /* Multi-select fields: chips + an "add" dropdown, styled like the rest of the app
     instead of the browser's raw open list box. */
  .cr-edit-grid .cr-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center;width:100%;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:7px;padding:6px 8px;min-height:38px;}
  .cr-edit-grid .cr-chips:focus-within{border-color:var(--signal);}
  .cr-edit-grid .cr-chip{display:inline-flex;align-items:center;gap:3px;background:var(--panel);border:1px solid var(--signal);color:var(--signal);border-radius:6px;padding:2px 4px 2px 9px;font-size:13px;font-weight:600;white-space:nowrap;}
  .cr-edit-grid .cr-chip-x{border:none;background:none;color:var(--signal);cursor:pointer;font-size:15px;line-height:1;padding:0 3px;border-radius:3px;}
  .cr-edit-grid .cr-chip-x:hover{background:var(--signal);color:var(--panel-raised);}
  .cr-edit-grid .cr-chip-add{width:auto;min-width:80px;border:none;background:transparent;color:var(--ink-dim);font-size:13px;padding:2px 4px;cursor:pointer;}
  .cr-edit-grid .cr-chip-add:focus{border:none;}
  .cr-edit-grid .cr-chip-none{color:var(--ink-dim);font-size:12px;font-style:italic;padding:2px 4px;}
  @media(max-width:640px){ .cr-edit-grid{grid-template-columns:1fr;} }
  @media(max-width:820px){
    .deal-edit-layout{flex-direction:column; align-items:stretch;} /* stretch card + nav to full width when stacked (fixes contact card right-gap) */
    .deal-rail{position:static;width:100%;flex:1 1 auto;height:auto;max-height:none;}
    .deal-nav{position:sticky;top:0;z-index:5;width:100%;flex-direction:row;flex-wrap:wrap;gap:6px;background:var(--bg);padding:8px 0;}
    .deal-nav-head{display:none;}
    .deal-nav-link{width:auto;border:1px solid var(--panel-border);padding:6px 10px;}
    .dl-rail #documentsList{max-height:340px;overflow-y:auto;}
  }
  .df-card{border:1px solid var(--panel-border);border-radius:10px;padding:14px 16px;background:var(--panel-raised);}
  .df-card h3{margin:0 0 10px;font-size:15px;}
  .df-row{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap;}
  .df-row label{font-size:12px;color:var(--ink-dim);width:130px;flex:0 0 auto;}
  .df-row input,.df-row select{padding:6px 9px;flex:1;min-width:110px;}
  .df-out{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 0;border-top:1px solid var(--panel-border);font-size:14px;}
  .df-out.key{font-weight:700;font-size:16px;color:var(--accent);}
  .df-out .df-val{font-family:var(--font-mono);}
  /* deal view toggle + kanban board */
  .deal-view-toggle{display:inline-flex;border:1px solid var(--panel-border);border-radius:8px;overflow:hidden;}
  .dvt-btn{background:var(--panel-raised);border:none;color:var(--ink-dim);padding:6px 13px;cursor:pointer;font-size:13px;}
  .dvt-btn.active{background:var(--accent);color:#1a1005;font-weight:600;}
  .deals-board{overflow-x:auto;padding-bottom:8px;}
  .board-cols{display:flex;gap:12px;align-items:flex-start;min-height:220px;}
  .board-col{flex:0 0 240px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:10px;padding:10px;}
  .board-col-head{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin-bottom:8px;display:flex;align-items:center;gap:6px;}
  .board-col-count{background:var(--panel);border:1px solid var(--panel-border);border-radius:999px;padding:0 7px;font-size:11px;}
  .board-col-body{display:flex;flex-direction:column;gap:8px;min-height:44px;border-radius:8px;}
  .board-col-body.drop-hover{outline:2px dashed var(--accent);outline-offset:2px;}
  .board-card{background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;padding:10px;cursor:grab;}
  .board-card.dragging{opacity:0.45;}
  .board-card .bc-name{font-weight:600;font-size:14px;}
  .board-card .bc-sub{font-size:12px;color:var(--ink-dim);margin-top:2px;}
  .board-card .bc-total{font-family:var(--font-mono);font-size:12px;color:var(--accent);margin-top:4px;}
  /* Configurable board-card rows (Settings: ⚙ Card fields) */
  .board-card .bc-row{display:flex;justify-content:space-between;gap:8px;font-size:12px;margin-top:3px;}
  .board-card .bc-row .bc-k{color:var(--ink-dim);flex:0 0 auto;}
  .board-card .bc-row .bc-v{color:var(--ink);text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .board-col-sum{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--accent);text-transform:none;letter-spacing:0;}
  /* A stage you're LOOKING at, as opposed to the stage the deal is ON. */
  /* BLUE FILL (.current) = the stage the deal IS in. UNDERLINE (.viewing) = the section
     you're looking at. Two different facts, two different signals, one bar. A chip click
     only ever moves the UNDERLINE — it can never move the deal. */
  /* Drag-to-reorder rehab products */
  .rp-item[draggable="true"]{cursor:grab;}
  .rp-item.rp-dragging{opacity:0.45;}
  .rp-item.rp-drop-above{box-shadow:inset 0 3px 0 0 var(--accent);}
  .rp-item.rp-drop-below{box-shadow:inset 0 -3px 0 0 var(--accent);}
  /* Phone cells: the number dials, the bubble texts. */
  .pc-cell{display:inline-flex;align-items:center;gap:6px;}
  .pc-sms{text-decoration:none;opacity:0.55;font-size:12px;line-height:1;}
  .pc-sms:hover{opacity:1;}
  .stage-chip.viewing{box-shadow:inset 0 -3px 0 0 var(--accent);font-weight:600;}
  .stage-chip.current.viewing{box-shadow:inset 0 -3px 0 0 #fff;}   /* on the blue chip, underline in white */
  .mkt-video-grid .mkt-media-item{width:auto;}
  .mkt-media-video{width:100%;height:auto;max-height:180px;background:#000;border-radius:8px;display:block;}
  .mkt-media-empty{font-size:12px;color:var(--ink-dim);padding:8px 2px;}
  .mkt-file-grid .mkt-media-thumb{background:var(--panel-raised);}
  .off-sub{font-size:12px;color:var(--ink-dim);margin:-4px 0 10px;line-height:1.4;}
  .bcs-pop{width:260px;}
  .bcs-note{font-size:11px;color:var(--ink-dim);margin:-4px 0 8px;line-height:1.35;}
  .bcs-list{max-height:260px;overflow-y:auto;border:1px solid var(--panel-border);border-radius:8px;padding:6px;background:var(--panel-raised);}
  .bcs-item{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:6px;font-size:13px;color:var(--ink);cursor:pointer;}
  .bcs-item:hover{background:var(--panel);}
  .bcs-agg{width:100%;}
  /* activity timeline */
  .deal-activity{border-top:1px solid var(--panel-border);margin-top:20px;padding-top:4px;}
  .add-note-row{display:flex;gap:8px;margin-bottom:14px;align-items:flex-start;}
  .add-note-row input{flex:1;padding:8px 10px;}
  .add-note-fields{flex:1;display:flex;flex-direction:column;gap:6px;}
  .add-note-fields input{flex:0 0 auto;width:100%;}
  .note-title-in{font-weight:600;}
  .activity-title{font-weight:600;margin-bottom:1px;}
  .activity-timeline{display:flex;flex-direction:column;gap:0;}
  .activity-item{display:flex;gap:10px;padding:9px 0;border-bottom:1px solid var(--panel-border);}
  .activity-dot{width:8px;height:8px;border-radius:50%;background:var(--accent);margin-top:6px;flex:0 0 auto;}
  .activity-dot.stage{background:#4aa3ff;}
  .activity-dot.created{background:#57c98a;}
  .activity-body{flex:1;min-width:0;}
  .activity-text{font-size:14px;}
  .activity-meta{font-size:11px;color:var(--ink-dim);margin-top:2px;font-family:var(--font-mono);}
  .activity-empty{color:var(--ink-dim);font-size:13px;padding:10px 0;}
  .cd-fields{display:flex;flex-direction:column;gap:8px;}
  .cd-row{display:flex;gap:10px;font-size:14px;}
  .cd-label{color:var(--ink-dim);font-size:12px;width:90px;flex:0 0 auto;padding-top:1px;}
  .cd-val{flex:1;min-width:0;word-break:break-word;}
  /* tasks */
  .task-controls{display:flex;gap:8px;margin-bottom:12px;}
  .task-controls select{padding:6px 8px;}
  .tasks-list{display:flex;flex-direction:column;gap:6px;}
  .task-group-head{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin:14px 0 6px;}
  .task-group-head.overdue{color:var(--danger,#e5484d);}
  .task-item{display:flex;align-items:flex-start;gap:10px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:9px;padding:11px 13px;}
  .task-item.done{opacity:0.55;}
  .task-check{margin-top:2px;flex:0 0 auto;width:16px;height:16px;cursor:pointer;}
  .task-main{flex:1;min-width:0;}
  .task-title{font-size:14px;}
  .task-item.done .task-title{text-decoration:line-through;}
  .task-meta{font-size:11px;color:var(--ink-dim);margin-top:3px;display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
  .task-due.overdue{color:var(--danger,#e5484d);font-weight:600;}
  .task-link-chip{border:1px solid var(--panel-border);border-radius:4px;padding:0 6px;color:var(--accent);cursor:pointer;}
  .task-del{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:14px;padding:2px 6px;flex:0 0 auto;}
  .task-del:hover{color:var(--danger,#e5484d);}
  .tasks-empty{color:var(--ink-dim);font-size:13px;padding:16px 4px;text-align:center;}
  .task-contact-selected{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:7px;padding:7px 10px;font-size:13px;margin-bottom:6px;}
  .task-contact-selected button{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:14px;}
  .task-contact-results{border:1px solid var(--panel-border);border-radius:7px;margin-top:4px;max-height:180px;overflow-y:auto;background:var(--panel-raised);}
  .tcr-item{padding:8px 10px;cursor:pointer;font-size:13px;border-bottom:1px solid var(--panel-border);}
  .tcr-item:hover{background:var(--panel);}
  .tcr-item .tcr-sub{font-size:11px;color:var(--ink-dim);font-family:var(--font-mono);}
  /* dashboard */
  .dash-cards{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:20px;}
  .dash-card{flex:1;min-width:150px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:10px;padding:14px 16px;}
  .dash-card .dc-label{font-size:12px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:0.5px;}
  .dash-card .dc-num{font-family:var(--font-display);font-weight:700;font-size:26px;margin-top:6px;}
  .dash-card .dc-num.money{color:var(--accent);}
  .dash-sec{margin-bottom:24px;}
  .dash-sec h3{font-size:15px;margin:0 0 10px;}
  .dash-bar-row{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-size:13px;}
  .dash-bar-name{width:150px;flex:0 0 auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .dash-bar-track{flex:1;background:var(--panel-raised);border-radius:6px;height:22px;position:relative;overflow:hidden;}
  .dash-bar-fill{height:100%;background:var(--accent);border-radius:6px;min-width:2px;}
  .dash-bar-val{width:110px;flex:0 0 auto;text-align:right;font-family:var(--font-mono);}
  .funnel-pipe{margin-bottom:16px;}
  .funnel-pipe h4{font-size:13px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:0.5px;margin:0 0 8px;}
  .funnel-stage{display:flex;align-items:center;gap:10px;margin-bottom:6px;font-size:13px;}
  .funnel-stage-name{width:200px;flex:0 0 auto;}
  .funnel-stage-track{flex:1;background:var(--panel-raised);border-radius:6px;height:20px;overflow:hidden;}
  .funnel-stage-fill{height:100%;background:#4aa3ff;border-radius:6px;min-width:2px;}
  .funnel-stage-val{width:150px;flex:0 0 auto;text-align:right;font-family:var(--font-mono);color:var(--ink-dim);}
  .dash-empty{color:var(--ink-dim);font-size:13px;padding:10px 0;}
  /* stage editor */
  .stage-edit-block{margin-bottom:18px;}
  .stage-edit-row{display:flex;align-items:center;gap:6px;margin-bottom:6px;}
  .stage-edit-inp{flex:1;padding:6px 9px;}
  .stage-mv,.stage-del{background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:6px;width:30px;height:30px;cursor:pointer;color:var(--ink-dim);flex:0 0 auto;}
  .stage-mv:disabled{opacity:0.35;cursor:default;}
  .stage-del:hover{color:var(--danger,#e5484d);border-color:var(--danger,#e5484d);}
  .stage-fixed{margin-top:8px;display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
  /* transaction documents */
  .deal-documents{border-top:1px solid var(--panel-border);margin-top:20px;padding-top:4px;}
  .doc-add{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:8px;}
  .doc-add input[type=text]{flex:1;min-width:150px;padding:7px 10px;}
  .doc-add select{padding:7px 10px;}
  .doc-storage-note{font-size:11px;color:var(--ink-dim);margin-bottom:12px;}
  .doc-item{display:flex;align-items:center;gap:10px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:9px;padding:10px 13px;margin-bottom:8px;flex-wrap:wrap;}
  .doc-main{flex:1;min-width:0;}
  .doc-name{font-size:14px;font-weight:600;}
  .doc-meta{font-size:11px;color:var(--ink-dim);margin-top:2px;font-family:var(--font-mono);}
  .doc-status{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;padding:2px 9px;border-radius:999px;}
  .doc-status.pending{background:rgba(255,176,32,0.16);color:#ffb020;}
  .doc-status.approved{background:rgba(87,201,138,0.16);color:#57c98a;}
  .doc-status.rejected{background:rgba(229,72,77,0.16);color:#e5484d;}
  .doc-actions{display:flex;gap:6px;}
  .doc-review-note{font-size:12px;color:var(--ink-dim);margin-top:4px;font-style:italic;width:100%;}
  /* review queue + pending badge */
  .mod-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--danger,#e5484d);color:#fff;font-size:11px;font-weight:700;margin-left:4px;}
  .review-queue{border:1px solid var(--danger,#e5484d);border-radius:12px;padding:14px 16px;margin-bottom:22px;background:rgba(229,72,77,0.05);}
  .review-queue h3{margin:0 0 4px;font-size:15px;}
  .rq-sub{font-size:12px;color:var(--ink-dim);margin:0 0 12px;}
  .rq-item{display:flex;align-items:center;gap:10px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:9px;padding:10px 13px;margin-bottom:8px;flex-wrap:wrap;}
  .rq-main{flex:1;min-width:0;cursor:pointer;}
  .rq-name{font-size:14px;font-weight:600;}
  .rq-meta{font-size:11px;color:var(--ink-dim);margin-top:2px;font-family:var(--font-mono);}
  .rq-actions{display:flex;gap:6px;}
  /* notifications */
  .notif-count{position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;padding:0 4px;border-radius:999px;background:var(--danger,#e5484d);color:#fff;font-size:10px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;}
  .notif-dropdown{position:absolute;top:110%;right:0;width:340px;max-height:70vh;overflow-y:auto;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:12px;box-shadow:0 12px 40px rgba(0,0,0,0.4);z-index:200;padding:8px;}
  .notif-head{font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);padding:6px 8px;}
  .notif-item{display:flex;flex-direction:column;gap:2px;padding:10px;border-radius:8px;cursor:pointer;}
  .notif-item:hover{background:var(--panel);}
  .notif-item .ni-title{font-size:13px;font-weight:600;}
  .notif-item .ni-body{font-size:12px;color:var(--ink);margin-top:1px;}
  .notif-item .ni-sub{font-size:11px;color:var(--ink-dim);font-family:var(--font-mono);}
  .notif-item.unread{background:rgba(255,122,69,0.08);}
  .notif-item.unread .ni-title::before{content:"● ";color:var(--accent);font-size:10px;}
  .notif-empty{padding:16px;text-align:center;color:var(--ink-dim);font-size:13px;}
  .dr-meta{display:flex;flex-direction:column;gap:6px;margin:8px 0 14px;font-size:13px;}
  .dr-meta .dr-row{display:flex;gap:10px;}
  .dr-meta .dr-label{color:var(--ink-dim);width:90px;flex:0 0 auto;font-size:12px;}
  .dr-preview{border-radius:10px;margin-bottom:16px;}
  .dr-ver{font-size:11px;font-weight:700;color:var(--ink-dim);background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:5px;padding:0 6px;vertical-align:middle;}
  .dr-frame{width:100%;height:58vh;max-height:620px;border:1px solid var(--panel-border);border-radius:10px;background:#fff;display:block;}
  .dr-imgwrap{max-height:58vh;overflow:auto;border:1px solid var(--panel-border);border-radius:10px;text-align:center;background:var(--panel-raised);padding:8px;}
  .dr-img{max-width:100%;height:auto;display:inline-block;}
  .dr-noprev{padding:28px 16px;text-align:center;color:var(--ink-dim);font-size:13px;border:1px dashed var(--panel-border);border-radius:10px;background:var(--panel);}
  .dr-openrow{margin-top:12px;text-align:center;}
  .dr-actions{display:flex;justify-content:flex-end;gap:10px;}
  .rq-name{cursor:pointer;}
  .rq-name:hover{color:var(--signal);}
  .contact-name-link{cursor:pointer;}
  .contact-name-link:hover{text-decoration:underline;color:var(--accent);}
  .contact-trow{cursor:pointer;}
  .cell-link{color:inherit;text-decoration:none;}
  .cell-link:hover{color:var(--accent);text-decoration:underline;}
  .deal-card{display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:10px;padding:14px 16px;cursor:pointer;transition:border-color .15s;}
  .deal-card:hover{border-color:var(--accent);}
  .deal-card .dc-name{font-weight:600;font-size:15px;}
  .deal-card .dc-sub{font-size:12px;color:var(--ink-dim);margin-top:2px;font-family:var(--font-mono);}
  .deal-card .dc-total{font-weight:600;font-size:15px;color:var(--accent);white-space:nowrap;}
  .deals-empty{text-align:center;color:var(--ink-dim);padding:40px 16px;}

  .est-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px;}
  .est-top-total{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:10px;padding:10px 14px;margin:0 0 14px;font-weight:600;font-size:15px;}
  .est-top-total span:last-child{color:var(--accent);font-size:17px;font-variant-numeric:tabular-nums;}
  .est-rows{display:flex;flex-direction:column;}
  .est-row{display:grid;grid-template-columns:26px 1fr 74px 92px;gap:8px;align-items:center;padding:9px 4px;border-bottom:1px solid var(--panel-border);}
  .est-row .er-idx{font-size:12px;color:var(--ink-dim);}
  .est-row .er-name{font-size:14px;line-height:1.25;}
  .est-row .er-meta{font-size:11px;color:var(--ink-dim);font-family:var(--font-mono);margin-top:2px;}
  .est-row .er-qty{width:100%;text-align:center;padding:6px 4px;}
  .est-row .er-total{text-align:right;font-size:14px;font-variant-numeric:tabular-nums;}
  .est-row.custom .er-name{color:var(--accent);}
  .est-head-row{display:grid;grid-template-columns:26px 1fr 74px 92px;gap:8px;padding:6px 4px;font-size:11px;color:var(--ink-dim);font-weight:600;border-bottom:1px solid var(--panel-border);}
  .est-head-row .h-r{text-align:right;}
  .est-head-row .h-c{text-align:center;}
  .est-grand{display:flex;align-items:center;justify-content:space-between;padding:14px 4px 2px;margin-top:6px;border-top:2px solid var(--panel-border);}
  .est-grand .eg-label{font-weight:600;font-size:16px;}
  .est-grand .eg-total{font-weight:700;font-size:18px;color:var(--accent);font-variant-numeric:tabular-nums;}
  .er-del{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:14px;padding:2px 4px;line-height:1;}
  .er-del:hover{color:var(--danger,#e5484d);}

  /* product library editor */
  .rp-controls{display:flex;gap:8px;margin:4px 0 8px;}
  .rp-controls input{flex:1;min-width:0;padding:6px 8px;}
  .rp-controls select{flex:0 0 auto;max-width:38%;}
  .rp-hint{font-size:11px;color:var(--ink-dim);margin:0 0 8px;}
  .rp-item{border-bottom:1px solid var(--panel-border);padding:9px 0;}
  .rp-item .rp-l1{display:flex;align-items:center;gap:6px;margin-bottom:6px;}
  .rp-item .rp-l2{display:flex;align-items:center;gap:6px;}
  .rp-item input{padding:6px 8px;}
  .rp-item .rp-name{flex:1;min-width:0;}
  .rp-item .rp-unit{flex:1;min-width:0;}
  .rp-item .rp-price{width:88px;text-align:right;}
  .rp-star{background:none;border:none;cursor:pointer;font-size:17px;line-height:1;padding:2px 4px;color:var(--ink-dim);flex:0 0 auto;}
  .rp-star.on{color:var(--accent);}
  .rp-move{display:flex;gap:3px;flex:0 0 auto;}
  .rp-arrow{background:none;border:1px solid var(--panel-border);border-radius:4px;cursor:pointer;font-size:12px;line-height:1;padding:3px 7px;color:var(--ink);}
  .rp-arrow:disabled{opacity:.3;cursor:default;}
  .rp-del2{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:15px;padding:2px 6px;flex:0 0 auto;}
  .rp-del2:hover{color:var(--danger,#e5484d);}
  .rp-scroll{max-height:52vh;overflow-y:auto;margin:4px 0 12px;padding-right:2px;}
  .rp-empty{color:var(--ink-dim);font-size:13px;padding:16px 4px;text-align:center;}
  /* add-product picker */
  .ap-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 6px;border-bottom:1px solid var(--panel-border);cursor:pointer;}
  .ap-row:hover{background:var(--panel-raised);}
  .ap-row .ap-name{font-size:14px;}
  .ap-row .ap-meta{font-size:11px;color:var(--ink-dim);font-family:var(--font-mono);margin-top:2px;}
  .ap-row .ap-badge{font-size:10px;color:var(--ink-dim);border:1px solid var(--panel-border);border-radius:4px;padding:1px 5px;margin-left:6px;}
  .ap-add{color:var(--accent);font-size:18px;font-weight:600;}

/* Make Offer document checklist */
.off-doc-row{display:flex;align-items:center;gap:8px;cursor:pointer;}
.off-doc-hint{color:var(--ink-dim);font-size:11px;}

/* Wholesale documents — drag-to-reorder rows (Settings) */
.doc-drag-row{display:flex;align-items:center;gap:10px;}
.doc-drag-row .doc-grip{color:var(--ink-dim);font-size:13px;cursor:grab;user-select:none;letter-spacing:-2px;flex-shrink:0;}
.doc-drag-row.dragging{opacity:0.4;}
.doc-drag-row.drop-target{border-color:var(--signal);}

/* ============================================================
   MOBILE POLISH (phones ≤640px)
   Fixes: (1) iOS auto-zoom on input focus, (2) cramped/small
   text, (3) top bars feeling squeezed to the screen edge.
   Everything above this block is unchanged.
   ============================================================ */

/* (1) Kill iOS auto-zoom on focus.
   Safari zooms into ANY field whose text is <16px. Bumping every
   input/select/textarea to 16px on phones stops the zoom entirely,
   so tapping a quantity no longer jumps the page or loses your row. */
@media (max-width:640px){
  input, select, textarea,
  .est-row .er-qty,
  .filter-cond select, .filter-cond input,
  .cmf-in, .df-row input, .df-row select,
  .rp-item input, .rp-controls input, .rp-controls select{
    font-size:16px;
  }
}

/* (2) + (3) Roomier layout on phones: a touch more breathing room
   at the screen edges, larger tab targets, and slightly larger
   body text so nothing feels shrunk-to-fit. */
@media (max-width:640px){
  /* Give the whole app consistent, comfortable side gutters.
     (Was 20px; 16px keeps content from hugging the very edge
     while still using the full width.) */
  .app{ padding:18px 16px 80px; }

  /* Top nav tabs: bigger, easier to tap, and the strip still
     scrolls horizontally so every module stays reachable.
     A subtle right-edge fade hints there's more to scroll. */
  .module-bar{ gap:2px; -webkit-overflow-scrolling:touch; }
  .module-btn{ font-size:15px; padding:11px 14px; }

  /* Header: let the brand + controls use the full width and wrap
     cleanly instead of looking pinched. */
  /* Header: full-width row, brand hard-left, controls hard-right.
     The tagline is hidden on phones so the controls have room and
     nothing overlaps. */
  .topbar{
    display:flex;
    flex-direction:row;
    flex-wrap:nowrap;
    align-items:center;
    width:100%;
    gap:10px;
    margin-bottom:16px;
  }
  .brand{ flex:0 1 auto; min-width:0; }
  .brand-text p{ display:none; }              /* hide tagline on mobile */
  .stat-strip{
    margin-left:auto;      /* shove the controls to the right edge */
    flex:0 0 auto;
    gap:4px;
    align-items:center;
  }
  /* the build tag is noise on mobile — hide it so controls sit clean */
  #buildTag{ display:none !important; }
  .brand-text h1{ font-size:20px; }

  /* Rehab estimate: bump the readable bits up a notch so line
     items and totals aren't tiny. Column layout is untouched. */
  .est-row .er-name{ font-size:15px; }
  .est-row .er-total{ font-size:15px; }
  .est-head-row{ font-size:12px; }

  /* Product line item name in pickers, slightly larger. */
  .ap-row .ap-name{ font-size:15px; }
}

/* ============================================================
   MOBILE MODALS → FULL-SCREEN SHEET (phones ≤640px)
   On phones the floating card wastes vertical space and floats
   near the top. Here every modal fills the screen edge-to-edge,
   top-to-bottom, and scrolls as one surface.
   ============================================================ */
@media (max-width:640px){
  /* Overlay: lock to the exact viewport height and stop it from
     scrolling as a whole. This is the key — without a fixed-height
     overlay, the card only grows to fit its content and leaves the
     bottom half of the screen empty. align-items:stretch makes the
     card fill the full height. */
  .modal-overlay{
    padding:0;
    align-items:stretch;
    justify-content:stretch;
    height:100vh;
    height:100dvh;          /* dvh accounts for the mobile URL bar */
    overflow:hidden;
  }

  /* Card: fill the whole screen, no rounded corners, no max-width.
     flex column so we can pin content top and buttons bottom. */
  .modal-card{
    max-width:none !important;
    width:100%;
    height:100%;
    border-radius:0;
    border:none;
    padding:20px 16px calc(20px + env(safe-area-inset-bottom,0px));
    box-shadow:none;
    display:flex;
    flex-direction:column;
    overflow-x:hidden;      /* kill the sideways slide */
    overflow-y:auto;        /* the card itself scrolls if content is tall */
  }

  /* Make every field box its padding INTO its width so width:100%
     never spills past the screen edge (the cause of the sideways
     slide), and stop the fields list from scrolling horizontally. */
  .modal-card #offerFields{ overflow-x:hidden; }
  .modal-card input,
  .modal-card select,
  .modal-card textarea{
    box-sizing:border-box;
    max-width:100%;
  }

  /* The offer step wrappers stretch to fill the card height, so the
     "Continue"/"Send" buttons sit near the bottom instead of floating
     up under the fields. */
  .modal-card > #offerStep1,
  .modal-card > #offerStep2{
    display:flex;
    flex-direction:column;
    flex:1 1 auto;
    min-height:0;
  }

  /* Field lists that were height-capped now grow to take the free
     space, pushing the action row to the bottom. */
  .modal-card #offerFields,
  .modal-card [style*="max-height"]{
    max-height:none !important;
    flex:1 1 auto;
  }

  /* Action rows (the Continue / Send buttons) get pinned toward the
     bottom of the sheet with a little breathing room above. */
  .modal-card > #offerStep1 > div:last-child,
  .modal-card > #offerStep2 > div:last-child{
    margin-top:auto;
    padding-top:16px;
  }

  /* Keep the close (✕) easy to reach at the top-right of the sheet. */
  .modal-close{
    font-size:24px;
    padding:4px 8px;
    margin:-4px -4px 0 0;
  }
}

/* ============================================================
   MOBILE: DEAL-DETAIL TEXT SIZING (phones ≤640px)
   Inside an individual deal, the fields / estimate / activity /
   documents were all set at 11–14px and never got the mobile
   bump the rest of the app has, so the deal interior looked
   smaller than every other module. This lifts them to match.
   ============================================================ */
@media (max-width:640px){
  /* Deal/Contact/Task sub-nav tab chips (Details / Estimate / Offer…) */
  .deal-nav-link{ font-size:15px; padding:9px 13px; }

  /* Field cards + rows (Details, All Fields, etc.) */
  .df-card h3{ font-size:16px; }
  .df-row label{ font-size:14px; }
  .df-row input, .df-row select{ font-size:16px; padding:9px 11px; }

  /* Financial readouts */
  .df-out{ font-size:15px; }
  .df-out.key{ font-size:18px; }

  /* Rehab estimate — the main offender. Roomier rows and larger
     text so the interior matches the generous sizing everywhere
     else in the app. */
  .est-row{ padding:12px 4px; }
  .est-head-row{ font-size:13px; padding:8px 4px; }
  .est-row .er-idx{ font-size:13px; }
  .est-row .er-name{ font-size:16px; line-height:1.3; }
  .est-row .er-meta{ font-size:13px; }
  .est-row .er-total{ font-size:16px; }
  .est-row .er-qty{ font-size:16px; padding:8px 4px; }
  .est-top-total{ font-size:16px; }
  .est-top-total span:last-child{ font-size:18px; }
  .est-grand .eg-label{ font-size:17px; }
  .est-grand .eg-total{ font-size:19px; }

  /* Activity timeline + notes */
  .activity-text{ font-size:15px; }
  .activity-meta{ font-size:12px; }
  .activity-empty{ font-size:14px; }
  .add-note-row input{ font-size:16px; }

  /* Document rows */
  .doc-storage-note{ font-size:12px; }
  .doc-review-note{ font-size:13px; }

  /* Stage / pipeline chips */
  .deal-pipeline-tag{ font-size:12px; }
}

/* ============================================================
   MOBILE: DEAL-DETAIL TOP BAND (phones ≤640px)
   The area from the tab chips down through the address +
   "Assigned to" row was built with small inline font-sizes,
   so it stayed cramped while the rest of the app enlarged.
   Inline styles need !important to override.
   ============================================================ */
@media (max-width:640px){
  /* Top action buttons (← All deals / Calculate / Make Offer) */
  #dealSectionDetails .btn-sm{ font-size:14px !important; padding:8px 13px !important; }

  /* Property-address input (the "123 main st" field) */
  #dealAddressInput{ font-size:18px !important; padding:11px 12px !important; }

  /* "The address is the deal name." helper line */
  #dealSectionDetails > div > div:nth-child(3){ font-size:13px !important; }

  /* "Assigned to" label + its dropdown */
  #dealAssigneeRow > span{ font-size:14px !important; }
  #dealAssigneeSelect{ font-size:16px !important; padding:9px 11px !important; }

  /* Stage progress chips (Rehab Estimate / Offer / Purchase …) */
  .deal-stage-bar{ padding:6px; }
}

/* ============================================================
   MOBILE: STOP DEAL VIEW FROM ZOOMING OUT (phones ≤640px)
   Opening a deal made the WHOLE page shrink. That is Safari
   zooming out to fit an element wider than the screen — not a
   font problem. The estimate grid's fixed columns (26/74/92px
   + gaps) plus a non-shrinking name column overflow the width.
   These rules force everything in the deal to stay within the
   screen so the browser renders at normal (100%) scale.
   ============================================================ */
@media (max-width:640px){
  /* Nothing in the panels may exceed the viewport width. */
  #panel-deals, #panel-deals *{ max-width:100%; }

  /* The estimate grid: let the flexible name column actually
     shrink (min-width:0) and trim the fixed columns a bit so the
     whole row fits a narrow screen without forcing a page-wide
     zoom-out. */
  .est-row{
    grid-template-columns:22px minmax(0,1fr) 60px 72px;
    gap:6px;
  }
  .est-head-row{
    grid-template-columns:22px minmax(0,1fr) 60px 72px;
    gap:6px;
  }
  .est-row .er-name{ min-width:0; overflow-wrap:anywhere; }

  /* Stage bar already scrolls; make sure it can't push width. */
  .deal-stage-bar{ max-width:100%; }

  /* Belt-and-suspenders: kill any horizontal page scroll. */
  html, body{ overflow-x:hidden; }
}

/* ============================================================
   MOBILE: SEND OFFER — MESSAGE TEXTAREA HEIGHT (phones ≤640px)
   At ≤640px the modal turns #offerStep2 into a flex column, which
   makes #offBody a flex item with the default flex-shrink:1. The
   other fields + the bottom-pinned button row squeeze it, so it
   collapses to ~1 line regardless of rows="4". Stop the shrink and
   give it a real floor so the whole message is visible and wraps.
   ============================================================ */
@media (max-width:640px){
  #offBody{
    flex:0 0 auto;     /* the flex column can no longer compress it */
    min-height:160px;  /* comfortable multi-line height — bump to taste */
  }
}

/* ============================================================
   MOBILE: PLATFORM-ADMIN EMAIL USAGE PANEL (phones ≤640px)
   The usage table stays a real table but scrolls horizontally
   inside .eu-wrap on narrow screens; tighten padding + shrink
   the cap input so more columns fit before scrolling kicks in.
   ============================================================ */
@media (max-width:640px){
  .eu-table{font-size:12px;}
  .eu-table thead th{padding:7px 9px;}
  .eu-table td{padding:8px 9px;}
  .eu-cap{width:60px;padding:5px 4px;}
  .eu-bar{width:64px;}
  .eu-summary{gap:12px;}
}

/* ============================================================
   MOBILE: FILL-IN-THE-BLANK FIELD EDITOR (phones ≤640px)
   Stack the token palette above the page canvas; let the page
   area take the height. The page still scrolls to place fields.
   ============================================================ */
@media (max-width:640px){
  .df-wrap{flex-direction:column;height:auto;flex:1 1 auto;min-height:0;}
  .df-palette{width:auto;max-height:130px;flex:0 0 auto;}
  /* Field editor: the card must NOT scroll as a whole — the PDF canvas captures
     vertical swipes for field-dragging, which otherwise traps the Save/Cancel bar
     off-screen. The canvas scrolls internally; the button bar stays pinned.
     Every level of the flex chain (card > wrap > right > pages) needs min-height:0,
     otherwise a flex item refuses to shrink below its content and pushes the bar
     off the bottom of the clipped card. */
  #docFieldsModal .modal-card{overflow:hidden;}
  #docFieldsModal .modal-sub{display:none;}   /* reclaim height; arrow-key tip is desktop-only */
  .df-right{flex:1 1 auto;min-height:0;}
  .df-props{flex:0 0 auto;}
  .df-toolbar{flex:0 0 auto;}
  .df-pages{max-height:none;flex:1 1 auto;min-height:0;}
  #docFieldsModal .modal-section{flex:0 0 auto;margin-top:8px;border-top:1px solid var(--panel-border);padding-top:12px;}

  /* Pipeline funnel: the 200px name + 150px value columns consume the whole
     phone width, collapsing the flex:1 bar track to zero so no bar renders.
     Stack each row instead: name on top, bar + value beneath. */
  .funnel-stage{flex-wrap:wrap;gap:4px 8px;margin-bottom:12px;}
  .funnel-stage-name{width:100%;flex:1 1 100%;font-size:12px;color:var(--ink-dim);}
  .funnel-stage-track{flex:1 1 auto;min-width:0;height:16px;}
  .funnel-stage-val{width:auto;flex:0 0 auto;font-size:12px;white-space:nowrap;}
}

/* ============================================================
   PURCHASER SIGNERS (Wholesale) — settings panel + draw pads
   ============================================================ */
.signer-card{border:1px solid var(--panel-border);border-radius:8px;padding:12px;margin-bottom:10px;background:var(--panel-raised);}
.signer-row{display:flex;gap:8px;align-items:center;margin-bottom:8px;}
.signer-name{flex:1;}
.signer-del{background:none;border:1px solid var(--panel-border);color:var(--alert);border-radius:6px;width:30px;height:30px;cursor:pointer;flex:0 0 auto;}
.signer-pads{display:flex;gap:12px;flex-wrap:wrap;}
.pad-wrap{flex:1;min-width:180px;}
.pad-head{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--ink-dim);margin-bottom:4px;}
.pad-clear{background:none;border:none;color:var(--signal);cursor:pointer;font-size:11px;}
.sig-pad{width:100%;height:110px;background:#fff;border:1px dashed var(--panel-border);border-radius:6px;touch-action:none;cursor:crosshair;display:block;}
@media (max-width:560px){ .signer-pads{flex-direction:column;} }
.signer-default{font-size:12px;color:var(--ink-dim);display:flex;align-items:center;gap:4px;white-space:nowrap;flex:0 0 auto;cursor:pointer;align-self:flex-end;padding-bottom:8px;}
.signer-default input{margin:0;}
.signer-row{align-items:flex-end;}
.signer-namecol{flex:1;min-width:0;}
.signer-del{align-self:flex-end;margin-bottom:2px;}
.signer-fields{display:flex;flex-direction:column;gap:2px;margin-bottom:12px;}
.signer-fields > div{margin-bottom:8px;}
.signer-fields label{display:block;font-size:11px;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);margin-bottom:5px;font-weight:600;}
.signer-fields .signer-f{width:100%;box-sizing:border-box;margin-bottom:0;}
.signer-opt{text-transform:none;letter-spacing:0;font-weight:400;color:var(--ink-dim);opacity:.7;}
.signer-two,.signer-three{display:flex;gap:10px;}
.signer-two > div{flex:1;min-width:0;}
.signer-three > div:nth-child(1){flex:2;min-width:0;}
.signer-three > div:nth-child(2){flex:1;min-width:0;}
.signer-three > div:nth-child(3){flex:1;min-width:0;}
@media (max-width:560px){ .signer-two,.signer-three{flex-direction:column;} }
/* Per-offer "Fill-in (ask me)" inputs in the Send Offer modal */
#offAskWrap{border-top:1px solid var(--panel-border);padding-top:10px;}
.off-ask-head{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-dim);margin-bottom:6px;}
.off-ask-row{display:flex;align-items:center;gap:10px;margin-bottom:6px;}
.off-ask-row label{flex:0 0 40%;font-size:12px;color:var(--ink);}
.off-ask-row input{flex:1;}

/* ============================================================
   Custom dropdown / multiselect with removable pills (offer form)
   ============================================================ */
.msel{position:relative;}
.msel-control{display:flex;align-items:center;gap:6px;min-height:38px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:7px;padding:5px 8px;cursor:pointer;width:100%;box-sizing:border-box;}
.msel-control:focus{outline:none;border-color:var(--signal);}
.msel.locked .msel-control{opacity:.55;cursor:not-allowed;}
.msel-pills{flex:1;display:flex;flex-wrap:wrap;gap:4px;min-width:0;align-items:center;}
.msel-ph{color:var(--ink-dim);font-size:13px;}
.msel-single{color:var(--ink);font-size:13px;}
.msel-pill{display:inline-flex;align-items:center;gap:5px;background:var(--signal);color:#1a1005;border-radius:12px;padding:2px 6px 2px 9px;font-size:12px;font-weight:500;}
.msel-x{background:none;border:none;color:#1a1005;cursor:pointer;font-size:11px;padding:0;line-height:1;}
.msel-caret{color:var(--ink-dim);font-size:12px;flex:0 0 auto;}
.msel-menu{position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:60;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.5);max-height:260px;overflow:hidden;padding:0;display:flex;flex-direction:column;}
.msel-search{padding:6px;border-bottom:1px solid var(--panel-border);flex:0 0 auto;}
.msel-search-in{width:100%;box-sizing:border-box;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:6px;color:var(--ink);font-size:13px;padding:6px 8px;outline:none;}
.msel-search-in:focus{border-color:var(--signal);}
.msel-opts{overflow-y:auto;padding:4px;flex:1 1 auto;min-height:0;}
.msel-opt{display:flex;align-items:center;gap:8px;padding:7px 9px;border-radius:6px;cursor:pointer;font-size:13px;color:var(--ink);}
.msel-opt:hover,.msel-opt.hi{background:var(--panel-raised);}
.msel-opt.on{color:var(--signal);}
.msel-check{width:14px;flex:0 0 auto;color:var(--signal);font-size:12px;}
.msel-empty{padding:8px;color:var(--ink-dim);font-size:12px;}
.clk-name{color:var(--ink);font-size:13px;border-bottom:1px dotted var(--ink-dim);cursor:default;}
.contact-hovercard{position:absolute;z-index:200;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.5);padding:10px 12px;min-width:200px;max-width:280px;}
.chc-row{display:flex;justify-content:space-between;gap:12px;padding:3px 0;font-size:12px;}
.chc-lbl{color:var(--ink-dim);text-transform:uppercase;letter-spacing:0.4px;font-size:10px;font-weight:600;flex:0 0 auto;}
.chc-val{color:var(--ink);text-align:right;word-break:break-word;}
.deal-people-rail{margin-bottom:14px;}
.deal-people-rail .dl-head{margin-bottom:8px;}
.dp-row{display:flex;flex-direction:column;gap:1px;padding:9px 0;border-bottom:1px solid var(--panel-border);}
.dp-row:last-child{border-bottom:none;}
.dp-role{font-size:10px;text-transform:uppercase;letter-spacing:0.4px;color:var(--ink-dim);font-weight:600;display:flex;justify-content:space-between;align-items:center;}
.dp-person{min-width:0;}
.dp-name{font-size:13px;color:var(--ink);}
.dp-contact{font-size:11px;color:var(--ink-dim);margin-top:1px;word-break:break-word;}
.dp-remove{flex:0 0 auto;background:none;border:1px solid var(--panel-border);color:var(--alert);border-radius:5px;width:20px;height:20px;line-height:1;cursor:pointer;font-size:11px;padding:0;}
/* A manually-added role is editable in place — dotted underline is the affordance. */
.dp-role-edit{cursor:text;border-bottom:1px dotted transparent;}
.dp-role-edit:hover{color:var(--ink);border-bottom-color:var(--ink-dim);}
/* Inherit the row's uppercase/letter-spacing so the text doesn't jump on click. */
.dp-role-inp{flex:1;min-width:0;font-size:10px;text-transform:uppercase;letter-spacing:0.4px;font-weight:600;padding:1px 4px;}
.dp-addform{border:1px solid var(--panel-border);border-radius:8px;padding:10px;margin-top:10px;background:var(--panel);}
.dp-addrow{display:flex;gap:6px;align-items:center;margin-bottom:7px;}
.dp-three{flex-direction:column;}
.dp-inp{flex:1;min-width:0;width:100%;box-sizing:border-box;}
.dp-sub{font-size:10px;text-transform:uppercase;letter-spacing:0.4px;color:var(--ink-dim);font-weight:600;margin-bottom:5px;}
.dp-or{font-size:10px;color:var(--ink-dim);text-align:center;margin:6px 0;}
/* Stage-fields picker (Settings → Pipelines) */
.sf-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:4px 12px;max-height:240px;overflow-y:auto;padding-right:4px;}
.sf-row{display:flex;align-items:center;gap:8px;min-width:0;}
.sf-item{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--ink);cursor:pointer;min-width:0;flex:1;}
.sf-item input{flex:0 0 auto;}
.sf-dl{display:flex;align-items:center;gap:4px;font-size:10px;text-transform:uppercase;letter-spacing:.4px;color:var(--ink-dim);cursor:pointer;flex:0 0 auto;}
.sf-lead{display:flex;align-items:center;gap:3px;font-size:10px;color:var(--ink-dim);flex:0 0 auto;}
.sf-leadin{width:46px;font-size:11px;padding:1px 4px;border:1px solid var(--panel-border);border-radius:6px;background:var(--panel-raised);color:var(--ink);}
/* Per-deal warning window, under its date field */
.dl-lead{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--ink-dim);margin-top:5px;}
.dl-leadin{width:52px;font-size:11px;padding:2px 5px;border:1px solid var(--panel-border);border-radius:6px;background:var(--panel-raised);color:var(--ink);}
/* Deadline countdown chips. Neutral until a week out, then it escalates — a badge that
   shouts on every date all the time is wallpaper. */
.dl-chip{margin-left:8px;font-size:10px;text-transform:uppercase;letter-spacing:.4px;font-weight:600;padding:1px 7px;border-radius:999px;background:var(--panel-raised);color:var(--ink-dim);}
.dl-chip.dl-soon{background:rgba(214,158,46,.16);color:var(--warn,#d69e2e);}
.dl-chip.dl-now,.dl-chip.dl-past{background:rgba(229,72,77,.16);color:var(--alert);}

/* ===== Stage document slots (Purchase / Sell / Funding / Closed) ===== */
.sdoc-slot{border:1px solid var(--panel-border);border-radius:10px;padding:14px;margin-bottom:14px;background:var(--panel);}
.sdoc-slot-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:4px;}
.sdoc-slot-title{font-size:14px;font-weight:600;color:var(--ink);}
.sdoc-slot-title .sdoc-req{color:var(--alert);margin-left:3px;}
.sdoc-slot-hint{font-size:12px;color:var(--ink-dim);margin:0 0 10px;}
.sdoc-upbtn{white-space:nowrap;}
.sdoc-files{display:flex;flex-direction:column;gap:8px;}
.sdoc-file{display:flex;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--panel-border);border-radius:8px;background:var(--panel-raised);}
.sdoc-file-main{flex:1;min-width:0;}
.sdoc-file-name{font-size:13px;color:var(--ink);word-break:break-word;}
.sdoc-file-name.doc-link{color:var(--ink);text-decoration:none;border-bottom:1px dotted var(--ink-dim);}
.sdoc-file-name.doc-link:hover{color:var(--signal);}
.sdoc-file-meta{font-size:11px;color:var(--ink-dim);margin-top:2px;}
.sdoc-file-actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center;flex:0 0 auto;}
.sdoc-note{font-size:11px;color:var(--ink-dim);margin-top:6px;width:100%;font-style:italic;}
.sdoc-empty{font-size:12px;color:var(--ink-dim);padding:4px 0;}
.sdoc-invgrid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;}
.sdoc-invgrid .cmf-in{width:100%;box-sizing:border-box;}
@media(max-width:640px){ .sdoc-invgrid{grid-template-columns:1fr;} }
/* Earnest Money fields panel */
.em-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 16px;}
.em-field{min-width:0;}
.em-field .ofp-lbl{margin-top:8px;}
.em-field .cmf-in{width:100%;box-sizing:border-box;}
.em-field-wide{grid-column:1 / -1;}
@media(max-width:640px){ .em-grid{grid-template-columns:1fr;} }
.sdoc-ver{display:inline-block;font-size:10px;font-weight:700;color:var(--ink-dim);background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:5px;padding:0 5px;margin-right:6px;vertical-align:middle;}
.sdoc-upbtn-locked{background:var(--panel-raised)!important;color:var(--ink-dim)!important;border:1px solid var(--panel-border)!important;cursor:not-allowed;opacity:.75;}
.sdoc-status{font-size:10px;text-transform:uppercase;letter-spacing:.4px;font-weight:600;padding:2px 8px;border-radius:999px;flex:0 0 auto;}
.sdoc-status.pending{background:rgba(214,158,46,.16);color:var(--warn,#d69e2e);}
.sdoc-status.approved{background:rgba(56,161,105,.16);color:var(--confirm,#38a169);}
.sdoc-status.rejected{background:rgba(229,72,77,.16);color:var(--alert,#e5484d);}

/* ============================================================
   Construction stage — a container of MANY projects
   ============================================================ */
.cst-empty{border:1px solid var(--panel-border);border-radius:10px;padding:24px;background:var(--panel);text-align:center;}
.cst-empty h3{margin:0 0 8px;font-size:16px;color:var(--ink);}
.cst-empty .sub{max-width:520px;margin:0 auto;}
.cst-empty-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:18px;}
.cst-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px;}
.cst-head .sub{margin:0;}   /* .card .sub's 14px bottom margin knocks the row off centre */
.cst-proj{border:1px solid var(--panel-border);border-radius:10px;background:var(--panel);margin-bottom:14px;overflow:hidden;}
.cst-proj-revoked{opacity:.72;}
.cst-proj-head{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;flex-wrap:wrap;}
.cst-proj-head:hover{background:var(--panel-raised);}
.cst-caret{background:none;border:0;color:var(--ink-dim);font-size:13px;cursor:pointer;padding:0;line-height:1;}
.cst-proj-name{font-size:14px;font-weight:600;color:var(--ink);flex:1;min-width:0;word-break:break-word;}
.cst-proj-count{font-size:11px;color:var(--ink-dim);}
.cst-proj-body{padding:0 14px 14px;}
.cst-note{font-size:12px;color:var(--ink-dim);padding:8px 0;}
.cst-sum{margin-bottom:12px;}
.cst-sum-empty{font-size:12px;color:var(--ink-dim);}
.cst-sum-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;}
.cst-sum-cell{border:1px solid var(--panel-border);border-radius:8px;padding:8px 10px;background:var(--panel-raised);min-width:0;}
.cst-sum-k{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-dim);}
.cst-sum-v{font-size:13px;color:var(--ink);margin-top:2px;word-break:break-word;}
.cst-bar{height:6px;border-radius:999px;background:var(--panel-raised);overflow:hidden;margin-bottom:10px;}
.cst-bar-fill{height:100%;background:var(--confirm);border-radius:999px;}
.cst-ev{border-left:2px solid var(--panel-border);padding:8px 0 8px 12px;margin-left:4px;}
.cst-ev-bad{border-left-color:var(--alert);}
.cst-ev-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;}
.cst-ev-title{font-size:13px;color:var(--ink);font-weight:600;}
.cst-actor{font-size:11px;color:var(--ink-dim);flex:0 0 auto;}
.cst-ev-detail{font-size:12px;color:var(--ink-dim);margin-top:2px;word-break:break-word;}
.cst-ev-when{font-size:11px;color:var(--ink-dim);margin-top:3px;}
.cst-photo{margin-top:8px;}
.cst-photo img{max-width:100%;max-height:320px;border-radius:8px;border:1px solid var(--panel-border);display:block;}
.cst-promise{border:1px solid var(--panel-border);border-radius:8px;padding:10px 12px;background:var(--panel-raised);margin-top:14px;font-size:12px;color:var(--ink-dim);}
/* Show-once publish token */
.cst-tokwarn{border:1px solid var(--alert);border-radius:8px;padding:10px 12px;font-size:12px;color:var(--ink);}
.cst-tokrow{display:flex;gap:8px;align-items:center;}
.cst-tok{flex:1;min-width:0;font-family:var(--font-mono);font-size:12px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:8px;padding:8px 10px;word-break:break-all;color:var(--ink);}
/* Product switcher (Dispatch / Construction / E-signing) */
.prod-nav{display:inline-flex;align-items:center;gap:4px;}
.prod-nav-item{font-size:12px;font-weight:600;padding:4px 10px;border-radius:999px;color:var(--ink-dim);text-decoration:none;white-space:nowrap;}
.prod-nav-item:hover{background:var(--panel-raised);color:var(--ink);}
/* "You are here" has to differ from "your mouse is here" — hover and current were
   byte-identical, so the active product read as merely hovered. */
.prod-nav-item.current{background:var(--panel-raised);color:var(--signal);cursor:default;}
.prod-nav-item.disabled{opacity:.45;cursor:default;}
.prod-nav-item.disabled:hover{background:none;color:var(--ink-dim);}

/* ============================================================
   Deal Library (per-deal document approval)
   ============================================================ */
.dl-head{display:flex;justify-content:space-between;align-items:center;margin:22px 0 8px;gap:12px;flex-wrap:wrap;}
.dl-upload-wrap{display:flex;align-items:center;gap:8px;}
.dl-type{max-width:190px;}
.dl-section-head{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-dim);margin:16px 0 6px;}
.doc-link{color:var(--signal);text-decoration:none;cursor:pointer;}
.doc-link:hover{text-decoration:underline;}

/* ============================================================
   Make Offer — inline in the deal card (swaps the middle content)
   ============================================================ */
.ofp-top{display:flex;align-items:center;gap:14px;padding:0 0 12px;border-bottom:1px solid var(--panel-border);margin-bottom:14px;}
.ofp-title{font-size:19px;font-weight:600;color:var(--ink);}
.ofp-title span{font-size:12px;color:var(--ink-dim);font-weight:400;}
.ofp-body{padding:0;}
.ofp-lbl{display:block;font-size:12px;color:var(--ink-dim);margin:14px 0 4px;}
.ofp-lbl:first-child{margin-top:0;}
.ofp-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:16px 0 0;border-top:1px solid var(--panel-border);margin-top:18px;}
@media(max-width:640px){ .ofp-foot{flex-wrap:wrap;} }

/* ============================================================
   Rich-text message editor (Send offer) + compact doc checklist
   ============================================================ */
.rte{width:100%;border:1px solid var(--panel-border);border-radius:8px;overflow:hidden;background:var(--panel);}
.rte-bar{display:flex;align-items:center;gap:2px;flex-wrap:nowrap;overflow-x:auto;padding:6px 8px;border-bottom:1px solid var(--panel-border);background:var(--panel-raised);}
.rte-btn{flex:0 0 auto;min-width:28px;height:28px;padding:0 8px;background:none;border:1px solid transparent;border-radius:6px;color:var(--ink);cursor:pointer;font-size:13px;line-height:1;}
.rte-btn:hover{background:var(--panel);border-color:var(--panel-border);}
.rte-sep{flex:0 0 auto;width:1px;height:18px;background:var(--panel-border);margin:0 4px;}
.rte-font,.rte-size,.rte-align,.rte-insert{width:auto;min-width:0;flex:0 0 auto;height:28px;padding:0 6px;font-size:12px;background:var(--panel);border:1px solid var(--panel-border);border-radius:6px;color:var(--ink);}
.rte-font{max-width:110px;}
.rte-insert{margin-left:auto;max-width:150px;}
.rte-color-wrap{flex:0 0 auto;display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 7px;border:1px solid transparent;border-radius:6px;cursor:pointer;font-size:13px;}
.rte-color-wrap:hover{background:var(--panel);border-color:var(--panel-border);}
.rte-color-wrap input[type=color]{width:18px;height:18px;padding:0;border:none;background:none;cursor:pointer;}
.rte-area{min-height:240px;max-height:460px;overflow-y:auto;padding:12px 14px;font-size:14px;line-height:1.55;color:var(--ink);outline:none;}
.rte-area:empty:before{content:attr(data-ph);color:var(--ink-dim);}
.rte-area a{color:var(--signal);}
/* compact document checklist so the message area has more room */
#offDocs .off-doc-row{padding:5px 10px;font-size:12px;}

/* $ / % affixes on calculator inputs (the symbol can't be deleted) */
/* ---- Usage bars + plan cards (billing) ---- */
.use-plan{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;margin-bottom:12px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:8px;font-size:14px;}
.use-row{display:grid;grid-template-columns:1fr auto;gap:2px 10px;padding:8px 2px;border-bottom:1px solid var(--panel-border);font-size:14px;}
.use-label{color:var(--ink-dim);}
.use-val{font-family:var(--font-mono);text-align:right;}
.use-lim{color:var(--ink-dim);font-weight:400;}
.use-track{grid-column:1 / -1;height:5px;background:var(--panel-raised);border-radius:999px;overflow:hidden;margin-top:4px;}
.use-fill{height:100%;background:var(--confirm);border-radius:999px;transition:width .2s;}
.use-fill.warn{background:var(--signal);}
.use-fill.over{background:var(--alert);}
.use-sep{height:1px;background:var(--panel-border);margin:14px 0 6px;}
.use-note{grid-column:1 / -1;font-size:11px;color:var(--ink-dim);margin-top:3px;}

.plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;}
.plan-card{position:relative;border:1px solid var(--panel-border);border-radius:10px;padding:16px 14px;background:var(--panel-raised);display:flex;flex-direction:column;gap:8px;}
.plan-card.current{border-color:var(--signal);}
.plan-badge{position:absolute;top:-9px;left:12px;background:var(--signal);color:var(--bg);font-size:10px;font-weight:700;padding:2px 8px;border-radius:999px;letter-spacing:.03em;}
.plan-card h3{margin:0;font-size:15px;font-family:var(--font-display);}
.plan-price{font-size:24px;font-weight:700;font-family:var(--font-display);}
.plan-per{font-size:12px;color:var(--ink-dim);font-weight:400;}
.plan-blurb{font-size:12px;color:var(--ink-dim);margin:0;min-height:32px;}
.plan-list{list-style:none;padding:0;margin:4px 0 10px;font-size:12px;color:var(--ink-dim);display:flex;flex-direction:column;gap:5px;}
.plan-list li::before{content:"✓ ";color:var(--confirm);}
.plan-addons{border-top:1px solid var(--panel-border);padding-top:10px;color:var(--ink);}
.plan-addons label{color:var(--ink);}
.plan-addon-price{color:var(--ink-dim);font-size:11px;white-space:nowrap;}
.plan-addons input[type=number]{padding:4px 6px;background:var(--panel);}
.plan-admin{margin-top:14px;padding-top:12px;border-top:1px solid var(--panel-border);display:flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-dim);flex-wrap:wrap;}
.plan-admin select{background:var(--panel);border:1px solid var(--panel-border);color:var(--ink);border-radius:6px;padding:5px 8px;font:inherit;font-size:12px;}
/* Per-account plan + seats control in Manage accounts */
.acct-plan{gap:8px;flex-wrap:wrap;align-items:center;border-top:none;padding-top:0;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;padding:8px 12px;margin-top:4px;}
.acct-plan select{background:var(--panel);border:1px solid var(--panel-border);color:var(--ink);border-radius:6px;padding:4px 8px;font:inherit;font-size:12px;}
.acct-plan input[type=number]{width:60px;background:var(--panel);border:1px solid var(--panel-border);color:var(--ink);border-radius:6px;padding:4px 6px;font:inherit;font-size:12px;}
.acct-plan label{font-size:11px;color:var(--ink-dim);}
.acct-plan-msg{font-size:11px;color:var(--ink-dim);}

/* Send Offer document checkboxes: flow top-to-bottom, then into the next column,
   so the visual order matches the order the PDFs merge in. */
#offLibDocs{column-count:2;column-gap:20px;}
#offLibDocs .off-doc-row{break-inside:avoid;-webkit-column-break-inside:avoid;}
@media (max-width:640px){ #offLibDocs{column-count:1;} }

/* Wholesale documents: inline-editable names + Send Offer checkbox label */
.doc-name-input{width:100%;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--ink);font:inherit;font-weight:600;padding:3px 6px;}
.doc-name-input:hover{border-color:var(--panel-border);}
.doc-name-input:focus{outline:none;border-color:var(--signal);background:var(--panel);}
.doc-offer-input{width:160px;flex:0 0 auto;background:transparent;border:1px solid var(--panel-border);border-radius:6px;color:var(--ink-dim);font:inherit;font-size:12px;padding:4px 6px;}
.doc-offer-input:focus{outline:none;border-color:var(--signal);color:var(--ink);background:var(--panel);}
.doc-name-input.saved,.doc-offer-input.saved{border-color:var(--confirm);}
@media (max-width:640px){ .doc-offer-input{width:110px;} }

/* Tap-to-place: armed palette chip + instruction bar (touch devices can't drag) */
.df-chip.armed{border-color:var(--signal);box-shadow:0 0 0 2px rgba(255,122,69,0.28) inset;}
.df-armhint{flex:0 0 auto;background:var(--panel-raised);border:1px solid var(--signal);border-radius:8px;padding:8px 10px;font-size:12px;color:var(--ink);}
.df-armhint[hidden]{display:none;}
.affix{position:relative;display:flex;align-items:center;}
.df-row .affix{position:relative;flex:1;display:flex;align-items:center;min-width:110px;}
.affix input{width:100%;}
.affix-pre input{padding-left:24px;}
.affix-pre .affix-sym{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--ink-dim);pointer-events:none;font-size:13px;}
.affix-suf input{padding-right:28px;}
.affix-suf .affix-sym{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--ink-dim);pointer-events:none;font-size:13px;}
/* Rehab estimate header with Manual override on the right */
.rehab-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin:16px 0 10px;flex-wrap:wrap;}

/* Override checkbox on the Send offer footer */
.off-override{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink);white-space:nowrap;cursor:pointer;}
.off-override input{margin:0;}

/* ============================================================
   Deal Analyzer (fix & flip)
   ============================================================ */
.analyzer-card{max-width:1040px;width:96vw;}
.az-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:16px;}
.az-eyebrow{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-dim);}
.az-tabs{display:flex;gap:4px;background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:8px;padding:3px;}
.az-tab{background:none;border:none;color:var(--ink-dim);border-radius:6px;padding:6px 12px;font-size:13px;cursor:pointer;}
.az-tab.active{background:var(--confirm);color:#04231f;font-weight:600;}
.az-body{max-height:74vh;overflow-y:auto;}
.az-pane{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start;}
.az-pane.hidden{display:none;}
.az-inputs{display:flex;flex-direction:column;gap:12px;}
.az-section{border:1px solid var(--panel-border);border-radius:10px;background:var(--panel-raised);overflow:hidden;}
.az-sec-head{padding:11px 14px;font-size:13px;font-weight:600;color:var(--ink);cursor:pointer;display:flex;justify-content:space-between;align-items:center;}
.az-sec-head:after{content:"▲";font-size:9px;color:var(--ink-dim);}
.az-section.collapsed .az-sec-head:after{content:"▼";}
.az-sec-body{padding:0 14px 14px;display:flex;flex-direction:column;}
.az-section.collapsed .az-sec-body{display:none;}
.az-lbl{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--ink-dim);margin:12px 0 5px;}
.az-lbl:first-child{margin-top:0;}
.az-val{color:var(--confirm);font-weight:600;font-size:12px;}
.az-sec-body input[type=range]{width:100%;accent-color:var(--confirm);margin:2px 0;}
.az-computed{display:flex;justify-content:space-between;align-items:center;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;padding:10px 12px;margin-top:12px;font-size:13px;color:var(--ink-dim);}
.az-computed b{color:var(--ink);font-size:15px;}
.az-computed.hl{background:rgba(95,217,198,0.08);border-color:rgba(95,217,198,0.3);}
.az-computed.hl b{color:var(--confirm);}
.az-results{display:flex;flex-direction:column;gap:12px;position:sticky;top:0;}
.az-score-card{display:flex;align-items:center;gap:14px;border:1px solid var(--panel-border);border-radius:10px;padding:14px;background:var(--panel-raised);}
.az-score-msg{font-size:13px;color:var(--ink);margin-top:3px;line-height:1.4;}
.az-net{border:1px solid var(--panel-border);border-radius:10px;padding:14px 16px;background:var(--panel-raised);}
.az-net-val{font-size:30px;font-weight:700;color:var(--confirm);margin-top:2px;}
.az-metric-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.az-metric{border:1px solid var(--panel-border);border-radius:10px;padding:12px 14px;background:var(--panel-raised);display:flex;flex-direction:column;gap:4px;}
.az-metric b{font-size:18px;color:var(--ink);font-weight:700;}
.az-metric b.az-accent{color:var(--confirm);}
.az-visual-note{font-size:12px;color:var(--ink-dim);text-align:center;padding:8px;border:1px dashed var(--panel-border);border-radius:8px;}
@media(max-width:820px){ .az-pane{grid-template-columns:1fr;} .az-results{position:static;} }

/* ---- Deal Analyzer Stage 2: visual analysis charts ---- */
.az-charts{display:flex;flex-direction:column;gap:12px;}
.az-chart{border:1px solid var(--panel-border);border-radius:10px;padding:12px 14px 10px;background:var(--panel-raised);}
.az-chart-head{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:6px;}
.az-chart-sub{font-size:11px;color:var(--ink-dim);font-family:var(--font-mono);}
.az-chart-svg{width:100%;height:auto;display:block;overflow:visible;}
.az-donut-wrap{display:flex;align-items:center;gap:14px;}
.az-donut-svg{width:118px;height:118px;flex:0 0 auto;}
.az-donut-legend{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0;}
.az-leg-row{display:flex;align-items:center;gap:8px;font-size:12px;}
.az-leg-sw{width:10px;height:10px;border-radius:3px;flex:0 0 auto;}
.az-leg-name{flex:1;color:var(--ink-dim);}
.az-leg-val{font-family:var(--font-mono);font-size:11px;color:var(--ink);white-space:nowrap;}
@media(max-width:480px){ .az-donut-wrap{flex-direction:column;align-items:flex-start;} }

/* ---- Deal Analyzer: Residential & Commercial components ---- */
.az-subnote{font-size:11px;color:var(--ink-dim);margin:4px 0 2px;font-family:var(--font-mono);}
.az-two{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.az-two .az-lbl{margin-top:12px;}
.affix-none input{width:100%;padding-left:11px;}
.az-chips{display:flex;gap:6px;margin:6px 0 2px;flex-wrap:wrap;}
.az-chip{background:var(--panel);border:1px solid var(--panel-border);color:var(--ink-dim);border-radius:999px;padding:4px 12px;font-size:12px;cursor:pointer;font-family:inherit;}
.az-chip:hover{border-color:var(--confirm);color:var(--ink);}
.az-chip.active{background:var(--ink);color:var(--panel);border-color:var(--ink);font-weight:600;}
.az-results-head{display:flex;justify-content:space-between;align-items:center;margin-top:2px;}
.az-switch{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-dim);cursor:pointer;user-select:none;}
.az-switch input{display:none;}
.az-switch-tk{width:34px;height:18px;border-radius:999px;background:var(--panel-border);position:relative;transition:background .15s;flex:0 0 auto;}
.az-switch-tk:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:var(--ink);transition:transform .15s;}
.az-switch input:checked + .az-switch-tk{background:var(--confirm);}
.az-switch input:checked + .az-switch-tk:after{transform:translateX(16px);background:#04231f;}
.az-note{display:flex;align-items:flex-start;gap:8px;background:rgba(255,122,69,0.08);border:1px solid rgba(255,122,69,0.25);border-radius:9px;padding:10px 12px;font-size:12px;color:var(--ink);line-height:1.4;}
.az-note.hidden{display:none;}
.az-note-x{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:12px;line-height:1;padding:0;margin-left:auto;flex:0 0 auto;}
.az-sens{display:none;border:1px solid var(--panel-border);border-radius:10px;padding:12px 14px;background:var(--panel-raised);}
.az-sens.show{display:block;}
.az-sens .az-eyebrow{margin-bottom:6px;display:block;}
.az-sens-row{display:flex;justify-content:space-between;align-items:center;font-size:13px;color:var(--ink-dim);padding:4px 0;font-family:var(--font-mono);}
.az-sens-row.base{color:var(--ink);font-weight:600;border-top:1px solid var(--panel-border);border-bottom:1px solid var(--panel-border);}
.az-sens-row .neg{color:var(--alert);}
.az-sens-row span:last-child{color:var(--ink);}
.az-chart-note{font-size:11px;color:var(--ink-dim);margin-top:6px;line-height:1.4;}
.az-leg-inline-wrap{display:flex;flex-wrap:wrap;gap:10px 14px;margin-top:8px;}
.az-leg-inline{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-dim);}
.az-computed.warn{background:rgba(228,83,107,0.08);border-color:rgba(228,83,107,0.3);}
.az-computed.warn b{color:var(--alert);}
.az-forecast{border:1px solid var(--panel-border);border-radius:10px;padding:14px;background:var(--panel-raised);}
.az-forecast-head{font-size:13px;font-weight:600;color:var(--ink);margin-bottom:8px;}
.az-scen{margin:0;}
.az-fc-stats{margin-top:10px;}
.az-table{width:100%;border-collapse:collapse;margin-top:12px;font-size:12px;font-family:var(--font-mono);}
.az-table th{text-align:right;color:var(--ink-dim);font-weight:500;font-size:10px;letter-spacing:.05em;padding:4px 6px;border-bottom:1px solid var(--panel-border);}
.az-table th:first-child{text-align:left;}
.az-table td{text-align:right;color:var(--ink);padding:5px 6px;border-bottom:1px solid rgba(51,57,63,0.5);}
.az-table td:first-child{text-align:left;color:var(--ink-dim);}
.az-table td.cf{color:var(--confirm);}

/* ---- Global Search Results page ---- */
#searchResultsView{padding:0 0 40px;}
.sr-head{display:flex;align-items:center;gap:12px;margin-bottom:18px;}
.sr-title{font-size:16px;color:var(--ink);font-family:var(--font-display);}
.sr-title span{color:var(--signal);}
.sr-loading{padding:40px;text-align:center;color:var(--ink-dim);font-size:14px;}
.sr-group{margin-bottom:26px;}
.sr-group-head{font-size:13px;text-transform:uppercase;letter-spacing:0.5px;color:var(--ink-dim);font-weight:700;margin-bottom:8px;display:flex;align-items:center;gap:8px;}
.sr-count{background:var(--panel-raised);border:1px solid var(--panel-border);border-radius:20px;padding:1px 9px;font-size:11px;color:var(--ink);}
.sr-table-wrap{border:1px solid var(--panel-border);border-radius:10px;overflow:hidden;}
.sr-table{width:100%;border-collapse:collapse;font-size:13px;}
.sr-table thead th{text-align:left;padding:10px 14px;color:var(--ink-dim);font-size:11px;text-transform:uppercase;letter-spacing:0.4px;background:var(--panel-raised);border-bottom:1px solid var(--panel-border);font-weight:600;}
.sr-table td{padding:11px 14px;border-bottom:1px solid var(--panel-border);color:var(--ink);}
.sr-table tbody tr:last-child td{border-bottom:none;}
.sr-row{cursor:pointer;transition:background .1s;}
.sr-row:hover td{background:var(--panel-raised);}

/* ---- Sticky Make Offer bar (deal view) ---- */
.deal-sticky-bar{
  position:fixed;left:0;right:0;bottom:0;z-index:80;
  display:flex;align-items:center;justify-content:flex-end;gap:16px;
  padding:12px 24px;
  background:var(--panel);border-top:1px solid var(--panel-border);
  box-shadow:0 -8px 24px rgba(0,0,0,.35);
}
.deal-sticky-bar .dsb-offer{display:flex;align-items:baseline;gap:8px;margin-right:auto;}
.deal-sticky-bar .dsb-label{font-size:12px;text-transform:uppercase;letter-spacing:0.4px;color:var(--ink-dim);}
.deal-sticky-bar .dsb-amt{font-size:18px;font-weight:700;color:var(--ink);font-family:var(--font-display);}
.deal-sticky-bar .btn-primary{padding:10px 22px;font-size:14px;}
/* keep content clear of the fixed bar */
#dealEditView:not(.hidden){padding-bottom:76px;}
@media (max-width:560px){
  .deal-sticky-bar{padding:10px 14px;gap:10px;}
  .deal-sticky-bar .dsb-amt{font-size:16px;}
}

/* ---- Marketing full page ---- */
#marketingInline{padding:4px 0 40px;}
.mkt-head{display:flex;align-items:center;gap:12px;margin-bottom:18px;}
.mkt-title{font-family:var(--font-display);font-size:20px;color:var(--ink);margin:0;}
.mkt-section{border:1px solid var(--panel-border);border-radius:12px;padding:18px;margin-bottom:20px;background:var(--panel);}
.mkt-section h3{margin:0 0 4px;font-size:15px;color:var(--ink);}
.mkt-section .sub{margin:0 0 12px;font-size:12px;color:var(--ink-dim);}
.mkt-lbl{display:block;font-size:11px;text-transform:uppercase;letter-spacing:0.4px;color:var(--ink-dim);font-weight:600;margin:12px 0 5px;}
.mkt-in{width:100%;box-sizing:border-box;}
.chip-field{display:flex;flex-wrap:wrap;gap:6px;min-height:20px;padding:8px;border:1px solid var(--panel-border);border-radius:8px;background:var(--panel-raised);}
.chip{display:inline-flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--panel-border);border-radius:16px;padding:3px 6px 3px 10px;font-size:12px;color:var(--ink);}
.chip-x{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:11px;padding:0;line-height:1;}
.chip-x:hover{color:var(--alert);}
.chip-empty{font-size:12px;color:var(--ink-dim);}
.chip-add{position:relative;margin-top:6px;}
.chip-menu{position:absolute;left:0;right:0;top:calc(100% + 2px);z-index:70;background:var(--panel);border:1px solid var(--panel-border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.5);max-height:220px;overflow-y:auto;}
.chip-opt{padding:8px 10px;cursor:pointer;font-size:13px;color:var(--ink);}
.chip-opt:hover{background:var(--panel-raised);}
.chip-opt-sub{color:var(--ink-dim);font-size:11px;}
.chip-opt-none{color:var(--ink-dim);cursor:default;}
.mkt-actions{display:flex;align-items:center;gap:12px;margin-top:14px;}
.mkt-msg{font-size:13px;}
.mkt-invhead{display:flex;align-items:center;justify-content:space-between;margin-top:16px;gap:12px;flex-wrap:wrap;}
.mkt-invtools{display:flex;align-items:center;gap:8px;}
.mkt-invsearch{width:180px;margin:0;}
.mkt-selcount{font-size:12px;color:var(--ink-dim);}
.mkt-invtable-wrap{border:1px solid var(--panel-border);border-radius:10px;overflow:auto;max-height:420px;margin-top:8px;}
.mkt-invtable{width:100%;border-collapse:collapse;font-size:13px;}
.mkt-invtable thead th{position:sticky;top:0;background:var(--panel-raised);text-align:left;padding:9px 12px;color:var(--ink-dim);font-size:11px;text-transform:uppercase;letter-spacing:0.4px;border-bottom:1px solid var(--panel-border);}
.mkt-invtable td{padding:9px 12px;border-bottom:1px solid var(--panel-border);color:var(--ink);}
.mkt-invtable tr:last-child td{border-bottom:none;}
.mkt-invtable tr.sel td{background:rgba(255,255,255,0.03);}
.mkt-ck{width:34px;text-align:center;}
.mkt-inv-empty{text-align:center;color:var(--ink-dim);padding:20px;}

/* ---- Marketing media (photos & docs) ---- */
.mkt-media-drop{border:1.5px dashed var(--panel-border);border-radius:10px;padding:22px;text-align:center;background:var(--panel-raised);cursor:default;transition:border-color .15s,background .15s;}
.mkt-media-drop.drag{border-color:var(--signal);background:rgba(255,255,255,0.03);}
.mkt-media-hint{font-size:13px;color:var(--ink-dim);}
.link-btn{background:none;border:none;color:var(--signal);cursor:pointer;font-size:13px;padding:0;text-decoration:underline;}
.mkt-media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:12px;margin-top:12px;}
.mkt-media-item{position:relative;border:1px solid var(--panel-border);border-radius:8px;overflow:hidden;background:var(--panel);}
.mkt-media-thumb{width:100%;height:90px;object-fit:cover;display:block;background:var(--panel-raised);}
.mkt-media-doc{display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:var(--ink-dim);letter-spacing:0.5px;}
.mkt-media-name{font-size:11px;color:var(--ink);padding:6px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mkt-media-x{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:6px;border:none;background:rgba(0,0,0,0.6);color:#fff;cursor:pointer;font-size:11px;line-height:1;}
.mkt-media-x:hover{background:var(--alert);}
.mkt-media-loading{font-size:12px;color:var(--ink-dim);padding:8px;}

/* ---- Marketing Material builder ---- */
#mmBuilderView{padding:4px 0 40px;}
.mm-head{display:flex;align-items:center;gap:12px;margin-bottom:18px;}
.mm-title{font-family:var(--font-display);font-size:20px;color:var(--ink);margin:0;}
.mm-list-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap;}
.mm-row{display:flex;align-items:center;gap:14px;padding:12px 14px;border:1px solid var(--panel-border);border-radius:10px;margin-bottom:8px;background:var(--panel);}
.mm-row-name{font-size:14px;color:var(--ink);font-weight:600;flex:1;min-width:0;}
.mm-row-sub{font-size:12px;color:var(--ink-dim);}
.mm-empty,.mm-loading{padding:24px;text-align:center;color:var(--ink-dim);font-size:13px;}
.mm-edit-head{display:flex;align-items:center;gap:12px;margin-bottom:14px;flex-wrap:wrap;}
.mm-name-in{flex:1;min-width:220px;font-size:15px;font-weight:600;}
.mm-edit-actions{display:flex;align-items:center;gap:8px;}
.mm-msg{font-size:13px;}
.mm-edit-grid{display:grid;grid-template-columns:1fr 220px 1fr;gap:14px;align-items:start;}
.mm-col-label{font-size:11px;text-transform:uppercase;letter-spacing:0.4px;color:var(--ink-dim);font-weight:600;margin-bottom:6px;}
.mm-col-hint{text-transform:none;letter-spacing:0;font-weight:400;color:var(--ink-dim);}
.mm-html-in{width:100%;box-sizing:border-box;height:460px;font-family:var(--font-mono,monospace);font-size:12px;line-height:1.5;resize:vertical;white-space:pre;overflow:auto;}
.mm-field-list{border:1px solid var(--panel-border);border-radius:8px;max-height:420px;overflow-y:auto;margin-top:6px;padding:4px;}
.mm-field-group-name{font-size:10px;text-transform:uppercase;letter-spacing:0.4px;color:var(--ink-dim);font-weight:700;padding:8px 8px 4px;}
.mm-field{display:block;width:100%;text-align:left;background:none;border:none;color:var(--ink);padding:6px 8px;border-radius:6px;cursor:pointer;font-size:12px;}
.mm-field:hover{background:var(--panel-raised);color:var(--signal);}
.mm-preview-frame{width:100%;height:460px;border:1px solid var(--panel-border);border-radius:8px;background:#fff;}
@media (max-width:900px){ .mm-edit-grid{grid-template-columns:1fr;} .mm-html-in,.mm-preview-frame{height:300px;} .mm-field-list{max-height:220px;} }

/* ---- Marketing material picker row ---- */
.mkt-material-row{display:flex;gap:8px;align-items:center;margin-bottom:8px;}
.mkt-material-row .mkt-in{flex:1;margin:0;}

/* ---- Marketing engagement tracking ---- */
.mkt-track{margin-top:22px;border-top:1px solid var(--panel-border);padding-top:16px;}
.mkt-track-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:4px;}
.mkt-track-table-wrap{border:1px solid var(--panel-border);border-radius:10px;overflow:auto;}
.mkt-track-table{width:100%;border-collapse:collapse;font-size:13px;}
.mkt-track-table thead th{text-align:left;padding:9px 12px;background:var(--panel-raised);color:var(--ink-dim);font-size:11px;text-transform:uppercase;letter-spacing:0.4px;border-bottom:1px solid var(--panel-border);}
.mkt-track-table td{padding:9px 12px;border-bottom:1px solid var(--panel-border);color:var(--ink);}
.mkt-track-table tr:last-child td{border-bottom:none;}
.mkt-track-empty{text-align:center;color:var(--ink-dim);padding:16px;}

/* ---- Investor grid (editable, sortable, paginated) ---- */
.mkt-sortable{cursor:pointer;user-select:none;white-space:nowrap;}
.mkt-sortable:hover{color:var(--signal);}
.mkt-edit-cell{cursor:text;}
.mkt-edit-cell:hover{background:var(--panel-raised);outline:1px solid var(--panel-border);}
.mkt-edit-in{width:100%;box-sizing:border-box;font-size:13px;padding:2px 4px;background:var(--panel);border:1px solid var(--signal);border-radius:4px;color:var(--ink);}
.mkt-cols-menu{border:1px solid var(--panel-border);border-radius:8px;background:var(--panel);padding:8px;margin:6px 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:4px;box-shadow:0 6px 18px rgba(0,0,0,.4);}
.mkt-col-opt{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink);padding:4px 6px;border-radius:5px;cursor:pointer;}
.mkt-col-opt:hover{background:var(--panel-raised);}
.mkt-invpager{display:flex;align-items:center;gap:12px;justify-content:flex-end;margin-top:8px;}
.mkt-pageinfo{font-size:12px;color:var(--ink-dim);}

/* ---- Field Mapping grid ---- */
.fm-scroll{overflow-x:auto;border:1px solid var(--panel-border);border-radius:10px;}
.fm-table{border-collapse:collapse;width:100%;min-width:640px;}
.fm-table th, .fm-table td{border-bottom:1px solid var(--panel-border);border-right:1px solid var(--panel-border);padding:8px 10px;text-align:left;vertical-align:middle;font-size:13px;}
.fm-table th{background:var(--panel-raised);color:var(--ink);font-weight:600;white-space:nowrap;position:sticky;top:0;}
.fm-table th:last-child, .fm-table td:last-child{border-right:none;}
.fm-canon-h{min-width:180px;}
.fm-canon{display:flex;align-items:center;gap:6px;min-width:180px;}
.fm-canon-name{flex:1;font-size:13px;font-weight:600;background:transparent;border:1px solid transparent;border-radius:5px;padding:3px 5px;color:var(--ink);}
.fm-canon-name:hover, .fm-canon-name:focus{border-color:var(--panel-border);background:var(--panel);}
.fm-canon-del{background:transparent;border:none;color:var(--ink-dim);cursor:pointer;font-size:13px;padding:2px 4px;border-radius:4px;}
.fm-canon-del:hover{color:var(--alert,#e5675f);background:var(--panel-raised);}
.fm-sel{width:100%;min-width:130px;font-size:12px;}
.fm-tag{font-size:10px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:0.4px;font-weight:400;}

/* Custom-module (Leads, etc.) TABLE rows. Deliberately NOT .cm-row — that class
   belongs to the Manage Columns picker and is display:flex, which would turn each
   <tr> into a flex container and stop the cells from lining up with the headers. */
.cmrec-row:hover{background:var(--panel-raised);}
.cm-th:hover{color:var(--signal);}

/* ---- Custom module (Leads, etc.): collapsible filter rail ---- */
/* NOTE: .cm-filter-head is also defined earlier (base rail styles) with
   justify-content:space-between, which strands the caret at the far left and the
   label at the far right. Override it so the toggle reads as "> Filters". */
.cm-filter-head{display:flex;align-items:center;justify-content:flex-start;gap:8px;width:100%;
  background:none;border:0;padding:6px 2px;margin-bottom:6px;
  font-family:var(--font-display);font-size:12px;letter-spacing:0.4px;text-transform:uppercase;
  color:var(--ink);cursor:pointer;text-align:left;}
.cm-filter-head:hover{color:var(--signal);}
.cm-rail-caret{display:inline-block;width:12px;color:var(--ink-dim);}
.cm-filter-head:hover .cm-rail-caret{color:var(--signal);}

/* ---- Custom module table: resizable columns ---- */
.cm-table{width:100%;border-collapse:collapse;table-layout:auto;}
.cm-table th{position:relative;}
.cm-table th .col-resize{position:absolute;top:0;right:0;width:8px;height:100%;cursor:col-resize;user-select:none;}
.cm-table th .col-resize:hover{background:var(--signal);opacity:0.5;}

/* Quick per-field filters live in their own box so the Filters caret collapses
   ONLY them — the Advanced filters builder below stays reachable either way. */
.cm-quick-box.hidden{display:none;}

/* Rehab product library: the two groups that actually mean something */
.rp-group{
  margin:14px 0 6px; padding:6px 8px;
  font-size:11px; font-weight:700; letter-spacing:.03em; text-transform:uppercase;
  color:var(--ink-dim); background:var(--panel-2, rgba(0,0,0,.03));
  border-radius:6px;
}
.rp-group:first-child{ margin-top:0; }
/* Promote a one-off estimate line into the library */
.er-lib{
  margin-left:6px; padding:1px 6px; font-size:11px; line-height:1.5;
  border:1px solid var(--line); border-radius:5px;
  background:transparent; color:var(--ink-dim); cursor:pointer;
}
.er-lib:hover{ color:var(--ink); border-color:var(--ink-dim); }

/* Retired products: visible, editable, but clearly out of rotation */
.rp-item.rp-archived{ opacity:.62; }
.rp-item.rp-archived .rp-name{ text-decoration:line-through; }
.rp-item.rp-archived .rp-star{ cursor:default; }
.rp-group-archived{ color:var(--ink-dim); }
.rp-restore{
  padding:2px 8px; font-size:11px; font-weight:600;
  border:1px solid var(--line); border-radius:5px;
  background:transparent; color:var(--ink-dim); cursor:pointer;
}
.rp-restore:hover{ color:var(--ink); border-color:var(--ink-dim); }
.rp-purge{
  padding:2px 7px; font-size:12px;
  border:1px solid transparent; border-radius:5px;
  background:transparent; color:var(--danger, #c0392b); cursor:pointer;
}

/* Undo toasts — stacked bottom-left, above the sticky offer bar. */
.undo-stack{
  position:fixed; left:20px; bottom:84px; z-index:120;
  display:flex; flex-direction:column-reverse; gap:8px;
  pointer-events:none;
}
.undo-toast{
  position:relative; overflow:hidden; pointer-events:auto;
  display:flex; align-items:center; gap:10px;
  min-width:280px; max-width:420px;
  padding:10px 12px;
  background:var(--ink, #1c2430); color:#fff;
  border-radius:8px;
  box-shadow:0 8px 24px rgba(0,0,0,.22);
  font-size:13px;
  animation:ut-in .18s ease-out;
}
.undo-toast.ut-out{ animation:ut-out .18s ease-in forwards; }
@keyframes ut-in{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:none; } }
@keyframes ut-out{ to{ opacity:0; transform:translateY(8px); } }
.ut-label{ flex:1; line-height:1.35; }
.ut-btn{
  flex:none; padding:3px 10px;
  font-size:12px; font-weight:700; letter-spacing:.02em;
  background:transparent; color:#7fb2ff;
  border:1px solid rgba(127,178,255,.45); border-radius:5px;
  cursor:pointer;
}
.ut-btn:hover{ background:rgba(127,178,255,.14); }
.ut-x{
  flex:none; padding:0 2px;
  background:transparent; border:0; cursor:pointer;
  color:rgba(255,255,255,.5); font-size:13px; line-height:1;
}
.ut-x:hover{ color:#fff; }
/* Countdown: the bar IS the 15s, so it can't lie about how long you have. */
.ut-bar{
  position:absolute; left:0; bottom:0; height:2px; width:100%;
  background:#7fb2ff;
  transform-origin:left center;
  animation:ut-drain linear forwards;
}
@keyframes ut-drain{ from{ transform:scaleX(1); } to{ transform:scaleX(0); } }
@media (max-width:640px){
  .undo-stack{ left:12px; right:12px; bottom:76px; }
  .undo-toast{ min-width:0; max-width:none; }
}

/* ---- Deals table ("List" mode) ---- */
.dt-bar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:8px; font-size:12px; color:var(--ink-dim); }
.dt-bar select{ width:auto; padding:4px 6px; }
.dt-count{ margin-left:auto; }
.dt-scroll{ overflow-x:auto; }
.dt-table{ width:100%; border-collapse:collapse; }
.dt-table th, .dt-table td{ text-align:left; padding:9px 10px; font-size:13px; white-space:nowrap; }
.dt-table thead th{
  font-size:11px; text-transform:uppercase; letter-spacing:.3px;
  color:var(--ink-dim); cursor:pointer; position:relative; white-space:nowrap;
}
.dt-table thead th.th-active{ color:var(--signal); }
.dt-table tbody tr{ border-top:1px solid var(--panel-border); cursor:pointer; }
.dt-table tbody tr:hover{ background:var(--panel-2, rgba(0,0,0,.02)); }
.dt-table tbody tr.selected{ background:rgba(47,128,237,.08); }
.dt-table tbody tr.dt-editing{ background:var(--panel-2, rgba(0,0,0,.03)); cursor:default; }
.dt-name{ font-weight:600; }
.dt-stage{ font-size:12px; color:var(--ink-dim); }
th.dt-check, td.dt-check{ width:34px; padding-right:0; }
th.dt-actions, td.dt-actions{ text-align:right; white-space:nowrap; }
td.dt-actions .btn{ margin-left:4px; }
.dt-in{ width:100%; min-width:110px; padding:5px 7px; font-size:13px; border:1px solid var(--line); border-radius:5px; background:var(--panel); color:var(--ink); }
.dt-in[type="checkbox"]{ width:auto; min-width:0; }
.dt-msg{ margin-left:8px; font-size:11px; color:var(--ink-dim); }
/* Bulk bar: only exists when something is selected */
.dt-bulk{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:8px 10px; margin-bottom:8px;
  background:rgba(47,128,237,.08); border:1px solid rgba(47,128,237,.25); border-radius:8px;
  font-size:12px;
}
.dt-bulk-n{ font-weight:700; }
.dt-bulk select{ width:auto; padding:4px 6px; }
.dt-bulk-msg{ margin-left:auto; color:var(--ink-dim); }

/* Mass Update */
.mu-grid{ display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:8px; }
.mu-mode{ display:flex; gap:14px; margin-top:8px; font-size:13px; }
.mu-mode label{ display:flex; align-items:center; gap:5px; cursor:pointer; }
@media (max-width:640px){ .mu-grid{ grid-template-columns:1fr; } }
/* "Select all N matching" — the selection is the page until you say otherwise */
.dt-selectall{
  padding:3px 9px; font-size:12px; font-weight:600;
  background:transparent; color:var(--signal);
  border:1px solid var(--signal); border-radius:5px; cursor:pointer;
}
.dt-selectall:hover{ background:rgba(47,128,237,.12); }

/* Selection column on the generic module table (Leads, custom modules) */
.cm-table th.dt-check, .cm-table td.dt-check{ width:34px; padding:8px 0 8px 10px; }
.cm-table tbody tr.selected{ background:rgba(47,128,237,.08); }

/* Business phone & SMS */
.tp-status{ padding:10px 12px; border-radius:8px; font-size:13px; margin-bottom:6px; }
.tp-status.ok{ background:rgba(39,174,96,.10); border:1px solid rgba(39,174,96,.35); }
.tp-status.bad{ background:rgba(192,57,43,.08); border:1px solid rgba(192,57,43,.30); }
.tp-err{ font-size:12px; color:var(--ink-dim); font-family:var(--font-mono); }
.tp-help{ display:block; margin-top:4px; font-size:11px; color:var(--ink-dim); }

/* Click-to-text: device vs business line are different actions, so they look different */
.pc-biz{
  margin-left:4px; padding:0 3px;
  background:transparent; border:0; cursor:pointer;
  font-size:12px; line-height:1;
  filter:grayscale(1); opacity:.55;
}
.pc-biz:hover{ filter:none; opacity:1; }
.bs-count{ margin-top:6px; font-size:11px; color:var(--ink-dim); font-family:var(--font-mono); text-align:right; }

/* Conversation center */
/* Heights are VIEWPORT-relative, not fixed px. The old min-height:460px / max-height:620px
   pair meant the pane reserved dead space when there were few threads, and overflowed the
   window when there were many — the height had no idea how tall the screen was.
   dvh, not vh: on a phone, vh measures the viewport as if the browser's URL bar weren't
   there, so the card stops short of the bottom. dvh tracks the REAL visible height. */
.cv-wrap{ display:grid; grid-template-columns:300px 1fr; gap:0; border:1px solid var(--panel-border); border-radius:10px; overflow:hidden; margin-top:14px; height:clamp(420px, calc(100dvh - 300px), 860px); }
.cv-threads{ border-right:1px solid var(--panel-border); overflow-y:auto; min-height:0; }
.cv-t{ padding:10px 12px; border-bottom:1px solid var(--panel-border); cursor:pointer; }
.cv-t:hover{ background:var(--panel-2, rgba(0,0,0,.02)); }
.cv-t.active{ background:rgba(47,128,237,.10); }
.cv-t-top{ display:flex; justify-content:space-between; align-items:center; gap:8px; }
.cv-t-name{ font-weight:600; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cv-t-when{ font-size:11px; color:var(--ink-dim); white-space:nowrap; }
.cv-t-prev{ font-size:12px; color:var(--ink-dim); margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.cv-unread{ display:inline-block; min-width:18px; padding:0 5px; border-radius:9px; background:var(--signal,#2f80ed); color:#fff; font-size:11px; font-weight:700; text-align:center; }
.cv-thread{ display:flex; flex-direction:column; }
.cv-head{ padding:10px 14px; border-bottom:1px solid var(--panel-border); font-weight:600; font-size:14px; }
.cv-none{ color:var(--ink-dim); font-weight:400; }
.cv-msgs{ flex:1; overflow-y:auto; min-height:0; padding:14px; display:flex; flex-direction:column; gap:8px; }
.cv-b{ max-width:74%; padding:8px 11px; border-radius:12px; font-size:13px; line-height:1.4; white-space:pre-wrap; word-break:break-word; }
.cv-b.in{ align-self:flex-start; background:var(--panel-raised,#f1f3f5); border-bottom-left-radius:4px; }
.cv-b.out{ align-self:flex-end; background:var(--signal,#2f80ed); color:#fff; border-bottom-right-radius:4px; }
.cv-b.call{ align-self:center; background:transparent; border:1px dashed var(--panel-border); color:var(--ink-dim); font-size:12px; }
.cv-b.failed{ background:rgba(192,57,43,.12); color:var(--ink); border:1px solid rgba(192,57,43,.4); }
.cv-when{ display:block; margin-top:4px; font-size:10px; opacity:.65; }
.cv-reply{ display:flex; gap:8px; padding:10px; border-top:1px solid var(--panel-border); }
.cv-reply textarea{ flex:1; resize:vertical; padding:8px 10px; font-size:13px; border:1px solid var(--line); border-radius:6px; background:var(--panel); color:var(--ink); }
.cv-empty{ padding:16px; margin-top:14px; border:1px dashed var(--panel-border); border-radius:8px; color:var(--ink-dim); font-size:13px; }
/* Phone: stack the two panes and let the card run to the bottom of the SCREEN.
   When NOTHING is selected the right pane shows only a "Pick a conversation" placeholder
   (.cv-none inside #cvHead). Rather than strand that mid-screen above an empty box, give the
   whole card to the thread list until a thread is actually open. Done with :has() so it needs
   no JS toggle — the JS just swaps .cv-none for the contact name when a thread opens. */
@media (max-width:820px){
  .cv-wrap{ grid-template-columns:1fr; grid-template-rows:minmax(140px, 62dvh) 1fr; height:calc(100dvh - 200px); }
  .cv-threads{ max-height:none; border-right:0; border-bottom:1px solid var(--panel-border); }
  /* Nothing picked: list owns the whole card, empty pane hidden. */
  .cv-wrap:has(#cvHead .cv-none){ grid-template-rows:1fr; }
  .cv-wrap:has(#cvHead .cv-none) .cv-thread{ display:none; }
  .cv-wrap:has(#cvHead .cv-none) .cv-threads{ border-bottom:0; }
}

/* Numbers & assignment */
.tp-numbers{ margin-top:22px; padding-top:16px; border-top:1px solid var(--panel-border); }
.tp-numbers h3{ margin:0; font-size:14px; }
.tp-num{ display:grid; grid-template-columns:1fr 1.2fr auto auto auto; gap:8px; align-items:center; padding:8px 0; border-bottom:1px solid var(--panel-border); }
.tp-num-n{ font-family:var(--font-mono); font-size:13px; font-weight:600; }
.tp-num-p{ font-size:11px; color:var(--ink-dim); text-transform:uppercase; letter-spacing:.03em; }
.tp-num select{ padding:5px 7px; font-size:13px; }
.tp-cap{ display:flex; align-items:center; gap:4px; font-size:11px; color:var(--ink-dim); }
.tp-add{ display:grid; grid-template-columns:1fr auto auto; gap:8px; margin-top:12px; }
.tp-x{ background:transparent; border:0; color:var(--danger,#c0392b); cursor:pointer; font-size:13px; }
@media (max-width:640px){ .tp-num{ grid-template-columns:1fr 1fr; } .tp-add{ grid-template-columns:1fr; } }

/* A modal taller than the viewport must scroll, or its lower half is simply
   unreachable — which is what happened to the Numbers section. */
.modal-card.modal-scroll{
  max-height: 86vh;
  overflow-y: auto;
  overscroll-behavior: contain;
}

/* Phone cell: two extra buttons (business text + business call) made the cell too
   wide for the column, so the NUMBER started wrapping mid-digits — "847 / 254 /
   0046" stacked vertically. A phone number must never break across lines. */
.pc-cell{ white-space:nowrap; }
.pc-cell .cell-link{ white-space:nowrap; }
.pc-sms, .pc-biz{ flex:0 0 auto; }

/* A failed send shows the carrier's reason — but a 404 HTML page must not be allowed
   to take over the conversation. Clamp it; the full text is still in the message log. */
.cv-b.failed .cv-when{
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical;
  overflow:hidden; word-break:break-word;
}

/* Zoho Voice setup block */
.tp-zv{ margin-top:22px; padding-top:16px; border-top:1px solid var(--panel-border); }
.tp-zv h3{ margin:0; font-size:14px; }
.tp-prov{ margin-top:3px; padding:2px 4px; font-size:11px; width:auto; max-width:130px; }

/* Opted out of the BUSINESS line. The device buttons stay live — this is not a
   do-not-contact flag, it's a do-not-automate flag. */
.pc-out{ margin-left:4px; font-size:11px; opacity:.75; cursor:help; }
.cv-optout{
  margin-left:8px; padding:2px 7px;
  font-size:11px; font-weight:600;
  background:rgba(192,57,43,.10); color:var(--danger,#c0392b);
  border:1px solid rgba(192,57,43,.3); border-radius:5px;
}
.pc-out{ background:transparent; border:0; cursor:pointer; padding:0 2px; }

/* Text blast */
.blast-note{
  padding:10px 12px; margin-bottom:12px;
  background:rgba(47,128,237,.08); border:1px solid rgba(47,128,237,.25);
  border-radius:8px; font-size:12px; line-height:1.5;
}
.blast-audit{ font-size:13px; line-height:1.7; margin:8px 0 14px; }
.blast-audit .ba-row{ display:flex; justify-content:space-between; }
.blast-audit .ba-skip{ color:var(--ink-dim); }
.blast-audit .ba-go{ font-weight:700; border-top:1px solid var(--panel-border); padding-top:6px; margin-top:4px; }
.blast-bar{ height:8px; background:var(--panel-2,rgba(0,0,0,.06)); border-radius:5px; overflow:hidden; }
.blast-fill{ height:100%; width:0%; background:var(--signal,#2f80ed); transition:width .4s ease; }
.blast-stats{ margin-top:8px; font-size:12px; color:var(--ink-dim); font-family:var(--font-mono); }

/* Blast review / edit recipient list. Rows are a fixed height so the list can be
   virtualized — only the visible slice is in the DOM at once, which is what keeps it
   smooth at a few thousand recipients instead of freezing the tab. */
.blast-review{ margin:6px 0 12px; }
.blast-review-head{ display:flex; align-items:center; gap:12px; justify-content:space-between; margin-bottom:8px; flex-wrap:wrap; }
.blast-review-head .br-all{ display:flex; align-items:center; gap:8px; font-size:13px; font-weight:600; cursor:pointer; }
.br-search{ flex:1; min-width:160px; max-width:280px; padding:6px 10px; font-size:13px; border:1px solid var(--line); border-radius:6px; background:var(--panel); color:var(--ink); }
.be-count{ font-size:13px; font-weight:600; }
.be-hint{ font-size:12px; color:var(--ink-dim); }
.br-list{ position:relative; height:min(46vh, 420px); overflow-y:auto; border:1px solid var(--panel-border); border-radius:8px; }
.br-viewport{ position:relative; width:100%; }
/* Review rows are absolutely positioned by the fixed-height virtualizer. Edit rows are
   NOT — they grow with their textarea, so they must sit in normal flow. Scoping absolute
   to .br-fixed keeps the two from colliding (which stacked every edit row at 0,0). */
.br-row.br-fixed{ position:absolute; left:0; right:0; }
.br-row{ display:grid; grid-template-columns:26px 150px 110px 1fr; gap:10px; align-items:center; padding:0 10px; height:46px; border-bottom:1px solid var(--panel-border); font-size:13px; box-sizing:border-box; }
.br-row.br-edit-row{ position:static; grid-template-columns:26px 160px 1fr; height:auto; min-height:46px; padding:9px 10px; align-items:start; border-bottom:1px solid var(--panel-border); }
.br-row.br-edit-row .br-chk{ margin-top:4px; }
.br-row .br-name{ font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.br-row.br-edit-row .br-name{ display:flex; flex-direction:column; gap:2px; line-height:1.3; }
.br-row .br-phone{ font-family:var(--font-mono); font-size:12px; color:var(--ink-dim); white-space:nowrap; }
.br-row .br-body{ color:var(--ink-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.br-row.br-off{ opacity:.4; }
.br-row.br-flag{ background:color-mix(in srgb, var(--alert,#b7791f) 14%, transparent); }
.br-row .br-flag-badge{ color:var(--alert,#b7791f); font-weight:700; }
.br-row textarea{ width:100%; resize:vertical; min-height:38px; padding:6px 8px; font-size:13px; border:1px solid var(--line); border-radius:6px; background:var(--panel); color:var(--ink); box-sizing:border-box; font-family:inherit; line-height:1.4; }
.br-row textarea.br-flag-ta{ border-color:var(--alert,#b7791f); }
@media (max-width:820px){
  .br-row.br-fixed{ grid-template-columns:24px 1fr auto; grid-template-rows:auto auto; row-gap:2px; height:56px; align-items:center; }
  .br-row.br-fixed .br-phone{ grid-column:3; grid-row:1; }
  .br-row.br-fixed .br-body{ grid-column:2 / 4; grid-row:2; }
  .br-row.br-edit-row{ grid-template-columns:24px 1fr; }
}

/* Activity filters */
.act-filters{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin-bottom:10px; padding-bottom:8px;
  border-bottom:1px solid var(--panel-border);
  position:sticky; top:0; background:var(--panel); z-index:2;
}
.act-chips{ display:flex; gap:5px; flex-wrap:wrap; }
.act-chip{
  padding:3px 9px; font-size:12px;
  border:1px solid var(--panel-border); border-radius:999px;
  background:transparent; color:var(--ink-dim); cursor:pointer;
}
.act-chip:hover{ color:var(--ink); }
.act-chip.on{ background:var(--signal,#2f80ed); border-color:var(--signal,#2f80ed); color:#fff; }
.act-chip .act-n{ opacity:.65; font-family:var(--font-mono); font-size:11px; }
.act-search{
  flex:1; min-width:130px; padding:4px 8px; font-size:12px;
  border:1px solid var(--line); border-radius:6px;
  background:var(--panel); color:var(--ink);
}

/* Notification preferences */
.np-push{
  display:flex; justify-content:space-between; align-items:center; gap:12px;
  padding:12px; margin:6px 0 16px;
  background:rgba(47,128,237,.07); border:1px solid rgba(47,128,237,.22);
  border-radius:8px; font-size:13px;
}
.np-sub{ font-size:12px; color:var(--ink-dim); margin-top:2px; }
.np-head, .np-row{
  display:grid; grid-template-columns:1fr 62px 62px 62px;
  align-items:center; gap:4px;
}
.np-head{
  font-size:11px; text-transform:uppercase; letter-spacing:.04em;
  color:var(--ink-dim); padding-bottom:6px; border-bottom:1px solid var(--panel-border);
}
.np-head span:not(:first-child){ text-align:center; }
.np-row{ padding:9px 0; border-bottom:1px solid var(--panel-border); font-size:13px; }
.np-row input{ margin:0 auto; display:block; }
.np-group{
  margin-top:16px; padding:6px 8px;
  font-size:11px; font-weight:700; letter-spacing:.03em; text-transform:uppercase;
  color:var(--ink-dim); background:var(--panel-2, rgba(0,0,0,.03)); border-radius:6px;
}

/* Tasks table */
.tasks-view-toggle{ display:inline-flex; gap:0; margin:0 0 12px; }
.tt-done{ text-decoration:line-through; opacity:.6; }
.tt-overdue{ color:var(--danger,#c0392b); font-weight:600; }

/* Send-queue: business line */
.q-sendall{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  padding:10px 12px; margin-bottom:12px;
  background:rgba(47,128,237,.08); border:1px solid rgba(47,128,237,.25);
  border-radius:8px; font-size:13px;
}
.q-sendall span{ flex:1; }
.q-from{ font-size:12px; color:var(--ink-dim); align-self:center; }
.q-err{ font-size:12px; color:var(--danger,#c0392b); align-self:center; }

/* "Show selected" — active state */
.btn.on{ background:var(--signal,#2f80ed); border-color:var(--signal,#2f80ed); color:#fff; }
.blast-audit .ba-warn{ color:var(--alert,#b7791f); font-weight:600; }

/* ==========================================================================
   Leads / custom-module list — styling lifted out of the JS template strings.
   Every value here reproduces the inline style it replaces exactly, so this is
   a hygiene change with no visual or behavioural difference. The point is that
   inline styles beat every stylesheet rule, so while the table carried its own
   padding and type sizes in the markup it could not be restyled at all.

   Specificity note: .cm-th is deliberately a single class (0,1,0) so the
   existing .cm-th:hover rule above (0,2,0) still wins on hover.
   ========================================================================== */
.cm-th{ text-align:left; padding:8px 10px; font-size:11px; text-transform:uppercase; letter-spacing:0.3px; color:var(--ink-dim); cursor:pointer; white-space:nowrap; }
.cm-th.sorted{ color:var(--signal); }
.cm-td{ padding:9px 10px; font-size:13px; }
.cmrec-row{ cursor:pointer; border-top:1px solid var(--panel-border); }
.cm-listbar{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-bottom:8px; font-size:12px; color:var(--ink-dim); }
.cm-listbar .cm-count{ margin-left:auto; }
.cm-listbar select{ width:auto; padding:4px 6px; }
.cm-scroll{ overflow-x:auto; }
.cm-empty{ text-align:left; }
.cm-unsort{ padding:1px 8px; font-size:11px; }

/* --------------------------------------------------------------------------
   Leads audience bar — styling lifted out of the JS template strings.
   Values reproduce the inline styles they replace exactly; nothing moves.

   .ll-cooldown and .batch-picker are shared with Converse Desk, which carries
   the SAME inline values in index.html. Defining them here is therefore safe:
   the inline copies still win where they exist, and they win with an identical
   value. Those can be deleted when Converse Desk gets its turn.

   .cm-audience-tabs and .cm-assignee-bar are Leads-only on purpose. Folding
   their margins into .tabs (22px default) or .assignee-bar (explicit margin:0)
   would have changed Converse Desk, which is not in scope.
   -------------------------------------------------------------------------- */
.ll-cooldown{ margin-bottom:14px; gap:8px; }
.ll-cooldown label{ margin:0; white-space:nowrap; }
.ll-cooldown input[type=text]{ width:64px; text-align:center; }
.ll-cooldown .cd-unit{ font-size:12px; color:var(--ink-dim); }
.ll-cooldown .callout{ flex:1; min-width:160px; padding:6px 10px; }
.batch-picker{ margin-bottom:12px; }
.batch-picker .sel-all-shown{ margin-left:12px; }
.cm-audience-tabs{ margin-bottom:16px; }
.cm-assignee-bar{ margin-bottom:14px; }
#cmViewToggle{ display:inline-flex; gap:2px; margin-right:6px; }
.cm-link{ color:var(--signal); }
.cm-empty-val{ color:var(--ink-dim); }
.cm-rec-head{ display:flex; justify-content:space-between; align-items:center; margin-bottom:12px; }
.cm-rec-actions,
.cm-list-actions{ display:flex; gap:8px; }
.cm-rec-del{ color:var(--alert); }
.cm-rec-title{ margin:0 0 6px; }
.cm-rec-assigned{ font-size:12px; color:var(--ink-dim); margin:0 0 12px; }
.cm-rec-assigned strong{ color:var(--ink); }
.cm-rec-body{ max-height:64vh; overflow-y:auto; padding-right:4px; }
