/* ==========================================================================
   courses.css — Public courses browsing flow (schools → courses → modules)
   and the SCORM viewer shell. Loaded only by `courses.html` and
   `course-viewer.html`. Tokens come from base.css; BEM per §E.6 of
   docs/grant-launch-plan.md.
   ========================================================================== */

/* ── Page wrapper ── */
.courses-page {
  padding: var(--spacing-2xl) 0 var(--spacing-3xl);
}

.courses-page__container {
  max-width: var(--width-max);
  margin: 0 auto;
  padding: 0 var(--spacing-md);
}

/* Each progressive-disclosure state is a flat section; only the .is-active one
   is visible. The `hidden` attribute on the inactive ones is enough on its own
   (base.css forces `display:none`), but the explicit `.is-active` class lets us
   animate the entrance without JS reading layout. */
.courses-state {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
}

.courses-state__header {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
}

.courses-state__title {
  font-size: var(--font-size-2xl);
  font-weight: var(--font-weight-bold);
  color: var(--color-text);
  margin: 0;
}

.courses-state__lede {
  color: var(--color-muted);
  font-size: var(--font-size-md);
  max-width: 60ch;
  margin: 0;
}

/* ── Featured banner — Phase 4b "Design Process" pinned at top of State 1 ── */
.featured-banner {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  padding: var(--spacing-xl) var(--spacing-2xl);
  background: var(--gradient-primary);
  color: var(--color-text-inverse);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  margin-bottom: var(--spacing-lg);
}

.featured-banner__eyebrow {
  margin: 0;
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  opacity: 0.9;
}

.featured-banner__title {
  margin: 0;
  font-size: var(--font-size-2xl);
  font-weight: var(--font-weight-bold);
  color: var(--color-text-inverse);
}

.featured-banner__lede {
  margin: 0;
  max-width: 60ch;
  font-size: var(--font-size-md);
  opacity: 0.92;
}

.featured-banner__cta {
  align-self: flex-start;
  margin-top: var(--spacing-sm);
  background: var(--color-text-inverse);
  color: var(--color-primary-dark);
  border-color: var(--color-text-inverse);
}

.featured-banner__cta:hover,
.featured-banner__cta:focus-visible {
  background: var(--color-overlay-white-strong);
  color: var(--color-primary-dark);
}

@media (max-width: 600px) {
  .featured-banner {
    padding: var(--spacing-lg);
  }
  .featured-banner__title {
    font-size: var(--font-size-xl);
  }
}

/* ── Breadcrumb ── */
.breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--spacing-xs);
  font-size: var(--font-size-sm);
  color: var(--color-muted);
}

.breadcrumb__sep {
  color: var(--color-text-light);
  user-select: none;
}

.breadcrumb__link,
.breadcrumb__link:visited {
  color: var(--color-link);
  text-decoration: none;
  border-radius: var(--radius-xs);
  padding: 2px 4px;
}

.breadcrumb__link:hover,
.breadcrumb__link:focus-visible {
  text-decoration: underline;
}

.breadcrumb__current {
  color: var(--color-text);
  font-weight: var(--font-weight-medium);
  padding: 2px 4px;
}

/* ── Grids — shared layout for the three card collections ── */
.school-grid,
.course-grid,
.module-grid {
  display: grid;
  gap: var(--spacing-md);
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
}

/* ── School card ── */
.school-card {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  padding: var(--spacing-lg);
  min-height: 180px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  color: inherit;
  text-align: left;
  text-decoration: none;
  cursor: pointer;
  transition:
    transform var(--transition-fast),
    box-shadow var(--transition-fast),
    border-color var(--transition-fast);
}

.school-card:hover,
.school-card:focus-visible {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
  border-color: var(--color-primary-alpha-30);
}

.school-card:visited {
  color: inherit;
}

.school-card__name {
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-semibold);
  margin: 0;
  color: var(--color-text);
}

.school-card__meta {
  font-size: var(--font-size-sm);
  color: var(--color-muted);
  margin: 0;
}

