/*
 * Royal College Timeline v2.1.3
 * Premium scroll-animated vertical timeline
 * Matches screenshot layout:
 *   LEFT  — nav label + short description
 *   CENTER — animated line + dot
 *   RIGHT  — card (date label · heading · body · image)
 * ─────────────────────────────────────────────────────
 */

/* ── Google Font (Inter) ─────────────────────────────────────────────── */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

/* ── Design Tokens ───────────────────────────────────────────────────── */
.rct-section {
  /* Palette */
  /* page background (light blue-lavender) */
  --rct-accent: #005f33;
  /* dot, date label, line fill */
  --rct-accent-glow: rgb(37 235 135 / 15%);
  --rct-line-track: #c7d2fe;
  /* unfilled track */
  --rct-card-bg: #ffffff;
  --rct-card-border: #e2e8f0;
  --rct-card-radius: 18px;
  --rct-card-shadow: 0 2px 16px rgba(37, 99, 235, 0.07);
  --rct-card-shadow-h: 0 8px 32px rgba(37, 99, 235, 0.13);

  /* Typography */
  --rct-font: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --rct-text-primary: #0f172a;
  --rct-text-secondary: #475569;
  --rct-text-nav: #1e293b;
  --rct-text-nav-sub: #64748b;
  --rct-text-date: #005f33;

  /* Dot */
  --rct-dot-size: 16px;
  --rct-dot-ring: 3px;

  /* Layout */
  --rct-left-col: 180px;
  --rct-col-gap: 6rem;

  /* Animation */
  --rct-ease: cubic-bezier(0.4, 0, 0.2, 1);
  --rct-dur: 0.55s;

  /* Apply background to wrapper */
  background: var(--rct-bg);
  position: relative;
  max-width: 900px;
  margin: 0 auto;
  padding: 4.5rem 2rem 1.5rem;
  font-family: var(--rct-font);
  color: var(--rct-text-primary);
  box-sizing: border-box;
}

/* ── Vertical Line Track ─────────────────────────────────────────────── */
/*
 * The track is absolutely positioned and sits between the left nav column
 * and the right card column. It aligns with the centre of the dot.
 * Offset = left padding (2rem) + left-col width (180px) + col-gap (2rem) / 2... actually
 * we centre it on the dot in the nav column. The nav column is 180px, the dot is
 * right-edge aligned inside it plus the gap.  We position relative to the section.
 */
.rct-line-track {
  position: absolute;
  left: calc(2rem + var(--rct-left-col) + var(--rct-col-gap) * 0.5 - 1px);
  top: 4.5rem;
  bottom: 5.5rem;
  width: 2px;
  background: var(--rct-line-track);
  border-radius: 2px;
  overflow: hidden;
  pointer-events: none;
  z-index: 0;
}

