/* Wealth and Migration Summit 2026 — Lisbon Nocturne
   Navy ground, amber as the only warm light, mist as the hour before dawn. */

:root{
  --navy:#121B31;
  --navy-deep:#0A101F;
  --gold:#C2A358;
  --gold-bright:#DCC08B;
  --mist:#C8CCD7;
  --white:#FFFFFF;
  --grey-200:#A2A5A8;
  --grey-400:#414856;
  --navy-wash:#12192D;

  --dawn-low:#1B2643;
  --dawn-blue:#232F52;

  --ink:var(--white);
  --ink-2:var(--mist);
  --rule:rgba(200,204,215,.16);
  --rule-strong:rgba(200,204,215,.32);
  --mist-dim:rgba(200,204,215,.72);

  /* light-surface inks: the register panel is the only paper on the page */
  --ink-dark:var(--navy);
  --ink-dark-soft:rgba(18,27,49,.72);
  --rule-dark:rgba(18,27,49,.14);

  /* scrims: navy laid over photography or content */
  --scrim-nav:rgba(10,16,31,.86);
  --scrim-drawer:rgba(10,16,31,.97);
  --scrim-chip:rgba(10,16,31,.72);
  --scrim-modal:rgba(10,16,31,.72);
  --scrim-clear:rgba(10,16,31,0);
  --scrim-masthead:rgba(10,16,31,.6);
  --wash-clear:rgba(18,25,45,0);
  --wash-hero-top:rgba(18,25,45,.8);
  --wash-hero-bottom:rgba(18,25,45,.62);
  --mist-glow:rgba(200,204,215,.20);
  --mist-haze:rgba(200,204,215,.06);

  /* white and mist laid over navy surfaces and photography */
  --rule-on-panel:rgba(255,255,255,.15);

  /* the hour veil: the two lights whose opacity follows the scroll */
  --veil-top:rgba(30,48,92,.55);
  --veil-bottom:rgba(200,204,215,.10);

  /* gold at low alpha: edges, veils, halos */
  --gold-edge:rgba(194,163,88,.35);
  --gold-fade:rgba(194,163,88,.28);
  --gold-veil:rgba(194,163,88,.10);

  /* light sources — the only elements on this page that cast anything */
  --glow-lamp:0 6px 26px -10px rgba(194,163,88,.6);
  --glow-lamp-hi:0 10px 34px -10px rgba(194,163,88,.8);
  --glow-signal:0 0 14px 2px rgba(194,163,88,.55);
  --glow-line:0 0 12px var(--gold-edge);
  --glow-mark:0 0 0 3px rgba(194,163,88,.18), 0 2px 12px rgba(194,163,88,.5);
  --lift-night:0 40px 90px -50px rgba(0,0,0,.85), 0 0 0 1px var(--gold-edge);

  /* type ramp — every step on the page is one of these */
  --t-display:clamp(2.9rem,7.6vw,6rem);
  --t-display-narrow:clamp(2.4rem,7.6vw,4rem);
  --t-headline:clamp(2rem,4.4vw,3.4rem);
  --t-title:clamp(1.6rem,2.6vw,2.25rem);
  --t-subtitle:clamp(1.5rem,1.8vw,1.75rem);
  --t-lead:1.125rem;
  --t-body:1.0625rem;
  --t-label:.8125rem;
  --t-label-sm:.75rem;
  --t-datum:.9375rem;
  --t-session:1.3rem;            /* a programme session's title */

  --f-text:Archivo,-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
  --f-heading:Caladea,Georgia,"Times New Roman",serif;

  --s2:1rem; --s3:1.5rem; --s4:2rem; --s5:3rem;
  --s6:4.5rem; --s7:7rem; --s8:10rem;

  --r-tile:5px;                 /* the countdown tiles; the only rounded box */

  --gut:clamp(1.25rem,5vw,5.5rem);
  --ease:cubic-bezier(.16,.84,.24,1);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;color-scheme:dark}
body{
  margin:0;
  background:var(--navy);
  color:var(--ink);
  font:400 var(--t-body)/1.65 var(--f-text);
  letter-spacing:.005em;
  overflow-x:clip;
  text-rendering:optimizeLegibility;
}
img{display:block;max-width:100%;height:auto}
h1,h2,h3{margin:0;font-weight:400;text-wrap:balance}
p{margin:0}
a{color:inherit}
ul,ol,dl,dd,dt{margin:0;padding:0}
li{list-style:none}
::selection{background:var(--gold);color:var(--navy)}

/* the hour: one veil over the whole page, shifted by scroll. --hour (0 = blue
   hour, 1 = first dawn) is written on this childless element only, so a scroll
   frame restyles one node and its two lights, not the document. The lights
   fade by opacity, which the compositor can carry. */
@property --hour{syntax:"<number>";inherits:true;initial-value:0}

.veil{position:fixed;inset:0;z-index:0;pointer-events:none}
.veil::before,.veil::after{content:"";position:absolute;inset:0;will-change:opacity}
.veil::before{
  background:radial-gradient(120% 80% at 50% -10%,var(--veil-top) 0%,transparent 60%);
  opacity:calc(1 - var(--hour) * .818);
}
.veil::after{
  background:radial-gradient(100% 60% at 50% 110%,var(--veil-bottom) 0%,transparent 65%);
  opacity:var(--hour);
}
main,.masthead,.dawn,.drawer{position:relative;z-index:1}

.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.skip{
  position:absolute;left:var(--gut);top:.75rem;z-index:60;
  display:inline-flex;align-items:center;min-height:2.75rem;
  padding:.5rem 1.25rem;background:var(--gold);color:var(--navy);
  font:600 var(--t-label)/1 var(--f-text);letter-spacing:.08em;text-transform:uppercase;text-decoration:none;
  transform:translateY(-250%);
  transition:transform .18s var(--ease);
}
.skip:focus{transform:none}

:where(a,button,input):focus-visible{
  outline:2px solid var(--gold-bright);outline-offset:3px;border-radius:0;
}

/* every anchor destination clears the fixed masthead */
main > section[id],.day[id],.dawn[id]{scroll-margin-top:5rem}
.station[id]{scroll-margin-top:6.5rem}

