/* ═══════════════════════════════════════════════════════════════════
   ORBIT BY PARAGON — DESIGN SYSTEM
   Pure white · ink black · Orbit blue accent
   Pill-based UI, compact data rows, warm restrained palette
═══════════════════════════════════════════════════════════════════ */

@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');

@font-face {
  font-family: 'PP Supply Mono';
  src: url('PPSupplyMono-Regular.woff2') format('woff2');
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}

:root{
  --paper:#ffffff;
  --ink:#0b0e19;
  --ink-2:#3a3a3a;
  --ink-3:#777777;
  --ink-4:#b0b0b0;
  --line:#e9e9e9;
  --line-soft:#f3f3f3;
  --chip-bg:#f5f5f5;
  --chip-bg-hover:#eaeaea;
  --warm-grey:#f5f3ee;
  --accent:#313edf;
  --accent-soft:#eaecfd;
  --accent-pale:#f4f5fe;
  --accent-deep:#1f29a8;
  --accent-glow:rgba(49,62,223,0.18);
  --warn:#E85D35;
  --warn-soft:#fef1ea;
  --good:#4C8A63;
  --good-soft:#e8f1eb;
  --info:#3D6A8B;
  --urgent:#D63C2A;          /* Subtle red used only for urgency markers (left border on chips). */
  --info-soft:#e9eff4;
}

html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:14px;}
body{font-family:'Inter',-apple-system,BlinkMacSystemFont,sans-serif;font-feature-settings:"ss01","cv11";letter-spacing:-.011em;background:var(--paper);color:var(--ink);min-height:100vh;}
button,input,select,textarea{font-family:inherit;letter-spacing:-.011em;}

/* HEADER */
.hdr{padding:20px 24px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:40px;}
.brand-pill{display:inline-flex;align-items:center;gap:6px;padding:6px 14px 6px 6px;background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);color:var(--paper);border-radius:100px;font-size:13px;font-weight:500;letter-spacing:-.01em;}
.brand-pill .mark{width:22px;height:22px;border-radius:50%;background:#0a0a0a;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.brand-pill .mark svg{width:14px;height:14px;}
.nav-center{display:flex;justify-content:center;}
.pill-nav{display:inline-flex;gap:2px;}
.pill-nav button{border:none;background:transparent;cursor:pointer;padding:7px 14px;border-radius:100px;font-size:13px;font-weight:500;color:var(--ink-2);transition:background .12s,color .12s;}
.pill-nav button:hover{background:var(--chip-bg);}
.pill-nav button.active{background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);color:var(--paper);box-shadow:0 1px 3px rgba(11,14,25,0.25);}
.hdr-right{display:flex;align-items:center;gap:8px;}
.logout-btn,.who-pill{border:none;background:transparent;cursor:pointer;font-size:13px;font-weight:500;color:var(--ink-2);padding:7px 14px;border-radius:100px;transition:background .12s;display:inline-flex;align-items:center;gap:8px;}
.logout-btn:hover,.who-pill:hover{background:var(--chip-bg);}

/* Global .hidden utility — used by JS to toggle visibility of elements
   without re-rendering. Several element-specific .X.hidden rules also exist
   below (.who-bar.hidden, .login-overlay.hidden, .login-stage.hidden,
   .page-title-meta.hidden), all of which set display:none, so this rule
   is consistent with them; it just ensures elements that aren't covered
   by a specific rule (e.g. .fd-completed-list) actually hide. */
.hidden{display:none !important;}

/* Who Am I banner */
.who-bar{padding:10px 24px;background:var(--warn-soft);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px;font-size:13px;color:var(--warn);letter-spacing:-.005em;}
.who-bar.hidden{display:none;}
.who-bar select{padding:5px 10px;border:1px solid var(--warn);background:var(--paper);border-radius:100px;font-size:13px;color:var(--ink);outline:none;cursor:pointer;}

/* PAGE */
.page{display:none;}
.page.active{display:block;}
.layout-with-sidebar{display:grid;grid-template-columns:240px 1fr;gap:0;padding:8px 24px 64px;}
.layout-full{padding:8px 24px 64px;}
.page-head{display:flex;align-items:baseline;justify-content:space-between;margin:24px 0 20px;gap:24px;flex-wrap:wrap;}
.page-title{font-size:36px;font-weight:600;letter-spacing:-.028em;}
.page-subtitle{font-size:14px;color:var(--ink-3);margin:-8px 0 20px;letter-spacing:-.005em;}

/* SIDEBAR */
.sidebar{padding:32px 24px 0 0;border-right:1px solid var(--line);margin-right:32px;position:sticky;top:0;height:calc(100vh - 20px);overflow-y:auto;}
.sb-section{margin-bottom:28px;}
.sb-label{font-size:11px;font-weight:600;color:var(--ink-4);text-transform:uppercase;letter-spacing:.08em;padding:0 10px;margin-bottom:8px;}
.sb-btn{display:flex;align-items:center;gap:10px;width:100%;padding:7px 10px;border:none;background:transparent;cursor:pointer;border-radius:8px;font-family:inherit;font-size:13px;font-weight:500;color:var(--ink-2);letter-spacing:-.011em;text-align:left;transition:background .1s,color .1s;margin-bottom:2px;}
.sb-btn:hover{background:var(--chip-bg);color:var(--ink);}
.sb-btn.active{background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);color:var(--paper);box-shadow:0 1px 3px rgba(11,14,25,0.25);}
.sb-btn.active .sb-count{background:rgba(255,255,255,.18);color:var(--paper);}
.sb-btn svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:1.75;flex-shrink:0;}
.sb-btn .sb-text{flex:1;}
.sb-count{font-size:11px;font-weight:600;padding:2px 8px;background:var(--chip-bg);color:var(--ink-3);border-radius:100px;font-variant-numeric:tabular-nums;min-width:22px;text-align:center;}
.sb-btn:hover:not(.active) .sb-count{background:var(--paper);}
.sb-divider{height:1px;background:var(--line);margin:20px 0 24px;}
.sb-avatar{width:22px;height:22px;border-radius:50%;color:var(--paper);font-size:9px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0;}

/* STATS */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border:1px solid var(--line);border-radius:16px;background:var(--paper);margin-bottom:20px;overflow:hidden;}
.stat{padding:24px 22px 22px;border-right:1px solid var(--line);cursor:pointer;transition:background .12s;position:relative;overflow:hidden;}
.stat:last-child{border-right:none;}
.stat:hover{background:#fafafa;}
.stat.active{
  background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 55%, var(--ink) 100%);
  color:#fff;
  border-right-color:var(--ink);
}
.stat.active + .stat{border-left:none;}
.stat.active .stat-val{color:#fff;}
.stat.active .stat-val .unit{color:rgba(255,255,255,.55);}
.stat.active .stat-lbl{color:rgba(255,255,255,.55);}
.stat.active .stat-sub{color:rgba(255,255,255,.65);}
.stat.active .stat-lbl{color:rgba(255,255,255,.65);}
.stat.active .stat-sub{color:rgba(255,255,255,.75);}
.stat-lbl{
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:10px;color:var(--ink-3);font-weight:400;
  margin-bottom:18px;display:flex;align-items:center;gap:8px;
  letter-spacing:.16em;text-transform:uppercase;
}
.stat-lbl .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;}
.stat-lbl .dot.all{background:var(--ink-3);}
.stat-lbl .dot.ip{background:var(--info);}
.stat-lbl .dot.due{background:var(--warn);}
.stat-lbl .dot.co{background:var(--good);}
.stat-lbl .dot.pending{background:var(--warn);}
.stat.active .stat-lbl .dot{background:var(--paper);}
.stat-val{font-size:48px;font-weight:600;letter-spacing:-.04em;line-height:1;font-variant-numeric:tabular-nums;color:var(--ink);}
.stat-val .unit{font-size:48px;font-weight:600;color:var(--ink-3);margin-left:1px;letter-spacing:-.04em;}
.stat-sub{font-size:11.5px;color:var(--ink-3);margin-top:10px;letter-spacing:-.005em;}
.stat-sub .up{color:var(--good);font-weight:500;}
.stat-sub .down{color:var(--warn);font-weight:500;}
.stat.warm-grey{background:var(--warm-grey);}
.stat.warn{background:var(--warn-soft);}
.stat.warn .stat-lbl{color:var(--warn);opacity:.75;}
.stat.warn .stat-val{color:var(--ink);}
.stat.warn .stat-sub{color:var(--warn);opacity:.75;}

/* TOOLBAR */
.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px;}
.toolbar-right{margin-left:auto;display:flex;align-items:center;gap:8px;}
.search{position:relative;display:flex;align-items:center;flex:1;max-width:380px;}
.search input{height:36px;padding:0 12px 0 36px;border:1px solid var(--line);background:var(--paper);border-radius:100px;font-size:13px;width:100%;color:var(--ink);outline:none;transition:border-color .12s,background .12s;}
.search input::placeholder{color:var(--ink-4);}
.search input:hover{border-color:var(--ink-4);}
.search input:focus{border-color:var(--ink);}
.search svg{position:absolute;left:13px;width:14px;height:14px;stroke:var(--ink-3);fill:none;stroke-width:2;}
.pill-select{height:36px;padding:0 36px 0 14px;border:1px solid var(--line);background:var(--paper);border-radius:100px;font-size:13px;font-weight:500;color:var(--ink);cursor:pointer;outline:none;appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23777' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;transition:border-color .12s;}
.pill-select:hover{border-color:var(--ink-4);}
.pill-btn{display:inline-flex;align-items:center;gap:6px;height:36px;padding:0 16px;border:1px solid var(--line);background:var(--paper);border-radius:100px;font-size:13px;font-weight:500;color:var(--ink);cursor:pointer;transition:background .12s,border-color .12s;}
.pill-btn:hover{background:var(--chip-bg);}
.pill-btn svg{width:13px;height:13px;stroke:currentColor;fill:none;stroke-width:2;}
.pill-btn.dark{background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);color:var(--paper);box-shadow:0 1px 3px rgba(11,14,25,0.25);border-color:var(--ink);}
.pill-btn.dark:hover{background:#000;}
.pill-btn.dark svg{stroke:var(--paper);}
.pill-btn.muted{color:var(--ink-3);}
.pill-btn.muted:hover{color:var(--ink);}

/* Sub-tabs */
.subtabs{display:inline-flex;gap:2px;background:var(--chip-bg);padding:3px;border-radius:100px;}
.subtabs button{border:none;background:transparent;cursor:pointer;padding:6px 14px;border-radius:100px;font-size:13px;font-weight:500;color:var(--ink-3);transition:all .12s;}
.subtabs button:hover{color:var(--ink);}
.subtabs button.active{background:var(--paper);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.06);}

/* Week / Month nav */
.weeknav,.monthnav{display:inline-flex;align-items:center;gap:2px;background:var(--chip-bg);border-radius:100px;padding:3px;}
.weeknav .arrow-btn,.monthnav .arrow-btn{border:none;background:transparent;cursor:pointer;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--ink-2);font-size:15px;line-height:1;transition:background .12s,color .12s;}
.weeknav .arrow-btn:hover,.monthnav .arrow-btn:hover{background:var(--paper);color:var(--ink);}
.weeknav .current,.monthnav .current{font-size:14px;font-weight:500;color:var(--ink);padding:0 10px;min-width:130px;text-align:center;letter-spacing:-.01em;}
.weeknav .today-btn,.monthnav .today-btn{padding:0 12px;height:28px;border-radius:100px;font-size:12px;font-weight:500;color:var(--ink-3);background:transparent;border:none;cursor:pointer;transition:background .12s,color .12s;}
.weeknav .today-btn:hover,.monthnav .today-btn:hover{background:var(--paper);color:var(--ink);}

