/* ElevEden OS design system (plan section 3, light theme).
   Part 1: tokens + shell + components.  Part 2: the classes the existing modules emit.
   Everything here is our own CSS: layout, spacing, palette and type recreated from the spec. */

/* ------------------------------------------------------------------ tokens */
:root{
  /* zinc neutrals */
  --zinc-50:#fafafa; --zinc-100:#f4f4f5; --zinc-200:#e4e4e7; --zinc-300:#d4d4d8; --zinc-400:#a1a1aa;
  --zinc-500:#71717a; --zinc-600:#52525b; --zinc-700:#3f3f46; --zinc-800:#27272a; --zinc-900:#18181b; --zinc-950:#09090b;
  --bg:var(--zinc-100); --surface:#fff; --surface-2:var(--zinc-50);
  --text:var(--zinc-950); --text-2:var(--zinc-600); --muted:var(--zinc-500); --placeholder:var(--zinc-400);
  --border:var(--zinc-200); --border-strong:var(--zinc-300);
  --ring:0 0 0 1px rgba(9,9,11,.05); --ring-card:0 0 0 1px var(--zinc-200);
  --hover:rgba(9,9,11,.05); --btn-border:rgba(9,9,11,.10);
  --shadow-panel:0 1px 2px rgba(9,9,11,.04),0 8px 24px -12px rgba(9,9,11,.12);
  --shadow-pop:0 10px 30px -10px rgba(9,9,11,.25),0 0 0 1px rgba(9,9,11,.06);
  /* ElevEden colours inside the zinc system */
  --accent:#0052CC; --accent-hover:#0047B3; --accent-tint:#E8F0FF; --accent-ring:rgba(0,82,204,.25);
  --highlight:#F49A1C; --highlight-bg:#FEF3E2; --highlight-text:#9A5B07;
  --success:#16a34a; --success-bg:#dcfce7; --success-text:#15803d; --success-ring:#bbf7d0;
  --danger:#dc2626; --danger-bg:#fee2e2; --danger-text:#b91c1c; --danger-ring:#fecaca;
  --warning:#d97706; --warning-bg:#fef3c7; --warning-text:#b45309; --warning-ring:#fde68a;
  --violet:#7c3aed; --violet-bg:#f3e8ff; --violet-ring:#d8b4fe;
  --teal:#0d9488; --teal-bg:#ccfbf1;
  /* legacy names the modules still use */
  --ink:var(--text); --line:var(--border); --card:var(--surface);
  --blue:var(--accent); --azure:var(--accent); --orange:var(--highlight); --navy:var(--zinc-900);
  --green:var(--success); --green-bg:var(--success-bg);
  --hot:var(--danger); --hot-bg:var(--danger-bg); --warm:var(--highlight); --warm-bg:var(--highlight-bg);
  --cool:var(--accent); --cool-bg:var(--accent-tint); --cold:var(--muted); --cold-bg:var(--zinc-100);
  --dead:var(--zinc-600); --dead-bg:var(--zinc-100);
  /* shape + type */
  --r-sm:6px; --r:8px; --r-lg:12px; --radius:12px;
  --shadow:var(--ring-card);
  --font:'Inter',ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --sidebar-w:240px; --panel-pad:40px;
}

/* ------------------------------------------------------------------ base */
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%}
body{font-family:var(--font);font-size:14px;line-height:1.5;color:var(--text);background:var(--bg);
  font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;font-feature-settings:"tnum","cv11"}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font-family:inherit;font-size:14px;color:inherit}
h1,h2,h3,h4{margin:0;font-weight:600;letter-spacing:-.01em}
b,strong{font-weight:600}
::placeholder{color:var(--placeholder)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.num{font-variant-numeric:tabular-nums}

/* ------------------------------------------------------------------ app shell */
.app-shell{display:flex;min-height:100vh}
.sidebar{width:var(--sidebar-w);flex:0 0 var(--sidebar-w);display:flex;flex-direction:column;position:sticky;top:0;
  height:100vh;padding:8px 8px 8px 12px;background:var(--bg)}
.sidebar-collapse{position:absolute;top:50%;right:-2px;width:4px;height:48px;border-radius:4px;background:var(--zinc-300);
  opacity:0;transition:opacity .15s;cursor:col-resize}
.sidebar:hover .sidebar-collapse{opacity:1}
.nav{flex:1;overflow-y:auto;padding:4px 0}
.nav-section{margin:16px 0 4px;padding:0 12px;font-size:12px;font-weight:500;color:var(--muted)}
.nav-section:first-child{margin-top:4px}
.nav-item{display:flex;align-items:center;gap:10px;height:36px;padding:0 12px;border-radius:var(--r);
  font-size:14px;font-weight:500;color:var(--text);cursor:pointer;user-select:none;transition:background .12s}
.nav-item svg{width:16px;height:16px;flex:0 0 16px;color:var(--zinc-600);stroke-width:1.75}
.nav-item:hover{background:var(--hover)}
.nav-item.active{background:var(--hover)}
.nav-item.active svg{color:var(--text);stroke-width:2.25}
.nav-item .count{margin-left:auto;font-size:12px;color:var(--muted);font-weight:500}
.nav-item.danger-dot::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--highlight);margin-left:auto}