/* ── the wet-street echo under a heading ───────────────────────────── */
[data-echo]{position:relative}
[data-echo]::after{
  content:attr(data-echo);
  position:absolute;left:0;top:100%;width:100%;
  height:.44em;overflow:hidden;
  transform:scaleY(-1);transform-origin:top;
  color:var(--gold);opacity:.2;filter:blur(1.2px);
  -webkit-mask-image:linear-gradient(to bottom,#000,transparent 92%);
          mask-image:linear-gradient(to bottom,#000,transparent 92%);
  pointer-events:none;user-select:none;
  font:inherit;letter-spacing:inherit;
}

/* ── masthead ──────────────────────────────────────────────────────── */
.masthead{
  position:fixed;inset:0 0 auto;z-index:40;
  display:flex;align-items:center;gap:var(--s4);
  padding:.6rem var(--gut);
  border-bottom:1px solid transparent;
  transition:background .3s var(--ease),border-color .3s var(--ease),backdrop-filter .3s var(--ease);
}
.masthead.stuck{
  background:var(--scrim-nav);
  border-bottom-color:var(--rule);
  backdrop-filter:saturate(140%) blur(10px);
}
.mark{
  display:inline-flex;align-items:center;gap:.6rem;margin-right:auto;
  min-height:2.75rem;
  font:400 var(--t-lead)/1 var(--f-heading);letter-spacing:.02em;text-decoration:none;white-space:nowrap;
}
.mark__symbol{
  height:1.6rem;width:auto;flex:0 0 auto;
}
.routes{display:flex;gap:clamp(.9rem,2vw,2rem)}
.routes a{
  position:relative;display:inline-flex;align-items:center;min-height:2.75rem;
  color:var(--ink-2);text-decoration:none;
  font:500 var(--t-label)/1 var(--f-text);letter-spacing:.1em;text-transform:uppercase;
  transition:color .2s var(--ease);
}
.routes a::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:var(--gold);transform:scaleX(0);transform-origin:left;
  transition:transform .32s var(--ease);
}
.routes a:hover,.routes a:focus-visible,.routes a[aria-current="true"]{color:var(--white)}
.routes a:hover::after,.routes a:focus-visible::after,.routes a[aria-current="true"]::after{transform:scaleX(1)}

.burger{display:none;flex:0 0 auto;width:2.75rem;height:2.75rem;padding:0;border:0;background:transparent;cursor:pointer}
.burger span[aria-hidden]{display:block;width:1.1rem;height:1px;margin:0 auto;background:var(--mist);box-shadow:0 -5px 0 var(--mist),0 5px 0 var(--mist);transition:box-shadow .2s var(--ease)}
.burger[aria-expanded="true"] span[aria-hidden]{box-shadow:none}
.drawer{
  position:fixed;inset:3.95rem 0 auto;z-index:39;
  display:grid;gap:.25rem;padding:var(--s3) var(--gut) var(--s4);
  background:var(--scrim-drawer);border-bottom:1px solid var(--rule);
  backdrop-filter:blur(10px);
  opacity:1;transform:translateY(0);
  transition:opacity .22s var(--ease),transform .22s var(--ease),display .22s var(--ease) allow-discrete;
}
.drawer[hidden]{
  display:none;opacity:0;transform:translateY(-6px);
  transition-duration:.16s;
}
@starting-style{
  .drawer:not([hidden]){opacity:0;transform:translateY(-6px)}
}
.drawer a{
  display:flex;align-items:center;min-height:2.75rem;
  padding:.6rem 0;border-bottom:1px solid var(--rule);
  color:var(--ink);text-decoration:none;
  font:500 var(--t-datum)/1 var(--f-text);letter-spacing:.1em;text-transform:uppercase;
}
.drawer .lit{margin-top:var(--s2);padding:.95rem 1.5rem;border-bottom:0;justify-self:start}

/* ── actions ───────────────────────────────────────────────────────── */
.lit,.quiet{
  display:inline-flex;align-items:center;gap:.5rem;min-height:2.75rem;
  padding:.95rem 1.5rem;text-decoration:none;white-space:nowrap;
  font:600 var(--t-label)/1 var(--f-text);letter-spacing:.1em;text-transform:uppercase;
  border:1px solid transparent;cursor:pointer;background:transparent;appearance:none;
  transition:background .25s var(--ease),color .25s var(--ease),box-shadow .25s var(--ease),border-color .25s var(--ease),transform .25s var(--ease);
}
.lit{background:var(--gold);color:var(--navy);box-shadow:var(--glow-lamp)}
.lit:hover,.lit:focus-visible{background:var(--gold-bright);box-shadow:var(--glow-lamp-hi);transform:translateY(-1px)}
.lit--sm{padding:.7rem 1.1rem;min-height:2.75rem}
.masthead:not(.stuck) .lit--sm{
  background:transparent;color:var(--ink-2);border-color:var(--rule);box-shadow:none;
}
.masthead:not(.stuck) .lit--sm:hover,.masthead:not(.stuck) .lit--sm:focus-visible{
  color:var(--white);border-color:var(--mist);transform:none;
}
.quiet{color:var(--ink-2);border-color:var(--rule)}
.quiet:hover,.quiet:focus-visible{color:var(--white);border-color:var(--mist)}

/* ── 1. skyline: hero ──────────────────────────────────────────────── */
/* photo + navy wash on the left, a navy card (countdown, facts, partners)
   on the right; the card drops below the copy under 1080px */
.skyline{
  position:relative;min-height:100svh;isolation:isolate;
  display:grid;
  grid-template-columns:minmax(0,1fr) clamp(24rem,31.4vw,37.7rem);
  align-items:center;
  gap:var(--s5) clamp(2rem,3.4vw,4rem);
  padding:clamp(7.5rem,9vw,9rem) var(--gut) clamp(4rem,5.2vw,6.25rem);
}
.skyline__plate{position:absolute;inset:0;z-index:-1;overflow:hidden}
.skyline__plate img{width:100%;height:100%;object-fit:cover;object-position:50% 50%}
.skyline__plate::after{
  content:"";position:absolute;inset:0;
  background:
    linear-gradient(to bottom,var(--scrim-masthead) 0,var(--scrim-clear) 7rem),
    linear-gradient(65.4deg,var(--navy-wash) 0%,var(--wash-clear) 103.7%);
}
.skyline__body{display:flex;flex-direction:column;align-items:flex-start;min-width:0}
.service{
  color:var(--gold);font:600 var(--t-lead)/1.35 var(--f-text);letter-spacing:.06em;text-transform:uppercase;
}
.destination{
  margin-top:clamp(1.25rem,1.7vw,2rem);
  font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-display-narrow);line-height:1.07;letter-spacing:-.01em;
  text-wrap:pretty;
}
.lede{
  margin-top:clamp(1.75rem,3.2vw,3.8rem);max-width:40.25rem;
  color:var(--ink-2);font-size:var(--t-lead);line-height:1.5;
}
.acts{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:clamp(1.75rem,3.2vw,3.8rem)}
.lit--hero{
  padding:1.15rem 1.5rem;min-height:3.25rem;
  box-shadow:none;
}
.lit--hero:hover,.lit--hero:focus-visible{box-shadow:var(--glow-lamp-hi)}

.skyline__card{
  min-width:0;background:var(--navy-deep);
  padding:clamp(1.5rem,3.1vw,3.75rem) clamp(1.25rem,2.1vw,2.5rem);
  display:flex;flex-direction:column;
}
.ticker{padding-bottom:clamp(1.5rem,2.1vw,2.5rem);display:flex;flex-direction:column;gap:1.25rem}
.ticker__label{
  font:600 var(--t-label)/1.4 var(--f-text);letter-spacing:.16em;text-transform:uppercase;color:var(--gold);
}
.ticker__units{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(.5rem,1.04vw,1.25rem)}
.ticker__unit{
  display:flex;flex-direction:column-reverse;align-items:center;justify-content:center;gap:.6rem;
  min-height:clamp(5.75rem,6.15vw,7.375rem);padding:.6rem .2rem;
  border:1px solid var(--rule);border-radius:var(--r-tile);text-align:center;
}
.ticker__num{
  font:400 var(--t-headline)/1 var(--f-heading);
  color:var(--white);font-variant-numeric:tabular-nums;
}
.ticker__name{
  font:500 var(--t-label-sm)/1.2 var(--f-text);
  letter-spacing:.04em;text-transform:uppercase;
  color:var(--mist);opacity:.7;
}

.skyline__facts{display:flex;flex-direction:column}
@media (min-width:1081px) and (max-height:860px){
  .skyline{padding-block:7rem 3rem}
  .skyline__card{padding-block:1.75rem}
  .ticker{padding-bottom:1.25rem}
  .ticker__unit{min-height:5.25rem}
  .plate{padding-block:.625rem}
  .skyline__partners{padding-top:1rem}
  .skyline__strategic{margin-top:1rem;padding-top:1rem}
  .strategic__logos{margin-top:.75rem}
  .partner{gap:1rem}
}
@media (max-width:360px){
  .ticker__units{grid-template-columns:repeat(2,minmax(0,1fr))}
}
.plate{padding:clamp(.75rem,1vw,1.125rem) 0;border-top:1px solid var(--rule)}
.plate dt{color:var(--grey-200);font:500 var(--t-label)/1.07 var(--f-text);letter-spacing:.16em;text-transform:uppercase}
.plate dd{margin-top:.75rem;font-family:var(--f-heading);font-weight:400;font-size:var(--t-lead);line-height:1.2;color:var(--gold)}

