/* ============================================================
   My MaNaGeR — Core Stylesheet
   ============================================================ */

/* ---- SVG Icon System ---- */
.ico{width:1em;height:1em;display:inline-block;vertical-align:-0.14em;fill:none;stroke:currentColor;
  stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0;}
.ico-dot{stroke:none;}
svg.ico use{fill:inherit;stroke:inherit;}

/* ---- Design Tokens ---- */
:root{
  /* Light-first palette: crisp white cards on a cool-gray canvas, near-black
     text, restrained high-contrast accents. Dark mode is an opt-in override
     (body.dark-mode) — never the default presentation. */
  --canvas:#f4f5f7;--card:#ffffff;--border:#e5e7eb;--text:#0f172a;--slate:#64748b;
  --gold:#b45309;--green:#047857;--danger:#dc2626;--amber:#c2410c;--blue:#2563eb;
  --on-gold:#ffffff;   /* foreground placed on gold surfaces (light) */
  --tile-bg:#f8fafc;    /* dashboard stat tiles (EVM etc.) */
  --track-bg:#eef1f6;   /* progress-bar track wells */
  --radius:8px;
  --tr:120ms cubic-bezier(0.25,1,0.5,1);
  --ease-ios:cubic-bezier(0.25,1,0.5,1);
  --spring:cubic-bezier(0.25,1,0.5,1);

  /* ---- Surface tokens (light: glass is retired — solid, crisp surfaces) ---- */
  --glass-blur:0px;
  --glass-saturate:100%;
  --glass-fill-dark:#ffffff;            /* solid white — no frosted effect on light */
  --glass-fill-dark-hover:#f8fafc;
  --glass-fill-dark-active:#eef1f6;
  --glass-rim:inset 0 1px 0 rgba(255,255,255,0);   /* transparent on light — hairline border carries the edge */
  --glass-rim-strong:inset 0 1px 0 #ffffff;
  --glass-border:1px solid #e5e7eb;
  --glass-shadow:0 1px 2px rgba(16,24,40,0.04),0 6px 18px rgba(16,24,40,0.06);

  /* ---- Squircle corner radii (spec §2) ---- */
  --squircle-sm:14px;
  --squircle-md:20px;
  --squircle-lg:28px;
  --squircle-pill:999px;

  /* ---- Motion (spec §4) ---- */
  --spring-press:cubic-bezier(0.34,1.56,0.64,1);   /* overshoot spring, release */
  --spring-in:cubic-bezier(0.4,0,0.2,1);           /* press-down, no overshoot */
  --press-scale:0.96;
  --press-duration:90ms;
  --release-duration:260ms;

  /* ---- Android toggle-state contrast (spec §5) ---- */
  --toggle-on-bg:#111827;
  --toggle-on-fg:#ffffff;
  --toggle-off-bg:rgba(15,23,42,0.07);
  --toggle-off-fg:#334155;
}

/* ---- Dark Mode (opt-in only) ---- */
body.dark-mode{
  --canvas:#090a0f;--card:#12141c;--border:#222533;--text:#e2e8f0;--slate:#64748b;
  --gold:#f59e0b;--green:#10b981;--danger:#ef4444;--amber:#f59e0b;--blue:#3b82f6;
  --on-gold:#0b0c10;
  --tile-bg:rgba(0,0,0,.2);
  --track-bg:rgba(255,255,255,.06);
  /* Glass reads as white-frost over a dark canvas; rim is a specular highlight */
  --glass-blur:20px;
  --glass-saturate:180%;
  --glass-fill-dark:rgba(255,255,255,0.08);
  --glass-fill-dark-hover:rgba(255,255,255,0.12);
  --glass-fill-dark-active:rgba(255,255,255,0.16);
  --glass-rim:inset 0 1px 0 rgba(255,255,255,0.15);
  --glass-rim-strong:inset 0 1px 0 rgba(255,255,255,0.28);
  --glass-border:1px solid rgba(255,255,255,0.10);
  --glass-shadow:0 8px 24px rgba(0,0,0,0.35);
  --toggle-on-bg:#ffffff;
  --toggle-on-fg:#111827;
  --toggle-off-bg:rgba(255,255,255,0.10);
  --toggle-off-fg:#e2e8f0;
}

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

body{
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",Roboto,sans-serif;
  background:var(--canvas);color:var(--text);min-height:100vh;overflow-x:hidden;
  cursor:default;letter-spacing:-0.01em;
}

/* ---- Crosshair cursor (opt-in only) ---- */
body.crosshair-on{cursor:crosshair;}
#cx,#cy{position:fixed;pointer-events:none;z-index:9999;background:rgba(212,175,55,0.15);}
#cx{width:100vw;height:1px;left:0;top:0;}
#cy{width:1px;height:100vh;left:0;top:0;}
body:not(.crosshair-on) #cx,body:not(.crosshair-on) #cy{display:none;}

/* ---- Header ---- */
#app-header{position:sticky;top:0;z-index:100;background:var(--card);border-bottom:1px solid var(--border);padding:12px 24px;display:flex;align-items:center;justify-content:space-between;gap:20px;}
.greeting{font-size:1.05rem;font-weight:700;color:var(--gold);letter-spacing:.5px;white-space:nowrap;}
.tab-ctrl{display:flex;background:#eef1f6;border-radius:100px;padding:4px;gap:2px;}
.tab-btn{position:relative;z-index:1;padding:8px 18px;border:none;background:transparent;color:var(--slate);font-size:.85rem;font-weight:600;border-radius:100px;cursor:pointer;transition:color var(--tr);}
.tab-btn:hover{color:var(--green);}
.tab-btn.active{color:var(--on-gold);background:var(--gold);}
.hdr-right{display:flex;align-items:center;gap:10px;}
.lock-ind{display:flex;align-items:center;gap:6px;font-size:.75rem;color:var(--gold);opacity:0;transition:opacity var(--tr);}
.lock-ind.on{opacity:1;}
.settings-btn{background:none;border:1px solid var(--border);color:var(--slate);width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:.95rem;transition:all var(--tr);}
.settings-btn:hover{color:var(--gold);border-color:var(--gold);transform:rotate(45deg);}

/* ---- Focus Mode ---- */
/* Only the active panel + the exit chip remain. Everything else — header,
   section nav, drawer, undo bar, modals, learning card, tooltips, crosshair,
   output modal — is hidden so the working panel owns the whole viewport.
   (Monolith parity: the monolith hid the same chrome; this port goes further
   and also hides the drawer/modals that could linger over the panel.) */
body.focus-mode #app-header,body.focus-mode .vl,
body.focus-mode .tab-ctrl,body.focus-mode .hdr-right,
body.focus-mode .sec-nav,body.focus-mode #drw,body.focus-mode #ub,
body.focus-mode #om,body.focus-mode #cx,body.focus-mode #cy,
body.focus-mode #meth-learn-card,body.focus-mode #gantt-tip,
body.focus-mode #cfm-modal,body.focus-mode #conflict-modal,
body.focus-mode #chartup-modal,body.focus-mode #wbsimport-modal,
body.focus-mode #importdates-modal,body.focus-mode .hp{display:none!important;}
body.focus-mode .panel{display:none!important;}
body.focus-mode .panel.active{display:block!important;}
.focus-ind{display:none;}
body.focus-mode .focus-ind{display:flex;position:fixed;top:10px;right:10px;background:rgba(212,175,55,.1);border:1px solid var(--gold);border-radius:100px;padding:5px 14px;font-size:.7rem;color:var(--gold);z-index:200;align-items:center;gap:6px;box-shadow:var(--glass-rim);}

/* ---- Section Navigation ---- */
#app-main{padding:18px 24px;max-width:1600px;margin:0 auto;}
.sec-nav{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap;}
/* STRUCTURAL-IA §2: grouped nav (Option A) — eyebrow labels + divider */
.nav-group{display:inline-flex;align-items:center;gap:6px;}
.nav-group + .nav-group{position:relative;padding-left:14px;margin-left:4px;}
.nav-group + .nav-group::before{content:'';position:absolute;left:0;top:18%;height:64%;width:1px;background:var(--border);}
.nav-group-label{font-size:.58rem;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--slate);margin-right:2px;white-space:nowrap;}
.sec-btn{padding:6px 14px;border:1px solid var(--border);border-radius:100px;background:transparent;color:var(--slate);font-size:.78rem;cursor:pointer;transition:all var(--tr);display:inline-flex;align-items:center;gap:6px;}
.sec-btn.active,.sec-btn:hover{border-color:var(--green);color:var(--green);}
/* The active pill stays the strongest signal in the nav — brighter than the group dividers */
.sec-nav .sec-btn.active{box-shadow:0 0 0 1px var(--green);background:rgba(16,185,129,.08);}
.ic-svg{width:18px;height:18px;flex-shrink:0;vertical-align:-3px;}
.ic-ct{width:20px;height:20px;flex-shrink:0;margin-right:4px;vertical-align:-4px;}
.panel{display:none;}
.panel.active{display:block;}

/* ---- STRUCTURAL-IA §4 hierarchy: Tier 3 (passive) cards recede ---- */
.tier3 .stat{font-size:.95rem;color:var(--slate);font-weight:600;}
/* §4 Tier 1: non-zero Blocked / Overdue / Live Issues get the strongest
   static treatment — existing --danger token, size only, no motion. */
#health-card.has-danger .fb-sm .badge.br{font-size:.82rem;font-weight:800;background:rgba(239,68,68,.22);}
#health-card.has-danger #h-od,#health-card.has-danger #h-bl,#health-card.has-danger #h-is{box-shadow:0 0 0 1px var(--danger);}
/* §1: brand-new project — the whole health card reads quieter */
#health-card.health-empty .fb-sm{opacity:.55;}

/* ---- Cards ---- */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:18px;transition:border-color var(--tr),background var(--tr);}
.card:hover{border-color:#cbd5e1;}
.card-title{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--slate);margin-bottom:14px;display:flex;align-items:center;justify-content:space-between;}

/* ---- Grids ---- */
.g2{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
.g3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px;}
.g4{display:grid;grid-template-columns:1fr 1fr 1fr 1fr;gap:16px;}

/* ---- Progress Ring ---- */
.pring{position:relative;width:96px;height:96px;}
.pring svg{transform:rotate(-90deg);}
.ring-bg{fill:none;stroke:var(--border);stroke-width:6;}
.ring-fill{fill:none;stroke:var(--green);stroke-width:6;stroke-linecap:round;transition:stroke-dashoffset .5s ease;}
.ring-txt{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:.82rem;font-weight:700;color:var(--gold);text-align:center;line-height:1.15;padding:4px;}

