/* Code & Learning page
   Needs css/style.css first (colour tokens, nav, base type). */

.cl-page {
  position: relative;
  min-height: calc(100vh - 73px);
  color: var(--blue);

  /* geometry at 1440px, scaled down with the viewport */
  --tl-x:      clamp(28px, 12.3vw, 177px);   /* centre of the timeline bar */
  --content-x: clamp(64px, 18.3vw, 263px);   /* left edge of item text     */
  --right:     clamp(20px, 9.1vw, 131px);
  --node:      clamp(24px, 2.92vw, 42px);    /* station circle             */
  --ring:      clamp(4px, .49vw, 7px);       /* bar + circle stroke        */
  --title:     clamp(30px, 4.44vw, 64px);    /* 64px headings              */
  --row-pad:   clamp(28px, 3.33vw, 48px);
  --h3:        clamp(21px, 2.08vw, 30px);
}

/* ---------- Background photo ---------- */
.cl-bg {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: url("../image/background.png") center / cover no-repeat;
  opacity: 1;
  transition: opacity .45s ease;
}
.cl-bg::after {               /* cream wash over the photo */
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(254, 253, 248, .86);
}
.cl-page.has-open .cl-bg { opacity: 0; }

.cl-main { position: relative; z-index: 1; padding-bottom: clamp(56px, 6.9vw, 100px); }

/* ---------- Heading ---------- */
.cl-head { padding: clamp(40px, 5.7vw, 82px) var(--right) 0 clamp(20px, 9.3vw, 134px); }
.cl-title,
.item-name {
  margin: 0;
  color: var(--blue);
  font-family: var(--display);
  font-size: var(--title);
  font-style: normal;
  font-weight: 400;
  line-height: 100%;
}
.cl-intro {
  max-width: 505px;
  margin: 18px 0 0 10px;
  font-size: 20.777px;
  line-height: normal;
}

/* ---------- Timeline ---------- */
.timeline {
  position: relative;
  margin: 33px 0 0;
  padding: 18px var(--right) 24px var(--content-x);
  list-style: none;
}
.timeline::before {           /* the line */
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: calc(var(--tl-x) - var(--ring) / 2);
  width: var(--ring);
  border-radius: 999px;
  background: var(--blue);
}

.item {
  position: relative;
  padding-bottom: var(--row-pad);
  border-bottom: 1px solid var(--blue);
}
.item:last-child { border-bottom: 0; }

.item::before {               /* the station */
  content: "";
  position: absolute;
  z-index: 1;
  box-sizing: border-box;
  width: var(--node);
  height: var(--node);
  left: calc(var(--tl-x) - var(--content-x) - var(--node) / 2);
  top: calc(var(--row-pad) + var(--title) / 2 - var(--node) / 2);
  border: var(--ring) solid var(--blue);
  border-radius: 50%;
  background: var(--bg);
}

.item-title { margin: 0; font: inherit; }
.item-toggle {
  display: block;
  width: 100%;
  padding: var(--row-pad) 0 0;
  background: none;
  border: 0;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
}
.item-sub {
  display: block;
  margin-top: 12px;
  font-family: var(--body);
  font-size: 20.777px;
  font-weight: 400;
  line-height: normal;
}
.item-toggle:hover .item-name,
.item-toggle:focus-visible .item-name {
  text-decoration: underline;
  text-decoration-thickness: 3px;
  text-underline-offset: 7px;
}
.item-toggle:focus-visible { outline-offset: 6px; }

/* ---------- Expand / collapse ---------- */
.item-body {
  display: grid;
  grid-template-rows: 0fr;
  visibility: hidden;
  transition: grid-template-rows .4s ease, visibility 0s .4s;
}
.item.is-open .item-body {
  grid-template-rows: 1fr;
  visibility: visible;
  transition: grid-template-rows .4s ease, visibility 0s 0s;
}
.item-body-inner { min-height: 0; overflow: hidden; }
.item-content { padding: 34px 0 0 5px; }