.skyline__partners{
  display:flex;flex-wrap:wrap;align-items:flex-start;gap:1.5rem clamp(1rem,2.5vw,4.875rem);
  padding-top:clamp(1.25rem,1.56vw,1.875rem);border-top:1px solid var(--rule);
}
.partner{display:flex;flex-direction:column;gap:1.5rem;min-width:0}
.partner__logo{display:flex;align-items:center;gap:.67rem;height:3.975rem}
.partner__logo img{display:block;width:auto;height:100%;max-width:none}
.partner__logo--gcs img + img{height:72.7%}
a.partner__logo{text-decoration:none}
.skyline__strategic{
  margin-top:clamp(1.25rem,1.56vw,1.875rem);padding-top:clamp(1.25rem,1.56vw,1.875rem);
  border-top:1px solid var(--rule);
}
.strategic__label{color:var(--grey-200);font:500 var(--t-label)/1.07 var(--f-text);letter-spacing:.16em;text-transform:uppercase}
.strategic__logos{
  display:flex;flex-wrap:wrap;align-items:center;gap:1rem clamp(1.5rem,2.5vw,3rem);
  list-style:none;margin:1rem 0 0;padding:0;
}
.strategic__logos img{display:block;height:2.5rem;width:auto;max-width:100%}
.strategic__logos .strategic__logo--bison{height:2rem}

/* ── 2. street canyon ──────────────────────────────────────────────── */
.canyon{
  display:grid;grid-template-columns:minmax(0,1fr);
  gap:clamp(1.5rem,3vw,3rem);
  padding:clamp(2.5rem,5.5vw,5rem) var(--gut);
  background:var(--navy-deep);
  border-top:1px solid var(--rule);
}
.say{
  font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-headline);line-height:1.0;letter-spacing:-.01em;
  max-width:30ch;
}
.say--wide{max-width:34ch}
/* about: the heading holds the left column at its usual size, the copy
   runs in the right; stacked below 1080px */
.canyon__text{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);
  gap:clamp(2rem,5vw,5rem);align-items:start;
}
.canyon__text p{margin-top:clamp(1.75rem,3vw,2.25rem);max-width:68ch;color:var(--ink-2);line-height:1.72}
.canyon__text p:first-of-type{margin-top:0;color:var(--ink);font-size:var(--t-lead)}
.canyon__text > *{
  opacity:1;transform:translateY(0);
  transition:opacity .6s var(--ease),transform .6s var(--ease);
  transition-delay:calc(var(--i,0) * 90ms);
}
.canyon.arming .canyon__text > *{opacity:0;transform:translateY(24px)}
.room-h{
  color:var(--ink);font:400 var(--t-lead)/1.1 var(--f-heading);letter-spacing:-.005em;
}
.room--cards{
  margin-top:var(--s3);
  display:grid;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));gap:1rem;
}
.room--cards.arming li{opacity:0;transform:translateY(28px)}
.room--cards li{
  border:1px solid var(--rule);
  padding:1.35rem clamp(1.25rem,2vw,1.75rem);
  color:var(--ink);font-size:var(--t-body);
  opacity:1;transform:translateY(0);
  transition:opacity .5s var(--ease),transform .5s var(--ease);
  transition-delay:calc(var(--i,0) * 70ms);
}
.room--cards li::before{content:none}
.room__icon{
  display:block;width:1.75rem;height:1.75rem;margin-bottom:.9rem;
  fill:none;stroke:var(--gold);stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;
}

/* ── 3. the line: the programme ────────────────────────────────────── */
.line{
  padding:clamp(2.5rem,5.5vw,5rem) var(--gut) clamp(2.5rem,5vw,4.5rem);
  background:var(--navy-deep);
  border-top:1px solid var(--rule);
}
.line__disclaimer{margin-top:1.25rem;margin-bottom:clamp(2rem,4vw,3rem);max-width:68ch;color:var(--ink);font-size:var(--t-lead);line-height:1.62}
.days{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:clamp(2.5rem,5vw,5.5rem);
  margin-top:clamp(3.5rem,7vw,6rem);
}
.day__head{padding-bottom:var(--s3);border-bottom:1px solid var(--rule)}
.day__when{display:block;color:var(--gold);font:500 var(--t-label)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase}
.day__theme{
  margin:0;font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-title);line-height:1.05;letter-spacing:-.005em;color:var(--white);
}
.day__name{display:block;margin-top:.85rem}
.stations{position:relative;margin-top:var(--s2);padding-left:1.75rem}
.stations__label{margin-top:var(--s3);color:var(--gold);font:500 var(--t-label)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase}
.stations__label + .stations{margin-top:.5rem}
.stations::before{
  content:"";position:absolute;left:.2rem;top:.9rem;bottom:.9rem;width:2px;
  background:linear-gradient(to bottom,var(--gold),var(--gold-fade));
  box-shadow:var(--glow-line);
  transform:scaleY(1);transform-origin:top;
  transition:transform 1.5s var(--ease);
}
.line.arming .stations::before{transform:scaleY(0)}
.station{position:relative}
.station::before{
  content:"";position:absolute;left:-1.74rem;top:1.5rem;width:.5rem;height:.5rem;border-radius:50%;
  background:var(--navy-deep);border:1px solid var(--gold);
  opacity:1;transform:scale(1);
  transition:opacity .5s var(--ease),transform .5s var(--ease),background .25s var(--ease),box-shadow .25s var(--ease);
  transition-delay:calc(var(--i,0) * 55ms);
}
.line.arming .station::before{opacity:0;transform:scale(.4);transition-delay:0s}
.station__row{
  display:grid;grid-template-columns:4.25rem 1fr;gap:1rem;align-items:baseline;
  padding:.95rem 0;border-bottom:1px solid var(--rule);
}
.station time{
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;
  color:var(--ink-2);font-size:var(--t-datum);letter-spacing:.02em;
  transition:color .25s var(--ease);
}
.station__row span{color:var(--ink);font-size:var(--t-body);line-height:1.45;text-wrap:pretty;transition:color .25s var(--ease)}
/* the part of a title after its colon runs on in the same line, in a thin weight */
.station__row .station__sub{font-weight:100;color:var(--mist)}
.station--break .station__row span{color:var(--mist);font-style:italic}
/* hover or focus on a row lights its station and warms the time and title */
.station:has(.station__row:hover)::before{background:var(--gold);box-shadow:var(--glow-signal)}
.station__row:hover time,.station__row:hover span{color:var(--gold)}
/* a session reached by its #id: its station lights, its title warms */
.station:target::before{background:var(--gold);box-shadow:var(--glow-signal)}
.station:target .station__row span{color:var(--gold-bright)}
.terminus{
  margin-top:var(--s3);padding:.95rem 0 0 1.75rem;position:relative;
  color:var(--ink-2);font-size:var(--t-datum);letter-spacing:.02em;
}
.terminus::before{
  content:"";position:absolute;left:0;top:1.45rem;width:.5rem;height:.5rem;
  background:var(--gold);opacity:.55;
}
/* the sponsors strip sits right under the hero, in the programme's deep night */
.sponsors{
  padding:clamp(1.75rem,3.5vw,3rem) 0;
  background:var(--navy-deep);border-top:1px solid var(--rule);
}
/* programme heading with the Summit's host beside it */
.line__head{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:var(--s4) clamp(2rem,5vw,5rem);align-items:center;
  margin-bottom:clamp(2rem,4.5vw,4rem);
}
.line__head .say{max-width:none}
.host{display:flex;align-items:flex-start;gap:clamp(1.25rem,2vw,1.75rem)}
.host[hidden]{display:none}
.host__photo{
  flex:0 0 auto;display:block;width:clamp(9rem,14vw,13rem);aspect-ratio:1;object-fit:cover;
  filter:saturate(.88) brightness(.92);
}
.host__text{min-width:0}
.host__key{color:var(--gold);font:500 var(--t-label-sm)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase}
.host__name{
  margin-top:.6rem;font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-subtitle);line-height:1.1;letter-spacing:.005em;color:var(--white);
}
.host__role{margin-top:.35rem;color:var(--ink);font:400 var(--t-datum)/1.4 var(--f-text);letter-spacing:.02em}
.host__bio{margin-top:.75rem;max-width:44ch;color:var(--ink-2);font:400 var(--t-datum)/1.55 var(--f-text);letter-spacing:.02em}

