/* ============================================================
   Children & Youth Resilience Hub — block theme section styles.
   Faithful port of the design system in the original mock-up
   (assets/css/styles.css). Brand tokens are duplicated here as
   :root custom properties so the section CSS below stays 1:1 with
   the design; the same colours also live in theme.json for the
   editor. Sections are built from core blocks that carry the
   ORIGINAL design class names, so this stylesheet drives the
   layout directly.
   ============================================================ */

/* ============================================================
   INDEPENDENT SECTION STYLE TARGETS
   Each section has ONE unique root selector — style a section
   through its root and it will never affect another section.
   Shared design-system primitives (colours, fonts, buttons,
   .kicker, .section__head, .prose) are intentionally global.

     Section              Root selector        Pattern
     ------------------   ------------------   ----------------------------
     Announcement bar     .topbar              parts/header
     Masthead + nav       .masthead            parts/header
     Home hero            .hero                resiliencehub/hero-home
     Editorial split      .editorial           resiliencehub/editorial-lead
     Numbered points      .points              resiliencehub/points
     Stats (pine)         .stats               resiliencehub/stats
     Highlights           .highlights          resiliencehub/highlights
     Gallery grid         .gallery             resiliencehub/gallery-*
     Closing CTA          .section--clay       resiliencehub/cta
     Inner page banner    .banner              resiliencehub/page-banner
     Programme schedule   .daynav  .session    resiliencehub/page-programme
     Partners             .partner-grid        resiliencehub/page-partners
     Committee            .people              resiliencehub/page-committee
     FAQ accordion        .faq                 resiliencehub/page-faqs
     Journal cards        .posts  .post        resiliencehub/page-journal
     Contact form         .form  .contact-list resiliencehub/page-contact
     Long-form policy     .prose               resiliencehub/page-*
     Footer               .footer              parts/footer
   ============================================================ */

/* 1. Tokens ---------------------------------------------------------------- */
:root{
  --pine:#173a2c;
  --pine-deep:#102a20;
  --pine-soft:#26543f;
  --paper:#f4ecdd;
  --paper-2:#ece0c9;
  --paper-3:#e3d4b8;
  --ink:#1e1a14;
  --ink-2:#4b4438;
  --paper-soft:rgba(245,238,224,.9);
  --clay:#bd5734;
  --clay-deep:#9c4527;
  --ochre:#cf972f;
  --sage:#7f9a78;

  --line:rgba(33,29,23,.16);
  --line-2:rgba(33,29,23,.28);
  --line-light:rgba(244,236,221,.22);
  --line-light-2:rgba(244,236,221,.4);

  --serif:'Fraunces',Georgia,'Times New Roman',serif;
  --sans:'Inter','Helvetica Neue',Arial,system-ui,sans-serif;

  --step--1:clamp(.82rem,.79rem + .14vw,.9rem);
  --step-0:clamp(1rem,.97rem + .16vw,1.075rem);
  --step-1:clamp(1.18rem,1.1rem + .38vw,1.4rem);
  --step-2:clamp(1.5rem,1.32rem + .9vw,2.05rem);
  --step-3:clamp(2rem,1.6rem + 1.9vw,3.1rem);
  --step-4:clamp(2.6rem,1.9rem + 3.3vw,4.6rem);
  --step-5:clamp(2.5rem,1.85rem + 3.1vw,4.5rem);

  --sp-1:.5rem; --sp-2:.75rem; --sp-3:1rem; --sp-4:1.5rem;
  --sp-5:2rem; --sp-6:3rem; --sp-7:4.5rem;
  --section-y:clamp(2.25rem,1.7rem + 2.2vw,3.75rem);

  --wrap:1180px;
  --wrap-narrow:800px;
  --gutter:clamp(1.25rem,.8rem + 2.4vw,3rem);
  --radius:4px;
  --radius-lg:10px;

  /* One motion vocabulary for the whole site: a single decelerating curve for
     anything entering, a gentle overshoot for anything you press. */
  --ease-out:cubic-bezier(.22,.61,.36,1);
  --ease-spring:cubic-bezier(.34,1.4,.64,1);
  --reveal-shift:14px;

  /* Lets the FAQ panels animate open to their intrinsic height where the
     browser supports it (Chrome 129+); inert everywhere else. */
  interpolate-size:allow-keywords;
}

/* 2. Base ------------------------------------------------------------------ */
/* The design assumes a border-box reset. Without it every `.wrap` (width:100%
   plus a gutter) is wider than the viewport and the page scrolls sideways on
   small screens. */
*,*::before,*::after{box-sizing:border-box}
img,svg{max-width:100%}
body{
  font-family:var(--sans);
  font-size:var(--step-0);
  line-height:1.65;
  color:var(--ink);
  background:var(--paper);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
}
html{scroll-behavior:smooth}
h1,h2,h3,h4{font-family:var(--serif);font-weight:500;line-height:1.06;letter-spacing:-.015em;color:var(--pine)}
p{color:var(--ink-2)}
strong{color:var(--ink);font-weight:600}
:focus-visible{outline:2px solid var(--clay);outline-offset:3px}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* WordPress adds a block-gap margin to every non-first flow child, which knocks
   CSS-grid items out of row alignment. Neutralise it inside every grid row. */
.points > *,.stats > *,.highlights > *,.gallery > *,.posts .wp-block-post-template > *,
.people > *,.partner-grid > *,.footer__grid > *,.cols-2 > *,.cols-3 > *,.cols-4 > *{
  margin-block-start:0 !important;margin-block-end:0 !important
}