/* ---------- Content ---------- */
.block + .block { margin-top: 34px; }
.block h3 {
  margin: 0;
  font-family: var(--body);
  font-size: var(--h3);
  font-weight: 700;
  line-height: 100%;
}
.block .meta {
  display: block;
  margin-top: 1px;
  font-size: 14px;
  font-style: italic;
  line-height: 1.2;
}
.block p { max-width: 840px; margin: 26px 0 0; }
.block .meta + p { margin-top: 26px; }
.block .note {
  margin-top: 40px;
  font-size: 14px;
  font-style: italic;
  line-height: 1.2;
}

.pull {
  position: relative;
  margin: 34px 0 0;
  padding: 4px 0 4px clamp(28px, 5.5vw, 79px);
  font-family: Georgia, "Times New Roman", serif;
  font-size: clamp(20px, 2.22vw, 32px);
  font-style: italic;
  font-weight: 400;
  line-height: 100%;
}
.pull::before {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  width: 8px;
  border-radius: 4px;
  background: var(--yellow);
}
.pull p { margin: 0; }

.stats {
  display: grid;
  grid-template-columns: 25.6% 29% 1fr;
  gap: 16px 0;
  margin: 48px 0 0;
  padding: 0;
  list-style: none;
}
.stats li { display: block; }
.stats .num {
  display: block;
  margin-bottom: 4px;
  font-size: clamp(24px, 2.22vw, 32px);
  font-weight: 700;
  line-height: 1.1;
}
.stats span:not(.num) { display: block; }

/* image slots (grey until you drop in real photos) */
.media {
  --media-h: clamp(150px, 20.07vw, 289px);
  display: grid;
  gap: 35px;
  margin: 34px 0 0;
}
.media--1 { grid-template-columns: 531fr 515fr; }
.media--2 { grid-template-columns: 531fr 502fr; }
.media--3 { grid-template-columns: 346fr 327fr 327fr; gap: 23px; --media-h: clamp(120px, 14.8vw, 213px); }
.stats + .media { margin-top: 48px; }
.ph {
  height: var(--media-h);
  margin: 0;
  background: #D9D9D9;
  overflow: hidden;
}
.ph img { display: block; width: 100%; height: 100%; object-fit: cover; }

/* ---------- Mobile ---------- */
@media (max-width: 768px) {
  .cl-page {
    --tl-x: 22px;
    --content-x: 56px;
    --right: 20px;
    --node: 24px;
    --ring: 4px;
    --title: clamp(28px, 8.4vw, 44px);
    --row-pad: 28px;
    --h3: 22px;
    min-height: calc(100vh - 64px);
  }
  .cl-head { padding-left: 20px; }
  .cl-intro { margin-left: 0; }
  .timeline { margin-top: 24px; }
  .item-sub { margin-top: 8px; font-size: 17px; }
  .item-content { padding-left: 0; }
  .block h3 { line-height: 1.1; }
  .block .meta, .block .note { font-size: 13px; }
  .pull { padding-left: 24px; font-size: clamp(19px, 5.4vw, 24px); line-height: 1.1; }
  .media { --media-h: 52vw; gap: 16px; }
  .media--1, .media--2, .media--3 { grid-template-columns: 1fr; }
  .stats { grid-template-columns: repeat(3, 1fr); gap: 12px; }
  .stats span:not(.num) { font-size: 15px; }
}

@media (prefers-reduced-motion: reduce) {
  .cl-bg,
  .item-body,
  .item.is-open .item-body { transition: none; }
}


/* =====================================================================
   URBAN PLANNING PAGE (hero + thumbnail rows) — same timeline as above
   ===================================================================== */