/* ── 3a. speakers: portraits in the same dark ──────────────────────── */
.faces{
  padding:clamp(2.5rem,5.5vw,5rem) var(--gut);
  background:var(--navy-deep);
  border-top:1px solid var(--rule);
}
.faces__intro{margin-top:clamp(1.75rem,3vw,2.25rem);max-width:60ch;color:var(--ink-2);font-size:var(--t-lead);line-height:1.62}
.faces__grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));
  gap:clamp(1.75rem,3vw,2.25rem) clamp(1.25rem,2.5vw,1.75rem);
  margin-top:clamp(3rem,6vw,4.5rem);
}
.faces__grid li{
  height:100%;
  opacity:1;transform:translateY(0);
  transition:opacity .5s var(--ease),transform .5s var(--ease);
  transition-delay:calc(var(--i,0) * 45ms);
}
.faces__grid.arming li{opacity:0;transform:translateY(28px);transition-delay:0s}
.speaker{
  display:flex;flex-direction:column;align-items:flex-start;width:100%;height:100%;
  padding:0;margin:0;border:0;background:transparent;
  text-align:left;cursor:pointer;appearance:none;font:inherit;color:inherit;
}
.speaker__plate{position:relative;display:block;width:100%;aspect-ratio:1/1;overflow:hidden}
.speaker__plate img{
  width:100%;height:100%;object-fit:cover;
  filter:saturate(.88) brightness(.92);
  transition:filter .35s var(--ease),transform .6s var(--ease);
}
.speaker__plate::after{
  content:"";position:absolute;inset:auto 0 0;height:42%;
  background:linear-gradient(to top,var(--navy-deep) 8%,transparent);
  pointer-events:none;
}
.speaker:hover .speaker__plate img,.speaker:focus-visible .speaker__plate img{
  filter:saturate(1) brightness(1.02);transform:scale(1.035);
}
.speaker__plate--empty{
  display:flex;align-items:center;justify-content:center;
  background:var(--dawn-low);
}
.speaker__initials{
  font-family:var(--f-heading);font-weight:400;font-size:var(--t-title);
  color:var(--gold);opacity:.55;letter-spacing:.02em;
}
.speaker__cap{display:flex;flex-direction:column;flex:1 1 auto;width:100%;margin-top:.85rem}
.speaker__name{
  display:block;font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-lead);line-height:1.2;letter-spacing:.005em;color:var(--white);
}
.speaker__role{
  display:block;margin-top:.35rem;color:var(--ink-2);
  font:400 var(--t-datum)/1.4 var(--f-text);letter-spacing:.02em;
}
.speaker__cta{
  display:inline-flex;align-items:center;gap:.4rem;margin-top:auto;padding-top:.65rem;
  color:var(--gold);font:600 var(--t-label-sm)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase;
  opacity:.82;transition:opacity .2s var(--ease),gap .2s var(--ease);
}
.speaker:hover .speaker__cta,.speaker:focus-visible .speaker__cta{opacity:1;gap:.6rem}
/* the bio panel only exists on the mobile accordion; wider screens open the modal */
.speaker__panel{display:none}

/* ── speaker modal: photo, name and role, then the bio ─────────────── */
.modal__panel--speaker{max-width:38rem}
.speaker-modal__head{display:flex;align-items:flex-start;gap:1.25rem}
.speaker-modal__plate{
  position:relative;flex:0 0 auto;width:5.5rem;height:5.5rem;overflow:hidden;
  background:var(--dawn-low);
}
.speaker-modal__photo{width:100%;height:100%;object-fit:cover;display:block}
.speaker-modal__photo[hidden]{display:none}
.speaker-modal__initials{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-family:var(--f-heading);font-weight:400;font-size:var(--t-title);color:var(--gold);opacity:.55;
}
.speaker-modal__initials[hidden]{display:none}
.speaker-modal__who{min-width:0}
.modal__panel--speaker .speaker-modal__who h2{
  padding-right:0;font-size:var(--t-session);line-height:1.15;letter-spacing:.005em;
}
.modal__panel--speaker .speaker-modal__role{margin-top:.2rem;color:var(--ink-dark-soft);font:400 var(--t-datum)/1.4 var(--f-text);letter-spacing:.02em}
#speaker-modal-bio{margin-top:var(--s4)}

/* ── 4. the river mirror ───────────────────────────────────────────── */
.mirror{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);
  gap:clamp(2rem,4vw,3.5rem) clamp(2rem,5vw,5rem);
  align-items:center;
  padding:clamp(2.5rem,5.5vw,5rem) var(--gut);
  background:linear-gradient(to bottom,var(--navy-deep),var(--navy));
  border-top-width:1px;
  border-top-style:solid;
  border-top-color:var(--rule);
}
.mirror__text{grid-column:1;align-self:center}
.mirror__text p{margin-top:clamp(1.75rem,3vw,2.25rem);max-width:60ch;color:var(--ink-2);line-height:1.72}
.mirror__text p:first-of-type{margin-top:clamp(2.5rem,4vw,3.25rem)}
.mirror__plate{grid-column:2;grid-row:1;margin:0;position:relative}
.mirror__plate img{width:100%;aspect-ratio:3/2;object-fit:cover}
.mirror__plate::after{
  content:"";position:absolute;inset:auto 0 0;height:38%;
  background:linear-gradient(to top,var(--navy) 6%,transparent);
}
.mirror__text > *{
  opacity:1;transform:translateY(0);
  transition:opacity .6s var(--ease),transform .6s var(--ease);
  transition-delay:calc(var(--i,0) * 90ms);
}
.mirror.arming .mirror__text > *{opacity:0;transform:translateY(24px)}
.mirror.arming .mirror__plate{opacity:0;transform:translateY(32px)}
.mirror__plate{
  opacity:1;transform:translateY(0);
  transition:opacity .7s var(--ease),transform .7s var(--ease);
  transition-delay:180ms;
}
.mirror figcaption{
  position:absolute;left:1rem;bottom:1rem;z-index:1;
  padding:.45rem .8rem;background:var(--scrim-chip);backdrop-filter:blur(4px);
  color:var(--mist);font:500 var(--t-label-sm)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase;
}

/* ── 5a. registration rates: the panel ───────────────────────────────
   The tier markup keeps its data-tier-* contract (site.js marks the tier
   whose window contains today with .tier--now). Rates stay in calendar
   order, ruled apart; the live one is set large with its price in gold, the
   others are compact rows, and a closed rate is struck through. */
