    *,
    *::before,
    *::after {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }

    :root {
      --aubergine: #2A1535;
      --aubergine-90: rgba(42, 21, 53, 0.9);
      --aubergine-light: #3D2550;
      --sky: #A8D0F0;
      --sky-light: #D0E8F8;
      --sky-pale: #EAF4FC;
      --white: #FFFFFF;
      --off-white: #F8F7FA;
      --grey-light: #E8E6EC;
      --grey-mid: #9994A1;
      --text-primary: #2A1535;
      --text-secondary: #5C4D6A;

      --font-display: 'Fraunces', serif;
      --font-body: 'Space Grotesk', sans-serif;

      --nav-h: 70px;

      --space-xs: 0.5rem;
      --space-sm: 1rem;
      --space-md: 2rem;
      --space-lg: 4rem;
      --space-xl: 6rem;
      --space-2xl: 8rem;
    }

    html {
      scroll-behavior: smooth;
      font-size: 16px;
      /* Keep anchor targets clear of the now-opaque sticky header */
      scroll-padding-top: var(--nav-h);
    }

    body {
      font-family: var(--font-body);
      color: var(--text-primary);
      background: var(--white);
      line-height: 1.6;
      -webkit-font-smoothing: antialiased;
    }

    /* --- Navigation --- */
    /* Sticky rather than fixed: the bar keeps its own space at the top of the
       page, so it never sits on top of the hero photo. */
    nav {
      position: sticky;
      top: 0;
      z-index: 100;
      height: var(--nav-h);
      padding: 0 2rem;
      display: flex;
      justify-content: space-between;
      align-items: center;
      background: var(--white);
      border-bottom: 1px solid var(--grey-light);
      transition: box-shadow 0.3s ease;
    }

    nav.scrolled {
      box-shadow: 0 2px 20px rgba(42, 21, 53, 0.08);
    }

    .nav-logo {
      font-family: var(--font-display);
      font-size: 1.3rem;
      font-weight: 700;
      color: var(--sky);
      text-decoration: none;
      letter-spacing: -0.02em;
      display: inline-flex;
      align-items: center;
      gap: 0.5rem;
    }

    /* images/logo-sky.png is the mark already recoloured to --sky, so this is
       a plain image — no CSS mask, which browsers treat inconsistently. */
    .nav-logo-img {
      height: 38px;
      width: auto;
      display: block;
    }

    .nav-logo .logo-ea {
      font-weight: 700;
      color: inherit;
      margin-left: 0.375rem;
    }

    .nav-links {
      display: flex;
      gap: 2rem;
      list-style: none;
    }

    .nav-links a {
      color: var(--text-secondary);
      text-decoration: none;
      font-size: 0.9rem;
      font-weight: 400;
      transition: color 0.2s;
      letter-spacing: 0.02em;
    }

    .nav-links a:hover {
      color: var(--aubergine);
    }

    .nav-cta {
      background: var(--sky);
      color: var(--aubergine) !important;
      padding: 0.5rem 1.2rem;
      border-radius: 100px;
      font-weight: 600 !important;
      transition: transform 0.2s, background 0.2s !important;
    }

    .nav-cta:hover {
      transform: translateY(-1px);
      background: var(--sky-light) !important;
    }

    /* Language switch — hairline pill, quieter than the CTA next to it */
    .nav-lang {
      padding: 0.4rem 0.9rem;
      border: 1px solid var(--grey-light);
      border-radius: 100px;
      transition: border-color 0.2s, color 0.2s;
    }

    .nav-lang:hover {
      border-color: var(--sky);
      color: var(--aubergine);
    }

    /* Mobile menu */
    .menu-toggle {
      display: none;
      background: none;
      border: none;
      cursor: pointer;
      padding: 0.5rem;
    }

    .menu-toggle span {
      display: block;
      width: 24px;
      height: 2px;
      background: var(--aubergine);
      margin: 5px 0;
      transition: transform 0.3s, opacity 0.3s;
    }

    /* --- Wave Dividers --- */
    .wave-divider {
      width: 100%;
      line-height: 0;
      overflow: hidden;
    }

    .wave-divider svg {
      display: block;
      width: 100%;
      height: 70px;
    }

    .wave-divider.wave-tall svg {
      height: 100px;
    }

    .wave-divider.wave-cap svg {
      height: 45px;
    }

    .wave-divider.wave-cap {
      margin-bottom: -1px;
    }

    .wave-divider.wave-animated {
      /* Overlap both neighbours by 1px to hide the sub-pixel seams the scaled
         SVG leaves at its top and bottom edges (would show as thin gaps). */
      margin-top: -1px;
      margin-bottom: -1px;
    }

    .wave-divider.wave-animated svg {
      width: 200%;
      animation: wave-drift 36s ease-in-out infinite alternate;
    }

    .wave-divider.wave-animated.wave-reverse svg {
      animation-direction: alternate-reverse;
    }

    .wave-divider.wave-animated.wave-slow svg {
      animation-duration: 50s;
    }

    @keyframes wave-drift {
      0% { transform: translateX(0); }
      100% { transform: translateX(-50%); }
    }

    /* --- Hero Section --- */
    .hero {
      min-height: calc(100vh - var(--nav-h));
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      text-align: center;
      background:
        /* Scrim: clear across the faces, deepening lower down so the white
           headline always has something dark behind it. */
        linear-gradient(to bottom,
          rgba(42, 21, 53, 0) 32%,
          rgba(42, 21, 53, 0.42) 78%),
        linear-gradient(rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.2)),
        url('images/hero-photo.jpg') center 40% / cover no-repeat;
      color: var(--text-primary);
      padding: var(--space-lg) var(--space-md);
      position: relative;
      overflow: hidden;
    }

    /* Rising wave base — layered SVG crests that sway (reuses wave-drift) */
    .hero-base {
      position: absolute;
      inset: 0;
      z-index: 0;
      pointer-events: none;
    }
    .hero-base .base-wave {
      position: absolute;
      left: 0;
      bottom: 0;
      width: 100%;
      line-height: 0;
      overflow: hidden;
    }
    .hero-base .base-wave svg {
      display: block;
      width: 200%;
      height: 100%;
      animation: wave-drift var(--dur, 16s) ease-in-out infinite alternate;
    }
    .hero-base .base-wave.rev svg { animation-direction: alternate-reverse; }
    /* Bottom-anchored, so trimming the heights drops the crests clear of the
       headline while the bottom of the hero stays filled. */
    .hero-base .base-wave.back  { height: 37%; }
    .hero-base .base-wave.mid   { height: 26%; }
    .hero-base .base-wave.front { height: 18%; }
    .hero-base .base-wave.foam  { height: 11%; }

    .hero-content {
      position: relative;
      z-index: 1;
      max-width: 800px;
      transform: translateY(8.5vh);
    }

    .hero-badge {
      display: inline-block;
      font-size: 0.85rem;
      font-weight: 500;
      letter-spacing: 0.15em;
      text-transform: uppercase;
      color: var(--text-secondary);
      /* Tight gap to the headline: since the block is vertically centred,
         closing this space drops the badge and lifts the headline. */
      margin-bottom: 0.55rem;
      padding: 0.4rem 1.2rem;
      border: 1px solid var(--grey-light);
      border-radius: 100px;
      background: rgba(255, 255, 255, 0.6);
      backdrop-filter: blur(3px);
    }

    .hero h1 {
      font-family: var(--font-display);
      font-size: clamp(2.4rem, 5.6vw, 4.4rem);
      font-weight: 700;
      line-height: 1.05;
      letter-spacing: -0.03em;
      text-wrap: balance;
      margin-bottom: var(--space-md);
      /* Plain white. No outline — legibility comes from the hero scrim plus
         a soft shadow: a tight one for edge definition, a wide diffuse one
         that darkens the busy photo behind the letters. */
      color: var(--white);
      text-shadow:
        0 1px 2px rgba(42, 21, 53, 0.35),
        0 6px 30px rgba(42, 21, 53, 0.55);
    }

    .hero-sub {
      font-size: 1.2rem;
      font-weight: 300;
      line-height: 1.6;
      color: var(--text-secondary);
      max-width: 550px;
      margin: 0 auto var(--space-lg);
    }

    .hero-buttons {
      display: flex;
      gap: 1rem;
      justify-content: center;
      flex-wrap: wrap;
    }

    .btn {
      display: inline-flex;
      align-items: center;
      gap: 0.5rem;
      padding: 0.85rem 2rem;
      border-radius: 100px;
      font-family: var(--font-body);
      font-size: 1rem;
      font-weight: 600;
      text-decoration: none;
      transition: transform 0.2s, box-shadow 0.2s, background 0.2s;
      cursor: pointer;
      border: none;
    }

    .btn:hover {
      transform: translateY(-2px);
    }

    .btn-primary {
      background: var(--aubergine);
      color: var(--white);
      box-shadow: 0 4px 20px rgba(42, 21, 53, 0.2);
    }

    .btn-primary:hover {
      box-shadow: 0 6px 30px rgba(42, 21, 53, 0.3);
      background: var(--aubergine-light);
    }

    .btn-secondary {
      background: var(--sky);
      color: var(--aubergine);
      box-shadow: 0 4px 20px rgba(168, 208, 240, 0.3);
    }

    .btn-secondary:hover {
      box-shadow: 0 6px 30px rgba(168, 208, 240, 0.4);
      background: var(--sky-light);
    }

    .btn-outline {
      background: transparent;
      color: var(--text-secondary);
      border: 1.5px solid var(--grey-light);
    }

    .btn-outline:hover {
      border-color: var(--sky);
      background: var(--sky-pale);
      color: var(--aubergine);
    }

    /* In the hero this button can land on the photo rather than the wave,
       where the default pale-grey-on-transparent is unreadable. */
    .hero .btn-outline {
      background: rgba(255, 255, 255, 0.75);
      backdrop-filter: blur(4px);
      border-color: rgba(255, 255, 255, 0.85);
      color: var(--aubergine);
    }

    .hero .btn-outline:hover {
      background: rgba(255, 255, 255, 0.92);
      border-color: var(--sky);
    }

    /* --- Section base --- */
    section {
      padding: var(--space-2xl) var(--space-md);
    }

    .section-inner {
      max-width: 1100px;
      margin: 0 auto;
    }

    .section-label {
      font-size: 0.8rem;
      font-weight: 600;
      letter-spacing: 0.15em;
      text-transform: uppercase;
      color: var(--aubergine-light);
      margin-bottom: var(--space-sm);
    }

    .section-heading {
      font-family: var(--font-display);
      font-size: clamp(2rem, 4vw, 3.2rem);
      font-weight: 700;
      line-height: 1.15;
      letter-spacing: -0.02em;
      margin-bottom: var(--space-sm);
    }

    .section-intro {
      font-size: 1.1rem;
      color: var(--text-secondary);
      max-width: 600px;
      line-height: 1.7;
      margin-bottom: var(--space-lg);
    }

    /* --- About Section --- */
    #about {
      background: var(--white);
    }

    .about-grid {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: var(--space-lg);
      align-items: center;
    }

    .about-text p {
      color: var(--text-secondary);
      line-height: 1.8;
      margin-bottom: var(--space-sm);
    }

    .about-visual {
      display: flex;
      justify-content: center;
      align-items: center;
    }

    .about-logo {
      width: 100%;
      max-width: 300px;
      height: auto;
      display: block;
      margin: 0 auto;
    }

    /* --- Activities Section --- */
    #activities {
      background: var(--off-white);
    }

    .activities-grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 1.5rem;
    }

    .activity-card {
      background: var(--white);
      border-radius: 16px;
      padding: 2rem;
      border: 1px solid var(--grey-light);
      transition: transform 0.2s, box-shadow 0.2s;
    }

    .activity-card:hover {
      transform: translateY(-4px);
      border-color: var(--sky);
    }

    /* --- Ripple hover effect: rings emanate outward from the card --- */
    .activity-card,
    .event-card-full {
      position: relative;
    }
    .activity-card::before,
    .activity-card::after,
    .event-card-full::before,
    .event-card-full::after {
      content: "";
      position: absolute;
      inset: 0;
      border-radius: inherit;
      pointer-events: none;
    }
    .activity-card:hover::before,
    .activity-card:hover::after,
    .event-card-full:hover::before,
    .event-card-full:hover::after {
      animation: card-ripple 1.7s ease-out infinite;
    }
    .activity-card:hover::after,
    .event-card-full:hover::after {
      animation-delay: 0.85s;
    }
    @keyframes card-ripple {
      0%   { box-shadow: 0 0 0 0 rgba(168, 208, 240, 0.5); }
      100% { box-shadow: 0 0 0 16px rgba(168, 208, 240, 0); }
    }
    @media (prefers-reduced-motion: reduce) {
      .activity-card:hover::before, .activity-card:hover::after,
      .event-card-full:hover::before, .event-card-full:hover::after { animation: none; }
      /* The drifting waves are large, continuously animating layers; hold them
         still for anyone who has asked for less motion. */
      .wave-divider.wave-animated svg,
      .hero-base .base-wave svg { animation: none; }
    }

    .activity-icon {
      width: 48px;
      height: 48px;
      background: var(--sky-pale);
      border-radius: 12px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 1.4rem;
      margin-bottom: 1.2rem;
    }

    .activity-icon svg {
      width: 26px;
      height: 26px;
      stroke: var(--aubergine);
      fill: none;
      stroke-width: 1.75;
      stroke-linecap: round;
      stroke-linejoin: round;
    }

    .activity-card h3 {
      font-family: var(--font-display);
      font-size: 1.25rem;
      font-weight: 600;
      margin-bottom: 0.6rem;
    }

    .activity-card p {
      font-size: 0.95rem;
      color: var(--text-secondary);
      line-height: 1.6;
    }

    /* --- Team Section --- */
    #team {
      background: var(--white);
    }

    .team-grid {
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      gap: 2rem;
    }

    .team-card {
      background: var(--off-white);
      border-radius: 16px;
      overflow: hidden;
      transition: transform 0.2s, box-shadow 0.2s;
      display: flex;
      flex-direction: column;
    }

    .team-card:hover {
      transform: translateY(-4px);
      box-shadow: 0 8px 30px rgba(168, 208, 240, 0.2);
    }

    .team-photo {
      width: 100%;
      aspect-ratio: 5/6;
      overflow: hidden;
    }

    .team-photo img {
      width: 100%;
      height: 100%;
      object-fit: cover;
    }

    .team-info {
      padding: 1.2rem 1.5rem 1.5rem;
      display: flex;
      flex-direction: column;
      flex: 1;
    }

    .team-info h3 {
      font-family: var(--font-display);
      font-size: 1.15rem;
      font-weight: 600;
      margin-bottom: 0.15rem;
    }

    .team-info .role {
      font-size: 0.75rem;
      font-weight: 600;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: var(--aubergine-light);
      display: block;
      margin-bottom: 0.7rem;
    }

    .team-info .bio {
      font-size: 0.88rem;
      color: var(--text-secondary);
      line-height: 1.6;
      margin-bottom: 0.6rem;
      flex: 1;
    }

    .team-info .contact {
      font-size: 0.8rem;
      color: var(--grey-mid);
      line-height: 1.6;
      margin-top: auto;
      padding-top: 0.8rem;
      border-top: 1px solid var(--grey-light);
    }

    .team-info .contact a {
      color: var(--aubergine-light);
      text-decoration: none;
    }

    .team-info .contact a:hover {
      text-decoration: underline;
    }

    .team-grid-bottom {
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      gap: 2rem;
      max-width: 740px;
      margin: 2rem auto 0;
    }

    /* --- Contact / Join Section --- */
    #join {
      background: var(--sky-pale);
      text-align: center;
    }

    #join .section-inner {
      max-width: 700px;
    }

    #join .section-heading {
      margin-bottom: var(--space-sm);
    }

    #join .section-intro {
      margin-left: auto;
      margin-right: auto;
    }

    .join-links {
      display: flex;
      justify-content: center;
      gap: 1.5rem;
      flex-wrap: wrap;
      margin-top: var(--space-md);
    }

    .join-link {
      display: flex;
      align-items: center;
      gap: 0.6rem;
      padding: 0.8rem 1.5rem;
      background: var(--off-white);
      border-radius: 12px;
      text-decoration: none;
      color: var(--text-primary);
      font-weight: 500;
      font-size: 0.95rem;
      transition: background 0.2s, transform 0.2s;
    }

    .join-link:hover {
      background: var(--sky-pale);
      transform: translateY(-2px);
    }

    .join-link .link-icon {
      font-size: 1.2rem;
    }

    .join-link .link-icon svg {
      width: 20px;
      height: 20px;
      stroke: currentColor;
      fill: none;
      stroke-width: 1.8;
      stroke-linecap: round;
      stroke-linejoin: round;
      display: block;
    }

    /* --- Upcoming Events Cards --- */
    .events-list {
      display: flex;
      flex-direction: column;
      gap: 1rem;
      margin-top: var(--space-md);
    }

    .event-card-full {
      background: var(--white);
      border-radius: 12px;
      border: 1px solid var(--grey-light);
      border-left: 4px solid var(--sky);
      padding: 1.5rem 1.5rem 1.5rem 1.8rem;
      transition: transform 0.2s, box-shadow 0.2s;
    }

    .event-card-full:hover {
      transform: translateY(-2px);
    }

    .event-card-full .event-header {
      display: flex;
      justify-content: space-between;
      align-items: flex-start;
      gap: 1rem;
      margin-bottom: 0.6rem;
    }

    .event-card-full .event-title {
      font-family: var(--font-display);
      font-size: 1.2rem;
      font-weight: 600;
      color: var(--aubergine);
      line-height: 1.3;
    }

    .event-card-full .event-meta {
      display: flex;
      flex-wrap: wrap;
      gap: 0.5rem;
      margin-bottom: 0.8rem;
    }

    .event-meta-tag {
      font-size: 0.78rem;
      font-weight: 600;
      color: var(--text-secondary);
      background: var(--off-white);
      padding: 0.3rem 0.7rem;
      border-radius: 6px;
      white-space: nowrap;
    }

    .event-card-full .event-desc {
      font-size: 0.9rem;
      color: var(--text-secondary);
      line-height: 1.65;
    }

    .event-card-full .event-signup {
      display: inline-block;
      margin-top: 0.8rem;
      font-size: 0.82rem;
      font-weight: 600;
      text-transform: uppercase;
      letter-spacing: 0.05em;
      color: var(--white);
      background: var(--aubergine);
      padding: 0.45rem 1rem;
      border-radius: 6px;
      text-decoration: none;
      transition: background 0.2s;
    }

    .event-card-full .event-signup:hover {
      background: var(--aubergine-light);
    }

    /* --- Intro Program callout --- */
    .intro-cta {
      margin-top: var(--space-xl);
      background: var(--sky-pale);
      border: 1px solid var(--sky-light);
      border-radius: 16px;
      padding: var(--space-lg) var(--space-md);
      text-align: center;
    }
    .intro-cta h3 {
      font-family: var(--font-display);
      font-size: clamp(1.6rem, 3vw, 2.2rem);
      font-weight: 600;
      color: var(--aubergine);
      margin-bottom: 0.8rem;
    }
    .intro-cta p {
      max-width: 60ch;
      margin: 0 auto 1.6rem;
      color: var(--text-secondary);
      line-height: 1.65;
    }
    .intro-cta .intro-cta-q {
      font-weight: 600;
      color: var(--aubergine);
    }

    /* --- Paths Section --- */
    #paths {
      background: var(--off-white);
    }

    .paths-grid {
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      gap: 1.5rem;
      justify-items: center;
    }

    .paths-grid .path-card:last-child:nth-child(odd) {
      grid-column: 1 / -1;
      max-width: calc(50% - 0.75rem);
    }

    .path-card {
      background: var(--white);
      border-radius: 16px;
      padding: 2rem;
      border: 1px solid var(--grey-light);
      display: flex;
      gap: 1.5rem;
      align-items: flex-start;
      transition: transform 0.2s, box-shadow 0.2s;
    }

    .path-card:hover {
      transform: translateY(-4px);
      box-shadow: 0 8px 30px rgba(168, 208, 240, 0.15);
    }

    .path-avatar {
      width: 128px;
      height: 128px;
      border-radius: 50%;
      background: var(--sky-pale);
      flex-shrink: 0;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 1.5rem;
      color: var(--aubergine-light);
      overflow: hidden;
    }

    .path-avatar img {
      width: 100%;
      height: 100%;
      object-fit: cover;
    }

    .path-content h3 {
      font-family: var(--font-display);
      font-size: 1.1rem;
      font-weight: 600;
      margin-bottom: 0.15rem;
    }

    .path-content .path-now {
      font-size: 0.8rem;
      font-weight: 600;
      color: var(--aubergine-light);
      margin-bottom: 0.5rem;
      display: block;
    }

    .path-content .path-story {
      font-size: 0.88rem;
      color: var(--text-secondary);
      line-height: 1.6;
    }

    /* --- Footer --- */
    footer {
      background: var(--white);
      color: var(--text-secondary);
      padding: var(--space-md) var(--space-md);
      text-align: center;
      font-size: 0.85rem;
    }

    footer a {
      color: var(--aubergine);
      text-decoration: none;
      font-weight: 500;
    }

    /* --- Placeholder indicator --- */
    .placeholder {
      color: var(--grey-mid);
      font-style: italic;
    }

    .placeholder::before {
      content: '[';
    }

    .placeholder::after {
      content: ']';
    }

    /* --- Animations --- */
    .fade-in {
      opacity: 0;
      transform: translateY(24px);
      transition: opacity 0.6s ease, transform 0.6s ease;
    }

    .fade-in.visible {
      opacity: 1;
      transform: translateY(0);
    }

    /* --- Responsive --- */
    @media (max-width: 900px) {
      .about-grid {
        grid-template-columns: 1fr;
        gap: var(--space-md);
      }

      .about-visual {
        order: -1;
      }

      .about-logo {
        max-width: 220px;
      }

      .activities-grid {
        grid-template-columns: 1fr 1fr;
      }

      .team-grid {
        grid-template-columns: repeat(2, 1fr);
      }

      .team-grid-bottom {
        grid-template-columns: repeat(2, 1fr);
        max-width: 100%;
      }

      .paths-grid {
        grid-template-columns: 1fr;
      }

      /* stop the lone last card from being pinned to half-width when stacked */
      .paths-grid .path-card:last-child:nth-child(odd) {
        grid-column: auto;
        max-width: none;
      }
    }

    @media (max-width: 600px) {
      section {
        padding: var(--space-xl) var(--space-sm);
      }

      nav {
        padding: 0 1rem;
      }

      .nav-links {
        display: none;
        position: absolute;
        top: 100%;
        left: 0;
        right: 0;
        background: var(--white);
        flex-direction: column;
        padding: 1rem 2rem 2rem;
        gap: 1rem;
        box-shadow: 0 8px 30px rgba(42, 21, 53, 0.08);
      }

      .nav-links.open {
        display: flex;
      }

      .menu-toggle {
        display: block;
      }

      .activities-grid {
        grid-template-columns: 1fr;
      }

      .team-grid {
        grid-template-columns: 1fr;
        gap: 1.5rem;
        max-width: 350px;
        margin: 0 auto;
      }

      .team-grid-bottom {
        grid-template-columns: 1fr;
        max-width: 350px;
      }

      .path-card {
        flex-direction: column;
        gap: 1rem;
      }

      .hero-buttons {
        flex-direction: column;
        align-items: center;
      }

      .join-links {
        flex-direction: column;
        align-items: center;
      }
    }
