/* ═══════════════════════════════════════════════════════════════════════════
   SCADA Solve Field Tracker — shared design + sidebar shell
   ═══════════════════════════════════════════════════════════════════════════

   The shared look for every theme. This file holds the layout and the
   component styles; a theme only supplies colors. Professional and
   Professional Dark have their tokens below; every other theme's tokens
   are generated into css/themes.css. Rules are scoped to
   html[data-ui="pro"], which app.js sets for all themes.

   Design rules:
     • One typeface (Inter); numbers use tabular figures.
     • One accent color. Red / amber / green mean status and nothing else.
     • Labels are sentence case at a readable size.
     • Surfaces are flat: a 1px border and a faint shadow, no glass blur.

   The second half restyles #navBar into a left sidebar under
   html[data-shell="sidebar"]. Same element and items, only presented
   differently, so role-based visibility and active states work unchanged. */

/* ── Fallback tokens ───────────────────────────────────────────────────
   Every pickable theme defines these itself (css/themes.css). The
   client art themes (NASA / Exxon / PG&E) predate them, so derive
   sensible values from the tokens those themes do set. */
html[data-ui="pro"]{
  --pro-field:var(--bg);--pro-side:var(--bg-deep);
  --pro-hover:color-mix(in srgb,var(--white) 7%,transparent);
  --pro-active:color-mix(in srgb,var(--ss-cyan) 14%,transparent);
  --on-accent:#0b1220;--pro-inset:var(--bg-deep);
}
html[data-ui="pro"][data-theme-family="light"]{--on-accent:#ffffff}
/* The light client themes float pale panels over a black, photographic
   page, so "the page colour" is not a usable surface for them: the
   sidebar, fields and inset boxes sit on the panel colour instead. */
html[data-theme="nasaDay"],html[data-theme="exxonDay"],html[data-theme="pgeDay"]{
  --pro-side:var(--panel);--pro-field:var(--panel-light);
  --pro-hover:rgba(0,0,0,.06);--pro-inset:rgba(0,0,0,.05);
}

/* ── Tokens ─────────────────────────────────────────────────────────── */
html[data-theme="pro"]{
  --ss-cyan:#2563eb;--ss-cyan-glow:rgba(37,99,235,.16);
  --ss-navy:#1e3a5f;--ss-navy-light:#1d4ed8;
  --bg:#f4f5f7;--bg-deep:#f0f2f5;--panel:#ffffff;--panel-light:#ffffff;
  --card:#ffffff;--card-hover:#f8f9fb;
  --glass:#ffffff;--glass-border:#dfe3e8;
  --border:#dfe3e8;--border-light:#e9ecf0;
  --white:#111827;--text:#1f2937;--text-sec:#4b5563;--text-dim:#6b7280;
  --success:#047857;--success-dim:rgba(4,120,87,.09);
  --warn:#b45309;--warn-dim:rgba(180,83,9,.09);
  --danger:#dc2626;--danger-dim:rgba(220,38,38,.07);
  --radius:6px;--radius-lg:10px;--radius-xl:12px;
  --shadow:0 1px 2px rgba(16,24,40,.05);
  --shadow-lg:0 12px 32px rgba(16,24,40,.14),0 2px 6px rgba(16,24,40,.06);
  --pro-field:#ffffff;--pro-hover:#f3f4f6;--pro-active:#eff4ff;
  --pro-side:#ffffff;--on-accent:#ffffff;
  color-scheme:light;
}
html[data-theme="proDark"]{
  --ss-cyan:#6ea8ff;--ss-cyan-glow:rgba(110,168,255,.2);
  --ss-navy:#1e3a5f;--ss-navy-light:#8fbcff;
  --bg:#0f1115;--bg-deep:#0c0e12;--panel:#171a20;--panel-light:#1b1f26;
  --card:#171a20;--card-hover:#1d2129;
  --glass:#171a20;--glass-border:#2a2f38;
  --border:#2a2f38;--border-light:#22262e;
  --white:#f3f4f6;--text:#d9dce2;--text-sec:#a3a9b5;--text-dim:#808795;
  --success:#34d399;--success-dim:rgba(52,211,153,.12);
  --warn:#fbbf24;--warn-dim:rgba(251,191,36,.12);
  --danger:#f87171;--danger-dim:rgba(248,113,113,.1);
  --radius:6px;--radius-lg:10px;--radius-xl:12px;
  --shadow:0 1px 2px rgba(0,0,0,.4);
  --shadow-lg:0 16px 40px rgba(0,0,0,.55),0 2px 6px rgba(0,0,0,.3);
  --pro-field:#0f1115;--pro-hover:#1d2129;--pro-active:rgba(110,168,255,.12);
  --pro-side:#13161b;--on-accent:#0b1220;
  color-scheme:dark;
}

/* ── Type ───────────────────────────────────────────────────────────── */
html[data-ui="pro"] body{
  background:var(--bg);color:var(--text);
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  font-size:14px;
}
/* One typeface everywhere, including the many places that set a
   monospace or display face inline. Code-like elements keep theirs. */
html[data-ui="pro"] body :not(pre):not(code):not(kbd):not(samp){
  font-family:inherit !important;
}
html[data-ui="pro"] .stat-num,
html[data-ui="pro"] .dash-card-num,
html[data-ui="pro"] .ts-grid,
html[data-ui="pro"] .rail-stat-value,
html[data-ui="pro"] td,html[data-ui="pro"] th{font-variant-numeric:tabular-nums}
html[data-ui="pro"] .card-header{
  font-size:14px;font-weight:600;letter-spacing:0;text-transform:none;
  color:var(--white);margin-bottom:14px;padding-bottom:12px;
}
html[data-ui="pro"] .form-label{
  font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text-sec);
}
html[data-ui="pro"] .stat-label,
html[data-ui="pro"] .dash-card-label,
html[data-ui="pro"] .rail-card-head{
  font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text-sec);
}
html[data-ui="pro"] .stat-num,
html[data-ui="pro"] .dash-card-num{font-size:26px;font-weight:600;letter-spacing:-.01em;color:var(--white)}

/* ── Surfaces ───────────────────────────────────────────────────────── */
html[data-ui="pro"] .card,
html[data-ui="pro"] .rail-card{
  background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-lg);
  box-shadow:var(--shadow);backdrop-filter:none;
}
html[data-ui="pro"] .stat-card,
html[data-ui="pro"] .dash-card{
  background:var(--panel);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);
}
html[data-ui="pro"] .stat-card:hover,
html[data-ui="pro"] .dash-card:hover{background:var(--card-hover);border-color:var(--border);transform:none;box-shadow:var(--shadow)}
html[data-ui="pro"] .dash-card.kpi-warn{background:linear-gradient(var(--danger-dim),var(--danger-dim)),var(--panel);border-color:rgba(220,38,38,.3)}
html[data-ui="pro"] .dash-card.kpi-warn .dash-card-num{color:var(--danger)}

/* ── Buttons ────────────────────────────────────────────────────────── */
html[data-ui="pro"] .btn{
  background:var(--pro-field);border:1px solid var(--border);color:var(--text);
  font-family:inherit;font-size:13px;font-weight:500;border-radius:var(--radius);
  padding:7px 14px;box-shadow:var(--shadow);
}
html[data-ui="pro"] .btn:hover{background:var(--pro-hover);border-color:var(--border);color:var(--white)}
html[data-ui="pro"] .btn-sm{font-size:12.5px;padding:6px 11px}
html[data-ui="pro"] .btn-primary{background:var(--ss-cyan);border-color:var(--ss-cyan);color:var(--on-accent);font-weight:600}
html[data-ui="pro"] .btn-primary:hover{background:var(--ss-navy-light);border-color:var(--ss-navy-light);color:var(--on-accent)}
html[data-ui="pro"] .btn-success{background:var(--success-dim);border-color:transparent;color:var(--success);box-shadow:none;font-weight:600}
html[data-ui="pro"] .btn-warn{background:var(--warn-dim);border-color:transparent;color:var(--warn);box-shadow:none}
html[data-ui="pro"] .btn-ghost{background:transparent;border-color:transparent;box-shadow:none;color:var(--text-sec)}
html[data-ui="pro"] .btn-ghost:hover{background:var(--pro-hover);color:var(--white)}
html[data-ui="pro"] .btn:focus-visible,
html[data-ui="pro"] .nav-tab:focus-visible,
html[data-ui="pro"] .nav-more-item:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:2px}
html[data-ui="pro"] .seg-group .btn{box-shadow:none}
html[data-ui="pro"] .seg-group .btn[style*="ss-cyan"]{background:var(--pro-active)}