/* CARDS & PROJ TABLES */
.card{background:var(--paper);border:1px solid var(--line);border-radius:16px;overflow:hidden;}
.proj-head,.proj-row{display:grid;grid-template-columns:minmax(220px,1.4fr) 130px 110px minmax(240px,1.8fr) 110px 90px 130px 44px;gap:16px;align-items:center;}
.proj-head.modal,.proj-row.modal{grid-template-columns:minmax(200px,1.2fr) 130px 110px minmax(220px,1.6fr) 110px 110px 90px 130px 44px;}
.proj-head{padding:12px 20px;background:var(--line-soft);border-bottom:1px solid var(--line);font-size:11px;font-weight:600;color:var(--ink-3);letter-spacing:.02em;text-transform:uppercase;}
.proj-head button{background:none;border:none;cursor:pointer;font:inherit;color:inherit;padding:0;display:inline-flex;align-items:center;gap:4px;letter-spacing:inherit;text-transform:inherit;}
.proj-head button:hover{color:var(--ink);}
.sort-arrow{font-size:9px;opacity:.5;}
.proj-row{padding:14px 20px;border-bottom:1px solid var(--line-soft);transition:background .08s;cursor:pointer;}
.proj-row:last-child{border-bottom:none;}
.proj-row:hover{background:#fafafa;}
.proj-cell-inner{display:flex;flex-direction:column;gap:4px;min-width:0;}
.proj-name{font-size:15px;font-weight:500;letter-spacing:-.015em;line-height:1.3;}
.proj-meta{font-size:12px;color:var(--ink-3);letter-spacing:-.005em;}
.proj-meta .sep{margin:0 6px;color:var(--ink-4);}

/* Status / upload / invoice */
.status-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:100px;font-size:12px;font-weight:600;letter-spacing:-.005em;white-space:nowrap;}
.status-pill::before{content:'';width:6px;height:6px;border-radius:50%;flex-shrink:0;}
.status-pill.ip{background:var(--info-soft);color:var(--info);}
.status-pill.ip::before{background:var(--info);}
.status-pill.co{background:var(--good-soft);color:var(--good);}
.status-pill.co::before{background:var(--good);}
.status-pill.due{background:var(--warn-soft);color:var(--warn);}
.status-pill.due::before{background:var(--warn);}
.status-pill.ar{background:var(--chip-bg);color:var(--ink-3);}
.status-pill.ar::before{background:var(--ink-3);}
.status-pill.todo{background:var(--chip-bg);color:var(--ink-3);}
.status-pill.todo::before{background:var(--ink-3);}
.status-pill.hold{background:var(--warn-soft);color:var(--warn);}
.status-pill.hold::before{background:var(--warn);}
.status-pill.tbb{background:#efeafc;color:#6b52c2;}
.status-pill.tbb::before{background:#6b52c2;}
.retainer-pill{display:inline-flex;padding:2px 8px;border-radius:100px;background:var(--warn-soft);color:var(--warn);font-size:10px;font-weight:600;letter-spacing:.02em;margin-left:8px;vertical-align:middle;}
.upload-pill{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:500;letter-spacing:-.005em;white-space:nowrap;}
.upload-pill::before{content:'';width:5px;height:5px;border-radius:50%;flex-shrink:0;}
.upload-pill.pending{color:var(--warn);}
.upload-pill.pending::before{background:var(--warn);}
.upload-pill.uploaded{color:var(--info);}
.upload-pill.uploaded::before{background:var(--info);}
.upload-pill.live{color:var(--good);}
.upload-pill.live::before{background:var(--good);}
.upload-pill.na{color:var(--ink-4);}
.upload-pill.na::before{background:var(--ink-4);}
.invoice-state{font-size:12px;color:var(--ink-2);letter-spacing:-.005em;white-space:nowrap;}
.invoice-state.ready{color:var(--warn);font-weight:500;}
.invoice-state.invoiced{color:var(--good);}
.invoice-state.awaiting{color:var(--ink-3);}
.invoice-state.none{color:var(--ink-4);}

/* Team avatars */
.team-avatars{display:flex;align-items:center;}
.team-avatars .avatar{width:24px;height:24px;border-radius:50%;background:var(--ink);color:var(--paper);font-size:10px;font-weight:600;display:flex;align-items:center;justify-content:center;border:2px solid var(--paper);margin-left:-6px;flex-shrink:0;}
.team-avatars .avatar:first-child{margin-left:0;}
.team-avatars .avatar.more{background:var(--chip-bg);color:var(--ink-3);font-size:10px;}

/* Next steps */
.next-steps{font-size:13px;color:var(--ink-2);letter-spacing:-.005em;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.next-steps .muted{color:var(--ink-4);}
.next-steps .who{color:var(--ink-3);font-weight:500;}

/* Deliverables dots */
.delv{display:flex;align-items:center;gap:4px;flex-wrap:wrap;}
.delv .dot{width:8px;height:8px;border-radius:50%;background:var(--line);flex-shrink:0;}
.delv .dot.done{background:var(--ink);}
.delv.all-done .dot.done{background:var(--good);}
.delv .count{margin-left:6px;font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums;letter-spacing:-.005em;white-space:nowrap;}

/* Due date */
.due-date{font-size:12px;color:var(--ink-2);font-variant-numeric:tabular-nums;letter-spacing:-.005em;white-space:nowrap;}
.due-date.overdue{color:var(--accent);font-weight:500;}
.due-date.soon{color:var(--warn);font-weight:500;}

/* Row chevron */
.row-chev{color:var(--ink-4);font-size:18px;text-align:center;opacity:0;transition:opacity .1s,color .1s;}
.proj-row:hover .row-chev{opacity:1;color:var(--ink-3);}

/* Avatar — unified Orbit blue (initials differentiate, no per-person colour) */
/* Base rule for standalone avatars (sidebar, finance team list, etc.) */
.avatar{
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--accent);color:var(--paper);
  border-radius:50%;
  font-family:'PP Supply Mono', ui-monospace, monospace;
  letter-spacing:.04em;font-weight:600;
  flex-shrink:0;
}
/* Subtle tonal variation by stack depth in team-avatars overlap (reads as one brand colour) */
.team-avatars .avatar:nth-child(2){background:var(--accent-deep);}
.team-avatars .avatar:nth-child(3){background:#0f1670;}
.team-avatars .avatar:nth-child(4){background:#070a48;}
.team-avatars .avatar.more{background:var(--chip-bg);color:var(--ink-3);}

/* Empty state */
.empty-state{padding:60px 24px;text-align:center;color:var(--ink-3);}
.empty-state .t{font-size:15px;font-weight:500;color:var(--ink-2);margin-bottom:4px;}
.empty-state .s{font-size:13px;color:var(--ink-4);}

/* TIME TAB */
.view{display:none;}
.view.active{display:block;}
.time-grid-head,.time-grid-row,.tg-row{display:grid;grid-template-columns:minmax(280px,1.6fr) repeat(5,1fr) 100px;}
.time-grid-head{padding:12px 0;background:var(--paper);border-bottom:1px solid var(--line);}
.time-grid-head > div{font-size:12px;font-weight:500;color:var(--ink-3);padding:0 14px;display:flex;align-items:center;gap:4px;}
.time-grid-head .num-h{justify-content:center;}
.time-grid-head .num-h .date{font-size:12px;color:var(--ink-4);font-weight:400;margin-left:4px;}
.time-grid-head .num-h .date.today{color:var(--warn);font-weight:500;}
.time-grid-head .total-h{justify-content:center;font-weight:600;color:var(--ink-2);}
.time-grid-row{border-bottom:1px solid var(--line-soft);transition:background .08s;}
.time-grid-row:last-child{border-bottom:none;}
.time-grid-row:hover{background:#fafafa;}
.time-grid-row > div, .tg-row > div{padding:14px;display:flex;align-items:center;min-height:56px;}
.t-proj-cell{font-size:14px;line-height:1.3;display:flex;align-items:center;width:100%;gap:0;}
.t-proj-cell .pinfo{flex:1;min-width:0;}
.t-proj-cell .nm{font-weight:500;}
.t-proj-cell .cl{font-size:12px;color:var(--ink-3);margin-top:2px;letter-spacing:-.005em;}
.t-proj-cell .p-del{opacity:0;background:none;border:none;cursor:pointer;color:var(--ink-4);width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:16px;line-height:1;padding:0;margin-left:10px;flex-shrink:0;transition:opacity .12s,background .12s,color .12s;}
.time-grid-row:hover .p-del{opacity:1;}
.t-proj-cell .p-del:hover{background:var(--accent-soft);color:var(--accent);}
.num-cell{justify-content:center;font-variant-numeric:tabular-nums;position:relative;}
.num-cell input{width:100%;height:32px;padding:0 8px;border:none;background:transparent;font-family:inherit;font-size:14px;text-align:center;color:var(--ink);outline:none;font-variant-numeric:tabular-nums;letter-spacing:-.015em;border-radius:6px;transition:background .08s,box-shadow .08s;}
/* Hide native spinner arrows — they crowd the number. Use up/down arrow keys to step. */
.num-cell input::-webkit-outer-spin-button,
.num-cell input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0;}
.num-cell input[type=number]{-moz-appearance:textfield;appearance:textfield;}
.num-cell input::placeholder{color:var(--ink-4);}
.num-cell input:hover{background:var(--chip-bg);}
.num-cell input:focus{background:var(--chip-bg);box-shadow:inset 0 0 0 1.5px var(--ink);}
.num-cell input.has{font-weight:500;}
.num-cell.today-col input:focus{background:var(--warn-soft);box-shadow:inset 0 0 0 1.5px var(--warn);}
.total-col{justify-content:center;font-size:14px;font-weight:600;padding-right:14px;}
.totals-row{background:var(--paper);border-top:1px solid var(--line);border-bottom:none;}
.totals-row > div{min-height:56px;}
.totals-row .total-lbl{font-size:12px;font-weight:600;color:var(--ink-2);}
.totals-row .big-total{font-size:16px;font-weight:600;letter-spacing:-.02em;}
.grid-actions{display:flex;gap:20px;align-items:center;padding:16px 14px;border-top:1px solid var(--line);background:var(--line-soft);}

/* Team view */
.team-grid-head,.team-grid-row{display:grid;grid-template-columns:minmax(220px,1.4fr) repeat(5,1fr) 90px;}
.team-cell{font-size:14px;display:flex;align-items:center;gap:10px;}
.team-cell .avatar{width:28px;height:28px;border-radius:50%;color:var(--paper);font-size:10px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.team-cell .name{font-weight:500;}
.team-cell .role{display:block;font-size:11px;color:var(--ink-3);margin-top:1px;}
.num-cell.low{color:var(--warn);font-weight:500;}

/* Reports */
.profit-head,.profit-row{display:grid;grid-template-columns:minmax(280px,2fr) 100px 130px 130px 140px;gap:20px;}
.profit-head{padding:12px 20px;background:var(--line-soft);border-bottom:1px solid var(--line);font-size:11px;font-weight:500;color:var(--ink-3);}
.profit-head > div:not(:first-child){justify-self:end;}
.profit-head button{background:none;border:none;cursor:pointer;font:inherit;color:inherit;padding:0;display:inline-flex;align-items:center;gap:4px;}
.profit-head button:hover{color:var(--ink);}
.profit-row{padding:16px 20px;border-bottom:1px solid var(--line-soft);align-items:center;}
.profit-row:last-child{border-bottom:none;}
.profit-row > div:not(:first-child):not(:last-child){justify-self:end;text-align:right;}
.pr-name{font-size:14px;font-weight:500;letter-spacing:-.015em;}
.pr-client{font-size:12px;color:var(--ink-3);margin-top:2px;}
.pr-n{font-size:13px;font-variant-numeric:tabular-nums;color:var(--ink-2);letter-spacing:-.01em;}
.pr-n.main{color:var(--ink);font-weight:500;}
.pr-m{text-align:right;}
.pr-m .mpct{font-size:11px;color:var(--ink-3);margin-top:3px;letter-spacing:-.005em;}
.margin-pill{display:inline-flex;align-items:center;padding:3px 10px;border-radius:100px;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums;}
.margin-pill.good{background:var(--good-soft);color:var(--good);}
.margin-pill.ok{background:var(--warn-soft);color:var(--warn);}
.margin-pill.bad{background:var(--accent-soft);color:var(--accent);}

/* Bar cards */
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px;}
.bar-card{background:var(--paper);border:1px solid var(--line);border-radius:16px;overflow:hidden;}
.bar-card-head{padding:18px 24px 14px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:baseline;}
.bar-card-head .t{font-size:16px;font-weight:600;letter-spacing:-.015em;}
.bar-card-head .s{font-size:12px;color:var(--ink-3);}
.bar-body{padding:6px 0;}
.bar{display:grid;grid-template-columns:180px 1fr 70px;gap:18px;padding:10px 24px;align-items:center;}
.bar-name{font-size:14px;font-weight:500;display:flex;align-items:center;gap:10px;letter-spacing:-.015em;}
.bar-name .avatar{width:26px;height:26px;font-size:10px;font-weight:600;flex-shrink:0;border-radius:50%;color:var(--paper);display:flex;align-items:center;justify-content:center;}
.bar-sub{display:block;font-size:12px;color:var(--ink-3);font-weight:400;margin-top:1px;}
.bar-wrap{position:relative;height:18px;display:flex;align-items:center;}
.bar-track{height:8px;background:var(--line-soft);border-radius:100px;overflow:hidden;width:100%;position:relative;}
.bar-fill{height:100%;background:var(--ink);border-radius:100px;transition:width .3s cubic-bezier(.4,0,.2,1);}
.bar-fill.warn{background:var(--warn);}
.bar-fill.good{background:var(--good);}
.bar-marker{position:absolute;top:-2px;bottom:-2px;width:1px;background:var(--ink-3);opacity:.35;}
.bar-val{font-size:14px;font-weight:600;text-align:right;font-variant-numeric:tabular-nums;letter-spacing:-.01em;}
.bar-hint{padding:10px 24px 14px;font-size:12px;color:var(--ink-4);display:flex;justify-content:space-between;gap:24px;border-top:1px solid var(--line-soft);}

/* WEEKLY */
.wlayout{display:grid;grid-template-columns:1fr 280px;gap:20px;align-items:start;}
.planner-card{background:var(--paper);border:1px solid var(--line);border-radius:16px;overflow:hidden;}
.pgrid{display:grid;grid-template-columns:140px repeat(5, minmax(0, 1fr));}
.pgrid-head{display:contents;}
.pgrid-head .cell{padding:14px 14px 12px;background:var(--line-soft);border-bottom:1px solid var(--line);border-right:1px solid var(--line-soft);font-size:12px;font-weight:500;color:var(--ink-3);letter-spacing:-.005em;display:flex;align-items:center;gap:6px;}
.pgrid-head .cell:last-child{border-right:none;}
.pgrid-head .day{color:var(--ink-2);font-weight:600;}
.pgrid-head .date{color:var(--ink-4);font-weight:400;}
.pgrid-head .date.today{color:var(--warn);font-weight:500;}
.prow{display:contents;}
.prow .person-cell{padding:16px 14px;border-bottom:1px solid var(--line-soft);border-right:1px solid var(--line-soft);display:flex;align-items:center;gap:10px;background:var(--paper);position:sticky;left:0;min-height:120px;}
.prow .person-cell .avatar{width:28px;height:28px;border-radius:50%;color:var(--paper);font-size:11px;font-weight:600;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.prow .person-cell .name{font-size:14px;font-weight:500;letter-spacing:-.015em;}
.prow .person-cell .role{display:block;font-size:11px;color:var(--ink-3);font-weight:400;margin-top:1px;}
.prow .day-cell{padding:10px 10px;border-bottom:1px solid var(--line-soft);border-right:1px solid var(--line-soft);min-height:120px;min-width:0;display:flex;flex-direction:column;gap:6px;transition:background .1s;cursor:pointer;position:relative;}
.prow .day-cell:hover{background:#fafafa;}
.prow .day-cell.drop-target{background:var(--info-soft);box-shadow:inset 0 0 0 1.5px var(--info);}
.prow .day-cell.today{background:#fefaf6;}
.prow .day-cell.today:hover{background:#fdf3ea;}
.pchip{background:var(--chip-bg);color:var(--ink);padding:7px 10px;border-radius:8px;font-size:12px;letter-spacing:-.005em;line-height:1.3;cursor:grab;transition:opacity .1s,background .1s;position:relative;display:flex;flex-direction:column;gap:2px;border:1px solid transparent;}
.pchip:hover{background:var(--chip-bg-hover);}
.pchip:active{cursor:grabbing;}
.pchip-top{display:flex;align-items:center;gap:6px;}
.pchip-name{font-weight:500;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink);}
.pchip-x{opacity:0;border:none;background:transparent;cursor:pointer;color:var(--ink-4);width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;line-height:1;padding:0;flex-shrink:0;transition:opacity .1s,color .1s,background .1s;}
.pchip:hover .pchip-x{opacity:1;}
.pchip-x:hover{color:var(--accent);background:var(--accent-soft);}

/* Reorder arrows — sit inside .pchip-top as first child. Hidden until chip hover.
   Width collapses to 0 when not hovered so they don't reserve flex space. */
.pchip-arrows{display:flex;flex-direction:column;gap:1px;width:0;overflow:hidden;flex-shrink:0;transition:width .1s,margin-right .1s;}
.pchip:hover .pchip-arrows{width:14px;margin-right:2px;}
.pchip-arrow{border:none;background:transparent;cursor:pointer;color:var(--ink-4);width:14px;height:11px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:8px;line-height:1;padding:0;transition:color .1s,background .1s;}
.pchip-arrow:hover{color:var(--accent);background:var(--accent-soft);}
.pchip-task{font-size:11px;color:var(--ink-3);font-weight:400;letter-spacing:0;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.pchip-task.placeholder{color:var(--ink-4);font-style:italic;opacity:0;transition:opacity .1s;}
.pchip:hover .pchip-task.placeholder{opacity:1;}
.pchip.retainer{background:var(--warn-soft);border-color:transparent;}
.pchip.retainer .pchip-name{color:var(--warn);}
.pchip.retainer .pchip-task{color:var(--warn);opacity:.75;}
.pchip.retainer:hover{background:#fce4d6;}
.pchip.retainer .pchip-x{color:var(--warn);opacity:.5;}
.pchip.retainer:hover .pchip-x{opacity:1;}

/* Modal projects — distinct teal-ish tone to differentiate from regular and retainer chips */
.pchip.modal{background:var(--info-soft);border-color:transparent;}
.pchip.modal .pchip-name{color:var(--info);}
.pchip.modal .pchip-task{color:var(--info);opacity:.75;}
.pchip.modal:hover{background:#dee6ed;}
.pchip.modal .pchip-x{color:var(--info);opacity:.5;}
.pchip.modal:hover .pchip-x{opacity:1;}

/* Completed chips — visual only, opacity and strikethrough.
   Stacks on any chip type (regular, retainer, modal) and remains fully interactive. */
.pchip.completed{opacity:.5;}
.pchip.completed .pchip-name,
.pchip.completed .pchip-task{text-decoration:line-through;}

/* Holiday chips — calm, distinct from work, with a subtle out-of-office feel.
   Clickable to toggle full ↔ half day. Half-day uses a striped pattern. */
/* When a full-day holiday is present in a cell, hide the "Drop here" hint —
   the day is fully consumed by the holiday and the cell shouldn't look like
   it's inviting more chips. Half-day holidays leave the hint visible because
   the rest of the day is still available for work. */
.day-cell:has(.pchip.holiday.full) .add-chip-hint{display:none;}

/* Holiday chips fill the cell rather than sitting as a small pill — a holiday
   day should visually consume the day, not look like a token alongside work.
   Half-day takes ~half the height, full-day stretches to fill remaining space. */
.pchip.holiday{
  background:var(--good-soft);border-color:transparent;color:var(--good);cursor:pointer;
  flex:1;
  min-height:88px;
  display:flex;flex-direction:column;justify-content:center;align-items:center;
  padding:14px 12px;
  text-align:center;
}
.pchip.holiday .pchip-top{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;position:relative;}
.pchip.holiday .pchip-name{color:var(--good);font-weight:500;font-size:13px;}
.pchip.holiday:hover{background:#d8e8df;}
.pchip.holiday .pchip-x{
  color:var(--good);opacity:0;
  position:absolute;top:0;right:0;
  transition:opacity .12s;
}
.pchip.holiday:hover .pchip-x{opacity:.6;}
.pchip.holiday .pchip-x:hover{opacity:1;}
/* Half-day: shorter, with a striped pattern indicating partial. The stripe
   pattern stays the same; the height is what changes. */
.pchip.holiday.half{
  flex:0 0 auto;
  min-height:48px;
  background:repeating-linear-gradient(135deg, var(--good-soft), var(--good-soft) 6px, #def0e4 6px, #def0e4 12px);
}

/* Holiday bank items — distinct treatment in the project bank */
.pbank-timeoff{padding:0;margin-bottom:10px;}
.pbank-timeoff-label{font-family:'PP Supply Mono', ui-monospace, monospace;font-size:10px;color:var(--ink-3);font-weight:500;letter-spacing:.16em;text-transform:uppercase;margin-bottom:6px;}
.bank-item.holiday-bank{background:var(--good-soft);border-color:transparent;}
.bank-item.holiday-bank .bank-item-name{color:var(--good);}
.bank-item.holiday-bank .bank-item-meta{color:var(--good);opacity:.7;}
.bank-item.holiday-bank:hover{background:#d8e8df;border-color:transparent;}

/* Urgent flag — quiet but unmistakable. Left border in red, regardless of chip type. */
.pchip.urgent{border-left:3px solid var(--urgent);padding-left:7px;}
.add-chip-hint{opacity:0;color:var(--ink-4);font-size:12px;border:1px dashed var(--line);border-radius:8px;padding:6px 10px;display:flex;align-items:center;justify-content:center;gap:4px;transition:opacity .1s;pointer-events:none;}
.prow .day-cell:hover .add-chip-hint{opacity:1;}
.add-chip-hint svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2;}

/* Project bank */
.pbank{background:var(--paper);border:1px solid var(--line);border-radius:16px;overflow:hidden;position:sticky;top:12px;max-height:calc(100vh - 40px);display:flex;flex-direction:column;}
.pbank-head{padding:16px 16px 12px;border-bottom:1px solid var(--line);}
.pbank-title{font-size:14px;font-weight:600;letter-spacing:-.015em;}
.pbank-sub{font-size:12px;color:var(--ink-3);margin-top:2px;}
.pbank-search{position:relative;margin:12px 16px 10px;}
.pbank-search input{width:100%;height:32px;padding:0 12px 0 32px;border:1px solid var(--line);background:var(--paper);border-radius:100px;font-size:13px;color:var(--ink);outline:none;transition:border-color .12s;}
.pbank-search input::placeholder{color:var(--ink-4);}
.pbank-search input:focus{border-color:var(--ink);}
.pbank-search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);width:13px;height:13px;stroke:var(--ink-3);fill:none;stroke-width:2;}
.pbank-filters{display:flex;gap:4px;padding:0 16px 12px;flex-wrap:wrap;}
.pbank-filters button{border:none;background:var(--chip-bg);cursor:pointer;padding:4px 10px;border-radius:100px;font-size:11px;font-weight:500;color:var(--ink-2);letter-spacing:-.005em;transition:background .1s,color .1s;}
.pbank-filters button:hover{background:var(--chip-bg-hover);}
.pbank-filters button.active{background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);color:var(--paper);box-shadow:0 1px 3px rgba(11,14,25,0.25);}
.pbank-list{flex:1;overflow-y:auto;padding:4px 10px 12px;}
.bank-item{background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:6px;cursor:grab;display:flex;flex-direction:column;gap:3px;transition:border-color .1s,background .1s,transform .08s;}
.bank-item:hover{border-color:var(--ink-4);background:#fafafa;}
.bank-item:active{cursor:grabbing;transform:scale(0.98);}
.bank-item-name{font-size:13px;font-weight:500;letter-spacing:-.01em;line-height:1.25;display:flex;align-items:center;gap:6px;}
.bank-item-meta{font-size:11px;color:var(--ink-3);letter-spacing:-.005em;}
.bank-item.retainer .bank-item-name{color:var(--warn);}
.bank-item.retainer .bank-item-meta{color:var(--warn);opacity:.7;}
.bank-item.modal .bank-item-name{color:var(--info);}
.bank-item.modal .bank-item-meta{color:var(--info);opacity:.7;}
.bank-item.urgent{border-left:3px solid var(--urgent);padding-left:10px;}

/* RETAINER */
.ret-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;}
.ret-card{background:var(--paper);border:1px solid var(--line);border-radius:16px;overflow:hidden;display:flex;flex-direction:column;}
.ret-card-head{padding:24px 28px;border-bottom:1px solid var(--line);}
.ret-card-top{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:6px;}
.ret-card-name{font-size:22px;font-weight:600;letter-spacing:-.02em;}
.ret-card-kind{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);padding:4px 10px;background:var(--chip-bg);border-radius:100px;white-space:nowrap;}
.ret-card-sub{font-size:13px;color:var(--ink-3);letter-spacing:-.005em;}
.ret-usage{padding:20px 28px;border-bottom:1px solid var(--line-soft);}
.ret-usage-top{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:14px;}
.ret-usage-num{font-size:36px;font-weight:500;letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums;}
.ret-usage-num .unit{font-size:18px;color:var(--ink-3);font-weight:500;margin-left:2px;letter-spacing:-.015em;}
.ret-usage-num.over{color:var(--warn);}
.ret-usage-sub{font-size:12px;color:var(--ink-3);text-align:right;letter-spacing:-.005em;line-height:1.4;}
.ret-usage-sub .strong{color:var(--ink);font-weight:500;}
.ret-usage-sub .up{color:var(--good);font-weight:500;}
.ret-usage-sub .down{color:var(--warn);font-weight:500;}
.alw-bar{height:6px;background:var(--line);border-radius:100px;overflow:hidden;position:relative;}
.alw-fill{height:100%;background:var(--ink);border-radius:100px;transition:width .3s cubic-bezier(.4,0,.2,1);}
.alw-fill.warn{background:var(--warn);}
.alw-fill.good{background:var(--good);}
.alw-fill.over{background:var(--accent);}
.sparkline{margin-top:14px;}
.sparkline-head{display:flex;justify-content:space-between;align-items:baseline;font-size:11px;color:var(--ink-4);margin-bottom:6px;letter-spacing:.02em;text-transform:uppercase;font-weight:500;}
.spark-bars{display:flex;align-items:flex-end;gap:5px;height:38px;}
.spark-bar{flex:1;min-width:0;background:var(--line);border-radius:2px 2px 0 0;position:relative;transition:background .1s;cursor:pointer;}
.spark-bar:hover{background:var(--ink-3);}
.spark-bar.current{background:var(--ink);}
.spark-bar.over{background:var(--warn);}
.spark-bar .tip{position:absolute;bottom:100%;left:50%;transform:translateX(-50%) translateY(-4px);background:var(--ink);color:var(--paper);font-size:11px;padding:4px 8px;border-radius:6px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .12s;font-variant-numeric:tabular-nums;}
.spark-bar:hover .tip{opacity:1;}
.spark-labels{display:flex;gap:5px;margin-top:4px;}
.spark-labels span{flex:1;text-align:center;font-size:10px;color:var(--ink-4);font-weight:500;letter-spacing:.02em;text-transform:uppercase;}
.spark-labels span.current{color:var(--ink);font-weight:600;}
.ret-tasks{flex:1;padding:6px 0;}
.ret-tasks-head{display:flex;align-items:baseline;justify-content:space-between;padding:14px 28px 8px;}
.ret-tasks-title{font-size:11px;font-weight:600;color:var(--ink-4);letter-spacing:.08em;text-transform:uppercase;}
.ret-tasks-count{font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums;}
.task-row{display:grid;grid-template-columns:110px 1fr auto auto;gap:12px;align-items:center;padding:10px 28px;border-bottom:1px solid var(--line-soft);cursor:pointer;transition:background .08s;}
.task-row:hover{background:#fafafa;}
.task-row:last-child{border-bottom:none;}
.task-status{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:100px;font-size:11px;font-weight:600;letter-spacing:-.005em;white-space:nowrap;justify-self:start;}
.task-status::before{content:'';width:6px;height:6px;border-radius:50%;flex-shrink:0;}
.task-status.todo{background:var(--chip-bg);color:var(--ink-3);}
.task-status.todo::before{background:var(--ink-3);}
.task-status.ip{background:var(--info-soft);color:var(--info);}
.task-status.ip::before{background:var(--info);}
.task-status.done{background:var(--good-soft);color:var(--good);}
.task-status.done::before{background:var(--good);}
.task-status.hold{background:var(--warn-soft);color:var(--warn);}
.task-status.hold::before{background:var(--warn);}
.task-content .task-title{font-size:14px;font-weight:500;letter-spacing:-.015em;line-height:1.3;}
.task-content .task-note{font-size:12px;color:var(--ink-3);margin-top:2px;letter-spacing:-.005em;line-height:1.35;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;}
.task-row.done .task-title{color:var(--ink-3);text-decoration:line-through;text-decoration-color:var(--ink-4);}
.task-row.done .task-note{color:var(--ink-4);}
.task-team{display:flex;align-items:center;}
.task-team .avatar{width:22px;height:22px;border-radius:50%;color:var(--paper);font-size:9px;font-weight:600;display:flex;align-items:center;justify-content:center;border:2px solid var(--paper);margin-left:-4px;flex-shrink:0;}
.task-team .avatar:first-child{margin-left:0;}
.task-hrs{font-size:12px;color:var(--ink-3);font-variant-numeric:tabular-nums;letter-spacing:-.005em;white-space:nowrap;justify-self:end;min-width:40px;text-align:right;}
.task-hrs .num{color:var(--ink);font-weight:600;}
.ret-footer{padding:14px 28px 20px;border-top:1px solid var(--line);background:var(--line-soft);display:flex;gap:10px;align-items:center;flex-wrap:wrap;}

/* SLIDE-OVER */
.overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.3);backdrop-filter:blur(3px);z-index:500;align-items:center;justify-content:flex-end;}
.overlay.open{display:flex;animation:fade .15s ease;}
@keyframes fade{from{opacity:0}to{opacity:1}}
.slideover{background:var(--paper);height:100vh;width:560px;max-width:94vw;overflow-y:auto;box-shadow:-8px 0 28px rgba(0,0,0,.12);animation:slidein .2s cubic-bezier(.4,0,.2,1);}
@keyframes slidein{from{transform:translateX(40px);opacity:0}to{transform:translateX(0);opacity:1}}
.so-header{padding:22px 28px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:flex-start;position:sticky;top:0;background:var(--paper);z-index:2;}
.so-title{font-size:20px;font-weight:600;letter-spacing:-.02em;}
.so-sub{font-size:12px;color:var(--ink-3);margin-top:2px;}
.so-close{border:none;background:transparent;cursor:pointer;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--ink-3);font-size:20px;line-height:1;transition:background .12s,color .12s;}
.so-close:hover{background:var(--chip-bg);color:var(--ink);}
.so-body{padding:24px 28px 32px;}
.fgrp{margin-bottom:18px;}
.fgrp label{display:block;font-size:12px;font-weight:500;color:var(--ink-3);margin-bottom:6px;letter-spacing:-.005em;}

/* Exclude-from-reports toggle — inline checkbox + text, overrides default block label */
.fgrp label.exclude-toggle{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--ink);font-weight:500;cursor:pointer;margin-bottom:4px;}
.fgrp label.exclude-toggle input{width:auto;margin:0;cursor:pointer;}
.fgrp input,.fgrp textarea,.fgrp select{width:100%;padding:9px 12px;border:1px solid var(--line);background:var(--paper);border-radius:8px;font-size:13px;color:var(--ink);outline:none;transition:border-color .12s;font-family:inherit;}
.fgrp input:focus,.fgrp textarea:focus,.fgrp select:focus{border-color:var(--ink);}
.fgrp textarea{min-height:80px;resize:vertical;font-family:inherit;line-height:1.45;}
.fgrp-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.chip-group{display:flex;flex-wrap:wrap;gap:6px;}
.chip-group label{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border:1px solid var(--line);border-radius:100px;font-size:12px;cursor:pointer;transition:all .1s;background:var(--paper);margin:0;color:var(--ink);}
.chip-group label:hover{background:var(--chip-bg);}
.chip-group input[type="checkbox"]{accent-color:var(--ink);width:14px;height:14px;cursor:pointer;}
.chip-group label:has(input:checked){background:var(--ink);color:var(--paper);border-color:var(--ink);}
.so-footer{padding:16px 28px;border-top:1px solid var(--line);background:var(--line-soft);position:sticky;bottom:0;display:flex;justify-content:flex-end;gap:10px;}

/* CONFIRM */
.confirm-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.3);backdrop-filter:blur(3px);z-index:600;align-items:center;justify-content:center;}
.confirm-overlay.open{display:flex;animation:fade .15s ease;}
.confirm{background:var(--paper);border-radius:14px;width:340px;max-width:94vw;overflow:hidden;box-shadow:0 20px 48px rgba(0,0,0,.18);animation:sci .18s cubic-bezier(.34,1.56,.64,1);}
@keyframes sci{from{transform:scale(.94);opacity:0}to{transform:scale(1);opacity:1}}
.confirm-body{padding:22px 22px 18px;text-align:center;}
.confirm-title{font-size:16px;font-weight:600;letter-spacing:-.02em;margin-bottom:6px;}
.confirm-msg{font-size:13px;color:var(--ink-3);line-height:1.45;}
.confirm-btns{display:flex;border-top:1px solid var(--line);}
.confirm-btn{flex:1;padding:12px;border:none;background:transparent;font-family:inherit;font-size:14px;font-weight:500;color:var(--ink-2);cursor:pointer;}
.confirm-btn:hover{background:var(--chip-bg);}
.confirm-btn.danger{color:var(--accent);font-weight:600;}
.confirm-btn+.confirm-btn{border-left:1px solid var(--line);}

/* TOAST */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--paper);padding:10px 16px;border-radius:100px;font-size:13px;font-weight:500;letter-spacing:-.01em;z-index:1000;opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;}
.toast.show{opacity:1;transform:translateX(-50%) translateY(-4px);}

/* RESPONSIVE */
@media(max-width:1100px){.wlayout{grid-template-columns:1fr;}.pbank{position:relative;max-height:none;}}
@media(max-width:960px){.layout-with-sidebar{grid-template-columns:1fr;padding:8px 20px 48px;}.sidebar{display:none;}.stats{grid-template-columns:repeat(2,1fr);}.hdr{grid-template-columns:auto auto;gap:16px;}.nav-center{display:none;}.proj-head,.proj-row{grid-template-columns:1fr auto;}.proj-head > div:not(:first-child):not(:last-child),.proj-row > div:not(:first-child):not(:last-child){display:none;}.ret-grid{grid-template-columns:1fr;}.two-col{grid-template-columns:1fr;}}

/* ═══════════════════════════════════════════════════════════════════
   UI POLISH ADDITIONS
═══════════════════════════════════════════════════════════════════ */

/* Form section headers inside slide-over */
.so-section{
  font-size:11px;font-weight:600;color:var(--ink-4);
  letter-spacing:.08em;text-transform:uppercase;
  margin:24px 0 12px;padding-bottom:8px;border-bottom:1px solid var(--line);
}
.so-section:first-child{margin-top:0;}

/* Frozen-fee warning — shows in slide-over for rolling-retainer projects
   whose locked fee no longer matches current hours logged. */
.frozen-fee-warning{
  background:var(--warn-soft);border:1px solid var(--warn);border-radius:10px;
  padding:12px 14px;margin:0 0 18px;
}
.ffw-title{font-size:13px;font-weight:600;color:var(--warn);letter-spacing:-.012em;margin-bottom:3px;}
.ffw-detail{font-size:12px;color:var(--ink-2);line-height:1.45;}

/* 3-state deliverable chip */
.chip-group.delv-group label{
  position:relative;
  display:inline-flex;align-items:center;gap:6px;
  padding:6px 12px;border:1px solid var(--line);border-radius:100px;
  font-size:12px;cursor:pointer;transition:all .1s;background:var(--paper);color:var(--ink-2);
  font-weight:500;
  user-select:none;
}
.chip-group.delv-group label:hover{background:var(--chip-bg);border-color:var(--ink-4);}
.chip-group.delv-group label.applies{
  background:var(--paper);color:var(--ink);
  border-color:var(--ink-2);border-width:1.5px;padding:5.5px 11.5px;
}
.chip-group.delv-group label.done{
  background:var(--ink);color:var(--paper);border-color:var(--ink);
}
.chip-group.delv-group label.done::before{
  content:'✓';font-size:11px;font-weight:700;margin-right:-2px;
}
.chip-group.delv-group label input{display:none;}
.delv-legend{
  font-size:11px;color:var(--ink-4);margin-top:8px;letter-spacing:-.005em;
  display:flex;gap:16px;flex-wrap:wrap;
}
.delv-legend .swatch{
  display:inline-flex;align-items:center;gap:4px;
}
.delv-legend .sw-dot{width:10px;height:10px;border-radius:50%;display:inline-block;}
.delv-legend .sw-dot.off{background:var(--paper);border:1px solid var(--line);}
.delv-legend .sw-dot.applies{background:var(--paper);border:1.5px solid var(--ink-2);}
.delv-legend .sw-dot.done{background:var(--ink);}

/* Task note popup — reuse confirm-overlay pattern but wider + with input */
.task-note-overlay{
  display:none;position:fixed;inset:0;
  background:rgba(0,0,0,.3);backdrop-filter:blur(3px);
  z-index:650;align-items:center;justify-content:center;
}
.task-note-overlay.open{display:flex;animation:fade .15s ease;}
.task-note-dialog{
  background:var(--paper);border-radius:14px;width:420px;max-width:94vw;overflow:hidden;
  box-shadow:0 20px 48px rgba(0,0,0,.18);
  animation:sci .18s cubic-bezier(.34,1.56,.64,1);
}
.task-note-dialog .tnd-head{
  padding:18px 22px 8px;
}
.task-note-dialog .tnd-title{
  font-size:14px;font-weight:600;letter-spacing:-.015em;margin-bottom:2px;
}
.task-note-dialog .tnd-sub{
  font-size:12px;color:var(--ink-3);
}
.task-note-dialog .tnd-body{padding:8px 22px 20px;}
.task-note-dialog .tnd-body input{
  width:100%;padding:10px 12px;
  border:1px solid var(--line);background:var(--paper);
  border-radius:8px;font-size:14px;color:var(--ink);outline:none;
  font-family:inherit;letter-spacing:-.011em;
}
.task-note-dialog .tnd-body input:focus{border-color:var(--ink);}
.task-note-dialog .tnd-btns{display:flex;border-top:1px solid var(--line);}
.task-note-dialog .tnd-btn{
  flex:1;padding:12px;border:none;background:transparent;
  font-family:inherit;font-size:14px;font-weight:500;color:var(--ink-2);cursor:pointer;
}
.task-note-dialog .tnd-btn:hover{background:var(--chip-bg);}
.task-note-dialog .tnd-btn.primary{color:var(--ink);font-weight:600;}
.task-note-dialog .tnd-btn+.tnd-btn{border-left:1px solid var(--line);}

/* Project picker modal (Time tab "Add another project") */
.picker-overlay{
  display:none;position:fixed;inset:0;
  background:rgba(0,0,0,.3);backdrop-filter:blur(3px);
  z-index:650;align-items:center;justify-content:center;
}
.picker-overlay.open{display:flex;animation:fade .15s ease;}
.picker-dialog{
  background:var(--paper);border-radius:14px;width:480px;max-width:94vw;max-height:70vh;
  overflow:hidden;box-shadow:0 20px 48px rgba(0,0,0,.18);
  display:flex;flex-direction:column;
  animation:sci .18s cubic-bezier(.34,1.56,.64,1);
}
.picker-head{padding:18px 22px 12px;border-bottom:1px solid var(--line);}
.picker-title{font-size:15px;font-weight:600;letter-spacing:-.015em;margin-bottom:2px;}
.picker-sub{font-size:12px;color:var(--ink-3);}
.picker-search{padding:10px 16px;border-bottom:1px solid var(--line-soft);position:relative;}
.picker-search input{
  width:100%;height:36px;padding:0 12px 0 36px;
  border:1px solid var(--line);background:var(--paper);
  border-radius:100px;font-size:13px;color:var(--ink);outline:none;
}
.picker-search input:focus{border-color:var(--ink);}
.picker-search svg{position:absolute;left:28px;top:50%;transform:translateY(-50%);width:14px;height:14px;stroke:var(--ink-3);fill:none;stroke-width:2;}
.picker-list{flex:1;overflow-y:auto;padding:6px 0;}
.picker-item{
  padding:10px 22px;cursor:pointer;transition:background .08s;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  border-bottom:1px solid var(--line-soft);
}
.picker-item:last-child{border-bottom:none;}
.picker-item:hover{background:var(--chip-bg);}
.picker-item .pi-name{font-size:13px;font-weight:500;letter-spacing:-.01em;}
.picker-item .pi-meta{font-size:11px;color:var(--ink-3);margin-top:2px;}
.picker-item .pi-tag{
  font-size:10px;font-weight:600;padding:2px 8px;
  background:var(--chip-bg);color:var(--ink-3);
  border-radius:100px;text-transform:uppercase;letter-spacing:.04em;flex-shrink:0;
}
.picker-item .pi-tag.retainer{background:var(--warn-soft);color:var(--warn);}
.picker-item .pi-tag.modal{background:var(--info-soft);color:var(--info);}
.picker-footer{padding:12px 22px;border-top:1px solid var(--line);background:var(--line-soft);display:flex;justify-content:flex-end;}

/* Who am I pill should be clickable-looking */
.logout-btn{cursor:pointer;}
.logout-btn .who-chev{font-size:10px;color:var(--ink-4);margin-left:2px;}

/* Team picker in project form — circular avatars */
.team-picker{
  display:flex;flex-wrap:wrap;gap:10px;
}
.tp-avatar{
  display:flex;flex-direction:column;align-items:center;gap:4px;
  background:transparent;border:none;cursor:pointer;padding:4px;
  font-family:inherit;letter-spacing:-.011em;
  transition:opacity .12s;
  opacity:.35;
  border-radius:8px;
}
.tp-avatar:hover{opacity:.75;}
.tp-avatar.on{opacity:1;}
.tp-avatar .avatar{
  width:40px;height:40px;border-radius:50%;
  color:var(--paper);font-size:13px;font-weight:600;
  display:flex;align-items:center;justify-content:center;
  transition:transform .12s,box-shadow .12s;
}
.tp-avatar.on .avatar{
  transform:scale(1.05);
  box-shadow:0 0 0 2px var(--paper), 0 0 0 3.5px var(--ink);
}
.tp-name{
  font-size:11px;font-weight:500;color:var(--ink-2);
}
.tp-avatar.on .tp-name{color:var(--ink);font-weight:600;}

/* Sidebar team avatar (smaller) */
.sb-avatar{
  width:20px;height:20px;border-radius:50%;
  color:var(--paper);font-size:9px;font-weight:600;
  display:flex;align-items:center;justify-content:center;flex-shrink:0;
}

/* Save confirmation flash — subtle background tint, no border, no checkmark */
.num-cell.saved-flash input{
  background:var(--good-soft) !important;
  transition:background .4s ease-out;
}
.num-cell.save-error input{
  background:var(--accent-soft) !important;
  box-shadow:inset 0 0 0 1.5px var(--accent) !important;
  transition:background .12s,box-shadow .12s;
}

/* Picker — grouped sections for active vs archived/completed */
.picker-group-label{
  font-size:10px;font-weight:600;
  letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-4);
  padding:14px 22px 6px;
  background:var(--line-soft);
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line-soft);
}
.picker-inactive .picker-item{opacity:.62;}
.picker-inactive .picker-item:hover{opacity:1;}
.picker-inactive .pi-name{color:var(--ink-2);}

