/* ============================================================================
 * Dodecahedron (Tutoring) — Kairos glass skin (studio/portal-kits/dodecahedron)
 * Identity: deep institutional purple base, backlit glass, violet domain
 * accent (--kairos-cube #7b6cf6), grounded/steady motion. Presentation only.
 * Load AFTER the page's inline <style>.
 * ========================================================================== */

:root{
  --kairos-bg:#0d0a1f;
  --kairos-bg-deep:#070511;
  --kairos-purple:#7c4dff;
  --kairos-purple-soft:#a78bfa;
  --kairos-dodeca:#ff8fab;
  --kairos-glass:rgba(255,255,255,.06);
  --kairos-border:rgba(255,255,255,.14);
  --kairos-text:#f4f1ff;
  --kairos-muted:#a9a3c4;
  --kairos-good:#4fd1c5;
  --kairos-warn:#f2b134;
  --kairos-danger:#ff8d8d;
  --kairos-grad-glass:linear-gradient(160deg,rgba(255,255,255,.10) 0%,rgba(255,255,255,.02) 100%);
  --kairos-inset:inset 0 1px 0 rgba(255,255,255,.08);
  --kairos-shadow:0 18px 48px rgba(0,0,0,.5);
  --kairos-glow-dodeca:0 0 24px rgba(255,143,171,.30);
  --kairos-ease-loop:cubic-bezier(.65,0,.35,1);

  /* Remap the page + topbar-shell vars */
  --bg:var(--kairos-bg);
  --panel:#161130;
  --primary:var(--kairos-dodeca);
  --primary2:#ffb3c7;
  --text:var(--kairos-text);
  --muted:var(--kairos-muted);
  --line:var(--kairos-border);
  --accent:rgba(255,143,171,.14);
  --good:rgba(79,209,197,.12);
  --warn:rgba(242,177,52,.12);
  --danger:rgba(255,141,141,.12);
  --ok:var(--kairos-good);
  --orange:var(--kairos-warn);
  --red:var(--kairos-danger);
}

/* ---------- Base ---------- */
html,body{
  background:radial-gradient(120% 120% at 50% 0%,#1a1236 0%,#0d0a1f 55%,#070511 100%) fixed, var(--kairos-bg-deep);
  color:var(--kairos-text);
  font-family:"Inter","Segoe UI",system-ui,-apple-system,"Helvetica Neue",Arial,sans-serif;
  -webkit-font-smoothing:antialiased;
}

/* ---------- Sidebar — matched to the Tetrahedron shell geometry ---------- */
.sidebar{
  background:
    radial-gradient(circle at 18% 10%, rgba(124,77,255,.16), transparent 30%),
    linear-gradient(180deg, rgba(13,10,31,.92) 0%, rgba(7,5,17,.96) 100%);
  border-right:1px solid var(--kairos-border);
  border-radius:0 24px 24px 0;
  padding:18px 14px;
  box-shadow:var(--kairos-inset);
  position:relative; z-index:70;
}
.brand-wrap{gap:12px; margin-bottom:18px;}
.brand-text{font-size:18px; font-weight:800; letter-spacing:.08em;}
.brand-subtitle{font-size:10px; letter-spacing:.14em;}
.portal-chip{margin-bottom:16px;}
.nav a{border-radius:14px; font-weight:600; padding:11px 12px; margin-bottom:6px;}
.brand-subtitle{color:var(--kairos-dodeca); opacity:1;}
.portal-chip{
  background:rgba(255,143,171,.10);
  border:1px solid rgba(255,143,171,.35);
  color:var(--kairos-dodeca);
}
.nav a{color:var(--kairos-text); opacity:.85;}
.nav a:hover{background:var(--kairos-glass); opacity:1;}
.nav a.active{
  background:rgba(255,143,171,.14);
  box-shadow:inset 2px 0 0 var(--kairos-dodeca), var(--kairos-inset);
  color:#fff; opacity:1;
}
.sidebar-toggle{
  background:var(--kairos-glass);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.sidebar-footer-row{border-top:1px solid var(--kairos-border);}

/* Collapsed sidebar tooltips: Cube ships its own canonical #kGlobalTooltip
   (injected by cube-student-canonical-sidebar.js) — we only re-dress it.
   No second tooltip system here. */
#kGlobalTooltip{
  background:#161130 !important;
  border:1px solid rgba(255,143,171,.45) !important;
  color:var(--kairos-text) !important;
  box-shadow:var(--kairos-shadow), var(--kairos-glow-dodeca) !important;
}
#kGlobalTooltipArrow{
  background:#161130 !important;
  border-left:1px solid rgba(255,143,171,.45) !important;
  border-top:1px solid rgba(255,143,171,.45) !important;
}

