@import '_content/CSI.UI/CSI.UI.jigg7oqsvf.bundle.scp.css';

/* /Components/CourseHealthCard.razor.rz.scp.css */
/* Slice 1F.1 — scoped chrome for CourseHealthCard. Inline horizontal
   layout: status pill · timestamp · deep-link aligned right. */

.csi-course-health-row[b-6vj7xbrp7c] {
    display: flex;
    align-items: center;
    gap: var(--csi-space-md);
    flex-wrap: wrap;
}

.csi-course-health-status[b-6vj7xbrp7c] {
    flex-shrink: 0;
}

.csi-course-health-meta[b-6vj7xbrp7c] {
    color: var(--csi-fg-secondary);
    font-size: 13px;
    flex: 1 1 auto;
    min-width: 0;
}

.csi-course-health-deep-link[b-6vj7xbrp7c] {
    flex-shrink: 0;
    font-size: 13px;
    color: var(--csi-brand-primary);
    text-decoration: none;
}

.csi-course-health-deep-link:hover[b-6vj7xbrp7c] {
    text-decoration: underline;
}

.csi-course-health-failure-reason[b-6vj7xbrp7c] {
    font-size: 12px;
    margin-top: var(--csi-space-sm);
}
/* /Pages/Academics/CollegeDetail.razor.rz.scp.css */
/* Page-scoped styles for CollegeDetail.

   Block-scoped via Blazor's CSS isolation — only applies to markup
   rendered by CollegeDetail.razor. The DetailLayout / DetailCard /
   DetailColumns / DetailField primitives carry the chrome; this
   file just adds the People-tile grid + the in-card people / dept
   tables + small page-specific utilities (back button, breadcrumb
   separator, count-pill alignment).

   Mirrors the pattern used by TermGroupDetail.razor.css from #147a
   so page-scoped CSS for academic-family detail pages stays
   recognizable. */

/* Breadcrumb separator — DetailLayout's `csi-detail-breadcrumb` class
   wraps the slot, but the separator span lives in our markup. Pulled
   from the §11/D11 contract: forward slash, never chevron. */
.csi-college-bc-sep[b-2fdaob6cyo] {
    color: var(--csi-fg-muted);
    margin: 0 4px;
}

.csi-college-back-btn[b-2fdaob6cyo] {
    display: inline-flex;
    align-items: center;
    padding: 6px 12px;
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-sm);
    background: var(--csi-bg-surface);
    color: var(--csi-fg-primary);
    text-decoration: none;
    font-size: 13px;
    line-height: 1.2;
}

.csi-college-back-btn:hover[b-2fdaob6cyo],
.csi-college-back-btn:focus-visible[b-2fdaob6cyo] {
    background: var(--csi-bg-raised);
    text-decoration: none;
    outline: none;
}

/* Empty-state copy for the College Resources card (open item per
   the standards doc — slot list TBD). */
.csi-college-empty[b-2fdaob6cyo] {
    margin: 0;
    font-size: 13px;
    line-height: 1.5;
}

/* Count pill in section headers (`People <pill>4</pill>`,
   `Departments <pill>6</pill>`). Strips the inline-block padding
   so it sits flush with the title in the DetailCard header
   actions slot. */
.csi-college-count-pill[b-2fdaob6cyo] {
    margin-right: var(--csi-space-xs);
}

/* People view toggle (Tile / Table). Lives in the DetailCard's
   HeaderActions slot. */
.csi-college-toggle[b-2fdaob6cyo] {
    display: inline-flex;
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-sm);
    overflow: hidden;
}

.csi-college-toggle button[b-2fdaob6cyo] {
    appearance: none;
    border: 0;
    padding: 4px 10px;
    background: var(--csi-bg-surface);
    color: var(--csi-fg-primary);
    font-size: 12px;
    cursor: pointer;
    line-height: 1.4;
}

.csi-college-toggle button + button[b-2fdaob6cyo] {
    border-left: var(--csi-border-width) solid var(--csi-border-default);
}

.csi-college-toggle button.is-active[b-2fdaob6cyo] {
    background: var(--csi-brand-primary, var(--csi-fg-primary));
    color: var(--csi-bg-surface);
}

.csi-college-toggle button:focus-visible[b-2fdaob6cyo] {
    outline: 2px solid var(--csi-brand-primary, currentColor);
    outline-offset: -2px;
}

/* People — tile grid (default view per §7). */
.csi-college-tile-grid[b-2fdaob6cyo] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: var(--csi-space-md);
}

.csi-college-tile[b-2fdaob6cyo] {
    display: flex;
    align-items: flex-start;
    gap: var(--csi-space-md);
    padding: var(--csi-space-md);
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-md);
    background: var(--csi-bg-surface);
}

.csi-college-tile-text[b-2fdaob6cyo] {
    min-width: 0;
}

.csi-college-tile-name[b-2fdaob6cyo] {
    font-weight: 600;
    color: var(--csi-fg-primary);
    font-size: 14px;
    line-height: 1.3;
}

.csi-college-tile-role[b-2fdaob6cyo] {
    margin-top: 2px;
    font-size: 12px;
    color: var(--csi-fg-secondary);
}

.csi-college-tile-meta[b-2fdaob6cyo] {
    margin-top: 4px;
    font-size: 12px;
    color: var(--csi-fg-secondary);
    word-break: break-word;
}

/* Avatar — primary navy circle with initials. Per §7 / D12 the
   avatar background is the primary navy with no role-based
   overrides. */