/* ═══════════════════════════════════════════════════════════════════
   REPORTS — lens toggle, summary cards, sectioned tables
   ═══════════════════════════════════════════════════════════════════ */

/* Lens toggle (Operational / Financial) */
.lens-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;}
.lens-tabs{display:inline-flex;background:var(--paper);border:1px solid var(--line);border-radius:100px;padding:3px;}
.lens-tab{padding:7px 18px;font-size:12.5px;font-weight:500;color:var(--ink-3);border-radius:100px;cursor:pointer;letter-spacing:-.01em;transition:all .12s;}
.lens-tab:hover{color:var(--ink);}
.lens-tab.on{background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);color:var(--paper);box-shadow:0 1px 3px rgba(11,14,25,0.25);}
.lens-tab.on:hover{color:var(--paper);}
.period-note{font-size:12px;color:var(--ink-3);display:inline-flex;align-items:center;gap:6px;}
.period-note svg{stroke:var(--ink-3);}

/* Summary cards (4-up) */
.rep-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:24px;}
.rep-card{background:var(--paper);border-radius:12px;padding:18px 20px;border:1px solid var(--line);}
.rep-card.dark{background:var(--ink);color:var(--paper);border-color:var(--ink);}
.rep-lbl{font-size:11.5px;color:var(--ink-3);font-weight:500;margin-bottom:8px;display:flex;align-items:center;gap:6px;}
.rep-card.dark .rep-lbl{color:var(--ink-4);}
.rep-val{font-size:28px;font-weight:600;letter-spacing:-.025em;line-height:1;font-variant-numeric:tabular-nums;}
.rep-sub{font-size:11.5px;color:var(--ink-3);margin-top:8px;}
.rep-card.dark .rep-sub{color:var(--ink-4);}
.rep-trend.up{color:var(--good);}
.rep-trend.dn{color:var(--accent);}
.rep-card.dark .rep-trend.up{color:#A8E067;}
.rep-card.dark .rep-trend.dn{color:#f4a89b;}
.rep-cap-bar{margin-top:10px;height:5px;background:var(--line-soft);border-radius:100px;overflow:hidden;}
.rep-cap-fill{height:100%;background:var(--good);border-radius:100px;}
.rep-card.dark .rep-cap-bar{background:rgba(255,255,255,.1);}
.rep-card.dark .rep-cap-fill{background:var(--paper);}

/* Section card */
.rep-section{background:var(--paper);border-radius:12px;border:1px solid var(--line);margin-bottom:14px;overflow:hidden;}
.rep-section-h{padding:16px 22px 14px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);}
.rep-section-title{font-size:13px;font-weight:600;letter-spacing:-.012em;display:flex;align-items:center;gap:8px;}
.rep-badge{font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:2px 8px;border-radius:100px;color:var(--ink-3);background:var(--line-soft);}
.rep-section-meta{font-size:11.5px;color:var(--ink-3);}

/* Table */
.rep-tbl{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;table-layout:fixed;}
.rep-tbl thead th{font-size:10.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);text-align:right;padding:10px 22px 10px 0;border-bottom:1px solid var(--line);background:var(--line-soft);cursor:pointer;}
.rep-tbl thead th.sorted{color:var(--ink);}
.rep-tbl thead th:first-child{text-align:left;padding-left:22px;}
.rep-tbl tbody td{padding:14px 22px 14px 0;border-bottom:1px solid var(--line-soft);font-size:13px;text-align:right;vertical-align:middle;}
.rep-tbl tbody td:first-child{padding-left:22px;text-align:left;}
.rep-tbl tbody tr:last-child td{border-bottom:none;}
.rep-tbl tbody tr:hover{background:var(--line-soft);cursor:pointer;}

/* Column widths — fixed across .rep-tbl tables so Billable projects and
   Margin by deliverable type line up vertically with each other.
   Column 1 is name (flex); columns 2-6 are fixed at 200px each. */
.rep-tbl thead th:nth-child(2), .rep-tbl tbody td:nth-child(2){width:200px;}
.rep-tbl thead th:nth-child(3), .rep-tbl tbody td:nth-child(3){width:200px;}
.rep-tbl thead th:nth-child(4), .rep-tbl tbody td:nth-child(4){width:200px;}
.rep-tbl thead th:nth-child(5), .rep-tbl tbody td:nth-child(5){width:200px;}
.rep-tbl thead th:nth-child(6), .rep-tbl tbody td:nth-child(6){width:200px;}
.proj-name{font-weight:500;letter-spacing:-.012em;font-size:13px;}
.proj-meta{font-size:11.5px;color:var(--ink-3);margin-top:2px;}
.num-cell{font-variant-numeric:tabular-nums;letter-spacing:-.005em;}
.num-cell.muted{color:var(--ink-3);}

/* Implied day rate cell — two lines */
.idr-cell{font-variant-numeric:tabular-nums;letter-spacing:-.005em;font-weight:500;text-align:right;}
.idr-cell.muted{color:var(--ink-3);}
.idr-cell .idr-val{font-size:13px;}
.idr-cell .idr-sub{font-size:11px;color:var(--ink-3);display:block;margin-top:1px;font-weight:400;}

