

      :root {
        --font: BentonSans;
        --alt-font: "new-hero";
        --accent-color: #151f6d;
        --secondary-color: #40c1ac;
        --link-color: #009cde;
        --accent-highlight-color: #151f6d;
        --accent-highlight-background-color: #ecedfb;
        --accent-tinted-color-70: #b9bcd3;
        --accent-tinted-color-80: #d0d2e2;
        --accent-tinted-color-90: #e8e9f0;
        --accent-contrast-color: #fff;
        --accent-contrast-tinted-background-color: #b3b3b3;
        --accent-hover-color: #1d2b98;
        --secondary-hover-color: #329c8a;
        --secondary-contrast-color: #111;
        --link-hover-color: #45c8ff;
      }
      

.company__logo {text-indent: 100%;white-space: nowrap;overflow: hidden;background: url('https://media.thoughtindustries.com/thoughtindustries/image/upload/a_exif,c_fit,t_ti_company_logo_hires_v3/v1/course-uploads/b9d72787-64a3-4308-808c-f46b444e6990/9qmhzvlzbw94-LC-Logo_FullColor_RGB.png') no-repeat center left;background-size: contain;} .company__logo span.h4 {visibility: hidden;}
/* ============================================================
   AAPA LEARNING CENTRAL — MASTER STYLESHEET
   Version: 6.0
   ─────────────────────────────────────────────────────────────
   Scope guard: .ti-learner-view
   Injected via Header Tracking Script on all non-manager pages.
   Admin backend (/learn/manager/*) never receives this class
   and is fully unaffected by any rule in this file.

   Load order requirement:
     1. thought-industries-stylesheet (vendor, read-only)
     2. This file  ← always after vendor

   File structure:
     1.   Font Loading
     2.   Design Tokens (:root)
     3.   Learner Base Styles
     3b.  TI Platform Token Bridge & Vendor Component Overrides
            3b-I.    Shadcn Token Bridge
            3b-II.   Global Navigation & Header System
            3b-III.  Footer
            3b-IV.   Catalog Grid Cards
            3b-V.    Hero / Banner
            3b-VI.   Course Progress Indicators
            3b-VIII. TI Native Buttons (.btn)
            3b-IX.   Learning Path Detail — UI Suppressions
            3b-X.    Course Detail — Run Schedule Hide
            3b-XI.   Enrollment & Checkout — UI Suppressions
            3b-XII.  Survey / Evaluation — Retake Survey Hide
            3b-XIII. Content Player — Slideshow Controls Hide
            3b-XIV.  Content Player — Topic Content & Body Padding
            3b-XV.   Content Player — Learner Content Side Padding
            3b-XVI.  Global Widget Side Padding
            3b-XVII. Learning Path Hero (learning-content-hero)
     3c.  Section Band Layout System  (.section-band + .band-*)
     4.   Vertical Tab Widget  (.lc-tabs)
     5.   Live Kit Component   (.lk-*)
     6.   Utility Class System
              6a. Widget Backgrounds  (.bk-color-*)
              6b. Widget Title Color  (.title-color-*)
              6c. Widget Title Size   (.title-size-*)
              6d. Text Color          (.txt-color-*)
              6e. Text Size           (.txt-size-*)
              6f. Text Weight         (.txt-weight-*)
              6g. Text Alignment      (.txt-align-*)
              6h. Text Style          (.txt-style-*)
              6i. Padding             (.pad-*)
              6j. Margin              (.mar-*)
              6k. Icon Utilities      (.icon-badge, .icon-inline)
             6l. Snippet Components  (.lc-link-block)
     7.   Live Kit — Tab 2: Typography Demo Styles (.lk-demo-*)
     8.   Button System
     9.   Live Kit — Tab 3: Button Demo Styles (.lk-btn-*)
    10.   Form System
    11.   Learner Dashboard
             11-0. Page Canvas & Widget Foundation  (body.dashboard)
             11-A. Stat Tiles  (.widget--dashboard-stats)
             11-B. Welcome Hero  (.widget.cta-btn-1)
             11-C. Course / Content Cards  (a.catalog-item / .catalog-grid-item)
             11-D. Image Overlay Tiles  (.widget--featured-content_image-overlay)
             11-E. Badges  (.widget--badges_standard)
             11-F. Learner Access  (.widget--dashboard-access)
    12.   Course Detail Page
             (.course__detail__container / .course__detail__content / .course__detail__sidebar)
    13.   Content Player — Quiz / Assessment
             13-A. Content Player Shell    (.layout-panel)
             13-B. Section Header         (.learner-section__title__container)
             13-C. Progress Bar           (.section-progress-bar)
             13-D. Directional Navigation (.directional__nav)
             13-E. Quiz Container         (.quiz__container--test--taking)
             13-F. Question Block         (.question__body)
             13-G. Answer Choices         (.choice--multiple + all states)
             13-H. Quiz Action Buttons    (.btn--disabled / .btn--primary)
             13-I. Question Counter       (.topic__index)

   Vendor-conflict notes (inline where relevant):
     • Vendor defines `.btn, button { border: 1px solid #d3d4de;
       border-radius: 2px; padding: .5em 1.25em; ... }`.
       Our button system owns .button as a clean namespace (TI
       never uses bare .button in learner markup). .btn requires
       a color modifier to activate — vendor .btn is untouched.
     • Vendor defines `.button, .prefix.button { border: none;
       padding: 0; text-align: center }` via Foundation CSS.
       Same opt-in approach applies — vendor .button is untouched.
     • Vendor defines `.form { margin-bottom: 2rem; text-align: left }`
       and sets broad input styles under .form. Our .form class
       is nested inside .ti-learner-view, so specificity wins cleanly.
     • Vendor .tabs has `margin-bottom: 0 !important`. We use
       .lc-tabs (distinct class) — no conflict.
     • 3b-II header system: .top-bar vendor background #fff is
       overridden with !important. .header--dashboard vendor
       box-shadow and background are both overridden. Sticky
       implemented via position:fixed on .global-nav__container;
       page content offset via --header-total-h CSS custom property.
   ============================================================ */

/* ------------------------------------------------------------
   1. FONT LOADING
   BentonSans: Self-hosted via aapa.org CDN
   New Hero: Loaded via Typekit (yhf0fed.css) in TI's <head>.
   Reference as: font-family: "new-hero"

   ⚠️  CORS watch: BentonSans may fail in QA if aapa.org blocks
   cross-origin font requests. Fix: re-host .woff files in TI's
   media library and update src URLs below.
   ------------------------------------------------------------ */

@font-face {
  font-family: "BentonSans";
  font-weight: 300;
  font-display: swap;
  src: url("https://www.aapa.org/wp-content/themes/aapa/assets/fonts/BentonSans-Light.woff") format("woff");
}

@font-face {
  font-family: "BentonSans";
  font-weight: 400;
  font-display: swap;
  src: url("https://www.aapa.org/wp-content/themes/aapa/assets/fonts/BentonSans-Regular.woff") format("woff");
}

@font-face {
  font-family: "BentonSans";
  font-weight: 500;
  font-display: swap;
  src: url("https://www.aapa.org/wp-content/themes/aapa/assets/fonts/BentonSans-Medium.woff") format("woff");
}

@font-face {
  font-family: "BentonSans";
  font-weight: 700;
  font-display: swap;
  src: url("https://www.aapa.org/wp-content/themes/aapa/assets/fonts/BentonSans-Bold.woff") format("woff");
}

@font-face {
  font-family: "BentonSans";
  font-weight: 900;
  font-display: swap;
  src: url("https://www.aapa.org/wp-content/themes/aapa/assets/fonts/BentonSans-Black.woff") format("woff");
}

/* ------------------------------------------------------------
   2. DESIGN TOKENS
   Declared on :root — available to every rule below and any
   inline styles on the page.

   Two-layer token system:
     Layer 1 — Raw brand values  (--color-dark-blue, etc.)
     Layer 2 — Semantic aliases  (--color-primary, etc.)

   Always write component rules using Layer 2 aliases.
   To retheme, update an alias here — the change cascades.
   ------------------------------------------------------------ */

:root {
  /* ── AAPA Brand Colors (Layer 1) ── */
  --color-dark-blue: #151f6d;
  --color-blue: #009cde;
  --color-blue-light: #8bdcff;
  --color-coral: #f9423a;
  --color-green: #40c1ac;
  --color-light-green: #e5f2f4;
  --color-off-black: #141b4d;
  --color-off-black-deep: #000844;
  --color-dull-black: #8d89a5;
  --color-light-black: #c6c4d2;
  --color-light-grey: #fafafa;
  --color-white: #ffffff;

  /* ── Derived Shades (Layer 1 — hover states & one-off tints) ──
     Not in the core palette but used in component rules.
     Must live here — never inline in component declarations. */
  --color-dark-blue-deep: #0e1550;    /* mobile nav panel — slightly darker than dark-blue */
  --color-coral-dark: #dd3b34;        /* coral button hover state */
  --color-green-dark: #35af9a;        /* green button hover + progress gradient end */
  --color-blue-tint: #eef8ff;         /* band-blue-tint section background */
  --color-blue-pale: #7dd3f8;         /* accessible light blue on dark/navy bands */
  --color-gray-hover: #f0f0f2;        /* gray button hover background */
  --color-border-hover: #b9b6c8;      /* gray button hover border */
  --color-border-input-hover: #a9a5bb; /* form input hover border */

  /* ── Semantic Aliases (Layer 2) ──
     Use these in all component rules, never raw brand values. */
  --color-primary: var(--color-dark-blue);
  --color-action: var(--color-blue);
  --color-accent: var(--color-coral);
  --color-success: var(--color-green);
  --color-surface: var(--color-light-grey);
  --color-surface-alt: var(--color-light-green);
  --color-text-base: var(--color-off-black);
  --color-text-muted: var(--color-dull-black);
  --color-border: var(--color-light-black);
  --color-nav-bg: var(--color-dark-blue);
  --color-footer-bg: var(--color-off-black-deep);

  /* ── Typography ── */
  --font-heading: "new-hero", "BentonSans", "Helvetica Neue", Arial, sans-serif;
  --font-body: "BentonSans", "Helvetica Neue", Arial, sans-serif;
  --font-mono: "Courier New", monospace;

  /* Type Scale */
  --text-xs: 0.75rem;
  /* 12px — labels, badges   */
  --text-sm: 0.875rem;
  /* 14px — captions, meta   */
  --text-base: 1rem;
  /* 16px — body copy        */
  --text-md: 1.125rem;
  /* 18px — lead / intro     */
  --text-lg: 1.25rem;
  /* 20px — small headings   */
  --text-xl: 1.5rem;
  /* 24px — H4               */
  --text-2xl: 1.875rem;
  /* 30px — H3               */
  --text-3xl: 2.25rem;
  /* 36px — H2               */
  --text-4xl: 3rem;
  /* 48px — H1 / hero title  */

  /* Line Heights */
  --leading-tight: 1.2;
  --leading-normal: 1.5;
  --leading-relaxed: 1.7;

  /* Font Weights */
  --weight-light: 300;
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-bold: 700;
  --weight-black: 900;

  /* ── Spacing Scale ── */
  --space-1: 0.25rem;
  /*  4px */
  --space-2: 0.5rem;
  /*  8px */
  --space-3: 0.75rem;
  /* 12px */
  --space-4: 1rem;
  /* 16px */
  --space-5: 1.5rem;
  /* 24px */
  --space-6: 2rem;
  /* 32px */
  --space-7: 2.5rem;
  /* 40px */
  --space-8: 3rem;
  /* 48px */
  --space-10: 4rem;
  /* 64px */
  --space-12: 6rem;
  /* 96px */

  /* ── Shape ── */
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 20px;
  --radius-full: 9999px;

  /* ── Elevation ── */
  --shadow-sm: 0 1px 3px rgba(21, 31, 109, 0.08);
  --shadow-md: 0 4px 12px rgba(21, 31, 109, 0.12);
  --shadow-lg: 0 8px 24px rgba(21, 31, 109, 0.16);

  /* ── Motion ── */
  --transition-fast: 150ms ease;
  --transition-base: 250ms ease;

  /* ── Dashboard Canvas ──
     Cool gray-blue surface for the /dashboard route.
     Applied via body.dashboard in Section 11-0. */
  --color-dashboard-canvas: #F0F1F8;

  /* ── Elevation — Float ──
     Card shadow for dashboard widget panes.
     Sits between --shadow-sm and --shadow-md:
     lifted off the canvas without looking modal-heavy. */
  --shadow-float:
    0 1px 2px rgba(21, 31, 109, 0.05),
    0 3px 8px rgba(21, 31, 109, 0.08);

  /* ── Focus Rings ──
     Box-shadow halo applied alongside outline on :focus-visible.
     Two spread sizes: 3px for inline elements (buttons, inputs, links),
     4px for card-level targets (catalog items, image-overlay tiles).
     Error/success alphas intentionally softer (0.2) than action (0.25)
     so the semantic color reads clearly without overwhelming the border. */
  --shadow-focus-action:      0 0 0 3px rgba(0, 156, 222, 0.25);
  --shadow-focus-action-wide: 0 0 0 4px rgba(0, 156, 222, 0.25);
  --shadow-focus-error:       0 0 0 3px rgba(249, 66, 58, 0.2);
  --shadow-focus-success:     0 0 0 3px rgba(64, 193, 172, 0.2);

  /* ── Dashboard layout rhythm ── */
  --dashboard-gap: var(--space-5);
  /* 24px gap between widget cards */
}

/* ------------------------------------------------------------
   3. LEARNER-FACING BASE STYLES
   All rules scoped to .ti-learner-view.
   Admin backend is completely unaffected.
   ------------------------------------------------------------ */

/* ── Box-sizing reset (scoped — vendor has no global * reset) ── */
.ti-learner-view *,
.ti-learner-view *::before,
.ti-learner-view *::after {
  box-sizing: border-box;
}

/* ── Horizontal overflow guard ──
   Required safety net for every full-bleed technique in this stylesheet:
   negative-margin viewport escape (section bands, footer) and position:fixed
   edge cases can all produce subpixel overflow without this.
   .ti-learner-view is on <html>, so clipping here stops horizontal scroll
   at the root. Vertical scroll is fully preserved on body. */
.ti-learner-view {
  overflow-x: hidden;
}

/* ── Base body ──
   Vendor body: font-family: sans-serif, Arial; color: #333; font-size: 0.8125rem.
   We override within our scope. No conflict outside .ti-learner-view. */
html.ti-learner-view,
.ti-learner-view body {
  font-size: 16px;
}

.ti-learner-view body {
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: var(--weight-regular);
  line-height: var(--leading-normal);
  color: var(--color-text-base);
  background-color: var(--color-white);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* ── Container ── */
.ti-learner-view .container {
  max-width: 100%;
  width: 100%;
  padding-left: 0;
  padding-right: 0;
  background-color: var(--color-white);
  box-shadow: none;
}

.ti-learner-view .row:not(.section-band) {
  max-width: 1440px;
  margin-left: auto;
  margin-right: auto;
  box-sizing: border-box;
}

.ti-learner-view .row:not(.section-band) .row {
  max-width: 100%;
  padding-left: 0;
  padding-right: 0;
}

/* ── Heading hierarchy ──
   Vendor sets h1 font-size: 2em; h5: .75rem with no font-family.
   We override within scope — specificity of .ti-learner-view hN
   beats vendor plain hN selectors. */
.ti-learner-view h1,
.ti-learner-view h2,
.ti-learner-view h3,
.ti-learner-view h4,
.ti-learner-view h5,
.ti-learner-view h6,
.ti-learner-view .h1,
.ti-learner-view .h2,
.ti-learner-view .h3,
.ti-learner-view .h4,
.ti-learner-view .h5,
.ti-learner-view .h6 {
  font-family: var(--font-heading);
  font-weight: var(--weight-bold);
  line-height: var(--leading-tight);
  color: var(--color-text-base);
  margin-top: 0;
  margin-bottom: var(--space-4);
}

/* TI uses .h1–.h6 utility classes alongside real heading elements */
.ti-learner-view h1,
.ti-learner-view .h1 {
  font-size: var(--text-4xl);
}

.ti-learner-view h2,
.ti-learner-view .h2 {
  font-size: var(--text-3xl);
}

.ti-learner-view h3,
.ti-learner-view .h3 {
  font-size: var(--text-2xl);
}

.ti-learner-view h4,
.ti-learner-view .h4 {
  font-size: var(--text-xl);
}

.ti-learner-view h5,
.ti-learner-view .h5 {
  font-size: var(--text-lg);
}

.ti-learner-view h6,
.ti-learner-view .h6 {
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
}

/* Responsive heading scale — mobile-first step down */
@media (max-width: 640px) {

  .ti-learner-view h1,
  .ti-learner-view .h1 {
    font-size: var(--text-3xl);
  }

  .ti-learner-view h2,
  .ti-learner-view .h2 {
    font-size: var(--text-2xl);
  }

  .ti-learner-view h3,
  .ti-learner-view .h3 {
    font-size: var(--text-xl);
  }

  .ti-learner-view h4,
  .ti-learner-view .h4 {
    font-size: var(--text-lg);
  }
}

/* ── Body copy ── */
.ti-learner-view p {
  margin-top: 0;
  margin-bottom: var(--space-4);
  line-height: var(--leading-relaxed);
}

/* ── Inline links ── */
.ti-learner-view a {
  color: var(--color-action);
  text-decoration: none;
  transition: color var(--transition-fast);
}

.ti-learner-view a:hover {
  color: var(--color-blue-light);
  text-decoration: none;
}

/* ── Images ── */
.ti-learner-view img {
  max-width: 100%;
  display: block;
}

/* ============================================================
   3b. TI PLATFORM TOKEN BRIDGE & VENDOR COMPONENT OVERRIDES
   Version: 1.0 — Phase 1

   STRATEGY OVERVIEW
   ─────────────────────────────────────────────────────────────
   TI ships three vendor CSS layers:

   ① thought-industries-design-tokens-base-reset.css
      A shadcn/Radix-style token file using raw HSL channels
      (e.g. --primary: 241.3 87.62% 58.82%). TI's newer React
      components resolve these via hsl(var(--primary) / α).
      ► BRIDGE: We remap those channels to AAPA values inside
        .ti-learner-view. Result: TI's own components adopt
        AAPA branding automatically — zero additional rules.

   ② thought-industries-core-ui-bundle.css
      Tailwind-generated utility library (969 classes).
      Breakpoints: 640 / 769 / 1024 / 1440px.
      ► USE IT: Don't re-write layout — reach for flex,
        grid-cols-3, container, col-span-6, gap-4, etc. in HTML.
        Our CSS only writes brand-expression rules that Tailwind
        doesn't cover.

   ③ thought-industries-stylesheet-minified.css
      Foundation-based legacy component library (4,528+ classes).
      Contains all LMS components: .btn, .top-bar, .hero,
      .footer, .catalog-grid-item, .course-progress, .dashboard.
      ► OVERRIDE: Targeted, minimal overrides below. We go
        component by component, highest-value first.

   SCOPING RULE (applies to every rule in this section)
   ─────────────────────────────────────────────────────────────
   All rules are scoped to .ti-learner-view to guarantee zero
   bleed into the admin backend (/learn/manager/*).
   The backend never receives the .ti-learner-view class.
   ============================================================ */

/* ------------------------------------------------------------
   3b-I. SHADCN TOKEN BRIDGE
   Remaps TI's HSL-channel design tokens to AAPA brand values.
   TI components that consume these tokens (buttons, inputs,
   badges, cards in newer React UI) will automatically adopt
   AAPA colors — no additional component rules needed.

   How TI uses these:
     background: hsl(var(--primary));
     color:      hsl(var(--primary-foreground));
     border:     hsl(var(--border));
   ─────────────────────────────────────────────────────────────
   Token mapping rationale:
     --primary       → AAPA Dark Blue #151F6D  (221° 77% 26%)
     --primary-fg    → White
     --accent        → AAPA Blue #009CDE       (199° 100% 44%)
     --accent-fg     → White
     --destructive   → AAPA Coral #F9423A      (2° 94% 59%)
     --ring          → AAPA Blue (focus rings)
     --radius        → 8px (our --radius-md vs TI's 4px default)
     --border        → AAPA light-black #C6C4D2 (245° 10% 80%)
     --muted-fg      → AAPA dull-black #8D89A5 (245° 9% 59%)
   ------------------------------------------------------------ */

.ti-learner-view {
  /* ── Primary (AAPA Dark Blue) ── */
  --primary: 221 77% 26%;
  /* #151F6D */
  --primary-foreground: 0 0% 100%;
  /* white   */

  /* ── Accent (AAPA Blue — action color) ── */
  --accent: 199 100% 43%;
  /* #009CDE */
  --accent-foreground: 0 0% 100%;
  /* white   */

  /* ── Secondary ── */
  --secondary: 245 10% 90%;
  /* near --color-light-black */
  --secondary-foreground: 221 77% 26%;
  /* dark blue text on light */

  /* ── Destructive (AAPA Coral) ── */
  --destructive: 2 94% 59%;
  /* #F9423A */
  --destructive-foreground: 0 0% 100%;
  /* white   */

  /* ── Muted / surface ── */
  --muted: 245 5% 95%;
  /* near #FAFAFA */
  --muted-foreground: 245 9% 59%;
  /* #8D89A5 dull-black */

  /* ── Border & input ── */
  --border: 245 10% 80%;
  /* #C6C4D2 light-black */
  --input: 245 10% 83%;
  /* slightly darker      */

  /* ── Focus ring ── */
  --ring: 199 100% 43%;
  /* AAPA Blue */

  /* ── Card surface ── */
  --card: 0 0% 100%;
  /* white cards */
  --card-foreground: 221 77% 26%;
  /* dark blue text */

  /* ── Border radius — match our --radius-md ── */
  --radius: 0.5rem;
  /* 8px — TI default is 0.5rem, keep aligned */
}

/* ------------------------------------------------------------
   3b-II. GLOBAL NAVIGATION & HEADER SYSTEM
   Version: 2.1  (Sticky + all header variants)

   TI generates three distinct header page contexts. The DOM
   element always carries the base .header class plus one or
   two modifiers depending on the page type:

     .header--microsite
       Pages:    Homepage, catalog, course detail, custom pages
       DOM:      header.header.header--microsite
       Chrome:   Logo + full .top-bar nav widget + nav--top

     .header--dashboard
       Pages:    Learner dashboard
       DOM:      header.header.header--dashboard
       Chrome:   Logo + user account only (no nav links)

     .header--student  +  .header--learner  (always paired)
       Pages:    Content player (quiz, survey, video, text)
       DOM:      div.header.header--student.header--learner
       Chrome:   Home icon + course title (left) + logo (right)
       Note:     .header--student is the base layout class
                 (vendor float/absolute grid); .header--learner
                 is the AAPA modifier. Both always present together.

   The .nav--global-links utility strip appears on ALL pages
   above the main header — our shared anchor point.

   Strategy:
     • Sticky: homepage/catalog/dashboard headers are fixed via
       .global-nav__container + .header (position:fixed). Page
       content is offset via --header-total-h on #page-container.
     • Content player: .header--learner uses position:relative
       (not sticky/fixed) — it scrolls with the page. No offset
       compensation needed.
     • Shared tokens: Dark Blue (#151F6D) background across all
       header variants. One source of truth.
     • Dashboard consistency: apply same bg/height to
       .header--dashboard as .top-bar so both page types look
       identical at a glance.
     • Logo: .company-logo__container img scaled to SVG-friendly
       max-height so the asset never overflows regardless of format.
     • Vendor override notes:
         .top-bar vendor: background #fff, border 1px #e9e9e9
         .header--dashboard vendor: background #fff, box-shadow
         Both require !important to beat Foundation specificity.

   Breakpoints (honor TI's Foundation grid):
     Mobile:  ≤ 48em  / 768px
     Tablet:  ≤ 64em  / 1024px
     Desktop: ≥ 48.063em
   ------------------------------------------------------------ */

/* ── ─────────────────────────────────────────────────────── ──
   A. STICKY CHROME WRAPPER
   The global-nav__container + its sibling .container or
   .container.sidebar--closed--right hold the entire header.
   We make the two-piece chrome (utility strip + main header)
   sticky together by fixing the outermost shared ancestor.
   Because TI wraps all of this inside #learner > #lms,
   we target the component classes directly.
   ── ─────────────────────────────────────────────────────── ── */

/* Make the utility strip fixed and full-width.
   TI vendor applies max-width: 90% to .global-nav__container —
   we override that here so the background reaches both edges.
   left:0 + right:0 on a fixed element already defines 100vw width;
   max-width:none ensures the vendor rule doesn't fight it.
   top uses --secondary-panel-h (default 0px, set by JS) so the
   utility strip sits below the "Return to Management" panel when
   that panel is visible. */
.ti-learner-view .global-nav__container {
  position: fixed;
  top: var(--secondary-panel-h);
  left: 0;
  right: 0;
  z-index: 200;
  max-width: none;
  /* defeat vendor's 90% constraint */
  width: 100%;
  /* explicit belt-and-suspenders */
  background: var(--color-off-black-deep);
  /* matches nav--global-links bg */
  -webkit-transition: -webkit-transform var(--transition-base);
  transition: transform var(--transition-base);
}

/* Push page content down so it doesn't hide under the fixed chrome.
   Total chrome height: utility strip (28px) + main header (56px mobile
   / 64px desktop). Use CSS custom property so one edit cascades.    */
:root {
  --header-utility-h: 47px;
  --header-main-h: 56px;
  --header-total-h: calc(var(--header-utility-h) + var(--header-main-h));
  --secondary-panel-h: 0px;
  /* Set by JS when .panel.panel--secondary is visible; 0px otherwise.
     Dynamically interpolated on scroll so the fixed chrome tracks the
     panel scrolling off-screen. CSS consumers must not override this. */
}

@media (min-width: 769px) {
  :root {
    --header-main-h: 83px;
    --header-total-h: calc(var(--header-utility-h) + var(--header-main-h));
  }
}

/* Compensate all learner page content areas */
.ti-learner-view #main-content,
.ti-learner-view #page-container,
.ti-learner-view .container.sidebar--closed--right,
.ti-learner-view .container.sidebar--open--right {
  padding-top: var(--header-total-h);
}

/* Sticky footer: the page-level .container owns its own minimum height so no
   flex chain through Ember's wrapper divs is needed. It becomes a flex
   column; #main-content / #page-container grow to fill the slack, which
   naturally pushes footer.footer to the viewport bottom on short pages.
   Scoped to .application > .container (direct child) because TI reuses
   the .container class on component-level wrappers inside the content
   player sidebar (.learner__sidebar__expandables), where a min-height of
   100vh would cause massive whitespace on each sidebar nav link. The
   page-level shell is always a direct child of .application; component
   .container divs are never direct children.
   :not(#main-content) guards against the transcript page, where
   #main-content itself carries the .container class as a direct child
   of .application — applying min-height + flex-column to the content
   area rather than the page shell would interfere with its internal
   grid layout. The transcript page's sticky-footer behaviour is handled
   by its own section rules (Section 3b-II.C-I). */
.ti-learner-view .application > .container:not(#main-content) {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.ti-learner-view #main-content,
.ti-learner-view #page-container {
  flex: 1 1 auto;
}

/* ── ─────────────────────────────────────────────────────── ──
   B. MAIN HEADER — position: fixed, full viewport width
   Scoped explicitly to the two page-level header variants that
   should be fixed. TI reuses the .header class on panel headers
   (e.g. .header--tools, .resources__header) — a broad
   .ti-learner-view .header selector would catch all of them.
   Targeting .header--microsite and .header--dashboard directly
   is immune to any panel or future header variants.
   Content player .header--learner uses position:relative (D).
   ── ─────────────────────────────────────────────────────── ── */
.ti-learner-view .header--microsite,
.ti-learner-view .header--dashboard,
.ti-learner-view .header--article {
  position: fixed;
  top: calc(var(--secondary-panel-h) + var(--header-utility-h));
  left: 0;
  right: 0;
  z-index: 190;
  background: var(--color-white);
  margin: 0;
  width: auto;
  padding: 0;
  -webkit-transition: top var(--transition-base);
  transition: top var(--transition-base);
}

.ti-learner-view.is-scrolled .header--microsite,
.ti-learner-view.is-scrolled .header--dashboard,
.ti-learner-view.is-scrolled .header--article {
  top: 0;
  box-shadow: 0px 10px 16px -8px rgba(0, 0, 0, 0.1);
}

.ti-learner-view.is-scrolled .global-nav__container {
  /* translateY(-100%) = element height (47px). When --secondary-panel-h > 0
     the strip is offset down from the viewport top, so -100% alone leaves
     a sliver visible. Adding --secondary-panel-h ensures it clears fully. */
  -webkit-transform: translateY(calc(-100% - var(--secondary-panel-h)));
  transform: translateY(calc(-100% - var(--secondary-panel-h)));
}

/* .header__inner three-zone layout — scoped to page-level headers
   only. Panel headers (header--tools, resources__header) also use
   .header__inner but must not inherit this height or flex layout. */
.ti-learner-view .header--microsite .header__inner,
.ti-learner-view .header--dashboard .header__inner,
.ti-learner-view .header--article .header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: var(--header-main-h);
  max-width: 1440px;
  margin: 0 auto;
  padding: 0 1rem;
}

