:root{
  /* --muted and --accent are tuned to hold WCAG 2.1 AA contrast (≥4.5:1) on
   * white cards — keep any future adjustments at least this dark. */
  --navy:#1f3864; --navy-l:#2e5395; --bg:#f4f6fa; --ink:#1c2430; --muted:#5a6577;
  --card:#ffffff; --line:#c9d3e0;
  /* Accent points at the brand blue in tokens.css (was the legacy drifted
   * accent). This is the "blue accent" rebrand — one token drives every use. */
  --accent:var(--blue-600);
  --brand-orange:#FA5A0F; --brand-blue:#0B50E6;
  --xlsx:#1d6f42; --docx:#2b579a; --pdf:#c0392b; --csv:#0e7c7b; --html:#b25c00; --link:#5b21b6;
  --note-y:#fff3a3; --note-p:#ffd6e8; --note-b:#cfe6ff; --note-g:#d3f5d8;
  --topbar-h:52px;
}
*{box-sizing:border-box; margin:0; padding:0; font-family:'Segoe UI',system-ui,-apple-system,Arial,sans-serif;}
html,body{height:100%; overflow:hidden; background:var(--bg); color:var(--ink);}
button,input,select,textarea{font:inherit;}
button{touch-action:manipulation;}
/* WCAG 2.4.7: a visible focus indicator everywhere, without flashing rings on
 * mouse clicks — :focus-visible wins over the many legacy outline:none rules. */
:focus-visible{outline:2px solid var(--accent) !important; outline-offset:2px;}
.skip-link{position:absolute; left:-9999px; top:0; z-index:var(--z-skip); background:var(--navy); color:var(--text-inverse); padding:10px 16px; border-radius:0 0 10px 0; font-weight:700; text-decoration:none;}
.skip-link:focus{left:0;}
/* WCAG 2.3.3: honor the OS-level reduced-motion preference. */
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important;}
}
/* ESIGN intent-to-sign consent rows on signature forms. */
.esignConsent{display:flex; gap:8px; align-items:flex-start; font-size:12px; color:var(--muted); line-height:1.4;}
.esignConsent input{margin-top:2px; flex:none; width:auto;}
.hidden{display:none !important;}

/* ---------- Lucide icons ---------- */
svg.lucide{width:16px; height:16px; flex:0 0 auto; vertical-align:middle; pointer-events:none;}
svg.lucide *{pointer-events:none;}
.dash-tools button,.tbtn{display:inline-flex; align-items:center; gap:7px;}
.dash-tools button svg.lucide,.tbtn svg.lucide{width:15px; height:15px;}
#zoomctl button{display:inline-flex; align-items:center; justify-content:center;}
#btnBack svg.lucide{width:18px; height:18px;}
.boardrow .bdel svg.lucide,.node .ndel svg.lucide,.sticky .del svg.lucide{width:14px; height:14px;}
.fanitem .docdel svg.lucide{width:10px; height:10px;}
.sheet .glyph svg.lucide{width:16px; height:16px;}
.fanitem .sheet2 .glyph svg.lucide{width:18px; height:18px; margin-bottom:2px;}
.dwicon svg.lucide{width:15px; height:15px;}
.mavatar.ai svg.lucide{width:15px; height:15px; color:var(--text-inverse);}
.crow .askai svg.lucide{width:13px; height:13px; vertical-align:-2px;}

/* ---------- collapsible sidebar ---------- */
/* Collapsed to an icon rail by default; expands on hover / keyboard focus. */
.deptnav button svg.lucide{width:17px; height:17px;}
.app-shell.sidebar-collapsed{grid-template-columns:64px 1fr;}
.app-shell.sidebar-collapsed .sidebar{padding:18px 10px; width:64px;}
.app-shell.sidebar-collapsed .sidebrand{justify-content:center;}
.app-shell.sidebar-collapsed .sidebrand b{display:none;}
.app-shell.sidebar-collapsed .deptnav button{justify-content:center; padding:10px;}
.app-shell.sidebar-collapsed .deptnav button span{display:none;}
/* Collapsed sidebar expands to full width on hover or keyboard focus
   (desktop pointers only), overlaying the main area as a floating panel so
   content doesn't reflow. */
@media (min-width:901px){
  .app-shell.sidebar-collapsed .sidebar:hover,
  .app-shell.sidebar-collapsed .sidebar:focus-within{width:260px; padding:22px 16px; z-index:40; border-radius:0 16px 16px 0; box-shadow:0 18px 48px rgba(16,33,63,.34);}
  .app-shell.sidebar-collapsed .sidebar:hover .sidebrand,
  .app-shell.sidebar-collapsed .sidebar:focus-within .sidebrand{justify-content:flex-start;}
  .app-shell.sidebar-collapsed .sidebar:hover .sidebrand b,
  .app-shell.sidebar-collapsed .sidebar:focus-within .sidebrand b{display:inline;}
  .app-shell.sidebar-collapsed .sidebar:hover .sidenav-label,
  .app-shell.sidebar-collapsed .sidebar:focus-within .sidenav-label{display:block;}
  .app-shell.sidebar-collapsed .sidebar:hover .deptnav button,
  .app-shell.sidebar-collapsed .sidebar:focus-within .deptnav button{justify-content:flex-start; padding:10px 12px;}
  .app-shell.sidebar-collapsed .sidebar:hover .deptnav button span,
  .app-shell.sidebar-collapsed .sidebar:focus-within .deptnav button span{display:inline;}
}

/* ---------- login, shell & board list ---------- */
.login-screen{min-height:100%; display:flex; align-items:center; justify-content:center; padding:clamp(24px,5vh,64px) 20px; overflow:auto;
  background:radial-gradient(ellipse 120% 60% at 50% -10%, rgba(11,80,230,.06), transparent 65%), linear-gradient(180deg,#fafbfd 0%,#f1f4f9 100%);}
.login-shell{width:min(400px, 100%); display:flex; flex-direction:column; align-items:center;}
.brand-logo{display:block; height:auto; object-fit:contain;}
.login-logo{width:min(180px, 52vw); margin-bottom:28px;}
.brand-icon{width:34px; height:34px; object-fit:contain; flex:0 0 34px;}
.eyebrow{font-size:11px; text-transform:uppercase; letter-spacing:1.4px; color:var(--accent); font-weight:800; margin:16px 0 8px;}
.panel,.workspace-card{background:var(--surface); border:1px solid var(--line); border-radius:16px; box-shadow:0 16px 50px rgba(31,56,100,.12);}
.panel{padding:30px 34px; width:min(380px, calc(100vw - 28px));}
.login-panel{width:100%; border-radius:var(--radius-lg); border-color:var(--border);
  box-shadow:0 1px 2px rgba(15,23,42,.04), 0 16px 40px -12px rgba(15,23,42,.10); padding:32px;}
.login-panel-head{margin-bottom:10px;}
.panel h1,.workspace-card h2{font-size:19px; color:var(--navy); margin-bottom:4px;}
.login-panel h1{font-size:22px; letter-spacing:-.4px; color:var(--text-primary);}
.panel .sub,.workspace-card .sub{font-size:12.5px; color:var(--muted); margin-bottom:18px;}
.login-panel .sub{font-size:13.5px; line-height:1.5; margin-bottom:8px;}
.panel label{font-size:11px; color:var(--text-secondary); display:block; margin:14px 0 6px; font-weight:800; text-transform:uppercase; letter-spacing:.05em;}
.panel input{width:100%; border:1px solid var(--line); border-radius:10px; padding:11px 13px; font-size:14px; outline:none; background:var(--surface); transition:border-color var(--duration-base) var(--ease-standard), box-shadow var(--duration-base) var(--ease-standard);}
.panel input::placeholder{color:var(--text-disabled);}
.login-label-row{display:flex; align-items:baseline; justify-content:space-between; gap:10px;}
.login-label-row label{flex:1 1 auto;}
.login-inline-link{border:none; background:none; padding:0; color:var(--accent); cursor:pointer; font-size:12px; font-weight:600;}
.login-inline-link:hover{text-decoration:underline;}
.login-panel > #btnLogin{margin-top:22px;}
.login-panel .google-btn{margin-top:10px; width:100%; justify-content:center;}
.login-request{text-align:center; margin-top:22px; padding-top:16px; border-top:1px solid var(--border-subtle); font-size:12.5px; color:var(--muted);}
.login-request span{margin-right:5px;}
.login-request button{border:none; background:none; color:var(--accent); cursor:pointer; font-size:12.5px; text-decoration:none; font-weight:700;}
.login-request button:hover{text-decoration:underline;}
.login-foot-note{margin-top:18px; font-size:12px; color:var(--text-tertiary); text-align:center;}
.access-token-panel{margin-top:18px; padding:16px; border:1px solid var(--border); border-radius:var(--radius-md); background:var(--bg-page); display:grid; gap:8px;}
.access-token-panel.hidden{display:none;}
.access-token-panel b{color:var(--ink); font-size:.95rem;}
.access-token-panel span{color:var(--muted); font-size:.85rem; line-height:1.4;}
.access-token-panel label{margin-top:4px;}
.access-token-panel.is-active{border-color:#86efac; background:#f0fdf4;}
.access-token-panel.is-invalid{border-color:#fecaca; background:#fef2f2;}
.panel input:focus,.newboard input:focus{border-color:var(--accent); box-shadow:0 0 0 3px rgba(58,111,247,.13);}
.panel .primary{margin-top:18px; width:100%; background:linear-gradient(135deg,#10213f,#1f3864); color:var(--text-inverse); border:none; border-radius:11px;
  padding:12px; font-size:14px; font-weight:800; cursor:pointer; box-shadow:0 12px 24px rgba(31,56,100,.2);}
.panel .primary:hover,.newboard button:hover,.quick-actions button:hover{background:var(--navy-l);}
.app-shell{height:100%; display:grid; grid-template-columns:260px 1fr; background:#eef3f9; overflow:hidden; transition:grid-template-columns var(--duration-base) var(--ease-standard);}
.sidebar{position:relative; z-index:5; background:#10213f; color:var(--text-inverse); padding:22px 16px; display:flex; flex-direction:column; gap:18px;
  transition:width var(--duration-base) var(--ease-standard), padding var(--duration-base) var(--ease-standard), box-shadow var(--duration-base) var(--ease-standard);}
.sidebrand{display:flex; align-items:center; gap:10px; font-size:15px; letter-spacing:.2px;}
.sidebrand .brand-icon{width:34px; height:34px;}
.sidenav-label{margin:4px 2px 2px; color:#7d8aa3; font-size:10.5px; font-weight:800; text-transform:uppercase; letter-spacing:.08em;}
.app-shell.sidebar-collapsed .sidenav-label{display:none;}
.deptnav{display:flex; flex-direction:column; gap:7px;}
.deptnav button{border:1px solid transparent; border-radius:11px; background:transparent; color:var(--neutral-300); text-align:left; padding:10px 12px; font-size:13px; cursor:pointer; display:flex; align-items:center; gap:10px;}
.deptnav button:hover,.deptnav button.active{background:rgba(255,255,255,.12); color:var(--text-inverse); border-color:rgba(255,255,255,.14);}
.mainarea{min-width:0; min-height:0; overflow:auto; padding:24px; -webkit-overflow-scrolling:touch;}
.app-header{display:flex; justify-content:flex-end; gap:18px; align-items:flex-start; margin-bottom:18px;}
.app-header span{color:var(--muted); font-size:13px;}
.dash-tools{display:flex; align-items:center; justify-content:flex-end; gap:8px; flex-wrap:wrap;}
/* Portal picker with the exam Institution/Program scope pickers stacked beneath it. */
.dash-view-stack{display:flex; flex-direction:column; gap:6px; align-items:stretch;}
.dash-view-stack .dash-view-switcher{justify-content:space-between;}
.dash-view-stack .dash-view-switcher span{min-width:72px;}
.dash-view-switcher{display:flex; align-items:center; gap:7px; background:var(--surface); border:1px solid var(--line); border-radius:999px; padding:5px 8px 5px 11px; box-shadow:0 2px 8px rgba(31,56,100,.08);}
.dash-view-switcher span{font-size:10px; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--muted); white-space:nowrap;}
.dash-view-switcher select{border:none; outline:none; color:var(--navy); background:transparent; font-size:12px; font-weight:700; max-width:230px; cursor:pointer;}
.dash-tools button{border:1px solid var(--line); background:var(--surface); color:var(--navy); border-radius:999px; padding:7px 10px; font-size:12px; cursor:pointer; box-shadow:0 2px 8px rgba(31,56,100,.08);}
.dash-tools button:hover{border-color:var(--accent); color:var(--accent);}
.dash-tools button.dash-feedback{background:#2a5fe0; border-color:var(--accent); font-weight:800; font-size:12.5px; box-shadow:0 4px 12px rgba(42,95,224,.35);}
.dash-tools button.dash-feedback,.dash-tools button.dash-feedback span{color:var(--text-inverse);}
.dash-tools button.dash-feedback svg.lucide{color:var(--text-inverse);}
.dash-tools button.dash-feedback:hover{background:#1f4fd0; border-color:var(--accent);}
.dash-tools button.dash-feedback:hover,.dash-tools button.dash-feedback:hover span{color:var(--text-inverse);}
.dashTopDrawer{position:fixed; top:0; left:50%; width:min(430px,calc(100vw - 28px)); max-height:360px; transform:translate(-50%,-110%); transition:transform var(--duration-base) var(--ease-standard); z-index:var(--z-sticky-ui); background:var(--surface); border:1px solid var(--line); border-top:none; border-radius:0 0 16px 16px; box-shadow:0 16px 40px rgba(31,56,100,.2); overflow:auto;}
.dashTopDrawer.open{transform:translate(-50%,0);}
.dashAlertsDrawer{position:fixed; top:18px; right:18px; width:min(360px,calc(100vw - 28px)); max-height:430px; display:none; z-index:calc(var(--z-sticky-ui) + 1); background:var(--surface); border:1px solid var(--line); border-radius:16px; box-shadow:0 16px 40px rgba(31,56,100,.22); overflow:auto;}
.dashAlertsDrawer.open{display:block;}
.dashAiConsole{position:fixed; right:18px; bottom:18px; width:min(390px,calc(100vw - 28px)); display:none; z-index:calc(var(--z-sticky-ui) + 2); background:var(--surface); border:1px solid var(--line); border-radius:16px; box-shadow:0 16px 42px rgba(31,56,100,.24); overflow:hidden;}
.dashAiConsole.open{display:block;}
.drawerHead{display:flex; align-items:center; justify-content:space-between; padding:12px 14px; border-bottom:1px solid var(--line); color:var(--navy); font-size:13px;}
.drawerHead button{border:none; background:none; color:var(--muted); cursor:pointer; font-size:15px;}
.dashNotice{padding:11px 14px; border-bottom:1px solid #eef2f7; font-size:12px; border-left:5px solid var(--accent);}
.dashNotice.red{border-left-color:#c0392b;} .dashNotice.amber{border-left-color:#b25c00;}
.dashNotice b{display:block; color:var(--navy); margin-bottom:2px;}
.dashNotice span{display:block; color:var(--muted); line-height:1.35;}
.dashAiBody{padding:14px; color:var(--text-secondary); font-size:12.5px; line-height:1.45; max-height:360px; overflow:auto; background:#fbfcff;}
.dashAiMsg{border:1px solid var(--line); border-radius:12px; padding:9px 10px; margin-bottom:8px; background:var(--surface);}
.dashAiMsg.user{background:#eef5ff; border-color:#d7e6ff;}
.dashAiMsg.pending{opacity:.75;}
.dashAiMsg b{display:block; color:var(--navy); font-size:12px; margin-bottom:3px;}
.dashAiMsg span{display:block; color:var(--text-secondary);}
.dashAiMsg ul{margin:5px 0 0 17px; padding:0; color:var(--text-secondary);}
.dashAiMsg li{margin:3px 0;}
.dashAiComposer{display:flex; gap:8px; padding:10px; border-top:1px solid var(--line);}
.dashAiComposer input{flex:1; border:1px solid var(--line); border-radius:9px; padding:8px 10px; font-size:12px; outline:none;}
.dashAiComposer button{background:var(--navy); color:var(--text-inverse); border:none; border-radius:9px; padding:0 12px; cursor:pointer;}
/* floating AI agent */
.aiAgent{position:fixed; right:22px; bottom:22px; z-index:calc(var(--z-sticky-ui) + 5); width:min(400px, calc(100vw - 28px)); height:min(620px, calc(100dvh - 40px)); background:var(--surface); border:1px solid var(--line); border-radius:18px; box-shadow:0 24px 60px rgba(31,56,100,.3); display:flex; flex-direction:column; overflow:hidden;}
.aiAgentHead{display:flex; align-items:center; justify-content:space-between; gap:10px; padding:13px 15px; background:linear-gradient(135deg,#102a52,#1f3d77); color:var(--text-inverse);}
.aiAgentTitle{display:flex; align-items:center; gap:10px;}
.aiAgentTitle svg.lucide{width:20px; height:20px;}
.aiAgentTitle b{display:block; font-size:14px;}
.aiAgentTitle span{display:block; font-size:11px; color:#c5d6f5;}
.aiAgentHead button{border:none; background:rgba(255,255,255,.14); color:var(--text-inverse); border-radius:8px; width:30px; height:30px; cursor:pointer; display:flex; align-items:center; justify-content:center;}
.aiAgentHead button:hover{background:rgba(255,255,255,.26);}
.aiAgentBody{flex:1; min-height:0; overflow:auto; padding:14px; background:#f7f9fc; display:flex; flex-direction:column; gap:10px;}
.aiMsg{max-width:88%; border-radius:14px; padding:9px 12px; font-size:12.5px; line-height:1.5;}
.aiMsg b{display:block; font-size:10.5px; text-transform:uppercase; letter-spacing:.05em; margin-bottom:3px; opacity:.7;}
.aiMsg.user{align-self:flex-end; background:var(--navy); color:var(--text-inverse); border-bottom-right-radius:4px;}
.aiMsg.assistant{align-self:flex-start; background:var(--surface); color:var(--ink); border:1px solid var(--line); border-bottom-left-radius:4px;}
.aiMsg.assistant strong{color:var(--navy);}
.aiTyping{display:inline-flex; gap:4px; padding:3px 0;}
.aiTyping span{width:6px; height:6px; border-radius:50%; background:#9aa7bd; animation:aiBlink 1.2s infinite both;}
.aiTyping span:nth-child(2){animation-delay:.2s;}
.aiTyping span:nth-child(3){animation-delay:.4s;}
@keyframes aiBlink{0%,80%,100%{opacity:.25;}40%{opacity:1;}}
.aiAgentForm{display:flex; align-items:flex-end; gap:8px; padding:10px; border-top:1px solid var(--line); background:var(--surface);}
.aiAgentForm textarea{flex:1; resize:none; min-height:40px; max-height:120px; border:1px solid var(--line); border-radius:11px; padding:10px 12px; font-size:12.5px; font-family:inherit; outline:none; line-height:1.4;}
.aiAgentForm textarea:focus{border-color:var(--accent);}
.aiAgentForm button{flex:0 0 auto; width:40px; height:40px; border:none; border-radius:11px; background:var(--accent); color:var(--text-inverse); cursor:pointer; display:flex; align-items:center; justify-content:center;}
.aiAgentForm button:hover{background:#2a5fe0;}
.aiAgentForm button svg.lucide{width:18px; height:18px;}
.dashboard-grid{display:grid; grid-template-columns:minmax(0,1fr); gap:16px; align-items:start;}
.workspace-card{padding:20px;}
.workspace-card p{font-size:13px; line-height:1.55; color:var(--text-secondary); margin:8px 0 16px;}
.workspace-hub{background:linear-gradient(180deg,var(--surface),#f8fbff);}
.workspace-subtitle{margin:18px 0 12px; color:var(--navy); font-size:14px;}
.boardrow{display:flex; align-items:center; gap:12px; padding:13px 14px; border:1px solid var(--line);
  border-radius:11px; margin-bottom:10px; cursor:pointer; background:var(--surface); transition:box-shadow var(--duration-base) var(--ease-standard), transform var(--duration-fast) var(--ease-standard);}
.boardrow:hover{box-shadow:0 6px 18px rgba(31,56,100,.14); transform:translateY(-1px);}
.boardrow .ttl{font-size:14px; font-weight:600; color:var(--navy); flex:1;}
.boardrow .meta{font-size:11px; color:var(--muted);}
.boardrow .bdel{border:none; background:none; color:#b9c2cf; font-size:14px; cursor:pointer;}
.boardrow .bdel:hover{color:var(--pdf);}
.newboard{display:flex; gap:10px; margin:14px 0 12px;}
.newboard input{flex:1; min-width:0; border:1px solid var(--line); border-radius:9px; padding:10px 12px; font-size:13.5px; outline:none;}
/* Workspaces card buttons migrated onto the .btn system — one primary
   (Create), demo shortcuts step down to secondary (§2 hierarchy). */
.quick-actions{display:flex; flex-wrap:wrap; gap:8px;}
.admin-card{grid-column:1 / -1;}
.admin-create{display:grid; grid-template-columns:1.1fr 1fr .7fr 1fr auto; gap:8px; margin:4px 0 2px;}
.admin-create input,.admin-create select,.admin-user input,.admin-user select,.admin-reset input{border:1px solid var(--line); border-radius:9px; padding:9px 10px; font-size:12px; background:var(--surface); outline:none; min-width:0;}
.admin-reset button{background:var(--primary); color:var(--text-inverse); border:none; border-radius:var(--radius-md); padding:9px 12px; cursor:pointer; font-size:12px;}
.admin-user{display:grid; grid-template-columns:1fr 130px 170px 190px; gap:8px; align-items:center; border:1px solid var(--line); border-radius:11px; padding:10px; margin-top:8px;}
.admin-user b{display:block; color:var(--navy); font-size:13px;}
.admin-user span{display:block; color:var(--muted); font-size:11px; margin-top:2px;}
.admin-reset{display:flex; gap:6px;}
.demolink{font-size:12px; color:var(--accent); cursor:pointer; text-align:center; margin-top:4px;}
.demolink:hover{text-decoration:underline;}
.whoami{font-size:12px; color:var(--muted); text-align:right; white-space:nowrap;}
.whoami b{color:var(--navy);}

/* ---------- top bar ---------- */
#topbar{position:fixed; top:0; left:0; right:0; min-height:var(--topbar-h); background:var(--navy); color:var(--text-inverse);
  display:flex; align-items:center; gap:10px; padding:0 14px; z-index:50; box-shadow:0 2px 8px rgba(16,28,52,.25);}
#btnBack{background:none; border:none; color:rgba(255,255,255,.75); font-size:17px; cursor:pointer;}
#btnBack:hover{color:var(--text-inverse);}
#boardTitle{font-size:15px; font-weight:600; letter-spacing:.3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; outline:none;
  border-radius:6px; padding:3px 8px;}
#boardTitle:focus{background:rgba(255,255,255,.14);}
#connstate{font-size:10.5px; opacity:.7; white-space:nowrap;}
#connstate.bad{color:#ffb4a8; opacity:1;}
#topbar .spacer{flex:1;}
.tbtn{background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.25); color:var(--text-inverse); border-radius:7px;
  padding:6px 11px; font-size:12.5px; cursor:pointer; transition:background var(--duration-base) var(--ease-standard); white-space:nowrap;}
.tbtn:hover{background:rgba(255,255,255,.24);}
.tbtn.active{background:var(--accent); border-color:var(--accent);}
.avatars{display:flex; margin:0 2px;}
.avatar{width:28px; height:28px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  font-size:11px; font-weight:700; color:var(--text-inverse); border:2px solid var(--navy); margin-left:-7px;}

/* ---------- canvas ---------- */
#viewport{position:absolute; inset:var(--topbar-h) 0 0 0; overflow:hidden; cursor:grab; touch-action:none;
  background-image:radial-gradient(circle, #cdd6e4 1.1px, transparent 1.1px); background-size:26px 26px;}
#viewport.panning{cursor:grabbing;}
#world{position:absolute; top:0; left:0; width:4000px; height:2600px; transform-origin:0 0; touch-action:none;}
#edges{position:absolute; top:0; left:0; width:4000px; height:2600px;}
#edges path.vis{fill:none; stroke:var(--navy-l); stroke-width:2.2; opacity:.55; pointer-events:none;}
#edges path.hit{fill:none; stroke:transparent; stroke-width:16; pointer-events:stroke; cursor:pointer;}
#edges g:hover path.vis{opacity:1; stroke:#c0392b;}

/* live cursors */
/* Animates transform, not left/top — no layout pass per remote cursor move.
   Linear easing is deliberate for continuous position tracking. */
.livecursor{position:absolute; left:0; top:0; pointer-events:none; z-index:65; transition:transform var(--duration-fast) linear; will-change:transform;}
.livecursor .pt{width:0; height:0; border-left:7px solid transparent; border-right:7px solid transparent;
  border-bottom:13px solid currentColor; transform:rotate(-38deg);}
.livecursor .tag{font-size:10px; color:var(--text-inverse); background:currentColor; border-radius:8px; padding:1px 7px; margin-top:2px;}
.livecursor .tag span{color:var(--text-inverse); mix-blend-mode:normal; filter:brightness(10);}

/* ---------- nodes ---------- */
.node{position:absolute; width:256px; background:var(--card); border:1px solid var(--line); border-radius:12px;
  box-shadow:0 3px 14px rgba(31,56,100,.10); cursor:move; transition:box-shadow var(--duration-base) var(--ease-standard); touch-action:none;}
.node:hover{box-shadow:0 6px 22px rgba(31,56,100,.20);}
.node.connect-glow{outline:2.5px dashed var(--accent); outline-offset:3px;}
.node header{background:linear-gradient(135deg,var(--navy),var(--navy-l)); color:var(--text-inverse); padding:9px 36px 9px 12px;
  border-radius:11px 11px 0 0; position:relative;}
.node header .step{font-size:10px; opacity:.75; text-transform:uppercase; letter-spacing:1px; outline:none; border-radius:4px; padding:0 3px;}
.node header .title{font-size:14px; font-weight:600; line-height:1.25; outline:none; border-radius:4px; padding:0 3px;}
.node header .step:focus,.node header .title:focus{background:rgba(255,255,255,.18);}
.node .ndel{position:absolute; top:2px; right:3px; border:none; background:none; color:rgba(255,255,255,.55);
  font-size:13px; cursor:pointer; display:none; padding:5px;}
.node:hover .ndel{display:block;}
.node .ndel:hover{color:var(--text-inverse);}
.statuspill{position:absolute; top:-12px; right:12px; font-size:10px; font-weight:700; letter-spacing:.5px;
  padding:5px 10px; border-radius:11px; cursor:pointer; color:var(--text-inverse); box-shadow:0 1px 4px rgba(0,0,0,.25);
  text-transform:uppercase; user-select:none; min-height:22px; display:inline-flex; align-items:center;}
.node .subtitle{font-size:11.5px; color:var(--muted); padding:7px 12px 0 12px; outline:none; border-radius:4px;}
.node .subtitle:focus{background:#eef3ff;}
.node .notes{font-size:11.5px; color:var(--ink); padding:6px 12px 4px 12px; line-height:1.45; min-height:14px;
  outline:none; border-radius:6px;}
.node .notes:focus{background:#eef3ff;}
.node .notes:empty:before{content:'Add notes…'; color:#aab4c4;}
.node .doczone{padding:8px 12px 12px 12px; min-height:58px; display:flex; align-items:flex-start; gap:10px;}
.adddoc{width:30px; height:50px; border:1.5px dashed var(--line); border-radius:6px; color:#9aa7ba; font-size:17px;
  background:none; cursor:pointer; display:none; align-items:center; justify-content:center;}
.node:hover .adddoc{display:flex;}
.adddoc svg.lucide{width:18px; height:18px;}
.adddoc:hover{border-color:var(--accent); color:var(--accent);}

/* document stack + fan */
.stack{position:relative; display:inline-block; cursor:pointer;}
.stack .pile{position:relative; width:46px; height:54px;}
.stack .pile .sheet{position:absolute; width:40px; height:50px; border-radius:6px; border:1px solid rgba(0,0,0,.14);
  box-shadow:0 1px 4px rgba(0,0,0,.18); display:flex; flex-direction:column; align-items:center; justify-content:center;
  color:var(--text-inverse); font-size:9px; font-weight:700;}
.stack .count{position:absolute; top:-7px; right:-9px; background:var(--accent); color:var(--text-inverse); font-size:10.5px;
  font-weight:700; border-radius:10px; padding:1px 6px; box-shadow:0 1px 3px rgba(0,0,0,.3); z-index:5;}
.sheet .glyph{font-size:17px; line-height:1; margin-bottom:3px;}
.fanwrap{position:absolute; left:0; top:-6px; display:none; gap:10px; background:var(--card);
  border:1px solid var(--line); border-radius:12px; padding:12px 14px 10px 14px;
  box-shadow:0 10px 30px rgba(31,56,100,.28); z-index:60;}
.stack:hover .fanwrap,.stack.open .fanwrap{display:flex;}
.fanitem{display:flex; flex-direction:column; align-items:center; width:76px; cursor:pointer; position:relative;}
.fanitem .sheet2{width:42px; height:52px; border-radius:6px; display:flex; flex-direction:column; align-items:center;
  justify-content:center; color:var(--text-inverse); font-size:9px; font-weight:700; border:1px solid rgba(0,0,0,.12);
  box-shadow:0 2px 6px rgba(0,0,0,.2); transition:transform var(--duration-base) var(--ease-standard);}
.fanitem:hover .sheet2{transform:translateY(-4px) scale(1.06);}
.fanitem .nm{font-size:10px; color:var(--ink); text-align:center; margin-top:5px; line-height:1.25; word-break:break-word;}
.fanitem .tp{font-size:9px; color:var(--muted); text-transform:uppercase; letter-spacing:.5px;}
/* 24px hit box around the 16px visual circle (transparent border trick). */
.fanitem .docdel{position:absolute; top:-11px; right:2px; width:24px; height:24px; border-radius:50%; border:4px solid transparent;
  background:#c0392b; background-clip:padding-box; color:var(--text-inverse); font-size:9px; cursor:pointer; display:none; line-height:1; padding:0;}
.fanitem:hover .docdel{display:block;}
.fanitem .linkdot{position:absolute; top:-4px; left:10px; width:9px; height:9px; border-radius:50%;
  background:var(--link); border:1.5px solid var(--neutral-0); display:none;}
.fanitem.haslink .linkdot{display:block;}

/* ---------- sticky notes ---------- */
.sticky{position:absolute; width:158px; min-height:120px; padding:10px 11px 26px 11px; font-size:12px; line-height:1.45;
  box-shadow:2px 4px 10px rgba(0,0,0,.18); cursor:move; transform:rotate(-1.2deg); border-radius:2px; touch-action:none;}
.sticky.r{transform:rotate(1.4deg);}
.sticky .txt{outline:none; min-height:60px;}
.sticky .who{position:absolute; bottom:6px; left:11px; font-size:10px; font-weight:700; color:rgba(0,0,0,.45);}
.sticky .del{position:absolute; top:-2px; right:1px; border:none; background:none; color:rgba(0,0,0,.35);
  font-size:13px; cursor:pointer; display:none; padding:5px;}
.sticky:hover .del{display:block;}
.sticky .palette{position:absolute; bottom:5px; right:8px; display:none; gap:4px;}
.sticky:hover .palette{display:flex;}
/* Real buttons; 24px hit box around a 16px visual swatch (transparent border
   expands the target, background-clip keeps the circle small). */
.sticky .palette button{width:24px; height:24px; padding:0; border:4px solid transparent; background-clip:padding-box;
  border-radius:50%; cursor:pointer; box-shadow:inset 0 0 0 1px rgba(0,0,0,.2);}

/* ---------- chat drawer ---------- */
#drawer{position:fixed; top:var(--topbar-h); right:0; bottom:0; width:312px; background:var(--surface); border-left:1px solid var(--line);
  transform:translateX(100%); transition:transform var(--duration-slow) var(--ease-standard); z-index:calc(var(--z-panel) + 1); display:flex; flex-direction:column;}
#drawer.open{transform:translateX(0);}
#drawer .dhead{padding:12px 16px; border-bottom:1px solid var(--line); font-weight:600; font-size:13.5px; color:var(--navy);
  display:flex; justify-content:space-between; align-items:center;}
#drawer .dhead button{border:none; background:none; font-size:16px; cursor:pointer; color:var(--muted);}
#msgs{flex:1; overflow-y:auto; padding:14px; display:flex; flex-direction:column; gap:12px;}
.msg{display:flex; gap:9px; align-items:flex-start;}
.msg .mavatar{width:28px; height:28px; border-radius:50%; flex-shrink:0; display:flex; align-items:center;
  justify-content:center; color:var(--text-inverse); font-size:11px; font-weight:700;}
.msg .bubble{background:#f1f4f9; border-radius:10px; padding:8px 11px; font-size:12.5px; line-height:1.45; max-width:225px;}
.msg .meta{font-size:10px; color:var(--muted); margin-bottom:2px;}
.msg.me{flex-direction:row-reverse;}
.msg.me .bubble{background:#e3ecff;}
.msg.me > div{display:flex; flex-direction:column; align-items:flex-end;}
.msg.ai .bubble{background:linear-gradient(135deg,#f3eeff,#e9f0ff); border:1px solid #ddd2f5;}
.mavatar.ai{background:linear-gradient(135deg,#7c3aed,#3a6ff7); font-size:13px;}
#aiStatus{padding:8px 16px; font-size:11.5px; color:#7c3aed; display:flex; align-items:center; gap:7px;
  border-top:1px dashed var(--line);}
#aiStatus .dot{width:8px; height:8px; border-radius:50%; background:#7c3aed; animation:aipulse 1s infinite alternate;}
@keyframes aipulse{from{opacity:.25; transform:scale(.8);} to{opacity:1; transform:scale(1.15);}}
#aiHints{display:flex; gap:6px; padding:0 10px 10px; flex-wrap:wrap;}
#aiHints button{font-size:10.5px; color:#7c3aed; background:#f3eeff; border:1px solid #ddd2f5; border-radius:12px;
  padding:3px 9px; cursor:pointer;}
#aiHints button:hover{background:#e9defc;}
#composer{border-top:1px solid var(--line); padding:10px; display:flex; gap:8px;}
#composer input{flex:1; border:1px solid var(--line); border-radius:8px; padding:8px 10px; font-size:12.5px; outline:none;}
#composer input:focus{border-color:var(--accent);}
#composer button{background:var(--navy); color:var(--text-inverse); border:none; border-radius:8px; padding:0 14px; cursor:pointer; font-size:12.5px;}

/* ---------- CRM panel ---------- */
#crm{position:fixed; top:var(--topbar-h); left:0; bottom:0; width:340px; background:var(--surface); border-right:1px solid var(--line);
  transform:translateX(-100%); transition:transform var(--duration-slow) var(--ease-standard); z-index:var(--z-panel); display:flex; flex-direction:column;}
#crm.open{transform:translateX(0);}
#crm .dhead{padding:12px 16px; border-bottom:1px solid var(--line); font-weight:600; font-size:13.5px; color:var(--navy);
  display:flex; align-items:center; gap:8px;}
#crm .dhead #crmCount{font-weight:400; font-size:11px; color:var(--muted); flex:1;}
#crm .dhead button{border:none; background:none; font-size:16px; cursor:pointer; color:var(--muted);}
.crmfilters{display:flex; gap:8px; padding:10px; border-bottom:1px solid var(--line);}
.crmfilters input{flex:1; border:1px solid var(--line); border-radius:8px; padding:8px 10px; font-size:12.5px; outline:none;}
.crmfilters input:focus{border-color:var(--accent);}
.crmfilters select{border:1px solid var(--line); border-radius:8px; padding:8px 6px; font-size:12px; outline:none; background:var(--surface);}
#crmRows{flex:1; overflow-y:auto; padding:8px;}
.crow{border:1px solid var(--line); border-radius:10px; padding:9px 11px; margin-bottom:8px; font-size:12px;}
.crow .top{display:flex; align-items:center; gap:7px;}
.crow .nm{font-weight:700; color:var(--navy); flex:1;}
.crow .tierchip{font-size:9.5px; font-weight:700; border-radius:8px; padding:1px 7px; color:var(--text-inverse);}
.crow .tierchip.A{background:#1d6f42;} .crow .tierchip.B{background:#b8860b;} .crow .tierchip.C{background:#8896a8;}
.crow .conf{font-size:9.5px; color:var(--muted);}
.crow .ttl{color:var(--ink); margin-top:2px;}
.crow .co{color:var(--muted); font-size:11px; margin-top:1px;}
.crow .nts{color:#7a614a; font-size:10.5px; margin-top:4px; line-height:1.4;}
.crow .links{margin-top:4px; display:flex; gap:10px; font-size:10.5px;}
.crow .links a{color:var(--accent); text-decoration:none;}
.crow .links a:hover{text-decoration:underline;}
.crow .askai{color:#7c3aed; cursor:pointer;}
.crow .askai:hover{text-decoration:underline;}

/* ---------- MRI dashboard modules ---------- */
.mri-module-card{grid-column:1 / -1; position:relative;}
.mriModuleHead{display:flex; align-items:flex-start; justify-content:space-between; gap:14px 18px; flex-wrap:wrap; margin-bottom:12px;}
#mriModuleTitle{color:var(--navy); font-size:24px; line-height:1.08; letter-spacing:-.02em; margin:2px 0 5px;}
.mriModuleHead span{display:block; max-width:780px; font-size:12.5px; line-height:1.45; color:var(--text-secondary);}
.mriModuleHead button{border:1px solid var(--line); background:var(--surface); color:var(--navy); border-radius:9px; padding:8px 11px; font-size:12px; cursor:pointer;}
.mriModuleHead button:hover{border-color:var(--accent); color:var(--accent);}
.mriModuleHeadActions{display:flex; gap:8px; flex-wrap:wrap; align-items:center; justify-content:flex-end; flex:1 1 460px;}
.mriModuleHeadActions button{display:inline-flex; align-items:center; gap:6px; white-space:nowrap;}
.mriStudentHeaderSelector{display:flex;align-items:center;min-width:0;}
.mriStudentHeaderSelector:empty{display:none;}
.mriStudentHeaderSelector label{display:flex;align-items:center;gap:8px;margin:0;color:#526175;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.06em;}
.mriStudentHeaderSelector select{min-width:240px;max-width:320px;border:1px solid var(--line);border-radius:9px;padding:8px 10px;background:var(--surface);color:var(--navy);font:inherit;font-size:12px;text-transform:none;letter-spacing:0;font-weight:700;}
.mriModuleTabs{display:flex; gap:7px; flex-wrap:wrap; margin-bottom:12px;}
.mriModuleTabs button{border:1px solid #d7e6ff; background:#f8fbff; color:var(--navy); border-radius:999px; padding:7px 10px; font-size:11.5px; cursor:pointer;}
.mriModuleTabs button.active,.mriModuleTabs button:hover{background:var(--navy); border-color:var(--navy); color:var(--text-inverse);}
.mriModuleBody{border:1px solid var(--line); border-radius:14px; background:var(--surface); padding:12px; min-height:170px; overflow:hidden;}
.mriModuleGrid{display:grid; grid-template-columns:repeat(3,1fr); gap:10px;}
/* students filter bar */
.mriFilterBar{display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-bottom:12px; padding:10px 12px; border:1px solid var(--line); border-radius:12px; background:#fbfcff;}
.mriFilterBar input,.mriFilterBar select{border:1px solid var(--line); border-radius:8px; padding:8px 10px; font-size:12.5px; background:var(--surface); outline:none; color:var(--navy);}
.mriFilterBar input:focus,.mriFilterBar select:focus{border-color:var(--accent);}
.mriFilterSearch{flex:1 1 200px; min-width:150px;}
/* Filter-bar Clear/Add buttons migrated to .btn (.btn--ghost / .btn--primary)
 * in js/30-mri-data.js. .mriFilterCount kept for layout. */
.mriFilterCount{font-size:11.5px; color:var(--muted); margin-left:auto;}
.mriFilterBar .btn--primary{margin-left:0;}
.mriFilterDate{position:relative; display:inline-flex; align-items:center; gap:5px; font-size:11px; font-weight:700; color:var(--muted); white-space:nowrap;}
.mriFilterDate input{padding:7px 8px;}
/* Date-filter picker: the native input stays as the value store (hidden); .mriDpBtn is the
   visible trigger and .mriDatePop is a booking-calendar-styled popover on <body>. */
.mriFilterDate input[type="date"][data-dp]{position:absolute; width:1px; height:1px; margin:0; padding:0; border:0; opacity:0; pointer-events:none;}
.mriDpBtn{display:inline-flex; align-items:center; gap:6px; border:1px solid var(--line); background:var(--surface); color:var(--navy); border-radius:8px; padding:6px 9px; font-size:11.5px; font-weight:700; cursor:pointer; white-space:nowrap;}
.mriDpBtn:hover{border-color:var(--accent); color:var(--accent);}
.mriDpBtn svg.lucide{width:13px; height:13px; color:var(--muted); flex:none;}
.mriDpBtn:hover svg.lucide{color:var(--accent);}
.mriDpBtn .ph{color:var(--muted); font-weight:600;}
.mriDatePop{position:fixed; z-index:var(--z-popover-overlay); width:272px; display:flex; flex-direction:column; gap:8px; background:var(--surface); border:1px solid var(--line); border-radius:14px; padding:12px; box-shadow:0 18px 44px rgba(15,33,68,.24);}
.mriDatePop .mriCalDay{min-height:34px; padding:2px; border-radius:8px;}
.mriDatePop .mriCalDay b{font-size:12px;}
.mriDatePop .mriCalDay.isToday:not(.selected){border-color:var(--accent);}
.mriDatePop .mriCalDay.isToday:not(.selected) b{color:var(--accent);}
.mriDpFoot{display:flex; align-items:center; justify-content:space-between; border-top:1px solid var(--line); padding-top:8px;}
.mriDpFoot button{border:none; background:none; color:var(--accent); font-size:12px; font-weight:700; cursor:pointer; padding:4px 6px; border-radius:6px;}
.mriDpFoot button:hover{background:#eef5ff;}
.mriCreateCard .mriFieldLabel{display:flex; flex-direction:column; gap:3px; font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.03em; color:var(--muted); flex:1 1 120px; min-width:120px;}
.mriCreateCard .mriFieldLabel input,.mriCreateCard .mriFieldLabel select{flex:none; width:100%;}
.mriAddDrawer .mriCreateCard .mriFieldLabel{min-width:0;}
.mriModuleTile{border:1px solid var(--border); border-radius:12px; background:var(--surface); padding:10px; font-size:12px; line-height:1.4;}
.mriModuleTile[data-mri-detail-id]{cursor:pointer;}
.mriModuleTile[data-mri-detail-id]:hover{box-shadow:0 8px 20px rgba(31,56,100,.12); transform:translateY(-1px);}
.mriModuleTile b{display:block; color:var(--navy); font-size:13px; margin-bottom:3px;}
.mriModuleTile span{display:block; color:var(--muted);}
.mriModuleTile small{display:block; color:#795548; margin-top:5px;}
.mriModuleTile.risk{border-left:5px solid #c0392b;}
.mriModuleTile.warn{border-left:5px solid #b25c00;}
.mriModuleTile.good{border-left:5px solid #0e7c7b;}
/* Clinical Sites: per-site capacity meter */
.mriCapBar{height:6px; border-radius:999px; background:var(--surface-sunken); margin-top:6px; overflow:hidden;}
.mriCapBar span{display:block; height:100%; border-radius:999px; background:var(--success-solid);}
.mriCapBar.tight span{background:var(--warning-solid);}
.mriCapBar.full span{background:var(--danger-solid);}
/* Clinical Sites: sites-only network map + Places prospecting */
.mriSitesMapCard{border:1px solid var(--border); border-radius:14px; background:var(--surface); margin-bottom:12px; overflow:hidden;}
.mriSitesMapHead{display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:10px; padding:10px 12px; border-bottom:1px solid var(--border);}
.mriSitesMapHead b{display:block; color:var(--navy); font-size:13px;}
.mriSitesMapHead span{display:block; color:var(--text-tertiary); font-size:11.5px; margin-top:2px; max-width:56ch;}
.mriSitesMapHead form{flex:1 1 300px; max-width:520px;}
/* Fill the rest of the viewport so the whole map is visible without scrolling.
 * The offset covers the app header + module head + map-card head above it.
 * Must also out-rank .app-shell.mri-max .mriMap.mriDashboardMap (height:100%). */
.mriMap.mriDashboardMap.mriSitesMap,
.app-shell.mri-max .mriMap.mriDashboardMap.mriSitesMap{height:clamp(320px, calc(100dvh - 350px), 1200px); min-height:320px; border-radius:0; border-left:none; border-right:none; margin:0;}
.mriLegend i.watch{background:var(--warning-solid);}
.mriLegend i.prospect{background:var(--orange-500); border-radius:50% 50% 50% 0; transform:rotate(-45deg);}
.mriPin.prospect span{width:13px; height:13px; background:var(--orange-500); border:2px solid var(--neutral-0);}
.mriSitesMapHead .mriLocSearch select{border:1px solid var(--border); border-radius:7px; padding:5px 6px; font-size:12px; color:var(--navy); background:var(--surface);}
.mriProspectResults:not(:empty){border-top:1px solid var(--border); padding:10px 12px; display:flex; flex-direction:column; gap:8px; max-height:300px; overflow:auto;}
.mriProspectHead{display:flex; flex-wrap:wrap; align-items:center; gap:8px;}
.mriProspectHead b{color:var(--navy); font-size:12.5px;}
.mriProspectHead span{color:var(--text-tertiary); font-size:11.5px; flex:1 1 200px;}
.mriProspectBriefing{border:1px solid var(--border); border-left:4px solid var(--accent); border-radius:10px; background:var(--surface-sunken); padding:10px 12px; font-size:12px; line-height:1.55; color:var(--text-primary);}
.mriProspectBriefing p{margin:0 0 6px;}
.mriProspectBriefing ul,.mriProspectBriefing ol{margin:0 0 6px 18px; padding:0;}
.mriProspectRow{display:flex; align-items:flex-start; justify-content:space-between; gap:10px; border:1px solid var(--border); border-radius:10px; padding:8px 10px;}
.mriProspectActions{display:flex; flex-direction:column; gap:6px; align-items:stretch;}
.mriProspectDraft{margin-top:8px; border:1px solid var(--border); border-radius:8px; background:var(--surface-sunken); padding:8px 10px; font-size:11.5px; color:var(--text-secondary);}
.mriProspectDraft pre{margin:0 0 6px; white-space:pre-wrap; font:inherit; color:var(--text-primary); max-height:260px; overflow:auto;}
.mriProspectRow > div{min-width:0;}
.mriProspectRow b{display:block; color:var(--navy); font-size:12.5px;}
.mriProspectRow span{display:block; color:var(--text-secondary); font-size:11.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.mriProspectRow small{display:block; color:var(--text-tertiary); font-size:11px; margin-top:2px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.mriProspectRow .btn,.mriProspectRow .s360Chip{flex:none;}
.mriModuleMapLayout{display:grid; grid-template-columns:minmax(0,1fr); gap:12px; align-items:start;}
/* right-edge add tabs on the map */
.mriMapAddTabs{position:absolute; top:50%; right:0; transform:translateY(-50%); display:flex; flex-direction:column; gap:8px; z-index:4;}
.mriMapAddTab{display:inline-flex; align-items:center; gap:7px; border:1px solid var(--navy); border-right:none; background:var(--navy); color:var(--text-inverse); border-radius:11px 0 0 11px; padding:10px 13px; font-size:12px; font-weight:800; cursor:pointer; white-space:nowrap; box-shadow:-6px 6px 18px rgba(15,33,68,.18);}
.mriMapAddTab:hover{background:#16335c;}
.mriMapAddTab svg.lucide{width:15px; height:15px;}
/* selection-details drawer on the right side of the map */
.mriMapInfoDrawer{position:absolute; top:0; right:0; height:100%; width:min(360px, 84%); background:var(--surface); border-left:1px solid var(--line); box-shadow:-16px 0 40px rgba(15,33,68,.22); display:flex; flex-direction:column; overflow:hidden; z-index:7; transform:translateX(100%); transition:transform var(--duration-slow) var(--ease-standard); will-change:transform;}
.mriMapInfoDrawer.open{transform:translateX(0);}
.mriMapInfoHead{display:flex; align-items:center; justify-content:space-between; gap:10px; padding:11px 13px; border-bottom:1px solid var(--line);}
.mriMapInfoHead b{color:var(--navy); font-size:13px;}
.mriMapInfoHead button{border:none; background:none; color:var(--muted); cursor:pointer; display:inline-flex;}
.mriMapInfoHead button:hover{color:var(--navy);}
.mriMapInfoBody{display:flex; flex-direction:column; gap:10px; padding:12px; overflow:auto; flex:1;}
/* assign / match picker modal */
.mriAssignModal{position:fixed; inset:0; z-index:var(--z-modal); display:flex; align-items:center; justify-content:center; padding:18px;}
.mriAssignBackdrop{position:absolute; inset:0; background:rgba(15,33,68,.5);}
.mriAssignPanel{position:relative; z-index:1; width:min(500px, 100%); max-height:min(80vh, 680px); background:var(--surface); border:1px solid var(--line); border-radius:16px; box-shadow:0 24px 64px rgba(15,33,68,.32); display:flex; flex-direction:column; overflow:hidden;}
.mriAssignHead{display:flex; align-items:flex-start; justify-content:space-between; gap:12px; padding:14px 16px; border-bottom:1px solid var(--line);}
.mriAssignHead b{display:block; color:var(--navy); font-size:15px;}
.mriAssignHead span{display:block; color:var(--muted); font-size:11.5px; margin-top:2px;}
.mriAssignHead button{border:none; background:none; color:var(--muted); cursor:pointer; display:flex;}
.mriAssignHead button:hover{color:var(--navy);}
.mriAssignList{display:flex; flex-direction:column; gap:7px; padding:12px; overflow:auto;}
/* Booking calendar (Airbnb-style) inside the assign modal — tokens only. */
.mriBookingCal{display:flex; flex-direction:column; gap:10px;}
.mriBookingTop{display:flex; align-items:center; justify-content:space-between; gap:10px;}
.mriCalBack{display:inline-flex; align-items:center; gap:6px; border:1px solid var(--line); background:var(--surface); color:var(--navy); border-radius:9px; padding:6px 10px; font-size:12px; font-weight:700; cursor:pointer;}
.mriCalBack:hover{border-color:var(--accent); color:var(--accent);}
.mriCalBack svg.lucide{width:13px; height:13px;}
.mriBookingLegend{display:inline-flex; align-items:center; gap:10px; font-size:10.5px; font-weight:700; color:var(--muted);}
.mriBookingLegend span{display:inline-flex; align-items:center; gap:4px;}
.mriBookingLegend i{width:10px; height:10px; border-radius:3px; border:1px solid var(--border-strong);}
.mriBookingLegend i.openday{background:var(--success-surface); border-color:var(--success-solid);}
.mriBookingLegend i.partial{background:var(--warning-surface); border-color:var(--warning-solid);}
.mriBookingLegend i.full{background:var(--danger-surface); border-color:var(--danger-solid);}
.mriBookingLegend i.closedday,.mriCalDay.closedday{background:repeating-linear-gradient(45deg, var(--surface-sunken), var(--surface-sunken) 4px, var(--border) 4px, var(--border) 7px); border-color:var(--border-strong);}
.mriBookingBlocked{display:flex; gap:10px; align-items:flex-start; border:1px solid var(--warning-solid); background:var(--warning-surface); border-radius:11px; padding:10px 12px;}
.mriBookingBlocked svg.lucide{width:16px; height:16px; color:var(--warning-text); flex:none; margin-top:1px;}
.mriBookingBlocked b{display:block; color:var(--warning-text); font-size:12.5px;}
.mriBookingBlocked span{display:block; color:var(--warning-text); font-size:11.5px; margin-top:2px;}
.mriCalHead{display:flex; align-items:center; justify-content:space-between; gap:8px;}
.mriCalHead b{color:var(--navy); font-size:13.5px;}
.mriCalHead button{width:30px; height:30px; border:1px solid var(--line); background:var(--surface); color:var(--navy); border-radius:8px; font-size:16px; cursor:pointer;}
.mriCalHead button:hover{border-color:var(--accent); color:var(--accent);}
.mriCalWeekdays,.mriCalGrid{display:grid; grid-template-columns:repeat(7, minmax(0,1fr)); gap:4px;}
.mriCalWeekdays span{text-align:center; font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.04em; color:var(--muted);}
.mriCalDay{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px; min-height:44px; border:1px solid var(--line); background:var(--surface); border-radius:9px; cursor:pointer; padding:4px 2px;}
.mriCalDay b{font-size:12.5px; color:var(--ink); font-weight:700;}
.mriCalDay i{font-style:normal; font-size:9.5px; font-weight:800; line-height:1;}
.mriCalDay.openday{background:var(--success-surface); border-color:var(--success-solid);}
.mriCalDay.openday i{color:var(--success-text);}
.mriCalDay.partial{background:var(--warning-surface); border-color:var(--warning-solid);}
.mriCalDay.partial i{color:var(--warning-text);}
.mriCalDay.full{background:var(--danger-surface); border-color:var(--danger-surface); cursor:not-allowed; opacity:.75;}
.mriCalDay.full b{color:var(--danger-text); text-decoration:line-through;}
.mriCalDay.full i{color:var(--danger-text);}
.mriCalDay.past,.mriCalDay.blockedday{background:var(--surface-sunken); border-color:var(--border-subtle); cursor:not-allowed;}
.mriCalDay.past b,.mriCalDay.blockedday b{color:var(--text-disabled); font-weight:600;}
.mriCalDay.blockedday i{color:var(--text-disabled);}
.mriCalDay.inrange{box-shadow:inset 0 0 0 2px var(--accent);}
.mriCalDay.selected{background:var(--accent); border-color:var(--accent);}
.mriCalDay.selected b,.mriCalDay.selected i{color:var(--text-inverse); text-decoration:none;}
.mriCalDay:not([disabled]):hover{border-color:var(--accent);}
.mriBookingCtl{display:flex; flex-wrap:wrap; align-items:center; gap:10px;}
.mriBookingWeeks{display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:700; color:var(--navy); white-space:nowrap;}
.mriBookingWeeks input{width:58px; border:1px solid var(--line); border-radius:8px; padding:7px 8px; font-size:12.5px; background:var(--surface); color:var(--ink);}
.mriBookingDays{display:inline-flex; align-items:center; gap:4px; flex-wrap:wrap;}
.mriBookingDays>span{font-size:12px; font-weight:700; color:var(--navy); margin-right:3px; white-space:nowrap;}
.mriDayChip{border:1px solid var(--line); background:var(--surface); color:var(--muted); border-radius:999px; padding:5px 9px; font-size:11px; font-weight:800; cursor:pointer;}
.mriDayChip:hover{border-color:var(--accent);}
.mriDayChip.on{background:var(--accent); border-color:var(--accent); color:var(--text-inverse);}
.mriAddFieldBar{display:flex; align-items:center; gap:10px; margin:10px 0 4px; flex-wrap:wrap;}
.mriAddFieldBar small{color:var(--muted); font-size:11.5px;}
.mriQueueTable{margin-top:12px;}
.mriQueueTable tr.risk td{background:var(--danger-surface);}
.mriQueueTable tr.warn td{background:var(--warning-surface);}
.mriQueueCtl{white-space:nowrap;}
.mriQueueCtl select{border:1px solid var(--line); border-radius:8px; padding:4px 6px; font-size:11.5px; background:var(--surface); color:var(--ink); max-width:130px;}
.mriQueueCtl .s360Chip{margin:0 6px 0 0;}
.mriQueueCtl button{border:1px solid var(--line); background:var(--surface); color:var(--accent); border-radius:8px; padding:4px 8px; font-size:11px; font-weight:700; margin-left:6px; cursor:pointer;}
.mriQueueCtl button:hover{border-color:var(--accent);}
.mriCellRisk{color:var(--danger-text); font-weight:700;}
.mriBookingSummary{flex:1; min-width:180px; border:1px solid var(--line); background:var(--surface-sunken); border-radius:10px; padding:8px 11px;}
.mriBookingSummary b{display:block; color:var(--navy); font-size:12.5px;}
.mriBookingSummary span{display:block; color:var(--muted); font-size:11px; margin-top:1px;}
.mriBookingSummary.warn{border-color:var(--warning-solid); background:var(--warning-surface);}
.mriBookingSummary.warn b,.mriBookingSummary.warn span{color:var(--warning-text);}
.mriBookingActions{display:flex; justify-content:flex-end; gap:8px;}
.mriBookingActions .mriAssignBtn[disabled]{opacity:.5; cursor:not-allowed;}
.mriCalDay.closedday{cursor:not-allowed;}
.mriCalDay.closedday b{color:var(--text-secondary); font-weight:600;}
.mriCalDay.closedday i{color:var(--text-secondary);}
.mriBookingMonthDetail{display:flex; flex-direction:column; gap:6px; border:1px solid var(--line); background:var(--surface-sunken); border-radius:10px; padding:9px 11px;}
.mriBookingMonthDetail small{color:var(--muted); font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.04em;}
.mriBookingSeat{display:flex; align-items:flex-start; gap:7px; font-size:11.5px; color:var(--ink);}
.mriBookingSeat svg.lucide{width:13px; height:13px; color:var(--accent); flex:none; margin-top:1px;}
.mriBookingSeat.closed svg.lucide{color:var(--warning-text);}
.mriBookingSeat b{color:var(--navy);}
.mriClosureForm{display:flex; flex-wrap:wrap; align-items:flex-end; gap:8px; margin-top:8px;}
.mriClosureForm label{display:flex; flex-direction:column; gap:3px; font-size:11px; font-weight:700; color:var(--navy);}
.mriClosureForm input{border:1px solid var(--line); border-radius:8px; padding:7px 9px; font-size:12px; background:var(--surface); color:var(--ink);}
.mriClosureForm input[name="reason"]{min-width:180px;}
.mriClosureForm button{border:none; background:var(--navy); color:var(--text-inverse); border-radius:9px; padding:9px 12px; font-size:12px; font-weight:700; cursor:pointer;}
.mriClosureRow{display:flex; align-items:center; justify-content:space-between; gap:10px; border:1px solid var(--line); border-radius:9px; padding:8px 10px; margin-bottom:6px; background:var(--surface);}
.mriClosureRow b{display:block; color:var(--navy); font-size:12px;}
.mriClosureRow span{display:block; color:var(--muted); font-size:11px;}
.mriClosureRow button{border:1px solid transparent; background:var(--danger-surface); color:var(--danger-text); border-radius:7px; padding:6px 9px; font-size:11.5px; font-weight:700; cursor:pointer;}
.mriAssignRow{display:flex; align-items:center; gap:12px; text-align:left; border:1px solid var(--line); border-left-width:5px; background:var(--surface); border-radius:11px; padding:10px 12px;}
.mriAssignRow.inPolicy{border-left-color:var(--success-solid);}
.mriAssignRow.outPolicy{border-left-color:#ea7a17;}
.mriAssignRow.occupied{background:#fbfcff;}
.mriAssignWho{flex:1 1 auto; min-width:0;}
.mriAssignWho b{display:block; color:var(--navy); font-size:13px;}
.mriAssignWho span{display:block; color:var(--muted); font-size:11.5px;}
.mriAssignMeta{text-align:right; flex:0 0 auto;}
.mriAssignMeta b{display:block; color:var(--navy); font-size:14px;}
.mriAssignMeta span{display:block; color:var(--muted); font-size:10.5px;}
.mriAssignRow.inPolicy .mriAssignMeta b{color:#15803d;}
.mriAssignRow.outPolicy .mriAssignMeta b{color:#c2620f;}
.mriAssignActions{display:flex; flex-direction:column; gap:5px; flex:0 0 auto;}
.mriAssignBtn{border:1px solid var(--line); border-radius:8px; padding:6px 11px; font-size:11.5px; font-weight:700; cursor:pointer; white-space:nowrap;}
.mriAssignBtn.assign{background:var(--navy); color:var(--text-inverse); border-color:var(--navy);}
.mriAssignBtn.assign:hover{background:#16335c;}
.mriAssignBtn.waitlist{background:var(--surface); color:#b25c00; border-color:#fed7aa;}
.mriAssignBtn.waitlist:hover{background:#fff7ed; border-color:#ea7a17;}
/* contact modal */
.mriContactPanel{width:min(440px,100%);}
.mriContactBody{padding:14px 16px; overflow:auto; display:flex; flex-direction:column; gap:12px;}
.mriContactInfo{display:grid; grid-template-columns:1fr 1fr; gap:8px 14px;}
.mriContactInfo div b{display:block; color:var(--muted); font-size:10.5px; font-weight:800; text-transform:uppercase; letter-spacing:.04em;}
.mriContactInfo div span{display:block; color:var(--navy); font-size:13px;}
.mriContactLinks{display:flex; gap:8px;}
.mriContactLinks a{flex:1; text-align:center; text-decoration:none; background:var(--navy); color:var(--text-inverse); border-radius:9px; padding:9px 12px; font-size:12.5px; font-weight:700;}
.mriContactLinks a:hover{background:#16335c;}
.mriContactForm{display:flex; flex-direction:column; gap:8px; border-top:1px solid var(--line); padding-top:12px;}
.mriContactMethods{display:flex; flex-wrap:wrap; gap:6px;}
.mriContactMethod{border:1px solid var(--line); background:var(--surface); color:var(--navy); border-radius:999px; padding:6px 12px; font-size:12px; font-weight:700; cursor:pointer;}
.mriContactMethod:hover{border-color:var(--accent);}
.mriContactMethod.active{background:var(--navy); color:var(--text-inverse); border-color:var(--navy);}
.mriContactForm textarea{resize:none; min-height:64px; border:1px solid var(--line); border-radius:9px; padding:9px 11px; font-size:12.5px; font-family:inherit; outline:none;}
.mriContactForm textarea:focus{border-color:var(--accent);}
.mriContactForm > button{background:var(--navy); color:var(--text-inverse); border:none; border-radius:9px; padding:9px 12px; font-size:12.5px; font-weight:700; cursor:pointer;}
.mriContactForm > button:hover{background:#16335c;}
.mriFeedbackRecent{border-top:1px solid var(--line); padding-top:10px; display:flex; flex-direction:column; gap:7px; max-height:240px; overflow:auto;}
.mriFeedbackH{margin:0 0 2px; font-size:12px; color:var(--navy);}
/* full-height MRI placement dashboard (desktop) */
@media (min-width:901px){
  .app-shell.mri-max .mainarea{display:flex; flex-direction:column; overflow:hidden;}
  .app-shell.mri-max .app-header{flex:0 0 auto; margin-bottom:12px;}
  .app-shell.mri-max .dashboard-grid{flex:1 1 auto; min-height:0; display:block;}
  .app-shell.mri-max .workspace-card:not(.mri-module-card){display:none;}
  .app-shell.mri-max .mri-module-card{height:100%; display:flex; flex-direction:column; padding:16px;}
  .app-shell.mri-max .mriModuleHead,.app-shell.mri-max .mriModuleTabs{flex:0 0 auto;}
  .app-shell.mri-max .mriModuleBody{flex:1 1 auto; min-height:0; overflow:auto;}
  .app-shell.mri-max .mriModuleMapLayout{height:100%;}
  .app-shell.mri-max .mriMap.mriDashboardMap{height:100%; min-height:0;}
  /* Clinical Sites: the shell flexes to exactly fill the module body, so the
     page never scrolls — the map, prospect results, and table scroll inside. */
  .mriModuleBody.mriSitesFitBody{display:flex; flex-direction:column; overflow:hidden;}
  .mriModuleBody.mriSitesFitBody .mriSitesShell{flex:1 1 auto; min-height:0; height:auto !important;}
}
.mriMap.mriDashboardMap{height:min(82vh, 880px); min-height:600px; margin:0; min-width:0;}
.mriDashboardGoogleMap{position:absolute; inset:0; z-index:0; opacity:0; transition:opacity var(--duration-base) var(--ease-standard);}
.mriDashboardMap.google-ready .mriDashboardGoogleMap{opacity:1;}
.mriMapFallbackLabel{position:absolute; left:14px; top:12px; z-index:2; color:var(--text-tertiary); background:rgba(255,255,255,.88); border:1px solid var(--line); border-radius:999px; padding:4px 9px; font-size:12px; font-weight:700;}
.mriDashboardMap.google-ready .mriMapFallbackLabel{display:none;}
.mriDashboardMap.google-ready:before{display:none;}
.mriDashboardMap.google-ready .mriMapStage{display:none;}
.mriMapStage{position:absolute; inset:0; z-index:1; transform-origin:center center; transition:transform var(--duration-base) var(--ease-standard);}
.mriMapControls{position:absolute; left:12px; top:42px; z-index:4; display:flex; align-items:center; gap:5px; background:rgba(255,255,255,.92); border:1px solid var(--line); border-radius:999px; padding:4px; box-shadow:0 8px 18px rgba(31,56,100,.12);}
.mriMapControls button{border:1px solid #dbe3ef; background:var(--surface); color:var(--navy); border-radius:999px; min-width:30px; height:30px; cursor:pointer; font-weight:800;}
.mriMapControls span{font-size:10.5px; color:var(--text-tertiary); min-width:38px; text-align:center;}
/* map toolbar: search comboboxes + filters in the module header */
/* Full-width filter bar on its own row under the module head (the map module
   populates it; other modules leave it :empty and it collapses). The search
   grows to soak up slack and the filter groups spread across the row. */
.mriMapToolbar{display:flex; flex-wrap:wrap; align-items:center; gap:8px 10px; margin:0 0 12px;}
.mriMapToolbar:empty{display:none;}
.mriMapToolbar .mriLocSearch{max-width:480px;}
.mriMapToolbar .mriMapFilters{flex:1 1 auto; justify-content:space-between;}
.mriLocSearch{display:inline-flex; align-items:center; gap:6px; border:1px solid var(--line); background:var(--surface); border-radius:9px; padding:5px 6px 5px 10px;}
.mriLocSearch:focus-within{border-color:var(--accent); box-shadow:0 0 0 3px rgba(58,111,247,.12);}
.mriLocSearch svg.lucide{width:14px; height:14px; color:var(--muted); flex:none;}
.mriLocSearchInput{border:none; outline:none; background:none; font-size:12px; color:var(--navy); width:210px; max-width:46vw;}
.mriLocSearchInput::placeholder{color:var(--text-disabled);}
/* .mriLocSearch prefix keeps this ahead of the generic `.mriModuleHead button`
 * reset, which otherwise repaints the go button white-on-white. */
.mriLocSearch .mriLocSearchGo{display:inline-flex; align-items:center; justify-content:center; border:none; background:var(--accent); color:var(--text-inverse); border-radius:7px; width:28px; height:28px; min-height:0; padding:0; margin:0; cursor:pointer; flex:none;}
.mriLocSearch .mriLocSearchGo:hover{background:#2a5fe0; color:var(--text-inverse);}
.mriLocSearchGo svg.lucide{width:14px; height:14px; color:var(--text-inverse);}
/* Google Places autocomplete dropdown (attached to document.body by the Maps SDK). */
.pac-container{z-index:var(--z-skip); border-radius:10px; border:1px solid var(--line); box-shadow:var(--shadow-md); font-family:inherit;}
.pac-item{padding:7px 10px; font-size:12px; cursor:pointer;}
.pac-item:hover{background:var(--blue-50);}
.mriCombo{position:relative;}
.mriComboBtn{display:inline-flex; align-items:center; gap:6px; border:1px solid var(--line); background:var(--surface); color:var(--navy); border-radius:9px; padding:8px 11px; font-size:12px; font-weight:700; cursor:pointer; white-space:nowrap;}
.mriComboBtn:hover{border-color:var(--accent); color:var(--accent);}
.mriComboBtn svg.lucide{width:14px; height:14px;}
.mriComboPop{position:absolute; top:calc(100% + 6px); right:0; z-index:var(--z-popover); width:280px; max-width:78vw; background:var(--surface); border:1px solid var(--line); border-radius:12px; box-shadow:0 18px 44px rgba(31,56,100,.22); padding:8px; display:flex; flex-direction:column; gap:7px;}
.mriComboPop[hidden]{display:none;}
.mriComboSearch{border:1px solid var(--line); border-radius:8px; padding:8px 10px; font-size:12.5px; outline:none;}
.mriComboSearch:focus{border-color:var(--accent);}
.mriComboList{display:flex; flex-direction:column; gap:3px; max-height:300px; overflow:auto;}
.mriComboItem{display:flex; flex-direction:column; align-items:flex-start; gap:1px; text-align:left; border:none; background:none; border-radius:8px; padding:7px 9px; cursor:pointer;}
.mriComboItem:hover{background:#eef5ff;}
.mriComboItem b{color:var(--navy); font-size:12.5px;}
.mriComboItem span{color:var(--muted); font-size:11px;}
.mriComboEmpty{color:var(--muted); font-size:12px; padding:8px 9px;}
.mriMapFilters{display:flex; flex-wrap:wrap; align-items:center; gap:8px;}
.mriFilterGroup{display:inline-flex; align-items:center; gap:2px; border:1px solid var(--line); border-radius:9px; padding:3px; background:var(--surface);}
.mriFilterGroup small{color:var(--muted); font-size:10.5px; font-weight:800; text-transform:uppercase; letter-spacing:.04em; padding:0 6px;}
.mriFilterGroup button{border:none; background:none; color:var(--navy); border-radius:7px; padding:5px 9px; font-size:11.5px; font-weight:700; cursor:pointer; white-space:nowrap;}
.mriFilterGroup button:hover{background:#eef5ff;}
.mriFilterGroup button.active{background:var(--navy); color:var(--text-inverse);}
.mriModuleMapSide{display:grid; grid-template-columns:minmax(240px,.85fr) minmax(220px,1fr) minmax(260px,1.15fr); gap:12px; align-items:start; min-width:0;}
.mriModuleMapMatches{display:flex; flex-direction:column; gap:7px;}
.mriModuleMapMatches .mriMatch{margin-top:0;}
.mriModuleMapMatches .mriMatch.inPolicy{border-color:#bbf7d0; background:#f0fdf4;}
.mriModuleMapMatches .mriMatch.outPolicy{border-color:#fed7aa; background:#fff7ed;}
.mriModuleMapStudents{display:flex; flex-wrap:wrap; gap:7px;}
.mriMapInfoCard{border:1px solid #dbe3ef; background:var(--surface); border-radius:14px; padding:12px; box-shadow:0 8px 20px rgba(31,56,100,.08);}
.mriMapInfoCard > span{display:inline-flex; color:var(--text-tertiary); background:var(--surface-sunken); border-radius:999px; padding:3px 8px; font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.06em; margin-bottom:7px;}
.mriMapInfoCard b{display:block; color:var(--navy); font-size:15px; margin-bottom:3px;}
.mriMapInfoCard em{display:block; font-style:normal; color:var(--text-secondary); font-size:12px; margin-bottom:8px;}
.mriMapInfoCard small{display:block; color:var(--text-tertiary); font-size:11.5px; line-height:1.35; margin-top:4px;}
.mriMapInfoCard.risk{border-left:5px solid #c0392b;}
.mriMapInfoCard.good{border-left:5px solid #0e7c7b;}
.mriMapActions{display:grid; grid-template-columns:1fr 1fr; gap:7px; margin-top:11px;}
.mriMapActions button{border:1px solid #d7e6ff; background:#f8fbff; color:var(--navy); border-radius:9px; padding:8px 9px; font-size:11.5px; cursor:pointer;}
.mriMapActions button:hover{border-color:var(--accent); color:var(--accent);}
.mriStudentChip{border:1px solid #dbe3ef; background:var(--surface); color:var(--navy); border-radius:999px; padding:7px 9px; font-size:11px; cursor:pointer; display:flex; align-items:center; gap:6px; max-width:100%;}
.mriStudentChip span{color:var(--text-tertiary); font-size:10px;}
.mriStudentChip.active{background:var(--navy); color:var(--text-inverse); border-color:var(--navy);}
.mriStudentChip.active span{color:#dbeafe;}
.mriStudentChip.risk:not(.active){border-color:#fecaca; background:#fff5f5;}
.mriStudentChip.site:not(.active){border-color:#ccfbf1; background:#f0fdfa;}
.mriModuleEmpty{border:1px dashed var(--border-strong); border-radius:14px; padding:22px; text-align:center; color:var(--text-secondary); font-size:12.5px; line-height:1.45; background:var(--surface-sunken);}
.mriPolicyHint{display:block; margin:8px 0 0; color:var(--warning-text); background:#fff7ed; border:1px solid #fed7aa; border-radius:10px; padding:8px 10px; font-size:11.5px; line-height:1.35;}
.mriImportBox,.mriSheetWrap,.mriDocs{border:1px solid var(--line); border-radius:14px; background:var(--surface); padding:14px;}
.mriImportBox b,.mriSheetIntro b{display:block; color:var(--navy); margin-bottom:4px;}
.mriImportBox span,.mriSheetIntro span{display:block; color:var(--text-tertiary); font-size:12px; line-height:1.4;}
.mriImportForm{display:grid; grid-template-columns:180px 1fr auto; gap:9px; margin:13px 0; align-items:center;}
.mriImportForm select,.mriImportForm input,.mriImportForm button,.mriDocForm input,.mriDocForm textarea,.mriDocForm button{border:1px solid #dbe3ef; border-radius:10px; padding:9px 10px; font-size:12px; background:var(--surface);}
.mriImportForm button,.mriDocForm button{background:var(--navy); color:var(--text-inverse); cursor:pointer; font-weight:800;}
.mriImportResult{font-size:12px; color:var(--text-secondary); background:var(--neutral-50); border:1px dashed var(--border-strong); border-radius:10px; padding:10px;}
.mriSheetWrap h3{margin:16px 0 8px; color:var(--navy); font-size:12px; text-transform:uppercase; letter-spacing:.06em;}
.mriSheet{overflow:auto; border:1px solid var(--border); border-radius:12px; max-height:420px;}
.mriSheet table{border-collapse:collapse; width:max-content; min-width:100%; font-size:12px;}
.mriSheet th{position:sticky; top:0; background:var(--neutral-50); color:var(--text-secondary); text-align:left; z-index:1;}
.mriSheet th,.mriSheet td{border-bottom:1px solid var(--border); border-right:1px solid var(--border); padding:0; min-width:120px;}
.mriSheet th{padding:8px;}
.mriSheetInput{border:0; outline:0; width:100%; min-width:120px; padding:8px; font-size:12px; background:var(--surface);}
.mriSheetInput:focus{box-shadow:inset 0 0 0 2px var(--accent); background:#f8fbff;}
/* Students module: read-only spreadsheet view + record modal. */
.mriStudentTable{max-height:min(66vh, 720px); background:var(--surface);}
.mriStudentTable table{width:100%;}
.mriStudentTable th{cursor:pointer; user-select:none; white-space:nowrap; padding:9px 10px;}
.mriStudentTable th:hover{color:var(--accent);}
.mriStudentTable th .dir{font-style:normal; color:var(--accent); margin-left:4px; font-size:9px;}
.mriStudentTable td{padding:8px 10px; color:var(--ink); background:var(--surface);}
.mriStudentTable tbody tr{cursor:pointer;}
.mriStudentTable tbody tr:hover td,.mriStudentTable tbody tr:focus-visible td{background:#f2f7ff;}
.mriStudentTable td:first-child{font-weight:700; color:var(--navy); white-space:nowrap;}
.mriStudentTable .mriCellClamp{max-width:280px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.mriStudentTable .mriSheetEmptyRow td{text-align:center; color:var(--muted); padding:24px; cursor:default;}
.mriStuStatus{display:inline-block; border-radius:999px; padding:3px 9px; font-size:10.5px; font-weight:800; background:var(--surface-sunken); color:var(--text-secondary); white-space:nowrap;}
.mriStuStatus.good{background:var(--success-surface); color:var(--success-text);}
.mriStuStatus.risk{background:var(--danger-surface); color:var(--danger-text);}
.mriStudentPanel{width:min(780px, 100%); max-height:min(88vh, 780px);}
/* Program director: clinical log types table + view/edit/create modal. */
.dirLogHead{display:flex; align-items:flex-start; justify-content:space-between; gap:12px; margin-bottom:10px;}
.dirLogHead h3{margin:0;}
.dirLogHead .btn{flex:none; white-space:nowrap;}
.mriLogTypePanel{width:min(640px, 100%); max-height:min(86vh, 700px);}
.mriLogTypeBody{padding:14px 16px; overflow:auto; display:flex; flex-direction:column; gap:14px;}
.mriLogTypeBody .mriDetailFields{margin-bottom:0;}
.mriLogTypeBody .mriDetailFields .full{grid-column:1 / -1;}
.dirLogTypeForm{display:grid; grid-template-columns:1fr 1fr; gap:10px;}
.dirLogTypeForm label{display:flex; flex-direction:column; gap:4px; font-size:11px; font-weight:700; color:var(--navy);}
.dirLogTypeForm .full{grid-column:1 / -1;}
.dirLogTypeForm input,.dirLogTypeForm select,.dirLogTypeForm textarea{border:1px solid var(--line); border-radius:9px; padding:8px 10px; font:inherit; font-size:12.5px; background:var(--surface); color:var(--ink);}
.dirLogTypeForm textarea{resize:vertical;}
.dirLogTypeForm .mriBookingActions{margin-top:4px;}
.dirLogTypeForm .btn--danger-soft{margin-right:auto;}
@media(max-width:560px){.dirLogTypeForm{grid-template-columns:1fr;}}
.mriStudentModalBody{padding:14px 16px; overflow:auto; display:flex; flex-direction:column; gap:16px;}
.mriStuSection>small{display:block; color:var(--muted); font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.05em; margin-bottom:7px;}
.mriStudentModalBody .mriDetailFields{grid-template-columns:repeat(3, 1fr); margin-bottom:0;}
.mriStuPlacements{display:flex; flex-direction:column; gap:8px;}
.mriStuPlacement{border:1px solid var(--line); border-left:4px solid var(--border-strong); border-radius:10px; padding:9px 11px; background:var(--surface-sunken);}
.mriStuPlacement.good{border-left-color:var(--success-solid); background:var(--success-surface);}
.mriStuPlacement b{display:block; color:var(--navy); font-size:12.5px;}
.mriStuPlacement span{display:block; color:var(--text-secondary); font-size:11.5px; margin-top:2px;}
.mriStuPlacement small{display:block; color:var(--muted); font-size:11px; margin-top:2px;}
.mriStuSection .mriNoteForm{border-top:none; padding:8px 0 0;}
@media(max-width:860px){.mriStudentModalBody .mriDetailFields{grid-template-columns:1fr 1fr;}}
@media(max-width:560px){.mriStudentModalBody .mriDetailFields{grid-template-columns:1fr;}}
.mriDocForm{display:grid; gap:9px; margin:12px 0;}
.mriDocForm textarea{min-height:150px; resize:vertical; font-family:inherit; line-height:1.45;}
.mriDocList{display:grid; gap:10px;}
.mriDocList article{border:1px solid var(--border); border-radius:12px; padding:11px; background:#fbfdff;}
.mriDocList article b{display:block; color:var(--navy);}
.mriDocList article span{display:block; color:var(--text-tertiary); font-size:11px; margin:3px 0 7px;}
.mriDocList article p{white-space:pre-wrap; margin:0; color:var(--neutral-700); font-size:12px; line-height:1.45;}
.mriBackupBox{border:1px solid var(--line); border-radius:14px; background:var(--surface); padding:14px;}
.mriBackupGrid{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px; margin:12px 0;}
.mriBackupAction{border:1px solid #d7e6ff; background:#f8fbff; color:var(--navy); border-radius:12px; padding:12px; text-decoration:none; text-align:left; cursor:pointer; min-height:92px;}
.mriBackupAction b{display:block; margin-bottom:5px;}
.mriBackupAction span{display:block; color:var(--text-tertiary); font-size:12px; line-height:1.35;}
.mriBackupAction.danger{border-color:#f3c0b6; background:#fdf3f1;}
.mriBackupAction.danger b{color:#b3402b;}
.mriBackupAction.danger:hover{border-color:#c0392b; background:#fbe9e6;}
.mriInlineEdit{display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin-top:10px; padding-top:9px; border-top:1px solid #eef2f7;}
.mriInlineEdit label{font-size:10px; text-transform:uppercase; letter-spacing:.08em; color:var(--text-tertiary);}
.mriInlineEdit select,.mriInlineEdit input{border:1px solid var(--line); border-radius:8px; padding:6px 8px; font-size:12px; background:var(--surface); color:#10213f; min-width:86px;}
.mriInlineEdit input{width:72px;}
/* Inline "Archive" action — soft-danger, mirrors .btn--danger-soft tokens. */
.mriInlineEdit button{border:1px solid transparent; background:var(--danger-surface); color:var(--danger-text); border-radius:var(--radius-sm); padding:6px 9px; font-size:12px; font-weight:var(--weight-semibold); cursor:pointer;}
.mriInlineEdit button:hover{filter:brightness(.97);}
.mriCreateCard{border:1px solid var(--border); background:var(--surface-sunken); border-radius:12px; padding:10px; margin-bottom:10px;}
.mriCreateCard b{display:block; color:var(--navy); font-size:12.5px; margin-bottom:8px;}
.mriCreateCard div{display:flex; flex-wrap:wrap; gap:7px;}
.mriCreateCard input,.mriCreateCard select{border:1px solid var(--line); border-radius:8px; padding:7px 9px; font-size:12px; background:var(--surface); min-width:120px; flex:1 1 120px;}
/* Add button migrated to .btn (see mriCreateCard() in js/20-boards-nav.js). */
.mriDetailDrawer{position:absolute; top:12px; right:12px; bottom:12px; width:min(390px,calc(100% - 24px)); background:var(--surface); border:1px solid var(--line); border-radius:14px; box-shadow:0 18px 48px rgba(31,56,100,.22); display:flex; flex-direction:column; overflow:hidden; z-index:calc(var(--z-drawer) - 2);}
.mriDrawerBackdrop{position:fixed; inset:0; background:rgba(15,33,68,.42); opacity:0; pointer-events:none; transition:opacity var(--duration-slow) var(--ease-standard); z-index:calc(var(--z-drawer) - 1);}
.mriDrawerBackdrop.open{opacity:1; pointer-events:auto;}
.mriAddDrawer{position:fixed; top:0; right:0; height:100dvh; width:min(440px,92vw); background:var(--surface); border-left:1px solid var(--line); box-shadow:-18px 0 48px rgba(31,56,100,.22); display:flex; flex-direction:column; overflow:hidden; z-index:var(--z-drawer); transform:translateX(100%); transition:transform var(--duration-slow) var(--ease-standard); will-change:transform;}
.mriAddDrawer.open{transform:translateX(0);}
.mriAddDrawer .mriCreateCard{margin:0; border:none; background:transparent; padding:0;}
.mriAddDrawer .mriCreateCard div{display:grid; grid-template-columns:1fr 1fr; gap:8px;}
.mriAddDrawer .mriCreateCard input,.mriAddDrawer .mriCreateCard select{min-width:0; width:100%;}
.mriAddDrawer .mriCreateCard button{grid-column:1 / -1; padding:9px 12px;}
.mriDrawerDivider{display:flex; align-items:center; gap:10px; margin:16px 0 12px; color:var(--muted); font-size:11px; font-weight:800; text-transform:uppercase; letter-spacing:.06em;}
.mriDrawerDivider:before,.mriDrawerDivider:after{content:''; flex:1; height:1px; background:var(--line);}
.mriBulkImport{display:flex; flex-direction:column; gap:8px;}
.mriDropzone{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px; text-align:center; border:2px dashed #c6d4ea; border-radius:14px; background:#f8fbff; padding:22px 14px; cursor:pointer; transition:border-color var(--duration-base) var(--ease-standard), background var(--duration-base) var(--ease-standard);}
.mriDropzone:hover{border-color:var(--accent); background:#eef5ff;}
.mriDropzone.drag{border-color:var(--accent); background:#e6f0ff;}
.mriDropzone svg.lucide{width:26px; height:26px; color:var(--navy);}
.mriDropzone b{color:var(--navy); font-size:13px;}
.mriDropzone span{color:var(--muted); font-size:11.5px;}
.mriBulkResult{font-size:11.5px; color:var(--text-tertiary); line-height:1.4; background:var(--surface-sunken); border-radius:9px; padding:8px 10px;}
.mriBulkResult b{color:var(--navy);}
.mriDetailHead{display:flex; justify-content:space-between; gap:10px; align-items:flex-start; padding:12px 14px; border-bottom:1px solid var(--line);}
.mriDetailHead b{display:block; color:var(--navy); font-size:14px;}
.mriDetailHead span{display:block; color:var(--muted); font-size:11px; margin-top:2px;}
.mriDetailHead button{border:none; background:none; color:var(--muted); cursor:pointer; font-size:16px;}
.mriDetailActions{display:flex; align-items:center; gap:8px; flex:0 0 auto;}
.mriDetailActions button{display:inline-flex; align-items:center; justify-content:center;}
.mriDetailActions svg.lucide{width:16px; height:16px;}
#btnEditMriRecord:hover{color:var(--accent);}
#btnDeleteMriRecord:hover{color:var(--pdf);}
.mriDetailBody{padding:12px; overflow:auto; flex:1;}
.mriDetailFields{display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:12px;}
.mriDetailFields div{border:1px solid #eef2f7; border-radius:9px; padding:8px; background:#fbfcff;}
.mriDetailFields b{display:block; color:var(--text-tertiary); font-size:10px; text-transform:uppercase; letter-spacing:.06em; margin-bottom:3px;}
.mriDetailFields span{display:block; color:var(--navy); font-size:12px; line-height:1.3; word-break:break-word;}
.mriDetailBody h4{font-size:12px; color:var(--navy); margin:10px 0 8px;}
.mriNote{border-left:4px solid #d7e6ff; background:#f8fbff; border-radius:9px; padding:8px 10px; margin-bottom:8px;}
.mriNote b{display:block; color:var(--navy); font-size:11px; margin-bottom:3px;}
.mriNote span{display:block; color:var(--text-secondary); font-size:12px; line-height:1.35; white-space:pre-wrap;}
/* Clinical-site correspondence thread + compose (placement detail drawer). */
.mriOutreachWrap{margin-top:18px;}
.mriOutreachWrap h4{margin:0 0 8px;}
.mriOutreachMode{border-radius:10px; padding:8px 11px; font-size:11.5px; line-height:1.4; margin-bottom:10px; border:1px solid var(--border);}
.mriOutreachMode.good{background:var(--success-surface); color:var(--success-text); border-color:var(--success);}
.mriOutreachMode.warn{background:var(--warning-surface); color:var(--warning-text); border-color:var(--warning-solid);}
.mriCorrThread{max-height:280px; overflow-y:auto;}
.mriCorr.in{border-left-color:var(--success);}
.mriCorr em{display:block; font-style:normal; font-weight:700; color:var(--text-secondary); font-size:11.5px; margin-bottom:2px;}
.mriOutreachCompose{border:1px solid var(--line); border-radius:11px; padding:10px 12px; margin-top:10px; background:var(--surface-sunken);}
.mriOutreachCompose summary{cursor:pointer; font-weight:800; font-size:12px; color:var(--navy);}
.mriOutreachForm{display:flex; flex-direction:column; gap:8px; margin-top:10px;}
.mriOutreachForm .mriFieldLabel{display:flex; flex-direction:column; gap:3px; font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.03em; color:var(--muted);}
.mriOutreachForm input,.mriOutreachForm textarea{border:1px solid var(--line); border-radius:9px; padding:8px 10px; font-size:12px; outline:none; font-family:inherit;}
.mriOutreachForm textarea{resize:vertical; min-height:120px; line-height:1.4;}
.mriNoteForm{border-top:1px solid var(--line); padding:10px; display:flex; gap:8px;}
.mriNoteForm textarea{flex:1; resize:none; min-height:54px; border:1px solid var(--line); border-radius:9px; padding:8px 10px; font-size:12px; outline:none;}
.mriNoteForm button{background:var(--navy); color:var(--text-inverse); border:none; border-radius:9px; padding:0 12px; cursor:pointer; font-size:12px;}

/* ---------- MRI placement prototype ---------- */
#mriPanel{position:fixed; top:var(--topbar-h); right:0; bottom:0; width:min(760px, 100vw); background:var(--surface);
  border-left:1px solid var(--line); transform:translateX(100%); transition:transform var(--duration-slow) var(--ease-standard); z-index:calc(var(--z-panel) + 2);
  display:flex; flex-direction:column; overflow-y:auto; box-shadow:-14px 0 36px rgba(31,56,100,.14);}
#mriPanel.open{transform:translateX(0);}
#mriPanel .dhead{padding:12px 16px; border-bottom:1px solid var(--line); font-weight:700; font-size:14px; color:var(--navy);
  display:flex; justify-content:space-between; align-items:center; position:sticky; top:0; background:var(--surface); z-index:2;}
#mriPanel .dhead button{border:none; background:none; font-size:16px; cursor:pointer; color:var(--muted);}
.mriNotice{margin:12px 14px 0; border:1px solid #bfdbfe; background:#eff6ff; color:#1e3a8a; border-radius:10px; padding:9px 11px; font-size:12px;}
.mriStats{display:grid; grid-template-columns:repeat(4,1fr); gap:8px; padding:12px 14px;}
.mriStats div{border:1px solid var(--line); border-radius:12px; padding:10px; background:#fbfcff;}
.mriStats b{display:block; color:var(--navy); font-size:21px; line-height:1;}
.mriStats span{font-size:10.5px; color:var(--muted);}
.mriFilters{display:flex; gap:8px; padding:0 14px 12px;}
.mriFilters input,.mriFilters select{border:1px solid var(--line); border-radius:9px; padding:9px 10px; font-size:12.5px; outline:none; background:var(--surface);}
.mriFilters input{flex:1;}
.mriFilters input:focus,.mriFilters select:focus{border-color:var(--accent);}
.mriMap{height:250px; margin:0 14px 14px; border:1px solid var(--line); border-radius:16px; position:relative; overflow:hidden;
  background:radial-gradient(circle at 25% 30%, #dbeafe 0 2px, transparent 3px),
    linear-gradient(135deg,var(--neutral-50),#edf4ff); background-size:36px 36px, auto;}
.mriMap:before{content:'US clinical placement map mockup'; position:absolute; left:14px; top:12px; color:var(--text-tertiary); font-size:12px; font-weight:700;}
#mriGoogleLayer{position:absolute; inset:0; z-index:0;}
.mriMap.google-ready{background:#eef2f7;}
.mriMap.google-ready:before{content:'Google Maps live layer'; z-index:2; background:rgba(255,255,255,.88); border:1px solid var(--line); border-radius:999px; padding:4px 9px;}
.mriMap.google-ready .mriLines,.mriMap.google-ready .mriPin{display:none;}
.mriLines{position:absolute; inset:0; width:100%; height:100%; pointer-events:none; z-index:0;}
.mriLines line{stroke:var(--neutral-500); stroke-width:.45; stroke-dasharray:1.5 1; opacity:.5;}
.mriLines line.primary{stroke:var(--viz-1); stroke-width:.75; opacity:.9; stroke-dasharray:0;}
.mriLines line.candidate{stroke:var(--viz-3); stroke-width:.6; opacity:.75; stroke-dasharray:1.2 .8;}
.mriLines circle{fill:color-mix(in srgb, var(--viz-1) 8%, transparent); stroke:var(--viz-1); stroke-width:.35; stroke-dasharray:1.2 1; opacity:.9;}
.mriLines circle.site{fill:color-mix(in srgb, var(--viz-3) 8%, transparent); stroke:var(--viz-3);}
.mriPin{position:absolute; transform:translate(-50%,-50%); display:flex; align-items:center; justify-content:center; border:0; background:transparent; cursor:pointer; z-index:1; padding:0;}
.mriPin span{display:flex; align-items:center; justify-content:center; border-radius:999px; box-shadow:0 2px 8px rgba(15,23,42,.25);}
.mriPin.site span{width:13px; height:13px; background:var(--viz-3); border:2px solid var(--neutral-0);}
.mriPin.site.available span{background:var(--viz-3);}
.mriPin.site.assigned span{background:var(--viz-5);}
.mriPin.site.watch span{background:var(--warning-solid);}
.mriPin.student span{width:27px; height:27px; background:var(--viz-1); color:var(--text-inverse); border:2px solid var(--neutral-0); font-size:9px; font-weight:800;}
.mriPin.student.risk span{background:var(--danger-solid); animation:riskpulse 1.2s infinite alternate;}
.mriPin.selected span{outline:3px solid #facc15; outline-offset:2px; transform:scale(1.12);}
@keyframes riskpulse{from{transform:scale(.95);} to{transform:scale(1.12);}}
.mriLegend{position:absolute; right:12px; bottom:10px; display:flex; gap:9px; flex-wrap:wrap; background:rgba(255,255,255,.9); border:1px solid var(--line); border-radius:999px; padding:5px 9px; font-size:10.5px; color:var(--muted); z-index:2;}
.mriLegend span{display:flex; align-items:center; gap:4px;}
.mriLegend i{width:9px; height:9px; border-radius:50%; display:inline-block; background:var(--viz-1);}
.mriLegend i.site,.mriLegend i.available{background:var(--viz-3);} .mriLegend i.assigned{background:var(--viz-5);} .mriLegend i.risk{background:var(--danger-solid);}
.mriGrid{display:grid; grid-template-columns:1fr 1fr; gap:12px; padding:0 14px 14px;}
.mriGrid h3,.mriSectionTitle{font-size:12px; color:var(--navy); margin:0 0 7px; text-transform:uppercase; letter-spacing:.7px;}
.mriFocusCard{margin:0 14px 14px; border:1px solid #bfdbfe; border-radius:14px; padding:11px; background:#f8fbff; font-size:12px;}
.mriFocusCard > div:first-child{display:flex; align-items:center; gap:8px;}
.mriFocusCard b{color:var(--navy);}
.mriFocusCard > div:first-child b{font-size:14px; flex:1;}
.mriFocusCard > div:first-child span{font-size:10px; font-weight:800; color:var(--text-inverse); background:var(--accent); border-radius:999px; padding:2px 8px;}
.mriFocusCard p{margin:5px 0 8px; color:var(--muted); line-height:1.4;}
.mriFocusCard h4{font-size:10.5px; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.6px; margin:8px 0 6px;}
.mriMatch{width:100%; border:1px solid var(--line); border-radius:10px; background:var(--surface); padding:7px 9px; margin-top:5px; cursor:pointer; text-align:left; display:flex; gap:8px; align-items:center;}
.mriMatch:hover{border-color:var(--accent); background:#eef5ff;}
.mriMatch b{flex:1; font-size:11.5px;}
.mriMatch span{font-size:10.5px; color:var(--muted);}
.mriDecision{margin-top:10px; border:1px solid #dbe3ef; border-radius:12px; background:var(--surface); padding:10px;}
.mriDecisionHead{display:flex; align-items:center; gap:8px; margin-bottom:4px;}
.mriDecisionHead b{flex:1; color:var(--navy); font-size:12.5px;}
.mriDecisionHead span{font-size:10px; font-weight:800; color:#0e7c7b; background:#dff7f3; border-radius:999px; padding:2px 8px;}
.mriDecisionStatus{font-size:11.5px; color:var(--text-secondary); margin-bottom:6px;}
.mriNext{font-size:11.5px; color:var(--ink); line-height:1.4; margin:5px 0;}
.mriBlockers{display:flex; gap:5px; flex-wrap:wrap; margin:7px 0;}
.mriBlockers em{font-style:normal; font-size:10.5px; color:var(--warning-text); background:#fff7ed; border:1px solid #fed7aa; border-radius:999px; padding:2px 7px;}
.mriTimeline{border-top:1px dashed var(--line); margin-top:8px; padding-top:7px;}
.mriTimeline p{position:relative; margin:0 0 5px 12px; color:var(--text-tertiary); font-size:11px; line-height:1.35;}
.mriTimeline p:before{content:''; position:absolute; left:-10px; top:5px; width:5px; height:5px; background:var(--accent); border-radius:50%;}
.siteHistory .mriDecisionHead span{color:#7c3aed; background:#f3eeff;}
.mriThread{margin-top:10px; border-top:1px dashed var(--line); padding-top:8px;}
.mriThread h4{font-size:10.5px; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.6px; margin:0 0 6px;}
.mriThreadMsg{border:1px solid var(--border); border-left-width:5px; border-radius:10px; padding:7px 8px; margin-bottom:6px; background:#fbfcff;}
.mriThreadMsg.outreach{border-left-color:var(--accent);} .mriThreadMsg.decision{border-left-color:#0e7c7b;} .mriThreadMsg.match{border-left-color:#7c3aed;} .mriThreadMsg.blocked,.mriThreadMsg.risk{border-left-color:#c0392b;} .mriThreadMsg.research{border-left-color:#b25c00;}
.mriThreadMsg b{display:block; color:var(--navy); font-size:11px; margin-bottom:2px;}
.mriThreadMsg span{display:block; color:var(--text-secondary); font-size:11px; line-height:1.35;}
.mriGhostBtn{width:100%; border:1px dashed #9fb0c7; border-radius:10px; background:var(--neutral-50); color:var(--navy); padding:7px; font-size:11.5px; cursor:pointer;}
.mriGhostBtn:hover{border-color:var(--accent); background:#eef5ff;}
.mriExecutive,.mriImport,.mriOps,.mriMapsPlan{margin:0 14px 14px; border:1px solid var(--line); border-radius:16px; background:var(--surface); padding:12px;}
#mriExecutive{display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:10px;}
.mriExecCard{border:1px solid var(--border); border-top-width:5px; border-radius:12px; padding:9px; background:#fbfcff; min-height:108px;}
.mriExecCard.risk{border-top-color:#c0392b;} .mriExecCard.good{border-top-color:#0e7c7b;} .mriExecCard.warn{border-top-color:#b25c00;} .mriExecCard.info{border-top-color:var(--accent);}
.mriExecCard span{display:block; color:var(--text-tertiary); font-size:10.5px; font-weight:800; text-transform:uppercase; letter-spacing:.5px;}
.mriExecCard b{display:block; color:var(--navy); font-size:24px; line-height:1.1; margin:4px 0;}
.mriExecCard small{display:block; color:var(--text-secondary); font-size:11px; line-height:1.35;}
#mriDemoFlow{display:grid; grid-template-columns:repeat(5,1fr); gap:7px;}
.mriDemoStep{display:flex; align-items:flex-start; gap:7px; border:1px solid var(--border); border-radius:11px; padding:8px; background:var(--neutral-50);}
.mriDemoStep b{width:20px; height:20px; border-radius:50%; background:var(--navy); color:var(--text-inverse); display:flex; align-items:center; justify-content:center; flex:0 0 auto; font-size:10px;}
.mriDemoStep span{font-size:11px; color:var(--text-secondary); line-height:1.35;}
.mriImportHead{display:flex; align-items:flex-end; gap:8px; margin-bottom:10px;}
.mriImportHead h3{font-size:12px; color:var(--navy); margin:0; text-transform:uppercase; letter-spacing:.7px; flex:1;}
.mriImportHead span{font-size:11px; color:var(--muted);}
#mriImportStats{display:grid; grid-template-columns:repeat(4,1fr); gap:8px; margin-bottom:10px;}
#mriImportStats div{border:1px solid var(--border); border-radius:11px; background:var(--neutral-50); padding:8px;}
#mriImportStats b{display:block; color:var(--navy); font-size:18px; line-height:1;}
#mriImportStats span{font-size:10px; color:var(--muted);}
.mriFieldMap{display:grid; grid-template-columns:repeat(2,1fr); gap:7px; margin-bottom:10px;}
.mriField{border:1px solid var(--border); border-left-width:5px; border-radius:10px; padding:8px; font-size:11px; background:var(--surface);}
.mriField.mapped{border-left-color:#0e7c7b;} .mriField.warning{border-left-color:#b25c00;} .mriField.missing{border-left-color:#c0392b;}
.mriField b{display:block; color:var(--navy); font-size:11.5px;}
.mriField span{display:block; color:var(--text-secondary); margin:2px 0;}
.mriField small{color:var(--muted); line-height:1.35; display:block;}
.mriParsedRows{display:grid; grid-template-columns:repeat(2,1fr); gap:7px;}
.mriParsed{border:1px solid var(--border); border-radius:10px; padding:8px; font-size:11px; position:relative; background:#fbfcff;}
.mriParsed.ready{background:#f0fdf9;} .mriParsed.review{background:#fff7ed;}
.mriParsed b{display:block; color:var(--navy);}
.mriParsed span{display:block; color:var(--text-secondary); margin:2px 0;}
.mriParsed em{position:absolute; top:7px; right:8px; font-style:normal; font-size:9.5px; font-weight:800; color:var(--text-inverse); background:#0e7c7b; border-radius:999px; padding:2px 7px;}
.mriParsed.review em{background:#b25c00;}
.mriParsed small{display:block; color:var(--muted); line-height:1.35; padding-right:10px;}
#mriTimeline{display:grid; grid-template-columns:repeat(5,1fr); gap:7px; margin-bottom:12px;}
.mriTimeItem{border:1px solid var(--border); border-top-width:5px; border-radius:11px; padding:8px; background:#fbfcff; font-size:11px; min-height:112px;}
.mriTimeItem.opening{border-top-color:#0e7c7b;} .mriTimeItem.active{border-top-color:var(--accent);} .mriTimeItem.blocked{border-top-color:#b25c00;} .mriTimeItem.risk{border-top-color:#c0392b;} .mriTimeItem.start{border-top-color:#7c3aed;}
.mriTimeItem b{display:block; color:var(--navy); font-size:13px; margin-bottom:4px;}
.mriTimeItem span{display:block; color:var(--ink); font-weight:700; line-height:1.25; margin-bottom:4px;}
.mriTimeItem small{display:block; color:var(--muted); line-height:1.35;}
#mriActionQueue{display:grid; grid-template-columns:repeat(2,1fr); gap:8px;}
.mriAction{border:1px solid var(--border); border-left-width:5px; border-radius:12px; padding:9px; background:var(--surface); font-size:11.5px; position:relative;}
.mriAction.high{border-left-color:#c0392b;} .mriAction.medium{border-left-color:#b25c00;}
.mriAction div{display:flex; gap:8px; align-items:flex-start; padding-right:74px;}
.mriAction b{color:var(--navy); flex:1; font-size:12px;}
.mriAction span{color:var(--muted); font-size:10.5px; white-space:nowrap;}
.mriAction em,.mriAction strong{position:absolute; top:8px; font-style:normal; font-size:9.5px; font-weight:800; border-radius:999px; padding:2px 7px;}
.mriAction em{right:8px; color:var(--text-inverse); background:var(--neutral-600);}
.mriAction strong{right:8px; top:30px; color:#1e3a8a; background:#dbeafe;}
.mriAction.blocked strong{color:var(--warning-text); background:#fff7ed;} .mriAction.needs-work strong{color:#7f1d1d; background:var(--danger-surface);}
.mriAction small{display:block; margin-top:6px; color:var(--text-secondary); line-height:1.35; padding-right:6px;}
#mriMapsPlan{display:grid; grid-template-columns:repeat(5,1fr); gap:7px;}
.mriMapStep{border:1px solid #dbe3ef; border-radius:12px; padding:9px; background:linear-gradient(180deg,#fbfcff,var(--neutral-50)); font-size:11px;}
.mriMapStep b{width:24px; height:24px; border-radius:50%; background:var(--navy); color:var(--text-inverse); display:flex; align-items:center; justify-content:center; margin-bottom:6px;}
.mriMapStep span{display:block; color:var(--navy); font-weight:800; margin-bottom:4px; line-height:1.2;}
.mriMapStep small{display:block; color:var(--muted); line-height:1.35;}
.mriCard{border:1px solid var(--line); border-radius:12px; padding:10px 11px; margin-bottom:8px; font-size:11.5px; line-height:1.45; background:var(--surface); cursor:pointer;}
.mriCard:hover{border-color:var(--accent); box-shadow:0 4px 14px rgba(31,56,100,.10);}
.mriCard.selected{border-color:var(--accent); box-shadow:0 0 0 2px #dbeafe inset;}
.mriCard.risk{border-color:#fecaca; background:#fff7f7;}
.mriTop{display:flex; align-items:center; gap:8px; margin-bottom:3px;}
.mriTop b{color:var(--navy); flex:1; font-size:12.5px;}
.mriTop span{font-size:9.5px; font-weight:800; color:var(--text-inverse); background:var(--accent); border-radius:999px; padding:2px 7px; white-space:nowrap;}
.mriCard small{display:block; margin-top:4px; color:#795548;}
.mriEmpty{border:1px dashed var(--line); border-radius:10px; padding:14px; font-size:12px; color:var(--muted); text-align:center;}
#mriAlerts{padding:0 14px 18px;}
.mriAlert{border:1px solid var(--line); border-left-width:5px; border-radius:12px; padding:10px 11px; margin-bottom:8px; font-size:12px; background:var(--surface);}
.mriAlert b{display:block; color:var(--navy); margin-bottom:2px;}
.mriAlert span{color:var(--muted); line-height:1.4;}
.mriAlert.red{border-left-color:#c0392b;} .mriAlert.amber{border-left-color:#b25c00;} .mriAlert.blue{border-left-color:var(--accent);}

/* pickers / modal / misc */
#notepick{position:fixed; top:60px; left:16px; background:var(--surface); border:1px solid var(--line); border-radius:10px;
  padding:10px; display:none; gap:8px; z-index:var(--z-popover); box-shadow:0 6px 20px rgba(0,0,0,.15);}
#notepick button{width:30px; height:30px; padding:0; border-radius:6px; cursor:pointer; border:1px solid rgba(0,0,0,.12);}
#docmodal{position:fixed; inset:0; background:rgba(20,30,50,.45); display:none; align-items:center; justify-content:center; z-index:var(--z-modal);}
#docmodal .mpanel{background:var(--surface); border-radius:14px; padding:22px; width:340px; box-shadow:0 20px 60px rgba(0,0,0,.3);}
#docmodal h3{font-size:15px; color:var(--navy); margin-bottom:14px;}
#docmodal label{font-size:11px; color:var(--muted); display:block; margin:10px 0 4px;}
#docmodal input, #docmodal select{width:100%; border:1px solid var(--line); border-radius:8px; padding:8px 10px; font-size:13px; outline:none;}
#docmodal input:focus{border-color:var(--accent);}
#docmodal .row{display:flex; gap:10px; margin-top:18px; justify-content:flex-end;}
#docmodal .row button{border-radius:8px; padding:8px 16px; font-size:13px; cursor:pointer; border:1px solid var(--line); background:var(--surface);}
#docmodal .row .primary{background:var(--navy); color:var(--text-inverse); border-color:var(--navy);}

/* internal document viewer windows */
#docwindows{position:fixed; inset:0; pointer-events:none; z-index:68;}
.docwin{position:absolute; width:min(720px, calc(100vw - 28px)); height:min(560px, calc(100vh - var(--topbar-h) - 28px));
  min-width:320px; min-height:230px; background:var(--surface); border:1px solid var(--line); border-radius:13px;
  box-shadow:0 18px 50px rgba(16,28,52,.28); overflow:hidden; display:flex; flex-direction:column; pointer-events:auto;}
.docwin.minimized{height:44px !important; min-height:44px;}
.docwin.minimized .dwtools,.docwin.minimized .dwbody,.docwin.minimized .dwresize{display:none;}
.dwbar{height:44px; flex:0 0 44px; display:flex; align-items:center; gap:9px; padding:7px 9px; cursor:move;
  background:linear-gradient(180deg,var(--surface),#f6f8fc); border-top:4px solid var(--accent); user-select:none;}
.dwicon{width:27px; height:27px; border-radius:7px; color:var(--text-inverse); display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:800; flex:0 0 auto;}
.dwtitle{flex:1; min-width:0; font-size:13px; font-weight:700; color:var(--navy); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.dwbar button{width:28px; height:26px; border:none; border-radius:7px; background:#eef2f8; color:var(--muted); cursor:pointer; font-size:13px;}
.dwbar button:hover{background:#dde6f3; color:var(--ink);}
.dwtools{display:flex; gap:8px; align-items:center; padding:7px 10px; border-top:1px solid #eef2f7; border-bottom:1px solid var(--line); background:#fbfcff;}
.dwtools a,.dwtools button,.docfallback a{font-size:11.5px; border:1px solid var(--line); background:var(--surface); color:var(--navy); text-decoration:none;
  border-radius:8px; padding:5px 9px; cursor:pointer;}
.dwtools a:hover,.dwtools button:hover,.docfallback a:hover{border-color:var(--accent); color:var(--accent);}
.dwbody{flex:1; min-height:0; overflow:auto; background:var(--neutral-50); position:relative;}
.docframe{width:100%; height:100%; border:none; background:var(--surface); display:block;}
.docloading,.docempty,.docnote{font-size:12px; color:var(--muted); padding:14px;}
.docnote{position:absolute; left:10px; bottom:10px; background:rgba(255,255,255,.9); border:1px solid var(--line); border-radius:8px; padding:6px 9px;}
.imgpreview{height:100%; display:flex; align-items:center; justify-content:center; padding:18px; background:#1f2937;}
.imgpreview img{max-width:100%; max-height:100%; object-fit:contain; box-shadow:0 8px 28px rgba(0,0,0,.35); background:var(--surface);}
.textpreview{margin:0; padding:16px; white-space:pre-wrap; word-break:break-word; font:12px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; color:#172033; background:var(--surface); min-height:100%;}
.csvscroll{height:100%; overflow:auto; background:var(--surface);}
.csvtbl{border-collapse:collapse; min-width:100%; font-size:12px;}
.csvtbl th,.csvtbl td{border:1px solid #dbe3ef; padding:6px 8px; text-align:left; vertical-align:top; max-width:280px; overflow:hidden; text-overflow:ellipsis;}
.csvtbl th{position:sticky; top:0; background:#eef3ff; color:var(--navy); font-weight:700; z-index:1;}
.csvtbl tr:nth-child(even) td{background:#fafcff;}
.docfallback{height:100%; display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center; padding:26px; gap:12px; color:var(--muted); background:var(--surface);}
.docfallback .big{font-size:16px; font-weight:700; color:var(--navy);}
.docfallback p{font-size:12.5px; line-height:1.5; max-width:460px;}
.docfallback div:last-child{display:flex; gap:8px; flex-wrap:wrap; justify-content:center;}
.dwresize{position:absolute; right:0; bottom:0; width:18px; height:18px; cursor:nwse-resize;}
.dwresize:after{content:''; position:absolute; right:4px; bottom:4px; width:9px; height:9px; border-right:2px solid #aab4c4; border-bottom:2px solid #aab4c4;}

#hint{position:fixed; bottom:14px; left:16px; font-size:11px; color:var(--muted); background:rgba(255,255,255,.88);
  padding:6px 12px; border-radius:8px; z-index:40; border:1px solid var(--line); max-width:62vw;}
#zoomctl{position:fixed; bottom:14px; right:14px; display:flex; flex-direction:column; gap:6px; z-index:40;}
#zoomctl button{width:34px; height:34px; border-radius:8px; border:1px solid var(--line); background:var(--surface);
  font-size:16px; cursor:pointer; color:var(--navy); box-shadow:0 2px 6px rgba(0,0,0,.08);}
#drawer.open ~ #zoomctl{right:326px;}
#toast{position:fixed; top:64px; left:50%; transform:translateX(-50%); background:var(--navy); color:var(--text-inverse);
  font-size:12.5px; padding:8px 18px; border-radius:20px; z-index:var(--z-toast); opacity:0; transition:opacity var(--duration-slow) var(--ease-standard); pointer-events:none;}
/* toast() promotes the element to a top-layer popover so it stays visible over
 * modal <dialog>s; neutralize the UA popover box without outranking the base
 * rule or the mobile media override below (:where keeps specificity at 1,0,0). */
#toast:where([popover]){right:auto; bottom:auto; margin:0; border:0; width:auto; height:auto; overflow:visible;}

@media (hover:none), (pointer:coarse){
  .node .ndel,.node .adddoc,.sticky .del,.sticky .palette{display:block;}
  .node .ndel{color:rgba(255,255,255,.8);}
  .adddoc{display:flex; align-items:center; justify-content:center;}
  .sticky .palette{display:flex;}
  .fanwrap{top:60px; left:-8px; max-width:min(78vw, 320px); overflow-x:auto;}
  #hint{display:none;}
  .deptnav button,.dash-tools button,.tbtn,#zoomctl button,.drawerHead button,.dhead button{min-height:42px;}
  .boardrow{min-height:58px;}
  .boardrow .bdel,.node .ndel,.sticky .del,.fanitem .docdel{min-width:32px; min-height:32px; display:flex; align-items:center; justify-content:center;}
}

@media (max-width:1180px){
  .dashboard-grid{grid-template-columns:minmax(0,1fr);}
  .mriModuleGrid{grid-template-columns:repeat(2,minmax(0,1fr));}
  #mriExecutive,#mriImportStats,#mriTimeline,#mriMapsPlan{grid-template-columns:repeat(2,minmax(0,1fr));}
  #mriDemoFlow{grid-template-columns:repeat(3,minmax(0,1fr));}
}

@media (max-width:900px){
  .login-screen{padding:30px 18px;}
  .app-shell,.app-shell.sidebar-collapsed{grid-template-columns:1fr; grid-template-rows:auto 1fr;}
  .sidebar{position:sticky; top:0; z-index:20; padding:12px 14px; gap:10px; box-shadow:0 8px 24px rgba(16,33,63,.18);}
  .sidebrand .brand-icon{width:30px; height:30px; flex-basis:30px;}
  .deptnav{flex-direction:row; overflow-x:auto; padding:0 2px 4px 0; min-width:0; scroll-snap-type:x proximity; -webkit-overflow-scrolling:touch; scrollbar-width:none;}
  .deptnav::-webkit-scrollbar,.mriModuleTabs::-webkit-scrollbar,#topbar::-webkit-scrollbar{display:none;}
  .deptnav button,.app-shell.sidebar-collapsed .deptnav button{flex:0 0 auto; white-space:nowrap; justify-content:flex-start; padding:10px 12px; scroll-snap-align:start;}
  .app-shell.sidebar-collapsed .deptnav button span,.app-shell.sidebar-collapsed .sidebrand b{display:inline;}
  .mainarea{padding:16px;}
  .app-header{display:block;}
  .dash-tools{justify-content:flex-start;}
  .dash-tools button{padding:9px 12px;}
  .dash-view-switcher{width:100%; justify-content:space-between; border-radius:12px; padding:9px 11px;}
  .dash-view-switcher select{max-width:65vw;}
  .whoami{width:100%; text-align:left; white-space:normal;}
  .dashboard-grid{grid-template-columns:1fr;}
  .mriModuleGrid{grid-template-columns:1fr 1fr;}
  .admin-create,.admin-user{grid-template-columns:1fr 1fr;}
  .mriModuleTabs{flex-wrap:nowrap; overflow-x:auto; padding-bottom:4px; scroll-snap-type:x proximity; -webkit-overflow-scrolling:touch;}
  .mriModuleTabs button{flex:0 0 auto; scroll-snap-align:start; min-height:38px;}
  .mriModuleBody{overflow:auto; -webkit-overflow-scrolling:touch;}
  .mriModuleMapLayout{grid-template-columns:1fr;}
  .mriMap.mriDashboardMap{height:clamp(480px, 82vh, 820px);}
  .mriModuleMapSide{display:grid; grid-template-columns:1fr 1fr; align-items:start;}
  .mriModuleMapStudents{grid-column:1 / -1; overflow-x:auto; flex-wrap:nowrap; padding-bottom:3px; -webkit-overflow-scrolling:touch; scrollbar-width:none;}
  .mriModuleMapStudents::-webkit-scrollbar{display:none;}
  .mriStudentChip{flex:0 0 auto;}
  .mriCreateCard div,.mriInlineEdit{display:grid; grid-template-columns:repeat(2,minmax(0,1fr));}
  .mriCreateCard input,.mriCreateCard select,.mriCreateCard button,.mriInlineEdit select,.mriInlineEdit input,.mriInlineEdit button{width:100%; min-width:0;}
  .mriDetailDrawer{position:fixed; top:calc(var(--topbar-h) + 10px); right:10px; bottom:10px; width:min(430px,calc(100vw - 20px)); z-index:calc(var(--z-drawer) - 2);}
  .mriAddDrawer{width:min(440px, 94vw);}
  #topbar{align-content:center; align-items:center; flex-wrap:wrap; gap:7px; padding:8px 10px calc(8px + env(safe-area-inset-top));}
  #boardTitle{order:1; max-width:calc(100vw - 96px); flex:1 1 auto;}
  #connstate{order:1;}
  #topbar .spacer{display:none;}
  .avatars{order:2; margin-left:auto;}
  .tbtn{order:2; padding:7px 9px; font-size:12px;}
  #btnBack{order:1; min-width:28px;}
  #drawer{width:min(460px, 100vw);}
  #crm{width:min(460px, 100vw);}
  #mriPanel{width:100vw;}
  .mriStats{grid-template-columns:repeat(2,1fr);}
  .mriGrid{grid-template-columns:1fr;}
  #mriExecutive,#mriDemoFlow,#mriImportStats,.mriFieldMap,.mriParsedRows,#mriTimeline,#mriActionQueue,#mriMapsPlan{grid-template-columns:1fr 1fr;}
  .docwin{min-width:0; width:min(720px,calc(100vw - 20px));}
  #drawer.open ~ #zoomctl{right:14px;}
  #zoomctl{bottom:12px; right:12px; flex-direction:row;}
  #zoomctl button{width:40px; height:40px;}
}

@media (max-width:700px){
  html,body{overscroll-behavior:none;}
  .login-screen{padding:22px 14px calc(22px + env(safe-area-inset-bottom)); min-height:100%; overflow:auto; align-items:flex-start;}
  .login-logo{width:min(180px, 55vw); margin-bottom:24px;}
  .centerwrap{justify-content:flex-start; padding:22px 14px; overflow:auto;}
  .panel{padding:22px 18px; border-radius:14px;}
  .app-shell{height:100dvh; display:flex; flex-direction:column; overflow:hidden;}
  .sidebar{flex:0 0 auto; padding:10px 12px; border-radius:0 0 18px 18px;}
  .sidebrand{gap:8px; min-height:30px;}
  .sidebrand b{font-size:14px;}
  .deptnav{margin:0 -2px; padding:2px 2px 6px;}
  .deptnav button{font-size:12px; padding:9px 10px; border-radius:999px;}
  .mainarea{flex:1 1 auto; min-height:0; padding:14px 12px calc(16px + env(safe-area-inset-bottom));}
  .app-header{margin-bottom:12px;}
  .app-header span{font-size:12px;}
  .dash-tools{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:7px;}
  .dash-tools button{justify-content:center; padding:9px 8px; font-size:11.5px;}
  .dash-view-stack,.dash-view-switcher{grid-column:1 / -1;}
  .dash-tools button span{overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
  .whoami{grid-column:1 / -1; font-size:11.5px;}
  .workspace-card{padding:16px; border-radius:14px;}
  .boardrow{padding:12px; align-items:flex-start;}
  .boardrow .meta{white-space:nowrap;}
  .quick-actions{display:grid; grid-template-columns:1fr;}
  .quick-actions button{width:100%; min-height:40px;}
  .admin-create,.admin-user{grid-template-columns:1fr;}
  .admin-reset{flex-direction:column;}
  .mriModuleHead{display:block;}
  .mriModuleHead button{margin-top:10px; width:100%; min-height:40px;}
  .mriModuleGrid{grid-template-columns:1fr;}
  .mriModuleMapCopy{display:block;}
  .mriModuleMapCopy span{margin-top:3px;}
  .mriMap.mriDashboardMap{height:min(82vh, 720px); min-height:440px; border-radius:14px;}
  .mriModuleMapSide{display:flex; flex-direction:column;}
  .mriModuleMapMatches .mriMatch{min-height:54px;}
  .mriImportForm{grid-template-columns:1fr;}
  .mriBackupGrid{grid-template-columns:1fr;}
  .mriSheet th,.mriSheet td{min-width:110px;}
  .mriSheetInput{min-width:110px;}
  .mriCreateCard div,.mriInlineEdit{grid-template-columns:1fr;}
  .mriDetailDrawer{position:fixed; inset:auto 0 0 0; width:100vw; max-height:86dvh; border-radius:18px 18px 0 0; z-index:calc(var(--z-drawer) - 2);}
  .mriAddDrawer{width:100vw; border-left:none;}
  .mriDetailFields{grid-template-columns:1fr;}
  .mriNoteForm{flex-direction:column; padding-bottom:calc(10px + env(safe-area-inset-bottom));}
  .mriNoteForm button{min-height:40px;}
  .newboard{flex-direction:column;}
  .newboard button{padding:10px 14px;}
  #topbar{gap:6px; overflow-x:auto; align-content:flex-start; -webkit-overflow-scrolling:touch;}
  #boardTitle{flex-basis:calc(100vw - 78px); font-size:14px;}
  #connstate{font-size:10px;}
  .avatars{display:none;}
  .tbtn{flex:1 0 auto; min-width:78px; justify-content:center; padding:8px 9px;}
  .tbtn span{font-size:11.5px;}
  #btnContacts,#btnExport{min-width:96px;}
  #viewport{inset:var(--topbar-h) 0 0 0;}
  .node{width:238px;}
  .sticky{width:148px; min-height:112px;}
  #drawer,#crm,#mriPanel{top:var(--topbar-h); width:100vw; border-left:none; border-right:none; padding-bottom:env(safe-area-inset-bottom);}
  #drawer{border-radius:18px 18px 0 0; top:auto; height:min(72dvh,560px); bottom:0; transform:translateY(100%);}
  #drawer.open{transform:translateY(0);}
  #crm{box-shadow:12px 0 34px rgba(16,28,52,.16);}
  #mriPanel{box-shadow:-12px 0 34px rgba(16,28,52,.16);}
  .dashTopDrawer{width:100vw; max-height:72dvh; border-radius:0 0 18px 18px;}
  .dashAlertsDrawer{top:10px; right:10px; left:10px; width:auto; max-height:72dvh;}
  .dashAiConsole{left:0; right:0; bottom:0; width:100vw; max-height:82dvh; border-radius:18px 18px 0 0;}
  .aiAgent{right:0; left:0; bottom:0; width:100vw; height:88dvh; border-radius:18px 18px 0 0;}
  .dashAiBody{max-height:48dvh;}
  .dashAiComposer{padding-bottom:calc(10px + env(safe-area-inset-bottom));}
  .crmfilters{flex-direction:column;}
  .mriFilters{flex-direction:column;}
  .mriMap{height:220px;}
  .mriLegend{left:10px; right:auto; border-radius:12px;}
  #mriExecutive,#mriDemoFlow,#mriImportStats,.mriFieldMap,.mriParsedRows,#mriTimeline,#mriActionQueue,#mriMapsPlan{grid-template-columns:1fr;}
  .mriImportHead{display:block;}
  #notepick{top:calc(var(--topbar-h) + 10px); left:10px; right:10px; justify-content:center;}
  #docmodal{align-items:flex-end;}
  #docmodal .mpanel{width:100%; max-height:88vh; overflow:auto; border-radius:16px 16px 0 0; padding:20px 18px calc(20px + env(safe-area-inset-bottom));}
  .docwin{left:10px !important; top:calc(var(--topbar-h) + 10px) !important; width:calc(100vw - 20px) !important; height:calc(100dvh - var(--topbar-h) - 20px) !important; min-width:0; min-height:0; border-radius:14px;}
  .docwin.minimized{height:44px !important;}
  .dwbar{cursor:default;}
  .dwresize{display:none;}
  .dwtools{overflow-x:auto; -webkit-overflow-scrolling:touch;}
  #toast{top:calc(var(--topbar-h) + 10px); width:calc(100vw - 28px); text-align:center;}
}

@media (max-width:430px){
  .dash-tools{grid-template-columns:1fr;}
  .dash-tools button{width:100%;}
  .dash-view-switcher select{max-width:100%;}
  .sidebrand b{display:none;}
  .deptnav button span{max-width:132px; overflow:hidden; text-overflow:ellipsis;}
  .tbtn{min-width:calc(50vw - 16px);}
  #btnContacts,#btnExport{min-width:calc(50vw - 16px);}
}
.mriPortal{display:flex; flex-direction:column; gap:18px; max-width:1180px; margin:0 auto; padding:2px 0 10px;}
.mriPortalHero{display:flex; justify-content:space-between; gap:18px; align-items:center; border:1px solid #c7d7ee; background:radial-gradient(circle at top left,rgba(58,111,247,.14),transparent 34%),linear-gradient(135deg,#f8fbff 0%,var(--surface) 56%,#fff7ed 100%); border-radius:24px; padding:18px 20px; box-shadow:0 14px 34px rgba(31,56,100,.09);}
.mriPortalHero .eyebrow{margin:0 0 6px; color:var(--accent);}
.mriPortalHero b{display:block; color:var(--navy); font-size:clamp(22px,3vw,30px); letter-spacing:-.55px; line-height:1.05;}
.mriPortalHero span,.mriPortalHero label span{display:block; color:var(--text-secondary); font-size:13px; line-height:1.5; max-width:760px; margin-top:7px;}
.mriPortalHero label{min-width:280px; background:rgba(255,255,255,.82); border:1px solid #dbeafe; border-radius:16px; padding:10px; box-shadow:0 8px 20px rgba(31,56,100,.06);}
.mriPortalHero select,.mriPortalCard input,.mriPortalCard select,.mriPortalCard textarea{border:1px solid var(--border-strong); border-radius:12px; padding:10px 11px; font:inherit; background:var(--surface); color:var(--ink); width:100%; transition:border-color var(--duration-base) var(--ease-standard),box-shadow var(--duration-base) var(--ease-standard),background var(--duration-base) var(--ease-standard);}
.mriPortalHero select:focus,.mriPortalCard input:focus,.mriPortalCard select:focus,.mriPortalCard textarea:focus{outline:none; border-color:var(--accent); box-shadow:0 0 0 3px rgba(58,111,247,.14);}
.mriPortalHeroChips{display:flex; flex-wrap:wrap; gap:8px; margin-top:14px;}
.mriPortalHeroChips em{display:inline-flex; align-items:center; border-radius:999px; padding:6px 10px; background:var(--surface); border:1px solid #dbeafe; color:var(--neutral-700); font-style:normal; font-size:12px; font-weight:900; box-shadow:0 4px 12px rgba(31,56,100,.05);}
.mriPortalHeroChips em.ready{background:#ecfdf5; border-color:#bbf7d0; color:#047857;}.mriPortalHeroChips em.warn{background:#fffbeb; border-color:#fde68a; color:var(--warning-text);}.mriPortalHeroChips em.live{background:#eff6ff; border-color:#bfdbfe; color:var(--accent);}
.mriPortalStats{display:grid; grid-template-columns:minmax(1.25fr,1.6fr) repeat(4,minmax(0,1fr)); gap:10px;}
.mriPortalStats div{border:1px solid #dbeafe; background:linear-gradient(180deg,var(--surface),#f8fbff); border-radius:16px; padding:11px 12px 11px 14px; box-shadow:0 8px 18px rgba(31,56,100,.055); position:relative; overflow:hidden; min-height:68px;}
.mriPortalStats div:before{content:""; position:absolute; inset:0 auto 0 0; width:5px; background:linear-gradient(#3a6ff7,#FA5A0F); opacity:.9;}
.mriPortalStats small{display:block; color:var(--text-tertiary); font-size:10px; font-weight:900; text-transform:uppercase; letter-spacing:.08em; margin-bottom:4px;}
.mriPortalStats b{display:block; color:var(--navy); font-size:clamp(16px,1.7vw,21px); letter-spacing:-.2px; line-height:1.1;}
.mriPortalStats span{display:block; color:var(--text-tertiary); font-size:11px; margin-top:4px; line-height:1.3;}
.compactOverviewStats{display:grid;grid-template-columns:1.35fr repeat(4,minmax(128px,1fr));gap:0;border:1px solid #dbeafe;border-radius:16px;overflow:hidden;background:var(--surface);box-shadow:0 8px 18px rgba(31,56,100,.055);}
.compactOverviewStats div{border:0;border-right:1px solid var(--border);border-radius:0;box-shadow:none;min-height:0;padding:9px 11px;background:var(--surface);}
.compactOverviewStats div:last-child{border-right:0;}
.compactOverviewStats div:before{display:none;}
.compactOverviewStats b{font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.compactOverviewStats span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.mriPortalGrid{display:grid; grid-template-columns:repeat(12,minmax(0,1fr)); gap:14px; align-items:start;}
.mriPortalGrid>.mriPortalCard{grid-column:span 6;}
.mriPortalGrid:not(.overview)>.studentSkillCard{grid-column:1 / -1;}
.mriPortalGrid.overview>.readinessCard,.mriPortalGrid.overview>.studentSummaryCard{grid-column:span 6;}
.mriPortalGrid.overview>.studentSkillCard,.mriPortalGrid.overview>.clinicalClockCard{grid-column:span 6;}
.mriPortalCard{border:1px solid var(--border); border-radius:20px; background:linear-gradient(180deg,var(--surface),#fbfdff); padding:17px; box-shadow:0 12px 30px rgba(15,35,71,.07); display:flex; flex-direction:column; gap:12px;}
.mriPortalCard h3{margin:0 0 2px; color:var(--navy); letter-spacing:-.25px; font-size:17px;}
.mriPortalCard label{display:flex; flex-direction:column; gap:6px; font-size:12px; font-weight:900; color:var(--navy);}
.mriPortalCard textarea{min-height:86px; resize:vertical;}
.mriPortalCard button{align-self:flex-start; border:none; background:linear-gradient(135deg,var(--brand-blue),#1d4ed8); color:var(--text-inverse); border-radius:999px; padding:10px 15px; font-weight:900; cursor:pointer; box-shadow:0 8px 18px rgba(29,78,216,.18);}
.mriPortalCard button:disabled{background:var(--neutral-300); box-shadow:none; cursor:not-allowed;}
.mriPortalCardHead{display:flex; align-items:flex-start; justify-content:space-between; gap:12px;}
.mriPortalCardHead strong{flex:0 0 auto; border-radius:999px; padding:6px 10px; background:#eef4ff; color:var(--brand-blue); font-size:12px; font-weight:900; text-transform:capitalize;}
.mriPortalRow{display:grid; grid-template-columns:1fr 1fr; gap:12px;}
/* System buttons inside the 2-col row keep their natural width instead of
   stretching to fill the grid track. */
.mriPortalRow .btn{justify-self:start;}
.mriPortalChecks{display:grid; grid-template-columns:1fr 1fr; gap:9px;}
.mriPortalChecks label{flex-direction:row; align-items:center; font-weight:800; color:var(--ink); background:var(--neutral-50); border:1px solid var(--border); border-radius:12px; padding:9px 10px;}
.mriPortalChecks input{width:auto;}
.mriPortalOpen{margin:0; padding:10px 12px; border-radius:12px; background:#ecfdf5; color:#047857; font-weight:900; border:1px solid #bbf7d0;}
.mriPortalList{gap:10px;}
.mriPortalList div{border:1px solid var(--border); border-radius:13px; padding:11px 12px; background:var(--neutral-50); display:grid; gap:3px;}
.mriPortalList div:first-of-type{border-top:1px solid var(--border);}
.mriPortalList b{display:block; color:var(--navy);}
.mriPortalList span,.mriPortalList p{color:var(--muted); font-size:12px; margin:0; line-height:1.45;}
.studentSummaryCard{background:linear-gradient(180deg,var(--surface),#f8fbff);}
.studentSummaryGrid{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px;}
.compactSummaryCard{grid-column:span 6;}
.studentSummaryGrid.compact div{padding:10px 11px;}
.studentSummaryGrid.compact b{font-size:15px;}
.mriPortalGrid.overview>.clinicalCalendarCard{grid-column:1 / -1; order:-3;}
.mriModuleBody:has(.mriPortal-dashboard){overflow:hidden;display:flex;flex-direction:column;}
.mriPortal-dashboard{height:100%;min-height:0;display:flex;flex-direction:column;gap:8px;}
.mriPortal-dashboard .compactOverviewStats{flex:0 0 auto;}
.mriPortal-dashboard .mriPortalGrid.overview{flex:1 1 auto;min-height:0;display:flex;gap:0;}
.mriPortal-dashboard .clinicalCalendarCard{flex:1 1 auto;min-height:0;height:100%;overflow:hidden;padding:12px;gap:8px;}
.mriPortal-dashboard .mriPortalCardHead{flex:0 0 auto;align-items:center;}
.mriPortal-dashboard .mriPortalCardHead h3{font-size:15px;margin:0;}
.mriPortal-dashboard .mriPortalCardHead .sub{font-size:11px;line-height:1.25;margin:2px 0 0;}
.mriPortal-dashboard .calToolbar{flex:0 0 auto;margin-bottom:0;}
.mriPortal-dashboard .calToolbar .calLabel{font-size:14px;}
.mriPortal-dashboard .calHeadRow{flex:0 0 auto;margin-bottom:0;}
.mriPortal-dashboard .calMonthGrid{flex:1 1 auto;min-height:0;grid-auto-rows:minmax(0,1fr);}
.mriPortal-dashboard .calWeekGrid{flex:1 1 auto;min-height:0;}
.mriPortal-dashboard .calDay{min-height:0;padding:4px;border-radius:9px;gap:2px;overflow:hidden;}
.mriPortal-dashboard .calShiftChip{padding:3px 5px;border-radius:7px;}
.mriPortal-dashboard .calShiftChip b{font-size:10px;}
.mriPortal-dashboard .calShiftChip span{font-size:9px;}
.mriPortal-dashboard .calWeekCol{min-height:0;padding:6px 5px;overflow:hidden;}
.mriPortalGrid.overview>.compactSummaryCard{order:-2;}
.mriPortalGrid.overview>.timelineCard{order:-1;}
.studentSummaryGrid div{border:1px solid #dbeafe; border-radius:15px; padding:12px; background:var(--surface); box-shadow:0 6px 16px rgba(31,56,100,.04);}
.studentSummaryGrid b{display:block; color:var(--navy); font-size:17px;}
.studentSummaryGrid span{display:block; color:var(--muted); font-size:12px; margin-top:3px;}
.portalActionCard{min-height:auto;}
.mriPortalEmptyState{border:1px dashed var(--border-strong); border-radius:14px; padding:15px; background:linear-gradient(180deg,var(--neutral-50),var(--surface)); display:grid; gap:4px;}
.mriPortalEmptyState b{color:var(--neutral-700); font-size:13px;}
.mriPortalEmptyState span{color:var(--muted); font-size:12px; line-height:1.4;}
.mriPortalProgress{display:grid; gap:7px;}
.mriPortalProgress span{display:flex; justify-content:space-between; gap:8px; color:var(--muted); font-size:12px;}
.mriPortalProgress span b{color:var(--navy);}
.mriPortalProgress i{display:block; height:9px; border-radius:999px; overflow:hidden; background:#e5edf6;}
.mriPortalProgress em{display:block; height:100%; border-radius:999px; background:linear-gradient(90deg,var(--brand-blue),var(--brand-orange));}
.mriReqMini{display:grid; gap:2px; border:1px solid var(--danger-surface); background:#fff7f7; border-radius:10px; padding:9px;}
.mriReqMini b{color:#7f1d1d; font-size:13px;}
.mriReqMini span{color:var(--danger-text); font-size:12px;}
@media(max-width:1100px){.mriPortalStats{grid-template-columns:repeat(2,minmax(0,1fr));}.compactOverviewStats{display:grid;grid-template-columns:repeat(5,minmax(136px,1fr));overflow-x:auto;}.compactOverviewStats div{min-width:136px;}.mriPortalGrid,.mriPortalGrid.overview{grid-template-columns:1fr}.mriPortalGrid>.mriPortalCard,.mriPortalGrid.overview>.readinessCard,.mriPortalGrid.overview>.studentSummaryCard,.mriPortalGrid.overview>.studentSkillCard,.mriPortalGrid.overview>.clinicalClockCard{grid-column:1 / -1;}}
@media(max-width:900px){.mriPortalHero{align-items:stretch; flex-direction:column; padding:18px}.mriPortalHero label{min-width:0}.studentSummaryGrid{grid-template-columns:1fr}.mriPortalChecks,.mriPortalRow{grid-template-columns:1fr}.mriPortalCard{padding:15px}.mriPortalCardHead{flex-direction:column}.mriPortalCardHead strong{align-self:flex-start}.mriPortalCard button{width:100%; text-align:center; justify-content:center;}}
.mriDetailCenter{display:grid; grid-template-columns:280px minmax(0,1fr); gap:14px; align-items:start;}
.mriDetailList{border:1px solid var(--line); background:var(--surface); border-radius:16px; padding:12px; max-height:72vh; overflow:auto; box-shadow:var(--shadow-sm);}
.mriDetailList h3{margin:0 0 10px; color:var(--navy);}
.mriDetailList input{width:100%; border:1px solid var(--line); border-radius:10px; padding:9px 10px; margin-bottom:8px;}
.mriDetailList button{width:100%; text-align:left; border:1px solid transparent; background:var(--surface); border-radius:12px; padding:9px; cursor:pointer; display:flex; flex-direction:column; gap:2px;}
.mriDetailList button:hover,.mriDetailList button.active{border-color:#cfe0ff; background:#f6f9ff;}
.mriDetailList b{color:var(--navy);}
.mriDetailList span{color:var(--muted); font-size:12px;}
.mriDetailProfile{min-width:0;}
.mriReqRow{display:grid; grid-template-columns:minmax(0,1fr) auto auto auto; gap:10px; align-items:center; border:1px solid var(--border); border-left:4px solid var(--border-strong); border-radius:13px; padding:11px 12px; background:var(--neutral-50); margin-top:9px;}
.mriReqRow:first-child{margin-top:0; border-top:1px solid var(--border);}
.mriReqRow b{display:block; color:var(--navy);}
.mriReqRow span,.mriReqRow small,.mriReqRow em{color:var(--muted); font-size:12px; font-style:normal;}
.mriReqRow.complete small{color:#047857; font-weight:800;}
.mriReqRow.missing small{color:#b45309; font-weight:800;}
.mriReqRow a{font-size:12px; color:var(--accent); font-weight:800;}
@media(max-width:900px){.mriDetailCenter{grid-template-columns:1fr}.mriDetailList{max-height:260px}.mriReqRow{grid-template-columns:1fr}}
.examDash{display:flex; flex-direction:column; gap:14px;}
.examHero{display:flex; justify-content:space-between; gap:16px; align-items:flex-start; border:1px solid var(--line); border-radius:18px; padding:16px; background:linear-gradient(135deg,#f7fbff,var(--surface)); box-shadow:var(--shadow-sm);}
.examHero h2{margin:0 0 6px; color:var(--navy);}
.examHero span{color:var(--muted);}
.examFilters{display:flex; gap:10px; flex-wrap:wrap; min-width:320px;}
.examFilters label{display:flex; flex-direction:column; gap:4px; color:var(--navy); font-size:12px; font-weight:800; flex:1; min-width:180px;}
.examFilters select{border:1px solid var(--line); border-radius:10px; padding:9px 10px; background:var(--surface); color:var(--ink);}
/* --- restructured exam analytics header / filter bar / scope --- */
.examTopBar{display:flex; justify-content:space-between; gap:16px; align-items:flex-start; flex-wrap:wrap;}
.examTopBar h2{margin:2px 0 4px; color:var(--navy); font-size:22px;}
.examTopBar span{display:block; color:var(--muted); font-size:13px; max-width:640px; line-height:1.45;}
.examExportActions{display:flex; gap:8px; flex-wrap:wrap;}
.examExportActions button{display:inline-flex; align-items:center; gap:6px; border:1px solid var(--line); background:var(--surface); color:var(--navy); border-radius:10px; padding:8px 12px; font-weight:800; font-size:12px; cursor:pointer; box-shadow:var(--shadow-sm);}
.examExportActions button:hover{background:var(--navy); color:var(--text-inverse); border-color:var(--navy);}
.examExportActions button i,.examExportActions svg{width:15px; height:15px;}
.examFilterBar{display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:10px; border:1px solid var(--line); border-radius:14px; padding:12px; background:var(--surface); box-shadow:var(--shadow-sm); position:sticky; top:0; z-index:5;}
.examFilterBar label{display:flex; flex-direction:column; gap:4px; color:var(--navy); font-size:11px; font-weight:800; text-transform:uppercase; letter-spacing:.03em; min-width:0;}
.examFilterBar select{border:1px solid var(--line); border-radius:9px; padding:8px 9px; background:var(--surface); color:var(--ink); font-size:12px; min-width:0; max-width:100%;}
.examScopeBar{display:flex; align-items:baseline; gap:10px; padding:0 2px;}
.examScopeBar b{color:var(--navy); font-size:15px;}
.examScopeBar span{color:var(--muted); font-size:12px;}
.examKpis .kpiAlert{background:#fff5f5; border-color:#fecaca;}
.examKpis .kpiAlert b{color:var(--danger-solid);}
.examHint{font-size:11px; font-weight:700; color:var(--muted); text-transform:none; letter-spacing:0;}
.examFocusFoot{margin-top:10px; padding-top:9px; border-top:1px dashed var(--line); color:var(--warning-text); font-size:12px; font-weight:700;}
/* Priority focus rows: bullet meters vs the 65% remediation cutoff, tier as a
   badge (explained once in the card legend), whole row is a drill-down. */
.examFocusHead{display:flex;flex-direction:column;gap:3px;margin-bottom:10px}
.examFocusLegend{margin:0;color:var(--text-tertiary);font-size:11px;line-height:1.4}
.examFocusLegend b{color:var(--text-secondary);font-weight:var(--weight-semibold)}
.examFocusList{display:grid;gap:8px}
.examFocus{display:grid;grid-template-columns:minmax(140px,1.1fr) minmax(0,1.6fr) 92px auto;align-items:center;gap:12px;border:1px solid var(--border);border-left-width:3px;border-radius:10px;background:var(--surface);padding:9px 12px;text-align:left;cursor:pointer;transition:transform var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard)}
.examFocus:hover{transform:translateX(2px);box-shadow:var(--shadow-sm)}
.examFocus.risk{border-left-color:var(--danger-solid)}
.examFocus.warn{border-left-color:var(--warning-solid)}
.examFocus.good{border-left-color:var(--success-solid)}
.examFocusName b{display:block;color:var(--navy);font-size:13px;line-height:1.25}
.examFocusName em{font-style:normal;color:var(--text-tertiary);font-size:11px}
.examFocusMeter{position:relative;display:block;height:8px;border-radius:999px;background:var(--surface-sunken)}
.examFocusMeter i{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:var(--warning-solid)}
.examFocus.risk .examFocusMeter i{background:var(--danger-solid)}
.examFocus.good .examFocusMeter i{background:var(--success-solid)}
.examFocusStats{display:grid;justify-items:end;line-height:1.15}
.examFocusStats strong{font-size:14px;color:var(--text-primary)}
.examFocusStats small{font-size:10.5px;color:var(--text-tertiary);font-variant-numeric:tabular-nums;white-space:nowrap}
@media(max-width:900px){.examFocus{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"name stats" "meter meter" "badge badge"}.examFocusName{grid-area:name}.examFocusMeter{grid-area:meter}.examFocusStats{grid-area:stats}.examFocus .badge{grid-area:badge;justify-self:start}}
.examBubbleEmpty{position:absolute; inset:0; display:grid; place-items:center; color:var(--muted); font-size:13px;}
.examDetailDivider{display:flex; justify-content:space-between; align-items:flex-end; gap:14px; flex-wrap:wrap; margin-top:6px; padding-top:14px; border-top:2px solid var(--line);}
.examDetailDivider h3{margin:2px 0 0; color:var(--navy); font-size:20px;}
.examDetailDivider label{display:flex; flex-direction:column; gap:4px; color:var(--navy); font-size:11px; font-weight:800; text-transform:uppercase; letter-spacing:.03em; min-width:260px;}
.examDetailDivider select{border:1px solid var(--line); border-radius:9px; padding:9px 10px; background:var(--surface); color:var(--ink); font-size:13px;}
.examKpis{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:10px;}
.examKpis>div,.examCard{border:1px solid var(--line); border-radius:16px; background:var(--surface); padding:14px; box-shadow:var(--shadow-sm);}
.examKpis>div>b{display:block; color:var(--navy); font-size:24px;}
.examKpis>div>span{color:var(--muted); font-size:12px;}
.examGrid{display:grid; grid-template-columns:1.3fr .9fr; gap:12px; align-items:start;}
.examCard.wide{min-width:0;}
.examCard h3{margin:0 0 10px; color:var(--navy);}
.examMetric{display:grid; grid-template-columns:minmax(0,1fr) 180px; gap:10px; align-items:center; padding:8px 6px; border-top:1px solid var(--line); width:100%; text-align:left; background:transparent; font:inherit; color:inherit; border-radius:8px;}
button.examMetric{border:0; border-top:1px solid var(--line); cursor:pointer; transition:background var(--duration-fast) var(--ease-standard);}
button.examMetric:hover{background:#f4f8ff;}
button.examMetric.active{background:#eef4ff; box-shadow:inset 0 0 0 1px var(--accent);}
.examMetric.static{cursor:default;}
.examMetric:first-of-type{border-top:none;}
.examMetric b,.examAction b{display:block; color:var(--navy);}
.examMetric span,.examAction span,.examStudentHead span{display:block; color:var(--muted); font-size:12px;}
.examBar{height:9px; border-radius:999px; background:#edf2f7; overflow:hidden; display:block;}
.examBar i{height:100%; display:block; border-radius:999px; background:var(--accent);}
.examMetric.risk .examBar i{background:var(--danger-solid)}.examMetric.warn .examBar i{background:var(--warning-solid)}.examMetric.good .examBar i{background:var(--success-solid)}
.examAction{border-top:1px solid var(--line); padding:9px 0;}
.examAction:first-of-type{border-top:none;}

.examHeatmap{display:grid; gap:10px;}
.examHeatSection{display:grid; grid-template-columns:160px repeat(4,minmax(0,1fr)); gap:6px; align-items:stretch;}
.examHeatSection>b{color:var(--navy); font-size:12px; align-self:center;}
.examHeatSection span{border-radius:10px; padding:8px; font-size:11px; font-weight:800; color:var(--text-primary); min-height:54px; display:flex; flex-direction:column; justify-content:space-between;}
.examHeatSection span.good{background:var(--success-surface)}.examHeatSection span.warn{background:var(--warning-surface)}.examHeatSection span.risk{background:var(--danger-surface)}
.examHeatSection em{font-style:normal; font-size:15px; color:var(--navy);}
.examStudentHead{display:flex; justify-content:space-between; gap:10px; align-items:center; margin-bottom:10px;}
.examStudentHead strong{font-size:28px; color:var(--navy);}
.examTrend{height:88px; display:flex; align-items:end; gap:8px; padding:10px; background:var(--neutral-50); border-radius:12px; margin-bottom:8px;}
.examTrend span{flex:1; min-height:8px; border-radius:8px 8px 0 0; background:linear-gradient(180deg,var(--viz-1),var(--success-solid));}
@media(max-width:1100px){.examFilterBar{grid-template-columns:repeat(4,minmax(0,1fr));}}
@media(max-width:1000px){.examHero{flex-direction:column}.examKpis,.examGrid{grid-template-columns:1fr}.examHeatSection{grid-template-columns:1fr 1fr}.examFilters{min-width:0;width:100%}.examFilterBar{position:static;}}
@media(max-width:640px){.examFilterBar{grid-template-columns:1fr 1fr;}.examDetailDivider label{min-width:0;width:100%}}
.examKpis{grid-template-columns:repeat(6,minmax(0,1fr));}
.examRiskList{display:grid; gap:8px;}
.examRiskRow{border:1px solid var(--line); border-radius:12px; background:var(--surface); padding:10px; text-align:left; display:grid; gap:3px; cursor:pointer; transition:transform var(--duration-fast) var(--ease-standard), box-shadow var(--duration-fast) var(--ease-standard), border-color var(--duration-fast) var(--ease-standard);}
.examRiskRow:hover{transform:translateY(-1px); box-shadow:var(--shadow-sm);}
.examRiskRow.active{border-color:var(--accent); background:#f4f8ff;}
.examRiskRow strong{color:var(--navy);}
.examRiskRow span,.examRiskRow em,.examRiskRow small{font-style:normal; color:var(--muted); font-size:12px;}
.examRiskRow small{color:#b45309; font-weight:800;}
.examSubPlan{margin-top:12px; border-top:1px solid var(--line); padding-top:10px; display:grid; gap:8px;}
.examSubPlan h4{margin:0; color:var(--navy);}
.examSubPlan div{border:1px solid var(--line); border-radius:10px; padding:8px; background:var(--neutral-50);}
.examSubPlan b{display:block; color:var(--navy);}
.examSubPlan span,.examSubPlan small{display:block; color:var(--muted); font-size:12px;}
.examSubPlan small{color:var(--accent); font-weight:800; margin-top:3px;}
@media(max-width:1000px){.examKpis{grid-template-columns:1fr 1fr}.examMetric{grid-template-columns:1fr}.examFilters label{min-width:150px}}
.examStudentMeta{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:8px; margin:0;}
.examStudentMeta span{border:1px solid var(--line); background:var(--neutral-50); border-radius:10px; padding:8px; color:var(--muted); font-size:12px; font-weight:800;}
.examStudentMeta b{color:var(--navy);}
.examMatrixPct{margin-left:8px; padding:1px 7px; border-radius:999px; font-size:11px; font-weight:900;}
.examMatrixPct.good{background:var(--success-surface); color:var(--success-text);}.examMatrixPct.warn{background:var(--warning-surface); color:var(--warning-text);}.examMatrixPct.risk{background:var(--danger-surface); color:var(--danger-text);}
.examStudentMatrix>div>b{display:flex; align-items:center;}
@media print{.sidebar,.app-header,.examFilterBar,.examExportActions,.examDetailDivider label,.mriModuleTabs,.mriModuleHeadActions,.mriMapToolbar{display:none!important}.app-shell{display:block}.mainarea{padding:0}.workspace-card,.examCard,.examKpis>div{box-shadow:none!important}.examGrid{grid-template-columns:1fr}.examDash{gap:10px}}
.examCharts{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:12px; align-items:stretch;}
/* .examRequirementsGrid / .examReqCard retired with the Source / MVP data notes card. */
.examCharts .chartWide{grid-column:span 2;}.examCharts h3{display:flex; align-items:center; justify-content:space-between;}
.examCharts small{display:block; color:var(--muted); font-size:11px; margin-top:8px;}
.examDonutRow{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:10px;}
.examDonut{aspect-ratio:1; border-radius:999px; display:grid; place-items:center; background:conic-gradient(var(--donut) calc(var(--pct)*1%), var(--surface-sunken) 0); position:relative; min-width:95px; box-shadow:inset 0 0 0 1px rgba(15,35,71,.08);}
.examDonut:after{content:''; position:absolute; inset:13px; background:var(--surface); border-radius:inherit; box-shadow:inset 0 0 0 1px var(--border);}
.examDonut div{position:relative; z-index:1; text-align:center; padding:4px;}.examDonut b{display:block; color:var(--navy); font-size:22px;}.examDonut span{display:block; color:var(--muted); font-size:10px; font-weight:800;}
.examMiniBars{height:220px; display:flex; gap:9px; align-items:end; padding:14px 8px 34px; border-radius:14px; background:linear-gradient(180deg,#f8fbff,#eef4ff); border:1px solid #e5edf7; position:relative; overflow:auto;}
.examMiniBars button{appearance:none; border:0; background:transparent; flex:1 0 70px; min-width:70px; height:100%; display:flex; flex-direction:column; justify-content:flex-end; align-items:center; gap:6px; cursor:default; position:relative; color:var(--navy);}
.examMiniBars.clickable button{cursor:pointer;}.examMiniBars.clickable button:hover i{filter:brightness(1.03); transform:scaleY(1.02); box-shadow:0 10px 24px rgba(58,111,247,.24);}
.examMiniBars i{width:100%; border-radius:12px 12px 5px 5px; background:linear-gradient(180deg,var(--viz-1),var(--viz-seq-7)); transition:var(--duration-base) var(--ease-standard); min-height:8px;}
.examMiniBars button.good i{background:linear-gradient(180deg,var(--success-solid),var(--success-text))}.examMiniBars button.warn i{background:linear-gradient(180deg,var(--warning-solid),var(--warning-text))}.examMiniBars button.risk i{background:linear-gradient(180deg,var(--danger-solid),var(--danger-text))}
.examMiniBars span{position:absolute; bottom:-29px; left:50%; transform:translateX(-50%) rotate(-22deg); transform-origin:center; width:92px; font-size:10px; color:var(--muted); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}.examMiniBars b{font-size:12px; color:var(--navy);}
.examSparkline{width:100%; height:108px; padding:10px; border-radius:14px; background:linear-gradient(180deg,#f8fbff,#eef4ff); border:1px solid #e5edf7; overflow:visible;}.examSparkline circle{fill:var(--neutral-0); stroke:var(--viz-1); stroke-width:3; cursor:help;}
.examChartCaption{margin-top:8px; display:grid; gap:2px;}.examChartCaption b{color:var(--navy);}.examChartCaption span{color:var(--muted); font-size:12px;}
.examBubblePlot{height:250px; position:relative; border-radius:16px; background:linear-gradient(90deg,rgba(15,35,71,.07) 1px,transparent 1px),linear-gradient(180deg,rgba(15,35,71,.07) 1px,transparent 1px),linear-gradient(135deg,#fff7ed,#eef6ff 55%,#ecfdf5); background-size:25% 25%,25% 25%,100% 100%; border:1px solid #e5edf7; overflow:hidden;}
.examBubblePlot button{position:absolute; transform:translate(-50%,-50%); border:2px solid var(--neutral-0); border-radius:999px; box-shadow:0 8px 20px rgba(15,35,71,.2); cursor:pointer; transition:var(--duration-fast) var(--ease-standard);}.examBubblePlot button:hover{transform:translate(-50%,-50%) scale(1.25); z-index:3;}.examBubblePlot button.good{background:var(--success-solid)}.examBubblePlot button.warn{background:var(--warning-solid)}.examBubblePlot button.risk{background:var(--danger-solid)}
.examBubblePlot .x,.examBubblePlot .y{position:absolute; color:var(--muted); font-size:11px; font-weight:800;}.examBubblePlot .x{right:12px; bottom:8px}.examBubblePlot .y{left:10px; top:8px}
@media(max-width:1180px){.examCharts{grid-template-columns:1fr}.examCharts .chartWide{grid-column:auto}.examDonutRow{grid-template-columns:repeat(3,minmax(90px,1fr)); overflow:auto}}
@media(max-width:700px){.examDonutRow{grid-template-columns:1fr 1fr 1fr}.examMiniBars{height:190px}.examBubblePlot{height:220px}}
.examStudentDetailPanel{grid-column:1 / -1; display:grid; gap:12px; border:1px solid #dbe8ff; border-radius:22px; padding:14px; background:linear-gradient(135deg,#f7fbff,var(--surface) 42%,var(--neutral-50)); box-shadow:0 18px 45px rgba(15,35,71,.08);}
.examStudentProfileHero{display:flex; justify-content:space-between; align-items:center; gap:14px; padding:16px; border-radius:18px; color:var(--text-inverse); background:radial-gradient(circle at top right,rgba(96,165,250,.42),transparent 35%),linear-gradient(135deg,#102347,#1d4ed8);}
.examStudentProfileHero .eyebrow{margin:0 0 6px; color:rgba(255,255,255,.82); letter-spacing:1.4px;}
.examStudentProfileHero h3{margin:0; font-size:24px;}.examStudentProfileHero span{display:block; color:#dbeafe; font-size:12px; margin-top:4px;}.examStudentHeroScore{text-align:center; border:1px solid rgba(255,255,255,.28); border-radius:16px; padding:10px 18px; background:rgba(255,255,255,.12);}.examStudentHeroScore b{display:block; font-size:32px;}.examStudentHeroScore span{font-size:11px; text-transform:uppercase; letter-spacing:.08em;}
.examStudentQuickStats{display:grid; grid-template-columns:1.1fr repeat(5,minmax(0,1fr)); gap:10px;}.examStudentQuickStats>div{border:1px solid var(--line); background:var(--surface); border-radius:16px; padding:12px; box-shadow:var(--shadow-sm);}.examStudentQuickStats>div:not(:first-child) b{display:block; color:var(--navy); font-size:23px;}.examStudentQuickStats>div:not(:first-child) span{display:block; color:var(--muted); font-size:12px;}
.examStudentDetailGrid{display:grid; grid-template-columns:1.35fr .85fr; gap:12px; align-items:stretch;}.examStudentDetailGrid .wide{min-width:0;}
/* Row 1: Board parts (or coverage) beside the study plan; the mastery map
   spans the full width below — its rows need ~640px, so the narrow column
   clipped it and left dead space under the shorter parts card. */
.examStudentDetailGrid .examPartsCard{order:1}
.examStudentDetailGrid .examPlanCard{order:2}
.examStudentDetailGrid .examMasteryCard{order:3;grid-column:1 / -1}
.examStudentDetailGrid .examStudentMockCard{order:4;grid-column:1 / -1}
/* Score by mock exam (student view): chart beside the student's mock stats. */
.examStudentMockGrid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:20px;align-items:center;margin-top:10px}
.examStudentMockGrid .examStudentMockStats{grid-template-columns:1fr 1fr;margin-top:0}
@media(max-width:900px){.examStudentMockGrid{grid-template-columns:1fr}}
.examAttemptTimeline{height:240px; display:flex; align-items:end; gap:10px; padding:14px 10px 42px; border-radius:16px; background:linear-gradient(180deg,#f8fbff,#eef4ff); border:1px solid #e5edf7; overflow:auto;}.examAttemptTimeline div{flex:1 0 82px; height:100%; display:flex; flex-direction:column; justify-content:flex-end; align-items:center; gap:6px; position:relative;}.examAttemptTimeline i{width:100%; min-height:10px; border-radius:12px 12px 5px 5px; background:linear-gradient(180deg,var(--viz-1),var(--viz-seq-7));}.examAttemptTimeline .good i{background:linear-gradient(180deg,var(--success-solid),var(--success-text))}.examAttemptTimeline .warn i{background:linear-gradient(180deg,var(--warning-solid),var(--warning-text))}.examAttemptTimeline .risk i{background:linear-gradient(180deg,var(--danger-solid),var(--danger-text))}.examAttemptTimeline span{position:absolute; bottom:-24px; color:var(--muted); font-size:11px;}.examAttemptTimeline b{color:var(--navy);}.examAttemptTimeline em{font-style:normal; color:var(--muted); font-size:10px; text-align:center;}
.examStudentMatrix{display:grid; gap:10px;}.examStudentMatrix>div{display:grid; grid-template-columns:160px repeat(4,minmax(0,1fr)); gap:8px; align-items:stretch;}.examStudentMatrix>div>b{align-self:center; color:var(--navy); font-size:12px;}.examStudentMatrix button{border:0; border-radius:12px; padding:9px; min-height:62px; display:flex; flex-direction:column; justify-content:space-between; text-align:left; color:var(--text-primary); cursor:help;}.examStudentMatrix button.good{background:var(--success-surface)}.examStudentMatrix button.warn{background:var(--warning-surface)}.examStudentMatrix button.risk{background:var(--danger-surface)}.examStudentMatrix span{font-size:11px; font-weight:800;}.examStudentMatrix em{font-style:normal; color:var(--navy); font-size:18px; font-weight:900;}
.examStudyPlan{margin:0; padding-left:20px; display:grid; gap:9px;}.examStudyPlan li{padding-bottom:8px; border-bottom:1px solid var(--line);}.examStudyPlan b{display:block; color:var(--navy);}.examStudyPlan span{display:block; color:var(--muted); font-size:12px; margin-top:3px;}
@media(max-width:1180px){.examStudentQuickStats{grid-template-columns:repeat(3,minmax(0,1fr));}.examStudentDetailGrid{grid-template-columns:1fr}.examStudentMatrix>div{grid-template-columns:1fr 1fr}}
@media(max-width:700px){.examStudentProfileHero{display:block}.examStudentHeroScore{margin-top:12px}.examStudentQuickStats{grid-template-columns:1fr 1fr}.examStudentMatrix>div{grid-template-columns:1fr}.examAttemptTimeline{height:210px}}
.mriGeoBadge{display:inline-block; margin-top:5px; padding:3px 7px; border-radius:999px; font-size:10.5px; font-style:normal; font-weight:800; color:var(--text-secondary); background:#eef2f7;}
.mriGeoBadge.verified{color:var(--success-text); background:var(--success-surface);}
.mriGeoBadge.outside_geofence{color:var(--danger-text); background:var(--danger-surface);}
.mriGeoBadge.location_missing,.mriGeoBadge.site_geofence_missing{color:var(--warning-text); background:var(--warning-surface);}
.instructorPortal{display:flex; flex-direction:column; gap:14px;}
.instructorHero{display:flex; justify-content:space-between; gap:16px; align-items:flex-start; padding:16px; border:1px solid var(--line); border-radius:16px; background:linear-gradient(135deg,#f8fbff,#eef5ff);}
/* Slim per-screen chrome: contextual hint + shortcuts. Replaces the repeated
   portal hero (the page header already names the portal). */
.instructorToolbar{display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; padding:10px 14px; border:1px solid var(--line); border-radius:12px; background:var(--surface);}
.instructorToolbar>p{margin:0; color:var(--text-secondary); font-size:12.5px; line-height:1.45; flex:1 1 320px;}
.instructorToolbarActions{display:flex; gap:8px; flex-wrap:wrap; justify-content:flex-end; margin-left:auto;}
.instructorHero h2{color:var(--navy); margin:0 0 4px;}
.instructorHero span{display:block; color:var(--text-secondary); font-size:13px; line-height:1.45;}
.instructorHeroActions{display:flex; flex-wrap:wrap; gap:8px; justify-content:flex-end;}
/* :where() keeps the .btn exclusion at zero specificity, so later rules like
   .instructorList button still win by cascade order (as they did before the
   exclusion existed). */
.instructorHeroActions button:where(:not(.btn)),.instructorCard button:where(:not(.btn):not(.powerSkillListItem)){border:none; border-radius:9px; background:var(--navy); color:var(--text-inverse); padding:8px 10px; cursor:pointer; font-size:12px;}
.instructorKpis{display:grid; grid-template-columns:repeat(6,minmax(110px,1fr)); gap:10px;}
.instructorKpis div{background:var(--surface); border:1px solid var(--line); border-radius:14px; padding:12px; box-shadow:0 6px 18px rgba(31,56,100,.06);}
.instructorKpis b{display:block; color:var(--navy); font-size:22px; line-height:1; margin-bottom:4px;}
.instructorKpis span{font-size:11.5px; color:var(--muted);}
.instructorGrid{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:12px;}
.instructorCard{background:var(--surface); border:1px solid var(--line); border-radius:14px; padding:14px; min-width:0;}
.instructorCard.wide{grid-column:1 / -1;}
.instructorCard h3{color:var(--navy); font-size:14px; margin-bottom:10px;}
.powerAccreditationReport{border-left:5px solid var(--accent);}
.reportHead{display:flex; justify-content:space-between; gap:12px; align-items:flex-start; margin-bottom:10px;}
.reportHead .button:where(:not(.btn)){display:inline-block; text-decoration:none; border-radius:9px; background:var(--navy); color:var(--text-inverse); padding:8px 10px; font-size:12px; margin-left:6px;}
.reportHead a.btn{margin-left:6px; text-decoration:none;}
.instructorKpis.compact{grid-template-columns:repeat(6,minmax(100px,1fr)); margin:10px 0;}
.reportGrid{display:grid; grid-template-columns:1.2fr 1fr 1fr; gap:12px; align-items:start;}
.reportGrid h4{color:var(--navy); font-size:13px; margin-bottom:8px;}
.reportBar{border:1px solid #e5edf6; border-radius:12px; padding:9px 10px; background:var(--neutral-50); margin-bottom:8px;}
.reportBar span{display:flex; justify-content:space-between; gap:8px; color:var(--navy); font-size:12.5px;}
.reportBar i{display:block; height:8px; background:#e5edf6; border-radius:999px; overflow:hidden; margin:6px 0;}
.reportBar em{display:block; height:100%; background:linear-gradient(90deg,var(--viz-seq-4),var(--viz-seq-7)); border-radius:999px;}
.reportBar small{display:block; color:var(--muted); font-size:11.5px;}
@media(max-width:1100px){.reportGrid{grid-template-columns:1fr}.reportHead{display:block}.reportHead .button{margin:8px 6px 0 0}.instructorKpis.compact{grid-template-columns:repeat(2,minmax(0,1fr))}}
.instructorCard label{display:block; font-size:11px; color:var(--muted); margin:8px 0 4px;}
.instructorCard input,.instructorCard select,.instructorCard textarea{width:100%; border:1px solid var(--line); border-radius:9px; padding:8px 9px; font-size:12px; outline:none; background:var(--surface);}
.instructorCard textarea{min-height:68px; resize:vertical;}
/* .instructorTable retired — instructor/oversight tables migrated onto the
   .table primitive (components.css; docs/dashboard-ui.md §4). */
.instructorList{display:flex; flex-direction:column; gap:8px;}
.instructorList button,.instructorList div{display:block; width:100%; text-align:left; background:var(--neutral-50); color:var(--ink); border:1px solid #e5edf6; border-radius:10px; padding:9px 10px;}
.instructorList b{display:block; color:var(--navy); font-size:12.5px;}
.instructorList span{display:block; color:var(--muted); font-size:11.5px; margin-top:3px;}
@media(max-width:900px){.instructorHero{display:block}.instructorHeroActions{justify-content:flex-start; margin-top:12px}.instructorKpis{grid-template-columns:repeat(2,minmax(0,1fr))}.instructorGrid{grid-template-columns:1fr}}
.mriLmsCard{grid-column:1 / -1;}
.mriLmsVideo{border:1px solid #e5edf6; border-radius:12px; padding:10px; margin-top:9px; background:var(--neutral-50);}
.mriLmsVideo.required{border-left:5px solid #b25c00;}
.mriLmsVideo.complete{border-left:5px solid #1d6f42; background:#f5fff7;}
.mriLmsVideoHead{display:flex; justify-content:space-between; gap:10px; align-items:flex-start;}
.mriLmsVideoHead b,.mriLmsVideoRow b{display:block; color:var(--navy); font-size:13px;}
.mriLmsVideoHead span,.mriLmsVideoRow span,.mriLmsVideoRow small{display:block; color:var(--muted); font-size:11.5px; margin-top:2px;}
.mriLmsVideo video{display:block; width:100%; max-height:360px; margin-top:9px; background:#000; border-radius:10px;}
.mriLmsInstructor{display:grid; grid-template-columns:minmax(260px,360px) 1fr; gap:14px; align-items:start;}
.mriLmsVideoList{display:flex; flex-direction:column; gap:8px;}
.mriLmsVideoRow{display:flex; justify-content:space-between; gap:10px; align-items:flex-start; border:1px solid #e5edf6; background:var(--neutral-50); border-radius:11px; padding:10px;}
.mriLmsVideoRow div:last-child{display:flex; gap:6px; flex-wrap:wrap; justify-content:flex-end;}
@media(max-width:900px){.mriLmsInstructor{grid-template-columns:1fr}.mriLmsVideoRow{display:block}.mriLmsVideoRow div:last-child{justify-content:flex-start; margin-top:8px}}
.mriLmsCard .sub,.mriLmsInstructor .sub{color:var(--muted); font-size:12px; line-height:1.4;}
.mriLmsPlayer{position:relative; margin-top:9px; border-radius:12px; overflow:hidden; background:var(--neutral-950); border:1px solid var(--neutral-900);}
.mriLmsPlayer::after{content:attr(data-student-watermark); position:absolute; inset:auto 12px 12px auto; color:rgba(255,255,255,.52); font-size:12px; letter-spacing:.04em; pointer-events:none; text-shadow:0 1px 8px rgba(0,0,0,.8);}
.mriLmsPlayer::before{content:'Protected LMS playback'; position:absolute; left:12px; top:10px; color:rgba(255,255,255,.58); font-size:11px; text-transform:uppercase; letter-spacing:.08em; pointer-events:none; z-index:1;}
.mriLmsVideo video{margin-top:0; border-radius:0;}
.mriLmsProgress{height:7px; background:#e5edf6; border-radius:999px; overflow:hidden; margin:9px 0;}
.mriLmsProgress span{display:block; height:100%; background:linear-gradient(90deg,#1d6f42,#3aa56d); border-radius:999px;}
.mriLmsAttest{display:flex; gap:8px; align-items:flex-start; color:var(--muted); font-size:12px; line-height:1.35; margin:8px 0;}
.mriLmsVideo button:disabled{opacity:.45; cursor:not-allowed;}
.mriLmsAuditGrid{display:grid; grid-template-columns:1fr 1fr; gap:12px;}
.mriLmsAuditGrid>div{border:1px solid #e5edf6; border-radius:12px; padding:10px; background:var(--neutral-50);}
.mriLmsAuditGrid b{display:block; color:var(--navy); margin-bottom:7px;}
.mriLmsAuditGrid span{display:block; font-size:12px; color:var(--muted); padding:5px 0; border-top:1px solid #edf2f7;}
@media(max-width:900px){.mriLmsAuditGrid{grid-template-columns:1fr}}
.mriLmsPlayer.stream{aspect-ratio:16/9; min-height:220px;}
.mriStreamEmbed{position:absolute; inset:0; display:grid; place-items:center; color:rgba(255,255,255,.75); background:var(--neutral-950);}
.mriStreamEmbed iframe{position:absolute; inset:0; width:100%; height:100%; border:0;}
.mriLmsVideoRow span::first-letter{text-transform:uppercase;}
.actionCenter{border-left:5px solid var(--accent);}
.actionCenterPills{display:flex; flex-wrap:wrap; gap:7px; margin:8px 0 10px;}
.actionCenterPills span{background:#eef4ff; border:1px solid #dbe8ff; color:#1d3f72; border-radius:999px; padding:5px 9px; font-size:12px; font-weight:700;}
.actionList{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px;}
.actionList button{text-align:left; border:1px solid #e5edf6; background:var(--neutral-50); border-radius:12px; padding:10px; cursor:pointer;}
.actionList button.high{border-left:5px solid #c0392b;}
.actionList button.medium{border-left:5px solid #b25c00;}
.actionList b,.actionList span,.actionList em{display:block;}
.actionList b{color:var(--navy); font-size:13px;}
.actionList span{color:var(--muted); font-size:12px; margin-top:2px;}
.actionList em{color:var(--text-tertiary); font-style:normal; font-size:11px; text-transform:uppercase; letter-spacing:.06em; margin-top:6px;}
.readinessCard{grid-column:1 / -1; background:radial-gradient(circle at top right,rgba(250,90,15,.10),transparent 34%),linear-gradient(135deg,var(--surface),#f4f8ff); border-color:#bfdbfe;}
.readinessScore{display:flex; align-items:baseline; gap:10px; margin:2px 0 12px;}
.readinessScore b{font-size:clamp(38px,5vw,56px); color:var(--navy); letter-spacing:-1px; line-height:.95;}
.readinessScore span{color:var(--muted); font-weight:800;}
.readinessBars{display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:8px;}
.readinessBars span{display:flex; justify-content:space-between; gap:6px; color:var(--muted); font-size:12px; margin-bottom:5px;}
.readinessBars i{display:block; height:8px; background:#e5edf6; border-radius:999px; overflow:hidden;}
.readinessBars em{display:block; height:100%; background:linear-gradient(90deg,var(--viz-seq-4),var(--viz-seq-7)); border-radius:999px;}
@media(max-width:900px){.actionList,.readinessBars{grid-template-columns:1fr}}
/* ===== Instructor work queue (Today preview + split-pane review) ===== */
.queuePreviewList{display:grid; gap:7px;}
button.queueRow,.queueRow{display:flex; align-items:center; gap:10px; width:100%; text-align:left; border:1px solid #e5edf6; background:var(--neutral-50); border-radius:12px; padding:9px 10px; cursor:pointer;}
button.queueRow i,.queueRow i{flex:none; width:4px; align-self:stretch; border-radius:999px; background:var(--neutral-300); min-height:30px;}
button.queueRow.q1 i,.queueRow.q1 i{background:var(--brand-orange);}
button.queueRow.q2 i,.queueRow.q2 i{background:#b25c00;}
button.queueRow>div,.queueRow>div{flex:1; min-width:0;}
button.queueRow b,.queueRow b{display:block; color:var(--navy); font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
button.queueRow span,.queueRow span{display:block; color:var(--muted); font-size:12px; margin-top:2px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
button.queueRow>em,.queueRow>em{flex:none; font-style:normal; font-size:11px; font-weight:800; color:var(--text-tertiary); font-variant-numeric:tabular-nums;}
button.queueRow.active,.queueRow.active{border-color:var(--accent); background:#eef4ff;}
button.queueRow:focus-visible,.queueRow:focus-visible{outline:2px solid var(--accent); outline-offset:2px;}
button.queueStartBtn{background:var(--accent); color:var(--text-inverse); border:0; border-radius:10px; padding:9px 14px; font-weight:800; cursor:pointer;}
button.watchRow{display:block; width:100%; text-align:left; border:1px solid #f3d9c3; border-left:5px solid #b25c00; background:#fffaf3; border-radius:12px; padding:9px 10px; cursor:pointer;}
button.watchRow b{display:block; color:var(--navy); font-size:13px;}
button.watchRow span{display:block; color:var(--muted); font-size:12px; margin-top:2px;}
.instructorQueue{grid-column:1 / -1; display:grid; gap:10px;}
.queueFilters{display:flex; flex-wrap:wrap; gap:6px;}
.queueFilters button{border:1px solid #dbe8ff; background:var(--surface); color:#1d3f72; border-radius:999px; padding:6px 11px; font-size:12px; font-weight:700; cursor:pointer;}
.queueFilters button em{font-style:normal; color:var(--text-tertiary); font-variant-numeric:tabular-nums;}
.queueFilters button.active{background:#eef4ff; border-color:var(--accent);}
.queueFilters button:focus-visible{outline:2px solid var(--accent); outline-offset:2px;}
.queueTools{display:flex; flex-wrap:wrap; align-items:center; gap:7px;}
.queueTools input[type="search"]{flex:1; min-width:180px; max-width:320px; border:1px solid var(--line); border-radius:9px; padding:7px 10px; font-size:12.5px;}
.queueTools select{border:1px solid var(--line); border-radius:9px; padding:7px 8px; font-size:12.5px; background:var(--surface);}
.queueTools>button{border:1px solid #dbe8ff; background:var(--surface); color:#1d3f72; border-radius:9px; padding:7px 11px; font-size:12px; font-weight:700; cursor:pointer;}
.viewChip{display:inline-flex; align-items:stretch; border:1px solid #cfe0c9; border-radius:999px; overflow:hidden; background:#f3f9f1;}
.viewChip button{border:0; background:none; cursor:pointer; font-size:12px; font-weight:700; color:#1d6f42; padding:6px 4px 6px 11px;}
.viewChip button em{font-style:normal; color:var(--text-tertiary); font-variant-numeric:tabular-nums;}
.viewChip .viewDel{padding:6px 9px 6px 5px; color:var(--text-disabled); font-weight:800;}
.viewChip .viewDel:hover{color:#b91c1c;}
.viewPins{display:flex; flex-wrap:wrap; gap:6px; margin:0 0 10px;}
.viewPins button{border:1px solid #cfe0c9; background:#f3f9f1; color:#1d6f42; border-radius:999px; padding:5px 11px; font-size:12px; font-weight:700; cursor:pointer;}
.viewPins button em{font-style:normal; color:var(--text-tertiary); font-variant-numeric:tabular-nums;}
.queueUndoBar{display:flex; align-items:center; justify-content:space-between; gap:10px; background:#123b2a; color:#e7f7ee; border-radius:12px; padding:9px 12px; font-size:13px; font-weight:700;}
.queueUndoBar button{background:#e7f7ee; color:#123b2a; border:0; border-radius:8px; padding:6px 12px; font-weight:800; cursor:pointer;}
.queueSplit{display:grid; grid-template-columns:minmax(250px,320px) minmax(0,1fr); gap:12px; align-items:start;}
.queueList{display:grid; gap:7px; align-content:start; max-height:66vh; overflow:auto; padding:2px;}
.queueHint{color:var(--text-tertiary); font-size:11.5px; margin:4px 2px;}
.queueHint kbd, .queueVerb kbd, .queueUndoBar kbd{font-family:ui-monospace,Consolas,monospace; font-size:10.5px; background:rgba(100,116,139,.12); border:1px solid rgba(100,116,139,.35); border-bottom-width:2px; border-radius:5px; padding:1px 5px;}
.queueDetail{background:var(--surface); border:1px solid var(--line); border-radius:14px; padding:14px; box-shadow:0 6px 18px rgba(31,56,100,.06); min-height:280px; display:flex; flex-direction:column;}
.queueEmpty{color:var(--muted); font-size:13px; padding:14px;}
.queueDetailHead{display:flex; justify-content:space-between; gap:10px; align-items:flex-start;}
.queueDetailHead b{display:block; color:var(--navy); font-size:15px;}
.queueDetailHead span{display:block; color:var(--muted); font-size:12.5px; margin-top:2px;}
.queueTypeChip{flex:none; font-style:normal; font-size:11px; font-weight:800; text-transform:uppercase; letter-spacing:.05em; color:#1d3f72; background:#eef4ff; border:1px solid #dbe8ff; border-radius:999px; padding:4px 9px;}
.queueTabs{display:flex; gap:2px; border-bottom:1px solid var(--line); margin:10px 0;}
.queueTabs button{border:0; background:none; padding:7px 11px; font-size:12.5px; font-weight:700; color:var(--muted); border-bottom:2px solid transparent; cursor:pointer;}
.queueTabs button.active{color:var(--accent); border-bottom-color:var(--accent);}
.queueTabs button:focus-visible{outline:2px solid var(--accent); outline-offset:-2px;}
.queueDetailBody{flex:1;}
.queueKvList{margin:0; display:grid; gap:7px;}
.queueKv{display:grid; grid-template-columns:110px minmax(0,1fr); gap:10px; font-size:13px;}
.queueKv dt{color:var(--text-tertiary); font-size:11px; font-weight:800; text-transform:uppercase; letter-spacing:.05em; padding-top:2px;}
.queueKv dd{margin:0; color:var(--ink); overflow-wrap:anywhere;}
.queueVerbs{display:flex; flex-wrap:wrap; align-items:center; gap:8px; margin-top:14px; padding-top:12px; border-top:1px dashed var(--line);}
button.queueVerb{border-radius:10px; padding:9px 13px; font-weight:800; font-size:13px; cursor:pointer; border:1px solid transparent;}
.queueVerb.ok{background:#1d6f42; color:var(--text-inverse);}
.queueVerb.mid{background:var(--surface); color:#8a4b00; border-color:#e0b073;}
.queueVerb.no{background:var(--surface); color:#b91c1c; border-color:#e8a9a1;}
.queueVerb:focus-visible{outline:2px solid var(--accent); outline-offset:2px;}
.queueVerbNote{font-size:11px; color:var(--text-disabled); margin-left:auto;}
.queueAudit{display:grid; gap:7px;}
.queueAuditRow{border:1px solid #e5edf6; border-radius:10px; padding:8px 10px; background:var(--neutral-50);}
.queueAuditRow b{display:block; color:var(--navy); font-size:12.5px; text-transform:capitalize;}
.queueAuditRow span{display:block; color:var(--muted); font-size:11.5px; margin-top:1px;}
.queueAuditRow em{display:block; color:#1d3f72; font-style:normal; font-size:11.5px; margin-top:2px;}
.mriModuleError b{display:block; color:#b91c1c; margin-bottom:4px;}
.mriModuleError button{margin-top:10px; border:1px solid var(--line); background:var(--surface); border-radius:8px; padding:7px 14px; font-weight:700; cursor:pointer;}
@media(max-width:900px){.queueSplit{grid-template-columns:1fr}.queueList{max-height:34vh}.queueVerbNote{margin-left:0; flex-basis:100%;}}
.deptnav .navBadge{margin-left:auto; font-style:normal; font-size:10.5px; font-weight:800; background:var(--brand-orange); color:var(--text-inverse); border-radius:999px; padding:1px 7px; line-height:1.6; font-variant-numeric:tabular-nums;}
/* ===== Grading matrix ===== */
.gradeCell{max-width:340px;}
.gradeChip{display:inline-flex; flex-wrap:wrap; align-items:center; gap:5px; border:1px solid #e5edf6; background:var(--neutral-50); border-radius:9px; padding:4px 8px; margin:2px 3px 2px 0; font-size:11.5px;}
.gradeChip b{color:var(--navy);}
.gradeChip.draft{border-style:dashed; border-color:#e0b073; background:#fffaf3;}
.gradeChip.draft::before{content:'DRAFT'; font-size:9px; font-weight:800; letter-spacing:.06em; color:#8a4b00;}
.gradeChip button{border:1px solid var(--line); background:var(--surface); color:var(--ink); border-radius:6px; padding:2px 7px; font-size:10.5px; font-weight:700; cursor:pointer;}
.gradeWarn{font-style:normal; color:#8a4b00; background:#fbf0da; border-radius:8px; padding:2px 7px; font-size:11px; font-weight:700; display:inline-block;}
#gradeReleaseAll{background:#1d6f42; color:var(--text-inverse); border:0; border-radius:9px; padding:8px 13px; font-weight:800; cursor:pointer;}
#gradeReleaseAll:disabled{background:var(--neutral-300); cursor:default;}
.quizItemBad b{color:#b91c1c;}
.quizAnalysisBlock>b{display:block; color:var(--navy); margin-bottom:4px;}
/* ===== Program metrics ===== */
.metricsHead{display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap;}
.activationFunnel{grid-template-columns:repeat(4,minmax(120px,1fr));}
.activationFunnel div{border-top:4px solid var(--accent);}
.activationFunnel small{display:block; margin-top:4px; color:var(--muted); font-size:10.5px;}
.metricsControls{display:flex; gap:7px;}
.metricsControls select{border:1px solid var(--line); border-radius:9px; padding:6px 8px; font-size:12.5px; background:var(--surface);}
.metricsControls button{border:1px solid #dbe8ff; background:var(--surface); color:#1d3f72; border-radius:9px; padding:6px 11px; font-size:12px; font-weight:700; cursor:pointer;}
.metricsGrid{display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; margin-top:10px;}
.metricsGrid h4, #metricsBody h4{margin:12px 0 6px; font-size:13px; color:var(--navy);}
.metricsTrend{display:flex; align-items:flex-end; gap:3px; height:64px; padding:4px 2px; border-bottom:1px solid var(--line);}
.metricsTrend i{flex:1; max-width:26px; background:#bfd3f7; border-radius:3px 3px 0 0;}
.metricsTrend i:last-child{background:var(--accent);}
.sr-only{position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden; clip:rect(0 0 0 0); border:0;}
@media(max-width:900px){.metricsGrid{grid-template-columns:1fr}}
/* ===== Accessibility ===== */
:focus-visible{outline:2px solid var(--accent); outline-offset:2px;}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; scroll-behavior:auto !important;}
}
/* ===== Student 360 ===== */
.s360Chip{font-style:normal; font-size:10.5px; font-weight:800; text-transform:uppercase; letter-spacing:.05em; border-radius:999px; padding:3px 9px; vertical-align:2px; margin-left:6px;}
.s360Chip.good{background:#e2f3ea; color:#1d6f42;}
.s360Chip.warn{background:#fbf0da; color:#8a4b00;}
.s360Chip.crit{background:#fbe7e4; color:#b91c1c;}
.s360Toolbar{display:flex; flex-wrap:wrap; gap:7px;}
.s360Toolbar button.danger{background:var(--surface); color:#b91c1c; border:1px solid #e8a9a1;}
.s360Tabs{margin:12px 0 10px;}
.s360Body .s360TimelineCard{grid-column:1 / -1;}
.s360Ev{display:grid; grid-template-columns:150px 92px minmax(0,1fr); gap:10px; align-items:baseline; padding:7px 2px; border-bottom:1px dashed #e5edf6; font-size:12.5px;}
.s360Ev:last-child{border-bottom:none;}
.s360Ev em{font-style:normal; color:var(--text-disabled); font-size:11px; font-variant-numeric:tabular-nums;}
.s360Ev i{font-style:normal; font-size:10px; font-weight:800; text-transform:uppercase; letter-spacing:.05em; color:#1d3f72; background:#eef4ff; border-radius:999px; padding:2px 7px; text-align:center; white-space:nowrap;}
.s360Ev span{color:var(--ink); overflow-wrap:anywhere;}
.s360Ev span b{color:var(--navy);}
button.linklike{background:none; border:none; color:var(--accent); text-decoration:underline; cursor:pointer; padding:0; font-size:inherit;}
@media(max-width:900px){.s360Ev{grid-template-columns:1fr; gap:2px;}}
.docReviewList{gap:9px;}
.docReviewItem{border:1px solid #e5edf6; border-radius:12px; padding:10px; background:var(--neutral-50);}
.docReviewItem.approved{border-left:5px solid #1d6f42;}
.docReviewItem.rejected{border-left:5px solid #c0392b;}
.docReviewItem.needs_info{border-left:5px solid #b25c00;}
.docReviewItem b,.docReviewItem span,.docReviewItem em{display:block;}
.docReviewItem span,.docReviewItem em{font-size:12px; color:var(--muted); margin-top:2px;}
.docReviewItem a{display:inline-block; margin-top:7px; font-size:12px;}
.docReviewItem div:last-child{display:flex; flex-wrap:wrap; gap:6px; margin-top:8px;}
/* Compliance tracker (staff + student matrices): lifecycle state chips reuse
   the reserved status tokens — green=compliant, amber=expiring, red=blocked. */
.compChip,.docReviewItem .compChip{display:inline-flex; width:auto; align-items:center; border:0; border-radius:999px; padding:2px 9px; font-size:11.5px; font-weight:600; white-space:nowrap; background:var(--surface-sunken); color:var(--text-secondary); vertical-align:middle;}
.compFilterRow{display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin:8px 0;}
button.compChip{cursor:pointer;}
.compChip.compliant{background:var(--success-surface); color:var(--success-text);}
.compChip.expiring_soon{background:var(--warning-surface); color:var(--warning-text);}
.compChip.pending_review{background:var(--info-surface); color:var(--info-text);}
.compChip.missing,.compChip.expired,.compChip.rejected,.compChip.action_needed{background:var(--danger-surface); color:var(--danger-text);}
.compMatrixWrap{overflow-x:auto;}
.compMatrix th.compReqHead{font-size:11px; max-width:130px; overflow-wrap:anywhere; vertical-align:bottom;}
.compMatrix th.compReqHead .table__sub{display:block; font-weight:400;}
.compRoleFieldset{border:1px solid var(--border); border-radius:8px; padding:8px 10px; margin:6px 0;}
.compRoleFieldset legend{font-size:12px; color:var(--text-secondary); padding:0 4px;}
.compRoleFieldset label{display:inline-flex; align-items:center; gap:5px; margin-right:12px; font-size:12.5px;}
.compPolicyText{white-space:pre-wrap; max-height:200px; overflow:auto; border:1px solid var(--border); border-radius:8px; padding:8px 10px; font-size:12.5px; background:var(--surface-sunken); margin:4px 0 8px;}
.mriReqRow.approved{border-left-color:#1d6f42;}
.mriReqRow.rejected{border-left-color:#c0392b;}
.mriReqRow.needs_info{border-left-color:#b25c00;}
.mriReqRow.expired{border-left-color:#c0392b; background:#fff5f5;}
.mriReqRow.expired small{color:#b91c1c; font-weight:800;}
.mriReqRow.expiring_soon{border-left-color:var(--warning-solid);}
.mriReqRow.expiring_soon small{color:#b45309; font-weight:800;}
.mriReqMini.expiring{border-color:#fde68a; background:#fffbeb;}
.mriReqMini.expiring b{color:var(--warning-text);}
.mriReqMini.expiring span{color:#b45309;}
.complianceBlockPanel{display:grid; gap:6px; border:1px solid #fecaca; background:#fff5f5; border-radius:12px; padding:12px; margin:10px 0;}
.complianceBlockPanel b{color:var(--danger-text);}
.complianceBlockPanel span,.complianceBlockPanel small{color:#7f1d1d; font-size:12px;}
.complianceBlockPanel em{font-style:normal; font-size:12px; color:var(--danger-text); background:var(--danger-surface); border-radius:8px; padding:4px 8px; justify-self:start;}
.complianceBlockPanel label{display:grid; gap:4px; font-size:12px; color:#7f1d1d; font-weight:700;}
.complianceBlockPanel input{border:1px solid #fca5a5; border-radius:8px; padding:7px 9px; font:inherit;}
.complianceBlockPanel.warn{border-color:#fde68a; background:#fffbeb;}
.complianceBlockPanel.warn b{color:var(--warning-text);}
.complianceBlockPanel.warn span,.complianceBlockPanel.warn small,.complianceBlockPanel.warn label{color:var(--warning-text);}
.complianceBlockPanel.warn em{background:var(--warning-surface); color:var(--warning-text);}
.complianceBlockPanel.warn input{border-color:#fcd34d;}
/* Unread count chip: flows inline after the "Notifications" label so the
   button's flex centering keeps it aligned instead of overlapping the text. */
.notifBadge{min-width:17px; height:17px; padding:0 5px; border-radius:999px; background:var(--danger-solid); color:var(--text-inverse); font-size:10px; font-weight:800; font-style:normal; display:inline-flex; align-items:center; justify-content:center; line-height:1; flex:none;}
.notifBadge.hidden{display:none;}
.dashNotice.unread{background:#eff6ff; cursor:pointer;}
.dashNotice small{display:block; color:var(--text-disabled); font-size:11px; margin-top:3px;}
.notifReadAll{display:block; width:100%; margin-bottom:8px; border:1px solid var(--border-strong); background:var(--neutral-50); border-radius:9px; padding:7px 10px; font:inherit; font-size:12px; font-weight:700; color:var(--neutral-700); cursor:pointer;}
.notifReadAll:hover{background:#eef2f7;}
.pocSignoffCard{border:1px solid #bbf7d0; background:linear-gradient(180deg,var(--surface),#f6fdf8);}
.skillSelfReportForm{margin-top:12px; padding-top:12px; border-top:1px dashed var(--border-strong); display:grid; gap:8px;}
.skillSelfReportForm h4{margin:0; color:var(--navy); font-size:13px;}
.skillCatGroup{border:1px solid var(--border); border-radius:12px; background:var(--surface); padding:0 10px; margin-top:8px;}
.skillCatGroup>summary{display:flex; justify-content:space-between; align-items:center; gap:10px; cursor:pointer; padding:10px 2px; list-style:none;}
.skillCatGroup>summary::-webkit-details-marker{display:none;}
.skillCatGroup>summary b{color:var(--navy); font-size:13px;}
.skillCatGroup>summary span{color:var(--text-tertiary); font-size:12px; white-space:nowrap;}
.skillCatGroup[open]>summary{border-bottom:1px dashed var(--border);}
.skillCatGroup>div{padding:8px 2px; border-bottom:1px dashed #eef2f7;}
.skillCatGroup>div:last-of-type{border-bottom:0;}
.skillDefDetails{margin:6px 0 2px; font-size:12px; color:var(--text-secondary);}
.skillDefDetails>summary{cursor:pointer; color:var(--blue,var(--accent)); font-size:12px;}
.skillDefDetails b{display:block; margin-top:8px; color:var(--navy); font-size:12px;}
.skillDefDetails ol,.skillDefDetails ul{margin:4px 0 0 18px; padding:0; display:grid; gap:3px;}
.skillDefDetails .sub{margin:6px 0 0; font-size:12px;}
.skillDefSteps em.critFlag{font-style:normal; font-weight:700; font-size:10px; color:#b91c1c; background:#fef2f2; border:1px solid #fecaca; border-radius:6px; padding:0 5px; margin-left:4px;}
.skillDefTriggers li{color:#9a3412;}
.timelineCard{border:1px solid #c7d2fe; background:linear-gradient(180deg,var(--surface),#f7f8ff);}
.timelineList{display:grid; gap:8px; margin-top:10px;}
.timelineItem{display:flex; gap:10px; align-items:flex-start; text-align:left; width:100%; border:1px solid var(--border); border-left:4px solid var(--border-strong); border-radius:12px; background:var(--surface); padding:10px 12px; font:inherit; cursor:pointer;}
.timelineItem:hover{background:var(--neutral-50);}
.timelineItem em{flex:none; font-style:normal; font-size:10px; font-weight:800; letter-spacing:.04em; text-transform:uppercase; border-radius:999px; padding:3px 8px; background:var(--neutral-200); color:var(--neutral-700); margin-top:1px;}
.timelineItem b{display:block; color:var(--navy); font-size:13px;}
.timelineItem span{display:block; color:var(--muted); font-size:12px; margin-top:2px; line-height:1.35;}
.timelineItem.blocked{border-left-color:var(--danger-solid);} .timelineItem.blocked em{background:var(--danger-surface); color:var(--danger-text);}
.timelineItem.action{border-left-color:var(--warning-solid);} .timelineItem.action em{background:var(--warning-surface); color:var(--warning-text);}
.timelineItem.due{border-left-color:var(--accent);} .timelineItem.due em{background:#dbeafe; color:#1e40af;}
.timelineItem.upcoming{border-left-color:#0e7c7b;} .timelineItem.upcoming em{background:#ccfbf1; color:#115e59;}
.timelineItem.info{border-left-color:var(--neutral-400);}
.transcriptLinks{flex-wrap:wrap;}
.transcriptLinks .button{font-size:12px;}
.lmsModule{border:1px solid #dbe3ef; border-radius:14px; padding:12px; margin-top:12px; background:#fbfcff;}
.lmsModule.locked{background:var(--neutral-50); border-style:dashed;}
.lmsModuleHead{display:flex; justify-content:space-between; align-items:center; gap:10px;}
.lmsModuleHead b{color:var(--navy); font-size:14px;}
.lmsModuleHead span{font-size:11px; font-weight:800; color:var(--text-secondary); background:var(--neutral-200); border-radius:999px; padding:3px 9px;}
.lmsModule.locked .lmsModuleHead span{background:var(--danger-surface); color:var(--danger-text);}
.lmsLockPanel{display:grid; gap:6px; border:1px dashed var(--border-strong); border-radius:10px; background:var(--surface); padding:10px 12px; margin-top:8px;}
.lmsLockPanel b{color:var(--neutral-700); font-size:12px;}
.lmsLockPanel em{font-style:normal; font-size:12px; color:var(--text-secondary); background:var(--surface-sunken); border-radius:8px; padding:4px 8px; justify-self:start;}
/* margin:auto restores native <dialog> centering — the global `*{margin:0}` reset removes it. */
.edcDialog{margin:auto; border:1px solid #dbe3ef; border-radius:16px; padding:0; max-width:440px; width:calc(100vw - 40px); box-shadow:0 24px 60px rgba(15,42,68,.25);}
.edcDialog::backdrop{background:rgba(15,42,68,.45);}
.edcDialogForm{display:grid; gap:8px; padding:18px 20px;}
.edcDialogForm h3{margin:0; color:var(--navy); font-size:16px;}
.edcDialogForm label{font-size:12px; font-weight:700; color:var(--neutral-700);}
.edcDialogForm input,.edcDialogForm select,.edcDialogForm textarea{width:100%; border:1px solid var(--border-strong); border-radius:9px; padding:8px 10px; font:inherit; font-size:13px;}
.edcDialogForm textarea{min-height:70px; resize:vertical;}
.edcDialogActions{display:flex; justify-content:flex-end; gap:8px; margin-top:6px;}
.edcDialogActions button:where(:not(.btn)){border-radius:9px; padding:8px 14px; font:inherit; font-size:13px; font-weight:700; cursor:pointer; border:1px solid var(--border-strong); background:var(--neutral-50); color:var(--neutral-700);}
.edcDialogActions button[type="submit"]:where(:not(.btn)){background:#1f3864; border-color:#1f3864; color:var(--text-inverse);}
.lmsQuiz{border-left:4px solid #7c3aed;}
.quizQuestion{border:1px solid var(--border); border-radius:10px; padding:10px 12px; margin:8px 0 0;}
.quizQuestion legend{font-size:13px; font-weight:700; color:var(--navy); padding:0 4px;}
.quizOption{display:flex; align-items:center; gap:7px; font-size:13px; color:var(--neutral-700); padding:3px 0; cursor:pointer;}
.quizFeedback{display:grid; gap:6px; border:1px solid var(--border); border-radius:10px; background:var(--surface-sunken); padding:10px 12px; margin:8px 0 0;}
.quizFeedback>b{color:var(--navy); font-size:13px;}
.quizFeedbackRow{display:grid; gap:2px; border-left:4px solid var(--neutral-400); border-radius:6px; background:var(--surface); padding:6px 10px;}
.quizFeedbackRow.good{border-left-color:var(--success-solid);}
.quizFeedbackRow.crit{border-left-color:var(--danger-solid);}
.quizFeedbackRow b{font-size:12px; color:var(--navy);}
.quizFeedbackRow span{font-size:12px; color:var(--neutral-700);}
.quizFeedbackRow em{font-style:normal; font-size:12px; color:var(--text-secondary);}
.lmsLesson{border-left:4px solid var(--info-solid);}
.lmsLessonBody{font-size:13px; color:var(--neutral-700); display:grid; gap:6px; margin:8px 0;}
.lmsLessonBody h4,.lmsLessonBody h5{margin:4px 0 0; color:var(--navy);}
.lmsLessonBody ul,.lmsLessonBody ol{margin:0; padding-left:20px; display:grid; gap:3px;}
.lmsLessonBody p{margin:0;}
.courseOutlineModule{border:1px solid var(--border); border-radius:14px; padding:12px; margin-top:12px; background:var(--surface-raised);}
.courseOutlineModule.inactive{background:var(--neutral-50); border-style:dashed;}
.courseOutlineModuleHead{display:flex; justify-content:space-between; align-items:flex-start; gap:10px; flex-wrap:wrap;}
.courseOutlineModuleHead b{color:var(--navy); font-size:14px;}
.courseOutlineModuleHead span{display:block; font-size:11px; color:var(--text-secondary); margin-top:2px;}
.courseOutlineItem{display:flex; justify-content:space-between; align-items:center; gap:10px; flex-wrap:wrap; border:1px solid var(--border); border-radius:10px; background:var(--surface); padding:8px 10px; margin-top:8px;}
.courseOutlineItem b{color:var(--navy); font-size:13px;}
.courseOutlineItem span{display:block; font-size:11px; color:var(--text-secondary);}
.courseOutlineActions{display:flex; align-items:center; gap:6px; flex-wrap:wrap;}
.courseOutlineActions button{font-size:12px; padding:5px 9px;}
.quizBuilderQ{border:1px solid var(--border); border-radius:10px; padding:10px 12px; margin:8px 0 0;}
.quizBuilderQ legend{font-size:13px; font-weight:700; color:var(--navy); padding:0 4px; display:flex; align-items:center; gap:8px;}
.quizBuilderQ legend button{font-size:11px; padding:2px 8px;}
.qbOptions{display:grid; gap:6px; margin:6px 0;}
.qbOption{display:flex; align-items:center; gap:8px;}
.qbOption input[data-qb-option]{flex:1;}
.qbOption [data-qb-remove-option]{padding:4px 9px;}
.qbCorrect{display:flex; align-items:center; gap:4px; font-size:11px; font-weight:700; color:var(--text-secondary); cursor:pointer;}
.quizBuilderBulk{border:1px dashed var(--border-strong); border-radius:10px; padding:8px 12px; margin:8px 0;}
.quizBuilderBulk summary{font-size:12px; font-weight:700; color:var(--neutral-700); cursor:pointer;}
.courseAgentLog{display:grid; gap:8px; max-height:340px; overflow-y:auto; border:1px solid var(--border); border-radius:12px; background:var(--surface-sunken); padding:10px 12px; margin-bottom:8px;}
.courseAgentMsg{display:grid; gap:2px; border-radius:10px; padding:8px 10px; background:var(--surface); border:1px solid var(--border);}
.courseAgentMsg.user{border-left:4px solid var(--accent);}
.courseAgentMsg.assistant{border-left:4px solid var(--neutral-solid);}
.courseAgentMsg.crit{border-left-color:var(--danger-solid);}
.courseAgentMsg.pending span{color:var(--text-secondary); font-style:italic;}
.courseAgentMsg b{font-size:11px; color:var(--text-secondary); text-transform:uppercase; letter-spacing:.04em;}
.courseAgentMsg span{font-size:13px; color:var(--neutral-700); white-space:pre-wrap;}
.courseAgentMsg em{font-style:normal; font-size:12px; color:var(--info-text); background:var(--info-surface); border-radius:8px; padding:4px 8px; justify-self:start;}
#courseAgentForm{display:flex; gap:8px; align-items:flex-end;}
#courseAgentForm textarea{flex:1; resize:vertical;}
.pocAttest{display:block; color:var(--success-text); background:#f0fdf4; border:1px solid #bbf7d0; border-radius:9px; padding:8px 10px; font-size:11px; line-height:1.4; margin:4px 0 8px;}

.clinicalClockCard{border:1px solid #bfdbfe; background:linear-gradient(180deg,var(--surface),#f7fbff);}
.clinicalClockCard>button,#mriPortalClock button{font-size:14px; padding:11px 16px;}
.clinicalShiftDetail { display:grid; gap:5px; padding:14px; border-radius:16px; background:#eff6ff; border:1px solid #bfdbfe; margin:10px 0; }
.clinicalShiftDetail b { color:#1e3a8a; }
.clinicalShiftDetail span { color:var(--neutral-700); font-size:.92rem; }
.clinicalShiftDetail small { color:var(--accent); font-weight:700; }
.clinicalEventList { display:grid; gap:9px; margin:8px 0 14px; }
.clinicalEventList div, .clinicalShiftButton { display:grid; gap:5px; width:100%; text-align:left; padding:12px 13px; border-radius:14px; border:1px solid var(--border); background:var(--surface); box-shadow:0 5px 14px rgba(15,23,42,.04); }
.clinicalEventList b, .clinicalShiftButton b { color:var(--text-primary); }
.clinicalEventList span, .clinicalShiftButton span { color:var(--text-tertiary); font-size:.9rem; }
.clinicalShiftButton { cursor:pointer; margin-bottom:0; }
.clinicalShiftButton.active { border-color:var(--accent); background:#eff6ff; }
.clinicalCalendarCard{grid-column:1 / -1;}
.clinicalCalendarList{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;}
.clinicalCalendarItem{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:12px;width:100%;text-align:left;border:1px solid var(--border);background:var(--surface);border-radius:16px;padding:12px;cursor:pointer;box-shadow:0 6px 16px rgba(15,23,42,.04);}
.clinicalCalendarItem:hover,.clinicalCalendarItem.active{border-color:var(--accent);background:#eff6ff;box-shadow:0 10px 24px rgba(37,99,235,.12)}
.clinicalCalendarItem time{display:grid;place-items:center;min-width:56px;border-radius:14px;background:var(--surface-sunken);color:var(--text-primary);padding:8px;}
.clinicalCalendarItem time b{font-size:22px;line-height:1}.clinicalCalendarItem time span{font-size:10px;font-weight:900;color:var(--text-tertiary);margin-top:2px}.clinicalCalendarItem>div{display:grid;gap:3px;min-width:0}.clinicalCalendarItem>div b{color:var(--text-primary)}.clinicalCalendarItem>div span,.clinicalCalendarItem>div small{color:var(--text-tertiary);line-height:1.35}.clinicalCalendarItem em{font-style:normal;border-radius:999px;padding:5px 8px;font-size:11px;font-weight:900;background:#e0f2fe;color:#0369a1;white-space:nowrap}.clinicalCalendarItem.live em{background:var(--success-surface);color:var(--success-text)}.clinicalCalendarItem.complete em{background:#ede9fe;color:#5b21b6}.clinicalCalendarItem.scheduled em{background:#eff6ff;color:var(--accent)}
.clinicalModalBackdrop{position:fixed;inset:0;z-index:var(--z-modal);background:rgba(15,23,42,.48);display:flex;align-items:center;justify-content:center;padding:18px;backdrop-filter:blur(4px)}
.clinicalModal{width:min(1080px,100%);max-height:min(88vh,900px);overflow:auto;background:var(--surface);border-radius:24px;border:1px solid #dbeafe;box-shadow:0 28px 80px rgba(15,23,42,.28);padding:20px;display:grid;gap:12px;}
.clinicalModal header{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding-bottom:10px;border-bottom:1px solid var(--border)}.clinicalModal header h3{margin:0;color:var(--text-primary);font-size:clamp(22px,3vw,30px);letter-spacing:-.5px}.clinicalModal header span{display:block;color:var(--text-tertiary);margin-top:4px}.clinicalModal header button{border:1px solid var(--border);background:var(--neutral-50);color:var(--text-primary);border-radius:999px;width:38px;height:38px;font-size:24px;line-height:1;cursor:pointer}.clinicalModalStatus{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.clinicalModalStatus em{font-style:normal;border-radius:999px;padding:6px 10px;font-size:12px;font-weight:900;background:#eff6ff;color:var(--accent)}.clinicalModalStatus em.live{background:var(--success-surface);color:var(--success-text)}.clinicalModalStatus em.complete{background:#ede9fe;color:#5b21b6}.clinicalModalStatus em.warn{background:var(--warning-surface);color:var(--warning-text)}.clinicalModalStatus span{color:var(--text-tertiary);font-weight:800}.clinicalModalGrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;border:1px solid var(--border);border-radius:16px;background:var(--surface);overflow:hidden}.clinicalModalGrid article{border:0;border-right:1px solid var(--border);background:var(--neutral-50);border-radius:0;padding:10px 11px;min-width:0}.clinicalModalGrid article:last-child{border-right:0}.clinicalModalGrid h4,.clinicalModalEvents h4{margin:0 0 4px;color:var(--text-secondary);font-size:10px;text-transform:uppercase;letter-spacing:.08em}.clinicalModalGrid p{margin:0;color:var(--text-primary);font-size:13px;font-weight:900;line-height:1.25}.clinicalModalGrid small{display:block;margin-top:3px;color:var(--text-tertiary);font-size:11px;line-height:1.3}.clinicalModalForm{display:grid;gap:10px;border:1px solid #dbeafe;background:#f8fbff;border-radius:18px;padding:14px}.clinicalModalForm label{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:900;color:var(--navy)}.clinicalModalForm input,.clinicalModalForm select,.clinicalModalForm textarea{border:1px solid var(--border-strong);border-radius:12px;padding:10px 11px;font:inherit;background:var(--surface);color:var(--ink);width:100%}.clinicalModalForm textarea{min-height:86px}.clinicalModalForm button,#mriClinicalModalClockOut{justify-self:start;border:none;background:linear-gradient(135deg,var(--brand-blue),#1d4ed8);color:var(--text-inverse);border-radius:999px;padding:10px 15px;font-weight:900;cursor:pointer;box-shadow:0 8px 18px rgba(29,78,216,.18)}#mriClinicalModalClockOut{background:linear-gradient(135deg,var(--danger-solid),#b91c1c)}.clinicalModalEvents{display:grid;gap:8px}
@media(max-width:900px){.clinicalModalGrid{grid-template-columns:repeat(2,minmax(0,1fr))}.clinicalModalGrid article:nth-child(2n){border-right:0}.clinicalModalGrid article:nth-child(-n+2){border-bottom:1px solid var(--border)}}
@media(max-width:760px){.clinicalCalendarItem{grid-template-columns:auto 1fr}.clinicalCalendarItem em{grid-column:2}.clinicalModal{padding:15px;border-radius:20px}.clinicalModalForm button,#mriClinicalModalClockOut{width:100%}}
.clinicalClockCard h4 { margin:12px 0 4px; }

.dash-dev-notes{border-color:#bfdbfe!important;background:#eff6ff!important;color:var(--accent)!important;font-weight:800;}
.devNotesPage{display:flex;flex-direction:column;gap:16px;}
.devNotesHero{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px;border-radius:20px;background:linear-gradient(135deg,#eff6ff,var(--neutral-50));border:1px solid #bfdbfe;}
.devNotesHero h2{margin:0;color:var(--text-primary);}
.devNotesHero span{color:var(--text-secondary);}
.devNotesGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px;}
.devNoteCard{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:16px;box-shadow:0 8px 24px rgba(15,23,42,.06);}
.devNoteCard small{display:inline-flex;padding:4px 8px;border-radius:999px;background:var(--success-surface);color:var(--success-text);font-weight:800;text-transform:uppercase;font-size:.72rem;}
.devNoteCard h3{margin:10px 0 6px;color:var(--text-primary);}
.devNoteCard p,.devNoteCard li{color:var(--text-secondary);line-height:1.45;}
.devNoteCard ul,.devNoteCard ol{margin:10px 0 0;padding-left:20px;}
.devNoteCard.wide{grid-column:1/-1;}
.devQuickLinks{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:14px;box-shadow:0 8px 24px rgba(15,23,42,.05)}
.devQuickLinks h3{margin:0 0 10px;color:var(--text-primary)}.devQuickLinks div{display:flex;flex-wrap:wrap;gap:10px}.devQuickLinks button{display:inline-flex;align-items:center;gap:8px;border:1px solid #bfdbfe;background:#eff6ff;color:var(--accent);border-radius:999px;padding:9px 12px;font-weight:800;cursor:pointer}.devQuickLinks svg{width:16px;height:16px}.releaseTimeline{position:relative;display:grid;gap:10px}.releaseTimeline button{display:grid;grid-template-columns:74px 1fr;gap:12px;text-align:left;border:1px solid var(--border);background:var(--surface);border-radius:14px;padding:12px;cursor:pointer}.releaseTimeline button:hover,.qaChecklist header button:hover,.devQuickLinks button:hover{border-color:var(--accent);box-shadow:0 8px 20px rgba(37,99,235,.12)}.releaseTimeline b{color:var(--accent)}.releaseTimeline strong{display:inline-flex;margin-right:8px;color:var(--text-primary)}.releaseTimeline small{display:block;margin-top:4px;color:var(--text-tertiary);line-height:1.4}.qaStatus{display:inline-flex;align-items:center;border-radius:999px;padding:3px 8px;font-style:normal;font-weight:800;font-size:.72rem;background:#e0f2fe;color:#0369a1}.qaStatus.passed{background:var(--success-surface);color:var(--success-text)}.qaStatus.testing{background:var(--warning-surface);color:var(--warning-text)}.qaStatus.blocked,.qaStatus.needs-env{background:var(--danger-surface);color:var(--danger-text)}.qaChecklist{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:12px}.qaChecklist>div{border:1px solid var(--border);border-radius:14px;padding:12px;background:var(--neutral-50)}.qaChecklist header{display:flex;align-items:center;gap:8px;justify-content:space-between}.qaChecklist header b{color:var(--text-primary)}.qaChecklist header button{border:1px solid #bfdbfe;background:var(--surface);color:var(--accent);border-radius:999px;padding:5px 9px;font-weight:800;cursor:pointer}.knownIssues{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px}.knownIssues div{border-radius:14px;padding:12px;border:1px solid var(--border);background:var(--neutral-50)}.knownIssues .blocked{border-color:#fecaca;background:#fef2f2}.knownIssues .next{border-color:#bfdbfe;background:#eff6ff}.knownIssues b{display:block;color:var(--text-primary);margin-bottom:4px}.knownIssues span{color:var(--text-secondary);line-height:1.4}
.devArchitecture{display:flex;flex-direction:column;gap:14px;padding:18px;border-radius:22px;background:linear-gradient(135deg,var(--neutral-900),#1e3a8a);color:var(--text-inverse);box-shadow:0 18px 40px rgba(15,23,42,.18);}
.devArchitecture .eyebrow{color:#bfdbfe}.devArchitecture h3{margin:0;font-size:1.45rem}.devArchitecture>div>span{color:#dbeafe;line-height:1.45}.archGrid,.phaseGrid,.estimateStrip{display:grid;gap:12px}.archGrid{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));}.archGrid article,.phaseGrid article,.estimateStrip div{border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.1);border-radius:16px;padding:14px;backdrop-filter:blur(8px)}.archGrid b,.estimateStrip b{display:block;margin-bottom:6px;color:var(--text-inverse)}.archGrid p,.phaseGrid li,.estimateStrip span{color:#e0f2fe;line-height:1.45}.phaseGrid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));}.phaseGrid h4{margin:0 0 8px;color:var(--text-inverse)}.phaseGrid ul{margin:0;padding-left:20px}.estimateStrip{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));}.estimateStrip span{display:block;font-size:.92rem}
.requirementsTrace{display:grid;gap:14px;background:var(--surface);border:1px solid #dbeafe;border-radius:22px;padding:18px;box-shadow:0 16px 38px rgba(15,35,71,.09)}
.traceHead{display:flex;justify-content:space-between;gap:14px;align-items:flex-start}.traceHead h3{margin:0;color:var(--navy);font-size:1.35rem}.traceHead span{display:block;color:var(--text-tertiary);line-height:1.45}.traceHead .button{border:1px solid #bfdbfe;background:#eff6ff;color:var(--accent);border-radius:999px;padding:9px 13px;text-decoration:none;font-weight:900;white-space:nowrap}
.traceKpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px}.traceKpis div{border:1px solid var(--border);background:var(--neutral-50);border-radius:14px;padding:11px}.traceKpis b{display:block;color:var(--navy);font-size:24px}.traceKpis span{color:var(--text-tertiary);font-size:12px;font-weight:800}
.traceTableWrap{overflow:auto;border:1px solid var(--border);border-radius:16px}.traceTable{width:100%;border-collapse:collapse;background:var(--surface);min-width:980px}.traceTable th,.traceTable td{padding:10px 11px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top;font-size:12px}.traceTable th{background:var(--surface-sunken);color:var(--neutral-700);text-transform:uppercase;letter-spacing:.05em;font-size:10.5px}.traceTable tr:last-child td{border-bottom:none}.traceTable td:first-child{font-weight:800;color:var(--navy)}
.traceStatus{display:inline-flex;border-radius:999px;padding:4px 8px;font-style:normal;font-size:11px;font-weight:900;background:#e0f2fe;color:#0369a1;white-space:nowrap}.traceStatus.demoed,.traceStatus.mvp-demoed{background:var(--success-surface);color:var(--success-text)}.traceStatus.partial{background:var(--warning-surface);color:var(--warning-text)}.traceStatus.needs-integration,.traceStatus.needs-build,.traceStatus.needs-policy,.traceStatus.needs-clarification{background:var(--danger-surface);color:var(--danger-text)}.traceStatus.post-mvp{background:#ede9fe;color:#5b21b6}
.integrationStatus{display:grid;gap:14px;background:var(--surface);border:1px solid #dbeafe;border-radius:22px;padding:18px;box-shadow:0 16px 38px rgba(15,35,71,.09)}.integrationKpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px}.integrationKpis div{border:1px solid var(--border);background:var(--neutral-50);border-radius:14px;padding:11px}.integrationKpis b{display:block;color:var(--navy);font-size:24px}.integrationKpis span{color:var(--text-tertiary);font-size:12px;font-weight:800}.integrationCards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.integrationCard{display:flex;flex-direction:column;gap:10px;border:1px solid var(--border);background:var(--neutral-50);border-radius:18px;padding:14px;box-shadow:0 8px 22px rgba(15,23,42,.05)}.integrationCard header{display:flex;align-items:center;justify-content:space-between;gap:8px}.integrationCard small{font-weight:900;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.04em}.integrationCard em{font-style:normal;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:900;background:#e0f2fe;color:#0369a1;white-space:nowrap}.integrationCard.live,.integrationCard.live-demo-ready{border-color:#bbf7d0;background:#f0fdf4}.integrationCard.live em,.integrationCard.live-demo-ready em{background:var(--success-surface);color:var(--success-text)}.integrationCard.approved-sample-data,.integrationCard.live-sample-dataset,.integrationCard.mvp-demoed,.integrationCard.mapped{border-color:#fde68a;background:#fffbeb}.integrationCard.approved-sample-data em,.integrationCard.live-sample-dataset em,.integrationCard.mvp-demoed em,.integrationCard.mapped em{background:var(--warning-surface);color:var(--warning-text)}.integrationCard.pending-access,.integrationCard.disabled-by-design,.integrationCard.env-gated,.integrationCard.handoff-scaffold{border-color:#fecaca;background:#fef2f2}.integrationCard.pending-access em,.integrationCard.disabled-by-design em,.integrationCard.env-gated em,.integrationCard.handoff-scaffold em{background:var(--danger-surface);color:var(--danger-text)}.integrationCard h3{margin:0;color:var(--text-primary)}.integrationCard p{margin:0;color:var(--text-secondary);line-height:1.45}.integrationCard footer{display:grid;gap:4px;margin-top:auto;padding-top:10px;border-top:1px solid rgba(148,163,184,.28)}.integrationCard footer b{color:var(--accent)}.integrationCard footer span{color:var(--text-tertiary);line-height:1.4;font-size:.92rem}
@media(max-width:700px){.devArchitecture{padding:14px}.archGrid,.phaseGrid,.estimateStrip{grid-template-columns:1fr}.devArchitecture h3{font-size:1.2rem}}
@media(max-width:700px){.traceHead{flex-direction:column}.traceHead .button{align-self:flex-start}.requirementsTrace,.integrationStatus{padding:14px}.integrationCards{grid-template-columns:1fr}}
.admin-orgs{display:grid;gap:8px;margin:0 0 12px;padding:14px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--neutral-50)}.admin-orgs h3{margin:0;color:var(--text-primary);font-size:15px}.admin-org-row{background:var(--surface)!important}
.traceActions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.traceActions button{border:1px solid #bfdbfe;background:var(--surface);color:var(--accent);border-radius:999px;padding:9px 13px;font-weight:900;cursor:pointer;white-space:nowrap}.implementationPacket{display:flex;flex-direction:column;gap:16px}.packetHero{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:22px;border-radius:24px;background:linear-gradient(135deg,var(--neutral-900),#1e40af);color:var(--text-inverse);box-shadow:0 18px 42px rgba(15,23,42,.18)}.packetHero .eyebrow{color:#bfdbfe}.packetHero h2{margin:0;font-size:1.8rem}.packetHero span{display:block;color:#dbeafe;line-height:1.45;max-width:780px}.packetHero button{display:inline-flex;align-items:center;gap:8px;border:1px solid rgba(255,255,255,.35);background:var(--surface);color:var(--accent);border-radius:999px;padding:10px 14px;font-weight:900;cursor:pointer;white-space:nowrap}.packetHero svg{width:16px;height:16px}.packetSummary{display:grid;grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:10px}.packetSummary div{border:1px solid #dbeafe;background:#eff6ff;border-radius:16px;padding:12px}.packetSummary b{display:block;color:var(--text-primary);font-size:26px}.packetSummary span{color:var(--text-secondary);font-size:12px;font-weight:900}.packetGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}.packetGrid article,.packetPlan article{background:var(--surface);border:1px solid var(--border);border-radius:18px;padding:16px;box-shadow:0 8px 24px rgba(15,23,42,.06)}.packetGrid h3,.packetPlan h3{margin:0 0 10px;color:var(--text-primary)}.packetGrid p,.packetGrid li,.packetPlan li{color:var(--text-secondary);line-height:1.45}.packetGrid ul,.packetPlan ul{margin:8px 0 0;padding-left:20px}.packetGrid em{font-style:normal;font-weight:900;color:var(--accent)}.packetPlan{display:grid;gap:12px}.packetPlan>h3{margin:4px 0 0}.packetPlan article{display:grid;grid-template-columns:minmax(180px,.7fr) 1fr 1fr;gap:14px;align-items:start}.packetPlan header b{display:block;color:var(--text-primary);font-size:1.05rem}.packetPlan header span{display:block;color:var(--text-tertiary);font-size:.9rem;margin-top:4px}.packetPlan h4{margin:0 0 6px;color:var(--neutral-700);font-size:.86rem;text-transform:uppercase;letter-spacing:.04em}@media(max-width:760px){.packetHero{flex-direction:column;align-items:flex-start}.packetPlan article{grid-template-columns:1fr}.traceActions{justify-content:flex-start}}@media print{body{background:var(--surface)}.topbar,.deptnav,.dashboardShell>aside,.dashDrawers,.aiAgent,.dashActions,.packetHero button,.devQuickLinks,.traceActions{display:none!important}.dashboardShell,.main{display:block!important}.content,.mriModuleCard{box-shadow:none!important;border:none!important;padding:0!important}.implementationPacket,.devNotesPage{gap:10px}.packetHero{background:var(--surface)!important;color:var(--text-primary)!important;border:1px solid var(--border-strong);box-shadow:none}.packetHero .eyebrow,.packetHero span{color:var(--neutral-700)}.packetPlan article,.packetGrid article,.requirementsTrace{break-inside:avoid;box-shadow:none}.traceTable{min-width:0}.traceTable th,.traceTable td{font-size:9px;padding:6px}}

/* ---------- mobile/tablet polish: dashboard modules, portals, analytics ---------- */
.workspace-card,.mri-module-card,.mriModuleBody,.mriPortalCard,.examCard,.instructorCard,.requirementsTrace,.integrationStatus,.implementationPacket{min-width:0;}
.mriModuleHead>div:first-child{min-width:0; flex:1 1 280px;}
.mriModuleHead h2,.mriModuleHead span,.examTopBar span,.packetHero span,.traceHead span{overflow-wrap:anywhere;}
.mriModuleHeadActions,.mriMapToolbar,.mriMapFilters{min-width:0;}
.mriLocSearch{min-width:0; flex:1 1 220px;}
.mriLocSearchInput{width:100%; max-width:none; min-width:0;}
.mriFilterGroup{max-width:100%; overflow-x:auto; scrollbar-width:none;}
.mriFilterGroup::-webkit-scrollbar{display:none;}
.mriCombo{min-width:0;}
.mriComboBtn{max-width:100%;}
.mriComboBtn span{overflow:hidden; text-overflow:ellipsis;}
.mriPortalList div,.instructorList div,.docReviewItem,.examRiskRow{overflow-wrap:anywhere;}

/* Admin / user-management panels */
.admin-user,.admin-org-row{min-width:0;}
.admin-user textarea,.admin-user input[type="file"]{width:100%; min-width:0; border:1px solid var(--line); border-radius:9px; padding:9px 10px; font:inherit; font-size:12px; background:var(--surface);}
.admin-user textarea{min-height:92px; resize:vertical;}
.admin-user small,.admin-orgs .sub{overflow-wrap:anywhere;}
.admin-org-row{grid-template-columns:minmax(220px,1.25fr) repeat(2,minmax(112px,.7fr)) repeat(4,minmax(140px,1fr));}
/* Per-program PowerSkills category picker (Programs admin panel) */
.admin-prog-seeds{display:grid;gap:6px;margin:-4px 0 4px;padding:10px 12px;border:1px dashed var(--border);border-radius:var(--radius-lg);background:var(--surface);}
.admin-prog-seed-opts{display:flex;flex-wrap:wrap;gap:6px 14px;}
.admin-prog-seed{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-primary);cursor:pointer;}
.admin-prog-seed input{accent-color:var(--accent, #3a6ff7);}
.admin-roster-import{grid-template-columns:minmax(150px,220px) minmax(240px,1fr) minmax(180px,.65fr);}
.admin-roster-import>div{display:flex; flex-wrap:wrap; gap:8px; grid-column:1 / -1;}
.admin-access-readiness .admin-user{grid-template-columns:minmax(220px,1fr) minmax(180px,.5fr) repeat(3,auto);}
.admin-token-rows{display:grid;gap:8px;margin-top:8px;}
.admin-token-row{display:grid;grid-template-columns:minmax(180px,1fr) auto;gap:10px;align-items:center;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:10px;}
.admin-token-row b{display:inline-flex;align-items:center;gap:6px;color:var(--text-primary);text-transform:capitalize;}
.admin-token-row span,.admin-token-row small{display:block;color:var(--text-tertiary);font-size:12px;line-height:1.35;overflow-wrap:anywhere;}
.admin-token-row button{border:none;background:var(--danger-surface);color:var(--danger-text);border-radius:var(--radius-md);padding:7px 12px;font-weight:var(--weight-semibold);cursor:pointer;}
.admin-token-row b::after{content:'active';border-radius:999px;padding:3px 7px;background:var(--success-surface);color:var(--success-text);font-size:10px;text-transform:uppercase;font-weight:var(--weight-semibold);}
.admin-token-row.token-expired b::after{content:'expired';background:var(--warning-surface);color:var(--warning-text);}
.admin-token-row.token-used b::after{content:'used';background:var(--info-surface);color:var(--info-text);}
.admin-token-row.token-revoked b::after{content:'revoked';background:var(--danger-surface);color:var(--danger-text);}
.adminAccessReviewGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:10px;}
.adminAccessReviewGrid article{display:grid;gap:8px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:12px;min-width:0;}
.adminAccessReviewGrid article span{color:var(--text-tertiary);font-size:12px;overflow-wrap:anywhere;}
.adminAccessReviewGrid article div{display:flex;flex-wrap:wrap;gap:7px;}
.adminAccessReviewGrid .button{border:1px solid var(--border-strong);background:var(--surface);color:var(--accent);border-radius:var(--radius-md);padding:7px 12px;font-size:12px;font-weight:var(--weight-semibold);text-decoration:none;}
.adminAccessReviewGrid .button:hover{border-color:var(--accent);background:var(--blue-50);}
#adminOrgCreate.admin-user{grid-template-columns:minmax(180px,1fr) minmax(150px,.7fr) minmax(170px,1fr) minmax(170px,1fr) auto;}
#adminProgramCreate.admin-user{grid-template-columns:minmax(160px,.9fr) minmax(170px,1fr) minmax(120px,.6fr) minmax(140px,.8fr) minmax(110px,.55fr) auto;}

/* Exam analytics, requirements, and implementation packet */
.examDash,.examGrid,.examCharts,.examStudentDetailGrid{min-width:0;}
.examKpis{grid-template-columns:repeat(6,minmax(0,1fr));}
.examFilterBar{top:8px;}
.examStudentHead,.examDetailDivider,.examScopeBar{min-width:0;}
.examStudentHead{flex-wrap:wrap;}
.examStudentHead strong{line-height:1;}
.examHeatmap,.examStudentMatrix{overflow-x:auto; padding-bottom:2px; -webkit-overflow-scrolling:touch;}
.examHeatSection,.examStudentMatrix>div{min-width:640px;}
.traceHead,.packetHero{min-width:0;}
.traceActions,.examExportActions,.instructorHeroActions{min-width:0;}
.traceActions a,.traceActions button,.examExportActions button,.instructorHeroActions .button{display:inline-flex; align-items:center; justify-content:center; min-height:38px;}
.packetGrid article,.packetPlan article{min-width:0; overflow-wrap:anywhere;}

/* PowerSkills / instructor panels */
.instructorHeroActions .button{border:none; border-radius:9px; background:var(--navy); color:var(--text-inverse); padding:8px 10px; cursor:pointer; font-size:12px; text-decoration:none;}
.instructorHeroActions .button:hover{background:var(--navy-l);}
.reviewSelect{display:flex!important; flex-direction:row!important; align-items:flex-start; gap:7px; margin:0!important; color:var(--ink)!important;}
.reviewSelect input{width:auto; margin-top:2px; flex:none;}

@media (max-width:1180px){
  .admin-org-row,#adminOrgCreate.admin-user,#adminProgramCreate.admin-user{grid-template-columns:repeat(3,minmax(0,1fr));}
  .admin-roster-import,.admin-access-readiness .admin-user{grid-template-columns:1fr 1fr;}
  .examKpis{grid-template-columns:repeat(3,minmax(0,1fr));}
  .examFilterBar{grid-template-columns:repeat(3,minmax(0,1fr));}
  .examStudentQuickStats{grid-template-columns:repeat(3,minmax(0,1fr));}
}
@media (max-width:900px){
  .mriModuleHeadActions{justify-content:flex-start; flex:1 1 auto;}
  .mriModuleHeadActions button,.traceActions a,.traceActions button,.examExportActions button{flex:1 1 150px;}
  .mriMapToolbar{width:100%; display:grid; grid-template-columns:1fr 1fr;}
  .mriLocSearch,.mriMapFilters{grid-column:1 / -1; width:100%;}
  .mriFilterGroup{width:100%;}
  .mriFilterGroup button{flex:1 0 auto;}
  .mriPortalStats{grid-template-columns:repeat(2,minmax(0,1fr));}
  .admin-org-row,#adminOrgCreate.admin-user,#adminProgramCreate.admin-user,.admin-roster-import,.admin-access-readiness .admin-user{grid-template-columns:1fr 1fr;}
  .examFilterBar{grid-template-columns:repeat(2,minmax(0,1fr));}
  .examKpis{grid-template-columns:repeat(2,minmax(0,1fr));}
  .examCharts,.examStudentDetailGrid{grid-template-columns:1fr;}
  .examCharts .chartWide{grid-column:auto;}
  .examMiniBars,.examAttemptTimeline{overflow-x:auto; -webkit-overflow-scrolling:touch;}
  .packetSummary{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:700px){
  .mriModuleBody{padding:10px; border-radius:12px;}
  .mriModuleHeadActions{display:grid; grid-template-columns:1fr;}
  .mriMapToolbar{grid-template-columns:1fr;}
  .mriComboPop{position:fixed; left:12px; right:12px; top:auto; bottom:calc(12px + env(safe-area-inset-bottom)); width:auto; max-width:none; max-height:56dvh;}
  .mriMapInfoDrawer{width:100%; border-left:none; border-radius:16px 16px 0 0; top:auto; height:min(64dvh,520px); transform:translateY(100%);}
  .mriMapInfoDrawer.open{transform:translateY(0);}
  .mriMapAddTabs{top:auto; right:10px; bottom:56px; transform:none; flex-direction:row;}
  .mriMapAddTab{border-radius:999px; border-right:1px solid var(--navy); padding:9px 11px;}
  .mriMapAddTab span{display:none;}
  .mriPortalStats,.mriPortalGrid,.admin-org-row,#adminOrgCreate.admin-user,#adminProgramCreate.admin-user,.admin-roster-import,.admin-access-readiness .admin-user{grid-template-columns:1fr;}
  .admin-user select,.admin-user input,.admin-user textarea,.admin-create input,.admin-create select{min-height:40px;}
  .examTopBar{display:block;}
  .examExportActions{margin-top:10px; display:grid; grid-template-columns:1fr;}
  .examFilterBar{grid-template-columns:1fr; padding:10px;}
  .examKpis,.examStudentQuickStats,.packetSummary{grid-template-columns:1fr 1fr;}
  .examKpis b,.examStudentQuickStats>div:not(:first-child) b,.packetSummary b{font-size:20px;}
  .examHeatSection,.examStudentMatrix>div{min-width:0; grid-template-columns:1fr;}
  .examDonutRow{display:flex; overflow-x:auto; -webkit-overflow-scrolling:touch;}
  .examDonut{flex:0 0 112px;}
  .traceTable{min-width:760px;}
  .traceActions{width:100%; display:grid; grid-template-columns:1fr;}
  .traceActions a,.traceActions button{width:100%;}
  .packetHero{padding:18px; border-radius:18px;}
  .packetHero h2{font-size:1.35rem;}
  .packetHero button{width:100%; justify-content:center;}
  .packetGrid{grid-template-columns:1fr;}
  .instructorHeroActions{display:grid; grid-template-columns:1fr;}
  .instructorHeroActions .button,.instructorHeroActions button{width:100%; justify-content:center;}
  .instructorKpis.compact,.readinessBars,.actionList{grid-template-columns:1fr;}
}
@media (max-width:430px){
  .mriPortalStats,.examKpis,.examStudentQuickStats,.packetSummary,.traceKpis,.instructorKpis{grid-template-columns:1fr;}
  .examDetailDivider h3,.examTopBar h2{font-size:18px;}
  .releaseTimeline button{grid-template-columns:1fr;}
}

/* Prototype parity pass for Edcetera Exam Prep Analytics (dev.proto.edcetapps.com) */
.examProtoShell{background:#f9fafb;color:#111827;font-family:'Noto Sans',system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;gap:0;border-radius:16px;overflow:hidden;border:1px solid #e5e7eb;box-shadow:0 1px 3px rgba(0,0,0,.08)}
.examProtoNav{min-height:44px;background:#2F4A63;color:white;display:flex;align-items:center;gap:8px;padding:6px 12px;font-size:13px}
.examProtoBack{border:0;background:transparent;color:white;border-radius:6px;width:28px;height:28px;font-size:24px;line-height:1;cursor:pointer}.examProtoBack:hover{background:rgba(255,255,255,.1)}
.examProtoVp,.examProtoLogo{display:grid;place-items:center;background:rgba(255,255,255,.2);color:var(--text-inverse);font-weight:700}.examProtoVp{width:28px;height:28px;border-radius:7px;font-size:12px}.examProtoLogo{width:32px;height:32px;border-radius:8px;background:#2F4A63;font-size:13px}
.examProtoTab{border:0;background:transparent;color:rgba(255,255,255,.75);border-radius:6px;padding:5px 12px;font-size:13px;cursor:pointer}.examProtoTab:hover,.examProtoTab.active{background:rgba(255,255,255,.12);color:white}.examProtoNavHint{margin-left:auto;color:rgba(255,255,255,.65);font-size:12px;font-style:italic}
.examProtoSyncChip{margin-left:auto;color:rgba(255,255,255,.72);font-size:12px;background:rgba(255,255,255,.10);padding:3px 9px;border-radius:999px;white-space:nowrap}
.examProtoNavHint+.examProtoSyncChip{margin-left:10px}
.examProtoSyncBtn{border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.06);color:#fff;border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;white-space:nowrap}
.examProtoSyncBtn:hover{background:rgba(255,255,255,.16)}.examProtoSyncBtn:disabled{opacity:.6;cursor:default}
.examProtoStudentContact{font-size:12px;color:var(--muted,#64748b);margin-top:2px}
.examProtoHeader{background:white;border-bottom:1px solid #e5e7eb;padding:14px 24px;display:flex;align-items:center;justify-content:space-between;gap:16px}.examProtoHeader>span{color:#9ca3af;font-size:12px}.examProtoTitleBlock{display:flex;align-items:center;gap:12px}.examProtoTitle{display:flex;align-items:center;gap:8px}.examProtoTitle h1{margin:0;color:#111827;font-size:16px;line-height:1.25;font-weight:700}.examProtoTitle span{background:#2F4A63;color:var(--text-inverse);border-radius:5px;padding:1px 6px;font-size:12px;font-weight:700}.examProtoTitleBlock p{margin:1px 0 0;color:#6b7280;font-size:12px}.examProtoMain{max-width:1280px;margin:0 auto;padding:24px;display:grid;gap:20px}
.examProtoFilters{position:static;display:flex;align-items:center;gap:10px;flex-wrap:wrap;border-radius:12px;background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow-xs);padding:12px 20px}.examProtoFiltersLabel{font-size:12px;font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:var(--tracking-eyebrow);color:var(--text-tertiary);margin-right:4px}.examProtoFilters select{width:auto;min-width:110px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-primary);font-size:12px;padding:6px 8px;text-transform:none;letter-spacing:0;font-weight:400}.examProtoFilters select:focus-visible{border-color:var(--accent);box-shadow:var(--shadow-focus)}.examProtoPills{display:flex;align-items:center;gap:4px;border-left:1px solid var(--border);padding-left:10px}.examProtoPills button{border:1px solid var(--border-strong);background:var(--surface);color:var(--text-secondary);border-radius:var(--radius-pill);padding:5px 11px;font-size:12px;font-weight:var(--weight-medium);cursor:pointer;transition:background var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard)}.examProtoPills button.active{background:var(--primary);border-color:var(--primary);color:var(--on-primary)}.examProtoExport{border:1px solid var(--border-strong);background:var(--surface);color:var(--text-secondary);border-radius:var(--radius-md);padding:6px 10px;font-size:12px;font-weight:var(--weight-semibold);cursor:pointer}.examProtoExport:hover{background:var(--surface-sunken);color:var(--text-primary)}.examProtoFilterSummary{display:flex;flex-wrap:wrap;gap:8px;margin-top:-8px}.examProtoFilterSummary span{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-pill);color:var(--text-tertiary);font-size:12px;padding:5px 10px}
.examProtoKpis{grid-template-columns:repeat(5,minmax(0,1fr));gap:16px}.examProtoKpis>div{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:14px 16px;box-shadow:var(--shadow-xs);display:flex;flex-direction:column;gap:2px}.examProtoKpis>div>b{font-size:24px;color:var(--text-primary)}.examProtoKpis>div>span{font-size:12px;color:var(--text-secondary);font-weight:var(--weight-semibold)}.examProtoKpis>div>small{font-size:12px;color:var(--text-tertiary)}/* KPI tile marks (docs/dashboard-ui.md §3): thin marks, 2px surface gaps, tokens only. */.examKpiViz{margin-top:auto;padding-top:10px;display:flex;flex-direction:column;gap:6px}.examKpiVizRow{flex-direction:row;align-items:center;gap:10px}.examKpiSeg{display:flex;gap:2px;height:10px;border-radius:var(--radius-pill);overflow:hidden;background:var(--surface-sunken)}.examKpiSeg i{display:block;height:100%;min-width:2px}.examKpiBars{display:flex;align-items:flex-end;gap:2px;height:36px}.examKpiBars i{flex:1;background:var(--viz-1);border-radius:3px 3px 0 0;min-height:3px}.examKpiMeter{height:10px;border-radius:var(--radius-pill);background:var(--surface-sunken);overflow:hidden}.examKpiMeter i{display:block;height:100%;border-radius:var(--radius-pill)}.examKpiDonut{flex:none;--pct:0;width:52px;height:52px;border-radius:50%;background:conic-gradient(var(--donut) calc(var(--pct)*1%), var(--surface-sunken) 0);position:relative}.examKpiDonut::after{content:"";position:absolute;inset:7px;background:var(--surface);border-radius:50%}.examKpiLegend{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:10.5px;color:var(--text-tertiary);line-height:1.3}.examKpiLegend span{font-size:10.5px;color:var(--text-tertiary);font-weight:var(--weight-regular)}.examKpiLegend i{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:4px;vertical-align:-1px}
.examProtoSectionTitle{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:-4px}.examProtoSectionTitle h2{margin:0;color:#6b7280;font-size:14px;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.examProtoSectionTitle span{color:#9ca3af;font-size:12px}.examProtoCategoryGrid{display:grid;grid-template-columns:minmax(0,2fr) minmax(320px,1fr);gap:16px;align-items:start}.examProtoCategoryGrid.lower{grid-template-columns:1fr}.examProtoCategoryGrid.lower>.examCharts{display:grid;grid-template-columns:1.1fr 1.2fr .9fr;gap:16px}.examProtoCard{background:var(--surface);border:1px solid #e5e7eb;border-radius:12px;box-shadow:0 1px 2px rgba(0,0,0,.05);padding:20px}.examProtoCard h3{margin:0;color:#111827;font-size:14px;font-weight:700}.examProtoCard p,.examProtoMuted{margin:2px 0 0;color:#9ca3af;font-size:12px}.examProtoCardHead{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}.examProtoLegend{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:11px;color:#6b7280}.examProtoLegend span{display:inline-flex;align-items:center;gap:4px}.examProtoLegend span:before{content:"";width:10px;height:10px;border-radius:3px;background:#10b981}.examProtoLegend span.good:before{background:#3b82f6}.examProtoLegend span.warn:before{background:#f59e0b}.examProtoLegend span.risk:before{background:#ef4444}.examProtoLegend em{font-style:normal;color:#a78bfa}.examProtoBarChart{display:grid;grid-template-columns:minmax(0,1fr);gap:9px}.examProtoBarChart button{display:grid;grid-template-columns:170px minmax(0,1fr) 46px 96px;align-items:center;gap:10px;border:0;background:transparent;text-align:left;cursor:pointer;min-width:0}.examProtoBarChart b{font-size:12px;color:#374151;font-weight:500}.examProtoBarChart span{position:relative;height:18px;background:#f3f4f6;border-radius:0 5px 5px 0;overflow:hidden}.examProtoBarChart i{position:absolute;left:0;top:0;bottom:0;border-radius:0 5px 5px 0;background:#10b981}.examProtoBarChart .good i{background:#3b82f6}.examProtoBarChart .warn i{background:#f59e0b}.examProtoBarChart .risk i{background:#ef4444}.examProtoBarChart strong{justify-self:start;color:#6b7280;font-size:11px;white-space:nowrap}.examProtoBarChart em{height:3px;background:#a78bfa;border-radius:999px;font-style:normal;color:#9ca3af;font-size:10px;padding-top:5px;min-width:24px;overflow:visible;white-space:nowrap}.examProtoSubList{display:grid;gap:8px;margin-top:14px}.examProtoSubList div{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px;align-items:center;border-bottom:1px solid #f3f4f6;padding-bottom:8px}.examProtoSubList span{color:#374151;font-size:12px}.examProtoSubList b{font-size:13px}.examProtoSubList small{color:#9ca3af;font-size:11px}.examProtoSubList .excellent b,.examProtoTableWrap .excellent{color:#10b981}.examProtoSubList .good b,.examProtoTableWrap .good{color:#3b82f6}.examProtoSubList .warn b,.examProtoTableWrap .warn{color:#f59e0b}.examProtoSubList .risk b,.examProtoTableWrap .risk{color:#ef4444}
.examProtoStudentTable{padding:0;overflow:hidden}.examProtoStudentTable .examProtoCardHead{padding:18px 20px;margin:0;border-bottom:1px solid #f3f4f6}.examProtoTableWrap{overflow:auto}.examProtoTableWrap table{width:100%;border-collapse:collapse}.examProtoTableWrap th{padding:12px 20px;text-align:left;color:#9ca3af;font-size:11px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;background:var(--surface)}.examProtoTableWrap td{padding:12px 20px;border-top:1px solid #f9fafb;color:#374151;font-size:13px;vertical-align:middle}.examProtoTableWrap tr{cursor:pointer}.examProtoTableWrap tr:hover,.examProtoTableWrap tr.active{background:#eef2ff}.examProtoTableWrap td:first-child{display:grid;grid-template-columns:34px minmax(0,1fr);column-gap:10px}.examProtoTableWrap td b{color:#111827}.examProtoTableWrap small{display:block;color:#9ca3af;font-size:11px;margin-top:2px}.examProtoAvatar{width:32px;height:32px;border-radius:999px;background:#eef2ff;color:#4338ca;display:grid;place-items:center;font-size:12px;font-weight:700;grid-row:span 2}.examProtoAvatar.large{width:44px;height:44px}.examProtoStatus{display:inline-flex;border-radius:999px;padding:4px 8px;font-style:normal;font-size:11px;font-weight:700}.examProtoStatus.excellent{background:#ecfdf5;color:#047857}.examProtoStatus.good{background:#eff6ff;color:var(--accent)}.examProtoStatus.warn{background:#fffbeb;color:#b45309}.examProtoStatus.risk{background:#fef2f2;color:#b91c1c}.examProtoStatus.neutral{background:var(--neutral-100,#f1f5f9);color:var(--text-secondary,#64748b)}
.examMeasureBadge{font-style:normal;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding:1px 5px;border-radius:999px;vertical-align:middle}
.examMeasureBadge.measured{background:#ecfdf5;color:#047857}.examMeasureBadge.projected{background:var(--neutral-100,#f1f5f9);color:var(--text-tertiary,#94a3b8)}
.examStudentNotStarted{margin-top:14px}.examStudentNotStarted p{color:var(--text-secondary,#64748b);font-size:13px;line-height:1.5;margin-top:6px}
.examPartsCard{display:flex;flex-direction:column;gap:12px}
.examPartsGrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.examPartPane{display:flex;flex-direction:column;gap:12px;border:1px solid var(--border,#e5e7eb);border-radius:12px;padding:14px;background:var(--surface,#fff)}
.examPartTop{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
.examPartBig{display:flex;align-items:baseline;gap:6px}
.examPartBig b{font-size:26px;font-weight:800;line-height:1;color:var(--text-primary,#111827)}
.examPartBig span{font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary,#94a3b8)}
.examPartDate{display:flex;flex-direction:column;text-align:right;font-size:12px;font-weight:600;color:var(--text-secondary,#475569)}
.examPartDate em{font-style:normal;font-size:10px;text-transform:uppercase;letter-spacing:.03em;color:var(--text-tertiary,#94a3b8)}
.examPartDate.soon{color:var(--warning-text,#b45309)}.examPartDate.past{color:var(--text-tertiary,#94a3b8)}
.examCoverBars{display:flex;flex-direction:column;gap:12px}
/* When the card is stretched to match its grid-row partner, spread the two
   coverage bars over the extra height instead of pooling it at the bottom. */
.examCoverBarsWide{max-width:560px;flex:1;justify-content:space-evenly}
.examCoverRow{display:flex;flex-direction:column;gap:5px}
.examCoverTop{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.examCoverTop span{font-size:12px;font-weight:600;color:var(--text-secondary,#475569)}
.examCoverTop b{font-size:13px;font-weight:700;color:var(--text-primary,#111827)}
.examCoverBar{position:relative;height:9px;border-radius:999px;background:var(--neutral-100,#eef2f7);overflow:hidden}
.examCoverBar i{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:var(--viz-1,#2563eb)}
.examCoverRow small{font-size:11px;color:var(--text-tertiary,#94a3b8)}
@media(max-width:700px){.examPartsGrid{grid-template-columns:1fr}}
.examPartRow{border:1px solid var(--border,#e5e7eb);border-radius:10px;padding:12px 14px}
.examPartHead{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.examPartHead b{font-size:13px;color:var(--text-primary,#111827)}
.examPartStats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}
.examPartStats span{display:flex;flex-direction:column;gap:1px}
.examPartStats em{font-style:normal;font-size:10px;text-transform:uppercase;letter-spacing:.03em;color:var(--text-tertiary,#94a3b8)}
.examPartStats b{font-size:17px;color:var(--text-primary,#111827)}
.examPartStats small{font-size:10px;color:var(--text-tertiary,#94a3b8)}
.examProtoStudentHero{display:flex;justify-content:space-between;align-items:center;gap:14px;background:var(--surface);border:1px solid #e5e7eb;border-radius:12px;padding:16px 20px;box-shadow:0 1px 2px rgba(0,0,0,.05)}.examProtoStudentHero>div{display:flex;align-items:center;gap:12px}.examProtoStudentHero h2{margin:0;color:#111827;font-size:18px}.examProtoStudentHero p{margin:2px 0 0;color:#6b7280;font-size:13px}.examProtoStudentHero button{border:1px solid #e5e7eb;background:var(--surface);border-radius:8px;color:#6b7280;padding:7px 11px;font-size:12px;cursor:pointer}.examProtoStudentPicker{background:var(--surface);border:1px solid #e5e7eb;border-radius:12px;padding:14px 16px;margin:0}
.examStudentTopBar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-xs);padding:12px 16px}
.examStudentPick{display:flex;align-items:center;gap:10px;margin:0}
.examStudentPick>span{font-size:12px;font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:var(--tracking-eyebrow);color:var(--text-tertiary)}
.examStudentPick select{min-width:260px;max-width:100%;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-primary);font-size:13px;padding:8px 10px}
.examStudentPick select:focus-visible{border-color:var(--accent);box-shadow:var(--shadow-focus)}
.examStudentPickCount{font-size:12px;color:var(--text-tertiary)}
.examCohortCard{padding:16px}
.examProgressHead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.examProgressPills{border-left:0;padding-left:0}
.examProgressSpanLabel{font-size:13px;font-weight:600;color:var(--text-secondary)}
.examProgressLegend{font-size:12px;color:var(--text-tertiary);margin-left:auto}
.examCohortRows{display:flex;flex-direction:column;gap:12px;margin-top:4px}
.examCohortRow{display:grid;grid-template-columns:150px minmax(0,1fr) 118px;align-items:center;gap:14px}
.examCohortRow.small{opacity:.72}
.examCohortLabel b{display:block;font-size:13px;color:var(--text-primary,#111827)}
.examCohortLabel small{font-size:11px;color:var(--text-tertiary,#94a3b8)}
.examCohortBar{display:flex;align-items:center;gap:10px}
.examCohortTrack{position:relative;flex:1;height:16px;background:var(--surface-sunken,rgba(0,0,0,.05));border-radius:8px}
.examCohortTrack>i{display:block;height:100%;border-radius:8px;transition:width var(--duration-medium,.3s) var(--ease-standard,ease)}
.examCohortTarget{position:absolute;top:-3px;bottom:-3px;left:70%;width:2px;background:var(--text-secondary,#64748b);opacity:.5;border-radius:2px}
.examCohortVal{font-size:13px;font-weight:var(--weight-semibold);color:var(--text-primary,#111827);min-width:36px;text-align:right}
.examCohortNs{font-size:12px;color:var(--text-tertiary,#94a3b8);font-style:italic}
.examCohortPass{text-align:right}
.examCohortProj{font-size:11px;color:var(--text-tertiary,#94a3b8)}
@media(max-width:640px){.examCohortRow{grid-template-columns:1fr auto;gap:4px 10px}.examCohortLabel{grid-column:1}.examCohortPass{grid-column:2;grid-row:1}.examCohortBar{grid-column:1 / -1}}
@media(max-width:640px){.examStudentTopBar{align-items:stretch}.examStudentPick{width:100%}.examStudentPick select{flex:1;min-width:0}}.examProtoStudentDetailPanel .examStudentProfileHero{border-radius:12px}.examProtoLegacyGrid{grid-template-columns:1fr;display:grid}.examProtoShell .examCharts{margin:0}.examProtoShell .examCharts .examCard,.examProtoShell .examCard{border-color:#e5e7eb;border-radius:12px;box-shadow:0 1px 2px rgba(0,0,0,.05)}.examProtoShell .examDonut{width:118px;height:118px}.examProtoShell .examMiniBars button{border-radius:8px}.examProtoShell .examBubblePlot{min-height:210px}
@media(max-width:1150px){.examProtoKpis{grid-template-columns:repeat(2,minmax(0,1fr))}.examProtoCategoryGrid,.examProtoCategoryGrid.lower>.examCharts{grid-template-columns:1fr}.examProtoBarChart button{grid-template-columns:140px minmax(0,1fr) 80px}}
@media(max-width:720px){.examProtoHeader{align-items:flex-start;flex-direction:column;padding:14px}.examProtoMain{padding:14px}.examProtoFilters{padding:12px}.examProtoPills{border-left:0;padding-left:0}.examProtoKpis{grid-template-columns:1fr}.examProtoBarChart button{grid-template-columns:1fr}.examProtoBarChart em{display:none}.examProtoTableWrap th,.examProtoTableWrap td{padding:10px}.examProtoNavHint{display:none}.examProtoSyncChip{display:none}.examProtoSyncBtn{margin-left:auto}}

/* Mobile prototype refinement from Patrick's iPhone screenshots */
.examProtoDomo{font-size:14px;font-weight:700;margin-right:4px;color:var(--text-inverse);letter-spacing:-.01em}.examModeledBadge{display:inline-flex;align-items:center;gap:4px;background:var(--info-surface);color:var(--info-text);border:1px solid var(--info-text);border-radius:999px;padding:2px 8px;font-size:10px;font-weight:700;font-style:normal;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;cursor:help;vertical-align:middle}.examModeledBadge.measured{background:var(--success-surface);color:var(--success-text);border-color:var(--success-text)}.examMockGrid{grid-template-columns:repeat(3,minmax(0,1fr))}.examMockGrid .examDonut{width:100px;height:100px;min-width:0}.examMockStats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:14px}.examMockStats>div{border:1px solid var(--border);background:var(--surface);border-radius:10px;padding:11px 12px}.examMockStats b{display:block;font-size:20px;color:var(--text-primary)}.examMockStats span{display:block;font-size:11px;color:var(--text-secondary);margin-top:2px}.examMockPicker{display:grid;gap:4px;font-size:11px;color:var(--text-secondary);min-width:190px}.examMockPicker select{font:inherit;padding:7px 9px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:inherit}.examMockBands{display:flex;gap:8px;height:118px;margin-top:14px}.examMockBands>div{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:4px;font-size:11px;color:var(--text-secondary)}.examMockBands b{font-size:13px;color:var(--text-primary)}.examMockBands i{width:60%;min-height:4px;border-radius:5px 5px 0 0;background:var(--accent)}.examMockBands .risk i{background:var(--danger-solid)}.examMockBands .warn i{background:var(--warning-solid)}.examMockBands .good i{background:var(--success-solid)}.examMockAttempts{display:grid;gap:8px;margin:14px 0 10px}.examMockAttempt{display:grid;grid-template-columns:auto 1fr auto auto;gap:10px;align-items:center;padding:8px 12px;border:1px solid var(--border);border-radius:10px}.examMockAttempt .examMockAttemptN{font-weight:700;font-size:12px}.examMockAttempt .examMockAttemptDate{color:var(--text-secondary);font-size:12px}.examMockAttempt b{font-size:13px}.examMockOpen{background:none;border:0;padding:0;color:var(--accent);font:inherit;cursor:pointer;text-decoration:underline}.examMockEmpty{color:var(--text-secondary);padding:8px 0}
/* "Score by mock exam" chart (third mock card): 0–100 column chart with the
   pass mark drawn across the plot, plus its searchable student combobox. */
@media(max-width:1400px){.examMockGrid{grid-template-columns:1fr 1fr}.examMockGrid>article:nth-child(3){grid-column:1/-1}}
@media(max-width:1150px){.examMockGrid{grid-template-columns:1fr}}
.examMockGrid .examProtoCardHead{flex-wrap:wrap}
.examMockGrid .examMockPicker{min-width:0;max-width:100%}
.examMockGrid .examMockPicker select{max-width:100%;min-width:0}
.examMockCombo{display:grid;gap:4px;justify-items:end;font-size:11px;color:var(--text-secondary);max-width:100%}
.examMockCombo .mriComboBtn{max-width:220px}.examMockCombo .mriComboBtn span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.examMockCombo .mriComboItem.active{background:#eef2ff}
.examMockTrend{margin-top:14px}
.examMockTrendPlot{position:relative;display:flex;align-items:flex-end;gap:14px;height:150px;padding:16px 6px 0;border-bottom:1px solid var(--border)}
.examMockTrendCol{position:relative;flex:1;display:flex;align-items:flex-end;justify-content:center;height:100%;min-width:0}
.examMockTrendCol i{width:min(60%,54px);height:calc(var(--v)*1%);min-height:3px;border-radius:5px 5px 0 0;background:var(--accent);transform-origin:bottom;animation:examBarGrowY var(--duration-slow) var(--ease-standard) both}
.examMockTrendCol b{position:absolute;left:0;right:0;bottom:calc(var(--v)*1% + 5px);text-align:center;font-size:13px;color:var(--text-primary)}
.examMockTrendCol.risk i{background:var(--danger-solid)}.examMockTrendCol.warn i{background:var(--warning-solid)}.examMockTrendCol.good i{background:var(--success-solid)}
.examMockTrendCol:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:8px}
.examMockTrendPass{position:absolute;left:0;right:0;border-top:2px dashed var(--navy-400);text-decoration:none;pointer-events:none}
.examMockTrendPass em{position:absolute;right:0;bottom:1px;font-style:normal;font-size:9.5px;font-weight:700;color:var(--text-tertiary);background:var(--surface);padding:0 3px;line-height:1.4}
.examMockTrendLabels{display:flex;gap:14px;padding:6px 6px 0}
.examMockTrendLabels span{flex:1;text-align:center;font-size:11px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Condensed "Curriculum Attention Needed" */
.examAttentionHead{display:flex;align-items:center;gap:10px}.examAttentionHead h3{margin:0}
.examAttentionCount{margin-left:auto;background:var(--warning-surface);color:var(--warning-text);border-radius:999px;padding:2px 10px;font-size:11px;font-weight:800;white-space:nowrap}
.examAttentionList{display:grid;gap:6px;margin-top:2px}
.examAttentionRow{display:grid;grid-template-columns:minmax(110px,1.1fr) minmax(0,2fr) 58px;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--warning-surface);border-radius:9px;padding:8px 12px;cursor:pointer;text-align:left;transition:transform var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard)}
.examAttentionRow:hover{transform:translateX(2px);box-shadow:var(--shadow-sm)}
.examAttentionName{font-size:13px;font-weight:700;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.examAttentionBar{position:relative;height:8px;background:var(--surface-sunken);border-radius:999px}
.examAttentionBar i{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:var(--warning-solid);transform-origin:left;animation:examBarGrow var(--duration-slow) var(--ease-standard) both}
.examAttentionBar.risk i{background:var(--danger-solid)}.examAttentionBar.warn i{background:var(--warning-solid)}.examAttentionBar.good i{background:var(--success-solid)}
.examAttentionRow strong{display:grid;justify-items:end;line-height:1.15;font-size:14px;color:var(--warning-text)}.examAttentionRow strong small{font-size:9.5px;color:var(--text-tertiary);font-weight:var(--weight-semibold)}/* Bullet-style target marker: the 75% pass threshold made visible. */.examTargetTick{position:absolute;top:-3px;bottom:-3px;left:75%;width:2px;border-radius:1px;background:var(--navy-400);text-decoration:none;pointer-events:none}
.examAttentionFoot{color:var(--warning-text);font-size:12px}.examAttentionFoot b{font-weight:800}
/* Student breakdown modal */
.examStudentModal{width:min(1120px,100%)}.examStudentModal header{align-items:center}.examStudentModal header h3{margin:0;font-size:20px;letter-spacing:-.2px}.examStudentModal header span{font-size:12px;margin-top:2px}.examStudentModal header>div:first-child{min-width:0}
.examStudentModalActions{display:flex;align-items:center;gap:8px;flex:0 0 auto}
/* The generic .clinicalModal header button rule sizes buttons for the round ×
   close; the exam modals' text actions need compact ghost-button sizing. */
.examStudentModal header .examMockOpen{width:max-content;height:auto;flex:0 0 auto;white-space:nowrap;border:1px solid var(--border-strong);border-radius:8px;background:var(--surface);color:var(--accent);padding:6px 11px;font-size:12px;font-weight:600;line-height:1.2;text-decoration:none}
.examStudentModal header .examMockOpen:hover{background:var(--surface-sunken)}
.examStudentModal header .examExportGhost{color:var(--text-secondary);border-color:var(--border)}
.examStudentModal header .examExportGhost:hover{color:var(--text-primary)}
@media(max-width:600px){.examStudentModal .examMockOpen{display:none}}
.examModalClose{width:34px;height:34px;border-radius:999px;border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);font-size:20px;line-height:1;cursor:pointer;flex:0 0 auto}
.examStudentModal header .examModalClose{width:30px;height:30px;font-size:16px;padding:0;background:var(--surface);color:var(--text-secondary)}
.examModalClose:hover,.examStudentModal header .examModalClose:hover{background:var(--surface-sunken)}
/* Export controls: filter-bar menu + per-modal ghost buttons */
.examExportMenu{width:auto;min-width:120px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text-secondary);font-size:12px;font-weight:600;padding:6px 10px;cursor:pointer;margin-left:auto}
.examExportMenu:hover{background:var(--surface-sunken);color:var(--text-primary)}
.examExportGhost{text-decoration:none;border:1px solid var(--border);border-radius:8px;padding:5px 10px;font-size:12px;font-weight:600;color:var(--text-secondary);white-space:nowrap}
.examExportGhost:hover{background:var(--surface-sunken);color:var(--text-primary)}
@media(max-width:600px){.examStudentModal .examExportGhost{display:inline-flex}}
.examStudentModal .examStudentDetailPanel{box-shadow:none;border:0;padding:0;margin:0}
/* Modal layout: the header already names the student, so the in-panel hero
   slims down; Board parts / coverage pairs with the study plan on the top row,
   and the subcategory mastery map (min 640px rows) gets the full modal width. */
.examStudentModal .examStudentProfileHero{padding:12px 16px;border-radius:14px}
.examStudentModal .examStudentProfileHero h3{font-size:18px}
.examStudentModal .examStudentHeroScore{padding:7px 14px}
.examStudentModal .examStudentHeroScore b{font-size:24px}
.examStudentModal .examStudentDetailGrid{grid-template-columns:1.4fr 1fr}
.examStudentModal .examStudentDetailGrid .examPartsCard{order:1}
.examStudentModal .examStudentDetailGrid .examPlanCard{order:2}
.examStudentModal .examStudentDetailGrid .examMasteryCard{order:3;grid-column:1 / -1}
.examStudentModal .examStudentDetailGrid .examStudentMockCard{order:4;grid-column:1 / -1}
@media(max-width:1180px){.examStudentModal .examStudentDetailGrid{grid-template-columns:1fr}}
/* Chart-field breakdown modal */
.examFieldModal{width:min(880px,100%)}
.examFieldBody{display:grid;gap:14px;margin-top:6px}
/* The field modal's stat row has four tiles (Average / Range / Below / At-above),
   not the mock panel's three — give it a matching 4-up grid. */
.examFieldBody .examMockStats{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:0}
@media(max-width:720px){.examFieldBody .examMockStats{grid-template-columns:1fr 1fr}}
.examFieldGrid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.examFieldCard{border:1px solid var(--border);border-radius:12px;padding:12px 14px;background:var(--surface)}
.examFieldCard h4{margin:0 0 10px;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}
.examFieldBars{display:grid;gap:9px}
.examFieldBar{display:grid;grid-template-columns:minmax(72px,auto) minmax(0,1fr) 42px;align-items:center;gap:10px;font-size:12px}
.examFieldBar>span{color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.examFieldBar i{height:8px;border-radius:999px;background:var(--accent);display:block}
.examFieldBar.risk i{background:var(--danger-solid)}.examFieldBar.warn i{background:var(--warning-solid)}.examFieldBar.good i{background:var(--success-solid)}
.examFieldBar b{text-align:right;font-weight:700}
.examFieldStudents{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.examFieldStudent{display:grid;grid-template-columns:32px minmax(0,1fr) auto;grid-template-areas:"av name val" "av sub val";align-items:center;gap:1px 10px;border:1px solid var(--border);border-radius:10px;padding:8px 10px;background:var(--surface);cursor:pointer;text-align:left}
.examFieldStudent:hover{background:var(--surface-sunken)}
.examFieldStudent .examProtoAvatar{grid-area:av}
.examFieldStudent b{grid-area:name;font-size:13px;color:var(--text-primary)}
.examFieldStudent small{grid-area:sub;color:var(--text-secondary);font-size:11px}
.examFieldStudent strong{grid-area:val;font-size:14px}
.examFieldStudent strong.risk{color:var(--danger-text)}.examFieldStudent strong.warn{color:var(--warning-text)}.examFieldStudent strong.good{color:var(--success-text)}
.examProtoSubList div[role=button],.examProtoSubjectCards div[role=button]{cursor:pointer}
@media(max-width:720px){.examFieldGrid,.examFieldStudents{grid-template-columns:1fr}}
/* Dynamic entrance + interactive hover */
@keyframes examBarGrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes examBarGrowY{from{transform:scaleY(0)}to{transform:scaleY(1)}}
.examProtoBarChart i{transform-origin:left;animation:examBarGrow var(--duration-slow) var(--ease-standard) both}
.examProtoBarChart button{transition:background var(--duration-fast) var(--ease-standard),border-radius var(--duration-fast) var(--ease-standard)}
.examProtoBarChart button:hover{background:var(--surface-sunken);border-radius:7px}
.examDonut{transition:transform var(--duration-base) var(--ease-standard),box-shadow var(--duration-base) var(--ease-standard)}
.examDonut:hover{transform:translateY(-3px) scale(1.03);box-shadow:var(--shadow-md)}
.examMiniBars button{transition:transform var(--duration-base) var(--ease-standard)}.examMiniBars button:hover{transform:translateY(-3px)}
.examBubblePlot button{transition:transform var(--duration-base) var(--ease-standard),box-shadow var(--duration-base) var(--ease-standard)}
.examBubblePlot button:hover{transform:scale(1.6);z-index:6;box-shadow:var(--shadow-md)}
.examProtoSubjectCards div{transition:transform var(--duration-base) var(--ease-standard),box-shadow var(--duration-base) var(--ease-standard)}
.examProtoSubjectCards div:hover{transform:translateY(-3px);box-shadow:var(--shadow-md)}
.examAttemptTimeline i,.examMockBands i{transform-origin:bottom;animation:examBarGrowY var(--duration-slow) var(--ease-standard) both}
@media (prefers-reduced-motion:reduce){.examProtoBarChart i,.examAttentionBar i,.examAttemptTimeline i,.examMockBands i,.examMockTrendCol i,.examDonut,.examBubblePlot button,.examMiniBars button,.examProtoSubjectCards div,.examAttentionRow,.examTooltip{animation:none;transition:none}}
/* Interactive chart tooltip + controls */
.examTooltip{position:fixed;left:0;top:0;z-index:var(--z-popover-overlay);pointer-events:none;max-width:260px;background:var(--surface);color:var(--text-primary);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow-md);padding:8px 10px;font-size:12px;line-height:1.35;display:grid;gap:1px;opacity:0;transform:translateY(3px);transition:opacity var(--duration-fast) var(--ease-standard),transform var(--duration-fast) var(--ease-standard)}
.examTooltip[data-show]{opacity:1;transform:none}
.examTooltip b{font-size:12.5px;color:var(--text-primary)}.examTooltip span{color:var(--text-secondary)}
.examTooltip.pinned{pointer-events:auto;max-width:min(300px,calc(100vw - 24px));padding:11px 12px}
.examTipActions{display:flex;gap:8px;margin-top:9px}
.examTipDo{flex:1;background:var(--accent);color:var(--text-inverse);border:0;border-radius:8px;padding:8px 10px;font-size:12px;font-weight:700;cursor:pointer}
.examTipClose{background:var(--surface);border:1px solid var(--border);color:var(--text-secondary);border-radius:8px;padding:8px 10px;font-size:12px;cursor:pointer}
.examProtoCatTools{display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.examProtoSortBtn{border:1px solid var(--border);background:var(--surface);color:var(--text-secondary);border-radius:999px;padding:3px 11px;font-size:11px;font-weight:700;cursor:pointer;white-space:nowrap;transition:background var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard)}
.examProtoSortBtn:hover{background:var(--surface-sunken);color:var(--text-primary)}
.examMiniBars.clickable button{cursor:pointer}
.examDonut{outline:none}
.examDonut:focus-visible,.examProtoSubList div:focus-visible,.examMockBands>div:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:8px}
.examProtoRanked{display:block;margin-top:10px;color:#9ca3af;font-size:10px;font-weight:800;letter-spacing:.08em}.examProtoAlertCard{background:color-mix(in srgb, var(--warning-surface) 40%, var(--surface));border:1px solid var(--warning-surface);border-radius:12px;padding:16px 18px;box-shadow:var(--shadow-xs);display:grid;gap:10px}.examProtoAlertCard.good{background:color-mix(in srgb, var(--success-surface) 40%, var(--surface));border-color:var(--success-surface)}.examProtoAlertCard h3{margin:0;color:var(--warning-text);font-size:14px;font-weight:800}.examProtoAlertCard.good h3{color:var(--success-text)}.examProtoAlertCard p{margin:0;color:var(--warning-text);font-size:13px;line-height:1.45}.examProtoAlertSubject{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;background:var(--surface);border:1px solid var(--warning-surface);border-radius:10px;padding:11px 12px}.examProtoAlertSubject b{color:var(--text-primary);font-size:13px}.examProtoAlertSubject strong{color:var(--warning-text);font-size:18px}.examProtoAlertSubject span{color:var(--warning-text);font-size:11px}.examProtoSubjectCards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.examProtoSubjectCards div{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:13px 14px;box-shadow:var(--shadow-xs)}.examProtoSubjectCards b{display:block;color:var(--text-secondary);font-size:12px;font-weight:var(--weight-bold)}.examProtoSubjectCards strong{display:block;color:var(--text-primary);font-size:20px;margin-top:6px}.examProtoSubjectCards span{display:block;color:var(--text-tertiary);font-size:11px;margin-top:1px}/* Accuracy meter vs the 75% target on every subject card. */.examSubjMeter{position:relative;display:block;height:6px;border-radius:999px;background:var(--surface-sunken);margin-top:9px;margin-bottom:3px}.examSubjMeter i{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:var(--success-solid)}.examSubjMeter.good i{background:var(--viz-1)}.examSubjMeter.warn i{background:var(--warning-solid)}.examSubjMeter.risk i{background:var(--danger-solid)}.examSubjMeter .examTargetTick{top:-2px;bottom:-2px}.examProtoShell .workspace-card{box-shadow:none}
@media(max-width:720px){
  .app-shell:has(.examProtoShell){grid-template-columns:1fr}.app-shell:has(.examProtoShell) .sidebar{display:none}.app-shell:has(.examProtoShell) .mainarea{padding:0;background:#f9fafb}.app-shell:has(.examProtoShell) .app-header{display:none}.app-shell:has(.examProtoShell) .dashboard-grid{padding:0;display:block}.app-shell:has(.examProtoShell) .workspace-card{border:0;border-radius:0;padding:0;background:#f9fafb;box-shadow:none}.app-shell:has(.examProtoShell) .mriModuleHead{display:none}.app-shell:has(.examProtoShell) .mriModuleBody{padding:0}
  .examProtoShell{border:0;border-radius:0;min-height:100vh;box-shadow:none}.examProtoNav{min-height:42px;padding:6px 10px;gap:5px;position:sticky;top:0;z-index:20}.examProtoBack{width:24px;height:24px;font-size:21px}.examProtoDomo{font-size:13px;margin-right:2px}.examProtoTab{font-size:11px;padding:5px 8px}.examProtoNavHint{display:block;margin-left:auto;font-size:10px;max-width:90px;text-align:right;line-height:1.15;color:rgba(255,255,255,.72)}
  .examProtoHeader{display:grid;grid-template-columns:1fr auto;align-items:center;padding:12px 14px;background:var(--surface)}.examProtoHeader>span{font-size:10px;max-width:74px;text-align:right;line-height:1.2}.examProtoLogo{width:30px;height:30px;border-radius:8px}.examProtoTitle h1{font-size:15px}.examProtoTitle span{font-size:10px;padding:1px 5px}.examProtoTitleBlock p{font-size:11px;color:#6b7280}.examProtoMain{padding:12px;gap:12px;max-width:none}
  .examProtoFilters{border-radius:0;margin-left:-12px;margin-right:-12px;padding:10px 12px;gap:7px;border-left:0;border-right:0;box-shadow:none;overflow-x:auto;flex-wrap:nowrap}.examProtoFiltersLabel{display:none}.examProtoFilters select{min-width:106px;padding:6px 7px;font-size:11px;flex:0 0 auto}.examProtoPills{gap:4px;flex:0 0 auto}.examProtoPills button{font-size:11px;padding:5px 9px;white-space:nowrap}.examProtoExport{font-size:11px;padding:6px 9px;flex:0 0 auto}.examProtoFilterSummary{gap:6px;margin-top:-4px}.examProtoFilterSummary span{font-size:11px;padding:4px 8px}
  .examProtoKpis{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.examProtoKpis>div{padding:12px;border-radius:12px;min-height:86px}.examProtoKpis>div:nth-child(3){grid-column:1 / -1}.examProtoKpis>div>b{font-size:22px;line-height:1.05}.examProtoKpis>div>span{font-size:11px;line-height:1.2}.examProtoKpis>div>small{font-size:10px;line-height:1.25}.examProtoAlertCard{padding:14px;border-radius:12px}.examProtoAlertCard h3{font-size:14px}.examProtoAlertCard p{font-size:12px}.examProtoAlertSubject{grid-template-columns:1fr auto;padding:10px}
  .examProtoSectionTitle{display:grid;gap:3px}.examProtoSectionTitle h2{font-size:12px}.examProtoSectionTitle span{font-size:11px}.examProtoCategoryGrid{gap:12px}.examProtoCard{padding:14px;border-radius:12px}.examProtoCardHead{display:grid;gap:8px;margin-bottom:12px}.examProtoCard h3{font-size:14px}.examProtoCard p,.examProtoMuted{font-size:11px}.examProtoLegend{font-size:10px;gap:7px}.examProtoBarChart{gap:12px}.examProtoBarChart button{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"label pct" "bar bar" "q q";gap:4px 8px;border-bottom:1px solid #f3f4f6;padding-bottom:8px}.examProtoBarChart b{font-size:12px;grid-area:label}.examProtoBarChart strong{grid-area:pct;justify-self:end;color:var(--text-secondary);text-shadow:none}.examProtoBarChart span{height:17px;grid-area:bar}.examProtoBarChart em{grid-area:q}.examMockGrid{grid-template-columns:1fr}.examMockPicker{min-width:0}.examProtoRanked{font-size:9px;line-height:1.35}.examProtoSubList div{grid-template-columns:1fr auto;gap:4px}.examProtoSubList small{grid-column:1 / -1}.examProtoSubjectCards{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.examProtoSubjectCards div{padding:12px}.examProtoSubjectCards strong{font-size:18px}
  .examProtoCategoryGrid.lower>.examCharts{gap:12px}.examProtoShell .examCharts{display:grid;grid-template-columns:1fr}.examProtoShell .examDonutRow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.examProtoShell .examDonut{width:100%;height:auto;aspect-ratio:1/1}.examProtoShell .examDonut div b{font-size:16px}.examProtoShell .examDonut div span{font-size:9px}.examProtoShell .examBubblePlot{min-height:190px}.examProtoShell .examMiniBars{min-height:170px}
  .examProtoStudentTable .examProtoCardHead{padding:14px}.examProtoTableWrap{overflow:visible}.examProtoTableWrap table,.examProtoTableWrap thead,.examProtoTableWrap tbody,.examProtoTableWrap tr,.examProtoTableWrap td{display:block;width:100%}.examProtoTableWrap thead{display:none}.examProtoTableWrap tr{border-top:1px solid #f3f4f6;padding:12px 14px;display:grid;grid-template-columns:1fr auto;gap:4px 10px}.examProtoTableWrap td{border:0;padding:0;font-size:12px}.examProtoTableWrap td:first-child{display:grid;grid-template-columns:34px minmax(0,1fr);grid-column:1 / -1}.examProtoTableWrap td:nth-child(2){color:#6b7280}.examProtoTableWrap td:nth-child(3),.examProtoTableWrap td:nth-child(5){text-align:right}.examProtoTableWrap td:nth-child(4){display:none}.examProtoTableWrap td:nth-child(6){grid-column:1 / -1}.examProtoStatus{font-size:10px;margin-top:4px}.examProtoAvatar{width:30px;height:30px}
  .examProtoStudentHero{padding:13px;align-items:flex-start}.examProtoStudentHero h2{font-size:16px}.examProtoStudentHero p{font-size:12px}.examProtoStudentHero button{font-size:11px}.examStudentDetailPanel,.examStudentDetailGrid{gap:12px}.examStudentQuickStats{grid-template-columns:repeat(2,minmax(0,1fr))}.examStudentMeta{grid-template-columns:1fr}.examStudentMatrix{grid-template-columns:1fr}.examAttemptTimeline{overflow-x:auto}
}

/* Exam analytics mobile-first polish: touch targets, safe-area spacing, and overflow control */
@media(max-width:720px){
  html,body{max-width:100%;overflow-x:hidden}.examProtoShell{padding-bottom:calc(18px + env(safe-area-inset-bottom,0px));-webkit-font-smoothing:antialiased}.examProtoNav{padding-left:calc(10px + env(safe-area-inset-left,0px));padding-right:calc(10px + env(safe-area-inset-right,0px))}.examProtoMain{padding-left:calc(12px + env(safe-area-inset-left,0px));padding-right:calc(12px + env(safe-area-inset-right,0px))}
  .examProtoFilters{scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none}.examProtoFilters::-webkit-scrollbar{display:none}.examProtoFilters select,.examProtoPills button,.examProtoExport,.examProtoTab,.examProtoBack,.examProtoStudentHero button,.examProtoBarChart button,.examProtoTableWrap tr{min-height:44px;touch-action:manipulation}.examProtoFilters select{scroll-snap-align:start;max-width:42vw}.examProtoPills button{scroll-snap-align:start}.examProtoExport{display:none}
  .examProtoKpis>div{justify-content:center}.examProtoKpis>div:nth-child(5){border-color:var(--danger-surface);background:color-mix(in srgb, var(--danger-surface) 30%, var(--surface))}.examProtoKpis>div:nth-child(5) b{color:var(--danger-solid)}.examProtoFilterSummary{overflow-x:auto;flex-wrap:nowrap;margin-left:-2px;padding-bottom:2px;scrollbar-width:none}.examProtoFilterSummary::-webkit-scrollbar{display:none}.examProtoFilterSummary span{white-space:nowrap;flex:0 0 auto}
  .examProtoAlertCard,.examProtoCard,.examProtoStudentTable,.examProtoStudentHero,.examStudentDetailPanel{box-shadow:0 1px 2px rgba(15,23,42,.05)}.examProtoAlertSubject strong{font-size:20px}.examProtoSubjectCards div{min-height:80px;display:flex;flex-direction:column;justify-content:center}.examProtoSubjectCards b{line-height:1.15}.examProtoSubjectCards strong{line-height:1.05}
  .examProtoLegend{display:none}.examProtoBarChart span{border-radius:999px;background:#edf2f7}.examProtoBarChart i{border-radius:999px}.examProtoBarChart button:last-child{border-bottom:0}.examProtoSubList{margin-top:10px}.examProtoSubList div{min-height:42px}.examProtoCategoryCard{overflow:hidden}.examProtoCategoryGrid.lower{gap:12px}
  .examProtoShell .examCharts .examCard{padding:14px}.examProtoShell .examCharts .chartHero{order:1}.examProtoShell .examCharts .examCard:nth-child(2){order:3}.examProtoShell .examCharts .examCard:nth-child(3){order:2}.examProtoShell .examBubblePlot{border-radius:12px}.examProtoShell .examMiniBars{overflow-x:auto;padding-bottom:4px}.examProtoShell .examMiniBars button{min-width:64px}.examProtoShell .examDonutRow{align-items:center}.examProtoShell .examDonut div{width:72%;height:72%}
  .examProtoStudentTable{border-radius:12px}.examProtoTableWrap tr{position:relative}.examProtoTableWrap tr.active{box-shadow:inset 3px 0 0 #2F4A63}.examProtoTableWrap td:nth-child(2)::before{content:'School ';color:#9ca3af}.examProtoTableWrap td:nth-child(3)::before{content:'Accuracy ';color:#9ca3af;font-weight:500}.examProtoTableWrap td:nth-child(5)::before{content:'Pass ';color:#9ca3af;font-weight:500}.examProtoTableWrap td:nth-child(3),.examProtoTableWrap td:nth-child(5){font-weight:800}.examProtoTableWrap td b{font-size:13px}.examProtoTableWrap small{font-size:10px}
  .examProtoStudentHero{display:grid;grid-template-columns:1fr;gap:10px}.examProtoStudentHero>div{align-items:flex-start}.examProtoStudentHero button{width:100%;justify-content:center}.examProtoStudentPicker{padding:12px}.examProtoStudentPicker label{min-width:0;width:100%}.examProtoStudentPicker select{width:100%}.examStudentDetailPanel{padding:12px;border-radius:14px}.examStudentProfileHero{padding:14px!important;border-radius:14px!important}.examStudentProfileHero h3{font-size:20px}.examStudentHeroScore b{font-size:26px}.examStudentQuickStats>div{min-height:86px}.examStudentQuickStats>div:first-child{grid-column:1 / -1;display:grid;place-items:center}.examStudentMeta span{font-size:11px}.examStudentDetailGrid .examCard{padding:13px}.examAttemptTimeline{display:grid;grid-auto-flow:column;grid-auto-columns:72px;gap:8px;min-height:190px}.examAttemptTimeline>div{min-width:72px}.examStudentMatrix button{min-height:54px}.examStudyPlan{padding-left:18px}.examStudyPlan li span{font-size:11px}
}
@media(max-width:430px){
  .examProtoNavHint{display:none}.examProtoTitleBlock{gap:9px}.examProtoHeader{padding:10px 12px}.examProtoHeader>span{max-width:66px}.examProtoMain{padding-top:10px;gap:10px}.examProtoKpis{gap:8px}.examProtoKpis>div{padding:10px;min-height:78px}.examProtoKpis>div>b{font-size:20px}.examProtoKpis>div>span{font-size:10px}.examProtoKpis>div>small{font-size:9px}.examProtoCard,.examProtoAlertCard{padding:12px}.examProtoSubjectCards{gap:8px}.examProtoSubjectCards div{padding:10px;min-height:74px}.examProtoSubjectCards strong{font-size:17px}.examProtoTableWrap tr{padding:11px 12px}.examProtoShell .examDonut div b{font-size:14px}.examProtoShell .examDonut div span{font-size:8px}.examStudentQuickStats{gap:8px}.examStudentQuickStats>div{padding:10px}.examStudentQuickStats>div:not(:first-child) b{font-size:19px}
}

/* ---- super-admin user directory, permission overrides, delete flow ---- */
.admin-user-directory #dirRows{display:grid;gap:6px}
.admin-dir-count{margin:0}
.admin-dir-card>div:first-child{flex:1 1 auto;min-width:0}
.admin-dir-card .btn{flex:none}
.admin-dir-controls{grid-template-columns:1fr 220px!important;background:var(--surface)}
.admin-dir-row{display:flex;justify-content:space-between;align-items:center;gap:10px;border:1px solid var(--border);border-radius:11px;padding:9px 10px;background:var(--surface)}
.admin-dir-row b{color:var(--navy);font-size:13px}
.admin-dir-row span,.admin-dir-row small{display:block;color:var(--muted);font-size:11px;margin-top:2px}
.admin-dir-row button,.admin-audit button{background:var(--primary);color:var(--text-inverse);border:none;border-radius:var(--radius-md);padding:8px 12px;cursor:pointer;font-size:12px;white-space:nowrap}
.admin-audit{border:1px dashed var(--line);border-radius:11px;padding:8px 10px;margin-top:4px;background:var(--neutral-50);max-height:220px;overflow:auto;font-size:11px}
.admin-audit div{padding:4px 0;border-bottom:1px solid var(--border)}
.admin-audit div:last-child{border-bottom:none}
.admin-audit b{color:var(--navy);margin-right:6px}
.admin-audit span{color:var(--muted)}
.admin-perms{border:1px dashed var(--line);border-radius:11px;padding:10px;margin-top:4px;background:var(--neutral-50);display:grid;gap:8px}
.admin-perms-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:4px 12px}
.admin-perms-grid label{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--neutral-800)}
.admin-perms-grid small{color:var(--muted)}
.admin-perms button{background:var(--primary);color:var(--text-inverse);border:none;border-radius:var(--radius-md);padding:8px 12px;cursor:pointer;font-size:12px;margin-right:6px}
.admin-reset button.danger,.admin-perms button.danger{background:var(--danger-solid)}
.admin-command-hero{display:grid;grid-template-columns:minmax(240px,1fr) auto;gap:16px;align-items:center;margin:0 0 12px;padding:18px;border:1px solid var(--navy-100);border-radius:var(--radius-xl);background:linear-gradient(135deg,var(--navy-50),var(--blue-50) 58%,var(--surface));box-shadow:var(--shadow-sm)}
.admin-command-hero h3{margin:2px 0 4px;color:var(--text-primary);font-size:22px}.admin-command-hero .sub{max-width:780px}.admin-command-stats{display:grid;grid-template-columns:repeat(2,minmax(96px,1fr));gap:8px}.admin-command-stats span,.admin-command-stats .admin-stat{display:grid;gap:2px;padding:10px 12px;border:1px solid var(--blue-100);border-radius:var(--radius-lg);background:rgba(255,255,255,.82);color:var(--text-tertiary);font-size:11px;text-transform:uppercase;font-weight:var(--weight-semibold)}.admin-command-stats b{color:var(--text-primary);font-size:20px;line-height:1}
.admin-command-stats .admin-stat{font:inherit;font-size:11px;text-align:left;cursor:pointer;transition:border-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard)}
.admin-command-stats .admin-stat:hover{border-color:var(--accent);box-shadow:var(--shadow-xs)}
.admin-section-title{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.admin-section-title h3{margin:0}
.admin-user-directory #dirRows{gap:10px}.admin-dir-controls{grid-template-columns:minmax(220px,1fr) minmax(140px,.35fr) minmax(180px,.45fr)!important}.admin-dir-card{width:100%;text-align:left;appearance:none;cursor:pointer;border:1px solid var(--border)!important;border-radius:var(--radius-lg)!important;padding:12px 14px!important;background:var(--surface)!important;color:inherit!important;box-shadow:var(--shadow-xs);transition:transform var(--duration-base) var(--ease-standard),border-color var(--duration-base) var(--ease-standard),box-shadow var(--duration-base) var(--ease-standard)}.admin-dir-card:hover,.admin-dir-card:focus-visible{transform:translateY(-1px);border-color:var(--accent)!important;box-shadow:var(--shadow-md);outline:none}.admin-dir-card em{font-style:normal;color:var(--accent);font-size:12px;font-weight:var(--weight-semibold);white-space:nowrap}
.admin-user-detail-overlay{position:fixed;inset:0;z-index:var(--z-modal);background:rgba(15,23,42,.46);backdrop-filter:blur(4px);display:flex;justify-content:flex-end}.admin-user-detail{width:min(920px,96vw);height:100vh;background:var(--neutral-50);box-shadow:-28px 0 70px rgba(15,23,42,.28);display:grid;grid-template-rows:auto 1fr;overflow:hidden}.admin-user-detail header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;padding:20px 22px;border-bottom:1px solid var(--border);background:linear-gradient(135deg,var(--navy-900),var(--navy-600));color:var(--text-inverse)}.admin-user-detail header h3{margin:2px 0 4px;font-size:24px}.admin-user-detail header span,.admin-user-detail header .eyebrow{color:var(--navy-100)}.admin-user-detail header small{font-size:12px;color:var(--warning-surface)}.admin-detail-close{border:1px solid rgba(255,255,255,.36);background:rgba(255,255,255,.12);color:var(--text-inverse);border-radius:999px;width:36px;height:36px;font-size:24px;line-height:1;cursor:pointer}.admin-detail-body{overflow:auto;padding:16px;display:grid;gap:12px}.admin-detail-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px;box-shadow:var(--shadow-sm)}.admin-detail-card h4{margin:0 0 8px;color:var(--text-primary)}.admin-detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.admin-detail-grid label{display:grid;gap:5px;color:var(--text-secondary);font-size:11px;font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:var(--tracking-eyebrow)}.admin-detail-grid input,.admin-detail-grid select,.admin-password-inline input{border:1px solid var(--border-strong);border-radius:11px;padding:10px 11px;font:inherit;font-size:13px;background:var(--surface);color:var(--text-primary);min-width:0}.admin-detail-facts{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.admin-detail-facts span{border:1px solid var(--border);border-radius:999px;padding:7px 10px;background:var(--neutral-50);color:var(--text-tertiary);font-size:12px}.admin-detail-facts b{color:var(--text-primary)}.admin-detail-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.admin-detail-actions button,.admin-password-inline button{border:1px solid var(--blue-100);background:var(--blue-50);color:var(--accent);border-radius:var(--radius-md);padding:8px 12px;font-size:12px;font-weight:var(--weight-semibold);cursor:pointer}.admin-detail-actions button:hover,.admin-password-inline button:hover{border-color:var(--accent)}.admin-detail-actions.danger-zone button{border-color:var(--danger-surface);background:var(--danger-surface);color:var(--danger-text)}.admin-detail-actions button.danger{background:var(--danger-solid)!important;border-color:var(--danger-solid)!important;color:var(--text-inverse)!important}.admin-password-inline{display:grid;grid-template-columns:minmax(220px,1fr) auto;gap:8px}.admin-access-result pre{white-space:pre-wrap;max-height:260px;overflow:auto;background:var(--neutral-900);color:var(--neutral-200);border-radius:12px;padding:12px;font-size:12px}.admin-detail-audit{max-height:300px}.admin-detail-card .admin-token-row{box-shadow:none}
@media(max-width:760px){.admin-command-hero{grid-template-columns:1fr}.admin-command-stats{grid-template-columns:repeat(2,1fr)}.admin-section-title{display:grid}.admin-dir-controls,.admin-detail-grid,.admin-password-inline{grid-template-columns:1fr!important}.admin-user-detail{width:100vw}.admin-user-detail header{padding:16px}.admin-detail-body{padding:10px}.admin-dir-card{align-items:flex-start;display:grid!important}.admin-dir-card em{margin-top:6px}}
/* ---- Super Admin / Institution Admin portals: focused admin layout + overview quick links ---- */
.app-shell.admin-max .workspace-card:not(.admin-card){display:none}
.admin-overview-links{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}
.admin-overview-link{display:flex;align-items:flex-start;gap:10px;text-align:left;padding:14px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);color:inherit;cursor:pointer;box-shadow:var(--shadow-xs);transition:transform var(--duration-base) var(--ease-standard),border-color var(--duration-base) var(--ease-standard),box-shadow var(--duration-base) var(--ease-standard)}
.admin-overview-link:hover,.admin-overview-link:focus-visible{transform:translateY(-1px);border-color:var(--accent);box-shadow:var(--shadow-md);outline:none}
.admin-overview-link svg{flex:0 0 auto;margin-top:2px;color:var(--accent)}
.admin-overview-link span{display:grid;gap:3px;min-width:0}
.admin-overview-link b{font-size:13px;color:var(--text-primary)}
.admin-overview-link small{color:var(--text-tertiary);font-size:12px;line-height:1.4}

/* ---- sign-in extras: show/hide password, Google, forgot password, MFA ---- */
.password-field{position:relative;display:flex;align-items:center}
.password-field input{flex:1;padding-right:40px!important}
.pw-toggle{position:absolute;right:6px;background:none;border:none;cursor:pointer;color:var(--muted);padding:6px;display:flex;align-items:center}
.pw-toggle:hover{color:var(--navy)}
.pw-toggle svg{width:17px;height:17px}
.linklike{background:none;border:none;color:var(--accent);cursor:pointer;font-size:12px;padding:4px 0;text-decoration:underline}
.google-btn{display:inline-flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-md);padding:10px 14px;font-size:13.5px;font-weight:600;color:var(--text-primary);cursor:pointer;transition:background var(--duration-base) var(--ease-standard),border-color var(--duration-base) var(--ease-standard)}
.google-btn:hover{background:var(--surface-sunken);border-color:var(--neutral-400)}
#mfaPanel input,#forgotPasswordPanel input{width:100%;box-sizing:border-box}

/* ---- account security card ---- */
.security-card .security-status{border:1px solid var(--line);border-radius:11px;padding:10px 12px;margin:8px 0;background:var(--surface)}
.security-card .security-status.is-on{border-color:#86efac;background:#f0fdf4}
.security-card .security-status b{display:block;color:var(--navy);font-size:13px}
.security-card .security-status span{display:block;color:var(--muted);font-size:11px;margin-top:2px}
.security-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
.security-actions input{border:1px solid var(--line);border-radius:9px;padding:9px 10px;font-size:12px;background:var(--surface);outline:none}
.security-actions button{background:var(--navy);color:var(--text-inverse);border:none;border-radius:9px;padding:9px 12px;cursor:pointer;font-size:12px}
.security-actions button.danger{background:#b91c1c}
.mfa-enroll{border:1px dashed var(--line);border-radius:11px;padding:12px;margin-top:8px;background:var(--neutral-50)}
.mfa-qr-row{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap;font-size:12px;line-height:1.6}
.mfa-qr-row img{border:1px solid var(--line);border-radius:11px;background:var(--surface)}
.mfa-qr-row code{display:block;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:6px 8px;margin:6px 0;font-size:11px;word-break:break-all;max-width:320px}
.mfa-qr-row b{display:block;margin-top:6px;color:var(--navy)}
.mfa-backup-codes{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:6px;margin:8px 0}
.mfa-backup-codes code{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:6px 8px;font-size:12px;text-align:center}
.admin-access-badge{display:inline-flex;vertical-align:middle;margin-left:6px;border-radius:999px;padding:3px 8px;font-size:10px;font-weight:var(--weight-semibold);text-transform:uppercase;background:var(--neutral-surface);color:var(--neutral-status-text);border:none}
.admin-access-badge.access-accepted{background:var(--success-surface);color:var(--success-text)}
.admin-access-badge.access-disabled,.admin-access-badge.access-no_email,.admin-access-badge.access-no_password{background:var(--danger-surface);color:var(--danger-text)}
.admin-access-badge.access-invite_active,.admin-access-badge.access-reset_active{background:var(--info-surface);color:var(--info-text)}
.admin-access-badge.access-invite_expired,.admin-access-badge.access-reset_expired,.admin-access-badge.access-must_change{background:var(--warning-surface);color:var(--warning-text)}

/* ===== Student portal: hours + PowerSkills trackers ===== */
.studentTrackerStrip{grid-column:1 / -1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.trackerCard{border:1px solid #dbeafe;border-radius:18px;background:linear-gradient(180deg,var(--surface),#f7fbff);padding:16px 18px;box-shadow:0 8px 20px rgba(31,56,100,.05);display:grid;gap:8px}
.trackerCard.skillsTracker{border-color:#ddd6fe;background:linear-gradient(180deg,var(--surface),#faf9ff)}
.trackerHead{display:flex;align-items:center;justify-content:space-between;gap:10px}
.trackerHead h3{margin:0;color:var(--navy);font-size:15px}
.trackerChip{font-style:normal;border-radius:999px;padding:5px 10px;font-size:11px;font-weight:900;background:#eff6ff;color:var(--accent);white-space:nowrap}
.trackerChip.live{background:var(--success-surface);color:var(--success-text)}
.trackerChip.pending{background:var(--warning-surface);color:var(--warning-text)}
.trackerBig{display:flex;align-items:baseline;gap:8px}
.trackerBig b{font-size:34px;line-height:1;color:var(--text-primary);letter-spacing:-.5px}
.trackerBig span{color:var(--text-tertiary);font-weight:800;font-size:12px}
.trackerBar{display:block;height:10px;background:#e5edf6;border-radius:999px;overflow:hidden}
.trackerBar em{display:block;height:100%;background:linear-gradient(90deg,var(--viz-seq-4),var(--viz-seq-7));border-radius:999px;transition:width var(--duration-slow) var(--ease-standard)}
.trackerBar.skills em{background:linear-gradient(90deg,#7c3aed,#1d4ed8)}
.trackerCard .sub{margin:0}
@media(max-width:900px){.studentTrackerStrip{grid-template-columns:1fr}}

/* ===== Student portal: month/week clinical calendar ===== */
.calToolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.calToolbar .calLabel{color:var(--text-primary);font-size:16px}
.calNav{display:flex;gap:6px}
.mriPortalCard .calNav button,.mriPortalCard .calViewToggle button,.calNav button,.calViewToggle button{border:1px solid var(--border-strong);background:var(--surface);color:var(--text-primary);border-radius:999px;padding:7px 13px;font-weight:900;font-size:12px;cursor:pointer;box-shadow:none}
.calNav button:hover,.calViewToggle button:hover{border-color:var(--accent);background:#eff6ff}
.calViewToggle{display:flex;gap:0;border:1px solid var(--border-strong);border-radius:999px;overflow:hidden}
.calViewToggle button{border:none;border-radius:0}
.mriPortalCard .calViewToggle button.active,.calViewToggle button.active{background:var(--brand-blue,#0B50E6);color:var(--text-inverse)}
.calHeadRow{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin-bottom:4px}
.calHeadRow span{text-align:center;font-size:11px;font-weight:900;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.4px}
.calMonthGrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.calDay{min-height:86px;border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:6px;display:grid;grid-auto-rows:min-content;gap:4px;align-content:start}
.calDay i{font-style:normal;font-size:11px;font-weight:900;color:var(--text-tertiary)}
.calDay.outside{background:var(--neutral-50)}
.calDay.outside i{color:var(--neutral-300)}
.calDay.today{border-color:var(--accent);box-shadow:inset 0 0 0 1px #2563eb}
.calDay.today i{color:var(--accent)}
.mriPortalCard .calShiftChip,.calShiftChip{display:grid;gap:1px;text-align:left;align-self:stretch;width:100%;border:none;border-left:3px solid var(--accent);background:#eff6ff;border-radius:8px;padding:4px 6px;cursor:pointer;min-width:0;box-shadow:none;color:#1e3a8a}
.calShiftChip b{font-size:11px;color:#1e3a8a;line-height:1.2}
.calShiftChip span{font-size:10px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.calShiftChip:hover{filter:brightness(.96)}
.mriPortalCard .calShiftChip.live,.calShiftChip.live{background:var(--success-surface);border-left-color:var(--success-solid)}
.calShiftChip.live b{color:#14532d}
.mriPortalCard .calShiftChip.complete,.calShiftChip.complete{background:#ede9fe;border-left-color:#7c3aed}
.calShiftChip.complete b{color:#4c1d95}
.calShiftChip small{font-size:10px;color:var(--text-tertiary)}
.calShiftChip em{font-style:normal;justify-self:start;border-radius:999px;padding:2px 7px;font-size:9px;font-weight:900;background:var(--surface);color:var(--accent)}
.calShiftChip.live em{color:var(--success-text)}
.calShiftChip.complete em{color:#5b21b6}
.mriPortalCard .calMore,.calMore{border:none;background:none;color:var(--accent);font-size:10px;font-weight:900;cursor:pointer;text-align:left;padding:2px 4px;box-shadow:none}
.calWeekGrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.calWeekCol{border:1px solid var(--border);border-radius:12px;background:var(--surface);padding:8px 6px;display:grid;gap:6px;align-content:start;min-height:150px}
.calWeekCol.today{border-color:var(--accent);box-shadow:inset 0 0 0 1px #2563eb}
.calWeekCol header{display:flex;align-items:baseline;justify-content:space-between;gap:6px;border-bottom:1px solid var(--border-subtle);padding-bottom:5px}
.calWeekCol header span{font-size:10px;font-weight:900;color:var(--text-tertiary);text-transform:uppercase}
.calWeekCol header b{font-size:15px;color:var(--text-primary)}
.calWeekCol .calNone{margin:0;color:var(--neutral-300);font-size:11px;text-align:center}
@media(max-width:900px){.calMonthGrid,.calHeadRow{gap:2px}.calDay{min-height:64px;padding:4px}.calWeekGrid{grid-template-columns:1fr;}.calWeekCol{min-height:0}}

/* ===== Clinical popup: live clocked-in timer ===== */
.clinicalLiveTimer{border:1px solid #86efac;border-radius:18px;background:linear-gradient(180deg,#f0fdf4,var(--surface));padding:14px 16px;display:grid;gap:10px}
.clinicalLiveTimer .ltMain{display:grid;gap:2px;justify-items:center;text-align:center}
.clinicalLiveTimer .ltMain span{font-size:11px;font-weight:900;color:var(--success-text);text-transform:uppercase;letter-spacing:.5px}
.clinicalLiveTimer .ltMain b{font-size:42px;line-height:1;color:#14532d;font-variant-numeric:tabular-nums;letter-spacing:-1px}
.clinicalLiveTimer .ltMain small{color:var(--text-tertiary);font-weight:800}
.clinicalLiveTimer .ltStats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.clinicalLiveTimer .ltStats div{border:1px solid #d1fae5;border-radius:12px;background:var(--surface);padding:9px;text-align:center}
.clinicalLiveTimer .ltStats b{display:block;font-size:19px;color:var(--text-primary);font-variant-numeric:tabular-nums}
.clinicalLiveTimer .ltStats span{display:block;font-size:10px;font-weight:900;color:var(--text-tertiary);text-transform:uppercase;margin-top:2px}
@media(max-width:760px){.clinicalLiveTimer .ltStats{grid-template-columns:1fr}}

/* ===== Clinical popup: PowerSkill documentation + sign-off ===== */
.clinicalSkillDoc{display:grid;gap:10px}
.clinicalSkillDoc h4{margin:6px 0 0;color:var(--text-primary)}
.clinicalSkillDocHead{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.clinicalSkillDocHead .sub{margin:2px 0 0}
.clinicalSkillDocHead>button{border:1px solid var(--accent);background:#2563eb;color:var(--text-inverse);border-radius:999px;padding:9px 13px;font-weight:900;cursor:pointer}
.skillDocBackdrop{z-index:var(--z-modal);background:rgba(15,23,42,.36)}
.skillDocModal{max-width:min(820px,94vw)}
.skillDocTopRow{display:grid;grid-template-columns:minmax(0,1fr) minmax(210px,260px);gap:10px;align-items:end}
.skillDocDetails{display:grid;gap:10px}
.skillCriteriaFields{display:grid;gap:0;border:1px solid var(--border-strong);border-radius:14px;padding:0;background:var(--surface);overflow:hidden}
.skillCriteriaFields .sub{margin:0;padding:10px 12px;border-bottom:1px solid var(--border);background:var(--neutral-50)}
.clinicalModalForm .skillCriteriaHeader,.clinicalModalForm .skillCriteriaRow,.skillCriteriaHeader,.skillCriteriaRow{display:grid;grid-template-columns:minmax(0,1fr) minmax(180px,220px);align-items:stretch}
.skillCriteriaHeader{background:#f8fbff;border-bottom:1px solid #dbeafe}
.skillCriteriaHeader b{padding:8px 11px;color:var(--text-secondary);font-size:10px;text-transform:uppercase;letter-spacing:.08em;border-right:1px solid var(--border)}.skillCriteriaHeader b:last-child{border-right:0}
.skillCriteriaRow{gap:0;font-size:12px;font-weight:800;color:var(--neutral-700);border-bottom:1px solid #edf2f7}
.skillCriteriaRow:last-child{border-bottom:0}
.skillCriteriaRow span{line-height:1.35;padding:9px 11px;border-right:1px solid var(--border)}
.skillCriteriaRow .critFlag{font-style:normal;color:#b91c1c;font-size:10px;font-weight:900}
.clinicalModalForm .skillCriteriaRow select,.skillCriteriaRow select{border:0;border-radius:0;padding:9px 10px;font:inherit;background:var(--surface);width:100%;min-height:100%;align-self:stretch}
.sessionSkillList{display:grid;gap:8px}
.sessionSkillAttempt{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid var(--border);border-left:4px solid #f59e0b;border-radius:14px;background:var(--surface);padding:11px 13px}
.sessionSkillAttempt.verified{border-left-color:var(--success-solid)}
.sessionSkillAttempt.rejected{border-left-color:var(--danger-solid)}
.sessionSkillAttempt>div{display:grid;gap:3px;min-width:0}
.sessionSkillAttempt b{color:var(--text-primary)}
.sessionSkillAttempt span{color:var(--text-tertiary);font-size:12px;line-height:1.4}
.sessionSkillAttempt em{font-style:normal;font-size:11px;font-weight:900;color:var(--warning-text)}
.sessionSkillAttempt.verified em{color:var(--success-text)}
.sessionSkillAttempt.rejected em{color:#b91c1c}
.sessionSkillActions{display:flex;gap:7px;flex-wrap:wrap;justify-content:flex-end}
.sessionSkillActions>button{border:1px solid var(--border-strong);background:var(--neutral-50);color:var(--text-primary);border-radius:999px;padding:6px 11px;font-size:11px;font-weight:900;cursor:pointer;white-space:nowrap}
.sessionSkillActions>button:hover{border-color:var(--accent);background:#eff6ff}
.skillSignoffForm{border-color:#c7d2fe;background:#f6f7ff}
.clinicalEventDetails summary{cursor:pointer;font-weight:900;color:var(--accent);font-size:13px;padding:4px 0}
@media(max-width:760px){.skillDocTopRow{grid-template-columns:1fr}.skillCriteriaHeader,.skillCriteriaRow{grid-template-columns:minmax(0,1fr) minmax(128px,38vw)}.skillCriteriaRow span{border-right:1px solid var(--border);border-bottom:0}.sessionSkillAttempt{flex-direction:column}.sessionSkillActions{justify-content:flex-start}.sessionSkillActions>button{align-self:flex-start}}
.powerSkillReadinessKpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:10px 0 12px}.powerSkillReadinessKpis>div{border:1px solid var(--border);border-radius:12px;background:var(--neutral-50);padding:10px}.powerSkillReadinessKpis b{display:block;color:var(--navy);font-size:20px}.powerSkillReadinessKpis span{color:var(--text-tertiary);font-size:11px;text-transform:uppercase;letter-spacing:.04em}.skillChecklistRow{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,300px);gap:12px;align-items:start}.skillReadiness{display:flex;flex-direction:column;gap:5px;align-items:flex-start}.statusPill{border-radius:999px;padding:4px 8px;font-size:11px;font-weight:900;text-transform:uppercase;letter-spacing:.04em}.statusPill.ready{background:var(--success-surface);color:var(--success-text)}.statusPill.verified{background:#dbeafe;color:var(--accent)}.statusPill.pending{background:var(--warning-surface);color:var(--warning-text)}.statusPill.locked{background:var(--danger-surface);color:var(--danger-text)}.skillReadiness small{color:var(--text-tertiary);font-size:11px}.skillVideoStatus{font-weight:700}.skillAction{font-size:12px;font-weight:800}.skillAction.ready{color:var(--success-text)}.skillAction.pending{color:var(--warning-text)}.skillAction.done{color:var(--accent)}.skillAction.muted{color:var(--text-tertiary)}.linkBtn{border:0;background:none;color:var(--accent);font-weight:900;padding:0;cursor:pointer;text-decoration:underline}.skillChecklistRow.locked{opacity:.92}@media(max-width:760px){.powerSkillReadinessKpis{grid-template-columns:repeat(2,minmax(0,1fr))}.skillChecklistRow{grid-template-columns:1fr}.skillReadiness{border-top:1px dashed var(--border);padding-top:8px}}
/* ---------- PowerSkills manager + detail modal ----------
 * On the canonical system (docs/ui-design-system.md): tokens only, .btn /
 * .badge / .field components in the markup, modal chrome per §8. Replaces the
 * five historical fix layers (.iconBtn, gradient header, !important close). */
.powerSkillManager.compact .reportHead{align-items:center;gap:var(--space-4)}
.powerSkillTitleList{display:grid;gap:var(--space-2)}
.powerSkillListItem{width:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);text-align:left;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);padding:var(--space-3) var(--space-4);color:inherit;cursor:pointer;transition:border-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard)}
.powerSkillListItem:hover{border-color:var(--accent);box-shadow:var(--shadow-md)}
.powerSkillListItem span{font-weight:var(--weight-semibold)}
.powerSkillListItem em,.powerSkillListItem small{font-size:var(--text-xs);border-radius:var(--radius-pill);background:var(--info-surface);color:var(--info-text);padding:2px var(--space-2);font-style:normal;text-transform:uppercase;letter-spacing:var(--tracking-eyebrow);font-weight:var(--weight-semibold)}
/* Modal shell (spec §8: backdrop .5 slate, radius-xl, shadow-lg) */
.powerSkillDetailDialog{border:0;padding:0;background:transparent;max-width:min(920px,calc(100vw - 32px));width:min(920px,calc(100vw - 32px));max-height:calc(100vh - 32px);margin:auto;position:fixed;inset:0}
.powerSkillDetailDialog::backdrop{background:rgba(15,23,42,.5)}
.powerSkillDetailShell{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-xl);box-shadow:var(--shadow-lg);overflow:hidden;display:flex;flex-direction:column;max-height:calc(100vh - 32px)}
.powerSkillDetailHeader{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-4);padding:var(--space-5) var(--space-6);border-bottom:1px solid var(--border)}
.powerSkillTitleBlock .eyebrow{margin:0 0 var(--space-1)}
.powerSkillDetailHeader h3{margin:0;color:var(--text-primary);font-size:var(--text-2xl);font-weight:var(--weight-bold);letter-spacing:var(--tracking-tight);line-height:1.25}
.powerSkillHeaderMeta{display:flex;gap:var(--space-2);flex-wrap:wrap;margin-top:var(--space-2)}
.powerSkillClose{width:36px;height:36px;flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--text-secondary);cursor:pointer;transition:background var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard)}
.powerSkillClose:hover{background:var(--surface-sunken);color:var(--text-primary)}
.powerSkillClose:focus-visible{box-shadow:var(--shadow-focus)}
.powerSkillClose span{display:block;font-size:22px;line-height:1;transform:translateY(-1px)}
/* Two-pane body: each pane is card chrome on the page background */
.powerSkillDetailBody{display:grid;overflow:auto}
.powerSkillDetailBody.refined{grid-template-columns:minmax(0,.9fr) minmax(340px,1fr);gap:var(--space-4);padding:var(--space-4);background:var(--bg-page)}
.powerSkillInfoPanel,.powerSkillUploadPanel{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);padding:var(--space-5)}
.powerSkillSectionHead{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);margin-bottom:var(--space-3)}
.powerSkillSectionHead>div{display:flex;align-items:center;gap:var(--space-2)}
.powerSkillSectionHead svg{width:18px;height:18px;color:var(--accent)}
.powerSkillSectionHead h4{margin:0;font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--text-primary)}
.powerSkillRubric{margin:0 0 var(--space-3);background:var(--surface-sunken);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-3);color:var(--text-secondary);line-height:1.5}
/* Official-master-skill affordance */
.officialSkillAction{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);border:1px solid var(--border);background:var(--surface-sunken);border-radius:var(--radius-lg);padding:var(--space-3);margin-bottom:var(--space-3)}
.officialSkillAction p{margin:0;display:grid;gap:2px}
.officialSkillAction b{color:var(--text-primary);font-weight:var(--weight-semibold)}
.officialSkillAction span{color:var(--text-tertiary);font-size:var(--text-xs)}
/* Checkoff criteria panel */
.powerSkillCriteriaPanel{margin:0 0 var(--space-3)}
.powerSkillCriteriaPanel details{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-sunken);padding:var(--space-3)}
.powerSkillCriteriaPanel summary{cursor:pointer;font-weight:var(--weight-semibold);color:var(--text-primary)}
.powerSkillCriteriaPanel ol,.powerSkillCriteriaPanel ul{margin:var(--space-2) 0 var(--space-3) var(--space-4);padding:0}
.powerSkillCriteriaPanel li{margin:var(--space-1) 0;color:var(--text-secondary)}
.powerSkillCriteriaPanel b{display:block;color:var(--text-primary);margin:var(--space-2) 0 var(--space-1);font-weight:var(--weight-semibold)}
.powerSkillCriteriaPanel .critFlag{display:inline-block;margin-left:var(--space-1);border-radius:var(--radius-pill);background:var(--danger-surface);color:var(--danger-text);font-size:10px;font-style:normal;font-weight:var(--weight-semibold);padding:2px 5px}
/* Facts grid under the skill details */
.powerSkillMetaGrid{display:grid;gap:var(--space-2);margin-top:var(--space-3)}
.powerSkillMetaGrid.refined{grid-template-columns:1fr}
.powerSkillMetaGrid>div{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-sunken);padding:var(--space-2) var(--space-3)}
.powerSkillMetaGrid.refined>div{display:grid;grid-template-columns:20px minmax(104px,.42fr) 1fr;gap:var(--space-3);align-items:center}
.powerSkillMetaGrid.refined svg{width:16px;height:16px;color:var(--text-tertiary)}
.powerSkillMetaGrid b{display:block;color:var(--text-secondary);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:var(--tracking-eyebrow);font-weight:var(--weight-semibold)}
.powerSkillMetaGrid.refined b{font-size:10px}
.powerSkillMetaGrid span{display:block;margin:0;color:var(--text-primary);font-size:var(--text-sm);font-weight:var(--weight-medium)}
/* Inline edit + upload forms — inputs are .field; labels match portal forms */
.powerSkillInlineEdit{display:grid;gap:var(--space-3);margin-bottom:var(--space-3)}
.inlineEditGrid{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2) var(--space-3)}
.powerSkillInlineEdit label,.powerSkillUploadPanel label{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-secondary)}
.powerSkillInlineEdit label .field,.stackedField .field{margin-top:var(--space-1)}
.inlineEditActions{display:flex;gap:var(--space-2);align-items:center;justify-content:flex-start;flex-wrap:wrap}
.powerSkillVideoUpload{display:grid;gap:var(--space-3)}
.stackedField{display:grid;gap:var(--space-1)}
/* minmax(0,…) lets the wide intrinsic min-width of <input type=file> shrink,
 * keeping the two source cards genuinely equal halves. */
.uploadSourceGrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--space-3)}
.filePickCard input[type=file]{min-width:0;max-width:100%}
.filePickCard,.urlPickCard{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-sunken);padding:var(--space-3);display:grid;gap:var(--space-2)}
.filePickCard>span,.urlPickCard>span{display:grid;gap:2px;justify-items:start;color:var(--text-primary);text-align:left}
.filePickCard>span svg,.urlPickCard>span svg{width:18px;height:18px;color:var(--accent)}
.filePickCard b,.urlPickCard b{font-size:var(--text-sm);font-weight:var(--weight-semibold)}
.filePickCard small{color:var(--text-tertiary);font-size:var(--text-xs)}
.filePickCard input[type=file]{font-size:var(--text-xs);color:var(--text-secondary)}
.filePickCard input[type=file]::file-selector-button{border:0;border-radius:var(--radius-sm);background:var(--primary);color:var(--on-primary);font-weight:var(--weight-semibold);font-size:var(--text-xs);padding:6px var(--space-3);margin-right:var(--space-2);cursor:pointer}
.urlPickCard .field{margin-top:auto}
.requiredToggle{display:flex!important;align-items:center;gap:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface-sunken);padding:var(--space-2) var(--space-3)}
.requiredToggle span{display:inline-flex;align-items:center;gap:var(--space-2);font-weight:var(--weight-semibold);color:var(--text-secondary);font-size:var(--text-sm)}
.requiredToggle svg{width:15px;height:15px;color:var(--accent)}
/* Footer (modal spec: separated, right-aligned actions) */
.powerSkillModalFooter{display:flex;justify-content:flex-end;border-top:1px solid var(--border);padding-top:var(--space-3)}
.powerSkillModalFooter .btn{min-width:170px}
@media(max-width:820px){
  .powerSkillDetailDialog{width:calc(100vw - 18px);max-width:calc(100vw - 18px)}
  .powerSkillDetailBody.refined,.uploadSourceGrid,.inlineEditGrid{grid-template-columns:1fr}
  .powerSkillMetaGrid.refined>div{grid-template-columns:20px 1fr}
  .powerSkillMetaGrid.refined span{grid-column:2}
  .powerSkillDetailHeader{padding:var(--space-4) var(--space-5)}
  .powerSkillModalFooter .btn,.inlineEditActions .btn{width:100%}
  .officialSkillAction{align-items:stretch;flex-direction:column}
  .officialSkillAction .btn{width:100%}
}

/* ---------- Exam Prep AI analyst panel + pinned insight charts ---------- */
/* The exam dashboard becomes a flex row so the AI panel docks BESIDE the
 * charts (reflow, never overlay) — closing it gives the space back. */
.examDashLayout{display:flex;gap:14px;align-items:stretch;min-width:0}
.examDashLayout>.examDash{flex:1;min-width:0}
.examAiNavBtn{margin-left:auto;white-space:nowrap}
.examProtoNav .examAiNavBtn+.examProtoNavHint{margin-left:8px}
.examAiPanel{width:400px;flex:none;display:flex;flex-direction:column;border:1px solid var(--border);border-radius:var(--radius-xl);background:var(--surface);box-shadow:var(--shadow-md);overflow:hidden;position:sticky;top:6px;max-height:calc(100vh - var(--topbar-h) - 24px);align-self:flex-start}
.examAiHead{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:12px 14px;border-bottom:1px solid var(--border-subtle);background:var(--surface-raised)}
.examAiHead h3{font-size:14px;color:var(--text-primary)}
.examAiHead p{font-size:11px;color:var(--text-tertiary);margin-top:2px}
.examAiClose{border:0;background:none;color:var(--text-tertiary);font-size:20px;font-weight:800;line-height:1;cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm)}
.examAiClose:hover{color:var(--text-primary);background:var(--neutral-surface)}
.examAiScroll{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:10px;min-height:180px}
.examAiIntro p{font-size:12px;color:var(--text-secondary);line-height:1.45}
.examAiSuggest{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.examAiSuggest button{border:1px solid var(--border);background:var(--surface);color:var(--link);font-size:11px;font-weight:700;border-radius:var(--radius-pill);padding:5px 10px;cursor:pointer;text-align:left}
.examAiSuggest button:hover{border-color:var(--accent);background:var(--info-surface)}
.examAiMsg{max-width:94%;display:flex;flex-direction:column;gap:8px}
.examAiMsg p{font-size:12.5px;line-height:1.5;border-radius:var(--radius-lg);padding:8px 11px;white-space:normal;overflow-wrap:anywhere}
.examAiMsg.user{align-self:flex-end;align-items:flex-end}
.examAiMsg.user p{background:var(--primary);color:var(--on-primary);border-bottom-right-radius:4px}
.examAiMsg.assistant{align-self:flex-start}
.examAiMsg.assistant p{background:var(--neutral-surface);color:var(--text-primary);border-bottom-left-radius:4px}
.examAiMsg.error p{background:var(--danger-surface);color:var(--danger-text)}
.examAiTyping{display:inline-flex;gap:4px;background:var(--neutral-surface);border-radius:var(--radius-lg);padding:10px 12px}
.examAiTyping i{width:6px;height:6px;border-radius:50%;background:var(--text-tertiary);animation:examAiBlink 1.2s infinite}
.examAiTyping i:nth-child(2){animation-delay:.2s}.examAiTyping i:nth-child(3){animation-delay:.4s}
@keyframes examAiBlink{0%,80%,100%{opacity:.25}40%{opacity:1}}
.examAiForm{display:flex;gap:8px;padding:10px 12px;border-top:1px solid var(--border-subtle);background:var(--surface-raised)}
.examAiForm input{flex:1;min-width:0;border:1px solid var(--border);border-radius:var(--radius-md);padding:8px 10px;font-size:12.5px;background:var(--surface);color:var(--text-primary)}
.examAiForm button{border:0;border-radius:var(--radius-md);background:var(--primary);color:var(--on-primary);font-size:12.5px;font-weight:800;padding:8px 14px;cursor:pointer}
.examAiForm button:hover{background:var(--primary-hover)}
.examAiForm button:disabled,.examAiForm input:disabled{opacity:.55;cursor:default}
/* Charts inside chat replies */
.examAiChartCard{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-xs);padding:10px;display:flex;flex-direction:column;gap:8px}
.examAiChartCard>small{color:var(--text-tertiary);font-size:11px}
.examAiChartHead{display:flex;align-items:center;justify-content:space-between;gap:8px}
.examAiChartHead b{font-size:12px;color:var(--text-primary)}
.examAiChartHead button{border:1px solid var(--border);background:var(--surface);color:var(--link);font-size:10.5px;font-weight:800;border-radius:var(--radius-pill);padding:4px 9px;cursor:pointer;white-space:nowrap}
.examAiChartHead button:hover{border-color:var(--accent);background:var(--info-surface)}
.examAiEmpty{color:var(--text-tertiary);font-size:12px}
.examAiKpi{display:flex;flex-direction:column;gap:2px;padding:6px 2px}
.examAiKpi b{font-size:30px;color:var(--text-primary)}
.examAiKpi span{font-size:11px;color:var(--text-tertiary)}
.examAiLine .examSparkline{width:100%;height:auto}
.examAiLineFoot{display:flex;justify-content:space-between;font-size:10.5px;color:var(--text-tertiary);margin-top:2px}
.examAiTableWrap{overflow-x:auto}
.examAiTable{width:100%;border-collapse:collapse;font-size:12px}
.examAiTable td{padding:5px 6px;border-bottom:1px solid var(--border-subtle);vertical-align:middle}
.examAiTable td.n{color:var(--text-tertiary);width:22px}
.examAiTable td.l{color:var(--text-primary);font-weight:600;overflow-wrap:anywhere}
.examAiTable td.v{width:45%}
.examAiTable td.v{display:flex;align-items:center;gap:8px}
.examAiTable td.v b{font-size:12px;color:var(--text-primary)}
.examAiTable td.v b.risk{color:var(--danger-text)}.examAiTable td.v b.warn{color:var(--warning-text)}.examAiTable td.v b.good{color:var(--success-text)}
/* Pinned insights grid near the top of the faculty dashboard */
.examPinnedTitle{display:flex;align-items:baseline;gap:10px}
.examPinnedGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;align-items:stretch}
@media(max-width:820px){.examPinnedGrid{grid-template-columns:1fr}}
/* At-risk scatter runs full width once the exec-snapshot / mode cards are removed. */
.examProtoCategoryGrid.lower>.examCharts.examChartsSolo{grid-template-columns:1fr}
.examProtoShell .examChartsSolo .examBubblePlot{min-height:340px}
.examPinnedCard{display:flex;flex-direction:column;gap:10px;min-width:0}
.examPinnedHead{display:flex;align-items:center;gap:8px}
.examPinnedName{flex:1;min-width:0;font-size:13px;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.examPinnedSelect{flex:1;min-width:0;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-primary);font-size:12px;font-weight:700;padding:5px 8px;cursor:pointer}
.examPinnedSelect.type{flex:none;width:auto;font-weight:600;color:var(--text-secondary)}
.examPinnedRemove{flex:none;border:0;background:none;color:var(--text-tertiary);font-size:17px;font-weight:800;line-height:1;cursor:pointer;padding:2px 6px;border-radius:var(--radius-sm)}
.examPinnedRemove:hover{color:var(--danger-text);background:var(--danger-surface)}
.examPinnedBody{flex:1;min-width:0}
.examPinnedBody .examDonutRow{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:8px;justify-content:initial}
.examPinnedBody .examDonut{width:auto;min-width:0;flex:initial}
/* Compact horizontal bar list used by pinned + AI-chat bar charts */
.examBarList{display:grid;gap:7px;width:100%}
.examBarRow{display:grid;grid-template-columns:minmax(64px,40%) minmax(0,1fr) auto;align-items:center;gap:8px;font-size:11.5px}
.examBarLabel{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text-secondary)}
.examBarList .examBar{height:9px}
.examBarList i.risk{background:var(--danger-solid)}.examBarList i.warn{background:var(--warning-solid)}.examBarList i.good{background:var(--success-solid)}
.examBarRow b{text-align:right;font-weight:700;color:var(--text-primary);white-space:nowrap}
.examBarRow b.risk{color:var(--danger-text)}.examBarRow b.warn{color:var(--warning-text)}.examBarRow b.good{color:var(--success-text)}
/* Drill-down affordance on pinned/AI charts that open a breakdown modal */
.examBarList.drill .examBarRow{cursor:pointer;border-radius:6px;padding-block:3px}
.examBarList.drill .examBarRow:hover{background:var(--surface-sunken)}
.examAiTable.drill tr{cursor:pointer}
.examAiTable.drill tr:hover td{background:var(--surface-sunken)}
.examDonut[data-exam-metric]{cursor:pointer}
.examPinnedFoot{display:flex;flex-direction:column;gap:6px}
.examPinnedFoot small{color:var(--text-tertiary);font-size:11px}
.examPinnedChips{display:flex;flex-wrap:wrap;gap:5px}
.examPinnedChips span{background:var(--neutral-surface);color:var(--neutral-status-text);font-size:10px;font-weight:800;border-radius:var(--radius-pill);padding:2px 8px}
.examPinnedAdd{border:1.5px dashed var(--border-strong);border-radius:16px;background:var(--surface-sunken);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:18px 14px;min-height:170px}
.examPinnedAdd>button{border:0;background:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--link)}
.examPinnedAdd>button b{font-size:22px}
.examPinnedAdd>button span{font-size:12.5px;font-weight:800}
.examPinnedAdd>button:hover{color:var(--link-hover)}
.examPinnedAdd label{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:11px;color:var(--text-tertiary)}
.examPinnedAdd select{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-secondary);font-size:11.5px;padding:4px 8px;cursor:pointer}
@media (max-width:1150px){
  .examDashLayout{flex-direction:column}
  .examAiPanel{width:100%;position:static;max-height:70vh;order:-1}
}
@media print{.examAiPanel{display:none}}

/* Skill-attempt evidence video: inline review playback in the queue and student detail. */
.skillEvidenceVideo{display:block;width:100%;max-width:480px;border:1px solid var(--border);border-radius:12px;background:#000;margin:4px 0 6px}
.skillEvidenceStream{width:100%;max-width:480px;margin:4px 0 6px}
.skillEvidenceStream iframe{display:block;width:100%;aspect-ratio:16/9;border:1px solid var(--border);border-radius:12px;background:#000}

/* Clinical Sites: viewport-fit shell — Map or Table view fills the screen and
   scrolling happens inside panels (prospect results, table body), never on the
   page. The shell height comes from flexing inside .mriSitesFitBody (desktop). */
.mriSitesShell{display:flex;flex-direction:column;gap:10px;min-height:0;overflow:hidden}
.mriSitesViewBar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
.mriViewToggle{display:inline-flex;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--surface)}
.mriViewToggle button{border:0;background:transparent;color:var(--navy);padding:8px 14px;display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:700;cursor:pointer}
.mriViewToggle button+button{border-left:1px solid var(--border)}
.mriViewToggle button.active{background:var(--navy);color:var(--surface)}
.mriViewToggle button svg{width:14px;height:14px}
.mriSitesShell .mriSitesMapCard{flex:1;min-height:0;display:flex;flex-direction:column;margin-bottom:0}
.mriSitesShell .mriMap.mriDashboardMap.mriSitesMap,
.app-shell.mri-max .mriSitesShell .mriMap.mriDashboardMap.mriSitesMap{flex:1;height:auto;min-height:240px}
.mriSitesShell .mriProspectResults{max-height:34%;overflow:auto}
.mriSitesShell .mriFilterBar{margin:0}
.mriSitesShell .mriFilterSearch{flex:1 1 220px;min-width:200px}
.mriSitesTableWrap{flex:1;min-height:0;overflow:auto;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.mriSitesTable{width:100%;border-collapse:collapse;font-size:12.5px}
.mriSitesTable thead th{position:sticky;top:0;z-index:1;background:var(--neutral-50);color:var(--text-tertiary);font-size:11px;text-transform:uppercase;letter-spacing:.04em;text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);white-space:nowrap}
.mriSitesTable td{padding:8px 10px;border-bottom:1px solid var(--border);vertical-align:middle;color:var(--navy)}
.mriSitesTable tbody tr{cursor:pointer}
.mriSitesTable tbody tr:hover td{background:var(--neutral-50)}
.mriSitesTable tr.good td:first-child{box-shadow:inset 3px 0 0 var(--success-text)}
.mriSitesTable tr.risk td:first-child{box-shadow:inset 3px 0 0 var(--danger-text)}
.mriSitesTable td b{display:block;font-size:12.5px}
.mriSitesTable td small{display:block;color:var(--text-tertiary);font-size:11px}
.mriSitesTable td select,.mriSitesTable td input{border:1px solid var(--border);border-radius:7px;padding:4px 6px;font-size:12px;color:var(--navy);background:var(--surface)}
.mriSitesCapCell{white-space:nowrap}
.mriSitesCapCell input[type=number]{width:64px}
.mriSitesCapCell small{display:inline;margin-left:6px}
.mriSitesRowActions{white-space:nowrap}
.mriSitesRowActions button{border:1px solid var(--border);background:var(--surface);color:var(--navy);border-radius:7px;padding:4px 8px;font-size:11.5px;font-weight:700;cursor:pointer;margin-left:4px}
@media(max-width:900px){.mriSitesShell{height:auto !important;overflow:visible}.mriSitesShell .mriMap.mriDashboardMap.mriSitesMap{min-height:320px}}
/* ---- Placement command-center dashboard (landing view) ---- */
.pcdShell{display:flex;flex-direction:column;gap:14px}
.pcdStats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.pcdStat{display:grid;gap:2px;justify-items:start;text-align:left;border:1px solid var(--border);border-left:5px solid var(--neutral-300);border-radius:12px;background:var(--surface);padding:12px 14px;cursor:pointer}
.pcdStat:hover{border-color:var(--accent);border-left-width:5px}
.pcdStat small{color:var(--text-tertiary);font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.05em}
.pcdStat b{color:var(--navy);font-size:26px;line-height:1.1;font-variant-numeric:tabular-nums}
.pcdStat span{color:var(--muted);font-size:11.5px}
.pcdStat.risk{border-left-color:var(--danger-solid)}
.pcdStat.warn{border-left-color:var(--warning-solid)}
.pcdStat.good{border-left-color:var(--success-solid)}
.pcdGrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:start}
.pcdCard{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:14px;min-width:0;display:flex;flex-direction:column;gap:10px}
.pcdCardHead{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.pcdCardHead h3{display:flex;align-items:center;gap:7px;color:var(--navy);font-size:14px}
.pcdCardHead h3 svg.lucide{width:15px;height:15px;color:var(--accent);flex:none}
.pcdCardHead h3 em{font-style:normal;font-size:11px;font-weight:800;color:var(--text-tertiary);background:var(--neutral-50);border:1px solid var(--border);border-radius:999px;padding:2px 8px;font-variant-numeric:tabular-nums}
.pcdCardHead p{color:var(--muted);font-size:11.5px;margin-top:3px;line-height:1.4}
.pcdCardHead .btn{flex:none}
.pcdList{display:grid;grid-template-columns:minmax(0,1fr);gap:7px}
.pcdRow{display:flex;align-items:center;gap:10px;min-width:0;border:1px solid #e5edf6;background:var(--neutral-50);border-radius:12px;padding:9px 10px;cursor:pointer}
.pcdRow:hover{border-color:var(--accent)}
.pcdRow:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.pcdRow i{flex:none;width:4px;align-self:stretch;border-radius:999px;background:var(--neutral-300);min-height:30px}
.pcdRow.warn i{background:var(--warning-solid)}
.pcdRow.risk i{background:var(--danger-solid)}
.pcdRow>div{flex:1;min-width:0}
/* Titles wrap to two lines instead of ellipsizing — names must be readable
   at a glance; the meta line below keeps single-line ellipsis. */
.pcdRow b{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;color:var(--navy);font-size:13px;overflow:hidden}
.pcdRow>div span{display:block;color:var(--muted);font-size:12px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pcdRow .s360Chip{flex:none;margin-left:0}
.pcdRow .btn{flex:none;white-space:nowrap}
.pcdEmpty{border:1px dashed var(--border);border-radius:12px;background:var(--neutral-50);color:var(--muted);font-size:12px;padding:14px;text-align:center}
.pcdMore{border:0;background:none;color:var(--accent);font-size:12px;font-weight:800;cursor:pointer;justify-self:start;text-align:left;padding:0}
.pcdMore:hover{text-decoration:underline}
@media (max-width:1280px){.pcdGrid{grid-template-columns:1fr}.pcdStats{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:700px){.pcdStats{grid-template-columns:1fr}.pcdRow{flex-wrap:wrap}.pcdRow>div{flex:1 1 170px}.pcdRow .btn{margin-left:14px}}

/* ================= Operational Exam Prep (36-exam-prep.js) ================= */
.epxWrap{display:flex;flex-direction:column;gap:16px}
.epxHero{display:flex;gap:14px;align-items:flex-start;padding:18px}
.epxHero svg{width:28px;height:28px;color:var(--accent);flex:none;margin-top:2px}
.epxHero h3{margin:0 0 4px;font-size:16px;color:var(--text-primary)}
.epxHero p{margin:0;font-size:13px;color:var(--text-secondary);max-width:70ch}
.epxKpis .badge{margin-top:2px}
.epxModes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.epxMode{display:flex;flex-direction:column;gap:6px;padding:16px}
.epxModeHead{display:flex;align-items:center;gap:8px}
.epxModeHead svg{width:18px;height:18px;color:var(--accent)}
.epxModeHead h3{margin:0;font-size:14px;color:var(--text-primary)}
.epxMode p{margin:0;font-size:12.5px;color:var(--text-secondary);flex:1}
.epxMode small{color:var(--text-tertiary);font-size:12px}
.epxMode .btn{margin-top:8px;justify-self:start;align-self:flex-start}
.epxFocusRow{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.epxFocusRow label{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:var(--weight-semibold);color:var(--text-secondary)}
.epxFocusRow select{padding:6px 10px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-primary);font-size:12.5px}
.epxStaffBar{justify-content:flex-start}
.epxStaffBar .btn{margin-left:auto}
.epxOfficial{display:flex;flex-direction:column;gap:16px;padding:16px}
.epxOfficialTop{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.epxOfficialStats{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:12px;flex:1;min-width:220px}
.epxOfficialStat b{display:block;font-size:20px;color:var(--text-primary)}
.epxOfficialStat span{font-size:11px;color:var(--text-secondary)}
.epxOfficialStat small{display:block;font-size:10px;color:var(--text-tertiary)}
.epxOfficialSections{display:flex;flex-direction:column;gap:10px;border-top:1px solid var(--border,rgba(0,0,0,.08));padding-top:12px}
.epxSections{display:flex;flex-direction:column;gap:14px;padding:16px}
.epxSectionRow{display:flex;flex-direction:column;gap:8px}
.epxSectionMain{display:grid;grid-template-columns:220px minmax(0,1fr) 52px 76px;align-items:center;gap:12px}
.epxSectionMain>b{font-size:13px;color:var(--text-primary)}
.epxSectionMain>small{color:var(--text-tertiary);font-size:11.5px;text-align:right}
.epxSectionScore{font-weight:var(--weight-semibold);font-size:13px;color:var(--text-primary);text-align:right}
.epxSubRows{display:flex;flex-direction:column;gap:6px;padding-left:24px;border-left:2px solid var(--border-subtle);margin-left:8px}
.epxSubRow{display:grid;grid-template-columns:196px minmax(0,1fr) 44px 32px;align-items:center;gap:12px;font-size:12px;color:var(--text-secondary)}
.epxSubRow b{text-align:right;color:var(--text-primary)}
.epxSubRow small{color:var(--text-tertiary);text-align:right}
.epxMeter i.risk{background:var(--danger-solid)}
.epxMeter i.warn{background:var(--warning-solid)}
.epxMeter i.good{background:var(--success-solid)}
.epxRisk{color:var(--danger-solid)}
.epxWeakList{display:flex;flex-direction:column;gap:10px;padding:16px}
.epxWeak{display:grid;grid-template-columns:220px minmax(0,1fr) 44px auto;align-items:center;gap:12px}
.epxWeakName{display:grid;line-height:1.2}
.epxWeakName b{font-size:13px;color:var(--text-primary)}
.epxWeakName em{font-style:normal;font-size:11px;color:var(--text-tertiary)}
.epxWeak>b{text-align:right;font-size:13px}
.epxRecent{padding:0;overflow-x:auto}
.epxTable{width:100%;border-collapse:collapse;font-size:12.5px}
.epxTable th{text-align:left;padding:10px 14px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary);border-bottom:1px solid var(--border)}
.epxTable td{padding:10px 14px;border-bottom:1px solid var(--border-subtle);color:var(--text-secondary);vertical-align:middle}
.epxTable td b{color:var(--text-primary)}
.epxTable .examFocusMeter{display:inline-block;width:90px;vertical-align:middle;margin-right:6px}
/* practice player */
.epxPlayer{padding:20px;display:flex;flex-direction:column;gap:14px;max-width:860px}
.epxPlayerHead{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.epxPlayerHead h3{margin:2px 0 0;font-size:16px;color:var(--text-primary)}
.epxPlayerMeta{display:flex;align-items:center;gap:10px}
.epxTimer{font-variant-numeric:tabular-nums;font-weight:var(--weight-semibold);font-size:14px;color:var(--text-primary);border:1px solid var(--border);border-radius:var(--radius-pill);padding:4px 12px;background:var(--surface-sunken)}
.epxProgress{height:6px;border-radius:var(--radius-pill);background:var(--surface-sunken);overflow:hidden}
.epxProgress i{display:block;height:100%;background:var(--accent);border-radius:var(--radius-pill);transition:width .2s var(--ease-standard)}
.epxQSection{margin:0}
.epxStem{margin:0;font-size:15px;line-height:1.5;color:var(--text-primary)}
.epxChoices{display:flex;flex-direction:column;gap:8px}
.epxChoice{display:flex;align-items:center;gap:12px;text-align:left;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-primary);font-size:13.5px;cursor:pointer}
.epxChoice:hover:not(:disabled){border-color:var(--accent);background:var(--surface-raised)}
.epxChoice:disabled{cursor:default}
.epxChoice.selected{border-color:var(--accent);box-shadow:var(--focus-ring)}
.epxChoice.correct{border-color:var(--success-solid);background:color-mix(in srgb, var(--success-solid) 8%, var(--surface))}
.epxChoice.incorrect{border-color:var(--danger-solid);background:color-mix(in srgb, var(--danger-solid) 8%, var(--surface))}
.epxChoiceKey{flex:none;width:26px;height:26px;display:grid;place-items:center;border:1px solid var(--border);border-radius:50%;font-size:12px;font-weight:var(--weight-semibold);color:var(--text-secondary);background:var(--surface-sunken)}
.epxChoice.correct .epxChoiceKey{background:var(--success-solid);color:var(--on-primary);border-color:var(--success-solid)}
.epxChoice.incorrect .epxChoiceKey{background:var(--danger-solid);color:var(--on-primary);border-color:var(--danger-solid)}
.epxExplain{font-size:13px;line-height:1.5;padding:12px 14px;border-radius:var(--radius-md);border:1px solid var(--border);color:var(--text-secondary)}
.epxExplain.good{border-color:var(--success-solid)}
.epxExplain.bad{border-color:var(--danger-solid)}
.epxExplain b{color:var(--text-primary)}
.epxPlayerFoot{display:flex;justify-content:space-between;align-items:center;gap:12px}
/* results */
.epxResults{padding:20px;display:flex;flex-direction:column;gap:16px;max-width:860px}
.epxResultsHead{display:flex;align-items:center;gap:16px}
.epxResultDonut{width:64px;height:64px}
.epxResultsHead h3{margin:2px 0 6px;font-size:18px;color:var(--text-primary)}
.epxResultSections{display:flex;flex-direction:column;gap:8px}
.epxReview summary{cursor:pointer;font-size:13px;font-weight:var(--weight-semibold);color:var(--text-primary)}
.epxReviewItem{border-left:3px solid var(--border);padding:10px 0 10px 14px;margin-top:12px;font-size:13px;color:var(--text-secondary)}
.epxReviewItem.good{border-left-color:var(--success-solid)}
.epxReviewItem.bad{border-left-color:var(--danger-solid)}
.epxReviewItem .epxStem{font-size:13.5px;margin:4px 0 6px}
.epxBankNote{padding:14px 16px}
.epxBankNote>div{display:flex;gap:12px;align-items:flex-start}
.epxBankNote svg{width:18px;height:18px;color:var(--accent);flex:none;margin-top:2px}
.epxBankNote b{font-size:13px;color:var(--text-primary)}
.epxBankNote p{margin:2px 0 0}
@media (max-width:1100px){.epxModes{grid-template-columns:1fr}.epxSectionMain,.epxWeak{grid-template-columns:minmax(0,1fr) 52px}.epxSectionMain>b,.epxWeakName{grid-column:1 / -1}.epxSectionMain>small,.epxSubRow small{display:none}.epxSubRow{grid-template-columns:minmax(0,1fr) 44px}.epxSubRow span{grid-column:1 / -1}}

/* exam date setup + countdown */
.epxSetup{max-width:720px}
.epxDateRow{display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap}
.epxDateRow input[type="date"]{padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);color:var(--text-primary);font-size:13.5px}
.epxCountdown{display:flex;align-items:center;gap:14px;padding:14px 18px}
.epxCountdown svg{width:22px;height:22px;color:var(--accent);flex:none}
.epxCountdown>div{flex:1;display:grid;line-height:1.35}
.epxCountdown b{font-size:15px;color:var(--text-primary)}
.epxCountdown span{font-size:12.5px;color:var(--text-tertiary)}
.epxCountdown.soon svg{color:var(--warning-solid)}
.epxCountdown .epxDateRow{margin-top:0}
/* study plan */
.epxPlanEmpty{display:flex;gap:12px;align-items:flex-start;padding:16px;max-width:820px}
.epxPlanEmpty svg{width:20px;height:20px;color:var(--accent);flex:none;margin-top:2px}
.epxPlanEmpty p{margin:0;font-size:13px;color:var(--text-secondary)}
.epxPlanList{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.epxPlanDay{padding:14px 16px;display:flex;flex-direction:column;gap:8px}
.epxPlanDay.today{border-color:var(--accent);box-shadow:var(--shadow-sm)}
.epxPlanDay header{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.epxPlanDay header b{font-size:13px;color:var(--text-primary)}
.epxPlanDay header span{font-size:11px;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.04em}
.epxPlanDay.today header span{color:var(--accent);font-weight:var(--weight-semibold)}
.epxPlanFocus{margin:0;font-size:12px;font-weight:var(--weight-semibold);color:var(--text-secondary)}
.epxPlanDay ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.epxTask{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--text-secondary)}
.epxTask svg{width:15px;height:15px;color:var(--text-tertiary);flex:none}
.epxTask span{flex:1;display:grid;line-height:1.3}
.epxTask span small{color:var(--text-tertiary);font-size:11px}
.epxTask.done span{text-decoration:line-through;color:var(--text-tertiary)}
.epxTaskDone{font-style:normal;display:inline-flex;align-items:center;gap:4px;font-size:11.5px;color:var(--success-solid);font-weight:var(--weight-semibold)}
.epxTaskDone svg{color:var(--success-solid)}
.epxTaskRest span{color:var(--text-tertiary)}
/* flashcards */
.epxCard{display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center;text-align:center;min-height:220px;padding:26px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface-raised);cursor:pointer;box-shadow:var(--shadow-xs)}
.epxCard:hover{border-color:var(--accent)}
.epxCard.flipped{cursor:default;border-color:var(--accent);background:var(--surface)}
.epxCardText{margin:0;font-size:16px;line-height:1.55;color:var(--text-primary);max-width:56ch}
.epxCard.flipped .epxCardText{font-size:14.5px}
.epxCardHint{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text-tertiary)}
.epxCardHint svg{width:13px;height:13px}
.epxDeckActions{display:flex;gap:10px}

/* ---------- PowerSkill video upload progress (bar pattern like .epxProgress) ---------- */
.videoUploadProgress{display:grid;gap:var(--space-1);margin-top:var(--space-2)}
.videoUploadProgress i{display:block;height:8px;border-radius:var(--radius-pill);background:var(--surface-sunken);overflow:hidden}
.videoUploadProgress em{display:block;height:100%;width:0;border-radius:var(--radius-pill);background:var(--accent);transition:width var(--duration-base) var(--ease-standard)}
.videoUploadProgress span{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-secondary)}