.rct-line-fill {
  position: absolute;
  inset: 0 0 auto 0;
  height: 0%;
  background: linear-gradient(to bottom, var(--rct-accent), #005f33);
  border-radius: 2px;
  transition: height var(--rct-dur) var(--rct-ease);
  will-change: height;
}

/* ── List ────────────────────────────────────────────────────────────── */
.rct-list {
  list-style: none;
  margin: 0;
  padding: 0;
  position: relative;
  z-index: 1;
}

/* ── Individual Item ─────────────────────────────────────────────────── */
.rct-item {
  display: grid;
  grid-template-columns: var(--rct-left-col) 1fr;
  column-gap: var(--rct-col-gap);
  align-items: start;
  margin-bottom: 3rem;

  /* entrance animation state */
  opacity: 0;
  transform: translateY(18px);
  transition:
    opacity var(--rct-dur) var(--rct-ease),
    transform var(--rct-dur) var(--rct-ease);
}

.rct-item:last-child {
  margin-bottom: 0;
}

.rct-item.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* ── Left Nav Column ─────────────────────────────────────────────────── */
.rct-nav {
  position: relative;
  padding-right: 1rem;
  text-align: right;

  /* stagger sub-element */
  opacity: 0;
  transform: translateX(-8px);
  transition:
    opacity 0.45s var(--rct-ease) 0.08s,
    transform 0.45s var(--rct-ease) 0.08s;
}

.rct-item.is-visible .rct-nav {
  opacity: 1;
  transform: translateX(0);
}

/* The dot sits on the right edge of the nav column, centred on the line */
.rct-nav__dot {
  position: absolute;
  right: calc(-1 * var(--rct-col-gap) * 0.5 - var(--rct-dot-size) * 0.5);
  top: 0.3rem;
  width: var(--rct-dot-size);
  height: var(--rct-dot-size);
  border-radius: 50%;
  background: var(--rct-line-track);
  border: var(--rct-dot-ring) solid var(--rct-bg);
  box-shadow: 0 0 0 2px var(--rct-line-track);
  z-index: 2;
  transition:
    background var(--rct-dur) var(--rct-ease),
    box-shadow var(--rct-dur) var(--rct-ease),
    transform 0.35s var(--rct-ease);
}

/* Pulse ring */
.rct-nav__pulse {
  position: absolute;
  inset: -7px;
  border-radius: 50%;
  background: var(--rct-accent-glow);
  opacity: 0;
  transform: scale(0.4);
  transition:
    opacity 0.4s var(--rct-ease),
    transform 0.4s var(--rct-ease);
  pointer-events: none;
}

/* Revealed dot */
.rct-item.is-visible .rct-nav__dot {
  background: var(--rct-accent);
  box-shadow: 0 0 0 2px var(--rct-accent);
  transform: scale(1.1);
}

/* Current item pulse */
.rct-item.is-current .rct-nav__dot {
  transform: scale(1.3);
}

.rct-item.is-current .rct-nav__pulse {
  opacity: 1;
  transform: scale(1);
}

/* Nav label typography */
.rct-nav__label {
  display: block;
  font-size: 25px;
  font-weight: 700;
  line-height: 1.3;
  color: var(--rct-text-nav);
  margin-bottom: 0.3rem;
}

.rct-nav__sublabel {
  display: block;
  font-size: 15px;
  font-weight: 400;
  line-height: 1.5;
  color: var(--rct-text-nav-sub);
}

/* ── Right Card ──────────────────────────────────────────────────────── */
.rct-card {
  background: var(--rct-card-bg);
  border: 1px solid var(--rct-card-border);
  border-radius: var(--rct-card-radius);
  padding: 1.75rem 2rem;
  box-shadow: var(--rct-card-shadow);
  overflow: hidden;

  /* stagger entrance */
  opacity: 0;
  transform: translateX(16px);
  transition:
    opacity 0.5s var(--rct-ease) 0.15s,
    transform 0.5s var(--rct-ease) 0.15s,
    box-shadow 0.3s var(--rct-ease),
    border-color 0.3s var(--rct-ease);
}

.rct-item.is-visible .rct-card {
  opacity: 1;
  transform: translateX(0);
}

.rct-item.is-current .rct-card {
  border-color: rgb(37 235 184 / 25%);
  box-shadow: var(--rct-card-shadow-h);
}

/* Date label */
.rct-card__date {
  display: block;
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--rct-text-date);
  margin-bottom: 0.6rem;
}

/* Heading */
.rct-card__heading {
  margin: 0 0 0.85rem;
  font-size: 1.25rem;
  font-weight: 800;
  line-height: 1.3;
  color: var(--rct-text-primary);
  letter-spacing: -0.025em;
}

/* Body */
.rct-card__body {
  margin: 0;
  font-size: 0.9375rem;
  line-height: 1.7;
  color: var(--rct-text-secondary);
}

/* Image */
.rct-card__figure {
  margin: 1.5rem 0 0;
  border-radius: 10px;
  overflow: hidden;
  padding-top: 18px;
  line-height: 0;
}

.rct-card__figure img {
  display: block;
  width: 100%;
  height: auto;
  object-fit: cover;
  border-radius: 10px;
  transition: transform 0.5s var(--rct-ease);
}

.rct-card:hover .rct-card__figure img {
  transform: scale(1.02);
}

/* ── Tablet ───────────────────────────────────────────────────────────── */
@media (max-width: 720px) {
  .rct-section {
    --rct-left-col: 110px;
    --rct-col-gap: 1.5rem;
    padding: 3rem 1.5rem 4rem;
  }

  .rct-line-track {
    left: calc(1.5rem + var(--rct-left-col) + var(--rct-col-gap) * 0.5 - 1px);
    top: 3rem;
    bottom: 4rem;
  }

  .rct-card {
    padding: 1.5rem 1.5rem;
  }

  .rct-card__heading {
    font-size: 1.125rem;
  }

  .rct-item {
    margin-bottom: 2.25rem;
  }
}