/* Collapse TI's ::after spacer — scoped to page-level headers.
   Panel headers should not have this pseudo-element suppressed. */
.ti-learner-view .header--microsite .header__inner::after,
.ti-learner-view .header--dashboard .header__inner::after,
.ti-learner-view .header--article .header__inner::after {
  display: none;
}

/* .header--article internal Foundation grid reset.
   Learning path pages use a .row > .columns.medium-6 wrapper
   inside .header__inner (unlike --microsite which has direct flex
   children). Reset Foundation's max-width/margin on the row so it
   fills the full flex container height and aligns the logo left. */
.ti-learner-view .header--article .header__inner > .row {
  width: 100%;
  max-width: none;
  margin: 0;
  display: flex;
  align-items: center;
  height: 100%;
}

.ti-learner-view .header--article .header__inner .columns {
  float: none;
  padding: 0;
  display: flex;
  align-items: center;
}

/* Hide TI's plain-text school name */
.ti-learner-view .header .company__school-name,
.ti-learner-view .header .company__school-name__divider {
  display: none;
}

/* Left: logo */
.ti-learner-view .header .company__beta-logo {
  order: 1;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  max-width: 225px;
}

/* Center: main nav */
.ti-learner-view .header .top-bar {
  order: 2;
  flex: 1;
  display: flex;
  justify-content: center;
  background: transparent !important;
  border: none !important;
  padding: 0;
}

.ti-learner-view .header .top-bar-section ul li {
  padding: 0;
}

.ti-learner-view .header .top-bar-section ul li>a {
  color: var(--color-text-base);
  font-weight: 500;
  letter-spacing: 0.5px;
}

.ti-learner-view .header .top-bar-section li:not(.has-dropdown) a:not(.button):hover,
.ti-learner-view .header .top-bar-section li:not(.has-dropdown) a:not(.button):focus {
  background-color: transparent;
  color: var(--color-action);
  text-decoration: none;
}

/* Right: Manager Access + Cart */
.ti-learner-view .header .nav--top {
  order: 3;
  flex-shrink: 0;
  display: flex;
  align-items: center;
}

.ti-learner-view .header .nav--top ul {
  display: flex;
  align-items: center;
  flex-direction: row-reverse;
  gap: var(--space-3);
  list-style: none;
  margin: 0;
  padding: 0;
}

.ti-learner-view .header .nav--top .button {
  margin: 0;
}

.ti-learner-view .header .nav ul>li:not(.has-form) a:not(.button):focus {
  background-color: transparent;
}

/* ── Mobile: hamburger left, logo center, icons right ──
   Scoped to the same two variants as the fixed-position rule above
   (.header--microsite and .header--dashboard) to avoid hitting panel
   headers (.header--tools, .resources__header, etc.) that also use
   .header__inner but must not inherit this flexbox reorder.
   .header--article is also included — it uses the same inner layout
   pattern (logo only, no nav) and needs the same mobile height reset. */
@media (max-width: 768px) {
  .ti-learner-view .header--microsite .header__inner,
  .ti-learner-view .header--dashboard .header__inner,
  .ti-learner-view .header--article .header__inner {
    justify-content: space-between;
    padding-left: 16px;
    padding-right: 16px;
    gap: 0;
  }

  .ti-learner-view .header .toggle-topbar {
    order: 1;
    flex-shrink: 0;
  }

  .ti-learner-view .header .company__beta-logo {
    order: 2;
    position: absolute;
    left: 0;
  }

  .ti-learner-view .header .nav--top {
    order: 3;
    flex-shrink: 0;
  }

  .ti-learner-view .header .top-bar {
    order: 4;
  }

  /* Manager Access — user icon */
  .ti-learner-view .header .nav--top li a {
    font-size: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    color: var(--color-white);
  }

  .ti-learner-view .header .nav--top li a::before {
    font-family: "unicons-line";
    content: "\uea77";
    font-size: 1.375rem;
    line-height: 1;
    font-style: normal;
    font-weight: normal;
  }

  /* Cart button — cart icon */
  .ti-learner-view .header .nav--top #cart-button {
    font-size: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    color: var(--color-white);
    background: transparent;
    border: none;
    padding: 0;
    cursor: pointer;
  }

  .ti-learner-view .header .nav--top #cart-button::before {
    font-family: "unicons-line";
    content: "\ueb2c";
    font-size: 1.375rem;
    line-height: 1;
    font-style: normal;
    font-weight: normal;
  }

  .ti-learner-view .header .nav--top .badge {
    display: none;
  }
}

/* ── 1440px inner constraint for utility strip nav ──
   .global-nav__container is now 100vw via fixed positioning.
   The nav inside it gets the same max-width treatment as all
   other full-bleed sections — centered, 20px edge padding. */
.ti-learner-view .nav--global-links {
  background-color: var(--color-off-black-deep);
  height: var(--header-utility-h);
  display: flex;
  align-items: center;
  justify-content: flex-end;
  max-width: none;
  /* nav fills the 100vw container */
  padding-left: max(20px, calc((100vw - 1440px) / 2 + 20px));
  padding-right: max(20px, calc((100vw - 1440px) / 2 + 20px));
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}

.ti-learner-view .nav--global-links>a {
  color: var(--color-white);
  font-family: var(--font-heading);
  font-size: 0.68rem;
  /* 11px — compact utility strip */
  font-weight: var(--weight-bold);
  letter-spacing: 2px;
  text-decoration: none;
  text-transform: uppercase;
  padding: 5px 0.5rem 0 0.5rem;
  line-height: var(--header-utility-h);
  transition: color var(--transition-fast);
}

.ti-learner-view .nav--global-links>a:first-child {
  padding-left: 0;
}

.ti-learner-view .nav--global-links>a:hover {
  color: var(--color-blue-light);
}

/* ── ─────────────────────────────────────────────────────── ──
   C. DASHBOARD HEADER — .header--dashboard
   Used exclusively on /dashboard. TI renders a two-column layout:
     col-left:  company logo
     col-right: user name + avatar initials + dropdown chevron
   No nav links — this is intentional (focused task UI).
   We unify it visually with .top-bar: same bg, same height,
   same logo treatment.
   ── ─────────────────────────────────────────────────────── ── */

/* Dropdown menu panel */
.ti-learner-view .dashboard-header-dropdown {
  background: var(--color-primary);
  border: none;
  border-top: 2px solid var(--color-action);
  border-radius: 0 0 var(--radius-md) var(--radius-md);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);
  min-width: 180px;
  right: 0;
  z-index: 300;
}

.ti-learner-view .dashboard-header-dropdown>li {
  background: transparent !important;
  color: var(--color-white);
  padding: 0;
}

.ti-learner-view .dashboard-header-dropdown>li a,
.ti-learner-view .dashboard-header-dropdown>li button {
  color: rgba(255, 255, 255, 0.82) !important;
  font-family: var(--font-body);
  font-size: var(--text-sm) !important;
  padding: 0.625rem 1.25rem !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
  transition:
    background var(--transition-fast),
    color var(--transition-fast);
}

.ti-learner-view .dashboard-header-dropdown>li a:hover,
.ti-learner-view .dashboard-header-dropdown>li button:hover {
  background: rgba(255, 255, 255, 0.1) !important;
  color: var(--color-white) !important;
}

.ti-learner-view .dashboard-header-dropdown>li:last-of-type a,
.ti-learner-view .dashboard-header-dropdown>li:last-of-type button {
  border-bottom: none !important;
}

/* ── ─────────────────────────────────────────────────────── ──
   C-II. TRANSCRIPT PAGE HEADER — .widget--transcript-header
   TI places .header--dashboard inside a content widget on the
   /transcript route, not at the .container root like /dashboard.
   The base .header rule applies position:fixed, pulling it out
   of the widget flow and visually overlapping the utility strip.
   We restore it to static flow, offset for the fixed utility
   strip, and style it to match the microsite header aesthetic.
   DOM path:
     .widget--transcript-header
       .header.header--dashboard
         .header__inner
           .row
             .column.small-6   logo + page title
             .column.small-6   user avatar + print/export buttons
   ── ─────────────────────────────────────────────────────── ── */

/* Reset position:fixed — specificity (0,3,0) beats base .header rule (0,2,0) */
.ti-learner-view .widget--transcript-header .header {
  position: static;
  top: auto;
  left: auto;
  right: auto;
  z-index: auto;
}

/* Override the global #main-content padding-top rule (line 638) which adds
   header-total-h (130px desktop) for pages with a fixed main header.
   Transcript has no fixed main header — only the utility strip is fixed —
   so we reduce the offset to just the utility strip height (47px). */
.ti-learner-view body.transcript #main-content {
  padding-top: var(--header-utility-h);
}

/* Remove vendor's .learn.transcript .widget { padding: 1rem 2rem } which
   has specificity (0,3,0) and shrinks the widget inward.
   Using #main-content ancestor raises our specificity to (1,2,0) to win
   without !important, achieving true full-viewport-width for the header. */
.ti-learner-view #main-content .widget--transcript-header {
  width: 100%;
  max-width: none;
  padding: 0;
}

/* Reset vendor padding (vendor applies 1rem 1rem 0 at >= 48em);
   add subtle shadow + bottom rule to frame the full-width header strip */
.ti-learner-view .widget--transcript-header .header--dashboard {
  padding: 0;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.07);
  border-bottom: 1px solid var(--color-border);
}

/* Allow inner container to grow with two-row content */
.ti-learner-view .widget--transcript-header .header__inner {
  height: auto;
  min-height: var(--header-main-h);
  padding: var(--space-3) var(--space-4);
}

.ti-learner-view .widget--transcript-header .header__inner > .row {
  display: flex;
  align-items: center;
  width: 100%;
}

/* Show page title — 4-class specificity beats the 3-class global hide rule */
.ti-learner-view .widget--transcript-header .header .company__school-name {
  display: block;
  color: var(--color-text-muted);
  font-family: var(--font-body);
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin: 8px 0 0;
}

/* Hide the empty spacer paragraph between logo and title */
.ti-learner-view .widget--transcript-header .header .company__school-name__divider {
  display: none;
}

/* Print and Export buttons — AAPA primary style
   Vendor .btn has explicit bg/border/color — !important required */
.ti-learner-view .widget--transcript-header .btn--print,
.ti-learner-view .widget--transcript-header .btn[href*="transcript/download"] {
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-white) !important;
  border-radius: var(--radius-full) !important;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  padding: 0.375rem 1rem;
  margin-bottom: 0;
}

.ti-learner-view .widget--transcript-header .btn--print:hover,
.ti-learner-view .widget--transcript-header .btn[href*="transcript/download"]:hover {
  background-color: var(--color-dark-blue-deep) !important;
  border-color: var(--color-dark-blue-deep) !important;
}

/* Right column — stack avatar row and button row, right-aligned */
.ti-learner-view .widget--transcript-header .column.small-6:last-child {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  justify-content: center;
  gap: var(--space-2);
}

/* Button row inside right column */
.ti-learner-view .widget--transcript-header .text-right {
  display: flex;
  justify-content: flex-end;
  gap: var(--space-2);
  align-items: center;
}

/* ── ─────────────────────────────────────────────────────── ──
   D. COURSE PLAYER HEADER — .header--learner
   DOM: div.header.header--student.header--learner (always paired)
   Minimal chrome: home icon + course title (left) + logo (right).

   Vendor (.header--student) owns the layout — we don't override
   it, we layer AAPA branding on top:
     • .header__left  float:left; width:66.67% at 48.063em+
     • .header__right position:absolute; left:66.67%; width:33.33%

   position:relative keeps it as the containing block for
   .header__right's absolute positioning. Section B (position:fixed)
   is explicitly scoped to --microsite and --dashboard, so no
   reset of top/z-index is needed here.

   Page-level differences vs. other routes:
     • .global-nav__container ABSENT — no utility strip
     • #main-content receives global padding-top compensation —
       reset below since the header is in flow (no fixed offset)
   ── ─────────────────────────────────────────────────────── ── */

/* Cancel the global padding-top on content player pages.
   Header is in flow; utility strip is absent; nothing is fixed. */
.ti-learner-view .course__container #main-content {
  padding-top: 0;
}

.ti-learner-view .header--learner {
  background: var(--color-white) !important;
  position: relative;
  height: var(--header-main-h);
  width: 100%;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
}

/* White logo panel — inherits vendor's absolute right-third
   positioning. height:100% works because parent has defined height.
   Vendor hides .header__right entirely on mobile (<48em).         */
.ti-learner-view .header--learner .header__right {
  background: var(--color-white);
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  padding-right: var(--space-4);
  box-sizing: border-box;
}

.ti-learner-view .course__container .header .company__beta-logo .company-logo__container {
  margin-top: 0;
}

/* Constrain logo image height within the white panel              */
.ti-learner-view .header--learner .company-logo__container img {
  max-height: 40px;
  width: auto;
  display: block;
}

/* Home / back button icon */
.ti-learner-view .header--learner .header__left__icon {
  height: 83px;
  line-height: 83px;
  padding: 0 1rem;
  background: var(--color-primary);
  color: rgba(255, 255, 255, 0.75);
  transition:
    background var(--transition-fast),
    color var(--transition-fast);
}

.ti-learner-view .header--learner .header__left__icon:hover {
  background: var(--color-blue);
  color: var(--color-white);
}

/* Course title — scoped to learner header to avoid bleeding into
   course detail or other pages that share the .course-title class */
.ti-learner-view .header--learner .course-title {
  color: var(--color-text-base);
  font-family: var(--font-body);
  font-weight: var(--weight-medium);
}

.ti-learner-view .header--learner .course-title.course-title-link:hover {
  color: var(--color-action);
}

/* Sub-nav inside learner header */
.ti-learner-view .header--learner .sub-nav {
  background: var(--color-off-black);
  border-top: 1px solid rgba(255, 255, 255, 0.08);
}

/* ── ─────────────────────────────────────────────────────── ──
   E. MOBILE  (≤ 768px)
   Logo left · hamburger right. Leverages TI's native Foundation
   top-bar toggle (data-topbar adds/removes .expanded on the nav).
   No custom JS required — only CSS layout and AAPA branding.

   DOM structure (homepage / microsite header):
     .header--microsite > .header__inner
       nav.nav--top            [hide on mobile]
       a.company__beta-logo    [logo — flex left]
       p.company__school-name* [hide on mobile]
       nav.top-bar[data-topbar]
         ul.title-area
           li.name             [empty, hide]
           li.toggle-topbar.menu-icon
             button.btn--bare
               span > span "Menu"   [visually hidden]
         section.top-bar-section [Foundation JS: display:none ↔ block]
           ul.left > [nav items…]
   ── ─────────────────────────────────────────────────────── ── */

@media (max-width: 768px) {
  /* ─ Tokens ───────────────────────────────────────────── */
  :root {
    --header-utility-h: 24px;
    --header-main-h: 56px;
  }

  /* ─ 1. Header inner: flex row, logo left, top-bar right ─ */
  .ti-learner-view .header--microsite .header__inner {
    display: flex;
    flex-direction: row;
    align-items: center;
    height: var(--header-main-h);
    padding: 0;
    /* overflow must be visible so the fixed panel renders  */
    /* correctly — position:fixed on .top-bar-section means */
    /* parent overflow is ignored by the browser anyway.    */
    overflow: visible;
  }

  /* ─ 2. Hide secondary header elements ────────────────── */
  .ti-learner-view .header--microsite .nav--top,
  .ti-learner-view .header--microsite .company__school-name,
  .ti-learner-view .header--microsite .company__school-name__divider {
    display: none;
  }

  /* ─ 3. Logo: left flex item ──────────────────────────── */
  .ti-learner-view .header--microsite .company__beta-logo {
    flex: 0 0 auto;
    padding-left: var(--space-4);
    /* reset any absolute positioning set by desktop rules  */
    position: static;
  }

  /* ─ 4. top-bar: fills remaining space on the right ───── */
  /* overflow:visible !important — Foundation sets          */
  /* overflow:hidden to clip the slide-in panel. With       */
  /* position:fixed on .top-bar-section this is moot, but  */
  /* we override explicitly as a defensive measure.         */
  .ti-learner-view .header--microsite .top-bar {
    flex: 1 0 0;
    height: var(--header-main-h) !important;
    background: transparent !important;
    overflow: visible !important;
    position: static;
  }

  /* ─ 5. title-area: flex, align toggle to the right ───── */
  .ti-learner-view .header--microsite .top-bar .title-area {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    height: 100%;
    padding: 0;
    margin: 0;
    list-style: none;
  }

  /* Hide the empty li.name placeholder */
  .ti-learner-view .header--microsite .top-bar .title-area .name {
    display: none;
  }

  /* ─ 6. Toggle li: static in flex flow ────────────────── */
  /* Foundation sets position:absolute; right:0; top:0 on  */
  /* .toggle-topbar. We pull it back into flex flow so the */
  /* title-area can right-align it naturally.               */
  .ti-learner-view .header--microsite .top-bar .toggle-topbar {

  }

  .ti-learner-view .header--microsite .top-bar .toggle-topbar button {
    padding: 0 var(--space-4) 0 0;
  }

  .ti-learner-view .header--microsite .top-bar .toggle-topbar button::before {
    content: "\ebae";
    font-family: "unicons-line";
    color: var(--color-text-base);
    font-size: var(--text-2xl);
  }

  .ti-learner-view .header--microsite .top-bar.expanded .toggle-topbar button::before {
    content: "\e9b8";
  }

  .ti-learner-view .header--microsite .top-bar .toggle-topbar button span {
    display: none;
  }

  /* ─ 10. Expanded state: keep bar height, strip bg color ─ */
  /* Foundation sets height:auto and background:transparent */
  /* on .top-bar.expanded. We lock the bar height so the   */
  /* fixed header never grows, and keep bg transparent so  */
  /* the panel below carries the AAPA color instead.       */
  .ti-learner-view .header--microsite .top-bar.expanded {
    background: transparent !important;
    height: var(--header-main-h) !important;
  }

  /* ─ 11. top-bar-section: fixed drop-down panel ──────── */
  /* Foundation controls display (none↔block) via inline   */
  /* style, and animates left (slide-in). We override to   */
  /* position:fixed so the panel drops below the fixed     */
  /* header regardless of ancestor overflow/position.      */
  /* !important beats Foundation's inline style on left.   */
  .ti-learner-view .header--microsite .top-bar-section {
    display: none;
    position: absolute;
    top: var(--header-main-h);
    left: 0 !important;
    width: 100%;
    -webkit-transition: none;
    transition: none;
    background: var(--color-dark-blue-deep);
    z-index: 195;
    border-top: 1px solid rgba(255, 255, 255, 0.12);
    box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
    max-height: calc(100vh - var(--header-total-h));
    overflow-y: scroll;
    overflow-x: hidden;
  }
  .ti-learner-view .header--microsite .top-bar.expanded .top-bar-section {
    display: block;
  }

  /* ─ 12. Nav list items ───────────────────────────────── */
  .ti-learner-view .header--microsite .top-bar-section ul.left {
    display: block;
    width: 100%;
    padding: var(--space-2) 0;
    float: none;
  }

  .ti-learner-view .header--microsite .top-bar-section ul.left > li {
    float: none;
    background: transparent;
    border-bottom: 1px solid rgba(255, 255, 255, 0.07);
  }

  .ti-learner-view .header--microsite .top-bar-section ul.left > li > a {
    display: block;
    padding: var(--space-3) var(--space-4) !important;
    color: var(--color-white) !important;
    font-size: var(--text-base);
    font-weight: var(--weight-regular);
    line-height: 1.4 !important;
    text-transform: none;
    border-bottom: none !important;
  }

  /* ─ 13. Dropdown sub-menus (Specialties, Topics) ─────── */
  .ti-learner-view .header--microsite .top-bar-section .dropdown {
    background: rgba(0, 0, 0, 0.2);
    border: none;
    position: static;
    width: 100%;
  }

  /* "Back" link in mobile sub-menu */
  .ti-learner-view .header--microsite .top-bar-section .dropdown .back a {
    position: absolute;
    top: 0;
    width: 100%;
    height: 52px;
    padding: 0;
    font-size: 0;
    border-bottom: none !important;
  }

  .ti-learner-view .top-bar-section .has-dropdown.moved,
  .ti-learner-view .top-bar-section .moved.navigation-widget__item--has-dropdown {
    position: relative !important;
  }

  .ti-learner-view .top-bar-section .has-dropdown > a,
  .ti-learner-view .top-bar-section .navigation-widget__item--has-dropdown > a {
    background-color: transparent !important;
  }

  .ti-learner-view .top-bar-section .has-dropdown.moved>.dropdown,
  .ti-learner-view .top-bar-section .moved.navigation-widget__item--has-dropdown>.dropdown {
    position: static !important;
  }

  .ti-learner-view .header--microsite .top-bar-section .dropdown li a {
    padding-left: calc(var(--space-4) + var(--space-3)) !important;
    font-size: var(--text-sm);
    border-bottom: 1px solid rgba(255, 255, 255, 0.05) !important;
  }

  /* Remove underline accent on active mobile row */
  .ti-learner-view .header--microsite .top-bar-section .active > a::after {
    display: none;
  }

  /* ─ Dashboard header ─────────────────────────────────── */
  .ti-learner-view .header--dashboard .dashboard-header__name {
    max-width: 100px;
  }

  /* ─ Utility strip ────────────────────────────────────── */
  .ti-learner-view .nav--global-links > a {
    font-size: 0.625rem;
    padding: 0 0.5rem;
  }
}

/* Tablet: logo scales down slightly */
@media (max-width: 1024px) {

  .ti-learner-view .top-bar .company-logo__container img,
  .ti-learner-view .header--dashboard .company-logo__container img {
    max-height: 30px;
  }
}

/* ------------------------------------------------------------
   3b-III. FOOTER
   TI vendor: .footer__inner has border-top: 1px solid #e9e9e9;
   color: #656565. AAPA requires Off-Black (#141B4D) footer
   background with white text — matching AAPA.org exactly.

   Full-bleed technique: .footer lives inside .container (90vw),
   so we use the negative-margin viewport escape — identical to
   .section-band — to extend the background to 100vw.
   The overflow-x: hidden on .ti-learner-view (html) absorbs
   any subpixel rounding without producing a scrollbar.
   .footer__inner then re-constrains content to 1440px centered.
   ------------------------------------------------------------ */

.ti-learner-view .footer {
  background: var(--color-footer-bg);
  width: 100%;
  margin-top: auto;
}

.ti-learner-view .footer__inner {
  max-width: 1440px;
  margin: 0 auto;
  padding: var(--space-8) max(20px, calc((100vw - 1440px) / 2 + 20px));
  border-top: none;
  color: rgba(255, 255, 255, 0.7);
  font-family: var(--font-body);
  font-size: var(--text-sm);
}

.ti-learner-view .footer a,
.ti-learner-view .footer__links a {
  color: rgba(255, 255, 255, 0.65);
  text-decoration: none;
  transition: color var(--transition-fast);
}

.ti-learner-view .footer a:hover,
.ti-learner-view .footer__links a:hover {
  color: var(--color-action);
  text-decoration: underline;
}

.ti-learner-view .footer__powered-by {
  color: rgba(255, 255, 255, 0.35);
  font-size: var(--text-xs);
}

.ti-learner-view .footer__company__info {
  color: rgba(255, 255, 255, 0.65);
}

/* ------------------------------------------------------------
   3b-IV. CATALOG GRID CARDS
   TI vendor: .catalog-grid-item has border: 1px solid #e9e9e9.
   Titles: color: #333; font-weight: 400.
   We elevate these into AAPA-branded cards with improved
   typography, rounded corners, shadow, and hover lift.

   Note: .catalog-grid-item__asset (thumbnail) and
   .catalog-grid-item__completed-container are left visually
   unchanged — only chrome/typography is affected.
   ------------------------------------------------------------ */

.ti-learner-view .catalog-grid-item {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  transition:
    box-shadow var(--transition-base),
    transform var(--transition-base);
  background: var(--color-white);
}

.ti-learner-view .catalog-grid-item:hover {
  box-shadow: var(--shadow-lg);
  transform: translateY(-3px);
}

/* ── Card title ── */
.ti-learner-view .catalog-grid-item__title {
  font-family: var(--font-heading);
  font-weight: var(--weight-bold);
  font-size: var(--text-base);
  color: var(--color-primary);
  line-height: var(--leading-tight);
  margin-bottom: var(--space-1);
  transition: color var(--transition-fast);
}

.ti-learner-view .catalog-grid-item:hover .catalog-grid-item__title {
  color: var(--color-action);
}

/* ── Card meta (date, source) ── */
.ti-learner-view .catalog-grid-item__start-date,
.ti-learner-view .catalog-grid-item__source {
  color: var(--color-text-muted);
  font-family: var(--font-body);
  font-size: var(--text-xs);
}

/* ── Block grid variant (alternate card layout TI uses) ── */
.ti-learner-view .block-grid__item__title {
  font-family: var(--font-heading);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
}

.ti-learner-view .block-grid__item__title>a {
  color: var(--color-primary);
  transition: color var(--transition-fast);
}

.ti-learner-view .block-grid__item__title>a:hover {
  color: var(--color-action);
}

/* ── List view variant ── */
.ti-learner-view .catalog-list-item__title {
  font-family: var(--font-heading);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  transition: color var(--transition-fast);
}

.ti-learner-view .catalog-list-item__title:hover {
  color: var(--color-action);
}

/* ── Catalog filters ── */
.ti-learner-view .catalog-aggregation__header {
  font-family: var(--font-body);
  font-weight: var(--weight-bold);
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--color-primary);
}

.ti-learner-view .catalog-active-filter {
  background: var(--color-surface-alt);
  border-color: var(--color-success);
  color: var(--color-primary);
  border-radius: var(--radius-full);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
}

/* ── Mobile: single-column cards below 640px ── */
@media (max-width: 640px) {
  .ti-learner-view .catalog-grid-item {
    border-radius: var(--radius-md);
  }

  .ti-learner-view .catalog-grid-item:hover {
    transform: none;
    /* suppress lift on touch devices */
  }
}

/* ------------------------------------------------------------
   3b-V. HERO / BANNER
   TI vendor: .hero__title { color: #333; font-size: 21px }.
   We give the hero AAPA-caliber typography. The hero is the
   first impression — it should be bold and branded.

   Background overlays are left to content editors (they set
   hero images/colors via TI's Site Builder). We only touch
   typography and caption chrome.
   ------------------------------------------------------------ */

.ti-learner-view .hero__title {
  font-family: var(--font-heading);
  font-weight: var(--weight-black);
  font-size: var(--text-3xl);
  /* 36px — up from TI's 21px */
  color: var(--color-white);
  line-height: var(--leading-tight);
  letter-spacing: -0.01em;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.35);
  margin-bottom: var(--space-3);
}

.ti-learner-view .hero .hero__caption {
  background: rgba(21, 31, 109, 0.78);
  /* AAPA Dark Blue w/ alpha */
  border-left: 4px solid var(--color-action);
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
}

.ti-learner-view .hero .hero__caption span {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  color: rgba(255, 255, 255, 0.88);
  line-height: var(--leading-relaxed);
}

/* ── Responsive hero text ── */
@media (max-width: 640px) {
  .ti-learner-view .hero__title {
    font-size: var(--text-2xl);
    /* 30px on mobile */
  }
}

@media (min-width: 769px) {
  .ti-learner-view .hero__title {
    font-size: var(--text-4xl);
    /* 48px on desktop+ */
  }
}

/* ------------------------------------------------------------
   3b-VI. COURSE PROGRESS INDICATORS
   TI vendor: .course-progress__circle uses a grey radial
   gradient. Filled state uses green. We bridge to AAPA green.
   The progress bar segments use #009CDE (already AAPA blue!),
   so that one is already correct — no override needed there.
   ------------------------------------------------------------ */

.ti-learner-view .course-progress__circle.filled {
  background: radial-gradient(95% 95% at 50% 5%, var(--color-green) 0%, var(--color-green-dark) 100%);
  border-color: var(--color-green-dark);
}

.ti-learner-view .learner-section__progress {
  color: var(--color-action);
  font-weight: var(--weight-medium);
  font-size: var(--text-sm);
}

/* ------------------------------------------------------------
   3b-VIII. TI NATIVE BUTTONS (.btn)
   TI's .btn base class is used on 149+ elements on the catalog
   page alone. We DO NOT touch bare .btn (see Section 8 notes).
   Here we ONLY override TI's own color-modified variants:
     .btn--primary   → TI's accent color → remap to AAPA blue
     .btn--blue      → already used in TI markup → AAPA blue
     .btn--alert     → TI red → remap to AAPA coral
     .btn--disabled  → TI's pre-interaction disabled state →
                       mirrors --primary visually at 0.4 opacity
   These are safe because they only activate on explicit
   color-variant buttons TI generates in learner pages,
   never on structural buttons like .btn--bare, .btn--link.
   ------------------------------------------------------------ */