.workspace-switcher{position:relative;margin:4px 0 8px}
.ws-btn{display:flex;align-items:center;gap:10px;width:100%;height:44px;padding:0 10px;border:0;background:transparent;
  border-radius:var(--r);cursor:pointer;text-align:left}
.ws-btn:hover{background:var(--hover)}
.ws-logo{width:28px;height:28px;border-radius:7px;background:var(--surface);box-shadow:var(--ring-card);
  display:flex;align-items:center;justify-content:center;overflow:hidden;flex:0 0 28px}
.ws-logo img{width:22px;height:22px;object-fit:contain}
.ws-name{font-weight:600;font-size:14px;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-chev{color:var(--muted)}
.ws-menu{position:absolute;left:0;right:0;top:48px;background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);
  padding:6px;z-index:30;display:none}
.ws-menu.open{display:block}
.ws-menu .ws-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r);font-size:14px;cursor:pointer}
.ws-menu .ws-row:hover{background:var(--hover)}
.ws-menu .ws-row .check{margin-left:auto;color:var(--accent)}
.ws-menu .ws-sep{height:1px;background:var(--border);margin:6px 4px}
.ws-menu .ws-row.manage{color:var(--muted)}

.user-menu{position:relative;margin-top:8px;padding-top:8px}
.um-btn{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:0;background:transparent;border-radius:var(--r);
  cursor:pointer;text-align:left}
.um-btn:hover{background:var(--hover)}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--accent-tint);color:var(--accent);font-weight:600;font-size:13px;
  display:flex;align-items:center;justify-content:center;flex:0 0 32px}
.um-who{flex:1;min-width:0}
.um-name{font-weight:500;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.um-email{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.um-menu{position:absolute;left:0;right:0;bottom:56px;background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);
  padding:6px;z-index:30;display:none}
.um-menu.open{display:block}
.um-menu .um-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--r);font-size:14px;cursor:pointer}
.um-menu .um-row:hover{background:var(--hover)}
.um-menu .um-row.danger{color:var(--danger-text)}

.main{flex:1;min-width:0;display:flex;flex-direction:column;padding:8px 8px 8px 0}
.main-panel{flex:1;background:var(--surface);border-radius:var(--r);box-shadow:var(--ring),var(--shadow-panel);
  padding:var(--panel-pad);min-width:0}
.topbar{display:none;align-items:center;gap:10px;height:52px;padding:0 12px}
.topbar .hamburger{width:36px;height:36px;border:0;background:transparent;border-radius:var(--r);display:flex;align-items:center;justify-content:center;cursor:pointer}
.topbar .hamburger:hover{background:var(--hover)}
.topbar .tb-logo{display:flex;align-items:center;gap:8px;font-weight:600}
.topbar .tb-logo img{width:24px;height:24px}

.page-header{display:flex;align-items:flex-start;gap:16px;margin-bottom:24px;flex-wrap:wrap}
.page-header h1{font-size:20px;font-weight:600;color:var(--text);line-height:1.3}
.page-header .subtitle{font-size:14px;color:var(--muted);margin-top:2px}
.page-header .ph-text{flex:1;min-width:200px}
.page-header .actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}

.view{display:none;animation:fadeIn .15s ease-out}
.view.active{display:block}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}

/* ------------------------------------------------------------------ cards, kpis, panels */
.card,.panel,.tablecard,.ccard{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--ring-card);border:0;min-width:0}
.panel,.tablecard{overflow-x:auto}  /* a wide table scrolls inside its panel instead of pushing the page sideways */
.panel-grid-2 > *,[style*="grid-template-columns"] > *{min-width:0}
.card{padding:20px}
.card.selected,.kpi.selected,.panel.selected{outline:2px solid var(--accent);outline-offset:-1px}