.tiers{display:flex;flex-direction:column;gap:2rem;margin:0;padding:0;list-style:none}
.tier{
  display:grid;grid-template-columns:minmax(0,1fr) auto;
  grid-template-areas:"name price" "when price";
  align-items:center;column-gap:1rem;row-gap:.375rem;
}
.tier + .tier{padding-top:2rem;border-top:1px solid var(--rule-on-panel)}
.tier__name{grid-area:name;color:var(--grey-200);font:400 var(--t-body)/1.35 var(--f-text)}
.tier__price{
  grid-area:price;font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-title);line-height:1;color:var(--grey-200);font-variant-numeric:tabular-nums;
}
.tier__when{grid-area:when;color:var(--grey-200);font-size:var(--t-label);line-height:1.3}
.tier--now .tier__name{
  display:flex;flex-wrap:wrap;align-items:center;gap:.5rem .75rem;
  color:var(--white);font:400 var(--t-subtitle)/1.2 var(--f-text);
}
.tier--now .tier__price{font-size:var(--t-headline);letter-spacing:-.02em;color:var(--gold)}
.tier--now .tier__when{color:var(--mist);font-size:var(--t-datum)}
.tier__flag{
  flex:0 0 auto;padding:.3rem .625rem;background:var(--gold);color:var(--navy-deep);
  font:600 var(--t-label-sm)/1 var(--f-text);letter-spacing:.1em;text-transform:uppercase;
}
/* a closed rate stays on the line as a record, dimmed and struck through */
.tier--expired .tier__name,.tier--expired .tier__price,.tier--expired .tier__when{
  opacity:.8;text-decoration:line-through;text-decoration-thickness:1px;
}
.tier--expired .tier__price{text-decoration-thickness:2px}
.visually-hidden{
  position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}


/* ── 5b. register: claim your seat ─────────────────────────────────── */
.reg{background:var(--white);color:var(--navy-deep);padding:clamp(2.5rem,4.2vw,4rem) var(--gut)}
.reg__inner{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:clamp(2.5rem,5.5vw,5.5rem);align-items:start;
}
.reg__invite{display:flex;flex-direction:column;gap:1.75rem;min-width:0}
.reg__invite h2{
  font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-headline);line-height:1.02;letter-spacing:-.01em;
  color:var(--navy-deep);text-wrap:balance;
}
.reg__intro{color:var(--grey-400);font-size:var(--t-body);line-height:1.55}
.reg__included{display:flex;flex-direction:column;gap:.5rem;padding-top:.75rem}
.reg__label{
  display:flex;align-items:center;gap:.875rem;
  color:var(--grey-400);font:600 var(--t-label-sm)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase;
}
.reg__label::before{content:"";width:1.75rem;height:2px;background:var(--gold);flex:0 0 auto}
.reg__list{list-style:none;margin:0;padding:0}
.reg__list li{
  display:flex;gap:1rem;align-items:flex-start;padding:1rem 0;
  border-bottom:1px solid var(--rule-dark);
  font-size:var(--t-body);line-height:1.4;color:var(--navy-deep);
}
.reg__list li::before{
  content:"";flex:0 0 1.125rem;height:1.125rem;
  background:url("../img/reg-check.svg") center/contain no-repeat;
}
.reg__rates{display:flex;flex-direction:column;gap:1.25rem;min-width:0}
.reg__panel{
  position:relative;display:flex;flex-direction:column;gap:2rem;
  padding:clamp(1.5rem,2.5vw,2.25rem);background:var(--navy-deep);color:var(--white);
}
.reg__panel::before{content:"";position:absolute;inset:0 0 auto;height:3px;background:var(--gold)}
.reg__panel-label{color:var(--mist);font:500 var(--t-label-sm)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase}
.reg__cta{
  display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:3.625rem;padding:0 1.5rem;
  background:var(--gold);color:var(--navy-deep);text-decoration:none;
  font:600 var(--t-label)/1 var(--f-text);letter-spacing:.1em;text-transform:uppercase;
  transition:background .25s var(--ease),box-shadow .25s var(--ease);
}
.reg__cta img{width:1.25rem;height:1.25rem;transition:transform .25s var(--ease)}
.reg__cta:hover,.reg__cta:focus-visible{background:var(--gold-bright);box-shadow:var(--glow-lamp-hi)}
.reg__cta:hover img,.reg__cta:focus-visible img{transform:translateX(3px)}
.reg__limit{display:flex;align-items:center;gap:.75rem;padding:0 .5rem;color:var(--grey-400);font-size:var(--t-label);line-height:1.3}
.reg__limit img{flex:0 0 auto;width:1.1875rem;height:1.1875rem}
@media (max-width:1080px){
  .reg__inner{grid-template-columns:minmax(0,1fr)}
}
@media (max-width:480px){
  .reg__panel{gap:1.5rem}
  .tiers{gap:1.5rem}
  .tier + .tier{padding-top:1.5rem}
}
@media (prefers-reduced-motion:reduce){
  .reg__cta img{transition:none}
  .reg__cta:hover img,.reg__cta:focus-visible img{transform:none}
}
/* The HubSpot form arrives in its own iframe. We own the space it sits in and
   nothing inside it: fields, labels and the button are themed in the HubSpot
   form editor (see HUBSPOT.md for the values this design expects). */
.hs-form-frame iframe{width:100%!important;border:0;display:block}

/* ── 5b. partner modal ────────────────────────────────────────────── */
.modal{
  padding:0;border:0;background:transparent;
  max-width:min(34rem,calc(100vw - 2.5rem));max-height:calc(100vh - 3rem);max-height:calc(100dvh - 3rem);
  overflow:visible;
  opacity:0;transform:translateY(10px) scale(.98);
  transition:opacity .2s var(--ease),transform .2s var(--ease),
             overlay .2s var(--ease) allow-discrete,display .2s var(--ease) allow-discrete;
}
.modal[open]{
  opacity:1;transform:none;
  transition-duration:.32s;
}
@starting-style{
  .modal[open]{opacity:0;transform:translateY(10px) scale(.98)}
}
.modal::backdrop{
  background:var(--scrim-clear);
  transition:background .2s var(--ease),overlay .2s var(--ease) allow-discrete,display .2s var(--ease) allow-discrete;
}
.modal[open]::backdrop{background:var(--scrim-modal);transition-duration:.32s}
@starting-style{
  .modal[open]::backdrop{background:var(--scrim-clear)}
}
.modal__panel{
  position:relative;max-height:calc(100vh - 3rem);max-height:calc(100dvh - 3rem);overflow:auto;
  padding:clamp(2rem,4vw,3rem);
  background:var(--white);color:var(--ink-dark);
  box-shadow:var(--lift-night);
}
.modal__panel h2{
  padding-right:2.75rem;
  font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-headline);line-height:1.05;letter-spacing:-.01em;color:var(--ink-dark);
}
.modal__panel p{margin-top:var(--s3);max-width:46ch;color:var(--ink-dark-soft);line-height:1.68}
.modal .hs-form-frame{margin-top:var(--s4);min-height:22rem}
.modal__close{
  position:absolute;top:1rem;right:1rem;
  width:2.75rem;height:2.75rem;display:grid;place-items:center;
  border:1px solid var(--rule-strong);background:transparent;color:var(--ink-dark);
  font-size:var(--t-subtitle);line-height:1;cursor:pointer;z-index:2;
  transition:color .2s var(--ease),border-color .2s var(--ease);
}
.modal__close:hover,.modal__close:focus-visible{color:var(--navy);border-color:var(--navy)}
@media (max-width:600px){
  .modal__panel{padding:1.5rem}
  .acts{flex-direction:column;align-items:stretch;align-self:stretch}
  .acts a,.acts button{justify-content:center}
}