/* 3. Layout utilities ------------------------------------------------------ */
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gutter)}
.wrap--narrow{max-width:var(--wrap-narrow)}
.section{padding-block:var(--section-y)}
.section--paper-2{background:var(--paper-2)}
.section--pine{background:var(--pine);color:var(--paper)}
.section--pine h2,.section--pine h3{color:var(--paper)}
.section--pine p{color:var(--paper-soft)}
.section--clay{background:var(--clay);color:#fff}
.section--clay h2{color:#fff}
.section--clay p,.section--clay .section__intro{color:#fff}
.section--tight{padding-block:clamp(2.5rem,2rem + 2vw,4rem)}
.measure{max-width:62ch}
.measure-sm{max-width:46ch}
.stack>*+*{margin-top:var(--sp-3)}
.stack-4>*+*{margin-top:var(--sp-4)}
.cluster{display:flex;flex-wrap:wrap;gap:var(--sp-3) var(--sp-4);align-items:center}
.grid{display:grid;gap:clamp(1.5rem,1rem + 2vw,2.75rem)}
.cols-2{grid-template-columns:repeat(2,1fr)}
.cols-3{grid-template-columns:repeat(3,1fr)}
.cols-4{grid-template-columns:repeat(4,1fr)}
.rule{height:1px;background:var(--line);border:0}

/* Section headers */
.kicker{
  display:inline-block;font-family:var(--sans);font-weight:600;
  font-size:var(--step--1);letter-spacing:.16em;text-transform:uppercase;
  color:var(--clay);margin-bottom:var(--sp-3)
}
.section--pine .kicker,.section--clay .kicker{color:var(--ochre)}
.section__head{max-width:52ch;margin-bottom:clamp(1.25rem,.9rem + 1.4vw,2rem)}
.section__head > *{margin-block-start:0 !important}
.section__intro{font-size:var(--step-1);color:var(--ink-2);margin-top:var(--sp-3) !important;max-width:56ch}
.section--pine .section__intro{color:var(--paper-soft)}

/* 4. Buttons & links — core buttons mapped to the design .btn variants ------
   Two classes deep on purpose: WordPress prints the theme.json button element
   styles as `:root :where(.wp-element-button, .wp-block-button__link)` AFTER
   this stylesheet, and that rule zeroes border-width and re-sets font-size.
   A single-class selector would tie and lose on source order. */
.wp-block-button .wp-block-button__link{
  display:inline-flex;align-items:center;justify-content:center;gap:.5em;
  font-family:var(--sans);font-weight:600;font-size:.98rem;
  line-height:1;padding:.92em 1.5em;border-radius:var(--radius);
  border:1.5px solid transparent;cursor:pointer;text-align:center;text-decoration:none;
  background:var(--clay);color:#fff;box-shadow:0 2px 6px -1px rgba(189,87,52,.4);
  transition:transform .18s ease,background .18s ease,color .18s ease,border-color .18s ease,box-shadow .25s ease
}
.wp-block-button .wp-block-button__link:hover{background:var(--clay-deep);transform:translateY(-2px);box-shadow:0 16px 26px -12px rgba(189,87,52,.7)}
.is-style-pine .wp-block-button__link{background:var(--pine);color:#fff;box-shadow:none}
.is-style-pine .wp-block-button__link:hover{background:var(--pine-deep);transform:translateY(-2px)}
.is-style-light .wp-block-button__link{background:var(--paper);color:var(--pine);box-shadow:0 2px 8px -2px rgba(16,42,32,.35)}
.is-style-light .wp-block-button__link:hover{background:#fff;transform:translateY(-2px);box-shadow:0 16px 28px -14px rgba(16,42,32,.5)}
.is-style-line .wp-block-button__link{background:transparent;border-color:var(--line-2);color:var(--pine);box-shadow:none}
.is-style-line .wp-block-button__link:hover{border-color:var(--pine);background:var(--pine);color:#fff;transform:translateY(-2px)}
.is-style-line-light .wp-block-button__link{background:rgba(244,236,221,.08);border-color:rgba(244,236,221,.7);color:#fff;box-shadow:none}
.is-style-line-light .wp-block-button__link:hover{background:rgba(244,236,221,.18);border-color:#fff;transform:translateY(-2px)}

.link-arrow,a.link-arrow{
  display:inline-flex;align-items:center;gap:.4em;font-weight:600;font-size:.95rem;
  color:var(--clay);border-bottom:1px solid currentColor;padding-bottom:2px;
  text-decoration:none;transition:gap .18s ease
}
.link-arrow:hover{gap:.7em}
p.link-arrow{display:block;margin:0}
p.link-arrow a{display:inline-flex;align-items:center;gap:.4em;color:inherit;border-bottom:1px solid currentColor;padding-bottom:2px;text-decoration:none;transition:gap .18s ease}
p.link-arrow a:hover{gap:.7em}
.section--pine .link-arrow,.section--pine .link-arrow a{color:var(--ochre)}
.section--clay .link-arrow,.section--clay .link-arrow a{color:#fff}
.actions{display:flex;flex-wrap:wrap;gap:var(--sp-3) var(--sp-4);align-items:center;margin-top:var(--sp-5) !important}
.actions .wp-block-button{margin:0}

/* 5. Top bar, masthead & navigation ---------------------------------------- */
.topbar{
  background:var(--pine-deep);color:var(--paper);
  font-size:var(--step--1);letter-spacing:.01em
}
.topbar__inner{display:flex;justify-content:center;gap:.6em;flex-wrap:wrap;padding-block:.6rem;text-align:center}
.topbar__inner > *{margin-block-start:0 !important}
.topbar p{color:var(--paper);margin:0}
.topbar a{color:var(--ochre);border-bottom:1px solid transparent;text-decoration:none}
.topbar a:hover{border-color:var(--ochre)}

/* The topbar scrolls away and only the masthead pins to the top. `position:
   sticky` is relative to the nearest ancestor box, so the header template-part
   wrapper is collapsed with display:contents — otherwise the masthead would
   unstick the moment the (short) wrapper scrolled past. */
.wp-block-template-part.site-header{display:contents}

/* SEAMLESS COLOUR BANDS
   Every page is a stack of full-bleed bands (hero, pine banner, paper/paper-2
   sections, clay CTA, pine-deep footer). WordPress' flow layout puts a
   block-gap margin on every non-first sibling, and between two coloured bands
   that margin showed through as a 24px stripe of the body's paper colour — a
   visible seam above the stats band, under the gallery, around the CTA and
   above the footer. Each band already owns its vertical rhythm through
   --section-y, so the gap between bands is simply removed and the colours meet
   edge to edge. Two classes deep because WordPress prints its layout rule
   (`:where(.is-layout-flow) > :not(:first-child)`) after this stylesheet. */
.wp-site-blocks > main,
.wp-site-blocks > .wp-block-template-part,
main > .hero,main > .banner,main > .section,
main > .wp-block-post-content > .hero,
main > .wp-block-post-content > .banner,
main > .wp-block-post-content > .section,
.wp-site-blocks > main > .wp-block-post-content > :first-child,
.wp-site-blocks > main > :first-child{margin-block-start:0}
.masthead{
  position:sticky;top:0;z-index:60;background:rgba(244,236,221,.82);
  -webkit-backdrop-filter:saturate(1.4) blur(12px);backdrop-filter:saturate(1.4) blur(12px);
  border-bottom:1px solid transparent;
  transition:background .3s ease,border-color .3s ease,box-shadow .3s ease
}
.admin-bar .masthead{top:32px}
@media screen and (max-width:782px){.admin-bar .masthead{top:46px}}
.masthead.is-scrolled{background:rgba(244,236,221,.97);border-bottom-color:var(--line);box-shadow:0 10px 30px -18px rgba(16,42,32,.55)}
/* Reading progress, sitting on the masthead's bottom border. Injected by
   hub.js, so it simply does not exist without JavaScript. Scaled rather than
   re-widthed, to keep it off the layout path on every scroll frame. */
.masthead__progress{
  position:absolute;left:0;right:0;bottom:-1px;height:2px;pointer-events:none;
  background:linear-gradient(90deg,var(--clay),var(--ochre));
  transform:scaleX(0);transform-origin:left;will-change:transform
}
.masthead__inner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding-block:1.05rem;transition:padding .3s ease}
.masthead__inner > *{margin-block-start:0 !important}
.masthead.is-scrolled .masthead__inner{padding-block:.6rem}

.wordmark{display:flex;align-items:center;gap:.7rem;line-height:1;flex-shrink:0;text-decoration:none}
.wordmark__mark{width:40px;height:40px;flex:none;display:block;transition:transform .35s cubic-bezier(.34,1.56,.64,1)}
.wordmark:hover .wordmark__mark{transform:rotate(-6deg) scale(1.06)}
.wordmark__text{font-family:var(--serif);font-weight:600;font-size:1.08rem;color:var(--pine);letter-spacing:-.01em;line-height:1.08}
.wordmark__line{display:block;white-space:nowrap}
.wordmark__cap{display:block;font-family:var(--sans);font-weight:500;font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;color:var(--clay);margin-top:.28em}

/* Core navigation block, dressed as the design's .nav */
.nav{display:flex;align-items:center;gap:1.15rem;min-width:0}
.nav .wp-block-navigation__container{gap:.1rem;align-items:center}
.nav .wp-block-navigation-item__content{
  font-weight:500;font-size:.9rem;color:var(--ink);text-decoration:none;
  padding:.5em .55em;border-radius:var(--radius);position:relative;white-space:nowrap;
  transition:color .2s ease
}
.nav .wp-block-navigation-item{position:relative}
.nav .wp-block-navigation-item > .wp-block-navigation-item__content::after{
  content:"";position:absolute;left:.55em;right:.55em;bottom:.28em;height:2px;border-radius:2px;
  background:var(--clay);transform:scaleX(0);transform-origin:right;
  transition:transform .3s cubic-bezier(.65,.05,.36,1)
}
.nav .wp-block-navigation-item__content:hover{color:var(--clay)}
.nav .wp-block-navigation-item > .wp-block-navigation-item__content:hover::after{transform:scaleX(1);transform-origin:left}
.nav .current-menu-item > .wp-block-navigation-item__content{color:var(--pine)}
.nav .current-menu-item > .wp-block-navigation-item__content::after{transform:scaleX(1);background:var(--ochre)}
.nav .wp-block-navigation__submenu-icon{width:.62em;height:.62em;margin-left:.2em;transition:transform .25s ease}
.nav .has-child:hover > .wp-block-navigation-item__content .wp-block-navigation__submenu-icon,
.nav .has-child[aria-expanded="true"] .wp-block-navigation__submenu-icon{transform:rotate(180deg)}

/* Dropdown menus (About / Media) */
.nav .wp-block-navigation__submenu-container{
  --submenu-gap:.4rem;
  min-width:13.5rem;padding:.4rem;
  background:var(--paper);border:1px solid var(--line);border-radius:14px;
  box-shadow:0 24px 44px -22px rgba(16,42,32,.55);margin-top:var(--submenu-gap)
}
/* The gap under the trigger is dead space — the panel is absolutely positioned,
   so it adds no height to the .has-child item, and the pointer crossing the gap
   drops :hover and closes the menu. Bridge it with a transparent strip that
   belongs to the panel. Core keeps the container overflow:hidden until it opens,
   so the strip is clipped (and unhoverable) while the menu is closed. */
.nav .wp-block-navigation__submenu-container::before{
  content:"";position:absolute;left:0;right:0;
  top:calc(var(--submenu-gap) * -1);height:var(--submenu-gap)
}
.nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content{
  display:block;padding:.62em .8em;border-radius:9px;font-size:.9rem;font-weight:500;color:var(--ink);white-space:nowrap;
  transition:background .15s ease,color .15s ease
}
.nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content::after{display:none}
.nav .wp-block-navigation__submenu-container .wp-block-navigation-item__content:hover{background:var(--paper-2);color:var(--clay)}

.nav__cta{flex-shrink:0;margin:0}
.nav__cta .wp-block-button__link{padding:.7em 1.15em;font-size:.9rem;box-shadow:0 1px 2px rgba(16,42,32,.12)}
.nav__cta .wp-block-button__link:hover{transform:translateY(-1px);box-shadow:0 14px 24px -12px rgba(189,87,52,.75)}

/* Hamburger / overlay chrome
   These two buttons are the whole of the navigation on a phone, and core ships
   them at bare icon size — a 24px tap target. Padded out to the 44px minimum;
   the icon inside is unchanged, only the area you can hit. */
.nav .wp-block-navigation__responsive-container-open,
.nav .wp-block-navigation__responsive-container-close{
  color:var(--pine);width:44px;height:44px;
  align-items:center;justify-content:center;
  border-radius:var(--radius);transition:background .2s ease,color .2s ease
}
/* Display is deliberately left alone here: which of these two is showing is
   decided by core and by the 1200px breakpoint rule further down. */
.nav .wp-block-navigation__responsive-container-close{display:flex}
.nav .wp-block-navigation__responsive-container-open:hover,
.nav .wp-block-navigation__responsive-container-close:hover{background:rgba(23,58,44,.07);color:var(--clay)}
.nav .wp-block-navigation__responsive-container.is-menu-open{
  background:var(--paper);padding:5rem var(--gutter) 2rem
}
.nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__container{
  flex-direction:column;align-items:stretch;gap:0
}
.nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content{
  padding:1.05em .1em;font-size:1.05rem;border-bottom:1px solid var(--line)
}
.nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation-item__content::after{display:none}
.nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container{
  background:transparent;border:0;box-shadow:none;padding:0 0 .3rem .9rem;margin:0
}
/* Panels are stacked in flow in the overlay; nothing to bridge, and the strip
   would sit over the item above it. */
.nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__submenu-container::before{content:none}

/* The design switches to an off-canvas sidebar at 1200px; core switches at
   600px, so re-point the breakpoint here rather than fork the block. */
@media (max-width:1199.98px){
  .nav .wp-block-navigation__responsive-container-open:not(.always-shown){display:flex !important}
  .nav .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open){display:none !important}
  /* Two classes deep: WordPress' layout CSS sets .wp-block-buttons-is-layout-flex
     { display:flex } after this sheet, and a single class would lose the tie. */
  .nav__cta.wp-block-buttons{display:none}
}

/* 6. Hero & page banners --------------------------------------------------- */
.hero.wp-block-cover{
  position:relative;min-height:clamp(480px,66vh,700px);
  display:flex;align-items:flex-end;overflow:hidden;
  color:var(--paper);background:var(--pine-deep);padding:0
}
.hero.wp-block-cover .wp-block-cover__background{display:none}
.hero .wp-block-cover__image-background{object-position:center 28%;z-index:0}
.hero::after{
  content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(90deg,rgba(16,42,32,.95),rgba(16,42,32,.74) 44%,rgba(16,42,32,.3)),
             linear-gradient(0deg,rgba(16,42,32,.9),rgba(16,42,32,0) 58%)
}
.hero .wp-block-cover__inner-container{
  position:relative;z-index:2;width:100%;max-width:var(--wrap);margin-inline:auto;
  padding-inline:var(--gutter);padding-block:clamp(3rem,2rem + 5vw,5.5rem)
}
.hero__content{max-width:44rem}
.hero__content > *{margin-block-start:0 !important}
.hero .kicker{color:var(--ochre)}
.hero__title{font-size:var(--step-5) !important;color:#fff !important;max-width:20ch;text-wrap:balance}
.hero__lede{font-size:var(--step-1);color:var(--paper-soft);max-width:46ch;margin-top:var(--sp-3) !important}
.hero .link-arrow{color:var(--ochre)}
.hero__facts{
  margin-top:clamp(1.4rem,1rem + 1.4vw,2rem) !important;padding-top:var(--sp-3);
  border-top:1px solid var(--line-light);font-size:var(--step--1);letter-spacing:.05em;
  text-transform:uppercase;color:var(--paper-soft)
}

.banner{background:var(--pine);color:var(--paper);padding-block:clamp(1.9rem,1.4rem + 2vw,3rem)}
.banner .wrap > *{margin-block-start:0 !important}
.banner .kicker{color:var(--ochre)}
.banner__title{color:var(--paper) !important;max-width:18ch}
.banner__lede{color:var(--paper-soft);max-width:60ch;margin-top:var(--sp-3) !important;font-size:var(--step-1)}
.crumbs{font-size:var(--step--1);letter-spacing:.03em;color:var(--line-light-2);margin-bottom:var(--sp-3) !important}
.crumbs a{color:inherit;text-decoration:none}
.crumbs a:hover{color:var(--ochre)}

/* 7. Sections & editorial blocks ------------------------------------------ */
.editorial{display:grid;grid-template-columns:1fr 1fr;gap:clamp(1.75rem,1rem + 4vw,4rem);align-items:center}
.editorial > *{margin-block-start:0 !important}
.editorial__figure{margin:0;border-radius:12px;overflow:hidden;aspect-ratio:4/3;background:var(--paper-3);box-shadow:0 24px 50px -32px rgba(0,0,0,.4)}
.editorial__figure img,.editorial__figure figure{margin:0;width:100%;height:100%;object-fit:cover;display:block}
.editorial__body > *{margin-block-start:0 !important}
.editorial__body.stack > * + *{margin-top:var(--sp-3) !important}
.editorial__lead h2,.editorial h2{font-size:var(--step-3)}
.pullquote{font-family:var(--serif);font-size:var(--step-2);line-height:1.2;color:var(--pine);font-weight:500}

/* numbered editorial list */
.points{border-top:1px solid var(--line)}
.point{display:grid;grid-template-columns:auto 1fr;gap:var(--sp-2) var(--sp-5);padding-block:clamp(1rem,.8rem + .8vw,1.45rem);border-bottom:1px solid var(--line)}
.point > *{margin-block-start:0 !important}
.point__num{font-family:var(--serif);font-size:var(--step-1);color:var(--clay);font-weight:500;font-variant-numeric:tabular-nums;margin:0}
.point__body > *{margin-block-start:0 !important}
.point__title{font-family:var(--serif);font-size:var(--step-1);color:var(--pine);font-weight:500;margin-bottom:.35em !important}
.point__text{color:var(--ink-2);max-width:60ch;margin:0}

/* stats */
.stats{display:grid;grid-template-columns:repeat(4,1fr)}
.stat{padding:var(--sp-4) var(--sp-4) var(--sp-4) var(--sp-4);border-left:1px solid var(--line-light)}
.stat:first-child{border-left:0;padding-left:0}
.stat > *{margin-block-start:0 !important}
.stat__num{display:block;font-family:var(--serif);font-size:var(--step-3);color:var(--ochre) !important;font-weight:500;line-height:1;margin:0}
.stat__label{display:block;margin-top:var(--sp-2) !important;font-size:var(--step--1);color:var(--paper-soft);max-width:22ch}
.stats__note{margin-top:var(--sp-5) !important;font-size:var(--step--1);color:var(--line-light)}

/* highlights */
.highlights{display:grid;grid-template-columns:repeat(3,1fr);gap:0}
.highlight{position:relative;padding:var(--sp-5) var(--sp-5) var(--sp-5) 0;border-top:2px solid var(--pine)}
.highlight + .highlight{padding-left:var(--sp-5);border-left:1px solid var(--line)}
/* Hovering the column draws a clay rule across its top border and pushes the
   arrow link, so the motion points at the column's actual action. No lift or
   shadow: the card itself is not clickable, only the link inside it is. */
.highlight::before{
  content:"";position:absolute;top:-2px;left:0;right:0;height:2px;background:var(--clay);
  transform:scaleX(0);transform-origin:left;
  transition:transform .5s cubic-bezier(.22,.61,.36,1)
}
.highlight:hover::before{transform:scaleX(1)}
.highlight__index{transition:color .25s ease}
.highlight:hover .highlight__index{color:var(--clay-deep)}
.highlight:hover .link-arrow a{gap:.7em}
.highlight > *{margin-block-start:0 !important}
.highlight__index{display:block;font-family:var(--serif);color:var(--clay);font-size:var(--step-1);margin:0}
.highlight__cat{display:block;font-size:var(--step--1);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2);margin:var(--sp-3) 0 var(--sp-2) !important}
.highlight h3{margin-bottom:var(--sp-2) !important}
.highlight p:not(.highlight__index):not(.highlight__cat){margin-bottom:var(--sp-4) !important}

/* 8. Programme schedule ---------------------------------------------------- */
.daynav{display:flex;flex-wrap:wrap;gap:.5rem;border-bottom:1px solid var(--line);padding-bottom:var(--sp-4);margin-bottom:var(--sp-5)}
.daynav__btn{
  font-family:var(--sans);font-weight:500;font-size:.95rem;color:var(--ink-2);
  background:transparent;border:1px solid var(--line);border-radius:var(--radius);
  padding:.6em 1em;cursor:pointer;transition:.15s
}
.daynav__btn:hover{border-color:var(--pine);color:var(--pine)}
.daynav__btn.is-active{background:var(--pine);border-color:var(--pine);color:var(--paper)}
/* Day panels only collapse once JS is present, so the full programme stays
   readable without JavaScript and inside the block editor. */
.js .day{display:none}
.js .day.is-active{display:block}
.day > *{margin-block-start:0 !important}
.session{display:grid;grid-template-columns:8.5rem 1fr auto;gap:var(--sp-3) var(--sp-4);align-items:baseline;padding-block:1.15rem;border-bottom:1px solid var(--line)}
.session > *{margin-block-start:0 !important}
.session:first-child{border-top:1px solid var(--line)}
.session__time{font-family:var(--serif);font-weight:500;color:var(--pine);font-variant-numeric:tabular-nums;margin:0}
.session__body > *{margin-block-start:0 !important}
.session__title{color:var(--ink);font-weight:500;margin:0}
.session__note{display:block;color:var(--ink-2);font-weight:400;font-size:.94rem;margin-top:.2em !important}
.session__type{font-size:var(--step--1);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);white-space:nowrap;margin:0}

/* 9. Partners -------------------------------------------------------------- */
.partner-group + .partner-group{margin-top:var(--sp-6) !important}
.partner-group > *{margin-block-start:0 !important}
.partner-group__title{font-family:var(--sans);font-weight:600;font-size:var(--step--1);letter-spacing:.14em;text-transform:uppercase;color:var(--clay) !important;padding-bottom:var(--sp-3);border-bottom:1px solid var(--line);margin-bottom:var(--sp-4) !important}
.partner-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
.partner-grid--3{grid-template-columns:repeat(3,1fr)}
.partner{background:var(--paper);padding:var(--sp-5) var(--sp-4);min-height:8.5rem;display:flex;flex-direction:column;justify-content:center;gap:.35em}
.partner > *{margin-block-start:0 !important}
.section--paper-2 .partner{background:var(--paper-2)}
.partner__name{font-family:var(--serif);font-size:var(--step-1);color:var(--pine);font-weight:500;line-height:1.1;margin:0}
.partner__note{font-size:var(--step--1);color:var(--ink-2);margin:0}
.partner--open{background:transparent;border:1px dashed var(--line-2)}

/* 10. Gallery -------------------------------------------------------------- */
.gallery{display:grid;grid-template-columns:repeat(6,1fr);gap:clamp(.75rem,.5rem + 1vw,1.25rem)}
.gallery .figure{position:relative;overflow:hidden;border-radius:var(--radius-lg);grid-column:span 2;aspect-ratio:4/3;margin:0;background:var(--paper-3)}
.gallery .figure--wide{grid-column:span 3}
.gallery .figure--tall{grid-column:span 3;aspect-ratio:16/10}
.gallery .figure img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .7s cubic-bezier(.22,.61,.36,1)
}
.gallery .figure figcaption{
  position:absolute;left:0;right:0;bottom:0;margin:0;z-index:1;
  padding:1.6rem 1rem .9rem;color:var(--paper);font-size:.9rem;font-weight:500;text-align:left;
  background:linear-gradient(to top,rgba(16,42,32,.82),transparent)
}
/* Slow push in on the image, plus a pine wash that deepens over the whole
   frame, so the tile under the cursor reads as the one in focus. */
.gallery .figure::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(to top,rgba(16,42,32,.5),rgba(16,42,32,0) 60%);
  opacity:0;transition:opacity .4s ease
}
.gallery .figure:hover img{transform:scale(1.05)}
.gallery .figure:hover::after{opacity:1}

/* 11. Journal / posts ------------------------------------------------------ */
/* The grid goes on the post template (the <ul>), NOT on the .wp-block-query
   wrapper — the wrapper also holds the pagination, and making it a grid too
   would squeeze the whole list into a single column. */
.posts .wp-block-post-template{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.5rem,1rem + 2vw,2.5rem);list-style:none;padding:0;margin:0}
/* The query loop wraps each card in an <li>; make it a flex parent so the card
   fills the row height and every "Read story" lines up. */
.posts .wp-block-post-template > li{display:flex}
.posts .wp-block-post-template > li > .post{flex:1}
.post{
  display:flex;flex-direction:column;background:var(--paper);border:1px solid var(--line);
  border-radius:var(--radius-lg);overflow:hidden;
  transition:transform .3s cubic-bezier(.22,.61,.36,1),border-color .3s ease,box-shadow .3s ease
}
.post > *{margin-block-start:0 !important}
.section--paper-2 .post{background:var(--paper)}
/* The whole card is a link target, so it lifts as one. */
.post:hover{transform:translateY(-4px);border-color:var(--line-2);box-shadow:0 24px 42px -28px rgba(16,42,32,.55)}
.post__media{aspect-ratio:16/10;background:var(--paper-3);overflow:hidden}
/* A post with no featured image gets a clean text card, not an empty tan box. */
.post__media:not(:has(img)){display:none}
.post__media img,.post__media figure{margin:0;width:100%;height:100%;object-fit:cover;display:block}
.post__media img{transition:transform .7s cubic-bezier(.22,.61,.36,1)}
.post:hover .post__media img{transform:scale(1.05)}
.post__media .wp-block-post-featured-image{margin:0;height:100%}
.post__media .wp-block-post-featured-image a{display:block;height:100%}
.post__body{padding:1.4rem;display:flex;flex-direction:column;gap:.6rem;flex:1}
.post__body > *{margin-block-start:0 !important}
.post__meta{font-size:var(--step--1);letter-spacing:.1em;text-transform:uppercase;color:var(--clay);font-weight:600;margin:0}
.post__title,.post .wp-block-post-title{font-size:var(--step-1);margin:0}
.post__title a,.post .wp-block-post-title a{color:var(--pine);text-decoration:none}
.post__excerpt,.post .wp-block-post-excerpt{color:var(--ink-2);font-size:.96rem;margin:0}
.post .wp-block-post-excerpt__excerpt{margin:0}
.post .wp-block-post-excerpt__more-text{display:none}
.post__link,.post .wp-block-read-more{margin-top:auto !important;font-weight:500;color:var(--pine);display:inline-flex;gap:.4em;align-items:center;text-decoration:none}
.post:hover .post__link,.post:hover .wp-block-read-more{color:var(--clay)}
.post .wp-block-post-date{font-size:var(--step--1);letter-spacing:.1em;text-transform:uppercase;color:var(--clay);font-weight:600;margin:0}

/* 12. People (committee) --------------------------------------------------- */
.people{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(1.25rem,1rem + 1.5vw,2rem)}
.person{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden}
.person > *{margin-block-start:0 !important}
.person__portrait{aspect-ratio:1;background:var(--paper-3);overflow:hidden}
.person__portrait img,.person__portrait svg,.person__portrait figure{margin:0;width:100%;height:100%;object-fit:cover;display:block}
.person__body{padding:1.1rem 1.2rem 1.3rem}
.person__body > *{margin-block-start:0 !important}
.person__name{font-family:var(--serif);font-size:var(--step-1);color:var(--pine);font-weight:500;margin:0}
.person__role{display:block;font-weight:600;font-size:.9rem;color:var(--clay);margin-top:.2em !important}
.person__region{display:block;font-size:.9rem;color:var(--ink-2);margin-top:.3em !important}

/* 13. FAQ — core/details styled as the design accordion -------------------- */
.faq{border-top:1px solid var(--line)}
.faq > *{margin-block-start:0 !important}
.faq__item{border-bottom:1px solid var(--line);padding:0}
.faq__item summary{
  list-style:none;cursor:pointer;
  display:flex;justify-content:space-between;align-items:center;gap:1.5rem;
  padding:1.4rem 0;font-family:var(--serif);font-size:var(--step-1);color:var(--pine);font-weight:500;
  transition:color .2s ease
}
.faq__item summary:hover{color:var(--clay)}
.faq__item summary::-webkit-details-marker{display:none}
.faq__item summary::after{
  content:"";flex:none;width:1.4rem;height:1.4rem;position:relative;
  background:
    linear-gradient(var(--clay),var(--clay)) center/100% 2px no-repeat,
    linear-gradient(var(--clay),var(--clay)) center/2px 100% no-repeat;
  transition:transform .25s ease
}
.faq__item[open] summary::after{
  background:linear-gradient(var(--clay),var(--clay)) center/100% 2px no-repeat;
  transform:rotate(180deg)
}
.faq__item .wp-block-details__content,.faq__item > *:not(summary){margin-block-start:0}
.faq__item p{padding-bottom:1.4rem;max-width:70ch;margin:0}
/* An answer appearing out of nowhere reads as a jump cut; fade it in from under
   the question so the panel feels like it opened. */
@media (prefers-reduced-motion:no-preference){
  .faq__item[open] > *:not(summary){animation:rh-faq-open .3s cubic-bezier(.22,.61,.36,1) both}
  /* Where the browser can animate to an intrinsic height (interpolate-size in
     :root), the panel also slides open; elsewhere the fade carries it alone. */
  @supports selector(::details-content){
    .faq__item::details-content{
      block-size:0;overflow:clip;
      transition:block-size .32s cubic-bezier(.22,.61,.36,1),content-visibility .32s;
      transition-behavior:allow-discrete
    }
    .faq__item[open]::details-content{block-size:auto}
  }
}
@keyframes rh-faq-open{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}

/* 14. Forms & contact ------------------------------------------------------ */
.form{max-width:38rem;margin-top:var(--sp-4)}
.form__row{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4)}
.field{display:flex;flex-direction:column;gap:.45rem;margin-bottom:var(--sp-4)}
.field label{font-weight:600;font-size:.92rem;color:var(--pine)}
.field input,.field select,.field textarea{
  font-family:var(--sans);font-size:var(--step-0);color:var(--ink);width:100%;box-sizing:border-box;
  background:var(--paper);border:1px solid var(--line-2);border-radius:var(--radius);
  padding:.8em .9em;transition:border-color .15s,box-shadow .15s
}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:0;border-color:var(--pine);box-shadow:0 0 0 3px rgba(23,58,44,.12)
}
.field textarea{min-height:8rem;resize:vertical}
.form__note{font-size:var(--step--1);color:var(--ink-2);margin-top:var(--sp-3)}
.form .btn-submit{
  display:inline-flex;align-items:center;justify-content:center;gap:.5em;
  font-family:var(--sans);font-weight:600;font-size:.98rem;line-height:1;
  padding:.92em 1.5em;border-radius:var(--radius);border:1.5px solid transparent;cursor:pointer;
  background:var(--clay);color:#fff;box-shadow:0 2px 6px -1px rgba(189,87,52,.4);
  transition:transform .18s ease,background .18s ease,box-shadow .25s ease
}
.form .btn-submit:hover{background:var(--clay-deep);transform:translateY(-2px);box-shadow:0 16px 26px -12px rgba(189,87,52,.7)}
/* honeypot: hidden from humans, present for bots */
.hp-field{position:absolute !important;left:-9999px !important;top:auto;width:1px;height:1px;overflow:hidden}
/* form success / error notices */
.form-note{border-radius:var(--radius);padding:.9rem 1.1rem;margin:0 0 var(--sp-4);font-size:.96rem;line-height:1.5;border:1px solid transparent;border-left-width:3px}
.form-note.is-ok{background:rgba(23,58,44,.07);border-color:rgba(23,58,44,.2);border-left-color:var(--pine);color:var(--pine)}
.form-note.is-err{background:rgba(189,87,52,.08);border-color:rgba(189,87,52,.22);border-left-color:var(--clay);color:var(--clay-deep)}

.contact-list{list-style:none;padding:0;margin:0;border-top:1px solid var(--line)}
.contact-row{padding-block:var(--sp-4);border-bottom:1px solid var(--line)}
.contact-row__label{display:block;font-size:var(--step--1);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2);margin-bottom:.3em}
.contact-row a,.contact-row span:not(.contact-row__label){font-family:var(--serif);font-size:var(--step-1);color:var(--pine);text-decoration:none}
.contact-row a:hover{color:var(--clay)}