.kpi{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--ring-card);padding:14px 20px;min-width:0;border:0}
.kpi .lbl,.kpi .label{font-size:14px;color:var(--muted);font-weight:400;text-transform:none;letter-spacing:0;display:flex;align-items:center;gap:6px}
.kpi .lbl svg{width:14px;height:14px;color:var(--zinc-400)}
.kpi .val,.kpi .value{font-size:30px;font-weight:600;line-height:1.2;margin-top:6px;color:var(--text);letter-spacing:-.02em;white-space:nowrap}
.kpi .val.sm{font-size:22px}
.kpi-row.six .kpi,.kpi-row[style*="repeat(6"] .kpi{padding:14px 16px}
.kpi-row.six .kpi .val,.kpi-row[style*="repeat(6"] .kpi .val{font-size:22px;white-space:normal;overflow-wrap:anywhere}
@media(max-width:1500px){.kpi-row.six .kpi .val,.kpi-row[style*="repeat(6"] .kpi .val{font-size:20px}}
.kpi .sub,.kpi .lbl + .lbl{font-size:12px;color:var(--muted);margin-top:6px;font-weight:400}
.kpi.accent{background:var(--surface);color:var(--text)}
.kpi.accent .lbl{color:var(--muted)}
.kpi-row{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-bottom:20px}
.kpi-row.six{grid-template-columns:repeat(6,minmax(0,1fr))}
.delta{display:inline-flex;align-items:center;gap:3px;font-size:12px;font-weight:500;padding:1px 7px;border-radius:999px;margin-top:8px}
.delta.up{background:var(--success-bg);color:var(--success-text)}
.delta.down{background:var(--danger-bg);color:var(--danger-text)}
.delta.flat{background:var(--zinc-100);color:var(--muted)}
.delta + .vs{font-size:12px;color:var(--muted);margin-left:6px}
.kpi-red{box-shadow:0 0 0 1px var(--danger-ring);background:#fff7f7}

.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px 10px}
.panel-head h3,.panel-title{font-size:14px;font-weight:600;color:var(--text)}
.panel-head .meta,.panel-meta{font-size:13px;color:var(--muted)}
.panel-body{padding:4px 18px 18px}
.panel-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.stats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:10px 18px 18px}
/* tiles are flex columns: label, then the number right under it, then the small text pushed
   to the bottom. os.js gives every label in a row the same height (polish()), so the numbers
   of one row sit on one line with the same gap even when a label or a note wraps. */
.stat,.kpi{display:flex;flex-direction:column}
.stat .lbl,.kpi .lbl{align-items:flex-start}
.stat .val,.kpi .val{margin-top:6px}
.stat .sub,.stat .pill,.kpi .sub,.kpi .fsub,.kpi .lbl + .lbl{margin-top:auto;padding-top:8px}
.kpi .val + div:not(.sub):not(.fsub){margin-top:8px}
.kpi .val + div:not(.sub):not(.fsub) + .sub{margin-top:auto}
.stat{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--ring-card);padding:14px 16px;border:0}
.stat .lbl{font-size:13px;color:var(--muted);font-weight:400;text-transform:none;letter-spacing:0}
.stat .val{font-size:24px;font-weight:600;line-height:1.2}
.stat .val.sm{font-size:18px}
.stat .sub{font-size:12px;color:var(--muted);margin-top:4px}

/* ------------------------------------------------------------------ controls */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:36px;padding:0 14px;border-radius:var(--r);
  font-size:14px;font-weight:600;cursor:pointer;border:1px solid var(--btn-border);background:var(--surface);color:var(--text);
  white-space:nowrap;transition:background .12s,border-color .12s;line-height:1}
.btn:hover{background:var(--zinc-50)}
.btn:disabled,.btn[aria-disabled=true]{opacity:.5;cursor:not-allowed}
.btn-secondary,.btn-ghost{background:var(--surface);border-color:var(--btn-border);color:var(--text)}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:none}
.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover);filter:none}
.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}
.btn-danger:hover{background:var(--danger-text)}
.btn-sm,.btn.sm{height:30px;padding:0 10px;font-size:13px}
.btn-ghost .new{background:var(--accent-tint);color:var(--accent);font-size:10px;padding:1px 6px;border-radius:6px;font-weight:600}
.minibtn,.cedit,.pill-paid,.pill-due,.alert-x,.ret-nav{font-family:inherit}
.minibtn{display:inline-flex;align-items:center;height:28px;padding:0 10px;border-radius:var(--r-sm);border:1px solid var(--btn-border);
  background:var(--surface);color:var(--accent);font-size:12px;font-weight:600;cursor:pointer;margin-left:4px}
.minibtn:hover{background:var(--accent-tint);border-color:var(--accent-ring)}
.cedit{margin-top:12px;width:100%;height:34px;border:1px solid var(--btn-border);background:var(--surface);color:var(--accent);
  font-weight:600;font-size:13px;border-radius:var(--r);cursor:pointer}
.cedit:hover{background:var(--accent-tint)}

.input,.em-body input,.em-body select,.em-body textarea,.search,.selectbox,.ret-sel,.ff-input{
  height:36px;width:100%;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:0 12px;
  font-size:14px;color:var(--text);box-shadow:none}