/* ── Fields ─────────────────────────────────────────────────────────── */
html[data-ui="pro"] .form-input,
html[data-ui="pro"] .form-select,
html[data-ui="pro"] .form-textarea{
  background-color:var(--pro-field);border:1px solid var(--border);color:var(--text);
  border-radius:var(--radius);font-size:14px;padding:8px 11px;
}
html[data-ui="pro"] .form-input::placeholder,
html[data-ui="pro"] .form-textarea::placeholder{font-style:normal;color:var(--text-dim);opacity:.8}
html[data-ui="pro"] .form-input:focus,
html[data-ui="pro"] .form-select:focus,
html[data-ui="pro"] .form-textarea:focus{border-color:var(--ss-cyan);box-shadow:0 0 0 3px var(--ss-cyan-glow)}
html[data-ui="pro"][data-theme-family="light"] input[type="date"]{color-scheme:light}
html[data-ui="pro"][data-theme-family="light"] .form-select{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%236b7280'/%3E%3C/svg%3E");
}
html[data-ui="pro"][data-theme-family="light"] select option,html[data-ui="pro"][data-theme-family="light"] select optgroup{background:var(--panel);color:var(--white)}
html[data-ui="pro"] .form-input.auto-filled,
html[data-ui="pro"] .form-select.auto-filled{border-color:var(--success);background-color:var(--success-dim)}
html[data-ui="pro"] .form-input.needs-verify,
html[data-ui="pro"] .form-select.needs-verify{border-color:#d97706;border-style:dashed;background-color:var(--warn-dim)}
html[data-ui="pro"] .form-input.needs-fill,
html[data-ui="pro"] .form-select.needs-fill{border-color:#d97706;background-color:var(--warn-dim);box-shadow:none}

/* ── Top bar ────────────────────────────────────────────────────────── */
html[data-ui="pro"] .topbar{
  background:var(--panel);backdrop-filter:none;border-bottom:1px solid var(--border);height:56px;
}
/* Brand lockup: full logo, divider, app name, connection dot. */
html[data-ui="pro"] .topbar-brand{gap:14px}
html[data-ui="pro"] .topbar-logo{width:auto;height:auto;border-radius:0;background:none;overflow:visible;perspective:none;box-shadow:none}
html[data-ui="pro"] .topbar-logo-img{display:block;height:30px;width:auto;animation:none !important;filter:none !important}
html[data-ui="pro"] .topbar-logo .logo-on-dark{display:none}
html[data-ui="pro"][data-theme-family="dark"] .topbar-logo .logo-on-dark{display:block}
html[data-ui="pro"][data-theme-family="dark"] .topbar-logo .logo-on-light{display:none}
html[data-ui="pro"] .topbar-brand-text{padding-left:14px;border-left:1px solid var(--border);line-height:1.2}
/* The logo already says SCADA Solve; the text stays for screen readers. */
html[data-ui="pro"] .topbar-title{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
html[data-ui="pro"] .topbar-conn{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--text-dim);opacity:.5;flex:0 0 7px}
html[data-ui="pro"] .topbar-conn.conn-connected{background:#22c55e;opacity:1;box-shadow:0 0 0 3px rgba(34,197,94,.16)}
html[data-ui="pro"] .topbar-conn.conn-checking{background:#f59e0b;opacity:1;animation:topbarConnPulse 1.1s ease-in-out infinite}
html[data-ui="pro"] .topbar-conn.conn-disconnected{background:#ef4444;opacity:1;box-shadow:0 0 0 3px rgba(239,68,68,.16)}
@keyframes topbarConnPulse{50%{box-shadow:0 0 0 4px rgba(245,158,11,.25)}}
html[data-ui="pro"] .topbar-subtitle{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:600;letter-spacing:-.01em;text-transform:none;color:var(--white);white-space:nowrap}
html[data-ui="pro"] .topbar-user{background:transparent;border-color:transparent}
html[data-ui="pro"] .topbar-user:hover{background:var(--pro-hover);border-color:transparent}
html[data-ui="pro"] .topbar-user-name{color:var(--text)}

/* ── Tables + timesheet grid ────────────────────────────────────────── */
html[data-ui="pro"] .ts-grid th{
  font-size:11px;font-weight:600;letter-spacing:.02em;text-transform:none;color:var(--text-sec);
  border-bottom:1px solid var(--border);
}
html[data-ui="pro"] .ts-grid input[type="number"]{background:var(--pro-field);border-color:var(--border);color:var(--text)}
html[data-ui="pro"] .ts-row-header{background:var(--pro-inset)}
html[data-ui="pro"] .ts-row-header td{border-bottom:1px solid var(--border)}
html[data-ui="pro"] #tsBody td:first-child input[type="text"],
html[data-ui="pro"] #tsBody td:first-child select,
html[data-ui="pro"] #tsBody td:first-child label{
  background:var(--pro-field) !important;border-color:var(--border) !important;color:var(--text) !important;
}

/* ── Overlays ───────────────────────────────────────────────────────── */
html[data-ui="pro"] .modal-overlay{background:rgba(17,24,39,.45);backdrop-filter:none}
html[data-ui="pro"] .modal-content{box-shadow:var(--shadow-lg)}
html[data-ui="pro"] .toast{background:var(--panel);backdrop-filter:none;border-radius:var(--radius-lg);font-weight:500}
html[data-ui="pro"] .nav-more-dropdown{background:var(--panel);backdrop-filter:none}
html[data-ui="pro"] .main-scroll::-webkit-scrollbar{width:8px}
html[data-ui="pro"] .main-scroll::-webkit-scrollbar-thumb{background:var(--border)}

/* ── Top-tab nav (used below the sidebar breakpoint) ────────────────── */
html[data-ui="pro"] .nav-bar{background:var(--panel);backdrop-filter:none;border-bottom:1px solid var(--border)}
html[data-ui="pro"] .nav-tab{font-size:13px;font-weight:500;color:var(--text-sec)}
html[data-ui="pro"] .nav-tab.active{color:var(--ss-cyan)}

/* Group labels + "You" block exist only for the sidebar layout. */
.nav-group-label,.nav-you{display:none}

/* ═══════════════════════════════════════════════════════════════════════════
   SIDEBAR SHELL
   ═══════════════════════════════════════════════════════════════════════════ */
@media(min-width:1025px){
  html[data-shell="sidebar"]{--side-w:228px}

  /* Everything after the top bar makes room for the sidebar. */
  html[data-shell="sidebar"] .app-shell > .topbar ~ *:not(.nav-bar):not(.bottom-nav){margin-left:var(--side-w)}

  html[data-shell="sidebar"] .nav-bar{
    position:fixed;left:0;top:var(--shell-top,56px);bottom:0;width:var(--side-w);
    display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;gap:1px;
    padding:12px 10px 10px;overflow-y:auto;overflow-x:hidden;
    background:var(--pro-side);border-right:1px solid var(--border);border-bottom:0;z-index:95;
    scrollbar-width:thin;
  }
  html[data-shell="sidebar"] .nav-group-label{
    display:block;padding:12px 10px 5px;font-size:11px;font-weight:600;letter-spacing:.04em;
    text-transform:uppercase;color:var(--text-dim);
  }
  html[data-shell="sidebar"] .nav-bar > .nav-group-label:first-child{padding-top:2px}

  /* Primary items and the former "More" items share one row style. */
  html[data-shell="sidebar"] .nav-tab,
  html[data-shell="sidebar"] .nav-more-item{
    display:flex;align-items:center;gap:10px;
    padding:8px 10px;border:0;border-radius:6px;
    font-size:13.5px;font-weight:500;color:var(--text-sec);white-space:nowrap;
    background:transparent;
  }
  html[data-shell="sidebar"] .nav-tab[style*="display:none"],
  html[data-shell="sidebar"] .nav-more-item[style*="display:none"],
  html[data-shell="sidebar"] .nav-more-item[style*="display: none"]{display:none}
  html[data-shell="sidebar"] .nav-tab:hover,
  html[data-shell="sidebar"] .nav-more-item:hover{background:var(--pro-hover);color:var(--white)}
  html[data-shell="sidebar"] .nav-tab.active,
  html[data-shell="sidebar"] .nav-more-item.active{background:var(--pro-active);color:var(--ss-cyan);font-weight:600}
  html[data-shell="sidebar"] .nav-tab.active::after{display:none}
  html[data-shell="sidebar"] .nav-tab,html[data-shell="sidebar"] .nav-tab.active{border-bottom:0;box-shadow:none}
  html[data-shell="sidebar"] .nav-tab::after,html[data-shell="sidebar"] .nav-tab::before{box-shadow:none}
  /* Floating trend button would sit on top of the "You" block. */
  html[data-shell="sidebar"] .tfab{left:calc(var(--side-w) + 22px)}

  /* The "More" menu becomes a plain, always-open list. */
  html[data-shell="sidebar"] #navMoreBtn{display:none}
  html[data-shell="sidebar"] .nav-more-wrap{position:static}
  html[data-shell="sidebar"] .nav-more-dropdown{
    display:flex;flex-direction:column;gap:1px;position:static;margin:0;padding:0;min-width:0;
    background:transparent;border:0;box-shadow:none;animation:none;
  }
  html[data-shell="sidebar"] .nav-more-divider{height:auto;margin:0;background:none}
  html[data-shell="sidebar"] .nav-more-divider:not([style*="display:none"]):not([style*="display: none"])::after{
    content:"Management";display:block;padding:14px 10px 5px;font-size:11px;font-weight:600;
    letter-spacing:.04em;text-transform:uppercase;color:var(--text-dim);
  }

  /* Icons: one mask per destination, coloured by currentColor. */
  html[data-shell="sidebar"] .nav-tab[data-view]::before,
  html[data-shell="sidebar"] .nav-more-item[data-view]::before{
    content:"";flex:0 0 17px;width:17px;height:17px;background:currentColor;opacity:.85;
    -webkit-mask:var(--nav-ico) center/contain no-repeat;mask:var(--nav-ico) center/contain no-repeat;
  }
  html[data-shell="sidebar"] [data-view="dashboard"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='7' height='9' rx='1'/%3E%3Crect x='14' y='3' width='7' height='5' rx='1'/%3E%3Crect x='14' y='12' width='7' height='9' rx='1'/%3E%3Crect x='3' y='16' width='7' height='5' rx='1'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="newjob"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 8v8M8 12h8'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="jobtracker"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='5' y='4' width='14' height='17' rx='2'/%3E%3Cpath d='M9 4V3h6v1M9 10h6M9 14h6M9 18h3'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="calendar"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cpath d='M3 10h18M8 3v4M16 3v4'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="timesheet"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3 2'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="messages"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 12a8 8 0 0 1-11.5 7.2L4 20l1-4.5A8 8 0 1 1 21 12z'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="resources"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='8' r='3.5'/%3E%3Cpath d='M2.5 20a6.5 6.5 0 0 1 13 0M16 4.6a3.5 3.5 0 0 1 0 6.8M21.5 20a6.5 6.5 0 0 0-4-6'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="myfiles"],
  html[data-shell="sidebar"] [data-view="allfiles"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="account"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='8' r='4'/%3E%3Cpath d='M4 21a8 8 0 0 1 16 0'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="analytics"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 20V10M10 20V4M16 20v-7M22 20H2'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="leadership"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 17l6-6 4 4 8-8M15 7h6v6'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="billing"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 5h10M4 12h16M4 19h7'/%3E%3Ccircle cx='17' cy='5' r='2'/%3E%3Ccircle cx='14' cy='19' r='2'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="intake"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 13h5l1.5 3h5L16 13h5M5 5h14l2 8v6a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-6z'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="alarms"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9'/%3E%3Cpath d='M10.3 21a1.94 1.94 0 0 0 3.4 0'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="datamgmt"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cellipse cx='12' cy='6' rx='8' ry='3'/%3E%3Cpath d='M4 6v6c0 1.7 3.6 3 8 3s8-1.3 8-3V6M4 12v6c0 1.7 3.6 3 8 3s8-1.3 8-3v-6'/%3E%3C/svg%3E")}
  html[data-shell="sidebar"] [data-view="admin"]{--nav-ico:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3l8 3v6c0 4.5-3.2 8-8 9-4.8-1-8-4.500-8-9V6z'/%3E%3Cpath d='M9 12l2 2 4-4'/%3E%3C/svg%3E")}

  /* "You" block, pinned to the bottom of the sidebar. */
  html[data-shell="sidebar"] .nav-you{
    display:block;margin-top:auto;padding-top:12px;border-top:1px solid var(--border);
  }
  html[data-shell="sidebar"] .nav-you-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;margin-bottom:8px}
  html[data-shell="sidebar"] .nav-you-stat{
    display:flex;flex-direction:column;align-items:center;gap:1px;padding:6px 2px;
    background:transparent;border:0;border-radius:6px;cursor:pointer;font-family:inherit;color:var(--text);
  }
  html[data-shell="sidebar"] .nav-you-stat:hover{background:var(--pro-hover)}
  html[data-shell="sidebar"] .nav-you-num{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--white)}
  html[data-shell="sidebar"] .nav-you-stat.is-danger .nav-you-num{color:var(--danger)}
  html[data-shell="sidebar"] .nav-you-stat.is-warn .nav-you-num{color:var(--warn)}
  html[data-shell="sidebar"] .nav-you-label{font-size:10px;color:var(--text-dim);white-space:nowrap}
  html[data-shell="sidebar"] .nav-you-id{display:flex;align-items:center;gap:10px;padding:6px 8px;border-radius:6px;cursor:pointer}
  html[data-shell="sidebar"] .nav-you-id:hover{background:var(--pro-hover)}
  html[data-shell="sidebar"] .nav-you-text{min-width:0}
  html[data-shell="sidebar"] .nav-you-name{font-size:13px;font-weight:600;color:var(--white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  html[data-shell="sidebar"] .nav-you-role{font-size:11px;color:var(--text-dim)}

  /* The left rail's job is now done by the sidebar; the work area gets
     its width back. The right rail stays. */
  html[data-shell="sidebar"] #sideRailLeft{display:none !important}
  html[data-shell="sidebar"] .main-scroll.ss-with-rails{
    grid-template-columns:minmax(0,1fr) 300px;justify-content:stretch;padding:24px 28px;
  }
  /* Pages made of cards, tables and boards use the full width of the
     work area, so a desktop monitor shows more columns instead of a
     blank band beside the right rail. Their grids are auto-fit, so
     they reflow on their own. Pages that are a single form stay at a
     readable width and sit centred in the space. */
  html[data-shell="sidebar"] .main-scroll.ss-with-rails .view{max-width:none}
  html[data-shell="sidebar"] .main-scroll.ss-with-rails #view-newjob,
  html[data-shell="sidebar"] .main-scroll.ss-with-rails #view-account,
  html[data-shell="sidebar"] .main-scroll.ss-with-rails #view-intake{max-width:1180px;margin:0 auto}
  html[data-shell="sidebar"] .main-scroll.ss-with-rails:has(.side-rail-right.is-collapsed){grid-template-columns:minmax(0,1fr) 44px}

  /* Views that already run full-width, and kanban full-screen. */
  html[data-shell="sidebar"] body.ss-full-width-view .main-scroll.ss-with-rails{display:block}
  html[data-shell="sidebar"] body.jt-kanban-fs .nav-bar{display:none !important}
  html[data-shell="sidebar"] body.jt-kanban-fs .app-shell > .topbar ~ *{margin-left:0}
  html[data-shell="sidebar"] body.ss-customer-view .nav-bar{display:none !important}
  html[data-shell="sidebar"] body.ss-customer-view .app-shell > .topbar ~ *{margin-left:0}
}
/* On laptop widths the right rail starts collapsed to protect the work
   area; see sideRails.js. Nothing to style here. */

/* ── Dashboard hero ─────────────────────────────────────────────────── */
html[data-ui="pro"] .dash-hero{background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow)}
html[data-ui="pro"] .dash-hero::before{display:none}
html[data-ui="pro"] .dash-hero-greet-line{font-size:24px;font-weight:600;letter-spacing:-.01em}
html[data-ui="pro"] .dash-hero-next{background:var(--pro-inset);border-color:var(--border)}
html[data-ui="pro"] .dash-hero-next:hover{background:var(--pro-hover);border-color:var(--border)}
html[data-ui="pro"] .dash-hero-next-label{font-size:11px;font-weight:600;letter-spacing:.04em;color:var(--text-dim)}
@media(min-width:1025px){
  /* The floating trend button used to sit bottom-left, where the
     sidebar now is; park it above the "+" button instead of on top of
     page content. */
  html[data-shell="sidebar"] .tfab{left:auto;right:28px;bottom:96px;width:44px;height:44px}
}

/* ── Inline micro-typography ────────────────────────────────────────────
   Much of the app sets tiny all-caps labels inline (9px, letter-spaced).
   Rather than touch hundreds of call sites, lift them here: sentence
   case, no tracking, and a floor on size so nothing is smaller than
   comfortable reading text. */
html[data-ui="pro"] [style*="text-transform:uppercase"]{text-transform:none !important;letter-spacing:0 !important}
html[data-ui="pro"] [style*="font-size:8px"]{font-size:10.5px !important}
html[data-ui="pro"] [style*="font-size:9px"]{font-size:11px !important}
html[data-ui="pro"] [style*="font-size:10px"]{font-size:11.5px !important}
/* The timesheet grid is deliberately dense; keep its own sizing. */
html[data-ui="pro"] #tsBody [style*="font-size:9px"],
html[data-ui="pro"] #tsBody [style*="font-size:8px"],
html[data-ui="pro"] #tsBody [style*="font-size:10px"]{font-size:10.5px !important}

/* KPI tiles built with inline styles (Leadership, Project Tracker). */
html[data-ui="pro"] .lead-kpi-grid > *,
html[data-ui="pro"] .kpi-strip > *{
  background:var(--panel) !important;border:1px solid var(--border);border-left-width:3px;
  border-radius:var(--radius-lg) !important;box-shadow:var(--shadow);padding:12px 14px !important;
}
/* Count badge inside the active Data Management tab. */
html[data-ui="pro"] .md-tab-btn.active span{background:rgba(255,255,255,.25) !important;color:var(--on-accent) !important}

/* ── Sign-in screen ─────────────────────────────────────────────────── */
html[data-ui="pro"] .login-btn:not(.secondary){color:var(--on-accent)}
html[data-ui="pro"] .login-box{background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow-lg);backdrop-filter:none}

/* Anything painted solid accent by script (active tabs, pills) used the
   theme's "white" for its text — which in a light theme is near-black.
   Keep text readable on the accent in both variants. */
html[data-ui="pro"] [style*="background: var(--ss-cyan)"],
html[data-ui="pro"] [style*="background:var(--ss-cyan)"]{color:var(--on-accent) !important}

/* ── Remaining fixed-dark surfaces ──────────────────────────────────── */
html[data-ui="pro"] .rsc-org-zoom-ctrl{background:var(--panel);border:1px solid var(--border);box-shadow:var(--shadow)}
html[data-ui="pro"] .bottom-nav{background:var(--panel);border-top:1px solid var(--border);backdrop-filter:none}
html[data-ui="pro"] .bottom-nav-tab{color:var(--text-sec)}
html[data-ui="pro"] .bottom-nav-tab.active{color:var(--ss-cyan)}
html[data-ui="pro"] .site-dropdown{border-color:var(--border)}

/* Floating action buttons are solid accent; their icon follows. */
html[data-ui="pro"] .tfab,html[data-ui="pro"] .qa-fab{color:var(--on-accent)}
/* The client themes used to draw the dashboard greeting straight on
   top of their artwork, in white with a dark halo. The greeting now
   sits on a solid card like everywhere else, so it uses normal text
   colours. */
html[data-ui="pro"] .dash-hero-greet-line{color:var(--white);text-shadow:none}
html[data-ui="pro"] .dash-hero-pulse{color:var(--text-sec);text-shadow:none}
html[data-ui="pro"] .dash-hero-name{text-shadow:none}
html[data-ui="pro"] .rail-head-count{background:var(--pro-inset);color:var(--text-sec)}
/* In the light client themes the page colour is black (it backs the
   artwork), but much of the app uses the page colour for inset boxes
   inside cards, which then rendered as black slabs on pale panels.
   Inside the app those two tokens become pale tints; the page itself
   keeps its black backdrop. */
html[data-theme="nasaDay"] body > *{--bg:#e9eff7;--bg-deep:#dde6f1}
html[data-theme="exxonDay"] body > *{--bg:#f3e4c8;--bg-deep:#ead7b6}
html[data-theme="pgeDay"] body > *{--bg:#dfeaf4;--bg-deep:#d2e0ee}

/* ── Sign-in screen ─────────────────────────────────────────────────── */
html[data-ui="pro"] .login-btn{margin:0}
html[data-ui="pro"] .login-btn.secondary{margin-top:0;background:var(--pro-field);color:var(--text)}
html[data-ui="pro"] .login-btn.secondary:hover{background:var(--pro-hover);box-shadow:none;transform:none}
.login-as{font-size:12px;color:var(--text-dim);text-align:center;margin-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.login-link{display:block;width:100%;margin:10px 0 0;padding:6px;background:none;border:0;font:inherit;font-size:13px;font-weight:500;color:var(--ss-cyan);cursor:pointer;text-align:center;border-radius:6px}
.login-link:hover{text-decoration:underline}
.login-link:disabled{opacity:.5;cursor:wait;text-decoration:none}
.login-link:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:2px}
.login-notice .login-link{display:inline;width:auto;margin:0;padding:0}
.login-or{display:flex;align-items:center;gap:10px;margin:16px 0 12px;font-size:12px;color:var(--text-dim)}
.login-or::before,.login-or::after{content:"";flex:1;height:1px;background:var(--border)}
.login-notice{text-align:left;font-size:13px;line-height:1.5;color:var(--text);background:var(--warn-dim);border:1px solid var(--warn);border-radius:8px;padding:12px 14px;margin-bottom:14px;overflow-wrap:anywhere}
.login-notice-title{font-weight:600;color:var(--white);margin-bottom:4px}
.login-notice-more{margin-top:10px;font-size:12.5px;color:var(--text-sec)}
.login-notice-more ol{margin:6px 0 0 18px;padding:0}
.login-notice-more li{margin-top:4px}
.login-notice a{color:var(--ss-cyan)}
.login-screen .login-error{text-align:center;margin-top:12px}
.login-diag{margin-top:14px;text-align:left;font-size:12px;color:var(--text-dim)}
.login-diag summary{cursor:pointer;text-align:center;padding:4px}
.login-diag-help{margin:8px 0}
.login-diag pre{margin:0;padding:8px 10px;border:1px solid var(--border);border-radius:6px;background:var(--pro-inset);color:var(--text-sec);font-size:11px;overflow:auto;max-height:160px;white-space:pre-wrap;word-break:break-all}
/* While signing in, the buttons are disabled by script; keep the status
   line readable rather than dimming the whole card. */
.login-screen.signin-pending .login-link{pointer-events:none;opacity:.5}

/* ── Access groups (My access window, Account card, Admin editor) ───── */
.perm-note{font-size:13px;line-height:1.5;color:var(--text-sec);margin:0 0 12px}
.perm-who{padding:2px 0 12px;margin-bottom:12px;border-bottom:1px solid var(--border-light)}
.perm-who-name{font-size:15px;font-weight:600;color:var(--white)}
.perm-who-email{font-size:12.5px;color:var(--text-dim)}
.perm-who-role{font-size:13px;color:var(--text-sec);margin-top:6px}
.perm-group{margin-bottom:14px}
.perm-group:last-child{margin-bottom:0}
.perm-group-title{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--text-dim);margin-bottom:4px}
.perm-row{display:flex;align-items:flex-start;gap:12px;padding:10px 0;border-top:1px solid var(--border-light)}
/* Read-only tick boxes. Drawn by hand: a disabled native checkbox is
   greyed out by the browser, which made "you have this" look the same
   as "you don't". */
.perm-check{flex:0 0 auto;width:18px;height:18px;margin:2px 0 0;-webkit-appearance:none;appearance:none;cursor:default;
  border:1.5px solid var(--border);border-radius:4px;background:var(--pro-field);position:relative}
.perm-check:checked{background:var(--ss-cyan);border-color:var(--ss-cyan)}
.perm-check:checked::after{content:"";position:absolute;left:5px;top:1.5px;width:5px;height:9px;
  border:solid var(--on-accent,#fff);border-width:0 2px 2px 0;transform:rotate(45deg)}
.perm-check:disabled{opacity:1}
.perm-row.is-wait .perm-check{border-color:var(--warn);border-style:dashed}
.perm-text{flex:1;min-width:0}
.perm-label{display:block;font-size:14px;font-weight:600;color:var(--white);cursor:default}
.perm-row.is-off .perm-label,.perm-row.is-wait .perm-label{color:var(--text-sec)}
.perm-desc{font-size:12.5px;color:var(--text-sec);margin-top:2px;line-height:1.45}
.perm-why{font-size:12px;color:var(--text-dim);margin-top:3px}
.perm-row.is-wait .perm-why{color:var(--warn)}
.perm-control{display:flex;align-items:center;gap:8px;flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end}
.perm-pill{display:inline-block;text-align:center;font-size:12px;font-weight:600;padding:3px 9px;border-radius:999px;white-space:nowrap}
.perm-pill.is-on{background:var(--success-dim);color:var(--success)}
.perm-pill.is-off{background:var(--pro-inset,var(--bg-deep));color:var(--text-dim)}
.perm-pill.is-wait{background:var(--warn-dim);color:var(--warn)}
.perm-select{width:auto;min-width:150px;font-size:12.5px;padding:6px 28px 6px 9px}
.perm-req{display:flex;align-items:flex-start;gap:14px;padding:12px 0;border-top:1px solid var(--border-light)}
.perm-req:first-child{border-top:0;padding-top:0}
.perm-req-main{flex:1;min-width:0;font-size:13px;color:var(--text)}
.perm-req-who{font-weight:600;color:var(--white)}
.perm-req-who span{font-weight:400;font-size:12px;color:var(--text-dim);margin-left:6px}
.perm-req-what{margin-top:2px}
.perm-req-why{margin-top:3px;color:var(--text-sec)}
.perm-req-when{margin-top:3px;font-size:12px;color:var(--text-dim)}
.perm-req-actions{display:flex;gap:8px;flex:0 0 auto}
.perm-recent{margin-top:12px;font-size:12.5px;color:var(--text-sec)}
.perm-recent summary{cursor:pointer;color:var(--text-dim);padding:4px 0}
.perm-recent-row{display:flex;align-items:baseline;gap:10px;padding:6px 0;border-top:1px solid var(--border-light)}
.perm-recent-row > span:nth-child(2){flex:1;min-width:0}
.perm-recent-by{font-size:12px;color:var(--text-dim);white-space:nowrap}
/* "My access" at the bottom of the sidebar. */
.nav-you-access{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-top:6px;padding:7px 8px;
  background:var(--pro-field);border:1px solid var(--border);border-radius:6px;font:inherit;font-size:12.5px;font-weight:500;color:var(--text);cursor:pointer}
.nav-you-access:hover{background:var(--pro-hover);color:var(--white)}
.nav-you-access:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:2px}
.nav-you-access-dot{width:8px;height:8px;border-radius:50%;background:var(--warn)}
/* Count of access requests waiting, on the Admin nav item. */
#navAdmin[data-count]:not([data-count="0"])::after{content:attr(data-count);margin-left:auto;min-width:18px;padding:1px 6px;border-radius:999px;
  background:var(--warn);color:#1f1300;font-size:11px;font-weight:700;text-align:center;line-height:16px}
@media(max-width:560px){.perm-row{flex-wrap:wrap}.perm-control{width:100%;justify-content:flex-start;padding-left:30px}.perm-req{flex-direction:column}}
/* Keep the bottom block (your counts, your name, My access) in view
   even when the list of pages is taller than the window: the list
   scrolls behind it. */
@media(min-width:1025px){
  html[data-shell="sidebar"] .nav-you{position:sticky;bottom:-10px;margin-bottom:-10px;padding-bottom:10px;background:var(--pro-side);z-index:1}
}

/* ── Admin > Health ─────────────────────────────────────────────────── */
.health-tiles{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px}
.health-tile{flex:1 1 180px;min-width:0;border:1px solid var(--border);border-left-width:3px;border-radius:8px;padding:10px 12px;background:var(--panel)}
.health-tile.is-ok{border-left-color:var(--success)}
.health-tile.is-warn{border-left-color:var(--warn)}
.health-tile.is-bad{border-left-color:var(--danger)}
.health-tile-label{font-size:12px;color:var(--text-dim)}
.health-tile-value{font-size:16px;font-weight:600;color:var(--white);margin-top:2px}
.health-tile.is-bad .health-tile-value{color:var(--danger)}
.health-tile-sub{font-size:12px;color:var(--text-sec);margin-top:2px;overflow-wrap:anywhere}
.health-counts{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 16px;padding:8px 0;border-top:1px solid var(--border-light);font-size:13px;color:var(--text-dim)}
.health-counts-title{flex:0 0 110px;font-weight:600;color:var(--text)}
.health-count strong{font-variant-numeric:tabular-nums;color:var(--text-dim)}
.health-count.has{color:var(--text)}
.health-count.has strong{color:var(--white)}
.health-ok{color:var(--success)}
.health-section-title{font-size:12px;font-weight:600;color:var(--text-sec);margin:14px 0 4px}
.health-issue{border-top:1px solid var(--border-light)}
.health-issue summary,.health-signin{display:flex;align-items:baseline;gap:10px;padding:8px 0;font-size:13px;cursor:pointer;list-style:none}
.health-issue summary::-webkit-details-marker{display:none}
.health-signin{cursor:default;border-top:1px solid var(--border-light)}
.health-kind{flex:0 0 auto}
.health-issue-msg,.health-signin > span:first-child{flex:1;min-width:0;color:var(--text);overflow-wrap:anywhere}
.health-where{color:var(--text-dim);font-size:12px;margin-left:6px}
.health-issue-n{flex:0 0 auto;font-size:12px;color:var(--text-dim);white-space:nowrap;font-variant-numeric:tabular-nums}
.health-issue-detail{padding:0 0 10px 4px;font-size:12.5px;color:var(--text-sec);line-height:1.5}
.health-issue-detail pre{margin:6px 0 0;padding:8px 10px;background:var(--pro-inset,var(--bg-deep));border:1px solid var(--border-light);border-radius:6px;font-size:11px;white-space:pre-wrap;overflow-wrap:anywhere;max-height:180px;overflow:auto}
.health-foot{margin-top:12px;font-size:12px;color:var(--text-dim)}
@media(max-width:700px){.health-issue summary{flex-wrap:wrap}.health-issue-n{white-space:normal}}

/* ── Site data audit ────────────────────────────────────────────────── */
.sa-intro{font-size:13px;line-height:1.5;color:var(--text-sec);margin-bottom:10px}
.sa-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.sa-count{font-variant-numeric:tabular-nums;opacity:.8;margin-left:4px}
.sa-help{font-size:12.5px;line-height:1.5;color:var(--text-sec);margin:0 0 10px}
.sa-empty{padding:28px 12px;text-align:center;font-size:13px;color:var(--success)}
.sa-conflict{border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:10px;background:var(--panel)}
.sa-conflict-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.sa-site{font-size:14px;font-weight:600;color:var(--white)}
.sa-field{font-size:12px;font-weight:600;color:var(--text-dim)}
.sa-opt{display:flex;align-items:baseline;gap:10px;padding:6px 8px;border-radius:6px;font-size:13px;cursor:pointer}
.sa-opt:hover{background:var(--pro-hover)}
.sa-opt.is-picked{background:var(--pro-active)}
.sa-opt input{flex:0 0 auto;margin:0;position:relative;top:2px;accent-color:var(--ss-cyan)}
.sa-opt-value{flex:0 0 auto;min-width:120px;font-weight:600;color:var(--white);font-variant-numeric:tabular-nums}
.sa-opt-value.sa-leave{font-weight:500;color:var(--text-sec)}
.sa-opt-from{flex:1;min-width:0;font-size:12px;color:var(--text-dim)}
.sa-fix{display:flex;align-items:center;gap:8px;margin:8px 0 2px 8px;font-size:12.5px;color:var(--text)}
.sa-fix input{accent-color:var(--ss-cyan)}
.sa-list{border:1px solid var(--border);border-radius:8px;margin-bottom:10px;max-height:calc(var(--vh) * 44);overflow:auto}
.sa-list > div{display:flex;justify-content:space-between;gap:16px;padding:6px 10px;font-size:12.5px;border-top:1px solid var(--border-light)}
.sa-list > div:first-child{border-top:0}
.sa-list > div > span:last-child{color:var(--text-dim);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.sa-review-title{font-size:13px;font-weight:600;color:var(--white);margin:6px 0}
.sa-result{border:1px solid var(--success);background:var(--success-dim);border-radius:8px;padding:10px 12px;margin-bottom:12px;font-size:13px;color:var(--text)}
.sa-result.has-problems{border-color:var(--warn);background:var(--warn-dim)}
.sa-foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding-top:12px;border-top:1px solid var(--border-light);margin-top:8px}
.sa-foot-note{flex:1;font-size:12.5px;color:var(--text-dim)}
@media(max-width:640px){.sa-opt{flex-wrap:wrap}.sa-opt-value{min-width:0}}

/* ── Bill rates by portfolio ────────────────────────────────────────── */
.pt-rate-help{font-size:12.5px;line-height:1.5;color:var(--text-sec);margin-bottom:10px}
.pt-rate-tools{display:flex;gap:8px;align-items:center;margin-bottom:10px}
.pt-rate-tools input{flex:1;max-width:320px}
.pt-rate-table-wrap{overflow:auto;border:1px solid var(--border);border-radius:8px;min-height:0;flex:1}
.pt-rate-table{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}
.pt-rate-table th{position:sticky;top:0;z-index:1;background:var(--pro-inset,var(--bg-deep));font-size:12px;font-weight:600;color:var(--text-sec);text-align:center;padding:8px 6px;border-bottom:1px solid var(--border);min-width:120px;max-width:180px;white-space:normal}
.pt-rate-table td{padding:4px 6px;border-bottom:1px solid var(--border-light);text-align:center}
.pt-rate-table .pt-rate-who{position:sticky;left:0;z-index:2;background:var(--panel);text-align:left;min-width:200px;padding:6px 10px;font-weight:500;color:var(--white)}
.pt-rate-table th.pt-rate-who{z-index:3;background:var(--pro-inset,var(--bg-deep))}
.pt-rate-email{font-size:11.5px;font-weight:400;color:var(--text-dim)}
.pt-rate-table input{width:96px;padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:var(--pro-field);color:var(--text);text-align:right;font:inherit;font-variant-numeric:tabular-nums}
.pt-rate-table input::placeholder{color:var(--text-dim);opacity:.8}
.pt-rate-table td.is-custom input{border-color:var(--ss-cyan);background:var(--pro-active);font-weight:600;color:var(--white)}
.pt-rate-default td{background:var(--warn-dim)}
.pt-rate-default .pt-rate-who{background:var(--warn-dim);font-weight:600}
.pt-rate-default input{font-weight:600}
.pt-rate-foot{display:flex;align-items:center;gap:8px;margin-top:12px}
.pt-rate-foot span{flex:1;font-size:12.5px;color:var(--text-dim)}

/* ═══════════════════════════════════════════════════════════════════════════
   SIGN-IN PAGE
   Brand panel on the left in the company colors whatever the theme: the
   reversed logo on navy, a blueprint grid that lights up around the
   pointer, and the live SCADA scene (see "Sign-in scene" below). A plain
   sign-in card on the right, centered, with the legal line on the same
   baseline as the copyright.
   ═══════════════════════════════════════════════════════════════════════════ */
html[data-ui="pro"] .login-screen{
  display:grid;grid-template-columns:minmax(400px,44%) 1fr;gap:0;padding:0;
  background:var(--bg);background-image:none;align-items:stretch;justify-content:stretch;
}
html[data-ui="pro"] .login-screen.hidden{display:none}
html[data-ui="pro"] .login-brand{
  --mx:72%;--my:34%;
  position:relative;display:flex;flex-direction:column;
  padding:40px 80px;overflow:hidden;color:#e8eef7;
  background:
    radial-gradient(620px circle at var(--mx) var(--my),rgba(86,190,255,.15),transparent 62%),
    linear-gradient(160deg,#0b1b36 0%,#12305a 55%,#1b3a6b 100%);
}
/* Blueprint grid: faint across the panel, brighter where the light is.
   The padding is a whole number of cells so the copy sits on a line. */
html[data-ui="pro"] .login-brand::before,
html[data-ui="pro"] .login-brand::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-size:40px 40px;background-position:-1px -1px;
}
html[data-ui="pro"] .login-brand::before{
  background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);
}
html[data-ui="pro"] .login-brand::after{
  background-image:linear-gradient(rgba(140,205,255,.2) 1px,transparent 1px),linear-gradient(90deg,rgba(140,205,255,.2) 1px,transparent 1px);
  -webkit-mask-image:radial-gradient(320px circle at var(--mx) var(--my),#000,transparent 72%);
  mask-image:radial-gradient(320px circle at var(--mx) var(--my),#000,transparent 72%);
}
html[data-ui="pro"] .login-brand > *{position:relative;z-index:1}
html[data-ui="pro"] .login-brand-logo{display:block;width:168px;height:auto;margin:0;padding:0;background:none;border-radius:0;box-shadow:none}
/* Copy and drawings sit as one group, centred between logo and footer. */
html[data-ui="pro"] .login-brand-copy{margin-top:auto}
/* The logo already names the company, so the small caps label is not repeated. */
html[data-ui="pro"] .login-brand-eyebrow{display:none}
html[data-ui="pro"] .login-brand-title{font-size:40px;font-weight:700;letter-spacing:-.02em;line-height:1.1;color:#fff;margin:0}
html[data-ui="pro"] .login-brand-text{font-size:15px;line-height:1.6;color:#c3d3e8;max-width:400px;margin-top:14px}
html[data-ui="pro"] .login-brand-foot{
  margin-top:auto;padding-top:32px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;
  font-size:12px;line-height:18px;color:#8fa9c9;
}
html[data-ui="pro"] .login-brand-secure{display:inline-flex;align-items:center;gap:6px}
html[data-ui="pro"] .login-brand-secure::before{
  content:"";width:10px;height:12px;flex:0 0 10px;background:currentColor;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 12'%3E%3Cpath d='M2 5V3.5a3 3 0 0 1 6 0V5h.5A1.5 1.5 0 0 1 10 6.5v4A1.5 1.5 0 0 1 8.5 12h-7A1.5 1.5 0 0 1 0 10.5v-4A1.5 1.5 0 0 1 1.5 5zm1.3 0h3.4V3.5a1.7 1.7 0 0 0-3.4 0z'/%3E%3C/svg%3E") center/contain no-repeat;
          mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 12'%3E%3Cpath d='M2 5V3.5a3 3 0 0 1 6 0V5h.5A1.5 1.5 0 0 1 10 6.5v4A1.5 1.5 0 0 1 8.5 12h-7A1.5 1.5 0 0 1 0 10.5v-4A1.5 1.5 0 0 1 1.5 5zm1.3 0h3.4V3.5a1.7 1.7 0 0 0-3.4 0z'/%3E%3C/svg%3E") center/contain no-repeat;
}
/* Sign-in progress shows in the button and the rocket launch (see "Sign-in scene"). */

/* Card column: three rows so the card is centred on the screen and the
   legal line sits at the bottom, level with the copyright opposite. */
html[data-ui="pro"] .login-main{
  display:grid;grid-template-rows:1fr auto 1fr;justify-items:center;
  box-sizing:border-box;width:100%;min-width:0;padding:40px 24px;overflow-y:auto;
}
html[data-ui="pro"] .login-box{
  grid-area:auto;grid-row:2;box-sizing:border-box;width:min(100%,420px);max-width:100%;
  padding:40px;text-align:left;border-radius:14px;
  box-shadow:0 1px 3px rgba(16,24,40,.06),0 12px 32px rgba(16,24,40,.09);
  animation:loginRise .45s cubic-bezier(.2,.7,.2,1) both;
}
html[data-ui="pro"] .login-box::before{display:none}
html[data-ui="pro"] .login-head{margin-bottom:28px}
html[data-ui="pro"] .login-head-logo{display:none}
html[data-ui="pro"] .login-title{font-size:26px;font-weight:600;letter-spacing:-.015em;line-height:1.2;color:var(--white);margin:0}
html[data-ui="pro"] .login-lede{font-size:14px;line-height:1.55;color:var(--text-sec);margin:8px 0 0}
html[data-ui="pro"] .login-btn{padding:12px 16px;font-size:14px;font-weight:600;border-radius:8px;min-height:46px}
html[data-ui="pro"] #loginEmployeeBtn{display:flex;align-items:center;justify-content:center;gap:10px}
/* Microsoft's four-square mark on the Microsoft button. */
html[data-ui="pro"] #loginEmployeeBtn::before{
  content:"";flex:0 0 16px;width:16px;height:16px;
  background:linear-gradient(#f25022,#f25022) 0 0/7.5px 7.5px no-repeat,linear-gradient(#7fba00,#7fba00) 100% 0/7.5px 7.5px no-repeat,
             linear-gradient(#00a4ef,#00a4ef) 0 100%/7.5px 7.5px no-repeat,linear-gradient(#ffb900,#ffb900) 100% 100%/7.5px 7.5px no-repeat;
}
html[data-ui="pro"] .login-screen.signin-pending #loginEmployeeBtn::before{
  background:none;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;
  width:14px;height:14px;flex-basis:14px;animation:loginSpin .8s linear infinite;
}
@keyframes loginSpin{to{transform:rotate(360deg)}}
@keyframes loginRise{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
html[data-ui="pro"] .login-as{text-align:center;margin-top:8px}
html[data-ui="pro"] .login-link{margin-top:12px}
html[data-ui="pro"] .login-or{margin:20px 0}
html[data-ui="pro"] .login-screen .login-error:empty{display:none}
html[data-ui="pro"] .login-back{display:inline-flex;align-items:center;gap:4px;margin:-6px 0 18px;padding:4px 0;background:none;border:0;font:inherit;font-size:13px;font-weight:500;color:var(--ss-cyan);cursor:pointer}
html[data-ui="pro"] .login-back:hover{text-decoration:underline}
html[data-ui="pro"] .login-back:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:2px;border-radius:4px}
html[data-ui="pro"] #loginForm .login-btn{width:100%;margin-top:6px}
/* "Trouble signing in?" is the card's footer strip. */
html[data-ui="pro"] .login-diag{margin:28px -40px -40px;padding:14px 40px;border-top:1px solid var(--border);background:var(--pro-inset,var(--bg-deep))}
html[data-ui="pro"] .login-diag summary{list-style:none;display:flex;align-items:center;justify-content:center;gap:6px;padding:2px;color:var(--text-dim);font-size:12.5px}
html[data-ui="pro"] .login-diag summary::-webkit-details-marker{display:none}
html[data-ui="pro"] .login-diag summary::after{content:"";width:6px;height:6px;border:solid currentColor;border-width:0 1.5px 1.5px 0;transform:translateY(-2px) rotate(45deg);transition:transform .15s}
html[data-ui="pro"] .login-diag[open] summary::after{transform:translateY(1px) rotate(-135deg)}
html[data-ui="pro"] .login-diag summary:hover{color:var(--text)}
html[data-ui="pro"] .login-diag[open]{padding-bottom:18px}
html[data-ui="pro"] .login-notice-legal{grid-row:3;align-self:end;max-width:560px;margin:24px 0 0;font-size:12px;line-height:18px;color:var(--text-dim);text-align:center}
html[data-ui="pro"] .login-screen .login-logo-img{display:none}

/* Narrow laptops: the brand panel keeps its grid alignment with less margin. */
@media (max-width:1200px){
  html[data-ui="pro"] .login-brand{padding:40px}
}

/* Phones and tablets: the navy panel fills the top of the screen and the
   card sits near the bottom, within thumb reach, overlapping the navy. */
@media (max-width:900px){
  html[data-ui="pro"] .login-screen{display:flex;flex-direction:column;overflow-y:auto}
  html[data-ui="pro"] .login-brand{
    flex:1 0 auto;min-height:250px;padding:36px 24px 76px;
    align-items:center;justify-content:center;text-align:center;gap:0;
  }
  html[data-ui="pro"] .login-brand-mark{display:block}
  html[data-ui="pro"] .login-brand-logo{width:136px}
  html[data-ui="pro"] .login-brand-copy{margin-top:18px}
  html[data-ui="pro"] .login-brand-eyebrow,html[data-ui="pro"] .login-brand-text,html[data-ui="pro"] .login-brand-foot{display:none}
  html[data-ui="pro"] .login-brand-title{font-size:26px;margin-top:0}
  html[data-ui="pro"] .login-main{
    display:flex;flex-direction:column;align-items:center;gap:18px;flex:0 0 auto;
    position:relative;z-index:2;margin-top:-52px;padding:0 16px calc(20px + env(safe-area-inset-bottom,0px));overflow:visible;
  }
  html[data-ui="pro"] .login-box{width:100%;max-width:440px;padding:28px 24px;border-radius:16px;box-shadow:0 2px 6px rgba(16,24,40,.08),0 16px 40px rgba(11,27,54,.18)}
  html[data-ui="pro"] .login-head{margin-bottom:22px}
  html[data-ui="pro"] .login-diag{margin:24px -24px -28px;padding:14px 24px}
  html[data-ui="pro"] .login-notice-legal{margin:0}
}
/* Short screens (landscape phones): drop the drawings to keep the card in view. */
@media (max-width:900px) and (max-height:700px){
  html[data-ui="pro"] .login-brand-art{display:none}
  html[data-ui="pro"] .login-brand{min-height:0;padding-top:24px}
}
@media (prefers-reduced-motion: reduce){
  html[data-ui="pro"] .login-screen.signin-pending #loginEmployeeBtn::before,
  html[data-ui="pro"] .login-box{animation:none}
}

/* ── Sign-in scene ────────────────────────────────────────────
   One live SCADA scene: control room and radio tower, pumpjack, tank,
   substation, wind turbine and a rocket on its pad. Everything draws
   itself in, then runs: commands go out along the upper lane (cyan),
   telemetry comes back on the lower lane (green), product and power flow
   in amber. Signing in launches the rocket. */
/* The scene runs edge to edge across the panel, so the ground line reads
   as a horizon; the legend lines up with the copy again. */
html[data-ui="pro"] .login-brand-art{display:block;margin:44px -80px 0;max-width:none}
html[data-ui="pro"] .login-scene-legend{padding:0 80px}
html[data-ui="pro"] .login-scene{
  --scn-line:#7fbbe9;--scn-out:#5fd4ff;--scn-in:#4ade80;--scn-amber:#fbbf4a;
  display:block;width:100%;height:auto;overflow:visible;
  stroke:var(--scn-line);stroke-width:2;
}
.login-scene .scn-thin{stroke-width:1.2;stroke-opacity:.75}
.login-scene .scn-fill{fill:var(--scn-line);fill-opacity:.1}
.login-scene .scn-ground{stroke-opacity:.3;stroke-width:1}
.login-scene .scn-screen{fill:#0b1b36;fill-opacity:.55}
.login-scene .scn-trend{stroke:var(--scn-in);stroke-width:1.5;stroke-dasharray:60;animation:scnTrend 3.2s linear infinite}
.login-scene .scn-labels{stroke:none;fill:#8fa9c9;font:600 8.5px/1 "JetBrains Mono",ui-monospace,monospace;letter-spacing:.08em;text-anchor:middle}
/* Draw-in on load. pathLength is set to 100 on every stroked shape by
   the init script at the end of index.html. */
.login-scene .scn-draw :is(path,line,polyline,rect,circle):not(.scn-flow){
  stroke-dasharray:100;stroke-dashoffset:0;animation:scnDraw 1.8s cubic-bezier(.4,0,.2,1) var(--d,0s) both;
}
@keyframes scnDraw{from{stroke-dashoffset:100;fill-opacity:0}}
/* The data link. */
.login-scene .scn-lane{stroke-width:1.4;stroke-dasharray:3 5;stroke-opacity:.55}
.login-scene .scn-lane-out{stroke:var(--scn-out);animation:scnFlowR 1s linear infinite}
.login-scene .scn-lane-in{stroke:var(--scn-in);animation:scnFlowL 1s linear infinite}
.login-scene .scn-drop{stroke-width:1;stroke-dasharray:2 4;stroke-opacity:.45}
.login-scene .scn-led{stroke:none;fill:var(--scn-in);fill-opacity:.35}
.login-scene .scn-pkt{stroke:none}
.login-scene .scn-pkt-out{fill:var(--scn-out);filter:drop-shadow(0 0 3px var(--scn-out))}
.login-scene .scn-pkt-in{fill:var(--scn-in);filter:drop-shadow(0 0 3px var(--scn-in))}
.login-scene .scn-beacon{stroke:none;fill:#ff5d5d;animation:scnBeacon 1.6s steps(1,end) infinite}
/* Product and power. */
.login-scene .scn-pipe{stroke-width:5;stroke-opacity:.22}
.login-scene .scn-cable{stroke-width:3}
.login-scene .scn-product,.login-scene .scn-power{stroke:var(--scn-amber);stroke-width:1.6;stroke-dasharray:4 6;stroke-opacity:.85}
.login-scene .scn-product{animation:scnFlowR .9s linear infinite}
.login-scene .scn-power{animation:scnFlowL .7s linear infinite}
/* Moving equipment. */
.login-scene .scn-beam{transform-box:view-box;transform-origin:182px 128px;animation:scnRock 4s ease-in-out infinite}
.login-scene .scn-crank{transform-box:view-box;transform-origin:215px 176px;animation:scnSpin 4s linear infinite}
.login-scene .scn-blades{transform-box:view-box;transform-origin:446px 98px;animation:scnSpin 5s linear infinite}
.login-scene .scn-liquid{fill:var(--scn-out);fill-opacity:.2;stroke:none;animation:scnLevel 9s ease-in-out infinite alternate}
.login-scene .scn-flare{stroke:none;fill:var(--scn-amber);fill-opacity:.85;transform-box:view-box;transform-origin:411px 85px;animation:scnFlare .16s ease-in-out infinite alternate}
@keyframes scnFlare{from{transform:scale(.88,.82);fill-opacity:.7}to{transform:scale(1.06,1.12);fill-opacity:.95}}
.login-scene .scn-hum{stroke:none;fill:var(--scn-out);fill-opacity:0;animation:scnHum 2.4s ease-in-out 2s infinite}
@keyframes scnFlowR{to{stroke-dashoffset:-8}}
@keyframes scnFlowL{to{stroke-dashoffset:8}}
@keyframes scnTrend{from{stroke-dashoffset:60}to{stroke-dashoffset:-60}}
@keyframes scnBeacon{0%{fill-opacity:1}50%{fill-opacity:.15}}
@keyframes scnRock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}
@keyframes scnSpin{to{transform:rotate(360deg)}}
@keyframes scnLevel{from{transform:translateY(0)}to{transform:translateY(16px)}}
@keyframes scnHum{0%,100%{fill-opacity:0}50%{fill-opacity:.16}}
/* The rocket. Idle on the pad; the engine glows while the pointer is on
   the Microsoft button; signing in retracts the arm, lights the engine
   and launches it out of the top of the panel. */
.login-scene .scn-flame{stroke:none;opacity:0;transform-box:view-box;transform-origin:548px 188px}
.login-scene .scn-trail{stroke:none;opacity:0;transform-box:view-box;transform-origin:548px 190px;transform:scaleY(0)}
.login-scene .scn-smoke circle{stroke:none;fill:#c8d7eb;opacity:0;transform-box:fill-box;transform-origin:center}
.login-scene .scn-arm{transform-box:view-box;transform-origin:579px 122px;transition:transform .45s cubic-bezier(.4,0,.2,1)}
.login-screen:has(#loginEmployeeBtn:hover:not(:disabled)) .login-scene .scn-flame{opacity:.45;transform:scale(.55,.35)}
.login-screen.signin-pending .login-scene .scn-arm{transform:rotate(-80deg)}
.login-screen.signin-pending .login-scene .scn-flame{opacity:1;animation:scnFlicker .09s linear infinite alternate}
.login-screen.signin-pending .login-scene .scn-smoke circle{animation:scnSmoke 1.4s ease-out .25s infinite}
.login-screen.signin-pending .login-scene .scn-smoke circle:nth-child(2n){animation-delay:.55s}
.login-screen.signin-pending .login-scene .scn-rocket-body{animation:scnShake .07s linear 8}
.login-screen.signin-pending .login-scene .scn-rocket{animation:scnLiftoff 2.6s cubic-bezier(.55,0,.8,.3) .6s forwards}
.login-screen.signin-pending .login-scene .scn-trail{animation:scnTrailGrow 2.6s cubic-bezier(.55,0,.8,.3) .6s forwards}
@keyframes scnFlicker{from{transform:scale(.9,.85)}to{transform:scale(1.08,1.15)}}
@keyframes scnShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-.8px)}75%{transform:translateX(.8px)}}
@keyframes scnLiftoff{to{transform:translateY(-1500px)}}
@keyframes scnTrailGrow{0%{opacity:0;transform:scaleY(0)}10%{opacity:1}100%{opacity:.8;transform:scaleY(1)}}
@keyframes scnSmoke{0%{opacity:0;transform:scale(.4)}25%{opacity:.55}100%{opacity:0;transform:scale(2.4) translateY(-6px)}}
/* Legend under the scene. */
html[data-ui="pro"] .login-scene-legend{display:flex;flex-wrap:wrap;gap:6px 18px;margin-top:10px;font-size:11.5px;color:#8fa9c9}
html[data-ui="pro"] .login-scene-legend span{display:inline-flex;align-items:center;gap:6px}
html[data-ui="pro"] .login-scene-legend i{width:14px;height:0;border-top:2px dashed currentColor}
html[data-ui="pro"] .login-scene-legend .lg-out i{color:#5fd4ff}
html[data-ui="pro"] .login-scene-legend .lg-in i{color:#4ade80}
html[data-ui="pro"] .login-scene-legend .lg-flow i{color:#fbbf4a}
@media (max-width:1200px){
  html[data-ui="pro"] .login-brand-art{margin-left:-40px;margin-right:-40px}
  html[data-ui="pro"] .login-scene-legend{padding:0 40px}
}
@media (max-width:900px){
  html[data-ui="pro"] .login-brand-art{display:block;width:calc(100% + 48px);max-width:none;margin:18px -24px 0}
  html[data-ui="pro"] .login-scene .scn-labels,html[data-ui="pro"] .login-scene-legend{display:none}
}
@media (prefers-reduced-motion: reduce){
  .login-scene *,.login-scene .scn-draw *{animation:none !important;transition:none !important}
  .login-scene .scn-pkt{display:none}
  .login-scene .scn-led{fill-opacity:.9}
}

/* ── Job Tracker: aging entries and the just-saved highlight ─────────── */
.jt-age{display:inline-flex;align-items:center;gap:3px;font-size:9.5px;font-weight:700;letter-spacing:.02em;padding:1px 6px;border-radius:999px;white-space:nowrap;font-variant-numeric:tabular-nums}
.jt-age::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.jt-age-aging{color:#b7791f;background:rgba(245,158,11,.14)}
.jt-age-stale{color:#c2410c;background:rgba(234,88,12,.14)}
.jt-age-old{color:#dc2626;background:rgba(239,68,68,.14)}
html[data-theme-family="dark"] .jt-age-aging{color:#fbbf24}
html[data-theme-family="dark"] .jt-age-stale{color:#fb923c}
html[data-theme-family="dark"] .jt-age-old{color:#f87171}
.jt-aging-card .stat-label{display:flex;align-items:center;gap:6px}
.jt-aging-card.has-aging .stat-num{color:#d97706}
html[data-theme-family="dark"] .jt-aging-card.has-aging .stat-num{color:#fbbf24}
.jt-aging-card.is-on{outline:2px solid #f59e0b;outline-offset:-2px}
.jt-aging-card:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:2px}
.jt-just-saved{position:relative;animation:jtSavedPulse 1.3s ease-out 3;outline:2px solid var(--ss-cyan);outline-offset:2px;border-radius:6px}
tr.jt-just-saved{outline:none}
tr.jt-just-saved > td{background:rgba(6,182,212,.12) !important}
@keyframes jtSavedPulse{0%{box-shadow:0 0 0 0 rgba(6,182,212,.55)}100%{box-shadow:0 0 0 14px rgba(6,182,212,0)}}
.jt-saved-pill{display:inline-block;max-width:100%;box-sizing:border-box;margin:0 0 6px;padding:2px 8px;border-radius:999px;background:var(--ss-cyan);color:#fff;font-size:10px;font-weight:700;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.jt-saved-pill::before{content:"✓ "}
/* On board cards the status badge sits top-right; keep clear of it. */
.jt-card > .jt-saved-pill{max-width:calc(100% - 30px)}
td .jt-saved-pill{margin:0 6px 0 0}
.jt-saved-hidden{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px;padding:10px 14px;border:1px solid var(--ss-cyan);border-radius:8px;background:rgba(6,182,212,.08);font-size:13px;color:var(--text)}
@media (prefers-reduced-motion: reduce){.jt-just-saved{animation:none}}

/* ── Insights: Project Tracker overview, data checks (js/insightsUi.js) ── */
.ins-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px 20px;flex-wrap:wrap;margin-bottom:16px}
.ins-title{font-size:22px;font-weight:700;letter-spacing:-.01em;color:var(--white);margin:0}
.ins-subtitle{font-size:12.5px;color:var(--text-dim);margin-top:3px;max-width:680px}
.ins-actions{display:flex;gap:6px;flex-wrap:wrap}
.ins-kpis{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px}
.ins-kpi{flex:1 1 150px;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:12px 14px;min-width:0}
.ins-kpi[role=button]{cursor:pointer}.ins-kpi[role=button]:hover{border-color:var(--ss-cyan)}
.ins-kpi-label{font-size:11px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em}
.ins-kpi-value{font-size:24px;font-weight:700;color:var(--white);font-variant-numeric:tabular-nums;letter-spacing:-.01em;margin-top:2px;white-space:nowrap}
.ins-kpi-value small{font-size:13px;font-weight:600;color:var(--text-dim);margin-left:1px}
.ins-kpi-sub{font-size:11.5px;color:var(--text-sec);margin-top:1px}
.ins-kpi.is-bad .ins-kpi-value,.ins-bad{color:#dc2626}
.ins-kpi.is-warn .ins-kpi-value,.ins-warn{color:#d97706}
html[data-theme-family="dark"] .ins-kpi.is-bad .ins-kpi-value,html[data-theme-family="dark"] .ins-bad{color:#f87171}
html[data-theme-family="dark"] .ins-kpi.is-warn .ins-kpi-value,html[data-theme-family="dark"] .ins-warn{color:#fbbf24}
.ins-row2{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:14px;margin-bottom:18px}
@media (max-width:1100px){.ins-row2{grid-template-columns:1fr}}
.ins-panel{padding:14px 16px;margin:0}
.ins-panel-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.ins-panel-h h3,.ins-section-h h3{font-size:14px;font-weight:700;color:var(--white);margin:0}
.ins-empty{padding:18px 6px;text-align:center;color:var(--text-dim);font-size:12.5px}
.ins-note{font-size:11.5px;color:var(--text-dim);margin-top:8px}
.ins-att{display:block;width:100%;text-align:left;background:none;border:0;border-top:1px solid var(--border);padding:10px 2px;cursor:pointer;color:inherit;font:inherit}
.ins-att:first-of-type{border-top:0}.ins-att:hover .ins-att-name{color:var(--ss-cyan)}
.ins-att-top{display:flex;align-items:center;gap:8px}.ins-att-name{font-weight:600;font-size:13px;color:var(--white);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ins-att-sub{font-size:11.5px;color:var(--text-dim)}
.ins-att-why{list-style:none;margin:4px 0 6px;padding:0;font-size:12px;color:var(--text-sec)}
.ins-att-why li{position:relative;padding-left:12px}.ins-att-why li::before{content:"";position:absolute;left:0;top:.55em;width:6px;height:6px;border-radius:50%;background:#d97706}
.ins-att-why li.is-risk::before{background:#dc2626}
.ins-pill{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:700;letter-spacing:.02em;padding:2px 8px;border-radius:999px;white-space:nowrap;background:color-mix(in srgb,var(--c) 13%,transparent);color:var(--c)}
.ins-pill::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.ins-pill-risk{--c:#dc2626}.ins-pill-watch{--c:#d97706}.ins-pill-good{--c:#059669}.ins-pill-planned{--c:#64748b}.ins-pill-done{--c:#2563eb}
html[data-theme-family="dark"] .ins-pill-risk{--c:#f87171}html[data-theme-family="dark"] .ins-pill-watch{--c:#fbbf24}html[data-theme-family="dark"] .ins-pill-good{--c:#34d399}html[data-theme-family="dark"] .ins-pill-done{--c:#60a5fa}html[data-theme-family="dark"] .ins-pill-planned{--c:#94a3b8}
.ins-burn{position:relative;height:8px;border-radius:999px;background:var(--bg-deep);overflow:visible;margin:6px 0 2px}
.ins-burn-compact{height:6px;margin:4px 0 0}
.ins-burn-fill,.ins-burn-eac{position:absolute;left:0;top:0;bottom:0;border-radius:999px}
.ins-burn-fill{background:#2563eb}.ins-burn-eac{background:color-mix(in srgb,#2563eb 25%,transparent)}
.ins-burn-fill.is-over{background:#dc2626}.ins-burn-eac.is-over{background:color-mix(in srgb,#dc2626 25%,transparent)}
.ins-burn-time{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;background:var(--white);border-radius:1px;opacity:.75}
.ins-burn-budget{position:absolute;top:-4px;bottom:-4px;width:2px;margin-left:-1px;background:#dc2626}
.ins-burn-empty{height:auto;background:none;font-size:11px;color:var(--text-dim)}
.ins-dc-mini{display:flex;flex-direction:column}
.ins-dc-row{display:flex;align-items:center;gap:8px;width:100%;background:none;border:0;border-top:1px solid var(--border);padding:8px 2px;cursor:pointer;color:var(--text);font:inherit;font-size:12.5px;text-align:left}
.ins-dc-row:first-child{border-top:0}.ins-dc-row:hover .ins-dc-title{color:var(--ss-cyan)}
.ins-sev{flex:0 0 8px;width:8px;height:8px;border-radius:50%}.ins-sev-high{background:#dc2626}.ins-sev-medium{background:#d97706}.ins-sev-low{background:#94a3b8}
.ins-dc-title{flex:1;min-width:0}
.ins-dc-n{font-weight:700;font-variant-numeric:tabular-nums;color:var(--white);min-width:2ch;text-align:right}
.ins-dc-imp{font-size:11.5px;color:var(--text-dim);white-space:nowrap;font-variant-numeric:tabular-nums}
.ins-section-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:6px 0 10px}
.ins-pf-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px;margin-bottom:20px}
.ins-pf{position:relative;background:var(--panel);border:1px solid var(--border);border-radius:14px;padding:14px 16px 12px;cursor:pointer;display:flex;flex-direction:column;gap:10px;transition:border-color .15s,box-shadow .15s}
.ins-pf::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;border-radius:14px 14px 0 0;background:var(--pf)}
.ins-pf:hover,.ins-pf:focus-visible{border-color:var(--pf);box-shadow:0 6px 20px rgba(15,23,42,.10);outline:none}
.ins-pf header{display:flex;align-items:flex-start;gap:8px}.ins-pf header > div:first-child{flex:1;min-width:0}
.ins-pf h4{font-size:15px;font-weight:700;color:var(--white);margin:2px 0 0}.ins-pf header p{font-size:11.5px;color:var(--text-dim);margin:2px 0 0}
.ins-pf-btns{display:flex;gap:2px}.ins-pf-btns .btn{padding:2px 8px;font-size:11px}
.ins-chips{display:flex;flex-wrap:wrap;gap:6px}
.ins-chip{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:600;color:var(--text-sec);background:var(--bg-deep);padding:2px 8px;border-radius:999px}
.ins-chip i{width:6px;height:6px;border-radius:50%;background:#64748b}
.ins-chip-risk i{background:#dc2626}.ins-chip-watch i{background:#d97706}.ins-chip-good i{background:#059669}.ins-chip-done i{background:#2563eb}
.ins-pf-money{display:flex;align-items:baseline;justify-content:space-between;gap:8px;flex-wrap:wrap}
.ins-pf-big{font-size:20px;font-weight:700;color:var(--white);font-variant-numeric:tabular-nums}.ins-pf-of{font-size:12px;color:var(--text-dim)}
.ins-pf-eac{font-size:12px;font-weight:600;color:var(--text-sec)}
.ins-pf-trend{display:flex;align-items:flex-end;justify-content:space-between;gap:8px}
.ins-pf-trend-l{font-size:11px;color:var(--text-dim)}.ins-pf-trend-v{font-size:13px;font-weight:700;color:var(--white);font-variant-numeric:tabular-nums}
.ins-spark{display:block;fill:color-mix(in srgb,var(--pf,#2563eb) 55%,transparent)}.ins-spark .ins-spark-now{fill:var(--pf,#2563eb)}
.ins-pf footer{display:flex;gap:12px;flex-wrap:wrap;font-size:11.5px;color:var(--text-dim);border-top:1px solid var(--border);padding-top:8px}
.ins-filters{display:inline-flex;background:var(--bg-deep);border-radius:9px;padding:3px;gap:2px;flex-wrap:wrap}
.ins-filters button{border:0;background:none;padding:5px 10px;border-radius:7px;font:inherit;font-size:12px;font-weight:600;color:var(--text-sec);cursor:pointer}
.ins-filters button.is-on{background:var(--panel);color:var(--white);box-shadow:0 1px 2px rgba(15,23,42,.12)}
.ins-search{margin-left:auto;max-width:240px;padding:6px 10px;font-size:12.5px}
.ins-table-card{padding:0;overflow:hidden;margin-bottom:24px}
.ins-table-wrap{overflow-x:auto}
.ins-table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:640px}
.ins-table th{position:sticky;top:0;background:var(--panel);text-align:left;font-size:10.5px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--border);padding:0;white-space:nowrap}
.ins-table th button{all:unset;display:block;padding:9px 12px;cursor:pointer}.ins-table th.num button{text-align:right}
.ins-table th button:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:-2px}
.ins-table th.is-sorted{color:var(--white)}
.ins-table td{padding:9px 12px;border-bottom:1px solid var(--border);vertical-align:top;color:var(--text)}
.ins-table tbody tr{cursor:pointer}.ins-table tbody tr:hover td,.ins-table tbody tr:focus-visible td{background:color-mix(in srgb,var(--ss-cyan) 6%,transparent)}
.ins-table tbody tr:focus-visible{outline:none}
.ins-table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.ins-table td:first-child{min-width:190px;max-width:260px}
.ins-t-name{font-weight:600;color:var(--white)}
.ins-table td:first-child .ins-t-sub{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}
.ins-table td:first-child .ins-t-sub i{display:inline-block;margin-right:5px;vertical-align:1px}
.ins-t-sub{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--text-dim);margin-top:1px}.num .ins-t-sub{justify-content:flex-end}
.ins-t-sub i{width:7px;height:7px;border-radius:2px;flex:0 0 7px}
.ins-t-why{font-size:11px;color:var(--text-dim);margin-top:3px;max-width:200px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ins-t-money{font-size:12px;color:var(--text-dim);white-space:nowrap}.ins-t-money b{color:var(--white);font-weight:700}
.ins-t-bar{min-width:170px}
.ins-dc-modal{max-width:760px;width:94%;max-height:calc(var(--vh100,100vh) - 60px);display:flex;flex-direction:column;padding:0}
.ins-dc-modal .card-header{padding:14px 18px;margin:0;border-bottom:1px solid var(--border)}
.ins-dc-scroll{overflow-y:auto;padding:14px 18px 18px}
.ins-dc-head{display:flex;gap:16px;align-items:center;margin-bottom:12px}
.ins-dc-head p{font-size:12.5px;color:var(--text-sec);margin:0}
.ins-dc-conf{font-size:30px;font-weight:800;color:var(--white);font-variant-numeric:tabular-nums;line-height:1}
.ins-dc-conf-l{font-size:10.5px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;white-space:nowrap}
.ins-dc{border:1px solid var(--border);border-radius:10px;margin-bottom:8px;overflow:hidden}
.ins-dc-sum{display:flex;align-items:center;gap:8px;width:100%;padding:10px 12px;background:none;border:0;cursor:pointer;color:var(--text);font:inherit;font-size:13px;font-weight:600;text-align:left}
.ins-dc-chev{width:7px;height:7px;border:solid var(--text-dim);border-width:0 1.5px 1.5px 0;transform:rotate(45deg);transition:transform .15s;margin-left:4px}
.ins-dc.is-open .ins-dc-chev{transform:rotate(-135deg)}
.ins-dc-body{display:none;padding:0 12px 12px}.ins-dc.is-open .ins-dc-body{display:block}
.ins-dc-why{font-size:12px;color:var(--text-sec);margin:0 0 8px}
.ins-dc-act{margin-bottom:8px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ins-dc-items{list-style:none;margin:0;padding:0;max-height:300px;overflow-y:auto;border-top:1px solid var(--border)}
.ins-dc-items button{display:flex;flex-direction:column;align-items:flex-start;width:100%;padding:7px 4px;background:none;border:0;border-bottom:1px solid var(--border);cursor:pointer;text-align:left;font:inherit;color:var(--text)}
.ins-dc-items button:hover span{color:var(--ss-cyan)}
.ins-dc-items span{font-size:12.5px;font-weight:600}.ins-dc-items small{font-size:11.5px;color:var(--text-dim)}

/* Data checks: fixes on each item */
.ins-fix-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border)}
.ins-fix{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:7px 2px;border-bottom:1px solid var(--border)}
.ins-fix.is-busy{opacity:.6}
.ins-fix-open{flex:1 1 220px;min-width:0;display:flex;flex-direction:column;align-items:flex-start;background:none;border:0;padding:0;cursor:pointer;text-align:left;font:inherit;color:var(--text)}
.ins-fix-open span{font-size:12.5px;font-weight:600;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ins-fix-open small{font-size:11.5px;color:var(--text-dim)}
.ins-fix-open:hover span{color:var(--ss-cyan)}
.ins-fix-acts{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.ins-fix-acts .btn{font-size:11.5px;padding:4px 10px;white-space:nowrap}
.ins-fix-busy{font-size:11.5px;color:var(--text-dim)}
.ins-fix-group{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding:9px 2px 5px;margin-top:4px;border-bottom:1px solid var(--border);font-size:12px;font-weight:700;color:var(--white)}
.ins-fix-select{max-width:260px;padding:4px 26px 4px 8px;font-size:11.5px;height:auto}
.ins-fix-date{width:auto;padding:3px 6px;font-size:11.5px;height:auto}
.ins-fix-money{display:inline-flex;align-items:center;gap:3px;font-size:12px;color:var(--text-dim)}
.ins-fix-money input{width:96px;padding:3px 6px;font-size:11.5px;height:auto}
.ins-dc-dismissed{margin-top:10px;font-size:12px;color:var(--text-dim)}
.ins-dc-dismissed summary{cursor:pointer}
.ins-dc-dismissed ul{list-style:none;margin:6px 0 0;padding:0}
.ins-dc-dismissed li{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:5px 0;border-top:1px solid var(--border)}
.ins-dc-dismissed li span{flex:1 1 200px;color:var(--text)}
.ins-dc-dismissed li small{flex:1 1 200px}

/* ── Route sheet import (js/routeSheetImport.js) ─────────────────────── */
.rsi-modal{max-width:1160px;width:97%;max-height:calc(var(--vh100,100vh) - 40px);display:flex;flex-direction:column;padding:0}
.rsi-modal .card-header{padding:14px 18px;margin:0;border-bottom:1px solid var(--border)}
.rsi-body{overflow:auto;flex:1;padding:0 18px}
.rsi-head{padding:14px 0 6px;font-size:13px;color:var(--text)}
.rsi-head p,.rsi-note{font-size:12px;color:var(--text-dim);line-height:1.55;margin:6px 0}
.rsi-tally{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.rsi-tally span{font-size:11.5px;font-weight:700;padding:2px 9px;border-radius:999px;background:var(--bg-deep);color:var(--text-sec)}
.rsi-tally .is-move{color:#b45309;background:rgba(245,158,11,.14)}.rsi-tally .is-new{color:#047857;background:rgba(16,185,129,.14)}
.rsi-tally .is-review{color:#1d4ed8;background:rgba(37,99,235,.12)}.rsi-tally .is-info{color:#6d28d9;background:rgba(124,58,237,.12)}.rsi-tally .is-bad{color:#b91c1c;background:rgba(239,68,68,.12)}
html[data-theme-family="dark"] .rsi-tally .is-move{color:#fbbf24}html[data-theme-family="dark"] .rsi-tally .is-new{color:#34d399}html[data-theme-family="dark"] .rsi-tally .is-review{color:#93c5fd}html[data-theme-family="dark"] .rsi-tally .is-info{color:#c4b5fd}html[data-theme-family="dark"] .rsi-tally .is-bad{color:#fca5a5}
.rsi-sec-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13px;font-weight:700;color:var(--white);margin:18px 0 8px}
.rsi-routes{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px}
.rsi-route{border:1px solid var(--border);border-radius:10px;padding:10px 12px;font-size:12px;color:var(--text-sec)}
.rsi-route.is-warn{border-color:#f59e0b;background:rgba(245,158,11,.06)}
.rsi-route-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.rsi-route-h b{font-size:14px;color:var(--white)}
.rsi-route ul{margin:0 0 6px;padding-left:16px}.rsi-route li.is-info{color:var(--text-dim)}
.rsi-contacts{font-size:11.5px;color:var(--text-dim);margin-bottom:6px;line-height:1.5}
.rsi-appr{display:block;font-size:11px;color:var(--text-dim)}.rsi-appr select{width:100%;margin-top:3px;font-size:12px;padding:4px 26px 4px 8px;height:auto}
.rsi-warn-note{font-size:11.5px;color:#b45309;margin-top:6px}html[data-theme-family="dark"] .rsi-warn-note{color:#fbbf24}
.rsi-table{width:100%;border-collapse:collapse;font-size:12px;margin-bottom:6px}
.rsi-table th{text-align:left;font-size:10.5px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;padding:6px;border-bottom:1px solid var(--border);position:sticky;top:0;background:var(--panel);z-index:1}
.rsi-table td{padding:6px;border-bottom:1px solid var(--border);vertical-align:top;color:var(--text)}
.rsi-table td b{color:var(--white)}
.rsi-c-pick{width:28px}
.rsi-table .form-input{width:100%;padding:3px 6px;font-size:11.5px;height:auto;font-family:'JetBrains Mono',monospace}
.rsi-table .form-select{font-size:12px;padding:4px 26px 4px 8px;height:auto;max-width:420px}
.rsi-sub{font-size:11px;color:var(--text-dim);margin-top:2px}
.rsi-what{font-size:11.5px}.rsi-what.is-new{color:#047857}.rsi-what.is-move{color:#b45309}
html[data-theme-family="dark"] .rsi-what.is-new{color:#34d399}html[data-theme-family="dark"] .rsi-what.is-move{color:#fbbf24}
.rsi-flag{color:#f59e0b;margin-right:4px}
.rsi-mono{font-family:'JetBrains Mono',monospace;font-size:11px}
.rsi-filters{display:inline-flex;background:var(--bg-deep);border-radius:8px;padding:2px;gap:2px;font-weight:600}
.rsi-filters button{border:0;background:none;padding:4px 9px;border-radius:6px;font:inherit;font-size:11.5px;color:var(--text-sec);cursor:pointer}
.rsi-filters button.is-on{background:var(--panel);color:var(--white);box-shadow:0 1px 2px rgba(15,23,42,.12)}
.rsi-more{margin:10px 0;font-size:12px}.rsi-more summary{cursor:pointer;font-weight:600;color:var(--text-sec)}
.rsi-more .rsi-table{max-height:260px}
.rsi-foot{position:sticky;bottom:0;display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:14px -18px 0;padding:12px 18px;background:var(--panel);border-top:1px solid var(--border)}
.rsi-foot span{flex:1;min-width:220px;font-size:11.5px;color:var(--text-dim)}

/* ── Leadership KPIs (js/leadership.js on js/insights.js) ───────────── */
.lead-group{margin-bottom:14px}
.lead-group-h{display:flex;align-items:baseline;gap:8px;font-size:12px;font-weight:700;color:var(--white);text-transform:uppercase;letter-spacing:.08em;margin:0 0 8px}
.lead-group-h span{font-size:11.5px;font-weight:500;text-transform:none;letter-spacing:0;color:var(--text-dim)}
.lead-kpi-grid{display:flex;flex-wrap:wrap;gap:10px}
.lead-kpi-grid > div{flex:1 1 160px}
.lead-kpi-note{display:block;font-size:11.5px;font-weight:500;color:var(--text-sec);font-family:inherit;margin-top:2px}
.lead-card{padding:14px 16px;margin-bottom:14px}
.lead-card-h{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;font-size:13px;font-weight:700;color:var(--white);margin-bottom:10px}
.lead-card-h span{font-size:11.5px;font-weight:500;color:var(--text-dim)}
.lead-burn-row{display:grid;grid-template-columns:minmax(140px,1.2fr) minmax(120px,2fr) auto 44px auto;align-items:center;gap:12px;width:100%;padding:8px 2px;background:none;border:0;border-top:1px solid var(--border);cursor:pointer;text-align:left;font:inherit;color:var(--text)}
.lead-burn-row:first-of-type{border-top:0}.lead-burn-row:hover b{color:var(--ss-cyan)}
.lead-burn-name{display:flex;flex-direction:column;min-width:0}.lead-burn-name b{font-size:12.5px;color:var(--white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lead-burn-name small{font-size:11px;color:var(--text-dim)}
.lead-burn-num{font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}.lead-burn-num small{color:var(--text-dim)}
.lead-burn-eac{font-size:12px;font-weight:700;text-align:right;font-variant-numeric:tabular-nums}
@media (max-width:760px){.lead-burn-row{grid-template-columns:1fr auto;}.lead-burn-bar{grid-column:1/-1}.lead-burn-num,.lead-burn-eac{display:none}}
.lead-tl-wrap{overflow-x:auto}
.lead-tl{border-collapse:separate;border-spacing:3px;font-size:11.5px;width:100%}
.lead-tl th{font-weight:600;color:var(--text-dim);font-size:10.5px;padding:2px 4px;white-space:nowrap}
.lead-tl tbody th{text-align:left;padding-right:10px}
.lead-tl tbody th button{all:unset;cursor:pointer;color:var(--white);font-weight:600;font-size:12px}
.lead-tl tbody th button:hover,.lead-tl tbody th button:focus-visible{color:var(--ss-cyan);text-decoration:underline}
.lead-tl td{min-width:30px;height:24px;text-align:center;border-radius:4px;font-variant-numeric:tabular-nums;color:var(--white)}
.lead-tl td.num{background:none;text-align:right;color:var(--text-sec);padding-left:8px;white-space:nowrap}
.lt-0{background:var(--bg-deep)}.lt-1{background:color-mix(in srgb,#0ea5e9 14%,transparent)}.lt-2{background:color-mix(in srgb,#0ea5e9 30%,transparent)}
.lt-3{background:color-mix(in srgb,#059669 38%,transparent)}.lt-4{background:color-mix(in srgb,#f59e0b 45%,transparent)}.lt-5{background:color-mix(in srgb,#dc2626 50%,transparent)}
.lead-tl-key{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:11px;color:var(--text-dim);margin-top:8px}
.lead-tl-key span{display:inline-flex;align-items:center;gap:5px}.lead-tl-key i{width:12px;height:12px;border-radius:3px}

/* ── Messenger (js/messages.js) ───────────────────────────────────────── */
/* The quick-add and trending buttons sat on top of the Send button. */
body:has(#view-messages.active) .qa-fab,body:has(#view-messages.active) .tfab{display:none !important}
/* …and while a dialog is open, where they cover its buttons. */
body.modal-open .qa-fab,body.modal-open .tfab{display:none !important}
.msg-thread{position:relative}
/* Fill the window below the top bar; the message list scrolls inside.
   Grid items default to growing with their content, which let a long
   thread push the message box off the screen. */
html[data-ui="pro"] .msg-wrap{height:calc(var(--vh100) - 150px);max-height:none;min-height:460px}
html[data-ui="pro"] .msg-wrap > *{min-height:0}
@media (max-width:768px){html[data-ui="pro"] .msg-wrap{height:calc(var(--vh100) - 230px);min-height:380px}}
.msg-day{display:flex;align-items:center;gap:10px;margin:14px 0 8px;font-size:11px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em}
.msg-day::before,.msg-day::after{content:"";flex:1;height:1px;background:var(--border)}
.msg-day span{white-space:nowrap}
.msg-row.is-run{margin-bottom:2px}
.msg-bubble-time{font-variant-numeric:tabular-nums}
.msg-bubble-receipt{font-size:10.5px;color:var(--text-dim);text-align:right;margin-top:1px}
.msg-bubble.is-deleted{font-style:italic;color:var(--text-dim);background:transparent;border:1px dashed var(--border)}
.msg-jump{position:absolute;left:50%;bottom:118px;transform:translateX(-50%);z-index:5;border:0;border-radius:999px;padding:7px 14px;background:var(--ss-cyan);color:#fff;font:inherit;font-size:12px;font-weight:700;box-shadow:0 6px 18px rgba(15,23,42,.18);cursor:pointer}
.msg-jump[hidden]{display:none}
.msg-composer-input{overflow-y:auto;line-height:1.4;min-height:40px}
.msg-composer-hint{font-size:10.5px;color:var(--text-dim);padding-left:52px}
@media (hover:none){.msg-composer-hint{display:none}}
/* Pickers: kept inside the window by _msgPlacePopover. */
.msg-react-picker{position:fixed;z-index:9000;display:flex;flex-wrap:wrap;gap:2px;max-width:calc(100vw - 16px);padding:5px;border-radius:999px;background:var(--panel);border:1px solid var(--border);box-shadow:0 10px 30px rgba(15,23,42,.18)}
.msg-react-pick{width:34px;height:34px;border:0;border-radius:50%;background:none;font-size:19px;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:transform .1s,background .1s}
.msg-react-pick:hover,.msg-react-pick:focus-visible{background:var(--bg-deep);transform:scale(1.15);outline:none}
.msg-react-more{font-size:18px;font-weight:600;color:var(--text-dim)}
.msg-emoji-panel{position:fixed;z-index:9000;width:min(332px,calc(100vw - 16px));background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:0 14px 40px rgba(15,23,42,.22);overflow:hidden}
.msg-emoji-tabs{display:flex;gap:2px;padding:6px;border-bottom:1px solid var(--border)}
.msg-emoji-tab{flex:1;height:32px;border:0;border-radius:8px;background:none;font-size:17px;cursor:pointer;opacity:.6}
.msg-emoji-tab.is-on,.msg-emoji-tab:hover{opacity:1;background:var(--bg-deep)}
.msg-emoji-scroll{max-height:min(260px,40vh);overflow-y:auto;padding:4px 8px 8px}
.msg-emoji-h{position:sticky;top:0;background:var(--panel);font-size:10.5px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;padding:6px 2px 4px}
.msg-emoji-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:2px}
.msg-emoji{aspect-ratio:1;border:0;border-radius:8px;background:none;font-size:21px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
.msg-emoji:hover,.msg-emoji:focus-visible{background:var(--bg-deep);outline:none}

.teams-preview{margin:6px 0 0;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--pro-inset,var(--bg-deep));font-size:12.5px;line-height:1.5;color:var(--text);white-space:pre-wrap;max-height:260px;overflow:auto}

/* ── Project requests (bulk review) ─────────────────────────────────── */
.pt-req-help{font-size:12.5px;line-height:1.5;color:var(--text-sec);margin-bottom:10px}
.pt-req-bar{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--pro-inset,var(--bg-deep));margin-bottom:8px}
.pt-req-all{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:500;color:var(--text);cursor:pointer}
.pt-req-set{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-sec)}
.pt-req-set select{width:auto;min-width:200px}
.pt-req-progress{font-size:12.5px;color:var(--text-sec);margin:0 0 8px}
.pt-req-progress.is-warn{color:var(--warn)}
.pt-req-list{overflow-y:auto;min-height:0;flex:1}
.pt-req-row{display:grid;grid-template-columns:auto minmax(0,1fr) minmax(200px,260px) 130px;gap:12px;align-items:start;padding:10px;border:1px solid var(--border);border-radius:8px;margin-bottom:8px;background:var(--panel)}
.pt-req-row.is-selected{border-color:var(--ss-cyan);background:var(--pro-active)}
.pt-req-row.has-error{border-color:var(--danger)}
.pt-req-check{margin-top:9px;width:16px;height:16px;accent-color:var(--ss-cyan)}
.pt-req-name{font-weight:600}
.pt-req-meta{font-size:12px;color:var(--text-dim);margin-top:4px;line-height:1.45}
.pt-req-note{font-size:12px;color:var(--warn);margin-top:4px}
.pt-req-note.is-error{color:var(--danger)}
.pt-req-why{font-size:11.5px;color:var(--text-dim);margin-top:4px}
@media(max-width:760px){.pt-req-row{grid-template-columns:auto minmax(0,1fr)}.pt-req-pf,.pt-req-type{grid-column:2}}
.pt-req-name{width:100%;box-sizing:border-box}
.pt-req-row select,.pt-req-set select{width:100%;box-sizing:border-box;padding-right:30px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
.pt-req-set select{width:auto}

/* ── Project form: portfolio picker + move note ─────────────────────── */
.pt-pf-pick{display:flex;align-items:center;gap:8px;margin-top:4px}
.pt-pf-pick .form-select{flex:1;min-width:0}
.pt-pf-dot{width:10px;height:10px;border-radius:50%;flex:none;box-shadow:0 0 0 3px color-mix(in srgb,currentColor 8%,transparent)}
.pt-move-note{font-size:12px;line-height:1.5;padding:10px 12px;border-radius:8px;border:1px solid color-mix(in srgb,var(--ss-cyan) 45%,transparent);background:color-mix(in srgb,var(--ss-cyan) 9%,transparent);color:var(--text)}
.pt-move-note strong{color:var(--ss-cyan)}
.pt-move-note span{display:block;color:var(--text-dim);font-size:11px;margin-top:2px}

/* ── Project picker (js/projectPicker.js) ───────────────────────────── */
.pp{position:relative;display:flex;align-items:center;min-width:0;flex:1}
.pp input.pp-input.form-input{width:100%;padding:6px 26px 6px 30px;font-size:12.5px;height:auto;
  background:var(--pro-field,var(--bg-deep)) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2366719c' stroke-width='2.4' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E") no-repeat 9px 50%}
.pp.pp-picked input.pp-input.form-input{border-color:color-mix(in srgb,var(--ss-cyan) 60%,transparent);color:var(--white);font-weight:600;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%235DA9E9' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12 5 5L20 7'/%3E%3C/svg%3E")}
.pp-clear{position:absolute;right:4px;top:50%;transform:translateY(-50%);border:0;background:none;color:var(--text-dim);font-size:16px;line-height:1;padding:2px 6px;cursor:pointer;border-radius:4px;display:none}
.pp.pp-picked .pp-clear{display:block}
.pp-clear:hover{color:var(--white);background:var(--border)}
.pp-list{position:fixed;z-index:10050;overflow-y:auto;overscroll-behavior:contain;padding:4px;border-radius:10px;
  background:linear-gradient(var(--panel),var(--panel)),var(--bg);border:1px solid var(--border);box-shadow:0 18px 50px rgba(0,0,0,.45),0 0 0 1px rgba(0,0,0,.2);
  animation:ppIn .12s ease-out}
@keyframes ppIn{from{transform:translateY(-3px)}to{transform:none}}
.pp-sec{position:sticky;top:-4px;z-index:1;margin:0 -4px;padding:7px 12px 4px;font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--text-dim);background:linear-gradient(var(--panel),var(--panel)),var(--bg)}
.pp-opt{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:7px;cursor:pointer;color:var(--text)}
.pp-opt.on{background:color-mix(in srgb,var(--ss-cyan) 16%,transparent);color:var(--white)}
.pp-dot{width:8px;height:8px;border-radius:50%;flex:none}
.pp-txt{display:flex;flex-direction:column;min-width:0;flex:1}
.pp-name{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pp-sub{font-size:10.5px;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pp-opt mark{background:color-mix(in srgb,var(--ss-cyan) 30%,transparent);color:inherit;border-radius:3px;padding:0 1px}
.pp-st{font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);border:1px solid var(--border);border-radius:99px;padding:1px 7px;flex:none}
.pp-empty{padding:14px 12px;font-size:12px;color:var(--text-dim);text-align:center}
.ins-fix-pick{display:flex;flex:1 1 260px;min-width:220px;max-width:380px}
.ins-fix-group-link .ins-fix-acts{flex:1 1 420px;justify-content:flex-end}

/* ── Unmatched entries window ───────────────────────────────────────── */
.pt-um{max-width:920px;width:96%;max-height:calc(var(--vh,1vh) * 88);overflow-y:auto}
.pt-um-n{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:99px;font-size:11px;background:color-mix(in srgb,var(--warn) 18%,transparent);color:var(--warn)}
.pt-um-lede{font-size:12px;color:var(--text-dim);line-height:1.55;margin:0 0 12px}
.pt-um-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px;padding:8px 10px;background:var(--bg-deep);border:1px solid var(--border-light);border-radius:var(--radius)}
.pt-um-bar input.form-input[type=search]{flex:1;min-width:180px;font-size:12px;padding:6px 9px;height:auto}
.pt-um-bar label{font-size:11px;color:var(--text-dim);display:flex;align-items:center;gap:6px}
.pt-um-bar input.form-input[type=number]{width:70px;font-size:12px;padding:6px 8px;height:auto}
.pt-um-count{font-size:11px;color:var(--text-dim);font-family:'JetBrains Mono',monospace;margin-left:auto}
.pt-um-list{display:flex;flex-direction:column;gap:10px}
.pt-um-g{background:var(--bg-deep);border:1px solid var(--border);border-radius:var(--radius);padding:12px;transition:opacity .2s}
.pt-um-g.busy{opacity:.55;pointer-events:none}
.pt-um-head{margin-bottom:8px}
.pt-um-name{font-size:13px;font-weight:700;color:var(--white);font-family:'JetBrains Mono',monospace;word-break:break-word}
.pt-um-meta{font-size:10.5px;color:var(--text-dim);margin-top:2px}
.pt-um-pin{color:var(--c);font-weight:600}
.pt-um-acts{display:flex;gap:8px 14px;flex-wrap:wrap;align-items:center}
.pt-um-link{display:flex;gap:6px;align-items:center;flex:1 1 360px;min-width:0}
.pt-um-new{display:flex;gap:6px;align-items:center;flex:0 1 auto}
.pt-um-new select.form-select{font-size:11.5px;padding:5px 26px 5px 8px;height:auto;max-width:220px}
.pt-um-note{font-size:11.5px;color:var(--text-dim)}
.pt-um-empty{padding:36px 10px;text-align:center;color:var(--text-dim);font-size:12.5px}
@media (max-width:640px){
  .pt-um-link,.pt-um-new{flex:1 1 100%}
  .pt-um-new select.form-select{max-width:none;flex:1}
  .ins-fix-pick{max-width:none}
}

/* ── Outlook calendars (js/outlook.js) ──────────────────────────────── */
.ol-row{border-top:1px solid var(--border-light);border-bottom:1px solid var(--border-light);background:color-mix(in srgb,#0f6cbd 5%,transparent)}
.ol-row .cal-filter-label{min-width:0}
.ol-logo{width:18px;height:18px;flex:none}
.ol-off .ol-pitch{font-size:12px;color:var(--text-sec);flex:1;min-width:200px}
.ol-err{font-size:11.5px;color:var(--danger);flex-basis:100%;order:5;padding-left:26px}
.ol-connect{white-space:nowrap}
.ol-chips{flex:1;min-width:0}
.ol-chip:not(.is-active){opacity:.75}
.ol-group{font-size:10px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;margin:0 2px 0 8px;white-space:nowrap}
.ol-note{font-size:11.5px;color:var(--text-dim)}
.ol-tools{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-left:auto}
.ol-when{font-size:10.5px;color:var(--text-dim);white-space:nowrap}
.ol-warn{border:1px solid color-mix(in srgb,var(--warn) 50%,transparent);background:color-mix(in srgb,var(--warn) 10%,transparent);color:var(--warn);font:inherit;font-size:11px;font-weight:600;padding:4px 10px;border-radius:14px;cursor:pointer}
.ol-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:6px;vertical-align:middle;flex:none}
.ol-pill{display:inline-block;font-size:9.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);border:1px solid var(--border);border-radius:99px;padding:1px 7px;margin-left:6px;vertical-align:middle}
/* detail panel */
.ol-d-row{display:grid;grid-template-columns:78px 1fr;gap:10px;padding:7px 0;border-bottom:1px solid var(--border-light);font-size:12.5px}
.ol-d-l{font-size:10px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.07em;padding-top:2px}
.ol-d-v{color:var(--white);min-width:0;word-break:break-word}
.ol-join{display:inline-block;font-weight:700;color:#fff;background:#4f52b2;padding:5px 12px;border-radius:6px;text-decoration:none}
.ol-join:hover{filter:brightness(1.1)}
.ol-cancel{font-size:12px;font-weight:700;color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,transparent);padding:8px 10px;border-radius:6px;margin-bottom:8px}
.ol-people{display:flex;flex-wrap:wrap;gap:4px}
.ol-person{font-size:11px;padding:2px 8px;border-radius:99px;background:var(--bg-deep);border:1px solid var(--border-light);color:var(--text)}
.ol-r-accepted{border-color:color-mix(in srgb,var(--success) 50%,transparent)}
.ol-r-declined{opacity:.6;text-decoration:line-through}
.ol-r-tentativelyAccepted{border-style:dashed}
.ol-preview{margin-top:14px;font-size:12px;color:var(--text);line-height:1.6;background:var(--bg-deep);padding:10px 12px;border-radius:6px;white-space:pre-wrap;max-height:260px;overflow:auto}
/* editor */
.ol-editor{max-width:560px;width:96%;max-height:calc(var(--vh,1vh) * 90);overflow-y:auto;display:flex;flex-direction:column;gap:10px}
.ol-f{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--text-dim);font-weight:600}
.ol-f .form-input,.ol-f .form-select{font-size:13px}
.ol-hint{font-weight:400;font-size:10.5px;color:var(--text-dim)}
.ol-grid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:8px 10px;align-items:end}
.ol-grid .form-input,.ol-grid .form-select{width:100%;min-width:0}
.ol-grid-2{grid-template-columns:1fr 1fr}
.ol-allday .ol-time{visibility:hidden}
.ol-check{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--text);cursor:pointer}
.ol-check input{accent-color:var(--ss-cyan);width:15px;height:15px}
.ol-teams{align-self:center;padding-top:16px}
.ol-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}
/* manage */
.ol-manage{max-width:560px;width:96%;max-height:calc(var(--vh,1vh) * 88);overflow-y:auto}
.ol-m-lede{font-size:12px;color:var(--text-dim);line-height:1.5;margin:0 0 12px}
.ol-m-group{border:1px solid var(--border);border-radius:8px;padding:10px 12px;margin-bottom:10px}
.ol-m-bad{border-color:color-mix(in srgb,var(--warn) 50%,transparent);background:color-mix(in srgb,var(--warn) 6%,transparent)}
.ol-m-title{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;color:var(--white);margin-bottom:4px}
.ol-m-x{margin-left:auto;font:inherit;font-size:11px;font-weight:600;color:var(--text-dim);background:none;border:1px solid var(--border);border-radius:6px;padding:3px 9px;cursor:pointer}
.ol-m-x:hover{color:var(--white)}
.ol-m-cal{display:flex;align-items:center;gap:4px;padding:5px 2px;font-size:12.5px;color:var(--text);cursor:pointer}
.ol-m-cal input{accent-color:var(--ss-cyan);margin-right:6px}
.ol-m-name{font-weight:600}
.ol-m-sub{font-size:11px;color:var(--text-dim);margin:0 0 0 6px}
.ol-m-add{border-top:1px solid var(--border);padding-top:12px;margin-top:4px}
.ol-m-add .ol-m-sub{margin:0 0 8px}
.ol-m-row{display:flex;gap:8px}
.ol-m-row .form-input{flex:1;font-size:13px}
.ol-m-empty{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px;border:1px dashed var(--border);border-radius:8px;font-size:12.5px;color:var(--text-dim)}
.ol-m-foot{margin-top:14px;display:flex;justify-content:flex-end}
/* day list panel */
.cal-day-list{flex:1;overflow-y:auto;padding:10px 12px;display:flex;flex-direction:column;gap:6px}
.cal-day-item{display:flex;align-items:stretch;gap:10px;width:100%;text-align:left;font:inherit;background:var(--bg-deep);border:1px solid var(--border-light);border-radius:8px;padding:9px 10px;cursor:pointer;color:var(--text)}
.cal-day-item:hover{border-color:var(--c);background:color-mix(in srgb,var(--c) 8%,var(--bg-deep))}
.cal-day-bar{width:4px;border-radius:2px;background:var(--c);flex:none}
.cal-day-txt{display:flex;flex-direction:column;min-width:0}
.cal-day-t{font-size:12.5px;font-weight:600;color:var(--white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cal-day-s{font-size:10.5px;color:var(--text-dim)}
@media (max-width:640px){
  .ol-tools{margin-left:0;width:100%}
  .ol-off .ol-pitch{min-width:0;flex-basis:100%}
}

/* ── Project Tracker windows (project / portfolio analytics) ────────── */
/* The window scrolls as one piece with the tabs pinned at the top.
   The old fixed-height column let the header and tabs shrink, so a
   tall status area clipped the title line and covered the tabs. */
.modal-content.pt-modal-shell{display:block;overflow-y:auto;overscroll-behavior:contain;scroll-padding-top:52px}
.pt-modal-shell .pt-modal-hero,.pt-modal-shell .pt-vitals,.pt-modal-shell .pt-tabs{flex-shrink:0}
.pt-modal-shell .pt-modal-body{overflow:visible;min-height:40vh}
.pt-modal-shell .pt-tabs{position:sticky;top:0;z-index:6;box-shadow:0 6px 12px -10px rgba(0,0,0,.35)}
.pt-modal-shell .pt-modal-hero{padding-bottom:16px}
.pt-modal-shell .pt-modal-title{gap:10px}
.pt-modal-shell .pt-modal-actions .btn-primary{box-shadow:0 2px 8px -2px color-mix(in srgb,var(--ss-cyan) 60%,transparent)}

/* Status band */
.ptv{display:grid;grid-template-columns:minmax(260px,1fr) minmax(0,1.6fr);gap:12px;margin-bottom:12px}
.ptv-k{font-family:'JetBrains Mono',monospace;font-size:9.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--text-dim);display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.ptv-when{font-family:inherit;letter-spacing:.04em;text-transform:none;font-weight:600;color:var(--text-sec)}
.ptv-health{position:relative;border-radius:12px;padding:14px 16px 12px;background:color-mix(in srgb,var(--hc) 9%,var(--bg-deep));border:1px solid color-mix(in srgb,var(--hc) 35%,var(--border));overflow:hidden}
.ptv-health::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--hc)}
.ptv-v{display:flex;align-items:center;gap:9px;font-family:'Space Grotesk',sans-serif;font-size:22px;font-weight:700;color:var(--hc);margin:4px 0 6px}
.ptv-dot{width:10px;height:10px;border-radius:50%;background:var(--hc);box-shadow:0 0 0 4px color-mix(in srgb,var(--hc) 22%,transparent)}
.ptv-why{margin:0;padding:0 0 0 16px;font-size:11.5px;line-height:1.5;color:var(--text-sec)}
.ptv-why li{margin:1px 0}
.ptv-why a{color:var(--white);font-weight:600;text-decoration:none}
.ptv-why a:hover{text-decoration:underline}
div.ptv-why{padding:0}
.ptv-ok{color:var(--text-dim)}
.ptv-counts{display:flex;flex-wrap:wrap;gap:6px 14px;margin:6px 0 8px}
.ptv-counts span{display:flex;align-items:baseline;gap:5px;font-size:11.5px;color:var(--text-sec)}
.ptv-counts b{font-family:'Space Grotesk',sans-serif;font-size:20px;color:var(--c)}
.ptv-rag{border-radius:12px;padding:14px 16px 12px;background:var(--bg-deep);border:1px solid var(--border)}
.ptv-rag-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:8px}
.ptv-r{border-radius:9px;padding:9px 11px;background:color-mix(in srgb,var(--rc) 11%,var(--panel));border:1px solid color-mix(in srgb,var(--rc) 30%,var(--border-light));border-top:3px solid var(--rc)}
.ptv-r span{display:block;font-family:'JetBrains Mono',monospace;font-size:9px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--text-dim)}
.ptv-r b{display:block;font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:700;color:var(--rc);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ptv-foot{margin-top:9px;font-size:11.5px;color:var(--text-dim)}
.ptv-foot a{color:var(--ss-cyan);font-weight:600;text-decoration:none}
.ptv-stale{color:var(--warn)}
.ptv-note{margin-top:9px;font-size:11.5px;line-height:1.5;color:var(--text);padding:7px 10px;border-radius:7px;background:color-mix(in srgb,var(--warn) 10%,transparent);border-left:3px solid var(--warn)}
/* Narratives */
.pt-narr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px}
.pt-narr-grid .pt-narr{margin:0;border-left:3px solid var(--border)}
.pt-narr.pt-narr-good{border-left-color:#059669}
.pt-narr.pt-narr-plan{border-left-color:var(--ss-cyan)}
.pt-narr.pt-narr-warn{border-left-color:#d97706}
.pt-empty a{color:var(--ss-cyan);font-weight:600;text-decoration:none}
@media (max-width:860px){
  .ptv{grid-template-columns:1fr}
  .ptv-rag-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* ── Export dialog ──────────────────────────────────────────────────── */
.modal-content.pt-x{max-width:600px;width:96%;padding:0;overflow:hidden;max-height:calc(var(--vh,1vh) * 92);display:flex;flex-direction:column}
.pt-x-head{display:flex;align-items:flex-start;gap:12px;padding:20px 22px 16px;background:linear-gradient(135deg,color-mix(in srgb,var(--ss-cyan) 14%,var(--panel)),var(--panel) 70%);border-bottom:1px solid var(--border)}
.pt-x-head>div{flex:1;min-width:0}
.pt-x-kicker{font-family:'JetBrains Mono',monospace;font-size:9.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--ss-cyan)}
.pt-x-title{font-family:'Space Grotesk',sans-serif;font-size:19px;font-weight:700;color:var(--white);margin-top:3px;line-height:1.2}
.pt-x-sub{font-size:12px;color:var(--text-dim);margin-top:2px}
.pt-x-close{border:1px solid var(--border);background:var(--panel);color:var(--text-dim);width:32px;height:32px;border-radius:8px;font-size:18px;line-height:1;cursor:pointer;flex:none}
.pt-x-close:hover{color:var(--white)}
.pt-x-body{padding:6px 22px 20px;overflow-y:auto}
.pt-x-step{padding:14px 0 4px;border-bottom:1px solid var(--border-light)}
.pt-x-step:last-child{border-bottom:0}
.pt-x-label{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:700;color:var(--white);margin-bottom:9px}
.pt-x-label span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;font-size:11px;background:var(--ss-cyan);color:var(--on-accent,#fff)}
.pt-x-chips{display:flex;flex-wrap:wrap;gap:6px}
.pt-x-chip{font:inherit;font-size:11.5px;font-weight:600;padding:6px 12px;border-radius:99px;border:1px solid var(--border);background:var(--bg-deep);color:var(--text-sec);cursor:pointer}
.pt-x-chip:hover{color:var(--white);border-color:var(--ss-cyan)}
.pt-x-chip.on{background:var(--ss-cyan);border-color:var(--ss-cyan);color:var(--on-accent,#fff)}
.pt-x-dates{display:flex;align-items:flex-end;gap:10px;margin-top:10px}
.pt-x-dates label{flex:1;display:flex;flex-direction:column;gap:4px;font-size:11px;font-weight:600;color:var(--text-dim)}
.pt-x-dates span{padding-bottom:10px;color:var(--text-dim)}
.pt-x-hint{font-size:11px;color:var(--text-dim);line-height:1.5;margin:8px 0 6px}
.pt-x-aud{display:grid;gap:8px}
.pt-x-card{position:relative;display:grid;grid-template-columns:auto 1fr;column-gap:10px;align-items:start;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--bg-deep);cursor:pointer;transition:border-color .12s,background .12s}
.pt-x-card input{margin:2px 0 0;accent-color:var(--ss-cyan);grid-row:span 2}
.pt-x-card-t{font-size:12.5px;font-weight:700;color:var(--white)}
.pt-x-card-d{font-size:11.5px;color:var(--text-dim);line-height:1.45}
.pt-x-card.on{border-color:var(--ss-cyan);background:color-mix(in srgb,var(--ss-cyan) 8%,var(--bg-deep))}
.pt-x-card.off{opacity:.45;cursor:not-allowed}
.pt-x-fmts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.pt-x-fmt{display:flex;align-items:center;gap:10px;text-align:left;font:inherit;padding:11px 12px;border-radius:10px;border:1px solid var(--border);background:var(--bg-deep);color:var(--text);cursor:pointer;transition:transform .12s,border-color .12s,box-shadow .12s}
.pt-x-fmt:hover{border-color:var(--ss-cyan);transform:translateY(-1px);box-shadow:0 6px 16px -10px rgba(0,0,0,.5)}
.pt-x-fmt b{display:block;font-size:13px;color:var(--white)}
.pt-x-fmt small{display:block;font-size:10.5px;color:var(--text-dim);line-height:1.35;margin-top:1px}
.pt-x-ico{flex:none;display:inline-flex;align-items:center;justify-content:center;width:34px;height:40px;border-radius:5px;font:800 10px/1 'Segoe UI',system-ui,sans-serif;color:#fff;letter-spacing:.04em;box-shadow:inset 0 -3px 0 rgba(0,0,0,.18)}
.pt-x-ico.pdf{background:#dc2626}
.pt-x-ico.doc{background:#2b579a;font-size:15px}
.pt-x-ico.xls{background:#217346;font-size:15px}
@media (max-width:560px){.pt-x-fmts{grid-template-columns:1fr}}

/* ── Project Tracker popups: forms and tool windows ─────────────────── */
.modal-content.pt-form-shell{max-width:600px;width:94%;padding:0;max-height:calc(var(--vh,1vh) * 90);display:flex;flex-direction:column;overflow:hidden;border-radius:14px}
.pt-form-head{display:flex;align-items:center;gap:12px;padding:16px 20px 14px;border-bottom:1px solid var(--border);background:linear-gradient(135deg,color-mix(in srgb,var(--ss-cyan) 10%,var(--panel)),var(--panel) 65%)}
.pt-form-title{flex:1;min-width:0;font-family:'Space Grotesk',sans-serif;font-size:17px;font-weight:700;color:var(--white)}
.pt-form-body{flex:1;min-height:0;overflow-y:auto;padding:16px 20px 0;overscroll-behavior:contain}
.pt-form-body label{font-weight:600}
.pt-form-body .form-input,.pt-form-body .form-select{font-size:13px}
/* The row holding Save sticks to the bottom of the window. */
.pt-form-body div:has(> button[type="submit"]){position:sticky;bottom:0;z-index:2;margin:6px -20px 0 !important;padding:12px 20px 14px !important;background:color-mix(in srgb,var(--panel) 94%,transparent);backdrop-filter:blur(6px);border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}
.pt-form-body div:has(> button[type="submit"]) .btn-red{margin-right:auto}
.pt-form-body > div:last-child{padding-bottom:0}
.pt-x-close{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);background:var(--panel);color:var(--text-dim);width:32px;height:32px;border-radius:8px;font-size:18px;line-height:1;cursor:pointer;flex:none;padding:0}
.pt-x-close:hover{color:var(--white);border-color:var(--text-dim)}
/* Older tool windows (rates, PTO, requests, hours audit, data checks) */
#ptModal > .modal-content{border-radius:14px}
#ptModal > .modal-content > .card-header{font-family:'Space Grotesk',sans-serif;font-size:16px;font-weight:700;color:var(--white);gap:8px}
/* RAG choice: Green / Amber / Red buttons in place of a dropdown */
select.pt-rag-src{position:absolute;opacity:0;pointer-events:none;width:1px;height:1px}
.pt-rag-seg{display:flex;gap:6px;margin-top:4px}
.pt-rag-seg button{flex:1;font:inherit;font-size:12px;font-weight:700;padding:8px 6px;border-radius:8px;border:1px solid var(--border);background:var(--bg-deep);color:var(--text-dim);cursor:pointer;transition:all .12s}
.pt-rag-seg button::before{content:'';display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:1px;background:var(--rc)}
.pt-rag-seg .pt-rag-green{--rc:#059669}.pt-rag-seg .pt-rag-amber{--rc:#d97706}.pt-rag-seg .pt-rag-red{--rc:#dc2626}
.pt-rag-seg button:hover{border-color:var(--rc);color:var(--white)}
.pt-rag-seg button.on{background:color-mix(in srgb,var(--rc) 16%,var(--bg-deep));border-color:var(--rc);color:var(--rc);box-shadow:inset 0 0 0 1px var(--rc)}
/* Weekly report history cards */
.pt-wr-card{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px 14px}
.pt-wr-top{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:8px}
.pt-wr-title{font-family:'Space Grotesk',sans-serif;font-size:14px;font-weight:700;color:var(--white)}
.pt-wr-by{font-size:11px;color:var(--text-dim);margin-top:2px}
.pt-wr-acts{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.pt-wr-acts .btn{font-size:11px;padding:3px 9px}
.pt-wr-rags{display:inline-flex;gap:4px;margin-right:6px;flex-wrap:wrap}
.pt-wr-rag{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:600;color:var(--text-sec);padding:3px 8px;border-radius:99px;background:color-mix(in srgb,var(--rc) 12%,var(--bg-deep));border:1px solid color-mix(in srgb,var(--rc) 40%,transparent)}
.pt-wr-rag i{width:7px;height:7px;border-radius:50%;background:var(--rc)}
.pt-wr-prev{font-size:12px;color:var(--text-sec);line-height:1.5;margin-top:8px}
.pt-wr-more{margin-top:6px;font-size:11px;padding:2px 8px}
.pt-wr-legacy{display:inline-block;font-size:9.5px;font-weight:700;color:var(--warn);border:1px solid color-mix(in srgb,var(--warn) 45%,transparent);border-radius:4px;padding:1px 6px;margin-left:8px;vertical-align:2px;text-transform:uppercase;letter-spacing:.06em}

/* New Entry: Task Description character count */
.j-count{margin-top:4px;font-size:11px;color:var(--text-dim);text-align:right;font-variant-numeric:tabular-nums}
.j-count.warn{color:var(--warn)}
.j-count.over{color:var(--danger);font-weight:700}
#jNotes{min-height:120px;resize:vertical}

/* ── Team & Resources ───────────────────────────────────────────────── */
.rsc-head{margin-bottom:12px}
.rsc-updated{font-size:11px;color:var(--text-dim);font-variant-numeric:tabular-nums;align-self:flex-end}
.rsc-tabbar{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:14px;overflow-x:auto;scrollbar-width:none}
.rsc-tabbar::-webkit-scrollbar{display:none}
.rsc-tab{position:relative;font:inherit;font-size:13px;font-weight:600;padding:10px 14px 11px;border:0;background:none;color:var(--text-dim);cursor:pointer;white-space:nowrap;border-radius:8px 8px 0 0}
.rsc-tab:hover{color:var(--white);background:color-mix(in srgb,var(--ss-cyan) 6%,transparent)}
.rsc-tab.active{color:var(--white)}
.rsc-tab.active::after{content:'';position:absolute;left:10px;right:10px;bottom:-1px;height:2px;border-radius:2px 2px 0 0;background:var(--ss-cyan)}
.rsc-toolbar{margin-bottom:14px;padding:6px 8px;border:1px solid var(--border);border-radius:12px;background:var(--panel)}
.rsc-toolbar:empty{display:none}
.rsc-loading{padding:48px;text-align:center;color:var(--text-dim);font-size:12.5px}
/* Directory */
.tm-sec-h{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.tm-sec-h h3{margin:0;font-size:15px;font-weight:700;color:var(--white)}
.tm-sec-h .btn{margin-left:auto}
.tm-oncall{margin-bottom:22px}
.tm-oc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:10px}
.tm-oc-card{border:1px solid var(--border);border-radius:12px;background:var(--panel);padding:12px 14px;border-top:3px solid var(--ss-cyan)}
.tm-oc-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.tm-oc-client{font-weight:700;color:var(--white);font-size:13.5px;flex:1;min-width:0}
.tm-oc-acts{display:flex;gap:2px}
.tm-oc-acts .btn{font-size:11px;padding:2px 8px}
.tm-oc-del{color:var(--danger) !important}
.tm-oc-row{display:flex;align-items:center;gap:10px;padding:5px 0}
.tm-oc-backup{border-top:1px dashed var(--border-light)}
.tm-oc-lbl{width:58px;flex:none;font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim)}
.tm-oc-backup .tm-oc-lbl{opacity:.75}
.tm-oc-who{display:flex;align-items:center;gap:9px;min-width:0}
.tm-oc-name{font-size:12.5px;font-weight:600;color:var(--white)}
.tm-oc-tel{font-size:12px;color:var(--ss-cyan);text-decoration:none;font-variant-numeric:tabular-nums}
.tm-oc-tel:hover{text-decoration:underline}
.tm-oc-none{font-size:12px;color:var(--text-dim)}
.tm-oc-empty{padding:18px;border:1px dashed var(--border);border-radius:12px;color:var(--text-dim);font-size:12.5px;text-align:center}
.tm-dir{margin-bottom:22px}
.tm-dir-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.tm-search{position:relative;flex:1 1 280px;max-width:420px}
.tm-search svg{position:absolute;left:11px;top:50%;width:15px;height:15px;transform:translateY(-50%);fill:none;stroke:var(--text-dim);stroke-width:2.2;stroke-linecap:round}
.tm-search input{width:100%;padding:9px 12px 9px 34px;border:1px solid var(--border);border-radius:10px;background:var(--pro-field,var(--bg-deep));color:var(--text);font:inherit;font-size:13px;outline:none}
.tm-search input:focus{border-color:var(--ss-cyan);box-shadow:0 0 0 3px var(--ss-cyan-glow)}
.tm-filters{display:flex;gap:6px;flex-wrap:wrap}
.tm-filter{font:inherit;font-size:12px;font-weight:600;padding:6px 12px;border-radius:99px;border:1px solid var(--border);background:var(--panel);color:var(--text-sec);cursor:pointer}
.tm-filter:hover{color:var(--white);border-color:var(--ss-cyan)}
.tm-filter.on{background:var(--ss-cyan);border-color:var(--ss-cyan);color:var(--on-accent,#fff)}
.tm-count{margin-left:auto;font-size:12px;color:var(--text-dim)}
.tm-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.tm-card{display:flex;flex-direction:column;gap:10px;padding:14px 15px;border:1px solid var(--border);border-radius:14px;background:var(--panel);cursor:pointer;transition:border-color .15s,box-shadow .15s,transform .15s}
.tm-card:hover{border-color:color-mix(in srgb,var(--ss-cyan) 50%,var(--border));box-shadow:0 8px 22px -14px rgba(0,0,0,.45);transform:translateY(-1px)}
.tm-card:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:2px}
.tm-top{display:flex;align-items:center;gap:12px}
.tm-av{position:relative;flex:none}
.tm-dot{position:absolute;right:-1px;bottom:-1px;width:13px;height:13px;border-radius:50%;border:2.5px solid var(--panel)}
.tm-id{min-width:0}
.tm-name{font-size:14.5px;font-weight:700;color:var(--white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tm-title{font-size:12px;color:var(--text-dim);margin-top:1px}
.tm-tags{display:flex;gap:5px;flex-wrap:wrap}
.tm-tags:empty{display:none}
.tm-sec,.tm-st{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:99px;color:var(--c);background:color-mix(in srgb,var(--c) 12%,transparent);border:1px solid color-mix(in srgb,var(--c) 30%,transparent)}
.tm-st{font-weight:600}
.tm-load-h{display:flex;justify-content:space-between;font-size:11px;color:var(--text-dim);margin-bottom:4px}
.tm-load-h b{font-weight:700}
.tm-bar{height:5px;border-radius:3px;background:var(--border-light);overflow:hidden}
.tm-bar i{display:block;height:100%;border-radius:3px}
.tm-contact{display:flex;flex-direction:column;gap:3px;padding-top:8px;border-top:1px solid var(--border-light)}
.tm-contact a{display:flex;gap:8px;align-items:baseline;font-size:12px;color:var(--text-sec);text-decoration:none;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums}
.tm-contact a:hover{color:var(--ss-cyan)}
.tm-contact span{flex:none;width:62px;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim)}
.tm-proj{display:flex;flex-wrap:wrap;gap:4px}
.tm-proj span{font-size:10.5px;padding:2px 7px;border-radius:6px;background:var(--bg-deep);border:1px solid var(--border-light);color:var(--text-sec);white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.tm-proj .more{color:var(--text-dim)}
/* Org chart cards: theme surfaces instead of pastel fills; the section
   colour runs along the top. */
html[data-ui="pro"] .rsc-org-tree-card{background:var(--panel);color:var(--text);border:1px solid var(--border);border-top:3px solid var(--section-color,var(--ss-cyan));box-shadow:0 4px 14px -8px rgba(0,0,0,.35);width:208px}
html[data-ui="pro"] .rsc-org-tree-card:hover{box-shadow:0 10px 24px -12px rgba(0,0,0,.5),0 0 0 2px color-mix(in srgb,var(--ss-cyan) 45%,transparent)}
html[data-ui="pro"] .rsc-org-tree-name{color:var(--white);font-size:13.5px}
html[data-ui="pro"] .rsc-org-tree-title{color:var(--text-dim);font-size:11px;font-weight:500}
html[data-ui="pro"] .rsc-org-tree-phone{color:var(--text-dim);font-size:10.5px}
html[data-ui="pro"] .rsc-org-tree-size{color:var(--text-sec);background:var(--bg-deep);border-color:var(--border)}
html[data-ui="pro"] .rsc-org-tree-size-sub{color:var(--text-dim)}
html[data-ui="pro"] .rsc-org-tree-section{font-size:9px}
html[data-ui="pro"] .rsc-org-tree-remove{color:var(--text-dim)}
html[data-ui="pro"] .rsc-org-me .rsc-org-tree-card{box-shadow:0 0 0 2px var(--ss-cyan),0 6px 18px -10px rgba(0,0,0,.4)}

/* ── My Files ───────────────────────────────────────────────────────── */
.mf-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.mf-n{display:inline-block;min-width:18px;margin-left:4px;padding:0 6px;border-radius:99px;font-size:10.5px;background:color-mix(in srgb,currentColor 14%,transparent)}
.mf-month{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim);margin:16px 2px 6px}
.mf-group{border:1px solid var(--border);border-radius:12px;background:var(--panel);overflow:hidden}
.mf-row{display:flex;align-items:center;gap:12px;padding:10px 14px;border-top:1px solid var(--border-light);cursor:pointer;transition:background .12s}
.mf-row:first-child{border-top:0}
.mf-row:hover{background:color-mix(in srgb,var(--ss-cyan) 5%,transparent)}
.mf-row:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:-2px}
.mf-ico{flex:none;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:9px;font-weight:800;font-size:13px}
.mf-ico.job{background:color-mix(in srgb,var(--ss-cyan) 14%,transparent);color:var(--ss-cyan)}
.mf-ico.timesheet{background:color-mix(in srgb,#7c3aed 14%,transparent);color:#7c3aed}
.mf-main{flex:1;min-width:0}
.mf-title{font-size:13.5px;font-weight:600;color:var(--white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mf-meta{font-size:11.5px;color:var(--text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.mf-note{color:var(--text-sec)}
.mf-hours{flex:none;width:52px;text-align:right;font-size:12.5px;font-weight:600;color:var(--text-sec);font-variant-numeric:tabular-nums}
.mf-st{flex:none;font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:99px;min-width:72px;text-align:center}
.mf-st.open{color:#d97706;background:color-mix(in srgb,#d97706 12%,transparent)}
.mf-st.done{color:#16a34a;background:color-mix(in srgb,#16a34a 12%,transparent)}
.mf-st.saved{color:#7c3aed;background:color-mix(in srgb,#7c3aed 12%,transparent)}
.mf-acts{flex:none;display:flex;gap:2px;opacity:.55;transition:opacity .12s}
.mf-row:hover .mf-acts,.mf-row:focus-within .mf-acts{opacity:1}
.mf-acts .btn{font-size:11.5px;padding:3px 9px}
.mf-del{color:var(--danger) !important}
.mf-empty{padding:36px 16px;text-align:center;color:var(--text-dim);font-size:12.5px;border:1px dashed var(--border);border-radius:12px;margin-top:8px}
@media (max-width:640px){.mf-hours,.mf-acts{display:none}.mf-st{min-width:0}}

/* ── Account ────────────────────────────────────────────────────────── */
.ac-hero{display:flex;align-items:center;gap:16px;padding:20px 22px;margin-bottom:16px;border:1px solid var(--border);border-radius:16px;background:linear-gradient(120deg,color-mix(in srgb,var(--ss-cyan) 12%,var(--panel)),var(--panel) 60%)}
.ac-hero-av{flex:none}
.ac-hero-id{flex:1;min-width:0}
.ac-hero-name{font-size:21px;font-weight:700;color:var(--white);line-height:1.2}
.ac-hero-mail{font-size:13px;color:var(--text-dim);margin-top:2px}
.ac-hero-role{display:inline-block;margin-top:6px;font-size:11px;font-weight:700;letter-spacing:.04em;padding:2px 10px;border-radius:99px;color:var(--ss-cyan);background:color-mix(in srgb,var(--ss-cyan) 12%,transparent);border:1px solid color-mix(in srgb,var(--ss-cyan) 35%,transparent)}
.ac-hero-role:empty{display:none}
.ac-hero-acts{display:flex;gap:8px;flex-wrap:wrap}
.ac-layout{display:grid;grid-template-columns:190px minmax(0,1fr);gap:18px;align-items:start}
.ac-nav{position:sticky;top:12px;display:flex;flex-direction:column;gap:2px;padding:8px;border:1px solid var(--border);border-radius:12px;background:var(--panel)}
.ac-nav a{padding:8px 10px;border-radius:8px;font-size:13px;font-weight:600;color:var(--text-sec);text-decoration:none}
.ac-nav a:hover{background:color-mix(in srgb,var(--ss-cyan) 7%,transparent);color:var(--white)}
.ac-nav a.on{background:color-mix(in srgb,var(--ss-cyan) 12%,transparent);color:var(--ss-cyan)}
.ac-main{min-width:0;display:flex;flex-direction:column;gap:16px}
.ac-main > section.card,.ac-sec-wrap > .card,.ac-sec-wrap > div > .card{margin:0;scroll-margin-top:12px}
.ac-sec-wrap{display:flex;flex-direction:column;gap:16px;scroll-margin-top:12px}
.ac-sec-wrap:empty,.ac-sec-wrap > div:empty{display:none}
.ac-sec{scroll-margin-top:12px}
.ac-sec-h{margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--border-light)}
.ac-sec-h h3{margin:0;font-size:16px;font-weight:700;color:var(--white)}
.ac-sec-h p{margin:3px 0 0;font-size:12.5px;color:var(--text-dim)}
.ac-sec-foot{display:flex;justify-content:flex-end;margin-top:12px;padding-top:12px;border-top:1px solid var(--border-light)}
.ac-hint{font-size:11.5px;color:var(--text-dim);margin-top:4px}
.ac-range-l{display:flex;justify-content:space-between;font-size:10.5px;color:var(--text-dim);margin-top:2px}
.ac-sub{margin:16px 0 6px;font-size:13px;font-weight:700;color:var(--white)}
.ac-sub:first-of-type{margin-top:0}
.ac-danger{display:flex;align-items:center;gap:14px;margin-top:18px;padding:12px 14px;border:1px solid color-mix(in srgb,var(--danger) 35%,transparent);border-radius:10px;background:color-mix(in srgb,var(--danger) 6%,transparent)}
.ac-danger div{flex:1;display:flex;flex-direction:column;gap:2px;font-size:12.5px;color:var(--text)}
.ac-danger span{font-size:11.5px;color:var(--text-dim)}
@media (max-width:860px){
  .ac-layout{grid-template-columns:1fr}
  .ac-nav{position:static;flex-direction:row;overflow-x:auto;scrollbar-width:none}
  .ac-nav a{white-space:nowrap}
  .ac-hero{flex-wrap:wrap}
}

/* ── Admin ──────────────────────────────────────────────────────────── */
#view-admin .adm-off{display:none !important}
.adm-badge{display:inline-block;margin-left:6px;min-width:18px;padding:0 6px;border-radius:99px;font-size:10.5px;font-weight:700;line-height:17px;text-align:center;background:var(--danger);color:#fff}
.adm-badge:empty{display:none}
.adm-empty{padding:36px 16px;text-align:center;color:var(--text-dim);font-size:12.5px;border:1px dashed var(--border);border-radius:12px}
#view-admin > .card{margin-bottom:16px}
.admin-user-row{display:flex;align-items:center;gap:12px;padding:10px 14px}
.admin-user-row .au-av{flex:none}
.admin-user-row .user-name{font-weight:600;color:var(--white)}
.admin-user-row .au-act{color:var(--text-dim) !important;font-size:11.5px !important;padding:4px 9px !important;margin-left:2px !important}
.admin-user-row .au-act:hover{color:var(--warn) !important;background:color-mix(in srgb,var(--warn) 10%,transparent)}
.admin-user-row .au-del:hover{color:var(--danger) !important;background:color-mix(in srgb,var(--danger) 10%,transparent)}
.admin-user-row .user-name{display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-width:200px}
.admin-user-row .user-name span{white-space:nowrap}

/* ── Dashboard: Team & work ─────────────────────────────────────────── */
.dw{margin:6px 0 16px}
.dw-h{display:flex;align-items:baseline;gap:10px;margin:0 2px 10px}
.dw-h h3{margin:0;font-size:16px;font-weight:700;color:var(--white)}
.dw-h span{font-size:12px;color:var(--text-dim)}
.dw-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:14px;margin-bottom:14px}
.dw-col{display:flex;flex-direction:column;gap:14px}
.dw-card{margin:0 !important}
.dw-ch{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);margin-bottom:10px}
.dw-row{display:flex;align-items:center;gap:10px;padding:4px 0}
.dw-name{flex:0 0 140px;font-size:12.5px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dw-name.wide{flex-basis:220px;font-weight:500}
.dw-row b{flex:none;min-width:34px;text-align:right;font-size:12.5px;color:var(--white);font-variant-numeric:tabular-nums}
.dw-track{flex:1;height:8px;border-radius:4px;background:var(--border-light);overflow:hidden}
.dw-track i{display:block;height:100%;border-radius:4px;background:var(--ss-cyan)}
.dw-track i.alt{background:#7c3aed}
.dw-none{font-size:12px;color:var(--text-dim);padding:8px 0}
.dw-weeks{display:flex;align-items:flex-end;gap:12px;height:118px}
.dw-wk{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:5px;height:100%}
.dw-wk b{font-size:12px;color:var(--white);font-variant-numeric:tabular-nums}
.dw-wk i{display:block;width:100%;max-width:56px;border-radius:6px 6px 2px 2px;background:linear-gradient(180deg,var(--ss-cyan),color-mix(in srgb,var(--ss-cyan) 55%,transparent))}
.dw-wk span{font-size:10.5px;color:var(--text-dim)}
tr.dw-recent{cursor:pointer}
tr.dw-recent:hover td{background:color-mix(in srgb,var(--ss-cyan) 5%,transparent)}
.dw-date{white-space:nowrap;color:var(--text-sec);font-variant-numeric:tabular-nums}
.dw-site{font-weight:600;color:var(--white)}
.dw-state{font-size:11px;font-weight:700;padding:2px 9px;border-radius:99px}
.dw-state.open{color:#d97706;background:color-mix(in srgb,#d97706 12%,transparent)}
.dw-state.done{color:#16a34a;background:color-mix(in srgb,#16a34a 12%,transparent)}
.dash-row-2col{align-items:stretch}
.dash-row-2col > .card{margin:0 !important;height:100%}
@media (max-width:860px){.dw-grid{grid-template-columns:1fr}.dw-name.wide{flex-basis:140px}}

/* ── New Entry ──────────────────────────────────────────────────────── */
.je-head{margin-bottom:12px}
.je-card{padding-top:18px}
.form-group.je-sec{display:flex;flex-direction:row;align-items:baseline;gap:10px;margin:14px 0 -4px;padding-bottom:8px;border-bottom:1px solid var(--border-light)}
.je-sec:first-of-type{margin-top:4px}
.je-sec span{font-size:13px;font-weight:700;letter-spacing:.02em;color:var(--white)}
.je-sec em{font-style:normal;font-size:11.5px;color:var(--text-dim)}
.je-actions{position:sticky;bottom:0;z-index:5;display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin:16px -20px -20px;padding:14px 20px;border-top:1px solid var(--border);background:var(--panel);box-shadow:0 -10px 24px -18px rgba(0,0,0,.45);border-radius:0 0 var(--radius-lg) var(--radius-lg)}
@media (max-width:640px){.je-actions{margin:16px -14px -14px;padding:12px 14px}}
/* On phones .main-scroll keeps 156px of bottom padding (room for the tab
   bar and the + button), and a sticky bar stops at the padding — so the
   Save bar floated 100px above the tab bar with the form showing beneath
   it. Pull it down to sit on the tab bar. */
@media (max-width:600px){.je-actions{bottom:-100px}}
/* The site search box stacks at 50 so its list covers the form; that also
   put it on top of the Save bar when scrolled under it. Above it, unless
   someone is typing in it and the list is open. */
#view-newjob .je-actions{z-index:60}
#view-newjob .site-search-wrap:focus-within{z-index:70}

/* ── Job Tracker ────────────────────────────────────────────────────── */
/* .stat-grid is a wrapping flex row (styles.css, !important); keep the
   seven tiles on one row where there's room. */
#jtSummary.jt-summary{gap:10px;margin-bottom:12px}
@media (min-width:1000px){
  #jtSummary.jt-summary{flex-wrap:nowrap !important}
  #jtSummary.jt-summary > *{flex:1 1 0 !important;min-width:0}
}
.jt-filters{padding:12px 14px !important;display:flex;flex-direction:column;gap:10px}
.jt-f-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.jt-search{flex:1 1 320px;max-width:none}
#view-jobtracker .jt-search input.form-input{padding:9px 12px 9px 34px;border:1px solid var(--border);border-radius:10px;width:100%;font-size:13px}
.jt-f-top .seg-group{margin-left:auto}
.jt-f-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#view-jobtracker .jt-f-row .form-select,#view-jobtracker .jt-f-row .form-input{width:auto;padding:6px 28px 6px 10px;font-size:12px;height:auto;border-radius:8px}
#view-jobtracker .jt-f-row .form-input[type=date]{padding:6px 10px}
.jt-f-lbl{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);margin-right:2px}
.jt-f-dash{color:var(--text-dim)}
#jtAssignedToggle{font-size:12px;padding:6px 12px}
#jtResultCount{margin-left:auto;font-size:12px;color:var(--text-dim);font-variant-numeric:tabular-nums}
@media (max-width:640px){
  .jt-f-top .seg-group{margin-left:0;width:100%;display:flex;overflow-x:auto;scrollbar-width:none}
  .jt-f-top .seg-group .btn{flex:1 1 0;min-width:0;padding-left:4px;padding-right:4px;white-space:nowrap}
}

/* ── All Files ──────────────────────────────────────────────────────── */
.af-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-bottom:12px}
.af-stat{padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--panel)}
.af-stat b{display:block;font-size:22px;font-weight:700;color:var(--white);font-variant-numeric:tabular-nums}
.af-stat span{font-size:11.5px;color:var(--text-dim)}
.af-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:12px 14px !important}
.af-search{flex:1 1 300px;max-width:none}
#view-allfiles .af-search input.form-input{padding:9px 12px 9px 34px;border-radius:10px;font-size:13px}
#view-allfiles .af-bar select.form-select{width:auto;padding:6px 28px 6px 10px;font-size:12px;border-radius:8px}
.af-site{border:1px solid var(--border);border-radius:12px;background:var(--panel);margin-bottom:8px;overflow:hidden}
.af-site-h{display:flex;align-items:center;gap:10px;width:100%;padding:12px 14px;border:0;background:none;font:inherit;text-align:left;cursor:pointer;color:var(--text)}
.af-site-h:hover{background:color-mix(in srgb,var(--ss-cyan) 5%,transparent)}
.af-chev{width:8px;height:8px;border-right:2px solid var(--text-dim);border-bottom:2px solid var(--text-dim);transform:rotate(-45deg);transition:transform .15s;flex:none;margin:0 4px}
.af-site.open .af-chev{transform:rotate(45deg)}
.af-site-name{font-size:14px;font-weight:700;color:var(--white);flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.af-site-meta{font-size:12px;color:var(--text-dim);white-space:nowrap;font-variant-numeric:tabular-nums}
.af-site-meta b{color:#d97706;font-weight:700}
.af-site-last{font-size:11.5px;color:var(--text-dim);white-space:nowrap;min-width:110px;text-align:right}
.af-rows{border-top:1px solid var(--border-light)}
@media (max-width:640px){.af-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.af-site-last{display:none}}

/* ── Shell ──────────────────────────────────────────────────────────── */
/* The connection strip is for problems. When everything is connected it
   stays out of the way; diagnostics live under Account → Data & storage. */
/* On a phone the strip also held the space under the status bar (time,
   signal, battery), so when it's hidden it stays as an empty spacer that
   tall, in the top bar's colour. On desktop the inset is 0. */
.debug-banner:has(#debugStatus.status-ok){display:block;height:env(safe-area-inset-top,0px);min-height:0;padding:0 !important;border:0 !important;background:var(--panel);overflow:hidden}
.debug-banner:has(#debugStatus.status-ok)>*{display:none !important}
.notif-badge{min-width:18px;padding:0 5px;font-variant-numeric:tabular-nums}

/* Date-range header (Dashboard trends, Analytics, Leadership) */
.xt-head{align-items:flex-end}
.xt-sub{font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);margin-left:6px;vertical-align:middle}
.xt-head-section{display:flex;align-items:flex-end;justify-content:space-between;gap:10px 16px;flex-wrap:wrap;margin:22px 2px 10px}
.xt-head-section h3{margin:0;font-size:16px;font-weight:700;color:var(--white)}
.xt-meta{font-size:12px;color:var(--text-dim);margin-top:2px}
.xt-range{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.xt-presets{display:inline-flex;padding:2px;border:1px solid var(--border);border-radius:9px;background:var(--panel)}
.xt-presets button{font:inherit;font-size:12px;font-weight:600;padding:5px 10px;border:0;border-radius:7px;background:none;color:var(--text-sec);cursor:pointer}
.xt-presets button:hover{color:var(--white)}
.xt-presets button.on{background:var(--ss-cyan);color:var(--on-accent,#fff)}
.xt-range input[type=date]{font:inherit;font-size:12px;padding:5px 8px;border:1px solid var(--border);border-radius:8px;background:var(--pro-field,var(--bg-deep));color:var(--text)}
.xt-dash{color:var(--text-dim)}
.xt-right{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}

/* ── Calendar ───────────────────────────────────────────────────────── */
.cal-nav{display:flex;align-items:center;gap:6px}
.cal-nav select{font:inherit;font-size:13px;font-weight:600;padding:6px 10px;border:1px solid var(--border);border-radius:8px;background:var(--pro-field,var(--bg-deep));color:var(--white)}
.cal-nav-btn{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;font-size:20px;line-height:1;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text);cursor:pointer}
.cal-nav-btn:hover{border-color:var(--ss-cyan);color:var(--ss-cyan)}
.cal-card{padding:14px !important}
.cal-filter-toggle{margin-left:auto;font:inherit;font-size:12px;font-weight:600;padding:6px 12px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--text-sec);cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.cal-filter-toggle::after{content:'';width:6px;height:6px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg) translateY(-2px);transition:transform .15s}
.cal-filter-toggle.open::after{transform:rotate(-135deg) translateY(-1px)}
.cal-filter-toggle:hover{color:var(--white);border-color:var(--ss-cyan)}
.cal-filter-toggle.active{border-color:var(--ss-cyan);color:var(--ss-cyan)}
.cal-filter-toggle span{min-width:18px;padding:0 6px;border-radius:99px;background:var(--ss-cyan);color:var(--on-accent,#fff);font-size:11px;line-height:17px;text-align:center}
.cal-filters[hidden]{display:none}

/* ── Intake ─────────────────────────────────────────────────────────── */
.af-stat.bad b{color:var(--danger)}
.af-stat.warn b{color:#d97706}
.in-card{margin-bottom:16px}
.in-h{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.in-h h3{margin:0;font-size:15px;font-weight:700;color:var(--white)}
.in-h span{font-size:12px;color:var(--text-dim)}
.in-table{width:100%;border-collapse:collapse;font-size:12.5px}
.in-table th{text-align:left;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);padding:6px 8px;border-bottom:1.5px solid var(--border)}
.in-table td{padding:8px;border-bottom:1px solid var(--border-light);vertical-align:middle;color:var(--text-sec)}
.in-table tr:hover td{background:color-mix(in srgb,var(--ss-cyan) 4%,transparent)}
.in-site{font-weight:600;color:var(--white) !important}
.in-dim{color:var(--text-dim) !important;white-space:nowrap}
.in-due{display:inline-block;font-size:11px;font-weight:700;padding:2px 8px;border-radius:99px;white-space:nowrap}
.in-due.late{color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,transparent)}
.in-due.soon{color:#d97706;background:color-mix(in srgb,#d97706 12%,transparent)}
.in-due.later{color:var(--text-sec);background:var(--bg-deep)}
.in-due.none{color:var(--text-dim);font-weight:500}
.in-assign{display:flex;gap:6px;align-items:center}
#view-intake .in-assign select.form-select{width:auto;min-width:160px;padding:5px 26px 5px 9px;font-size:12px;border-radius:8px}
.in-board{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.in-person{border:1px solid var(--border);border-radius:12px;background:var(--bg-deep);padding:12px 14px}
.in-person-h{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.in-person-h b{display:block;font-size:13.5px;color:var(--white)}
.in-person-h span{font-size:11px;color:var(--text-dim)}
.in-chips{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:6px}
.in-chip{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:99px;white-space:nowrap}
.in-chip.warn{color:#d97706;background:color-mix(in srgb,#d97706 12%,transparent)}
.in-chip.ok{color:#16a34a;background:color-mix(in srgb,#16a34a 12%,transparent)}
.in-chip.bad{color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,transparent)}
.in-row{display:flex;gap:10px;padding:9px 0;border-top:1px solid var(--border-light)}
.in-row-main{flex:1;min-width:0}
.in-row-t{font-size:12.5px;font-weight:600;color:var(--white)}
.in-row-s{font-size:11px;color:var(--text-dim);margin-top:2px}
.in-row-note{font-size:11.5px;color:var(--text-sec);margin-top:3px}
.in-row-r{display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.in-row-r .btn{font-size:11px;padding:2px 8px}
@media (max-width:760px){.in-table thead{display:none}.in-table tr{display:block;border-bottom:1px solid var(--border-light);padding:6px 0}.in-table td{display:inline-block;border:0;padding:4px 6px}}

/* Outlook disconnected banner + staying-connected notes */
.ol-alert{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);z-index:9400;display:flex;align-items:center;gap:12px;max-width:calc(100vw - 32px);padding:10px 12px 10px 14px;border-radius:12px;background:var(--panel);border:1px solid color-mix(in srgb,var(--warn) 55%,var(--border));box-shadow:0 14px 40px -12px rgba(0,0,0,.45);animation:olAlertIn .25s ease-out}
@keyframes olAlertIn{from{transform:translate(-50%,12px);opacity:0}to{transform:translate(-50%,0);opacity:1}}
.ol-alert .ol-logo{width:22px;height:22px;flex:none}
.ol-alert-t{display:flex;flex-direction:column;min-width:0}
.ol-alert-t b{font-size:13px;color:var(--white)}
.ol-alert-t span{font-size:11.5px;color:var(--text-dim)}
.ol-alert-x{border:0;background:none;color:var(--text-dim);font-size:18px;line-height:1;cursor:pointer;padding:2px 6px;border-radius:6px}
.ol-alert-x:hover{color:var(--white);background:var(--border)}
@media (max-width:640px){.ol-alert{bottom:calc(76px + env(safe-area-inset-bottom,0px))}}
.ol-stay{margin-top:12px;padding-top:12px;border-top:1px solid var(--border-light);font-size:12px;color:var(--text-sec);line-height:1.55}
.ol-stay-h{font-weight:700;color:var(--white);margin:12px 0 4px}
.ol-stay p{margin:0 0 6px}
.ol-stay ul{margin:0;padding-left:18px}
.ol-stay li{margin:2px 0}
.ol-stay code{font-size:11px;padding:1px 5px;border-radius:4px;background:var(--bg-deep);border:1px solid var(--border-light)}

/* New Entry — phase split */
.jph-row{display:flex;gap:8px;align-items:stretch}
.jph-row .form-select{flex:1;min-width:0}
.jph-split-btn{white-space:nowrap;flex:none}
.jph-summary{border:1px solid var(--border);border-radius:10px;padding:10px 12px;background:var(--bg-deep)}
.jph-chips{display:flex;flex-wrap:wrap;gap:6px}
.jph-chip{display:inline-flex;gap:6px;align-items:center;padding:4px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--ss-cyan) 12%,transparent);border:1px solid color-mix(in srgb,var(--ss-cyan) 35%,transparent);color:var(--text)}
.jph-chip b{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--white)}
.jph-chip.admin{background:color-mix(in srgb,var(--text-dim) 12%,transparent);border-color:var(--border)}
.jph-sum-foot{display:flex;align-items:center;gap:6px;margin-top:8px;font-size:11.5px;color:var(--text-dim);flex-wrap:wrap}
.jph-sum-foot span{margin-right:auto}
.jph-off{color:var(--danger);font-weight:600}
.jph-modal{max-width:460px;width:100%;padding:0;overflow:hidden}
.jph-head{display:flex;gap:10px;align-items:flex-start;padding:18px 20px 12px;border-bottom:1px solid var(--border-light)}
.jph-title{font-size:15px;font-weight:700;color:var(--white)}
.jph-sub{font-size:12px;color:var(--text-sec);margin-top:4px;line-height:1.45}
.jph-x{margin-left:auto;font-size:18px;line-height:1}
.jph-rows{padding:8px 12px;max-height:min(52vh,420px);overflow-y:auto}
.jph-line{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:8px;cursor:text}
.jph-line:hover{background:var(--bg-deep)}
.jph-line.admin{margin-top:6px;border-top:1px dashed var(--border);border-radius:0 0 8px 8px;padding-top:10px}
.jph-name{flex:1;min-width:0;font-size:13px;color:var(--text)}
.jph-line.admin .jph-name{color:var(--text-sec)}
.jph-fill{opacity:0;border:1px solid var(--border);background:none;color:var(--text-dim);font-size:10.5px;border-radius:6px;padding:2px 7px;cursor:pointer}
.jph-line:hover .jph-fill,.jph-line:focus-within .jph-fill{opacity:1}
.jph-fill:hover{color:var(--ss-cyan);border-color:var(--ss-cyan)}
.jph-in{position:relative;flex:none}
.jph-in input{width:84px;padding:7px 22px 7px 10px;text-align:right;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--white);font:600 13px 'JetBrains Mono',monospace}
.jph-in input:focus{outline:none;border-color:var(--ss-cyan);box-shadow:0 0 0 3px color-mix(in srgb,var(--ss-cyan) 20%,transparent)}
.jph-in i{position:absolute;right:9px;top:50%;transform:translateY(-50%);font-style:normal;font-size:11px;color:var(--text-dim);pointer-events:none}
.jph-foot{display:flex;align-items:center;gap:10px;padding:12px 20px 16px;border-top:1px solid var(--border-light);flex-wrap:wrap}
.jph-tally{font-size:12.5px;margin-right:auto}
.jph-tally.ok{color:var(--success,#10b981)}
.jph-tally.warn{color:var(--warn,#f59e0b)}
.jph-btns{display:flex;gap:8px}
@media (max-width:640px){.jph-row{flex-direction:column}.jph-fill{opacity:1}}

/* Project Tracker — hours by phase */
.pth{display:flex;flex-direction:column;gap:2px}
.pth-row{display:grid;grid-template-columns:minmax(110px,220px) minmax(60px,1fr) 150px;align-items:center;gap:12px;padding:7px 4px;border-bottom:1px solid var(--border-light);font-size:12.5px}
.pth-row:last-child{border-bottom:0}
.pth-name{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pth-bar{height:6px;border-radius:99px;background:var(--bg-deep);overflow:hidden}
.pth-bar i{display:block;height:100%;border-radius:99px;background:var(--ss-cyan)}
.pth-bar i.over{background:#ef4444}
.pth-val{text-align:right;white-space:nowrap;font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--white)}
.pth-val span{color:var(--text-dim);font-family:inherit}
.pth-admin .pth-name,.pth-none .pth-name{color:var(--text-sec);font-style:italic}

/* Data flow (Admin → Health) */
.df-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:14px}
.df-kpi{border:1px solid var(--border);border-radius:10px;padding:10px 12px;background:var(--bg-deep);display:flex;flex-direction:column;gap:2px}
.df-kpi span{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);font-weight:600}
.df-kpi b{font-size:20px;color:var(--white);font-family:'JetBrains Mono',monospace}
.df-kpi i{font-style:normal;font-size:11.5px;color:var(--text-dim)}
.df-kpi.bad{border-color:color-mix(in srgb,var(--danger) 55%,var(--border));background:color-mix(in srgb,var(--danger) 7%,var(--bg-deep))}
.df-kpi.bad b{color:var(--danger)}
.df-kpi.warn{border-color:color-mix(in srgb,#f59e0b 55%,var(--border))}
.df-table{border:1px solid var(--border-light);border-radius:10px;overflow:hidden}
.df-tr{display:grid;grid-template-columns:90px 90px 90px 110px 70px 1fr;gap:10px;align-items:center;padding:6px 12px;font-size:12px;border-bottom:1px solid var(--border-light);font-family:'JetBrains Mono',monospace;color:var(--text)}
.df-tr:last-child{border-bottom:0}
.df-th{background:var(--bg-deep);font-family:inherit;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:700}
.df-tr em{color:var(--text-dim);font-style:normal}
.df-tr.gap{background:color-mix(in srgb,var(--danger) 6%,transparent);box-shadow:inset 3px 0 0 var(--danger)}
.df-barcol{display:flex;flex-direction:column;gap:3px}
.df-bar{display:block;height:5px;border-radius:99px;min-width:0}
.df-bar.ts{background:#f59e0b}
.df-bar.en{background:var(--ss-cyan)}
.df-ok{color:#10b981}.df-warn{color:#f59e0b}.df-bad{color:var(--danger)}
.df-legend{display:flex;gap:16px;flex-wrap:wrap;margin:8px 2px 0;font-size:11px;color:var(--text-dim)}
.df-legend span{display:inline-flex;align-items:center;gap:6px}
.df-legend .df-bar{width:16px}
.df-dot{width:10px;height:10px;border-radius:2px;background:color-mix(in srgb,var(--danger) 25%,transparent);box-shadow:inset 3px 0 0 var(--danger)}
.df-sub{margin:18px 0 8px;font-size:13px;font-weight:700;color:var(--white)}
.df-sub span{display:block;font-weight:400;font-size:11.5px;color:var(--text-dim);margin-top:2px}
.df-gaps{display:flex;flex-direction:column;gap:6px;max-height:420px;overflow-y:auto}
.df-gap{display:grid;grid-template-columns:200px 1fr 70px auto;gap:12px;align-items:center;padding:8px 12px;border:1px solid var(--border-light);border-radius:8px;font-size:12px}
.df-gap-who{display:flex;flex-direction:column}
.df-gap-who b{color:var(--white)}
.df-gap-who span,.df-gap-sites{color:var(--text-dim)}
.df-gap-h{font-family:'JetBrains Mono',monospace;color:var(--white);text-align:right}
.dw-stale{margin:0 0 10px;padding:9px 12px;border-radius:8px;font-size:12px;color:var(--text);background:color-mix(in srgb,#f59e0b 10%,transparent);border:1px solid color-mix(in srgb,#f59e0b 40%,var(--border))}
@media (max-width:760px){.df-tr{grid-template-columns:70px 60px 70px 80px 50px;font-size:11px}.df-barcol{display:none}.df-gap{grid-template-columns:1fr auto}.df-gap-sites{grid-column:1/-1}}

/* Budget tracker (Global Projects) */
.bt{border:1px solid var(--border);border-radius:12px;overflow:hidden;background:var(--panel)}
.bt-band{display:flex;align-items:center;gap:16px;padding:10px 16px;background:linear-gradient(90deg,#4f5b6b,#606d7e);color:#fff}
.bt-logo{background:#fff;border-radius:6px;padding:4px 8px;display:flex;align-items:center;flex:none}
.bt-logo img{height:30px;display:block}
.bt-title{font-weight:800;font-size:15px;letter-spacing:.01em;line-height:1.25}
.bt-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;padding:14px 16px}
.bt-h{color:#c2541f;font-weight:800;font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;padding-bottom:6px;border-bottom:2px solid #5a6676;margin-bottom:2px}
.bt-tbl{width:100%;border-collapse:collapse;font-size:12.5px}
.bt-tbl th{text-align:left;font-weight:400;color:var(--text-dim);padding:7px 10px 7px 0;width:44%;vertical-align:top;border-bottom:1px solid var(--border-light)}
.bt-tbl td{color:var(--text);padding:7px 0;border-bottom:1px solid var(--border-light);word-break:break-word}
.bt-fin td{font-family:'JetBrains Mono',monospace;text-align:right}
.bt-fin tr.strong th,.bt-fin tr.strong td{color:var(--white);font-weight:700}
.bt-chart{margin-top:12px;border-radius:10px;padding:12px;background:radial-gradient(circle at 50% 30%,#4b5563,#1f2937 75%);display:flex;flex-direction:column;align-items:center;gap:8px}
.bt-chart-t{color:#e5e7eb;font-family:Georgia,'Times New Roman',serif;font-weight:700;font-size:15px;letter-spacing:.04em}
.bt-legend{display:flex;flex-direction:column;gap:3px;font-size:11.5px;color:#e5e7eb}
.bt-legend i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:6px;vertical-align:-1px}
.bt-src{padding:8px 16px;font-size:11px;color:var(--text-dim);border-top:1px solid var(--border-light);background:var(--bg-deep)}
.bt-recon{display:grid;grid-template-columns:repeat(3,1fr) auto;gap:12px;align-items:center;margin-top:10px;padding:10px 14px;border-radius:10px;border:1px solid var(--border)}
.bt-recon.match{border-color:color-mix(in srgb,#10b981 50%,var(--border));background:color-mix(in srgb,#10b981 6%,transparent)}
.bt-recon.short,.bt-recon.over{border-color:color-mix(in srgb,#f59e0b 55%,var(--border));background:color-mix(in srgb,#f59e0b 7%,transparent)}
.bt-recon-k{display:flex;flex-direction:column;gap:1px}
.bt-recon-k span{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:600}
.bt-recon-k b{font-family:'JetBrains Mono',monospace;font-size:16px;color:var(--white)}
.bt-recon.match .bt-recon-k:nth-child(3) b{color:#10b981}
.bt-recon.short .bt-recon-k:nth-child(3) b,.bt-recon.over .bt-recon-k:nth-child(3) b{color:#d97706}
.bt-recon-k i{font-style:normal;font-size:11px;color:var(--text-dim)}
@media (max-width:820px){.bt-grid{grid-template-columns:1fr}.bt-recon{grid-template-columns:1fr}}

.bt-modal{max-width:860px;width:100%;padding:0;overflow:hidden;display:flex;flex-direction:column;max-height:calc(var(--vh100) - 40px)}
.bt-mh{display:flex;gap:12px;align-items:flex-start;padding:18px 20px 12px;border-bottom:1px solid var(--border-light)}
.bt-mh>div{flex:1}
.bt-mt{font-size:16px;font-weight:800;color:var(--white)}
.bt-ms{font-size:12px;color:var(--text-sec);margin-top:4px;line-height:1.45}
.bt-mf{display:flex;gap:8px;align-items:center;padding:12px 20px;border-top:1px solid var(--border-light)}
.bt-mf>span{margin-right:auto;font-size:12px;color:var(--text-dim)}
.bt-drop{margin:14px 20px 4px;display:flex;flex-direction:column;align-items:center;gap:4px;padding:18px;border:1.5px dashed var(--border);border-radius:12px;cursor:pointer;color:var(--text-sec);font-size:13px;text-align:center}
.bt-drop b{color:var(--ss-cyan)}
.bt-drop span{font-size:11px;color:var(--text-dim)}
.bt-drop.over,.bt-drop:hover{border-color:var(--ss-cyan);background:color-mix(in srgb,var(--ss-cyan) 6%,transparent)}
#btReview{overflow-y:auto;padding:6px 20px 12px;display:flex;flex-direction:column;gap:10px}
.bt-rv{border:1px solid var(--border);border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:8px}
.bt-rv.nomatch{border-color:color-mix(in srgb,#f59e0b 55%,var(--border))}
.bt-rv.err{border-color:color-mix(in srgb,var(--danger) 55%,var(--border))}
.bt-rv-h{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.bt-rv-h b{color:var(--white);font-size:13.5px}
.bt-rv-h span{font-size:11px;color:var(--text-dim)}
.bt-rv-grid{display:grid;grid-template-columns:1.4fr 1fr;gap:10px}
.bt-rv-grid label,.bt-f{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--text-dim)}
.bt-how,.bt-f span{font-size:10.5px;color:var(--text-dim)}
.bt-rv-nums{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}
.bt-rv-nums>div{background:var(--bg-deep);border-radius:8px;padding:7px 10px;display:flex;flex-direction:column}
.bt-rv-nums span{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:600}
.bt-rv-nums b{font-family:'JetBrains Mono',monospace;color:var(--white);font-size:13px}
.bt-rv-nums i{font-style:normal;font-size:10.5px;color:var(--text-dim)}
.bt-rv-rec.match b{color:#10b981}.bt-rv-rec.short b,.bt-rv-rec.over b{color:#d97706}
.bt-rv-meta{font-size:11.5px;color:var(--text-sec)}
.bt-rv-opts{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text)}
.bt-rv-opts input{accent-color:var(--ss-cyan);margin-right:6px}
.bt-warn{font-size:11.5px;color:#b45309;background:color-mix(in srgb,#f59e0b 10%,transparent);border-radius:6px;padding:5px 9px}
.bt-form{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:16px 20px;overflow-y:auto}
@media (max-width:640px){.bt-rv-grid,.bt-form{grid-template-columns:1fr}}
.rc-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;padding:16px 20px 20px}
.rc-tile{text-align:left;display:flex;flex-direction:column;gap:6px;padding:14px;border:1px solid var(--border);border-radius:12px;background:var(--bg-deep);cursor:pointer;color:var(--text);font:inherit;transition:border-color .15s,transform .15s}
.rc-tile:hover{border-color:var(--ss-cyan);transform:translateY(-1px)}
.rc-tile i{font-style:normal;width:30px;height:30px;border-radius:8px;display:grid;place-items:center;background:color-mix(in srgb,var(--ss-cyan) 15%,transparent);color:var(--ss-cyan);font-weight:800}
.rc-tile b{color:var(--white);font-size:13.5px}
.rc-tile span{font-size:11.5px;color:var(--text-sec);line-height:1.45}

/* Weekly tickets */
.wt-modal{max-width:1100px}
#wtBody{overflow-y:auto;padding:4px 20px 14px;display:flex;flex-direction:column;gap:12px}
.wt-top{display:flex;flex-direction:column;gap:6px}
.wt-file{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;font-size:12px;color:var(--text-sec)}
.wt-file b{color:var(--white);font-size:13px}
.wt-ok{font-style:normal;color:#10b981;font-weight:600}
.wt-rates{font-size:12.5px;color:var(--text);padding:8px 12px;border-radius:8px;background:var(--bg-deep);border:1px solid var(--border-light)}
.wt-rates b{font-family:'JetBrains Mono',monospace;color:var(--white)}
.wt-rate-off{margin-top:6px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;color:#b45309;font-size:12px}
.wt-group{border:1px solid var(--border);border-radius:12px;overflow:hidden}
.wt-group.nomatch{border-color:color-mix(in srgb,#f59e0b 55%,var(--border))}
.wt-group.focus{box-shadow:0 0 0 2px color-mix(in srgb,var(--ss-cyan) 45%,transparent)}
.wt-gh{display:grid;grid-template-columns:minmax(140px,1fr) minmax(220px,1.4fr) auto;gap:14px;align-items:center;padding:10px 14px;background:var(--bg-deep);border-bottom:1px solid var(--border-light)}
.wt-gl{display:flex;flex-direction:column}
.wt-gl span,.wt-gp>span{font-size:10.5px;color:var(--text-dim)}
.wt-gl span{text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.wt-gl b{color:var(--white);font-size:13.5px}
.wt-gp{display:flex;flex-direction:column;gap:4px}
.wt-gp label{display:flex;align-items:center;gap:6px;color:var(--text-sec);font-size:11px}
.wt-gs{display:flex;flex-direction:column;align-items:flex-end;font-size:11.5px;color:var(--text-sec);font-family:'JetBrains Mono',monospace}
.wt-tbl{width:100%;border-collapse:collapse;font-size:12px}
.wt-tbl th{text-align:left;font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:700;padding:7px 10px;border-bottom:1px solid var(--border-light)}
.wt-tbl td{padding:7px 10px;border-bottom:1px solid var(--border-light);color:var(--text);vertical-align:middle}
.wt-tbl tr:last-child td{border-bottom:0}
.wt-tbl .n{text-align:right;font-family:'JetBrains Mono',monospace}
.wt-tbl td span{font-size:10.5px;color:var(--text-dim);font-family:inherit}
.wt-tk{font-family:'JetBrains Mono',monospace;font-size:11.5px}
.wt-chip{font-style:normal;font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--bg-deep);color:var(--text-sec);white-space:nowrap}
.wt-chip.ok{background:color-mix(in srgb,#10b981 14%,transparent);color:#059669}
.wt-chip.done{background:color-mix(in srgb,var(--ss-cyan) 14%,transparent);color:var(--ss-cyan)}
.wt-chip.warn{background:color-mix(in srgb,#f59e0b 16%,transparent);color:#b45309}
.wt-chip.bad{background:color-mix(in srgb,var(--danger) 14%,transparent);color:var(--danger)}
.wt-act{padding:4px 8px;font-size:11.5px;min-width:150px}
.wt-none{color:var(--text-dim)}
.wt-assign{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-sec)}
.wt-assign select{padding:4px 8px;font-size:11.5px;width:auto}
.wt-warn-t{color:#b45309}
.wt-ledger-note{margin:0 2px;font-size:12px;color:var(--text-dim)}
.wt-weeks{margin-bottom:10px}
.wt-ph-h{margin:10px 0 6px;font-size:12.5px;font-weight:700;color:var(--white)}
.wt-ph-h span{display:block;font-weight:400;font-size:11px;color:var(--text-dim)}
.wt-phs{display:flex;flex-direction:column;gap:4px}
.wt-ph{display:flex;align-items:center;gap:10px;padding:6px 10px;border:1px dashed var(--border);border-radius:8px;font-size:12px}
.wt-ph b{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--white)}
.wt-ph span{flex:1;color:var(--text-sec)}
@media (max-width:820px){.wt-gh{grid-template-columns:1fr}.wt-gs{align-items:flex-start}.wt-tbl{display:block;overflow-x:auto}}
#wtModal select.wt-act{padding:5px 30px 5px 10px;font-size:12px;height:auto;min-width:170px;background-position:right 8px center}
#wtModal .wt-assign select.form-select{padding:5px 30px 5px 10px;font-size:12px;height:auto;width:auto;background-position:right 8px center}

/* GP weekly update email */
.gpu-paste{padding:12px 20px 4px}
.gpu-paste textarea{width:100%;font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.45;resize:vertical;min-height:110px}
#gpuBody{overflow-y:auto;padding:4px 20px 14px;display:flex;flex-direction:column;gap:10px}
.gpu-row .wt-gs label{display:flex;gap:6px;align-items:center;font-family:inherit;color:var(--text)}
.gpu-nums{display:flex;flex-wrap:wrap;gap:8px;padding:10px 14px 4px}
.gpu-m{background:var(--bg-deep);border-radius:8px;padding:7px 12px;display:flex;flex-direction:column;min-width:110px}
.gpu-m span{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:600}
.gpu-m b{font-family:'JetBrains Mono',monospace;color:var(--white);font-size:15px}
.gpu-m i,.gpu-k em{font-style:normal;font-size:11px;color:var(--text-dim)}
.gpu-m i.up,.gpu-k em.up{color:#10b981}.gpu-m i.down,.gpu-k em.down{color:#d97706}
.gpu-ms{list-style:none;margin:6px 14px;padding:0;display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--text)}
.gpu-ms li.done{color:var(--text-sec)}
.gpu-ms i{font-style:normal;color:var(--text-dim);font-size:11px}
.gpu-row>.bt-warn,.gpu-row>.gpu-info{margin:4px 14px}
.gpu-info{font-size:11.5px;color:var(--text-sec);background:var(--bg-deep);border-radius:6px;padding:5px 9px}
.gpu-acts{margin:6px 14px 12px;padding:8px 12px;border:1px dashed var(--border);border-radius:8px;display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--text)}
.gpu-acts-h{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:700}
.gpu-acts input,.gpu-up input{accent-color:var(--ss-cyan);margin-right:6px}
.gpu-acts i{font-style:normal;color:var(--text-dim)}
.gpu-up{display:flex;flex-direction:column;gap:6px;padding:10px 14px;font-size:12.5px;color:var(--text)}
.gpu-up span{color:var(--text-dim)}
.gpu-ks{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:6px}
.gpu-k{display:flex;flex-direction:column;padding:8px 14px;border:1px solid var(--border-light);border-radius:10px;min-width:130px}
.gpu-k span{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:600;display:flex;align-items:center;gap:6px}
.gpu-k span i{width:8px;height:8px;border-radius:2px;display:inline-block}
.gpu-k b{font-family:'JetBrains Mono',monospace;font-size:20px;color:var(--white)}
.gpu-trend{width:100%;height:auto;max-height:170px;color:var(--text);display:block;margin:4px 0 6px}
.gpu-mcols{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.gpu-mcols .gpu-ms{margin:4px 0}
.gpu-mh{font-size:11px;font-weight:700;color:var(--white)}
.gpu-hist{margin-top:10px;font-size:12px}
.gpu-hist summary{cursor:pointer;color:var(--ss-cyan);margin-bottom:6px}
#gpuBody>*,#wtBody>*,#btReview>*{flex-shrink:0}

/* Backfill */
.bf-fields{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.bf-chip{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--text);padding:4px 9px;border:1px solid var(--border);border-radius:999px;background:var(--panel);cursor:pointer}
.bf-chip input{accent-color:var(--ss-cyan)}
.bf-chip b{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--white)}
.bf-chip i{font-style:normal;font-size:10.5px;color:var(--text-dim);background:var(--bg-deep);border-radius:999px;padding:0 6px}
.bf-f{display:inline-block;font-size:10.5px;padding:1px 7px;border-radius:999px;background:color-mix(in srgb,var(--ss-cyan) 12%,transparent);color:var(--ss-cyan);margin:1px 0}
.bf-f.off{background:var(--bg-deep);color:var(--text-dim);text-decoration:line-through}
#bfBody{overflow-y:auto;padding:12px 20px 14px;display:flex;flex-direction:column;gap:10px}
#bfBody>*{flex-shrink:0}
#bfBody,#wtBody,#gpuBody,#btReview{flex:1 1 auto;min-height:0}
.bt-mh,.bt-mf,.bt-drop,.gpu-paste{flex-shrink:0}
body:has(#btImportModal,#btEditModal,#reconHub,#wtModal,#gpuModal,#bfModal) .qa-fab,body:has(#btImportModal,#btEditModal,#reconHub,#wtModal,#gpuModal,#bfModal) .tfab{display:none !important}

/* Project profiles */
.prf-h{font-size:11px;font-weight:700;color:var(--text);margin-bottom:6px}
.prf-styles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:10px}
.prf-style{display:flex;flex-direction:column;gap:3px;padding:10px;border:1px solid var(--border);border-radius:10px;cursor:pointer;font-size:11px;color:var(--text-sec);line-height:1.4;position:relative}
.prf-style input{position:absolute;opacity:0;pointer-events:none}
.prf-style b{font-size:12.5px;color:var(--white)}
.prf-style.on{border-color:var(--ss-cyan);background:color-mix(in srgb,var(--ss-cyan) 8%,transparent);box-shadow:0 0 0 1px var(--ss-cyan)}
.prf-grid{display:flex;flex-direction:column;gap:2px}
.prf-row{display:grid;grid-template-columns:1fr 190px;gap:10px;align-items:center;padding:6px 2px;border-bottom:1px solid var(--border-light)}
.prf-row span{display:flex;flex-direction:column;font-size:12px;color:var(--text)}
.prf-row span b{font-weight:600}
.prf-row span i{font-style:normal;font-size:10.5px;color:var(--text-dim)}
.prf-row .form-select,.prf-row .form-input{padding:4px 28px 4px 8px;font-size:12px;height:auto}
.prf-note{font-size:10.5px;color:var(--text-dim);margin-top:6px;font-style:italic}
.ptv.ptv-solo{grid-template-columns:1fr}
.pt-tix{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:6px 0 10px}
.pt-tix>div{background:var(--bg-deep);border-radius:8px;padding:8px 10px;display:flex;flex-direction:column}
.pt-tix b{font-family:'JetBrains Mono',monospace;font-size:20px;color:var(--white)}
.pt-tix span{font-size:10.5px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em}
.pt-tix-list{display:flex;flex-direction:column;gap:4px;font-size:12px}
.pt-tix-list>div{display:flex;justify-content:space-between;gap:10px;padding:4px 0;border-bottom:1px solid var(--border-light)}
.pt-tix-list span{color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pt-tix-list i{font-style:normal;color:var(--text-dim);white-space:nowrap}
.pt-tix-none{color:var(--text-dim)}
@media (max-width:640px){.prf-styles{grid-template-columns:1fr}.prf-row{grid-template-columns:1fr}}

/* ── Alarms ─────────────────────────────────────────────────────────── */
.nav-al-badge{display:inline-block;min-width:18px;padding:0 5px;margin-left:6px;border-radius:999px;font-size:10.5px;font-weight:800;line-height:17px;text-align:center;color:#fff;vertical-align:1px}
.al-eval{font-size:11.5px;color:var(--text-dim);align-self:center}
.al-ann{display:grid;grid-template-columns:repeat(4,1fr) .8fr;gap:10px;margin:4px 0 14px}
.al-tile{position:relative;display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:auto auto;column-gap:10px;align-items:center;text-align:left;padding:12px 14px;border-radius:12px;border:1px solid color-mix(in srgb,var(--pc,var(--border)) 45%,var(--border));background:linear-gradient(180deg,color-mix(in srgb,var(--pc,transparent) 10%,var(--panel)),var(--panel));color:var(--text);font:inherit;cursor:pointer;overflow:hidden;box-shadow:inset 4px 0 0 var(--pc,var(--border))}
.al-tile.zero{background:var(--panel);border-color:var(--border);box-shadow:inset 4px 0 0 color-mix(in srgb,var(--pc) 35%,var(--border))}
.al-tile[aria-pressed="true"]{outline:2px solid var(--pc);outline-offset:1px}
.al-tile-p{grid-row:1/3;width:38px;height:38px;border-radius:9px;display:grid;place-items:center;font-weight:900;font-size:13px;color:#fff;background:var(--pc)}
.al-tile.zero .al-tile-p{background:color-mix(in srgb,var(--pc) 35%,var(--bg-deep));color:var(--text-dim)}
.al-tile-l{font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;color:var(--text-sec)}
.al-tile b{grid-row:1/3;grid-column:3;font-family:'JetBrains Mono',monospace;font-size:28px;color:var(--white);line-height:1}
.al-tile i{font-style:normal;font-size:11px;color:var(--text-dim)}
.al-tile-side{cursor:default;grid-template-columns:1fr auto;box-shadow:none}
.al-tile-side b{grid-column:2}
.al-tile.flash::after{content:'';position:absolute;inset:0;border-radius:12px;border:2px solid var(--pc);animation:alFlash 1.1s steps(2,jump-none) infinite;pointer-events:none}
@keyframes alFlash{0%{opacity:1}100%{opacity:0}}
@media (prefers-reduced-motion:reduce){.al-tile.flash::after,.al-unack .al-st{animation:none}}
.al-tabs{margin-bottom:12px}
.al-tabn{display:inline-block;min-width:18px;padding:0 6px;border-radius:999px;background:var(--bg-deep);font-size:10.5px;color:var(--text-sec);margin-left:4px}
.al-bar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.al-bar .al-q{max-width:260px}
.al-bar select.al-sel{width:auto;padding:6px 30px 6px 10px;font-size:12px;height:auto}
.al-grow{flex:1}
.al-empty{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:40px 20px;border:1px dashed var(--border);border-radius:14px;color:var(--text-sec);font-size:13px}
.al-empty b{color:var(--white);font-size:15px}
.al-empty.ok b{color:#10b981}
.al-table{border:1px solid var(--border);border-radius:12px;overflow:hidden;background:var(--panel)}
.al-tr{display:grid;grid-template-columns:44px 92px 118px minmax(120px,1fr) minmax(120px,1.1fr) 92px minmax(160px,2fr) auto;gap:10px;align-items:center;padding:9px 12px;border-bottom:1px solid var(--border-light);font-size:12.5px;color:var(--text)}
.al-tr:last-child{border-bottom:0}
.al-th{background:var(--bg-deep);font-size:10px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;color:var(--text-dim);padding:8px 12px}
.al-tr:not(.al-th){box-shadow:inset 4px 0 0 var(--pc)}
.al-unack{background:color-mix(in srgb,var(--pc) 9%,var(--panel))}
.al-rtn{background:color-mix(in srgb,var(--pc) 4%,var(--panel))}
.al-shelved{opacity:.72}
.al-pri b{display:inline-grid;place-items:center;width:32px;height:22px;border-radius:6px;background:var(--pc);color:#fff;font-size:11px;font-weight:900}
.al-ack .al-pri b,.al-shelved .al-pri b{background:transparent;color:var(--pc);box-shadow:inset 0 0 0 1.5px var(--pc)}
.al-time{font-family:'JetBrains Mono',monospace;font-size:11.5px;display:flex;flex-direction:column}
.al-sub,.al-time i{font-style:normal;font-size:10.5px;color:var(--text-dim);display:block;font-family:inherit}
.al-st{font-style:normal;display:inline-block;font-size:10px;font-weight:800;letter-spacing:.06em;padding:2px 7px;border-radius:5px;border:1px solid currentColor}
.al-st-unack{color:#fff;background:var(--pc);border-color:var(--pc);animation:alBlink 1.1s steps(2,jump-none) infinite}
@keyframes alBlink{0%{opacity:1}100%{opacity:.45}}
.al-st-ack{color:var(--text-sec)}
.al-st-rtn{color:var(--pc)}
.al-st-shelved{color:var(--text-dim);border-style:dashed}
.al-rule{font-weight:600;color:var(--white)}
.al-subj a{color:var(--ss-cyan);text-decoration:none}
.al-subj a:hover{text-decoration:underline}
.al-val{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--white)}
.al-msg{color:var(--text-sec);line-height:1.4}
.al-acts{display:flex;gap:4px;justify-content:flex-end;white-space:nowrap}
.al-j{border:1px solid var(--border);border-radius:12px;overflow:hidden;background:var(--panel)}
.al-jd{position:sticky;top:0;padding:7px 14px;background:var(--bg-deep);font-size:11px;font-weight:700;color:var(--text-sec);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border-light)}
.al-je{display:grid;grid-template-columns:96px 22px 32px 1fr auto;gap:10px;align-items:start;padding:8px 14px;border-bottom:1px solid var(--border-light);font-size:12.5px}
.al-je-t{font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--text-dim)}
.al-je-i{text-align:center;color:var(--pc)}
.al-je-p{font-size:10.5px;font-weight:800;color:var(--pc)}
.al-je-b b{color:var(--white);font-weight:600}
.al-je-b i{font-style:normal;font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--text-sec);margin-left:4px}
.al-je-b div{color:var(--text-sec);font-size:12px;margin-top:2px}
.al-je-by{font-size:11.5px;color:var(--text-dim);white-space:nowrap}
.al-je-cleared .al-je-i,.al-je-acked .al-je-i{color:#10b981}
.al-je-ruleCreated,.al-je-ruleChanged,.al-je-ruleEnabled,.al-je-ruleDisabled,.al-je-ruleDeleted{background:color-mix(in srgb,var(--ss-cyan) 4%,transparent)}
.al-rg{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--text-dim);margin:14px 2px 8px}
.al-rules{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px}
.al-rc{border:1px solid var(--border);border-radius:12px;padding:12px 14px;background:var(--panel);display:flex;flex-direction:column;gap:6px;box-shadow:inset 4px 0 0 var(--pc)}
.al-rc.off{opacity:.6;box-shadow:inset 4px 0 0 var(--border)}
.al-rc-h{display:flex;align-items:center;gap:8px}
.al-rc-h b{color:var(--white);font-size:13.5px;flex:1;min-width:0}
.al-rc-p{font-size:10.5px;font-weight:900;color:#fff;background:var(--pc);border-radius:5px;padding:2px 6px}
.al-rc.off .al-rc-p{background:var(--border);color:var(--text-dim)}
.al-rc-n{font-size:10.5px;font-weight:700;color:var(--pc);background:color-mix(in srgb,var(--pc) 14%,transparent);border-radius:999px;padding:1px 8px}
.al-rc-c{font-size:12.5px;color:var(--text)}
.al-rc-m{display:flex;flex-direction:column;gap:1px;font-size:11.5px;color:var(--text-sec)}
.al-rc-f{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--text-dim);border-top:1px solid var(--border-light);padding-top:6px;margin-top:2px}
.al-sw{position:relative;width:34px;height:20px;flex:none;cursor:pointer}
.al-sw input{opacity:0;width:0;height:0;position:absolute}
.al-sw i{position:absolute;inset:0;border-radius:999px;background:var(--border);transition:background .15s}
.al-sw i::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .15s;box-shadow:0 1px 2px rgba(0,0,0,.3)}
.al-sw input:checked+i{background:#10b981}
.al-sw input:checked+i::after{transform:translateX(14px)}
.al-sw input:focus-visible+i{outline:2px solid var(--ss-cyan);outline-offset:2px}
.al-form{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:16px 20px;overflow-y:auto;flex:1 1 auto;min-height:0}
.al-wide{grid-column:1/-1}
.al-params{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:12px;border-radius:10px;background:var(--bg-deep)}
.al-num{display:flex;align-items:center;gap:6px}
.al-num input{flex:1}
.al-num i{font-style:normal;font-size:11.5px;color:var(--text-dim);white-space:nowrap}
.al-src-note{grid-column:1/-1;font-size:11px;color:var(--text-dim)}
.al-pris{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:4px}
.al-pr{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:8px 10px;border:1px solid var(--border);border-radius:10px;cursor:pointer;color:var(--text-sec);font-size:11.5px;position:relative}
.al-pr input{position:absolute;opacity:0}
.al-pr b{font-size:13px;color:var(--pc)}
.al-pr:has(input:checked){border-color:var(--pc);background:color-mix(in srgb,var(--pc) 10%,transparent);box-shadow:0 0 0 1px var(--pc)}
.al-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
.al-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--border);border-radius:999px;font-size:12px;color:var(--text);cursor:pointer}
.al-chip input{accent-color:var(--ss-cyan)}
.al-sep{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--text-dim);border-top:1px solid var(--border-light);padding-top:12px}
.al-teams{display:grid;grid-template-columns:160px 1fr;gap:12px;align-items:end;padding:12px;border-radius:10px;background:var(--bg-deep)}
.al-teams .btn{grid-column:1/-1;justify-self:start}
.al-note{font-size:12px;color:var(--text-sec);background:var(--bg-deep);border-radius:8px;padding:8px 10px;grid-column:1/-1}
.al-cs{grid-column:1/-1;display:flex;flex-direction:column;gap:6px;max-height:160px;overflow-y:auto}
.al-c{font-size:12px;color:var(--text)}
.al-c i{font-style:normal;color:var(--text-dim);font-size:11px}
.al-hk{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:12px}
.al-hk>div{border:1px solid var(--border);border-radius:12px;padding:12px;background:var(--panel);display:flex;flex-direction:column;gap:2px}
.al-hk>div.warn{border-color:color-mix(in srgb,#f59e0b 55%,var(--border))}
.al-hk span{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--text-dim)}
.al-hk b{font-family:'JetBrains Mono',monospace;font-size:24px;color:var(--white)}
.al-hk i{font-style:normal;font-size:11px;color:var(--text-dim)}
.al-hg{display:grid;grid-template-columns:1.1fr 1fr 1fr;gap:10px}
.al-hc{border:1px solid var(--border);border-radius:12px;padding:12px 14px;background:var(--panel)}
.al-hh{font-size:12px;font-weight:700;color:var(--white);margin-bottom:10px}
.al-hh span{font-weight:400;color:var(--text-dim)}
.al-bars{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;height:150px;align-items:end}
.al-bars>div{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:3px}
.al-bars i{width:100%;max-width:30px;min-height:2px;border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,#f97316,#dc2626)}
.al-bars b{font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--white)}
.al-bars span{font-size:10.5px;color:var(--text-dim)}
.al-mix{display:grid;grid-template-columns:30px 1fr 40px 70px;gap:8px;align-items:center;margin-bottom:8px;font-size:12px}
.al-mix>span{font-weight:900;color:var(--pc)}
.al-mix>div{position:relative;height:10px;border-radius:99px;background:var(--bg-deep);overflow:visible}
.al-mix>div i{display:block;height:100%;border-radius:99px}
.al-mix>div em{position:absolute;top:-3px;width:2px;height:16px;background:var(--text-dim);border-radius:1px}
.al-mix b{font-family:'JetBrains Mono',monospace;color:var(--white);text-align:right}
.al-mix small{color:var(--text-dim);font-size:10.5px}
.al-bad{margin:0;padding-left:20px;display:flex;flex-direction:column;gap:4px;font-size:12px}
.al-bad li span{color:var(--text)}
.al-bad li b{float:right;font-family:'JetBrains Mono',monospace;color:var(--white)}
.al-health>.al-note{margin-top:10px}
body:has(#alRuleModal,#alShelveModal,#alCommentModal) .qa-fab,body:has(#alRuleModal,#alShelveModal,#alCommentModal) .tfab{display:none !important}
@media (max-width:1100px){.al-tr{grid-template-columns:40px 80px 100px 1fr 1fr;}.al-tr>.al-val,.al-tr>.al-msg{grid-column:3/-1}.al-acts{grid-column:1/-1;justify-content:flex-start}.al-th{display:none}.al-hg{grid-template-columns:1fr}.al-hk{grid-template-columns:repeat(2,1fr)}}
@media (max-width:760px){.al-ann{grid-template-columns:repeat(2,1fr)}.al-form,.al-params,.al-teams{grid-template-columns:1fr}.al-pris{grid-template-columns:repeat(2,1fr)}.al-je{grid-template-columns:70px 1fr}.al-je-i,.al-je-p{display:none}}
.al-tile{grid-template-columns:auto 1fr auto;grid-template-rows:auto auto}
.al-tile i{grid-column:2/3;white-space:normal;line-height:1.3}
.al-tile-l{grid-column:2/3}

/* Report builder: what to include */
.pt-x-quick{margin-left:auto;display:inline-flex;gap:4px}
.pt-x-quick button{border:1px solid var(--border);background:none;color:var(--text-sec);font-size:11px;border-radius:6px;padding:2px 8px;cursor:pointer}
.pt-x-quick button:hover{color:var(--ss-cyan);border-color:var(--ss-cyan)}
.pt-x-label{display:flex;align-items:center;gap:8px}
.pt-x-sub2{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--text-dim);margin:8px 0 4px}
.pt-x-incs{display:flex;flex-wrap:wrap;gap:6px}
.pt-x-inc{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border:1px solid var(--border);border-radius:999px;font-size:12px;color:var(--text-sec);cursor:pointer;user-select:none}
.pt-x-inc input{position:absolute;opacity:0;pointer-events:none}
.pt-x-inc.on{border-color:var(--ss-cyan);background:color-mix(in srgb,var(--ss-cyan) 10%,transparent);color:var(--white)}
.pt-x-inc.on::before{content:'✓';font-size:11px;color:var(--ss-cyan)}
.pt-x-filters{margin-top:10px;border:1px solid var(--border-light);border-radius:10px;padding:8px 12px}
.pt-x-filters summary{cursor:pointer;font-size:12.5px;font-weight:600;color:var(--text)}
.pt-x-filters summary span{font-weight:400;color:var(--text-dim)}
.pt-x-fgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:6px 0}
.pt-x-flist{max-height:160px;overflow-y:auto;display:flex;flex-direction:column;gap:2px;border:1px solid var(--border-light);border-radius:8px;padding:6px}
.pt-x-f{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--text);cursor:pointer;padding:2px 0}
.pt-x-f input{accent-color:var(--ss-cyan)}
.pt-x-f i{font-style:normal;color:var(--text-dim);margin-left:auto;font-size:11px}
@media (max-width:640px){.pt-x-fgrid{grid-template-columns:1fr}}

/* Budget tracker snapshots */
.bt-hist{margin-top:10px;border:1px solid var(--border-light);border-radius:10px;padding:8px 12px}
.bt-hist summary{cursor:pointer;font-size:12.5px;font-weight:700;color:var(--white)}
.bt-hist summary span{font-weight:400;color:var(--text-dim);font-size:11.5px}
.bt-hist .wt-tbl{margin-top:6px}
.bt-hist tr.bt-cur td{background:color-mix(in srgb,var(--ss-cyan) 6%,transparent)}
.bt-src2{font-size:11px;color:var(--text-dim)}
.bt-where{font-size:11.5px;padding:5px 9px;border-radius:6px;background:var(--bg-deep);color:var(--text-sec)}
.bt-where.cur{background:color-mix(in srgb,var(--ss-cyan) 10%,transparent);color:var(--text)}
#wtModal select.wt-who{margin-top:4px;display:block}
.wt-ph .wt-who{width:auto;max-width:200px;padding:3px 28px 3px 8px;font-size:11.5px;height:auto;background-position:right 8px center}
.wt-ph-bulk{display:flex;align-items:center;gap:8px;margin-bottom:6px;font-size:11.5px;color:var(--text-dim)}
.bt-hist td.n{white-space:nowrap}
.rc-why{font-size:12px;color:var(--text-sec);background:var(--bg-deep);border-radius:8px;padding:8px 12px;margin:-4px 0 8px;line-height:1.5}.rc-why b{color:var(--white)}
.al-rs{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:16px 2px 2px}
.al-rs b{font-size:14px;color:var(--white)}
.al-rs span{font-size:12px;color:var(--text-dim);flex:1}
.al-mute{display:inline-flex;align-items:center;gap:5px;font-size:11px;color:var(--text-sec);cursor:pointer;margin-left:auto;margin-right:6px}
.al-mute input{accent-color:var(--ss-cyan)}
.al-muted{opacity:.6}
.al-muted .al-st-unack{animation:none}
.al-mine{font-style:normal;font-size:10px;font-weight:700;color:var(--ss-cyan);border:1px solid currentColor;border-radius:4px;padding:0 4px}

/* Reconcile — import history */
.rc-hist{border-top:1px solid var(--border-light);padding:12px 20px 18px;overflow-y:auto;min-height:0}
.rc-hist-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.rc-hist-h b{font-size:13px;color:var(--white)}
.rh-body{overflow-y:auto;padding:12px 20px 18px;flex:1 1 auto;min-height:0}
.rh-list{display:flex;flex-direction:column;gap:6px}
.rh-row{display:flex;gap:12px;align-items:flex-start;padding:10px 12px;border:1px solid var(--border-light);border-radius:10px;background:var(--panel)}
.rh-ico{font-style:normal;flex:none;width:28px;height:28px;border-radius:8px;display:grid;place-items:center;background:color-mix(in srgb,var(--ss-cyan) 14%,transparent);color:var(--ss-cyan);font-weight:800}
.rh-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.rh-top{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.rh-top b{color:var(--white);font-size:13px}
.rh-top span{font-size:11.5px;color:var(--text-dim)}
.rh-sum{font-size:12px;color:var(--text-sec);line-height:1.45}
.rh-files,.rh-projs{display:flex;flex-wrap:wrap;gap:6px}
.rh-file{font:inherit;font-size:11.5px;border:1px solid var(--border);background:var(--bg-deep);color:var(--text);border-radius:6px;padding:2px 8px;cursor:pointer}
.rh-file:hover{border-color:var(--ss-cyan);color:var(--ss-cyan)}
.rh-file small{color:var(--text-dim)}
.rh-file.off{cursor:default;color:var(--text-dim)}
.rh-projs a{font-size:11.5px;color:var(--ss-cyan);text-decoration:none}
.rh-projs a:hover{text-decoration:underline}
.rh-projs span{font-size:11px;color:var(--text-dim)}
.rh-del{border:0;background:none;color:var(--text-dim);cursor:pointer;font-size:14px;padding:2px 6px;border-radius:6px}
.rh-del:hover{color:var(--danger);background:var(--bg-deep)}
.rh-empty{font-size:12px;color:var(--text-dim);padding:8px 2px}
.rh-more{margin-top:6px}
body:has(#rhModal,#ppModal,#tgModal,#btCheckModal,#emModal,.at-modal) .qa-fab,body:has(#rhModal,#ppModal,#tgModal,#btCheckModal,#emModal,.at-modal) .tfab{display:none !important}
.wt-whocell{min-width:170px}
#wtModal select.wt-who{width:100%;padding:4px 28px 4px 8px;font-size:12px;height:auto;background-position:right 8px center;margin:0}
.wt-alias{display:flex;gap:5px;align-items:flex-start;font-size:10.5px;color:var(--ss-cyan);margin-top:4px;line-height:1.3;cursor:pointer}
.wt-alias input{accent-color:var(--ss-cyan);margin-top:1px}
.wt-to{font-size:10.5px;color:var(--text-dim);margin-top:3px}
.pa-wrap{display:flex;flex-direction:column;gap:8px}
.pa-hint{font-size:11.5px;color:var(--text-dim)}
.pa-chips{display:flex;flex-wrap:wrap;gap:6px}
.pa-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 4px 3px 10px;border-radius:999px;background:color-mix(in srgb,var(--ss-cyan) 12%,transparent);border:1px solid color-mix(in srgb,var(--ss-cyan) 35%,transparent);font-size:12px;color:var(--text)}
.pa-chip button{border:0;background:none;color:var(--text-dim);cursor:pointer;font-size:14px;line-height:1;padding:0 5px;border-radius:999px}
.pa-chip button:hover{color:var(--danger)}
.pa-none{font-size:12px;color:var(--text-dim);font-style:italic}
.pa-add{display:flex;gap:6px}
.pa-add .form-input{max-width:260px;padding:5px 10px;font-size:12.5px}
.al-sw{width:auto;height:20px;display:inline-flex;align-items:center;gap:6px}
.al-sw span{font-size:10.5px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em}
.al-sw span:empty{display:none}
.al-sw i{position:relative;inset:auto;display:inline-block;width:34px;height:20px;flex:none}
.al-sw-me input:checked+i{background:var(--ss-cyan)}

/* Tracker vs app — find the difference (js/trackerGap.js) */
.tg-modal{max-width:980px}
.tg-body{overflow-y:auto;padding:14px 20px 20px;flex:1 1 auto;min-height:0}
.tg-body .bt-recon{margin-top:0}
.bt-recon.accepted{border-color:color-mix(in srgb,var(--ss-cyan) 45%,var(--border));background:color-mix(in srgb,var(--ss-cyan) 6%,transparent)}
.bt-recon.accepted .bt-recon-k:nth-child(3) b{color:var(--ss-cyan)}
.tg-note{font-size:12px;color:var(--text-sec);line-height:1.5;margin:8px 0 4px}
.tg-h{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);margin:18px 0 8px;display:flex;gap:10px;align-items:baseline}
.tg-h span{text-transform:none;letter-spacing:0;font-weight:500}
.tg-sum{font-size:12.5px;color:var(--text-sec);margin-bottom:8px}.tg-sum b{color:var(--white)}
.tg-card{border:1px solid var(--border-light);border-radius:10px;background:var(--panel);padding:10px 12px;margin-bottom:8px}
.tg-card-h{display:flex;justify-content:space-between;gap:12px;align-items:baseline}
.tg-card-h b{color:var(--white);font-size:13px}
.tg-card-h span{font-family:'JetBrains Mono',monospace;font-size:13px;color:#d97706;font-weight:700}
.tg-why{font-size:12px;color:var(--text-dim);margin:2px 0 8px;line-height:1.45}
.tg-items{display:flex;flex-direction:column;gap:4px}
.tg-it{display:flex;gap:8px;align-items:center;padding:6px 8px;border-radius:8px;background:var(--bg-deep)}
.tg-it>div{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.tg-it b{font-size:12.5px;color:var(--text);font-weight:600}
.tg-it span{font-size:11.5px;color:var(--text-dim);overflow:hidden;text-overflow:ellipsis}
.tg-it i{font-style:normal;font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--text-sec);white-space:nowrap}
.tg-more{font-size:11.5px;color:var(--text-dim);padding:2px 8px}
.tg-hot td{background:color-mix(in srgb,#f59e0b 8%,transparent)}
.tg-dim{font-size:11px;color:var(--text-dim)}
.tg-ack{display:flex;flex-direction:column;gap:8px;align-items:flex-start;padding:10px 12px;border:1px dashed var(--border);border-radius:10px}
.tg-ack>div{font-size:12.5px;color:var(--text)}
.tg-ack span{font-size:12px;color:var(--text-dim);line-height:1.45}
.tg-ack textarea{width:100%;resize:vertical}
@media (max-width:700px){.tg-it{flex-wrap:wrap}.tg-it>div{flex-basis:100%}}

/* GP email: the week of each site, editable (older emails) */
.gpu-wk{display:inline-flex;gap:6px;align-items:center;font-size:12px;color:var(--text-dim)}
.gpu-wk input{width:auto;padding:3px 6px;font-size:12px;height:auto}
.gpu-dated{margin:0 20px 8px}

/* All phases timeline (js/ptAnalytics.js) */
.at-modal{max-width:1200px}
.at-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:12px 20px 0}
.at-bar .form-input{max-width:260px}.at-bar .form-select{width:auto}
.at-bar label{font-size:12.5px;color:var(--text-sec);display:inline-flex;gap:6px;align-items:center}
.at-bar #ptAtCount{margin-left:auto;font-size:12px;color:var(--text-dim)}
.at-body{overflow:auto;padding:12px 20px 4px;flex:1 1 auto;min-height:0}
.at-chart{min-width:calc(var(--at-w) + 200px)}
.at-row{display:grid;grid-template-columns:200px 1fr;align-items:center;min-height:24px}
.at-name{font-size:12px;color:var(--text-sec);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:10px;position:sticky;left:0;background:var(--panel);z-index:3;align-self:stretch;display:flex;align-items:center;box-shadow:-20px 0 0 var(--panel)}
.at-ph{padding-left:14px}
.at-proj .at-name a{font-weight:700;color:var(--white);text-decoration:none;font-size:12.5px}
.at-proj .at-name a:hover{color:var(--ss-cyan);text-decoration:underline}
.at-proj{min-height:28px;margin-top:4px}
.at-track{position:relative;align-self:stretch;min-height:24px}
.at-grid{position:absolute;top:0;bottom:0;width:1px;background:var(--border-light)}
.at-grid.yr{background:var(--border)}
.at-today{position:absolute;top:0;bottom:0;width:2px;margin-left:-1px;background:var(--ss-cyan);z-index:2;opacity:.8}
.at-seg{position:absolute;top:6px;height:12px;border-radius:4px;z-index:1;cursor:default}
.at-seg.planned{background:#94a3b8}.at-seg.inprogress{background:#f59e0b}.at-seg.overdue{background:#ef4444}.at-seg.completed{background:#10b981}
.at-head{position:sticky;top:0;z-index:4;background:var(--panel);min-height:22px;border-bottom:1px solid var(--border)}
.at-head .at-track span{position:absolute;top:3px;font-size:10.5px;color:var(--text-dim);white-space:nowrap;padding-left:4px;font-weight:600}
.at-head .at-track .at-today-l{color:var(--ss-cyan);transform:translateX(-50%);padding:0 4px;background:var(--panel);z-index:2}
.at-pf{display:flex;gap:8px;align-items:center;background:var(--panel);z-index:3;box-shadow:-20px 0 0 var(--panel);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);padding:12px 0 2px;position:sticky;left:0;width:max-content}
.at-pf i{width:10px;height:10px;border-radius:3px}
.at-legend{display:flex;gap:16px;flex-wrap:wrap;padding:10px 20px 16px;font-size:11.5px;color:var(--text-dim)}
.at-legend span{display:inline-flex;gap:6px;align-items:center}
.at-legend i{width:14px;height:8px;border-radius:3px;display:inline-block}
.at-legend i.planned{background:#94a3b8}.at-legend i.inprogress{background:#f59e0b}.at-legend i.overdue{background:#ef4444}.at-legend i.completed{background:#10b981}.at-legend i.today{background:var(--ss-cyan);width:2px;height:12px}
@media (max-width:700px){.at-row{grid-template-columns:130px 1fr}.at-chart{min-width:calc(var(--at-w) + 130px)}.at-bar .form-input{max-width:none;flex:1 1 100%}}

/* Tracker: the part logged since the newest tracker (not yet confirmed) */
.pt-progress-pend{position:absolute;top:0;bottom:0;background:repeating-linear-gradient(45deg,#d99a2b 0 4px,#ecc27a 4px 7px);border-radius:0 4px 4px 0}
.bt-pend-sw{background:repeating-linear-gradient(45deg,#d99a2b 0 3px,#ecc27a 3px 5px) !important}
.bt-fin tr.pend th,.bt-fin tr.pend td{color:#b7791f;font-style:italic}
.bt-how.sure{color:#059669}.bt-how.unsure{color:#b45309}.bt-how.bad{color:var(--danger)}
.bt-warn.bad{border-color:color-mix(in srgb,var(--danger) 50%,var(--border));background:color-mix(in srgb,var(--danger) 8%,transparent);color:var(--danger)}
.bt-date-fix td{font-size:12px;color:var(--text-sec);background:color-mix(in srgb,#f59e0b 7%,transparent);padding:6px 10px !important}
.bt-date-fix .btn{margin-left:6px}

.tg-date{border:1px solid color-mix(in srgb,#f59e0b 55%,var(--border));background:color-mix(in srgb,#f59e0b 8%,transparent);border-radius:10px;padding:10px 12px;margin:10px 0;font-size:12.5px;color:var(--text);line-height:1.5}
.tg-date>div{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap}
.btc-sum{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--text-sec);margin-bottom:6px}
.btc-sum b{color:var(--white);font-size:15px;margin-right:3px}
.btc-sum .ok b{color:#059669}.btc-sum .warn b{color:#d97706}
.btc-tbl td{vertical-align:top}
.btc-tbl td>div{margin-top:4px}
.btc-pend{color:#b7791f;font-style:italic}

/* Project window: back to the portfolio (or the timeline) */
.pt-back{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);background:var(--panel);color:var(--pf-color,var(--ss-cyan));font:inherit;font-size:12px;font-weight:700;padding:4px 10px 4px 8px;border-radius:999px;cursor:pointer;margin-bottom:8px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pt-back:hover{border-color:var(--pf-color,var(--ss-cyan));background:color-mix(in srgb,var(--pf-color,var(--ss-cyan)) 8%,var(--panel))}

/* Quote vs actual (js/ptQuote.js) */
.pq-rows{display:flex;flex-direction:column;gap:10px}
.pq-row{display:grid;grid-template-columns:200px 1fr 120px;gap:12px;align-items:center}
.pq-l{display:flex;flex-direction:column}.pq-l b{font-size:12.5px;color:var(--white)}.pq-l span{font-size:11.5px;color:var(--text-dim)}
.pq-p{font-family:'JetBrains Mono',monospace;font-size:12.5px;font-weight:700;text-align:right}.pq-p i{display:block;font-style:normal;font-weight:500;font-size:10.5px}
.pq-form{border:1px dashed var(--border);border-radius:8px;padding:10px}
.pq-form-h{font-size:11px;font-weight:700;color:var(--text);margin-bottom:6px}.pq-form-h span{font-weight:400;color:var(--text-dim);margin-left:6px}
@media (max-width:600px){.pq-row{grid-template-columns:1fr 70px}.pq-row .pt-progress-bar{grid-column:1/-1;order:3}.pq-form div[style*="repeat(4"]{grid-template-columns:1fr 1fr !important}}

/* Entries vs uploads (js/entryMatch.js) */
.em-wrap{overflow-x:auto}
.em-tbl td{vertical-align:top;font-size:12px}
.em-tbl td span{display:block;font-size:10.5px;color:var(--text-dim)}
.em-tbl em{color:var(--text-dim)}
.em-tbl tr.em-bad td:first-child{box-shadow:inset 3px 0 0 var(--danger)}
.em-tbl tr.em-warn td:first-child{box-shadow:inset 3px 0 0 #f59e0b}
.em-tbl tr.em-ok td:first-child{box-shadow:inset 3px 0 0 #10b981}
.em-ents{display:flex;flex-wrap:wrap;gap:4px}
.em-ents .btn{padding:2px 6px;font-size:11px}
.em-bar{margin:8px 0}.em-bar .form-select{width:auto}
.em-modal{max-width:1150px}
.em-sec label{font-size:12px;color:var(--text-sec);display:inline-flex;gap:6px;align-items:center}
/* Entries vs client tickets: totals, weeks with no tickets, Details */
.em-hrs{font-size:12.5px;color:var(--text-sec);margin:2px 0 8px}
.em-hrs b{color:var(--white);font-variant-numeric:tabular-nums}
.em-hrs b.warn{color:#d97706}.em-hrs b.bad{color:var(--danger)}.em-hrs b.ok{color:#059669}
.em-ents .em-det{border-color:var(--ss-cyan);color:var(--ss-cyan)}
.em-off{margin-top:12px;border:1px solid var(--border-light);border-radius:10px;padding:8px 12px}
.em-off summary{cursor:pointer;font-size:12.5px;font-weight:600;color:var(--text-sec)}
.em-off .wt-tbl{margin-top:8px}
.em-pw{max-width:980px;width:96%;max-height:calc(var(--vh, 1vh) * 90);display:flex;flex-direction:column}
.em-pw .tg-body{overflow:auto}
.em-pw-sum{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:6px}
.em-pw-sum>div{border:1px solid var(--border-light);border-radius:10px;padding:10px 12px;display:flex;flex-wrap:wrap;align-items:baseline;gap:6px}
.em-pw-sum span{width:100%;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--text-dim);font-weight:700}
.em-pw-sum b{font-size:20px;color:var(--white);font-variant-numeric:tabular-nums}
.em-pw-sum b.ok{color:#059669}.em-pw-sum b.warn{color:#d97706}
.em-pw-sum em{font-style:normal;font-size:12px;color:var(--text-sec)}
.em-pw-h{margin:16px 0 6px;font-size:13px;font-weight:700;color:var(--white)}
.em-pw .wt-tbl td span,.em-picked{display:block;font-size:10.5px;color:var(--text-dim)}
.em-picked{color:var(--ss-cyan)}
.em-veh{width:70px;padding:4px 6px;font-size:12px;text-align:right}
.em-tsel{width:auto;padding:3px 24px 3px 6px;font-size:11.5px}
.wt-act{white-space:nowrap;text-align:right}
.wt-act .btn{margin-left:4px;padding:3px 8px;font-size:11.5px}
.wt-act .wt-del{color:var(--danger)}
/* Client weekly tickets: a week opens to its tickets */
.wt-hint{font-size:11.5px;color:var(--text-dim);margin:0 0 4px}
.wt-weeks tr.wt-wk{cursor:pointer}
.wt-weeks tr.wt-wk:hover td,.wt-weeks tr.wt-wk.open td{background:var(--bg-deep)}
.wt-weeks tr.wt-wk:focus-visible{outline:2px solid var(--ss-cyan);outline-offset:-2px}
.wt-caret{display:inline-block;width:18px;font-size:14px;line-height:1;color:var(--text-sec)}
.wt-weeks tr.wt-wk .wt-chip{margin-left:6px;font-size:10px}
.wt-weeks tr.wt-wk-detail>td{padding:4px 8px 12px 22px;background:var(--bg-deep)}
.wt-tix{background:var(--panel);border-radius:8px}
.wt-tix tr.wt-off td{opacity:.55}
.wt-tags{display:flex;gap:4px;flex-wrap:wrap;margin-top:3px}.wt-tags .wt-chip{font-size:10px;padding:1px 6px}
.wt-edit{max-width:520px;width:96%}
.wt-edit-body{padding:14px 20px;display:flex;flex-direction:column;gap:10px}
.wt-edit-body label{display:flex;flex-direction:column;gap:4px;font-size:11.5px;font-weight:600;color:var(--text-sec)}
.wt-edit-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px}
.wt-orig{font-size:12px;color:var(--text-sec);background:var(--bg-deep);border-radius:8px;padding:8px 10px}
@media (max-width:640px){.em-pw-sum{grid-template-columns:1fr}.em-pw .wt-tbl,.wt-tix{display:block;overflow-x:auto}.wt-act{white-space:normal}}

.tg-split td span{display:block;font-size:11px;color:var(--text-dim)}
.tg-split .tg-split-t td{font-weight:800;color:var(--white);border-top:2px solid var(--border)}
.tg-split td.n{font-family:'JetBrains Mono',monospace;white-space:nowrap;vertical-align:top}
.tg-per td.tg-bad{color:var(--danger);font-weight:700}

/* New Entry day strip: Mi / Veh rows under ST / OT, like the timesheet */
.hours-cell-travel:first-of-type,.hours-cell .hours-cell-travel{opacity:.92}
.hours-cell .hours-cell-input-row.hours-cell-travel:nth-of-type(4){border-top:1px dashed var(--border-light);padding-top:4px;margin-top:2px}
.hours-cell-lbl.hours-cell-lbl-tr{color:var(--text-dim)}
.hours-cell input[readonly],#jMileage[readonly],#jVehDays[readonly]{background:var(--bg-deep);color:var(--text-sec);cursor:default}

.j-mi-legacy{margin-top:6px;font-size:11.5px;color:#b45309;background:color-mix(in srgb,#f59e0b 8%,transparent);border:1px solid color-mix(in srgb,#f59e0b 35%,var(--border));border-radius:6px;padding:6px 10px}
.j-mi-legacy b{color:var(--text)}

/* Admin → Access: who has what (js/accessMatrix.js) */
.am-card{padding-bottom:12px}
.am-intro{font-size:12px;color:var(--text-dim);margin:0 0 12px;line-height:1.5}
.am-bar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px}
.am-bar .form-select{width:auto;min-width:140px;max-width:240px;padding-right:32px}
.am-search{max-width:240px}
.am-check{font-size:12px;color:var(--text-sec);display:inline-flex;gap:6px;align-items:center}
.am-spacer{flex:1}
.am-count{font-size:12px;color:var(--text-dim);margin:4px 0 8px}
.am-wrap{overflow:auto;max-height:calc(var(--vh100, 100vh) - 300px);border:1px solid var(--border-light);border-radius:10px}
.am-tbl{border-collapse:separate;border-spacing:0;font-size:12px;min-width:100%}
.am-tbl th,.am-tbl td{border-bottom:1px solid var(--border-light);padding:6px 8px;background:var(--panel)}
.am-tbl thead th{position:sticky;z-index:2;background:var(--bg-deep);color:var(--text-sec);font-weight:700}
.am-tbl thead tr.am-groups th{top:0;height:34px;text-align:center;font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;border-left:1px solid var(--border-light)}
.am-tbl thead tr.am-cols th{top:34px;vertical-align:bottom;height:156px;padding:6px 2px;min-width:34px;max-width:40px;text-transform:none;letter-spacing:0}
.am-tbl thead tr.am-cols th span{writing-mode:vertical-rl;transform:rotate(180deg);white-space:nowrap;font-size:11.5px;font-weight:600;color:var(--text);display:inline-block;max-height:148px;overflow:hidden;text-overflow:ellipsis;text-transform:none;letter-spacing:0}
.am-sticky{position:sticky;left:0;z-index:3}
.am-sticky2{position:sticky;left:210px;z-index:3}
.am-tbl thead .am-sticky,.am-tbl thead .am-sticky2{z-index:5}
.am-person{min-width:210px;max-width:210px;text-align:left}
.am-person b{display:block;color:var(--white);font-size:12.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.am-person span{display:block;font-size:10.5px;color:var(--text-dim);font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.am-rolecol{min-width:118px;box-shadow:inset -1px 0 0 var(--border)}
.am-role{font-size:12px;padding:3px 6px;height:auto;width:110px}
.am-rolefix{font-size:12px;color:var(--text-sec)}
.am-cell{text-align:center;position:relative}
.am-cell input{width:16px;height:16px;cursor:pointer;accent-color:var(--ss-cyan)}
.am-cell.am-lock input{cursor:not-allowed;opacity:.55}
.am-cell.am-special{background:color-mix(in srgb,#f59e0b 13%,var(--panel))}
.am-cell.am-special::after{content:'';position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:50%;background:#f59e0b}
.am-cell.am-req{box-shadow:inset 0 0 0 2px color-mix(in srgb,#8b5cf6 60%,transparent)}
.am-tbl tbody tr:hover td,.am-tbl tbody tr:hover th{background:color-mix(in srgb,var(--ss-cyan) 6%,var(--panel))}
.am-tbl tbody tr:hover .am-cell.am-special{background:color-mix(in srgb,#f59e0b 18%,var(--panel))}
.am-actions{white-space:nowrap}
.am-empty{text-align:center;color:var(--text-dim);padding:20px}
.am-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:11.5px;color:var(--text-dim);margin-top:8px}
.am-legend span{display:inline-flex;gap:6px;align-items:center}
.am-sw{width:12px;height:12px;border-radius:3px;border:1px solid var(--border);display:inline-block}
.am-sw.on{background:var(--ss-cyan)}.am-sw.special{background:color-mix(in srgb,#f59e0b 40%,var(--panel));border-color:#f59e0b}.am-sw.lock{background:var(--bg-deep);opacity:.6}.am-sw.req{box-shadow:inset 0 0 0 2px #8b5cf6}
@media (max-width:700px){.am-person{min-width:150px;max-width:150px}.am-sticky2{left:150px}.am-search{max-width:none;flex:1 1 100%}}

/* Timesheet lines that didn't reach Job Tracker (js/timesheet.js) */
.ts-sync-banner{border:1px solid color-mix(in srgb,#f59e0b 55%,var(--border));background:color-mix(in srgb,#f59e0b 9%,transparent);border-radius:10px;padding:10px 12px;margin:0 0 10px;font-size:12.5px;color:var(--text);line-height:1.45}
.ts-sync-banner ul{margin:6px 0 8px 18px;padding:0}
.ts-sync-banner li{margin:2px 0}

/* Timesheet imports: the "is this rule work?" question and the
   confirmation listing every change before anything is written. */
.tsi-ask{margin-top:6px;padding:6px 8px;border:1px dashed #f59e0b;border-radius:6px;background:rgba(245,158,11,.06)}
.tsi-ask.is-answered{border-style:solid;border-color:var(--border);background:transparent}
.tsi-ask-q{font-weight:700;color:var(--white);margin-bottom:4px}
.tsi-ask-hint{margin-top:4px;color:var(--text-dim);font-size:9px;line-height:1.4}
.tsi-ask-banner{margin-bottom:8px;padding:10px 12px;border:1px solid #f59e0b;border-radius:6px;background:rgba(245,158,11,.08);font-size:11px;color:var(--text-sec);line-height:1.6}
.tsi-plan-who{margin:12px 0 4px;font-size:12px;font-weight:700;color:var(--white)}
.tsi-plan-who span{font-weight:400;color:var(--text-dim);font-size:11px}
.tsi-plan-line{padding:6px 8px;border:1px solid var(--border-light);border-radius:6px;margin-bottom:6px}
.tsi-plan-site{font-size:11px;font-weight:600;color:var(--white);margin-bottom:2px}
.tsi-plan-chg{font-size:11px;color:var(--text-sec);line-height:1.5;padding-left:10px;position:relative}
.tsi-plan-chg::before{content:'•';position:absolute;left:0;color:var(--text-dim)}
.tsi-plan-chg.is-replace{color:#f59e0b}
.tsi-plan-chg.is-add{color:var(--success)}
.tsi-plan-chg.is-undecided{color:var(--danger)}

/* Project window → Entries: which entries count toward the project, and
   why (js/projectLinks.js). */
.ptl-help{font-size:11px;color:var(--text-dim);line-height:1.6;margin:4px 0 10px}
.ptl-warn{border:1px solid #f59e0b;background:rgba(245,158,11,.08);border-radius:6px;padding:8px 10px;font-size:11px;color:var(--text-sec);line-height:1.6;margin-bottom:10px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.ptl-bar{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.ptl-selcount{font-size:11px;color:var(--ss-cyan);font-weight:700;margin:0 4px}
.ptl-table{border:1px solid var(--border-light);border-radius:6px;overflow:auto;max-height:calc(var(--vh) * 46);margin-bottom:8px}
.ptl-tr{display:grid;grid-template-columns:26px 86px minmax(120px,1.4fr) minmax(100px,1fr) minmax(90px,1fr) 56px 100px minmax(110px,1.2fr);gap:6px;align-items:center;padding:5px 8px;border-bottom:1px solid var(--border-light);font-size:11px;color:var(--text-sec)}
.ptl-tr:last-child{border-bottom:0}
.ptl-th{position:sticky;top:0;background:var(--panel);color:var(--text-dim);font-weight:700;z-index:1}
.ptl-tr.is-shared{background:rgba(245,158,11,.06)}
.ptl-num{text-align:right;font-family:'JetBrains Mono',monospace}
.ptl-how{color:var(--text-dim)}
.ptl-chip{display:inline-block;padding:1px 6px;border-radius:999px;background:var(--bg-deep);border:1px solid var(--border-light);font-size:10px;margin:1px 2px 1px 0}
.ptl-sug{margin-top:14px}
.ptl-pick-pf{font-size:10px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;margin:10px 0 4px}
.ptl-pick-row{display:block;width:100%;text-align:left;padding:7px 10px;border:1px solid var(--border-light);border-radius:6px;background:var(--bg-deep);color:var(--white);font-size:12px;margin-bottom:4px;cursor:pointer}
.ptl-pick-row:hover{border-color:var(--ss-cyan)}
@media (max-width:700px){.ptl-tr{grid-template-columns:26px 80px 1fr 60px;}.ptl-tr>span:nth-child(4),.ptl-tr>span:nth-child(5),.ptl-tr>span:nth-child(7),.ptl-tr>span:nth-child(8){display:none}}
.ptl-tr.ptl-m{grid-template-columns:26px 86px minmax(120px,1.4fr) minmax(100px,1fr) minmax(120px,1.4fr)}

/* Find entries: search every entry, see where it counts, move them
   together (js/entryFinder.js). */
.ef-modal{max-width:1180px;width:97%;max-height:calc(var(--vh) * 92);display:flex;flex-direction:column;padding:0}
.ef-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;padding:16px 18px 6px}
.ef-title{font-size:15px;font-weight:700;color:var(--white)}
.ef-sub{font-size:11px;color:var(--text-dim);margin-top:3px;line-height:1.5}
.ef-controls{padding:6px 18px 4px}
.ef-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.ef-q{flex:1 1 280px;min-width:0;font-size:13px}
.ef-sel{flex:0 1 auto;min-width:150px}
.ef-presets{gap:6px}
.ef-preset{border:1px solid var(--border-light);background:var(--bg-deep);color:var(--text-sec);border-radius:999px;padding:4px 12px;font-size:11px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.ef-preset:hover{border-color:var(--ss-cyan)}
.ef-preset.on{border-color:var(--ss-cyan);color:var(--white);background:var(--ss-cyan-glow)}
.ef-badge{font-variant-numeric:tabular-nums;font-size:10px;font-weight:700;padding:0 6px;border-radius:999px;background:var(--border-light);color:var(--text-sec)}
.ef-badge.warn{background:rgba(245,158,11,.18);color:#f59e0b}
.ef-body{padding:0 18px;overflow:hidden;display:flex;flex-direction:column;min-height:0;flex:1}
.ef-count{font-size:11px;color:var(--text-sec);margin:2px 0 6px}
.ef-count b{color:var(--white)}
.ef-table{max-height:none;flex:1;min-height:120px}
.ef-tr{display:grid;grid-template-columns:26px 82px minmax(110px,1.1fr) minmax(90px,.8fr) minmax(110px,1fr) minmax(160px,1.8fr) 52px minmax(140px,1.3fr);gap:8px;align-items:center;padding:6px 8px;border-bottom:1px solid var(--border-light);font-size:11px;color:var(--text-sec);cursor:pointer}
.ef-tr:last-child{border-bottom:0}
.ef-tr.ptl-th{cursor:default}
.ef-tr:not(.ptl-th):hover{background:var(--bg-deep)}
.ef-tr.sel{background:var(--ss-cyan-glow)}
.ef-tr>span{min-width:0;overflow:hidden;text-overflow:ellipsis}
.ef-date{font-family:'JetBrains Mono',monospace;color:var(--text-dim)}
.ef-site{color:var(--white);font-weight:600}
.ef-note{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;line-height:1.45}
.ef-note b{color:#f59e0b;font-weight:700}
.ef-chip{white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.ef-chip i{font-style:normal;color:var(--text-dim);margin-left:4px}
.ef-chip i::before{content:'· '}
.ef-none{color:var(--text-dim);font-style:italic}
.ef-weak{color:var(--text-dim);font-style:italic}
.ef-empty{padding:36px 12px;text-align:center;font-size:12px;color:var(--text-dim);border:1px dashed var(--border-light);border-radius:6px}
.ef-more{font-size:11px;color:var(--text-dim);margin:2px 0 8px;display:flex;align-items:center;gap:8px}
.ef-foot{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:10px 18px;border-top:1px solid var(--border);margin-top:8px}
.ef-launch{display:flex;gap:6px}
.ef-launch input{width:190px;font-size:12px;padding:5px 10px}
@media (max-width:900px){.ef-tr{grid-template-columns:26px 78px 1fr minmax(120px,1fr) 48px}.ef-tr>span:nth-child(4),.ef-tr>span:nth-child(5),.ef-tr>span:nth-child(6){display:none}}
@media (max-width:600px){.ef-tr{grid-template-columns:26px 1fr 44px}.ef-tr>span:nth-child(2),.ef-tr>span:nth-child(8){display:none}.ef-launch input{width:100%}.ef-launch{flex:1 1 100%}.ef-sel{flex:1 1 140px}.ef-modal{overflow-y:auto}.ef-body{overflow:visible;flex:none}.ef-table{flex:none;overflow:visible}.ef-foot{position:sticky;bottom:0;background:var(--panel);z-index:2}}

/* Sites and their projects: the "change these projects too?" list and
   the project sync audit (js/masterdata.js). */
.md-carry{max-width:820px;width:96%;max-height:calc(var(--vh) * 88);display:flex;flex-direction:column;padding:0}
.md-carry-wide{max-width:1080px}
.md-carry-head{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:16px 18px 4px;font-size:15px;color:var(--white)}
.md-carry-lead{font-size:12px;color:var(--text-sec);line-height:1.55;margin:4px 18px 10px}
.md-carry-lead strong{color:var(--white)}
.md-carry-tools{display:flex;gap:6px;padding:0 14px 6px}
.md-carry-scroll{overflow:auto;flex:1;min-height:0;margin:0 18px;border:1px solid var(--border-light);border-radius:6px}
.md-carry-table{width:100%;border-collapse:collapse;font-size:12px}
.md-carry-table th{position:sticky;top:0;background:var(--panel);text-align:left;font-size:11px;font-weight:700;color:var(--text-dim);padding:7px 10px;border-bottom:1px solid var(--border);z-index:1}
.md-carry-table td{padding:7px 10px;border-bottom:1px solid var(--border-light);color:var(--text-sec);vertical-align:top}
.md-carry-table tr:last-child td{border-bottom:0}
.md-carry-table td:first-child,.md-carry-table th:first-child{width:28px}
.md-carry-pf{font-size:10px;color:var(--text-dim)}
.md-carry-pj{font-weight:600;color:var(--white)}
.md-carry-val{font-family:'JetBrains Mono',monospace;font-size:11px;overflow-wrap:anywhere}
.md-carry-val em{font-family:inherit;color:var(--text-dim)}
.md-carry-to{color:var(--ss-cyan)}
.md-carry-foot{display:flex;gap:8px;justify-content:flex-end;align-items:center;flex-wrap:wrap;padding:12px 18px;border-top:1px solid var(--border);margin-top:12px}
.md-carry-status{flex:1 1 200px;font-size:11px;color:var(--text-dim)}
.md-stale-banner{margin:8px 0 12px;padding:10px 14px;border-radius:6px;background:var(--warn-dim);border:1px solid var(--warn);font-size:12px;color:var(--text-sec);display:flex;justify-content:space-between;align-items:center;gap:14px}
.md-stale-banner strong{color:var(--warn)}
.md-carry-fld{display:none;font-size:11px;color:var(--text-sec);margin-top:2px}
body:has(#mdCarryModal,#_mdPtSyncOverlay) .qa-fab,body:has(#mdCarryModal,#_mdPtSyncOverlay) .tfab{display:none !important}
@media (max-width:600px){.md-carry-table th:nth-child(3),.md-carry-table td:nth-child(3){display:none}.md-carry-fld{display:block}.md-stale-banner{flex-direction:column;align-items:flex-start}.md-carry-scroll{margin:0 12px}.md-carry-lead{margin:4px 12px 10px}}

/* Site discrepancy report: search, pick-for-all. */
.sa-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin:0 0 10px}
.sa-tools label{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--text-sec)}
.sa-tools .form-select{min-width:180px}
.sa-tools-gap{flex:1}

/* Admin → Data health (js/dataHealth.js). */
.dh-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:12px}
.dh-kpi{border:1px solid var(--border-light);border-radius:8px;padding:10px 12px;background:var(--bg-deep)}
.dh-kpi span{display:block;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim)}
.dh-kpi b{display:block;font-size:22px;color:var(--white);margin:2px 0}
.dh-kpi i{font-style:normal;font-size:10.5px;color:var(--text-dim)}
.dh-kpi.bad b{color:var(--danger)}
.dh-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;font-size:11px;color:var(--text-dim);margin-bottom:10px}
.dh-bar span{flex:1;min-width:200px}
.dh-item{border:1px solid var(--border-light);border-left:3px solid var(--border);border-radius:8px;margin-bottom:8px;background:var(--panel)}
.dh-item.sev-high{border-left-color:var(--danger)}
.dh-item.sev-medium{border-left-color:#f59e0b}
.dh-item.sev-low{border-left-color:var(--text-dim)}
.dh-item-main{display:flex;gap:10px;align-items:flex-start;padding:10px 12px}
.dh-item-main .ins-sev{margin-top:4px;flex:0 0 auto}
.dh-item-text{flex:1;min-width:0}
.dh-item-title{font-size:13px;font-weight:700;color:var(--white);display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.dh-n{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--ss-cyan)}
.dh-imp{font-size:11px;font-weight:600;color:#f59e0b}
.dh-area{font-size:10px;font-weight:600;color:var(--text-dim);text-transform:uppercase;letter-spacing:.05em;margin-left:auto}
.dh-item-why{font-size:11.5px;color:var(--text-sec);line-height:1.5;margin-top:3px}
.dh-item-acts{display:flex;gap:6px;align-items:center;flex:0 0 auto}
.dh-sample{margin:0 12px 10px 34px;padding:8px 10px;border-top:1px dashed var(--border-light);font-size:11px;color:var(--text-sec);list-style:disc}
.dh-sample li{margin:2px 0 2px 12px}
.dh-sample .dh-more{list-style:none;color:var(--text-dim);margin-left:0}
@media (max-width:700px){.dh-item-main{flex-wrap:wrap}.dh-item-acts{width:100%;justify-content:flex-end}.dh-area{margin-left:0}}

/* Edit Portfolio → Phases (js/ptForms.js _ptPfPhRows) */
.pt-pfph{display:flex;flex-direction:column;gap:6px}
.pt-pfph-head,.pt-pfph-row{display:grid;grid-template-columns:34px minmax(0,1fr) 92px auto;gap:6px;align-items:center}
.pt-pfph-head{font-size:10px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;padding:0 6px}
.pt-pfph-row{padding:6px;border:1px solid var(--border-light);border-radius:6px;background:var(--panel)}
.pt-pfph-on{display:flex;justify-content:center;cursor:pointer}
.pt-pfph-on input{width:16px;height:16px;accent-color:var(--ss-cyan)}
.pt-pfph-row .form-input{padding:5px 8px;font-size:12px;min-width:0}
.pt-pfph-name{font-weight:600}
.pt-pfph-desc{grid-column:2 / -1;font-size:11px !important;color:var(--text-sec)}
.pt-pfph-was{grid-column:2 / -1;font-size:10px;color:var(--text-dim);margin-top:-2px}
.pt-pfph-btns{display:flex;gap:2px}
.pt-pfph-btns .btn{padding:3px 7px;min-width:0}
.pt-pfph-btns .btn:disabled{opacity:.35;cursor:default}
.pt-pfph-add{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:8px}
.pt-pfph-add .form-select{width:auto;max-width:100%;font-size:12px;padding:5px 8px}
@media (max-width:600px){
  .pt-pfph-head,.pt-pfph-row{grid-template-columns:28px minmax(0,1fr) auto}
  .pt-pfph-head span:last-child{display:none}
  .pt-pfph-days{width:64px;justify-self:end}
  .pt-pfph-desc{grid-column:2;grid-row:2}
  .pt-pfph-btns{grid-column:3;grid-row:2}
}

/* New Entry: the route's approvers under Ticket Approver, and the route sheet import's people fields. */
.je-hint{font-size:10px;color:var(--text-dim);margin-top:4px;line-height:1.6}
.je-hint b{color:var(--text)}
.je-hint .je-hint-btn{font-size:10px;padding:1px 7px;margin-left:4px;vertical-align:baseline}
.rsi-official{margin-top:6px;padding:8px 10px;border-radius:8px;background:var(--success-dim);border:1px solid var(--success);color:var(--text)}
.rsi-who{font-size:11px;color:var(--text);margin:4px 0 6px}
.rsi-people-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.rsi-route .rsi-appr textarea{width:100%;font-size:11px;resize:vertical}
.rsi-route .rsi-appr input{width:100%;font-size:11px}
@media (max-width:600px){.rsi-people-grid{grid-template-columns:1fr}}
.md-official-banner{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:6px 4px 4px;padding:8px 12px;border-radius:8px;border:1px solid var(--success);background:var(--success-dim);font-size:11px;color:var(--text);line-height:1.5}
.md-official-banner.is-warn{border-color:var(--warn);background:var(--warn-dim)}
.md-official-banner span{flex:1;min-width:200px}

/* ── Polish pass ────────────────────────────────────────────────────────
   Small, additive fixes that apply across views. */

/* Two tokens used by older inline styles were never defined, so those
   inputs and boxes had no background at all. */
html[data-ui="pro"]{--bg-card:var(--panel);--bg-abyss:var(--pro-inset)}

/* Status colours written inline were picked for the dark themes: as text
   on a white panel, amber, green and cyan are too faint to read (about
   2:1). In the light themes, text in those colours takes the theme's own
   status colour. Only a colour set as the element's text colour matches
   (not a background or a border), and only inside views and windows. */
html[data-ui="pro"][data-theme-family="light"] :is(.view,.modal-overlay) :is([style^="color:#f59e0b"],[style*=";color:#f59e0b"],[style*="; color:#f59e0b"],[style^="color:#d97706"],[style*=";color:#d97706"]){color:var(--warn) !important}
html[data-ui="pro"][data-theme-family="light"] :is(.view,.modal-overlay) :is([style^="color:#10b981"],[style*=";color:#10b981"],[style*="; color:#10b981"],[style^="color:#22c55e"],[style*=";color:#22c55e"],[style*="; color:#22c55e"]){color:var(--success) !important}
html[data-ui="pro"][data-theme-family="light"] :is(.view,.modal-overlay) :is([style^="color:#ef4444"],[style*=";color:#ef4444"],[style*="; color:#ef4444"]){color:var(--danger) !important}
html[data-ui="pro"][data-theme-family="light"] :is(.view,.modal-overlay) :is([style^="color:#06b6d4"],[style*=";color:#06b6d4"],[style*="; color:#06b6d4"]){color:#0e7490 !important}

/* A message about a save must not sit behind the window that caused it. */
html[data-ui="pro"] .toast{z-index:11000;cursor:pointer}

/* The floating buttons belong to the page, not to a window over it. */
body:has(.modal-overlay:not([style*="display:none"]):not([style*="display: none"])) :is(.qa-fab,.tfab){display:none !important}

/* Job Tracker's seven tiles: one row only where each still fits its
   label; otherwise they wrap instead of cutting "Commissioning" short. */
@media (min-width:1000px){
  #jtSummary.jt-summary{flex-wrap:wrap !important}
  #jtSummary.jt-summary > *{flex:1 1 112px !important;min-width:112px}
}

/* Board cards: a steady badge instead of one that pulses for ever (every
   open card repainted continuously while the board was on screen), and
   only the properties that change are animated. */
.jt-card-status-open .jt-card-status{animation:none;box-shadow:0 0 0 2px rgba(6,182,212,.14)}
.jt-card{transition:border-color var(--tr),box-shadow var(--tr),transform var(--tr)}

/* The view fades in once (the cross-fade); a second slide on top of it
   made every page change feel slower than it was. */
@supports (view-transition-name:none){.view.active{animation:none}}

/* Phones. */
@media (max-width:600px){
  /* Nothing a thumb has to read is smaller than 11px. */
  .stat-label{font-size:11px !important}
  .bottom-nav-tab span{font-size:11px}
  .notif-badge{font-size:10px !important;min-width:16px !important;height:16px !important}
  /* Two- and three-column form rows inside a window become one column. */
  .modal-overlay [style*="grid-template-columns:1fr 1fr"],
  .modal-overlay [style*="grid-template-columns: 1fr 1fr"],
  .modal-overlay [style*="grid-template-columns:repeat(2"],
  .modal-overlay [style*="grid-template-columns:repeat(3"]{grid-template-columns:1fr !important}
  /* The timesheet's "no lines yet" message stays in view while the grid
     behind it scrolls sideways. */
  #tsBody .empty-state{position:sticky;left:0;width:calc(100vw - 64px);max-width:100%;box-sizing:border-box}
}
/* Keyboard shortcuts and right-click hints mean nothing on a touch screen. */
@media (hover:none) and (pointer:coarse){
  .kbd-hint,.pu-kbd,.xt-rc-hint,.cmdk-trigger-kbd{display:none !important}
}

/* Job Tracker: the "N of M shown · Show more" line under a capped list. */
.jt-more{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;padding:10px 8px;font-size:12px;color:var(--text-dim)}
.jt-card-grid + .jt-more{padding:16px 8px}

/* ── Phones: Job Tracker ────────────────────────────────────────────────
   The seven tiles and the filter card filled the first screen and most
   of the second before any entry appeared. On a phone the tiles are one
   row that slides sideways, and the dropdowns and dates fold away behind
   the Filters button (jtToggleFilters in js/views.js), which says how
   many are on. The search box, the view buttons and the count stay. */
.jt-f-toggle{display:none}
@media (max-width:640px){
  #jtSummary.jt-summary{flex-wrap:nowrap !important;overflow-x:auto;scroll-snap-type:x proximity;scrollbar-width:none;-webkit-overflow-scrolling:touch;gap:8px}
  #jtSummary.jt-summary::-webkit-scrollbar{display:none}
  /* A little under a third each, so the fourth tile shows its edge and
     the row reads as one that slides. */
  #jtSummary.jt-summary > *{flex:0 0 29% !important;min-width:0;scroll-snap-align:start}

  /* One wrapping row holds every control, so their order can be set here:
     search and view buttons, then Filters and the count, then the rest. */
  .jt-filters{flex-direction:row;flex-wrap:wrap;align-items:center}
  .jt-filters > .jt-f-top{flex:1 1 100%}
  .jt-filters > .jt-f-row{display:contents}
  .jt-f-top .seg-group .btn{min-height:36px}
  .jt-f-toggle{display:inline-flex;align-items:center;order:1;min-height:36px;padding:6px 14px;font-size:13px}
  .jt-f-toggle.is-on{border-color:var(--ss-cyan);color:var(--ss-cyan)}
  #jtResultCount{order:1}
  .jt-filters:not(.jt-f-open) .jt-f-row > :not(.jt-f-toggle):not(#jtResultCount){display:none}
  /* Dropdowns two to a row, tall enough for a thumb. */
  #view-jobtracker .jt-f-row .form-select{order:2;flex:1 1 calc(50% - 6px);min-width:0;min-height:36px;font-size:13px}
  #view-jobtracker .jt-f-row .jt-f-lbl{order:3;flex:1 1 100%;margin:2px 0 -4px}
  #view-jobtracker .jt-f-row .form-input[type=date]{order:3;flex:1 1 40%;min-width:0;min-height:36px;font-size:13px}
  #view-jobtracker .jt-f-row .jt-f-dash{order:3}
  #view-jobtracker #jtAssignedToggle{order:4;flex:1 1 100%;min-height:36px;justify-content:center;font-size:13px}
}

/* ── Phones: the timesheet grid ─────────────────────────────────────────
   The grid is wider than a phone, so only Monday to Wednesday showed;
   sliding it sideways to reach the other days slid the site off screen,
   and the remove button and totals were never on screen with it. On a
   phone each line is a block of its own: the site and its details across
   the top, then ST / OT / Mi / Veh as four rows of seven days that fit
   the width. Nothing slides sideways. Same table, laid out as a grid. */
@media (max-width:600px){
  #view-timesheet .ts-grid-wrap{overflow-x:visible !important}
  #view-timesheet #tsTable,
  #view-timesheet #tsTable > thead,
  #view-timesheet #tsTable > tbody,
  #view-timesheet #tsTable > tfoot{display:block;width:100%}
  #view-timesheet #tsTable tr{display:grid;grid-template-columns:26px repeat(7,minmax(0,1fr)) 40px;align-items:center}
  #view-timesheet #tsTable th,
  #view-timesheet #tsTable td{display:block;min-width:0 !important;width:auto;max-width:none;padding:3px 2px;border-bottom:0;box-sizing:border-box}
  /* A message row, the gap under a line, a totals label: full width. */
  #view-timesheet #tsTable td[colspan]{grid-column:1 / -1}

  /* Week header: day names and dates over the seven columns. */
  #view-timesheet #tsHead th:first-child,
  #view-timesheet #tsHead th:last-child{display:none}
  #view-timesheet #tsHead th{padding:6px 0;font-size:11px;text-align:center}
  #view-timesheet #tsHead tr{padding:0 7px;border-bottom:1px solid var(--border)}

  /* One line. Details take the first row with the remove button at its
     end; the hours rows follow. */
  #view-timesheet #tsBody tr.ts-row-header{margin-top:12px;padding:4px 6px 0;border:1px solid var(--border);border-bottom:0;border-radius:10px 10px 0 0}
  #view-timesheet #tsBody tr.ts-row-header ~ tr:not(.ts-row-header){padding:0 6px;border-left:1px solid var(--border);border-right:1px solid var(--border);background:var(--pro-inset,var(--card))}
  #view-timesheet #tsBody tr.ts-row-header > td.ts-detail{grid-column:1 / 9;grid-row:1;padding:6px 0 8px !important}
  #view-timesheet #tsBody tr.ts-row-header > td:last-child{grid-column:9;grid-row:1;align-self:start;padding:2px 0 0;text-align:right}
  #view-timesheet #tsBody tr.ts-row-header > td:last-child .btn{min-width:36px;min-height:36px;padding:0;justify-content:center}
  /* The day names over a line's first row of boxes (data-day, set in
     renderTimesheetGrid). The row label and total drop to box height. */
  #view-timesheet #tsBody td[data-day]::before{content:attr(data-day);display:block;font-size:11px;font-weight:600;line-height:16px;color:var(--text-dim);text-align:center}
  #view-timesheet #tsBody tr.ts-row-header > td.ts-type,
  #view-timesheet #tsBody tr.ts-row-header > td.ts-total{padding-top:19px}
  #view-timesheet #tsBody td.ts-type{text-align:left;padding-left:0;padding-right:0;font-size:11px}
  #view-timesheet #tsBody td.ts-total{font-size:12px}
  /* The spacer row under a line closes its block. */
  #view-timesheet #tsBody tr.ts-row-header ~ tr:has(> td[colspan]){border-bottom:1px solid var(--border);border-radius:0 0 10px 10px}
  #view-timesheet #tsBody tr.ts-row-header ~ tr > td[colspan]{height:6px !important}
  /* Hours boxes: as wide as their column, tall enough to hit. */
  #view-timesheet #tsTable input[type="number"]{width:100%;height:36px;padding:0;font-size:13px;box-sizing:border-box;border-radius:6px}

  /* Details: full-width boxes with readable text. */
  #view-timesheet #tsBody td.ts-detail > input[type="text"]{height:38px;font-size:14px !important;padding:6px 10px !important;box-sizing:border-box}
  #view-timesheet #tsBody td.ts-detail > div[style*="display:flex"] > input[type="text"],
  #view-timesheet #tsBody td.ts-detail .ts-desc-expand{height:36px;font-size:13px !important;box-sizing:border-box}
  #view-timesheet #tsBody td.ts-detail .ts-desc-expand{min-width:36px;font-size:15px !important}
  #view-timesheet #tsBody td.ts-detail div[style*="display:grid"]{gap:6px !important;margin-top:6px !important}
  /* An approver's name needs the whole row; GP needs only its tick box. */
  #view-timesheet #tsBody td.ts-detail select[data-f$="Approver"]{grid-column:1 / -1}
  #view-timesheet #tsBody td.ts-detail div[style*="1fr 1fr 1fr"]{grid-template-columns:1fr 1fr auto !important}
  #view-timesheet #tsBody td.ts-detail div[style*="display:grid"] > :is(input[type="text"],select,label),
  #view-timesheet #tsBody td.ts-detail > input[type="text"][style*="font-size:10px"]{height:34px;font-size:12.5px !important;padding:4px 8px !important}

  /* Week totals: the label on its own line, the seven days under it. */
  #view-timesheet #tsFoot{margin-top:12px}
  #view-timesheet #tsFoot tr{padding:0 7px}
  #view-timesheet #tsFoot td[colspan]{text-align:left !important;padding:8px 0 0}
  #view-timesheet #tsFoot td[colspan] + td{grid-column-start:2}
  #view-timesheet #tsFoot td:last-child{display:none}
  #view-timesheet #tsFoot td.ts-total{font-size:12px;padding:4px 0 6px}
  /* History's buttons wrap under its title; the last one ran off the edge. */
  #view-timesheet .card-header{flex-wrap:wrap}
}

/* ── One status pill ────────────────────────────────────────────────────
   Fourteen classes drew a status label fourteen ways: 9 to 12px, capitals
   or not, a typewriter face on some, corners from 3px to fully round.
   Each keeps its own colours (they say different things) and takes one
   shape and one size from here. Left alone on purpose: alarm states
   (.al-st, drawn as an annunciator), the customer portal (.cp-badge, its
   own look), counts (.ef-badge, .jtp-chip-count) and the Saved marker. */
.tag,.jtp-chip:not(.jtp-chip-count),.jt-card-status,.md-chip,.perm-pill,.ins-pill,.ins-chip,.pp-st,.tm-sec,.tm-st,.mf-st,.dw-state,.in-chip,.wt-chip{
  font-family:inherit;font-size:11px;font-weight:600;line-height:1.5;letter-spacing:0;text-transform:none;
  padding:2px 8px;border-radius:999px;white-space:nowrap;
}
/* A project's status is stored in small letters ("on hold"). */
.pp-st{display:inline-block}
.pp-st::first-letter{text-transform:uppercase}

/* ── One close button ───────────────────────────────────────────────────
   .pt-x-close (above) is the close button of every window: uiCloseButton
   in js/app.js puts it on whatever a window's header was built with. On a
   touch screen it is a size a thumb can hit. */
@media (pointer:coarse){.pt-x-close{width:40px;height:40px}}