/* newsletter sign-up */
.newsletter{margin-top:var(--sp-5)}
.newsletter__row{display:flex;gap:.6rem;flex-wrap:wrap;max-width:26rem}
.newsletter__row input{
  flex:1;min-width:12rem;font-family:var(--sans);font-size:var(--step-0);color:var(--ink);
  background:var(--paper);border:1px solid var(--line-2);border-radius:var(--radius);padding:.8em .9em
}
.newsletter__row input:focus{outline:0;border-color:var(--pine);box-shadow:0 0 0 3px rgba(23,58,44,.12)}
.newsletter__row .btn-submit{
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--sans);font-weight:600;font-size:.98rem;line-height:1;padding:.92em 1.5em;
  border-radius:var(--radius);border:0;cursor:pointer;background:var(--pine);color:#fff;
  transition:background .18s ease,transform .18s ease
}
.newsletter__row .btn-submit:hover{background:var(--pine-deep);transform:translateY(-2px)}

/* social icon row (core/social-links) --------------------------------------
   Core dresses the <li> and leaves the <a> at bare icon size, so a bordered
   38px square used to sit around an 18px anchor: most of the button was dead
   space and the actual tap target was less than half the 44px minimum. Here
   the ANCHOR is the button — it carries the size, border, radius and every
   state — and the <li> is reduced to a plain slot. Round, to echo the roundel
   in the wordmark, which reads better at icon scale than the 4px square did. */
