/* =====================================================================
   Awards & Recognitions — page styles (after css/base.css).
   Sections: banner entrance · intro + stats · spotlight (ScrollMagic,
   sticky stage) · archive timeline (ScrollMagic, filling spine).
   Motion is driven by js/awards-recognitions.js; every rule here is a
   resting state that reads fine without JS / with reduced motion.
   The look follows the Home page: champagne grounds, a fine orange grid
   with travelling lights, Playfair titles with orange italics, numbered
   lists and the ringed award stage.
   ===================================================================== */

/* ---------- banner: lines rise from a mask, the photo settles ---------- */
.hero__ln {
  display: block;
  overflow: hidden;
  /* room for descenders and the italic overhang */
  padding: 0 0.12em 0.1em 0;
  margin-bottom: -0.1em;
}

.hero__ln > span {
  display: block;
}

@media (prefers-reduced-motion: no-preference) {
  .hero__img {
    animation: awSettle 2.6s var(--ease) both;
  }

  .hero .crumbs {
    animation: awRise 0.9s var(--ease) 0.15s both;
  }

  .hero__ln > span {
    animation: awLine 1.2s var(--ease) 0.3s both;
  }

  .hero__ln + .hero__ln > span {
    animation-delay: 0.42s;
  }

  .hero__sub {
    animation: awRise 1s var(--ease) 0.75s both;
  }
}

@keyframes awSettle {
  from {
    scale: 1.12;
  }
  to {
    scale: 1;
  }
}