.school-card__cta {
  margin-top: auto;
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-xs);
  color: var(--color-primary-dark);
  font-weight: var(--font-weight-medium);
  font-size: var(--font-size-sm);
}

.school-card__badge {
  align-self: flex-start;
  margin-top: auto;
  display: inline-block;
  padding: 2px var(--spacing-sm);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-text-light);
  background: var(--color-overlay-black-medium);
  border-radius: var(--radius-pill);
}

/* ── Course card ── */
.course-card {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  padding: var(--spacing-lg);
  min-height: 180px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  color: inherit;
  text-align: left;
  text-decoration: none;
  cursor: pointer;
  transition:
    transform var(--transition-fast),
    box-shadow var(--transition-fast),
    border-color var(--transition-fast);
}

.course-card:hover,
.course-card:focus-visible {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
  border-color: var(--color-secondary-alpha-30);
}

.course-card:visited {
  color: inherit;
}

.course-card__name {
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-semibold);
  margin: 0;
  color: var(--color-text);
}

.course-card__shortname {
  font-size: var(--font-size-xs);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--color-text-light);
  margin: 0;
}

.course-card__meta {
  font-size: var(--font-size-sm);
  color: var(--color-muted);
  margin: 0;
}

.course-card__cta {
  margin-top: auto;
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-xs);
  color: var(--color-primary-dark);
  font-weight: var(--font-weight-medium);
  font-size: var(--font-size-sm);
}

/* Disabled school (no courses attached). Renders as an inert div. */
.school-card--disabled {
  cursor: not-allowed;
  opacity: 0.72;
  background: var(--color-surface-subtle);
}

.school-card--disabled:hover,
.school-card--disabled:focus-visible {
  transform: none;
  box-shadow: var(--shadow-sm);
  border-color: var(--color-border);
}

/* Disabled course (no modules attached). Renders as an inert div, not an <a>. */
.course-card--disabled {
  cursor: not-allowed;
  opacity: 0.72;
  background: var(--color-surface-subtle);
}

.course-card--disabled:hover,
.course-card--disabled:focus-visible {
  transform: none;
  box-shadow: var(--shadow-sm);
  border-color: var(--color-border);
}

.course-card__badge {
  align-self: flex-start;
  display: inline-block;
  padding: 2px var(--spacing-sm);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-text-light);
  background: var(--color-overlay-black-medium);
  border-radius: var(--radius-pill);
}

/* ── Module card ── */
.module-card {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-sm);
  padding: var(--spacing-lg);
  min-height: 160px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  color: inherit;
  text-align: left;
  text-decoration: none;
  cursor: pointer;
  transition:
    transform var(--transition-fast),
    box-shadow var(--transition-fast),
    border-color var(--transition-fast);
}

.module-card:hover,
.module-card:focus-visible {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
  border-color: var(--color-accent);
}

.module-card:visited {
  color: inherit;
}

.module-card__order {
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-text-light);
  letter-spacing: 0.04em;
}

.module-card__name {
  font-size: var(--font-size-md);
  font-weight: var(--font-weight-semibold);
  margin: 0;
  color: var(--color-text);
}

.module-card__type-pill {
  align-self: flex-start;
  display: inline-block;
  padding: 2px var(--spacing-sm);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--color-text-inverse);
  background: var(--color-primary);
  border-radius: var(--radius-pill);
}

.module-card__type-pill--scorm {
  background: var(--color-primary);
}
.module-card__type-pill--quiz {
  background: var(--color-secondary-dark);
}
.module-card__type-pill--page {
  background: var(--color-text-light);
}
.module-card__type-pill--qbank {
  background: var(--color-accent-dark);
}
.module-card__type-pill--glossary {
  background: #6b5bb0;
}

.module-card__cta {
  margin-top: auto;
  display: inline-flex;
  align-items: center;
  gap: var(--spacing-xs);
  color: var(--color-primary-dark);
  font-weight: var(--font-weight-medium);
  font-size: var(--font-size-sm);
}