/* Brand orbit — the Cube solid, grounded and steady */
.dodeca-orbit{position:relative; width:46px; height:46px; flex-shrink:0;}
.dodeca-orbit .dodeca-solid{
  position:absolute; inset:0; margin:auto;
  width:26px; height:26px;
  filter:drop-shadow(0 0 10px rgba(255,143,171,.35));
  transform-origin:center; animation:dodeca-turn 24s linear infinite;
}
.dodeca-orbit .dodeca-solid polygon,
.dodeca-orbit .dodeca-solid rect{
  fill:rgba(255,143,171,.16);
  stroke:var(--kairos-dodeca);
  stroke-width:1.6; stroke-linejoin:round;
}
.dodeca-orbit .c-ring{
  position:absolute; inset:1px;
  border:1px dashed rgba(255,143,171,.30);
  border-radius:50%;
}
.dodeca-orbit .c-rotor{position:absolute; inset:0; animation:dodeca-spin 18s linear infinite;}
.dodeca-orbit .c-rotor i{
  position:absolute; top:50%; left:50%;
  width:5px; height:5px; margin:-2.5px;
  border-radius:50%;
  background:var(--kairos-dodeca);
  box-shadow:0 0 8px rgba(255,143,171,.7);
  transform:rotate(var(--a)) translateY(-21px);
}
@keyframes dodeca-spin{to{transform:rotate(360deg);}}
@keyframes dodeca-turn{
  0%{transform:translateY(0) rotate(0deg);}
  50%{transform:translateY(-2px) rotate(180deg);}
  100%{transform:translateY(0) rotate(360deg);}
}

/* Nav icons (inline SVG) */
.nav-icon svg{width:18px; height:18px; display:block;}
.nav a .nav-icon{color:var(--kairos-muted);}
.nav a:hover .nav-icon{color:var(--kairos-text);}
.nav a.active .nav-icon{color:var(--kairos-dodeca);}