.csi-college-avatar[b-2fdaob6cyo] {
    flex-shrink: 0;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: var(--csi-brand-primary, #003366);
    color: var(--csi-bg-surface, #ffffff);
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 600;
    font-size: 13px;
    letter-spacing: 0.5px;
}

/* People — table view (alternate). */
.csi-college-people-table[b-2fdaob6cyo],
.csi-college-departments-table[b-2fdaob6cyo] {
    width: 100%;
    border-collapse: collapse;
    font-size: 14px;
}

.csi-college-people-table th[b-2fdaob6cyo],
.csi-college-people-table td[b-2fdaob6cyo],
.csi-college-departments-table th[b-2fdaob6cyo],
.csi-college-departments-table td[b-2fdaob6cyo] {
    padding: var(--csi-space-sm) var(--csi-space-md);
    text-align: left;
    border-bottom: var(--csi-border-width) solid var(--csi-border-default);
}

.csi-college-people-table th[b-2fdaob6cyo],
.csi-college-departments-table th[b-2fdaob6cyo] {
    background: var(--csi-bg-raised);
    font-size: 12px;
    color: var(--csi-fg-secondary);
    text-transform: uppercase;
    letter-spacing: 0.3px;
    font-weight: 600;
}

.csi-college-people-table tbody tr:last-child td[b-2fdaob6cyo],
.csi-college-departments-table tbody tr:last-child td[b-2fdaob6cyo] {
    border-bottom: 0;
}

.csi-college-departments-table a[b-2fdaob6cyo] {
    color: var(--csi-brand-primary);
    text-decoration: none;
    font-weight: 500;
}

.csi-college-departments-table a:hover[b-2fdaob6cyo],
.csi-college-departments-table a:focus-visible[b-2fdaob6cyo] {
    text-decoration: underline;
}

/* #198 — mono span for the Code field in General Information.
   Mirrors ProgramDetail's .csi-program-mono so the Kuali code
   renders consistently across academic-family detail pages.
   Page-scoped (Blazor CSS isolation), so it doesn't leak into
   sibling pages. */
.csi-college-mono[b-2fdaob6cyo] {
    font-family: var(--csi-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace);
    font-size: 13px;
}
/* /Pages/Academics/CollegesList.razor.rz.scp.css */
/* Page-scoped styles for CollegesList.

   Block-scoped via Blazor's CSS isolation — only applies to markup
   rendered by CollegesList.razor. Keeps the global `.csi-*`
   namespace clean. CsiDataTable owns the table card, toolbar, and
   pagination chrome; only page-specific overrides live here. */

/* Center-align counts and at-a-glance columns (fix #27,
   debug-sweep 2026-04-28; previously right-aligned). */
.csi-colleges-num-col[b-c1a100mwdh] {
    text-align: center;
    font-variant-numeric: tabular-nums;
}
/* /Pages/Academics/DepartmentDetail.razor.rz.scp.css */
/* Page-scoped styles for DepartmentDetail.

   Block-scoped via Blazor's CSS isolation — only applies to markup
   rendered by DepartmentDetail.razor. Implements the People-tile
   pattern + the Programs/Courses split-list pattern from §7 of
   docs/ui/component-standards.md. The split-list isn't yet a CSI.UI
   primitive (called out as TBD in §7); inline here for #142 with the
   intent to lift it into csi-theme.css when a second consumer needs
   it (College detail wants the same pattern for Departments + … TBD). */

/* ── Breadcrumb separator + back button ──────────────────────────── */

.csi-dept-bc-sep[b-hv5dchpqz0] {
    color: var(--csi-fg-muted);
    margin: 0 4px;
}

.csi-dept-back-btn[b-hv5dchpqz0] {
    display: inline-flex;
    align-items: center;
    padding: 6px 12px;
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-sm);
    background: var(--csi-bg-surface);
    color: var(--csi-fg-primary);
    font-size: 13px;
    text-decoration: none;
    transition: background-color 0.12s ease, border-color 0.12s ease;
}

.csi-dept-back-btn:hover[b-hv5dchpqz0],
.csi-dept-back-btn:focus-visible[b-hv5dchpqz0] {
    background: var(--csi-bg-raised);
    border-color: var(--csi-brand-primary);
    text-decoration: none;
}

/* ── Department Resources empty placeholder ──────────────────────── */

.csi-dept-resources-empty[b-hv5dchpqz0] {
    margin: 0;
    line-height: 1.55;
}

/* ── Section count pills (Programs / Courses header actions) ─────── */

.csi-dept-count-pill[b-hv5dchpqz0] {
    margin-left: var(--csi-space-xs);
}

/* ── Programs + Courses split (page-scoped split-list pattern) ───── */

.csi-dept-split[b-hv5dchpqz0] {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--csi-space-lg);
}

@media (max-width: 720px) {
    .csi-dept-split[b-hv5dchpqz0] {
        grid-template-columns: 1fr;
    }
}

.csi-dept-split-list[b-hv5dchpqz0] {
    display: flex;
    flex-direction: column;
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-sm);
    max-height: 360px;
    overflow-y: auto;
}

.csi-dept-split-item[b-hv5dchpqz0] {
    display: grid;
    grid-template-columns: minmax(80px, 110px) 1fr auto;
    gap: var(--csi-space-sm);
    padding: 8px 12px;
    border-bottom: var(--csi-border-width) solid var(--csi-border-default);
    text-decoration: none;
    color: var(--csi-fg-primary);
    font-size: 13px;
    transition: background-color 0.12s ease;
    align-items: baseline;
}

.csi-dept-split-item:last-child[b-hv5dchpqz0] {
    border-bottom: 0;
}

.csi-dept-split-item:hover[b-hv5dchpqz0],
.csi-dept-split-item:focus-visible[b-hv5dchpqz0] {
    background: var(--csi-bg-raised);
    text-decoration: none;
    outline: none;
}

.csi-dept-split-item-code[b-hv5dchpqz0] {
    font-family: var(--csi-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace);
    font-weight: 500;
    color: var(--csi-brand-primary);
    font-size: 12px;
}

.csi-dept-split-item-name[b-hv5dchpqz0] {
    color: var(--csi-fg-primary);
    word-break: break-word;
}

.csi-dept-split-item-meta[b-hv5dchpqz0] {
    color: var(--csi-fg-secondary);
    font-size: 12px;
    white-space: nowrap;
}

/* #197 — mono span for the Code field in General Information.
   Page-scoped mirror of CollegeDetail's .csi-college-mono so the
   Kuali code renders consistently across academic-family detail
   pages without leaking the class out of CSS isolation. */
.csi-dept-mono[b-hv5dchpqz0] {
    font-family: var(--csi-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace);
    font-size: 13px;
}
/* /Pages/Academics/DepartmentsList.razor.rz.scp.css */
/* Page-scoped styles for DepartmentsList.

   Block-scoped via Blazor's CSS isolation — only applies to markup
   rendered by DepartmentsList.razor. Implements the locked
   list-page chrome from §2 / §3 / §4 of
   docs/ui/component-standards.md (page header; CsiDataTable owns
   search, filter strip, sort, and pagination). */

/* §4 width parity (#197 / #198): academic-family list pages share
   the parent layout's width budget — no per-page max-width or extra
   padding here. Pre-#197 the page wrapper added a 1200px cap +
   xl-lg padding which made the Departments table render visibly
   narrower than Programs and Colleges (Programs uses .csi-list-page
   without a width cap; Colleges has no wrapper at all). Aligning
   to the Programs shape since both pages already use the
   .csi-list-page wrapper class. */
.csi-list-page[b-3rn45x0zqq] {
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-lg);
}

/* Center-align the Programs count column (fix #27, debug-sweep
   2026-04-28; previously right-aligned). */
.csi-list-page-num[b-3rn45x0zqq] {
    text-align: center;
    font-variant-numeric: tabular-nums;
}

/* #269 — data-freshness label below the table (the legacy filter-strip
   meta slot is gone; CsiDataTable owns the strip). */