/* ---------- Hero ---------- */
.up-hero {
  display: grid;
  grid-template-columns: minmax(0, 576fr) minmax(0, 640fr);
  column-gap: clamp(20px, 2.6vw, 37px);
  padding: clamp(40px, 5.4vw, 78px) clamp(20px, 4.2vw, 60px) 0 clamp(20px, 10vw, 144px);
}
.up-title { margin: 0 0 clamp(28px, 4.1vw, 59px) 9px; }
.up-intro {
  max-width: 490px;
  margin: 4px 0 0;
  font-size: 20.777px;
  line-height: normal;
}
.up-cover {
  grid-column: 1;
  grid-row: 2;
  height: auto;
  aspect-ratio: 576 / 319;
}
.up-caption {
  grid-column: 1;
  grid-row: 3;
  margin: 14px 0 0;
}
.up-journal {
  grid-column: 2;
  grid-row: 2;
  align-self: end;
}
.up-kicker { margin: 0; }
.up-journal-title {
  margin: 18px 0 0;
  font-family: var(--display);
  font-size: var(--title);
  font-weight: 400;
  line-height: 100%;
}
.up-journal-text { margin: 25px 0 0; }
.up-journal .text-link { display: inline-block; margin-top: clamp(28px, 3.96vw, 57px); }

/* ---------- Timeline (differences from the Code & Learning page) ---------- */
.up-page .timeline {
  margin-top: clamp(40px, 6.6vw, 96px);   /* gap between the hero and the timeline (design: 170px) */
  padding-top: 0;
  padding-bottom: 44px;
}
.up-page .item:last-child { border-bottom: 1px solid var(--blue); }

.item--thumb { padding-bottom: clamp(16px, 1.94vw, 28px); }
.item--thumb .item-content { padding-bottom: 20px; }
.item--thumb .item-toggle {
  display: flex;
  align-items: flex-start;
  gap: clamp(14px, 1.94vw, 28px);
}
.thumb {
  flex: none;
  display: block;
  width: clamp(84px, 12.65vw, 182px);
  height: clamp(58px, 8.75vw, 126px);
}
.item-text { display: block; min-width: 0; }

/* ---------- Mobile ---------- */
@media (max-width: 768px) {
  .up-hero {
    grid-template-columns: 1fr;
    padding: 40px 20px 0;
  }
  .up-title { margin: 0 0 24px; }
  .up-intro { grid-row: auto; max-width: none; margin: 0 0 28px; }
  .up-cover { grid-row: auto; }
  .up-caption { grid-row: auto; margin-top: 12px; }
  .up-journal { grid-column: 1; grid-row: auto; margin-top: 48px; }
  .up-journal-title { margin-top: 12px; }
  .up-journal-text { margin-top: 16px; }
  .up-journal .text-link { margin-top: 24px; }
  .up-page .timeline { margin-top: 56px; padding-bottom: 28px; }
  .item--thumb .item-toggle { gap: 14px; }
}


/* =====================================================================
   ACTIVITIES PAGE (amber) — thumbnail rows, two-column text
   ===================================================================== */
@media (min-width: 769px) {
  .act-page {
    --content-x: clamp(64px, 16.95vw, 244px);   /* text column starts at 244px */
    --right:     clamp(20px, 10.35vw, 149px);
  }
}
.act-page .cl-head { padding-top: clamp(28px, 3.55vw, 51px); }
.act-page .cl-intro { margin: 20px 0 0 3px; }

.act-page .timeline {
  margin-top: clamp(24px, 3.6vw, 52px);
  padding-top: 0;
  padding-bottom: 4px;
}
.act-page .item:last-child { padding-bottom: 0; }
.act-page .item:last-child .item-content { padding-bottom: 0; }

/* two text columns */
.act-cols {
  display: grid;
  grid-template-columns: minmax(0, 496fr) minmax(0, 470fr);
  column-gap: clamp(24px, 5.1vw, 74px);
}
.act-cols p { margin: 0; max-width: none; }

.act-page .pull { margin-top: clamp(28px, 2.8vw, 40px); }
.act-page .pull::before { background: var(--blue); }
.act-page .media { margin-top: clamp(28px, 3.3vw, 48px); }

@media (max-width: 768px) {
  .act-page .timeline { margin-top: 24px; padding-bottom: 4px; }
  .act-cols { grid-template-columns: 1fr; row-gap: 16px; }
  .act-page .pull { margin-top: 28px; }
  .act-page .media { margin-top: 28px; }
}