:root {
  --aa-navy: #262e4d;
  --aa-navy-deep: #171d35;
  --aa-gold: #a0895e;
  --aa-gold-light: #c4ac82;
  --aa-gold-ink: #765d2b;
  --aa-cream: #f3eee7;
  --aa-paper: #fbfaf8;
  --aa-white: #fff;
  --aa-ink: #20263c;
  --aa-body: #3a3f4d;
  --aa-muted: #615d68;
  --aa-line: rgba(38, 46, 77, .14);
  --aa-line-strong: rgba(38, 46, 77, .25);
  --aa-shadow: 0 18px 48px rgba(38, 46, 77, .11);
  --aa-serif: "Cormorant Garamond", Georgia, "Times New Roman", serif;
  --aa-sans: "Jost", system-ui, -apple-system, "Segoe UI", sans-serif;
  --aa-body-font: "Source Sans 3", "Source Sans Pro", system-ui, sans-serif;
  --aa-max: 1240px;
  --aa-gutter: clamp(1.1rem, 4vw, 3rem);
  --aa-section: clamp(3.5rem, 7vw, 6.8rem);
  --aa-radius: 16px;
  --aa-ease: cubic-bezier(.25, 1, .5, 1);
  /*
   * 0.1.38 (T-0138, DEC-79): the fixed site header's height, owned in ONE place.
   *
   * The Elementor header is `position: fixed`, `z-index: 99` and 77px tall, and it does not shrink on scroll.
   * Anything that pins to the top of the viewport, or that an anchor scrolls to, has to clear it. Every other
   * element already did, each with its own hard-coded number: `.aa-booking` used 96px here and 88px on the
   * course surface, `.aa-section` used 100px. The anchor bar alone was given 0, so it pinned UNDERNEATH the
   * header and was painted, pinned and invisible. That is the defect the owner reported.
   *
   * 96px is the number `.aa-booking` already uses on this surface. It is reused deliberately so the bar lines
   * up with the sidebar beside it instead of introducing a third constant. `.aa-offering` re-points this token
   * to 88px in course.css, matching `.aa-offering .aa-booking` there.
   *
   * THE HEADER'S HEIGHT AT NARROW WIDTHS IS NOT MEASURED. The diagnosis could not resize the window, so 77px
   * is a desktop reading only. That is exactly why this is a token and not a literal: if a deploy measures a
   * different header at 768 or 390, override `--aa-head-offset` in one media query rather than editing two
   * stylesheets.
   */
  --aa-head-offset: 96px;
  /*
   * The anchor bar's own height, measured at 62px on the rendered page. A scroll target must clear the header
   * AND the bar, or a jump link lands its heading behind the bar that has just pinned above it, which would
   * trade an invisible bar for broken navigation.
   */
  --aa-jump-nav-h: 62px;
  /*
   * 0.1.39 (T-0139, DEC-85): the height of the WordPress admin bar, and 0 when there is not one.
   *
   * This is a SEPARATE token from --aa-head-offset on purpose, and the reason is a cascade fact rather than a
   * preference. --aa-head-offset is re-declared on .aa-offering (course.css), so a `body.admin-bar` override of
   * THAT token reaches the programme surface and is then shadowed on the course surface by the very rule that
   * re-points it to 88px: a custom property declared on a descendant wins for its subtree whatever class an
   * ancestor carries. One override of --aa-head-offset therefore could not reach both surfaces. Nothing
   * re-declares --aa-admin-bar-h on a descendant, so it inherits from body to every consumer that this
   * stylesheet reaches.
   *
   * 0.1.40 (T-0140) CORRECTS A CLAIM THIS COMMENT USED TO MAKE. It said the three rules below were "the only
   * place the admin bar is described", and that was FALSE theme-wide even when it was written: article.css
   * already described it with a hard-coded `.admin-bar .aa-article__toc { top: 142px }`. The comment is how a
   * later lane would miss exactly that, so it is corrected here rather than softened.
   *
   * THE ADMIN BAR IS NOW DESCRIBED IN THREE STYLESHEETS, and the duplication is deliberate and load bearing:
   *   - programme.css (here), the CANONICAL block. Reaches the programme, course, shop and commerce surfaces.
   *   - course-calendar.css, which repeats it VERBATIM.
   *   - article.css, which repeats it VERBATIM.
   * The repetition exists because of the ENQUEUE GRAPH, not by preference. functions.php registers
   * course-calendar.css (CalendarTemplate::enqueue) and article.css (ArticleTemplate::enqueue) with `array()`,
   * NO dependency on this file, and neither route is a WooCommerce surface, so Theme::isDynamicSurface() is
   * false and programme.css NEVER LOADS on an article or on /course-calendar/. A var(--aa-admin-bar-h, 0px)
   * written there without its own declaration would resolve to the 0px FALLBACK at every width, signed in and
   * signed out: it would read like a fix, satisfy a text-matching suite, and change nothing on the page.
   * commerce.css is the exception and declares nothing, because it is enqueued with array('aa-programme-theme')
   * and genuinely inherits this block.
   * The three blocks must stay IDENTICAL. tests/theme-0.1.40-checks.php extracts all three and compares them
   * value by value, so a drift is a failing suite rather than a surface that quietly stops matching the others.
   */
  --aa-admin-bar-h: 0px;
}