/* TI's --primary variant → AAPA Dark Blue fill */
.ti-learner-view .btn--primary {
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-white) !important;
  border-radius: var(--radius-full) !important;
  font-family: var(--font-body) !important;
  font-weight: var(--weight-bold) !important;
  transition:
    background-color var(--transition-fast),
    border-color var(--transition-fast);
}

.ti-learner-view .btn--primary:hover {
  background-color: var(--color-action) !important;
  border-color: var(--color-action) !important;
}

/* TI's --disabled variant — used before interaction is possible
   (e.g. Submit before any answer is selected). Does NOT carry
   .btn--primary, so vendor's gray .btn base shows through without
   this rule. We mirror --primary's shape/color so the disabled
   state is recognisably the same button — just muted.           */
.ti-learner-view .btn--disabled {
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
  color: var(--color-white) !important;
  border-radius: var(--radius-full) !important;
  font-family: var(--font-body) !important;
  font-weight: var(--weight-bold) !important;
  opacity: 0.4;
  cursor: not-allowed;
  pointer-events: none;
}

/* TI's blue variant → AAPA blue */
.ti-learner-view .btn--blue {
  background-color: var(--color-action) !important;
  border-color: var(--color-action) !important;
  color: var(--color-white) !important;
  border-radius: var(--radius-full) !important;
  font-family: var(--font-body) !important;
  font-weight: var(--weight-bold) !important;
  transition:
    background-color var(--transition-fast),
    border-color var(--transition-fast);
}

.ti-learner-view .btn--blue:hover {
  background-color: var(--color-primary) !important;
  border-color: var(--color-primary) !important;
}

/* TI's alert variant → AAPA coral */
.ti-learner-view .btn--alert {
  background-color: var(--color-accent) !important;
  border-color: var(--color-accent) !important;
  color: var(--color-white) !important;
  border-radius: var(--radius-full) !important;
  font-family: var(--font-body) !important;
  font-weight: var(--weight-bold) !important;
}

/* Focus ring on all TI btn variants we override */
.ti-learner-view .btn--primary:focus-visible,
.ti-learner-view .btn--blue:focus-visible,
.ti-learner-view .btn--alert:focus-visible {
  outline: 2px solid var(--color-action);
  outline-offset: 2px;
  box-shadow: var(--shadow-focus-action);
}

/* ------------------------------------------------------------
   3b-IX. LEARNING PATH DETAIL — UI SUPPRESSIONS
   Hide elective milestone badges and the course collection
   listing inside LP milestone cards on /learning-paths/*.
   • .learning-path-milestone__badge--elective — purple tag shown
     on optional milestones; vendor sets display:inline-block
   • .collection__courses — course list inside each LP milestone;
     vendor renders it inline, requiring !important to override
   ------------------------------------------------------------ */

/* Hide the elective modifier badge on LP milestone cards.
   Compound selector (0,3,0) beats vendor's single-class (0,2,0). */
.ti-learner-view .learning-path-milestone__badge.learning-path-milestone__badge--elective {
  display: none;
}

/* Hide course listing inside LP milestone collection cards.
   Vendor renders .collection__courses via inline styles — !important
   required to beat that specificity. */
.ti-learner-view .collection__courses {
  display: none !important;
}

/* ------------------------------------------------------------
   3b-X. COURSE DETAIL — RUN SCHEDULE HIDE
   Hide the course session / run schedule block on course
   detail pages. Vendor: .course__detail__runs { clear: both;
   color: #656565; font-size: 12px }
   ------------------------------------------------------------ */

.ti-learner-view .course__detail__runs {
  display: none;
}

/* ------------------------------------------------------------
   3b-XI. ENROLLMENT & CHECKOUT — UI SUPPRESSIONS
   Hide gifting, cart, and coupon entry UI from enrollment
   sidebars and checkout flows.
   • .enroll__secondary-actions .icon-gift — gift icon inside
     enrollment CTA area (LP + course detail)
   • #cart-button — cart icon in the global header nav
   • .enroll__coupon — coupon / promo code entry field
   ------------------------------------------------------------ */

/* Hide gift icon inside enrollment secondary actions */
.ti-learner-view .enroll__secondary-actions .icon-gift {
  display: none;
}

/* Hide cart button from global header nav */
.ti-learner-view #cart-button {
  display: none;
}

/* Hide coupon / promo code field on enrollment and checkout */
.ti-learner-view .enroll__coupon {
  display: none;
}

/* Hide all secondary action buttons in enrollment CTA area */
.ti-learner-view .enroll__secondary-actions > .btn {
  display: none;
}

/* ------------------------------------------------------------
   3b-XII. SURVEY / EVALUATION — RETAKE SURVEY HIDE
   Hide the "Retake Survey" CTA on evaluation completion pages.
   Compound selector reaches (0,4,1); !important required because
   TI's component renderer applies display:flex inline on this
   specific button element.
   ------------------------------------------------------------ */

.ti-learner-view button.btn.btn--primary.btn--left.retake-survey {
  display: none !important;
}

/* ------------------------------------------------------------
   3b-XIII. CONTENT PLAYER — SLIDESHOW CONTROLS HIDE
   Hide the slideshow navigation controls inside content player.
   Vendor renders .slide-show__controls with display:flex —
   !important required to override.
   ------------------------------------------------------------ */

.ti-learner-view .slide-show__controls {
  display: none !important;
}

/* ------------------------------------------------------------
   3b-XIV. CONTENT PLAYER — TOPIC CONTENT & BODY PADDING
   At ≥768px the vendor stacks:
     .topic__content--text:  padding-left/right: 1rem  (16px each)
     .topic__text__body:     padding: 0 2em 0 2.75em   (44px left, 32px right)
   These compound with .learner__content padding and produce
   large apparent margins inside the content column. Zero both
   out; adequate inset is already provided by .learner__content.
   Also restores brand text color overridden by vendor #656565.
   ------------------------------------------------------------ */

.ti-learner-view .topic__content.topic__content--text {
  padding-left: 0;
  padding-right: 0;
}

.ti-learner-view .topic__text__body {
  color: var(--color-text-base);
  padding: 0;
}

/* ------------------------------------------------------------
   3b-XV. CONTENT PLAYER — LEARNER CONTENT SIDE PADDING
   Vendor applies padding: 1rem 5rem (tablet) and 2rem 10rem
   (desktop) to .learner__container--closed .learner__content,
   producing ~160px side gutters at large screens. Override to
   a reasonable 2rem uniform padding.
   ------------------------------------------------------------ */

@media only screen and (min-width: 48.063em) {
  .ti-learner-view .learner__container--closed .learner__content {
    padding: 1rem 2rem;
  }
}

@media only screen and (min-width: 64.063em) {
  .ti-learner-view .learner__container--closed .learner__content {
    padding: 2rem;
  }
}

/* ------------------------------------------------------------
   3b-XVI. GLOBAL WIDGET SIDE PADDING
   Vendor gives .layout__content .widget padding: 1rem 2rem at
   ≥768px — this stacks with Foundation column gutters and
   produces excessive side indentation on every page. Zero out
   horizontal padding; top/bottom rhythm is handled per widget.
   ------------------------------------------------------------ */

.ti-learner-view .layout__content .widget {
  padding-left: 0;
  padding-right: 0;
}

/* ------------------------------------------------------------
   3b-XVII. LEARNING PATH HERO — .learning-content-hero
   Used on all Learning Path detail pages (/learning-paths/[slug]).
   Distinct from the catalog/homepage .hero widget (Section 3b-V),
   which targets .hero__title and .hero__caption on a different
   Ember component.

   DOM structure (confirmed across all four LP snapshot variants):
     .learning-content-hero.w-full.aspect-[2/1 or 3/1]   position:relative
       a.learning-content__back-button.active             Back to Dashboard
       .learning-content-hero__overlay                    Absolute overlay div
       picture.picturefill                                Image (--with-asset only)
       div.w-full.py-0.px-10.absolute.left-0.top-[40%]   Title + description
         h1.text-white.text-xl.font-bold                  LP/course title
         .text-lg.text-white.leading-normal               Description (optional)

   Root modifier classes:
     .learning-content-hero--with-asset   Has a banner image
     .learning-content-hero--no-asset     No image (vendor bg: #656565)
     aspect-[2/1]                         Standard ratio (most LP pages)
     aspect-[3/1]                         Small banner (Brain Health etc)

   Widget wrappers (no style target — structural only):
     .widget--learning-path-content-hero_standard
     .widget--learning-path-content-hero_small-banner

   Problems this section solves:
   1. FLAT OVERLAY — TI renders .learning-content-hero__overlay via an
      inline style: background-image:linear-gradient(0deg,rgba(0,0,0,.7),
      rgba(0,0,0,.7)). This is a uniform 70% black scrim that completely
      obscures the banner image. Replaced with a cinematic bottom gradient
      so the image is clearly visible in the top portion of the hero.
   2. TEXT POSITION — The title/description container is set to top:40%
      via TI's Tailwind utility class .top-[40%] (specificity 0,1,0),
      placing text mid-hero. Anchored to bottom:0 instead.
   3. TEXT LEGIBILITY — A gradient scrim on the text container provides
      WCAG AA-level contrast regardless of image colors or description
      length. "to bottom" direction: transparent at the top of the
      container (padding/breathing room), rapidly opaque below — so the
      gradient covers exactly the live text area regardless of how tall
      the container grows.
   4. NO-ASSET CASE — Vendor's flat #656565 grey and the bottom-anchored
      image-overlay layout are replaced entirely with a branded panel:
      diagonal dark-navy gradient, vertically centered text, AAPA cyan
      accent stripe, and overlay disabled. Completely distinct visual
      treatment — reads as intentional design, not a missing image.
   ------------------------------------------------------------ */

/* A. Overlay: cinematic bottom-to-transparent gradient.
   !important required to beat TI's inline background-image style.
   "to top" = 0% is bottom of hero (darkest), 100% is top (transparent). */
.ti-learner-view .learning-content-hero__overlay {
  background-image: linear-gradient(
    to top,
    rgba(0, 0, 0, 0.6) 0%,
    rgba(0, 0, 0, 0.2) 40%,
    rgba(0, 0, 0, 0) 65%
  ) !important;
}

/* ── ─────────────────────────────────────────────────────── ──
   B. NO-ASSET: branded panel treatment
   Completely distinct from the with-asset gradient-overlay layout.
   No image → no image to reveal → entirely different visual logic.

   Layout mechanics:
   • Root gets display:flex + align-items:flex-start + vertical
     padding so the text container (repositioned to position:relative
     in B-4) becomes the sole in-flow flex item, top-aligned.
   • aspect-ratio:auto !important removes TI's Tailwind aspect-[2/1]
     so the hero shrinks/grows to fit its content.
   • The back button (position:absolute) gets explicit top:0; left:0
     in B-2b to anchor it to the top-left corner regardless of the
     flex static-position calculation.
   • The overlay remains position:absolute — out of flex flow.
   • The text container's position:relative !important beats both
     Tailwind's .absolute utility class (0,1,0) and any compiled
     !important on that utility.
   ── ─────────────────────────────────────────────────────── ── */

/* B-1. Root: diagonal navy gradient, content-height, top-aligned flex */
.ti-learner-view .learning-content-hero--no-asset {
  background: linear-gradient(
    135deg,
    var(--color-off-black-deep) 0%,
    var(--color-primary) 100%
  ) !important;
  display: flex;
  align-items: flex-start;
  aspect-ratio: auto !important;
  padding-top: var(--space-10);
  padding-bottom: var(--space-6);
}

/* B-2. Top accent stripe — AAPA action blue via ::before.
   Brands the panel edge without competing with the title text. */
.ti-learner-view .learning-content-hero--no-asset::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  background: var(--color-action);
  z-index: 2;
}

/* B-2b. Back button: anchored top-left.
   Without explicit top/left, an abs-positioned child in a flex
   container uses its "static position" (driven by flex alignment)
   and may appear mid-panel. Force top:0; left:0 to pin it. */
.ti-learner-view .learning-content-hero--no-asset .learning-content__back-button {
  top: 0;
  left: 0;
}

/* B-3. Overlay: disabled entirely.
   No image → no need for a scrim. Both background-image (inline
   style, beaten via !important) and background-color are cleared. */
.ti-learner-view .learning-content-hero--no-asset .learning-content-hero__overlay {
  background-image: none !important;
  background-color: transparent !important;
}

/* B-4. Text container: repositioned to relative (flex item), scrim removed.
   position:relative !important — beats Tailwind's .absolute (0,1,0).
   top/bottom auto !important — beats generic Rule C's auto/0 !important.
   background:none !important — removes the gradient scrim from Rule C.
   Vertical padding omitted: the root B-1 padding handles vertical spacing. */
.ti-learner-view .learning-content-hero--no-asset > div:not(.learning-content-hero__overlay) {
  position: relative !important;
  top: auto !important;
  bottom: auto !important;
  padding: 0 var(--space-8) !important;
  background: none !important;
  max-width: 900px;
}

/* B-5. Title: no text-shadow (unneeded on solid bg).
   Font size inherits from generic Rule D (--text-3xl base,
   --text-4xl at ≥769px) — no need to restate. */
.ti-learner-view .learning-content-hero--no-asset h1 {
  text-shadow: none;
  margin-bottom: var(--space-3);
}

/* B-6. Mobile (≤640px): undo the generic line-clamp; tighter padding.
   The flex layout adapts to content height on a solid bg —
   description clamping is neither necessary nor desirable here. */
@media (max-width: 640px) {
  .ti-learner-view .learning-content-hero--no-asset {
    padding-top: var(--space-8);
    padding-bottom: var(--space-5);
  }

  .ti-learner-view .learning-content-hero--no-asset .text-lg {
    display: block;
    overflow: visible;
  }

  .ti-learner-view .learning-content-hero--no-asset > div:not(.learning-content-hero__overlay) {
    padding: 0 var(--space-4) !important;
  }
}

/* C. Text container: anchor to bottom, add gradient scrim.
   TI's .top-[40%] Tailwind utility has specificity 0,1,0; our rule
   wins at 0,2,0. !important added as a safeguard against compiled-
   Tailwind !important declarations on that utility.
   "to bottom" direction: transparent at top of container (breathing
   room), opaque at ~22% and below — covers the full title + description
   area no matter how tall the container grows as text increases. */
.ti-learner-view .learning-content-hero > div:not(.learning-content-hero__overlay) {
  top: auto !important;
  bottom: 0;
  padding: var(--space-8) var(--space-7) var(--space-5) !important;
  background: linear-gradient(
    to bottom,
    transparent 0%,
    rgba(0, 0, 0, 0.82) 22%,
    rgba(0, 0, 0, 0.88) 100%
  );
  box-sizing: border-box;
}

/* D. Title: New Hero Bold, AAPA heading scale.
   Overrides TI Tailwind utilities text-xl (1.25rem) and font-bold (700).
   text-shadow adds depth independent of the scrim. */
.ti-learner-view .learning-content-hero h1 {
  font-family: var(--font-heading);
  font-weight: var(--weight-black);
  font-size: var(--text-3xl);
  color: var(--color-white);
  line-height: var(--leading-tight);
  letter-spacing: -0.01em;
  margin-bottom: var(--space-2);
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);
}

/* E. Description text (optional .text-lg sibling of h1).
   Softened white (0.88 alpha) reads slightly lighter than the title,
   creating visual hierarchy without a color shift. */
.ti-learner-view .learning-content-hero .text-lg {
  color: rgba(255, 255, 255, 0.88);
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: var(--leading-relaxed);
  margin-bottom: 0;
  max-width: 72ch;
}

/* F. Back to Dashboard link: polish vendor defaults.
   Vendor sets color:#fff on base and color:#ccc on :hover/.active.
   We keep white but control via opacity for a subtler interactive feel. */
.ti-learner-view .learning-content__back-button {
  color: var(--color-white) !important;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  opacity: 0.82;
  -webkit-transition: opacity var(--transition-fast);
  transition: opacity var(--transition-fast);
}

.ti-learner-view .learning-content__back-button:hover,
.ti-learner-view .learning-content__back-button.active:hover {
  color: var(--color-white) !important;
  opacity: 1;
}

/* G. Desktop: larger title, roomier padding */
@media (min-width: 769px) {
  .ti-learner-view .learning-content-hero h1 {
    font-size: var(--text-4xl);
  }

  .ti-learner-view .learning-content-hero .text-lg {
    font-size: var(--text-lg);
  }

  .ti-learner-view .learning-content-hero > div:not(.learning-content-hero__overlay) {
    padding: var(--space-10) var(--space-8) var(--space-6) !important;
  }
}

/* H. Mobile: tighter padding, compact title, description capped at 3
   lines via line-clamp to prevent overflow on small 2:1 aspect heroes.
   -webkit-box / -webkit-line-clamp / -webkit-box-orient are widely
   supported legacy properties safe for TI's parser. */
@media (max-width: 640px) {
  .ti-learner-view .learning-content-hero h1 {
    font-size: var(--text-2xl);
  }

  .ti-learner-view .learning-content-hero .text-lg {
    font-size: var(--text-sm);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }

  .ti-learner-view .learning-content-hero > div:not(.learning-content-hero__overlay) {
    padding: var(--space-6) var(--space-4) var(--space-4) !important;
  }
}

/* ============================================================
   END OF 3b — TI PLATFORM TOKEN BRIDGE & VENDOR OVERRIDES
   ============================================================ */

/* ============================================================
   3c. SECTION BAND LAYOUT SYSTEM
   Version: 1.0

   WHAT THIS SOLVES
   ─────────────────
   TI wraps all homepage/catalog content inside:
     .container  →  max-width: 90vw  (at ≥ 1025px)
       .home__content  →  padding: 0
         .layout__content
           .row.widget  ← every section lives here

   Because widgets are trapped inside a 90vw container, any
   background color applied to a widget stops at 90% of the
   viewport — white gutters bleed through on both sides. You
   cannot achieve LinkedIn-style full-bleed section bands from
   inside the container without escaping it.

   THE ESCAPE TECHNIQUE
   ─────────────────────
   We use the "negative-margin viewport escape" — a well-known
   CSS pattern for breaking out of a constrained parent without
   touching the DOM:

     margin-left:  calc(-50vw + 50%)
     margin-right: calc(-50vw + 50%)

   How the math works:
     50vw    = half the viewport width
     50%     = half the element's own width (which equals the
               container width, since width: 100%)
     50vw - 50% = the gap between the element edge and the
                  viewport edge — the exact inset .container adds
     Negate it = pull the element OUT by that same amount

   The result: the widget's background-color now covers 100vw.

   We then ADD matching padding-left/padding-right to keep the
   widget's internal content from touching the screen edge, and
   set a .band-inner wrapper (or target .row directly) to
   max-width: 1440px + margin: 0 auto to re-constrain the
   readable content column.

   EDITOR USAGE
   ─────────────
   Content editors apply these classes in TI Site Builder's
   "CSS Classes" field on any Layout widget. No HTML needed.

   Step 1 — Make it full-bleed:
     section-band          (required — enables the escape)

   Step 2 — Background color (one active):
     band-white            #FFFFFF   clean default
     band-light            #FAFAFA   subtle alternating
     band-blue-tint        #EEF8FF   soft AAPA brand wash  ← deployed
     band-navy             #151F6D   AAPA Dark Blue (light text)
     band-dark             #141B4D   AAPA Off-Black (light text)

   Step 3 — Vertical rhythm (optional, one active):
     band-sm               padding-top/bottom: 2rem
     band-md               padding-top/bottom: 4rem  (default)
     band-lg               padding-top/bottom: 6rem
     band-xl               padding-top/bottom: 8rem

   Step 4 — Row layout (combine freely):
     band-row-flex         enables flexbox on inner .row
     band-align-top        align-items: flex-start
     band-align-middle     align-items: center
     band-align-bottom     align-items: flex-end
     band-align-stretch    align-items: stretch
     band-direction-reverse  row-reverse column order
     band-justify-start    justify-content: flex-start
     band-justify-center   justify-content: center
     band-justify-end      justify-content: flex-end
     band-justify-between  justify-content: space-between
     band-justify-around   justify-content: space-around
     band-justify-evenly   justify-content: space-evenly
     band-eq-height        equal-height columns (flex stretch)

   Step 5 — Divider accent (optional):
     band-border-top       3px AAPA Blue line above the band
     band-border-bottom    3px AAPA Blue line below the band

   Step 6 — Text alignment (optional):
     band-text-center      text-align: center on all children
     band-text-left        text-align: left on all children

   Step 7 — Content column width (apply to inner elements):
     band-inner--narrow    max-width: 760px  — long-form text
     band-inner--wide      max-width: 1440px — matches band wrap

   FULL EXAMPLE (in TI CSS Classes field):
     section-band  band-navy  band-lg  band-row-flex  band-align-middle

   ⚠  REMOVED MODIFIERS (2026-03-23 audit cleanup — not restored):
      band-eyebrow, band-stats, band-stat.
      Re-add to the stylesheet if content authoring requires them.

   VENDOR CONFLICT NOTES
   ──────────────────────
   • .container vendor max-width:90% fires at ≥ 64.063em (1025px)
     Our escape uses 50vw math which is container-width-agnostic.
     Works correctly at every breakpoint.
   • .row vendor: margin: 0 auto; max-width: 100%; width: 100%.
     Our .section-band > .row override adds max-width: 1440px.
     Specificity: our rule (.ti-learner-view .section-band > .row)
     beats vendor (.row) cleanly — no !important needed.
   • On mobile (< 768px) the escape is disabled — container is
     effectively full-width already, so no escape needed and
     the negative margins would cause horizontal scroll.
   ============================================================ */

/* ── ─────────────────────────────────────────────────────── ──
   A. CORE ESCAPE — makes widget background full-bleed
   ── ─────────────────────────────────────────────────────── ── */

.ti-learner-view .section-band {
  position: relative;
  width: 100%;
  padding-top: var(--space-10);
  padding-bottom: var(--space-10);
}

/* Featured content widgets use an extra .row inside — keep it
   constrained and prevent double-padding */
.ti-learner-view .section-band .featured-content-default-grid,
.ti-learner-view .section-band .featured-content-multi-carousel {
  max-width: 1440px;
  margin-left: auto;
  margin-right: auto;
}

/* Widget titles rendered as .h2.widget__title — already targeted
   above but needs font-size reset to avoid cascade issues */
.ti-learner-view .section-band .widget__title {
  padding-left: var(--space-5);
  padding-right: var(--space-5);
}

/* Scale down on tablet and mobile — both breakpoints produced identical
   values (var(--space-8)) so they are merged into a single block. */
@media (max-width: 1024px) {
  .ti-learner-view .section-band {
    padding-top: var(--space-8);
    padding-bottom: var(--space-8);
  }
}

/* Row alignment utilities (apply to .section-band itself when it is a .row widget,
   OR to an inner .row inside the band). These are opt-in so they won't change
   existing TI/Foundation row behavior unless you add the class. */

/* 1) Enable flex behavior for a row when you need alignment controls */
.ti-learner-view .section-band.band-row-flex .row {
  display: flex;
  flex-wrap: wrap;
}

/* 2) Horizontal alignment (justify-content) */
.ti-learner-view .section-band.band-justify-start .row {
  justify-content: flex-start;
}

.ti-learner-view .section-band.band-justify-center .row {
  justify-content: center;
}

.ti-learner-view .section-band.band-justify-end .row {
  justify-content: flex-end;
}

.ti-learner-view .section-band.band-justify-between .row {
  justify-content: space-between;
}

.ti-learner-view .section-band.band-justify-around .row {
  justify-content: space-around;
}

.ti-learner-view .section-band.band-justify-evenly .row {
  justify-content: space-evenly;
}

/* 3) Vertical alignment for columns within the row (align-items) */
.ti-learner-view .section-band.band-align-top .row {
  align-items: flex-start;
}

.ti-learner-view .section-band.band-align-middle .row {
  align-items: center;
}

.ti-learner-view .section-band.band-align-bottom .row {
  align-items: flex-end;
}

.ti-learner-view .section-band.band-align-stretch .row {
  align-items: stretch;
}

/* 4) Even/equal column heights (opt-in)
   TI wraps column widget content in .ember-view divs between the band root and
   the inner .row, making direct child (>) selectors from the band root unable to
   reach .columns. All selectors use the descendant combinator instead.
   float: none is required to override TI's float-based column layout. */

/* Target the inner .row — make it the flex container for equal-height columns */
.ti-learner-view .section-band.band-eq-height .row {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
}

/* Override float-based layout on columns; become flex containers */
.ti-learner-view .section-band.band-eq-height .columns,
.ti-learner-view .section-band.band-eq-height .column {
  float: none;
  display: flex;
  flex-direction: column;
}

/* editor-content fills the column and propagates the flex chain downward */
.ti-learner-view .section-band.band-eq-height .columns > .editor-content,
.ti-learner-view .section-band.band-eq-height .column > .editor-content {
  width: 100%;
  flex: 1;
  display: flex;
  flex-direction: column;
}

/* Any snippet card direct child automatically fills full column height.
   Future snippet cards participate as long as their root uses flex-direction: column. */
.ti-learner-view .section-band.band-eq-height .columns > .editor-content > *,
.ti-learner-view .section-band.band-eq-height .column > .editor-content > * {
  flex: 1;
}

.ti-learner-view .section-band.band-direction-reverse .row {
  flex-direction: row-reverse;
}

/* ── ─────────────────────────────────────────────────────── ──
   B. BACKGROUND COLOR VARIANTS
   Applied as a second class alongside .section-band.
   Example: class="section-band band-light"
   ── ─────────────────────────────────────────────────────── ── */

/* White — clean, default */
.ti-learner-view .section-band.band-white {
  background-color: var(--color-white);
}

/* Off-white — subtle section separator, alternating rhythm */
.ti-learner-view .section-band.band-light {
  background-color: var(--color-light-grey);
}

/* AAPA Light Blue tint — soft brand warmth */
.ti-learner-view .section-band.band-blue-tint {
  background-color: var(--color-blue-tint);
}

/* AAPA Dark Blue — bold brand section */
.ti-learner-view .section-band.band-navy {
  background-color: var(--color-primary);
  /* #151F6D */
}

/* AAPA Off-Black — deep CTA section, à la LinkedIn dark bands */
.ti-learner-view .section-band.band-dark {
  background-color: var(--color-off-black);
  /* #141B4D */
}

/* ── ─────────────────────────────────────────────────────── ──
   C. DARK BAND TEXT OVERRIDES
   .band-navy and .band-dark carry dark backgrounds.
   These descendant rules flip all text, headings, and links
   to light values automatically — no extra classes needed.
   ── ─────────────────────────────────────────────────────── ── */

.ti-learner-view .section-band.band-navy,
.ti-learner-view .section-band.band-dark {
  color: rgba(255, 255, 255, 0.9);
}

/* Headings */
.ti-learner-view .section-band.band-navy h1,
.ti-learner-view .section-band.band-navy h2,
.ti-learner-view .section-band.band-navy h3,
.ti-learner-view .section-band.band-navy h4,
.ti-learner-view .section-band.band-navy h5,
.ti-learner-view .section-band.band-navy h6,
.ti-learner-view .section-band.band-navy .widget__title,
.ti-learner-view .section-band.band-dark h1,
.ti-learner-view .section-band.band-dark h2,
.ti-learner-view .section-band.band-dark h3,
.ti-learner-view .section-band.band-dark h4,
.ti-learner-view .section-band.band-dark h5,
.ti-learner-view .section-band.band-dark h6,
.ti-learner-view .section-band.band-dark .widget__title {
  color: var(--color-white);
}

/* Body copy */
.ti-learner-view .section-band.band-navy p,
.ti-learner-view .section-band.band-navy li,
.ti-learner-view .section-band.band-navy span,
.ti-learner-view .section-band.band-dark p,
.ti-learner-view .section-band.band-dark li,
.ti-learner-view .section-band.band-dark span {
  color: rgba(255, 255, 255, 0.85);
}

/* Links — use AAPA Blue on dark so they remain accessible */
.ti-learner-view .section-band.band-navy a,
.ti-learner-view .section-band.band-dark a {
  color: var(--color-action);
  /* #009CDE */
  text-decoration: underline;
  text-underline-offset: 2px;
}

.ti-learner-view .section-band.band-navy a:hover,
.ti-learner-view .section-band.band-dark a:hover {
  color: var(--color-white);
}

/* Horizontal rules — use a low-opacity white stroke */
.ti-learner-view .section-band.band-navy hr,
.ti-learner-view .section-band.band-dark hr {
  border-color: rgba(255, 255, 255, 0.15);
}

/* Catalog cards inside dark bands — keep the card surface light
   so course images and titles remain readable */
