/**
 * PPF Pro Blueprint - Student dashboard base shell (v0.3.36).
 *
 * v0.3.36 ($10,000 Dashboard), spec dashboard-10000-spec-2026-09-14.md
 * section 2. TOKEN DISCIPLINE (coordinator ruling 2026-09-14, supersedes
 * the brief's ":root block is yours" line): the base's T0 tokens in
 * assets/css/ppfb-tokens.css ARE the implementation standard. This file
 * defines NO tokens of its own and contains NO :root block; every value
 * below references a T0 name. No §2-named duplicates exist anywhere here.
 *
 * Dashboard-scoped value corrections the spec requires that the base
 * lacks: the account part renders no pass/fail words, so the spec's
 * pass/fail values (#1e6b3a / #a83226 vs the base's #1e6b34 / #b02a37)
 * are intentionally NOT overridden here. No dashboard part in this
 * component references them; no dead code ships.
 *
 * - Primary buttons (v0.3.56, seat I): Princess Blue (owner scope ruling
 *   2026-09-19: all buttons site-wide), white text (7.73:1). Gold is decorative only now (rules, seals).
 * - Progress ring arcs and milestone markers render in ink, not gold
 *   (design-lead adjudication, spec section 2).
 * - Record trio figures: 40px (locked). The 56px size is reserved for
 *   single-hero moments only.
 * - Body 17px/1.65. Eyebrows 12px uppercase +0.12em (spec-locked). 13px
 *   minimum for reading text. 16px minimum on form inputs.
 * - iPhone-first 390px: single column always, no horizontal scroll, tables
 *   become stacked rows.
 * - Staged reveals are driven by ppfb-dash-core.js: the hiding rules below
 *   apply ONLY under .ppfb-10k-js (set by JS at runtime), so a JS failure
 *   leaves full content present and unstyled by animation.
 * - Source Serif 4 loading is owned by the asset layer (the base enqueues
 *   the Google Fonts stylesheet); this file only references the T0 stacks.
 */

/* ---------------------------------------------------------------------------
 * Dashboard shell
 * ------------------------------------------------------------------------- */
.ppfb-10k-shell {
  background: var(--ppfb-10k-paper);
  color: var(--ppfb-10k-ink);
  font-family: var(--ppfb-10k-font-ui);
  font-size: var(--ppfb-10k-text-17px);
  line-height: var(--ppfb-10k-leading-body);
  max-width: 100%;
  overflow-x: clip;
}

/* Data numerals: lining + tabular figures everywhere a number is read. */
.ppfb-10k-data,
.ppfb-10k-figure,
.ppfb-10k-hero-figure {
  font-variant-numeric: lining-nums tabular-nums;
  font-feature-settings: "lnum" 1, "tnum" 1;
}

/* Record trio figures: 40px on 390px (locked, spec section 2). */
.ppfb-10k-figure {
  font-family: var(--ppfb-10k-font-display);
  font-size: 40px;
  line-height: 1.1;
  color: var(--ppfb-10k-ink);
}

/* Single-hero moments ONLY (banner ceremony, certificate). Not a record size. */
.ppfb-10k-hero-figure {
  font-family: var(--ppfb-10k-font-display);
  font-size: 56px;
  line-height: 1.05;
}

/* Eyebrows: 12px, uppercase, +0.12em letter spacing (locked, spec section 2). */
.ppfb-10k-eyebrow {
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--ppfb-10k-eyebrow);
  font-weight: var(--ppfb-10k-eyebrow-weight);
}

/* Secondary text. */
.ppfb-10k-quiet {
  color: var(--ppfb-10k-quiet);
}

/* Hairline rules between rows and sections. */
.ppfb-10k-rule {
  border: 0;
  border-top: 1px solid var(--ppfb-10k-line);
  margin: 0;
}

/* ---------------------------------------------------------------------------
 * Primary action (v0.3.56, seat I): Princess Blue on primary buttons
 * (owner scope ruling 2026-09-19: all buttons site-wide). White text on
 * Princess Blue is 7.73:1 (contract-measured).
 * ------------------------------------------------------------------------- */
.ppfb-10k-btn-primary {
  display: inline-block;
  background-color: var(--course-button-bg);
  color: var(--course-button-text);
  font-family: var(--ppfb-10k-font-ui);
  font-size: var(--ppfb-10k-text-ui);
  font-weight: var(--ppfb-10k-weight-semibold);
  line-height: var(--ppfb-10k-leading-ui);
  padding: 14px 28px;
  border: 0;
  border-radius: 999px;
  text-decoration: none;
  min-height: 44px;
  cursor: pointer;
}

/* Quiet secondary action: text link, ink. */
.ppfb-10k-link-quiet {
  color: var(--ppfb-10k-ink);
  text-decoration: underline;
  text-underline-offset: 3px;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
}

/* ---------------------------------------------------------------------------
 * Forms: 16px minimum on inputs (iOS zoom guard).
 * ------------------------------------------------------------------------- */
.ppfb-10k-shell input,
.ppfb-10k-shell select,
.ppfb-10k-shell textarea {
  font-size: var(--ppfb-10k-text-ui);
  font-family: var(--ppfb-10k-font-ui);
}

/* ---------------------------------------------------------------------------
 * Progress tracks: animate scaleX from the left origin, never width.
 * ------------------------------------------------------------------------- */
.ppfb-10k-track {
  transform-origin: left center;
}

/* ---------------------------------------------------------------------------
 * Staged reveals (400-600ms, transform/opacity only).
 * Applied ONLY when JS runs and sets .ppfb-10k-js on <html>; no-JS leaves
 * full content present. JS adds .is-visible with ~120ms stagger.
 * ------------------------------------------------------------------------- */
.ppfb-10k-js .ppfb-10k-reveal {
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 500ms ease, transform 500ms ease;
  will-change: opacity, transform;
}
.ppfb-10k-js .ppfb-10k-reveal.is-visible {
  opacity: 1;
  transform: none;
}

/* Reduced motion: instant, complete states. The JS also takes an instant
 * branch; this CSS is the belt-and-suspenders guarantee. */
@media (prefers-reduced-motion: reduce) {
  .ppfb-10k-js .ppfb-10k-reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
  .ppfb-10k-js .ppfb-10k-reveal.is-visible {
    opacity: 1;
    transform: none;
    transition: none;
  }
}

/* ---------------------------------------------------------------------------
 * iPhone-first 390px: single column always, no horizontal scroll,
 * tables become stacked rows.
 * ------------------------------------------------------------------------- */
.ppfb-10k-stack,
.ppfb-10k-shell table,
.ppfb-10k-shell thead,
.ppfb-10k-shell tbody,
.ppfb-10k-shell tr,
.ppfb-10k-shell td,
.ppfb-10k-shell th {
  display: block;
  width: 100%;
  max-width: 100%;
}
.ppfb-10k-shell table {
  border-collapse: collapse;
}

/* ---------------------------------------------------------------------------
 * Print: the enrollment record prints clean (papers mechanic).
 * ------------------------------------------------------------------------- */
@media print {
  .ppfb-10k-shell {
    background: #ffffff;
  }
  .ppfb-10k-account-record {
    border: 1px solid #000;
    padding: 24px;
  }
  .ppfb-10k-no-print {
    display: none !important;
  }
}