/*
 * 0.1.39 (T-0139, DEC-85): signed in, the admin bar pushes the fixed header DOWN by its own height, so
 * everything that clears the header has to move down by the same amount or it sits behind it.
 *
 * Measured on the live site after 0.1.38 landed: signed in the header sits at 32 to 109 at 1280 and 46 to 123
 * at 768, so the top 21px and 35px of the anchor bar were behind it, and at 1280 the Register chip read BEHIND.
 * Signed out the header is at 0 to 77 and the site was already correct, which is why 390 and 320 hit-tested
 * clean: below 600px WordPress stops fixing the admin bar, so those two widths were a direct observation of
 * signed-out geometry.
 *
 * The three heights and the two breakpoints are READ FROM WORDPRESS CORE, wp-includes/css/admin-bar.css, not
 * from memory: `#wpadminbar { height: 32px; position: fixed }`, then `@media screen and (max-width: 782px)`
 * raises it to 46px, then `@media screen and (max-width: 600px)` sets `position: absolute`, at which point the
 * bar scrolls away with the page and displaces nothing.
 *
 * WHY THE LAST RULE MUST EXIST. Below 600px the admin bar is not fixed, so adding its height would push the bar
 * and every scroll target 46px too far down and break the one case that is currently correct. The term returns
 * to 0 there, which makes this release a no-op at 390 and 320 and for every signed-out visitor at every width.
 *
 * Source order, not min-width arithmetic, resolves the overlap: at 500px both media rules match and the last
 * one wins. Equal specificity, so do not reorder them.
 */
body.admin-bar { --aa-admin-bar-h: 32px; }

@media screen and (max-width: 782px) {
  body.admin-bar { --aa-admin-bar-h: 46px; }
}

@media screen and (max-width: 600px) {
  body.admin-bar { --aa-admin-bar-h: 0px; }
}

.aa-programme-runtime {
  background: var(--aa-paper);
  color: var(--aa-body);
  font-family: var(--aa-body-font);
  font-size: 17px;
  line-height: 1.68;
  margin: 0;
  overflow-x: clip;
}