/* ---- Badges ---- */
.badge{display:inline-flex;align-items:center;padding:3px 10px;border-radius:100px;font-size:.72rem;font-weight:600;}
.bg{background:rgba(0,155,58,.2);color:var(--green);border:1px solid var(--green);}
.ba{background:rgba(255,193,7,.2);color:var(--amber);border:1px solid var(--amber);}
.br{background:rgba(220,53,69,.2);color:var(--danger);border:1px solid var(--danger);}
.bo{background:rgba(212,175,55,.2);color:var(--gold);border:1px solid var(--gold);}
.bs{background:rgba(138,149,165,.15);color:var(--slate);border:1px solid var(--slate);}

/* ---- RACI ---- */
.raci-cell{width:46px;height:34px;border-radius:8px;font-weight:800;font-size:.85rem;cursor:pointer;transition:all var(--tr);font-family:inherit;}
.raci-cell:hover{transform:scale(1.1);filter:brightness(1.25);}
.raci-cell:focus-visible{outline:2px solid var(--gold);outline-offset:2px;}
.raci-legend-chip{display:inline-flex;align-items:center;gap:5px;}
.raci-legend-swatch{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:5px;font-weight:800;font-size:.66rem;flex-shrink:0;}

/* ---- Tables ---- */
.dt{width:100%;border-collapse:collapse;font-size:.78rem;}
.dt th{background:#f8fafc;color:var(--slate);text-transform:uppercase;font-size:.68rem;letter-spacing:.5px;padding:9px 11px;text-align:left;border-bottom:1px solid var(--border);}
.dt td{padding:7px 11px;border-bottom:1px solid #f1f5f9;color:var(--text);vertical-align:middle;}
.dt td input,.dt td select,.dt td textarea{background:transparent;border:none;color:var(--text);font-size:.78rem;width:100%;outline:none;font-family:inherit;}
.dt td input:focus,.dt td select:focus{border-bottom:1px solid var(--gold);}
.dt tbody tr{transition:background var(--tr);}
.dt tbody tr:hover{background:#f8fafc;}
.dt tbody tr.overdue td{border-left:3px solid var(--danger);background:rgba(239,68,68,.05);}
.dt tbody tr.overdue td:not(:first-child){border-left:none;}

/* ---- Buttons ---- */
.btn{display:inline-flex;align-items:center;gap:5px;padding:7px 14px;border-radius:6px;border:none;font-size:.78rem;font-weight:600;cursor:pointer;transition:background var(--tr),border-color var(--tr),color var(--tr),filter var(--tr);}
.btn:active,.kc:active{filter:brightness(1.15);}
.btn-g{background:var(--green);color:#fff;}.btn-g:hover{background:#03644f;}
.btn-o{background:var(--gold);color:var(--on-gold);}.btn-o:hover{background:#92400e;}
.btn-n{background:transparent;border:1px solid var(--border);color:var(--slate);}.btn-n:hover{border-color:var(--green);color:var(--green);}
.btn-d{background:transparent;border:1px solid var(--danger);color:var(--danger);}.btn-d:hover{background:var(--danger);color:#fff;}
.btn-s{padding:4px 9px;font-size:.72rem;}

/* ---- Toolbar ---- */
.toolbar{display:flex;gap:7px;margin-bottom:14px;flex-wrap:wrap;align-items:center;}

/* ---- WBS Level Indentation ---- */
.wl0 td:nth-child(4){padding-left:12px;font-weight:700;color:var(--gold);}
.wl1 td:nth-child(4){padding-left:26px;}
.wl2 td:nth-child(4){padding-left:40px;}
.wl3 td:nth-child(4){padding-left:54px;}
.cbtn{background:none;border:none;color:var(--gold);cursor:pointer;padding:0 4px;font-size:.68rem;transition:transform var(--tr);}
.cbtn.cls{transform:rotate(-90deg);}

/* ---- Gantt Chart ---- */
.gw{display:grid;grid-template-columns:340px 1fr;gap:0;overflow-x:auto;}
.gl{border-right:2px solid var(--border);}
.gc{overflow-x:auto;position:relative;}
.gh{display:flex;background:#f8fafc;border-bottom:1px solid var(--border);font-size:.68rem;color:var(--slate);}
.gd{min-width:28px;text-align:center;padding:7px 2px;border-right:1px dotted var(--border);}
.gr{height:34px;position:relative;border-bottom:1px solid #f1f5f9;display:flex;align-items:center;}
.gb{position:absolute;height:20px;border-radius:3px;background:var(--green);display:flex;align-items:center;padding:0 6px;font-size:.63rem;color:#fff;white-space:nowrap;overflow:hidden;transition:all var(--tr);cursor:pointer;}
.gb.crit{background:var(--gold);color:var(--on-gold);}
.gb.od{background:#7f1d1d;color:#fee2e2;}
@keyframes pulse-a{0%,100%{box-shadow:0 0 0 0 rgba(255,193,7,.4);}50%{box-shadow:0 0 0 6px rgba(255,193,7,0);}}
.gb.pls,.kc.pls{animation:pulse-a 1.5s ease-in-out infinite;}
.gb.pls{border:1px solid var(--amber);}
.gb.dn{opacity:.45;}
.gb.leadtime{background:repeating-linear-gradient(45deg,rgba(212,175,55,.45) 0 6px,rgba(212,175,55,.15) 6px 12px)!important;border:1px dashed var(--gold)!important;color:#0b0c10!important;}
.gb.recurring{background:repeating-linear-gradient(-45deg,rgba(59,130,246,.4) 0 6px,rgba(59,130,246,.12) 6px 12px)!important;border:1px dotted #3B82F6!important;color:#0b0c10!important;}
.gb.lowconf{outline:1.5px dotted var(--amber);outline-offset:1px;}
.gb.wex{background:repeating-linear-gradient(90deg,rgba(56,189,248,.35) 0 8px,rgba(56,189,248,.12) 8px 16px)!important;border:1px solid rgba(56,189,248,.5)!important;color:#0b0c10!important;}
.float-badge{font-size:.58rem;padding:0 4px;border-radius:2px;background:#eef1f6;color:var(--slate);white-space:nowrap;}
.kc .lt-card-urgent{color:var(--danger);font-weight:700;}
.kc .lt-card-ok{color:var(--slate);}
/* ---- Gap-17 cleanup: named classes replacing static inline styles ----
   project.html static markup carries ZERO inline styles; runtime
   show/hide toggles use the .is-hide class (swapped via classList, never
   style.display), so the CSP comment stays truthful. */
.is-hide{display:none!important;}
.mt16{margin-top:16px;}
.g6.align-end{align-items:flex-end;}
.health-section{margin-top:14px;border-top:1px solid var(--border);padding-top:12px;}
.hs-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.hs-num-box{text-align:center;}
.hs-num{font-size:2.4rem;font-weight:900;line-height:1;}
.hs-suffix{font-size:.68rem;color:var(--slate);margin-top:2px;}
.hs-main{flex:1;min-width:180px;}
.hs-track{height:10px;background:var(--border);border-radius:5px;overflow:hidden;margin-bottom:8px;}
#health-bar{height:100%;border-radius:5px;transition:width .5s ease;}
#health-score-label{font-size:.82rem;font-weight:700;}
#health-breakdown{font-size:.7rem;color:var(--slate);display:flex;flex-direction:column;gap:3px;margin-top:8px;}
.evm-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;}
.evm-tile{text-align:center;padding:12px;background:var(--tile-bg);border-radius:6px;}
.evm-tile-label{font-size:.65rem;color:var(--slate);text-transform:uppercase;letter-spacing:.5px;}
.evm-tile-val{font-size:1.4rem;font-weight:700;}
.evm-tile-sub{font-size:.65rem;}
#evm-ev-lbl{color:var(--slate);}
.evm-grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:6px;font-size:.76rem;margin-top:10px;}
.fw-b{font-weight:700;}
.evm-grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-top:12px;}
.evm-tile-sm{text-align:center;padding:10px 6px;background:var(--tile-bg);border-radius:6px;}
.evm-tile-label-sm{font-size:.6rem;color:var(--slate);text-transform:uppercase;letter-spacing:.5px;}
.evm-tile-val-sm{font-size:1.1rem;font-weight:700;}
.evm-tile-sub-sm{font-size:.58rem;color:var(--slate);}
#milestone-timeline{overflow-x:auto;padding:10px 0;}
.mc-field-label{font-size:.7rem;color:var(--gold);display:block;margin-bottom:3px;}
.mc-input{background:var(--card);border:1px solid var(--border);border-radius:5px;color:var(--text);padding:6px 10px;font-size:.8rem;}
#mc-risk-factor{width:120px;}
#mc-result{margin-top:14px;}
#mc-headline{font-size:1.2rem;font-weight:700;color:var(--gold);margin-bottom:6px;}
#mc-detail{font-size:.78rem;color:var(--text);margin-bottom:10px;}
#mc-dist-bar{margin-bottom:8px;}
#mc-percentiles{font-size:.7rem;color:var(--slate);}
#mc-error{font-size:.78rem;color:var(--danger);margin-top:10px;}
#bud-committed-pct,#bud-spent-pct,#bud-remaining-pct{color:var(--slate);}
.bud-bar-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;}
.bud-track{background:var(--track-bg);border:1px solid var(--border);border-radius:99px;height:10px;overflow:hidden;}
#bud-bar{height:100%;width:0%;background:var(--green);transition:width var(--tr),background var(--tr);}
#bud-bar-warn{margin-top:8px;font-size:.72rem;color:var(--danger);}
#bud-overrun-alert{margin-bottom:14px;background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.3);border-radius:var(--radius);padding:10px 14px;font-size:.76rem;color:var(--danger);}
.meet-kickoff-list{font-size:.78rem;line-height:1.7;margin-top:10px;padding-left:4px;list-style:none;}
.meet-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;margin-top:10px;}
.cu-row{display:flex;gap:8px;align-items:center;margin-bottom:6px;flex-wrap:wrap;}
.cu-file-name{font-size:.72rem;color:var(--slate);}
.cu-hint-mt{margin-bottom:6px;font-size:.72rem;color:var(--slate);}
.cu-hint2{font-size:.68rem;color:var(--slate);margin-top:4px;}
.gd-hl{font-weight:700;color:var(--gold);}
.float-badge.float-critical{color:var(--danger);font-weight:700;}
.float-badge.float-consumed{color:var(--amber);}

/* ---- Critical Path Highlighter (monolith port) ---- */
/* body.hl-critical is set by the Gantt toolbar chip: only the critical
   chain stays bright, everything else is dimmed to ~30% (monolith S.cp). */
body.hl-critical .gb:not(.crit):not(.gb-base){opacity:.3;}
body.hl-critical #gantt-labels .gr.hl-dim{opacity:.3;}

/* ---- Dashboard secondary panels (V3.3 monolith port) ---- */
.ct-sub{font-size:.65rem;font-weight:400;color:var(--slate);margin-left:8px;vertical-align:middle;}
.wx-controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-bottom:8px;font-size:.72rem;}
.wx-field{display:flex;align-items:center;gap:4px;color:var(--slate);}
.wx-field input{font-size:.7rem;background:var(--canvas);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:3px 6px;}
.wx-field input[type=number]{width:65px;}
.wx-field input:focus{outline:none;border-color:var(--gold);}
.wx-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:10px;}
.wx-stat{text-align:center;padding:8px;background:#f8fafc;border-radius:5px;}
.wx-stat .k{font-size:.6rem;color:var(--slate);text-transform:uppercase;letter-spacing:.4px;}
.wx-stat .v{font-size:1.1rem;font-weight:700;}
.wx-warn{font-size:.72rem;color:var(--danger);padding:6px 10px;background:rgba(220,53,69,.08);border-radius:4px;margin-bottom:8px;display:flex;align-items:center;gap:6px;}
.wx-empty{font-size:.72rem;color:var(--slate);display:flex;align-items:center;gap:5px;}
.wx-empty svg{font-size:.7rem;}

/* ---- ACTION-PLAN 7: Open-Meteo forecast strip + risk flags ---- */
.wfr-alert{display:flex;align-items:flex-start;gap:8px;font-size:.74rem;padding:9px 12px;border-radius:6px;margin-bottom:10px;line-height:1.5;}
.wfr-alert .ico{flex-shrink:0;margin-top:1px;}
.wfr-heat{background:rgba(220,53,69,.1);border:1px solid rgba(220,53,69,.35);color:var(--danger);}
.wfr-cold{background:rgba(59,130,246,.1);border:1px solid rgba(59,130,246,.4);color:#3b82f6;}
.wfr-strip{display:flex;gap:6px;overflow-x:auto;padding:2px 0 8px;}
.wfr-day{flex:1;min-width:52px;text-align:center;padding:7px 4px;border-radius:6px;background:#f8fafc;border:1px solid var(--border);}
.wfr-day.wfr-risk{background:rgba(245,158,11,.14);border-color:rgba(245,158,11,.45);}
.wfr-day.wfr-heat{background:rgba(220,53,69,.14);border-color:rgba(220,53,69,.45);}
.wfr-dow{font-size:.6rem;color:var(--slate);text-transform:uppercase;letter-spacing:.5px;}
.wfr-lbl{font-size:.72rem;font-weight:700;margin-top:2px;}
.wfr-risk-row{font-size:.72rem;padding:4px 0;color:var(--text);}
.wfr-ok{font-size:.72rem;color:var(--green);display:flex;align-items:center;gap:6px;padding:4px 0;}
.wfr-meta{font-size:.62rem;color:var(--slate);margin-top:8px;}
#wx-place-in{width:140px;}

.fw-section{margin-bottom:8px;}
.fw-h{font-size:.68rem;text-transform:uppercase;letter-spacing:.5px;font-weight:700;margin-bottom:4px;display:flex;align-items:center;gap:5px;}
.fw-h.crit{color:var(--danger);}
.fw-h.nc{color:var(--amber);}
.fw-h.cc{color:var(--gold);}
.fw-row{display:flex;justify-content:space-between;gap:10px;padding:5px 8px;border-left:3px solid;margin-bottom:3px;font-size:.72rem;align-items:baseline;}
.fw-row.crit{background:rgba(220,53,69,.05);border-color:var(--danger);}
.fw-row.nc{background:rgba(255,193,7,.05);border-color:var(--amber);}
.fw-row.cc{background:rgba(212,175,55,.05);border-color:var(--gold);}
.fw-meta{color:var(--slate);font-size:.66rem;white-space:nowrap;}
.fw-note{font-size:.65rem;color:var(--slate);margin-top:4px;font-style:italic;}
.fw-empty{font-size:.72rem;color:var(--slate);}
.fw-ok{font-size:.72rem;color:var(--green);display:flex;align-items:center;gap:5px;}
.fw-ok svg{font-size:.7rem;}

.sc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px;}
.sc-cell{padding:10px;background:#f8fafc;border-radius:6px;text-align:center;}
.sc-cell .big{font-size:1.7rem;font-weight:900;line-height:1.15;}
.sc-cell .lbl{font-size:.65rem;color:var(--slate);margin-top:3px;}

.lt-table{width:100%;font-size:.72rem;border-collapse:collapse;}
.lt-table th{text-align:left;color:var(--slate);font-size:.62rem;text-transform:uppercase;letter-spacing:.4px;padding:4px 6px;border-bottom:1px solid var(--border);font-weight:600;}
.lt-table td{padding:5px 6px;border-bottom:1px solid #f1f5f9;}
.lt-table tr.lt-warn{background:rgba(220,53,69,.08);}
.lt-days{font-weight:600;}
.lt-days.red{color:var(--danger);font-weight:700;}
.lt-days.amber{color:var(--amber);}
.lt-empty{font-size:.72rem;color:var(--slate);}
.lt-elapsed{color:var(--slate);}

/* ---- Meetings templates (no-inline-style pass) ---- */
.mk-item{padding:3px 0;display:flex;align-items:center;gap:6px;font-size:.74rem;}
.mk-item svg{color:var(--green);font-size:.7rem;}
.meet-card{margin:0;padding:12px;}
.meet-t{font-weight:600;font-size:.85rem;color:var(--gold);margin-bottom:4px;}
.meet-dur{font-size:.72rem;color:var(--slate);margin-bottom:6px;display:flex;align-items:center;gap:5px;}
.meet-dur svg{font-size:.7rem;}
.meet-d{font-size:.74rem;line-height:1.4;margin-bottom:10px;}
.meet-live{border:1px solid var(--gold);margin-bottom:18px;}
.meet-live-badge{font-size:.65rem;}
.meet-started{font-size:.74rem;color:var(--slate);margin-bottom:10px;}
.meet-attendees{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px;}
.meet-attendees .cf-input{flex:1;min-width:220px;}
.meet-items{margin-bottom:12px;}
.meet-item{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid #f1f5f9;}
.meet-item input[type=checkbox]{vertical-align:middle;}
.meet-item.done .meet-item-txt{text-decoration:line-through;color:var(--slate);}
.meet-item-txt{font-size:.76rem;}
.meet-item-note{flex:1;min-width:120px;background:var(--canvas);border:1px solid var(--border);color:var(--text);border-radius:4px;padding:4px 8px;font-size:.72rem;}
.meet-summary{margin-bottom:12px;}
.meet-hist-row{display:flex;justify-content:space-between;align-items:center;padding:7px 10px;border:1px solid var(--border);border-radius:6px;margin-bottom:5px;font-size:.76rem;}
.meet-hist-name{font-weight:600;}
.meet-hist-meta{font-size:.66rem;color:var(--slate);margin-left:8px;}
.meet-hist-badge{font-size:.62rem;}
.meet-hist-actions{display:flex;align-items:center;gap:8px;flex-shrink:0;}

/* DMAIC dashboard signal */
.dmaic-signal-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.dmaic-chips{display:flex;gap:6px;}
.dmaic-chip{width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.68rem;font-weight:800;background:rgba(0,0,0,.15);border:1px solid var(--border);color:var(--slate);}
.dmaic-chip.done{background:var(--green);border-color:var(--green);color:#0b0c10;}
.dmaic-bar{flex:1;min-width:160px;height:8px;background:var(--track-bg);border:1px solid var(--border);border-radius:99px;overflow:hidden;}
.dmaic-fill{height:100%;background:linear-gradient(90deg,var(--green),var(--gold));border-radius:99px;transition:width .4s ease;}
.dmaic-pct{font-size:.7rem;color:var(--slate);white-space:nowrap;}
body.dark-mode .dmaic-chip{background:rgba(255,255,255,.06);}

/* Keyboard shortcut discoverability (Controls tab) */
.sr-kbd{margin:10px 0;padding:10px 12px;border:1px dashed var(--border);border-radius:8px;font-size:.74rem;color:var(--slate);}
.sr-kbd .sl{display:flex;align-items:center;gap:6px;color:var(--gold);font-weight:700;margin-bottom:8px;font-size:.76rem;}
.kbd-grid{display:grid;grid-template-columns:auto 1fr;gap:4px 10px;align-items:center;font-size:.72rem;line-height:1.6;}
.kbd{display:inline-block;background:rgba(212,175,55,.12);border:1px solid rgba(212,175,55,.35);color:var(--gold);border-radius:4px;padding:0 6px;font-size:.66rem;font-weight:700;font-family:ui-monospace,Consolas,monospace;white-space:nowrap;}
.meet-empty{font-size:.78rem;color:var(--slate);}

/* ---- DMAIC / KPI / resources-leveling / misc class pass ---- */
.sr-hint{font-size:.68rem;color:var(--slate);margin:-2px 0 8px;}
.dmaic-card{margin-bottom:14px;}
.dmaic-actions{display:flex;gap:6px;align-items:center;}
.dmaic-hint{font-size:.72rem;color:var(--slate);margin-bottom:12px;}
.kpi-trace{font-size:.64rem;color:var(--slate);display:inline-flex;align-items:center;gap:4px;}
.rl-title{font-size:.66rem;color:var(--slate);text-transform:uppercase;letter-spacing:.5px;margin:14px 0 8px;display:flex;align-items:center;gap:6px;}
.rl-row{display:flex;align-items:center;gap:10px;margin-bottom:7px;}
.rl-name{width:120px;flex-shrink:0;font-size:.72rem;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.rl-bar{flex:1;height:14px;background:#e8ecf2;border-radius:4px;overflow:hidden;}
.rl-fill{height:100%;border-radius:4px;transition:width .4s ease;}
.rl-pct{width:66px;flex-shrink:0;text-align:right;font-size:.72rem;font-weight:700;display:inline-flex;align-items:center;gap:3px;justify-content:flex-end;}
.raci-live-tag{font-size:.6rem;color:var(--gold);display:inline-flex;align-items:center;gap:4px;}
.var-pos{color:var(--green);}
.var-neg{color:var(--danger);}
.n3-done{color:var(--green);font-weight:700;display:flex;align-items:center;gap:6px;}
.n3-done svg{font-size:.8rem;}
.wb-milestone{font-size:.62rem;color:var(--slate);margin-left:6px;cursor:pointer;display:inline-flex;align-items:center;gap:3px;}
.wb-milestone svg{font-size:.7rem;}
.wb-milestone input{vertical-align:middle;}
.es-ok{color:var(--green);display:flex;align-items:center;gap:6px;padding:14px;font-size:.78rem;}
/* ACTION-PLAN 3.1 action aging — quiet list, escalating badges */
.aa-row{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:7px 10px;border:1px solid var(--border);border-radius:4px;margin-bottom:4px;font-size:.76rem;}
.aa-txt{flex:1;min-width:0;}
.aa-src{display:block;font-size:.62rem;color:var(--slate);margin-top:2px;}
.aa-stale{background:rgba(239,68,68,.08);border-color:rgba(239,68,68,.35);}
.aa-overdue-note{font-size:.68rem;color:var(--amber);margin-bottom:8px;}
/* ACTION-PLAN 5.2 Definitions tooltip (floating, like the toast) */
.def-tooltip{position:fixed;z-index:6000;max-width:280px;background:var(--card);border:1px solid var(--gold);border-radius:var(--radius);padding:10px 12px;font-size:.72rem;line-height:1.55;box-shadow:0 8px 28px rgba(0,0,0,.45);opacity:0;pointer-events:none;transition:opacity .12s;}
.def-tooltip.vis{opacity:1;}
.def-tooltip .dt-term{font-size:.78rem;font-weight:800;color:var(--gold);display:flex;align-items:center;gap:8px;margin-bottom:4px;}
.def-tooltip .dt-term .def-badge{font-size:.58rem;}
.def-tooltip .dt-body{color:var(--text);}
.exp-row{display:flex;gap:6px;margin-top:2px;}
.exp-row .btn{flex:1;}
/* ACTION-PLAN 4.2 RACI workload heatmap */
.rw-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-top:8px;}
.rw-cell{border:1px solid var(--border);border-radius:6px;padding:10px 12px;}
.rw-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px;}
.rw-name{font-size:.76rem;font-weight:700;}
.rw-load{font-size:.8rem;font-weight:800;}
.rw-bar{height:6px;background:var(--border);border-radius:100px;overflow:hidden;}
.rw-fill{height:100%;border-radius:100px;}
.rw-counts{display:flex;gap:8px;margin-top:6px;font-size:.62rem;color:var(--slate);}
.rw-counts .rw-a{color:var(--gold);font-weight:700;}
/* ACTION-PLAN 3.4 weekly narrative */
.bn-item{display:flex;align-items:flex-start;gap:7px;padding:5px 0;font-size:.76rem;border-bottom:1px solid var(--border);}
.bn-item svg{color:var(--gold);margin-top:3px;}
.es-ok svg{font-size:.8rem;}

/* ---- Today's Focus card (no-inline-style pass) ---- */
.tf-group{margin-bottom:12px;}
.tf-head{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;display:flex;align-items:center;gap:5px;}
.tf-row{display:flex;justify-content:space-between;align-items:center;padding:7px 10px;border:1px solid var(--border);border-left-width:3px;border-radius:4px;margin-bottom:4px;font-size:.78rem;}
.tf-name{font-weight:600;}
.tf-due{font-size:.68rem;color:var(--slate);margin-left:8px;display:inline-flex;align-items:center;gap:4px;}
.tf-due svg{font-size:.7rem;}
.tf-status{font-size:.68rem;padding:2px 5px;background:var(--card);border:1px solid var(--border);color:var(--text);border-radius:4px;}
.gantt-arrows{position:absolute;top:0;left:0;pointer-events:none;overflow:visible;z-index:5;}

/* ---- Gantt interactions (drag / tooltip / baseline overlay) ---- */
.gb{z-index:2;}
.gb-base{background:rgba(148,163,184,.28)!important;border:1px dashed rgba(148,163,184,.55)!important;pointer-events:none;z-index:1;}
.gb-invalid{outline:2px solid var(--danger)!important;outline-offset:1px;}
body.gantt-dragging{cursor:grabbing;user-select:none;}
body.gantt-dragging .gb{cursor:grabbing;}
#gantt-tip{display:none;position:fixed;z-index:5000;background:var(--card);border:1px solid var(--gold);border-radius:8px;padding:10px 12px;font-size:.72rem;line-height:1.6;color:var(--text);box-shadow:0 10px 30px rgba(15,23,42,.16);pointer-events:none;max-width:240px;}
#gantt-tip.vis{display:block;}

/* ---- Confirm / conflict modals (Phase A / E) ---- */
#cfm-modal,#conflict-modal{position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:9999;display:none;align-items:center;justify-content:center;padding:20px;}
#cfm-modal.on,#conflict-modal.on{display:flex;}
#cfm-modal .mb,#conflict-modal .mb{width:460px;max-width:100%;max-height:82vh;}
.cfm-list-label{font-size:.7rem;color:var(--slate);margin-bottom:6px;}
.cfm-list{display:flex;flex-wrap:wrap;gap:4px;max-height:120px;overflow:auto;}
.cfm-list code{font-size:.68rem;background:#f1f5f9;border:1px solid var(--border);border-radius:4px;padding:2px 6px;color:var(--text);}

/* ---- WBS keyboard-first (Phase F) ---- */
.wbs-row{cursor:default;}
.wbs-row:focus-visible,.wbs-row.wbs-sel{outline:2px solid var(--gold);outline-offset:-2px;background:rgba(212,175,55,.06);}
.wbs-name-input{width:100%;background:#f8fafc;border:1px solid var(--gold);border-radius:4px;color:var(--text);font-size:.82rem;padding:4px 6px;font-family:inherit;}
.wbs-empty{text-align:center;color:var(--slate);padding:24px;}
.wbs-empty>div:first-child{margin-bottom:10px;font-size:.8rem;}
.btn-wx{background:rgba(56,189,248,.15)!important;border:1px solid rgba(56,189,248,.5)!important;color:#38bdf8!important;}
.btn-lt{background:rgba(212,175,55,.16)!important;border:1px solid rgba(212,175,55,.55)!important;color:var(--gold)!important;}
/* WBS lead-time row: Submitted/Expected date cells + explanatory note */
.wbs-lt-lbl{display:block;font-size:.55rem;color:var(--slate);text-transform:uppercase;letter-spacing:.4px;margin-bottom:2px;}
.wbs-lt-note{font-size:.64rem;color:var(--slate);font-style:italic;white-space:normal;line-height:1.35;}

/* ---- Boot loading skeleton (Phase F) ---- */
#boot-splash{position:fixed;inset:0;z-index:10000;background:var(--canvas);display:flex;align-items:center;justify-content:center;transition:opacity .3s;}
#boot-splash.off{opacity:0;pointer-events:none;}
.bs-inner{text-align:center;color:var(--slate);font-size:.8rem;display:flex;flex-direction:column;align-items:center;gap:14px;}
/* ACTION-PLAN 4.1: view-only scope — a static amber strip under the header */
#readonly-banner{position:sticky;top:0;z-index:1500;display:flex;align-items:center;justify-content:center;gap:8px;background:rgba(245,158,11,.12);border-bottom:1px solid rgba(245,158,11,.35);color:var(--gold);font-size:.72rem;padding:6px 14px;letter-spacing:.3px;}
#readonly-banner.is-hide{display:none;}
body.readonly-mode input:not([readonly]),body.readonly-mode textarea:not([readonly]),body.readonly-mode select:not([disabled]){pointer-events:none;opacity:.6;}
body.readonly-mode .btn[data-action]:not([data-action="showSec"]):not([data-action="cpAllPage"]):not([data-action="print"]):not([data-action="openDrw"]):not([data-action="openDrwToPrompts"]):not([data-action="openDrwToSave"]):not([data-action="runMonteCarlo"]){opacity:.55;}
.bs-spin{width:34px;height:34px;border-radius:50%;border:3px solid var(--border);border-top-color:var(--gold);animation:bs-spin .8s linear infinite;}
@keyframes bs-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.bs-spin{animation:none;}}

/* ---- Kanban ---- */
.kb{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;align-items:start;}
.kcol{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);min-height:380px;}
.kch{padding:12px 14px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.kct{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;}
.col-todo .kct{color:var(--slate);}.col-ip .kct{color:var(--gold);}.col-bl .kct{color:var(--danger);}.col-dn .kct{color:var(--green);}
.wip{font-size:.68rem;background:#eef1f6;border:1px solid var(--border);border-radius:100px;padding:2px 8px;color:var(--slate);}
.kcc{padding:10px;min-height:320px;}
.kc{background:transparent;border:1px solid var(--border);border-left:3px solid var(--slate);border-radius:4px;padding:10px;margin-bottom:8px;cursor:grab;transition:background var(--tr),border-color var(--tr);}
.kc:hover{background:#f8fafc;}
.kc.pls{border-left-color:var(--amber);}
.kc.overdue{border-left-color:var(--danger);background:rgba(239,68,68,.06);}
.kc.drag{opacity:.4;}
.kc.leadtime{border:1.5px dashed var(--gold)!important;background:rgba(212,175,55,.06)!important;}
.kc.recurring{border:1.5px dotted var(--blue)!important;background:rgba(59,130,246,.05)!important;}
.kc.wex{border-left:3px solid rgba(56,189,248,.7)!important;}
.kcol.dov{border-color:var(--green);background:rgba(0,155,58,.05);}
.cn{font-size:.78rem;font-weight:600;margin-bottom:5px;}
.cm{font-size:.68rem;color:var(--slate);display:flex;gap:8px;align-items:center;flex-wrap:wrap;}

/* ---- Sprint Panel ---- */
.sp{background:rgba(212,175,55,.05);border:1px solid rgba(212,175,55,.2);border-radius:var(--radius);padding:14px;margin-bottom:14px;display:flex;align-items:center;gap:18px;flex-wrap:wrap;}
.slb{font-size:.7rem;color:var(--slate);text-transform:uppercase;letter-spacing:.5px;}
.slv{font-size:.88rem;font-weight:700;color:var(--gold);}

/* ---- Risk Section ---- */
.rsec{margin-bottom:22px;}
.rst{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:var(--slate);margin-bottom:10px;padding-bottom:7px;border-bottom:1px solid var(--border);}
.rst.iss{color:var(--danger);border-color:rgba(220,53,69,.3);}

/* ---- Toggle Switch ---- */
.tgl{position:relative;width:36px;height:20px;flex-shrink:0;}
.tgl input{opacity:0;width:0;height:0;}
.tsl{position:absolute;cursor:pointer;inset:0;background:var(--border);border-radius:100px;transition:all .4s var(--spring);}
.tsl::before{content:'';position:absolute;height:14px;width:14px;left:3px;bottom:3px;background:#fff;border-radius:50%;transition:var(--tr);}
.tgl input:checked+.tsl{background:var(--danger);}
.tgl input:checked+.tsl::before{transform:translateX(16px);}

/* ---- Issue Row ---- */
.irow td{border-left:2px solid var(--danger);background:rgba(220,53,69,.05);}

/* ---- Drawer ---- */
#drw{position:fixed;top:0;right:-430px;width:410px;height:100vh;background:var(--card);border-left:1px solid var(--border);z-index:1000;transition:right .3s ease;display:flex;flex-direction:column;overflow:hidden;}
#drw.open{right:0;}
.dh{padding:18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.dt2{font-size:.95rem;font-weight:700;color:var(--gold);}
.dc{background:none;border:none;color:var(--slate);cursor:pointer;font-size:1.1rem;padding:4px;}
.dc:hover{color:var(--gold);}
.dtabs{display:flex;border-bottom:1px solid var(--border);}
.dtab{flex:1;padding:11px;text-align:center;font-size:.78rem;font-weight:600;color:var(--slate);cursor:pointer;border:none;background:none;border-bottom:2px solid transparent;transition:all var(--tr);}
.dtab.active{color:var(--gold);border-bottom-color:var(--gold);}
.db{flex:1;overflow-y:auto;padding:14px;}
.fi{padding:11px;border:1px solid var(--border);border-radius:6px;margin-bottom:7px;}
.fn{font-size:.78rem;font-weight:700;color:var(--text);margin-bottom:3px;}
.fd{font-size:.72rem;color:var(--slate);}

/* ---- Q&A Accordion ---- */
.qa-item{border:1px solid var(--border);border-radius:6px;margin-bottom:5px;overflow:hidden;}
.qq{width:100%;padding:11px;text-align:left;background:none;border:none;color:var(--text);font-size:.78rem;font-weight:600;cursor:pointer;display:flex;justify-content:space-between;align-items:center;}
.qa{padding:0 12px;max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease;font-size:.74rem;color:var(--slate);}
.qa.open{max-height:200px;padding:0 12px 12px;}

/* ---- Settings Row ---- */
.sr{display:flex;align-items:center;justify-content:space-between;padding:11px;border:1px solid var(--border);border-radius:6px;margin-bottom:7px;}
.sl{font-size:.78rem;color:var(--text);}

/* ---- Client Error Log (Phase 2) ---- */
.errlog{max-height:220px;overflow-y:auto;border:1px solid var(--border);border-radius:6px;margin-bottom:8px;}
.el-empty{font-size:.7rem;color:var(--slate);padding:12px;text-align:center;}
.el-row{display:flex;gap:8px;align-items:baseline;padding:6px 10px;border-bottom:1px solid var(--border);font-size:.68rem;}
.el-row:last-child{border-bottom:none;}
.el-ts{color:var(--slate);white-space:nowrap;flex-shrink:0;}
.el-act{color:var(--gold);font-weight:700;flex-shrink:0;text-transform:uppercase;font-size:.58rem;letter-spacing:.4px;}
.el-msg{color:var(--text);overflow-wrap:anywhere;}

/* ---- Modal ---- */
#om{display:none;position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:2000;align-items:center;justify-content:center;}
#om.open{display:flex;}
.mb{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);width:600px;max-height:82vh;display:flex;flex-direction:column;}
.mh{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;}
.mt{font-size:.88rem;font-weight:700;color:var(--gold);}
.mbody{padding:14px 18px;flex:1;overflow:auto;}
.mout{width:100%;height:300px;background:#f8fafc;border:1px solid var(--border);border-radius:4px;color:var(--text);font-family:monospace;font-size:.72rem;padding:10px;resize:none;}
.mf{padding:10px 18px;border-bottom:0;border-top:1px solid var(--border);display:flex;gap:7px;justify-content:flex-end;}

/* ---- Undo Bar ---- */
#ub{display:none;position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:var(--card);border:1px solid var(--amber);border-radius:var(--radius);padding:11px 18px;z-index:3000;align-items:center;gap:10px;font-size:.78rem;opacity:0;transition:opacity var(--tr);}
#ub.vis{opacity:1;display:flex;}

/* ---- Scrollbar ---- */
::-webkit-scrollbar{width:6px;height:6px;}
::-webkit-scrollbar-track{background:var(--canvas);}
::-webkit-scrollbar-thumb{background:linear-gradient(180deg,rgba(212,175,55,0.45),rgba(212,175,55,0.2));border-radius:3px;}
::-webkit-scrollbar-thumb:hover{background:var(--slate);}

/* ---- Form Elements ---- */
textarea{resize:vertical;}
select{background:var(--card);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:4px 8px;font-size:.78rem;}
select option{background:var(--card);color:var(--text);}
input[type=date]{background:var(--card);color:var(--text);border:1px solid var(--border);border-radius:4px;padding:4px 8px;font-size:.78rem;}
hr.div{border:none;border-top:1px solid var(--border);margin:14px 0;}

/* ---- Notes Expand ---- */
.nexp{background:none;border:none;color:var(--slate);cursor:pointer;font-size:.72rem;padding:2px 5px;border-radius:4px;}
.nexp:hover{color:var(--gold);background:rgba(212,175,55,.1);}
.nf{width:100%;background:#f8fafc;border:1px solid var(--border);border-radius:4px;color:var(--text);font-size:.72rem;padding:5px 7px;font-family:inherit;resize:none;margin-top:4px;}

/* ---- Definitions Panel ---- */
.def-layout{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
.def-card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px;display:flex;flex-direction:column;gap:8px;}
.def-term{font-size:.82rem;font-weight:700;color:var(--gold);display:flex;align-items:center;gap:8px;}
.def-badge{font-size:.62rem;padding:2px 8px;border-radius:100px;background:rgba(0,155,58,.15);color:var(--green);border:1px solid rgba(0,155,58,.3);font-weight:600;text-transform:uppercase;letter-spacing:.5px;}
.def-body{font-size:.78rem;color:var(--text);line-height:1.6;}
.def-why{font-size:.72rem;color:var(--slate);border-left:2px solid var(--gold);padding-left:10px;margin-top:4px;line-height:1.5;}
.def-example{font-size:.7rem;color:var(--green);background:rgba(0,155,58,.07);border-radius:4px;padding:6px 10px;margin-top:2px;}

/* ---- Charter Form ---- */
.charter-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
.cf-field{display:flex;flex-direction:column;gap:5px;}
.cf-field.full{grid-column:1/-1;}
.cf-label{font-size:.7rem;font-weight:700;color:var(--gold);text-transform:uppercase;letter-spacing:.8px;}
.cf-sub{font-size:.65rem;color:var(--slate);margin-top:-3px;}
.cf-input{background:#f8fafc;border:1px solid var(--border);border-radius:5px;color:var(--text);font-size:.8rem;padding:9px 12px;font-family:inherit;transition:border-color var(--tr);}
.cf-input:focus{outline:none;border-color:var(--gold);}
.cf-ta{background:#f8fafc;border:1px solid var(--border);border-radius:5px;color:var(--text);font-size:.8rem;padding:9px 12px;font-family:inherit;resize:vertical;min-height:130px;transition:border-color var(--tr),height var(--tr);overflow:hidden;}
.cf-ta:focus{outline:none;border-color:var(--gold);}
.def-section-title{font-size:.72rem;font-weight:700;color:var(--slate);text-transform:uppercase;letter-spacing:1px;padding-bottom:8px;border-bottom:1px solid var(--border);margin-bottom:14px;}

/* ---- KPI ---- */
.kpi-row{display:flex;gap:8px;align-items:center;margin-bottom:7px;}
.kpi-row input{flex:1;background:#f8fafc;border:1px solid var(--border);border-radius:5px;color:var(--text);font-size:.78rem;padding:7px 10px;font-family:inherit;}
.kpi-row input:focus{outline:none;border-color:var(--gold);}
.kpi-row select{flex:0 0 120px;}
.kpi-row-wrap{margin-bottom:12px;padding-bottom:10px;border-bottom:1px dashed var(--border);}
.kpi-row-wrap:last-child{border-bottom:none;margin-bottom:0;padding-bottom:0;}
.kpi-link-row{display:flex;gap:8px;align-items:center;margin-top:5px;flex-wrap:wrap;}
.kpi-link-row select{background:#f8fafc;border:1px solid var(--border);border-radius:5px;color:var(--text);font-size:.68rem;padding:4px 7px;font-family:inherit;}
.kpi-link-row select:focus{outline:none;border-color:var(--gold);}

/* ---- Badge tags ---- */
.tt-rec-badge{display:inline-block;background:rgba(59,130,246,.15);color:#3B82F6;border:1px solid #3B82F6;border-radius:3px;padding:0 5px;font-size:.55rem;font-weight:700;margin-left:5px;letter-spacing:.3px;}
.tt-lead-badge{display:inline-block;background:rgba(212,175,55,.18);color:var(--gold);border:1px solid var(--gold);border-radius:3px;padding:0 5px;font-size:.55rem;font-weight:700;margin-left:5px;letter-spacing:.3px;}
.tt-work-badge{display:inline-block;background:rgba(0,155,58,.15);color:var(--green);border:1px solid var(--green);border-radius:3px;padding:0 5px;font-size:.55rem;font-weight:700;margin-left:5px;letter-spacing:.3px;}
.float-consumed{color:var(--amber);}
.float-critical{color:var(--danger);font-weight:700;}
.wbs-lowconf{border-left:2px dotted var(--amber)!important;}
.raci-gate{display:inline-block;background:rgba(220,53,69,.20);color:var(--danger);border:1px solid var(--danger);border-radius:50%;padding:0 4px;margin-left:3px;font-size:.6rem;font-weight:700;line-height:1;cursor:help;}
.wi-sub-upd{color:var(--amber)!important;background:rgba(255,193,7,.08);}
.wi-date-tag{font-family:ui-monospace,monospace;font-size:.62rem;color:var(--gold);margin-left:6px;background:rgba(212,175,55,.10);padding:1px 5px;border-radius:3px;}
.wi-conf{font-size:.58rem;padding:1px 4px;border-radius:3px;margin-left:4px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;}
.wi-conf-low{background:rgba(255,193,7,.20);color:var(--amber);border:1px solid var(--amber);}
.wi-conf-high{background:rgba(0,155,58,.20);color:var(--green);border:1px solid var(--green);}
.wi-missing-date{color:var(--danger);font-size:.6rem;margin-left:6px;}

/* ---- Indicator ---- */
.var-pos{color:var(--green);font-weight:700;}
.var-neg{color:var(--danger);font-weight:700;}
.dirty-ind{display:none;align-items:center;gap:5px;font-size:.7rem;color:var(--amber);padding:3px 9px;border:1px solid var(--amber);border-radius:100px;background:rgba(255,193,7,0.08);cursor:pointer;transition:all var(--tr);}
.dirty-ind:hover{background:rgba(255,193,7,0.2);}
@keyframes pulseAttn{0%,100%{box-shadow:0 0 0 0 rgba(212,175,55,.55);}50%{box-shadow:0 0 0 7px rgba(212,175,55,0);}}
.pulse-attn{animation:pulseAttn .6s ease-out 2;}
@media (prefers-reduced-motion: reduce){.pulse-attn{animation:none;outline:2px solid var(--gold);}}
.dirty-ind.on{display:inline-flex;}
.timeline-ind{display:none;align-items:center;gap:5px;font-size:.7rem;padding:3px 9px;border-radius:100px;cursor:pointer;transition:all var(--tr);}
.timeline-ind.on{display:inline-flex;}
.timeline-ind.ti-ba{color:var(--amber);border:1px solid var(--amber);background:rgba(255,193,7,.08);}
.timeline-ind.ti-br{color:var(--danger);border:1px solid var(--danger);background:rgba(220,53,69,.08);}
.timeline-ind:hover{filter:brightness(1.2);}

/* ---- Empty State ---- */
.hp{position:fixed;bottom:0;left:0;height:3px;background:var(--danger);width:0;z-index:9999;}
.vl{font-size:.68rem;color:var(--slate);text-transform:uppercase;letter-spacing:1px;margin-bottom:14px;padding:5px 0;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px;}
.vl span{color:var(--gold);}
.es{text-align:center;padding:36px 18px;color:var(--slate);font-size:.82rem;}
.es.es-row{padding:24px;font-size:.78rem;line-height:1.7;}
.es-actions{display:flex;gap:6px;justify-content:center;margin-top:12px;}
.es .ic{font-size:1.8rem;margin-bottom:7px;opacity:.5;}

/* ---- Chart Upload Modal ---- */
#chartup-modal{position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:9998;display:none;align-items:center;justify-content:center;padding:20px;}
#chartup-modal.on{display:flex;}
#chartup-modal .cu-box{background:var(--card);border:1px solid var(--border);border-radius:12px;max-width:820px;width:100%;max-height:90vh;overflow:auto;padding:20px;}
#chartup-modal h3{color:var(--gold);margin-bottom:10px;font-size:1.05rem;}
#chartup-modal .cu-step{margin-bottom:14px;}
#chartup-modal textarea{width:100%;min-height:160px;background:var(--canvas);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;resize:vertical;}
#chartup-modal .cu-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;justify-content:flex-end;}
#chartup-modal .cu-hint{font-size:.72rem;color:var(--slate);margin-top:4px;}

/* ---- WBS Import Modal ---- */
#wbsimport-modal{position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:9998;display:none;align-items:center;justify-content:center;padding:20px;}
#wbsimport-modal.on{display:flex;}
#wbsimport-modal .wi-box{background:var(--card);border:1px solid var(--border);border-radius:12px;max-width:860px;width:100%;max-height:90vh;overflow:auto;padding:20px;}
#wbsimport-modal h3{color:var(--gold);margin-bottom:10px;font-size:1.05rem;}
#wbsimport-modal .wi-step{margin-bottom:14px;}
#wbsimport-modal .wi-lbl{font-size:.82rem;font-weight:600;margin-bottom:6px;}
#wbsimport-modal .wi-hint{font-size:.72rem;color:var(--slate);margin-top:4px;}
#wbsimport-modal textarea{width:100%;min-height:180px;background:var(--canvas);color:var(--text);border:1px solid var(--border);border-radius:8px;padding:10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;resize:vertical;}
#wbsimport-modal .wi-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:6px;}
#wi-preview{max-height:300px;overflow:auto;background:var(--canvas);border:1px solid var(--border);border-radius:8px;padding:10px;font-size:.78rem;}

/* ---- Import Dates Modal ---- */
#importdates-modal{position:fixed;inset:0;background:rgba(0,0,0,.7);z-index:9998;display:none;align-items:center;justify-content:center;padding:20px;}
#importdates-modal.on{display:flex;}
#importdates-modal .wi-box{background:var(--card);border:1px solid var(--border);border-radius:12px;max-width:860px;width:100%;max-height:90vh;overflow:auto;padding:20px;}
#importdates-modal h3{color:var(--gold);margin-bottom:10px;font-size:1.05rem;}

/* ---- Print ---- */
/* A clean, ink-friendly printout: chrome hidden, every panel laid out as
   blocks, light background with dark text so the page is readable on paper. */
@media print{
  #app-header,#drw,#om,#ub,#cx,#cy,.sec-nav,.toolbar,.btn,.focus-ind,
  #meth-learn-card,#gantt-tip,#hp,#boot-splash,#snap-daily-btn{display:none!important;}
  body{background:#fff!important;color:#111!important;}
  .panel{display:block!important;position:static!important;margin:0 0 24px!important;}
  .card{box-shadow:none!important;border:1px solid #ccc!important;break-inside:avoid;background:#fff!important;color:#111!important;}
  .card-title,.stat,.stat-xl,.stat-md,.stat-md-g,.card-title .ct-sub{color:#111!important;}
  .ox{overflow:visible!important;}
  .dt{color:#111!important;}
  .dt th{background:#eee!important;color:#111!important;}
  .dt td{color:#111!important;}
  .dt input,.dt select,.cf-input,.cf-ta{border:1px solid #aaa!important;background:#fff!important;color:#111!important;}
  input,select,textarea{-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  .g3,.g4,.g2,.bud-grid5{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))!important;}
  .kv,.kch,.rst,.slb,.cf-label,.t78,.t-xs,.t-sm,.t-xxs,.lbl-up{color:#333!important;}
}

/* Charter Print */
@media print{
  body.print-charter *{visibility:hidden;}
  body.print-charter .charter-print-root,body.print-charter .charter-print-root *{visibility:visible;}
  body.print-charter .charter-print-root{position:absolute;left:0;top:0;width:100%;padding:24px;background:#fff;color:#000;border:none;}
  body.print-charter .card-title>div{display:none!important;}
  body.print-charter .charter-print-root input,
  body.print-charter .charter-print-root textarea,
  body.print-charter .charter-print-root select{background:#fff!important;color:#000!important;border:1px solid #999!important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  body.print-charter .charter-print-root .cf-label{color:#000!important;font-weight:800!important;}
  body.print-charter .charter-print-root .cf-sub{color:#555!important;}
  body.print-charter .charter-print-root .kpi-link-row,
  body.print-charter .charter-print-root .kpi-link-row span{color:#000!important;}
  body.print-charter .charter-print-root .badge{background:#eee!important;color:#000!important;border:1px solid #999!important;-webkit-print-color-adjust:exact;print-color-adjust:exact;}
  body.print-charter .charter-print-root button{display:none!important;}
}

/* ---- Responsive ---- */
@media(max-width:768px){
  .kb{grid-template-columns:1fr 1fr;}
  .g3,.g4{grid-template-columns:1fr 1fr;}
  .def-layout{grid-template-columns:1fr;}
  .charter-grid{grid-template-columns:1fr;}
  #app-main{padding:12px;}
  .gw{grid-template-columns:1fr;}
  #drw{width:100%;right:-100%;}
}
@media(max-width:520px){
  .kb{grid-template-columns:1fr;}
  .g3,.g4{grid-template-columns:1fr;}
  #app-header{padding:10px 12px;flex-wrap:wrap;}
  .tab-btn{padding:6px 12px;font-size:.78rem;}
}

/* ============================================================
   Phase F — project.html layout utilities.
   Static markup carries zero inline styles; every static value
   lives here as a named class. The residual inline styles that
   remain in the app are the JS-controlled ones (element.style
   toggles) and per-value styles emitted by render templates.

   Class conventions (read these before adding a new utility):
   - .btn.full        full-width centered button
   - .g6/.g6c/.g12/.g18/.col-g8   flex rows: gap 6/12/18px,
                      optionally centered or column-stacked
   - .fb-sm/.fb-top   space-between rows (small / top-aligned)
   - .ox              overflow-x auto (scrollable tables)
   - .mt-*/.mb-*/.m0a spacing: margin-top/bottom in px; m0a = no
                      margin + centered text
   - .t-sm/.t-xs/.t-xxs/.t-md/.t78*   muted text tiers; .txt-*
                      bare color; .stat*/.mlc-t figures; .dsec*
                      section labels; .amber-b emphasis
   - .w38…w180        fixed table column widths
   - .ctl-in/.sp-in*/.bud-in   controls-drawer / sprint / budget
                      envelope inputs
   - .mlc-card/.mlc-body/.mlc-when  methodology popover
   - .n3              next-3 priority list
   - .hide            display:none (JS toggled in most cases)
   ============================================================ */
/* full-width centered buttons (drawer/controls) */
.btn.full{width:100%;justify-content:center;}
.btn:disabled{opacity:.55;cursor:default;}
/* small flex rows */
.g6{display:flex;gap:6px;}
.g6c{display:flex;align-items:center;gap:6px;}
.g12{display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
.g18{display:flex;align-items:center;gap:18px;}
.col-g8{display:flex;flex-direction:column;gap:8px;}
.fb-sm{display:flex;justify-content:space-between;align-items:center;font-size:.78rem;}
.fb-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:10px;}
.ox{overflow-x:auto;}
/* spacing */
.mt-lg{margin-top:18px;}
.mt-md{margin-top:8px;}
.mt7{margin-top:7px;}
.mt10{margin-top:10px;}
.mb0{margin-bottom:0;}
.mb7{margin-bottom:7px;}
.mb10{margin-bottom:10px;}
.mb12{margin-bottom:12px;}
.mb14{margin-bottom:14px;}
.m0a{margin:0;text-align:center;}
/* muted text tiers (size + slate) */
.t-sm{font-size:.78rem;color:var(--slate);}
.t-xs{font-size:.72rem;color:var(--slate);}
.t-xxs{font-size:.7rem;color:var(--slate);}
.t-md{font-size:.74rem;color:var(--slate);}
.t78{font-size:.78rem;}
.t78-mb{font-size:.78rem;margin-bottom:10px;}
.txt-sl{color:var(--slate);}
.txt-gold{color:var(--gold);}
.txt-green{color:var(--green);}
.txt-danger{color:var(--danger);}
.amber-b{color:var(--amber);font-weight:700;}
.modal-txt{font-size:.78rem;color:var(--slate);line-height:1.5;margin:0;}
/* stat figures */
.stat{font-size:1.4rem;font-weight:700;color:var(--gold);}
.stat-xl{font-size:1.5rem;font-weight:700;color:var(--text);}
.stat-md{font-size:1.1rem;font-weight:700;}
.stat-md-g{font-size:1.1rem;color:var(--gold);font-weight:700;}
.stat-sm{font-size:.9rem;color:var(--gold);}
.mlc-t{font-size:.9rem;font-weight:700;color:var(--gold);}
.dsec{font-size:.82rem;font-weight:600;margin-bottom:6px;}
.dsec4{font-size:.82rem;font-weight:600;margin-bottom:4px;}
/* table column widths */
.w38{width:38px;}.w50{width:50px;}.w60{width:60px;}.w70{width:70px;}
.w80{width:80px;}.w90{width:90px;}.w96{width:96px;}.w100{width:100px;}
.w110{width:110px;}.w120{width:120px;}.w130{width:130px;}.w140{width:140px;}
.w150{width:150px;}.w180{width:180px;}
/* controls-drawer inputs */
.ctl-in{background:var(--canvas);color:var(--text);border:1px solid var(--border);border-radius:6px;padding:5px 8px;font-size:.8rem;}
/* sprint inputs */
.sp-in{background:transparent;border:none;color:var(--gold);font-weight:700;font-size:.88rem;}
.sp-in-bb{background:transparent;border:none;border-bottom:1px solid var(--border);color:var(--gold);font-weight:700;font-size:.88rem;width:110px;}
/* budget envelope input + tint card */
.bud-in{background:#f8fafc;border:1px solid var(--border);border-radius:5px;color:var(--gold);font-size:1.1rem;font-weight:700;padding:7px 12px;width:180px;}
.card-tint{background:rgba(212,175,55,.06);border-color:rgba(212,175,55,.3);margin-bottom:14px;}
.bud-grid5{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:14px;}
.lbl-up{font-size:.68rem;color:var(--slate);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px;}
.bud-note{font-size:.72rem;color:var(--slate);max-width:340px;line-height:1.5;}
/* card-title small variant */
.ct-sm{font-size:.65rem;}
/* amber undo / warning button */
.btn-warn{background:var(--amber);color:#000;border:none;}
.cur-pt{cursor:pointer;}
.hide{display:none;}
/* methodology learning card popover */
.mlc-card{position:fixed;top:70px;left:50%;transform:translateX(-50%);z-index:500;background:var(--card);border:1px solid var(--border);border-top:3px solid var(--gold);border-radius:8px;padding:18px 22px;width:500px;max-width:90vw;box-shadow:0 8px 32px rgba(15,23,42,.18);font-size:.78rem;}
.mlc-body{color:var(--text);line-height:1.6;margin-bottom:8px;}
.mlc-when{border-left:2px solid var(--gold);padding-left:10px;color:var(--slate);font-size:.74rem;margin-bottom:8px;}
/* next-3 priority list */
.n3{font-size:.78rem;padding-left:15px;display:flex;flex-direction:column;gap:8px;color:var(--text);}

/* ============================================================
   GLASS-UI-DESIGN-SPEC.md — surface treatment layer.
   Applies ONLY to controls & containers: the header/toolbar,
   buttons, modals/sheets, dashboard project cards, toggles and
   badges. Tables, WBS, Gantt, budget grids, RACI and all dense
   data views stay flat, opaque and high-contrast — no blur.
   ============================================================ */

/* §3 recipe — exact declaration order (saturate boost is mandatory) */
.glass-surface{
  background:var(--glass-fill-dark);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  border:var(--glass-border);
  box-shadow:var(--glass-rim),var(--glass-shadow);
}

/* §6.2 header / toolbar — sticky so content scrolls beneath the blur */
#app-header,header{background:var(--glass-fill-dark);border-bottom:var(--glass-border);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  box-shadow:var(--glass-rim);}
header{position:sticky;top:0;z-index:100;}

/* §6.3 modals / sheets — stronger fill over the dimmed scrim, squircle-lg */
.mb,#chartup-modal .cu-box,#wbsimport-modal .wi-box,#importdates-modal .wi-box{
  background:var(--glass-fill-dark-hover);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  border:var(--glass-border);
  border-radius:var(--squircle-lg);
  box-shadow:var(--glass-rim),var(--glass-shadow);
}
/* Scrims blur the page behind the sheet (not just dim it) */
#om,#cfm-modal,#conflict-modal,#chartup-modal,#wbsimport-modal,#importdates-modal,
#adm-cfm,#pw-om,#adm-conflict,#snip-om{
  backdrop-filter:blur(4px);
  -webkit-backdrop-filter:blur(4px);
}
/* Settings drawer is a sheet — same material as modals */
#drw{background:var(--glass-fill-dark-hover);border-left:var(--glass-border);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  box-shadow:var(--glass-rim),-8px 0 24px rgba(15,23,42,.14);}

/* §6.1 buttons — glass surface, squircle-md, gold tint on primary */
.btn{
  border-radius:var(--squircle-md);
  background:var(--glass-fill-dark);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  border:var(--glass-border);
  box-shadow:var(--glass-rim),var(--glass-shadow);
  transition:transform var(--release-duration) var(--spring-press),
    background var(--tr),border-color var(--tr),color var(--tr),box-shadow var(--tr);
}
.btn:hover{background:var(--glass-fill-dark-hover);}
/* Light-first: solid, high-contrast accent buttons. Dark mode keeps the
   translucent accent tints over dark glass (see body.dark-mode below). */
.btn-g{background:var(--green);color:#fff;}
.btn-g:hover{background:#03644f;}
.btn-o{background:var(--gold);color:var(--on-gold);}
.btn-o:hover{background:#92400e;}
.btn-d{background:transparent;border:1px solid var(--danger);color:var(--danger);}
.btn-d:hover{background:var(--danger);color:#fff;}
.btn-n{background:var(--glass-fill-dark);color:var(--toggle-off-fg);}
.btn-n:hover{border-color:var(--green);color:var(--green);}
/* Keep the amber Undo button amber — it is a warning action, not a glass neutral */
.btn-warn{background:var(--amber);color:#000;border:var(--glass-border);}
.btn-warn:hover{background:#92400e;}
/* Dark mode: frosted translucent tints return */
body.dark-mode .btn-g{background:rgba(16,185,129,.16);color:#fff;}
body.dark-mode .btn-g:hover{background:#0fa874;}
body.dark-mode .btn-o{background:rgba(245,158,11,.16);color:var(--gold);}
body.dark-mode .btn-o:hover{background:#d97706;}
body.dark-mode .btn-d{background:rgba(239,68,68,.14);color:var(--danger);border:1px solid rgba(239,68,68,.4);}
body.dark-mode .btn-warn:hover{background:#d97706;}
/* §4 press physics — quick press-in, spring overshoot on release */
.btn:active,.pcard:active,.tab-btn:active,.sec-btn:active,.settings-btn:active,.dc:active,.toggle-chip:active{
  transform:scale(var(--press-scale));
  background:var(--glass-fill-dark-active);
  transition:transform var(--press-duration) var(--spring-in),background var(--tr);
}
/* Header / toolbar / modal icon buttons get glass; table icon buttons stay flat */
.settings-btn{background:var(--glass-fill-dark);border:var(--glass-border);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  box-shadow:var(--glass-rim),var(--glass-shadow);}
.dc{background:var(--glass-fill-dark);border:var(--glass-border);border-radius:var(--squircle-sm);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  box-shadow:var(--glass-rim);}
.dc:hover{background:var(--glass-fill-dark-hover);}
/* Tab + section chips: frosted when inactive, solid when active */
.tab-btn,.sec-btn{background:var(--glass-fill-dark);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  box-shadow:var(--glass-rim);}

/* §5 Android toggle-state contrast — solid ON vs frosted OFF (never opacity) */
.tgl .tsl{background:var(--toggle-off-bg);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  box-shadow:var(--glass-rim);
  transition:all .4s var(--spring-press);}
.tgl .tsl::before{background:var(--toggle-off-fg);}
.tgl input:checked+.tsl{background:var(--toggle-on-bg);
  backdrop-filter:none;-webkit-backdrop-filter:none;
  box-shadow:var(--glass-rim-strong),0 2px 8px rgba(0,0,0,.25);}
.tgl input:checked+.tsl::before{background:var(--toggle-on-fg);}
/* Binary buttons (Lock, Highlight Critical) use the same solid/frosted chip */
.toggle-chip{display:inline-flex;align-items:center;gap:5px;padding:7px 14px;font-size:.78rem;font-weight:600;cursor:pointer;
  border:var(--glass-border);border-radius:var(--squircle-sm);
  transition:transform var(--release-duration) var(--spring-press),background var(--tr),color var(--tr),box-shadow var(--tr);}
.toggle-chip.is-off{background:var(--glass-fill-dark);color:var(--toggle-off-fg);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  box-shadow:var(--glass-rim);}
.toggle-chip.is-on{background:var(--toggle-on-bg);color:var(--toggle-on-fg);
  backdrop-filter:none;-webkit-backdrop-filter:none;
  box-shadow:var(--glass-rim-strong),0 2px 8px rgba(0,0,0,.25);}

/* §6.4 dashboard project cards — glass + hover lift & brighten */
.pcard{
  background:var(--glass-fill-dark);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  border:var(--glass-border);border-radius:var(--squircle-md);
  box-shadow:var(--glass-rim),var(--glass-shadow);
  transition:transform var(--release-duration) var(--spring-press),
    background var(--tr),border-color var(--tr),box-shadow var(--tr);
}
.pcard:hover{transform:translateY(-3px);border-color:var(--gold);background:var(--glass-fill-dark-hover);
  box-shadow:var(--glass-rim),0 12px 30px rgba(15,23,42,.14);}
/* Unlocked card: §5 ON-state cue — solid gold top edge instead of full inversion */
.pcard.unlocked{box-shadow:inset 0 3px 0 var(--gold),var(--glass-rim),var(--glass-shadow);}

/* §6.3 access-code input — recessed glass well with gold focus ring */
#code-input{background:#f8fafc;border:var(--glass-border);border-radius:var(--squircle-sm);
  box-shadow:inset 0 2px 4px rgba(15,23,42,.08);}
#code-input:focus{border-color:var(--gold);outline:none;
  box-shadow:inset 0 2px 4px rgba(15,23,42,.08),0 0 0 3px rgba(245,158,11,.25);}

/* §6.7 status badges — active/completed solid, on-hold/planning frosted */
.badge.active,.badge.completed{background:rgba(16,185,129,.18);color:var(--green);border:1px solid var(--green);backdrop-filter:none;}
.badge.on-hold{background:var(--glass-fill-dark);color:var(--gold);border:1px solid rgba(245,158,11,.35);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));}
.badge.planning{background:var(--glass-fill-dark);color:var(--blue);border:1px solid rgba(59,130,246,.35);
  backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));
  -webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-saturate));}

/* §8 anti-pattern guard: dense data views stay 100% flat & opaque */
.dt .btn,.kc .btn,.raci-cell,.gb,.gr,.gh,.gd,.kcol,.kcc,.dt td input,.dt td select{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;}
.dt .btn,.kc .btn{background:transparent;box-shadow:none;border:1px solid var(--border);border-radius:var(--radius);}

/* §3 mandatory fallback — no backdrop-filter support: solid card colour */
@supports not (backdrop-filter:blur(1px)){
  .glass-surface,#app-header,header,#drw,.mb,#chartup-modal .cu-box,#wbsimport-modal .wi-box,#importdates-modal .wi-box,
  .pcard,.btn,.toggle-chip,.tab-btn,.sec-btn,.settings-btn,.dc,.tgl .tsl,.badge.on-hold,.badge.planning{
    background:var(--card);
  }
  .btn-g{background:var(--green);color:#fff;}
  .btn-o{background:var(--gold);color:var(--on-gold);}
  .btn-d{background:transparent;border:1px solid var(--danger);color:var(--danger);}
}
/* Accessibility: reduced transparency removes the blur, keeps solid surfaces */
@media (prefers-reduced-transparency:reduce){
  .glass-surface,#app-header,header,#drw,.mb,#chartup-modal .cu-box,#wbsimport-modal .wi-box,#importdates-modal .wi-box,
  .pcard,.btn,.toggle-chip,.tab-btn,.sec-btn,.settings-btn,.dc,.tgl .tsl,.badge.on-hold,.badge.planning{
    backdrop-filter:none!important;-webkit-backdrop-filter:none!important;background:var(--card);
  }
  /* Re-assert accent/ON-state fills — without blur the group rule above would
     flatten them to white-on-white in light mode (masked under the old dark
     default, now visible). Mirrors the @supports fallback above. */
  .btn-g{background:var(--green);}
  .btn-o{background:var(--gold);}
  .btn-d{background:transparent;border:1px solid var(--danger);}
  .btn-warn{background:var(--amber);}
  .tab-btn.active{background:var(--gold);}
  .toggle-chip.is-on{background:var(--toggle-on-bg);}
}
/* Accessibility: reduced motion skips the press springs */
@media (prefers-reduced-motion:reduce){
  .btn,.pcard,.tab-btn,.sec-btn,.settings-btn,.dc,.toggle-chip,.tgl .tsl{
    transition:none!important;transform:none!important;
  }
  .pcard:hover{transform:none;}
}

/* ============================================================
   DARK MODE (opt-in) — hardcoded-value overrides.
   The base palette is light-first (see :root). These rules restore
   the dark canvas defaults for the few components that hardcode a
   light-appropriate colour (subtle fills, input wells, row borders,
   soft shadows) instead of consuming design tokens. Because this
   block sits last, every override wins the cascade.
   ============================================================ */
body.dark-mode .tab-ctrl{background:rgba(255,255,255,.05);}
body.dark-mode .card:hover{border-color:#2e3344;}
body.dark-mode .dt th{background:rgba(255,255,255,.03);}
body.dark-mode .dt td{border-bottom:1px solid rgba(255,255,255,.03);}
body.dark-mode .dt tbody tr:hover{background:#1a1d29;}
body.dark-mode .gh{background:rgba(255,255,255,.03);}
body.dark-mode .gr{border-bottom:1px solid rgba(255,255,255,.03);}
body.dark-mode .float-badge{background:rgba(255,255,255,.05);}
body.dark-mode .lt-table td{border-bottom:1px solid rgba(255,255,255,.04);}
body.dark-mode .meet-item{border-bottom:1px solid rgba(255,255,255,.04);}
body.dark-mode .wip{background:rgba(255,255,255,.05);}
body.dark-mode .kc:hover{background:rgba(255,255,255,.04);}
body.dark-mode .wx-stat{background:rgba(0,0,0,.15);}
body.dark-mode .wfr-day{background:rgba(0,0,0,.18);}
body.dark-mode .wfr-alert{background:rgba(0,0,0,.3);}
body.dark-mode .sc-cell{background:rgba(0,0,0,.15);}
body.dark-mode .rl-bar{background:rgba(0,0,0,.25);}
body.dark-mode .cfm-list code{background:rgba(0,0,0,.3);}
body.dark-mode .wbs-name-input{background:rgba(0,0,0,.25);}
body.dark-mode .mout{background:rgba(0,0,0,.3);}
body.dark-mode .nf{background:rgba(0,0,0,.2);}
body.dark-mode .cf-input{background:rgba(0,0,0,.2);}
body.dark-mode .cf-ta{background:rgba(0,0,0,.2);}
body.dark-mode .kpi-row input{background:rgba(0,0,0,.2);}
body.dark-mode .kpi-link-row select{background:rgba(0,0,0,.2);}
body.dark-mode .bud-in{background:rgba(0,0,0,.25);}
body.dark-mode #code-input{background:rgba(0,0,0,.3);box-shadow:inset 0 2px 4px rgba(0,0,0,.3);}
body.dark-mode #code-input:focus{box-shadow:inset 0 2px 4px rgba(0,0,0,.3),0 0 0 3px rgba(245,158,11,.25);}
body.dark-mode #gantt-tip{box-shadow:0 10px 30px rgba(0,0,0,.5);}
body.dark-mode .mlc-card{box-shadow:0 8px 32px rgba(0,0,0,.5);}
body.dark-mode #drw{box-shadow:var(--glass-rim),-8px 0 24px rgba(0,0,0,.35);}
body.dark-mode .pcard:hover{box-shadow:var(--glass-rim),0 12px 30px rgba(0,0,0,.35);}
/* ============================================================
   V10 additions — ACTION-PLAN 3.2/3.3 + item 23 + 7.3 + AI window
   Streak, Team Pulse, rolling lead-time forecast, distributed
   weather float, AI assistant modal. All consume design tokens
   so dark mode stays consistent.
   ============================================================ */

/* ---- 3.3 PM Consistency streak ---- */
.stk-row{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;}
.stk-num{font-size:1.5rem;font-weight:900;color:var(--gold);}
.stk-meta{font-size:.7rem;color:var(--slate);}
.stk-hint{font-size:.68rem;color:var(--slate);font-style:italic;margin-top:6px;}

/* ---- 3.2 Team Pulse (meeting close) ---- */
.meet-pulse{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:10px 0;}
.meet-pulse-lbl{font-size:.7rem;color:var(--slate);font-weight:600;}
.mp-btn{border-radius:100px;padding:4px 12px;font-size:.7rem;font-weight:600;}
.mp-pos{border:1px solid rgba(16,185,129,.45);color:var(--green);background:transparent;}
.mp-pos:hover{background:rgba(16,185,129,.12);}
.mp-neu{border:1px solid rgba(245,158,11,.45);color:var(--amber);background:transparent;}
.mp-neu:hover{background:rgba(245,158,11,.12);}
.mp-con{border:1px solid rgba(239,68,68,.45);color:var(--danger);background:transparent;}
.mp-con:hover{background:rgba(239,68,68,.12);}

/* ---- 3.2 sentiment sparkline ---- */
.sent-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;}
.sent-last{font-size:.74rem;font-weight:600;color:var(--text);}
.sent-bars{display:flex;align-items:flex-end;gap:3px;height:28px;}
.sent-bar{width:5px;border-radius:2px 2px 0 0;min-height:4px;transition:transform var(--tr);}
.sent-bar:hover{transform:scaleY(1.15);}
.sent-counts{display:flex;gap:12px;font-size:.68rem;margin-top:8px;}
.sent-n{color:var(--slate);margin-left:auto;}

/* ---- item 23: rolling 3-month lead-time ---- */
.ltr-roll{margin-top:12px;border-top:1px solid var(--border);padding-top:10px;}
.ltr-head{font-size:.74rem;font-weight:700;color:var(--slate);display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;}
.ltr-sub{font-weight:400;font-size:.66rem;color:var(--slate);}
.ltr-row{display:flex;align-items:center;gap:8px;padding:4px 0;flex-wrap:wrap;}
.ltr-name{font-size:.72rem;min-width:150px;color:var(--text);}
.ltr-segs{display:flex;gap:2px;}
.ltr-seg{width:9px;height:12px;border-radius:2px;background:var(--border);}
.ltr-clear{background:rgba(16,185,129,.35);}
.ltr-near{background:rgba(245,158,11,.55);}
.ltr-due{background:rgba(239,68,68,.55);}
.ltr-empty{font-size:.72rem;color:var(--slate);padding:6px 0;}

/* ---- 7.3 distributed weather float ---- */
.wx-dist{margin-top:12px;border-top:1px solid var(--border);padding-top:10px;}
.wx-dist-row{display:flex;align-items:center;gap:8px;padding:3px 0;}
.wx-dist-name{font-size:.72rem;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.wx-dist input{width:64px;background:#f8fafc;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:.74rem;padding:4px 6px;font-family:inherit;}
.wx-dist-unit{font-size:.68rem;color:var(--slate);}

/* ---- AI Assistant window (parallel track) ---- */
.ai-fab{position:fixed;right:22px;bottom:22px;z-index:1500;width:52px;height:52px;border-radius:50%;border:1px solid var(--gold);background:var(--card);color:var(--gold);display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:1.1rem;box-shadow:0 8px 24px rgba(0,0,0,.25);transition:transform var(--tr),box-shadow var(--tr);}
.ai-fab:hover{transform:translateY(-2px) rotate(12deg);box-shadow:0 12px 28px rgba(0,0,0,.32);}
#ai-win{display:none;position:fixed;inset:0;background:rgba(0,0,0,.75);z-index:2000;align-items:center;justify-content:center;}
#ai-win.open{display:flex;}
#ai-win .mb{width:620px;max-width:100%;max-height:86vh;}
.ai-presets{display:flex;flex-wrap:wrap;gap:6px;}
.ai-chip{border:1px solid var(--border);background:transparent;color:var(--text);border-radius:100px;padding:5px 12px;font-size:.72rem;cursor:pointer;transition:all var(--tr);}
.ai-chip:hover{border-color:var(--gold);color:var(--gold);}
.ai-q,.ai-ctx{width:100%;background:#f8fafc;border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:.78rem;padding:9px 10px;font-family:inherit;resize:vertical;box-sizing:border-box;}
.ai-q{min-height:96px;}
.ai-ctx{min-height:150px;}
.ai-actions{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap;}
.ai-note{font-size:.66rem;color:var(--slate);margin-top:10px;line-height:1.5;}

/* dark-mode companions for the new surfaces */
body.dark-mode .wx-dist input,body.dark-mode .ai-q,body.dark-mode .ai-ctx{background:rgba(0,0,0,.25);}
body.dark-mode .ltr-seg{background:#222533;}
body.dark-mode .sent-bar{border:1px solid rgba(0,0,0,.2);}

/* ---- 7.1 forecast view toggle (7d / 16d) ---- */
.wx-view-tgl{display:inline-flex;gap:2px;}
.wx-view-tgl .btn{border-radius:6px;padding:3px 9px;font-size:.66rem;}
.wx-view-tgl .btn.is-on{border-color:var(--gold);color:var(--gold);}

/* Interaction audit: the WBS task name is click-to-edit — signal editability. */
.wbs-name{cursor:text;}
.wbs-name:hover{color:var(--gold);}