.em-body textarea,textarea.input{height:auto;min-height:72px;padding:8px 12px;line-height:1.5;resize:vertical}
.input:focus,.em-body input:focus,.em-body select:focus,.em-body textarea:focus,.search:focus-within,.selectbox:focus,.ret-sel:focus{
  outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}
.select,select.input,.em-body select,.selectbox,.ret-sel,.ff-select{appearance:none;-webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2371717a' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m7 15 5 5 5-5'/%3E%3Cpath d='m7 9 5-5 5 5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center;padding-right:32px;cursor:pointer;font-weight:500}
.selectbox,.ret-sel{width:auto;min-width:160px}
.search{display:flex;align-items:center;gap:8px;flex:1}
.search input{border:0;outline:0;background:transparent;width:100%;height:100%;padding:0}
.search svg{color:var(--muted);width:16px;height:16px}
.toolbar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap}
label{font-size:13px;font-weight:500;color:var(--text)}
.em-body label{display:block;font-size:13px;font-weight:500;color:var(--text);text-transform:none;letter-spacing:0;margin:12px 0 6px}
.em2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.em-body .addon input,.em-body input[type=checkbox],.em-body input[type=radio]{width:auto;height:auto;margin:0}
.toggle{position:relative;width:36px;height:20px;border-radius:999px;background:var(--zinc-300);border:0;cursor:pointer;padding:0;transition:background .15s;flex:0 0 36px}
.toggle::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .15s;box-shadow:0 1px 2px rgba(9,9,11,.2)}
.toggle.on,.toggle[aria-checked=true]{background:var(--accent)}
.toggle.on::after,.toggle[aria-checked=true]::after{left:18px}
.seg,.ret-seg{display:inline-flex;background:var(--zinc-100);border-radius:var(--r);padding:3px;gap:2px}
.seg button,.ret-seg button{border:0;background:transparent;font-weight:500;font-size:13px;color:var(--muted);height:28px;padding:0 10px;border-radius:6px;cursor:pointer}
.seg button.on,.ret-seg button.on{background:var(--surface);color:var(--text);box-shadow:var(--ring-card)}
.chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:14px}
.chip{border:1px solid var(--btn-border);background:var(--surface);border-radius:999px;height:32px;padding:0 12px;font-weight:500;font-size:13px;
  cursor:pointer;color:var(--text-2);display:inline-flex;align-items:center;gap:7px}