@keyframes awRise {
  from {
    opacity: 0;
    transform: translate3d(0, 24px, 0);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

@keyframes awLine {
  from {
    transform: translate3d(0, 110%, 0);
  }
  to {
    transform: none;
  }
}

/* ---------- intro + stats ---------- */
.awintro {
  --mark: min(calc((100vw - 2 * var(--gutter)) / 4.2), 280px);
  isolation: isolate;
  overflow: hidden;
  padding-bottom: clamp(90px, 12vw, 150px);
  background: #FFFFFF;
}

/* a huge, faint "AWARDS" sitting on the section's bottom edge */
.awintro__mark {
  position: absolute;
  z-index: -1;
  left: 50%;
  bottom: -0.294em;
  font-family: var(--font-sans);
  font-weight: 800;
  font-size: var(--mark);
  line-height: 1;
  text-transform: uppercase;
  white-space: nowrap;
  color: rgba(36, 26, 18, 0.045);
  pointer-events: none;
  user-select: none;
  transform: translateX(-50%);
}

.awintro__grid {
  display: grid;
  grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
  gap: 24px clamp(32px, 6vw, 96px);
  align-items: end;
}

.awintro__grid .lead {
  max-width: 48ch;
}

.awintro__stats {
  margin-top: clamp(40px, 5vw, 64px);
}

.awintro__stats dd {
  font-variant-numeric: tabular-nums;
}

/* ---------- spotlight ---------- */
.awspot {
  --cell: 64px;
  position: relative;
  background:
    radial-gradient(ellipse 60% 70% at 92% 0%, rgba(214, 181, 128, 0.26), transparent 70%),
    radial-gradient(ellipse 55% 70% at 0% 100%, rgba(214, 181, 128, 0.18), transparent 70%),
    linear-gradient(180deg, #F4ECDF 0%, #FBF8F2 50%, #F6EFE4 100%);
}

/* scroll mode (set by JS on wide screens): the section is tall and the
   stage stays put while the page scrolls through the highlights */
.awspot.is-scrub {
  height: calc(100vh + var(--n) * 70vh);
  height: calc(100svh + var(--n) * 70svh);
}

.awspot__sticky {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  padding: clamp(72px, 9vw, 120px) 0;
}

.awspot.is-scrub .awspot__sticky {
  position: sticky;
  top: 0;
  display: flex;
  align-items: center;
  height: 100vh;
  height: 100svh;
  padding: var(--nav-h) 0 24px;
}

/* the Home "values" grid: fine orange lines with lights running along them */
.awspot__field {
  position: absolute;
  z-index: -1;
  inset: 0;
  overflow: hidden;
  background-image:
    linear-gradient(rgba(241, 89, 34, 0.09) 1px, transparent 1px),
    linear-gradient(90deg, rgba(241, 89, 34, 0.09) 1px, transparent 1px);
  background-size: var(--cell) var(--cell);
  -webkit-mask-image: radial-gradient(ellipse 75% 70% at 50% 45%, #000 25%, transparent 80%);
  mask-image: radial-gradient(ellipse 75% 70% at 50% 45%, #000 25%, transparent 80%);
  pointer-events: none;
}

.awspot__pulse {
  position: absolute;
  box-shadow: 0 0 8px 1px rgba(241, 89, 34, 0.35);
  animation: var(--dur, 12s) linear var(--delay, 0s) infinite;
  will-change: transform;
}

.awspot__pulse--h {
  top: calc(var(--row) * var(--cell));
  left: 0;
  width: 180px;
  height: 1px;
  background: linear-gradient(90deg, rgba(241, 89, 34, 0), rgba(241, 89, 34, 0.95), rgba(241, 89, 34, 0));
  animation-name: awPulseX;
}

.awspot__pulse--v {
  top: 0;
  left: calc(var(--col) * var(--cell));
  width: 1px;
  height: 180px;
  background: linear-gradient(180deg, rgba(241, 89, 34, 0), rgba(241, 89, 34, 0.95), rgba(241, 89, 34, 0));
  animation-name: awPulseY;
}

.awspot.is-offscreen .awspot__pulse {
  animation-play-state: paused;
}

@keyframes awPulseX {
  from {
    transform: translateX(-200px);
  }
  to {
    transform: translateX(100vw);
  }
}

@keyframes awPulseY {
  from {
    transform: translateY(-200px);
  }
  to {
    transform: translateY(110vh);
  }
}

.awspot__inner {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: clamp(32px, 6vw, 96px);
  align-items: center;
}

.awspot__list {
  margin-top: clamp(24px, 3vw, 40px);
  border-top: 1px solid var(--line);
  list-style: none;
}

.awspot__list li {
  border-bottom: 1px solid var(--line);
}

.awspot__item {
  position: relative;
  display: grid;
  grid-template-columns: 44px minmax(0, 1fr);
  gap: 14px;
  width: 100%;
  padding: 20px 0 22px;
  border: 0;
  background: none;
  font: inherit;
  color: inherit;
  text-align: left;
  cursor: pointer;
}

.awspot__num {
  padding-top: 2px;
  font-family: var(--font-serif);
  font-size: 15px;
  color: rgba(36, 26, 18, 0.4);
  transition: color 0.4s ease;
}

.awspot__txt {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.awspot__org {
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.awspot__name {
  font-family: var(--font-serif);
  font-size: clamp(16px, 1.35vw, 19px);
  line-height: 1.35;
  color: rgba(36, 26, 18, 0.5);
  transition: color 0.4s ease;
}

.awspot__item:hover .awspot__name {
  color: var(--ink);
}

.awspot__item.is-active .awspot__num {
  color: var(--accent);
}

.awspot__item.is-active .awspot__name {
  color: var(--ink);
}

/* the active item's bar fills with its share of the scroll */
.awspot__bar {
  position: absolute;
  left: 58px;
  right: 0;
  bottom: -1px;
  height: 2px;
  overflow: hidden;
}

.awspot__bar i {
  display: block;
  height: 100%;
  background: var(--accent);
  transform: scaleX(0);
  transform-origin: left;
}

.awspot__item.is-active .awspot__bar i {
  transform: scaleX(var(--seg, 1));
}

/* the stage: a slowly turning ring, the big outlined number, the award */
.awspot__stage {
  position: relative;
  justify-self: center;
  width: min(100%, 470px);
  aspect-ratio: 1;
}

.awspot__bignum {
  position: absolute;
  z-index: 0;
  top: -0.12em;
  right: -0.06em;
  font-family: var(--font-serif);
  font-size: clamp(120px, 14vw, 210px);
  line-height: 1;
  color: transparent;
  -webkit-text-stroke: 1px rgba(241, 89, 34, 0.35);
  pointer-events: none;
}

.awspot__ring {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  overflow: visible;
  fill: none;
  stroke: rgba(241, 89, 34, 0.22);
  stroke-width: 1;
  rotate: var(--rot, 0deg);
}

.awspot__ring circle:nth-of-type(2) {
  stroke-dasharray: 2 7;
}

.awspot__ring text {
  fill: rgba(36, 26, 18, 0.5);
  stroke: none;
  font-family: var(--font-sans);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.42em;
}

/* each award sits on a white mat inside the ring */
.awspot__slide {
  position: absolute;
  z-index: 1;
  inset: 21%;
  display: grid;
  place-items: center;
  padding: 12px;
  border-radius: 18px;
  background: #FFFFFF;
  box-shadow: 0 30px 60px -30px rgba(90, 45, 20, 0.45), 0 0 0 1px rgba(241, 89, 34, 0.08);
  cursor: zoom-in;
  opacity: 0;
  transform: translate3d(0, 24px, 0) scale(0.94);
  transition: opacity 0.6s ease, transform 0.8s var(--ease);
  pointer-events: none;
}

.awspot__slide.is-active {
  opacity: 1;
  transform: none;
  pointer-events: auto;
}

.awspot__slide img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  border-radius: 10px;
}

.awspot__slide figcaption {
  position: absolute;
  left: 50%;
  top: calc(100% + 20px); /* 20px below the card, not overlapping it */
  padding: 6px 14px;
  border-radius: 999px;
  background: var(--accent);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.16em;
  color: #FFFFFF;
  transform: translateX(-50%);
}

/* ---------- archive timeline ---------- */
.awarc__head {
  align-items: flex-end;
}

.awarc__years {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.awarc__years a {
  padding: 8px 14px;
  border: 1px solid var(--line);
  border-radius: 999px;
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--text);
  transition: background 0.3s ease, border-color 0.3s ease, color 0.3s ease;
}

.awarc__years a:hover {
  border-color: var(--accent);
  color: var(--accent);
}

.awarc__years a.is-current,
.awarc__years a.is-current:hover {
  border-color: var(--accent);
  background: var(--accent);
  color: #FFFFFF;
}

.awarc__body {
  --pad: 48px;
  position: relative;
  padding-left: var(--pad);
}

/* the spine: a hairline track whose orange fill grows with the scroll */
.awarc__spine {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 6px;
  width: 2px;
  background: var(--line);
}

.awarc__spine i {
  display: block;
  height: 100%;
  background: linear-gradient(180deg, #E24A1A, #F15922 60%, #F7A24B);
  transform: scaleY(var(--p, 1));
  transform-origin: top;
}

.awarc__year {
  display: grid;
  grid-template-columns: 190px minmax(0, 1fr);
  gap: 24px clamp(24px, 4vw, 56px);
  padding: 44px 0;
}

.awarc__year + .awarc__year {
  border-top: 1px solid var(--line);
}

.awarc__label {
  position: sticky;
  top: calc(var(--nav-h) + 28px);
  align-self: start;
}

/* the year's node on the spine (rides with the sticky label) */
.awarc__dot {
  position: absolute;
  /* em = the year's font size, so the node centres on the numerals */
  top: 0.4em;
  left: calc(-1 * var(--pad) + 1px);
  width: 12px;
  height: 12px;
  border: 2px solid rgba(241, 89, 34, 0.45);
  border-radius: 50%;
  background: var(--bg);
  font-size: clamp(44px, 5vw, 64px);
  transition: background 0.4s ease, border-color 0.4s ease, box-shadow 0.4s ease;
}

.awarc__num {
  font-family: var(--font-serif);
  font-weight: 400;
  font-size: clamp(44px, 5vw, 64px);
  line-height: 1;
  color: transparent;
  -webkit-text-stroke: 1px rgba(241, 89, 34, 0.6);
  transition: color 0.6s ease;
}

.awarc__count {
  display: block;
  margin-top: 12px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-muted);
}

.awarc__year.is-reached .awarc__num {
  color: var(--accent);
}

.awarc__year.is-reached .awarc__dot {
  border-color: var(--accent);
  background: var(--accent);
  box-shadow: 0 0 0 5px rgba(241, 89, 34, 0.14);
}

.awarc__list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
}

/* an award: thumbnail, organiser, title and an arrow chip */
.awcard {
  display: grid;
  grid-template-columns: 112px minmax(0, 1fr) auto;
  gap: 18px;
  align-items: center;
  width: 100%;
  padding: 14px 16px 14px 14px;
  border: 1px solid rgba(36, 26, 18, 0.07);
  border-radius: 18px;
  background: var(--bg-card);
  font: inherit;
  color: inherit;
  text-align: left;
  cursor: pointer;
  transition: opacity 0.9s var(--ease), transform 0.6s var(--ease), border-color 0.4s ease, box-shadow 0.5s ease;
}

.awcard:hover,
.awcard:focus-visible {
  border-color: rgba(241, 89, 34, 0.35);
  box-shadow: 0 24px 44px -30px rgba(90, 45, 20, 0.45);
  outline: none;
}

.awcard.is-in:hover,
.awcard.is-in:focus-visible {
  transform: translateY(-4px);
}

.awcard__media {
  display: block;
  aspect-ratio: 4 / 3;
  overflow: hidden;
  border-radius: 12px;
  background: #FFFFFF;
  box-shadow: inset 0 0 0 1px rgba(36, 26, 18, 0.06);
}

.awcard__media img {
  width: 100%;
  height: 100%;
  padding: 6px;
  object-fit: contain;
  transition: transform 0.8s var(--ease);
}

.awcard:hover .awcard__media img {
  transform: scale(1.06);
}

.awcard__txt {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

.awcard__org {
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--accent);
}

.awcard__name {
  display: -webkit-box;
  overflow: hidden;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  font-family: var(--font-serif);
  font-size: 16px;
  line-height: 1.38;
  color: var(--ink);
}

.awcard__go {
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border: 1px solid var(--line);
  border-radius: 50%;
  color: var(--accent);
  transition: background 0.35s ease, border-color 0.35s ease, color 0.35s ease, transform 0.45s var(--ease);
}

.awcard__go svg {
  width: 15px;
  height: 15px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.awcard:hover .awcard__go {
  border-color: var(--accent);
  background: var(--accent);
  color: #FFFFFF;
  transform: rotate(45deg);
}

/* ---------- responsive ---------- */
@media (max-width: 1060px) {
  .awarc__year {
    grid-template-columns: 150px minmax(0, 1fr);
  }

  .awarc__list {
    grid-template-columns: minmax(0, 1fr);
  }
}

@media (max-width: 900px) {
  .awintro__grid,
  .awspot__inner {
    grid-template-columns: minmax(0, 1fr);
  }

  .awspot__stage {
    order: -1;
    width: min(100%, 360px);
  }

  .awarc__head {
    flex-direction: column;
    align-items: flex-start;
  }
}

@media (max-width: 760px) {
  .awintro__stats {
    row-gap: 8px;
  }

  .awarc__body {
    --pad: 30px;
  }

  /* year header above its awards, not sticky */
  .awarc__year {
    grid-template-columns: minmax(0, 1fr);
    gap: 18px;
    padding: 32px 0;
  }

  .awarc__label {
    position: relative;
    top: 0;
    display: flex;
    align-items: baseline;
    gap: 14px;
  }

  .awarc__dot {
    top: 0.36em;
  }

  .awarc__count {
    margin-top: 0;
  }
}

@media (max-width: 520px) {
  .awcard {
    grid-template-columns: 84px minmax(0, 1fr);
    gap: 14px;
    padding: 12px;
  }

  .awcard__go {
    display: none;
  }

  .awcard__name {
    font-size: 15px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .awspot__pulse {
    animation: none;
    display: none;
  }

  .awspot__slide,
  .awarc__num,
  .awarc__dot,
  .awcard {
    transition: none;
  }
}

/* ---------- award popup (the shared lightbox, base.css) ----------
   on this page the award sits on white instead of the dark gallery
   backdrop, with a hairline above the caption */
.page-awards-recognitions .lightbox__media {
  padding: 50px 0; /* white space above and below the award */
  background: #FFFFFF;
  border-bottom: 1px solid var(--line);
}

/* the 100px of padding comes out of the image, so the popup keeps its height */
.page-awards-recognitions .lightbox__media img {
  height: min(calc(70vh - 100px), 540px);
}

/* phones: the box takes the award's own height, so the gap is exactly 50px */
@media (max-width: 760px) {
  .page-awards-recognitions .lightbox__media img {
    height: auto;
    max-height: calc(70vh - 100px);
  }
}