.ti-learner-view .section-band.band-navy .catalog-grid-item,
.ti-learner-view .section-band.band-dark .catalog-grid-item {
  background: var(--color-white);
  border-radius: var(--radius-lg);
}

.ti-learner-view .section-band.band-navy .catalog-grid-item__title,
.ti-learner-view .section-band.band-navy .catalog-grid-item__source,
.ti-learner-view .section-band.band-dark .catalog-grid-item__title,
.ti-learner-view .section-band.band-dark .catalog-grid-item__source {
  color: var(--color-text-base);
}

/* ── ─────────────────────────────────────────────────────── ──
   D. VERTICAL RHYTHM MODIFIERS
   Override the default padding-top/bottom on the band.
   ── ─────────────────────────────────────────────────────── ── */

/* Compact — tight section, good for thin CTA strips */
.ti-learner-view .section-band.band-sm {
  padding-top: var(--space-6);
  /* 32px */
  padding-bottom: var(--space-6);
}

/* Medium — standard section spacing (matches default) */
.ti-learner-view .section-band.band-md {
  padding-top: var(--space-10);
  /* 64px */
  padding-bottom: var(--space-10);
}

/* Large — hero-scale breathing room */
.ti-learner-view .section-band.band-lg {
  padding-top: var(--space-12);
  /* 96px */
  padding-bottom: var(--space-12);
}

/* Extra large — statement sections, feature rows */
.ti-learner-view .section-band.band-xl {
  padding-top: 8rem;
  padding-bottom: 8rem;
}

/* Scale down all rhythm modifiers on mobile */
@media (max-width: 768px) {
  .ti-learner-view .section-band.band-sm {
    padding-top: var(--space-5);
    padding-bottom: var(--space-5);
  }

  .ti-learner-view .section-band.band-md {
    padding-top: var(--space-6);
    padding-bottom: var(--space-6);
  }

  .ti-learner-view .section-band.band-lg {
    padding-top: var(--space-8);
    padding-bottom: var(--space-8);
  }

  .ti-learner-view .section-band.band-xl {
    padding-top: var(--space-10);
    padding-bottom: var(--space-10);
  }
}

/* ── ─────────────────────────────────────────────────────── ──
   E. DIVIDER ACCENT MODIFIERS
   Adds a 3px AAPA Blue rule above or below the band —
   creates a crisp visual break without a hard box shadow.
   ── ─────────────────────────────────────────────────────── ── */

.ti-learner-view .section-band.band-border-top {
  border-top: 3px solid var(--color-action);
}

.ti-learner-view .section-band.band-border-bottom {
  border-bottom: 3px solid var(--color-action);
}

/* ── ─────────────────────────────────────────────────────── ──
   F. SECTION BAND INNER CONTENT HELPERS
   These optional classes go on elements INSIDE a section-band
   to control the inner column's max-width independently.
   ── ─────────────────────────────────────────────────────── ── */

/* Narrow column — great for long-form text or testimonials */
.ti-learner-view .section-band .band-inner--narrow {
  max-width: 760px;
  margin-left: auto;
  margin-right: auto;
}

/* Standard column — matches the 1440px band wrap */
.ti-learner-view .section-band .band-inner--wide {
  max-width: 1440px;
  margin-left: auto;
  margin-right: auto;
}

/* ============================================================
   END OF 3c — SECTION BAND LAYOUT SYSTEM
   ============================================================ */

/* ------------------------------------------------------------
   6. UTILITY CLASS SYSTEM
   Editor-facing composable classes. Apply via the TI widget
   "CSS Classes" field — no stylesheet edits required to use.

   Naming convention mirrors TI's existing system:
     bk-color-*    Widget background colors
     title-color-* Widget title text colors     (extends TI default)
     title-size-*  Widget title font sizes      (extends TI default)
     txt-color-*   Inline / block text color
     txt-size-*    Inline / block text size
     txt-weight-*  Font weight
     txt-align-*   Text alignment
     txt-style-*   Text transform / style presets
     pad-*         Padding (top / bottom / sides / all)

   Classes are intentionally flat so editors can stack freely:
     class="bk-color-2 title-color-4 title-size-3 pad-all-2"
   ------------------------------------------------------------ */

/* ── 6a. Widget Backgrounds (.bk-color-*) ──────────────────
   Applied to the widget wrapper. Sets the section background.
   ---------------------------------------------------------- */
.ti-learner-view .bk-color-1 {
  background-color: var(--color-primary);
}

/* Dark Blue  #151F6D */
.ti-learner-view .bk-color-2 {
  background-color: var(--color-action);
}

/* Blue       #009CDE */
.ti-learner-view .bk-color-3 {
  background-color: var(--color-accent);
}

/* Coral      #F9423A */
.ti-learner-view .bk-color-4 {
  background-color: var(--color-success);
}

/* Green      #40C1AC */
.ti-learner-view .bk-color-5 {
  background-color: var(--color-surface-alt);
}

/* Lt. Green  #E5F2F4 */
.ti-learner-view .bk-color-6 {
  background-color: var(--color-surface);
}

/* Lt. Grey   #FAFAFA */
.ti-learner-view .bk-color-7 {
  background-color: var(--color-white);
}

/* White      #FFFFFF */
.ti-learner-view .bk-color-8 {
  background-color: var(--color-footer-bg);
}

/* Off-Black  #141B4D */

/* ── 6b. Widget Title Color (.title-color-*) ───────────────
   Applied to the widget wrapper. Targets .widget__title inside.
   Vendor note: vendor sets .widget__title { color: #656565 }.
   Our rules win via specificity (.ti-learner-view .title-color-N .widget__title
   = 3 classes vs vendor's 1 class).
   ---------------------------------------------------------- */
.ti-learner-view .title-color-1 .widget__title {
  color: var(--color-text-base);
}

/* Off-Black */
.ti-learner-view .title-color-2 .widget__title {
  color: var(--color-primary);
}

/* Dark Blue */
.ti-learner-view .title-color-3 .widget__title {
  color: var(--color-action);
}

/* Blue      */
.ti-learner-view .title-color-4 .widget__title {
  color: var(--color-accent);
}

/* Coral     */
.ti-learner-view .title-color-5 .widget__title {
  color: var(--color-success);
}

/* Green     */
.ti-learner-view .title-color-6 .widget__title {
  /* White on primary bar */
  color: var(--color-white);
  background-color: var(--color-primary);
  padding: var(--space-2) var(--space-4);
}

.ti-learner-view .title-color-7 .widget__title {
  color: var(--color-white);
}

/* White — open bg */

/* ── 6c. Widget Title Size (.title-size-*) ─────────────────
   Applied to the widget wrapper. Targets .widget__title inside.
   ---------------------------------------------------------- */
.ti-learner-view .title-size-1 .widget__title {
  font-size: var(--text-lg);
}

/* 20px */
.ti-learner-view .title-size-2 .widget__title {
  font-size: var(--text-xl);
}

/* 24px */
.ti-learner-view .title-size-3 .widget__title {
  font-size: var(--text-2xl);
}

/* 30px */
.ti-learner-view .title-size-4 .widget__title {
  font-size: var(--text-3xl);
}

/* 36px */
.ti-learner-view .title-size-5 .widget__title {
  font-size: var(--text-4xl);
}

/* 48px */

/* ── 6d. Text Color (.txt-color-*) ─────────────────────────*/
.ti-learner-view .txt-color-1 {
  color: var(--color-primary);
}

/* Dark Blue  */
.ti-learner-view .txt-color-2 {
  color: var(--color-action);
}

/* Blue       */
.ti-learner-view .txt-color-3 {
  color: var(--color-accent);
}

/* Coral      */
.ti-learner-view .txt-color-4 {
  color: var(--color-success);
}

/* Green      */
.ti-learner-view .txt-color-5 {
  color: var(--color-text-base);
}

/* Off-Black  */
.ti-learner-view .txt-color-6 {
  color: var(--color-text-muted);
}

/* Dull Black */
.ti-learner-view .txt-color-7 {
  color: var(--color-white);
}

/* White      */

/* ── 6e. Text Size (.txt-size-*) ───────────────────────────*/
.ti-learner-view .txt-size-1 {
  font-size: var(--text-xs);
}

/* 12px — labels, badges  */
.ti-learner-view .txt-size-2 {
  font-size: var(--text-sm);
}

/* 14px — captions, meta  */
.ti-learner-view .txt-size-3 {
  font-size: var(--text-base);
}

/* 16px — body copy       */
.ti-learner-view .txt-size-4 {
  font-size: var(--text-md);
}

/* 18px — intro / lead    */
.ti-learner-view .txt-size-5 {
  font-size: var(--text-lg);
}

/* 20px — small heading   */
.ti-learner-view .txt-size-6 {
  font-size: var(--text-xl);
}

/* 24px — H4 equivalent   */
.ti-learner-view .txt-size-7 {
  font-size: var(--text-2xl);
}

/* 30px — H3 equivalent   */
.ti-learner-view .txt-size-8 {
  font-size: var(--text-3xl);
}

/* 36px — H2 equivalent   */

/* ── 6f. Text Weight (.txt-weight-*) ───────────────────────*/
.ti-learner-view .txt-weight-light {
  font-weight: var(--weight-light);
}

/* 300 */
.ti-learner-view .txt-weight-regular {
  font-weight: var(--weight-regular);
}

/* 400 */
.ti-learner-view .txt-weight-medium {
  font-weight: var(--weight-medium);
}

/* 500 */
.ti-learner-view .txt-weight-bold {
  font-weight: var(--weight-bold);
}

/* 700 */
.ti-learner-view .txt-weight-black {
  font-weight: var(--weight-black);
}

/* 900 */

/* ── 6g. Text Alignment (.txt-align-*) ─────────────────────*/
.ti-learner-view .txt-align-left {
  text-align: left;
}

.ti-learner-view .txt-align-center {
  text-align: center;
}

.ti-learner-view .txt-align-right {
  text-align: right;
}

/* ── 6h. Text Style Presets (.txt-style-*) ─────────────────
   Composable presets for specific type treatments.
   ---------------------------------------------------------- */

/* Uppercase label — small-caps eyebrow / section label */
.ti-learner-view .txt-style-label {
  font-family: var(--font-body);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--color-text-muted);
}

/* Heading style — applies heading font to any element */
.ti-learner-view .txt-style-heading {
  font-family: var(--font-heading);
  font-weight: var(--weight-bold);
  line-height: var(--leading-tight);
}

/* Lead / intro paragraph — slightly larger, lighter weight */
.ti-learner-view .txt-style-lead {
  font-size: var(--text-md);
  font-weight: var(--weight-light);
  line-height: var(--leading-relaxed);
  color: var(--color-text-muted);
}

/* Eyebrow — coral accent label above a heading */
.ti-learner-view .txt-style-eyebrow {
  font-family: var(--font-body);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--color-accent);
}

/* Inline code snippet */
.ti-learner-view .txt-style-code {
  font-family: var(--font-mono);
  font-size: 0.875em;
  background: rgba(0, 156, 222, 0.07);
  color: var(--color-primary);
  padding: 0.1em 0.4em;
  border-radius: var(--radius-sm);
  border: 1px solid rgba(0, 156, 222, 0.18);
}

/* Decorative divider line below a heading */
.ti-learner-view .txt-style-underline-accent {
  padding-bottom: var(--space-2);
  border-bottom: 3px solid var(--color-action);
  display: inline-block;
}

/* ── 6i. Padding (.pad-*) ───────────────────────────────────
   Mirrors TI's existing pad-* naming. Use on widget wrappers.
   !important is justified here: these are explicit override
   utilities that must win over vendor and component padding
   rules — the same pattern TI uses in their own pad-* system.
   ---------------------------------------------------------- */
.ti-learner-view .pad-top-none {
  padding-top: 0 !important;
}

.ti-learner-view .pad-top-1 {
  padding-top: var(--space-5) !important;
}

/* 24px */
.ti-learner-view .pad-top-2 {
  padding-top: var(--space-8) !important;
}

/* 48px */
.ti-learner-view .pad-top-3 {
  padding-top: var(--space-12) !important;
}

/* 96px */

.ti-learner-view .pad-bottom-none {
  padding-bottom: 0 !important;
}

.ti-learner-view .pad-bottom-1 {
  padding-bottom: var(--space-5) !important;
}

/* 24px */
.ti-learner-view .pad-bottom-2 {
  padding-bottom: var(--space-8) !important;
}

/* 48px */
.ti-learner-view .pad-bottom-3 {
  padding-bottom: var(--space-12) !important;
}

/* 96px */

.ti-learner-view .pad-sides-none {
  padding-left: 0 !important;
  padding-right: 0 !important;
}

.ti-learner-view .pad-sides-1 {
  padding-left: var(--space-5) !important;
  padding-right: var(--space-5) !important;
}

/* 24px */
.ti-learner-view .pad-sides-2 {
  padding-left: var(--space-8) !important;
  padding-right: var(--space-8) !important;
}

/* 48px */
.ti-learner-view .pad-sides-3 {
  padding-left: var(--space-12) !important;
  padding-right: var(--space-12) !important;
}

/* 96px */

.ti-learner-view .pad-all-1 {
  padding: var(--space-5) !important;
}

/* 24px all */
.ti-learner-view .pad-all-2 {
  padding: var(--space-8) !important;
}

/* 48px all */
.ti-learner-view .pad-all-3 {
  padding: var(--space-12) !important;
}

/* 96px all */

.ti-learner-view .pad-none {
  padding: 0 !important;
}

/* ── 6j. Margin (.mar-*) ────────────────────────────────────
   Parallel to 6i Padding. Uses the same three-stop scale:
     -1  →  --space-5   (24px)
     -2  →  --space-8   (48px)
     -3  →  --space-12  (96px)
   !important matches the pad-* pattern — these are explicit
   override utilities that must win over vendor/component margins.
   Use on widget wrappers via the CSS Classes field in Site Builder.
   ---------------------------------------------------------- */

/* mar-top */
.ti-learner-view .mar-top-none {
  margin-top: 0 !important;
}

.ti-learner-view .mar-top-1 {
  margin-top: var(--space-5) !important;
}

/* 24px */
.ti-learner-view .mar-top-2 {
  margin-top: var(--space-8) !important;
}

/* 48px */
.ti-learner-view .mar-top-3 {
  margin-top: var(--space-12) !important;
}

/* 96px */

/* mar-bottom */
.ti-learner-view .mar-bottom-none {
  margin-bottom: 0 !important;
}

.ti-learner-view .mar-bottom-1 {
  margin-bottom: var(--space-5) !important;
}

/* 24px */
.ti-learner-view .mar-bottom-2 {
  margin-bottom: var(--space-8) !important;
}

/* 48px */
.ti-learner-view .mar-bottom-3 {
  margin-bottom: var(--space-12) !important;
}

/* 96px */

/* mar-sides */
.ti-learner-view .mar-sides-none {
  margin-left: 0 !important;
  margin-right: 0 !important;
}

.ti-learner-view .mar-sides-1 {
  margin-left: var(--space-5) !important;
  margin-right: var(--space-5) !important;
}

/* 24px */
.ti-learner-view .mar-sides-2 {
  margin-left: var(--space-8) !important;
  margin-right: var(--space-8) !important;
}

/* 48px */
.ti-learner-view .mar-sides-3 {
  margin-left: var(--space-12) !important;
  margin-right: var(--space-12) !important;
}

/* 96px */

/* mar-all */
.ti-learner-view .mar-all-1 {
  margin: var(--space-5) !important;
}

/* 24px all */
.ti-learner-view .mar-all-2 {
  margin: var(--space-8) !important;
}

/* 48px all */
.ti-learner-view .mar-all-3 {
  margin: var(--space-12) !important;
}

/* 96px all */

.ti-learner-view .mar-none {
  margin: 0 !important;
}

/* ── 6k. Icon Utilities (.icon-badge, .icon-inline) ──────────
   Two complementary utilities for Unicons glyphs.

   .icon-badge  — square tinted tile that frames the glyph.
     Combine a color modifier and a size modifier:
       <span class="icon-badge icon-badge--blue icon-badge--md">
         <i class="uil uil-question-circle" aria-hidden="true"></i>
       </span>

   .icon-inline — bare glyph with a semantic color. Place the
     modifier directly on the <i> or wrap in a <span>:
       <i class="uil uil-check icon-inline icon-inline--teal"></i>

   Accessibility: icons carry aria-hidden="true". Accessible
   names must come from adjacent visible text or an aria-label
   on the nearest meaningful ancestor.

   Icon font: Unicons v4.2.0 line variant. Documented usage is
   <i class="uil uil-*"> but TI's editor renders Unicons as
   <em class="uil uil-*"> — child selectors cover both elements
   plus the generic [class^="uil"] fallback for any future variant.
   ---------------------------------------------------------- */

/* ── Base tile ── */
.ti-learner-view .icon-badge {
  --icon-badge-size: 4.625rem;
  --icon-badge-radius: var(--radius-lg);
  --icon-badge-bg: rgba(0, 156, 222, 0.14);
  --icon-badge-fg: var(--color-action);
  --icon-badge-shadow: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--icon-badge-size);
  height: var(--icon-badge-size);
  border-radius: var(--icon-badge-radius);
  background: var(--icon-badge-bg);
  color: var(--icon-badge-fg);
  box-shadow: var(--icon-badge-shadow);
  vertical-align: middle;
}

/* Glyph sizing — ~50% of tile width across all steps.
   Covers <i> (documented), <em> (TI editor variant),
   and [class^="uil"] as a catch-all. */
.ti-learner-view .icon-badge > i,
.ti-learner-view .icon-badge > em,
.ti-learner-view .icon-badge > [class^="uil"] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: inherit;
  font-size: var(--text-3xl); /* 2.25rem — ~49% of 4.625rem tile */
  line-height: 1;
}

/* ── Size modifiers ── */
.ti-learner-view .icon-badge--2xs {
  --icon-badge-size: 2rem;
}

.ti-learner-view .icon-badge--2xs > i,
.ti-learner-view .icon-badge--2xs > em,
.ti-learner-view .icon-badge--2xs > [class^="uil"] {
  font-size: var(--text-base); /* 1rem — 50% of 2rem tile */
}

.ti-learner-view .icon-badge--xs {
  --icon-badge-size: 2.5rem;
}

.ti-learner-view .icon-badge--xs > i,
.ti-learner-view .icon-badge--xs > em,
.ti-learner-view .icon-badge--xs > [class^="uil"] {
  font-size: var(--text-lg); /* 1.25rem — 50% of 2.5rem tile */
}

.ti-learner-view .icon-badge--sm {
  --icon-badge-size: 3.125rem;
}

.ti-learner-view .icon-badge--sm > i,
.ti-learner-view .icon-badge--sm > em,
.ti-learner-view .icon-badge--sm > [class^="uil"] {
  font-size: var(--text-xl); /* 1.5rem — 48% of 3.125rem tile */
}

/* --md equals the base default; explicit for author clarity */
.ti-learner-view .icon-badge--md {
  --icon-badge-size: 4.625rem;
}

.ti-learner-view .icon-badge--lg {
  --icon-badge-size: 5.25rem;
}

.ti-learner-view .icon-badge--lg > i,
.ti-learner-view .icon-badge--lg > em,
.ti-learner-view .icon-badge--lg > [class^="uil"] {
  font-size: 2.625rem; /* ~50% of 5.25rem tile — between --text-3xl and --text-4xl */
}

/* ── Color modifiers ── */
.ti-learner-view .icon-badge--blue {
  --icon-badge-bg: rgba(0, 156, 222, 0.14);
  --icon-badge-fg: var(--color-action);
}

.ti-learner-view .icon-badge--teal {
  --icon-badge-bg: rgba(64, 193, 172, 0.16);
  --icon-badge-fg: var(--color-success);
}

.ti-learner-view .icon-badge--coral {
  --icon-badge-bg: rgba(249, 66, 58, 0.12);
  --icon-badge-fg: var(--color-accent);
}

.ti-learner-view .icon-badge--navy {
  --icon-badge-bg: rgba(21, 31, 109, 0.08);
  --icon-badge-fg: var(--color-primary);
}

.ti-learner-view .icon-badge--white {
  --icon-badge-bg: var(--color-white);
  --icon-badge-fg: var(--color-primary);
}

/* ── Visual refinements ── */
.ti-learner-view .icon-badge--soft-shadow {
  --icon-badge-shadow: 0 8px 18px rgba(21, 31, 109, 0.08);
}

/* --radius-md (8px) and --radius-xl (20px) bracket the default --radius-lg (12px) */
.ti-learner-view .icon-badge--rounded-sm {
  --icon-badge-radius: var(--radius-md);
}

.ti-learner-view .icon-badge--rounded-lg {
  --icon-badge-radius: var(--radius-xl);
}

/* ── Inline icon ── */
.ti-learner-view .icon-inline {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--color-action);
  line-height: 1;
  vertical-align: middle;
}

.ti-learner-view .icon-inline > i,
.ti-learner-view .icon-inline > em,
.ti-learner-view .icon-inline > [class^="uil"] {
  color: inherit;
  font-size: var(--text-lg); /* 1.25rem */
  line-height: 1;
}

/* ── Inline size modifiers ── */
.ti-learner-view .icon-inline--xs > i,
.ti-learner-view .icon-inline--xs > em,
.ti-learner-view .icon-inline--xs > [class^="uil"] {
  font-size: var(--text-sm); /* 0.875rem */
}

.ti-learner-view .icon-inline--sm > i,
.ti-learner-view .icon-inline--sm > em,
.ti-learner-view .icon-inline--sm > [class^="uil"] {
  font-size: var(--text-base); /* 1rem */
}

/* --md equals the base default; explicit for author clarity */
.ti-learner-view .icon-inline--md > i,
.ti-learner-view .icon-inline--md > em,
.ti-learner-view .icon-inline--md > [class^="uil"] {
  font-size: var(--text-lg); /* 1.25rem */
}

.ti-learner-view .icon-inline--lg > i,
.ti-learner-view .icon-inline--lg > em,
.ti-learner-view .icon-inline--lg > [class^="uil"] {
  font-size: var(--text-xl); /* 1.5rem */
}

/* ── Inline color modifiers ── */
.ti-learner-view .icon-inline--blue {
  color: var(--color-action);
}

.ti-learner-view .icon-inline--teal {
  color: var(--color-success);
}

.ti-learner-view .icon-inline--coral {
  color: var(--color-accent);
}

.ti-learner-view .icon-inline--navy {
  color: var(--color-primary);
}

/* ── Forced colors (Windows High Contrast Mode) ── */
@media (forced-colors: active) {
  .ti-learner-view .icon-badge {
    background: Canvas;
    color: ButtonText;
    border: 1px solid ButtonText;
    box-shadow: none;
  }

  .ti-learner-view .icon-inline {
    color: ButtonText;
  }
}

/* ── 6l. Snippet Components (.lc-link-block) ─────────────────
   Reusable branded content blocks authored as Snippets and
   inserted into column widgets, Free Text tabs, or Text pages.

   LINK BLOCK — icon + title + body + animated CTA
   ─────────────────────────────────────────────────────────────
   Structure (all elements required):

     <div class="lc-link-block">
       <span class="icon-badge icon-badge--blue icon-badge--sm" aria-hidden="true">
         <i class="uil uil-stethoscope"></i>
       </span>
       <p class="lc-link-block__title">Specialties</p>
       <p class="lc-link-block__body">Browse CME Courses by Specialty</p>
       <span class="lc-link-block__cta">Learn More</span>
       <a href="/catalog" class="lc-link-block__link" aria-label="Specialties"></a>
     </div>

   The .lc-link-block__link is a zero-size stretched anchor that
   covers the full card (stretched link pattern). It must be the
   last child and the parent must be position:relative.

   Add .lc-link-block--card to the root for a white surfaced,
   elevated card treatment (recommended on dashboard canvas).

   Icon color modifiers: --blue, --teal, --coral, --navy
   Icon size modifiers:  --sm (default for link blocks), --md
   ─────────────────────────────────────────────────────────────
   ---------------------------------------------------------- */

/* ── Root container ── */
.ti-learner-view .lc-link-block {
  position: relative;     /* establishes stacking context for stretched link */
  display: flex;
  flex-direction: column;
  gap: var(--space-3);    /* consistent rhythm between icon / title / body / cta */
}

/* ── Card surface modifier — white elevated treatment ── */
.ti-learner-view .lc-link-block--card {
  padding: var(--space-6);
  background: var(--color-white);
  border-radius: var(--radius-xl);
  box-shadow: 0 4px 16px rgba(21, 31, 109, 0.06);
  transition: box-shadow 0.2s ease, transform 0.2s ease;
}

.ti-learner-view .lc-link-block--card:hover {
  box-shadow: 0 8px 28px rgba(21, 31, 109, 0.13);
  transform: translateY(-2px);
}

/* ── Title ── */
.ti-learner-view .lc-link-block__title {
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  margin: 0;
  line-height: 1.2;
  transition: text-decoration 0.15s ease;
}

/* ── Body copy ── */
.ti-learner-view .lc-link-block__body {
  font-size: var(--text-base);
  color: var(--color-text);
  margin: 0;
  line-height: 1.5;
}

/* ── CTA label ── */
.ti-learner-view .lc-link-block__cta {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  font-size: var(--text-xs);
  margin-top: auto;   /* pins CTA to bottom when card stretches inside band-eq-height */
  font-weight: var(--weight-medium);
  text-transform: uppercase;
  letter-spacing: 0.07em;
  color: var(--color-action);
  margin-top: var(--space-1);
}

/* Arrow — ::after pseudo-element using Unicons line font (uil-arrow-right = \ebb5) */
/* No <i> element needed in snippet HTML — the icon is entirely CSS-driven.          */
.ti-learner-view .lc-link-block__cta::after {
  font-family: "unicons-line";
  content: "\ebb5";            /* uil-arrow-right */
  font-size: var(--text-base);  /* slightly larger than the xs label text */
  font-style: normal;
  font-weight: normal;
  line-height: 1;
  display: inline-block;
  transition: transform 0.2s ease;
}

/* ── Hover / focus states — driven by the stretched link ── */
.ti-learner-view .lc-link-block:hover .lc-link-block__title,
.ti-learner-view .lc-link-block:focus-within .lc-link-block__title {
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* Arrow slides right on hover */
.ti-learner-view .lc-link-block:hover .lc-link-block__cta::after,
.ti-learner-view .lc-link-block:focus-within .lc-link-block__cta::after {
  transform: translateX(10px);
}

/* Icon badge — fade on hover */
.ti-learner-view .lc-link-block .icon-badge {
  transition: opacity 0.2s ease;
}

.ti-learner-view .lc-link-block:hover .icon-badge,
.ti-learner-view .lc-link-block:focus-within .icon-badge {
  opacity: 0.75;
}

/* ── Stretched link — zero-size transparent overlay ── */
/* Must be the last child inside .lc-link-block in the DOM.  */
.ti-learner-view .lc-link-block__link {
  position: absolute;
  inset: 0;
  border-radius: inherit;       /* follows card radius if --card modifier is used */
}

/* Keyboard focus ring appears on the card boundary, not the invisible anchor */
.ti-learner-view .lc-link-block__link:focus-visible {
  outline: 2px solid var(--color-action);
  outline-offset: 3px;
}

/* ------------------------------------------------------------
   8. BUTTON SYSTEM
   AAPA-branded button classes for TI editors.

   ── OPT-IN DESIGN ──────────────────────────────────────────
   ROOT CAUSE OF PRIOR REGRESSION: Styling .ti-learner-view .btn
   and .ti-learner-view .button directly overrode ~149 TI-native
   buttons on the catalog page (filter sidebar, card CTAs,
   nav elements) that use vendor classes like .btn--bare,
   .btn--link, .btn--inherit-font, .btn--primary.

   THE FIX: Audited all TI-generated HTML — the vendor NEVER uses
   a bare standalone .button class on learner pages. All vendor
   uses are compound (e.g. .btn--bare, .btn--link, .pagination
   __controls-button) or Foundation legacy (.prefix.button,
   .top-bar .button) that appear in CSS only, not live markup.

   Therefore bare .button is safe to own as an AAPA trigger class.
   .btn remains protected — it still requires an explicit color
   modifier since TI uses .btn heavily as a base class on real
   elements across the platform.

   SCOPING RULES:
     .button alone       → activates full AAPA styles (blue default)
     .button + modifier  → activates AAPA styles in chosen color
     .btn alone          → untouched (TI-native, no styles applied)
     .btn + modifier     → activates AAPA styles in chosen color

   USAGE for editors:
     Simplest: <a class="button" href="...">Enroll</a>
     With color: <a class="button button--coral" href="...">Start</a>
     Extended: <button class="button button--dark-blue button--lg">Save</button>
     On .btn:  <a class="btn button--blue" href="...">Go</a>

   ── WHY .btn STILL REQUIRES A MODIFIER ─────────────────────
   TI uses .btn as a base class on real elements everywhere
   (149 on the catalog page alone). If we styled bare .btn we'd
   recreate the same regression. .button is our clean namespace.

   ── WHY NO CONFLICT WITH VENDOR .btn--primary ──────────────
   TI uses .btn--primary as a color theme modifier (sets
   background to var(--accent-color)). Our .button--blue,
   .button--dark-blue etc. are distinct class names that don't
   collide. If a TI element happens to also have .button--blue,
   our styles activate intentionally on that element.
   ------------------------------------------------------------ */

/* ── Base structural styles ─────────────────────────────────
   Triggers on:
     A) any .button element (bare .button is our clean namespace)
     B) any .btn that ALSO carries one of our color modifiers

   Specificity of (A): 0,2,0  (.ti-learner-view + .button)
   Specificity of (B): 0,3,0  (.ti-learner-view + .btn + modifier)
   Both beat vendor's .btn--* rules at 0,1,0 cleanly.          */

.ti-learner-view .button,
.ti-learner-view .btn:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  min-height: 44px;
  padding: 10px var(--space-5);
  border: 2px solid var(--btn-border, var(--color-action));
  border-radius: var(--radius-full);
  background: var(--btn-bg, var(--color-action));
  color: var(--btn-text, var(--color-white));
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  line-height: 1;
  letter-spacing: 0.02em;
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  vertical-align: middle;
  appearance: none;
  -webkit-appearance: none;
  transition:
    background-color var(--transition-fast),
    color var(--transition-fast),
    border-color var(--transition-fast),
    box-shadow var(--transition-fast),
    transform var(--transition-fast);
}