/* ---------- Topbar + widgets ---------- */
.topbar{
  background:rgba(13,10,31,.55);
  backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
  border-bottom:1px solid var(--kairos-border);
}
.school-sub{color:var(--kairos-dodeca);}
.user-box, .kairos-user-box{background:var(--kairos-glass); border:1px solid var(--kairos-border);}
.school-logo, .user-avatar{background:rgba(255,143,171,.12);}
.kairos-notif-trigger{
  background:var(--kairos-glass);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.kairos-notif-trigger:hover, .kairos-user-box:hover{background:rgba(255,255,255,.10);}
.kairos-notif-badge{background:var(--kairos-dodeca); color:#2b0a14;}
.kairos-notif-dropdown, .kairos-user-dropdown{
  background:var(--panel);
  border:1px solid var(--kairos-border);
  box-shadow:var(--kairos-shadow);
}
.kairos-user-menu-header{background:rgba(255,255,255,.04); border-bottom:1px solid var(--kairos-border);}
.kairos-user-menu-name{color:var(--kairos-text);}
.kairos-user-menu-role{color:var(--kairos-muted);}
.kairos-user-menu-item{color:var(--kairos-text);}
.kairos-user-menu-item:hover{background:rgba(255,143,171,.10);}
.kairos-user-menu-item.muted{color:var(--kairos-muted);}
.kairos-user-menu-item.logout{color:var(--kairos-danger);}
.kairos-user-menu-divider{background:var(--kairos-border);}
.kairos-notif-header, .kairos-notif-footer{background:var(--panel); border-color:rgba(255,255,255,.08);}
.kairos-notif-item{border-bottom:1px solid rgba(255,255,255,.07);}
.kairos-notif-item:hover{background:rgba(255,255,255,.05);}
.kairos-notif-item.unread{background:rgba(255,143,171,.08);}
.kairos-notif-item.unread::before{background:var(--kairos-dodeca);}
.kairos-notif-title,.kairos-notif-item-title{color:var(--kairos-text);}
.kairos-notif-eyebrow,.kairos-notif-meta,.kairos-notif-time,.kairos-notif-item-body,.kairos-notif-empty p{color:var(--kairos-muted);}
.kairos-notif-action,.kairos-notif-link,.kairos-notif-footer a{color:var(--kairos-dodeca);}
.kairos-filter-chip{background:rgba(255,255,255,.06); border:1px solid var(--kairos-border); color:var(--kairos-muted);}
.kairos-filter-chip.active{background:rgba(255,143,171,.16); color:var(--kairos-dodeca); border-color:rgba(255,143,171,.4);}

/* ---------- Content ---------- */
.sec-title{color:var(--kairos-text);}
.sec-meta{color:var(--kairos-muted);}
.sec-link{color:var(--kairos-dodeca);}

/* Hero — keep the violet identity, deepen it into the glass world */
.hero{
  background:
    radial-gradient(circle at 80% 10%, rgba(255,143,171,.22), transparent 45%),
    linear-gradient(135deg,#4a1230 0%,#6e1e44 55%,#a1355e 100%);
  border:1px solid rgba(167,139,250,.30);
  box-shadow:var(--kairos-glow-dodeca), var(--kairos-inset);
}
.hero-kicker{background:rgba(255,255,255,.12); border-color:rgba(255,255,255,.2);}
.hero-stat{background:rgba(255,255,255,.08); border-color:rgba(255,255,255,.14);}

/* Buttons & pills */
.btn{
  background:var(--kairos-glass);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.btn:hover{border-color:var(--kairos-dodeca);}
.btn.primary{
  background:linear-gradient(135deg,#e26e8f 0%,#ff8fab 100%);
  color:#2b0a14;
  border-color:transparent;
  box-shadow:var(--kairos-glow-dodeca), var(--kairos-inset);
}
.btn.primary:hover{background:linear-gradient(135deg,#ef7fa0 0%,#ffb3c7 100%);}
.pill.good{background:rgba(79,209,197,.14); color:var(--kairos-good);}
.pill.warn{background:rgba(242,177,52,.14); color:var(--kairos-warn);}
.pill.danger{background:rgba(255,141,141,.14); color:var(--kairos-danger);}
.pill.soft{background:rgba(255,143,171,.14); border:1px solid rgba(255,143,171,.35); color:var(--kairos-dodeca);}
.pill.neutral{background:rgba(255,255,255,.08); color:var(--kairos-muted);}

/* Home layout polish — the hero stays lean; the snapshot panel owns the
   numbers (hero-stats duplicated Courses/Tasks/Overall — removed) */
.hero-stats{display:none;}
.side-card{
  background:var(--kairos-grad-glass);
  background-color:rgba(22,17,48,.72);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
  box-shadow:var(--kairos-inset);
}
.empty{
  background:rgba(255,255,255,.03);
  border:1px dashed var(--kairos-border);
  color:var(--kairos-muted);
}

/* Cards (work list, snapshot, nudges) */
.work-card, .snap-row, .socrates-nudge, .card{
  background:var(--kairos-grad-glass);
  background-color:rgba(22,17,48,.72);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
  box-shadow:var(--kairos-inset);
}
.work-card:hover{border-color:rgba(255,143,171,.5); box-shadow:0 0 24px rgba(255,143,171,.14), var(--kairos-inset);}
.work-title{color:var(--kairos-text);}
.work-meta, .work-copy{color:var(--kairos-muted);}
.work-glyph{background:rgba(255,143,171,.12); border:1px solid rgba(255,143,171,.3);}
.snap-stat .value{color:var(--kairos-text);}
.snap-stat .label{color:var(--kairos-muted);}
.snap-bar{background:rgba(255,255,255,.10);}
.snap-bar-fill{background:linear-gradient(90deg,#5b4bd6,#a78bfa);}
.progress-bar{background:rgba(255,255,255,.18);}

/* ---------- Focus + reduced motion ---------- */
a:focus-visible, button:focus-visible{
  outline:2px solid var(--kairos-dodeca);
  outline-offset:2px;
  border-radius:6px;
}
@media (prefers-reduced-motion: reduce){
  .dodeca-orbit .dodeca-solid, .dodeca-orbit .c-rotor{animation:none !important;}
  *,*::before,*::after{
    transition-duration:.001ms !important;
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
  }
}


/* Collapsed sidebar polish */
body.sidebar-collapsed .dodeca-orbit{width:40px; height:40px; margin:0 auto;}
body.sidebar-collapsed .dodeca-orbit .dodeca-solid{width:22px; height:22px;}
body.sidebar-collapsed .dodeca-orbit .c-rotor i{transform:rotate(var(--a)) translateY(-18px);}
body.sidebar-collapsed .brand-wrap{justify-content:center;}
body.sidebar-collapsed .nav a{justify-content:center;}
@media (prefers-reduced-motion: reduce){ .dodeca-orbit .dodeca-solid{animation:none !important;} }

/* ============================================================
 * Dodeca tutor family (students / workshops / hours-payments /
 * messages / calendar / tasks-practice / library / reports / profile)
 * ------------------------------------------------------------
 * Local kits themed here:
 *   - Shared ops template (workshops / hours-payments / tasks-practice /
 *     library / reports / profile): .hero-stats KPI band, .quick-card,
 *     .panel, .item, bare .good/.warn/.danger chips.
 *   - My Students: ms-* kit (KPI band, filter bar, empty state).
 *   - Calendar: cal-* kit + event-type token pairs consumed by
 *     .upcoming-item / .legend-dot / .event-card.
 *   - Messages: ops runtime kit (summary strip, panels, lane nav,
 *     thread cards, bubbles, composer) — markup injected by
 *     messaging-threads-runtime / tetra-messages-runtime.
 * Shell, topbar widgets, .hero, .btn and .pill.good|warn|danger are
 * already themed by earlier skin sections; below are the family locals.
 * ============================================================ */

/* The shared skin hides .hero-stats for the Home layout; on this family
   the hero stats ARE the page KPI band (kpi-* ids are hydrated by JS),
   so re-open them wherever a real .hero ships them. Home has no .hero. */
.hero .hero-stats{display:grid;}

/* Card surfaces (union across the family) */
.quick-card, .panel, .ms-kpi-card,
.cal-header, .side-panel, .cal-main,
.summary-card{
  background:var(--kairos-grad-glass);
  background-color:rgba(22,17,48,.72);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
  box-shadow:var(--kairos-inset);
}

/* Inner rows (roster entries, hour log, workshops, tasks, reports,
   library resources, profile certs) */
.item{
  background:rgba(255,255,255,.04);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.item h3{color:var(--kairos-text);}
.item p{color:var(--kairos-muted);}

/* Bare state chips — locals ship light pastels + dark ink
   (.good{...#18794e} etc.); re-ink on the Kairos tints */
.good{background:rgba(79,209,197,.14); color:var(--kairos-good);}
.warn{background:rgba(242,177,52,.14); color:var(--kairos-warn);}
.danger{background:rgba(255,141,141,.14); color:var(--kairos-danger);}

/* ---------- My Students (ms-* kit) ---------- */
.ms-kpi-label{color:var(--kairos-muted);}
.ms-kpi-value{color:var(--kairos-text);}
.ms-filter-bar input,
.ms-filter-bar select{
  background:rgba(0,0,0,.28);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.ms-filter-bar input::placeholder{color:rgba(169,163,196,.7);}
.ms-filter-bar input:focus,
.ms-filter-bar select:focus{
  border-color:var(--kairos-dodeca);
  box-shadow:0 0 0 3px rgba(255,143,171,.18);
}
.ms-filter-bar select option{background:#161130; color:var(--kairos-text);}
.ms-empty-state{color:var(--kairos-muted);}
.ms-empty-state .ms-empty-title{color:var(--kairos-text);}

/* Library / profile JS paints inline pastel backgrounds on .item
   (CAT_COLOR map, cert cards) while the text inherits the dark-theme
   ink — unreadable. Inline style needs !important to flip. */
#lib-recommended .item, #lib-all .item{background:rgba(255,255,255,.04) !important;}
#prf-certs .item{background:rgba(79,209,197,.10) !important;}

/* ---------- Calendar (cal-* kit) ---------- */
/* Event-type token pairs — locals define light *-bg / dark *-fg pairs on
   :root; .upcoming-item, .legend-dot and .event-card all read them, so
   re-scoping the pairs on the layout root flips every consumer at once. */
.calendar-layout{
  --session-bg:rgba(77,182,255,.16);    --session-fg:#7cc7ff;
  --workshop-bg:rgba(255,143,171,.16);  --workshop-fg:#ff8fab;
  --prep-bg:rgba(242,177,52,.16);       --prep-fg:#f2b134;
  --review-bg:rgba(79,209,197,.16);     --review-fg:#4fd1c5;
  --compliance-bg:rgba(255,141,141,.16);--compliance-fg:#ff8d8d;
}
.k-btn{
  background:var(--kairos-glass);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.k-btn:hover{border-color:var(--kairos-dodeca); background:rgba(255,143,171,.10);}
.k-btn.primary{
  background:linear-gradient(135deg,#e26e8f 0%,#ff8fab 100%);
  color:#2b0a14;
  border-color:transparent;
  box-shadow:var(--kairos-glow-dodeca), var(--kairos-inset);
}
.k-btn.primary:hover{background:linear-gradient(135deg,#ef7fa0 0%,#ffb3c7 100%);}
.ch-title{color:var(--kairos-text);}
.ch-sub{color:var(--kairos-muted);}
.sp-head{border-bottom:1px solid var(--kairos-border);}
.sp-title{color:var(--kairos-text);}

/* Mini month */
.mini-month-btn{color:var(--kairos-muted);}
.mini-month-btn:hover{background:rgba(255,255,255,.08); color:var(--kairos-text);}
.mini-day{color:var(--kairos-text);}
.mini-day.muted{color:rgba(169,163,196,.4);}
.mini-day.today{background:var(--kairos-dodeca); color:#2b0a14;}

/* Week grid */
.view-btn{
  background:var(--kairos-glass);
  border:1px solid var(--kairos-border);
  color:var(--kairos-muted);
}
.view-btn:hover{border-color:var(--kairos-dodeca); color:var(--kairos-text);}
.view-btn.active{
  background:rgba(255,143,171,.16);
  border-color:rgba(255,143,171,.4);
  color:var(--kairos-dodeca);
}
.wg-col-hdr.today-col{background:rgba(255,143,171,.10);}
.cal-empty{color:var(--kairos-muted);}
.ce-label{color:var(--kairos-text);}

/* ---------- Messages (ops runtime kit) ---------- */
.panel-head, .conversation-head{
  background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,0));
  border-bottom:1px solid var(--kairos-border);
}
.search, .composer-box textarea{
  background:rgba(0,0,0,.28);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.search::placeholder, .composer-box textarea::placeholder{color:rgba(169,163,196,.7);}
.search:focus, .composer-box textarea:focus{
  border-color:var(--kairos-dodeca);
  box-shadow:0 0 0 3px rgba(255,143,171,.18);
}

/* Lane nav (left panel) */
.nav-item{
  background:rgba(255,255,255,.04);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.nav-item:hover{border-color:var(--kairos-dodeca); background:rgba(255,143,171,.08);}
.nav-item.active{
  background:rgba(255,143,171,.14);
  border-color:rgba(255,143,171,.4);
  color:var(--kairos-dodeca);
}
.nav-count{
  background:rgba(255,255,255,.08);
  border:1px solid var(--kairos-border);
  color:var(--kairos-muted);
}

/* Filter pills + lane/state tags (locals paint pastel chips via page
   *-bg/*-fg vars; .pill scoped to the ops page — the shared template
   pills keep their .pill.good|warn|danger skin) */
.ops-page .pill{background:rgba(255,143,171,.14); color:var(--kairos-dodeca); border-color:transparent;}
.ops-page .tag{
  background:rgba(255,255,255,.06);
  border-color:var(--kairos-border);
  color:var(--kairos-muted);
}
.ops-page .tag.ops, .ops-page .tag.scheduled{background:rgba(255,143,171,.14); color:var(--kairos-dodeca); border-color:transparent;}
.ops-page .tag.admin, .ops-page .tag.warning{background:rgba(242,177,52,.14); color:var(--kairos-warn); border-color:transparent;}
.ops-page .tag.good, .ops-page .tag.published{background:rgba(79,209,197,.14); color:var(--kairos-good); border-color:transparent;}
.ops-page .tag.danger{background:rgba(255,141,141,.14); color:var(--kairos-danger); border-color:transparent;}
.ops-page .tag.draft{background:rgba(255,255,255,.08); color:var(--kairos-muted); border-color:transparent;}
.empty-note{
  background:rgba(255,255,255,.03);
  border:1px dashed var(--kairos-border);
  color:var(--kairos-muted);
}

/* Thread list (runtime-injected cards) */
.thread-card{
  background:rgba(255,255,255,.04);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.thread-card:hover{
  border-color:rgba(255,143,171,.45);
  box-shadow:0 0 24px rgba(255,143,171,.14), var(--kairos-inset);
}
.thread-card.active{
  background:rgba(255,143,171,.10);
  border-color:rgba(255,143,171,.5);
  box-shadow:var(--kairos-inset);
}
.thread-title{color:var(--kairos-text);}
.thread-meta, .thread-preview, .timestamp{color:var(--kairos-muted);}

/* Conversation column */
.conversation-body{background:rgba(7,5,17,.35);}
.message-day span{
  background:rgba(22,17,48,.85);
  border:1px solid var(--kairos-border);
  color:var(--kairos-muted);
}
.message-bubble{
  background:var(--kairos-grad-glass);
  background-color:rgba(22,17,48,.72);
  border:1px solid var(--kairos-border);
  box-shadow:var(--kairos-inset);
}
.bubble-meta{color:var(--kairos-muted);}
.bubble-text{color:var(--kairos-text);}
/* Outgoing: the one dodeca-rose moment in the thread — dark ink on it */
.message-row.outgoing .message-bubble{
  background:linear-gradient(135deg,#e26e8f 0%,#ff8fab 100%);
  border-color:transparent;
  color:#2b0a14;
  box-shadow:var(--kairos-glow-dodeca), var(--kairos-inset);
}
.message-row.outgoing .bubble-meta,
.message-row.outgoing .bubble-text{color:#2b0a14;}
.attachment{
  background:rgba(255,255,255,.10);
  border:1px solid var(--kairos-border);
}
.message-row.outgoing .attachment{
  background:rgba(255,255,255,.32);
  border-color:rgba(43,10,20,.25);
}

/* Composer */
.composer{
  background:rgba(22,17,48,.72);
  border-top:1px solid var(--kairos-border);
}
.tool-chip{
  background:var(--kairos-glass);
  border:1px solid var(--kairos-border);
  color:var(--kairos-muted);
}
.composer-note{color:var(--kairos-muted);}

/* ============================================================
 * Dodeca tutoradmin family (tutors / students / programs /
 * schedules / reports / locations / moocs / communications /
 * hours-payments / settings)
 * ------------------------------------------------------------
 * Local kits themed here:
 *   - Hero template (tutors / hours-payments / locations / moocs /
 *     settings): same markup as the tutor ops template — .hero,
 *     .hero-stats, .quick-card/.panel, .item, bare .good/.warn/
 *     .danger are already themed by the shared sections + the tutor
 *     family (".hero .hero-stats{display:grid}" is global, so the
 *     KPI band re-opens here too). Nothing local left to add.
 *   - Ops list kit (students / programs / reports): .ops-header,
 *     .kpi-band/.kpi-chip, .filter-bar, .surface-panel, row cards
 *     with status left-borders (risk-* / type-* / st-*),
 *     .prog-meta-cell, .compliance-row, .empty-state.
 *   - Schedules: .sched-header, .kpi-strip (kc-* chips), day board
 *     (.session-row, .today-tag), .mini-btn, .pill.prog, sidebar
 *     rows (.avail-row/.conflict-row/.slot-row + .avail-status,
 *     which read the LOCAL --good-fg/--warn-fg tokens the skin
 *     does not remap), .board-empty. .k-btn/.side-panel/.sp-head
 *     come from the tutor calendar rules.
 *   - Communications: ops runtime kit — already covered end to end
 *     by the tutor Messages rules (.panel-head/.conversation-head,
 *     .search, .nav-item/.nav-count, .thread-card, bubbles,
 *     .composer, .ops-page pills/tags, .empty-note); only a hero
 *     copy ink touch-up ships here.
 * Shell, topbar widgets (topbar-shell.js swaps the static .notif
 * for the themed kairos widget), .btn/.pill.* and the token remap
 * (--primary/--muted/--line/--accent/--good...) handle the rest —
 * below are only the hardcoded-light locals.
 * ============================================================ */

/* Card surfaces (union) — locals ship #fff + a light --shadow token
   the skin never remaps, so the drop shadow is re-inked too */
.ops-header, .kpi-chip, .filter-bar, .surface-panel,
.sched-header, .session-row{
  background:var(--kairos-grad-glass);
  background-color:rgba(22,17,48,.72);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
  box-shadow:var(--kairos-inset);
}
.session-row:hover{border-color:rgba(255,143,171,.5);}

/* KPI accent bars (kpi-* on students/programs/reports, kc-* on
   schedules) — locals hardcode pastel hex; align on the state set */
.kpi-chip.kpi-good, .kpi-chip.kc-good{border-left-color:var(--kairos-good);}
.kpi-chip.kpi-warn, .kpi-chip.kc-warn{border-left-color:var(--kairos-warn);}
.kpi-chip.kpi-alert, .kpi-chip.kc-alert{border-left-color:var(--kairos-danger);}

/* Filter toolbar controls (search/select on the ops kit, select +
   date picker on schedules — the [type=date] variant is needed to
   match the local (0,2,1) specificity) */
.filter-bar input, .filter-bar select,
.filter-bar input[type=date]{
  background:rgba(0,0,0,.28);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
.filter-bar input::placeholder{color:rgba(169,163,196,.7);}
.filter-bar input:focus, .filter-bar select:focus{
  border-color:var(--kairos-dodeca);
  box-shadow:0 0 0 3px rgba(255,143,171,.18);
}
/* schedules paints a lavender focus outline on its own selector */
.filter-bar select:focus, .filter-bar input[type=date]:focus{
  outline-color:rgba(255,143,171,.55);
}
.filter-bar select option{background:#161130; color:var(--kairos-text);}

/* Status row cards (JS-hydrated) — keep the left accent bar, flip
   the pastel wash to dark tints */
.prog-card, .report-item, .student-item{
  background:rgba(255,255,255,.04);
  border-color:var(--kairos-border);
  color:var(--kairos-text);
}
.prog-card.type-academic{border-left-color:#7cc7ff; background:rgba(77,182,255,.10);}
.prog-card.type-enrichment{border-left-color:var(--kairos-good); background:rgba(79,209,197,.10);}
.prog-card.type-specialized{border-left-color:var(--kairos-purple-soft); background:rgba(167,139,250,.10);}
.prog-card.type-compliance{border-left-color:var(--kairos-warn); background:rgba(242,177,52,.10);}
.report-item.st-pending{border-left-color:var(--kairos-danger); background:rgba(255,141,141,.08);}
.report-item.st-submitted{border-left-color:var(--kairos-warn);}
.report-item.st-reviewed{border-left-color:var(--kairos-good);}
.report-item.st-flagged{border-left-color:#ff6b6b; background:rgba(255,141,141,.14);}
.student-item.risk-high{border-left-color:var(--kairos-danger); background:rgba(255,141,141,.08);}
.student-item.risk-medium{border-left-color:var(--kairos-warn);}
.student-item.risk-low{border-left-color:var(--kairos-good);}

/* Inner rows / meta cells (borders already flip via the --line
   remap; only the hardcoded #fff / #fcfcff washes need re-inking) */
.prog-meta-cell,
.compliance-row, .avail-row, .slot-row{background:rgba(255,255,255,.04);}
.conflict-row{
  background:rgba(255,141,141,.08);
  border-color:rgba(255,141,141,.35);
  border-left-color:var(--kairos-danger);
}
/* .avail-status reads local --good-fg/--warn-fg (dark inks, not
   remapped by the skin) — re-point at the Kairos states */
.avail-status.open{color:var(--kairos-good);}
.avail-status.partial{color:var(--kairos-warn);}

/* Empty states (dashed borders remap on their own) */
.empty-state, .board-empty{background:rgba(255,255,255,.03);}

/* Schedules board chrome */
.day-group-header span.today-tag{color:#2b0a14;} /* bg auto-remaps to dodeca */
.pill.prog{background:rgba(77,182,255,.16); color:#7cc7ff;}
.mini-btn{
  background:var(--kairos-glass);
  border:1px solid var(--kairos-border);
  color:var(--kairos-text);
}
/* declared after the local .mini-btn:hover so the rose CTA keeps its
   dark ink on hover */
.mini-btn.primary{
  background:linear-gradient(135deg,#e26e8f 0%,#ff8fab 100%);
  color:#2b0a14;
  border-color:transparent;
  box-shadow:var(--kairos-glow-dodeca), var(--kairos-inset);
}
.mini-btn.primary:hover{
  background:linear-gradient(135deg,#ef7fa0 0%,#ffb3c7 100%);
  color:#2b0a14;
}

/* Communications hero copy — local sets p to --muted (fine on the
   old white hero, dim on the skinned rose gradient) */
.ops-page .hero p{color:rgba(244,241,255,.86);}