/* ── 6. sponsors carousel ─────────────────────────────────────────── */
.beacon__logos-viewport{overflow:hidden;width:100%;-webkit-mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(to right,transparent,#000 8%,#000 92%,transparent)}
.beacon__logos{
  position:relative;z-index:1;
  display:flex;align-items:center;flex-wrap:nowrap;justify-content:flex-start;
  list-style:none;margin:0;padding:0;width:max-content;
  gap:clamp(2rem,5vw,4rem);
  animation:beacon-drift 34s linear infinite;
}
/* moving content stops on hover and on focus inside */
.beacon__logos-viewport:hover .beacon__logos,
.beacon__logos-viewport:focus-within .beacon__logos{animation-play-state:paused}
.beacon__logos li{display:flex;align-items:center;justify-content:center}
.beacon__logos li[aria-hidden]{display:flex}
.beacon__logos img{display:block;height:2.5rem;width:auto;max-width:11rem;object-fit:contain;opacity:.85}
@keyframes beacon-drift{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ── 7. first dawn: footer ─────────────────────────────────────────── */
.dawn{
  position:relative;isolation:isolate;
  padding:clamp(2rem,4vw,3.5rem) var(--gut) var(--s5);
  background:linear-gradient(to bottom,var(--navy) 0%,var(--dawn-low) 52%,var(--dawn-blue) 100%);
  border-top:1px solid var(--rule);
}
.dawn::before{
  content:"";position:absolute;inset:auto 0 0;height:60%;z-index:-1;
  background:radial-gradient(120% 100% at 50% 130%,var(--mist-glow) 0%,var(--mist-haze) 45%,transparent 72%);
}
.dawn__who{max-width:52ch}
.dawn__logo{display:block;width:100px;height:auto}
.dawn__what{margin-top:var(--s2);color:var(--ink-2);line-height:1.7}
.dawn__act{margin-top:var(--s3)}
.dawn__who--split{
  max-width:none;display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
  gap:var(--s4) var(--s5);
}
.dawn__id{max-width:52ch}
.dawn__home{display:block;flex:none}
.dawn__lisboa{display:block;flex:none;width:min(100%,24rem);height:auto}
.ledger{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;
  margin-top:clamp(3rem,6vw,4.5rem);
  border-top:1px solid var(--rule);
}
.ledger > div{padding:var(--s3) clamp(1rem,2.5vw,2rem) var(--s3) 0}
.ledger > div + div{padding-left:clamp(1rem,2.5vw,2rem);border-left:1px solid var(--rule)}
.ledger dt{font-family:var(--f-heading);font-weight:400;font-size:var(--t-subtitle);line-height:1;color:var(--gold)}
.ledger dd{margin-top:.6rem;color:var(--ink-2);font-size:var(--t-datum);line-height:1.55}
.dawn__base{
  display:flex;flex-wrap:wrap;justify-content:space-between;gap:.75rem var(--s4);
  margin-top:var(--s5);padding-top:var(--s3);border-top:1px solid var(--rule);
  color:var(--mist-dim);font-size:var(--t-label);letter-spacing:.02em;
}
.dawn__base a{display:inline-flex;align-items:center;min-height:2.75rem}

/* the fixed bar is a mobile pattern; see the 900px block */
.dock{display:none}

/* ── narrow ────────────────────────────────────────────────────────── */
@media (max-width:1080px){
  .skyline{grid-template-columns:minmax(0,1fr);align-items:start;min-height:0;padding-top:8rem}
  .skyline__plate::after{background:linear-gradient(to bottom,var(--wash-hero-top) 0%,var(--wash-hero-bottom) 100%)}
  .canyon__text{grid-template-columns:1fr}
  .days{grid-template-columns:1fr;gap:clamp(3rem,8vw,4.5rem)}
  .line__head{grid-template-columns:minmax(0,1fr)}
  .mirror{grid-template-columns:1fr}
  .mirror__text,.mirror__plate{grid-column:1}
  .mirror__plate{grid-row:auto;order:-1}
  .hs-form-frame{min-height:42rem}
}
/* the lockup, five routes and the action need about 1160px side by side;
   below that the routes fold into the drawer rather than run into the mark */
@media (max-width:1200px){
  .routes,.masthead .lit--sm{display:none}
  .burger{display:block}
  .masthead{gap:var(--s2)}
  .mark{min-width:0}
}
@media (max-width:900px){
  .skyline{padding-top:7rem}
  .skyline__partners{flex-wrap:nowrap;justify-content:flex-start;align-items:center;gap:1.5rem}
  .partner__logo{height:clamp(2.5rem,11vw,3.5rem)}
  /* fixed "Secure your place" bar: links to the claim-your-seat page from anywhere;
     scroll-padding keeps a focused element from sliding in behind it */
  html{scroll-padding-bottom:calc(5rem + env(safe-area-inset-bottom))}
  .dock{
    display:block;position:fixed;inset:auto 0 0;z-index:20;
    padding:.75rem var(--gut) calc(.75rem + env(safe-area-inset-bottom));
    background:var(--navy-deep);border-top:1px solid var(--grey-400);
    transition:transform .3s var(--ease),opacity .3s var(--ease),visibility .3s;
  }
  .dock.is-away{transform:translateY(100%);opacity:0;visibility:hidden;pointer-events:none}
  .dock__cta{width:100%;justify-content:center}
  .dawn{padding-bottom:calc(var(--s5) + 4.5rem)}
  .station__row{grid-template-columns:3.5rem 1fr;gap:.85rem}
  /* the two days become an accordion: ruled rows, a gold arrow that turns over,
     no card and no photo (the speakers' accordion is the card one) */
  .line--acc .days{gap:0;margin-top:var(--s4);border-bottom:1px solid var(--rule)}
  .line--acc .day{border-top:1px solid var(--rule)}
  .line--acc .day.is-open{border-top-color:var(--gold-edge)}
  .line--acc .day__head{padding:0;border-bottom:0}
  .day__toggle{
    position:relative;display:block;width:100%;min-height:2.75rem;
    padding:var(--s3) 2.5rem var(--s3) 0;border:0;background:transparent;cursor:pointer;
    color:inherit;font:inherit;letter-spacing:inherit;text-align:left;
  }
  .day__toggle::after{
    content:"";position:absolute;right:.4rem;top:50%;width:.6rem;height:.6rem;margin-top:-.45rem;
    border:solid var(--gold);border-width:0 2px 2px 0;transform:rotate(45deg);
    transition:transform .3s var(--ease);
  }
  .day__toggle[aria-expanded="true"]::after{transform:rotate(225deg)}
  .line--acc .day__body{
    display:grid;grid-template-rows:0fr;visibility:hidden;
    transition:grid-template-rows .35s var(--ease),visibility .35s;
  }
  .line--acc .day.is-open .day__body{grid-template-rows:1fr;visibility:visible}
  .line--acc.is-jumping .day__body{transition:none}
  .line--acc .day__body-in{min-height:0;overflow:hidden;padding-inline:.75rem;margin-inline:-.75rem}
  .line--acc .day__body-in > :last-child{margin-bottom:var(--s3)}
  .beacon__logos img{height:2rem}
  .ledger{grid-template-columns:1fr}
  .ledger > div{padding-right:0;border-bottom:1px solid var(--rule)}
  .ledger > div + div{padding-left:0;border-left:0}
  .ledger > div:last-child{border-bottom:0}
  [data-echo]::after{display:none}
  .room--cards{grid-template-columns:repeat(2,1fr)}
  .faces__grid{grid-template-columns:repeat(3,1fr)}
  .speaker-modal__head{gap:1rem}
  .speaker-modal__plate{width:4.5rem;height:4.5rem}
}
@media (max-width:480px){
  .room--cards{grid-template-columns:repeat(2,1fr)}
  .faces__grid{grid-template-columns:repeat(2,1fr)}
}
/* speakers become an accordion in the programme's language: ruled rows, no
   card, the same gold arrow that turns over. The whole head is the target
   (the padding lives on the button) and the open row's rule turns gold. */
@media (max-width:900px){
  .faces__grid{
    grid-template-columns:minmax(0,1fr);gap:0;
    border-bottom:1px solid var(--rule);
  }
  .faces__grid li{height:auto;scroll-margin-top:6rem;border-top:1px solid var(--rule)}
  .faces__grid li.is-open{border-top-color:var(--gold-edge)}
  .faces__grid li:has(.speaker:focus-visible){outline:2px solid var(--gold-bright);outline-offset:-2px}
  .speaker{
    position:relative;flex-direction:row;align-items:center;gap:var(--s2);height:auto;
    padding:var(--s2) 2.5rem var(--s2) 0;
    touch-action:manipulation;-webkit-tap-highlight-color:transparent;
  }
  .speaker:focus-visible{outline:0}
  .speaker::after{
    content:"";position:absolute;right:.4rem;top:50%;width:.6rem;height:.6rem;margin-top:-.45rem;
    border:solid var(--gold);border-width:0 2px 2px 0;transform:rotate(45deg);
    transition:transform .3s var(--ease);
  }
  .speaker[aria-expanded="true"]::after{transform:rotate(225deg)}
  .speaker__plate{flex:none;width:3.9375rem}
  .speaker__plate img{filter:none}
  .speaker__plate::after{display:none}
  .speaker:hover .speaker__plate img,.speaker:focus-visible .speaker__plate img{transform:none}
  .speaker__cap{flex:1 1 0;min-width:0;width:auto;margin-top:0}
  .speaker__name{line-height:1}
  .speaker__role{margin-top:.375rem;color:var(--mist);font-size:var(--t-label-sm);line-height:1.25}
  .speaker__cta{display:none}
  .speaker__panel{
    display:grid;grid-template-rows:0fr;visibility:hidden;
    transition:grid-template-rows .35s var(--ease),visibility .35s;
  }
  .speaker__panel.is-open{grid-template-rows:1fr;visibility:visible}
  .speaker__panel > div{min-height:0;overflow:hidden}
  .speaker__panel p{padding:0 0 var(--s3);color:var(--white);font-size:var(--t-datum);line-height:1.55}
}
@media (max-width:380px){
  .mark{gap:.45rem;letter-spacing:0}
  .mark__symbol{height:1.35rem}
}

/* ── 8. legal pages ───────────────────────────────────────────────── */
.legal{
  max-width:74ch;margin:0 auto;
  padding:clamp(8rem,14vw,10.5rem) var(--gut) clamp(5rem,10vw,8rem);
}
.legal__eyebrow{color:var(--gold);font:500 var(--t-label)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase}
.legal__head h1{
  margin-top:.85rem;font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-headline);line-height:1.04;letter-spacing:-.01em;color:var(--white);
}
.legal__updated{margin-top:var(--s3);padding-bottom:var(--s4);border-bottom:1px solid var(--rule);color:var(--mist-dim);font-size:var(--t-label);letter-spacing:.02em}
.legal__body{margin-top:var(--s5)}
.legal__body h2{
  margin-top:var(--s6);font-family:var(--f-heading);font-weight:400;
  font-size:var(--t-title);line-height:1.1;letter-spacing:-.005em;color:var(--gold);
}
.legal__body>*:first-child,.legal__body h2:first-child{margin-top:0}
.legal__body p{margin-top:var(--s3);max-width:66ch;color:var(--ink-2);line-height:1.72}
.legal__body ul{margin-top:var(--s3);display:grid;gap:.65rem;max-width:66ch}
.legal__body li{position:relative;padding-left:1.5rem;color:var(--ink-2);line-height:1.62}
.legal__body li::before{content:"";position:absolute;left:0;top:.6em;width:.4rem;height:.4rem;background:var(--gold);opacity:.7}
.legal__body strong{color:var(--ink);font-weight:600}
.legal__body a{color:var(--gold-bright);text-decoration:underline;text-underline-offset:.15em}
.legal__body a:hover,.legal__body a:focus-visible{color:var(--white)}
.legal__body .hs-form-frame{margin-top:var(--s4);min-height:26rem;background:transparent}
.legal__body address{margin-top:var(--s3);font-style:normal;color:var(--ink-2);line-height:1.7}

/* claim-your-seat: the form is the point of the page, so keep it inside the
   first screen. Tight head on phones; heading beside the form from 960px. */
.legal--form{padding-top:clamp(5.5rem,16vw,6.5rem);padding-bottom:clamp(3rem,8vw,5rem)}
.legal--form .legal__updated{margin-top:var(--s2);padding-bottom:var(--s2)}
.legal--form .legal__intro{margin-top:var(--s2);max-width:66ch;color:var(--ink-2);font-size:var(--t-datum);line-height:1.6}
.legal--form .legal__body{margin-top:var(--s3)}
.legal--form .legal__body .hs-form-frame{margin-top:0}
@media (min-width:960px){
  .legal--form{
    max-width:72rem;padding-top:8rem;
    display:grid;grid-template-columns:minmax(0,24rem) minmax(0,1fr);
    column-gap:var(--s6);align-items:start;
  }
  .legal--form .legal__head{position:sticky;top:7rem}
  .legal--form .legal__body{margin-top:0}
}

/* ── programme page (agenda.html, served at /agenda) ──────────────────
   The PDF programme as a page: logo-only masthead, intro with the PDF
   download, a sticky Day 1 / Day 2 switch, then each day's Main Stage and
   Breakout Room. Mobile first: one column, sessions stacked; from 1080px
   the Breakout Room sits beside the Main Stage. The session markup is
   generated by programme/build.py from the same data as the PDF. */
.prog-intro,.prog,.prog-foot{max-width:76rem;margin-inline:auto;padding-inline:var(--gut)}
.prog-intro{padding-top:clamp(6.5rem,14vw,9rem);padding-bottom:var(--s3)}
.prog-intro__row{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;padding-bottom:.9rem;border-bottom:1px solid var(--gold-edge)}
.prog-intro h1{font-family:var(--f-heading);font-size:var(--t-headline);line-height:1;letter-spacing:-.01em}
.prog-intro__dl{
  display:inline-flex;align-items:center;gap:.5rem;min-height:2.75rem;
  color:var(--gold-bright);text-decoration:none;
  font:600 var(--t-label)/1 var(--f-text);letter-spacing:.12em;text-transform:uppercase;
  transition:color .2s var(--ease);
}
.prog-intro__dl:hover,.prog-intro__dl:focus-visible{color:var(--white)}
.prog-intro__note{margin-top:.75rem;color:var(--mist-dim);font-size:var(--t-datum)}

/* the day switch: sticks under the fixed masthead */
.prog-nav{
  position:sticky;top:3.95rem;z-index:30;
  display:flex;align-items:center;gap:.5rem;
  padding:.6rem max(var(--gut),calc((100% - 76rem) / 2 + var(--gut)));
  background:var(--scrim-nav);backdrop-filter:saturate(140%) blur(10px);
  border-block:1px solid var(--rule);
}
.prog-nav a{
  display:inline-flex;align-items:center;gap:.45rem;min-height:2.75rem;padding:.5rem .95rem;
  border:1px solid var(--rule);color:var(--mist);text-decoration:none;
  font:500 var(--t-label)/1 var(--f-text);letter-spacing:.06em;white-space:nowrap;
  transition:color .2s var(--ease),border-color .2s var(--ease),background .2s var(--ease);
}
.prog-nav a b{font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--white)}
.prog-nav a:hover,.prog-nav a:focus-visible{border-color:var(--mist);color:var(--white)}
.prog-nav a[aria-selected="true"]{background:var(--gold);border-color:var(--gold);color:var(--navy)}
.prog-nav a[aria-selected="true"] b{color:var(--navy)}

.prog-day{padding-top:var(--s5);scroll-margin-top:8.25rem}
.prog-day + .prog-day{padding-top:var(--s6)}
/* tabbed (JS): one day at a time, a short fade between them */
.prog--tabs .prog-day{padding-top:var(--s4)}
.prog--tabs .prog-day:not(.is-active){display:none}
.prog-day.is-leaving{opacity:0;transition:opacity .16s var(--ease)}
.prog-day.is-entering{animation:prog-in .26s var(--ease)}
@keyframes prog-in{from{opacity:0}to{opacity:1}}
.prog-day__head{padding-bottom:1rem;border-bottom:2px solid var(--gold)}
.prog-day__kicker{font:500 var(--t-label)/1.3 var(--f-text);letter-spacing:.18em;text-transform:uppercase;color:var(--mist)}
.prog-day__head h2{margin-top:.5rem;font-family:var(--f-heading);font-size:var(--t-title);line-height:1.12}
.prog-track__label{
  display:flex;align-items:center;gap:.75rem;margin:var(--s4) 0 .25rem;
  font:600 var(--t-label-sm)/1 var(--f-text);letter-spacing:.22em;text-transform:uppercase;color:var(--gold);
}
.prog-track__label::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,var(--gold-edge),transparent)}