.ti-learner-view .button:hover,
.ti-learner-view .btn:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white):hover {
  background: var(--btn-hover-bg, var(--color-primary));
  color: var(--btn-hover-text, var(--color-white));
  border-color: var(--btn-hover-border, var(--color-primary));
  text-decoration: none;
}

.ti-learner-view .button:active,
.ti-learner-view .btn:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white):active {
  transform: translateY(1px);
}

.ti-learner-view .button:focus-visible,
.ti-learner-view .btn:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white):focus-visible {
  outline: 2px solid var(--color-action);
  outline-offset: 2px;
  box-shadow: var(--shadow-focus-action);
}

.ti-learner-view .button[disabled],
.ti-learner-view .button.is-disabled,
.ti-learner-view .button[aria-disabled="true"],
.ti-learner-view .btn:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white)[disabled],
.ti-learner-view .btn:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white).is-disabled,
.ti-learner-view .btn:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white)[aria-disabled="true"] {
  opacity: 0.4;
  cursor: not-allowed;
  pointer-events: none;
  box-shadow: none;
}

/* ── Color modifiers ──
   Each modifier sets the CSS custom properties that the
   base structural rule (above) consumes. These properties
   only activate when the structural selector matches,
   i.e. when one of these modifiers is present.              */

.ti-learner-view .button--blue {
  --btn-bg: var(--color-action);
  --btn-text: var(--color-white);
  --btn-border: var(--color-action);
  --btn-hover-bg: var(--color-primary);
  --btn-hover-text: var(--color-white);
  --btn-hover-border: var(--color-primary);
}

.ti-learner-view .button--dark-blue {
  --btn-bg: var(--color-primary);
  --btn-text: var(--color-white);
  --btn-border: var(--color-primary);
  --btn-hover-bg: var(--color-off-black-deep);
  --btn-hover-text: var(--color-white);
  --btn-hover-border: var(--color-off-black-deep);
}

.ti-learner-view .button--coral {
  --btn-bg: var(--color-accent);
  --btn-text: var(--color-white);
  --btn-border: var(--color-accent);
  --btn-hover-bg: var(--color-coral-dark);
  --btn-hover-text: var(--color-white);
  --btn-hover-border: var(--color-coral-dark);
}

.ti-learner-view .button--green {
  --btn-bg: var(--color-success);
  --btn-text: var(--color-primary);
  --btn-border: var(--color-success);
  --btn-hover-bg: var(--color-green-dark);
  --btn-hover-text: var(--color-primary);
  --btn-hover-border: var(--color-green-dark);
}

.ti-learner-view .button--gray,
.ti-learner-view .button--grey {
  --btn-bg: var(--color-surface);
  --btn-text: var(--color-primary);
  --btn-border: var(--color-border);
  --btn-hover-bg: var(--color-gray-hover);
  --btn-hover-text: var(--color-primary);
  --btn-hover-border: var(--color-border-hover);
}

.ti-learner-view .button--white {
  --btn-bg: var(--color-white);
  --btn-text: var(--color-primary);
  --btn-border: var(--color-white);
  --btn-hover-bg: var(--color-surface);
  --btn-hover-text: var(--color-primary);
  --btn-hover-border: var(--color-surface);
}

/* ── Secondary modifier: white fill + color border/text ──
   Must be combined with a color modifier:
   class="button button--blue button--secondary"             */
.ti-learner-view .button--secondary {
  --btn-bg: transparent;
  --btn-text: var(--btn-border);
  --btn-hover-bg: rgba(0, 156, 222, 0.07);
  --btn-hover-text: var(--btn-border);
  --btn-hover-border: var(--btn-border);
}

/* ── Size + width modifiers ── */
.ti-learner-view .button.button--sm,
.ti-learner-view .button--sm:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white) {
  min-height: 36px;
  padding: 8px var(--space-4);
  font-size: var(--text-xs);
}

.ti-learner-view .button.button--lg,
.ti-learner-view .button--lg:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white) {
  min-height: 50px;
  padding: 12px var(--space-6);
  font-size: var(--text-base);
}

.ti-learner-view .button.button--full,
.ti-learner-view .button--full:is(.button--blue,
  .button--dark-blue,
  .button--coral,
  .button--green,
  .button--gray,
  .button--grey,
  .button--white) {
  width: 100%;
}

/* ── Optional icon helper ── */
.ti-learner-view .button__icon {
  display: inline-flex;
  align-items: center;
  line-height: 0;
}

/* ── Button color vendor override guard ──
   Vendor: .editor-content a:not(.btn) { color: var(--link-color) }
   sets color directly on <a> elements, overriding --btn-text.
   This reasserts the custom property on all button elements
   and element types across all page types and wrappers.     */
.ti-learner-view a.button,
.ti-learner-view a.button:visited,
.ti-learner-view a.button:hover,
.ti-learner-view a.button:focus,
.ti-learner-view button.button,
.ti-learner-view button.button:hover,
.ti-learner-view button.button:focus {
  color: var(--btn-text, var(--color-white));
}

/* ------------------------------------------------------------
   9. BUTTON ROW LAYOUT  (.lk-btn-row)
   Production layout helper for inline button groups. Used via
   the TI editor CSS Classes field — keep in the main stylesheet.

   All other Section 9 demo styles (.lk-btn-grid, .lk-btn-card,
   .lk-btn-demo-state, etc.) live in:
   platform/css/live-kit-preview.css
   ------------------------------------------------------------ */

.ti-learner-view .lk-btn-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  align-items: center;
}

.ti-learner-view .lk-btn-row+.lk-btn-row {
  margin-top: var(--space-3);
}

@media (max-width: 640px) {
  .ti-learner-view .lk-btn-row {
    gap: var(--space-2);
  }
}

/* ------------------------------------------------------------
   10. FORM SYSTEM
   Reusable form / input classes.

   ⚠️  VENDOR CONFLICT:
     Vendor .form { margin-bottom: 2rem; text-align: left } and
     also sets .form input[type=*] { ... } with various values.
     Our .form and .lk-form sit inside .ti-learner-view, giving
     us specificity advantage. We explicitly reset margin-bottom
     and any conflicting input properties within our scope.

     Vendor .field__input has padding !important overrides —
     we use .input / .lk-input (distinct class names) so there
     is no conflict.
   ------------------------------------------------------------ */

/* ── Form wrappers ──
   Explicit margin-bottom:0 and text-align:left overrides vendor
   .form { margin-bottom: 2rem }.
   :not(.form--admin) guards against TI's own form.form.form--admin
   on learner-route pages (account-info, redemption) — those elements
   carry both .form and .form--admin; we must not reset their layout. */
.ti-learner-view .form:not(.form--admin),
.ti-learner-view .lk-form {
  display: grid;
  gap: var(--space-4);
  margin-bottom: 0;
  text-align: left;
}

.ti-learner-view .form-grid,
.ti-learner-view .lk-form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--space-4);
}

/* ── Field group ── */
.ti-learner-view .field,
.ti-learner-view .lk-field {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.ti-learner-view .field-label,
.ti-learner-view .lk-field-label {
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  color: var(--color-text-base);
  line-height: var(--leading-normal);
}

.ti-learner-view .field-label .required,
.ti-learner-view .lk-field-label .required {
  color: var(--color-accent);
}

/* ── Input, select, textarea ──
   Classes .input / .lk-input are custom — no vendor conflict.
   We still reset appearance to be safe. */
.ti-learner-view .input,
.ti-learner-view .select,
.ti-learner-view .textarea,
.ti-learner-view .lk-input,
.ti-learner-view .lk-select,
.ti-learner-view .lk-textarea {
  width: 100%;
  min-height: 44px;
  padding: 10px 12px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-white);
  color: var(--color-text-base);
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: var(--leading-normal);
  -webkit-appearance: none;
  appearance: none;
  transition:
    border-color var(--transition-fast),
    box-shadow var(--transition-fast),
    background-color var(--transition-fast);
}

.ti-learner-view .textarea,
.ti-learner-view .lk-textarea {
  min-height: 120px;
  resize: vertical;
}

.ti-learner-view .input::placeholder,
.ti-learner-view .textarea::placeholder,
.ti-learner-view .lk-input::placeholder,
.ti-learner-view .lk-textarea::placeholder {
  color: var(--color-text-muted);
  opacity: 0.9;
}

.ti-learner-view .input:hover,
.ti-learner-view .select:hover,
.ti-learner-view .textarea:hover,
.ti-learner-view .lk-input:hover,
.ti-learner-view .lk-select:hover,
.ti-learner-view .lk-textarea:hover {
  border-color: var(--color-border-input-hover);
}

.ti-learner-view .input:focus,
.ti-learner-view .select:focus,
.ti-learner-view .textarea:focus,
.ti-learner-view .lk-input:focus,
.ti-learner-view .lk-select:focus,
.ti-learner-view .lk-textarea:focus {
  outline: none;
  border-color: var(--color-action);
  box-shadow: var(--shadow-focus-action);
}

.ti-learner-view .input[disabled],
.ti-learner-view .select[disabled],
.ti-learner-view .textarea[disabled],
.ti-learner-view .lk-input[disabled],
.ti-learner-view .lk-select[disabled],
.ti-learner-view .lk-textarea[disabled] {
  background: var(--color-surface);
  color: var(--color-text-muted);
  cursor: not-allowed;
  opacity: 0.9;
}

/* ── Field messages ── */
.ti-learner-view .field-help,
.ti-learner-view .lk-field-help {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin: 0;
}

.ti-learner-view .field-error,
.ti-learner-view .lk-field-error {
  font-size: var(--text-xs);
  color: var(--color-accent);
  margin: 0;
}

.ti-learner-view .field-success,
.ti-learner-view .lk-field-success {
  font-size: var(--text-xs);
  color: var(--color-success);
  margin: 0;
}

/* ── Validation states ── */
.ti-learner-view .is-error .input,
.ti-learner-view .is-error .select,
.ti-learner-view .is-error .textarea,
.ti-learner-view .is-error .lk-input,
.ti-learner-view .is-error .lk-select,
.ti-learner-view .is-error .lk-textarea {
  border-color: var(--color-accent);
}

.ti-learner-view .is-error .input:focus,
.ti-learner-view .is-error .select:focus,
.ti-learner-view .is-error .textarea:focus,
.ti-learner-view .is-error .lk-input:focus,
.ti-learner-view .is-error .lk-select:focus,
.ti-learner-view .is-error .lk-textarea:focus {
  box-shadow: var(--shadow-focus-error);
}

.ti-learner-view .is-success .input,
.ti-learner-view .is-success .select,
.ti-learner-view .is-success .textarea,
.ti-learner-view .is-success .lk-input,
.ti-learner-view .is-success .lk-select,
.ti-learner-view .is-success .lk-textarea {
  border-color: var(--color-success);
}

.ti-learner-view .is-success .input:focus,
.ti-learner-view .is-success .select:focus,
.ti-learner-view .is-success .textarea:focus,
.ti-learner-view .is-success .lk-input:focus,
.ti-learner-view .is-success .lk-select:focus,
.ti-learner-view .is-success .lk-textarea:focus {
  box-shadow: var(--shadow-focus-success);
}

/* ── Checkbox / radio field ── */
.ti-learner-view .field-check,
.ti-learner-view .lk-field-check {
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  color: var(--color-text-base);
  font-size: var(--text-sm);
  line-height: var(--leading-normal);
}

.ti-learner-view .field-check input[type="checkbox"],
.ti-learner-view .field-check input[type="radio"],
.ti-learner-view .lk-field-check input[type="checkbox"],
.ti-learner-view .lk-field-check input[type="radio"] {
  margin-top: 0.15em;
  accent-color: var(--color-action);
}

/* ── Inline input group ── */
.ti-learner-view .input-inline,
.ti-learner-view .lk-input-inline {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  flex-wrap: wrap;
}

/* ── Form action row ── */
.ti-learner-view .form-actions,
.ti-learner-view .lk-form-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  align-items: center;
}

/* ── Demo card styles for the Forms tab ── */
.ti-learner-view .lk-form-card {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-white);
  padding: var(--space-4);
}

.ti-learner-view .lk-form-card+.lk-form-card {
  margin-top: var(--space-4);
}

.ti-learner-view .lk-form-util-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--space-3);
}

.ti-learner-view .lk-form-util-item {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface);
  padding: var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: var(--leading-relaxed);
}

@media (max-width: 640px) {
  .ti-learner-view .lk-form-card {
    padding: var(--space-3);
  }
}

/* ============================================================
   11. LEARNER DASHBOARD
   Scope: .ti-learner-view — dashboard body content only.
   Header (.header--dashboard) is already handled in Section 3b-C.
   ============================================================ */

/* ------------------------------------------------------------
   11-0. DASHBOARD PAGE CANVAS & WIDGET FOUNDATION
   ┌─────────────────────────────────────────────────────────┐
   │  LAYER 1 — FOUNDATION (automatic, no editor config)     │
   └─────────────────────────────────────────────────────────┘
   Establishes the cool gray-blue canvas that all widget cards
   float on. Inspired by lms-learner-dashboard-inspiration-1.webp
   and lms-learner-dashboard-inspiration-3.webp.

   Canvas scoping:
     body.dashboard  — TI adds this class to <body> on the
                       /dashboard route exclusively. Limits
                       every rule here to the dashboard — the
                       catalog, homepage, and course pages are
                       completely unaffected.

   Elevation stack (bottom → top):
     body bg              → var(--color-dashboard-canvas) #F0F1F8
     .dashboard-stat      → var(--color-white)            #FFFFFF  (auto — stat tile)
     .catalog-grid-item   → var(--color-white)            #FFFFFF  (auto — course card)
     .dash-panel section  → var(--color-white)            #FFFFFF  (opt-in — section panel)
     bk-color-* bg        → brand accent colors                    (accent bands)

   All widgets share (blanket — Layer 1):
     border-radius   var(--radius-xl)     20px — applies to bk-color-* bands;
                                                 harmless on transparent sections
     margin-bottom   var(--dashboard-gap) — consistent vertical rhythm

   Surface styling is split across two tiers:

     Layer 1 — automatic (component-level, no editor action):
       .dashboard-stat     each stat tile card (Section 11-A)
       .catalog-grid-item  each course / content card (Section 11-0)

     Layer 2 — opt-in (section-level, editor adds via CSS Classes field):
       .dash-panel         unified white panel for a section container.
                           Use when the section itself IS the card
                           (e.g. welcome hero, a promo band, a module
                           with internal layout that should feel unified).
                           Omit on sections whose contents carry their
                           own card surfaces — avoids the double-island.

   Vendor notes:
     • .container in Section 3 sets background: white. We
       override it to transparent so --color-dashboard-canvas
       on body shows through.
     • .pad-all-2 sets padding: 48px !important on Widgets 1
       and 10. Per-widget rules in 11-B+ override where needed.
     • overflow: hidden is intentionally NOT on the base .widget
       rule — applied per-widget to avoid clipping hover states
       (e.g., stat tile translateY lift in 11-A).
   ------------------------------------------------------------ */

/* ── Page canvas ── */
.ti-learner-view body.dashboard {
  background-color: var(--color-dashboard-canvas);
}

/* Container transparent — canvas shows through */
.ti-learner-view body.dashboard .container {
  background-color: transparent;
}

/* Content area: horizontal gutters + bottom padding */
.ti-learner-view body.dashboard #main-content {
  padding-top: var(--space-5);
  padding-left: var(--space-5);
  padding-right: var(--space-5);
  padding-bottom: var(--space-10);
}

/* ── Widget base ──
   Shape and vertical rhythm for all dashboard widgets. */
.ti-learner-view body.dashboard .widget {
  border-radius: var(--radius-xl);
  margin-bottom: var(--dashboard-gap);
}

/* ── .dash-panel — section-level panel surface (opt-in, Layer 2) ──
   Editor adds via CSS Classes field when the section itself should
   read as a unified white card. Do NOT apply to sections containing
   .dashboard-stat tiles or .catalog-grid-item cards — those already
   carry their own surfaces and adding .dash-panel creates a
   double-island effect. */
.ti-learner-view body.dashboard .widget.dash-panel {
  background-color: var(--color-white);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-float);
}

/* box-shadow stripped in Windows High Contrast Mode */
@media (forced-colors: active) {
  .ti-learner-view body.dashboard .widget.dash-panel {
    border: 1px solid ButtonText;
  }
}

/* Course / content card surface lives in Section 11-C
   (universal scope — not limited to body.dashboard). */

/* ── Widget title baseline ──
   TI vendor: .widget__title { color: #656565; font-size: 21px }
   Dashboard override: on-brand size and color. */
.ti-learner-view body.dashboard .widget__title {
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  /* 24px — section label scale */
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  margin-bottom: var(--space-4);
}

/* ── Responsive ── */
@media (max-width: 640px) {
  .ti-learner-view body.dashboard #main-content {
    padding-left: var(--space-4);
    padding-right: var(--space-4);
  }

  .ti-learner-view body.dashboard .widget {
    border-radius: var(--radius-lg);
    /* 12px on mobile */
  }
}

/* ------------------------------------------------------------
   11-A. STAT TILES  (.widget--dashboard-stats)

   DOM (confirmed from learner-dashboard-html-export):
     .widget--dashboard-stats
       .dashboard-stats__container
         ul.dashboard-stats
           li.ember-view.dashboard-stat--[available|started|
                         completed|certificates|collaborations]
             .dashboard-stat
               .dashboard-stat__label
                 i.dashboard-stat__icon   ← icon + label text share this div
               .dashboard-stat__value[.dashboard-stat__value--huge]

   Layout strategy:
     The icon (i.dashboard-stat__icon) is a sibling text node with
     the label string inside .dashboard-stat__label — they cannot be
     split with CSS alone. Solution: absolute-position the icon out of
     flow so the label text floats cleanly. Then use flex `order` on
     .dashboard-stat__value (order:1) and .dashboard-stat__label
     (order:2) so the number reads first, label text second — mirroring
     the inspiration card layout.

   Vendor watch:
     .dashboard-stat__value--huge — TI enlarges this modifier. We
     explicitly reset it to match the base value size for visual unity.
   ------------------------------------------------------------ */

/* Widget: breathing room above and below the strip */
.ti-learner-view .widget--dashboard-stats {
  padding: var(--space-6) 0;
}

.ti-learner-view .dashboard-stats__container {
  padding: 0;
  box-shadow: none;
}

/* ul: horizontal flex strip */
.ti-learner-view .dashboard-stats {
  display: flex;
  gap: var(--space-4);
  list-style: none;
  margin: 0;
  padding: 0;
  flex-wrap: wrap;
}

/* li: equal-width flex children */
.ti-learner-view .dashboard-stats>li {
  flex: 1 1 140px;
  min-width: 0;
}

/* ── Card shell ── */
.ti-learner-view .dashboard-stat {
  position: relative;
  /* anchor for absolute icon */
  display: flex;
  flex-direction: column;
  padding: var(--space-5);
  padding-top: 5rem;
  /* headroom above content for the icon */
  background: var(--color-white);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm), 0 4px 16px rgba(21, 31, 109, 0.05);
  height: 100%;
  box-sizing: border-box;
  transition:
    box-shadow var(--transition-base),
    transform var(--transition-base);
}

/* ── Icon circle — absolute, top-left ──
   Extracted from .dashboard-stat__label flow so the label
   text node can sit cleanly below the stat value. */
.ti-learner-view .dashboard-stat__icon {
  position: absolute;
  top: var(--space-5);
  left: var(--space-5);
  display: flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  border-radius: var(--radius-full);
  font-size: 1.25rem;
  flex-shrink: 0;
  /* Color applied per-stat below */
}

/* ── Stat number ──
   order:1 surfaces it above the label text in the flex column. */
.ti-learner-view .dashboard-stat__value {
  order: 1;
  font-family: var(--font-heading);
  font-size: var(--text-3xl);
  /* 2.25rem / 36px */
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  line-height: 1;
  margin-bottom: var(--space-1);
}

/* Neutralize TI's --huge modifier — uniform size across all tiles */
.ti-learner-view .dashboard-stat__value--huge {
  font-size: var(--text-3xl);
  line-height: 1;
}

/* ── Label text ──
   order:2 drops it below the number. The icon is out of flow
   (absolute), so only the text node remains here. */
.ti-learner-view .dashboard-stat__label {
  order: 2;
  font-family: var(--font-body);
  font-size: var(--text-xs);
  /* 12px */
  font-weight: var(--weight-medium);
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.07em;
}

/* ── Per-stat icon color accents ──
   Each stat type gets a brand color: low-opacity tinted background
   + full-opacity icon foreground for legibility on white cards. */

/* Available — AAPA blue: browse & discover */
.ti-learner-view .dashboard-stat--available .dashboard-stat__icon {
  background: rgba(0, 156, 222, 0.12);
  color: var(--color-action);
}

/* Started — coral: urgency, work in progress */
.ti-learner-view .dashboard-stat--started .dashboard-stat__icon {
  background: rgba(249, 66, 58, 0.10);
  color: var(--color-accent);
}

/* Completed — teal green: success state */
.ti-learner-view .dashboard-stat--completed .dashboard-stat__icon {
  background: rgba(64, 193, 172, 0.12);
  color: var(--color-success);
}

/* Certificates — dark blue: prestige & achievement */
.ti-learner-view .dashboard-stat--certificates .dashboard-stat__icon {
  background: rgba(21, 31, 109, 0.08);
  color: var(--color-primary);
}

/* Collaborations — blue: community & connection */
.ti-learner-view .dashboard-stat--collaborations .dashboard-stat__icon {
  background: rgba(0, 156, 222, 0.12);
  color: var(--color-action);
}

/* ── Responsive ── */

/* Mobile: 2-up wrap so tiles don't get too narrow */
@media (max-width: 767px) {
  .ti-learner-view .dashboard-stats>li {
    flex: 1 1 calc(50% - var(--space-2));
  }

  .ti-learner-view .dashboard-stat {
    padding-top: 4.5rem;
  }
}

/* Tablet+: lock to a single unwrapped row */
@media (min-width: 768px) {
  .ti-learner-view .dashboard-stats {
    flex-wrap: nowrap;
  }

  .ti-learner-view .dashboard-stats>li {
    flex: 1 1 0;
  }
}

/* ============================================================
   11-C. COURSE / CONTENT CARDS
         (a.catalog-item / .catalog-grid-item)

   Universal component — same card renders correctly on the
   dashboard (My Learning Feed, Recommended Content) and on
   the Catalog page, search results, or any other learner-
   facing page where the featured-content widget is placed.

   Scope: .ti-learner-view only (NOT body.dashboard) so
   the card treatment is consistent site-wide.

   DOM (confirmed from learner-dashboard-html-export):
     li
       a.catalog-item                 ← full-card link
         .catalog-grid-item           ← card shell
           .row
             .column.medium-12
               .catalog-grid-item__asset-container
                 img                  ← course thumbnail
             .column.medium-12
               .catalog-grid-item__body
                 p.catalog-grid-item__title
                 .catalog-grid-item__source
                   strong             ← "Video Course"
                   | Expires MM/DD/YYYY
                 p.featured-content-item__authors  ← CME credits
                 hr.catalog-grid-item__hr
                 .catalog-grid-item__cta-container
                   span.btn.btn--link.btn--primary  ← "View Details"

   Design language (inspiration-2 + inspiration-5 + current UI):
     • Edge-to-edge 16:9 thumbnail — Foundation gutters zeroed
       inside the card so the image fills corner-to-corner.
     • Tinted navy pill badge for content type ("VIDEO COURSE").
     • Bold navy title, 3-line clamp, tight leading.
     • Muted xs metadata: expiry date + CME credits.
     • Ultra-subtle divider before CTA row.
     • Right-aligned pill CTA button — navy → AAPA blue on hover.
     • Full card is one clickable link; focus ring on the link
       wrapper with matching border-radius.
     • Hover lift: translateY(-3px) + shadow step up.

   Vendor notes:
     • TI wraps card internals in .row > .column (Foundation).
       Gutters zeroed inside .catalog-grid-item to allow the
       thumbnail to reach the card edges.
     • CTA is span.btn.btn--link.btn--primary — our scoped rule
       overrides all vendor btn properties with !important.
     • .featured-content-item__authors is TI's CME/authors field
       (despite the name, it renders the credit string here).
   ============================================================ */

/* ── Equal-height rows: outer grid ──
   Foundation's block-grid floats each <li>, which means row height
   is set by the tallest card but shorter siblings don't stretch —
   they stay at content height and the CTA drifts away from the
   bottom edge. This affects cards with missing optional elements
   (no .catalog-grid-item__source, no .featured-content-item__authors,
   variable title length, price vs. no price).

   Fix: replace the float context with flexbox. Foundation's
   block-grid width rules (small-block-grid-1, medium-block-grid-4,
   etc.) set explicit width values on <li>; those widths carry over
   as flex-basis values, so column counts are preserved.

   TWO GRID CONTEXTS use this card component:

   1. Dashboard / featured-content widgets (.featured-content-default-grid)
      ul.featured-content-block-grid — has the featured-content-block-grid
      class, scoped by the widget parent div.

   2. Catalog page (.widget--catalog)
      ul.small-block-grid-1.medium-block-grid-2.large-block-grid-3 inside
      .js-results-holder — no featured-content-block-grid class at all.
      This ul must be targeted directly via the catalog widget ancestor.

   Carousel widgets (.featured-content-multi-carousel) share the
   featured-content-block-grid class but must NOT wrap — scoping by
   parent div keeps the two behaviors fully independent. */

.ti-learner-view .featured-content-default-grid .featured-content-block-grid,
.ti-learner-view .featured-content-image-overlay .featured-content-block-grid,
.ti-learner-view .widget--catalog .js-results-holder > ul {
  display: flex;
  flex-wrap: wrap;
  align-items: stretch;
}

/* Foundation appends a clearfix ::after pseudo-element that becomes
   a spurious flex item in the new context — suppress it. */
.ti-learner-view .featured-content-default-grid .featured-content-block-grid::before,
.ti-learner-view .featured-content-default-grid .featured-content-block-grid::after,
.ti-learner-view .featured-content-image-overlay .featured-content-block-grid::before,
.ti-learner-view .featured-content-image-overlay .featured-content-block-grid::after,
.ti-learner-view .widget--catalog .js-results-holder > ul::before,
.ti-learner-view .widget--catalog .js-results-holder > ul::after {
  display: none;
}

/* Each <li> must be a flex column so the card link inside it can
   grow to fill the full row height. */
.ti-learner-view .featured-content-default-grid .featured-content-block-grid > li,
.ti-learner-view .featured-content-image-overlay .featured-content-block-grid > li,
.ti-learner-view .widget--catalog .js-results-holder > ul > li {
  display: flex;
  flex-direction: column;
}

/* ── Foundation grid reset inside the card ──
   Remove column gutters so the thumbnail fills edge-to-edge.
   Also join the flex chain: .row must grow inside .catalog-grid-item
   so the body column can push the CTA to the bottom. */
.ti-learner-view .catalog-grid-item > .row {
  max-width: 100%;
  margin-left: 0;
  margin-right: 0;
  display: flex;
  flex-direction: column;
  flex: 1;
}

/* Foundation appends clearfix pseudo-elements inside .row too —
   suppress so they don't become phantom flex items. */
.ti-learner-view .catalog-grid-item > .row::before,
.ti-learner-view .catalog-grid-item > .row::after {
  display: none;
}

.ti-learner-view .catalog-grid-item .column,
.ti-learner-view .catalog-grid-item .columns {
  padding-left: 0;
  padding-right: 0;
}