.chip .n{background:var(--zinc-100);color:var(--muted);border-radius:999px;padding:0 7px;font-size:11px}
.chip.on{background:var(--text);border-color:var(--text);color:#fff}
.chip.on .n{background:rgba(255,255,255,.2);color:#fff}

/* badges, pills, tags */
.badge,.tag,.pill,.cipill,.fstat,.fstatus,.badge-pay,.atag,.doc-chip,.ret-chip,.wtag{
  display:inline-flex;align-items:center;justify-content:center;gap:4px;font-size:12px;font-weight:500;line-height:1.2;padding:3px 9px;
  border-radius:999px;background:var(--zinc-100);color:var(--text-2);letter-spacing:0;text-transform:none;white-space:nowrap;vertical-align:middle}
.pill{margin:0}
.ccard .atag,.ccard .tag,.addon-tags .atag,td .atag{white-space:normal;text-align:left;line-height:1.3}
.pill.up,.cipill.ok,.fstatus.paid,.fstatus.active,.badge.success,.pay-paid,.fstatus.complete{background:var(--success-bg);color:var(--success-text)}
.pill.blue,.badge.accent,.fstatus.onboarding,.pay-deposit_paid,.doc-chip,.atag{background:var(--accent-tint);color:var(--accent)}
.pill.orange,.cipill.due,.fstatus.pending,.badge.warning,.pay-proposed{background:var(--highlight-bg);color:var(--highlight-text)}
.fstatus.overdue,.badge.danger{background:var(--danger-bg);color:var(--danger-text)}
.fstatus.inactive,.fstatus.paused,.cipill.none,.pay-unpaid{background:var(--zinc-100);color:var(--muted)}
.fstatus.one-time{background:var(--violet-bg);color:var(--violet)}
.pill.view-only{background:var(--warning-bg);color:var(--warning-text);margin:0}
.pill-paid,.pill-due{display:inline-flex;align-items:center;justify-content:center;height:28px;padding:0 12px;border-radius:999px;font-weight:600;font-size:12px;line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer}
.pill-paid{background:var(--success-bg);color:var(--success-text);border:1px solid var(--success-ring)}
.pill-due{background:var(--highlight-bg);color:var(--highlight-text);border:1px solid #FBD9A6}
/* action buttons in a table cell: wrap neatly with even gaps, never touch */
td .acts{display:inline-flex;flex-wrap:wrap;gap:4px;justify-content:flex-end;max-width:260px}
td .acts .minibtn{margin:0}
td .minibtn{margin:2px 0 2px 4px}
.alert.link{cursor:pointer;text-decoration:none}
.alert.link:hover{filter:brightness(.97)}
.alert.link::after{content:"\2192";margin-left:auto;opacity:.6}
.pill-paid:hover,.pill-due:hover{filter:brightness(.97)}
.doc-chip{text-decoration:none}

/* tables */
table{width:100%;border-collapse:collapse}
thead th{text-align:left;font-size:12px;font-weight:500;color:var(--muted);padding:10px 14px;border-bottom:1px solid var(--border);
  background:var(--surface);text-transform:none;letter-spacing:0;white-space:nowrap}
thead th.center,td.center{text-align:center}
td.rt,th.rt{text-align:right}
tbody tr{border-bottom:1px solid var(--border);transition:background .1s}
tbody tr:hover{background:var(--zinc-50)}
tbody tr:last-child{border-bottom:0}
td{padding:11px 14px;vertical-align:middle;font-size:14px}
.table{width:100%}
.tablecard{overflow:hidden}
.ranked .rank{width:28px;color:var(--muted);font-size:13px}
.ranked tr.top{background:var(--accent-tint)}
.lead-name{font-weight:500;display:flex;align-items:center;gap:10px}
.lead-name small{display:block;color:var(--muted);font-weight:400;font-size:12px}
.empty,.empty-state{padding:40px 20px;text-align:center;color:var(--muted);font-size:14px}
.empty-state{border:1px dashed var(--border-strong);border-radius:var(--r-lg);display:flex;flex-direction:column;align-items:center;gap:12px}

/* filter panel + settings pattern */
.filter-panel{background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--ring-card);padding:16px}
.filter-panel .fp-label{font-size:11px;font-weight:600;letter-spacing:.06em;color:var(--muted);text-transform:uppercase;margin-bottom:12px}
.filter-panel .field{margin-bottom:12px}
.filter-panel .field label{display:block;margin-bottom:6px;font-size:13px}
.filter-panel .minmax{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.settings{display:grid;grid-template-columns:240px minmax(0,1fr);gap:24px;align-items:start}
.tabs-vertical{display:flex;flex-direction:column;gap:2px}
.tabs-vertical .tab{display:flex;align-items:center;gap:10px;min-height:40px;padding:6px 10px;border-radius:var(--r);cursor:pointer;font-size:14px;font-weight:500;color:var(--text)}
.tabs-vertical .tab:hover{background:var(--hover)}
.tabs-vertical .tab.active{background:var(--hover)}
.tabs-vertical .tab svg{width:16px;height:16px;color:var(--zinc-600)}
.tabs-vertical .tab .sub{font-size:12px;color:var(--muted);font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tabs-vertical .tab.inactive{opacity:.55}
.settings-cards{display:flex;flex-direction:column;gap:16px}
.danger-zone{box-shadow:0 0 0 1px var(--danger-ring)}
.danger-zone .panel-head h3{color:var(--danger-text)}
.matrix td,.matrix th{padding:9px 12px}
.matrix td:not(:first-child),.matrix th:not(:first-child){text-align:center;width:90px}
.matrix input[type=radio]{accent-color:var(--accent);width:16px;height:16px;cursor:pointer}

/* modal, drawer, toast, overlay */
.overlay{position:fixed;inset:0;background:rgba(9,9,11,.4);opacity:0;visibility:hidden;transition:.15s;z-index:40}
.overlay.show{opacity:1;visibility:visible}
.modal,.editmodal{position:fixed;top:50%;left:50%;transform:translate(-50%,-48%);width:560px;max-width:94vw;max-height:90vh;overflow:auto;
  background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);z-index:60;opacity:0;visibility:hidden;transition:.15s}
.modal.show,.editmodal.show{opacity:1;visibility:visible;transform:translate(-50%,-50%)}
.em-head,.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--border)}
.em-head h3,.modal-head h3{font-size:16px;font-weight:600}
.em-head .close,.modal-head .close,.dh .close{width:30px;height:30px;border:0;background:transparent;border-radius:var(--r);font-size:18px;cursor:pointer;color:var(--muted)}
.em-head .close:hover,.modal-head .close:hover,.dh .close:hover{background:var(--hover);color:var(--text)}
.em-body,.modal-body{padding:4px 20px 16px}
.em-foot,.modal-foot{display:flex;align-items:center;gap:8px;padding:14px 20px;border-top:1px solid var(--border);position:sticky;bottom:0;background:var(--surface)}
.drawer{position:fixed;top:0;right:0;height:100vh;width:480px;max-width:94vw;background:var(--surface);z-index:50;transform:translateX(100%);
  transition:transform .2s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;box-shadow:var(--shadow-pop)}
.drawer.show{transform:none}
.dh{background:var(--surface);color:var(--text);padding:20px 22px 16px;position:relative;border-bottom:1px solid var(--border)}
.dh .close{position:absolute;top:14px;right:14px}
.dh .dav{width:48px;height:48px;border-radius:var(--r-lg);background:var(--accent-tint);color:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:600;font-size:18px;margin-bottom:12px}
.dh h2{font-size:18px;font-weight:600}
.dh .biz{color:var(--muted);margin-top:2px}
.dh .dtags{display:flex;gap:6px;margin-top:12px;flex-wrap:wrap}
.dh .call{display:inline-flex;align-items:center;gap:6px;background:var(--zinc-100);color:var(--text);padding:5px 10px;border-radius:var(--r);font-weight:500;font-size:12px;margin-top:10px}
.db{padding:16px 22px;overflow-y:auto;flex:1}
.field{margin-bottom:14px}
.field .k{font-size:12px;color:var(--muted);font-weight:500;margin-bottom:4px;text-transform:none;letter-spacing:0}
.field .v{font-size:14px;line-height:1.5}
.field.notes .v{background:var(--zinc-50);border:1px solid var(--border);border-radius:var(--r);padding:10px 12px;white-space:pre-wrap;font-size:13px;line-height:1.6;color:var(--text-2)}
.kvgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.dtabbar{display:flex;gap:2px;padding:0 16px;background:var(--surface);border-bottom:1px solid var(--border)}
.dtab{background:none;border:0;color:var(--muted);font-weight:500;font-size:13px;padding:10px 12px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}
.dtab.active{color:var(--text);border-bottom-color:var(--accent)}
.dtab:hover{color:var(--text)}
.toast,#__toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--zinc-900);color:#fff;padding:10px 16px;
  border-radius:var(--r);font-weight:500;font-size:13px;box-shadow:var(--shadow-pop);z-index:200;max-width:520px;text-align:center;line-height:1.5;
  opacity:0;transition:opacity .2s}