.csi-list-page-meta[b-3rn45x0zqq] {
    margin: 0;
    font-size: 0.8125rem;
    color: var(--csi-text-secondary);
}
/* /Pages/Academics/ProgramDetail.razor.rz.scp.css */
/* Page-scoped styles for ProgramDetail (1B.2.f / #143).
   Block-scoped via Blazor's CSS isolation — only applies to markup
   rendered by ProgramDetail.razor. Mirrors the same `csi-program-*`
   token namespace as TermGroupDetail / TermBlockCard so a future
   shared `csi-detail-page-*` partial can absorb the patterns
   without retroactive collisions. */

/* ── Breadcrumb separator ─────────────────────────────────────── */

.csi-program-bc-sep[b-mqkdcpdcx7] {
    color: var(--csi-fg-muted);
    margin: 0 4px;
}

/* ── Back button (mirrors csi-term-back-btn shape) ───────────── */

.csi-program-back-btn[b-mqkdcpdcx7] {
    display: inline-flex;
    align-items: center;
    padding: 6px 12px;
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-sm);
    background: var(--csi-bg-surface);
    color: var(--csi-fg-primary);
    font-size: 13px;
    text-decoration: none;
    transition: background-color 0.12s ease, border-color 0.12s ease;
}

.csi-program-back-btn:hover[b-mqkdcpdcx7],
.csi-program-back-btn:focus-visible[b-mqkdcpdcx7] {
    background: var(--csi-bg-raised);
    border-color: var(--csi-brand-primary);
    text-decoration: none;
}

/* ── Inline helpers (mono / muted / numeric) ──────────────────── */

.csi-program-mono[b-mqkdcpdcx7] {
    font-family: var(--csi-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace);
    font-size: 13px;
}

.csi-program-muted[b-mqkdcpdcx7] {
    color: var(--csi-fg-muted);
}

.csi-program-num[b-mqkdcpdcx7] {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

/* ── Section headers (People / Courses) ──────────────────────── */

.csi-program-section-header[b-mqkdcpdcx7] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: var(--csi-space-sm);
}

.csi-program-section-title[b-mqkdcpdcx7] {
    margin: 0;
    font-size: 18px;
    font-weight: 600;
    color: var(--csi-fg-primary);
    display: inline-flex;
    align-items: center;
    gap: 8px;
}

.csi-program-empty[b-mqkdcpdcx7] {
    margin: 0;
    color: var(--csi-fg-secondary);
    font-size: 14px;
}

/* ── Degree pills (kept for DegreeType field in detail view) ──── */

.csi-program-degree-pills[b-mqkdcpdcx7] {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
}

.csi-program-degree-pill[b-mqkdcpdcx7] {
    padding: 1px 8px;
    font-size: 11px;
}

/* ── Program Type pill (slice 1J PR 2 / #272) ─────────────────── */

.csi-program-program-type-pill[b-mqkdcpdcx7] {
    padding: 1px 8px;
    font-size: 11px;
    background: var(--csi-bg-page);
    color: var(--csi-fg-secondary);
}

/* ── Error message ────────────────────────────────────────────── */

/* TODO(1J/v2-sweep): --csi-text-danger has no canonical v2 token
   (no --csi-fg-danger defined in themes). Leaving the legacy alias
   reference in place; falls through to the inline #b22222 fallback. */
.csi-program-error[b-mqkdcpdcx7] {
    color: var(--csi-text-danger, #b22222);
}

/* PLO styling lifted to shared _detail.css under csi-detail-outcomes-*
   in slice 1C.b.7 so RootCourseDetail (CLO) and ProgramDetail (PLO)
   render identically. */

/* ── Required Courses panel (slice 1J PR 4 / #273) ────────────────
   Stacked OmegaRules rule blocks within a grouping card. Without
   these rules the wrapper/caption/icon classes are unstyled, so the
   blocks have no separation, captions no emphasis, and the icon
   column no width — producing the scattered layout. */

/* Vertical separation between stacked rule blocks. */
.csi-program-rule-block + .csi-program-rule-block[b-mqkdcpdcx7] {
    margin-top: var(--csi-space-lg);
}

/* Caption above an elective / minimum-count rule ("Complete any N of:"). */
.csi-program-rule-caption[b-mqkdcpdcx7] {
    margin: var(--csi-space-sm) 0;
    color: var(--csi-fg-secondary);
    font-size: 13px;
    font-weight: 500;
}

/* Requirement-marker column (✓ / ◯): narrow, centered.
   --csi-space-8 is 2rem (32px) on the numeric 4-base scale — enough
   for a single glyph, not the 8rem the t-shirt naming might suggest. */
.csi-program-req-icon[b-mqkdcpdcx7] {
    width: var(--csi-space-8);
    text-align: center;
}
/* /Pages/Academics/ProgramsList.razor.rz.scp.css */
/* Page-scoped styles for ProgramsList.
   Block-scoped via Blazor's CSS isolation — only applies to markup
   rendered by ProgramsList.razor. CsiDataTable owns the table/shell/row
   chrome; only CellTemplate-level helpers need page-scope here.

   Classes deleted (now owned by CsiDataTable):
     .csi-list-card, .csi-list-filter-strip, .csi-list-filter-hint,
     .csi-list-result-pill, .csi-list-table, .csi-list-row,
     .csi-list-empty, .csi-list-cell-name, .csi-list-loading,
     .csi-list-error, .csi-list-center.
   Classes kept (still referenced in surviving CellTemplates):
     .csi-list-num          — <span class="csi-list-num"> in Courses CellTemplate
     .csi-list-program-type-pill — <span class="csi-pill csi-list-program-type-pill"> in Program Type CellTemplate
     .csi-mono              — <code class="csi-mono"> in Code CellTemplate
     .csi-muted             — <span class="csi-muted"> fallback in Code/Department/Program Type CellTemplates */

/* ── Page layout ────────────────────────────────────────────────── */

.csi-list-page[b-qwfhtrmddc] {
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-md);
}

/* ── CellTemplate helpers ───────────────────────────────────────── */

/* Numeric count right-align (Courses column). */
.csi-list-num[b-qwfhtrmddc] {
    text-align: center;
    font-variant-numeric: tabular-nums;
}

/* Program Type pill — single pill per row, narrower padding than
   the status pill so label lengths fit comfortably. */
.csi-list-program-type-pill[b-qwfhtrmddc] {
    padding: 1px 8px;
    font-size: 11px;
    background: var(--csi-bg-page);
    color: var(--csi-fg-secondary);
}

.csi-mono[b-qwfhtrmddc] {
    font-family: var(--csi-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace);
    font-size: 13px;
}