/* "Coming soon" modules — not available yet or no SCORM slug. Inert div. */
.module-card--coming-soon {
  cursor: not-allowed;
  opacity: 0.72;
  background: var(--color-surface-subtle);
}

.module-card--coming-soon:hover,
.module-card--coming-soon:focus-visible {
  transform: none;
  box-shadow: var(--shadow-sm);
  border-color: var(--color-border);
}

.module-card__badge {
  align-self: flex-start;
  display: inline-block;
  padding: 2px var(--spacing-sm);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-medium);
  color: var(--color-text-light);
  background: var(--color-overlay-black-medium);
  border-radius: var(--radius-pill);
}

/* ── Empty / loading / error states ── */
.courses-status {
  padding: var(--spacing-xl);
  text-align: center;
  background: var(--color-surface);
  border: 1px dashed var(--color-border-strong);
  border-radius: var(--radius-lg);
  color: var(--color-muted);
}

.courses-status__title {
  margin: 0 0 var(--spacing-xs);
  color: var(--color-text);
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-semibold);
}

.courses-status__body {
  margin: 0;
  font-size: var(--font-size-base);
}

.courses-status--error {
  border-color: var(--color-error-alpha-20);
  background: var(--color-error-alpha-12);
}

.courses-status--error .courses-status__title {
  color: var(--color-error);
}

/* Skeleton card while data loads. */
.skeleton-card {
  min-height: 180px;
  border-radius: var(--radius-lg);
  background: linear-gradient(
    90deg,
    var(--color-surface) 0%,
    var(--color-surface-subtle) 50%,
    var(--color-surface) 100%
  );
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.4s ease-in-out infinite;
}

@keyframes skeleton-shimmer {
  0% {
    background-position: 100% 0;
  }
  100% {
    background-position: -100% 0;
  }
}

/* ── SCORM viewer shell — used by course-viewer.html ── */
.viewer-shell {
  display: flex;
  flex-direction: column;
  height: 100vh;
  background: var(--color-bg);
}

.viewer-shell__header {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  padding: var(--spacing-sm) var(--spacing-md);
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-border);
  flex-shrink: 0;
  min-height: 56px;
}

.viewer-shell__brand {
  display: inline-flex;
  align-items: center;
  text-decoration: none;
  flex-shrink: 0;
}

.viewer-shell__brand img {
  height: 32px;
  width: auto;
}

.viewer-shell__breadcrumb {
  flex: 1;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--spacing-xs);
  font-size: var(--font-size-sm);
  color: var(--color-muted);
  min-width: 0;
}

.viewer-shell__breadcrumb a,
.viewer-shell__breadcrumb a:visited {
  color: var(--color-link);
}

.viewer-shell__fullscreen {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  background: transparent;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  cursor: pointer;
  font-size: var(--font-size-lg);
  color: var(--color-text);
  flex-shrink: 0;
  transition:
    background var(--transition-fast),
    border-color var(--transition-fast);
}

.viewer-shell__fullscreen:hover,
.viewer-shell__fullscreen:focus-visible {
  background: var(--color-primary-alpha-06);
  border-color: var(--color-primary-alpha-30);
}

.viewer-shell__main {
  flex: 1;
  display: flex;
  min-height: 0;
  background: #dcdee0;
}

.viewer-shell__iframe {
  flex: 1;
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}

/* Error pane shown when ?slug is missing or invalid. */
.viewer-shell__error {
  margin: auto;
  max-width: 520px;
  padding: var(--spacing-2xl);
  background: var(--color-surface);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  text-align: center;
}

.viewer-shell__error h1 {
  margin: 0 0 var(--spacing-sm);
  font-size: var(--font-size-xl);
}

.viewer-shell__error p {
  margin: 0 0 var(--spacing-lg);
  color: var(--color-muted);
}

/* ── Mobile tuning ── */
@media (max-width: 600px) {
  .school-grid,
  .course-grid,
  .module-grid {
    grid-template-columns: 1fr;
  }

  .courses-state__title {
    font-size: var(--font-size-xl);
  }

  .viewer-shell__breadcrumb {
    font-size: var(--font-size-xs);
  }

  .viewer-shell__brand img {
    height: 28px;
  }
}