/* ── Mobile ───────────────────────────────────────────────────────────── */
@media (max-width: 520px) {
  .rct-section {
    --rct-left-col: 76px;
    --rct-col-gap: 1.25rem;
    --rct-dot-size: 13px;
    --rct-dot-ring: 2px;
    padding: 2.25rem 1rem 3rem;
  }

  .rct-line-track {
    left: calc(1rem + var(--rct-left-col) + var(--rct-col-gap) * 0.5 - 1px);
    top: 2.25rem;
    bottom: 3rem;
  }

  .rct-card {
    padding: 1.125rem 1.25rem;
  }

  .rct-nav__label {
    font-size: 25px;
  }

  .rct-nav__sublabel {
    font-size: 0.75rem;
  }

  .rct-card__heading {
    font-size: 1rem;
  }

  .rct-card__body {
    font-size: 0.875rem;
  }

  .rct-item {
    margin-bottom: 2rem;
  }
}

/*
 * Mobile-first stacked layout (≤768px) — does not affect desktop (>768px).
 * One column: date/labels on top (left-aligned, full width), card below (full width).
 * Vertical line + dots align along the left edge for a clear timeline.
 */
@media (max-width: 768px) {
  .rct-section {
    max-width: 100%;
    padding: 1.5rem 0.875rem 2rem;
    --rct-dot-size: 12px;
    --rct-dot-ring: 2px;
    --rct-col-gap: 0;
    /* Space for dot + gap; cards use same indent so they don’t cover the line */
    --rct-mobile-indent: calc(var(--rct-dot-size) + 0.75rem);
  }

  /* Line in the left “rail”, centred through dots (dots sit at nav’s left edge) */
  .rct-line-track {
    left: calc(0.875rem + var(--rct-dot-size) * 0.5 - 1px);
    top: 1.5rem;
    bottom: 2rem;
    width: 2px;
  }

  .rct-list {
    padding-left: 0;
  }

  .rct-item {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0.45rem;
    margin-bottom: 1.35rem;
    column-gap: 0;
  }

  .rct-nav {
    width: 100%;
    max-width: 100%;
    text-align: left;
    padding-right: 0;
    padding-left: var(--rct-mobile-indent);
    box-sizing: border-box;
  }

  .rct-nav__dot {
    left: 0;
    right: auto;
    top: 0.3rem;
  }

  .rct-nav__label {
    font-size: clamp(0.95rem, 3.4vw, 1.15rem);
    line-height: 1.2;
    margin-bottom: 0.2rem;
    word-wrap: break-word;
    overflow-wrap: break-word;
    hyphens: auto;
  }

  .rct-nav__sublabel {
    font-size: 0.78rem;
    line-height: 1.35;
    max-width: 100%;
    word-wrap: break-word;
    overflow-wrap: break-word;
  }

  /* Indented so the card clears the vertical line (same inset as nav text) */
  .rct-card {
    width: calc(100% - var(--rct-mobile-indent));
    max-width: calc(100% - var(--rct-mobile-indent));
    min-width: 0;
    margin-left: var(--rct-mobile-indent);
    margin-right: 0;
    padding: 0.85rem 0.75rem;
    box-sizing: border-box;
    border-radius: 12px;
  }

  .rct-card__date {
    font-size: 0.65rem;
    margin-bottom: 0.35rem;
  }

  /* 20px on mobile — override Elementor global (e.g. --e-global-typography-* 30px) */
  .rct-section .rct-card .rct-card__heading {
    font-size: 20px !important;
    line-height: 1.25;
    margin: 0 0 0.45rem;
    word-wrap: break-word;
    overflow-wrap: break-word;
  }

  .rct-card__body {
    font-size: 0.8125rem;
    line-height: 1.55;
  }

  .rct-card__figure {
    margin-top: 0;
    padding-top: 0;
  }

  .rct-card__figure img {
    margin-top: 15px;
  }
}

/* ── Reduced motion ───────────────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {

  .rct-item,
  .rct-nav,
  .rct-card,
  .rct-nav__dot,
  .rct-nav__pulse,
  .rct-line-fill,
  .rct-card__figure img {
    transition: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}