.csi-muted[b-qwfhtrmddc] {
    color: var(--csi-fg-muted);
}
/* /Pages/Academics/TermBlockCard.razor.rz.scp.css */
/* Page-scoped styles for TermBlockCard.

   Block-scoped via Blazor's CSS isolation — these only apply to
   markup rendered by TermBlockCard.razor, so they don't leak the
   `.csi-term-*` prefix into other consumers. The companion
   ComponentStandards doc keeps the global `.csi-*` namespace; these
   are the page-local supplements for the date editor + holidays
   sub-section. */

.csi-term-block-grid[b-udfbz9apv9] {
    display: grid;
    grid-template-columns: auto 1fr auto 1fr;
    gap: var(--csi-space-sm) var(--csi-space-xl);
    align-items: baseline;
}

.csi-term-block-grid label[b-udfbz9apv9] {
    font-weight: 600;
    color: var(--csi-fg-secondary);
    font-size: 13px;
}

.csi-term-block-grid input[type="date"][b-udfbz9apv9] {
    min-width: 0;
}

.csi-term-block-grid input[type="date"]:disabled[b-udfbz9apv9] {
    color: var(--csi-fg-secondary);
    background: var(--csi-bg-page);
    cursor: not-allowed;
}

@media (max-width: 720px) {
    .csi-term-block-grid[b-udfbz9apv9] {
        grid-template-columns: auto 1fr;
    }
}

.csi-term-holidays[b-udfbz9apv9] {
    margin-top: var(--csi-space-md);
    padding-top: var(--csi-space-md);
    border-top: var(--csi-border-width) solid var(--csi-border-default);
}

.csi-term-holidays-heading[b-udfbz9apv9] {
    margin: 0 0 var(--csi-space-sm);
    font-size: 13px;
    font-weight: 600;
    color: var(--csi-fg-primary);
    text-transform: uppercase;
    letter-spacing: 0.3px;
}

.csi-term-holidays-list[b-udfbz9apv9] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--csi-space-xs);
}

.csi-term-holidays-foot[b-udfbz9apv9] {
    margin-top: var(--csi-space-sm);
    font-size: 12px;
}
/* /Pages/Academics/TermGroupDetail.razor.rz.scp.css */
/* Page-scoped styles for TermGroupDetail.

   Block-scoped via Blazor's CSS isolation — only applies to markup
   rendered by TermGroupDetail.razor. Keeps the global `.csi-*`
   namespace clean while letting the page reuse the same token-driven
   look as the rest of the detail-page chrome. */

.csi-term-bc-sep[b-dyae3sgcqg] {
    color: var(--csi-fg-muted);
    margin: 0 4px;
}

.csi-term-back-btn[b-dyae3sgcqg] {
    display: inline-flex;
    align-items: center;
    padding: 6px 12px;
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-sm);
    background: var(--csi-bg-surface);
    color: var(--csi-fg-primary);
    font-size: 13px;
    text-decoration: none;
    transition: background-color 0.12s ease, border-color 0.12s ease;
}

.csi-term-back-btn:hover[b-dyae3sgcqg],
.csi-term-back-btn:focus-visible[b-dyae3sgcqg] {
    background: var(--csi-bg-raised);
    border-color: var(--csi-brand-primary);
    text-decoration: none;
}

.csi-term-banner[b-dyae3sgcqg] {
    padding: 10px 14px;
    border-radius: var(--csi-radius-sm);
    border: var(--csi-border-width) solid;
    font-size: 14px;
    margin-bottom: var(--csi-space-md);
}

.csi-term-banner-success[b-dyae3sgcqg] {
    /* Use shared semantic tokens (`_base.css`) so the banner stays in sync
       with theme changes — Copilot review flagged the previous hard-coded
       hex pair as theme-bypassing. */
    background: var(--csi-success-bg);
    border-color: var(--csi-success-fg);
    color: var(--csi-success-fg);
}

.csi-term-banner-error[b-dyae3sgcqg] {
    background: var(--csi-danger-bg);
    border-color: var(--csi-danger-fg);
    color: var(--csi-danger-fg);
}

.csi-term-canvas-ids[b-dyae3sgcqg] {
    font-family: var(--csi-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace);
    font-size: 13px;
}

.csi-term-section-intro[b-dyae3sgcqg] {
    margin: 0 0 var(--csi-space-sm);
}

.csi-term-save-row[b-dyae3sgcqg] {
    display: flex;
    gap: var(--csi-space-sm);
    align-items: center;
    margin-top: var(--csi-space-md);
    margin-bottom: var(--csi-space-md);
}

/* 1B.2.f (#176): inline "Seed from Canvas" affordance row above the
   standardized-items table. Same row shape as save-row but pinned to
   the table header rather than the page footer. */
.csi-term-seed-row[b-dyae3sgcqg] {
    display: flex;
    gap: var(--csi-space-sm);
    align-items: center;
    margin-top: var(--csi-space-sm);
    margin-bottom: var(--csi-space-md);
}
/* /Pages/Admin/AuditLog.razor.rz.scp.css */
/*
    /admin/audit-log page styles. Scoped via Blazor's CSS isolation —
    selectors are rewritten with a per-component attribute by the
    build, so the simple class names here don't leak into the global
    namespace.

    Filter strip lives above the table (rather than the in-table
    strip used by Directory) because the audit log's filter set is
    bigger (action / actor / from / to) and the inline strip would
    crowd at admin breakpoints. The page-header search slot is left
    open for a future free-text search on the JSON details column.

    Token policy: every color comes from the `_base.css` + theme
    palette in `src/Shared/CSI.UI/wwwroot/themes/`. The pre-merge
    revision shipped a handful of `--csi-color-*` references that
    don't exist in the catalog — Copilot review on PR #205 caught
    them, and they map onto the canonical surfaces / text / borders
    here. Dark-mode coverage rides the theme overrides for free.
*/

.audit-log-filters[b-3xvlbpi943] {
    display: flex;
    flex-wrap: wrap;
    gap: var(--csi-space-lg);
    align-items: flex-end;
    margin: var(--csi-space-lg) 0 var(--csi-space-xl);
    padding: var(--csi-space-md) var(--csi-space-lg);
    background: var(--csi-bg-raised);
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-md);
}

.audit-log-filters label[b-3xvlbpi943] {
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-xs);
    font-size: 0.85rem;
    color: var(--csi-fg-secondary);
}

/*
    Date filters use a <div> wrapper (not a <label>) because CsiDateField
    renders an interactive popover that can't be a label descendant; the
    caption is a sibling <label for>. Mirror the column layout/caption styling
    of the other filter fields so the row stays visually consistent.
*/
.audit-log-filters .audit-log-field[b-3xvlbpi943] {
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-xs);
}

.audit-log-filters .audit-log-field > label[b-3xvlbpi943] {
    font-size: 0.85rem;
    color: var(--csi-fg-secondary);
}