.prog-ses{padding:1.25rem 0;border-bottom:1px solid var(--rule)}
.prog-ses__when{display:flex;align-items:baseline;gap:.5rem}
.prog-ses__when time{font:700 var(--t-subtitle)/1 var(--f-heading);color:var(--white);font-variant-numeric:tabular-nums}
.prog-ses__end{font-size:var(--t-label);color:var(--mist-dim)}
.prog-ses__fmt{margin-left:auto;font:600 var(--t-label-sm)/1 var(--f-text);letter-spacing:.16em;text-transform:uppercase;color:var(--gold)}
.prog-ses__title{margin:.55rem 0 .8rem;font:400 var(--t-session)/1.22 var(--f-heading);color:var(--white);text-wrap:balance}
.prog-spk{display:grid;gap:.5rem;padding-top:.6rem;border-top:1px solid var(--gold-edge)}
.prog-spk__name{font-weight:600;color:var(--white)}
/* a speaker with a bio card on the site: the name opens it */
.prog-spk__bio{
  padding:0;border:0;background:none;cursor:pointer;text-align:left;font:inherit;font-weight:600;color:var(--white);
  text-decoration:underline;text-decoration-color:var(--gold-edge);text-decoration-thickness:1px;text-underline-offset:.25em;
  transition:color .2s var(--ease),text-decoration-color .2s var(--ease);
}
.prog-spk__bio:hover,.prog-spk__bio:focus-visible{color:var(--gold-bright);text-decoration-color:var(--gold)}
.prog-spk__org{display:block;font-size:var(--t-datum);line-height:1.35;color:var(--mist-dim)}
.prog-spk__role{
  margin-left:.5rem;vertical-align:.1em;
  font:600 var(--t-label-sm)/1 var(--f-text);letter-spacing:.14em;text-transform:uppercase;color:var(--gold-bright);
}
.prog-spk .is-tba .prog-spk__name{font-weight:400;font-style:italic;color:var(--mist-dim)}