/* The second .column.medium-12 (body — title / source / credits /
   CTA) must grow to fill remaining height after the thumbnail takes
   its fixed 16:9 slice. This makes .catalog-grid-item__body (which
   already has flex:1) actually able to push the CTA down. */
.ti-learner-view .catalog-grid-item > .row > .column:last-child,
.ti-learner-view .catalog-grid-item > .row > .columns:last-child {
  display: flex;
  flex-direction: column;
  flex: 1;
}

/* ── Full-card link wrapper ── */
.ti-learner-view a.catalog-item {
  display: flex;
  flex-direction: column;
  flex: 1;
  text-decoration: none;
  color: inherit;
  border-radius: var(--radius-lg);
  /* border-radius here gives the focus ring the right shape */
}

.ti-learner-view a.catalog-item:focus-visible {
  outline: 3px solid var(--color-action);
  outline-offset: 3px;
  box-shadow: var(--shadow-focus-action-wide);
}

/* ── Card shell ── */
.ti-learner-view .catalog-grid-item {
  background-color: var(--color-white);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-float);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  flex: 1;
  /* flex:1 replaces height:100% — more reliable when the parent
     is a flex item (the <li> flex column context above). */
  transition:
    box-shadow var(--transition-fast),
    transform var(--transition-fast);
}

/* ── Hover lift ── */
.ti-learner-view a.catalog-item:hover .catalog-grid-item {
  box-shadow: var(--shadow-md);
  transform: translateY(-3px);
}

/* ── Thumbnail ── */
.ti-learner-view .catalog-grid-item__asset-container {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background-color: var(--color-dashboard-canvas);
  /* placeholder bg when no image is set */
  overflow: hidden;
  flex-shrink: 0;
}

.ti-learner-view .catalog-grid-item__asset-container img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  padding: 0;
  object-fit: cover;
  display: block;
}

/* ── Card body ── */
.ti-learner-view .catalog-grid-item__body {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: var(--space-4);
  gap: var(--space-2);
}

/* ── Content type + expiry row ── */
.ti-learner-view .catalog-grid-item__source {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  line-height: var(--leading-normal);
  margin: 0;
}

/* Content type pill: "VIDEO COURSE" */
.ti-learner-view .catalog-grid-item__source strong {
  display: inline-flex;
  align-items: center;
  padding: 2px var(--space-2);
  background-color: rgba(21, 31, 109, 0.07);
  border-radius: var(--radius-full);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  color: var(--color-primary);
  letter-spacing: 0.03em;
  text-transform: uppercase;
  white-space: nowrap;
}

/* ── Course title ── */
.ti-learner-view .catalog-grid-item__title {
  font-family: var(--font-heading);
  font-size: var(--text-base);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  line-height: 1.3;
  margin: 0;
  /* 3-line clamp — prevents variable-height cards in grids */
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* ── CME credits ── */
.ti-learner-view .featured-content-item__authors {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  line-height: var(--leading-normal);
  margin: 0;
}

/* ── Divider ── */
.ti-learner-view .catalog-grid-item__hr {
  display: none;
  border: none;
  border-top: 1px solid rgba(21, 31, 109, 0.07);
  margin: var(--space-1) 0 0;
}

/* ── CTA row ── */
.ti-learner-view .catalog-grid-item__cta-container {
  display: flex;
  justify-content: flex-end;
  align-items: flex-end;
  height: auto !important;
  margin-top: auto;
  padding-top: var(--space-3);
  border-top: 1px solid rgba(21, 31, 109, 0.07);
}

/* ── Price + button grid (when a paid course shows a price) ──
   TI wraps the CTA contents in a vendor .grid.grid-cols-3 layout
   that gives the button only 1/3 of the container width — too narrow
   for "VIEW DETAILS". Override to flexbox: price grows, button stays
   pinned to the right and never wraps. */
.ti-learner-view .catalog-grid-item__cta-container .grid {
  display: flex !important;
  align-items: flex-end;
  gap: var(--space-3);
  width: 100%;
}

.ti-learner-view .catalog-grid-item__cta-container .grid .col-span-2 {
  flex: 1;
  min-width: 0;
}

.ti-learner-view .catalog-grid-item__cta-container .grid .place-self-top {
  flex-shrink: 0;
}

/* ── Price ── */
.ti-learner-view .catalog-grid-item__price {
  display: block;
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  line-height: var(--leading-tight);
}

/* ── "View Details" button ──
   Overrides .btn .btn--link .btn--primary vendor styles. */
.ti-learner-view .catalog-grid-item__cta-container .btn {
  display: inline-flex !important;
  align-items: center;
  white-space: nowrap;
  padding: var(--space-2) var(--space-4) !important;
  background-color: var(--color-primary) !important;
  border: 2px solid var(--color-primary) !important;
  border-radius: var(--radius-full) !important;
  color: var(--color-white) !important;
  font-family: var(--font-body) !important;
  font-size: var(--text-xs) !important;
  font-weight: var(--weight-bold) !important;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  text-decoration: none !important;
  line-height: 1 !important;
  cursor: pointer;
  transition:
    background-color var(--transition-fast),
    border-color var(--transition-fast);
}

.ti-learner-view .catalog-grid-item__cta-container .btn:hover {
  background-color: var(--color-action) !important;
  border-color: var(--color-action) !important;
}

.ti-learner-view .catalog-grid-item__cta-container .btn:focus-visible {
  outline: 3px solid var(--color-action);
  outline-offset: 3px;
  box-shadow: var(--shadow-focus-action-wide);
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  .ti-learner-view .catalog-grid-item,
  .ti-learner-view .catalog-grid-item__cta-container .btn {
    transition: none;
  }
}

/* ── Forced colors (Windows High Contrast Mode) ── */
@media (forced-colors: active) {
  .ti-learner-view .catalog-grid-item {
    border: 1px solid ButtonText;
  }

  .ti-learner-view .catalog-grid-item__source strong {
    border: 1px solid ButtonText;
    background: transparent;
  }
}

/* ── Horizontal card layout ─────────────────────────────────────
   @container is rejected by TI's CSS parser (confirmed — same
   Monaco limitation as :has()). Solution: key off Foundation's
   block-grid classes, which TI stamps onto every
   ul.featured-content-block-grid automatically based on the
   widget's column configuration. No manual class needed.

   Confirmed DOM pattern (learner-dashboard-html-export):
     ul.featured-content-block-grid
       .small-block-grid-1        ← always present — 1-col on mobile
       .medium-block-grid-N       ← N set by TI widget config

   Auto-trigger: medium-block-grid-1 and medium-block-grid-2
   (1- and 2-column grids). These produce cards wide enough
   (~50 %+ of the viewport at tablet+) to benefit from the
   image-left / details-right treatment.

   Manual override: .wide-card-layout on the widget section
   (via Site Builder → CSS Classes) forces horizontal layout
   on any grid, regardless of column count — useful for custom
   configurations that don't use standard block-grid classes.

   Both paths are wrapped in min-width: 640px so mobile always
   gets the stacked (image-top) layout regardless. */

@media (min-width: 640px) {

  /* ── Selectors shared by auto and manual paths ── */
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-1 .catalog-grid-item > .row,
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-2 .catalog-grid-item > .row,
  .ti-learner-view .wide-card-layout .catalog-grid-item > .row {
    flex-direction: row;
    align-items: stretch;
  }

  /* Thumbnail column: pinned to 42 % of the card width.
     Overrides Foundation's .medium-12 { width: 100% }. */
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-1 .catalog-grid-item > .row > .column:first-child,
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-1 .catalog-grid-item > .row > .columns:first-child,
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-2 .catalog-grid-item > .row > .column:first-child,
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-2 .catalog-grid-item > .row > .columns:first-child,
  .ti-learner-view .wide-card-layout
  .catalog-grid-item > .row > .column:first-child,
  .ti-learner-view .wide-card-layout
  .catalog-grid-item > .row > .columns:first-child {
    flex: 0 0 42%;
    width: 42%;
    max-width: 42%;
  }

  /* Remove fixed 16:9 ratio — image fills the full card height.
     object-fit: cover on the <img> handles the crop. */
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-1 .catalog-grid-item__asset-container,
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-2 .catalog-grid-item__asset-container,
  .ti-learner-view .wide-card-layout .catalog-grid-item__asset-container {
    aspect-ratio: unset;
    height: 100%;
  }

  /* Body column: takes remaining width.
     min-width: 0 prevents long titles overflowing the flex item. */
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-1 .catalog-grid-item > .row > .column:last-child,
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-1 .catalog-grid-item > .row > .columns:last-child,
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-2 .catalog-grid-item > .row > .column:last-child,
  .ti-learner-view .featured-content-default-grid
  ul.medium-block-grid-2 .catalog-grid-item > .row > .columns:last-child,
  .ti-learner-view .wide-card-layout
  .catalog-grid-item > .row > .column:last-child,
  .ti-learner-view .wide-card-layout
  .catalog-grid-item > .row > .columns:last-child {
    flex: 1;
    width: auto;
    min-width: 0;
  }

}

/* ============================================================
   11-C-i. FEATURED CONTENT CAROUSEL CARDS
           (.widget--featured-content_multi-carousel)

   The "NEW!" Featured Content Carousel widget uses a different
   card shell class than the standard .catalog-grid-item. These
   rules mirror the 11-C card design for visual consistency
   across the site.

   DOM (confirmed from learner-dashboard-html-export):
     .widget--featured-content_multi-carousel
       .featured-content-multi-carousel
         ul.featured-content-block-grid.medium-block-grid-4
           li
             a.catalog-item                         ← 11-C (global)
               .featured-content-multi-carousel-item ← card shell
                 .catalog-grid-item__asset-container ← 11-C (global)
                 .featured-content-multi-carousel-item__body
                   h4.featured-content-multi-carousel-item__title
                   p.featured-content-multi-carousel-item__source
                     strong                         ← content type pill
                   p.featured-content-item__authors  ← 11-C (global)

   Notes:
     • a.catalog-item and .catalog-grid-item__asset-container are
       already globally styled in 11-C — no duplication needed.
     • .featured-content-item__authors is globally styled in 11-C.
     • No CTA button or hr in this widget's card — simpler layout.
   ============================================================ */

/* ── Equal-height cards ──────────────────────────────────────
   Strategy: convert the carousel ul to a flex row so that
   all li items in view share the height of the tallest card.

   Why this is safe for the carousel JS:
   • TI slides the carousel via transform: translateX(%) on ul.
     Making ul display:flex does not change that — the transform
     still moves the ul left/right within the overflow:hidden
     parent div.
   • Foundation's width:25% on each li (medium-block-grid-4)
     becomes flex-basis:25% — identical geometry to the float
     layout it replaces.
   • flex-shrink:0 on li prevents items compressing below 25%
     when there are more cards than one page can show.
   • Float on li is ignored by the browser once ul is flex,
     but float was only needed for the block-grid layout, which
     flex now handles directly with the same proportions. */
.ti-learner-view .widget--featured-content_multi-carousel
.featured-content-multi-carousel .featured-content-block-grid {
  display: flex;
  flex-wrap: nowrap;
  align-items: stretch;
}

/* Suppress Foundation clearfix pseudo-elements — in flex context
   they become phantom flex items that distort the row. */
.ti-learner-view .widget--featured-content_multi-carousel
.featured-content-multi-carousel .featured-content-block-grid::before,
.ti-learner-view .widget--featured-content_multi-carousel
.featured-content-multi-carousel .featured-content-block-grid::after {
  display: none;
}

/* li: now a flex item (float ignored) + a flex container so that
   a.catalog-item with flex:1 can grow to fill its full height. */
.ti-learner-view .widget--featured-content_multi-carousel
.featured-content-multi-carousel .featured-content-block-grid > li {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
}

/* ── Card shell ── */
.ti-learner-view .featured-content-multi-carousel-item {
  background-color: var(--color-white);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-float);
  border-right: none;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  flex: 1;
  transition:
    box-shadow var(--transition-fast),
    transform var(--transition-fast);
}

/* ── Hover lift ── */
.ti-learner-view a.catalog-item:hover .featured-content-multi-carousel-item {
  box-shadow: var(--shadow-md);
  transform: translateY(-3px);
}

/* ── Card body ── */
.ti-learner-view .featured-content-multi-carousel-item__body {
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: var(--space-4);
  gap: var(--space-2);
  text-align: left;
}

/* ── Title ── */
.ti-learner-view .featured-content-multi-carousel-item__title {
  font-family: var(--font-heading);
  font-size: var(--text-base);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  line-height: 1.3;
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* ── Content type + expiry row ── */
.ti-learner-view .featured-content-multi-carousel-item__source {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  line-height: var(--leading-normal);
  margin: 0;
}

/* Content type pill: "VIDEO COURSE" / "CLASS" etc. */
.ti-learner-view .featured-content-multi-carousel-item__source strong {
  display: inline-flex;
  align-items: center;
  padding: 2px var(--space-2);
  background-color: rgba(21, 31, 109, 0.07);
  border-radius: var(--radius-full);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  color: var(--color-primary);
  letter-spacing: 0.03em;
  text-transform: uppercase;
  white-space: nowrap;
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  .ti-learner-view .featured-content-multi-carousel-item {
    transition: none;
  }
}

/* ── Forced colors (Windows High Contrast Mode) ── */
@media (forced-colors: active) {
  .ti-learner-view .featured-content-multi-carousel-item {
    border: 1px solid ButtonText;
  }

  .ti-learner-view .featured-content-multi-carousel-item__source strong {
    border: 1px solid ButtonText;
    background: transparent;
  }
}

/* ============================================================
   11-C-ii. RECOMMENDED CONTENT CAROUSEL
            (.widget--recommended-content_multi-carousel)

   Same carousel component as 11-C-i but in the Recommended Content
   widget context. Two problems to solve:

   1. EQUAL-HEIGHT CARDS — same flex-on-ul strategy as 11-C-i.
      ul/li rules re-scoped to this widget class.
      a.catalog-item (flex:1) and .featured-content-multi-carousel-item
      (display:flex; flex:1) are already globally set.

   2. RETAKE ASSESSMENT BUTTON — TI renders it before the carousel
      in the DOM (.btn--right, float:right), carving ~20% of row
      width away from the cards. Fix: flex column on the inner
      wrapper + order to push the button below the cards.

   DOM:
     .small-12.columns
       └─ .ember-view                  ← flex column (fix #2)
            ├─ button.btn--right       ← order: 2 → below cards
            ├─ .ember-view             ← empty metamorph shell
            └─ .ember-view
                 └─ .featured-content-multi-carousel
                      └─ ul.featured-content-block-grid  ← fix #1
                           └─ li
                                └─ a.catalog-item (global flex:1)
   ============================================================ */

/* ── Fix #1: Equal-height cards ── */
.ti-learner-view .widget--recommended-content_multi-carousel
.featured-content-multi-carousel .featured-content-block-grid {
  display: flex;
  flex-wrap: nowrap;
  align-items: stretch;
}

/* Suppress Foundation clearfix pseudo-elements (phantom flex items). */
.ti-learner-view .widget--recommended-content_multi-carousel
.featured-content-multi-carousel .featured-content-block-grid::before,
.ti-learner-view .widget--recommended-content_multi-carousel
.featured-content-multi-carousel .featured-content-block-grid::after {
  display: none;
}

/* li: flex item (float ignored) + flex container for a.catalog-item. */
.ti-learner-view .widget--recommended-content_multi-carousel
.featured-content-multi-carousel .featured-content-block-grid > li {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
}

/* ── Fix #2: Retake Assessment button layout ── */

/* Flex column on the inner container so cards fill full width
   and button can be pushed below them with order. */
.ti-learner-view .widget--recommended-content_multi-carousel
.small-12.columns > .ember-view {
  display: flex;
  flex-direction: column;
}

/* Override vendor float: right; push below carousel; center. */
.ti-learner-view .widget--recommended-content_multi-carousel .btn--right {
  float: none;
  order: 2;
  align-self: center;
  margin-top: var(--space-5);
}

/* ============================================================
   11-D. IMAGE OVERLAY TILES
         (.widget--featured-content_image-overlay)

   Widget 7 — the "New!" / image overlay tile grid.
   Full-bleed course thumbnail with title text overlaid on
   a lower navy gradient. Inspired by the thick-bordered,
   lower-gradient overlay card pattern.

   DOM (⚠ UNDEPLOYED — not present in any current snapshot):
     .widget--featured-content_image-overlay does not appear in the
     current learner-dashboard-html-export or any other captured page.
     The widget type exists in TI's catalog but is not active on the
     AAPA site as of the last snapshot audit (2026-03-23). Rules are
     kept as ready-to-activate infrastructure. Re-verify against a
     fresh dashboard snapshot before enabling.

     Expected DOM when deployed:
     .widget--featured-content_image-overlay
       ul.featured-content-block-grid
         li
           a.catalog-item                        ← full-card link
             .featured-content-image-overlay-item  ← card shell
               div.ember-view                    ← image wrapper (no class)
                 img.ember-view                  ← course thumbnail
               .featured-content-image-overlay-item__overlay
                 h4.featured-content-image-overlay-item__title

   Design:
     • Full-bleed image fills the entire card — no separate body.
     • 4:3 aspect ratio — works in a 4-column grid at dashboard width.
     • Light white border (2.5px) — the thick-bordered look from the
       reference card. Subtly brightens on hover.
     • Lower gradient overlay — AAPA navy tint, opaque at bottom
       (for text legibility), fully transparent by ~65% up.
     • Bold white title at the bottom of the gradient.
     • Subtle text-shadow for legibility over varied photography.
     • Hover: lift + stronger shadow + brighter border.

   Accessibility:
     • Focus ring scoped to the widget so it doesn't override the
       standard catalog-item ring elsewhere.
     • "No Image" placeholder (aria-label attr) padded + dimmed
       so the camera icon reads as an intentional placeholder.
   ============================================================ */

/* Scoped link — wider border-radius to match the card */
.ti-learner-view .widget--featured-content_image-overlay a.catalog-item {
  border-radius: var(--radius-xl);
}

/* ── Card shell ── */
.ti-learner-view .featured-content-image-overlay-item {
  position: relative;
  overflow: hidden;
  border-radius: var(--radius-xl);
  border: 2.5px solid rgba(255, 255, 255, 0.55);
  box-shadow: var(--shadow-float);
  aspect-ratio: 4 / 3;
  width: 100%;
  /* flex:1 fills the a.catalog-item link wrapper (now a flex column);
     aspect-ratio:4/3 continues to govern the card's actual dimensions. */
  flex: 1;
  background-color: var(--color-dashboard-canvas);
  /* placeholder bg before the image loads */
  transition:
    box-shadow var(--transition-fast),
    border-color var(--transition-fast),
    transform var(--transition-fast);
}

/* ── Hover lift ── */
.ti-learner-view .widget--featured-content_image-overlay
a.catalog-item:hover .featured-content-image-overlay-item {
  box-shadow: var(--shadow-md);
  border-color: rgba(255, 255, 255, 0.82);
  transform: translateY(-3px);
}

/* ── Image — absolutely fills the card shell ── */
.ti-learner-view .featured-content-image-overlay-item img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

/* ── "No Image" placeholder — centered icon, dimmed ── */
.ti-learner-view .featured-content-image-overlay-item
img[aria-label="No Image"] {
  object-fit: contain;
  padding: var(--space-8);
  opacity: 0.25;
}

/* ── Lower gradient overlay ──
   Navy tint anchors the brand while keeping images readable.
   Default: opaque at bottom → transparent by 65% up the card.
   The ::after pseudo-element holds the expanded hover gradient;
   see "Gradient hover expansion" block below. */
.ti-learner-view .featured-content-image-overlay-item__overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to top,
    rgba(21, 31, 109, 0.88) 0%,
    rgba(21, 31, 109, 0.42) 38%,
    transparent 65%
  );
  display: flex;
  align-items: flex-end;
  padding: var(--space-5);
}

/* ── Gradient hover expansion — ::after fade technique ──
   CSS cannot transition gradient stop positions directly.
   The expanded gradient lives in ::after at opacity: 0;
   hovering fades it to opacity: 1 for a smooth "rising tide"
   effect. pointer-events: none keeps clicks falling through
   to the link. Title gets z-index: 1 to stay above this layer. */
.ti-learner-view .featured-content-image-overlay-item__overlay::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to top,
    rgba(21, 31, 109, 0.88) 0%,
    rgba(21, 31, 109, 0.42) 60%,
    transparent 90%
  );
  opacity: 0;
  transition: opacity var(--transition-base);
  pointer-events: none;
}

.ti-learner-view .widget--featured-content_image-overlay
a.catalog-item:hover .featured-content-image-overlay-item__overlay::after {
  opacity: 1;
}

/* ── Title ── */
.ti-learner-view .featured-content-image-overlay-item__title {
  font-family: var(--font-heading);
  font-size: var(--text-base);
  font-weight: var(--weight-bold);
  color: var(--color-white);
  line-height: 1.3;
  margin: 0;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);
  /* Sits above the ::after gradient layer */
  position: relative;
  z-index: 1;
  /* 3-line clamp — consistent tile heights across varied titles */
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* ── Focus ring — scoped to this widget ── */
.ti-learner-view .widget--featured-content_image-overlay
a.catalog-item:focus-visible {
  outline: 3px solid var(--color-action);
  outline-offset: 3px;
  box-shadow: var(--shadow-focus-action-wide);
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  .ti-learner-view .featured-content-image-overlay-item {
    transition: none;
  }

  .ti-learner-view .featured-content-image-overlay-item__overlay::after {
    transition: none;
  }
}

/* ── Forced colors ── */
@media (forced-colors: active) {
  .ti-learner-view .featured-content-image-overlay-item {
    border: 2px solid ButtonText;
  }

  .ti-learner-view .featured-content-image-overlay-item__title {
    text-shadow: none;
  }
}

/* ============================================================
   11-E. BADGES
         (.widget--badges_standard)

   DOM (confirmed from learner-dashboard-html-export):
     .widget.widget--badges.widget--badges_standard
       .row
         .small-12.columns
           .row.hide-for-small-only
             .medium-9.columns
               h3                                     ← widget heading
               hr.hr__accent.hr__accent--badges       ← accent rule
           .hide-for-small-only
             .dashboard-badges-container              ← position context
               div [touch-action:pan-y]               ← carousel controller
                 .featured-content-multi-carousel
                 .featured-content-multi-carousel--badges
                   ul.featured-content-block-grid
                   .medium-block-grid-6               ← 6 badges/page
                     li.dashboard-badge               ← earned
                       img                            ← shield art (84×84 from TI)
                       p.dashboard-badge__label       ← "CLINICAL CLIMBER"
                       p.dashboard-badge__threshold   ← "75 Gamification Points"
                     li.dashboard-badge
                     .dashboard-badge--unearned       ← locked
                 button.badges-carousel__button
                 .badges-carousel__button--right      ← next page
                   i.icon-navigateright

   Design (Option B — Open / Minimal):
     • No per-badge card borders or box-shadows — shield art floats
       directly on the widget background surface.
     • Earned: full-color image at 80 px with a soft CSS drop-shadow
       that follows the shield silhouette (filter: drop-shadow).
     • Hover on earned: gentle lift + stronger shadow.
     • Unearned: grayscale + 40 % opacity — clearly locked.
     • Bold uppercase navy label + muted threshold text.
     • hr__accent--badges hidden (renders orphaned when h3 is empty).
     • Solid navy nav buttons → action blue on hover.
   ============================================================ */

/* ── Section heading ── */
.ti-learner-view .widget--badges h3 {
  font-family: var(--font-heading);
  font-size: var(--text-lg);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  margin: 0 0 var(--space-2);
  line-height: 1.2;
}

/* hr__accent--badges hidden — TI renders it even when the h3 heading
   is empty, leaving an orphaned line floating above the carousel. */
.ti-learner-view .hr__accent--badges {
  display: none;
}

/* ── Carousel position context ──
   Needed so TI's absolutely-positioned nav buttons stay inside
   the container rather than escaping to the nearest positioned
   ancestor. */
.ti-learner-view .dashboard-badges-container {
  position: relative;
  box-shadow: none;
}

/* ── Badge list ──
   Scoped to .featured-content-multi-carousel--badges so this
   reset only touches the badges ul and not any other block-grid. */
.ti-learner-view .featured-content-multi-carousel--badges
.featured-content-block-grid {
  list-style: none;
  margin: 0;
  padding: 0;
}

/* ── Individual badge cell ── */
.ti-learner-view .dashboard-badge {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: var(--space-4) var(--space-3);
  border: none;
  cursor: default;
}

/* ── Badge image — base ──
   CSS overrides TI's 84 px inline dimensions to 80 px.
   filter: drop-shadow traces the shield silhouette (not the
   bounding box), giving a natural floating effect. */
.ti-learner-view .dashboard-badge img {
  display: block;
  width: 80px;
  height: 80px;
  margin: 0 auto;
  object-fit: contain;
  filter: drop-shadow(0 4px 10px rgba(0, 0, 0, 0.18));
  transition:
    transform var(--transition-fast),
    filter var(--transition-fast);
}

/* ── Hover lift — earned badges only ── */
.ti-learner-view .dashboard-badge:not(.dashboard-badge--unearned):hover img {
  transform: translateY(-3px) scale(1.06);
  filter: drop-shadow(0 8px 18px rgba(0, 0, 0, 0.24));
}

/* ── Unearned badge — locked state ── */
.ti-learner-view .dashboard-badge--unearned img {
  filter: grayscale(1);
  opacity: 0.4;
}

/* ── Badge label ── */
.ti-learner-view .dashboard-badge__label {
  font-family: var(--font-heading);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-primary);
  margin: var(--space-3) 0 0;
  line-height: 1.3;
}

.ti-learner-view .dashboard-badge--unearned .dashboard-badge__label {
  color: var(--color-text-muted);
}

/* ── Points threshold ── */
.ti-learner-view .dashboard-badge__threshold {
  display: none;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin: var(--space-1) 0 0;
  line-height: 1.3;
}

/* ── Carousel nav buttons ──
   TI handles positioning; we restyle the appearance.
   Solid navy default → action blue on hover (high contrast shift). */
.ti-learner-view .badges-carousel__button {
  appearance: none;
  width: 32px;
  height: 32px;
  padding: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background-color: var(--color-primary);
  border: 1.5px solid var(--color-primary);
  border-radius: 50%;
  color: var(--color-white);
  cursor: pointer;
  box-shadow: var(--shadow-float);
  transition:
    background-color var(--transition-fast),
    border-color var(--transition-fast),
    box-shadow var(--transition-fast);
}

.ti-learner-view .badges-carousel__button:hover {
  background-color: var(--color-action);
  border-color: var(--color-action);
  box-shadow: var(--shadow-md);
}

.ti-learner-view .badges-carousel__button:focus-visible {
  outline: 3px solid var(--color-action);
  outline-offset: 3px;
}

/* Icon inside the button */
.ti-learner-view .badges-carousel__button i {
  font-size: 14px;
  line-height: 1;
  pointer-events: none;
}

/* ── Reduced motion ── */
@media (prefers-reduced-motion: reduce) {
  .ti-learner-view .dashboard-badge img,
  .ti-learner-view .badges-carousel__button {
    transition: none;
  }
}

/* ── Forced colors (Windows High Contrast Mode) ── */
@media (forced-colors: active) {
  .ti-learner-view .badges-carousel__button {
    border: 2px solid ButtonText;
  }

  /* grayscale filter is stripped — rely on opacity alone */
  .ti-learner-view .dashboard-badge--unearned img {
    filter: none;
    opacity: 0.5;
  }
}

/* ============================================================
   11-F. LEARNER ACCESS WIDGET
         (.widget--dashboard-access)

   DOM (confirmed from learner-dashboard-html-export,
   expanded accordion state captured 2026-03-12):

     .widget.widget--dashboard-access.widget--dashboard-access_standard
       .dashboard-access                              ← inner wrapper
         ul.dashboard-access-tabs                    ← tab bar
           li.dashboard-access-tab.--completed|--certificate
             button.btn.btn--link.btn--inherit-font  ← tab trigger
               span.dashboard-access-tab__label      ← tab label
               span.dashboard-access-tab__count      ← count badge
         section[role="tabpanel"]#access-section-N   ← content panels
           .dashboard-access-list-item               ← accordion row
             .grid.grid-cols-12.gap-4.items-center
               .col-span-4
                 button.dashboard-access-list-item-expander
                   i.icon-navigateright / .icon-navigatedown
                   span.dashboard-access-list-item-expander__title
               .col-span-3
                 strong (course type)  |  CME text
                 p.catalog-list-item__source
               .col-start-11.col-span-2.text-right
                 a.btn.btn--primary.btn--small.m-0   ← CTA
           .dashboard-access-list-item-expansion     ← expanded panel
             .row
               .medium-4.columns → img               ← thumbnail
               .medium-8.columns
                 .user-engagement-stats
                   ul.small-block-grid-2.medium-block-grid-4
                     li.user-engagement-stat--hours
                     li.user-engagement-stat--assessments
                     li.user-engagement-stat--percent-complete
                 .user-engagement-progress-bar
                   .nice.round.progress.colorized
                     span.meter
                 a.btn.btn--alt.btn--small
                   .dashboard-access-list-view-detail-page

   Vendor overrides applied in this section:
     .dashboard-access             border: 1px solid #cbcbcb
     .dashboard-access-tabs        background gradient + border
     .dashboard-access-tab--active background: #fff + :after pseudo
     .dashboard-access-list-item   border-bottom + zebra stripes
     .user-engagement-stat--hours  color: #17779f
     .user-engagement-stat--pct    color: #b6259e
     .progress.colorized .meter    gradient(#1c83ae → #8ad56e)

   Tab icons via ti-icons-rev2 font (::before pseudo-elements):
     --completed  → icon-checkfile  U+E666
     --certificate → icon-workbook  U+E691
   ============================================================ */