/*
    #460: the Action filter migrated to CsiSelect and the From/To filters
    to CsiDateField — both bring their own scoped design-system styles, so
    the page-local `.audit-log-filters select`/`input` sizing rules that
    used to live here are gone. The native (themed) "Include system events"
    checkbox is kept, so its layout overrides below remain.
*/

/*
    "Include system events" opt-in toggle. Overrides the column-flex +
    12rem-min-width filter-field layout above so the checkbox sits
    inline next to its caption rather than stacking like the text/date
    fields. align-self keeps it bottom-aligned with the other controls.
*/
.audit-log-filters label.audit-log-include-system[b-3xvlbpi943] {
    flex-direction: row;
    align-items: center;
    align-self: flex-end;
    gap: var(--csi-space-xs);
}

.audit-log-filters label.audit-log-include-system input[b-3xvlbpi943] {
    min-width: 0;
    padding: 0;
    accent-color: var(--csi-action-primary);
}

.audit-log-mono[b-3xvlbpi943] {
    font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
    font-size: 0.85em;
}

.audit-log-detail-inline[b-3xvlbpi943] {
    font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
    font-size: 0.8em;
    color: var(--csi-fg-secondary);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    display: inline-block;
    max-width: 24rem;
    vertical-align: middle;
}

.audit-log-detail-pre[b-3xvlbpi943] {
    font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
    font-size: 0.8em;
    background: var(--csi-bg-page);
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-sm);
    padding: var(--csi-space-sm);
    margin: var(--csi-space-xs) 0 0;
    max-width: 32rem;
    max-height: 16rem;
    overflow: auto;
    white-space: pre-wrap;
    word-break: break-word;
}
/* /Pages/Admin/CalendarAdminPanel.razor.rz.scp.css */
/* Page-scoped styles for /admin/calendar (1E.a.0.1 Stage 2).

   Keeps the visual chrome consistent with other admin pages (the
   .admin-table styles come from app.css globally) and adds a
   drag-drop dropzone purpose-built for the PDF upload. The dropzone
   wraps an <InputFile> inside a <label> so a click anywhere on the
   zone opens the picker — same accessibility pattern other Blazor
   apps use. */

.calendar-upload[b-v7ue9wv2xv] {
    margin-top: var(--csi-space-lg);
    margin-bottom: var(--csi-space-xl);
}

.calendar-upload h2[b-v7ue9wv2xv] {
    font-size: 18px;
    font-weight: 600;
    margin: 0 0 var(--csi-space-sm) 0;
    color: var(--csi-fg-primary);
}

.calendar-dropzone[b-v7ue9wv2xv] {
    /* Position-relative so the InputFile can absolute-fill the zone
       and capture the drop event natively. Visible chrome (border,
       background, label) renders below the InputFile via layout
       order; the InputFile is invisible but click + drop targetable. */
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--csi-space-xs);
    padding: var(--csi-space-xl);
    border: 2px dashed var(--csi-border-default);
    border-radius: var(--csi-radius-md);
    background: var(--csi-bg-page, var(--csi-bg-surface));
    color: var(--csi-fg-primary);
    cursor: pointer;
    text-align: center;
    transition: border-color 0.15s ease-in-out, background-color 0.15s ease-in-out;
}

.calendar-dropzone:hover[b-v7ue9wv2xv],
.calendar-dropzone:focus-within[b-v7ue9wv2xv] {
    border-color: var(--csi-brand-primary);
}

.calendar-dropzone-active[b-v7ue9wv2xv] {
    border-color: var(--csi-brand-primary);
    background: var(--csi-bg-surface);
}

/* ::deep lets Blazor CSS isolation reach into <InputFile>'s rendered
   <input type="file"> element. Without ::deep the scope attribute
   (b-xxxxxxxx) is not applied to child-component roots, so the
   opacity:0 / absolute-fill rules are silently skipped and the
   browser's unstyled native picker leaks through (issue #266). */
.calendar-dropzone[b-v7ue9wv2xv]  input[type="file"] {
    /* Cover the entire dropzone surface so the input — not just the
       label — receives drop events. opacity:0 keeps it invisible
       (the label provides the visible chrome); pointer-events stay
       on so click + drop both work. cursor:pointer mirrors the
       parent's cursor on the actual hit target. */
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    opacity: 0;
    cursor: pointer;
    /* A11y: keyboard focus still lands here via Tab; the visible focus
       ring on .calendar-dropzone:focus-within above (border-color →
       brand-primary) provides the indicator. */
}

.calendar-dropzone-label[b-v7ue9wv2xv] {
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-xs);
    font-size: 14px;
}

.calendar-list[b-v7ue9wv2xv] {
    margin-top: var(--csi-space-xl);
}

.calendar-list h2[b-v7ue9wv2xv] {
    font-size: 18px;
    font-weight: 600;
    margin: 0 0 var(--csi-space-sm) 0;
    color: var(--csi-fg-primary);
}

.calendar-preview-stub[b-v7ue9wv2xv] {
    margin-top: var(--csi-space-md);
    padding: var(--csi-space-sm) var(--csi-space-md);
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-sm);
    background: var(--csi-bg-surface);
    font-size: 13px;
}

.calendar-preview-stub summary[b-v7ue9wv2xv] {
    cursor: pointer;
    font-weight: 500;
}
/* /Pages/Admin/DashboardDefaults.razor.rz.scp.css */
/* #468 Slice 2 admin-defaults — per-role default dashboard layout editor. */

.ddef[b-x5rkuskd9u] {
    max-width: 720px;
    padding: var(--csi-space-lg) var(--csi-space-xl);
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-lg);
}

.ddef-rolepick[b-x5rkuskd9u] {
    display: flex;
    align-items: center;
    gap: var(--csi-space-sm);
}

.ddef-rolepick label[b-x5rkuskd9u] {
    font-weight: 600;
}

.ddef-rolepick select[b-x5rkuskd9u] {
    padding: var(--csi-space-xs) var(--csi-space-sm);
    border: 1px solid var(--csi-color-border, #ccc);
    border-radius: var(--csi-radius-sm, 4px);
    font: inherit;
}

.ddef-hint[b-x5rkuskd9u],
.ddef-empty[b-x5rkuskd9u] {
    margin: 0;
    color: var(--csi-color-text-muted, #555);
}

.ddef-list[b-x5rkuskd9u] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-xs);
}