.aa-programme-runtime *,
.aa-programme-runtime *::before,
.aa-programme-runtime *::after { box-sizing: border-box; }
.aa-programme-runtime img { display: block; max-width: 100%; }
.aa-programme-runtime :where(a, button, input, select, summary):focus-visible {
  outline: 3px solid var(--aa-gold);
  outline-offset: 4px;
}
.aa-shell { width: min(100%, var(--aa-max)); margin-inline: auto; padding-inline: var(--aa-gutter); }
.aa-section { padding-block: var(--aa-section); scroll-margin-top: calc(var(--aa-head-offset, 96px) + var(--aa-admin-bar-h, 0px) + var(--aa-jump-nav-h, 62px)); }
.aa-section--white { background: var(--aa-white); border-block: 1px solid var(--aa-line); }
.aa-section--paper { background: var(--aa-paper); }
.aa-section--navy { color: #fff; background: linear-gradient(145deg, var(--aa-navy) 0%, var(--aa-navy-deep) 100%); }

.aa-programme-runtime :where(h1, h2, h3) {
  color: var(--aa-ink);
  font-family: var(--aa-serif);
  font-weight: 600;
  letter-spacing: -.012em;
  margin: 0;
}
.aa-programme-runtime h1 { font-size: clamp(2.65rem, 5.2vw, 5.25rem); line-height: .98; }
.aa-programme-runtime h2 { font-size: clamp(2rem, 3.6vw, 3.35rem); line-height: 1.04; }
.aa-programme-runtime h3 { font-size: clamp(1.28rem, 2vw, 1.65rem); line-height: 1.2; }
.aa-section--navy :where(h2, h3) { color: #fff; }
.aa-kicker {
  color: var(--aa-gold-ink);
  font-family: var(--aa-sans);
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .13em;
  margin: 0 0 .7rem;
  text-transform: uppercase;
}
.aa-section--navy .aa-kicker { color: var(--aa-gold-light); }
.aa-lede { color: var(--aa-body); font-size: clamp(1.08rem, 1.5vw, 1.25rem); line-height: 1.65; max-width: 60ch; }
.aa-lede p { margin: 1rem 0 0; }
.aa-prose { color: var(--aa-body); font-size: 1.08rem; max-width: 68ch; }
.aa-prose > *:first-child { margin-top: 0; }
.aa-prose > *:last-child { margin-bottom: 0; }
.aa-section--navy .aa-prose { color: rgba(255, 255, 255, .82); }

/*
 * 0.1.42 (T-0142, A11Y, WCAG 2.0 level A, 1.4.1 Use of Colour): links in body prose were
 * distinguishable from the text around them by COLOUR ALONE. This theme set no link rule for
 * .aa-prose at all, so a link inside stored course copy inherited the Elementor kit's global link
 * colour with no underline, no border and no weight change. Measured on the rendered, signed-in
 * page: 3 such links on the Advanced course, 1 on Level 7 Standard, not one carrying a class or an
 * inline style. It serves every course page that has a link in its overview.
 *
 * THE 0.1.31 HOUSE SOLUTION IS REUSED RATHER THAN A NEW ONE INVENTED. That release closed exactly
 * this defect on the checkout consent links: a permanent underline as the non-colour affordance,
 * with the colour moved onto the navy this theme already uses. The navy is 1.26:1 against the body
 * text, and that is the point. Colour is doing none of the work, so the underline is permanent and
 * is never a hover state.
 *
 * A navy link on a navy section would be invisible, so .aa-section--navy re-points it to the light
 * gold, 6.06:1 there, and keeps the underline.
 */
.aa-prose a {
  color: var(--aa-navy);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: .18em;
}
.aa-prose a:hover,
.aa-prose a:focus-visible { text-decoration-thickness: 2px; }
.aa-section--navy .aa-prose a { color: var(--aa-gold-light); }

/*
 * 0.2.6 (T-0206, FB4 C25, Lara: "quote from Priya needs to be more obviously a quote, italics and speech marks"). CAUSE:
 * course copy stores a quote as <blockquote><p>quote</p><p>name, role</p></blockquote> (1658's About text), and no rule
 * styled a blockquote inside .aa-prose, so Hello's reset left it as two plain paragraphs. FIX: the quote is italic in
 * the serif with curly quotation marks around it; with two or more paragraphs the last one is the attribution line,
 * upright and quieter (a <cite> or <footer> is styled the same way).
 */
.aa-prose blockquote { border-left: 3px solid var(--aa-gold); margin: 1.5rem 0; padding: .2rem 0 .2rem 1.25rem; }
.aa-prose blockquote p { color: var(--aa-ink); font-family: var(--aa-serif); font-size: 1.3rem; font-style: italic; line-height: 1.45; margin: 0 0 .5rem; }
.aa-prose blockquote > p:first-child::before { content: "\201C"; }
.aa-prose blockquote > p:only-child::after,
.aa-prose blockquote > p:nth-last-child(2)::after { content: "\201D"; }
.aa-prose blockquote > p:last-child:not(:first-child),
.aa-prose blockquote :is(cite, footer) { color: var(--aa-muted); display: block; font-family: var(--aa-sans); font-size: 1rem; font-style: normal; font-weight: 600; line-height: 1.5; margin: .75rem 0 0; }
.aa-prose blockquote > p:last-child:not(:first-child)::before,
.aa-prose blockquote > p:last-child:not(:first-child)::after { content: none; }
.aa-section--navy .aa-prose blockquote p { color: #fff; }
.aa-section--navy .aa-prose blockquote > p:last-child:not(:first-child) { color: rgba(255, 255, 255, .78); }

.aa-section__heading { max-width: 760px; margin-bottom: clamp(1.8rem, 3.5vw, 3.2rem); }
.aa-section__heading > p:last-child { color: var(--aa-muted); margin-top: .9rem; }
.aa-section__heading--center { margin-inline: auto; text-align: center; }
.aa-section__heading--split { display: grid; gap: 1.3rem; max-width: none; }
.aa-section__heading--split > p { align-self: end; max-width: 48ch; }
.aa-reading-grid { display: grid; gap: clamp(1.8rem, 5vw, 5rem); }

.aa-button {
  align-items: center;
  border: 1px solid transparent;
  border-radius: 5px;
  cursor: pointer;
  display: inline-flex;
  font-family: var(--aa-sans);
  font-size: .84rem;
  font-weight: 700;
  gap: .7rem;
  justify-content: center;
  letter-spacing: .085em;
  min-height: 50px;
  padding: .95rem 1.45rem;
  text-decoration: none;
  text-transform: uppercase;
  transition: transform .25s var(--aa-ease), box-shadow .25s var(--aa-ease), background .25s ease;
}
.aa-button--primary { background: var(--aa-navy); color: #fff; box-shadow: 0 12px 28px rgba(38, 46, 77, .24); }
.aa-button--primary:hover { background: var(--aa-gold-ink); box-shadow: 0 16px 34px rgba(118, 93, 43, .24); color: #fff; transform: translateY(-2px); }

/* Offering hero and decision card */
.aa-offering-hero { background: var(--aa-cream); padding-block: clamp(2rem, 5vw, 4.7rem); }
.aa-offering-hero__grid { display: grid; gap: clamp(1.6rem, 4vw, 3.8rem); }
.aa-offering-hero__story { min-width: 0; }
.aa-offering-hero__story h1 { max-width: 15ch; }
.aa-offering-hero__media { border-radius: var(--aa-radius); box-shadow: var(--aa-shadow); margin: clamp(1.4rem, 3vw, 2.4rem) 0 0; overflow: hidden; }
.aa-offering-hero__media img { aspect-ratio: 16 / 9; height: 100%; object-fit: cover; width: 100%; }
.aa-booking {
  align-self: start;
  background: var(--aa-white);
  border: 1px solid var(--aa-line);
  border-radius: var(--aa-radius);
  box-shadow: var(--aa-shadow);
  padding: clamp(1.25rem, 2.6vw, 2rem);
  /* The "Dates and registration" chip targets THIS element, not an .aa-section: hero.php gives the
     booking aside the id Theme::sectionId('registration', ...). It needs the same clearance. */
  scroll-margin-top: calc(var(--aa-head-offset, 96px) + var(--aa-admin-bar-h, 0px) + var(--aa-jump-nav-h, 62px));
}
.aa-booking h2 { font-size: clamp(1.6rem, 2.4vw, 2.15rem); margin-bottom: 1.15rem; }
.aa-booking__price { color: var(--aa-navy); font-family: var(--aa-serif); font-size: clamp(1.8rem, 3vw, 2.5rem); font-weight: 600; line-height: 1; margin-bottom: 1.2rem; }
.aa-note { color: var(--aa-muted); font-size: .94rem; margin: .85rem 0 0; }
.aa-registration label { color: var(--aa-navy); display: block; font-family: var(--aa-sans); font-size: .84rem; font-weight: 700; letter-spacing: .04em; margin-bottom: .4rem; }
.aa-registration select,
.aa-registration input {
  background: #fff;
  border: 1px solid var(--aa-line-strong);
  border-radius: 6px;
  color: var(--aa-ink);
  font: inherit;
  min-height: 48px;
  padding: .7rem .8rem;
  width: 100%;
}
.aa-registration__summary { background: var(--aa-paper); border-left: 3px solid var(--aa-gold); color: var(--aa-muted); font-size: .96rem; margin: .8rem 0 1rem; padding: .75rem .85rem; }
.aa-registration__fields { display: grid; gap: .75rem; margin: 1rem 0; }
.aa-registration__fields p { margin: 0; }
.aa-registration .aa-button { width: 100%; }
.aa-registration__sessions { display: grid; gap: .9rem; }
.aa-registration__session { background: var(--aa-paper); border: 1px solid var(--aa-line); border-radius: 8px; padding: 1rem; }
.aa-registration__session h3 { font-size: 1.12rem; margin: 0; }
.aa-registration__session-copy > :last-child { margin-bottom: 0; }
.aa-registration__state { color: var(--aa-gold-dark); font-size: .78rem; font-weight: 800; letter-spacing: .07em; margin: .3rem 0; text-transform: uppercase; }
.aa-registration__session-form { margin-top: 1rem; }
.aa-registration__session-form .aa-button { width: 100%; }
.aa-registration[aria-busy="true"] { cursor: progress; }
.aa-registration__status { border-radius: 6px; font-size: .94rem; margin: .8rem 0 0; padding: .7rem .8rem; }
.aa-registration__status[hidden] { display: none; }
.aa-registration__status--success { background: #edf7f0; color: #1d5b35; }
.aa-registration__status--error { background: #fff1ef; color: #8b2d22; }
.aa-registration .aa-button:disabled { cursor: wait; opacity: .7; }
.aa-booking__native :where(.variations, .single_variation_wrap, .woocommerce-variation-add-to-cart) { width: 100%; }

/* Navigation appears only when at least one valid optional component exists. */
/*
 * 0.1.38 (T-0138, DEC-79): `top` was 0, so the bar pinned into the band the fixed header occupies and was
 * never visible once pinned. It now clears the header. `position` and `z-index` are unchanged: the pin was
 * never broken, only hidden.
 */
.aa-jump-nav { background: #fff; border-block: 1px solid var(--aa-line); position: sticky; top: calc(var(--aa-head-offset, 96px) + var(--aa-admin-bar-h, 0px)); z-index: 20; }
.aa-jump-nav__inner { display: flex; gap: .4rem; overflow-x: auto; padding-block: .75rem; scrollbar-width: thin; }
.aa-jump-nav a { border: 1px solid var(--aa-line); border-radius: 999px; color: var(--aa-navy); flex: 0 0 auto; font-family: var(--aa-sans); font-size: .78rem; font-weight: 650; letter-spacing: .045em; padding: .52rem .85rem; text-decoration: none; transition: background .2s ease, border-color .2s ease, color .2s ease; }
.aa-jump-nav a:hover,
.aa-jump-nav a[aria-current="true"] { background: var(--aa-navy); border-color: var(--aa-navy); color: #fff; }

/* Suitability and learning progression */
.aa-decision-grid { display: grid; gap: 1.15rem; }
.aa-decision { background: #fff; border: 1px solid var(--aa-line); border-radius: var(--aa-radius); box-shadow: 0 12px 34px rgba(38, 46, 77, .06); overflow: hidden; }
.aa-decision h3 { background: linear-gradient(100deg, rgba(160, 137, 94, .16), transparent); border-bottom: 1px solid var(--aa-line); padding: 1.2rem 1.35rem; }
.aa-decision--alternative h3 { background: linear-gradient(100deg, rgba(38, 46, 77, .09), transparent); }
.aa-decision ul { list-style: none; margin: 0; padding: .45rem 1.35rem 1.1rem; }
.aa-decision li { border-bottom: 1px solid var(--aa-line); color: var(--aa-body); padding: .85rem 0 .85rem 1.65rem; position: relative; }
.aa-decision li:last-child { border-bottom: 0; }
.aa-decision li::before { color: var(--aa-gold-ink); content: "\2713"; font-weight: 800; left: .1rem; position: absolute; }
.aa-decision--alternative li::before { content: "\2192"; }
.aa-outcome-grid,
.aa-module-grid,
.aa-person-grid,
.aa-review-grid,
.aa-card-grid { display: grid; gap: 1.15rem; }
.aa-outcome { background: #fff; border: 1px solid var(--aa-line); border-radius: var(--aa-radius); box-shadow: 0 10px 28px rgba(38, 46, 77, .05); padding: 1.4rem; }
.aa-outcome > span,
.aa-module__number { color: var(--aa-gold-ink); display: flex; font-family: var(--aa-sans); font-size: .78rem; font-weight: 700; gap: .6rem; letter-spacing: .1em; margin-bottom: .8rem; }
.aa-outcome > span::after,
.aa-module__number::after { align-self: center; background: var(--aa-line); content: ""; height: 1px; width: 2.5rem; }
.aa-outcome p { color: var(--aa-ink); margin: 0; }
.aa-module { border-left: 2px solid var(--aa-gold-light); padding: .45rem 0 .8rem 1.25rem; }
.aa-module p { color: var(--aa-muted); margin: .5rem 0; }
.aa-module ul { margin: .7rem 0 0; padding-left: 1.15rem; }
.aa-module li { margin-top: .3rem; }

/* Timetable */
.aa-timetable { display: grid; gap: 1.2rem; }
.aa-timetable__day { background: #fff; border: 1px solid var(--aa-line); border-radius: var(--aa-radius); box-shadow: 0 10px 30px rgba(38, 46, 77, .05); padding: clamp(1.1rem, 2.5vw, 1.8rem); }
.aa-timetable__day h3 { border-bottom: 1px solid var(--aa-line); padding-bottom: .85rem; }
.aa-timetable__day ol { list-style: none; margin: .6rem 0 0; padding: 0; }
.aa-timetable__day li { align-items: start; border-bottom: 1px solid var(--aa-line); display: grid; gap: .7rem; padding: .9rem 0; }
.aa-timetable__day li:last-child { border-bottom: 0; }
.aa-timetable__time-range { align-items: center; color: var(--aa-navy); display: flex; flex-wrap: wrap; font-family: var(--aa-sans); font-size: .84rem; font-weight: 700; gap: .3rem; margin: 0; }
.aa-timetable time { background: var(--aa-paper); border: 1px solid var(--aa-line); border-radius: 5px; padding: .27rem .45rem; }
.aa-timetable strong { color: var(--aa-ink); }
.aa-timetable li p { color: var(--aa-muted); font-size: 1rem; margin: .25rem 0 0; } /* 0.2.5 (T-0205, QA C.tap): body copy 16px (was 15.36px) */
.aa-timetable li .aa-timetable__faculty { color: var(--aa-navy); font-family: var(--aa-sans); font-size: .82rem; }
.aa-timetable__faculty span { font-weight: 700; }
.aa-tag { background: rgba(160, 137, 94, .17); border-radius: 999px; color: var(--aa-gold-ink); font-family: var(--aa-sans); font-size: .75rem; font-weight: 700; letter-spacing: .06em; padding: .25rem .55rem; text-transform: uppercase; }

/* Editorial proof components */
.aa-feature-band { align-items: center; display: grid; gap: clamp(1.6rem, 5vw, 4.5rem); }
.aa-feature-band figure { border-radius: var(--aa-radius); margin: 0; overflow: hidden; }
.aa-feature-band img { aspect-ratio: 4 / 3; object-fit: cover; width: 100%; }
.aa-person { background: var(--aa-paper); border: 1px solid var(--aa-line); border-radius: var(--aa-radius); overflow: hidden; }
.aa-person img { aspect-ratio: 4 / 3; object-fit: cover; width: 100%; }
.aa-person > div { padding: 1.15rem 1.25rem 1.35rem; }
.aa-person p { color: var(--aa-muted); margin: .35rem 0 .75rem; }
.aa-person a,
.aa-offering-card__footer a { color: var(--aa-navy); font-family: var(--aa-sans); font-size: .8rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; text-underline-offset: 4px; }
.aa-person a:hover,
.aa-offering-card__footer a:hover { color: var(--aa-gold-ink); text-decoration: underline; }
.aa-trust-band { align-items: center; display: grid; gap: 2rem; }
.aa-mark-grid { align-items: center; display: flex; flex-wrap: wrap; gap: 1rem; }
.aa-mark-grid > div { background: #fff; border: 1px solid var(--aa-line); border-radius: 10px; display: grid; min-height: 88px; min-width: 132px; padding: .8rem; place-items: center; }
.aa-mark-grid img { max-height: 54px; max-width: 120px; width: auto; }
.aa-review { background: var(--aa-paper); border: 1px solid var(--aa-line); border-radius: var(--aa-radius); margin: 0; padding: 1.4rem; }
.aa-review blockquote { border: 0; margin: 0; padding: 0; }
.aa-review blockquote p { color: var(--aa-ink); font-family: var(--aa-serif); font-size: 1.25rem; line-height: 1.45; margin: 0; }
.aa-review figcaption { color: var(--aa-navy); font-family: var(--aa-sans); font-size: .84rem; font-weight: 700; margin-top: 1rem; }
.aa-review figcaption span { color: var(--aa-muted); display: block; font-weight: 400; }
.aa-faq-layout { display: grid; gap: 2rem; }
.aa-faq-list { border-top: 1px solid var(--aa-line); }
.aa-faq-list details { border-bottom: 1px solid var(--aa-line); }
.aa-faq-list summary { color: var(--aa-ink); cursor: pointer; font-family: var(--aa-serif); font-size: 1.24rem; font-weight: 600; list-style: none; padding: 1rem 2.4rem 1rem 0; position: relative; }
.aa-faq-list summary::-webkit-details-marker { display: none; }
.aa-faq-list summary::after { color: var(--aa-gold-ink); content: "+"; font-family: var(--aa-sans); font-size: 1.25rem; position: absolute; right: .2rem; top: 1rem; }
.aa-faq-list details[open] summary::after { content: "\2212"; }
.aa-faq-list details > div { max-width: 68ch; padding: 0 0 1.1rem; }

/* Archive cards */
.aa-archive__hero { background: linear-gradient(145deg, var(--aa-navy), var(--aa-navy-deep)); color: #fff; padding-block: clamp(3rem, 7vw, 6rem); }
.aa-archive__hero h1 { color: #fff; }
.aa-archive__hero .aa-kicker { color: var(--aa-gold-light); }
.aa-archive__hero .aa-lede { color: rgba(255, 255, 255, .82); margin-top: 1rem; }
/* 0.1.72 (V5 R2.2): advisor band closing every training listing. */
.aa-archive-adviser { background: var(--aa-cream); }
.aa-archive-adviser h2 { margin: 0; }
.aa-archive-adviser__actions { display: flex; flex-wrap: wrap; gap: .8rem; }
.aa-archive-adviser__ghost { border-color: var(--aa-navy); color: var(--aa-navy); }
.aa-archive-adviser__ghost:hover { background: var(--aa-navy); color: #fff; }
.aa-offering-card { background: #fff; border: 1px solid var(--aa-line); border-radius: var(--aa-radius); box-shadow: 0 10px 28px rgba(38, 46, 77, .05); display: flex; flex-direction: column; height: 100%; overflow: hidden; transition: box-shadow .25s var(--aa-ease), transform .25s var(--aa-ease); }
.aa-offering-card:hover { box-shadow: var(--aa-shadow); transform: translateY(-4px); }
.aa-offering-card__media { background: var(--aa-cream); display: block; overflow: hidden; }
.aa-offering-card__media img { aspect-ratio: 16 / 10; object-fit: cover; transition: transform .5s var(--aa-ease); width: 100%; }
.aa-offering-card:hover .aa-offering-card__media img { transform: scale(1.025); }
.aa-offering-card__body { display: flex; flex: 1; flex-direction: column; padding: 1.2rem 1.25rem 1.35rem; }
.aa-offering-card h3 a { color: inherit; text-decoration: none; }
.aa-offering-card__summary { color: var(--aa-muted); display: -webkit-box; font-size: 1rem; line-height: 1.55; margin: .7rem 0 1rem; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; }
.aa-offering-card__facts { display: grid; gap: .5rem; margin: .2rem 0 1rem; }
.aa-offering-card__facts div { border-top: 1px solid var(--aa-line); display: grid; gap: .3rem; grid-template-columns: 6rem 1fr; padding-top: .5rem; }
.aa-offering-card__facts :where(dt, dd) { margin: 0; }
.aa-offering-card__facts dt { color: var(--aa-muted); font-family: var(--aa-sans); font-size: .76rem; font-weight: 700; text-transform: uppercase; }
.aa-offering-card__facts dd { color: var(--aa-ink); font-size: .9rem; }
.aa-offering-card__footer { align-items: end; border-top: 1px solid var(--aa-line); display: flex; gap: .75rem; justify-content: space-between; margin-top: auto; padding-top: 1rem; }
.aa-offering-card__price { color: var(--aa-navy); font-family: var(--aa-serif); font-size: 1.3rem; font-weight: 600; }
.aa-empty { background: #fff; border: 1px solid var(--aa-line); border-left: 4px solid var(--aa-gold); border-radius: 0 var(--aa-radius) var(--aa-radius) 0; max-width: 700px; padding: 1.5rem; }
.aa-empty p { margin: .5rem 0 0; }
.aa-pagination { margin-top: 2.2rem; }

@media (min-width: 700px) {
  .aa-section__heading--split { grid-template-columns: minmax(0, 1.2fr) minmax(16rem, .8fr); }
  .aa-decision-grid,
  .aa-outcome-grid,
  .aa-review-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .aa-decision-grid--single { grid-template-columns: minmax(0, 1fr); max-width: 760px; margin-inline: auto; }
  .aa-module-grid,
  .aa-person-grid,
  .aa-card-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .aa-timetable__day li { grid-template-columns: 6rem minmax(0, 1fr) auto; }
}

@media (min-width: 1000px) {
  .aa-offering-hero__grid { grid-template-columns: minmax(0, 1.3fr) minmax(320px, .78fr); }
  /*
   * 0.1.39 (T-0139, DEC-85): was the literal `top: 96px`, which is the same pre-existing defect the anchor bar
   * had. It now reads the same two tokens the bar does, so the sidebar and the bar cannot disagree about where
   * the header ends. That was the whole reason 0.1.38 chose 96 for the token in the first place.
   */
  .aa-booking { position: sticky; top: calc(var(--aa-head-offset, 96px) + var(--aa-admin-bar-h, 0px)); }
  .aa-reading-grid { grid-template-columns: minmax(260px, .7fr) minmax(0, 1.3fr); }
  .aa-outcome-grid,
  .aa-module-grid,
  .aa-person-grid,
  .aa-review-grid,
  .aa-card-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .aa-feature-band,
  .aa-trust-band,
  .aa-faq-layout { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}

@media (max-width: 699px) {
  .aa-programme-runtime { font-size: 16px; }
  .aa-section { padding-block: clamp(3rem, 14vw, 4.4rem); }
  /*
   * 0.1.37 (P2-B25, F-3): the anchor bar STAYS STICKY below 700px.
   *
   * This block used to set `.aa-jump-nav { position: relative; }`, which switched the sticky bar off on every
   * phone and every narrow window. It carried no comment, so nobody could tell whether it was a deliberate
   * choice or a leftover from an earlier layout. The owner reported the bar as not sticking; measurement on the
   * rendered page at four widths, with `innerWidth` asserted in-page each time, showed this rule is exactly why:
   * the bar computed `sticky` at 1280 and 768, and `relative` at 390 and 320.
   *
   * The rule is REMOVED rather than tuned, because the anchor bar earns its place most on a narrow screen: the
   * course page is at its longest there, and the jump links are the only way to reach a section without a long
   * scroll. The bar is one row of chips that already scrolls horizontally (`.aa-jump-nav__inner` carries
   * `overflow-x: auto`), so it costs about 44px of height and never wraps.
   */
  .aa-offering-hero__media img { aspect-ratio: 4 / 3; }
  .aa-offering-card__footer { align-items: start; flex-direction: column; }
  /* 0.2.5 (T-0205, QA C.tap at 390): "View course" was a 118 x 21 tap target; now 44px tall. */
  .aa-offering-card__footer a { align-items: center; display: inline-flex; min-height: 44px; }
}

@media (max-width: 390px) {
  .aa-programme-runtime h1 { font-size: clamp(2.35rem, 13vw, 3rem); overflow-wrap: anywhere; }
  .aa-booking { padding: 1.1rem; }
  .aa-decision h3,
  .aa-decision ul { padding-inline: 1.05rem; }
  .aa-timetable__day { padding-inline: 1rem; }
}

@media (prefers-reduced-motion: reduce) {
  .aa-programme-runtime *,
  .aa-programme-runtime *::before,
  .aa-programme-runtime *::after { scroll-behavior: auto !important; transition-duration: .001ms !important; }
}
/* 0.1.75 (V5 R2.3): eligibility line under the listing hero; the progression band. */
.aa-archive__eligibility { color: rgba(255, 255, 255, .82); margin-top: .8rem; }
.aa-archive__eligibility a { color: var(--aa-gold-light); text-decoration: underline; text-underline-offset: 3px; } /* 0.2.5 (T-0205): a link in running text is underlined, not told apart by colour alone */
.aa-archive-next__list { display: grid; gap: 1rem; list-style: none; margin: 0; padding: 0; }
@media (min-width: 768px) { .aa-archive-next__list { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.aa-archive-next__list a { border: 1px solid var(--aa-line); border-radius: 8px; color: var(--aa-ink); display: grid; gap: .35rem; min-height: 44px; padding: 1.1rem 1.2rem; text-decoration: none; transition: border-color .2s ease; }
.aa-archive-next__list a:hover, .aa-archive-next__list a:focus-visible { border-color: var(--aa-navy); }
.aa-archive-next__list strong { color: var(--aa-navy); font-family: var(--aa-serif, inherit); font-size: 1.15rem; }
.aa-archive-next__list span { color: var(--aa-muted); font-size: .95rem; }

/* 0.1.92 (V6 W12): the Elementor Kit now sets a site link colour (gold ink, W4.6) with `.elementor-kit-6 a`, which
   outranked `.aa-button--primary` on link buttons and printed gold text on navy (Ask about the next date, Speak to an
   Advisor). Link buttons keep their own white text in every state. */
a.aa-button.aa-button--primary,
a.aa-button.aa-button--primary:hover,
a.aa-button.aa-button--primary:focus-visible,
a.aa-button.aa-button--primary:visited { color: #fff; }