.prog-brk{
  display:flex;align-items:center;gap:.75rem;padding:.8rem .9rem;margin-inline:-.9rem;
  border-bottom:1px solid var(--rule);
  background:linear-gradient(90deg,var(--gold-veil),transparent 85%);
  color:var(--mist);font-size:var(--t-datum);
}
.prog-brk__t{font-weight:600;color:var(--white);font-variant-numeric:tabular-nums;white-space:nowrap}
.prog-brk__dot{width:6px;height:6px;border-radius:50%;background:var(--gold);flex:none}
.prog-arrival{margin-top:1rem}

.prog-foot{padding-block:var(--s6) var(--s4);color:var(--mist-dim);font-size:var(--t-label)}

@media (min-width:1080px){
  .prog-day__cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(18rem,24rem);gap:0 clamp(2.5rem,5vw,4.5rem);align-items:start}
  /* time in its own column beside the session */
  .prog-track:not(.prog-track--side) .prog-ses{display:grid;grid-template-columns:7rem minmax(0,1fr);column-gap:1.5rem}
  .prog-track:not(.prog-track--side) .prog-ses__when{grid-row:1 / span 3;flex-direction:column;align-items:flex-start;gap:.35rem}
  .prog-track:not(.prog-track--side) .prog-ses__fmt{margin-left:0;margin-top:.35rem}
  .prog-track:not(.prog-track--side) .prog-ses__title{margin-top:0}
  :root{--t-session:1.4rem}
}
@media (max-width:420px){
  .prog-nav{gap:.4rem}
  .prog-nav a{padding:.5rem .7rem;font-size:var(--t-label-sm)}
}

/* Reduced motion keeps every state change and removes only the travel:
   no scroll-coupled veil, no line drawing itself, no lifting buttons.
   Colour and border feedback stays, shortened to 90ms. */
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .veil{display:none}
  .beacon__logos{animation:none;width:auto;flex-wrap:wrap;justify-content:center;row-gap:1.5rem}
  .beacon__logos li[aria-hidden]{display:none}
  .beacon__logos-viewport{-webkit-mask-image:none;mask-image:none}

  .line.arming .stations::before{transform:scaleY(1)}
  .line.arming .station::before{opacity:1;transform:scale(1)}
  .stations::before{transition:none}
  .station::before{transition:background .09s linear,box-shadow .09s linear;transition-delay:0s}

  .lit,.quiet,.routes a,.burger span[aria-hidden]{transition-duration:.09s}
  .lit:hover,.lit:focus-visible{transform:none}
  .routes a::after{transition-duration:.09s}
  .skip{transition:none}

  .masthead{transition-duration:.09s}
  .prog-nav a{transition-duration:.09s}
  .prog-day.is-leaving{transition-duration:.09s}
  .prog-day.is-entering{animation-duration:.09s}
  [data-echo]::after{display:none}

  .modal,.modal::backdrop,.drawer{transition-duration:.09s}
  .modal[open],.drawer:not([hidden]){transform:none}
  @starting-style{
    .modal[open]{transform:none}
    .drawer:not([hidden]){transform:none}
  }

  .room--cards li{transition-duration:.09s;transition-delay:0s}
  .room--cards.arming li{opacity:1;transform:none}

  .faces__grid li{transition-duration:.09s;transition-delay:0s}
  .speaker::after,.speaker__panel{transition-duration:.01s}
  .day__toggle::after,.line--acc .day__body{transition-duration:.01s}
  .faces__grid.arming li{opacity:1;transform:none}

  .canyon__text > *{transition-duration:.09s;transition-delay:0s}
  .canyon.arming .canyon__text > *{opacity:1;transform:none}

  .mirror__text > *,.mirror__plate{transition-duration:.09s;transition-delay:0s}
  .mirror.arming .mirror__text > *,.mirror.arming .mirror__plate{opacity:1;transform:none}
}