/* Margin two-line cell */
.margin-cell{font-variant-numeric:tabular-nums;letter-spacing:-.005em;font-weight:500;text-align:right;}
.margin-cell .mg-pct{font-size:13px;}
.margin-cell .mg-amt{font-size:11px;color:var(--ink-3);display:block;margin-top:1px;font-weight:400;}
.margin-cell.warn .mg-pct{color:#854F0B;}
.margin-cell.bad .mg-pct{color:var(--accent);}
.margin-cell.muted{color:var(--ink-3);}

/* Health pill — 4 states */
.health-pill{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:100px;font-size:11.5px;font-weight:600;}
.health-pill::before{content:'';width:6px;height:6px;border-radius:50%;}
.health-pill.healthy{background:var(--good-soft);color:var(--good);}
.health-pill.healthy::before{background:var(--good);}
.health-pill.tight{background:var(--warn-soft);color:#854F0B;}
.health-pill.tight::before{background:var(--warn);}
.health-pill.over{background:var(--accent-soft);color:#9A2D17;}
.health-pill.over::before{background:#9A2D17;}
.health-pill.early{background:var(--line-soft);color:var(--ink-3);}
.health-pill.early::before{background:#a8a59a;}

/* Totals row */
.rep-tbl tbody tr.totals td{background:var(--line-soft);font-weight:600;border-top:1px solid var(--line);border-bottom:none;letter-spacing:-.012em;cursor:default;}
.rep-tbl tbody tr.totals:hover{background:var(--line-soft);}

/* Retainer banner */
.rep-retainer-banner{background:#fbf6ee;padding:14px 22px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);font-size:12px;}
.rep-retainer-banner strong{font-weight:600;letter-spacing:-.01em;}
.rep-retainer-pacing{display:flex;align-items:center;gap:10px;}
.rep-retainer-bar{width:140px;height:6px;background:var(--line-soft);border-radius:100px;overflow:hidden;}
.rep-retainer-fill{height:100%;border-radius:100px;background:var(--good);}
.rep-retainer-fill.amber{background:#BA7517;}
.rep-retainer-fill.over{background:var(--accent);}

/* Insight callout */
.rep-insight{background:var(--ink);color:var(--paper);border-radius:10px;padding:12px 16px;font-size:12px;letter-spacing:-.01em;display:flex;align-items:center;gap:10px;}
.rep-insight-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);flex-shrink:0;}
.rep-insight strong{font-weight:600;}

/* Status pill — additional 'draft' variant for Ready state */
.status-pill.draft{background:var(--line-soft);color:var(--ink-3);}
.status-pill.draft::before{background:var(--ink-4);}
.status-pill.inv{background:var(--good-soft);color:var(--good);}
.status-pill.inv::before{background:var(--good);}

/* Financial rows */
.fin-row{display:grid;grid-template-columns:1fr 200px 200px 175px;align-items:center;gap:40px;padding:14px 22px;border-bottom:1px solid var(--line-soft);cursor:pointer;}
.fin-row:last-child{border-bottom:none;}
.fin-row:hover{background:var(--line-soft);}
.fin-meta{min-width:0;}
.fin-pill-slot,.fin-btn-slot{display:flex;align-items:center;justify-content:flex-end;}
.fin-amount{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.015em;text-align:right;}
.fin-name{font-size:13px;font-weight:500;letter-spacing:-.012em;}
.fin-sub{font-size:11.5px;color:var(--ink-3);margin-top:2px;}
.fin-action-btn{
  font-family:inherit;font-size:11.5px;font-weight:600;
  padding:5px 10px;border-radius:100px;cursor:pointer;
  background:var(--good-soft);color:var(--good);border:1px solid var(--good-soft);
  transition:all .12s;letter-spacing:-.005em;
}
.fin-action-btn:hover{background:var(--good);color:var(--paper);}
.fin-action-btn.muted{background:var(--line-soft);color:var(--ink-3);border-color:var(--line);}
.fin-action-btn.muted:hover{background:var(--line);color:var(--ink-2);}


/* Reports filter bar */
.rep-filters{
  display:flex;align-items:center;gap:18px;flex-wrap:wrap;
  padding:14px 18px;margin-bottom:18px;
  background:var(--paper);border:1px solid var(--line);border-radius:12px;
}
.rep-filter-grp{display:inline-flex;align-items:center;gap:8px;}
.rep-filter-lbl{
  font-size:11px;font-weight:600;color:var(--ink-3);
  letter-spacing:.05em;text-transform:uppercase;
}
.rep-filter-pills{
  display:inline-flex;background:var(--line-soft);
  border-radius:100px;padding:2px;
}
.rep-filter-pill{
  padding:5px 11px;font-size:11.5px;font-weight:500;
  color:var(--ink-3);border-radius:100px;cursor:pointer;
  letter-spacing:-.005em;transition:all .12s;
}
.rep-filter-pill:hover{color:var(--ink);}
.rep-filter-pill.on{background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);color:var(--paper);box-shadow:0 1px 3px rgba(11,14,25,0.25);}
.rep-filter-pill.on:hover{color:var(--paper);}
.rep-filter-toggle{
  display:inline-flex;align-items:center;gap:8px;
  font-size:12px;color:var(--ink-2);cursor:pointer;
  letter-spacing:-.005em;
  user-select:none;
}
/* Hide native checkbox */
.rep-filter-toggle input{
  position:absolute;opacity:0;width:0;height:0;pointer-events:none;
}
/* Custom check box */
.rep-toggle-box{
  width:16px;height:16px;border-radius:4px;
  border:1.5px solid var(--ink-4);
  background:var(--paper);
  display:inline-flex;align-items:center;justify-content:center;
  transition:all .12s;flex-shrink:0;
  position:relative;
}
.rep-filter-toggle:hover .rep-toggle-box{
  border-color:var(--ink-3);
}
.rep-filter-toggle input:checked + .rep-toggle-box{
  background:var(--ink);border-color:var(--ink);
}
.rep-filter-toggle input:checked + .rep-toggle-box::after{
  content:'';
  width:8px;height:5px;
  border-left:2px solid var(--paper);
  border-bottom:2px solid var(--paper);
  transform:rotate(-45deg) translate(0px,-1px);
}
.rep-toggle-label{
  color:var(--ink-2);
}
.rep-filter-toggle input:checked ~ .rep-toggle-label{
  color:var(--ink);
}

/* ═══════════════════════════════════════════════════════════════════
   FINANCE TAB — Pipeline & Invoicing + Tracking subtabs
   ═══════════════════════════════════════════════════════════════════ */

/* Subtabs */
.fin-subtabs{
  display:inline-flex;background:var(--paper);
  border:1px solid var(--line);border-radius:100px;padding:3px;margin-bottom:20px;
}
.fin-subtab{
  padding:7px 18px;font-size:12.5px;font-weight:500;
  color:var(--ink-3);border-radius:100px;cursor:pointer;
  letter-spacing:-.01em;transition:all .12s;
}
.fin-subtab:hover{color:var(--ink);}
.fin-subtab.on{
  background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);
  color:var(--paper);
  box-shadow:0 1px 3px rgba(11,14,25,0.25);
}
.fin-subtab.on:hover{color:var(--paper);}

/* Money-journey cards (4-up, no gap, with arrows) */
.journey{
  display:grid;grid-template-columns:repeat(4,1fr);gap:0;
  margin-bottom:24px;
  background:var(--paper);border:1px solid var(--line);
  border-radius:12px;overflow:hidden;
}
.j-card{
  padding:18px 20px;
  border-right:1px solid var(--line);
  position:relative;
}
.j-card:last-child{border-right:none;}
.j-card.dark{background:var(--ink);color:var(--paper);}
.j-card.paid{background:var(--good-soft);}
.j-lbl{
  font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:8px;
  display:flex;align-items:center;gap:5px;
}
.j-card.dark .j-lbl{color:var(--ink-4);}
.j-card.paid .j-lbl{color:var(--ink-3);}
.j-step{
  font-size:9px;font-weight:700;
  width:14px;height:14px;border-radius:50%;
  background:var(--line-soft);color:var(--ink-3);
  display:inline-flex;align-items:center;justify-content:center;
}
.j-card.dark .j-step{background:var(--paper);color:var(--ink);}
.j-card.paid .j-step{background:var(--chip-bg);color:var(--ink-2);}
.j-val{
  font-size:24px;font-weight:600;letter-spacing:-.025em;line-height:1;
  font-variant-numeric:tabular-nums;
}
.j-sub{font-size:11px;color:var(--ink-3);margin-top:6px;}
.j-card.dark .j-sub{color:var(--ink-4);}
.j-card.paid .j-sub{color:var(--ink-3);}

/* Section card for lifecycle */
.fin-section{
  background:var(--paper);border-radius:12px;
  border:1px solid var(--line);
  margin-bottom:14px;overflow:hidden;
}
.fin-section-h{
  padding:14px 22px;
  display:flex;justify-content:space-between;align-items:center;
  border-bottom:1px solid var(--line);
}
.fin-section-h-left{display:flex;align-items:center;gap:10px;}
.fin-section-title{font-size:13px;font-weight:600;letter-spacing:-.012em;}
.fin-section-badge{
  font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  padding:2px 8px;border-radius:100px;color:var(--ink-3);background:var(--line-soft);
}
.fin-section-meta{font-size:11.5px;color:var(--ink-3);}
.fin-section-total{
  font-size:14px;font-weight:600;letter-spacing:-.015em;
  font-variant-numeric:tabular-nums;color:var(--ink);
}

/* Lifecycle pills */
.lc-pill{
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 10px;border-radius:100px;
  font-size:11px;font-weight:600;letter-spacing:-.005em;
}
.lc-pill::before{content:'';width:5px;height:5px;border-radius:50%;}
.lc-pill.in-prog{background:#e3edf8;color:#185FA5;}
.lc-pill.in-prog::before{background:#185FA5;}
.lc-pill.ready{background:#fbf6ee;color:#854F0B;}
.lc-pill.ready::before{background:#BA7517;}
.lc-pill.po{background:var(--accent-soft);color:#9A2D17;}
.lc-pill.po::before{background:#9A2D17;}
.lc-pill.sent{background:#efeafc;color:#6b52c2;}
.lc-pill.sent::before{background:#6b52c2;}
.lc-pill.paid{background:var(--good-soft);color:var(--good);}
.lc-pill.paid::before{background:var(--good);}

/* Action buttons - extending fin-action-btn */
.fin-action-btn{
  font-family:inherit;font-size:11.5px;font-weight:600;
  padding:5px 11px;border-radius:100px;cursor:pointer;
  background:transparent;color:var(--ink);
  border:1px solid rgba(0,0,0,.1);
  transition:all .12s;letter-spacing:-.005em;
}
.fin-action-btn:hover{border-color:var(--ink);background:var(--ink);color:var(--paper);}
.fin-action-btn.pri{background:var(--good-soft);color:var(--good);border-color:var(--good-soft);}
.fin-action-btn.pri:hover{background:var(--good);color:var(--paper);border-color:var(--good);}
.fin-action-btn.ghost{
  border:none;background:transparent;color:var(--ink-3);
  padding:5px 8px;font-size:13px;
}
.fin-action-btn.ghost:hover{color:var(--ink);background:var(--line-soft);}

/* ═══════════════════════════════════════════════════════════════════
   TRACKING SUBTAB
   ═══════════════════════════════════════════════════════════════════ */

.tk-hero{
  background:radial-gradient(ellipse 90% 120% at 100% 100%, var(--accent-deep) 0%, var(--ink) 60%, var(--ink) 100%);
  color:var(--paper);border-radius:16px;
  padding:32px 36px;margin-bottom:20px;
  position:relative;overflow:hidden;
}
.tk-hero-top{
  display:flex;justify-content:space-between;align-items:flex-start;
  margin-bottom:20px;
}
.tk-target{
  font-size:13px;color:var(--ink-4);font-weight:500;
  margin-bottom:6px;letter-spacing:-.005em;
}
.tk-target-val{
  font-size:36px;font-weight:600;letter-spacing:-.03em;line-height:1;
  font-variant-numeric:tabular-nums;
}
.tk-target-sub{font-size:12px;color:var(--ink-4);margin-top:6px;}
.tk-growth{
  background:rgba(255,255,255,.08);
  padding:8px 14px;border-radius:100px;
  font-size:11.5px;font-weight:600;letter-spacing:-.005em;
}
.tk-growth strong{color:#A8E067;}

/* Progress bar */
.tk-progress{
  height:14px;background:rgba(255,255,255,.08);
  border-radius:100px;overflow:hidden;
  margin-bottom:14px;position:relative;
}
.tk-progress-fill{
  height:100%;background:linear-gradient(90deg, #5e7c2e 0%, #8db44d 100%);
  border-radius:100px;
}

.tk-legend{
  display:flex;gap:24px;font-size:11.5px;color:var(--ink-4);
  margin-bottom:24px;
}
.tk-legend-item{display:flex;align-items:center;gap:6px;}
.tk-legend-dot{width:10px;height:10px;border-radius:3px;}
.tk-legend-item strong{color:var(--paper);font-weight:600;}

/* Forecast row */
.tk-forecast{
  display:grid;grid-template-columns:1fr 1fr 1fr;gap:24px;
  padding-top:20px;border-top:1px solid rgba(255,255,255,.1);
}
.tk-fc-lbl{
  font-size:11px;color:var(--ink-4);font-weight:500;
  text-transform:uppercase;letter-spacing:.05em;margin-bottom:6px;
}
.tk-fc-val{
  font-size:22px;font-weight:600;letter-spacing:-.025em;
  font-variant-numeric:tabular-nums;line-height:1;
}
.tk-fc-sub{font-size:11.5px;color:var(--ink-4);margin-top:4px;}
.tk-fc.alert .tk-fc-val{color:#f3a380;}
.tk-fc.alert .tk-fc-sub{color:#e8a98f;}
.tk-fc.good .tk-fc-val{color:#92d68a;}
.tk-fc.good .tk-fc-sub{color:#92d68a;}

/* Month spotlight */
.ms-grid{
  display:grid;grid-template-columns:repeat(3,1fr);
  background:var(--paper);border:1px solid var(--line);
  border-radius:12px;margin-bottom:14px;overflow:hidden;
}
.ms-cell{
  padding:22px 26px;
  border-right:1px solid var(--line);
}
.ms-cell:last-child{border-right:none;}
.ms-lbl{
  font-size:11px;font-weight:600;color:var(--ink-3);
  text-transform:uppercase;letter-spacing:.05em;
  margin-bottom:10px;
}
.ms-val{
  font-size:24px;font-weight:600;letter-spacing:-.025em;
  font-variant-numeric:tabular-nums;line-height:1;
}
.ms-val.good{color:var(--good);}
.ms-val.bad{color:var(--accent);}
.ms-target{font-size:11.5px;color:var(--ink-3);margin-top:5px;}
.ms-progress{
  margin-top:12px;height:6px;background:var(--line-soft);
  border-radius:100px;overflow:hidden;
}
.ms-progress-fill{
  height:100%;background:#9A2D17;border-radius:100px;
}
.ms-progress-fill.warn{background:#BA7517;}
.ms-progress-fill.good{background:var(--good);}
.ms-status{
  font-size:11.5px;margin-top:10px;font-weight:500;
  letter-spacing:-.005em;color:var(--ink-3);
}
.ms-status.warn{color:#854F0B;}
.ms-status.good{color:var(--good);}
.ms-status.bad{color:var(--accent);}

/* Monthly chart */
.tk-chart{
  background:var(--paper);border-radius:12px;
  border:1px solid var(--line);
  padding:22px 26px;margin-bottom:14px;
}
.tk-chart-h{
  display:flex;justify-content:space-between;align-items:center;
  margin-bottom:18px;
}
.tk-chart-h h3{
  font-size:12px;font-weight:600;letter-spacing:.04em;
  text-transform:uppercase;color:var(--ink-3);
}
.tk-chart-meta{
  font-size:11px;color:var(--ink-3);font-style:italic;letter-spacing:-.005em;
}
.m-bars{
  display:grid;grid-template-columns:repeat(12,1fr);gap:8px;
  height:170px;align-items:end;
  margin-bottom:14px;
}
.m-bar{
  display:flex;flex-direction:column;align-items:center;gap:6px;
  height:100%;justify-content:flex-end;
}
.m-bar-track{
  width:100%;flex:1;
  border:1px dashed rgba(0,0,0,.15);
  border-radius:6px;
  display:flex;flex-direction:column;justify-content:flex-end;
  overflow:hidden;background:#fafaf6;
}
.m-bar.current .m-bar-track{
  border-color:rgba(0,0,0,.3);background:#f5f3ee;
}
.m-bar-fill{
  width:100%;background:var(--ink);
  border-radius:0 0 5px 5px;transition:height .3s;
}
.m-bar-fill.over{
  background:linear-gradient(180deg, #5e7c2e 0%, var(--good) 100%);
  border-radius:5px;
}
.m-bar-lbl{font-size:11px;font-weight:600;color:var(--ink-3);letter-spacing:.02em;}
.m-bar.current .m-bar-lbl{color:var(--ink);}
.m-bar-val{
  font-size:10.5px;font-variant-numeric:tabular-nums;
  font-weight:600;color:var(--ink);
}
.m-bar-val.empty{color:#bdbab2;font-weight:400;}
.m-legend{
  display:flex;gap:18px;font-size:11px;color:var(--ink-3);
  padding-top:14px;border-top:1px solid var(--line-soft);
  letter-spacing:-.005em;
}
.m-legend-item{display:inline-flex;align-items:center;gap:6px;}
.m-dot{width:10px;height:10px;border-radius:3px;}
.m-dot.dark{background:var(--ink);}
.m-dot.outline{
  background:#fafaf6;border:1px dashed rgba(0,0,0,.3);
}

/* Revenue mix breakdown */
.tk-breakdown{
  background:var(--paper);border-radius:12px;
  border:1px solid var(--line);
  padding:22px 26px;margin-bottom:14px;
}
.tk-breakdown h3{
  font-size:12px;font-weight:600;letter-spacing:.04em;
  text-transform:uppercase;color:var(--ink-3);margin-bottom:14px;
}
.bd-row{
  display:flex;justify-content:space-between;align-items:center;
  padding:10px 0;
  border-bottom:1px solid var(--line-soft);
  font-size:13px;
}
.bd-row:last-child{border-bottom:none;}
.bd-row-name{display:flex;align-items:center;gap:10px;}
.bd-row-bar{
  width:120px;height:6px;background:var(--line-soft);
  border-radius:100px;overflow:hidden;
}
.bd-row-fill{height:100%;background:var(--good);border-radius:100px;}
.bd-row-val{
  font-variant-numeric:tabular-nums;font-weight:600;
  letter-spacing:-.015em;
}
.bd-row-pct{color:var(--ink-3);font-weight:400;font-size:11px;}


/* ═══════════════════════════════════════════════════════════════════
   INVOICE DATE MODAL
   ═══════════════════════════════════════════════════════════════════ */
.modal-overlay{
  position:fixed;inset:0;
  background:rgba(0,0,0,.35);
  display:flex;align-items:center;justify-content:center;
  z-index:1000;
  animation:fade-in .15s ease;
}
@keyframes fade-in{from{opacity:0;}to{opacity:1;}}

.modal-card{
  background:var(--paper);
  border-radius:16px;
  padding:28px 30px;
  width:420px;max-width:90vw;
  box-shadow:0 20px 60px rgba(0,0,0,.18);
  animation:scale-in .2s ease;
}
@keyframes scale-in{
  from{opacity:0;transform:scale(.96);}
  to{opacity:1;transform:scale(1);}
}

.modal-title{
  font-size:18px;font-weight:600;letter-spacing:-.02em;
  color:var(--ink);margin-bottom:6px;
}
.modal-sub{
  font-size:13px;color:var(--ink-3);
  letter-spacing:-.005em;margin-bottom:22px;
  line-height:1.4;
}

/* Field wrapper — label stacked above input */
.modal-field{margin-bottom:16px;}
.modal-field:last-of-type{margin-bottom:22px;}
.modal-field-lbl{
  display:block;
  font-size:11px;font-weight:600;letter-spacing:.04em;
  color:var(--ink-3);margin-bottom:8px;
  text-transform:uppercase;
}
.modal-input{
  width:100%;font-family:inherit;font-size:15px;font-weight:500;
  padding:12px 14px;border-radius:10px;
  border:1.5px solid rgba(0,0,0,.1);background:#fff;
  color:var(--ink);letter-spacing:-.005em;
  transition:border-color .12s, box-shadow .12s;
}
.modal-input:focus{
  outline:none;
  border-color:var(--ink);
  box-shadow:0 0 0 3px rgba(0,0,0,.06);
}
/* Hide number-input spinner arrows (Chrome/Safari + Firefox) */
.modal-input[type="number"]::-webkit-inner-spin-button,
.modal-input[type="number"]::-webkit-outer-spin-button{
  -webkit-appearance:none;margin:0;
}
.modal-input[type="number"]{-moz-appearance:textfield;}

/* Live preview line below the input */
.modal-preview{
  margin-top:10px;font-size:12.5px;color:var(--ink-3);
  letter-spacing:-.005em;font-variant-numeric:tabular-nums;
  min-height:18px;
}
.modal-preview strong{color:var(--ink);font-weight:600;}

/* Legacy class kept for backwards compatibility */
.modal-date-input{
  width:100%;font-family:inherit;font-size:15px;font-weight:500;
  padding:12px 14px;border-radius:10px;
  border:1.5px solid rgba(0,0,0,.1);background:#fff;
  color:var(--ink);letter-spacing:-.005em;
  transition:border-color .12s;
  margin-bottom:18px;
}
.modal-date-input:focus{
  outline:none;border-color:var(--ink);
}

.modal-actions{
  display:flex;justify-content:flex-end;gap:8px;
}
.modal-btn{
  font-family:inherit;font-size:13.5px;font-weight:500;
  padding:10px 20px;border-radius:100px;cursor:pointer;
  letter-spacing:-.01em;border:1px solid transparent;
  transition:all .12s;
}
.modal-btn.ghost{
  background:transparent;color:var(--ink-3);
}
.modal-btn.ghost:hover{color:var(--ink);background:var(--line-soft);}
.modal-btn.pri{
  background:var(--ink);color:var(--paper);border-color:var(--ink);
}
.modal-btn.pri:hover{background:#000;}
.modal-btn.danger{
  background:#9A2D17;color:var(--paper);border-color:#9A2D17;
}
.modal-btn.danger:hover{background:#7a2412;border-color:#7a2412;}

/* ═══════════════════════════════════════════════════════════════════
   CRM TAB
   ═══════════════════════════════════════════════════════════════════ */

/* Page subtitle next to title */
.page-subtitle{
  font-size:13px;color:var(--ink-3);
  letter-spacing:-.005em;margin-top:4px;
}

/* Stats row */
.crm-stats{
  display:grid;grid-template-columns:repeat(4,1fr);gap:0;
  margin-bottom:24px;
  background:var(--paper);border:1px solid var(--line);
  border-radius:12px;overflow:hidden;
}
.crm-stat-card{
  padding:18px 22px;
  border-right:1px solid var(--line);
}
.crm-stat-card:last-child{border-right:none;}
.crm-stat-card.dark{background:var(--ink);color:var(--paper);}
.crm-stat-lbl{
  font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:8px;
}
.crm-stat-card.dark .crm-stat-lbl{color:var(--ink-4);}
.crm-stat-val{
  font-size:24px;font-weight:600;letter-spacing:-.025em;line-height:1;
  font-variant-numeric:tabular-nums;
}
.crm-stat-sub{font-size:11.5px;color:var(--ink-3);margin-top:6px;}
.crm-stat-card.dark .crm-stat-sub{color:var(--ink-4);}

/* Filter bar */
.crm-filters{
  display:flex;align-items:center;gap:18px;flex-wrap:wrap;
  padding:14px 18px;margin-bottom:18px;
  background:var(--paper);border:1px solid var(--line);border-radius:12px;
}
.crm-filter-grp{display:inline-flex;align-items:center;gap:8px;}
.crm-filter-lbl{
  font-size:11px;font-weight:600;color:var(--ink-3);
  letter-spacing:.05em;text-transform:uppercase;
}
.crm-filter-pills{display:inline-flex;background:var(--line-soft);border-radius:100px;padding:2px;}
.crm-filter-pill{
  padding:5px 11px;font-size:11.5px;font-weight:500;
  color:var(--ink-3);border-radius:100px;cursor:pointer;
  letter-spacing:-.005em;transition:all .12s;
}
.crm-filter-pill:hover{color:var(--ink);}
.crm-filter-pill.on{background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);color:var(--paper);box-shadow:0 1px 3px rgba(11,14,25,0.25);}
.crm-filter-pill.on:hover{color:var(--paper);}

.crm-search{
  display:flex;align-items:center;gap:8px;
  background:#fff;border:1px solid var(--line);
  padding:6px 12px;border-radius:100px;
  flex:1;min-width:200px;max-width:320px;margin-left:auto;
}
.crm-search svg{stroke:var(--ink-3);flex-shrink:0;}
.crm-search input{
  flex:1;border:none;background:transparent;outline:none;
  font-family:inherit;font-size:12.5px;color:var(--ink);
  letter-spacing:-.005em;
}
.crm-search input::placeholder{color:var(--ink-3);}

/* Section card */
.crm-section{
  background:var(--paper);border-radius:12px;
  border:1px solid var(--line);
  margin-bottom:14px;overflow:hidden;
}
.crm-section-h{
  padding:14px 24px;
  display:flex;justify-content:space-between;align-items:center;
  border-bottom:1px solid var(--line);
}
.crm-section-h-left{display:flex;align-items:center;gap:10px;}
.crm-section-title{font-size:13px;font-weight:600;letter-spacing:-.012em;}
.crm-section-badge{
  font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  padding:2px 8px;border-radius:100px;color:var(--ink-3);background:var(--line-soft);
}
.crm-section-meta{font-size:11.5px;color:var(--ink-3);}
.crm-section-total{
  font-size:14px;font-weight:600;letter-spacing:-.015em;
  font-variant-numeric:tabular-nums;color:var(--ink);
}

/* Lead row — grid layout with proper columns for scannability */
.crm-row{
  display:grid;
  grid-template-columns: minmax(200px, 2.4fr) minmax(120px, 1.4fr) minmax(120px, 1.4fr) minmax(100px, 1fr) minmax(80px, .8fr) minmax(110px, 1fr) minmax(90px, .9fr) minmax(120px, 1.2fr);
  align-items:center;gap:20px;
  padding:14px 24px;
  border-bottom:1px solid var(--line-soft);
  cursor:pointer;
  transition:background .12s;
}
.crm-row:last-child{border-bottom:none;}
.crm-row:hover{background:var(--line-soft);}

.crm-row-cell{min-width:0;font-size:12.5px;color:var(--ink);letter-spacing:-.005em;}
.crm-row-cell.crm-cell-name{font-size:13px;}
.crm-row-cell.crm-cell-client,
.crm-row-cell.crm-cell-contact{
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  color:var(--ink-2);
}
.crm-row-name{
  font-weight:500;letter-spacing:-.012em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  display:flex;align-items:center;gap:8px;
}
.crm-row-sub{
  font-size:11.5px;color:var(--ink-3);margin-top:2px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.crm-row-age{
  font-size:11.5px;color:var(--ink-3);
  font-variant-numeric:tabular-nums;text-align:right;
}
.crm-row-age.warn{color:#854F0B;font-weight:500;}
.crm-row-age.bad{color:#9A2D17;font-weight:600;}
.crm-row-value{
  font-size:13px;font-weight:600;
  font-variant-numeric:tabular-nums;letter-spacing:-.012em;
  text-align:right;
}
.crm-row-value.muted{color:var(--ink-3);font-weight:500;}
.crm-row-dash{color:var(--ink-4);font-size:13px;}
.crm-row-archived{
  font-size:9.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  padding:1px 7px;border-radius:100px;
  background:var(--line-soft);color:var(--ink-3);
}
.crm-cell-action{display:flex;justify-content:flex-end;}
.crm-row-action-spacer{display:block;}

/* Pill count badge inside filter pills (e.g. "Archive 5") */
.crm-pill-count{
  font-size:9.5px;font-weight:700;
  padding:1px 5px;border-radius:100px;
  background:rgba(0,0,0,.08);color:var(--ink-3);
  margin-left:5px;
}
.crm-filter-pill.on .crm-pill-count{
  background:rgba(255,255,255,.18);color:var(--paper);
}

/* Source pill */
.crm-source-pill{
  display:inline-flex;align-items:center;gap:6px;
  padding:3px 10px;border-radius:100px;
  font-size:11px;font-weight:500;letter-spacing:-.005em;
  background:var(--line-soft);color:var(--ink-3);
}
.crm-source-pill .dot{width:6px;height:6px;border-radius:50%;background:#bdbab2;}
.crm-source-pill.existing{background:#eaf3de;color:#3B6D11;}
.crm-source-pill.existing .dot{background:#3B6D11;}
.crm-source-pill.referral{background:#efeafc;color:#6b52c2;}
.crm-source-pill.referral .dot{background:#6b52c2;}
.crm-source-pill.inbound{background:#e3edf8;color:#185FA5;}
.crm-source-pill.inbound .dot{background:#185FA5;}

/* Stage pill */
.crm-stage-pill{
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 10px;border-radius:100px;
  font-size:11px;font-weight:600;letter-spacing:-.005em;
}
.crm-stage-pill::before{content:'';width:5px;height:5px;border-radius:50%;}
.crm-stage-pill.new{background:#e3edf8;color:#185FA5;}
.crm-stage-pill.new::before{background:#185FA5;}
.crm-stage-pill.quoted{background:#fbf6ee;color:#854F0B;}
.crm-stage-pill.quoted::before{background:#BA7517;}
.crm-stage-pill.won{background:var(--good-soft);color:var(--good);}
.crm-stage-pill.won::before{background:var(--good);}
.crm-stage-pill.lost{background:var(--line-soft);color:var(--ink-3);}
.crm-stage-pill.lost::before{background:#a8a59a;}

/* CRM action button */
.crm-act{
  font-family:inherit;font-size:11.5px;font-weight:600;
  padding:5px 11px;border-radius:100px;cursor:pointer;
  background:transparent;color:var(--ink);
  border:1px solid rgba(0,0,0,.1);
  transition:all .12s;letter-spacing:-.005em;
}
.crm-act:hover{border-color:var(--ink);background:var(--ink);color:var(--paper);}
.crm-act.pri{background:var(--good-soft);color:var(--good);border-color:var(--good-soft);}
.crm-act.pri:hover{background:var(--good);color:var(--paper);border-color:var(--good);}

/* Insight callout (same as Reports) */
.crm-insight{
  background:var(--ink);color:var(--paper);
  border-radius:10px;padding:12px 16px;
  font-size:12px;letter-spacing:-.005em;
  display:flex;align-items:center;gap:10px;
}
.crm-insight-dot{
  width:6px;height:6px;border-radius:50%;
  background:var(--accent);flex-shrink:0;
}
.crm-insight strong{font-weight:600;}

/* Empty state */
.crm-empty{
  background:var(--paper);border:1px solid var(--line);
  border-radius:12px;padding:48px 22px;
  text-align:center;
}
.crm-empty-title{
  font-size:15px;font-weight:600;letter-spacing:-.015em;
  color:var(--ink);margin-bottom:6px;
}
.crm-empty-sub{
  font-size:12.5px;color:var(--ink-3);
  letter-spacing:-.005em;
}

/* ═══════════════════════════════════════════════════════════════════
   LEAD SLIDE-OVER FORM
   ═══════════════════════════════════════════════════════════════════ */

/* Form card grouping (used in lead slide-over) */
.form-card{
  background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:18px;margin-bottom:18px;
}
.form-card-title{
  font-size:11px;font-weight:600;letter-spacing:.05em;
  text-transform:uppercase;color:var(--ink-3);
  margin-bottom:14px;
}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px;}
.form-help{
  font-size:11.5px;color:var(--ink-3);margin-top:5px;
  letter-spacing:-.005em;
}

/* Source pills (form) — same colours as the row pills */
.source-pills{display:flex;flex-wrap:wrap;gap:6px;}
.source-pill{
  display:inline-flex;align-items:center;gap:6px;
  padding:6px 12px;border-radius:100px;
  border:1px solid rgba(0,0,0,.1);background:#fff;
  font-size:12px;cursor:pointer;letter-spacing:-.005em;
  transition:all .12s;color:var(--ink);
}
.source-pill:hover{border-color:var(--ink);}
.source-pill.on{background:var(--ink);color:#fff;border-color:var(--ink);}
.source-pill .dot{width:6px;height:6px;border-radius:50%;background:#bdbab2;}
.source-pill.on .dot{background:#fff;}
.source-pill.warm .dot{background:#3B6D11;}
.source-pill.referral .dot{background:#6b52c2;}
.source-pill.inbound .dot{background:#185FA5;}

/* Stage cards (form) */
.stage-cards{display:flex;flex-direction:column;gap:6px;}
.stage-card{
  display:flex;align-items:center;gap:12px;
  padding:12px 14px;border-radius:8px;
  border:1px solid rgba(0,0,0,.08);
  cursor:pointer;transition:all .12s;
  background:#fff;
}
.stage-card:hover{border-color:var(--ink);}
.stage-card.on{
  border-color:var(--ink);background:var(--ink);color:#fff;
}
.stage-radio{
  width:14px;height:14px;border:1.5px solid rgba(0,0,0,.25);
  border-radius:50%;flex-shrink:0;
  position:relative;
}
.stage-card.on .stage-radio{border-color:#fff;}
.stage-card.on .stage-radio::after{
  content:'';position:absolute;inset:2px;border-radius:50%;background:#fff;
}
.stage-content{flex:1;}
.stage-name{font-size:13px;font-weight:500;letter-spacing:-.01em;}
.stage-sub{
  font-size:11.5px;color:var(--ink-3);margin-top:1px;
  letter-spacing:-.005em;
}
.stage-card.on .stage-sub{color:rgba(255,255,255,.65);}

/* Money input with £ prefix */
.money-input-wrap{
  position:relative;display:flex;align-items:center;
}
.money-prefix{
  position:absolute;left:12px;
  color:var(--ink-3);font-size:13px;font-weight:500;
  pointer-events:none;
}
.money-input-wrap input{
  padding-left:24px !important;
}

/* Value stamp toggle (Rough estimate / Firm £) */
.value-stamp{
  display:inline-flex;background:var(--line-soft);border-radius:100px;padding:2px;
  margin-top:8px;
}
.value-stamp button{
  font-family:inherit;font-size:11px;font-weight:600;
  padding:4px 10px;border-radius:100px;border:none;
  background:transparent;color:var(--ink-3);cursor:pointer;
  letter-spacing:-.005em;transition:all .12s;
}
.value-stamp button:hover{color:var(--ink);}
.value-stamp button.on{background:var(--ink);color:#fff;}

/* Hide spinners on number inputs in lead form too */
.fgrp input[type="number"]::-webkit-inner-spin-button,
.fgrp input[type="number"]::-webkit-outer-spin-button{
  -webkit-appearance:none;margin:0;
}
.fgrp input[type="number"]{-moz-appearance:textfield;}

/* Pill-btn danger variant for Delete action */
.pill-btn.danger{
  background:transparent;color:#9A2D17;
  border:1px solid var(--accent-soft);
}
.pill-btn.danger:hover{background:var(--accent-soft);color:#9A2D17;}


/* Archive toggle row in lead form */
.archive-toggle{
  background:#fff;border:1px solid var(--line);
  border-radius:10px;padding:14px 18px;
  margin-bottom:18px;
}
.archive-toggle label{
  display:flex;align-items:flex-start;gap:12px;
  cursor:pointer;margin:0;
}
.archive-toggle input[type="checkbox"]{
  width:16px;height:16px;margin:1px 0 0 0;
  cursor:pointer;accent-color:var(--ink);
  flex-shrink:0;
}
.archive-toggle-text{
  display:flex;flex-direction:column;gap:2px;
  font-size:13px;letter-spacing:-.005em;
}
.archive-toggle-text strong{
  font-weight:500;color:var(--ink);
}
.archive-toggle-sub{
  font-size:11.5px;color:var(--ink-3);
}

/* ═══════════════════════════════════════════════════════════════════
   STRUCTURED DELIVERABLES — borderless until focus
   ═══════════════════════════════════════════════════════════════════ */
.deliv-help{
  font-size:12px;color:var(--ink-3);
  letter-spacing:-.005em;margin-bottom:10px;line-height:1.5;
}
.deliv-help strong{color:var(--ink);font-weight:500;}
.deliv-list{
  display:flex;flex-direction:column;gap:0;
  border-top:1px solid var(--line-soft);
}

/* Row */
.dlv-row{
  border-bottom:1px solid var(--line-soft);
}
.dlv-main{
  display:grid;grid-template-columns:24px 1fr 110px 24px;
  align-items:center;gap:12px;
  padding:6px 4px;
}
.dlv-row.pm-row .dlv-main{
  /* PM is muted but still functional */
}

/* Done tick */
.dlv-done{
  width:18px;height:18px;border-radius:5px;
  background:var(--paper);border:1.5px solid var(--ink-4);
  color:#fff;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  padding:0;font-family:inherit;
  transition:all .12s;
}
.dlv-done:hover{border-color:var(--ink-3);}
.dlv-done.on{background:var(--good);border-color:var(--good);}
.dlv-done.on:hover{background:#4a651e;}
.dlv-done-spacer{display:block;width:18px;height:18px;}

/* Type — borderless select, hover/focus reveal frame */
.dlv-type{
  font-family:inherit;font-size:13.5px;color:var(--ink);
  letter-spacing:-.012em;
  background:transparent;border:1px solid transparent;
  border-radius:6px;padding:6px 8px;
  outline:none;cursor:pointer;
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  width:100%;max-width:280px;
  /* Custom small chevron on the right */
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%237a7770' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>");
  background-repeat:no-repeat;
  background-position:right 8px center;
  padding-right:24px;
}
.dlv-type:hover{background-color:rgba(0,0,0,0.03);}
.dlv-type:focus{border-color:var(--ink);background-color:var(--paper);}
.dlv-type.pm{color:var(--ink-3);font-style:italic;}

/* Fee — borderless input */
.dlv-fee-wrap{
  position:relative;
  display:flex;align-items:center;
}
.dlv-fee-prefix{
  position:absolute;left:8px;top:50%;transform:translateY(-50%);
  color:var(--ink-3);font-size:13.5px;
  font-variant-numeric:tabular-nums;pointer-events:none;
}
.dlv-fee-input{
  font-family:inherit;font-size:13.5px;color:var(--ink);
  letter-spacing:-.012em;font-variant-numeric:tabular-nums;
  background:transparent;border:1px solid transparent;
  border-radius:6px;padding:6px 8px 6px 22px;
  outline:none;text-align:right;
  width:100%;
  transition:background .08s, border-color .08s;
}
.dlv-fee-input:hover{background:rgba(0,0,0,0.03);}
.dlv-fee-input:focus{border-color:var(--ink);background:var(--paper);}
.dlv-fee-input::placeholder{color:var(--ink-4);}

/* PM "internal · no fee" pseudo-display */
.dlv-fee-pm{
  font-size:12px;color:var(--ink-3);font-style:italic;
  letter-spacing:-.005em;padding:6px 8px;
  text-align:right;width:100%;
}

/* Remove × button — visible but quiet */
.dlv-remove{
  width:24px;height:24px;border-radius:50%;
  background:transparent;border:none;
  color:var(--ink-4);cursor:pointer;font-size:15px;line-height:1;
  display:flex;align-items:center;justify-content:center;
  font-family:inherit;padding:0;
  transition:color .12s, background .12s;
}
.dlv-remove:hover{background:var(--accent-soft);color:var(--accent);}

/* "Other" custom-name input (sub-row beneath the main row) */
.dlv-custom-row{
  padding:0 12px 8px 44px;
}
.dlv-custom-input{
  width:100%;font-family:inherit;font-size:12.5px;
  padding:6px 10px;border-radius:5px;
  border:1px solid var(--line);background:var(--paper);
  color:var(--ink);outline:none;
}
.dlv-custom-input:focus{border-color:var(--ink);}
.dlv-custom-input::placeholder{color:var(--ink-4);font-style:italic;}

.deliv-total{
  margin-top:14px;padding-top:14px;
  border-top:1px solid var(--line);
  font-size:12px;color:var(--ink-3);
  font-variant-numeric:tabular-nums;letter-spacing:-.005em;
  text-align:right;
}

/* Fee field with inset override button */
.fee-input-wrap{
  position:relative;
}
.fee-input-wrap input{
  /* Make space on the right for the inset button */
  padding-right:38px !important;
}
.fee-input-wrap input[readonly]{
  background:var(--line-soft) !important;
  color:var(--ink-2) !important;
  cursor:default;
}
.fee-input-wrap input:not([readonly]):focus{
  border-color:var(--ink);
}
.fee-override-btn{
  position:absolute;right:6px;top:50%;transform:translateY(-50%);
  width:26px;height:26px;border-radius:6px;
  background:transparent;border:none;cursor:pointer;
  color:var(--ink-3);line-height:0;
  display:flex;align-items:center;justify-content:center;
  font-family:inherit;
  transition:all .12s;padding:0;
}
.fee-override-btn:hover{background:var(--line-soft);color:var(--ink);}
.fee-override-btn.on{
  background:var(--ink);color:var(--paper);
}
.fee-override-btn.on:hover{background:var(--ink-2);color:var(--paper);}
.fee-meta{
  margin-top:6px;font-size:11.5px;color:var(--ink-3);
  letter-spacing:-.005em;
}


/* ═══════════════════════════════════════════════════════════════════
   TIME GRID — collapsed projects with active deliverable pill
   ═══════════════════════════════════════════════════════════════════ */

/* Collapsed row (default state — one per project) */
.tg-row{
  align-items:center;gap:0;
  border-top:1px solid var(--line-soft);
  background:var(--paper);
}
.tg-row:first-child{border-top:none;}

/* Project cell — name, sub, deliverable pill, expand chevron, delete */
.tg-proj{
  display:flex;align-items:center;gap:10px;
  padding:10px 16px 10px 10px;
  min-width:0;
}
.tg-proj-info{
  flex:1;min-width:0;
}
.tg-proj-name{
  font-size:13px;font-weight:500;letter-spacing:-.012em;color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.tg-proj-sub{
  font-size:11px;color:var(--ink-3);margin-top:1px;
  letter-spacing:-.005em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* Expand chevron — slim button, visible at start of project cell */
.tg-expand{
  width:20px;height:20px;border-radius:5px;
  background:transparent;border:none;cursor:pointer;
  color:var(--ink-3);padding:0;
  display:flex;align-items:center;justify-content:center;
  flex-shrink:0;
  transition:all .12s;
}
.tg-expand:hover{background:var(--line-soft);color:var(--ink);}
.tg-expand.expanded svg{transform:rotate(0deg);}
.tg-expand svg{transition:transform .15s;}

/* Active-deliverable pill (collapsed mode) */
.tg-deliv-pill-wrap{
  display:flex;align-items:center;gap:6px;flex-shrink:0;
}
.tg-deliv-pill{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 9px 4px 11px;border-radius:100px;
  background:var(--line-soft);border:1px solid transparent;
  color:var(--ink-2);font-size:11.5px;font-weight:500;
  letter-spacing:-.005em;cursor:pointer;
  font-family:inherit;
  max-width:160px;
  transition:all .12s;
}
.tg-deliv-pill > span{
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.tg-deliv-pill:hover{
  background:var(--ink);color:var(--paper);
}
.tg-deliv-pill.pm{
  background:transparent;border-color:var(--line);color:var(--ink-3);
  font-style:italic;
}
.tg-deliv-pill.pm:hover{
  background:var(--ink);color:var(--paper);font-style:normal;
}
.tg-deliv-pill svg{flex-shrink:0;opacity:.6;}

/* "X deliverables" tag when multiple have hours this week */
.tg-split-tag{
  font-size:10px;color:var(--ink-3);
  letter-spacing:-.005em;
  padding:2px 6px;border-radius:100px;
  background:var(--warn-soft);color:#854F0B;
  white-space:nowrap;
}

/* Delete button */
.tg-del{
  width:22px;height:22px;border-radius:50%;
  background:transparent;border:none;cursor:pointer;
  color:var(--ink-4);font-size:14px;line-height:1;padding:0;
  display:flex;align-items:center;justify-content:center;
  font-family:inherit;flex-shrink:0;
  transition:all .12s;
}
.tg-del:hover{background:var(--accent-soft);color:var(--accent);}

/* Solo row (project with no deliverables) */
.tg-row.solo .tg-proj-info{padding-left:30px;}

/* Expanded mode: project header row + sub-rows */
.tg-row.tg-header-row{
  background:var(--paper);
  border-top:1px solid var(--line);
}
.tg-row.tg-header-row .tg-proj-name{font-weight:600;}
.tg-row.tg-header-row .num-cell-empty{
  background:transparent;border:none;
}
.tg-row.tg-collapsed{
  background:var(--paper);
}
/* Project header summary cells — bolder to read as parent totals;
   this is the read-only sum of the deliverable inputs below. */
.tg-row.tg-header-row .tg-summary-cell,
.tg-row.tg-collapsed .tg-summary-cell{
  font-weight:500;color:var(--ink);font-size:14px;
}
/* Project header total column also gets the bolder weight */
.tg-row.tg-header-row .total-col,
.tg-row.tg-collapsed .total-col{
  color:var(--ink);
}
.tg-row.tg-deliv-row{
  background:var(--line-soft);
  border-top:1px solid var(--line-soft);
}
.tg-deliv-cell{
  display:flex;align-items:center;gap:10px;
  padding:10px 16px 10px 38px;
  min-width:0;
}
.tg-deliv-rule{
  width:14px;height:1px;background:var(--ink-4);flex-shrink:0;
}
.tg-deliv-name{
  font-size:12.5px;color:var(--ink-2);letter-spacing:-.005em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.tg-deliv-name.pm{color:var(--ink-3);font-style:italic;}

/* Deliverable picker menu — pops below the pill */
.deliv-menu{
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:10px;
  box-shadow:0 8px 28px rgba(0,0,0,.12);
  padding:6px;min-width:180px;
  z-index:1000;
  animation:fade-in .12s ease;
  max-height:320px;overflow-y:auto;
}
.deliv-menu-item{
  width:100%;text-align:left;
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:8px 10px;border-radius:6px;
  background:transparent;border:none;cursor:pointer;
  font-family:inherit;font-size:13px;color:var(--ink);
  letter-spacing:-.005em;
  transition:background .1s;
}
.deliv-menu-item:hover{background:var(--line-soft);}
.deliv-menu-item.on{background:var(--ink);color:var(--paper);}
.deliv-menu-item.on:hover{background:var(--ink-2);}
.deliv-menu-item.pm{font-style:italic;color:var(--ink-3);}
.deliv-menu-item.pm.on{color:var(--paper);}

/* ═══════════════════════════════════════════════════════════════════
   PER-DELIVERABLE MARGIN VIEW
   ═══════════════════════════════════════════════════════════════════ */
.margin-help{
  font-size:12px;color:var(--ink-3);
  letter-spacing:-.005em;margin-bottom:14px;line-height:1.5;
}
.margin-empty{
  background:var(--paper);border:1px solid var(--line);
  border-radius:10px;padding:18px 20px;
  font-size:12.5px;color:var(--ink-3);text-align:center;
}
.margin-table{
  background:var(--paper);border:1px solid var(--line);
  border-radius:10px;overflow:hidden;
  font-size:13px;
}
.margin-head{
  display:grid;
  grid-template-columns: 1.6fr 80px 70px 80px 70px;
  gap:14px;
  padding:12px 18px;
  font-size:10.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-3);
  border-bottom:1px solid var(--line);
  background:var(--line-soft);
}
.margin-head > div:nth-child(2),
.margin-head > div:nth-child(3),
.margin-head > div:nth-child(4),
.margin-head > div:nth-child(5){text-align:right;}
.margin-row{
  display:grid;
  grid-template-columns: 1.6fr 80px 70px 80px 70px;
  gap:14px;align-items:center;
  padding:12px 18px;
  border-bottom:1px solid var(--line-soft);
  font-variant-numeric:tabular-nums;
}
.margin-row:last-child{border-bottom:none;}
.margin-row-name{
  font-size:13px;letter-spacing:-.01em;color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.margin-row-fee, .margin-row-hours, .margin-row-cost{
  font-size:12.5px;text-align:right;letter-spacing:-.01em;
  color:var(--ink-2);
}
.margin-row-margin{
  font-size:13px;font-weight:600;text-align:right;
  letter-spacing:-.012em;
}
.margin-row-margin.good{color:var(--good);}
.margin-row-margin.warn{color:#854F0B;}
.margin-row-margin.bad{color:var(--accent);}
.margin-row.total-row{
  background:var(--line-soft);
  border-top:1px solid var(--line);
  border-bottom:none;
}
.margin-row.total-row strong{font-weight:600;color:var(--ink);}
.margin-pm-line{
  margin-top:10px;font-size:11.5px;color:var(--ink-3);
  display:flex;justify-content:space-between;letter-spacing:-.005em;
  padding:0 4px;
}
.margin-pm-lbl{font-style:italic;}
.margin-pm-val{font-variant-numeric:tabular-nums;}
.margin-untracked{
  margin-top:10px;font-size:11.5px;
  color:#854F0B;letter-spacing:-.005em;
  background:var(--warn-soft);
  padding:8px 12px;border-radius:6px;
}

/* Deliverables block when nested under Financial */
.deliverables-block{margin-top:18px;}
.deliverables-block .deliverables-label{
  font-size:11.5px;font-weight:600;
  letter-spacing:.04em;text-transform:uppercase;
  color:var(--ink-3);margin-bottom:8px;display:block;
}
.deliv-add-btn{margin-top:10px;}

/* Deliverables count in project list */
.delv-count{
  font-size:12.5px;color:var(--ink-2);
  letter-spacing:-.005em;
  font-variant-numeric:tabular-nums;
}

/* ═══════════════════════════════════════════════════════════════════
   FOLDER GROUPS (Projects tab — projects grouped by folder)
   ═══════════════════════════════════════════════════════════════════ */
.folder-group-header{
  display:flex;align-items:center;gap:10px;
  padding:10px 22px;
  background:var(--line-soft);
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line);
}
.folder-group-header:first-child{border-top:none;}
.folder-group-toggle{
  width:18px;height:18px;border-radius:4px;
  background:transparent;border:none;cursor:pointer;
  color:var(--ink-3);padding:0;
  display:flex;align-items:center;justify-content:center;
  font-family:inherit;flex-shrink:0;
  transition:all .12s;
}
.folder-group-toggle:hover{background:rgba(0,0,0,0.05);color:var(--ink);}
.folder-group-name{
  font-size:11px;font-weight:600;
  letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink-2);
}
.folder-group-count{
  font-size:11px;color:var(--ink-3);
  font-variant-numeric:tabular-nums;
  letter-spacing:-.005em;
}
.folder-group-count::before{
  content:'·';margin:0 6px;color:var(--ink-4);
}

/* Column headers above the deliverables editor list */
.deliv-col-headers{
  display:grid;grid-template-columns:24px 1fr 160px 32px;
  gap:10px;align-items:center;
  padding:0 0 8px;margin-bottom:8px;
  border-bottom:1px solid var(--line-soft);
}
.deliv-col-h{
  font-size:10.5px;font-weight:600;
  letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-3);
}
.deliv-col-h.fee{text-align:left;}

/* ═══════════════════════════════════════════════════════════════════
   ADD TASK BUTTON + MENU (Time grid)
═══════════════════════════════════════════════════════════════════ */
.tg-row.tg-addtask-row{
  border-top:1px solid var(--line-soft);
  background:var(--paper);
  display:block !important;  /* Override grid layout — single full-width cell */
  padding:0;
}
.tg-addtask-cell{
  padding:8px 16px 10px 38px;
  min-height:auto !important;
}
.tg-addtask-btn{
  display:inline-flex;align-items:center;gap:5px;
  padding:5px 11px 5px 9px;border-radius:100px;
  background:transparent;border:1px dashed var(--line);
  color:var(--ink-3);font-family:inherit;font-size:11.5px;font-weight:500;
  cursor:pointer;letter-spacing:-.005em;
  transition:all .12s;
}
.tg-addtask-btn:hover{
  border-color:var(--ink);background:var(--ink);color:var(--paper);
  border-style:solid;
}
.tg-addtask-btn svg{stroke:currentColor;flex-shrink:0;}

/* Inline × on each task row (only visible on hover) */
.tg-task-remove{
  width:18px;height:18px;border-radius:50%;
  background:transparent;border:none;cursor:pointer;
  color:var(--ink-4);font-size:13px;line-height:1;padding:0;
  display:flex;align-items:center;justify-content:center;
  font-family:inherit;flex-shrink:0;margin-left:6px;
  opacity:0;transition:all .12s;
}
.tg-deliv-row:hover .tg-task-remove{opacity:1;}
.tg-task-remove:hover{background:var(--accent-soft);color:var(--accent);}

/* Pop-up task picker menu */
.task-add-menu{
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:10px;
  box-shadow:0 8px 28px rgba(0,0,0,.12);
  padding:6px;min-width:200px;max-width:280px;
  z-index:1000;
  animation:fade-in .12s ease;
  max-height:320px;overflow-y:auto;
}
.task-add-menu-item{
  width:100%;text-align:left;
  padding:8px 12px;border-radius:6px;
  background:transparent;border:none;cursor:pointer;
  font-family:inherit;font-size:13px;color:var(--ink);
  letter-spacing:-.005em;display:block;
  transition:background .1s;
}
.task-add-menu-item:hover{background:var(--line-soft);}
.task-add-menu-item.pm{font-style:italic;color:var(--ink-3);}

/* ═══════════════════════════════════════════════════════════════════
   REPORTS TABLE — expandable rows (per-task breakdown)
═══════════════════════════════════════════════════════════════════ */
.rep-name-cell{
  display:flex;align-items:center;gap:10px;
}
.rep-row-chev{
  width:20px;height:20px;border-radius:5px;
  background:transparent;border:none;cursor:pointer;
  color:var(--ink-3);padding:0;
  display:flex;align-items:center;justify-content:center;
  flex-shrink:0;font-family:inherit;
  transition:all .12s;
}
.rep-row-chev:hover{background:var(--line-soft);color:var(--ink);}
.rep-row-chev.on{color:var(--ink);}
.rep-row-chev-spacer{display:inline-block;width:20px;height:20px;flex-shrink:0;}

/* Expanded parent row — visual cue */
.rep-tbl tbody tr.expanded-parent td{
  background:var(--line-soft);
  border-bottom-color:transparent;
}
.rep-tbl tbody tr.expanded-parent:hover td{
  background:var(--line-soft);
}

/* Sub-rows for the breakdown */
.rep-tbl tbody tr.rep-breakdown-row{
  background:#fafafa;
}
.rep-tbl tbody tr.rep-breakdown-row:hover{
  background:var(--line-soft);
}
.rep-tbl tbody tr.rep-breakdown-row td{
  padding-top:10px;padding-bottom:10px;
  border-bottom:1px solid var(--line-soft);
  font-size:12px;
}
.rep-breakdown-name{
  font-size:12.5px;color:var(--ink-2);
  letter-spacing:-.005em;
  padding-left:30px;  /* indent under chevron column */
  position:relative;
}
.rep-breakdown-name::before{
  content:'';position:absolute;left:18px;top:50%;
  width:8px;height:1px;background:var(--ink-4);
}
.rep-breakdown-name.pm{color:var(--ink-3);font-style:italic;}
.rep-pm-tag{
  font-size:9.5px;font-weight:600;
  letter-spacing:.05em;text-transform:uppercase;
  padding:1px 6px;border-radius:100px;
  background:var(--line-soft);color:var(--ink-3);
  margin-left:6px;font-style:normal;
}
.rep-no-fee{
  font-size:11px;color:var(--ink-4);font-style:italic;
  letter-spacing:-.005em;
}
.rep-tbl tbody tr.rep-breakdown-row.rep-breakdown-pm{
  background:#fafaf6;
}

/* ═══════════════════════════════════════════════════════════════════
   CRM TABLE — column header row
═══════════════════════════════════════════════════════════════════ */
.crm-row.crm-row-header{
  padding:10px 24px;
  background:transparent;
  cursor:default;
  border-bottom:1px solid var(--line);
}
.crm-row.crm-row-header:hover{background:transparent;}
.crm-row.crm-row-header .crm-row-cell{
  font-size:9.5px;
  font-weight:600;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--ink-4);
}

/* ═══════════════════════════════════════════════════════════════════
   ORBIT STRUCTURAL LAYER
   PP Supply Mono is used for telemetry treatments (sidebar labels, page
   meta, mini-mark caption, context bar live-tag). Inter stays everywhere
   else.
═══════════════════════════════════════════════════════════════════ */

.mono{font-family:'PP Supply Mono', ui-monospace, monospace;}

/* ─── Sidebar labels: telemetry treatment + hairline rule ────────── */
.sb-label{
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:10px;font-weight:400;color:var(--ink-4);
  text-transform:uppercase;letter-spacing:.16em;
  padding:0 10px;margin-bottom:10px;
  display:flex;align-items:center;gap:10px;
}
.sb-label::after{
  content:'';
  flex:1;
  height:1px;
  background:var(--line);
}

/* ─── Page title meta line ──────────────────────────────────────── */
.page-head{
  display:flex;align-items:baseline;justify-content:space-between;
  gap:24px;flex-wrap:wrap;
}
.page-title-row{
  display:flex;align-items:baseline;gap:16px;
}
.page-title-meta{
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:11px;color:var(--ink-3);
  font-weight:400;letter-spacing:.12em;text-transform:uppercase;
}
.page-title-meta .accent{color:var(--accent);}
.page-title-meta .sep{margin:0 8px;color:var(--ink-4);}

/* ─── Sidebar mini-mark footer ──────────────────────────────────── */
.sb-mini-mark{
  display:flex;align-items:center;gap:10px;
  padding:14px 10px;
  margin-top:32px;
  border-top:1px solid var(--line);
}
.sb-mini-mark svg{width:22px;height:22px;flex-shrink:0;}
.sb-mini-mark .info{flex:1;min-width:0;}
.sb-mini-mark .info-line-1{
  font-size:13px;font-weight:600;color:var(--ink);
  letter-spacing:-.012em;
}
/* mini-mark info-line-2 / live-dot removed — single-line caption only */

/* ─── Context bar — "active orbit" prompt ───────────────────────── */
.context-bar{
  display:flex;align-items:center;gap:16px;
  background:linear-gradient(135deg, var(--paper) 0%, var(--accent-pale) 100%);
  border:1px solid var(--line);
  border-radius:14px;
  padding:14px 18px 14px 14px;
  margin-bottom:20px;
  position:relative;overflow:hidden;
}
.context-bar::before{
  content:'';
  position:absolute;
  top:0;left:0;bottom:0;width:3px;
  background:linear-gradient(180deg, var(--accent) 0%, var(--accent-deep) 100%);
}
.context-bar.empty{background:var(--paper);}
.context-bar.empty::before{background:var(--line);}
.context-bar-mark{
  width:40px;height:40px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
}
.context-bar-mark svg{
  width:38px;height:38px;
  animation:context-spin 30s linear infinite;
}
.context-bar.empty .context-bar-mark svg{
  animation:none;opacity:.4;
}
@keyframes context-spin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}

.context-bar-text{flex:1;min-width:0;}
.context-bar-title{
  font-size:13px;font-weight:600;color:var(--ink);
  letter-spacing:-.012em;margin-bottom:3px;
  display:flex;align-items:center;gap:10px;
}
.context-bar-title .live-tag{
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:9.5px;font-weight:400;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent);
  display:inline-flex;align-items:center;gap:5px;
}
.context-bar-title .live-tag::before{
  content:'';width:5px;height:5px;border-radius:50%;
  background:var(--accent);
  box-shadow:0 0 8px var(--accent);
  animation:context-blink 1.6s ease-in-out infinite;
}
@keyframes context-blink{50%{opacity:0.4;}}
.context-bar-body{
  font-size:12px;color:var(--ink-3);
  line-height:1.4;
  letter-spacing:-.005em;
}
.context-bar-body strong{color:var(--ink);font-weight:500;}
.context-bar-body .sep{margin:0 6px;color:var(--ink-4);}
.context-bar-cta{
  font-size:12px;font-weight:500;color:var(--paper);
  background:var(--ink);
  border:none;cursor:pointer;
  padding:8px 14px;border-radius:100px;
  transition:background .12s;
  flex-shrink:0;
  display:inline-flex;align-items:center;gap:6px;
  font-family:inherit;letter-spacing:-.005em;
}
.context-bar-cta:hover{background:#000;}
.context-bar-cta svg{width:11px;height:11px;stroke:currentColor;fill:none;stroke-width:2;}

/* ─── Active orbit row treatment on Projects table ──────────────── */
.proj-row.is-active-orbit{
  position:relative;
  background:linear-gradient(90deg, var(--accent-pale) 0%, transparent 60%);
}
.proj-row.is-active-orbit:hover{
  background:linear-gradient(90deg, var(--accent-soft) 0%, var(--paper) 60%);
}
.proj-row.is-active-orbit .proj-name::before{
  content:'';
  display:inline-block;
  width:5px;height:5px;border-radius:50%;
  background:var(--accent);
  margin-right:8px;
  vertical-align:middle;
  box-shadow:0 0 8px var(--accent);
  animation:row-blink 2s ease-in-out infinite;
}
@keyframes row-blink{0%,100%{opacity:1;}50%{opacity:0.5;}}


/* ═══════════════════════════════════════════════════════════════════
   ORBIT FULL BUILD — additions for v5 mock direction
═══════════════════════════════════════════════════════════════════ */

/* Page horizon strip — hairline gradient under each page title */
.page-horizon{
  height:1px;
  background:linear-gradient(90deg,
    var(--accent) 0%,
    var(--accent-deep) 35%,
    var(--ink) 65%,
    transparent 100%);
  margin:0 0 22px;
}

/* Sidebar 'In Orbit' icon — single ring, rotated -45° so satellite sits top-right */
.sb-orbit-icon{transform:rotate(-45deg);}

/* Sidebar avatar — same height as the SVG icons in sidebar buttons */
.sb-avatar{
  display:inline-flex;align-items:center;justify-content:center;
  width:18px;height:18px;border-radius:50%;
  background:var(--accent);color:var(--paper);
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:8.5px;font-weight:600;letter-spacing:.04em;
  flex-shrink:0;
}


/* Stat card corner icon — mini Orbit ring, low-opacity by default,
   bright + animated on the active card */
.stat-corner{
  position:absolute;
  bottom:14px;right:14px;
  width:22px;height:22px;
  color:var(--ink);
  opacity:.18;
  transition:opacity .2s, color .2s;
  pointer-events:none;
}
.stat-corner svg{width:100%;height:100%;}
.stat:hover .stat-corner{opacity:.32;}

.stat.active .stat-corner{
  color:#fff;
  opacity:.7;
}
.stat.active .stat-corner svg{
  animation:stat-corner-spin 18s linear infinite;
}
@keyframes stat-corner-spin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}

/* "ACTIVE" mono tag in top-right of active stat card */
.stat.active::after{
  content:'ACTIVE';
  position:absolute;
  top:18px;right:18px;
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:8.5px;font-weight:400;
  letter-spacing:.18em;
  color:rgba(255,255,255,.5);
}




/* ═══════════════════════════════════════════════════════════════════
   ORBIT — unified stat card styling for Finance, CRM, Time Reports
   These pages use different markup classes (.j-card, .crm-stat-card,
   .rep-card) but should match the Orbit design language used on Projects/Modal.
═══════════════════════════════════════════════════════════════════ */

/* Container layouts: 4-column grids matching the .stats strip on Projects */
.journey,
.crm-stats,
.rep-summary{
  display:grid;grid-template-columns:repeat(4,1fr);gap:0;
  border:1px solid var(--line);border-radius:16px;
  background:var(--paper);margin-bottom:20px;overflow:hidden;
}

/* Cards — match .stat container */
.j-card,
.crm-stat-card,
.rep-card{
  padding:24px 22px 22px;
  border-right:1px solid var(--line);
  cursor:default;
  transition:background .12s;
  position:relative;
  overflow:hidden;
  background:var(--paper);
  color:var(--ink);
}
.j-card:last-child,
.crm-stat-card:last-child,
.rep-card:last-child{border-right:none;}

/* Labels — mono small caps */
.j-lbl,
.crm-stat-lbl,
.rep-lbl{
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:10px;color:var(--ink-3);font-weight:400;
  margin-bottom:18px;display:flex;align-items:center;gap:8px;
  letter-spacing:.16em;text-transform:uppercase;
}

/* The little ".j-step" number badge — keep but make mono and circular */
.j-lbl .j-step{
  display:inline-flex;align-items:center;justify-content:center;
  width:18px;height:18px;border-radius:50%;
  background:var(--chip-bg);color:var(--ink-2);
  font-size:10px;font-weight:600;letter-spacing:0;
  flex-shrink:0;
}

/* Numbers — 48px semibold tabular */
.j-val,
.crm-stat-val,
.rep-val{
  font-size:48px;font-weight:600;letter-spacing:-.04em;line-height:1;
  font-variant-numeric:tabular-nums;
  color:var(--ink);
}

/* Sub-text — same as .stat-sub */
.j-sub,
.crm-stat-sub,
.rep-sub{
  font-size:11.5px;color:var(--ink-3);
  margin-top:10px;letter-spacing:-.005em;
}

/* Trend indicators preserved */
.rep-sub .rep-trend{font-weight:500;}
.rep-sub .rep-trend.up{color:var(--good);}
.rep-sub .rep-trend.dn{color:var(--accent);}

/* ─── Active / dark state — deep gradient + animated ring ─────── */
.j-card.dark,
.crm-stat-card.dark,
.rep-card.dark{
  background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 55%, var(--ink) 100%);
  color:#fff;
  border-right-color:var(--ink);
}
.j-card.dark + .j-card,
.crm-stat-card.dark + .crm-stat-card,
.rep-card.dark + .rep-card{border-left:none;}

.j-card.dark .j-lbl,
.crm-stat-card.dark .crm-stat-lbl,
.rep-card.dark .rep-lbl{color:rgba(255,255,255,.55);}
.j-card.dark .j-lbl .j-step{background:rgba(255,255,255,.18);color:#fff;}

.j-card.dark .j-val,
.crm-stat-card.dark .crm-stat-val,
.rep-card.dark .rep-val{color:#fff;}

.j-card.dark .j-sub,
.crm-stat-card.dark .crm-stat-sub,
.rep-card.dark .rep-sub{color:rgba(255,255,255,.65);}

/* Paid card — light treatment, matches Ready/Awaiting cards */
.j-card.paid{background:var(--paper);}

/* Capacity bar inside Reports dark card — invert colours */
.rep-card.dark .rep-cap-bar{background:rgba(255,255,255,.15);}
.rep-card.dark .rep-cap-fill{background:#fff;}

/* ─── Corner Orbit ring — injected by JS for these cards too ─────── */
.j-card .stat-corner,
.crm-stat-card .stat-corner,
.rep-card .stat-corner{
  position:absolute;bottom:14px;right:14px;
  width:22px;height:22px;
  color:var(--ink);opacity:.18;
  pointer-events:none;
  transition:opacity .2s, color .2s;
}
.j-card .stat-corner svg,
.crm-stat-card .stat-corner svg,
.rep-card .stat-corner svg{width:100%;height:100%;}
.j-card:hover .stat-corner,
.crm-stat-card:hover .stat-corner,
.rep-card:hover .stat-corner{opacity:.32;}

.j-card.dark .stat-corner,
.crm-stat-card.dark .stat-corner,
.rep-card.dark .stat-corner{
  color:#fff;opacity:.7;
}
.j-card.dark .stat-corner svg,
.crm-stat-card.dark .stat-corner svg,
.rep-card.dark .stat-corner svg{
  animation:stat-corner-spin 18s linear infinite;
}

/* Top-right tag — different label per card type */
.j-card.dark::after,
.crm-stat-card.dark::after,
.rep-card.dark::after{
  content:'FOCUS';
  position:absolute;
  top:18px;right:18px;
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:8.5px;font-weight:400;
  letter-spacing:.18em;
  color:rgba(255,255,255,.5);
}
/* PAID tag removed — paid card now matches the other light cards */
/* When the paid card has no settled invoices yet, keep it dark but quieter */
.j-card.paid:has(.j-val:empty),
.j-card.paid:has(.j-val:contains('£0')){
  opacity:.85;
}

/* ═══════════════════════════════════════════════════════════════════
   WEEKLY PLANNER — equalize column widths across team + 5 days
═══════════════════════════════════════════════════════════════════ */
.pgrid{
  grid-template-columns:repeat(6, 1fr) !important;
}


/* ═══════════════════════════════════════════════════════════════════
   PHASE-1-AUTH — login overlay, admin-only placeholder, role-based hiding
═══════════════════════════════════════════════════════════════════ */

/* Hide app while not yet booted */
body:not(.booted) > .hdr,
body:not(.booted) > .who-bar,
body:not(.booted) > .page,
body:not(.booted) > .toast { display:none !important; }

/* ─── Login overlay ─────────────────────────────────────────── */
.login-overlay{
  position:fixed;inset:0;z-index:5000;
  display:flex;align-items:center;justify-content:center;
  background:radial-gradient(ellipse 80% 60% at 50% 40%, var(--accent-pale) 0%, var(--paper) 60%, var(--paper) 100%);
  padding:24px;
}
.login-overlay.hidden{display:none;}

.login-card{
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:18px;
  padding:40px 44px 36px;
  width:100%;max-width:380px;
  box-shadow:0 8px 40px -12px rgba(11,14,25,.12), 0 2px 6px -2px rgba(11,14,25,.06);
}
.login-mark{
  width:48px;height:48px;
  margin-bottom:20px;
}
.login-mark svg{
  width:100%;height:100%;
  animation:context-spin 30s linear infinite;
}
@keyframes context-spin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}
.login-title{
  font-size:28px;font-weight:600;letter-spacing:-.02em;
  margin-bottom:4px;color:var(--ink);
}
.login-sub{
  font-size:13px;color:var(--ink-3);
  margin-bottom:28px;letter-spacing:-.005em;
}

.login-stage{display:flex;flex-direction:column;gap:10px;margin-top:16px;}
.login-stage.hidden{display:none;}
.login-stage:first-of-type{margin-top:0;}
.login-label{
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:10px;color:var(--ink-3);
  text-transform:uppercase;letter-spacing:.16em;
  margin-bottom:2px;
}
.login-input{
  width:100%;padding:12px 14px;
  border:1px solid var(--line);border-radius:10px;
  font-family:inherit;font-size:14px;
  color:var(--ink);background:var(--paper);
  outline:none;letter-spacing:-.01em;
  transition:border-color .12s, box-shadow .12s;
  box-sizing:border-box;
}
.login-input:focus{
  border-color:var(--accent);
  box-shadow:0 0 0 3px var(--accent-soft);
}
.login-error{
  font-size:12.5px;color:var(--accent);
  min-height:18px;letter-spacing:-.005em;
}
.login-submit{
  width:100%;padding:13px 14px;
  background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);
  color:var(--paper);
  border:none;border-radius:10px;
  font-family:inherit;font-size:14px;font-weight:500;
  letter-spacing:-.005em;cursor:pointer;
  transition:transform .08s;
  margin-top:8px;
  box-shadow:0 1px 3px rgba(11,14,25,0.25);
}
.login-submit:active{transform:scale(0.98);}
.login-back{
  background:none;border:none;
  color:var(--ink-3);font-size:12.5px;
  font-family:inherit;cursor:pointer;
  padding:8px 0 0;text-align:center;
  letter-spacing:-.005em;
}
.login-back:hover{color:var(--ink);}


/* ─── Admin-only placeholder ─────────────────────────────────── */
.admin-only-placeholder{
  display:flex;flex-direction:column;align-items:center;
  padding:80px 24px;text-align:center;
  background:var(--paper);border:1px solid var(--line);
  border-radius:18px;
}
.aop-mark{
  width:48px;height:48px;color:var(--ink-3);
  margin-bottom:18px;
}
.aop-mark svg{width:100%;height:100%;}
.aop-title{
  font-size:20px;font-weight:600;letter-spacing:-.018em;
  color:var(--ink);margin-bottom:6px;
}
.aop-sub{
  font-size:13px;color:var(--ink-3);
  letter-spacing:-.005em;
}


/* ═══════════════════════════════════════════════════════════════════
   ROLE-BASED HIDING — body[data-role="team"]
═══════════════════════════════════════════════════════════════════ */

/* ── Time tracking: hide Team + Reports subtab buttons for team role ── */
body[data-role="team"] #time-subtabs button[data-view="team"],
body[data-role="team"] #time-subtabs button[data-view="reports"]{
  display:none !important;
}

/* ── Projects table: hide invoice column for team role ────────────
   The previous rule used `.invoice-state { display: none }` which only
   hid the inner span — leaving the wrapping <div> still in the grid as
   a 7th cell. With only 7 grid tracks declared, the chevron (cell 8)
   wrapped to a new row.

   Fix: target the cell WRAPPER via :nth-child so the entire grid cell
   collapses out. Live row layout: 8 cells, invoice is cell 7. Modal
   row: 9 cells (extra Upload column), invoice is cell 8. */
body[data-role="team"] .proj-row:not(.modal) > div:nth-child(7),
body[data-role="team"] .proj-head:not(.modal) > div:nth-child(7) {
  display: none !important;
}
body[data-role="team"] .proj-row.modal > div:nth-child(8),
body[data-role="team"] .proj-head.modal > div:nth-child(8) {
  display: none !important;
}

/* Project edit Financial section: hidden via JS in renderProject() */
/* Financial section now hidden via JS conditional in renderProject() */

/* ── Retainer page: hide ONLY the invoice/export action buttons for team role.
   Jake/Dan B/Niamh see full retainer visibility (days used, days remaining,
   allowance bar, sparkline, kind label) so they can see their own consumption
   against the contracted retainer. They just can't trigger invoicing. ── */
body[data-role="team"] .ret-actions-bar button[onclick*="createRetainerInvoice"],
body[data-role="team"] .ret-actions-bar button[onclick*="exportRetainerPDF"]{
  display:none !important;
}

/* Hide hourly_rate / day_rate / fee_amount input fields in retainer edit */
body[data-role="team"] [data-field="day_rate"],
body[data-role="team"] [data-field="hourly_rate"],
body[data-role="team"] [data-field="fee_amount"]{
  display:none !important;
}

/* ── Hide stat cards on Finance/CRM pages for team role ── */
/* (Belt-and-braces — the page itself shows admin-only placeholder, so this
   is just in case) */
body[data-role="team"] #page-finance .journey,
body[data-role="team"] #page-finance .fin-subtabs,
body[data-role="team"] #page-crm .crm-stats,
body[data-role="team"] #page-crm .crm-filters{
  display:none !important;
}

/* ── Hide Invoice sidebar group on Projects for team role ── */
/* The whole "Invoice" filter block (Ready to invoice / Awaiting PO / Invoiced)
   is commercial info — team role shouldn't see counts or filter by it.
   Same on Modal page. */
body[data-role="team"] #sb-live-invoice,
body[data-role="team"] #sb-live-invoice + .sb-divider,
body[data-role="team"] #sb-modal-invoice,
body[data-role="team"] #sb-modal-invoice + .sb-divider{
  display:none !important;
}

/* ── Collapse Invoice column track on Projects table for team role ── */
/* Hiding the cells with display:none leaves an empty grid column. Override
   the grid template so the column track itself is removed. */
body[data-role="team"] .proj-head,
body[data-role="team"] .proj-row{
  grid-template-columns:minmax(220px,1.4fr) 130px 110px minmax(240px,1.8fr) 110px 90px 44px;
}
body[data-role="team"] .proj-head.modal,
body[data-role="team"] .proj-row.modal{
  grid-template-columns:minmax(200px,1.2fr) 130px 110px minmax(220px,1.6fr) 110px 110px 90px 44px;
}




/* ═══════════════════════════════════════════════════════════════════
   LOGIN-ORBITS — orbital rings brand moment behind the login card
═══════════════════════════════════════════════════════════════════ */

/* SVG fills viewport, slightly oversized for an "inside the system" feel */
.login-orbits{
  position:absolute;
  top:50%;left:50%;
  /* Large enough that even the inner ring (r=240 in 1000-unit viewBox)
     comfortably surrounds the login card on desktop screens. */
  width:min(150vh, 150vw);
  height:min(150vh, 150vw);
  transform:translate(-50%, -50%);
  pointer-events:none;
  z-index:0;
  overflow:visible;
}

/* Login card sits above the orbits */
.login-overlay .login-card{
  position:relative;
  z-index:1;
}

/* Centre breathing room — soft glow behind the card */
.login-overlay{
  background:
    radial-gradient(ellipse 80% 60% at 50% 40%, var(--accent-pale) 0%, var(--paper) 70%, var(--paper) 100%);
}

/* Each ring rotates around the SVG centre (0, 0) */
.orbit-ring{
  transform-origin:0 0;
}

.orbit-0{ animation:orbit-ccw 160s linear infinite; }
.orbit-1{ animation:orbit-cw  120s linear infinite; }
.orbit-2{ animation:orbit-ccw  90s linear infinite; }
.orbit-3{ animation:orbit-cw   65s linear infinite; }
.orbit-4{ animation:orbit-ccw  45s linear infinite; }

@keyframes orbit-cw{
  from{ transform:rotate(0deg); }
  to  { transform:rotate(360deg); }
}
@keyframes orbit-ccw{
  from{ transform:rotate(0deg); }
  to  { transform:rotate(-360deg); }
}

/* Labels counter-rotate at the same speed (opposite direction) so they
   stay readable as the satellite traces the ring. The label group is
   already translated to the satellite's position, so its local (0,0)
   IS the satellite — rotating around 0 0 here cancels the parent. */
.orbit-label{
  transform-origin:0 0;
}

.orbit-label-0{ animation:orbit-cw 160s linear infinite; }
.orbit-label-1{ animation:orbit-ccw 120s linear infinite; }
.orbit-label-2{ animation:orbit-cw 90s linear infinite; }
.orbit-label-3{ animation:orbit-ccw 65s linear infinite; }
.orbit-label-4{ animation:orbit-cw 45s linear infinite; }

/* Mono telemetry text */
.orbit-tag-text{
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:11px;
  letter-spacing:.16em;
  text-transform:uppercase;
  fill:var(--ink-3);
  opacity:0.6;
  text-anchor:middle;
}

/* Respect reduced-motion preference */
@media (prefers-reduced-motion:reduce){
  .orbit-0, .orbit-1, .orbit-2, .orbit-3, .orbit-4,
  .orbit-label-0, .orbit-label-1, .orbit-label-2, .orbit-label-3, .orbit-label-4{
    animation:none;
  }
}


/* ═══════════════════════════════════════════════════════════════════
   ORBIT MODAL (sign-out, future generic modals)
═══════════════════════════════════════════════════════════════════ */
.orbit-modal-backdrop{
  position:fixed;inset:0;z-index:6000;
  background:rgba(11,14,25,0.4);
  display:flex;align-items:center;justify-content:center;
  padding:24px;
  backdrop-filter:blur(2px);
  animation:orbit-modal-fade-in 0.12s ease-out;
}
@keyframes orbit-modal-fade-in{
  from{opacity:0;}
  to{opacity:1;}
}
.orbit-modal{
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:16px;
  padding:28px 32px 24px;
  width:100%;max-width:400px;
  box-shadow:0 12px 48px -12px rgba(11,14,25,.18), 0 4px 12px -4px rgba(11,14,25,.08);
}
.orbit-modal-title{
  font-size:18px;font-weight:600;letter-spacing:-.018em;
  color:var(--ink);margin-bottom:6px;
}
.orbit-modal-body{
  font-size:13.5px;color:var(--ink-3);
  letter-spacing:-.005em;
  line-height:1.5;
  margin-bottom:22px;
}
.orbit-modal-actions{
  display:flex;gap:10px;justify-content:flex-end;
}

/* Hide CRM subtitle when team role (admin-only placeholder showing) */
body[data-role="team"] #page-crm .page-subtitle{
  display:none !important;
}
/* Also hide the "+ New lead" button */
body[data-role="team"] #page-crm .page-head .pill-btn{
  display:none !important;
}
/* Hide the page-title-meta when class .hidden is added by JS */
.page-title-meta.hidden{display:none !important;}

/* ─── Modifier: suppress the "ACTIVE" mono tag on certain stat.active cards.
   The top-right ACTIVE label only makes sense on Projects/Modal where the
   user is actively filter-toggling. On dashboards (Time tracking top project)
   the card is just a highlighted KPI, not a toggle state. */
.stat.active.no-active-tag::after{
  content:none;
}

/* "by Paragon" attribution — pill (on dark) and login card (on light) */
.brand-pill .brand-by{
  color:rgba(255,255,255,.55);
  font-weight:400;
}
.login-by{
  font-size:13px;
  color:var(--ink-3);
  font-weight:400;
  letter-spacing:-.005em;
}


/* ═══════════════════════════════════════════════════════════════════
   FLIGHTDECK — personal daily dashboard
   First page in the nav. Composes greeting + today's logged time + orbital
   animation + today's projects (from Weekly) + personal task list.
   Reuses the same dark gradient as .stat.active so the hero feels native
   to the app's design language.
   ═══════════════════════════════════════════════════════════════════ */

.fd-shell{padding:24px 32px 48px;}

/* HERO — dark gradient stat card matching .stat.active */
.fd-hero{
  position:relative;
  background:radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 55%, var(--ink) 100%);
  color:#fff;
  border-radius:16px;
  padding:32px 36px;
  margin-bottom:24px;
  overflow:hidden;
  min-height:260px;
  display:grid;
  grid-template-columns:1fr auto;
  gap:32px;
  align-items:stretch;
}

/* Status pill — top-right of Flightdeck hero. Click to cycle through states. */
.fd-status-pill{
  position:absolute;
  top:14px;right:18px;
  z-index:3;
  background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.1);
  border-radius:100px;
  padding:6px 12px 6px 10px;
  display:flex;align-items:center;gap:8px;
  cursor:pointer;
  font:inherit;
  transition:background .15s, border-color .15s, transform .08s;
}
.fd-status-pill:hover{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.18);}
.fd-status-pill:active{transform:scale(0.97);}
.fd-status-pill .fd-status-text{
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:9px;
  letter-spacing:.18em;
  font-weight:500;
  color:rgba(255,255,255,.85);
  text-transform:uppercase;
}
.fd-status-pill .fd-status-dot{
  width:7px;height:7px;border-radius:50%;
  background:#5dd16a;          /* Default: Active = green */
  box-shadow:0 0 0 2px rgba(93,209,106,.18);
}
/* State-driven dot colours, set by JS via class on the pill */
.fd-status-pill.is-away    .fd-status-dot{background:#f0a93a;box-shadow:0 0 0 2px rgba(240,169,58,.18);}
.fd-status-pill.is-focus   .fd-status-dot{background:#7d8aff;box-shadow:0 0 0 2px rgba(125,138,255,.18);}
.fd-status-pill.is-meeting .fd-status-dot{background:#d63c2a;box-shadow:0 0 0 2px rgba(214,60,42,.18);}

.fd-hero-left{display:flex;flex-direction:column;justify-content:space-between;position:relative;z-index:2;gap:24px;}
.fd-greeting h2{font-size:36px;font-weight:600;letter-spacing:-.025em;line-height:1.05;color:#fff;margin:0;}
.fd-greeting h2 .quiet{color:rgba(255,255,255,.45);font-weight:500;}
.fd-greeting-sub{margin-top:8px;color:rgba(255,255,255,.55);font-size:11px;font-family:'PP Supply Mono', ui-monospace, monospace;letter-spacing:.16em;text-transform:uppercase;font-weight:400;}
.fd-greeting-sub strong{color:rgba(255,255,255,.85);font-weight:500;}

.fd-context-row{display:flex;gap:10px;margin-top:18px;flex-wrap:wrap;}
.fd-ctx{display:flex;align-items:center;gap:10px;padding:8px 14px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.08);border-radius:100px;}
.fd-ctx-icon{display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.85);flex-shrink:0;}
.fd-ctx-label{font-family:'PP Supply Mono', ui-monospace, monospace;font-size:10px;color:rgba(255,255,255,.5);text-transform:uppercase;letter-spacing:.14em;font-weight:500;line-height:1;}
.fd-ctx-sep{display:inline-block;width:1px;height:12px;background:rgba(255,255,255,.25);flex-shrink:0;}
.fd-ctx-value{font-family:'PP Supply Mono', ui-monospace, monospace;font-size:12px;color:#fff;font-weight:500;letter-spacing:.04em;font-variant-numeric:tabular-nums;text-transform:uppercase;line-height:1;}

.fd-today{margin-top:auto;padding-top:20px;}
.fd-today-label{font-family:'PP Supply Mono', ui-monospace, monospace;font-size:10px;letter-spacing:.18em;color:rgba(255,255,255,.55);text-transform:uppercase;font-weight:500;margin-bottom:10px;}
.fd-today-row{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;}
.fd-today-value{font-size:48px;font-weight:600;letter-spacing:-.025em;line-height:1;font-variant-numeric:tabular-nums;color:#fff;}
.fd-today-value .unit{font-size:18px;color:rgba(255,255,255,.55);font-weight:500;margin-left:8px;}
.fd-today-of{color:rgba(255,255,255,.65);font-size:13px;}
.fd-today-of strong{color:#fff;font-weight:500;}

/* Hero right — orbital animation */
.fd-hero-right{position:relative;display:flex;align-items:center;justify-content:center;min-width:280px;}
.fd-orbit-stage{position:relative;width:280px;height:280px;}
.fd-orbit-stage svg{width:100%;height:100%;display:block;overflow:visible;}
.fd-orbit-stage .fd-ring{fill:none;stroke:rgba(255,255,255,.18);stroke-width:1;}
.fd-orbit-stage .fd-sat-accent{fill:var(--accent);}
.fd-orbit-stage .fd-sat-light{fill:#fff;}
.fd-orbit-stage .fd-sat-soft{fill:#7d8aff;}
.fd-orbit-stage .fd-sat-mid{fill:#a5acff;}
.fd-orbit-stage .fd-core{fill:#fff;}
.fd-orbit-stage .fd-core-glow{fill:none;stroke:rgba(255,255,255,.4);stroke-width:1.5;}

@keyframes fd-orbit-cw{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}
@keyframes fd-orbit-ccw{from{transform:rotate(0deg);}to{transform:rotate(-360deg);}}
/* Rotate each satellite around the SVG viewBox centre (0,0) — NOT around its
   own bounding-box centre. This is the same pattern as the login orbital.
   Periods are roughly half the login screen's: the Flightdeck card is much
   smaller, so satellites need to move faster to feel alive instead of static. */
/* Periods are tuned so each satellite has visually-comparable apparent motion.
   Outer rings naturally cover more distance per second at the same angular
   velocity, so inner rings need shorter periods to feel as alive as outer ones.
   The pattern alternates direction (CCW/CW/CCW/CW/CCW) like the login screen. */
.fd-orbit-stage .fd-spin-1{transform-origin:0 0;animation:fd-orbit-ccw 14s linear infinite;}  /* innermost — fastest period to compensate for tiny arc */
.fd-orbit-stage .fd-spin-2{transform-origin:0 0;animation:fd-orbit-cw 18s linear infinite;}
.fd-orbit-stage .fd-spin-3{transform-origin:0 0;animation:fd-orbit-ccw 24s linear infinite;}
.fd-orbit-stage .fd-spin-4{transform-origin:0 0;animation:fd-orbit-cw 32s linear infinite;}
.fd-orbit-stage .fd-spin-5{transform-origin:0 0;animation:fd-orbit-ccw 42s linear infinite;}  /* outermost — slowest period (still feels alive due to long arc) */
@media (prefers-reduced-motion:reduce){
  .fd-orbit-stage .fd-spin-1,
  .fd-orbit-stage .fd-spin-2,
  .fd-orbit-stage .fd-spin-3,
  .fd-orbit-stage .fd-spin-4,
  .fd-orbit-stage .fd-spin-5{animation:none;}
}

/* Two-column grid */
.fd-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;}
.fd-section{display:flex;flex-direction:column;}
.fd-section-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:14px;padding:0 4px;}
.fd-section-head .ttl{font-size:15px;font-weight:600;color:var(--ink);letter-spacing:-.01em;}
.fd-section-head .count{font-family:'PP Supply Mono', ui-monospace, monospace;font-size:10px;color:var(--ink-3);font-weight:400;letter-spacing:.16em;text-transform:uppercase;}

.fd-card{background:#fff;border:1px solid var(--line);border-radius:14px;overflow:hidden;flex:1;}

/* Project rows — clickable to open the project slide-over */
.fd-proj{display:flex;align-items:center;justify-content:space-between;padding:16px 22px;border-bottom:1px solid var(--line-soft);transition:background 0.15s;cursor:pointer;}
.fd-proj:hover{background:var(--line-soft);}
.fd-proj:last-child{border-bottom:none;}
.fd-proj .name{font-weight:500;font-size:14.5px;color:var(--ink);}
.fd-proj .meta{font-size:12px;color:var(--ink-3);margin-top:3px;display:flex;align-items:center;gap:8px;}
.fd-proj .meta .dot{width:3px;height:3px;border-radius:50%;background:var(--ink-4);}
.fd-proj .meta .folder{color:var(--accent);font-weight:500;}
.fd-proj .hours{font-family:'PP Supply Mono', ui-monospace, monospace;font-size:13px;color:var(--ink-2);font-variant-numeric:tabular-nums;letter-spacing:.04em;}
.fd-proj .hours.zero{color:var(--ink-4);}

/* Tasks */
.fd-task-input-row{display:flex;align-items:center;gap:12px;padding:18px 22px;border-bottom:1px solid var(--line-soft);}
.fd-plus{width:22px;height:22px;border-radius:50%;background:var(--ink);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;flex-shrink:0;font-weight:300;line-height:1;}
.fd-task-input-row input{flex:1;font:inherit;border:none;outline:none;background:none;font-size:14.5px;color:var(--ink);}
.fd-task-input-row input::placeholder{color:var(--ink-4);}
.fd-hint{font-family:'PP Supply Mono', ui-monospace, monospace;font-size:10px;color:var(--ink-4);letter-spacing:.16em;text-transform:uppercase;}

.fd-task{display:flex;align-items:center;gap:14px;padding:13px 22px;border-bottom:1px solid var(--line-soft);transition:background 0.15s;}
.fd-task:hover{background:var(--line-soft);}
.fd-task:last-of-type{border-bottom:none;}
.fd-task:hover .fd-task-x{opacity:.6;}
.fd-check{width:18px;height:18px;border:1.5px solid var(--ink-4);border-radius:50%;flex-shrink:0;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;transition:all 0.15s;line-height:1;}
.fd-check:hover{border-color:var(--accent);}
.fd-task.done .fd-check{background:var(--accent);border-color:var(--accent);}
.fd-task.done .fd-title{color:var(--ink-3);text-decoration:line-through;text-decoration-thickness:1px;}
.fd-title{flex:1;font-size:14.5px;color:var(--ink);cursor:text;}
.fd-tag{font-size:11px;font-weight:500;padding:3px 9px;border-radius:6px;background:var(--accent-pale);color:var(--accent-deep);letter-spacing:-.01em;}
.fd-tag.tag-bd{background:#fff5e6;color:#a35d10;}
.fd-tag.tag-ops{background:#e8f5ed;color:#1a7943;}
.fd-tag.tag-hr{background:#fce8f4;color:#9e3675;}
.fd-tag.tag-studio{background:#eef0fe;color:var(--accent-deep);}
.fd-tag.tag-grey{background:var(--line-soft);color:var(--ink-3);}
.fd-task-x{opacity:0;background:none;border:none;color:var(--ink-3);font-size:18px;cursor:pointer;padding:0 4px;line-height:1;transition:opacity 0.15s,color 0.15s;}
.fd-task-x:hover{color:var(--accent);opacity:1 !important;}

.fd-completed-toggle{padding:14px 22px;font-family:'PP Supply Mono', ui-monospace, monospace;font-size:10px;color:var(--ink-3);letter-spacing:.16em;text-transform:uppercase;cursor:pointer;text-align:center;border-top:1px solid var(--line-soft);font-weight:500;}
.fd-completed-toggle:hover{background:var(--line-soft);}

.fd-empty{padding:32px 22px;text-align:center;color:var(--ink-3);font-size:13px;}

/* Mobile/tablet — stack the grid columns */
@media (max-width:900px){
  .fd-hero{grid-template-columns:1fr;}
  .fd-hero-right{display:none;}  /* hide orbital on narrow viewports — saves space */
  .fd-grid{grid-template-columns:1fr;}
}

/* Urgent project checkbox in the project edit form */
.urgent-checkbox{display:flex;align-items:center;gap:10px;cursor:pointer;padding:10px 12px;border:1px solid var(--line);border-radius:10px;transition:border-color .12s,background .12s;flex-wrap:wrap;}
.urgent-checkbox:hover{border-color:var(--ink-4);background:#fafafa;}
.urgent-checkbox input[type="checkbox"]{width:16px;height:16px;accent-color:var(--urgent);cursor:pointer;flex-shrink:0;}
.urgent-checkbox .urgent-dot{width:8px;height:8px;border-radius:50%;background:var(--urgent);flex-shrink:0;}
.urgent-checkbox .urgent-label{font-size:13px;font-weight:500;color:var(--ink);letter-spacing:-.01em;}
.urgent-checkbox .urgent-hint{font-size:11px;color:var(--ink-3);width:100%;padding-left:34px;letter-spacing:-.005em;}
.urgent-checkbox input:checked ~ .urgent-label{color:var(--urgent);}

/* ─── Freelancers in Weekly ──────────────────────────────────────── */

/* Divider row between team members and freelancers */
.prow.freelancer-divider{display:contents;}
.freelancer-divider-label{
  grid-column:1 / -1;
  padding:14px 16px 8px;
  border-top:1px solid var(--line);
  border-bottom:1px solid var(--line-soft);
  background:var(--line-soft);
  font-family:'PP Supply Mono', ui-monospace, monospace;
  font-size:10px;color:var(--ink-3);font-weight:500;
  letter-spacing:.18em;text-transform:uppercase;
}

/* Freelancer person cell — slightly different visual to indicate they're external.
   Uses a faint accent tint on the avatar. */
.prow .person-cell.freelancer{background:#fafaf8;}
.prow .person-cell.freelancer .avatar{
  background:transparent;
  color:var(--ink-2);
  border:1.5px dashed var(--ink-4);
}
.prow .person-cell.freelancer .role{font-style:italic;}
.prow .person-cell.freelancer .name{position:relative;}

/* Tiny remove-x next to freelancer name, only visible on hover */
.freelancer-remove{
  display:none;
  margin-left:6px;
  background:none;border:none;cursor:pointer;
  color:var(--ink-4);font-size:14px;line-height:1;
  padding:0 2px;border-radius:3px;
  transition:color .12s;
}
.prow .person-cell.freelancer:hover .freelancer-remove{display:inline-block;}
.freelancer-remove:hover{color:var(--accent);}

/* Add freelancer button — sits at the bottom of the project bank */
.pbank-foot{padding:12px 16px;border-top:1px solid var(--line);background:var(--line-soft);}
.freelancer-add-btn{
  display:flex;align-items:center;justify-content:center;gap:6px;
  width:100%;
  background:var(--paper);
  border:1px dashed var(--ink-4);
  color:var(--ink-2);
  font:inherit;font-size:13px;font-weight:500;
  letter-spacing:-.01em;
  padding:9px 14px;border-radius:10px;
  cursor:pointer;
  transition:border-color .12s,color .12s,background .12s;
}
.freelancer-add-btn:hover{
  border-color:var(--accent);
  color:var(--accent);
  border-style:solid;
}
.freelancer-add-btn svg{flex-shrink:0;}

/* Generic role-visibility utility — hide elements from team-level users. */
body[data-role="team"] .only-pm{display:none !important;}
.freelancer-divider-hint{color:var(--ink-4);font-weight:400;text-transform:none;letter-spacing:0;font-family:'Inter',sans-serif;font-size:11px;margin-left:4px;}

/* ─── Chip context menu (right-click on Weekly chips) ─────────────── */
.chip-ctx-menu{
  position:fixed;
  z-index:1000;
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:10px;
  box-shadow:0 8px 24px rgba(0,0,0,0.08), 0 1px 3px rgba(0,0,0,0.04);
  padding:5px;
  min-width:200px;
  font-size:13px;
  letter-spacing:-.005em;
}
.chip-ctx-item{
  display:flex;align-items:center;gap:10px;
  width:100%;
  padding:8px 10px;
  background:none;border:none;
  font:inherit;text-align:left;
  color:var(--ink);
  cursor:pointer;
  border-radius:6px;
  transition:background .12s;
}
.chip-ctx-item:hover{background:var(--line-soft);}
.chip-ctx-item.is-on{color:var(--urgent);font-weight:500;}
.chip-ctx-item.danger{color:var(--ink-3);}
.chip-ctx-item.danger:hover{color:var(--accent);background:var(--accent-soft);}
.chip-ctx-dot{width:8px;height:8px;border-radius:50%;background:var(--ink-4);flex-shrink:0;}
.chip-ctx-item.is-on .chip-ctx-dot{background:var(--urgent);}
.chip-ctx-sep{height:1px;background:var(--line-soft);margin:4px 6px;}

/* Inline edit input for task titles — replaces the .fd-title element when
   the user clicks. Visually matches the title so the edit feels seamless. */
.fd-title-edit{
  flex:1;
  font:inherit;
  font-size:14.5px;
  color:var(--ink);
  background:var(--paper);
  border:1px solid var(--accent);
  outline:none;
  padding:4px 8px;
  border-radius:6px;
  letter-spacing:-.005em;
  box-shadow:0 0 0 3px var(--accent-soft);
}

/* Select fields in modals — match the look of text inputs but show a chevron */
.modal-select{
  appearance:none;-webkit-appearance:none;-moz-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%230b0e19' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 14px center;
  padding-right:36px;
  cursor:pointer;
}

/* The 'h' unit suffix that used to sit next to the number — removed.
   Numbers now stand alone; the column header and project-row totals
   carry the unit signal. */


/* ═══════════════════════════════════════════════════════════════════
   ORBIT — STYLE ADDITIONS (April 2026, v3)
   Permission visual fixes + button hover/click states.
═══════════════════════════════════════════════════════════════════ */


/* ═══════════════════════════════════════════════════════════════════
   1. TEAM-ROLE PERMISSION FIXES
   Hides £ fee column on deliverable rows for team users (Jake / Dan B
   / Niamh) so they can tick deliverables but never see the fees.
═══════════════════════════════════════════════════════════════════ */

body[data-role="team"] .dlv-fee-wrap,
body[data-role="team"] .dlv-fee-pm {
  display: none !important;
}

body[data-role="team"] .dlv-main {
  grid-template-columns: 24px 1fr 24px;
}

body[data-role="team"] .deliv-col-headers {
  grid-template-columns: 24px 1fr 32px;
}

body[data-role="team"] .deliv-col-h.fee {
  display: none !important;
}

body[data-role="team"] .deliv-total {
  display: none !important;
}


/* ═══════════════════════════════════════════════════════════════════
   2. SLIDE-OVER FOOTER POSITIONING
   When team users open a project (no Financial section), the modal body
   is shorter than viewport and the sticky footer drifts up. Flex
   layout pins it to the actual bottom regardless of body height.
═══════════════════════════════════════════════════════════════════ */

.slideover {
  display: flex;
  flex-direction: column;
}

.slideover .so-body {
  flex: 1 1 auto;
  overflow-y: auto;
}

.slideover .so-footer {
  position: relative;
  bottom: auto;
  flex-shrink: 0;
}


/* ═══════════════════════════════════════════════════════════════════
   3. PROJECTS TABLE GRID FOR TEAM USERS
   Default grid template assumes invoice column is visible. For team
   users that column is hidden, so the chevron needs an explicit grid.
═══════════════════════════════════════════════════════════════════ */

body[data-role="team"] .proj-head,
body[data-role="team"] .proj-row {
  grid-template-columns: minmax(220px, 1.4fr) 130px 110px minmax(240px, 1.8fr) 110px 90px 44px;
}

body[data-role="team"] .proj-head.modal,
body[data-role="team"] .proj-row.modal {
  grid-template-columns: minmax(200px, 1.2fr) 130px 110px minmax(220px, 1.6fr) 110px 110px 90px 44px;
}


/* ═══════════════════════════════════════════════════════════════════
   4. STANDALONE DELIVERABLES SECTION SPACING
═══════════════════════════════════════════════════════════════════ */

.so-section + .deliverables-block {
  margin-top: 8px;
}


/* ═══════════════════════════════════════════════════════════════════
   5. BUTTON INTERACTION — STATIC GLOW + LIFT + PRESS
   ─────────────────────────────────────────────────────────────────
   On hover: the button lifts 2px, gains a soft drop shadow, AND a
   subtle accent-blue glow blooms around it. No rotation, no moving
   parts. Reads as "this is active" without animation noise.
   On click: presses back down, glow stays.

   Crucially: this DOES NOT animate background-color (which is what
   caused the white-flash bug on the dark button — CSS can't animate
   from a radial-gradient to a flat colour, so the browser snapped
   through the underlying base layer).
═══════════════════════════════════════════════════════════════════ */

/* Setup: explicit transition only on transform and shadow.
   Background animations are deliberately excluded — the dark button's
   gradient can't be animated against a flat colour. */
.pill-btn {
  transition: transform 200ms ease, box-shadow 200ms ease, border-color 120ms;
  transform: translateY(0);
}

/* Hover: 2px lift + soft drop shadow.
   No accent glow — kept clean and simple.
   `:not(:disabled):not(.muted)` excludes secondary buttons. */
.pill-btn:hover:not(:disabled):not(.muted) {
  transform: translateY(-2px);
  box-shadow: 0 4px 10px rgba(11, 14, 25, 0.14);
}

/* Active (mid-click): press back to 0. Faster transition (80ms) so
   the click feels responsive, not laggy. */
.pill-btn:active:not(:disabled):not(.muted) {
  transform: translateY(0);
  box-shadow: 0 1px 3px rgba(11, 14, 25, 0.18);
  transition: transform 80ms ease, box-shadow 80ms ease;
}

/* Muted secondary buttons stay calm — no lift, no glow.
   Just a gentle background shift on hover so they recede behind
   primary actions. */
.pill-btn.muted:hover:not(:disabled) {
  background-color: rgba(11, 14, 25, 0.04);
}

/* Disabled buttons: explicitly no animation. */
.pill-btn:disabled {
  cursor: not-allowed;
  transform: translateY(0);
  box-shadow: none;
}

/* Reduced-motion preference: keep the glow but drop the lift. */
@media (prefers-reduced-motion: reduce) {
  .pill-btn:hover:not(:disabled):not(.muted) {
    transform: translateY(0);
  }
  .pill-btn:active:not(:disabled):not(.muted) {
    transform: translateY(0);
  }
}

/* Mobile-only elements: hidden by default at all widths, shown
   inside the @media (max-width: 640px) block below. */
.mobile-tab-bar,
.mobile-more-sheet,
.mobile-day-picker { display: none; }


/* ═══════════════════════════════════════════════════════
   MOBILE STYLES — All rules below scoped to ≤640px.
   Added 2026-05-06. Do not modify desktop selectors above.
   Empty for now; rules added per implementation step.
═══════════════════════════════════════════════════════ */

@media (max-width: 640px) {

  /* ─── LOGIN SCREEN (mobile) ─────────────────────────────────────
     Stacked layout: orbital diagram in top 60vh, form modal card
     in lower portion. Orbits keep rotating (existing animations
     untouched). Background goes off-white so the white card visibly
     separates. Card becomes a proper modal sitting above the orbits.
  ─────────────────────────────────────────────────────────────── */

  .login-overlay {
    /* Override desktop flex-centring; use absolute positioning
       so we can place orbits and card in distinct zones. */
    display: block;
    padding: 0;
    background: #fafafa;
    /* SVG extends beyond viewport at 130vw — clip at overlay bounds
       to prevent horizontal scrollbars. */
    overflow: hidden;
  }

  /* Orbital diagram centred behind the card. The desktop SVG sits at
     150vmin (huge), so satellites positioned at coords up to viewBox ~570
     are visible. On mobile we constrain to 163vw — large enough that
     orbits feel substantial. Satellites on outer rings will sweep
     in and out of view during rotation, mirroring desktop's effect
     where outermost orbits also extend off-screen. */
  .login-overlay .login-orbits {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 163vw;
    height: 163vw;
    max-height: 163vw;
    overflow: visible;
  }

  /* Card centred in the viewport, sitting above the orbital field
     so the rings rotate behind and around it. Closer to the desktop
     composition that the user already knows. */
  .login-overlay .login-card {
    position: absolute;
    top: 50%;
    left: 24px;
    right: 24px;
    transform: translateY(-50%);
    width: auto;
    max-width: none;
    padding: 24px 24px 28px;
    background: var(--paper);
    border: 0.5px solid var(--line);
    border-radius: 20px;
    box-shadow:
      0 8px 24px rgba(11, 14, 25, 0.08),
      0 2px 8px rgba(11, 14, 25, 0.04);
    z-index: 10;
  }

  /* Smaller logo on mobile so the card stays compact */
  .login-overlay .login-mark {
    width: 36px;
    height: 36px;
    margin: 0 auto 10px;
  }

  /* Title + subtitle centred and slightly smaller */
  .login-overlay .login-title {
    font-size: 20px;
    text-align: center;
  }
  .login-overlay .login-sub {
    font-size: 13px;
    text-align: center;
    margin-bottom: 18px;
  }

  /* Form labels centred to match the card's centred composition */
  .login-overlay .login-label {
    text-align: center;
  }

  /* Centre the select's selected text */
  .login-overlay #login-name-select {
    text-align: center;
    text-align-last: center;
  }

  /* Bearing labels (OPS · 117°, RES · 290° etc.) — double the
     desktop size so they stay readable against the larger orbital
     SVG on mobile. */
  .login-overlay .orbit-tag-text {
    font-size: 22px;
  }


  /* ─── BOTTOM TAB BAR (mobile shell) ────────────────────────────
     Fixed nav at the bottom of every page on mobile. Hidden on
     desktop entirely (display: none above this media query, no
     rule needed). Uses a frosted-glass look matching iOS conventions.
  ─────────────────────────────────────────────────────────────── */

  .mobile-tab-bar {
    display: flex;
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    height: calc(56px + env(safe-area-inset-bottom));
    padding-bottom: env(safe-area-inset-bottom);
    background: rgba(255, 255, 255, 0.94);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border-top: 0.5px solid var(--line);
    align-items: stretch;
    z-index: 100;
  }

  .mobile-tab-bar .mtb-btn {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 3px;
    border: none;
    background: transparent;
    cursor: pointer;
    padding: 0;
    color: var(--ink-3);
    font-family: inherit;
    /* Remove default button styling */
    min-height: 44px;
  }
  .mobile-tab-bar .mtb-btn.active { color: var(--accent); }
  .mobile-tab-bar .mtb-btn.active .mtb-icon-fill { fill: var(--accent); }

  .mobile-tab-bar .mtb-icon { width: 22px; height: 22px; }
  .mobile-tab-bar .mtb-icon-fill { fill: none; }
  .mobile-tab-bar .mtb-label {
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.01em;
  }
  .mobile-tab-bar .mtb-finance-glyph {
    width: 22px;
    height: 22px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
    font-weight: 500;
    line-height: 1;
  }


  /* ─── MOBILE MORE SHEET ────────────────────────────────────────
     Bottom sheet shown when tapping "More" in the tab bar. Lists
     less-used destinations (Modal, Retainer, Weekly, CRM, Sign out).
  ─────────────────────────────────────────────────────────────── */

  .mobile-more-sheet:not([hidden]) {
    position: fixed;
    inset: 0;
    z-index: 200;
    background: rgba(11, 14, 25, 0.4);
    display: block;
  }

  .mobile-more-sheet .mms-panel {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    background: var(--paper);
    border-radius: 20px 20px 0 0;
    padding: 12px 0 calc(20px + env(safe-area-inset-bottom));
    max-height: 80vh;
    overflow-y: auto;
  }
  .mobile-more-sheet .mms-handle {
    width: 36px;
    height: 4px;
    background: var(--line);
    border-radius: 2px;
    margin: 0 auto 12px;
  }
  .mobile-more-sheet .mms-title {
    font-size: 11px;
    font-weight: 500;
    color: var(--ink-3);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    font-family: 'PP Supply Mono', ui-monospace, monospace;
    padding: 8px 24px 12px;
  }
  .mobile-more-sheet .mms-item {
    display: block;
    width: 100%;
    text-align: left;
    padding: 14px 24px;
    border: none;
    background: transparent;
    font-family: inherit;
    font-size: 16px;
    color: var(--ink);
    cursor: pointer;
  }
  .mobile-more-sheet .mms-item.destructive { color: var(--urgent); }
  .mobile-more-sheet .mms-divider {
    height: 0.5px;
    background: var(--line);
    margin: 8px 0;
  }


  /* ─── PAGE SHELL (applies to all pages) ────────────────────────
     The desktop layout uses a top header + main content area. On
     mobile we hide the desktop top nav (data-page buttons) but
     keep the brand pill and logout button visible at the top of
     each page. Each page also needs space at the bottom for the
     tab bar.
  ─────────────────────────────────────────────────────────────── */

  /* Hide the desktop pill nav (Dashboard/Projects/etc.) on mobile —
     bottom tab bar replaces it. Brand pill + logout stay visible. */
  .hdr .nav-center { display: none; }

  /* Header shrinks for mobile — only brand and user-pill remain.
     1fr auto would give brand pill all available space (stretching it).
     auto auto + space-between keeps both pills at their natural sizes
     with empty space in the middle. */
  .hdr {
    grid-template-columns: auto auto;
    justify-content: space-between;
    padding: 8px 16px;
    gap: 12px;
  }

  /* Every page needs bottom padding to clear the tab bar */
  .page.active {
    padding-bottom: calc(76px + env(safe-area-inset-bottom));
  }


  /* ─── DASHBOARD (page-flightdeck) ──────────────────────────────
     Mobile dashboard: single-column hero with greeting, today's
     hours, and a compact London/Time row. FOCUS status pill is
     hidden — duplicates info from the brand pill area.
  ─────────────────────────────────────────────────────────────── */

  #page-flightdeck .fd-shell {
    padding: 12px 16px 0;
    max-width: 100%;
  }

  #page-flightdeck .fd-hero {
    grid-template-columns: 1fr;
    padding: 18px 18px 20px;
  }
  #page-flightdeck .fd-hero-right { display: none; }

  /* Hide the FOCUS / ACTIVE pill on mobile — clutters the small card */
  #page-flightdeck .fd-status-pill { display: none; }

  /* London weather + Time clock: keep but compact, side by side on
     one row. Desktop has them in fd-context-row already; we just
     restyle for tighter spacing. */
  #page-flightdeck .fd-context-row {
    display: flex;
    flex-wrap: nowrap;
    gap: 8px;
    margin-top: 12px;
  }
  #page-flightdeck .fd-context-row .fd-ctx {
    padding: 6px 10px;
    font-size: 11px;
    flex: 0 0 auto;
  }
  #page-flightdeck .fd-context-row .fd-ctx-label {
    font-size: 10px;
  }

  /* Greeting headline tighter */
  #page-flightdeck .fd-greeting h2 {
    font-size: 26px;
  }
  #page-flightdeck .fd-greeting-sub {
    font-size: 11px;
    margin-top: 4px;
  }

  /* "Today's logged time" — let the value and "of an 8-hour day"
     wrap cleanly. */
  #page-flightdeck .fd-today {
    margin-top: 16px;
  }
  #page-flightdeck .fd-today-row {
    flex-wrap: wrap;
    align-items: baseline;
    gap: 8px;
  }
  #page-flightdeck .fd-today-value {
    font-size: 36px;
  }
  #page-flightdeck .fd-today-of {
    font-size: 12px;
  }

  /* Two-column grid (projects | tasks) becomes one column */
  #page-flightdeck .fd-grid {
    grid-template-columns: 1fr;
    gap: 16px;
  }


  /* ─── PROJECTS LIVE/MODAL — minimal card layout ────────────────
     Per Dan's feedback: cards are JUST name + meta + chevron.
     Status pill, team avatars, deliverables dots, due date all
     hidden on mobile. They live on the project detail screen.
     Cards stay tight and scannable.
  ─────────────────────────────────────────────────────────────── */

  /* Hide the .proj-head row entirely — column headers don't fit cards */
  .proj-head { display: none; }

  /* Convert .proj-row from grid to a stacked card */
  .proj-row,
  .proj-row.modal {
    display: block;
    grid-template-columns: none !important;
    padding: 14px;
    border: 0.5px solid var(--line);
    border-radius: 12px;
    margin-bottom: 8px;
    background: var(--paper);
    border-bottom: 0.5px solid var(--line);
    position: relative;
  }
  .proj-row:hover { background: var(--paper); }

  /* The wrapper card around all rows: drop its border so each row-card
     stands alone */
  #page-live .card,
  #page-modal .card {
    border: none;
    background: transparent;
    padding: 0;
  }

  /* Name + meta block */
  .proj-row .proj-cell-inner {
    margin-bottom: 0;
    padding-right: 24px; /* leave room for the absolute chevron */
  }
  .proj-row .proj-name {
    font-size: 15px;
    font-weight: 500;
    line-height: 1.3;
  }
  .proj-row .proj-meta {
    font-size: 12px;
    color: var(--ink-3);
    margin-top: 2px;
  }

  /* Hide ALL middle/footer cells — cards are JUST name + meta + chevron.
     Status, team avatars, next-steps, deliverables, due date, invoice,
     upload pill: all gone on mobile cards. They show on detail screen. */
  .proj-row > div:not(.proj-cell-inner):not(.row-chev) {
    display: none;
  }

  /* Chevron absolutely positioned top-right of card */
  .proj-row .row-chev {
    position: absolute;
    top: 50%;
    right: 14px;
    transform: translateY(-50%);
    opacity: 1;
    color: var(--ink-4);
    font-size: 18px;
  }


  /* ─── PAGE LAYOUTS — tighten side padding for mobile ───────────
     Desktop .layout-full uses 24px horizontal padding which steals
     48px of viewport width on a 390px iPhone — too much. Drop to
     12px so content has room to breathe and tables don't overflow. */
  .layout-full {
    padding: 8px 12px 80px;
  }
  .rep-retainer-banner {
    padding: 12px 14px;
    font-size: 11.5px;
  }


  /* ─── FOLDER GROUP HEADERS ─────────────────────────────────────
     Hide "· N projects" count on mobile.
  ─────────────────────────────────────────────────────────────── */
  .folder-group-count { display: none; }


  /* ─── ACTIVE-ORBIT CONTEXT BAR ─────────────────────────────────
     Hidden on Live/Modal mobile per Dan's feedback.
  ─────────────────────────────────────────────────────────────── */
  #page-live .context-bar,
  #page-modal .context-bar { display: none; }


  /* ─── STAT CARDS (Live/Modal pages) ────────────────────────────
     2 columns at mobile. Corner ring SVG and "ACTIVE" tag hidden.
  ─────────────────────────────────────────────────────────────── */
  .stats { grid-template-columns: repeat(2, 1fr); gap: 0; }
  .stat {
    padding: 14px 12px 14px 14px;
    border-right: 1px solid var(--line);
    border-bottom: 1px solid var(--line);
  }
  .stat:nth-child(2n) { border-right: none; }
  .stat:nth-child(n+3) { border-bottom: none; }

  .stat-val { font-size: 26px; }
  .stat-val .unit { font-size: 26px; }
  .stat-lbl { font-size: 9.5px; }
  .stat-sub {
    font-size: 10.5px;
    margin-top: 6px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .stat-corner { display: none; }
  .stat.active::after { display: none; }

  /* Toolbar (search + filter + add button) wraps on mobile */
  .toolbar {
    flex-wrap: wrap;
    gap: 8px;
  }
  .toolbar .search { flex: 1 1 100%; }
  .toolbar .pill-select { flex: 1 1 auto; }
  .toolbar .toolbar-right { flex: 0 0 auto; }


  /* ─── SLIDE-OVER (project detail) ──────────────────────────────
     Full-screen on mobile, slides up from bottom, footer 50/50.
  ─────────────────────────────────────────────────────────────── */
  .overlay { justify-content: stretch; }

  .slideover {
    width: 100vw;
    max-width: 100vw;
    height: 100vh;
    animation: slideup-mobile 0.22s cubic-bezier(.4, 0, .2, 1);
    box-shadow: none;
  }
  @keyframes slideup-mobile {
    from { transform: translateY(100%); }
    to   { transform: translateY(0); }
  }

  .so-header { padding: 14px 16px; }

  .so-body {
    padding: 18px 16px 24px;
    scroll-padding-bottom: 50vh;
  }

  /* Footer buttons fill width 50/50 */
  .so-footer {
    padding: 12px 16px;
    gap: 8px;
  }
  .so-footer .pill-btn {
    flex: 1;
    justify-content: center;
    padding: 12px 16px;
  }


  /* ─── PER-DELIVERABLE PERFORMANCE TABLE (slide-over) ───────────
     4 columns instead of 5: drop Cost. The 4th header child IS the
     Cost label, and each row's .margin-row-cost is the value.
     Hide both so the grid has exactly 4 visible children matching
     the 4-column template. */
  .margin-row-cost { display: none; }
  .margin-head > div:nth-child(4) { display: none; }

  .margin-head,
  .margin-row {
    grid-template-columns: 1.5fr 70px 60px 60px;
    gap: 8px;
    padding: 10px 12px;
  }
  .margin-head { font-size: 9.5px; }
  /* After hiding child 4 (Cost), visible header children are
     1=Deliverable, 2=Fee, 3=Hours, 5=Margin. Apply alignments
     to the visible ones. */
  .margin-head > div:nth-child(1) { text-align: left; }
  .margin-head > div:nth-child(2),
  .margin-head > div:nth-child(3),
  .margin-head > div:nth-child(5) { text-align: right; }


  /* ─── TIME PAGE ────────────────────────────────────────────────
     Mobile shows ONE day at a time instead of the full week grid.
     The desktop renderer still outputs all 5 day cells per row;
     we hide 4 of them via CSS based on data-active-day on #page-time.
     The week label and "This week" button hide; a new mobile day
     picker (prev/next + day label) takes their place.
  ─────────────────────────────────────────────────────────────── */

  /* Subtabs (My time / Team / Reports) fill viewport width */
  #page-time .subtabs {
    display: flex;
    width: 100%;
    padding: 3px;
    background: var(--line-soft);
    border-radius: 100px;
    margin-bottom: 12px;
  }
  #page-time .subtabs button {
    flex: 1;
    padding: 8px 0;
    border: none;
    background: transparent;
    color: var(--ink-2);
    border-radius: 100px;
    font-size: 13px;
    font-weight: 500;
    cursor: pointer;
    font-family: inherit;
  }
  /* Active subtab gets the dark Orbit gradient — same as .pill-btn.dark */
  #page-time .subtabs button.active {
    background: radial-gradient(ellipse 140% 100% at 100% 100%, var(--accent-deep) 0%, var(--ink) 75%, var(--ink) 100%);
    color: var(--paper);
    box-shadow: 0 1px 3px rgba(11, 14, 25, 0.25);
  }

  /* Hide the desktop weeknav (left/right week, "This week" button).
     The mobile day picker replaces it. */
  #page-time .toolbar-right { display: none; }

  /* Hide the page-title-meta ("4-8 MAY · 2.0H LOGGED") on Time mobile.
     The day picker pill already shows the active day, and the hour
     count reflects the whole week which doesn't fit a single-day view. */
  #page-time #time-page-meta { display: none; }

  /* Show mobile day picker on Time page only — but ONLY for My time and
     Team views, not Reports (Reports has its own period selector and
     doesn't operate per-day). The :has() selector hides it when the
     reports view is active. Falls back to always-visible on browsers
     without :has() support which is acceptable. */
  #page-time .mobile-day-picker {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    margin: 0 0 16px 0;
    padding: 0;
  }
  #page-time:has(#time-view-reports.active) .mobile-day-picker {
    display: none;
  }
  .mobile-day-picker .mdp-arrow {
    border: none;
    background: transparent;
    padding: 8px;
    cursor: pointer;
    color: var(--ink-2);
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    width: 36px;
    height: 36px;
  }
  .mobile-day-picker .mdp-arrow:hover { background: var(--line-soft); }
  .mobile-day-picker .mdp-current {
    font-size: 13px;
    font-weight: 500;
    text-align: center;
    background: var(--line-soft);
    padding: 8px 18px;
    border-radius: 100px;
    min-width: 130px;
  }

  /* Toolbar layout on Time page: subtabs full width, weeknav hidden,
     day picker on its own line below. */
  #page-time .toolbar {
    flex-direction: column;
    align-items: stretch;
  }

  /* Hide the 4-card stats hero (Top project / Hours / Projects / Days)
     on My time and Team views — only My time and Team have it. Reports
     uses .rep-summary not .stats. */
  #page-time #time-view-mine .stats,
  #page-time #time-view-team .stats { display: none; }

  /* Hide the "Daily total" totals row on mobile — single-day view
     means the daily total IS the same as the visible day cell value. */
  #page-time .totals-row { display: none; }

  /* Hide the time grid header row entirely on mobile. The day picker
     pill already shows the active day, and the "Project" header is
     implicit from context. The header has different markup from rows
     so the column-hiding rules below don't apply to it cleanly. */
  #page-time .time-grid-head { display: none; }

  /* Stack Add project / Copy last week buttons full-width on mobile */
  #page-time .grid-actions {
    flex-direction: column;
    gap: 8px;
    padding: 16px 12px;
  }
  #page-time .grid-actions .pill-btn {
    width: 100%;
    justify-content: center;
  }

  /* Time grid: collapse from 7 columns (project + 5 days + total)
     to 2 columns (project + active day). The total column hides too. */
  #page-time .time-grid-head,
  #page-time .time-grid-row,
  #page-time .tg-row {
    grid-template-columns: 1fr 70px;
  }

  /* Hide all day cells/headers EXCEPT the one matching activeDayIndex.
     The grid columns in the desktop layout map to children:
       child 1: project info
       children 2-6: Mon Tue Wed Thu Fri (indexes 0-4)
       child 7: total
     We use data-active-day to drive nth-child visibility. */

  /* Default: hide days 2-6 (positions matching all 5 day cells) */
  #page-time .time-grid-head > .num-h,
  #page-time .time-grid-row > .num-cell:not(.total-col),
  #page-time .tg-row > .num-cell:not(.total-col) {
    display: none;
  }

  /* Hide the total column on mobile (single day, no need for week sum) */
  #page-time .total-col { display: none; }

  /* Show only the day column matching data-active-day. The day cells
     are children 2-6 (after the project info cell at child 1).
     activeDay 0 = Mon = nth-child(2), activeDay 1 = Tue = nth-child(3), etc.
     Each rule below shows the correct day cell. */

  #page-time[data-active-day="0"] .time-grid-head > .num-h:nth-child(2),
  #page-time[data-active-day="0"] .time-grid-row > .num-cell:nth-child(2),
  #page-time[data-active-day="0"] .tg-row > .num-cell:nth-child(2) {
    display: flex;
  }
  #page-time[data-active-day="1"] .time-grid-head > .num-h:nth-child(3),
  #page-time[data-active-day="1"] .time-grid-row > .num-cell:nth-child(3),
  #page-time[data-active-day="1"] .tg-row > .num-cell:nth-child(3) {
    display: flex;
  }
  #page-time[data-active-day="2"] .time-grid-head > .num-h:nth-child(4),
  #page-time[data-active-day="2"] .time-grid-row > .num-cell:nth-child(4),
  #page-time[data-active-day="2"] .tg-row > .num-cell:nth-child(4) {
    display: flex;
  }
  #page-time[data-active-day="3"] .time-grid-head > .num-h:nth-child(5),
  #page-time[data-active-day="3"] .time-grid-row > .num-cell:nth-child(5),
  #page-time[data-active-day="3"] .tg-row > .num-cell:nth-child(5) {
    display: flex;
  }
  #page-time[data-active-day="4"] .time-grid-head > .num-h:nth-child(6),
  #page-time[data-active-day="4"] .time-grid-row > .num-cell:nth-child(6),
  #page-time[data-active-day="4"] .tg-row > .num-cell:nth-child(6) {
    display: flex;
  }


  /* ─── REPORTS TAB ──────────────────────────────────────────────
     Reports has its own period selector and 4-card summary, plus
     wide tables. On mobile we declutter aggressively: hide the
     redundant "Last 30 days · 6 Apr — 6 May" lens row (the Period
     filter immediately below already shows the same info), drop
     the FOCUS tag on the dark hours card, and trim the billable
     projects table to its essential 3 columns.
  ─────────────────────────────────────────────────────────────── */

  /* Hide the period note line above the filter card — duplicates
     the Period filter pills directly below. */
  #page-time .lens-row { display: none; }

  /* Hide the FOCUS pseudo-tag on the dark hours card — same reason
     we hide it on .stat.active::after on Live/Modal pages. Saves
     visual noise in a smaller card. */
  #page-time .rep-card.dark::after { display: none; }

  /* Filter card: each filter group (Period, Status) puts its label
     ABOVE the pills on mobile rather than to the left. Saves
     horizontal space and stops the pills from overflowing. */
  #page-time .rep-filters {
    flex-direction: column;
    align-items: stretch;
    gap: 12px;
    padding: 14px;
  }
  #page-time .rep-filter-grp {
    display: flex;
    flex-direction: column;
    gap: 8px;
    align-items: stretch;
  }
  #page-time .rep-filter-lbl {
    font-size: 10px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink-3);
    font-weight: 600;
  }
  #page-time .rep-filter-pills {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
  }
  #page-time .rep-filter-pill {
    padding: 6px 12px;
    font-size: 12px;
  }

  /* 4-card summary: 2x2 grid, smaller padding/typography */
  #page-time .rep-summary {
    grid-template-columns: 1fr 1fr;
    gap: 8px;
    margin-bottom: 16px;
  }
  #page-time .rep-card {
    padding: 14px 14px;
  }
  #page-time .rep-lbl {
    font-size: 9.5px;
  }
  #page-time .rep-val {
    font-size: 28px;
  }
  #page-time .rep-sub {
    font-size: 10.5px;
  }

  /* Section headers (Billable projects, etc.) — let the badge wrap
     onto its own line below the title rather than overflow. */
  #page-time .rep-section-h {
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
    padding: 14px;
  }
  #page-time .rep-section-title {
    font-size: 13px;
    flex-wrap: wrap;
  }
  #page-time .rep-section-meta {
    font-size: 10.5px;
  }

  /* ─── REPORTS TABLES — fixed 60 / 20 / 20 column layout on mobile ───
     The Reports tables on desktop have 5–6 columns. On mobile we keep
     only three: the name column (60%), Hours (20%) and Margin (20%).

     Why fixed-percentage rather than auto: with auto layout, long content
     in one cell pushes the others to character-width, which is what was
     causing the staircase letter-stacking. Fixed layout ignores content
     width and obeys the percentages we set.

     Totals row caveat: every rep-tbl totals row uses <td colspan="2"> on
     its first cell. The colspan'd cell still counts as nth-child(1), so
     the cells that follow it have nth-child indices 1 less than the
     equivalent cells in the data rows. That's why the totals row needs
     its own hiding rules (hide nth-child 3 + 5 instead of 2/4/6).

     Tables covered:
       - .rep-tbl (no .rep-tbl-deliverable): Project | Status | Hours |
         Fee | Margin | Health  → keep Project, Hours, Margin
       - .rep-tbl-deliverable: Deliverable | Projects | Fee | Hours |
         Cost | Margin          → keep Deliverable, Hours, Margin
     Retainer-section .rep-tbl variants (5 cols) follow the same pattern;
     hiding nth-child 2 + 4 keeps col 1, 3, 5 visible. */

  #page-time .rep-section table {
    font-size: 12px;
    width: 100%;
    table-layout: fixed;
  }

  /* Billable projects table (Project, Status, Hours, Fee, Margin, Health):
     hide Status (2), Fee (4), Health (6) in head and body rows. */
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) thead th:nth-child(2),
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) thead th:nth-child(4),
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) thead th:nth-child(6),
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) tbody tr:not(.totals) td:nth-child(2),
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) tbody tr:not(.totals) td:nth-child(4),
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) tbody tr:not(.totals) td:nth-child(6) {
    display: none;
  }

  /* Margin by deliverable type table (Deliverable, Projects, Fee, Hours, Cost, Margin):
     hide Projects (2), Fee (3), Cost (5) in head and body rows. */
  #page-time .rep-section .rep-tbl-deliverable thead th:nth-child(2),
  #page-time .rep-section .rep-tbl-deliverable thead th:nth-child(3),
  #page-time .rep-section .rep-tbl-deliverable thead th:nth-child(5),
  #page-time .rep-section .rep-tbl-deliverable tbody tr:not(.totals) td:nth-child(2),
  #page-time .rep-section .rep-tbl-deliverable tbody tr:not(.totals) td:nth-child(3),
  #page-time .rep-section .rep-tbl-deliverable tbody tr:not(.totals) td:nth-child(5) {
    display: none;
  }

  /* Totals row — every rep-tbl uses <td colspan="2"> as its first cell,
     so cell indices shift by one. To keep the same visible columns:

       Billable / retainer 6-col table: hide Fee (nth-child 3), Health (nth-child 5).
         Visible left→right: "N projects shown" | Hours | Margin.
       Billable / retainer 5-col table (retainer Days vs alloc): hide nth-child 3 only.
         Visible: "N projects" | Hours | last column (Margin or %).
       Deliverable table totals: there is no totals row in this table, no action needed.

     Simpler unified rule: hide td:nth-child(3) and td:nth-child(5) on every
     totals row. nth-child(5) won't match anything on the 5-cell totals
     variant, which is fine. */
  #page-time .rep-section .rep-tbl tbody tr.totals td:nth-child(3),
  #page-time .rep-section .rep-tbl tbody tr.totals td:nth-child(5) {
    display: none;
  }

  /* Force the 60 / 20 / 20 width split on the visible columns.
     The trick: the FIRST visible cell in each row gets 60%, second gets 20%,
     third gets 20%. We use the universal-selector approach via column
     widths on visible nth-children only. Easiest with explicit per-column
     widths on the th elements; since table-layout:fixed, widths cascade. */

  /* Billable / retainer-billable / retainer-days tables (.rep-tbl :not(deliverable)) */
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) thead th:nth-child(1) { width: 60%; }
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) thead th:nth-child(3) { width: 20%; }
  #page-time .rep-section .rep-tbl:not(.rep-tbl-deliverable) thead th:nth-child(5) { width: 20%; }

  /* Margin by deliverable table */
  #page-time .rep-section .rep-tbl-deliverable thead th:nth-child(1) { width: 60%; }
  #page-time .rep-section .rep-tbl-deliverable thead th:nth-child(4) { width: 20%; }
  #page-time .rep-section .rep-tbl-deliverable thead th:nth-child(6) { width: 20%; }

  /* Cell padding and wrapping: allow project names to wrap onto multiple
     lines but stop the character-by-character break that overflow-wrap:
     anywhere was causing. word-wrap:break-word is the safer default. */
  #page-time .rep-section table th,
  #page-time .rep-section table td {
    padding: 10px 8px;
    word-break: normal;
    overflow-wrap: break-word;
  }

  /* Numeric cells: right-align and use tabular figures so columns line up
     down the table. */
  #page-time .rep-section table td.num-cell,
  #page-time .rep-section table td.margin-cell {
    text-align: right;
    font-variant-numeric: tabular-nums;
  }

  /* Totals row at the bottom of each table — make it match the data row
     density rather than the bulkier desktop totals styling. The data rows
     have padding 10px 8px; we tighten the totals to 8px to keep it visually
     punchier than the rows above but not as tall as before. */
  #page-time .rep-section .rep-tbl tbody tr.totals td {
    padding: 8px 8px;
    font-size: 12px;
    line-height: 1.3;
  }

  /* Insight callout (dark "X is at -134% margin..." box) — the desktop
     version sits inside a wrapper with padding 0 22px 18px, which is
     wider than the table's cell padding on mobile. Match the inset to
     the cells so the callout reads as part of the table flow, and
     tighten the callout's own padding to be on the same scale. */
  #page-time .rep-section .rep-insight-wrap {
    padding: 0 8px 12px;
  }
  #page-time .rep-section .rep-insight {
    padding: 10px 12px;
    font-size: 11.5px;
    line-height: 1.35;
    border-radius: 8px;
  }

  /* ─── PIPELINE & INVOICING (Finance) ────────────────────────────
     The 4-card "journey" row on desktop becomes 2×2 on mobile so each
     card has room for the £value at a sensible size. The lifecycle
     section headers stack title/badge/meta vertically because they
     don't fit on one line. */

  /* 4 cards → 2×2 grid */
  #page-finance .journey {
    grid-template-columns: 1fr 1fr;
  }
  /* Cards: reset desktop right-borders, use a 1-px grid line instead */
  #page-finance .j-card {
    border-right: none;
    border-bottom: 1px solid var(--line);
    padding: 14px 14px;
  }
  /* Remove inner edge borders so the 2×2 grid has clean outer borders only */
  #page-finance .j-card:nth-child(2n) {
    /* right column — no right edge needed; nothing to do */
  }
  #page-finance .j-card:nth-child(n+3) {
    /* bottom row — no bottom border */
    border-bottom: none;
  }
  /* Vertical divider between the two columns */
  #page-finance .j-card:nth-child(2n+1) {
    border-right: 1px solid var(--line);
  }

  /* The big £ value: desktop is 24px which clips on a 380px viewport
     when the number is >£100k. Drop to 20px and let it wrap if needed
     (e.g. for "£128,210" which needs roughly 100px at 20px Inter). */
  #page-finance .j-val {
    font-size: 20px;
    line-height: 1.05;
  }
  /* Label: don't let "FOCUS IN ORBIT" stack to one word per line — kill
     the uppercase letter-spacing slightly and shrink. The step bubble
     stays inline. */
  #page-finance .j-lbl {
    font-size: 10px;
    letter-spacing: .02em;
    margin-bottom: 6px;
    gap: 4px;
  }
  #page-finance .j-sub {
    font-size: 10.5px;
    margin-top: 4px;
  }

  /* Section header (e.g. "In Orbit · 30 PROJECTS · £128,210 · Pre-invoice")
     stacks vertically on mobile. Title row stays horizontal (title + badge),
     meta drops to its own line below. */
  #page-finance .fin-section-h {
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
    padding: 12px 14px;
  }
  #page-finance .fin-section-h-left {
    flex-wrap: wrap;
    gap: 8px;
  }
  #page-finance .fin-section-title {
    font-size: 13px;
  }
  #page-finance .fin-section-meta {
    font-size: 11px;
    line-height: 1.4;
  }
  #page-finance .fin-section-total {
    font-size: 13px;
  }

  /* Pipeline project rows: on desktop these are 4-column
     (name | pill | action button | amount). On a 380px viewport the fixed
     pixel widths (200/200/175) push the action and amount off-screen, where
     they get clipped by .fin-section's overflow:hidden — making the lifecycle
     actions unreachable from mobile. We intentionally hide button + amount
     on mobile (lifecycle actions like "Mark paid" are desktop activities)
     and run the row as a 70 / 30 split: name+sub on the left, status pill
     on the right. */
  #page-finance .fin-row {
    grid-template-columns: 70% 30%;
    gap: 12px;
    padding: 12px 14px;
  }
  #page-finance .fin-row .fin-btn-slot,
  #page-finance .fin-row .fin-amount {
    display: none;
  }
  /* Make sure the pill stays right-aligned in its 30% column */
  #page-finance .fin-row .fin-pill-slot {
    justify-content: flex-end;
  }

}
