*{box-sizing:border-box;margin:0;padding:0}
:root{
  --sb:#0f172a;--sb2:#1e293b;--sb-text:#94a3b8;--sb-active:#fff;
  --acc:#9B2335;--acc-d:#822030;--acc-l:#f6e9eb;--acc-t:rgba(155,35,53,.15);--acc2:#373C42;
  --bg:#f1f5f9;--surf:#fff;--surf2:#f8fafc;
  --border:rgba(0,0,0,.08);--border2:rgba(0,0,0,.14);
  --text:#0f172a;--text2:#475569;--text3:#94a3b8;
  --ok:#10b981;--warn:#f59e0b;--err:#ef4444;--info:#3b82f6;
  --ok-l:#ecfdf5;--warn-l:#fffbeb;--err-l:#fef2f2;--info-l:#eff6ff;
  --r:8px;--r-lg:12px;--r-xl:16px;
  --sh:0 1px 3px rgba(0,0,0,.08),0 0 0 .5px rgba(0,0,0,.06);
  --sh-lg:0 8px 32px rgba(0,0,0,.12);
  --sb-w:240px;--tb-h:56px;
  --ease:.15s cubic-bezier(.4,0,.2,1);
}
@media(prefers-color-scheme:dark){
  :root{--bg:#0d1117;--surf:#161b22;--surf2:#1c2128;--border:rgba(255,255,255,.08);--border2:rgba(255,255,255,.14);--text:#e6edf3;--text2:#8b949e;--text3:#484f58;--acc-l:rgba(99,102,241,.15);--ok-l:rgba(16,185,129,.12);--warn-l:rgba(245,158,11,.12);--err-l:rgba(239,68,68,.12);--info-l:rgba(59,130,246,.12)}
}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;font-size:14px;background:var(--bg);color:var(--text);height:100vh;overflow:hidden}
a{color:var(--acc);text-decoration:none}
::-webkit-scrollbar{width:4px;height:4px}
::-webkit-scrollbar-thumb{background:var(--border2);border-radius:4px}
input,select,textarea,button{font-family:inherit}