.socials{gap:.6rem;margin-top:var(--sp-4) !important}
.socials .wp-block-social-link{
  width:auto;height:auto;display:block;padding:0;margin:0;
  background:transparent;border:0
}
/* Core scales the <li> on hover; the anchor owns the interaction instead. */
.socials .wp-block-social-link:hover{transform:none;background:transparent}
.socials .wp-block-social-link .wp-block-social-link-anchor{
  width:44px;height:44px;display:grid;place-items:center;padding:0;
  background:rgba(244,236,221,.05);
  border:1px solid var(--line-light);border-radius:50%;
  transition:background .22s ease,border-color .22s ease,transform .28s var(--ease-spring)
}
.socials .wp-block-social-link .wp-block-social-link-anchor svg{
  width:19px;height:19px;transition:transform .28s var(--ease-spring)
}
/* Hover moves the fill, the ring and the button — never the icon colour. The
   glyph takes its colour from the block's own icon-colour class on the <li>,
   which core re-asserts on the anchor as `currentcolor` at a specificity no
   theme rule reaches without an arms race; a colour set here would lose and the
   icon would vanish into the new fill. So each fill below is picked to keep that
   inherited colour readable instead. */
.socials .wp-block-social-link .wp-block-social-link-anchor:hover{
  background:var(--pine-soft);border-color:var(--pine-soft);transform:translateY(-3px)
}
.socials .wp-block-social-link .wp-block-social-link-anchor:hover svg{transform:scale(1.1)}
.socials .wp-block-social-link .wp-block-social-link-anchor:active{transform:translateY(-1px)}
/* Clay is the global focus colour and all but disappears on pine-deep. */
.socials .wp-block-social-link .wp-block-social-link-anchor:focus-visible{outline-color:var(--ochre)}