/* ── ─────────────────────────────────────────────────────── ──
   11-F-I. WIDGET CONTAINER
   The entire .dashboard-access is one unified card — tab bar,
   accordion rows, and expansion panels all live inside it.
   overflow:hidden clips child corners to the card border-radius.
   ── ─────────────────────────────────────────────────────── ── */

/* Vendor: .dashboard-access { border: 1px solid #cbcbcb }
   Replaced with a full floating card surface. */
.ti-learner-view .dashboard-access {
  background: var(--color-white);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-float);
  overflow: hidden;
}

/* Kill vendor divider lines between tabs and panel */
.ti-learner-view .dashboard-access-tab-divider {
  display: none;
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-II. TAB BAR
   Vendor: gradient background, inline list, active-tab :after
   trick that merges the li into the panel below.
   Integrated nav row within the unified card — no card of its
   own. A hairline bottom border divides it from the content.

   Horizontal scroll: tabs overflow on narrow viewports. The
   native scrollbar is hidden; scroll-fade edges signal there
   is more to scroll.

   Scroll-fade technique — background-attachment: local / scroll:
   • Two white "cover" gradients (local) are anchored to the
     content edges. At a scroll extreme the cover aligns with
     the viewport edge, hiding the tinted shadow behind it.
   • Two tinted "shadow" gradients (scroll) are fixed to the
     box and are revealed as you scroll away from each edge.
   Net result: tinted fade appears only on the side(s) where
   more tabs exist, disappears when you reach the end.
   ── ─────────────────────────────────────────────────────── ── */

.ti-learner-view .dashboard-access-tabs {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 0;
  /* ── horizontal scroll ── */
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;       /* Firefox */
  -ms-overflow-style: none;    /* IE / legacy Edge */
  /* ── scroll-fade edges ── */
  background-color: var(--color-white);
  background-image:
    linear-gradient(to right, var(--color-white) 0%, transparent 100%),
    linear-gradient(to left,  var(--color-white) 0%, transparent 100%),
    linear-gradient(to right, rgba(21, 31, 109, 0.10) 0%, transparent 100%),
    linear-gradient(to left,  rgba(21, 31, 109, 0.10) 0%, transparent 100%);
  background-size:       3rem 100%, 3rem 100%, 2rem 100%, 2rem 100%;
  background-position:   left center, right center, left center, right center;
  background-repeat:     no-repeat, no-repeat, no-repeat, no-repeat;
  background-attachment: local, local, scroll, scroll;
  /* ── structure ── */
  border-radius: 0;
  box-shadow: none;
  padding: 0;
  margin-bottom: 0;
  list-style: none;
  border-bottom: 1px solid rgba(21, 31, 109, 0.07);
}

/* Hide native scrollbar in WebKit / Blink */
.ti-learner-view .dashboard-access-tabs::-webkit-scrollbar {
  display: none;
}

/* Vendor: display: inline-block on li */
.ti-learner-view .dashboard-access-tabs li {
  display: flex;
  flex-shrink: 0;   /* tabs never compress — container scrolls instead */
}

/* Vendor: border: solid #fff0; border-width: 3px 0 0 — tab li has a
   transparent 3px TOP border that becomes visible (accent-colored) on
   the active state. We reuse the li for the indicator, but move it to
   the BOTTOM so the underline sits at the bottom of the tab bar card,
   matching the inspiration. The transition lives here too. */
.ti-learner-view .dashboard-access-tab {
  border: none;
  border-bottom: 3px solid transparent;
  transition: border-color var(--transition-fast);
  cursor: pointer;
}

/* Vendor: background: #fff + border-color: var(--accent-color) on active li.
   Active indicator — action-blue bottom border on the li. */
.ti-learner-view .dashboard-access-tab--active {
  background: transparent;
  border-bottom-color: var(--color-action);
}

.ti-learner-view .dashboard-access-tab--active:after {
  display: none;
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-III. TAB BUTTONS — base styles + icon injection

   Every tab gets a Unicons line icon via ::before. The shared
   font properties live on the base selector so any future tab
   type automatically renders something. Named-tab selectors
   override only the `content` codepoint — same specificity,
   later position in cascade → named tab wins.

   Icon map (Unicons v4.2.0 line, font-family "unicons-line"):
     --required      uil-exclamation-circle   \e9b1
     --current       uil-book-open            \eb17
     --events        uil-calendar-alt         \e8dc
     --learningPath  uil-map                  \e8e1
     --completed     uil-check-circle         \e9c2
     --archived      uil-archive              \eafa
     --certificate   uil-award                \e901
     (fallback)      uil-layer-group          \e99f
   ── ─────────────────────────────────────────────────────── ── */

.ti-learner-view .dashboard-access-tab button {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--space-1);
  /* Compact default — widens at larger viewports below */
  padding: var(--space-2) var(--space-3);
  color: var(--color-text-muted);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  line-height: 1.3;
  background: transparent;
  border: none;
  border-radius: 0;
  transition: color var(--transition-fast);
}

.ti-learner-view .dashboard-access-tab:hover button {
  color: var(--color-primary);
}

/* Tablet — slightly more breathing room */
@media (min-width: 640px) {
  .ti-learner-view .dashboard-access-tab button {
    padding: var(--space-3) var(--space-4);
  }
}

/* Desktop — full spacing */
@media (min-width: 1024px) {
  .ti-learner-view .dashboard-access-tab button {
    padding: var(--space-4) var(--space-5);
  }
}

/* Base icon — shared font properties + fallback glyph (uil-layer-group).
   Any tab type not listed below will render this icon automatically. */
.ti-learner-view .dashboard-access-tab button::before {
  font-family: "unicons-line";
  font-size: 1.375rem;
  line-height: 1;
  font-style: normal;
  font-weight: 400;
  font-variant: normal;
  text-transform: none;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: inherit;
  content: "\e99f"; /* uil-layer-group — fallback */
}

/* Per-tab icon codepoints — cascade position beats base above */
.ti-learner-view .dashboard-access-tab--required button::before {
  content: "\e9b1"; /* uil-exclamation-circle */
}

.ti-learner-view .dashboard-access-tab--current button::before {
  content: "\eb17"; /* uil-book-open */
}

.ti-learner-view .dashboard-access-tab--events button::before {
  content: "\e8dc"; /* uil-calendar-alt */
}

.ti-learner-view .dashboard-access-tab--learningPath button::before {
  content: "\e8e1"; /* uil-map */
}

.ti-learner-view .dashboard-access-tab--completed button::before {
  content: "\e9c2"; /* uil-check-circle */
}

.ti-learner-view .dashboard-access-tab--archived button::before {
  content: "\eafa"; /* uil-archive */
}

.ti-learner-view .dashboard-access-tab--certificate button::before {
  content: "\e901"; /* uil-award */
}

/* ── Tab label ── */
.ti-learner-view .dashboard-access-tab__label {
  font-size: var(--text-sm);
  font-weight: inherit;
  text-align: center;
  line-height: 1;
}

/* ── Count badge ── */
.ti-learner-view .dashboard-access-tab__count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  margin: 0;
  padding: 2px var(--space-2) 0 var(--space-2);
  background: var(--color-border);
  color: var(--color-white);
  border-radius: var(--radius-full);
  font-family: var(--font-heading);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  line-height: 1;
}

/* Required tab has no count value — hide the badge visually but
   keep it in layout (visibility:hidden, not display:none) so the
   three-row stack (icon / label / badge-space) stays the same
   height as every other tab and all tabs remain aligned. */
.ti-learner-view .dashboard-access-tab--required .dashboard-access-tab__count {
  visibility: hidden;
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-IV. TAB ACTIVE / INACTIVE STATES
   ── ─────────────────────────────────────────────────────── ── */

/* Active tab — base text + bold; indicator is on the li (11-F-II above) */
.ti-learner-view .dashboard-access-tab--active button {
  color: var(--color-text-base);
}

/* Active icon — override inherited text color so it stays action blue */
.ti-learner-view .dashboard-access-tab--active button::before {
  color: var(--color-action);
}

/* Active count badge — action-blue fill */
.ti-learner-view .dashboard-access-tab--active .dashboard-access-tab__count {
  background: var(--color-action);
  border-color: var(--color-action);
}

/* Vendor: .dashboard-access-tab--inactive button { font-weight: 400 }
   Already handled by base button styles above */

/* ── ─────────────────────────────────────────────────────── ──
   11-F-V. TAB PANEL
   Add breathing room around the accordion list.
   ── ─────────────────────────────────────────────────────── ── */

.ti-learner-view .dashboard-access section[role="tabpanel"] {
  max-height: 550px;
  padding: 0 0 var(--space-4);
  overflow-x: hidden;
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-VI. ACCORDION ROWS — list items inside the unified card
   Vendor: border-bottom + alternating #fff/#f8f8f8 zebra stripes.
   Replaced with hairline top-border dividers; no individual card
   surface — rows live inside .dashboard-access unified card.
   ── ─────────────────────────────────────────────────────── ── */

/* Vendor: border-bottom: 1px solid #cbcbcb */
.ti-learner-view .dashboard-access-list-item {
  background: transparent;
  border-radius: 0;
  box-shadow: none;
  border-top: 1px solid rgba(21, 31, 109, 0.07);
  border-bottom: none;
  margin-bottom: 0;
  padding: var(--space-4);
  transition: background-color var(--transition-fast);
}

/* Hover: subtle tint instead of shadow lift (no longer a card) */
.ti-learner-view .dashboard-access-list-item:hover {
  background-color: rgba(21, 31, 109, 0.02);
}

/* Vendor: alternating #fff / #f8f8f8 backgrounds — neutralize */
.ti-learner-view .dashboard-access-list-item:nth-of-type(odd),
.ti-learner-view .dashboard-access-list-item:nth-of-type(2n) {
  background: transparent;
}

/* Vendor: last-of-type removes border-bottom — already none */
.ti-learner-view .dashboard-access-list-item:last-of-type {
  margin-bottom: 0;
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-VII. ROW HEADER — expander button, title, type/CME text
   ── ─────────────────────────────────────────────────────── ── */

/* Expander button layout */
.ti-learner-view .dashboard-access-list-item-expander {
  display: inline-flex;
  align-items: flex-start;
  gap: var(--space-2);
  text-align: left;
  background: transparent;
  border: none;
  padding: 0;
  cursor: pointer;
}

/* Chevron icon — Vendor: color: var(--accent-color)
   Closed state: muted gray signals collapsed; open state: action blue signals active. */
.ti-learner-view .dashboard-access-list-item-expander i {
  color: var(--color-text-muted);
  font-size: var(--text-base);
  flex-shrink: 0;
  margin-top: 2px;
  transition: color var(--transition-fast);
}

.ti-learner-view .dashboard-access-list-item-expander:hover i {
  color: var(--color-primary);
}

/* Course title — Vendor: color: #4c4c4c */
.ti-learner-view .dashboard-access-list-item-expander__title {
  font-family: var(--font-heading);
  font-size: var(--text-base);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  line-height: var(--leading-tight);
}

/* Vendor: :hover color: #656565 — we lift to action blue */
.ti-learner-view .dashboard-access-list-item-expander__title:hover {
  color: var(--color-action);
}

/* ── Open state — header row ──
   aria-expanded="true" is toggled by TI's Ember component when the
   row is expanded. No :has() needed — target the button directly.
   Chevron lifts from muted → action blue; title shifts navy → action blue
   to signal "this row is selected / in focus." */
.ti-learner-view .dashboard-access-list-item-expander[aria-expanded="true"] i {
  color: var(--color-action);
}

.ti-learner-view .dashboard-access-list-item-expander[aria-expanded="true"]
.dashboard-access-list-item-expander__title {
  color: var(--color-action);
}

/* Course type label (the <strong> in col-span-3) */
.ti-learner-view .dashboard-access-list-item .col-span-3 strong {
  font-family: var(--font-heading);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
}

/* CME credits text */
.ti-learner-view .dashboard-access-list-item .col-span-3 {
  font-size: var(--text-sm);
  color: var(--color-text-base);
  line-height: var(--leading-normal);
}

/* Accreditation date line — Vendor: color: #656565 */
.ti-learner-view .dashboard-access-list-item .catalog-list-item__source {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  margin: var(--space-1) 0 0;
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-VIII. EXPANSION PANEL
   Thumbnail · stat blocks · progress bar · View Details link
   ── ─────────────────────────────────────────────────────── ── */

/* Open expansion panel — only rendered in DOM when row is open (Ember removes
   it entirely when collapsed), so every rule here is an implicit open-state rule.
   Bleeds edge-to-edge inside the row with negative margins that cancel the
   parent's padding: var(--space-4), creating a full-width tinted content area.
   Left accent + top border provide the clearest open-row signal. */
.ti-learner-view .dashboard-access-list-item-expansion {
  margin: var(--space-4) calc(-1 * var(--space-4)) calc(-1 * var(--space-4));
  padding: var(--space-4);
  background: rgba(0, 156, 222, 0.05);
}

/* ── Thumbnail ── */
.ti-learner-view .dashboard-access-list-item-expansion .medium-4.columns img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--radius-md);
  object-fit: cover;
}

/* ── Stat block container ── */
.ti-learner-view .user-engagement-stats {
  margin-bottom: var(--space-4);
}

/* ── Individual stat — color overrides ──
   Vendor assigns decorative brand colors:
     --hours:            #17779f (blue)
     --percent-complete: #b6259e (magenta)
   We remap to AAPA tokens. --assessments has no vendor color,
   we set it to primary navy for consistency. */
.ti-learner-view .user-engagement-stat--hours {
  color: var(--color-action);
}

.ti-learner-view .user-engagement-stat--assessments {
  color: var(--color-primary);
}

.ti-learner-view .user-engagement-stat--percent-complete {
  color: var(--color-success);
}

/* ── Stat label ──
   Vendor: color: #656565; font-size: 11px */
.ti-learner-view .user-engagement-stat__label {
  font-family: var(--font-heading);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--color-text-muted);
}

/* ── Stat value container ── */
.ti-learner-view .user-engagement-stat__value-container {
  font-family: var(--font-heading);
  font-weight: var(--weight-bold);
  line-height: 1;
}

/* ── Fraction denominator (e.g. "/1" in passed assessments) ──
   Vendor: color: #656565 */
.ti-learner-view .user-engagement-stat__value--muted {
  color: var(--color-text-muted);
  font-weight: var(--weight-regular);
}

/* ── Percent sign ── */
.ti-learner-view .user-engagement-stat__value--percent {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  font-weight: var(--weight-medium);
}

/* ── Progress bar ── */
.ti-learner-view .user-engagement-progress-bar {
  margin-top: var(--space-3);
}

/* Track — vendor: background-color: #f6f6f6; height: 1.5625rem;
   border: 1px solid #fff */
.ti-learner-view .user-engagement-progress-bar .progress {
  background: var(--color-border);
  border: none;
  height: 8px;
  border-radius: var(--radius-full);
  overflow: hidden;
}

/* Fill — Vendor: gradient(#1c83ae → #8ad56e)
   We remap to AAPA action blue → success teal */
.ti-learner-view .user-engagement-progress-bar .progress.colorized .meter {
  background: linear-gradient(90deg, var(--color-action), var(--color-success));
  border-radius: var(--radius-full);
  height: 100%;
  transition: width var(--transition-base);
}

/* ── View Details link ──
   Vendor .btn--alt: background #f8fafc, border #d0d0d0, color #303030.
   Restyle to match LC button system — pill outline, navy border/text,
   transparent fill (secondary action, subordinate to the row CTA). */
.ti-learner-view .dashboard-access-list-item-expansion .btn--alt {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-top: var(--space-4);
  padding: 8px var(--space-5);
  min-height: 36px;
  background: transparent;
  border: 2px solid var(--color-primary);
  border-radius: var(--radius-full);
  color: var(--color-primary);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  line-height: 1;
  letter-spacing: 0.02em;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  box-shadow: none;
  transition:
    background-color var(--transition-fast),
    color var(--transition-fast),
    border-color var(--transition-fast);
}

.ti-learner-view .dashboard-access-list-item-expansion .btn--alt:hover {
  background: var(--color-primary);
  color: var(--color-white);
  border-color: var(--color-primary);
  text-decoration: none;
}

.ti-learner-view .dashboard-access-list-item-expansion .btn--alt:focus-visible {
  outline: 2px solid var(--color-action);
  outline-offset: 2px;
  box-shadow: var(--shadow-focus-action);
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-IX. RESPONSIVE

   ACCORDION HEADER — DOM structure:
     .grid.grid-cols-12.gap-4.items-center
       .col-span-4          ← expander + course title
       .col-span-2          ← empty spacer (no content)
       .col-span-3          ← course type + CME + accreditation
       .col-start-11.col-span-2.text-right  ← CTA button

   The 12-column utility grid has no built-in breakpoints — all
   columns try to fit at any width, causing catastrophic wrapping
   on phones (each col becomes ~20px wide at 390px viewport).

   FIX at ≤ 767px: override to a 2-column `1fr auto` layout:

     Row 1 │ ▶ Title (1fr)              │ [CTA button] (auto) │
     Row 2 │ Video Course | 1.5 CME | Accreditation (full width) │

   Title gets all available space; CTA is naturally sized;
   course metadata spans full width beneath both.
   The empty .col-span-2 spacer is hidden.

   EXPANSION PANEL — Foundation `.medium-4` / `.medium-8` columns
   already stack at < 640px (Foundation mobile-first default).
   We add an explicit safety override + thumbnail bottom margin.

   TAB BAR — only 2 tabs, so no overflow risk. We simply tighten
   padding and reduce icon size at < 640px.
   ── ─────────────────────────────────────────────────────── ── */

/* ── Accordion header row: 2-column mobile layout ── */
@media (max-width: 767px) {
  /* Replace 12-col grid with 1fr|auto two-column layout */
  .ti-learner-view .dashboard-access-list-item .grid {
    grid-template-columns: 1fr auto;
    grid-template-rows: auto auto;
    gap: var(--space-2) var(--space-3);
    align-items: start;
  }

  /* Title + expander → row 1, col 1 */
  .ti-learner-view .dashboard-access-list-item .col-span-4 {
    grid-column: 1;
    grid-row: 1;
  }

  /* Empty spacer → hidden */
  .ti-learner-view .dashboard-access-list-item .col-span-2:not(.col-start-11) {
    display: none;
  }

  /* Course type + CME + accreditation → row 2, full width */
  .ti-learner-view .dashboard-access-list-item .col-span-3 {
    grid-column: 1 / -1;
    grid-row: 2;
  }

  /* CTA button → row 1, col 2, right-aligned */
  .ti-learner-view .dashboard-access-list-item .col-start-11 {
    grid-column: 2;
    grid-row: 1;
    text-align: right;
    align-self: start;
  }

  /* CTA button — compact size, allow label to wrap on 2 lines
     so the pill doesn't collapse into a circle */
  .ti-learner-view .dashboard-access-list-item .col-start-11 .btn--primary {
    white-space: normal;
    text-align: center;
    max-width: 110px;
    min-height: 36px;
    padding: 7px var(--space-3);
    font-size: var(--text-xs);
    line-height: 1.3;
  }
}

/* ── Tab bar + expansion panel: phones only ── */
@media (max-width: 640px) {
  /* Tab buttons — tighten horizontal padding */
  .ti-learner-view .dashboard-access-tab button {
    padding: var(--space-3) var(--space-4);
  }

  /* Tab icons — scale down slightly */
  .ti-learner-view .dashboard-access-tab--completed button::before,
  .ti-learner-view .dashboard-access-tab--certificate button::before {
    font-size: 1.125rem;
  }

  /* Expansion panel — Foundation medium-* safety override.
     Foundation's mobile-first behaviour should stack these already,
     but TI's build sometimes ships a customised breakpoint. */
  .ti-learner-view .dashboard-access-list-item-expansion .medium-4.columns,
  .ti-learner-view .dashboard-access-list-item-expansion .medium-8.columns {
    width: 100%;
    float: none;
  }

  /* Thumbnail bottom gap before stats */
  .ti-learner-view .dashboard-access-list-item-expansion .medium-4.columns {
    margin-bottom: var(--space-4);
  }
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-X. REDUCED MOTION
   ── ─────────────────────────────────────────────────────── ── */

@media (prefers-reduced-motion: reduce) {
  .ti-learner-view .dashboard-access-tab button,
  .ti-learner-view .dashboard-access-list-item,
  .ti-learner-view .dashboard-access-list-item-expander i,
  .ti-learner-view .user-engagement-progress-bar .progress.colorized .meter {
    transition: none;
  }
}

/* ── ─────────────────────────────────────────────────────── ──
   11-F-XI. FORCED COLORS (Windows High Contrast Mode)
   ── ─────────────────────────────────────────────────────── ── */

@media (forced-colors: active) {
  /* Unified card gets the outer border */
  .ti-learner-view .dashboard-access {
    border: 1px solid ButtonText;
    box-shadow: none;
  }

  /* Row dividers become solid ButtonText lines */
  .ti-learner-view .dashboard-access-list-item {
    border-top: 1px solid ButtonText;
  }

  /* Tab bar bottom separator */
  .ti-learner-view .dashboard-access-tabs {
    border-bottom: 1px solid ButtonText;
  }

  .ti-learner-view .dashboard-access-tab--active button {
    border-bottom: 3px solid Highlight;
  }

  .ti-learner-view .user-engagement-progress-bar .progress.colorized .meter {
    background: Highlight;
  }
}

/* ============================================================
   12. COURSE DETAIL PAGE
       (.course__detail__container / .course__detail__content
        / .course__detail__sidebar)

   DOM (confirmed from course-page-1 and course-page-2 snapshots):
     #main-content.home__content
       .course__detail__container          ← float clearfix wrapper
         .course__detail__content          ← left col (66.7% desktop)
           .course__detail__header         ← h1 title + subtitle
           .row > .column.small-12
             .course__detail__asset        ← hero image
           .row > tabs + tab content
         .course__detail__sidebar          ← right col (33.3% desktop)
           .row.widget--course-purchase    ← CTA buttons
           .row.widget--course-social      ← share icons

   TI vendor layout:
     .course__detail__container  max-width: 100%  ← goes edge-to-edge
     .course__detail__content    padding: 0 1rem   ← first gutter
     .course__detail__header     padding: 0 1rem   ← second gutter (!)
     Net title indentation = 2rem — misaligned with header logo at 1rem.

   Our overrides:
     1. Constrain container to 1440px (matches .header__inner).
     2. Zero the redundant .course__detail__header padding so
        the h1 title sits at 1rem from the viewport left —
        the same as the header logo — eliminating the double indent.
   ============================================================ */

/* 1 — Width constraint: match .header__inner's 1440px cap */
.ti-learner-view .course__detail__container {
  max-width: 1440px;
  padding: 2em 0 1em 0;
  box-sizing: border-box;
}

/* 2 — Remove the redundant header padding.
   .course__detail__content already provides 1rem left gutter;
   adding another 1rem inside .course__detail__header pushed the
   title 2rem from the left vs. the logo's 1rem. */
.ti-learner-view .course__detail__header {
  padding-left: 0;
  padding-right: 0;
}

/* ── Course sidebar CTA buttons ─────────────────────────────
   TI generates purchase widget buttons with vendor classes whose
   colors are driven by var(--accent-color) / var(--secondary-color)
   from TI's admin theme panel — not our AAPA design tokens. We scope
   overrides to .widget--course-purchase so other TI .btn--primary
   buttons elsewhere on the platform are not affected.

   Confirmed button class patterns (both course snapshots):
     Primary CTA  → a.btn.btn--primary.btn--alt.btn--expand
     Secondary CTA → button.btn.btn--alt.btn--expand.btn--secondary
     Buy Now CTA  → button.btn.btn--expand.btn--primary.btn--large

   Specificity: our selectors = 0,4,0 (.ti-learner-view +
   .widget--course-purchase + .btn + modifier); TI's
   .btn--alt.btn--primary = 0,2,0. We win cleanly.               */

/* Shared structural reset for both button slots */
.ti-learner-view .widget--course-purchase .btn.btn--primary,
.ti-learner-view .widget--course-purchase .btn.btn--secondary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 10px var(--space-5);
  border-radius: var(--radius-full);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-bold);
  letter-spacing: 0.02em;
  text-align: center;
  cursor: pointer;
  text-decoration: none;
  transition:
    background-color var(--transition-fast),
    border-color var(--transition-fast),
    color var(--transition-fast);
}

/* Primary fill — Start Course / Enroll / Resume / Buy Now */
.ti-learner-view .widget--course-purchase .btn.btn--primary {
  background: var(--color-primary);
  border: 2px solid var(--color-primary);
  color: var(--color-white);
}

.ti-learner-view .widget--course-purchase .btn.btn--primary:hover,
.ti-learner-view .widget--course-purchase .btn.btn--primary:focus {
  background: var(--color-off-black-deep);
  border-color: var(--color-off-black-deep);
  color: var(--color-white);
}

/* Secondary outline — Show Purchasing Options Or Gift, etc. */
.ti-learner-view .widget--course-purchase .btn.btn--secondary:not(.btn--primary) {
  display: none;
  background: transparent;
  border: 2px solid var(--color-primary);
  color: var(--color-primary);
}

.ti-learner-view .widget--course-purchase .btn.btn--secondary:not(.btn--primary):hover,
.ti-learner-view .widget--course-purchase .btn.btn--secondary:not(.btn--primary):focus {
  background: rgba(21, 31, 109, 0.07);
  border-color: var(--color-primary);
  color: var(--color-primary);
}

/* Anchor element color guard — TI's link-color rule can override
   color on <a> tags even when specificity is otherwise satisfied. */
.ti-learner-view .widget--course-purchase a.btn.btn--primary,
.ti-learner-view .widget--course-purchase a.btn.btn--primary:visited,
.ti-learner-view .widget--course-purchase a.btn.btn--primary:hover {
  color: var(--color-white);
}

/* ── Course detail tabs ─────────────────────────────────────
   Goal: pill-style tabs matching the design inspiration.

   TI vendor baseline:
     ul.tabs           → float clearfix, no border-radius
     .tab-title        → float: left
     .tab-title>a      → background: #efefef, padding: .7em 1.4em
     .tab-title.active → background: #fff

   Scoped to .course__detail__content .tabs to avoid affecting
   any other .tabs instances on the platform.                  */

/* Switch tab strip from float clearfix to flex */
.ti-learner-view .course__detail__content .tabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin-bottom: var(--space-4);
  border-bottom: 1px solid var(--color-border);
  padding-bottom: var(--space-4);
  padding-left: 0;
}

/* Undo TI float so flex can manage layout */
.ti-learner-view .course__detail__content .tabs .tab-title {
  float: none;
  border-left: none;
}

/* Inactive tab pill — white so pills are visible on the canvas page bg */
.ti-learner-view .course__detail__content .tabs .tab-title > a {
  display: inline-flex;
  align-items: center;
  padding: 6px var(--space-4);
  border-radius: var(--radius-full);
  border: 1.5px solid transparent;
  background: var(--color-white);
  color: var(--color-text-muted);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  line-height: 1.4;
  text-decoration: none;
  transition:
    background var(--transition-fast),
    border-color var(--transition-fast),
    color var(--transition-fast);
}

.ti-learner-view .course__detail__content .tabs .tab-title > a:hover {
  border-color: var(--color-primary);
  color: var(--color-text-base);
}

/* Active tab pill — white bg + navy border distinguishes from inactive */
.ti-learner-view .course__detail__content .tabs .tab-title.active > a,
.ti-learner-view .course__detail__content .tabs .tab-title.active > a:hover {
  background: var(--color-white);
  border-color: var(--color-primary);
  color: var(--color-text-base);
}

.ti-learner-view .course__detail__content .tabs-content {
  color: var(--color-text-base);
}

/* ── Course page canvas background ──────────────────────────
   Applies --color-dashboard-canvas to the entire main content
   area of course detail pages only.

   body.course-group is TI's class for course detail pages
   (confirmed from snapshot). Homepage uses body.home.index,
   so this selector is safe and does not affect other page types. */
.ti-learner-view body.course-group #main-content,
.ti-learner-view body.course-group #page-container {
  background: var(--color-dashboard-canvas);
}