/* ── Login ─────────────────────────────────────────────────────────────── */
.login-screen{position:fixed;inset:0;background:linear-gradient(135deg,#0f172a 0%,#1e1b4b 50%,#0f172a 100%);display:flex;align-items:center;justify-content:center;z-index:999}
.login-card{background:var(--surf);border-radius:var(--r-xl);padding:40px;width:420px;max-width:calc(100vw - 28px);box-sizing:border-box;box-shadow:0 24px 64px rgba(0,0,0,.4)}
.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:24px}
.login-icon{width:38px;height:38px;border-radius:10px;background:var(--acc);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.login-brand-name{font-size:20px;font-weight:700;color:var(--text)}
.login-card h1{font-size:22px;font-weight:600;margin-bottom:6px}
.login-sub{font-size:13px;color:var(--text3);margin-bottom:24px}
.form-field{margin-bottom:14px}
.form-field label{display:block;font-size:12px;font-weight:500;color:var(--text2);margin-bottom:5px}
.form-field input,.form-field select,.form-field textarea{width:100%;padding:9px 12px;border:1px solid var(--border2);border-radius:var(--r);background:var(--surf2);color:var(--text);font-size:14px;transition:border-color var(--ease)}
.form-field input:focus,.form-field select:focus,.form-field textarea:focus{outline:none;border-color:var(--acc);box-shadow:0 0 0 3px var(--acc-t)}
/* checkboxes/radios in form fields must not inherit the full-width text-input styling above */
.form-field input[type=checkbox],.form-field input[type=radio]{width:auto;padding:0;border:none;background:none;box-shadow:none;flex:0 0 auto;accent-color:var(--acc)}
.form-field textarea{resize:vertical;min-height:72px;line-height:1.5}
.milestone-mark{color:var(--acc);font-weight:700;font-size:.9em;margin-right:1px}
/* Calendar view */
.cal-grid-head{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;margin-bottom:6px}
.cal-dow{font-size:11px;font-weight:600;color:var(--text3);text-align:center;text-transform:uppercase;letter-spacing:.03em}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal-cell{min-height:100px;background:var(--surf);border:1px solid var(--border);border-radius:var(--r);padding:5px;display:flex;flex-direction:column;gap:3px;overflow:hidden}
.cal-empty{background:transparent;border:none}
.cal-today{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc-t)}
.cal-daynum{font-size:12px;font-weight:600;color:var(--text2);margin-bottom:2px}
.cal-today .cal-daynum{color:var(--acc)}
.cal-item{font-size:11px;line-height:1.3;padding:2px 5px;border-radius:4px;background:var(--surf2);color:var(--text);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-item:hover{background:var(--acc-l)}
.cal-item.cal-done{opacity:.55;text-decoration:line-through}
.cal-item.cal-over{color:var(--err);font-weight:600}
.cal-inc{background:#fff1f2;color:#e11d48;cursor:default;border-left:3px solid #e11d48}
body.dark .cal-inc{background:rgba(225,29,72,.14)}
.cal-more{font-size:10px;color:var(--text3);padding:1px 4px}
/* Attachments */
.attach-chip{font-size:11px;color:var(--text3);background:var(--surf2);border-radius:10px;padding:0 6px;white-space:nowrap;margin-left:4px}
.att-row{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid var(--border)}
.att-ic{font-size:15px;flex-shrink:0}
.att-name{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.att-meta{font-size:11px;color:var(--text3)}
/* Gantt timeline */
.gantt-scale-sel{display:inline-flex;border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
.gantt-scale-btn{border:none;background:var(--surf);padding:5px 11px;font-size:12px;cursor:pointer;color:var(--text2)}
.gantt-scale-btn:not(:last-child){border-right:1px solid var(--border)}
.gantt-scale-btn.active{background:var(--acc);color:#fff}
.gantt-wrap{overflow:auto;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surf);max-height:calc(100vh - 210px)}
.gantt-axis{display:flex;position:sticky;top:0;z-index:5;background:var(--surf2);border-bottom:1px solid var(--border)}
.gantt-axis-left{position:sticky;left:0;z-index:6;min-width:260px;max-width:260px;background:var(--surf2);border-right:1px solid var(--border);font-size:11px;color:var(--text3);display:flex;align-items:center;padding:0 10px}
.gantt-axis-track{position:relative;height:34px;flex:none}
.gantt-tick{position:absolute;top:0;bottom:0;border-left:1px solid var(--border)}
.gantt-tick-lbl{position:absolute;top:9px;font-size:10px;color:var(--text3);padding-left:4px;white-space:nowrap}
.gantt-row{display:flex;align-items:stretch;min-height:32px;border-bottom:1px solid var(--border)}
.gantt-row:hover .gantt-left{background:var(--surf2)}
.gantt-left{position:sticky;left:0;z-index:3;min-width:260px;max-width:260px;background:var(--surf);display:flex;align-items:center;gap:6px;padding:4px 10px;border-right:1px solid var(--border);font-size:13px;overflow:hidden;white-space:nowrap;cursor:pointer}
.gantt-rownum{color:var(--text3);font-size:11px;min-width:16px;flex-shrink:0}
.gantt-track{position:relative;flex:none}
.gantt-bar{position:absolute;top:5px;height:14px;border-radius:4px;cursor:pointer;overflow:hidden;z-index:2}
.gantt-bar-fill{position:absolute;left:0;top:0;bottom:0}
.gantt-ms{position:absolute;top:5px;width:14px;height:14px;transform:rotate(45deg);border-radius:2px;cursor:pointer;z-index:2}
.gantt-phase-row{display:flex;align-items:stretch;min-height:26px;background:var(--surf2);font-weight:600;font-size:12px;border-bottom:1px solid var(--border)}
.gantt-phase-left{position:sticky;left:0;z-index:3;min-width:260px;max-width:260px;background:var(--surf2);padding:5px 10px;border-right:1px solid var(--border);display:flex;align-items:center}
.gantt-today{position:absolute;top:0;bottom:0;width:2px;background:var(--err);z-index:1;pointer-events:none}
.gantt-today-lbl{position:absolute;top:1px;font-size:9px;color:#fff;background:var(--err);padding:0 3px;border-radius:2px;transform:translateX(-50%);white-space:nowrap}
.gantt-baseline{position:absolute;top:21px;height:4px;background:#9aa3ad;border-radius:2px;z-index:1}
.gantt-bar.slipped,.gantt-ms.slipped{box-shadow:0 0 0 2px #f59e0b}
.gantt-bar.crit,.gantt-ms.crit{box-shadow:0 0 0 2px #e11d48}
.gantt-crit-mark{color:#e11d48;font-size:10px}
/* Custom report builder */
.cr-controls{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-bottom:16px;padding:12px;background:var(--surf2);border:1px solid var(--border);border-radius:var(--r-lg)}
.cr-ctl{display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--text3)}
.cr-ctl>span{font-weight:600;text-transform:uppercase;letter-spacing:.03em}
.cr-ctl select{min-width:130px}
.cr-chk{flex-direction:row;align-items:center;gap:6px;font-size:13px;color:var(--text2);text-transform:none}
.cr-chk input{width:auto}
/* Saved-reports bar */
.cr-saved-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;padding:10px 12px;background:var(--surf2);border:1px solid var(--border);border-radius:var(--r-lg)}
.cr-saved-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--text3);white-space:nowrap}
.cr-saved-list{display:flex;flex-wrap:wrap;gap:6px;flex:1;min-width:160px}
.cr-saved-empty{font-size:12px;color:var(--text3);font-style:italic}
.cr-chip{display:inline-flex;align-items:center;background:var(--surf);border:1px solid var(--border);border-radius:999px;overflow:hidden}
.cr-chip.active{border-color:var(--acc);box-shadow:0 0 0 1px var(--acc) inset}
.cr-chip-load{border:none;background:none;cursor:pointer;font-size:12px;color:var(--text);padding:4px 4px 4px 11px;font-weight:500}
.cr-chip-load:hover{color:var(--acc)}
.cr-chip-del{border:none;background:none;cursor:pointer;font-size:11px;color:var(--text3);padding:4px 9px 4px 5px;line-height:1}
.cr-chip-del:hover{color:var(--danger,#ef4444)}
.cr-saved-save{display:flex;align-items:center;gap:6px;margin-left:auto}
.cr-name-input{width:170px;padding:6px 9px;font-size:13px;border:1px solid var(--border);border-radius:var(--r-md,8px);background:var(--surf);color:var(--text)}
.cr-name-input:focus{outline:none;border-color:var(--acc)}
.gantt-base-info{font-size:12px;color:var(--text3);white-space:nowrap}
.gantt-base-toggle{font-size:12px;color:var(--text2);display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.login-err{padding:10px 12px;background:var(--err-l);color:var(--err);border-radius:var(--r);font-size:13px;margin-bottom:14px}
.login-hint{text-align:center;font-size:12px;color:var(--text3);margin-top:16px}
.w-full{width:100%}

/* ── App layout ─────────────────────────────────────────────────────────── */
.app{display:flex;height:100vh;overflow:hidden}
.main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.content{flex:1;overflow-y:auto;padding:24px;background:var(--bg)}

/* ── Sidebar ────────────────────────────────────────────────────────────── */
.sidebar{width:var(--sb-w);background:var(--sb);display:flex;flex-direction:column;flex-shrink:0;height:100vh;overflow-y:auto;overflow-x:hidden;transition:width var(--ease)}
.sidebar.collapsed{width:60px}
.sidebar.collapsed .sb-label,.sidebar.collapsed .sb-section,.sidebar.collapsed .sb-pill,.sidebar.collapsed .sb-user-info,.sidebar.collapsed .sb-logo-text{display:none}
.sb-logo{display:flex;align-items:center;gap:10px;padding:16px 14px 12px;border-bottom:1px solid rgba(255,255,255,.06)}
.sb-logo-icon{width:32px;height:32px;border-radius:9px;background:var(--acc);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.sb-logo-text{font-size:16px;font-weight:700;color:#fff;white-space:nowrap}
.sb-section{padding:14px 14px 4px;font-size:10px;color:rgba(255,255,255,.35);font-weight:600;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}
.sb-item{display:flex;align-items:center;gap:9px;padding:7px 12px;margin:1px 6px;border-radius:var(--r);cursor:pointer;color:var(--sb-text);font-size:13px;font-weight:500;transition:background var(--ease),color var(--ease);position:relative;white-space:nowrap}
.sb-item:hover{background:rgba(255,255,255,.07);color:#e2e8f0}
.sb-item.active{background:var(--acc-t);color:var(--acc);box-shadow:inset 2px 0 0 var(--acc)}
.sb-item-icon{display:flex;flex-shrink:0;width:18px;justify-content:center;color:inherit}
.sb-label{flex:1;overflow:hidden;text-overflow:ellipsis}
.sb-pill{font-size:10px;background:rgba(255,255,255,.1);border-radius:10px;padding:2px 7px;color:rgba(255,255,255,.5);flex-shrink:0;min-width:20px;text-align:center}
.sb-item.active .sb-pill{background:var(--acc-t);color:var(--acc)}
.sb-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.sb-dot.online{background:var(--ok)}
.sb-dot.offline{background:#374151}
.sb-divider{height:1px;background:rgba(255,255,255,.06);margin:6px 10px}
.sb-user{display:flex;align-items:center;gap:10px;padding:12px 14px;border-top:1px solid rgba(255,255,255,.06);margin-top:auto;cursor:pointer}
.sb-user:hover{background:rgba(255,255,255,.04)}
.sb-user-info{flex:1;min-width:0}
.sb-user-name{font-size:13px;font-weight:500;color:#e2e8f0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-user-role{font-size:11px;color:var(--sb-text);text-transform:capitalize}
.project-color-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}

/* ── Topbar ─────────────────────────────────────────────────────────────── */
.topbar{height:var(--tb-h);background:var(--surf);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 20px;gap:12px;flex-shrink:0;z-index:10}
.topbar-left{display:flex;align-items:center;gap:10px;flex:1;min-width:0}
.sidebar-toggle{background:none;border:none;cursor:pointer;color:var(--text3);display:flex;align-items:center;justify-content:center;padding:4px;border-radius:var(--r)}
.sidebar-toggle:hover{background:var(--surf2);color:var(--text)}
.page-title{font-size:15px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.save-status{font-size:12px;white-space:nowrap}
.save-status.saving{color:var(--text3)}
.save-status.saved{color:var(--ok)}
.save-status.error{color:var(--err)}
.topbar-right{display:flex;align-items:center;gap:6px}
.tb-btn{background:none;border:none;cursor:pointer;color:var(--text2);display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--r);transition:background var(--ease),color var(--ease)}
.tb-btn:hover{background:var(--surf2);color:var(--text)}
.notif-wrap{position:relative}
.notif-badge{position:absolute;top:4px;right:4px;width:16px;height:16px;border-radius:50%;background:var(--err);color:#fff;font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;border:2px solid var(--surf)}
.tb-user{display:flex;align-items:center;gap:6px;cursor:pointer;padding:4px 8px;border-radius:var(--r);transition:background var(--ease)}
.tb-user:hover{background:var(--surf2)}

/* ── Incident ticker ────────────────────────────────────────────────────── */
.incident-ticker{display:flex;align-items:center;background:#1a0a00;border-bottom:1px solid #7c2d12;flex-shrink:0;overflow:hidden;height:34px;position:relative;z-index:9}
.ticker-label{font-size:10px;font-weight:700;letter-spacing:.08em;color:#fb923c;padding:0 14px;white-space:nowrap;flex-shrink:0;border-right:1px solid #7c2d12;height:100%;display:flex;align-items:center;background:#150600}
.ticker-mask{flex:1;overflow:hidden;position:relative;height:100%}
.ticker-track{display:flex;align-items:center;gap:48px;height:100%;animation:ticker-scroll 28s linear infinite;white-space:nowrap;width:max-content}
.ticker-track:hover{animation-play-state:paused}
.ticker-item{display:inline-flex;align-items:center;gap:10px;cursor:pointer;padding:0 4px;transition:opacity .15s}
.ticker-item:hover{opacity:.8}
.ticker-sev{display:inline-flex;align-items:center;font-size:10px;font-weight:700;letter-spacing:.06em;padding:2px 7px;border-radius:3px}
.ticker-sev.critical{background:#7f1d1d;color:#fca5a5}
.ticker-sev.major{background:#7c2d12;color:#fb923c}
.ticker-sev.minor{background:#78350f;color:#fcd34d}
.ticker-sev.maintenance{background:#1e3a5f;color:#93c5fd}
.ticker-title{font-size:12px;color:#fde68a;font-weight:500}
.ticker-status{font-size:11px;color:#f97316;opacity:.8}
.ticker-sep{color:#7c2d12;font-size:18px;user-select:none}
@keyframes ticker-scroll{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}

/* ── Incident page ──────────────────────────────────────────────────────── */
.inc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:16px;margin-top:20px}
.inc-card{background:var(--surf);border-radius:var(--r-lg);border:1px solid var(--border);overflow:hidden;transition:box-shadow var(--ease)}
.inc-card:hover{box-shadow:var(--sh-lg)}
.inc-card-header{padding:14px 16px;display:flex;align-items:flex-start;gap:12px;border-bottom:1px solid var(--border)}
.inc-sev-bar{width:4px;border-radius:2px;flex-shrink:0;align-self:stretch;min-height:40px}
.inc-sev-bar.critical{background:#ef4444}
.inc-sev-bar.major{background:#f97316}
.inc-sev-bar.minor{background:#f59e0b}
.inc-sev-bar.maintenance{background:#3b82f6}
.inc-card-meta{flex:1;min-width:0}
.inc-card-title{font-size:14px;font-weight:600;color:var(--text);margin-bottom:4px}
.inc-card-badges{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.inc-badge-sev{font-size:10px;font-weight:700;padding:2px 7px;border-radius:3px;letter-spacing:.05em}
.inc-badge-sev.critical{background:#fef2f2;color:#b91c1c}
.inc-badge-sev.major{background:#fff7ed;color:#c2410c}
.inc-badge-sev.minor{background:#fffbeb;color:#b45309}
.inc-badge-sev.maintenance{background:#eff6ff;color:#1d4ed8}
.inc-badge-status{font-size:10px;font-weight:600;padding:2px 7px;border-radius:3px}
.inc-badge-status.investigating{background:#fef2f2;color:#991b1b}
.inc-badge-status.identified{background:#fff7ed;color:#9a3412}
.inc-badge-status.monitoring{background:#fffbeb;color:#92400e}
.inc-badge-status.resolved{background:#f0fdf4;color:#15803d}
.inc-card-body{padding:14px 16px}
.inc-field{font-size:12px;color:var(--text2);margin-bottom:6px;display:flex;gap:6px}
.inc-field-label{color:var(--text3);flex-shrink:0;font-weight:500}
.inc-eta{font-size:12px;color:var(--text2);display:flex;align-items:center;gap:6px;margin-top:4px}
.inc-card-footer{padding:10px 16px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:8px}
.inc-time{font-size:11px;color:var(--text3)}
.inc-actions{display:flex;gap:6px}
.inc-timeline{padding:12px 16px;border-top:1px solid var(--border);background:var(--surf2)}
.inc-timeline-title{font-size:11px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
.inc-upd-item{display:flex;gap:10px;margin-bottom:8px;position:relative}
.inc-upd-item::before{content:'';position:absolute;left:5px;top:14px;bottom:-10px;width:1px;background:var(--border)}
.inc-upd-item:last-child::before{display:none}
.inc-upd-dot{width:10px;height:10px;border-radius:50%;background:var(--acc);flex-shrink:0;margin-top:3px;position:relative;z-index:1;border:2px solid var(--surf2)}
.inc-upd-dot.resolved{background:var(--ok)}
.inc-upd-body{flex:1;min-width:0}
.inc-upd-text{font-size:13px;color:var(--text);line-height:1.4}
.inc-upd-meta{font-size:11px;color:var(--text3);margin-top:2px}
.inc-empty{text-align:center;padding:60px 20px;color:var(--text3)}
.inc-empty svg{margin-bottom:12px;opacity:.4}
.inc-status-bar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}
.inc-filter-btn{padding:6px 12px;border-radius:20px;border:1px solid var(--border);background:var(--surf);font-size:12px;cursor:pointer;color:var(--text2);transition:all var(--ease)}
.inc-filter-btn:hover,.inc-filter-btn.active{background:var(--acc);border-color:var(--acc);color:#fff}

/* ── Buttons ─────────────────────────────────────────────────────────────── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;border-radius:var(--r);border:1px solid var(--border2);background:var(--surf);color:var(--text);cursor:pointer;font-size:13px;font-weight:500;transition:background var(--ease),border-color var(--ease);white-space:nowrap;line-height:1}
.btn:hover{background:var(--surf2);border-color:var(--border2)}
.btn.primary{background:var(--acc);color:#fff;border-color:var(--acc)}
.btn.primary:hover{background:var(--acc-d);border-color:var(--acc-d)}
.btn.danger{color:var(--err);border-color:rgba(239,68,68,.25)}
.btn.danger:hover{background:var(--err-l)}
.btn.ghost{border-color:transparent;background:transparent}
.btn.ghost:hover{background:var(--surf2)}
.btn.sm{padding:5px 10px;font-size:12px}
.btn.xs{padding:3px 8px;font-size:11px}
.btn svg{flex-shrink:0}
.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--r);border:none;background:transparent;cursor:pointer;color:var(--text3);transition:background var(--ease),color var(--ease)}
.icon-btn:hover{background:var(--surf2);color:var(--text)}

/* ── Avatars ─────────────────────────────────────────────────────────────── */
.avatar{border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:600;flex-shrink:0;font-size:11px}
.avatar.size-24{width:24px;height:24px;font-size:9px}
.avatar.size-28{width:28px;height:28px;font-size:10px}
.avatar.size-32{width:32px;height:32px;font-size:11px}
.avatar.size-36{width:36px;height:36px;font-size:13px}
.avatar.size-44{width:44px;height:44px;font-size:16px}
.avatar.size-52{width:52px;height:52px;font-size:18px}
.avatar-stack{display:flex}
.avatar-stack .avatar{margin-left:-6px;border:2px solid var(--surf)}
.avatar-stack .avatar:first-child{margin-left:0}

/* ── Badges ─────────────────────────────────────────────────────────────── */
.badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;padding:2px 8px;border-radius:20px;white-space:nowrap}
.badge.critical{background:#fef2f2;color:#b91c1c}
.badge.high{background:#fff7ed;color:#c2410c}
.badge.medium{background:#eff6ff;color:#1d4ed8}
.badge.low{background:#f0fdf4;color:#15803d}
.badge.tag{background:var(--surf2);color:var(--text2);border:1px solid var(--border)}
.badge.status-backlog{background:#f1f5f9;color:#64748b}
.badge.status-todo{background:#eff6ff;color:#1d4ed8}
.badge.status-inprog{background:#fffbeb;color:#b45309}
.badge.status-review{background:var(--acc-l);color:var(--acc-d)}
.badge.status-done{background:#f0fdf4;color:#15803d}
.badge.status-changes{background:#fff7ed;color:#c2410c}
.badge.fr-new{background:#eff6ff;color:#1d4ed8}
.badge.fr-review{background:var(--acc-l);color:var(--acc-d)}
.badge.fr-planned{background:#f0fdf4;color:#15803d}
.badge.fr-done{background:#f0fdf4;color:#15803d}
.badge.fr-wontdo{background:#f1f5f9;color:#64748b}
.fr-card{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px;display:flex;flex-direction:column;gap:10px;transition:box-shadow .15s}
.fr-card:hover{box-shadow:var(--sh)}
.fr-vote-btn{display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 10px;border:1.5px solid var(--border2);border-radius:var(--r-lg);cursor:pointer;font-size:11px;font-weight:700;color:var(--text2);background:none;transition:all .15s;flex-shrink:0;min-width:44px}
.fr-vote-btn:hover,.fr-vote-btn.voted{border-color:var(--acc);color:var(--acc);background:var(--acc-l)}
.status-indicator{display:inline-flex;align-items:center;gap:6px;font-size:13px}
.status-indicator::before{content:'';width:8px;height:8px;border-radius:50%;flex-shrink:0}
.status-indicator.backlog::before{background:#94a3b8}
.status-indicator.todo::before{background:var(--info)}
.status-indicator.inprog::before{background:var(--warn)}
.status-indicator.review::before{background:var(--acc)}
.status-indicator.done::before{background:var(--ok)}

/* ── Kanban board ───────────────────────────────────────────────────────── */
#board-container{overflow-x:auto;overflow-y:visible;padding-bottom:16px}
.board-wrap{display:flex;gap:14px;align-items:flex-start;padding-bottom:4px;min-width:max-content}
.k-col{width:236px;flex-shrink:0;background:var(--surf2);border:1px solid var(--border);border-radius:var(--r-lg);display:flex;flex-direction:column;max-height:calc(100vh - var(--tb-h) - 100px)}
.k-col.drag-over{border-color:var(--acc);background:var(--acc-l)}
.k-col-header{padding:11px 13px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--border);flex-shrink:0}
.k-col-dot{width:10px;height:10px;border-radius:50%}
.k-col-title{font-weight:600;font-size:13px;flex:1}
.k-col-count{font-size:11px;color:var(--text3);background:var(--border);border-radius:10px;padding:2px 7px}
.k-tasks{padding:8px;display:flex;flex-direction:column;gap:8px;overflow-y:auto;flex:1}
.k-add-btn{margin:0 8px 8px;padding:8px;border-radius:var(--r);border:1.5px dashed var(--border2);background:transparent;color:var(--text3);cursor:pointer;font-size:13px;display:flex;align-items:center;gap:6px;justify-content:center;transition:all var(--ease)}
.k-add-btn:hover{background:var(--surf);color:var(--text2);border-color:var(--acc)}

/* ── Task cards ─────────────────────────────────────────────────────────── */
.task-card{background:var(--surf);border:1px solid var(--border);border-radius:var(--r);padding:11px 13px;cursor:pointer;transition:box-shadow var(--ease),transform var(--ease),border-color var(--ease);user-select:none}
.task-card:hover{box-shadow:var(--sh);transform:translateY(-1px);border-color:var(--border2)}
.task-card.dragging{opacity:.4;transform:scale(.97)}
.task-card.blocked{border-left:3px solid var(--err)}
.tc-title{font-size:13px;font-weight:500;color:var(--text);margin-bottom:8px;line-height:1.4}
.tc-badges{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-bottom:8px}
.tc-footer{display:flex;align-items:center;justify-content:space-between}
.tc-meta{display:flex;align-items:center;gap:8px}
.tc-due{font-size:11px;color:var(--text3);display:flex;align-items:center;gap:3px}
.tc-due.overdue{color:var(--err)}
.tc-hours{font-size:11px;color:var(--text3);padding:1px 5px;background:var(--surf2);border-radius:4px;border:1px solid var(--border)}
.tc-comments{font-size:11px;color:var(--text3);display:flex;align-items:center;gap:3px}
.blocked-chip{font-size:10px;padding:2px 6px;border-radius:4px;background:var(--err-l);color:var(--err);font-weight:600}

/* ── Task drawer ────────────────────────────────────────────────────────── */
.drawer-bd{position:fixed;inset:0;background:rgba(0,0,0,.3);z-index:50;display:none;opacity:0;transition:opacity var(--ease)}
.drawer-bd.open{display:block;opacity:1}
.drawer{position:fixed;right:0;top:0;bottom:0;width:680px;max-width:95vw;background:var(--surf);z-index:51;display:flex;flex-direction:column;transform:translateX(100%);transition:transform .22s cubic-bezier(.4,0,.2,1);box-shadow:-8px 0 40px rgba(0,0,0,.15)}
.drawer.open{transform:translateX(0)}
.drawer-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:flex-start;gap:10px;flex-shrink:0}
.drawer-title-area{flex:1;min-width:0}
.drawer-task-title{font-size:18px;font-weight:600;line-height:1.3;border:none;background:transparent;color:var(--text);width:100%;outline:none;resize:none;font-family:inherit;padding:0}
.drawer-task-title:focus{color:var(--text)}
.drawer-sub{font-size:12px;color:var(--text3);margin-top:3px;display:flex;align-items:center;gap:8px}
.drawer-tabs{display:flex;border-bottom:1px solid var(--border);padding:0 20px;flex-shrink:0;background:var(--surf)}
.d-tab{padding:10px 14px;border:none;background:transparent;cursor:pointer;font-size:13px;font-weight:500;color:var(--text3);border-bottom:2px solid transparent;margin-bottom:-1px;transition:color var(--ease);font-family:inherit;white-space:nowrap}
.d-tab.active{color:var(--acc);border-bottom-color:var(--acc)}
.d-tab:hover{color:var(--text)}
.drawer-body{display:flex;flex:1;overflow:hidden}
.drawer-main{flex:1;overflow-y:auto;padding:18px 20px}
.drawer-panel{width:210px;flex-shrink:0;border-left:1px solid var(--border);overflow-y:auto;padding:14px}
.tab-pane{display:none}
.tab-pane.active{display:block}
.panel-field{margin-bottom:16px}
.panel-label{font-size:10px;color:var(--text3);font-weight:600;text-transform:uppercase;letter-spacing:.07em;margin-bottom:6px}
.panel-select{width:100%;padding:6px 9px;border:1px solid var(--border);border-radius:var(--r);background:var(--surf2);color:var(--text);font-size:12px;font-family:inherit;cursor:pointer}
.panel-select:focus{outline:none;border-color:var(--acc)}
.panel-input{width:100%;padding:6px 9px;border:1px solid var(--border);border-radius:var(--r);background:var(--surf2);color:var(--text);font-size:12px;font-family:inherit}
.panel-input:focus{outline:none;border-color:var(--acc)}
.section-label{font-size:12px;font-weight:600;color:var(--text2);margin-bottom:8px}
.desc-ta,textarea.notes-ta{width:100%;border:1px solid var(--border);border-radius:var(--r);padding:10px 12px;font-family:inherit;font-size:13px;color:var(--text);background:var(--surf2);line-height:1.6;resize:vertical;transition:border-color var(--ease)}
.desc-ta{min-height:80px;margin-bottom:16px}
textarea.notes-ta{min-height:220px}
.desc-ta:focus,textarea.notes-ta:focus{outline:none;border-color:var(--acc);background:var(--surf)}
.blocked-banner{background:var(--err-l);border-left:3px solid var(--err);border-radius:4px;padding:8px 12px;margin-bottom:14px;font-size:12px;color:var(--err)}

/* ── Comments ────────────────────────────────────────────────────────────── */
.comment-row{display:flex;gap:10px;margin-bottom:14px}
.comment-body{flex:1}
.comment-author{font-size:12px;font-weight:600;color:var(--text);display:inline}
.comment-time{font-size:11px;color:var(--text3);margin-left:8px}
.comment-text{font-size:13px;color:var(--text2);margin-top:3px;line-height:1.5}
.comment-form{display:flex;gap:8px;align-items:flex-start;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.comment-ta{flex:1;padding:8px 10px;border:1px solid var(--border);border-radius:var(--r);font-family:inherit;font-size:13px;color:var(--text);background:var(--surf2);resize:none;min-height:36px;line-height:1.4}
.comment-ta:focus{outline:none;border-color:var(--acc);background:var(--surf)}
.typing-hint{font-size:12px;color:var(--text3);font-style:italic;margin-top:4px;min-height:18px}

/* ── Subtasks ────────────────────────────────────────────────────────────── */
.subtask-row{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px solid var(--border)}
.subtask-row:last-child{border-bottom:none}
.subtask-check{width:16px;height:16px;border-radius:4px;border:1.5px solid var(--border2);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all var(--ease)}
.subtask-check.done{background:var(--ok);border-color:var(--ok);color:#fff}
.subtask-title{flex:1;font-size:13px;cursor:pointer}
.subtask-title.done{text-decoration:line-through;color:var(--text3)}
.subtask-add-row{display:flex;gap:6px;margin-top:8px}
.subtask-input{flex:1;padding:6px 10px;border:1px solid var(--border);border-radius:var(--r);font-size:13px;font-family:inherit;color:var(--text);background:var(--surf2)}
.subtask-input:focus{outline:none;border-color:var(--acc)}

/* ── Predecessor ─────────────────────────────────────────────────────────── */
.pred-row{display:flex;align-items:center;gap:8px;padding:7px 10px;background:var(--surf2);border-radius:var(--r);margin-bottom:6px}
.pred-title{flex:1;font-size:13px;cursor:pointer;color:var(--acc)}
.pred-remove{background:none;border:none;cursor:pointer;color:var(--text3);font-size:18px;line-height:1;padding:0}
.pred-remove:hover{color:var(--err)}
.pred-search-input{width:100%;padding:7px 10px;border:1px solid var(--border);border-radius:var(--r);font-size:13px;font-family:inherit;color:var(--text);background:var(--surf2)}
.pred-search-input:focus{outline:none;border-color:var(--acc)}
.pred-dropdown{background:var(--surf);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--sh);max-height:160px;overflow-y:auto;margin-top:4px}
.pred-opt{padding:8px 12px;cursor:pointer;font-size:13px}
.pred-opt:hover{background:var(--surf2)}

/* ── List view (legacy) ──────────────────────────────────────────────────── */
.list-table{width:100%;border-collapse:collapse;background:var(--surf);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh)}
.list-table th{text-align:left;padding:9px 14px;font-size:11px;color:var(--text3);font-weight:600;letter-spacing:.05em;text-transform:uppercase;background:var(--surf2);border-bottom:1px solid var(--border);position:sticky;top:0}
.list-table td{padding:10px 14px;border-bottom:1px solid var(--border);font-size:13px;vertical-align:middle}
.list-table tr{cursor:pointer;transition:background var(--ease)}
.list-table tr:last-child td{border-bottom:none}
.list-table tr:hover td{background:var(--surf2)}

/* ── Spreadsheet Grid ────────────────────────────────────────────────────── */
.gs-toolbar{display:flex;align-items:center;padding:6px 0 8px;gap:8px}
.gs-task-cnt{font-size:12px;color:var(--text3)}
.gs-viewonly{font-size:12px;color:var(--text3);padding:4px 10px;border:1px solid var(--border);border-radius:var(--r-lg)}
.gs-wrap{overflow:auto;max-height:calc(100vh - 170px);border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surf);box-shadow:var(--sh);position:relative}
.gs-table{width:100%;border-collapse:collapse;table-layout:fixed}
.gs-thead{position:sticky;top:0;z-index:4;background:var(--surf2)}
.gs-th{text-align:left;padding:8px 10px;font-size:11px;color:var(--text3);font-weight:600;letter-spacing:.05em;text-transform:uppercase;border-bottom:2px solid var(--border);border-right:1px solid var(--border);white-space:nowrap;user-select:none}
.gs-th:last-child{border-right:none}
.gs-th-rn{width:40px;min-width:40px;text-align:center;z-index:6;background:var(--surf2);left:0}
.gs-th.gs-th-rn{position:sticky}
.gs-th-act{width:32px;min-width:32px}
.gs-th-sticky{position:sticky;left:40px;z-index:5;background:var(--surf2);box-shadow:2px 0 4px rgba(0,0,0,.06)}
.gs-row{cursor:default;transition:background .08s}
.gs-row:hover .gs-td{background:var(--surf2)}
.gs-row:hover .gs-sticky{background:var(--surf2)}
.gs-od .gs-date.gs-over{color:var(--err)}
.gs-bl .gs-name{opacity:.8}
.gs-row-new .gs-td{background:rgba(99,102,241,.04)}
.gs-td{padding:0;border-bottom:1px solid var(--border);border-right:1px solid var(--border);font-size:13px;vertical-align:middle;height:34px;position:relative;background:var(--surf);min-width:0}
.gs-td:last-child{border-right:none}
.gs-td-rn{width:40px;min-width:40px;text-align:center;padding:0 4px;color:var(--text3);font-size:11px;user-select:none;background:var(--surf2)!important;position:sticky;left:0;z-index:3}
.gs-rn-num{font-size:11px;color:var(--text3)}
.gs-td-act{width:32px;min-width:32px;padding:0;text-align:center;background:var(--surf2)!important}
.gs-sticky{position:sticky;left:40px;z-index:2;background:var(--surf);box-shadow:2px 0 6px rgba(0,0,0,.07)}
.gs-row:hover .gs-sticky{background:var(--surf2)}
.gs-editing{outline:2px solid var(--acc)!important;outline-offset:-1px;z-index:3;background:var(--surf)!important}
/* Cell content helpers */
.gs-name{padding:0 8px;font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:34px;display:flex;align-items:center;gap:4px}
.gs-name-txt{overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
.gs-indent-ic{font-size:12px;color:var(--text3);flex-shrink:0;margin-right:2px}
.gs-row-sel>.gs-td{background:rgba(99,102,241,.045)!important}
.gs-idt-btn{font-size:11px!important}
.gs-status-wrap,.gs-av-wrap,.gs-pri-cell{padding:0 8px;display:flex;align-items:center;height:34px}
.gs-date{padding:0 10px;font-size:12px;color:var(--text2);line-height:34px;display:block;white-space:nowrap}
.gs-date.gs-over{color:var(--err)}
.gs-num{padding:0 10px;font-size:13px;color:var(--text2);line-height:34px;display:block}
.gs-txt{padding:0 10px;font-size:13px;color:var(--text2);line-height:34px;display:block}
.gs-empty{padding:0 10px;color:var(--text3);line-height:34px;display:block}
.gs-tags{padding:2px 8px;display:flex;flex-wrap:wrap;gap:2px;align-items:center}
.gs-pred{font-size:11px;padding:1px 5px;background:var(--info-l);color:var(--info);border-radius:4px;font-weight:600;margin:0 1px}
.gs-blk-chip{font-size:10px;padding:1px 5px;background:var(--err-l);color:var(--err);border-radius:4px;font-weight:600;flex-shrink:0}
.gs-cmt-cnt{font-size:10px;color:var(--text3);font-weight:400;flex-shrink:0}
/* % Done cell with fill handle */
.gs-pct-cell{padding:0 8px;display:flex;align-items:center;gap:6px;height:34px;position:relative;cursor:default}
.gs-pct-bar{flex:1;height:6px;background:var(--border);border-radius:3px;min-width:30px;overflow:hidden}
.gs-pct-fill{height:100%;border-radius:3px;transition:width .2s}
.gs-pct-num{font-size:11px;color:var(--text2);flex-shrink:0;min-width:28px;text-align:right}
.gs-fill-handle{position:absolute;right:3px;bottom:3px;width:7px;height:7px;background:var(--acc);border:1px solid var(--surf);border-radius:1px;cursor:crosshair;opacity:0;transition:opacity .1s;z-index:4}
.gs-pct-cell:hover .gs-fill-handle,.gs-td:hover .gs-fill-handle{opacity:1}
.gs-fill-src{outline:2px solid var(--acc)!important;outline-offset:-2px}
.gs-fill-range{background:rgba(99,102,241,.12)!important;outline:1px dashed var(--acc);outline-offset:-1px}
.gs-fillable{position:relative;min-height:30px;display:flex;align-items:center}
.gs-phase-cell{padding:0 8px;display:flex;align-items:center;height:34px;position:relative;cursor:pointer}
.gs-phase-chip{font-size:11px;font-weight:600;padding:2px 9px;border-radius:20px;background:var(--acc-l);color:var(--acc);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Inline edit inputs */
.gs-ci{width:100%;height:100%;border:none;outline:none;background:transparent;font-size:13px;color:var(--text);padding:0 10px;font-family:inherit;box-sizing:border-box;min-height:34px}
.gs-sel{width:100%;height:34px;border:none;outline:none;background:var(--surf);font-size:13px;color:var(--text);padding:0 8px;font-family:inherit;cursor:pointer}
/* Group headers */
.gs-group-hdr{background:var(--surf2)!important}
.gs-group-hdr td{background:var(--surf2)!important;border-bottom:1px solid var(--border)}
.gs-td-grp{padding:6px 10px;font-size:12px;font-weight:600;color:var(--text2);cursor:pointer;user-select:none;display:flex;align-items:center;gap:6px}
.gs-grp-arrow{font-size:10px;color:var(--text3);display:inline-block;transition:transform .15s}
.gs-grp-cnt{font-size:11px;font-weight:400;color:var(--text3);margin-left:4px}
/* Add row footer */
.gs-add-foot{padding:8px 50px;font-size:13px;color:var(--text3);cursor:pointer;border-top:1px solid var(--border);background:var(--surf);transition:background var(--ease)}
.gs-add-foot:hover{background:var(--surf2);color:var(--text)}
/* Open detail button */
.gs-open-btn{background:none;border:none;cursor:pointer;color:var(--text3);font-size:16px;padding:0 8px;width:32px;height:34px;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .1s}
.gs-row:hover .gs-open-btn{opacity:1}
/* Context menu */
.gs-ctx{position:fixed;background:var(--surf);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--sh-lg);z-index:9999;min-width:170px;padding:4px}
.gs-ctx-item{padding:7px 12px;font-size:13px;cursor:pointer;border-radius:4px;color:var(--text)}
.gs-ctx-item:hover{background:var(--surf2)}
.gs-ctx-del{color:var(--err)}
.gs-ctx-del:hover{background:var(--err-l)}
.gs-ctx-sep{height:1px;background:var(--border);margin:3px 0}
/* Column picker */
.gs-col-picker{position:absolute;right:0;top:calc(100% + 4px);z-index:200}
.gs-cp-wrap{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-lg);padding:12px;min-width:180px;max-height:min(70vh,420px);overflow-y:auto}
.gs-cp-title{font-size:11px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px}
.gs-cp-row{display:flex;align-items:center;gap:8px;padding:5px 6px;font-size:13px;color:var(--text);border-radius:6px;border:1px solid transparent}
.gs-cp-row:hover{background:var(--surf2)}
.gs-cp-handle{cursor:grab;color:var(--text3);font-size:11px;letter-spacing:-2px;flex-shrink:0;user-select:none;line-height:1}
.gs-cp-handle:active{cursor:grabbing}
.gs-cp-check{display:flex;align-items:center;gap:7px;flex:1;cursor:pointer;min-width:0}
.gs-cp-check span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gs-cp-row.gs-cp-dragging{opacity:.45}
.gs-cp-row.gs-cp-drag-over{border-top-color:var(--acc);box-shadow:inset 0 2px 0 var(--acc)}
.gs-cp-hint{font-size:10px;color:var(--text3);margin-bottom:6px;display:flex;align-items:center;gap:4px}
/* Predecessor autocomplete */
.gs-pred-drop{position:absolute;top:100%;left:0;right:0;background:var(--surf);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--sh-lg);z-index:100;max-height:200px;overflow-y:auto;display:none}
.gs-pred-opt{padding:7px 10px;font-size:13px;cursor:pointer;display:flex;align-items:center;gap:6px}
.gs-pred-opt:hover{background:var(--surf2)}
/* Bulk add toolbar section */
.gs-bulk-add{display:flex;align-items:center;gap:5px;margin-left:10px}
.gs-bulk-n-inp{width:44px;height:24px;border:1px solid var(--border);border-radius:var(--r);background:var(--surf);color:var(--text);font-size:12px;text-align:center;padding:0 4px}
.gs-bulk-lbl{font-size:12px;color:var(--text2)}
/* Rollup indicator on parent pct cells */
.gs-rollup-ic{font-size:9px;color:var(--text3);font-weight:600;margin-right:2px;flex-shrink:0;opacity:.7}
/* Add custom column header button */
.gs-th-addcol{width:32px;min-width:32px;padding:0;text-align:center;font-size:16px;font-weight:400;color:var(--text3);cursor:pointer;border-left:1px dashed var(--border)!important}
.gs-th-addcol:hover{color:var(--acc);background:var(--acc-l)}
/* Column picker delete button for custom cols */
.gs-cp-del{margin-left:auto;font-size:10px;color:var(--text3);cursor:pointer;padding:2px 4px;border-radius:3px;opacity:.5}
.gs-cp-del:hover{opacity:1;color:var(--err);background:var(--err-l)}

/* ── Metrics & cards ─────────────────────────────────────────────────────── */
.metrics-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:20px}
.metric-card{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px;box-shadow:var(--sh)}
.metric-label{font-size:12px;color:var(--text2);margin-bottom:6px}
.metric-value{font-size:28px;font-weight:700;line-height:1;color:var(--text)}
.metric-sub{font-size:12px;color:var(--text3);margin-top:4px}
.metric-card.accent{background:var(--acc-l)}
.metric-card.accent .metric-value{color:var(--acc)}
.metric-card.ok{background:var(--ok-l)}
.metric-card.ok .metric-value{color:var(--ok)}
.metric-card.danger{background:var(--err-l)}
.metric-card.danger .metric-value{color:var(--err)}
.metric-card.warn{background:var(--warn-l)}
.metric-card.warn .metric-value{color:var(--warn)}

/* ── Dashboard widgets ───────────────────────────────────────────────────── */
.widget-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.widget{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:0;box-shadow:var(--sh);overflow:hidden}
.widget-header{padding:14px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px}
.widget-title{font-size:14px;font-weight:600;flex:1}
.widget-body{padding:16px}
.widget.span-2{grid-column:span 2}
.widget-task-row{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px solid var(--border);cursor:pointer}
.widget-task-row:last-child{border-bottom:none}
.widget-task-row:hover{opacity:.8}
.widget-task-title{flex:1;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.add-widget-btn{border:1.5px dashed var(--border2);background:transparent;border-radius:var(--r-lg);display:flex;align-items:center;justify-content:center;gap:8px;padding:20px;color:var(--text3);cursor:pointer;font-size:13px;width:100%;transition:all var(--ease)}
.add-widget-btn:hover{border-color:var(--acc);color:var(--acc);background:var(--acc-l)}
.chart-wrap{position:relative;height:200px}
.chart-wrap.tall{height:240px}

/* ── Activity feed ───────────────────────────────────────────────────────── */
.activity-row{display:flex;align-items:flex-start;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)}
.activity-row:last-child{border-bottom:none}
.activity-text{font-size:13px;color:var(--text);flex:1;line-height:1.4}
.activity-text span{font-weight:600}
.activity-time{font-size:11px;color:var(--text3);white-space:nowrap;margin-top:2px}
.activity-action{font-size:11px;color:var(--text2);margin-top:1px}

/* ── People/Teams ────────────────────────────────────────────────────────── */
.people-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.person-card{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px;box-shadow:var(--sh)}
.person-card-top{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.person-info{flex:1;min-width:0}
/* Team access chips on person cards */
.ta-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:10px}
.ta-chip{font-size:11px;padding:2px 8px;border-radius:20px;font-weight:500;white-space:nowrap}
.ta-member{background:rgba(16,185,129,.12);color:#10b981;border:1px solid rgba(16,185,129,.3)}
.ta-viewer{background:rgba(99,102,241,.1);color:var(--acc);border:1px solid rgba(99,102,241,.25)}
/* Team access matrix in modal */
.ta-matrix{border:1px solid var(--border);border-radius:var(--r);overflow:hidden;margin-top:4px}
.ta-matrix-hdr{display:grid;grid-template-columns:1fr 80px 80px 90px;padding:8px 12px;background:var(--surf2);font-size:11px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border)}
.ta-matrix-row{display:grid;grid-template-columns:1fr 80px 80px 90px;padding:10px 12px;border-bottom:1px solid var(--border);align-items:center}
.ta-matrix-row:last-child{border-bottom:none}
.ta-matrix-row:hover{background:var(--surf2)}
.ta-matrix-team{font-size:13px;font-weight:500;display:flex;align-items:center}
.ta-radio-lbl{display:flex;justify-content:center;cursor:pointer;padding:4px}
.ta-radio{display:none}
.ta-radio-dot{width:18px;height:18px;border-radius:50%;border:2px solid var(--border2);display:inline-block;position:relative;transition:var(--ease)}
.ta-radio-lbl:hover .ta-radio-dot{border-color:var(--text2)}
.ta-radio:checked+.ta-radio-dot{border-color:transparent}
.ta-radio-member+.ta-radio-dot{border-color:var(--border2)}
.ta-radio:checked+.ta-radio-member{background:var(--ok);border-color:var(--ok)}
.ta-radio:checked+.ta-radio-viewer{background:var(--acc);border-color:var(--acc)}
.ta-radio:checked+.ta-radio-none{background:var(--text3);border-color:var(--text3)}
.person-name{font-weight:600;font-size:15px}
.person-role{font-size:12px;color:var(--text2);text-transform:capitalize}
.person-email{font-size:12px;color:var(--text3);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.person-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.role-badge{font-size:11px;padding:2px 8px;border-radius:20px;font-weight:600}
.role-badge.admin{background:var(--acc-l);color:var(--acc)}
.role-badge.member{background:var(--surf2);color:var(--text2)}
.online-ring{box-shadow:0 0 0 2px var(--ok)}

/* ── Quick Tasks board (Monday.com style) ───────────────────────────────── */
.qt-page{max-width:1180px}
.qt-board{display:flex;flex-direction:column;gap:18px;overflow-x:auto;padding-bottom:6px}
.qt-done-group{opacity:.9}
.qt-done-hdr{cursor:pointer;user-select:none}
.qt-done-hdr:hover{background:var(--surf)}
.qt-done-toggle{display:flex;align-items:center;gap:8px;padding:9px 20px 9px 28px;cursor:pointer;user-select:none;font-size:12px;color:var(--text3);border-top:1px dashed var(--border);transition:background .12s}
.qt-done-toggle:hover{background:var(--surf2);color:var(--text2)}
.qt-done-chev{font-size:9px}
.qt-group{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh);transition:border-color .15s;min-width:var(--qt-minw,880px)}
.qt-group.qt-drag-over{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc-l)}
.qt-group-hdr{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--surf2);border-bottom:1px solid var(--border)}
.qt-group-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.qt-group-name{font-size:13px;font-weight:600;color:var(--text)}
.qt-group-badge{font-size:10px;color:var(--text3);background:var(--surf);border:1px solid var(--border);border-radius:10px;padding:2px 8px;flex-shrink:0}
.qt-col-hdr{display:grid;grid-template-columns:var(--qt-cols,minmax(200px,1fr) 48px 136px 110px 124px 72px 80px);column-gap:14px;align-items:center;padding:8px 20px;font-size:10px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border)}
.qt-col-hdr .c-ctr{text-align:center}
.qt-col-hdr .qt-ch{position:relative}
.qt-rsz{position:absolute;right:-7px;top:-6px;bottom:-6px;width:12px;cursor:col-resize;z-index:3;border-radius:2px}
.qt-rsz:hover,.qt-rsz.active{background:var(--acc-t)}
.qt-row-b{display:grid;grid-template-columns:var(--qt-cols,minmax(200px,1fr) 48px 136px 110px 124px 72px 80px);column-gap:14px;align-items:center;padding:12px 20px;border-bottom:1px solid var(--border);position:relative;transition:background var(--ease)}
.qt-row-b:hover{background:var(--surf2)}
.qt-row-b:last-child{border-bottom:none}
.qt-left-bar{position:absolute;left:0;top:0;bottom:0;width:4px}
.qt-title-cell{padding:4px 8px;margin-left:6px;font-size:13px;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;border-radius:6px;border:1px solid transparent;cursor:text;transition:background .12s,border-color .12s}
.qt-title-cell[contenteditable]:hover{background:var(--surf2);border-color:var(--border2)}
.qt-title-cell[contenteditable]:focus{background:var(--surf);border-color:var(--acc);outline:none;white-space:normal;overflow:visible;text-overflow:clip;cursor:text}
.qt-title-cell.done-title{text-decoration:line-through;color:var(--text3)}
.qt-status-btn{display:inline-flex;align-items:center;justify-content:center;padding:4px 9px;border-radius:4px;font-size:11px;font-weight:700;cursor:pointer;user-select:none;transition:opacity .12s;border:none;white-space:nowrap;line-height:1.2}
.qt-status-btn:hover{opacity:.78}
.qt-status-btn.s-not_started{background:#e2e8f0;color:#475569}
.qt-status-btn.s-working{background:#fef3c7;color:#92400e}
.qt-status-btn.s-done{background:#d1fae5;color:#065f46}
.qt-status-btn.s-stuck{background:#fee2e2;color:#991b1b}
.qt-prog-wrap{display:flex;align-items:center;gap:7px}
.qt-date-inp{border:1px solid transparent;background:none;font-size:12px;color:var(--text3);cursor:pointer;width:108px;padding:4px 6px;font-family:inherit;outline:none;border-radius:6px;transition:all .12s}
.qt-date-inp:hover{color:var(--acc);background:var(--surf2);border-color:var(--border2)}
.qt-date-inp:focus{color:var(--acc);background:var(--surf2);border-color:var(--acc)}
.qt-date-inp.overdue{color:var(--err);font-weight:600}
.qt-date-inp::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.5}
.qt-date-inp:hover::-webkit-calendar-picker-indicator{opacity:.9}
/* Fills its (resizable) column rather than a fixed 46px, and the spinners are hidden -
   they are useless at this size and stole ~16px, clipping any decimal or 3-digit value. */
.qt-hrs-inp{border:1px solid transparent;background:none;font-size:12px;color:var(--text2);cursor:pointer;width:100%;min-width:0;padding:4px 6px;font-family:inherit;outline:none;border-radius:6px;text-align:right;transition:all .12s}
.qt-hrs-inp::-webkit-outer-spin-button,.qt-hrs-inp::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.qt-hrs-inp{-moz-appearance:textfield;appearance:textfield}
/* Same treatment in the task drawer, where the number spinners overlap the value. */
.panel-input[type=number]::-webkit-outer-spin-button,.panel-input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.panel-input[type=number]{-moz-appearance:textfield;appearance:textfield}
.qt-hrs-inp:hover{background:var(--surf2);color:var(--text);border-color:var(--border2)}
.qt-hrs-inp:focus{background:var(--surf2);color:var(--text);border-color:var(--acc)}
.qt-prog-track{flex:1;height:7px;background:var(--border2);border-radius:4px;overflow:hidden}
.qt-prog-fill{height:100%;border-radius:4px;transition:width .4s}
.qt-prog-pct{font-size:10px;color:var(--text3);flex-shrink:0;width:26px;text-align:right}
.qt-pickup-btn{padding:4px 12px;font-size:11px;white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;line-height:1.2}
.qt-add-row{display:flex;align-items:center;gap:10px;padding:8px 14px 8px 26px}
.qt-inline-add{flex:1;border:none;background:none;font-size:13px;color:var(--text);outline:none;min-width:0}
.qt-inline-add::placeholder{color:var(--text3)}
/* ── Quick Tasks status picker ──────────────────────────────────────────── */
.qt-spicker{position:fixed;background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-lg);z-index:600;min-width:192px;overflow:hidden;animation:qt-sp-in .1s ease}
@keyframes qt-sp-in{from{opacity:0;transform:scale(.95) translateY(-4px)}to{opacity:1;transform:scale(1) translateY(0)}}
.qt-spicker-hd{padding:8px 14px 4px;font-size:10px;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.07em}
.qt-spicker-opt{display:flex;align-items:center;gap:9px;padding:8px 14px;font-size:13px;cursor:pointer;color:var(--text);transition:background var(--ease)}
.qt-spicker-opt:hover{background:var(--surf2)}
.qt-spicker-opt.cur{font-weight:600}
.qt-spicker-dot{width:11px;height:11px;border-radius:3px;flex-shrink:0}
.qt-spicker-sep{height:1px;background:var(--border);margin:3px 0}
.qt-spicker-manage{padding:8px 14px;font-size:12px;color:var(--text3);cursor:pointer;transition:color var(--ease)}
.qt-spicker-manage:hover{color:var(--acc)}
/* ── Status manager modal rows ──────────────────────────────────────────── */
.qt-sm-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}
.qt-sm-row:last-child{border-bottom:none}
.qt-toggle{width:36px;height:20px;border-radius:10px;border:none;cursor:pointer;transition:background var(--ease);flex-shrink:0;position:relative;padding:0}
.qt-toggle.on{background:var(--acc)}
.qt-toggle.off{background:var(--border2)}
.qt-toggle::after{content:'';position:absolute;top:3px;width:14px;height:14px;border-radius:50%;background:#fff;transition:left .15s}
.qt-toggle.on::after{left:19px}
.qt-toggle.off::after{left:3px}

/* ── Modal ───────────────────────────────────────────────────────────────── */
.modal-bd{position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:100;display:none}
.modal-bd.open{display:block}
.modal-box{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--surf);border-radius:var(--r-xl);box-shadow:var(--sh-lg);z-index:101;padding:0;width:520px;max-width:95vw;max-height:85vh;overflow-y:auto;display:none}
.modal-box.open{display:block}
.modal-header{padding:18px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px}
.modal-header h2{font-size:17px;font-weight:600;flex:1}
.modal-body{padding:20px}
/* flex-wrap is load-bearing. The project settings footer holds six buttons (663px) in a
   520px modal; without wrapping, justify-content:flex-end pushes the overflow off the
   LEFT edge and the first button - Delete project - lands outside the modal entirely.
   It was in the DOM, invisible and unclickable, which read as "deleting a project is
   missing". margin-right:auto on that button cannot help: with nowrap there is no free
   space for an auto margin to take. */
.modal-footer{padding:14px 20px;border-top:1px solid var(--border);display:flex;flex-wrap:wrap;align-items:center;gap:8px;justify-content:flex-end}
.close-btn{background:none;border:none;cursor:pointer;color:var(--text3);font-size:22px;line-height:1;padding:0}
.close-btn:hover{color:var(--text)}

/* ── Search overlay ──────────────────────────────────────────────────────── */
.search-overlay{position:fixed;inset:0;z-index:200;display:flex;align-items:flex-start;justify-content:center;padding-top:80px}
.search-bd{position:absolute;inset:0;background:rgba(0,0,0,.5)}
.search-inner{position:relative;width:600px;max-width:95vw;z-index:1}
.search-box{background:var(--surf);border-radius:var(--r-xl);padding:12px 16px;display:flex;align-items:center;gap:10px;box-shadow:var(--sh-lg);border:1px solid var(--border)}
.search-input-field{flex:1;border:none;background:transparent;color:var(--text);font-size:16px;outline:none}
.search-input-field::placeholder{color:var(--text3)}
.search-input-field+kbd{background:var(--surf2);border:1px solid var(--border);border-radius:5px;padding:2px 7px;font-size:11px;color:var(--text3);cursor:pointer}
.search-results{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);margin-top:6px;box-shadow:var(--sh-lg);overflow:hidden;max-height:400px;overflow-y:auto}
.search-section-label{padding:8px 14px 4px;font-size:11px;color:var(--text3);font-weight:600;text-transform:uppercase;letter-spacing:.05em}
.search-result-row{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;transition:background var(--ease)}
.search-result-row:hover{background:var(--surf2)}
.search-result-title{font-size:13px;font-weight:500}
.search-result-sub{font-size:12px;color:var(--text3)}

/* ── Toasts ──────────────────────────────────────────────────────────────── */
.toast-stack{position:fixed;top:16px;right:16px;z-index:500;display:flex;flex-direction:column;gap:8px;pointer-events:none}
.toast{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 16px;box-shadow:var(--sh-lg);display:flex;align-items:flex-start;gap:10px;max-width:340px;pointer-events:all;animation:toast-in .2s ease}
.toast.success .toast-icon{color:var(--ok)}
.toast.error .toast-icon{color:var(--err)}
.toast.info .toast-icon{color:var(--info)}
.toast.warn .toast-icon{color:var(--warn)}
.toast-content{flex:1}
.toast-title{font-size:13px;font-weight:600;margin-bottom:2px}
.toast-msg{font-size:12px;color:var(--text2);line-height:1.4}
.toast-close{background:none;border:none;cursor:pointer;color:var(--text3);font-size:16px;line-height:1;padding:0;flex-shrink:0}
@keyframes toast-in{from{transform:translateX(120%);opacity:0}to{transform:none;opacity:1}}
.toast-out{animation:toast-out .2s ease forwards}
@keyframes toast-out{to{transform:translateX(120%);opacity:0}}

/* ── User menu ───────────────────────────────────────────────────────────── */
.user-menu{position:fixed;right:12px;top:52px;background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-lg);z-index:60;width:200px;padding:6px 0;overflow:hidden}
.user-menu-item{display:flex;align-items:center;gap:9px;padding:9px 14px;cursor:pointer;font-size:13px;color:var(--text2);transition:background var(--ease)}
.user-menu-item:hover{background:var(--surf2);color:var(--text)}
.user-menu-item.danger:hover{background:var(--err-l);color:var(--err)}
.user-menu-divider{height:1px;background:var(--border);margin:4px 0}
.user-menu-header{padding:10px 14px 8px;border-bottom:1px solid var(--border)}
.user-menu-name{font-weight:600;font-size:13px}
.user-menu-email{font-size:11px;color:var(--text3)}

/* ── Page section headers ────────────────────────────────────────────────── */
.page-header{display:flex;align-items:center;gap:10px;margin-bottom:20px;flex-wrap:wrap}
.page-header h2{font-size:18px;font-weight:600}
/* .page-hdr / .page-sub are used in app.js (My Board, Reports, Routines) but were never defined —
   without these the action button dropped onto its own line with zero gap and the subtitle rendered full-strength. */
.page-hdr{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}
.page-hdr>div{min-width:0}
.page-sub{color:var(--text3)}
.section-header{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.section-header h3{font-size:14px;font-weight:600}
.empty-state{padding:48px;text-align:center;color:var(--text3)}
.empty-state p{font-size:14px;margin-top:8px}

/* ── Misc ────────────────────────────────────────────────────────────────── */
.filter-row{display:flex;align-items:center;gap:8px;margin-bottom:16px;flex-wrap:wrap}
.filter-sel{padding:6px 10px;border:1px solid var(--border);border-radius:var(--r);background:var(--surf);color:var(--text);font-size:13px;font-family:inherit;cursor:pointer}
.filter-sel:focus{outline:none;border-color:var(--acc)}
.chip{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:20px;font-size:12px;background:var(--surf2);border:1px solid var(--border);color:var(--text2);cursor:pointer}
.chip.active{background:var(--acc-l);border-color:var(--acc);color:var(--acc)}
.chip .chip-x{font-size:14px;line-height:1;color:currentColor}
.notif-row{display:flex;align-items:flex-start;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background var(--ease)}
.notif-row:hover{background:var(--surf2)}
.notif-row.unread{background:var(--info-l)}
.notif-text{font-size:13px;color:var(--text);line-height:1.4}
.notif-time{font-size:11px;color:var(--text3);margin-top:3px}
.tag-chips{display:flex;gap:5px;flex-wrap:wrap}
.resource-bar-wrap{height:6px;background:var(--surf2);border-radius:3px;overflow:hidden;margin:6px 0}
.resource-bar-fill{height:100%;border-radius:3px;transition:width .4s}
.hrs-ok{background:var(--ok)}
.hrs-warn{background:var(--warn)}
.hrs-over{background:var(--err)}

/* ── Dark mode (body.dark class — toggled by user) ───────────────────────── */
body.dark{--bg:#0d1117;--surf:#161b22;--surf2:#1c2128;--border:rgba(255,255,255,.08);--border2:rgba(255,255,255,.14);--text:#e6edf3;--text2:#8b949e;--text3:#484f58;--acc-l:rgba(99,102,241,.18);--ok-l:rgba(16,185,129,.12);--warn-l:rgba(245,158,11,.12);--err-l:rgba(239,68,68,.12);--info-l:rgba(59,130,246,.12);--sh:0 1px 3px rgba(0,0,0,.3),0 0 0 .5px rgba(0,0,0,.2)}
body.dark .login-screen{background:linear-gradient(135deg,#010409 0%,#0d1117 50%,#010409 100%)}
body.dark .list-table tr:last-child td{border-bottom:none}

/* ── Microsoft SSO button ─────────────────────────────────────────────────── */
.btn-ms{width:100%;padding:10px 16px;border:1px solid var(--border2);border-radius:var(--r);background:var(--surf);color:var(--text);cursor:pointer;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:center;gap:10px;transition:background var(--ease),border-color var(--ease);font-family:inherit}
.btn-ms:hover{background:#0078d4;border-color:#0078d4;color:#fff}
.btn-ms:hover svg rect{fill:#fff !important;opacity:.9}

/* ── API key styles ───────────────────────────────────────────────────────── */
.copy-box{display:flex;align-items:center;gap:8px;background:var(--surf2);border:1px solid var(--border2);border-radius:var(--r);padding:10px 12px;margin:12px 0}
.copy-box code{flex:1;font-family:'Courier New',monospace;font-size:13px;color:var(--acc);word-break:break-all}
.copy-btn{background:none;border:1px solid var(--border2);border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;color:var(--text2);white-space:nowrap;transition:all var(--ease)}
.copy-btn:hover{background:var(--acc);color:#fff;border-color:var(--acc)}
.api-key-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}
.api-key-row:last-child{border-bottom:none}
.api-key-name{font-weight:500;font-size:13px;flex:1}
.api-key-meta{font-size:11px;color:var(--text3)}
.key-once-banner{background:var(--ok-l);border-left:3px solid var(--ok);border-radius:4px;padding:10px 14px;margin-bottom:12px;font-size:13px;color:var(--ok)}

/* ── Webhook styles ───────────────────────────────────────────────────────── */
.webhook-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--border)}
.webhook-row:last-child{border-bottom:none}
.webhook-name{font-weight:500;font-size:13px;flex:1}
.webhook-url{font-size:11px;color:var(--text3);font-family:monospace;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.webhook-status{font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600}
.webhook-status.active{background:var(--ok-l);color:var(--ok)}
.webhook-status.inactive{background:var(--surf2);color:var(--text3)}
.toggle-sw{position:relative;width:36px;height:20px;flex-shrink:0}
.toggle-sw input{opacity:0;width:0;height:0}
.toggle-sw .slider{position:absolute;inset:0;border-radius:20px;background:var(--border2);cursor:pointer;transition:background var(--ease)}
.toggle-sw input:checked+.slider{background:var(--ok)}
.toggle-sw .slider:before{content:'';position:absolute;width:14px;height:14px;left:3px;top:3px;background:#fff;border-radius:50%;transition:transform var(--ease)}
.toggle-sw input:checked+.slider:before{transform:translateX(16px)}

/* ── Plan view (SmartSheet-style project plan) ───────────────────────────── */
.plan-scroll-wrap{overflow-x:auto;padding-bottom:4px}
.plan-wrap{display:flex;flex-direction:column;gap:8px;min-width:680px}
.plan-phase{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh)}
.plan-phase-hdr{display:grid;grid-template-columns:28px 70px 1fr 60px 82px 82px 86px 96px 28px;align-items:center;gap:0;padding:9px 14px;background:var(--surf2);border-bottom:1px solid var(--border);cursor:pointer;user-select:none;transition:background var(--ease)}
.plan-phase-hdr:hover{background:var(--border)}
.plan-phase-toggle{color:var(--text3);font-size:10px;transition:transform var(--ease);display:flex;align-items:center;justify-content:center}
.plan-phase-toggle.open{transform:rotate(90deg)}
.plan-phase-pct-wrap{display:flex;align-items:center;gap:5px}
.plan-phase-pct-bar{height:5px;border-radius:3px;background:var(--border2);overflow:hidden;width:30px;flex-shrink:0}
.plan-phase-pct-fill{height:100%;border-radius:3px;transition:width .3s}
.plan-phase-pct-txt{font-size:11px;font-weight:600;color:var(--text3);min-width:28px}
.plan-phase-name{font-weight:600;font-size:13px;display:flex;align-items:center;gap:8px;min-width:0;grid-column:3 / -1}
.plan-phase-stripe{width:3px;height:14px;border-radius:2px;flex-shrink:0}
.plan-phase-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.plan-phase-count{font-size:11px;font-weight:400;color:var(--text3);flex-shrink:0}
.ph-pick-row{display:flex;align-items:center;gap:10px;padding:7px 10px;border:1px solid var(--border);border-radius:8px;cursor:pointer;font-size:13px;transition:background .12s,border-color .12s}
.ph-pick-row:hover{background:var(--surf2);border-color:var(--border2)}
.ph-pick-row.added{opacity:.55;cursor:default;background:var(--surf2)}
.ph-pick-row input{width:15px;height:15px;flex-shrink:0;accent-color:var(--acc)}
.ph-tmpl-edit-row{display:flex;align-items:center;gap:8px}
.plan-phase-grip{cursor:grab;color:var(--text3);font-size:11px;opacity:0;flex-shrink:0;user-select:none;line-height:1;transition:opacity .12s}
.plan-phase-grip:active{cursor:grabbing}
.plan-phase-hdr:hover .plan-phase-grip{opacity:.55}
.plan-phase-dragging{opacity:.4}
.plan-row-drop-above{box-shadow:inset 0 2px 0 var(--acc)}
.plan-row-drop-below{box-shadow:inset 0 -2px 0 var(--acc)}
.plan-phase-del,.plan-phase-edit{background:none;border:none;cursor:pointer;font-size:12px;opacity:0;padding:2px 5px;border-radius:4px;flex-shrink:0;transition:opacity .12s,background .12s;line-height:1}
.plan-phase-hdr:hover .plan-phase-del,.plan-phase-hdr:hover .plan-phase-edit{opacity:.6}
.plan-phase-del:hover{opacity:1!important;background:var(--err-l)}
.plan-phase-edit:hover{opacity:1!important;background:var(--acc-l)}
.plan-col-hdr{display:grid;grid-template-columns:28px 70px 1fr 60px 82px 82px 86px 96px 28px;align-items:center;gap:0;padding:5px 14px;border-bottom:1px solid var(--border);background:var(--surf)}
.plan-col-hdr span{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;color:var(--text3);white-space:nowrap;overflow:hidden}
.plan-row{display:grid;grid-template-columns:28px 70px 1fr 60px 82px 82px 86px 96px 28px;align-items:center;gap:0;padding:8px 14px;border-bottom:1px solid var(--border);cursor:pointer;transition:background var(--ease)}
.plan-row:last-child{border-bottom:none}
.plan-row:hover{background:var(--surf2)}
.plan-row:hover .plan-act{opacity:1}
.plan-row[draggable=true]{cursor:grab}
.plan-row[draggable=true]:active{cursor:grabbing}
.plan-row-dragging{opacity:.4}
.plan-phase-droptarget{box-shadow:inset 0 0 0 2px var(--acc);background:var(--acc-l)}
.plan-phase-droptarget .plan-phase-hdr{background:var(--acc-l)}
.plan-pct-cell{display:flex;align-items:center;gap:4px}
.plan-pct-bar{width:28px;height:5px;border-radius:3px;background:var(--border2);overflow:hidden;flex-shrink:0}
.plan-pct-fill{height:100%;border-radius:3px;transition:width .3s}
.plan-pct-txt{font-size:11px;color:var(--text3);min-width:24px}
.plan-title-cell{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:10px;display:flex;align-items:center;gap:6px}
.plan-title-done{text-decoration:line-through;color:var(--text3)}
.plan-date-cell{font-size:12px;color:var(--text2);white-space:nowrap}
.plan-date-cell.overdue{color:var(--err)}
.plan-assign-cell{display:flex;align-items:center}
.plan-act{opacity:0;transition:opacity var(--ease)}
.plan-add-row{display:grid;grid-template-columns:22px 72px 1fr auto;align-items:center;gap:0;padding:6px 14px;border-top:1px solid var(--border)}
.plan-inline-add{background:none;border:none;outline:none;font-size:13px;color:var(--text);padding:4px 8px;width:100%;border-radius:var(--r)}
.plan-inline-add:focus{background:var(--acc-l);outline:1px solid var(--acc)}
.plan-inline-add::placeholder{color:var(--text3)}
.plan-add-phase-btn{margin-top:2px;padding:9px 14px;border-radius:var(--r-lg);border:1.5px dashed var(--border2);background:transparent;color:var(--text3);cursor:pointer;font-size:13px;display:flex;align-items:center;gap:6px;transition:all var(--ease);width:100%;justify-content:center}
.plan-add-phase-btn:hover{border-color:var(--acc);color:var(--acc);background:var(--acc-l)}
.plan-row-num{font-size:11px;color:var(--text3);font-weight:500;text-align:right;padding-right:8px;user-select:none}
.plan-dur-cell{font-size:12px;color:var(--text2);white-space:nowrap}
.plan-pred-cell{font-size:12px;color:var(--acc);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:2px 6px;border-radius:4px;border:1px solid transparent;transition:all var(--ease);min-height:22px;display:flex;align-items:center}
.plan-pred-cell:hover{border-color:var(--acc);background:var(--acc-l)}
.plan-pred-cell.empty{color:var(--text3)}
.plan-pred-cell.empty:hover{color:var(--acc)}
/* Predecessor picker */
.plan-pred-picker{position:fixed;background:var(--surf);border:1px solid var(--border2);border-radius:var(--r-lg);box-shadow:var(--sh-lg);z-index:600;width:300px;display:flex;flex-direction:column;max-height:320px}
.plan-pred-picker-hd{padding:9px 12px;border-bottom:1px solid var(--border);font-size:12px;font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}
.plan-pred-search{width:100%;padding:8px 12px;border:none;border-bottom:1px solid var(--border);background:var(--surf2);font-size:13px;outline:none;color:var(--text);flex-shrink:0;font-family:inherit}
.plan-pred-list{overflow-y:auto;flex:1}
.plan-pred-opt{display:flex;align-items:center;gap:8px;padding:7px 12px;cursor:pointer;font-size:13px;transition:background var(--ease)}
.plan-pred-opt:hover{background:var(--surf2)}
.plan-pred-opt.selected{background:var(--acc-l)}
.plan-pred-num{font-size:11px;color:var(--text3);min-width:22px;font-weight:600;flex-shrink:0}
.plan-pred-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.plan-pred-footer{padding:8px 10px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:6px;flex-shrink:0}
/* Projects enhanced list */
.proj-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.proj-card{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px;cursor:pointer;transition:all var(--ease);box-shadow:var(--sh);position:relative;overflow:hidden}
.proj-card:hover{border-color:var(--acc);box-shadow:var(--sh-lg);transform:translateY(-1px)}
.proj-card-stripe{position:absolute;top:0;left:0;right:0;height:3px}
.proj-card-hdr{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px}
.proj-card-icon{width:38px;height:38px;border-radius:var(--r);display:flex;align-items:center;justify-content:center;flex-shrink:0;color:#fff}
.proj-card-name{font-size:14px;font-weight:600;line-height:1.3;flex:1}
.proj-card-team{font-size:11px;color:var(--text3);margin-top:2px}
.proj-card-desc{font-size:12px;color:var(--text3);margin-bottom:12px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.proj-card-prog{height:4px;border-radius:2px;background:var(--border2);overflow:hidden;margin-bottom:10px}
.proj-card-prog-fill{height:100%;border-radius:2px;transition:width .3s}
.proj-card-footer{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--text3)}
.proj-card-views{display:flex;gap:4px;margin-left:auto}
.proj-card-view-btn{padding:3px 8px;border-radius:6px;border:1px solid var(--border2);background:var(--surf2);font-size:11px;color:var(--text2);cursor:pointer;transition:all var(--ease);font-family:inherit}
.proj-card-view-btn:hover{border-color:var(--acc);color:var(--acc)}

/* ── Routine Maintenance ─────────────────────────────────────────────────── */
.rt-stat-row{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}
.rt-stat{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:14px 18px;min-width:100px;flex:1;box-shadow:var(--sh)}
.rt-stat.accent{border-color:var(--acc-l);background:var(--acc-l)}
.rt-stat-val{font-size:22px;font-weight:700;color:var(--acc);line-height:1}
.rt-stat.accent .rt-stat-val{color:var(--acc-d)}
.rt-stat-lbl{font-size:11px;color:var(--text3);margin-top:4px;text-transform:uppercase;letter-spacing:.04em}
.rt-tabs{display:flex;align-items:center;gap:4px;margin-bottom:14px;border-bottom:2px solid var(--border);padding-bottom:0}
.rt-tab{background:none;border:none;padding:8px 14px;font-size:13px;font-weight:500;color:var(--text3);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all var(--ease);font-family:inherit;border-radius:0}
.rt-tab:hover{color:var(--text)}
.rt-tab.active{color:var(--acc);border-bottom-color:var(--acc)}
.rt-filter-sel{background:var(--surf);border:1px solid var(--border2);border-radius:var(--r);padding:5px 10px;font-size:12px;color:var(--text);cursor:pointer;font-family:inherit;margin-bottom:4px}
.rt-table-wrap{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);overflow-x:auto;box-shadow:var(--sh)}
.rt-col-hdr{display:grid;grid-template-columns:minmax(160px,2fr) 90px 150px 38px 72px 72px 100px 110px;align-items:center;padding:8px 16px;background:var(--surf2);border-bottom:1px solid var(--border);font-size:10px;font-weight:700;color:var(--text3);letter-spacing:.06em;text-transform:uppercase;gap:8px;min-width:660px}
.rt-row{display:grid;grid-template-columns:minmax(160px,2fr) 90px 150px 38px 72px 72px 100px 110px;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);gap:8px;transition:background var(--ease);min-width:660px}
.rt-row:last-child{border-bottom:none}
.rt-row:hover{background:var(--surf2)}
.rt-title-cell{display:flex;align-items:flex-start;gap:10px;min-width:0}
.rt-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:5px}
.rt-name{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rt-desc{font-size:11px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}
.rt-teams-cell{display:flex;flex-wrap:wrap;gap:4px}
.freq-badge{font-size:10px;font-weight:700;padding:2px 8px;border-radius:20px;white-space:nowrap;letter-spacing:.03em}
.team-chip{font-size:10px;font-weight:600;padding:2px 7px;border-radius:10px;white-space:nowrap}
.rt-hrs{font-size:13px;font-weight:500;color:var(--text)}
.rt-mo-hrs{color:var(--acc);font-weight:700}
.rt-cat{font-size:10px;padding:2px 8px;border-radius:10px;background:var(--surf2);color:var(--text2);border:1px solid var(--border2);white-space:nowrap}
.rt-actions{display:flex;gap:6px;justify-content:flex-end}
.rt-empty{padding:40px;text-align:center;color:var(--text3);font-size:14px}
.rt-empty a{color:var(--acc);cursor:pointer}
/* Report styles */
.rt-report-grid{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.rt-report-card{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:20px;box-shadow:var(--sh);min-width:220px;overflow-x:auto}
.rt-report-tbl-hdr{display:grid;grid-template-columns:1.4fr 55px 110px 100px 90px 130px 80px;gap:6px;padding:7px 12px;background:var(--surf2);border-bottom:1px solid var(--border);font-size:10px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.05em;border-radius:var(--r) var(--r) 0 0;min-width:640px}
.rt-report-row{display:grid;grid-template-columns:1.4fr 55px 110px 100px 90px 130px 80px;gap:6px;padding:10px 12px;border-bottom:1px solid var(--border);font-size:12px;align-items:center;min-width:640px}
.rt-report-row:last-child{border-bottom:none}
.rt-pct-bar-wrap{display:flex;height:6px;border-radius:3px;background:var(--border2);overflow:hidden;margin-bottom:3px;min-width:80px}
.rt-pct-bar{height:100%;transition:width .4s}
.rt-status-chip{font-size:10px;font-weight:700;padding:3px 8px;border-radius:10px;white-space:nowrap}
.rt-status-chip.ok{background:#dcfce7;color:#16a34a}
.rt-status-chip.constrained{background:#fef3c7;color:#d97706}
.rt-legend{display:flex;gap:16px;flex-wrap:wrap;align-items:center;font-size:12px;color:var(--text2);margin-top:8px}
.rt-legend-item{display:flex;align-items:center;gap:6px}
.rt-legend-dot{width:10px;height:10px;border-radius:2px;flex-shrink:0}
/* Routine modal */
.rt-team-checks{display:flex;flex-wrap:wrap;gap:8px;padding:8px 0}
.rt-team-check{display:flex;align-items:center;gap:6px;font-size:12px;cursor:pointer;padding:5px 10px;border-radius:20px;border:1px solid var(--border2);background:var(--surf2);transition:all var(--ease);user-select:none}
.rt-team-check:has(input:checked){border-color:var(--acc);background:var(--acc-l);color:var(--acc-d)}
.rt-team-check-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.rt-team-check input{display:none}

/* ── My Board attention center ───────────────────────────────────────────── */
.mb-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:14px}
@media(max-width:900px){.mb-grid{grid-template-columns:1fr}}
.mb-col{display:flex;flex-direction:column;gap:10px}
.mb-sec{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;box-shadow:var(--sh)}
.mb-sec-hdr{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;user-select:none;transition:background var(--ease)}
.mb-sec-hdr:hover{background:var(--surf2)}
.mb-sec-lbl{font-size:13px;font-weight:600;flex:1}
.mb-sec-cnt{font-size:11px;font-weight:700;padding:2px 8px;border-radius:20px;min-width:20px;text-align:center}
.mb-chev{font-size:10px;color:var(--text3)}
.mb-sec-body{border-top:1px solid var(--border)}

/* ── Sort indicator ──────────────────────────────────────────────────────────── */
.gs-sort-ic{font-size:10px;color:var(--acc);margin-left:2px}

/* ── Filter button & badge ───────────────────────────────────────────────────── */
#gs-filter-btn.gs-filter-active{color:var(--acc);border-color:var(--acc);background:var(--acc-l)}
.gs-f-badge{display:inline-flex;align-items:center;justify-content:center;min-width:16px;height:16px;border-radius:10px;background:var(--acc);color:#fff;font-size:10px;font-weight:700;padding:0 4px;margin-left:4px}
.gs-filter-msg{font-size:12px;color:var(--text3);padding:6px 12px;background:var(--acc-l);border-bottom:1px solid var(--acc);display:flex;align-items:center;gap:10px}

/* ── Filter panel ────────────────────────────────────────────────────────────── */
.gs-filter-panel{position:fixed;z-index:900;background:var(--surf);border:1px solid var(--border2);border-radius:var(--r-lg);box-shadow:0 8px 30px rgba(0,0,0,.18);width:560px;max-width:calc(100vw - 16px);display:flex;flex-direction:column;overflow:hidden}
.gs-fp-hdr{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--border);font-size:13px;font-weight:600}
.gs-fp-x{background:none;border:none;cursor:pointer;font-size:16px;color:var(--text3);padding:2px 6px}
.gs-fp-body{padding:10px 14px;display:flex;flex-direction:column;gap:8px;max-height:260px;overflow-y:auto}
.gs-fp-empty{font-size:12px;color:var(--text3);text-align:center;padding:16px 0}
.gs-fp-foot{display:flex;align-items:center;gap:6px;padding:10px 14px;border-top:1px solid var(--border);background:var(--surf2)}
.gs-fp-clear{color:var(--err)!important}
.gs-fr{display:flex;align-items:center;gap:6px}
.gs-fsel{flex:1;min-width:0;height:30px;padding:0 8px;font-size:12px;border:1px solid var(--border2);border-radius:var(--r);background:var(--surf);color:var(--text)}
.gs-fval{flex:1.4;min-width:0;height:30px;padding:0 8px;font-size:12px;border:1px solid var(--border2);border-radius:var(--r);background:var(--surf);color:var(--text)}
.gs-fr-del{background:none;border:none;cursor:pointer;color:var(--text3);font-size:18px;line-height:1;padding:0 4px}
.gs-fr-del:hover{color:var(--err)}

/* ── View tab bar ────────────────────────────────────────────────────────────── */
.gs-view-bar{display:flex;align-items:center;gap:0;padding:0 0 0 0;border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:none}
.gs-view-bar::-webkit-scrollbar{display:none}
.gs-vtab{display:flex;align-items:center;gap:5px;padding:6px 14px;font-size:12px;font-weight:500;cursor:pointer;color:var(--text3);border-bottom:2px solid transparent;white-space:nowrap;transition:all var(--ease)}
.gs-vtab:hover{color:var(--text);background:var(--surf2)}
.gs-vtab.active{color:var(--acc);border-bottom-color:var(--acc);font-weight:600}
.gs-vtab-del{background:none;border:none;cursor:pointer;font-size:10px;color:var(--text3);padding:0 2px;margin-left:2px}
.gs-vtab-del:hover{color:var(--err)}
.gs-vtab-new{color:var(--acc)!important;font-weight:600!important}

/* ── Add column panel (positioned dropdown) ──────────────────────────────────── */
.gs-acp{position:fixed;z-index:900;background:var(--surf);border:1px solid var(--border2);border-radius:var(--r-lg);box-shadow:0 8px 30px rgba(0,0,0,.2);width:340px;display:flex;flex-direction:column;overflow:hidden;max-height:520px}
.gs-acp-hdr{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid var(--border);font-size:13px;font-weight:600}
.gs-acp-x{background:none;border:none;cursor:pointer;font-size:16px;color:var(--text3);padding:2px 6px}
.gs-acp-search-wrap{padding:8px 12px;border-bottom:1px solid var(--border)}
.gs-acp-search{width:100%;box-sizing:border-box;border:1px solid var(--border2);border-radius:var(--r);padding:6px 10px;font-size:12px;background:var(--surf2);color:var(--text);outline:none}
.gs-acp-search:focus{border-color:var(--acc)}
.gs-acp-scroll{overflow-y:auto;flex:1;padding:8px 12px;display:flex;flex-direction:column;gap:4px}
.gs-acp-cat{font-size:10px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.5px;margin:8px 0 4px}
.gs-acp-cat:first-child{margin-top:0}
.gs-acp-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.gs-ctype-card{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px;border:1px solid var(--border);border-radius:var(--r);cursor:pointer;transition:all var(--ease);text-align:center}
.gs-ctype-card:hover{border-color:var(--acc);background:var(--acc-l)}
.gs-ctype-card.active{border-color:var(--acc);background:var(--acc-l);color:var(--acc-d)}
.gs-ctype-icon{font-size:18px;line-height:1}
.gs-ctype-lbl{font-size:10px;font-weight:600;color:var(--text2)}
.gs-acp-foot{border-top:1px solid var(--border);padding:10px 12px;background:var(--surf2);display:flex;flex-direction:column;gap:8px}
.gs-acp-name-row{}
.gs-acp-name-inp{width:100%;box-sizing:border-box;border:1px solid var(--border2);border-radius:var(--r);padding:7px 10px;font-size:13px;background:var(--surf);color:var(--text);outline:none}
.gs-acp-name-inp:focus{border-color:var(--acc)}
.gs-acp-extra{display:flex;flex-direction:column;gap:4px}
.gs-acp-opts{width:100%;box-sizing:border-box;border:1px solid var(--border2);border-radius:var(--r);padding:6px 8px;font-size:12px;background:var(--surf);color:var(--text);resize:vertical;font-family:inherit}
.gs-acp-actions{display:flex;justify-content:flex-end;gap:6px}

/* ── Cell type: checkbox ─────────────────────────────────────────────────────── */
.gs-cb{font-size:16px;cursor:pointer;color:var(--text3);line-height:1;padding:2px 4px;border-radius:var(--r);transition:color var(--ease)}
.gs-cb:hover{color:var(--text)}
.gs-cb.gs-cb-on{color:var(--ok)}

/* ── Cell type: rating / stars ───────────────────────────────────────────────── */
.gs-stars{display:inline-flex;gap:2px}
.gs-star{font-size:16px;color:var(--border2);cursor:pointer;transition:color var(--ease);line-height:1}
.gs-star.on{color:#f59e0b}
.gs-star:hover{color:#f59e0b}

/* ── Cell type: dropdown badge ───────────────────────────────────────────────── */
.gs-dropdown-val{display:inline-block;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:600;background:var(--surf2);border:1px solid var(--border2);color:var(--text2);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ── Cell type: link ─────────────────────────────────────────────────────────── */
.gs-link{color:var(--acc);text-decoration:none;font-size:12px;max-width:160px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gs-link:hover{text-decoration:underline}

/* ── Cell type: formula / autonumber ─────────────────────────────────────────── */
.gs-formula-val{color:var(--acc-d);font-weight:600}
.gs-auto-num{color:var(--text3);font-weight:600}
.mb-trow{display:flex;align-items:center;gap:10px;padding:10px 14px;cursor:pointer;transition:background var(--ease);border-bottom:1px solid var(--border)}
.mb-trow:last-child{border-bottom:none}
.mb-trow:hover{background:var(--surf2)}
.mb-tinfo{flex:1;min-width:0}
.mb-ttitle{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:3px}
.mb-tmeta{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.mb-proj{font-size:11px;color:var(--text3);max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mb-tright{display:flex;align-items:center;gap:8px;flex-shrink:0}
.mb-due{font-size:11px;font-weight:600;color:var(--text3);white-space:nowrap}
.mb-due.over{color:#ef4444}
.mb-empty{padding:14px 16px;font-size:12px;color:var(--text3);font-style:italic}
.mb-qstatus{width:9px;height:9px;border-radius:50%;flex-shrink:0;margin:0 3px}
.mb-quickadd{display:flex;align-items:center;gap:10px;background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 16px;margin-bottom:16px;box-shadow:var(--sh);transition:border-color .15s}
.mb-quickadd:focus-within{border-color:var(--acc);box-shadow:0 0 0 2px var(--acc-l)}
.mb-quickadd-plus{font-size:20px;color:var(--acc);font-weight:600;line-height:1;flex-shrink:0}
.mb-quickadd-inp{flex:1;border:none;background:none;font-size:14px;color:var(--text);outline:none;font-family:inherit}
.mb-quickadd-inp::placeholder{color:var(--text3)}
.mb-allclear{text-align:center;padding:40px 20px;font-size:14px;color:var(--text2)}
.mb-link{color:var(--acc);cursor:pointer;font-weight:600}
.mb-link:hover{text-decoration:underline}
/* ── Reports page ────────────────────────────────────────────────────────── */
.rpt-stat-row{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}
.rpt-stat{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:14px 18px;min-width:90px;flex:1;box-shadow:var(--sh)}
.rpt-stat.accent{border-color:var(--acc-l);background:var(--acc-l)}
.rpt-stat-val{font-size:22px;font-weight:700;color:var(--acc);line-height:1}
.rpt-stat.accent .rpt-stat-val{color:var(--acc-d)}
.rpt-stat-lbl{font-size:11px;color:var(--text3);margin-top:4px;text-transform:uppercase;letter-spacing:.04em}
.rpt-table-wrap{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);overflow-x:auto;box-shadow:var(--sh);margin-bottom:4px}
.rpt-table{width:100%;border-collapse:collapse;min-width:560px}
.rpt-table thead tr{background:var(--surf2);border-bottom:2px solid var(--border)}
.rpt-table th{padding:8px 14px;font-size:10px;font-weight:700;color:var(--text3);text-transform:uppercase;letter-spacing:.05em;text-align:left;white-space:nowrap}
.rpt-table td{padding:10px 14px;font-size:12px;border-bottom:1px solid var(--border);vertical-align:middle}
.rpt-table tbody tr:last-child td{border-bottom:none}
.rpt-table tbody tr:hover td{background:var(--surf2)}
.rpt-chart-card{background:var(--surf);border:1px solid var(--border);border-radius:var(--r-lg);padding:18px;box-shadow:var(--sh)}
.rpt-chart-title{font-size:13px;font-weight:600;margin-bottom:12px;color:var(--text)}

/* ── Keyboard shortcuts overlay ──────────────────────────────────────────── */
.shortcuts-overlay{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:400;display:flex;align-items:center;justify-content:center}
.shortcuts-box{background:var(--surf);border-radius:var(--r-xl);padding:24px;width:420px;max-width:95vw;box-shadow:var(--sh-lg);border:1px solid var(--border)}
.shortcuts-box h3{font-size:16px;font-weight:600;margin-bottom:16px;display:flex;align-items:center;justify-content:space-between}
.shortcut-row{display:flex;align-items:center;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--border);font-size:13px}
.shortcut-row:last-child{border-bottom:none}
.shortcut-key{display:inline-flex;gap:4px}
.shortcut-key kbd{background:var(--surf2);border:1px solid var(--border2);border-radius:5px;padding:2px 7px;font-size:11px;font-family:inherit;font-weight:600;box-shadow:0 1px 0 var(--border2)}

/* ── Column resize handle ────────────────────────────────────────────────── */
.gs-col-resizer{position:absolute;top:0;right:0;width:5px;height:100%;cursor:col-resize;z-index:2;user-select:none}
.gs-col-resizer:hover,.gs-col-resizer:active{background:var(--acc);opacity:.5}
/* position:relative needed for resize handle; .gs-th.gs-th-sticky (2 classes = higher specificity) wins over .gs-th (1 class) */
.gs-th{position:relative}
.gs-th.gs-th-sticky{position:sticky}
/* ── Sort clear button ───────────────────────────────────────────────────── */
.gs-sort-clr{margin-left:3px;font-size:9px;color:var(--text3);cursor:pointer;vertical-align:middle;opacity:.7;line-height:1}
.gs-sort-clr:hover{color:var(--err);opacity:1}

/* ── Row drag & drop ─────────────────────────────────────────────────────── */
.gs-drag-handle{cursor:grab;color:var(--text3);font-size:13px;line-height:1;padding:1px 3px;border-radius:3px;user-select:none;opacity:0;transition:opacity .12s;flex-shrink:0}
.gs-drag-handle:active{cursor:grabbing}
.gs-row:hover .gs-drag-handle{opacity:1}
.gs-td-rn{display:flex;align-items:center;gap:2px}
.gs-dragging{opacity:.3;background:var(--acc-l)!important}
.gs-drop-line{position:fixed;height:2px;background:var(--acc);pointer-events:none;z-index:9999;border-radius:2px;display:none}
.gs-drop-line::before{content:'';position:absolute;left:-4px;top:-3px;width:8px;height:8px;border-radius:50%;background:var(--acc)}

/* ── Report admin hours input ────────────────────────────────────────────── */
.rpt-admin-inp{width:52px;padding:3px 6px;border:1px solid var(--border2);border-radius:4px;font-size:12px;font-weight:600;background:var(--surf2);color:var(--text);text-align:center;transition:border-color .15s}
.rpt-admin-inp:hover{border-color:var(--acc-d)}
.rpt-admin-inp:focus{outline:none;border-color:var(--acc);background:var(--surf);box-shadow:0 0 0 2px var(--acc-t)}
.rpt-admin-info{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--info-l);border:1px solid #bfdbfe;border-radius:var(--r);font-size:12px;color:#1e40af;margin-bottom:14px}

/* ── CSV import modal ────────────────────────────────────────────────────── */
.gs-import-dropzone{display:flex;align-items:center;gap:14px;padding:18px 20px;border:2px dashed var(--border2);border-radius:var(--r-lg);cursor:pointer;transition:border-color .15s,background .15s;background:var(--surf2)}
.gs-import-dropzone:hover,.gs-import-dropzone.drag-over{border-color:var(--acc);background:var(--acc-l)}
.gs-import-divider{display:flex;align-items:center;gap:10px;margin:16px 0;color:var(--text3);font-size:12px}
.gs-import-divider::before,.gs-import-divider::after{content:'';flex:1;height:1px;background:var(--border)}

/* ── Collapse toggle ─────────────────────────────────────────────────────── */
.gs-col-tog{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;font-size:10px;cursor:pointer;border-radius:3px;color:var(--text2);flex-shrink:0;user-select:none;margin-right:2px;transition:background .1s,color .1s}
.gs-col-tog:hover{background:var(--border2);color:var(--text)}
.gs-col-tog-ph{cursor:default;pointer-events:none;opacity:0}

/* ── Rich text toolbar ───────────────────────────────────────────────────── */
.gs-rt-bar{position:fixed;z-index:9999;display:flex;align-items:center;gap:2px;padding:4px 6px;background:var(--surf);border:1px solid var(--border2);border-radius:var(--r);box-shadow:0 4px 16px rgba(0,0,0,.16)}
.gs-rt-btn{padding:2px 7px;border:none;border-radius:3px;background:transparent;cursor:pointer;font-size:13px;color:var(--text);line-height:1.4;transition:background .1s}
.gs-rt-btn:hover{background:var(--surf2)}
.gs-rt-clr{font-size:11px;color:var(--text3)}
.gs-rt-sz{font-size:12px;padding:2px 4px;border:1px solid var(--border2);border-radius:3px;background:var(--surf2);color:var(--text);cursor:pointer}
.gs-rt-wrap{display:block;width:100%}
.gs-rt-edit{outline:none;min-height:20px;width:100%;padding:0;white-space:pre-wrap;word-break:break-word}

/* ── Import hub ──────────────────────────────────────────────────────────── */
.imp-hub-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--border2);border-radius:var(--r-lg);cursor:pointer;transition:border-color .15s,background .15s}
.imp-hub-card:hover{border-color:var(--acc);background:var(--acc-l)}
.imp-hub-disabled{opacity:.5;cursor:default}
.imp-hub-disabled:hover{border-color:var(--border2);background:transparent}
.imp-hub-icon{width:40px;height:40px;border-radius:10px;background:var(--surf2);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0}
.imp-hub-title{font-size:14px;font-weight:600;margin-bottom:2px}
.imp-hub-desc{font-size:12px;color:var(--text3)}

/* ── Smartsheet browser ──────────────────────────────────────────────────── */
.ss-group-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text3);padding:10px 8px 4px}
.ss-sheet-row{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--r);cursor:pointer;transition:background .1s}
.ss-sheet-row:hover{background:var(--surf2)}
.ss-map-grid{display:grid;grid-template-columns:140px 1fr;gap:6px 10px;align-items:center}
.ss-map-lbl{font-size:12px;color:var(--text2);text-align:right}
.ss-map-sel{font-size:12px;padding:4px 6px;border:1px solid var(--border2);border-radius:4px;background:var(--surf2);color:var(--text);width:100%}

/* ── Projects hub ────────────────────────────────────────────────────────── */
.ph-search{padding:6px 10px;border:1px solid var(--border2);border-radius:var(--r);font-size:13px;background:var(--surf2);color:var(--text);min-width:180px;outline:none;transition:border-color .15s}
.ph-search:focus{border-color:var(--acc);background:var(--surf)}
.ph-sel{padding:6px 8px;border:1px solid var(--border2);border-radius:var(--r);font-size:12px;background:var(--surf2);color:var(--text);cursor:pointer;outline:none}
.ph-stat-card{background:var(--surf);border:1px solid var(--border2);border-radius:var(--r-lg);padding:14px 18px;min-width:110px;box-shadow:var(--sh)}
.ph-stat-num{font-size:24px;font-weight:700;color:var(--text);line-height:1.1}
.ph-stat-lbl{font-size:11px;color:var(--text3);margin-top:3px;font-weight:500}
/* ensure proj-card has consistent min height */
.proj-card{min-height:170px}
.proj-card-done{opacity:.75}
.proj-card-done:hover{opacity:1}

/* ── Done section ────────────────────────────────────────────────────────── */
.ph-done-section{margin-top:32px;border-top:1px solid var(--border2);padding-top:16px}
.ph-done-hdr{display:flex;align-items:center;gap:8px;cursor:pointer;user-select:none;font-size:14px;font-weight:600;color:var(--text2);padding:6px 4px;border-radius:var(--r);transition:background .1s}
.ph-done-hdr:hover{background:var(--surf2)}
.ph-done-arrow{font-size:10px;transition:transform .2s;display:inline-block}
.ph-done-cnt{background:var(--surf2);border:1px solid var(--border2);border-radius:99px;font-size:11px;padding:1px 7px;color:var(--text3)}
.ph-done-body{display:none;margin-top:12px}
.ph-done-open .ph-done-arrow{transform:rotate(90deg)}
.ph-done-open .ph-done-body{display:block}

/* ── Multi-assignee picker ───────────────────────────────────────────────── */
.gs-asgn-panel{position:fixed;z-index:500;background:var(--surf);border:1px solid var(--border2);border-radius:var(--r-lg);box-shadow:var(--sh-lg);padding:4px;min-width:190px;max-height:300px;overflow-y:auto}
.gs-asgn-hdr{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text3);padding:6px 8px 4px}
.gs-asgn-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--r);cursor:pointer;font-size:13px;transition:background .1s}
.gs-asgn-row:hover{background:var(--surf2)}
.gs-asgn-row input[type=checkbox]{cursor:pointer;width:15px;height:15px;accent-color:var(--acc);flex-shrink:0}
.gs-asgn-name{font-weight:500;white-space:nowrap}

/* ── Column drag reorder ─────────────────────────────────────────────────── */
.gs-col-dragging{opacity:.4;cursor:grabbing!important}
.gs-col-drag-over{border-left:3px solid var(--acc)!important;background:var(--acc-l)}

/* ── Find & Replace highlight ────────────────────────────────────────────── */
.gs-fr-hl>td{background:#fef9c3!important}
.dark .gs-fr-hl>td{background:#422006!important}

/* ══════════════════════════════════════════════════════════════════════════════
   Responsive — tablet & mobile
   The app was desktop-only (a fixed 240px sidebar beside the content). Below 769px
   the sidebar becomes an off-canvas overlay driven by the existing hamburger, the
   two-column grids collapse to one, and horizontal padding tightens.
   NOTE: many grids are declared via INLINE style attributes in app.js, so the
   single-column overrides below must target [style*=...] with !important to win.
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Tablet ─────────────────────────────────────────────────────────────────── */
@media (max-width:1024px) and (min-width:769px){
  .content{padding:18px}
  .topbar{padding:0 14px}
}

/* ── Mobile ─────────────────────────────────────────────────────────────────── */
@media (max-width:768px){
  /* sidebar -> off-canvas drawer */
  .sidebar{position:fixed;top:0;left:0;bottom:0;z-index:60;width:min(82vw,var(--sb-w));
           transform:translateX(-100%);transition:transform .22s cubic-bezier(.4,0,.2,1);
           box-shadow:4px 0 28px rgba(0,0,0,.35)}
  .sidebar.mobile-open{transform:translateX(0)}
  .sb-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:59}

  /* reclaim horizontal space */
  .content{padding:14px}
  .topbar{padding:0 10px;gap:8px}
  .page-title{font-size:15px}

  /* one column everywhere (class-based grids) */
  .widget-grid,.mb-grid,.proj-grid{grid-template-columns:minmax(0,1fr)}
  .gs-acp-grid{grid-template-columns:repeat(2,minmax(0,1fr))}

  /* one column for the inline-styled grids in app.js */
  [style*="minmax(0,1fr) minmax(0,1fr)"]{grid-template-columns:minmax(0,1fr)!important}
  [style*="repeat(2,minmax(0,1fr))"]{grid-template-columns:minmax(0,1fr)!important}
  [style*="repeat(3,minmax(0,1fr))"]{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  [style*="repeat(4,minmax(0,1fr))"]{grid-template-columns:repeat(2,minmax(0,1fr))!important}

  /* tab bars and filter rows scroll instead of wrapping into a tall stack */
  .rt-tabs{overflow-x:auto;flex-wrap:nowrap;scrollbar-width:thin}
  .rt-tabs::-webkit-scrollbar{height:4px}
  .rt-tab{flex-shrink:0}

  /* overlays go near-fullscreen */
  .drawer{width:100vw;max-width:100vw}
  .modal-box{width:calc(100vw - 20px);max-width:calc(100vw - 20px);max-height:88vh}
  .search-inner{width:calc(100vw - 20px)}

  /* stat cards: two-up instead of one very wide card per row */
  .ph-stat-card,.rpt-stat{flex:1 1 44%;min-width:0}
  .rt-report-card{min-width:0}

  /* tighter chart cards so the ring still has room */
  .rpt-chart-card{padding:12px}
}

/* ── Small phones ───────────────────────────────────────────────────────────── */
@media (max-width:430px){
  .content{padding:11px}
  .ph-stat-card,.rpt-stat{flex:1 1 100%}
  .login-card{padding:26px 20px}
}