/* On paper (contact page): a warm tint and a pine ring, under pine icons. */
.socials.is-on-paper .wp-block-social-link .wp-block-social-link-anchor{
  background:transparent;border-color:var(--line-2)
}
.socials.is-on-paper .wp-block-social-link .wp-block-social-link-anchor:hover{
  background:var(--paper-3);border-color:var(--pine)
}
.socials.is-on-paper .wp-block-social-link .wp-block-social-link-anchor:focus-visible{outline-color:var(--clay)}

/* 15. Prose & callouts ----------------------------------------------------- */
.prose{max-width:70ch}
.prose > * + *{margin-top:1.1rem !important}
.prose h2{font-size:var(--step-2);margin-top:2.4rem !important}
.prose h3{font-size:var(--step-1);margin-top:1.8rem !important;color:var(--pine-soft)}
.prose ul{padding-left:1.2em}
.prose li{color:var(--ink-2);margin-top:.5em}
.prose li::marker{color:var(--clay)}
.prose a{color:var(--clay);border-bottom:1px solid currentColor;text-decoration:none}
.note{background:var(--paper-2);border-left:3px solid var(--ochre);border-radius:0;padding:1.1rem 1.4rem;color:var(--ink-2)}
.note strong{color:var(--ink)}
.flag{display:inline-block;font-family:var(--sans);font-weight:600;font-size:var(--step--1);letter-spacing:.1em;text-transform:uppercase;color:var(--clay-deep);background:var(--paper-3);padding:.35em .8em;border-radius:var(--radius);margin-bottom:var(--sp-4)}