.toast.show{opacity:1}

/* skeleton loader */
.skeleton{display:flex;flex-direction:column;gap:16px}
.skeleton .sk-row{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.skeleton .sk{background:linear-gradient(90deg,var(--zinc-100) 25%,var(--zinc-200) 37%,var(--zinc-100) 63%);background-size:400% 100%;
  animation:shimmer 1.4s ease infinite;border-radius:var(--r-lg)}
.skeleton .sk.kpi-sk{height:96px}
.skeleton .sk.panel-sk{height:260px}
@keyframes shimmer{0%{background-position:100% 0}100%{background-position:0 0}}

/* view-only mode: controls stay visible but cannot be used */
body.view-only :is(.main-panel,#drawer,.editmodal,.modal) :is(button,textarea,input:not([type=search]):not([type=checkbox]):not(.view-ok)):not(.view-ok):not(.seg button):not(.ret-seg button):not([data-rv]):not([data-rnav]):not(.ret-nav):not(.dtab):not(.chip):not(.close):not(#drawerClose):not([data-d]):not(.alert-x){
  opacity:.45;pointer-events:none}
body.view-only :is(.main-panel,#drawer) input[type=checkbox]{pointer-events:none;opacity:.6}

/* ------------------------------------------------------------------ Part 2: module classes */
/* generic text helpers the modules emit */
.fsub{font-size:12px;color:var(--muted);margin-top:4px;font-weight:400}
.section-title{font-size:14px;font-weight:600;margin:4px 0 12px}
.notecard{background:var(--highlight-bg);border:1px solid #FBD9A6;border-radius:var(--r-lg);padding:12px 14px;color:var(--highlight-text);font-size:13px;margin-bottom:16px;line-height:1.5}
.logrow{display:flex;gap:14px;padding:10px 0;border-bottom:1px solid var(--border);font-size:13px}
.logrow .lt{flex:0 0 150px;color:var(--muted)}
.logrow:last-child{border:0}
.grid-top{display:grid;grid-template-columns:1.15fr 1.55fr;gap:16px;margin-bottom:16px}
.chart-wrap{padding:8px 12px 16px;height:236px}
.break-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:16px}
.blist .brow{display:flex;align-items:center;gap:10px;margin:8px 0;font-size:13px}
.blist .brow .bn{width:150px;flex:0 0 150px;font-weight:500}
.blist .brow .bt{flex:1;height:8px;background:var(--zinc-100);border-radius:6px;overflow:hidden}
.blist .brow .bt>span{display:block;height:100%;border-radius:6px;background:var(--accent)}
.blist .brow .bc{width:30px;text-align:right;font-weight:600;color:var(--muted)}

/* clients */
.client-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}
.ccard{padding:18px}
.ccard h4{font-size:15px;font-weight:600;display:flex;align-items:center;gap:10px;margin:0 0 2px}
.ccard .cav,.cav{width:34px;height:34px;border-radius:9px;background:var(--accent-tint);display:flex;align-items:center;justify-content:center;color:var(--accent);font-weight:600;font-size:13px;flex:0 0 34px}
.ccard .cbiz{color:var(--muted);font-size:13px;margin-bottom:10px}
.ccard .crow{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-top:1px solid var(--border);font-size:13px}
.ccard .crow .k{color:var(--muted)}
.ccard .crow .vv{font-weight:500;text-align:right}
.ccard.inactive{opacity:.6}
.confirm-flag{font-size:12px;color:var(--highlight-text);font-weight:500;margin-top:10px;display:flex;align-items:center;gap:6px}
.av{width:30px;height:30px;border-radius:8px;flex:0 0 30px;display:flex;align-items:center;justify-content:center;color:var(--accent);font-weight:600;font-size:12px;background:var(--accent-tint)}
.av.haslogo,.cav.haslogo,.dav.haslogo{background:var(--surface);box-shadow:var(--ring-card);overflow:hidden;padding:2px}
.haslogo.darklogo{background:var(--zinc-900)}
.haslogo img{width:100%;height:100%;object-fit:contain;display:block}
.logo-up{display:flex;align-items:center;gap:12px;margin-top:4px;flex-wrap:wrap}
.logo-prev{width:56px;height:56px;flex:0 0 56px;box-shadow:var(--ring-card);border-radius:var(--r-lg);background:var(--surface);
  display:flex;align-items:center;justify-content:center;font-weight:600;color:var(--muted);overflow:hidden;padding:3px}
.logo-prev img{width:100%;height:100%;object-fit:contain;display:block}
.logo-up .btn{height:30px;padding:0 10px;font-size:13px}
.addon-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;margin-top:4px}
.addon{display:flex;align-items:center;gap:7px;font-size:13px;font-weight:400;color:var(--text);cursor:pointer;margin:0}
.addon-tags{margin-top:5px;display:flex;flex-wrap:wrap;gap:3px}