/* ── Course detail sidebar card ─────────────────────────────
   White card sitting on top of the canvas background above.
   Box shadow gives it elevation so it reads as a distinct
   panel without needing a border.                             */
.ti-learner-view .course__detail__sidebar {
  background: var(--color-white);
  border-radius: var(--radius-lg);
  padding: var(--space-5);
  box-shadow: 0 2px 12px rgba(21, 31, 109, 0.08);
}

.ti-learner-view .course__detail__sidebar .widget--course-purchase .panel {
  background: transparent;
  padding: 0;
}

.ti-learner-view .course__detail__sidebar .widget--course-purchase .enroll__title,
.ti-learner-view .course__detail__sidebar .widget--learning-path-purchase .enroll__title {
  display: none;
}

.ti-learner-view .course__detail__sidebar .widget--course-social .share__container {
  margin: 0;
}

/* ============================================================
   13. CONTENT PLAYER — QUIZ / ASSESSMENT / EVALUATION
   ─────────────────────────────────────────────────────────────
   DOM root:  .learner__content > .layout-panel > .section

   Context containers — same .choices__list / .choice--multiple
   classes are reused across all three contexts:
     Quiz      → .topic__container__quiz > .topic__content--full-width
                 > .quiz__container--test--taking
     Evaluation→ .topic__container__survey > .topic__content--full-width
                 > .quiz__container--survey  (Likert: likert-table + likert-group)
     Dashboard → recommendation assessment modal (container TBD — no snapshot yet)

   Rule scope model:
     GLOBAL (G-0 – G-3, G-2)  Default, hover, and selected states apply
                               everywhere choices are used.
     QUIZ-ONLY (G-4 – G-5)    Correct (green) and incorrect (red) states are
                               scoped to .quiz__container--test--taking. These
                               states must never fire on evaluation or dashboard
                               modals where there is no right/wrong answer.
     POST-SUBMIT HOVER         Hover-freeze and cursor:default after selection
                               are also quiz-only — evaluations allow re-selection.

   Choice state model (classes on li.choice--multiple):
     Default      → .choice--multiple
     Hover        → .choice--multiple.choice--highlighted  (TI class)
                    + CSS :hover fallback pre-selection only
     Selected     → .choice--multiple.choice--selected  (blue — ALL contexts)
     Correct      → .choice--multiple.choice--selected--true.choice--selected
                    (QUIZ ONLY — green)
     Incorrect    → .choice--multiple.choice--selected (no --true) post-submit
                    (QUIZ ONLY — red; discriminated via .choice__icon inside)

   Disambiguation — two elements share the class .choice:
     li.choice--multiple.choice   ← the interactive card row  (use .choice--multiple)
     div.row.choice.flex          ← Foundation inner grid row (use .row.choice)

   Evaluation variant:
     • ul.choices__list gains .choices__list--boolean for Yes/No questions
     • .choices__list--selected is added on selection (same as quiz)
     • No .choice--selected--true is ever set → do NOT trigger incorrect state here

   Key DOM notes:
     • ul.choices__list gains .choices__list--selected when any li is selected
     • .choice__icon renders inside .choice__review ONLY after submit (quiz)
     • .choice__selected-answer.text-red-600 — Tailwind runtime inject on
       incorrect label; vendor sets color: #dc2626. We override via
       .choice--selected .choice__selected-answer scoped to quiz container.
     • .choice__response holds rationale text; renders inside correct li only
     • Submit: .btn--disabled (no selection) → .btn--primary (ready to submit)
     • Post-submit: "Next Question" .btn--primary replaces Submit
     • .btn--primary colors handled in 3b-VIII; only layout/spacing here
   ============================================================ */

/* ── 13-A. Content Player Shell ─────────────────────────────── */
/* Scoped to .learner__content — .layout-panel also appears inside
   .learner__sidebar where min-height must not apply. */
.ti-learner-view .learner__content .layout-panel {
  min-height: 60vh;
}

/* ── 13-B. Section Header ────────────────────────────────────── */

.ti-learner-view .learner-section__title__container {
  padding: var(--space-3) 0;
  margin: 0 -1rem;
}

.ti-learner-view .learner-section__title {
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  color: var(--color-primary);
  letter-spacing: -0.01em;
}

/* Bookmark button — restrained, right-aligned */
.ti-learner-view .bookmark-dropdown__button {
  border: none;
  color: var(--color-text-muted);
  transition: color var(--transition-fast);
}

.ti-learner-view .bookmark-dropdown__button:hover {
  color: var(--color-action);
}

/* ── 13-C. Progress Bar ──────────────────────────────────────── */
/* .learner-section__progress text color/size set in 3b-VI.
   We style the bar track (.section-progress-bar > div)
   and the fill span (width driven by TI inline style).
   padding:0 overrides vendor's media-query gutter (padding:0 1rem). */

.ti-learner-view .section-progress-bar {
  margin-bottom: var(--space-4);
  padding: 0;
}

.ti-learner-view .section-progress-bar > div {
  background: var(--color-border);
  border-radius: var(--radius-full);
  height: 4px;
  overflow: hidden;
}

.ti-learner-view .section-progress-bar > div > span {
  background: var(--color-action);
  border-radius: var(--radius-full);
  display: block;
  height: 100%;
  transition: width var(--transition-base);
}

/* ── 13-D. Directional Navigation ────────────────────────────── */

/* Kill vendor's clearfix ::after — it becomes a 3rd flex item and
   collapses justify-content: space-between.
   Vendor: .directional__nav:after { display:table; content:""; clear:both }
   Specificity: (0,2,1) — beats vendor (0,1,1).                 */
.ti-learner-view .directional__nav::after {
  display: none;
  content: none;
}

/* Also kill the inner >div::after clearfix so it doesn't create
   a phantom flex item inside the <a> inline-flex container.
   Vendor: .directional__nav a>div:after { display:table; ... }  */
.ti-learner-view .directional__nav a > div::after {
  display: none;
  content: none;
}

/* Flex container: prev left, next right.
   Reset vendor float:right/left on >div children — technically
   floats are ignored on flex items but belt-and-suspenders here. */
.ti-learner-view .directional__nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: var(--space-3) 0;
  margin-bottom: var(--space-5);
}

.ti-learner-view .directional__nav > div {
  float: none;
}

/* The <a> IS the secondary hollow pill button.
   Vendor sets color: #000; border: 0 on all .directional__nav a.
   Our selector at (0,2,1) beats vendor's (0,2,1) by load order.  */
.ti-learner-view .directional__nav__button__container a {
  display: inline-flex;
  padding: var(--space-1) var(--space-4);
  border: 2px solid var(--color-primary);
  border-radius: var(--radius-full);
  color: var(--color-primary);
  transition:
    border-color var(--transition-fast),
    background-color var(--transition-fast),
    color var(--transition-fast);
}

.ti-learner-view .directional__nav__button__container a:hover {
  border-color: var(--color-action);
  background-color: rgba(0, 156, 222, 0.06);
  color: var(--color-action);
}

.ti-learner-view .directional__nav__button__container a > div {
  display: flex;
}

.ti-learner-view .directional__nav__button__container--next a > div {
  flex-direction: row-reverse;
}

/* Inner icon element: flattened to a bare icon inside the pill.
   Vendor sets background-color: var(--accent-color); color: #fff;
   width/height; float:left/right with margins on --left/--right.
   Strip all of that — the pill <a> owns the visual treatment.    */
.ti-learner-view .directional__nav__button {
  width: auto;
  height: auto;
  background: none;
  background-color: transparent;
  color: inherit;
  float: none;
  overflow: visible;
}

/* Label: always visible — vendor hides at mobile, shows only on
   hover at desktop. We override both to always-on.
   Specificity (0,2,0) beats vendor (0,2,0) by load order.       */
.ti-learner-view .directional__nav .directional__nav__label {
  display: inline;
  float: none;
  visibility: visible;
}

/* ── 13-E. Quiz Container ────────────────────────────────────── */

.ti-learner-view .topic__container__quiz {
  padding: var(--space-2) 0;
}

.ti-learner-view .quiz__container--test--taking {
  background: var(--color-white);
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border);
  padding: var(--space-6) var(--space-5);
  box-shadow: var(--shadow-sm);
}

@media screen and (max-width: 640px) {
  .ti-learner-view .quiz__container--test--taking {
    padding: var(--space-4) var(--space-3);
    border-radius: var(--radius-md);
  }
}

/* ── 13-F. Question Block ────────────────────────────────────── */

.ti-learner-view .question__container {
  outline: none;
}

/* TI renders both id="question__body" and class="question__body".
   We target the class to stay within normal specificity range.  */
.ti-learner-view .question__body {
  font-family: var(--font-body);
  font-size: var(--text-md);
  font-weight: var(--weight-medium);
  color: var(--color-text-base);
  line-height: var(--leading-relaxed);
  margin-bottom: var(--space-5);
}

.ti-learner-view .question__body p {
  margin: 0 0 var(--space-2);
}

/* ── 13-G. Answer Choices ────────────────────────────────────── */

/* G-0: List container
   Foundation sets margin on ul; override to control spacing.  */
.ti-learner-view .choices__list {
  list-style: none;
  margin: 0 0 var(--space-5);
  padding: 0;
}

/* G-1: Base choice row card                                    (0,3,1)
   Selector includes .choices__list li to match vendor specificity.
   display:flex + flex-direction:row + flex-wrap:wrap makes the li
   a flex container — neutralising Foundation's float:left on inner
   columns and allowing .choice__response (width:100%) to wrap below
   the answer row.                                              */
.ti-learner-view .choices__list li.choice--multiple {
  background: var(--color-light-grey);
  border: 1.5px solid var(--color-border);
  border-radius: var(--radius-md);
  cursor: pointer;
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  align-items: center;
  margin-bottom: var(--space-2);
  position: relative;
  box-sizing: border-box;
  transition:
    background-color var(--transition-fast),
    border-color var(--transition-fast),
    box-shadow var(--transition-fast);
}


.ti-learner-view .dashboard .choices__list li.choice--multiple:not(.choice--selected):hover,
.ti-learner-view .topic__container__survey .choices__list li.choice--multiple:not(.choice--selected):hover,
.ti-learner-view .choices__list:not(.choices__list--selected) li.choice--multiple:not(.choice--highlighted):hover {
  background-color: var(--color-gray-hover);
  border-color: var(--color-dark-blue);
}

/* Post-submit freeze — quiz only. Evaluations allow re-selection so
   hover must remain active. Scoped to quiz container.            */
.ti-learner-view .quiz__container--test--taking .choices__list.choices__list--selected li.choice--multiple:not(.choice--highlighted):not(.choice--selected):hover {
  background: var(--color-light-grey);
  border-color: var(--color-border);
}

.ti-learner-view .quiz__container--test--taking .choices__list.choices__list--selected li.choice--multiple:hover {
  cursor: default;
}

/* Inner Foundation grid row — override float layout with flex.  (0,4,1)
   flex:1 overrides vendor float:left + width:75%.
   width:auto + float:none clear the Foundation column constraints. */
.ti-learner-view .choices__list li.choice--multiple .row.choice {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  flex: 1;
  width: auto;
  float: none;
  margin: 0;
  min-width: 0;
  box-sizing: border-box;
}

/* Choice letter index ("a.", "b.", "c." …)                     (0,2,0)
   Vendor sets text-transform: uppercase — we reset it here.
   Our rule loads after vendor = load-order win at same specificity. */
.ti-learner-view .choice__index {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  float: none;
  width: 1.75rem;
  height: 1.75rem;
  border-radius: var(--radius-full);
  border: 1.5px solid var(--color-off-black);
  font-family: var(--font-body);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  color: var(--color-text-base);
  line-height: 1;
  transition:
    color var(--transition-fast),
    border-color var(--transition-fast),
    background-color var(--transition-fast);
}

/* Answer text column — clear Foundation float + grow to fill row  (0,4,1) */
.ti-learner-view .choices__list li.choice--multiple .leading-loose {
  float: none;
  width: auto;
  flex: 1;
  min-width: 0;
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: var(--weight-regular);
  color: var(--color-text-base);
  line-height: var(--leading-normal);
}

/* G-2: Hover                                                    (0,3,1)
   ONLY .choice--highlighted — TI's Ember-managed class.
   NO CSS :hover rule: vendor disables :hover post-submit via
   .quiz__container--quiz .choices__list.choices__list--selected li:hover
   at (0,4,1). A CSS :hover at equal specificity loading after vendor
   would override that disable — leaving hover active post-submit.
   Vendor also uses !important on this border → must match it.   */
.ti-learner-view .choices__list li.choice--highlighted {
  border: 1.5px solid var(--color-action) !important;
  background-color: rgba(0, 156, 222, 0.06);
}

.ti-learner-view .choices__list li.choice--highlighted .choice__index {
  border: 1.5px solid var(--color-action) !important;
  color: var(--color-action);
}

/* G-3: Selected — pre-submit AND post-submit-incorrect          (0,3,1)
   The whole row fills with a soft action-blue tint; the index disc
   becomes a filled action-blue circle.                          */
.ti-learner-view .choices__list li.choice--selected {
  border: 1.5px solid var(--color-action) !important;
  background-color: rgba(0, 156, 222, 0.09);
  box-shadow: 0 0 0 1px rgba(0, 156, 222, 0.18);
}

.ti-learner-view .choices__list li.choice--selected .choice__index {
  border: 1.5px solid var(--color-action);
  background-color: var(--color-action);
  color: var(--color-white);
}

/* G-3a: Selected + hover — lock blue border on hover.          (0,3,1)
   Vendor sets .quiz__container--learner/assessment
   .choices__list li.choice--selected:hover at (0,4,1) with a dark
   border color (#333 / #ce3532 depending on TI version). This beats
   G-3's (0,3,1) by specificity. Adding !important here restores
   action-blue. G-4/G-5 quiz rules at (0,5,1) still override this
   for correct/incorrect post-submit states.                     */
.ti-learner-view .choices__list li.choice--selected:hover {
  border: 1.5px solid var(--color-action) !important;
}

/* G-3b: Assessment context — .quiz__container--assessment       (0,4,1)
   Dashboard recommendation assessment modal uses this container.
   Vendor applies border:2px solid #333 !important at (0,3,1) on
   selected items — we must beat it with higher specificity.
   Also: .items__list li vendor rule at (0,1,1) adds padding:.75em
   1rem to the li itself, breaking our flex card layout. Reset here. */
.ti-learner-view .quiz__container--assessment .choices__list li.choice--selected {
  border: 1.5px solid var(--color-action) !important;
  background-color: rgba(0, 156, 222, 0.09);
  box-shadow: 0 0 0 1px rgba(0, 156, 222, 0.18);
}

.ti-learner-view .quiz__container--assessment .choices__list li.choice--selected .choice__index {
  border-color: var(--color-action);
  background-color: var(--color-action);
  color: var(--color-white);
}

/* Vendor .items__list li { padding: .75em 1rem } at (0,1,1).
   The assessment modal ul carries both .choices__list and .items__list,
   so the vendor padding fires and adds space outside our flex card.  */
.ti-learner-view .items__list li.choice--multiple {
  padding: 0;
}

/* G-4: Correct — chosen correct answer post-submit. QUIZ ONLY.  (0,5,1)
   Scoped to .quiz__container--test--taking so evaluations and
   dashboard modals never get green treatment.
   Compound selector beats G-3's .choice--selected rules above.  */
.ti-learner-view .quiz__container--test--taking .choices__list.choices__list--selected li.choice--selected--true.choice--selected {
  border-color: var(--color-success) !important;
  background-color: rgba(64, 193, 172, 0.09);
  box-shadow: 0 0 0 1px rgba(64, 193, 172, 0.18);
}

.ti-learner-view .quiz__container--test--taking .choices__list.choices__list--selected li.choice--selected--true .choice__index {
  border-color: var(--color-success);
  background-color: var(--color-success);
  color: var(--color-white);
}

/* G-5: Post-submit feedback badge (.choice__icon + labels + icons)
   .choice__icon only renders after submit — never during selection.

   .choice__review: override vendor float:left + width:25%       (0,3,1)
   flex-shrink:0 keeps it from compressing; float:none + width:auto
   let the flex container control positioning.                   */
.ti-learner-view .choices__list li .choice__review {
  float: none;
  width: auto;
  padding: 0;
  line-height: 1;
  flex-shrink: 0;
  text-align: right;
}

.ti-learner-view .choices__list li .choice__icon {              /* (0,3,1) */
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  padding: var(--space-2) var(--space-4);
}

/* Incorrect label — .choice--selected (no --true) post-submit.
   QUIZ ONLY — scoped to .quiz__container--test--taking.          (0,5,1)
   Without this scope, evaluations and dashboard modals (which set
   .choices__list--selected + .choice--selected but never add
   .choice--selected--true) would incorrectly receive red styling.
   Overrides TI's .text-red-600 Tailwind inject at (0,1,0).      */
.ti-learner-view .quiz__container--test--taking .choices__list.choices__list--selected li.choice--selected:not(.choice--selected--true) {
  border-color: var(--color-accent) !important;
  border-width: 1.5px;
  background-color: rgba(255, 245, 244, 1);
  box-shadow: 0 0 0 1px rgba(232, 82, 66, 0.18);
}

.ti-learner-view .quiz__container--test--taking .choices__list.choices__list--selected li.choice--selected:not(.choice--selected--true) .choice__index {
  border-color: var(--color-accent);
  background-color: var(--color-accent);
  color: var(--color-white);
}

.ti-learner-view .quiz__container--test--taking .choices__list.choices__list--selected li.choice--selected:not(.choice--selected--true) .choice__selected-answer {
  font-family: var(--font-body);
  font-size: var(--text-xs);
  font-weight: var(--weight-bold);
  color: var(--color-accent);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}

.ti-learner-view .quiz__container--test--taking .choices__list.choices__list--selected li.choice--selected:not(.choice--selected--true) .choice__icon .icon-delete {
  color: var(--color-accent);
  font-size: var(--text-base);
}

/* Correct label — overrides the incorrect rule above. QUIZ ONLY. (0,6,1)
   Scoped to .quiz__container--test--taking to match G-4 and G-5.
   Compound selector (.choice--selected--true.choice--selected)
   always wins over (0,5,1) incorrect rule.                     */
.ti-learner-view .quiz__container--test--taking .choices__list li.choice--selected--true.choice--selected .choice__selected-answer {
  color: var(--color-success);
}

.ti-learner-view .quiz__container--test--taking .choices__list li.choice--selected--true .choice__icon .icon-check {
  color: var(--color-success);
  font-size: var(--text-base);
}

/* G-6: Post-submit rationale text (.choice__response)           (0,3,1)
   Renders inside .choice--selected--true only (correct answer).
   float:none + width:100% override vendor's float:left + width:25%
   and allow it to wrap below the choice row in the flex container.*/
.ti-learner-view .choices__list li .choice__response {
  float: none;
  width: 100%;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  line-height: var(--leading-relaxed);
  border-top: 1px solid rgba(64, 193, 172, 0.25);
  padding: var(--space-3) var(--space-4);
  display: block;
  box-sizing: border-box;
}

/* ── 13-H. Quiz Action Buttons ───────────────────────────────── */

/* Submit (disabled) — layout only.
   Visual properties (navy pill, white text, opacity, cursor)
   are owned globally by .ti-learner-view .btn--disabled in
   3b-VIII so they apply consistently wherever TI uses this
   class across the platform.                                    */
.ti-learner-view .quiz__container--test--taking .btn--disabled {
  display: block;
  margin-left: auto;
  margin-top: var(--space-4);
  min-width: 160px;
  text-align: center;
}

/* Submit (active) + Next Question — both use .btn--primary.
   Colors and border-radius handled in 3b-VIII; layout only here. */
.ti-learner-view .quiz__container--test--taking .btn--primary {
  display: block;
  margin-left: auto;
  margin-top: var(--space-4);
  min-width: 160px;
  text-align: center;
}

/* Separator between question block and the topic counter */
.ti-learner-view .quiz__container--test--taking .ember-view > hr {
  border: none;
  border-top: 1px solid var(--color-border);
  margin: var(--space-4) 0 0;
}

/* ── 13-I. Question Counter (.topic__index) ──────────────────── */
/* TI renders this as plain text: "6 / 50"
   Vendor: display:none on mobile; display:table on desktop;
   background:#e9e9e9 on .topic__index--too-many.
   display:block + background:transparent override both.        */

.ti-learner-view .topic__index {
  display: block;
  background: transparent;
  margin-top: 0;
  width: auto;
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text-muted);
  text-align: center;
  padding: var(--space-3) 0 var(--space-5);
  letter-spacing: 0.04em;
}

/* ============================================================
   END OF 13 — CONTENT PLAYER QUIZ / ASSESSMENT
   ============================================================ */

/* ============================================================
   14. CUSTOM COMPONENTS — FAQ ACCORDION
   Scope: .lc-faq-aapa-wrap
   ============================================================ */

/* ── Wrapper reset ── */
.ti-learner-view .lc-faq-aapa-wrap {
  margin: 0;
}

/* ── Force consistent <details> behavior in TI ── */
.ti-learner-view .lc-faq-aapa-wrap details {
  display: block;
  width: 100%;
}

/* ── Constrain and center the accordion ── */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa {
  max-width: 1020px;
  margin: 0 auto;
}

/* ── Individual FAQ rows ── */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__item {
  margin: 0;
  padding: 20px 0 20px 0;
}

/* ── Question row (summary) ── */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__q {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  position: relative;
  padding: 18px 12px 18px 22px;
  font-size: 24px;
  font-weight: 600;
  line-height: 1.35;
  color: #141b4d;
  text-transform: uppercase;
  background-color: #f9fafb;
}

/* Remove default disclosure marker */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__q::-webkit-details-marker {
  display: none;
}

/* Vertical blue accent line */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__q::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  background-color: #009cde;
  transition: background-color 180ms ease;
}

/* Hover state */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__q:hover {
  background-color: #f3f4f6;
  color: #009cde;
}

/* Subtle hover shadow (desktop only) */
@media (hover: hover) {
  .ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__q:hover {
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
  }
}

/* Accent reacts on hover */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__q:hover::before {
  background-color: #009cde;
}

/* Open state accent */
.ti-learner-view .lc-faq-aapa-wrap details[open] .lc-faq-aapa__q::before {
  background-color: #009cde;
}

/* ── Plus / Minus icon ── */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__icon {
  position: relative;
  width: 18px;
  height: 18px;
  flex: 0 0 18px;
}

/* Draw the plus */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__icon::before,
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__icon::after {
  content: "";
  position: absolute;
  background-color: #141b4d;
  transition: opacity 180ms ease;
}

/* Horizontal bar */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__icon::before {
  top: 50%;
  left: 0;
  right: 0;
  height: 2px;
  transform: translateY(-50%);
}

/* Vertical bar */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__icon::after {
  left: 50%;
  top: 0;
  bottom: 0;
  width: 2px;
  transform: translateX(-50%);
}

/* Open = minus (hide vertical bar) */
.ti-learner-view .lc-faq-aapa-wrap details[open] .lc-faq-aapa__icon::after {
  opacity: 0;
}

/* ── Answer content ── */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__a {
  padding: 36px 12px 18px 22px;
  font-size: 16px;
  line-height: 1.6;
  color: #141b4d;
}

.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__a p {
  margin: 10px 0 0;
}

.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__a p:first-child {
  margin-top: 0;
}

/* ── Rounded corners on first/last items ── */
.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__item:first-of-type .lc-faq-aapa__q {
  border-top-left-radius: 8px;
  border-top-right-radius: 8px;
}

.ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__item:last-of-type .lc-faq-aapa__q {
  border-bottom-left-radius: 8px;
  border-bottom-right-radius: 8px;
}

/* ── Section headings ── */
.ti-learner-view .lc-faq-aapa-wrap h2 {
  max-width: 1020px;
  margin: 16px auto 12px;
  font-size: 32px;
  font-weight: 700;
  color: #141b4d;
}

.ti-learner-view .lc-faq-aapa-wrap h2:first-of-type {
  margin-top: 0;
}

/* ── Mobile adjustments ── */
@media (max-width: 520px) {
  .ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__q {
    padding: 16px 8px 16px 18px;
  }

  .ti-learner-view .lc-faq-aapa-wrap .lc-faq-aapa__a {
    padding: 0 8px 16px 18px;
  }
}

/* ============================================================
   END OF 14 — FAQ ACCORDION
   ============================================================ */

/* ============================================================
   15. SNIPPETS — PRICING CARD (.lc-price-card)
   Replicates AAPA.org Fellow-tier pricing column style.
   HTML: platform/snippets/lc-price-card.html

   Checkmark icons: Unicons Line pseudo-element (uil-check-circle \e9c3)
   via font-family "unicons-line" — loaded by platform/scripts/header-script.html.
   Change the content value here to swap all card checkmarks globally.
   CTA button: uses existing .button base class (blue by default).
   ============================================================ */

/* ── Card shell ── */
.ti-learner-view .lc-price-card {
  display: flex;
  flex-direction: column;
  width: 100%;
  background-color: var(--color-white);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  overflow: hidden;
}

/* ── Header ── */
.ti-learner-view .lc-price-card__header {
  background-color: var(--color-primary);
  padding: var(--space-8) var(--space-5) var(--space-7);
  text-align: center;
}

.ti-learner-view .lc-price-card__plan {
  margin: 0 0 var(--space-3);
  font-family: var(--font-heading);
  font-size: var(--text-2xl);
  font-weight: var(--weight-bold);
  line-height: var(--leading-tight);
  color: var(--color-white);
  text-transform: uppercase;
}

.ti-learner-view .lc-price-card__price {
  margin: 0 0 var(--space-2);
  font-family: var(--font-heading);
  font-size: var(--text-xl);
  font-weight: var(--weight-bold);
  line-height: var(--leading-tight);
  color: var(--color-white);
}

.ti-learner-view .lc-price-card__per {
  font-size: var(--text-base);
  font-weight: var(--weight-regular);
}

.ti-learner-view .lc-price-card__tier {
  margin: 0;
  font-size: var(--text-base);
  font-weight: var(--weight-bold);
  color: var(--color-white);
}

/* ── Body ── */
.ti-learner-view .lc-price-card__body {
  flex: 1 1 auto;
  padding: var(--space-7) var(--space-5) var(--space-5);
}

/* ── Feature list ── */
.ti-learner-view .lc-price-card__list {
  list-style: none;
  margin: 0;
  padding: 0;
}

.ti-learner-view .lc-price-card__item {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  margin-bottom: var(--space-4);
  font-size: var(--text-base);
  font-weight: var(--weight-regular);
  line-height: var(--leading-normal);
  color: var(--color-text-base);
}

/* Checkmark icon — uil-check (\e9c3) via Unicons Line, rendered inside
   a CSS-filled circle. Swap icon: change content value. Swap circle color:
   change background-color on ::before / --featured::before.              */
.ti-learner-view .lc-price-card__item::before {
  font-family: "unicons-line";
  content: "\e9c3";
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 20px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background-color: var(--color-primary);
  color: var(--color-white);
  font-size: 0.75rem;
  margin-top: 2px;
}

/* Featured item — teal text, bold, teal circle */
.ti-learner-view .lc-price-card__item--featured {
  font-weight: var(--weight-bold);
  color: var(--color-action);
}

.ti-learner-view .lc-price-card__item--featured::before {
  background-color: var(--color-action);
}

/* ── Footer / CTA ── */
.ti-learner-view .lc-price-card__footer {
  padding: var(--space-5);
}

/* Extends .button — makes it full-width and centered inside the card. */
.ti-learner-view .lc-price-card__cta {
  width: 100%;
  justify-content: center;
}

/* ── Mobile adjustments ── */
@media (max-width: 520px) {
  .ti-learner-view .lc-price-card__header {
    padding: var(--space-5) var(--space-4) var(--space-6);
  }

  .ti-learner-view .lc-price-card__body {
    padding: var(--space-5) var(--space-4);
  }

  .ti-learner-view .lc-price-card__footer {
    padding: var(--space-4);
  }
}

/* ============================================================
   END OF 15 — PRICING CARD
   ============================================================ */

/* ============================================================
   15. CUSTOM COMPONENTS — CME CALLOUT
   Scope: .cme-callout
   ============================================================ */

/* ── Layout: seal + text side by side ── */
.ti-learner-view .cme-callout {
  display: flex;
  align-items: center;
  gap: 1rem;
  margin: 1rem 0;
}

/* ── Accreditation seal sizing ── */
.ti-learner-view .cme-callout__img {
  max-width: 96px;
  height: auto;
  flex: 0 0 auto;
}

/* ── Text block ── */
.ti-learner-view .cme-callout__text {
  margin: 0;
  line-height: 1.4;
}

/* ── Mobile: stack vertically ── */
@media (max-width: 600px) {
  .ti-learner-view .cme-callout {
    flex-direction: column;
    align-items: flex-start;
  }
}

/* ============================================================
   END OF 15 — CME CALLOUT
   ============================================================ */