/* single post article body */
.article{max-width:var(--wrap-narrow);margin-inline:auto}
.article .wp-block-post-title{font-size:var(--step-3);margin-bottom:var(--sp-4)}
.article .wp-block-post-featured-image img{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:var(--radius-lg)}
.article .wp-block-post-content > * + *{margin-top:1.1rem}
.article .wp-block-post-content p{font-size:1.05rem;line-height:1.75}

/* query pagination */
.wp-block-query-pagination{margin-top:var(--sp-5);gap:.75rem}
.wp-block-query-pagination a,.wp-block-query-pagination .current{color:var(--pine);text-decoration:none;font-weight:600}
.wp-block-query-pagination a:hover{color:var(--clay)}

/* 16. Footer --------------------------------------------------------------- */
.footer{background:var(--pine-deep);color:var(--paper);padding-block:clamp(3rem,2.2rem + 3vw,4.5rem) var(--sp-5)}
.footer__grid{display:grid;grid-template-columns:1.7fr 1fr 1fr 1.3fr;gap:clamp(2rem,1.4rem + 2vw,3.5rem)}
.footer__brand > *{margin-block-start:0 !important}
.footer__brand .wordmark__text{color:var(--paper)}
.footer__brand .wordmark__cap{color:var(--ochre)}
.footer__blurb{color:var(--line-light-2);font-size:.96rem;margin-top:var(--sp-3) !important;max-width:34ch}
.parent{display:inline-flex;flex-direction:column;gap:.15em;margin-top:var(--sp-4) !important;padding:.7rem 1rem;border:1px solid var(--line-light);border-radius:var(--radius)}
.parent span{font-size:var(--step--1);color:var(--line-light-2)}
.parent strong{font-family:var(--serif);color:var(--paper);font-weight:500}
.footer__col > *{margin-block-start:0 !important}
.footer__col h4{font-family:var(--sans);font-weight:600;font-size:var(--step--1);letter-spacing:.14em;text-transform:uppercase;color:var(--ochre);margin-bottom:var(--sp-3) !important}
.footer__links{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.6rem}
.footer__links li{margin:0}
.footer__links a{color:var(--line-light-2);text-decoration:none}
.footer__links a:hover{color:var(--paper)}
.footer__bottom{display:flex;justify-content:space-between;flex-wrap:wrap;gap:var(--sp-3);margin-top:var(--sp-6) !important;padding-top:var(--sp-4);border-top:1px solid var(--line-light);font-size:var(--step--1);color:var(--line-light-2)}
.footer__bottom p{color:var(--line-light-2);margin:0}
.footer__bottom a{color:var(--line-light-2);text-decoration:none}
.footer__bottom a:hover{color:var(--paper)}
.footer__legal{display:flex;gap:1.25rem;flex-wrap:wrap}
.footer__legal > *{margin-block-start:0 !important}