/* fulfillment board + retention */
.alerts-strip{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.alert{padding:10px 14px;border-radius:var(--r);font-weight:500;font-size:13px;display:flex;align-items:center;gap:9px}
.alert b{font-size:14px;line-height:1}
.alert-x{background:rgba(255,255,255,.6);border:1px solid rgba(9,9,11,.1);color:inherit;font-weight:500;font-size:12px;height:26px;padding:0 10px;border-radius:999px;cursor:pointer;white-space:nowrap;flex-shrink:0}
.alert-x:hover{background:#fff}
.fcard{cursor:pointer;transition:box-shadow .12s}
.fcard:hover{box-shadow:var(--ring-card),var(--shadow-panel)}
.fprog{margin:12px 0 6px}
.fprog-lbl{display:flex;justify-content:space-between;font-size:12px;font-weight:500;margin-bottom:5px}
.fbar{height:8px;background:var(--zinc-100);border-radius:6px;overflow:hidden}
.fbar>span{display:block;height:100%;border-radius:6px}
.fblock{margin-top:10px;background:var(--highlight-bg);border:1px solid #FBD9A6;color:var(--highlight-text);font-size:12px;font-weight:500;padding:8px 11px;border-radius:var(--r)}
.moodcard{background:var(--zinc-50);border-radius:var(--r);padding:12px 14px;margin-bottom:14px}
.mood-top{display:flex;align-items:center;gap:9px}
.mood-icon{font-size:18px}
.mood-txt{font-weight:600;font-size:14px}
.mood-sub{color:var(--muted);font-size:12px;margin-top:5px}
.mood-note{color:var(--muted);font-size:12px;line-height:1.5;margin-top:12px;font-style:italic}
/* retention.js injects its own .ret-* rules after this sheet; these outrank them */
.ret-wrap .ret-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:16px}
.ret-wrap .ret-seg{display:inline-flex;background:var(--zinc-100);border-radius:var(--r);padding:3px;gap:2px;border:0}
.ret-wrap .ret-seg button{border:0;background:transparent;font-weight:500;font-size:13px;color:var(--muted);height:28px;padding:0 10px;border-radius:6px;cursor:pointer}
.ret-wrap .ret-seg button.on{background:var(--surface);color:var(--text);box-shadow:var(--ring-card)}
.ret-top .btn.ret-nav{width:36px;padding:0}
.ret-sel{min-width:220px;font-weight:500}
.ret-wrap h3{font-weight:600}
.ret-phase-h h3{font-size:14px;font-weight:600}
.ret-stat .sv{font-weight:600}
.ret-node .t,.ret-card .t{font-weight:500}
.ret-gate{font-weight:600;letter-spacing:.04em}

/* finance */
.iv-item{background:var(--surface)}
.fin-detail{margin-top:12px}

/* polish pass helpers (os.js adds these) */
td.nowrap{white-space:nowrap}
.val,td.rt,.kpi .val,.stat .val,.ret-stat .sv{font-variant-numeric:tabular-nums}
.ret-phase-h{cursor:pointer;user-select:none}
.ret-phase-h .chev{margin-left:auto;color:var(--muted);transition:transform .15s}
.ret-phase.collapsed .chev{transform:rotate(-90deg)}
.ret-phase.collapsed > :not(.ret-phase-h){display:none}

/* ------------------------------------------------------------------ responsive (plan section 3, Mobile) */
@media(max-width:1280px){:root{--panel-pad:28px}.kpi-row.six,.kpi-row[style*="repeat(6"]{grid-template-columns:repeat(3,minmax(0,1fr))!important}}
@media(max-width:1023px){
  .sidebar{position:fixed;left:0;top:0;bottom:0;z-index:45;background:var(--surface);transform:translateX(-100%);transition:transform .2s;padding:12px;box-shadow:var(--shadow-pop);width:280px;flex-basis:280px}
  .sidebar.open{transform:none}
  .sidebar-collapse{display:none}
  .topbar{display:flex;position:sticky;top:0;background:var(--bg);z-index:20}
  .main{padding:0}
  .main-panel{border-radius:0;box-shadow:none;padding:20px 16px}
  .kpi-row,.kpi-row.six,.kpi-row[style]{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .panel-grid-2,.settings{grid-template-columns:1fr}
  .drawer{width:100vw;max-width:100vw}
}
@media(max-width:639px){
  .main-panel{padding:16px 12px}
  .kpi-row,.kpi-row.six,.stats-grid,.ret-metrics,.client-grid{grid-template-columns:1fr!important}
  .page-header{flex-direction:column;gap:12px}
  .page-header .actions{width:100%;justify-content:flex-start}
  .page-header .actions .btn{flex:1 1 auto}
  /* tap targets */
  .btn,.minibtn,.cedit,.input,.select,.selectbox,.ret-sel,.em-body input,.em-body select,.pill-paid,.pill-due,.chip,.seg button,.ret-seg button,.alert-x,.dtab{min-height:40px}
  .nav-item{height:44px}
  td .minibtn{margin:2px}
  /* tables become stacked cards; polish() writes each cell's heading into data-label */
  .table thead{display:none}
  .table,.table tbody,.table tr,.table td{display:block;width:100%}
  .table tr{padding:8px 0;border-bottom:1px solid var(--border)}
  .table td{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:6px 4px;text-align:right;border:0}
  .table td::before{content:attr(data-label);color:var(--muted);font-size:12px;text-align:left;flex:0 0 38%}
  .table td:not([data-label])::before{content:none}
  .table td.rt{text-align:right}
  .table td .acts{justify-content:flex-end;max-width:none}
  .table tfoot{display:block}
  .table tfoot tr,.table tfoot td{display:block;text-align:left}
  /* modals and the client editor become full-screen sheets */
  .modal,.editmodal{top:0;left:0;width:100vw;max-width:100vw;height:100%;max-height:100%;border-radius:0;transform:none}
  .modal.show,.editmodal.show{transform:none}
  .em2,.kvgrid,.addon-grid{grid-template-columns:1fr}
  /* Client Fulfillment: full-width client picker on top, phases as a collapsible list */
  .ret-wrap .ret-top{flex-wrap:wrap;gap:8px}
  .ret-wrap .ret-top .ret-sel{flex:0 0 100%;width:100%;max-width:none;order:-1;min-width:0}
  .ret-wrap .ret-top .ret-nav{width:44px;flex:0 0 44px}
  .ret-wrap .ret-top .ret-seg{flex:0 0 100%;display:grid;grid-template-columns:1fr 1fr 1fr}
  .ret-wrap .ret-top > div[style*="margin-left:auto"]{margin-left:0!important;flex:0 0 100%}
  .ret-wrap .ret-top > div[style*="margin-left:auto"] .btn{flex:1}
  .ret-wrap .ret-grid,.ret-wrap .ret-content,.ret-wrap .ret-summary{grid-template-columns:1fr!important}
  .ret-wrap .ret-tl{margin-left:4px;padding-left:20px}
  .ret-wrap .ret-node:before{left:-27px}
  .ret-wrap .ret-dot-btn{left:-31px}
  .ret-wrap .ret-actions .btn{flex:1 1 45%}
  /* nothing may be wider than the phone */
  img,svg,canvas,video{max-width:100%}
  .panel,.tablecard{overflow-x:auto}
  pre,.ret-up-tx,.field .v{overflow-wrap:anywhere}
}