.ddef-row[b-x5rkuskd9u] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--csi-space-md);
    padding: var(--csi-space-sm) var(--csi-space-md);
    border: 1px solid var(--csi-color-border, #ddd);
    border-radius: var(--csi-radius-sm, 4px);
    background: var(--csi-color-surface, #fff);
}

.ddef-row__title[b-x5rkuskd9u] {
    font-weight: 600;
}

.ddef-row__controls[b-x5rkuskd9u] {
    display: flex;
    gap: var(--csi-space-xs);
}

.ddef-icon[b-x5rkuskd9u] {
    border: 1px solid var(--csi-color-border, #ccc);
    background: var(--csi-color-surface, #fff);
    border-radius: var(--csi-radius-sm, 4px);
    width: 2rem;
    height: 2rem;
    cursor: pointer;
    line-height: 1;
}

.ddef-icon:disabled[b-x5rkuskd9u] {
    opacity: 0.4;
    cursor: default;
}

.ddef-icon--remove[b-x5rkuskd9u] {
    color: var(--csi-color-danger, #b00020);
}

.ddef-library[b-x5rkuskd9u] {
    border-top: 1px solid var(--csi-color-border, #eee);
    padding-top: var(--csi-space-md);
}

.ddef-library__title[b-x5rkuskd9u] {
    font-size: 1rem;
    margin: 0 0 var(--csi-space-sm);
}

.ddef-library__list[b-x5rkuskd9u] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-xs);
}

.ddef-library__item[b-x5rkuskd9u] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--csi-space-md);
}

.ddef-actions[b-x5rkuskd9u] {
    display: flex;
    gap: var(--csi-space-sm);
    border-top: 1px solid var(--csi-color-border, #eee);
    padding-top: var(--csi-space-md);
}
/* /Pages/Courses/CoursesPage.razor.rz.scp.css */
/* Page-scoped styles for the Courses tabbed page (#150 / D16).
   Block-scoped via Blazor's CSS isolation so the same `csi-courses-*`
   class names can be hoisted into a shared partial later without
   retroactive collisions. Tokens come from the active theme so the
   page picks up sunrise / slate / byui-deep / high-contrast
   automatically.

   1B.10: raw-table rules (.csi-courses-table, th/td, tbody etc.) were
   removed — CsiTable<T> owns the table chrome now. Only page-layout
   and element-level overrides remain. */

/* ── Page wrapper ─────────────────────────────────────────────────
   Deliberately NOT inside the legacy `csi-page` (which clips at
   max-width: 960px). This is the full-width contract called out in
   issue #150's review feedback — every tab's table consumes the
   available main-content width. */

.csi-courses-page[b-2eh69stamy] {
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-md);
    width: 100%;
    max-width: 100%;
}

/* ── Tabs row (ARIA tablist) ─────────────────────────────────────── */

.csi-courses-tabs[b-2eh69stamy] {
    display: flex;
    gap: 0;
    border-bottom: var(--csi-border-width) solid var(--csi-border-default);
    overflow-x: auto;
    /* CSS spec: setting overflow-x to anything other than `visible`
       coerces overflow-y from `visible` to `auto`, which makes the
       active tab's underline indicator trip a phantom vertical
       scrollbar. Pin overflow-y back to hidden so only horizontal
       overflow scrolls when the tab strip gets wider than the page. */
    overflow-y: hidden;
}

.csi-courses-tab[b-2eh69stamy] {
    padding: var(--csi-space-sm) var(--csi-space-md);
    color: var(--csi-fg-secondary);
    text-decoration: none;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    white-space: nowrap;
    margin-bottom: -1px; /* overlap the container's border */
}

.csi-courses-tab:hover[b-2eh69stamy] {
    color: var(--csi-fg-primary);
}

.csi-courses-tab.is-active[b-2eh69stamy] {
    color: var(--csi-brand-primary);
    border-bottom-color: var(--csi-brand-primary);
}

.csi-courses-tab:focus-visible[b-2eh69stamy] {
    outline: 2px solid var(--csi-brand-primary);
    outline-offset: 2px;
    border-radius: var(--csi-radius-sm);
}

/* ── Tabpanel + card ─────────────────────────────────────────────── */

.csi-courses-tabpanel[b-2eh69stamy] {
    /* No padding here — the table card owns its own chrome and we
       want it flush against the tab strip. */
    padding-top: 0;
}

.csi-courses-card[b-2eh69stamy] {
    background: var(--csi-bg-surface);
    border: var(--csi-border-width) solid var(--csi-border-default);
    border-radius: var(--csi-radius-md);
    overflow: hidden;
    width: 100%;
}

/* ── Cell helpers (used in CellTemplate slots) ───────────────────── */

.csi-courses-num[b-2eh69stamy] {
    display: block;
    text-align: center;
    font-variant-numeric: tabular-nums;
}

.csi-courses-mono[b-2eh69stamy] {
    font-family: var(--csi-font-mono, ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace);
    font-size: 13px;
}

.csi-courses-muted[b-2eh69stamy] {
    color: var(--csi-fg-muted);
}

.csi-courses-loading[b-2eh69stamy] {
    padding: var(--csi-space-md);
    color: var(--csi-fg-secondary);
}

/* ── Table-cell link styling (#407) ───────────────────────────────
   Intentional brand-colored treatment for the in-cell anchors:
   the course-code links (Canvas, wrapping a csi-courses-mono code)
   and the Course Lead / Assistant Course Lead links into /directory.
   Scoped to .csi-courses-celllink so unrelated links (seed badge,
   master, parent-blueprint) keep their default treatment. The brand
   color comes from the theme action token so it tracks sunrise /
   slate / byui-deep / high-contrast automatically; the paired
   CsiExternalLinkIcon inherits the anchor color, so the new-tab cue
   picks up the same brand hue and hover state for free. The mono
   code keeps its typography (csi-courses-mono) and just inherits the
   anchor color. */
.csi-courses-celllink[b-2eh69stamy] {
    color: var(--csi-action-primary);
    text-decoration: none;
}

.csi-courses-celllink:hover[b-2eh69stamy],
.csi-courses-celllink:focus-visible[b-2eh69stamy] {
    color: var(--csi-action-primary-hover);
    text-decoration: underline;
}

.csi-courses-celllink:focus-visible[b-2eh69stamy] {
    outline: 2px solid var(--csi-action-primary);
    outline-offset: 2px;
    border-radius: var(--csi-radius-sm);
}

.csi-courses-celllink .csi-courses-mono[b-2eh69stamy] {
    color: inherit;
}

/* ── Root loading skeleton (#450) ─────────────────────────────────
   Token-styled progressive placeholder shown while the Root tab's
   full ~2017-row catalog fetch is in flight. Mirrors the card's
   filter-strip + table-row rhythm so the layout doesn't jump when
   the real rows arrive. The shimmer + reduced-motion handling lives
   in CsiSkeleton; this only lays out the rows/columns. */
.csi-courses-skeleton-strip[b-2eh69stamy] {
    display: flex;
    align-items: center;
    gap: var(--csi-space-md);
    padding: 10px 14px;
    border-bottom: var(--csi-border-width) solid var(--csi-border-default);
    background: var(--csi-bg-raised);
}

.csi-courses-skeleton-rows[b-2eh69stamy] {
    padding: var(--csi-space-sm) 14px;
}

.csi-courses-skeleton-row[b-2eh69stamy] {
    display: grid;
    grid-template-columns: 8rem 1fr 6rem 5rem;
    gap: var(--csi-space-md);
    align-items: center;
    padding: 10px 0;
    border-bottom: var(--csi-border-width) solid var(--csi-border-subtle, var(--csi-border-default));
}

.csi-courses-skeleton-row:last-child[b-2eh69stamy] {
    border-bottom: none;
}

/* Visually-hidden live-region label so screen readers announce the
   loading state while the skeleton (aria-hidden) is on screen. */
.csi-courses-sr-only[b-2eh69stamy] {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}
/* /Pages/Courses/OmcDetail.razor.rz.scp.css */
/* Scoped chrome for the OMC detail page (1E.a #8). */

/* Tab strip — duplicated from CoursesPage.razor.css because Blazor
   scoped CSS only applies inside the component that owns the file.
   Keep these in sync with the parent /courses tab strip so the visual
   treatment matches when the user drills into a Course Master detail. */
.csi-courses-tabs[b-z8761kk4b9] {
    display: flex;
    gap: 0;
    border-bottom: var(--csi-border-width) solid var(--csi-border-default);
    overflow-x: auto;
    /* Phantom vertical scrollbar fix — see CoursesPage.razor.css. */
    overflow-y: hidden;
}

.csi-courses-tab[b-z8761kk4b9] {
    padding: var(--csi-space-sm) var(--csi-space-md);
    color: var(--csi-fg-secondary);
    text-decoration: none;
    font-size: 14px;
    font-weight: 500;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    white-space: nowrap;
    margin-bottom: -1px;
}

.csi-courses-tab:hover[b-z8761kk4b9] {
    color: var(--csi-fg-primary);
}

.csi-courses-tab.is-active[b-z8761kk4b9] {
    color: var(--csi-brand-primary);
    border-bottom-color: var(--csi-brand-primary);
}

.csi-courses-tab:focus-visible[b-z8761kk4b9] {
    outline: 2px solid var(--csi-brand-primary);
    outline-offset: 2px;
    border-radius: var(--csi-radius-sm);
}

/* .csi-detail-back-btn moved to the shared csi-detail.css layer so all
   DetailLayout-based pages inherit it (this scoped copy was redundant —
   the class is used in DetailLayout's Actions slot, owned by a different
   component, so this file's scope never applied). */

.csi-omc-tabpanel[b-z8761kk4b9] {
    /* Tabs share the bottom-border with the content; no extra padding. */
    padding-top: var(--csi-space-md);
}

/* Source-tag chip — labels each field with its data source.
   Inline with the field label for low visual weight. */
.csi-omc-detail[b-z8761kk4b9]  .csi-source-tag {
    display: inline-block;
    background: #e3effd;
    color: #0c4a6e;
    font-size: 9px;
    font-weight: 700;
    padding: 1px 5px;
    border-radius: 3px;
    margin-left: 4px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    vertical-align: middle;
}

/* Stub panel — used by the Blueprints / Health / External Tools tabs
   to surface "this is coming in a later phase" copy. */
.csi-omc-stub-panel[b-z8761kk4b9] {
    background: var(--csi-bg-surface);
    border: 2px dashed var(--csi-border-default);
    border-radius: var(--csi-radius-md);
    padding: 48px 24px;
    text-align: center;
    color: var(--csi-fg-muted);
    margin-top: var(--csi-space-md);
}

.csi-omc-stub-panel h3[b-z8761kk4b9] {
    margin: 0 0 8px;
    color: var(--csi-fg-secondary);
    font-size: 18px;
}

.csi-omc-stub-panel p[b-z8761kk4b9] {
    margin: 0 auto;
    font-size: 13px;
    max-width: 560px;
    line-height: 1.6;
}

/* Stub tag in the tab strip, marks tabs that aren't yet implemented.
   Selector deliberately bare: the span is rendered directly inside
   OmcDetail.razor's tab strip, so Blazor's scoped-CSS attribute hash
   applies to the span itself. The previous `.csi-omc-detail ::deep`
   wrapper failed to match because `.csi-omc-detail` lives on the
   DetailLayout's <article> (owned by a different component) which
   doesn't carry this file's scope hash. */
.csi-courses-stub-tag[b-z8761kk4b9] {
    display: inline-block;
    background: var(--csi-warning-bg, #fff4d6);
    color: var(--csi-warning-fg, #7a5a00);
    font-size: 9px;
    font-weight: 700;
    padding: 1px 5px;
    border-radius: 3px;
    margin-left: 6px;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

/* Resource list — 2-column grid of icon + name + open-link rows.
   Was a single-column flex stack; widened to 2 columns 2026-05-16
   to better fill the Resources card's horizontal real estate. */
.csi-omc-resource-table[b-z8761kk4b9] {
    display: grid;
    grid-template-columns: 1fr 1fr;
    column-gap: var(--csi-space-lg);
}

.csi-omc-resource-row[b-z8761kk4b9] {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 8px 0;
    border-bottom: var(--csi-border-width) solid var(--csi-border-default);
    font-size: 13px;
}

/* With 6 rows in a 2-column grid, the bottom row (rows 5 + 6) shouldn't
   carry a divider — same intent as the original :last-child rule but
   the math is "last two children" instead. */
.csi-omc-resource-row:nth-last-child(-n+2)[b-z8761kk4b9] {
    border-bottom: 0;
}

.csi-omc-resource-icon[b-z8761kk4b9] {
    width: 28px;
    height: 28px;
    border-radius: var(--csi-radius-sm);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--csi-bg-page, #f9fafb);
    color: var(--csi-fg-secondary);
    font-size: 14px;
    flex-shrink: 0;
}

.csi-omc-resource-meta[b-z8761kk4b9] {
    flex: 1;
    min-width: 0;
}

.csi-omc-resource-name[b-z8761kk4b9] {
    font-weight: 600;
    color: var(--csi-fg-primary);
}

.csi-omc-resource-row a[b-z8761kk4b9] {
    color: var(--csi-brand-primary);
    text-decoration: none;
    font-size: 12px;
}
/* /Pages/Directory.razor.rz.scp.css */
/* Page-scoped styles for Directory.razor (#145 Phase B).

   Legacy DataTable + filter-strip rules retired when Directory migrated
   to CsiDataTable (feat/csidatatable-plan2). Only the Email-cell mono
   treatment and the result-count pill modifier remain. */

.csi-directory-mono[b-mlopgdjby3] {
    font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
    font-size: 13px;
}

/* §3 result-count pill needs the accent-blue treatment from the
   wireframe. The default csi-pill is the primary navy chip; this
   override matches the wireframe's lighter blue.

   Also: per the locked Phase B wireframe (PR #181, approved
   2026-04-25), Category pills carry distinct color modifiers per
   D2/D19 — Administrator (red), Faculty (blue), Adjunct (orange),
   Staff (purple). These render via the global csi-pill is-* classes
   in csi-theme.css; the result-count modifier is local to this page
   today and lifts to the shared sheet once it spreads (no other list
   page uses it yet). */
[b-mlopgdjby3] .csi-pill-result-count {
    background: rgba(0, 110, 182, 0.10);
    color: var(--csi-link, #006eb6);
    font-variant-numeric: tabular-nums;
}
/* /Pages/Home.razor.rz.scp.css */
.dash-grid[b-x7vfg72480] {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: var(--csi-space-lg);
    padding: var(--csi-space-xl);
    max-width: 1200px;
    margin: 0 auto;
}

/* Hero + Strip span the full row; Standard cards flow into the columns. */
.dash-cell--hero[b-x7vfg72480],
.dash-cell--strip[b-x7vfg72480] {
    grid-column: 1 / -1;
}

/* Card-internal layout — ::deep reaches into the child card components. */
.dash-grid[b-x7vfg72480]  .dash-counts,
.dash-grid[b-x7vfg72480]  .dash-links,
.dash-grid[b-x7vfg72480]  .dash-notes,
.dash-grid[b-x7vfg72480]  .dash-welcome-links {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-sm);
}

.dash-grid[b-x7vfg72480]  .dash-welcome-links {
    flex-direction: row;
    flex-wrap: wrap;
    gap: var(--csi-space-lg);
    margin-top: var(--csi-space-md);
}

.dash-grid[b-x7vfg72480]  .dash-count {
    font-weight: 700;
    margin-right: var(--csi-space-xs);
}

.dash-grid[b-x7vfg72480]  .dash-note-date {
    margin-left: var(--csi-space-sm);
    opacity: 0.6;
}

/* Slice 4 (#468): chart-card footnote link + task-card list. */
.dash-grid[b-x7vfg72480]  .dash-chart-footnote {
    margin: var(--csi-space-md) 0 0;
    font-size: 0.875rem;
}

.dash-grid[b-x7vfg72480]  .dash-task-count {
    margin: 0 0 var(--csi-space-sm);
}

.dash-grid[b-x7vfg72480]  .dash-task-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-xs);
}

.dash-grid[b-x7vfg72480]  .dash-task-item {
    font-size: 0.9375rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

@media (max-width: 768px) {
    .dash-grid[b-x7vfg72480] {
        grid-template-columns: 1fr;
        padding: var(--csi-space-md);
    }
}

/* ── Slice 2 (#468): personalization toolbar + edit affordances ────────── */

.dash-toolbar[b-x7vfg72480] {
    display: flex;
    gap: var(--csi-space-sm);
    justify-content: flex-end;
    max-width: 1200px;
    margin: 0 auto;
    padding: var(--csi-space-md) var(--csi-space-xl) 0;
}

.dash-btn[b-x7vfg72480] {
    border: 1px solid var(--csi-border, #ccc);
    background: var(--csi-surface, #fff);
    border-radius: var(--csi-radius-sm, 4px);
    padding: var(--csi-space-xs) var(--csi-space-md);
    cursor: pointer;
    font: inherit;
}

.dash-btn:disabled[b-x7vfg72480] {
    opacity: 0.5;
    cursor: default;
}

.dash-btn--primary[b-x7vfg72480] {
    background: var(--csi-accent, #00529b);
    color: #fff;
    border-color: var(--csi-accent, #00529b);
}

.dash-btn--danger[b-x7vfg72480] {
    color: var(--csi-danger, #b00020);
    border-color: var(--csi-danger, #b00020);
}

/* The card cell is the drag handle in edit mode; reserve room for controls. */
.dash-cell--editing[b-x7vfg72480] {
    position: relative;
    outline: 1px dashed var(--csi-border, #ccc);
    cursor: grab;
}

.dash-edit-controls[b-x7vfg72480] {
    position: absolute;
    top: var(--csi-space-xs);
    right: var(--csi-space-xs);
    display: flex;
    gap: var(--csi-space-xs);
    z-index: 1;
}

.dash-icon-btn[b-x7vfg72480] {
    border: 1px solid var(--csi-border, #ccc);
    background: var(--csi-surface, #fff);
    border-radius: var(--csi-radius-sm, 4px);
    width: 1.75rem;
    height: 1.75rem;
    line-height: 1;
    cursor: pointer;
    font: inherit;
}

.dash-icon-btn:disabled[b-x7vfg72480] {
    opacity: 0.4;
    cursor: default;
}

.dash-icon-btn--remove[b-x7vfg72480] {
    color: var(--csi-danger, #b00020);
}

.dash-library[b-x7vfg72480] {
    max-width: 1200px;
    margin: 0 auto;
    padding: var(--csi-space-md) var(--csi-space-xl) var(--csi-space-xl);
}

.dash-library__title[b-x7vfg72480] {
    font-size: 1rem;
    margin: 0 0 var(--csi-space-sm);
}

.dash-library__list[b-x7vfg72480] {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--csi-space-sm);
}

.dash-library__item[b-x7vfg72480] {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--csi-space-md);
    border: 1px solid var(--csi-border, #ccc);
    border-radius: var(--csi-radius-sm, 4px);
    padding: var(--csi-space-sm) var(--csi-space-md);
}
/* /Pages/WhatsNew.razor.rz.scp.css */
/*
 * Scoped styles for the /whats-new page.
 * Only covers prose content inside the expanded markdown body —
 * layout, spacing, and component chrome come from CsiCard / CsiButton
 * / CsiAlert / CsiEmptyState / CsiSkeleton in the design system.
 */

/* Rendered markdown body — paragraph, list, and heading rhythm */
.whats-new-body p[b-6shwpumy4z] {
    margin: 0 0 .625rem;
    font-size: .875rem;
    line-height: 1.6;
    color: var(--csi-fg-primary);
}

.whats-new-body ul[b-6shwpumy4z] {
    margin: 0 0 .625rem;
    padding-left: 1.25rem;
}

.whats-new-body li[b-6shwpumy4z] {
    font-size: .875rem;
    line-height: 1.6;
    margin-bottom: .25rem;
    color: var(--csi-fg-primary);
}

.whats-new-body h2[b-6shwpumy4z],
.whats-new-body h3[b-6shwpumy4z] {
    margin: .875rem 0 .375rem;
    font-weight: 600;
    color: var(--csi-fg-primary);
}

.whats-new-body h2[b-6shwpumy4z] { font-size: 1rem; }
.whats-new-body h3[b-6shwpumy4z] { font-size: .9375rem; }

/* Strip bottom margin from the last child so the inset doesn't add extra space */
.whats-new-body > *:last-child[b-6shwpumy4z] {
    margin-bottom: 0;
}