/* 17. Motion — entrances -------------------------------------------------
   Reveal targets are listed HERE rather than tagged by JavaScript, so they are
   already hidden on the very first paint and nothing flashes in before it gets
   animated.

   Everything hangs off one gate, `html.reveal-on`, set by the inline script in
   the document head (see functions.php) and only when the browser has
   IntersectionObserver AND the visitor has not asked for reduced motion. So the
   default state — no JavaScript, an old browser, a crawler, reduced motion — is
   plain visible content. hub.js flags itself ready as soon as it runs; if it
   never arrives, the failsafe in the head drops the gate and everything
   appears. Content is never left hidden by a broken script.
   ------------------------------------------------------------------------ */
/* The list is wrapped in :where() so it carries no specificity of its own —
   without it, a two-class target like `.gallery .figure` outranks the
   `.is-revealed` rule below and the element never becomes visible, while
   single-class targets like `.point` work fine. Keep new targets inside the
   :where(), and mirror them in REVEAL_SELECTOR in hub.js, which is what
   actually observes them. */
.reveal-on :where(
  .section .section__head,
  .section .actions,
  .editorial__figure,
  .editorial__body,
  .point,
  .stat,
  .stats__note,
  .highlight,
  .gallery .figure,
  .posts .wp-block-post-template > li,
  .people .person,
  .partner-group,
  .faq__item,
  .daynav,
  .session,
  .contact-list,
  .form,
  .newsletter,
  .article
){
  opacity:0;transform:translateY(var(--reveal-shift));
  transition:opacity .55s var(--ease-out),transform .55s var(--ease-out);
  transition-delay:var(--reveal-delay,0ms)
}
.reveal-on .is-revealed{opacity:1;transform:none}