/* ──────────────────────────────────────────────────────────────────────
   Module Library (Phase 8)
   ──────────────────────────────────────────────────────────────────────
   Static, flat catalog of every shipped SCORM bundle, rendered above the
   school-picker state machine. Filter chips toggle visibility via
   `data-level` on each list item; logic in assets/js/module-library.js.
   ────────────────────────────────────────────────────────────────────── */

.module-library {
  margin-bottom: var(--spacing-3xl);
  padding-bottom: var(--spacing-2xl);
  border-bottom: 1px solid var(--color-border);
}

.module-library__header {
  margin-bottom: var(--spacing-lg);
}

.module-library__title {
  font-size: var(--font-size-3xl);
  font-weight: var(--font-weight-bold);
  margin: 0 0 var(--spacing-sm);
  background: linear-gradient(
    90deg,
    var(--color-primary),
    var(--color-secondary)
  );
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.module-library__lede {
  font-size: var(--font-size-md);
  color: var(--color-text-light);
  margin: 0;
  max-width: 60ch;
}

.module-library__filters {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
  margin-bottom: var(--spacing-lg);
}

.module-library__chip {
  appearance: none;
  border: 1px solid var(--color-border);
  background: var(--color-surface);
  color: var(--color-text);
  font: inherit;
  font-weight: var(--font-weight-medium);
  padding: var(--spacing-xs) var(--spacing-md);
  border-radius: 999px;
  cursor: pointer;
  transition:
    background 0.15s ease,
    color 0.15s ease,
    border-color 0.15s ease;
}

.module-library__chip:hover,
.module-library__chip:focus-visible {
  border-color: var(--color-primary);
  color: var(--color-primary);
}

.module-library__chip.is-active {
  background: var(--color-primary);
  color: var(--color-text-inverse);
  border-color: var(--color-primary);
}

.module-library__grid {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: var(--spacing-lg);
  grid-template-columns: 1fr;
}

@media (min-width: 640px) {
  .module-library__grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 1024px) {
  .module-library__grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

.module-library__empty {
  margin: var(--spacing-lg) 0 0;
  padding: var(--spacing-lg);
  border: 1px dashed var(--color-border);
  border-radius: var(--radius-md);
  text-align: center;
  color: var(--color-text-light);
}

/* ── Library card ── */
.library-card {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xs);
  padding: var(--spacing-lg);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  text-decoration: none;
  color: inherit;
  height: 100%;
  transition:
    transform 0.15s ease,
    box-shadow 0.15s ease,
    border-color 0.15s ease;
}

.library-card:hover,
.library-card:focus-visible {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
  border-color: var(--color-primary);
}

.library-card__pill {
  align-self: flex-start;
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-bold);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 2px var(--spacing-sm);
  border-radius: 999px;
  margin-bottom: var(--spacing-xs);
}

.library-card__pill--elementary {
  background: rgba(46, 196, 182, 0.12);
  color: #0f8f83;
}

.library-card__pill--middle {
  background: rgba(255, 159, 28, 0.14);
  color: #b06200;
}

/* Featured modifier — gold accent so the Design Process flagship reads as
   the lead card in the library grid. */
.library-card--featured {
  border-color: var(--color-accent);
  border-top: 4px solid var(--color-accent);
}

.library-card--featured:hover,
.library-card--featured:focus-visible {
  border-color: var(--color-accent-dark);
}

.library-card__pill--featured {
  background: var(--color-accent);
  color: var(--color-text);
}

.library-card__title {
  font-size: var(--font-size-lg);
  font-weight: var(--font-weight-bold);
  margin: 0;
  line-height: 1.25;
}

.library-card__topic {
  font-size: var(--font-size-sm);
  color: var(--color-text-light);
  margin: 0;
}

.library-card__cta {
  margin-top: auto;
  padding-top: var(--spacing-sm);
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  color: var(--color-primary);
}