/* The hero is above the fold on every load, so it plays straight away on a
   CSS-only timeline instead of waiting for an observer. */
.reveal-on .hero__content > *{animation:rh-rise .7s var(--ease-out) both}
.reveal-on .hero__content > :nth-child(1){animation-delay:.06s}
.reveal-on .hero__content > :nth-child(2){animation-delay:.15s}
.reveal-on .hero__content > :nth-child(3){animation-delay:.24s}
.reveal-on .hero__content > :nth-child(4){animation-delay:.33s}
.reveal-on .hero__content > :nth-child(5){animation-delay:.42s}
@keyframes rh-rise{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}

/* 18. Responsive - tablet & mobile ---------------------------------------- */
@media (max-width:1080px){
  .footer__grid{grid-template-columns:1fr 1fr}
  .footer__brand{grid-column:1 / -1}
}
@media (max-width:1024px){
  .editorial{grid-template-columns:1fr;gap:var(--sp-5)}
  .cols-4,.people{grid-template-columns:repeat(2,1fr)}
  .highlights{grid-template-columns:1fr}
  .highlight{border-top:1px solid var(--line);padding:var(--sp-4) 0}
  .highlight:first-child{border-top:2px solid var(--pine)}
  .highlight + .highlight{padding-left:0;border-left:0}
  .stats{grid-template-columns:repeat(2,1fr);gap:var(--sp-4)}
  .stat{border-left:0;padding:var(--sp-4) 0}
  .stat:nth-child(even){border-left:1px solid var(--line-light);padding-left:var(--sp-4)}
  .gallery{grid-template-columns:repeat(4,1fr)}
  .gallery .figure--wide,.gallery .figure--tall{grid-column:span 2}
}
@media (max-width:720px){
  .cols-2,.cols-3,.cols-4,.posts .wp-block-post-template,.people{grid-template-columns:1fr}
  .partner-grid,.partner-grid--3{grid-template-columns:repeat(2,1fr)}
  .point{grid-template-columns:1fr;gap:.3rem}
  .point__num{font-size:var(--step-0)}
  .session{grid-template-columns:1fr;gap:.25rem;padding-block:1rem}
  .session__type{order:-1;color:var(--clay)}
  .gallery{grid-template-columns:repeat(2,1fr)}
  .gallery .figure,.gallery .figure--wide,.gallery .figure--tall{grid-column:span 1;aspect-ratio:4/3}
  .form__row{grid-template-columns:1fr;gap:0}
  .footer__grid{grid-template-columns:1fr}
  .footer__bottom{flex-direction:column}
  .hero.wp-block-cover{min-height:auto}
  .hero .wp-block-cover__inner-container{padding-block:clamp(2.5rem,2rem + 4vw,3.5rem)}
}
@media (max-width:420px){
  .stats{grid-template-columns:1fr}
  .stat:nth-child(even){border-left:0;padding-left:0}
  .partner-grid,.partner-grid--3{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  *{transition:none !important;animation:none !important;scroll-behavior:auto !important}
}

/* Editor-only: never let the sticky masthead or day-tab hiding confuse the
   block editor canvas, and keep hidden programme days visible while editing. */
.editor-styles-wrapper .masthead{position:static}
.editor-styles-wrapper .day{display:block}
