/* Bridging the Gap 2026. Art direction: aged parchment, greens, gold hairlines, Didone serif. */

/* Tokens */
:root{
  --parchment:      #EFE7D8;
  --parchment-2:    #E5D9C3;
  --parchment-3:    #D8C9AE;
  --ivory:          #FBF7EF;

  --forest:         #12261D;
  --forest-2:       #0B1913;
  --sage:           #5E8770;
  --sage-soft:      #A6C2AE;

  --gold:           #B8935A;
  --gold-lite:      #D4B679;
  /* --gold is 2.75:1 on parchment: decoration only. --gold-ink (4.72:1) for small text on light grounds. */
  --gold-ink:       #7A6234;
  --gold-glow:      rgba(184,147,90,.28);

  --ink:            #23261F;
  --ink-2:          #4A4C42;
  --ink-3:          #63655A;    /* 4.83:1 on parchment — the lightest ink that clears AA */
  --sage-ink:       #476B59;    /* --sage is a 3.8:1 accent: graphics only, never body text */

  --shell: min(1180px, 100% - 2.5rem);
  --shell-narrow: min(880px, 100% - 2.5rem);

  --r-sm: 3px;
  --r-md: 6px;
  --r-lg: 10px;

  --font-display: "Playfair Display", "Times New Roman", serif;
  --font-body:    "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-ar-display: "Amiri", "Playfair Display", serif;
  --font-ar-body:    "Tajawal", "Segoe UI", sans-serif;

  --shadow-sm: 0 1px 2px rgba(35,38,31,.06), 0 4px 14px rgba(35,38,31,.05);
  --shadow-md: 0 2px 6px rgba(35,38,31,.08), 0 18px 46px rgba(35,38,31,.10);
  --shadow-lg: 0 30px 80px rgba(35,38,31,.18);

  --ease: cubic-bezier(.22,.61,.36,1);
}

/* Arabic swaps the type stack, nothing else */
html[lang="ar"]{
  --font-display: var(--font-ar-display);
  --font-body:    var(--font-ar-body);
}

/* Self-hosted Latin type. Playfair Display and Inter ship with the site (latin subset).
   Amiri and Tajawal still come from the Google Fonts CDN. */
@font-face{font-family:"Inter";font-style:normal;font-weight:300 700;font-display:swap;src:url("../fonts/inter-latin.woff2") format("woff2")}
@font-face{font-family:"Playfair Display";font-style:normal;font-weight:400 800;font-display:swap;src:url("../fonts/playfair-normal-latin.woff2") format("woff2")}
@font-face{font-family:"Playfair Display";font-style:italic;font-weight:400 600;font-display:swap;src:url("../fonts/playfair-italic-latin.woff2") format("woff2")}

/* Reset / base */
*,*::before,*::after{ box-sizing:border-box; }
html{ -webkit-text-size-adjust:100%; scroll-behavior:smooth; scroll-padding-top:78px; }
@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{ animation-duration:.01ms !important; animation-iteration-count:1 !important; transition-duration:.01ms !important; }
}
/* overflow-x on <body> alone does not hold: the fixed header escapes body's clip. Clip at the root too. */
html{ overflow-x:hidden; }
body{
  margin:0;
  background:var(--parchment);
  color:var(--ink);
  font-family:var(--font-body);
  font-size:clamp(15px,.55vw + 13.6px,17px);
  line-height:1.68;
  font-weight:400;
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}
/* paper grain */
body::before{
  content:""; position:fixed; inset:0; z-index:9999; pointer-events:none;
  opacity:.26; mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)' opacity='.42'/%3E%3C/svg%3E");
}
img{ max-width:100%; height:auto; display:block; }
a{ color:inherit; }
/* :balance keeps headings from orphaning a word; :pretty does the same for body copy. */
h1,h2,h3,h4{ margin:0; font-family:var(--font-display); font-weight:600; line-height:1.12; letter-spacing:-.015em; text-wrap:balance; }
p{ margin:0 0 1em; text-wrap:pretty; }
p:last-child{ margin-bottom:0; }
ul,ol{ margin:0; padding:0; list-style:none; }
button{ font:inherit; color:inherit; }

.wrap{ width:var(--shell); margin-inline:auto; }
.center{ text-align:center; }
.sr-only{ position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; border:0; }

.skip-link{
  position:absolute; inset-inline-start:-9999px; top:0; z-index:10000;
  background:var(--forest); color:var(--ivory); padding:.7rem 1.2rem; border-radius:0 0 var(--r-md) 0;
}
.skip-link:focus{ inset-inline-start:0; }
:focus-visible{ outline:2px solid var(--gold); outline-offset:3px; border-radius:var(--r-sm); }

/* Type scale. Four steps, roughly a 1.25 major third at the 1280px anchor:
   h2 43.5px / h3 24.3px / h4 17.3px (--fs-h4) / body 16px.
   Use the tokens rather than sizing per component. .leader-name is an exception. */
.h2{ font-size:clamp(1.85rem,3.4vw,3rem); }
.h3{ font-size:clamp(1.25rem,1.9vw,1.65rem); }
:root{
  --fs-h4:1.08rem;      /* card titles */
  --fs-h3-sm:1.3rem;    /* block-group titles: programme entries, sponsor tiers */
}

.eyebrow{
  font-family:var(--font-body);
  font-size:.75rem; font-weight:600;
  letter-spacing:.2em; text-transform:uppercase;
  color:var(--gold-ink); margin:0 0 .85rem;
  display:flex; align-items:center; gap:.7rem;
}
/* on forest the light gold already clears 5.6:1, so keep the brighter tone */
.section-forest .eyebrow{ color:var(--gold-lite); }
html[lang="ar"] .eyebrow{ letter-spacing:0; font-size:.82rem; }
.eyebrow::after{ content:""; flex:1; height:1px; background:linear-gradient(to right,var(--gold-glow),transparent); }
html[dir="rtl"] .eyebrow::after{ background:linear-gradient(to left,var(--gold-glow),transparent); }
/* eyebrow rules draw themselves in on scroll, tied to the .reveal system */
.eyebrow.reveal::after{ transform-origin:left center; transform:scaleX(0); transition:transform .9s var(--ease) .15s; }
html[dir="rtl"] .eyebrow.reveal::after{ transform-origin:right center; }
.eyebrow.reveal.is-in::after{ transform:scaleX(1); }

.eyebrow-alt{
  font-family:var(--font-display); font-style:italic; font-weight:500;
  font-size:1.05rem; letter-spacing:0; text-transform:none; color:var(--gold);
  display:block; margin:0 0 .85rem;
}
.eyebrow-alt::after{ display:none; }
.section-forest .eyebrow-alt{ color:var(--gold-lite); }
html[lang="ar"] .eyebrow-alt{ font-style:normal; }

.prose{ color:var(--ink-2); }
.prose p + p{ margin-top:.9em; }

.sec-head{ max-width:56ch; margin-bottom:clamp(2rem,4vw,3.25rem); }
.sec-note{ color:var(--ink-3); margin-top:.9rem; font-size:.97rem; }

/* Header */
.site-header{
  position:fixed; inset-inline:0; top:0; z-index:900;
  transition:background .35s var(--ease), box-shadow .35s var(--ease), border-color .35s var(--ease);
  border-bottom:1px solid transparent;
}
.site-header.is-stuck{
  /* Dark forest glass, not a solid parchment fill, so text never flips to dark-on-light. */
  background:rgba(27,38,32,.52);
  backdrop-filter:blur(18px) saturate(1.3);
  -webkit-backdrop-filter:blur(18px) saturate(1.3);
  border-bottom-color:rgba(212,182,121,.22);
  box-shadow:0 1px 24px rgba(8,14,10,.22);
}
.header-inner{ display:flex; align-items:center; gap:1.5rem; min-height:70px; }

.brand{ display:flex; align-items:center; text-decoration:none; flex:0 0 auto; min-height:44px; }
.brand-text{ display:flex; flex-direction:column; line-height:1.15; }
.brand-text b{ font-family:var(--font-display); font-size:1.02rem; font-weight:600; letter-spacing:-.01em; color:var(--ivory); }
.brand-text i{ font-style:normal; font-size:.75rem; letter-spacing:.15em; text-transform:uppercase; color:rgba(251,247,239,.66); }
html[lang="ar"] .brand-text i{ letter-spacing:0; font-size:.7rem; }

.site-nav{ display:flex; gap:.1rem; margin-inline-start:auto; }
.site-nav a{
  position:relative; text-decoration:none; padding:.5rem .52rem;
  font-size:.81rem; font-weight:500; color:rgba(251,247,239,.82);
  white-space:nowrap;
  border-radius:var(--r-sm); transition:color .2s var(--ease);
}
.site-nav a::after{
  content:""; position:absolute; inset-inline:.52rem; bottom:.28rem; height:1px;
  background:var(--gold-lite); transform:scaleX(0); transform-origin:var(--o,left);
  transition:transform .3s var(--ease);
}
html[dir="rtl"] .site-nav a::after{ --o:right; }
.site-nav a:hover, .site-nav a.is-active{ color:var(--ivory); }
.site-nav a:hover::after, .site-nav a.is-active::after{ transform:scaleX(1); }

.header-actions{ display:flex; align-items:center; gap:.6rem; flex:0 0 auto; }
.lang-toggle{
  display:flex; border:1px solid rgba(239,231,216,.45); background:transparent;
  border-radius:100px; overflow:hidden; cursor:pointer; padding:0;
}
/* 44px min tap height — the shared touch-target floor for every control here */
.lang-opt{
  padding:.32rem .8rem; min-height:44px; display:flex; align-items:center;
  font-size:.78rem; font-weight:600; letter-spacing:.06em;
  color:rgba(251,247,239,.7); transition:background .25s var(--ease), color .25s var(--ease);
}
.lang-opt.is-on{ background:var(--forest); color:var(--ivory); }

.nav-burger{ display:none; width:44px; height:44px; background:none; border:0; cursor:pointer; padding:12px 8px; }
.nav-burger span{ display:block; height:1.6px; background:var(--ivory); border-radius:2px; transition:transform .3s var(--ease), opacity .2s; }
.nav-burger span + span{ margin-top:5px; }
.nav-burger[aria-expanded="true"] span:nth-child(1){ transform:translateY(6.6px) rotate(45deg); }
.nav-burger[aria-expanded="true"] span:nth-child(2){ opacity:0; }
.nav-burger[aria-expanded="true"] span:nth-child(3){ transform:translateY(-6.6px) rotate(-45deg); }

/* Hero */
.hero{
  position:relative; min-height:100svh; display:flex; padding:clamp(1rem,2.2vw,1.6rem);
  background:var(--parchment-2);
}
/* Ambient wash is the key visual itself, pre-blurred. */
.hero-media{
  position:absolute; inset:0;
  background-color:var(--forest);
  background-image:url("../img/hero-ambient.jpg");
  background-size:cover; background-position:center 30%;
}
.hero-scrim{
  position:absolute; inset:0;
  background:
    linear-gradient(to bottom, rgba(18,26,20,.62) 0%, rgba(18,26,20,.48) 40%, rgba(18,26,20,.78) 100%),
    radial-gradient(ellipse 70% 60% at 30% 45%, rgba(18,26,20,.25), transparent 70%);
}
.hero-frame{
  position:relative; z-index:2; flex:1;
  display:flex; flex-direction:column; justify-content:center; align-items:center;
  padding:clamp(4.5rem,8vw,6rem) 0 clamp(1.6rem,3vw,2.4rem);
  border:1px solid rgba(239,231,216,.34);
  outline:6px solid rgba(239,231,216,.10); outline-offset:-13px;
  border-radius:2px;
}

/* Copy on one side, the printed poster on the other. Stacks on narrow screens. */
.hero-inner{
  max-width:1080px; text-align:start;
  display:grid; align-items:center;
  grid-template-columns:minmax(0,1fr) minmax(0,clamp(240px,26vw,352px));
  grid-template-areas:"lede poster" "detail poster";
  column-gap:clamp(2rem,5vw,4.5rem);
  row-gap:clamp(1.4rem,2.6vw,2.2rem);
}
.hero-lede{ grid-area:lede; align-self:end; }
.hero-detail{ grid-area:detail; align-self:start; }

.hero-poster{
  grid-area:poster; margin:0; position:relative;
  transform:rotate(-1.6deg);
  transition:transform .7s var(--ease);
}
.hero-poster img{
  width:100%; border-radius:3px;
  box-shadow:
    0 1px 2px rgba(10,16,12,.5),
    0 18px 44px rgba(10,16,12,.5),
    0 54px 110px rgba(10,16,12,.42);
}
/* faint sheen so it reads as a printed piece under glass */
.hero-poster::after{
  content:""; position:absolute; inset:0; border-radius:3px; pointer-events:none;
  background:linear-gradient(118deg,
    rgba(255,255,255,.16) 0%, rgba(255,255,255,0) 32%,
    rgba(255,255,255,0) 68%, rgba(255,255,255,.06) 100%);
}
.hero-poster:hover{ transform:rotate(0deg) translateY(-6px) scale(1.015); }

.hero .eyebrow{
  color:rgba(239,231,216,.86);
  letter-spacing:.26em; font-size:.78rem;
}
.hero .eyebrow::after{ background:linear-gradient(to right,rgba(239,231,216,.35),transparent); }
html[dir="rtl"] .hero .eyebrow::after{ background:linear-gradient(to left,rgba(239,231,216,.35),transparent); }
html[lang="ar"] .hero .eyebrow{ letter-spacing:.08em; }

.hero-title{
  font-size:clamp(2.7rem,6.4vw,5rem);
  line-height:.95; color:var(--ivory); font-weight:700;
  letter-spacing:-.028em; margin:.15em 0 .18em;
  text-shadow:0 2px 40px rgba(0,0,0,.3);
  text-transform:uppercase;
}
.hero-title .line{ display:block; }
html[lang="ar"] .hero-title{ font-size:clamp(2.5rem,6vw,4.6rem); line-height:1.14; letter-spacing:0; }
/* Arabic reads as one phrase, not two stacked words */
html[lang="ar"] .hero-title .line{ display:inline; }
html[lang="ar"] .hero-title .line + .line::before{ content:" "; }

.hero-tagline{
  font-family:var(--font-display); font-style:italic;
  font-size:clamp(1rem,2.3vw,1.5rem); color:rgba(239,231,216,.92);
  letter-spacing:.03em; margin:0 0 clamp(1.8rem,3.5vw,2.6rem);
}
html[lang="ar"] .hero-tagline{ font-style:normal; }

.hero-facts{
  display:flex; flex-direction:column; gap:.55rem; align-items:flex-start;
  color:rgba(239,231,216,.94); font-size:clamp(.94rem,1.3vw,1.08rem);
}
/* baseline, not center — keeps the glyph on the first line when the venue wraps */
.hero-facts li{ display:flex; align-items:baseline; gap:.6rem; text-align:start; }
.hero-facts .ico{ color:var(--gold-lite); font-size:.9em; display:inline-flex; flex:0 0 auto; }
.hero-facts .ico svg{ display:block; transform:translateY(2px); }
.venue-lines{ display:flex; flex-direction:column; gap:.22rem; }
/* .72em of a clamped parent falls to ~10px on mobile, so floor the result at 12px. */
.venue-lines .vl2{ font-size:max(.75rem,.72em); font-weight:600; letter-spacing:.14em; text-transform:uppercase; color:var(--gold-lite); }

.countdown{
  display:flex; gap:clamp(.7rem,2vw,1.5rem);
  margin:clamp(1.5rem,2.8vw,2.1rem) 0 clamp(1.4rem,2.6vw,1.9rem);
  padding-top:clamp(1.2rem,2.4vw,1.7rem);
  border-top:1px solid rgba(239,231,216,.18);
}
.cd-unit{ min-width:62px; }
.cd-num{
  display:block; font-family:var(--font-display); font-weight:600;
  font-size:clamp(1.7rem,3.6vw,2.5rem); color:var(--ivory); line-height:1;
  font-variant-numeric:tabular-nums;
  animation:cdPulse .5s var(--ease);
}
@keyframes cdPulse{ from{ opacity:0; transform:translateY(4px); } to{ opacity:1; transform:translateY(0); } }
/* 12px caption floor; .78 alpha clears 4.5:1 on forest. */
.cd-lbl{
  display:block; margin-top:.4rem; font-size:.75rem; letter-spacing:.18em;
  text-transform:uppercase; color:rgba(239,231,216,.78);
}
html[lang="ar"] .cd-lbl{ letter-spacing:0; font-size:.72rem; }

.hero-cta{ display:flex; gap:.8rem; flex-wrap:wrap; }
.hero-hosts{
  position:relative; margin:clamp(2rem,4vw,3rem) 0 0; text-align:center;
  font-size:.75rem; letter-spacing:.15em; text-transform:uppercase;
  color:rgba(239,231,216,.72);   /* caption contrast floor — see .cd-lbl above */
}
html[lang="ar"] .hero-hosts{ letter-spacing:0; font-size:.8rem; text-transform:none; }

/* Buttons */
.btn{
  display:inline-flex; align-items:center; justify-content:center;
  padding:.82rem 1.7rem; border-radius:100px; text-decoration:none;
  font-size:.83rem; font-weight:600; letter-spacing:.06em; text-transform:uppercase;
  border:1px solid transparent; cursor:pointer;
  transition:transform .25s var(--ease), background .25s var(--ease), color .25s var(--ease), border-color .25s var(--ease), box-shadow .25s var(--ease);
}
html[lang="ar"] .btn{ letter-spacing:0; text-transform:none; font-size:.92rem; }
.btn-sm{ padding:.75rem 1.2rem; font-size:.75rem; min-height:44px; }
.btn:hover{ transform:translateY(-2px); }
/* Inset top highlight and downward shadow, so the page shares one light direction. */
.btn-primary{ background:var(--gold); color:#1B1C16; box-shadow:inset 0 1px 0 rgba(255,255,255,.35), 0 6px 24px rgba(184,147,90,.34); }
.btn-primary:hover{ background:var(--gold-lite); box-shadow:inset 0 1px 0 rgba(255,255,255,.4), 0 10px 32px rgba(184,147,90,.42); }
.btn-ghost{ border-color:rgba(239,231,216,.5); color:var(--ivory); box-shadow:inset 0 1px 0 rgba(255,255,255,.06); }
.btn-ghost:hover{ background:rgba(239,231,216,.12); border-color:rgba(239,231,216,.8); }
.section-paper .btn-ghost{ border-color:rgba(38,54,44,.35); color:var(--forest); box-shadow:inset 0 1px 0 rgba(255,255,255,.4); }
.section-paper .btn-ghost:hover{ background:rgba(38,54,44,.07); }

/* Section shells */
.section{ padding:clamp(4rem,9vw,7.5rem) 0; position:relative; isolation:isolate; }
.section-paper{ background:var(--parchment); }
.section-forest{ background:var(--forest); color:rgba(239,231,216,.9); }
/* Faint warm glow, opposite corners on light and dark sections. Uses ::after to stay clear of the hairline divider below. */
.section-paper::after{
  content:""; position:absolute; inset:0; z-index:-1; pointer-events:none;
  background:radial-gradient(60% 55% at 88% -6%,rgba(184,147,90,.07),transparent 68%);
  animation:sectionGlow 14s ease-in-out infinite;
}
.section-forest::after{
  content:""; position:absolute; inset:0; z-index:-1; pointer-events:none;
  background:radial-gradient(65% 60% at 10% 104%,rgba(212,182,121,.06),transparent 70%);
  animation:sectionGlow 16s ease-in-out infinite reverse;
}
@keyframes sectionGlow{ 0%,100%{ opacity:.55; } 50%{ opacity:1; } }
/* initAnimPause() (app.js) toggles this so only visible sections keep animating. */
.anim-paused::after,.anim-paused .pl-glow,.anim-paused .mark::before,.anim-paused .mark-shine{
  animation-play-state:paused !important;
}
.section-forest .h2,.section-forest .h3{ color:var(--ivory); }
.section-forest .prose{ color:rgba(239,231,216,.78); }
.section-forest .sec-note{ color:rgba(239,231,216,.62); }

/* Three dark breaks so the parchment never runs four screens unbroken. */
.section-hippo{
  background:linear-gradient(160deg,#203027,var(--forest) 55%,#1F2E26);
}
.section-gold{ background:linear-gradient(150deg,#2A3E32,#22332A); }
.section-org{ background:linear-gradient(200deg,#22332A,var(--forest) 60%,#1E2C24); }
.section-thanks{
  background:var(--forest);
  padding:clamp(5rem,11vw,9rem) 0;
  text-align:center;
}

/* hairline dividers between adjacent paper sections */
.section-paper + .section-paper::before,
.section-paper + .section-org::before,
.section-org + .section-paper::before{
  content:""; position:absolute; top:0; inset-inline:0;
  height:1px; background:linear-gradient(to right,transparent,rgba(184,147,90,.34),transparent);
}

/* Welcome message */
/* Chairman's letter. Editorial, centred, no card chrome. */
.welcome-card{
  max-width:62ch; margin-inline:auto; text-align:center;
  padding-block:clamp(.5rem,2vw,1.5rem);
}
/* Organizer's mark over the letter. Held still and lit: a slow halo behind it, and a highlight sweeping the letterforms. */
#welcome.section{ padding-top:clamp(2.5rem,5vw,4rem); }
.welcome-mark{
  display:flex; justify-content:center;
  margin-bottom:clamp(1.6rem,3vw,2.2rem);
}
.welcome-mark:empty{ display:none; }
.welcome-mark .mark{
  position:relative; display:block; isolation:isolate;
  /* The halo bleeds 20% past each edge. The vw-relative term keeps it inside a 320px viewport. */
  width:clamp(190px,min(34vw,62vw),340px);
  aspect-ratio:760/182;               /* the logo's own ratio, so nothing letterboxes */
}
.welcome-mark .mark::before{          /* ambient halo */
  content:""; position:absolute; inset:-58% -20%; z-index:-1; pointer-events:none;
  background:radial-gradient(52% 62% at 50% 50%,rgba(212,182,121,.34),rgba(212,182,121,.11) 54%,transparent 76%);
  filter:blur(15px);
  animation:markHalo 6.5s ease-in-out infinite;
}
@keyframes markHalo{ 0%,100%{opacity:.6;transform:scale(.97)} 50%{opacity:1;transform:scale(1.05)} }
.welcome-mark img{
  width:100%; height:100%; object-fit:contain; display:block;
  filter:drop-shadow(0 2px 12px rgba(0,0,0,.4)) drop-shadow(0 0 15px rgba(212,182,121,.22));
}
/* Masked by the logo art itself (--mark-src), so the highlight travels over the letterforms. */
.welcome-mark .mark-shine{
  position:absolute; inset:0; pointer-events:none; z-index:1;
  background:linear-gradient(105deg,
    transparent 40%, rgba(255,255,255,.55) 47%, rgba(255,249,236,.92) 50%,
    rgba(255,255,255,.55) 53%, transparent 60%);
  background-size:280% 100%; background-repeat:no-repeat;
  -webkit-mask-image:var(--mark-src);         mask-image:var(--mark-src);
  -webkit-mask-size:contain;                  mask-size:contain;
  -webkit-mask-repeat:no-repeat;              mask-repeat:no-repeat;
  -webkit-mask-position:center;               mask-position:center;
  mix-blend-mode:screen;
  animation:markShine 6.5s ease-in-out infinite;
}
/* without mask support the gradient would sweep a plain box, so hide it instead */
@supports not ((-webkit-mask-image:url("#m")) or (mask-image:url("#m"))){
  .welcome-mark .mark-shine{ display:none; }
}
@keyframes markShine{ 0%{background-position:170% 0} 62%,100%{background-position:-70% 0} }

.welcome-card .eyebrow{ justify-content:center; margin-bottom:clamp(1.6rem,3.5vw,2.4rem); }
.welcome-card .eyebrow::after{ display:none; }
.welcome-salut{
  font-family:var(--font-display); font-size:clamp(1.3rem,3vw,2.1rem);
  line-height:1.32; color:var(--ivory); margin:0 0 clamp(1.6rem,3vw,2.2rem);
}
html[lang="ar"] .welcome-salut{ font-family:var(--font-ar-display); }
.welcome-theme-label{
  font-size:.75rem; letter-spacing:.18em; text-transform:uppercase;
  color:rgba(239,231,216,.72); margin:0 0 .55rem;   /* caption floor — see .cd-lbl */
}
html[lang="ar"] .welcome-theme-label{ letter-spacing:0; font-size:.88rem; text-transform:none; }
.welcome-theme{
  font-family:var(--font-display); font-style:italic;
  font-size:clamp(1.05rem,2.4vw,1.5rem); color:var(--gold-lite);
  line-height:1.4; margin:0 0 clamp(1.8rem,3.5vw,2.6rem);
}
/* gold hairline between the theme and the body of the letter */
.welcome-theme::after{
  content:""; display:block; width:54px; height:1px; margin:clamp(1.4rem,3vw,2rem) auto 0;
  background:linear-gradient(to right,transparent,var(--gold),transparent);
}
.welcome-body{ font-size:1.02rem; }
.welcome-body p{ margin:0; }
.welcome-sign{ margin-top:clamp(2rem,4vw,3rem); }
.welcome-sign-rule{
  width:38px; height:1px; margin:0 auto 1.1rem;
  background:linear-gradient(to right,transparent,var(--gold),transparent);
}
.welcome-name{
  font-family:var(--font-display); font-size:1.1rem;
  color:var(--ivory); margin:0 0 .6rem;
}
html[lang="ar"] .welcome-name{ font-family:var(--font-ar-display); }
/* Two role tags (CEO, Shalaby Labs / Conference Chairman) instead of one line. */
.welcome-roles{
  display:flex; flex-wrap:wrap; justify-content:center; gap:.55rem;
  list-style:none; margin:0; padding:0;
}
.welcome-roles li{
  font-size:.75rem; font-weight:600; letter-spacing:.08em; text-transform:uppercase;
  color:var(--gold-lite); border:1px solid rgba(212,182,121,.35); border-radius:3px;
  padding:.36rem .75rem; cursor:default;
  transition:border-color .3s var(--ease),background .3s var(--ease),color .3s var(--ease),transform .3s var(--ease);
}
.welcome-roles li:hover,.welcome-roles li:focus-visible{
  border-color:var(--gold-lite); background:rgba(212,182,121,.14); color:var(--ivory); transform:translateY(-2px);
}
html[lang="ar"] .welcome-roles li{ letter-spacing:0; font-size:.85rem; text-transform:none; }

/* About */
/* The 1.55rem floor is load-bearing: --sage on parchment is 3.25:1 and only clears AA at >=24px. */
.strapline{
  font-family:var(--font-display); font-style:italic;
  font-size:clamp(1.55rem,3vw,2.1rem); color:var(--sage);
  max-width:22ch; line-height:1.28; margin:0 0 clamp(2.5rem,5vw,4rem);
  border-inline-start:2px solid var(--gold); padding-inline-start:1.4rem;
}
html[lang="ar"] .strapline{ font-style:normal; max-width:26ch; }

.split{ display:grid; grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr); gap:clamp(2rem,5vw,4.5rem); }
.split-b{ font-size:1.03rem; }

/* Vision / Mission */
/* A pair of plaques: icon medallion, tracked label, then the statement. Not numbered: they are standing statements, not steps. */
.vm-grid{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
  gap:clamp(3rem,6vw,5.5rem);
  text-align:center;
}
.vm-card{
  display:flex; flex-direction:column; align-items:center;
  max-width:38ch; margin-inline:auto;
}
.vm-icon{
  display:flex; align-items:center; justify-content:center;
  width:clamp(52px,7vw,60px); height:clamp(52px,7vw,60px);
  margin-bottom:1.1rem; border-radius:50%;
  border:1px solid rgba(212,182,121,.4); color:var(--gold-lite);
  background:radial-gradient(circle at 50% 40%,rgba(212,182,121,.14),transparent 70%);
}
.vm-label{
  font-family:var(--font-body); font-size:.78rem; font-weight:700;
  letter-spacing:.22em; text-transform:uppercase; color:var(--gold-lite);
  margin:0 0 1.1rem; padding-bottom:.9rem; position:relative;
}
.vm-label::after{
  content:""; position:absolute; bottom:0; left:50%; translate:-50% 0;
  width:30px; height:1px; background:var(--gold-lite); opacity:.55;
}
html[lang="ar"] .vm-label{ letter-spacing:0; }
.vm-statement{
  font-family:var(--font-display); font-style:italic; font-weight:500;
  font-size:clamp(1.05rem,2vw,1.28rem); line-height:1.6;
  color:rgba(239,231,216,.9); margin:0;
}
html[lang="ar"] .vm-statement{ font-style:normal; }
@media (min-width:701px){
  .vm-grid{ grid-template-columns:1fr 1fr; align-items:start; }
  .vm-card:first-child{ border-inline-end:1px solid rgba(212,182,121,.24); }
}

/* Leadership */
.leader-list{ display:flex; flex-direction:column; gap:clamp(2.5rem,5vw,4.5rem); }
.leader{
  display:grid; grid-template-columns:minmax(0,260px) minmax(0,1fr);
  gap:clamp(1.6rem,4vw,3.2rem); align-items:start;
}
.leader-photo{
  position:relative; aspect-ratio:4/5; border-radius:var(--r-md); overflow:hidden;
  background:linear-gradient(160deg,var(--parchment-2),var(--parchment-3));
  border:1px solid rgba(184,147,90,.3); box-shadow:var(--shadow-md);
  display:grid; place-items:center;
}
.leader-photo img{ width:100%; height:100%; object-fit:cover; }
.photo-slot{
  text-align:center; padding:1.2rem; color:var(--ink-3);
  font-size:.7rem; letter-spacing:.14em; text-transform:uppercase; line-height:1.7;
}
html[lang="ar"] .photo-slot{ letter-spacing:0; font-size:.82rem; text-transform:none; }
.photo-slot svg{ margin:0 auto .7rem; display:block; opacity:.4; }

.leader-role{
  font-size:.75rem; letter-spacing:.18em; text-transform:uppercase;
  color:var(--gold-ink); margin:0 0 .5rem; font-weight:600;
}
html[lang="ar"] .leader-role{ letter-spacing:0; font-size:.82rem; text-transform:none; }
.leader-name{ font-size:clamp(1.4rem,2.6vw,2rem); margin:0 0 .7rem; }
.leader-titles{ margin:0 0 1.4rem; }
.leader-titles li{
  font-size:.9rem; color:var(--ink-3); position:relative; padding-inline-start:1rem;
}
.leader-titles li::before{
  content:""; position:absolute; inset-inline-start:0; top:.65em;
  width:5px; height:5px; border-radius:50%; background:var(--gold);
}

/* Hippocrates */
.hippo-grid{ display:grid; grid-template-columns:minmax(0,.8fr) minmax(0,1fr); gap:clamp(2rem,5vw,4.5rem); align-items:center; }
.hippo-fig{
  margin:0; aspect-ratio:381/448; border-radius:var(--r-md); overflow:hidden;
  box-shadow:var(--shadow-md); background:var(--parchment-2);
  border:1px solid rgba(212,182,121,.28);
}
.hippo-fig img{ width:100%; height:100%; object-fit:cover; display:block; }
.hippo-fig .img-slot{ aspect-ratio:3/4; }
/* Gala: uses the shared .venue-gallery crossfade component (see below) */
#gala > .wrap > .eyebrow{ margin-bottom:clamp(1.6rem,3.5vw,2.4rem); }
.gala-grid{ align-items:center; }
.disclaimer{
  margin-top:1.8rem; padding-top:1.2rem; font-size:.82rem; color:var(--ink-3);
  border-top:1px solid rgba(184,147,90,.3); font-style:italic;
}
html[lang="ar"] .disclaimer{ font-style:normal; }

/* Closing ceremony / Gala */
.closing-card{ max-width:62ch; margin-inline:auto; text-align:center; padding-block:clamp(.5rem,2vw,1.5rem); }
/* Same icon-medallion convention as .vm-icon, with a recognition mark. */
.closing-icon{
  display:flex; align-items:center; justify-content:center; margin:0 auto clamp(1.2rem,2.5vw,1.6rem);
  width:clamp(56px,7vw,64px); height:clamp(56px,7vw,64px); border-radius:50%;
  border:1px solid rgba(212,182,121,.4); color:var(--gold-lite);
  background:radial-gradient(circle at 50% 40%,rgba(212,182,121,.14),transparent 70%);
}
.closing-card .eyebrow{ justify-content:center; margin-bottom:clamp(1.6rem,3.5vw,2.4rem); }
.closing-card .eyebrow::after{ display:none; }
.closing-card h2{ margin:0 0 clamp(1.6rem,3vw,2.2rem); }
.closing-card .prose{ font-size:1.05rem; }
.closing-card .prose p{ margin:0; }
/* "Presented by" byline. Own prefix so it tunes independently of .welcome-sign. */
.closing-sign{ margin-top:clamp(2.2rem,4vw,3rem); }
.closing-sign:empty{ display:none; }
.closing-sign-rule{
  width:38px; height:1px; margin:0 auto 1.1rem;
  background:linear-gradient(to right,transparent,var(--gold),transparent);
}
.closing-sign-role{
  font-size:.75rem; letter-spacing:.16em; text-transform:uppercase;
  color:var(--gold-lite); margin:0 0 .4rem;
}
html[lang="ar"] .closing-sign-role{ letter-spacing:0; font-size:.85rem; text-transform:none; }
.closing-sign-name{ font-family:var(--font-display); font-size:1.1rem; color:var(--ivory); margin:0 0 .6rem; }
html[lang="ar"] .closing-sign-name{ font-family:var(--font-ar-display); }
.closing-sign-titles{ display:flex; flex-wrap:wrap; justify-content:center; gap:.5rem; list-style:none; margin:0; padding:0; }
.closing-sign-titles li{
  font-size:.78rem; color:rgba(239,231,216,.72);
  border:1px solid rgba(212,182,121,.3); border-radius:3px; padding:.3rem .7rem;
}
html[lang="ar"] .closing-sign-titles li{ font-size:.9rem; }
#gala .reg-time{ display:block; margin-bottom:.6rem; }
/* .legend's default spacing is sized for a long pending list; here it follows one paragraph. */
#gala .legend{ margin-top:1rem; color:var(--ink-2); }

/* generic image placeholder */
.img-slot{
  display:grid; place-items:center; border-radius:var(--r-md);
  background:
    repeating-linear-gradient(135deg, rgba(184,147,90,.055) 0 10px, transparent 10px 20px),
    linear-gradient(160deg,var(--parchment-2),var(--parchment-3));
  border:1px dashed rgba(184,147,90,.5);
  color:var(--ink-3); text-align:center; padding:1.5rem;
  font-size:.72rem; letter-spacing:.13em; text-transform:uppercase; line-height:1.8;
}
html[lang="ar"] .img-slot{ letter-spacing:0; font-size:.85rem; text-transform:none; }
.section-forest .img-slot{
  background:repeating-linear-gradient(135deg, rgba(239,231,216,.05) 0 10px, transparent 10px 20px);
  border-color:rgba(239,231,216,.28); color:rgba(239,231,216,.6);
}

/* Timeline */
.timeline{ position:relative; padding-inline-start:clamp(1.5rem,4vw,3rem); }
.timeline::before{
  content:""; position:absolute; inset-inline-start:0; top:.9rem; bottom:.9rem;
  width:1px; background:linear-gradient(to bottom,transparent,rgba(184,147,90,.55) 8%,rgba(184,147,90,.55) 92%,transparent);
}
.tl-item{ position:relative; padding-bottom:clamp(1.6rem,3vw,2.4rem); }
.tl-item::before{
  content:""; position:absolute; top:.72rem;
  inset-inline-start:calc(-1 * clamp(1.5rem,4vw,3rem) - 4.5px);
  width:9px; height:9px; border-radius:50%;
  background:var(--parchment); border:1.5px solid var(--gold);
}
.tl-item.is-major::before{ background:var(--gold); box-shadow:0 0 0 4px var(--gold-glow); }

.tl-card{
  background:var(--ivory); border:1px solid rgba(184,147,90,.24);
  border-radius:var(--r-md); padding:clamp(1.2rem,2.4vw,1.75rem);
  box-shadow:var(--shadow-sm);
  transition:transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s var(--ease);
}
.tl-card:hover{ transform:translateY(-2px); box-shadow:var(--shadow-md); border-color:rgba(184,147,90,.45); }
/* Sessions, forum and ceremonies hold .h3; breaks and registration step down and lose their fill, so the eye chunks a nine-block list. */
.tl-item.is-major .tl-title{ font-size:clamp(1.25rem,1.9vw,1.65rem); }
.tl-item[data-type="break"] .tl-card,
.tl-item[data-type="registration"] .tl-card{
  background:transparent; box-shadow:none; border-style:dashed;
  padding-block:clamp(.85rem,1.6vw,1.15rem);
}
.tl-item[data-type="break"] .tl-title,
.tl-item[data-type="registration"] .tl-title{ font-size:var(--fs-h4); }
.tl-item[data-type="break"] .tl-card:hover,
.tl-item[data-type="registration"] .tl-card:hover{ transform:none; box-shadow:none; }
.tl-item[data-type="gala"] .tl-card{ background:linear-gradient(150deg,#F3EAD7,#EADCBD); border-color:rgba(184,147,90,.45); }

.tl-top{ display:flex; align-items:baseline; gap:.9rem; flex-wrap:wrap; margin-bottom:.4rem; }
.tl-time{
  font-family:var(--font-display); font-size:1.05rem; font-weight:600;
  /* small text on a light ground, so --gold-ink rather than --gold (2.67:1 here) */
  color:var(--gold-ink); font-variant-numeric:tabular-nums; white-space:nowrap;
}
.tl-title{ font-size:clamp(1.1rem,1.9vw,var(--fs-h3-sm)); }
.tl-theme{ font-family:var(--font-display); font-style:italic; color:var(--sage-ink); margin:.25rem 0 0; }
html[lang="ar"] .tl-theme{ font-style:normal; }
.tl-note{ color:var(--ink-3); font-size:.92rem; margin:.6rem 0 0; }

.chip{
  display:inline-flex; align-items:center; gap:.4rem;
  padding:.2rem .62rem; border-radius:3px;
  font-size:.75rem; font-weight:600; letter-spacing:.11em; text-transform:uppercase;
  white-space:nowrap;
}
html[lang="ar"] .chip{ letter-spacing:0; font-size:.75rem; text-transform:none; }
/* Chip ink is measured against the chip's own translucent ground, not the section behind it. */
.chip-tbd{ background:rgba(184,147,90,.16); color:#6E5729; border:1px solid rgba(184,147,90,.4); }
.chip-round{ background:rgba(14,158,153,.13); color:#0A6E6B; border:1px solid rgba(14,158,153,.3); }
.chip-sponsor{ background:rgba(38,54,44,.08); color:var(--forest); border:1px solid rgba(38,54,44,.2); }

/* Blocks holding temporary content (program.js `_placeholder:true`). Pulled down in visual weight so they read as scaffolding. */
.is-provisional .tl-time{ text-decoration:underline dashed rgba(122,98,52,.55); text-underline-offset:.2em; }
.is-provisional .tl-talks{ opacity:.72; }
.is-provisional .tl-talks .t-sp{ font-style:italic; }

.tl-talks{ margin-top:1rem; border-top:1px solid rgba(184,147,90,.2); padding-top:.9rem; }
.tl-talks li{ display:flex; gap:1rem; padding:.45rem 0; font-size:.93rem; }
.tl-talks li + li{ border-top:1px dotted rgba(184,147,90,.25); }
.tl-talks .t-time{ color:var(--gold-ink); font-variant-numeric:tabular-nums; flex:0 0 auto; min-width:6.5em; }
.tl-talks .t-sp{ display:block; color:var(--ink-3); font-size:.85rem; }
.tl-meta{ display:flex; gap:.5rem; flex-wrap:wrap; margin-top:.9rem; }

.legend{ margin-top:2rem; font-size:.85rem; color:var(--ink-3); display:flex; align-items:center; gap:.6rem; flex-wrap:wrap; }

/* Forum */
.forum-grid{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.1fr); gap:clamp(2rem,5vw,4.5rem); align-items:start; }
.forum-sub{
  font-family:var(--font-display); font-style:italic;
  font-size:clamp(1.05rem,2vw,1.4rem); color:var(--sage-soft); margin-top:.8rem;
}
html[lang="ar"] .forum-sub{ font-style:normal; }
.pillars{ display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:1.8rem; margin-top:clamp(2.5rem,5vw,4rem); }
.pillar{
  padding-top:1.1rem; border-top:1px solid rgba(212,182,121,.3);
}
.pillar-n{ font-family:var(--font-display); font-size:1.6rem; color:var(--gold-lite); display:block; margin-bottom:.5rem; line-height:1; }
.pillar h3{ font-size:var(--fs-h4); color:var(--ivory); margin-bottom:.4rem; }
.pillar p{ font-size:.88rem; color:rgba(239,231,216,.7); }

/* Speakers */
.speaker-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:clamp(1.2rem,2.5vw,2rem); }
.sp-card{ text-align:center; }
.sp-photo{
  aspect-ratio:1; border-radius:50%; overflow:hidden; margin:0 auto .95rem; max-width:170px;
  background:linear-gradient(160deg,var(--parchment-2),var(--parchment-3));
  border:1px solid rgba(184,147,90,.34); display:grid; place-items:center;
  transition:transform .35s var(--ease), box-shadow .35s var(--ease);
}
.sp-card:hover .sp-photo{ transform:translateY(-4px); box-shadow:var(--shadow-md); }
.sp-photo img{ width:100%; height:100%; object-fit:cover; }
.sp-photo .ph-ico{ opacity:.35; }
.sp-name{ font-size:var(--fs-h4); margin-bottom:.25rem; }
.sp-aff{ font-size:.82rem; color:var(--ink-3); line-height:1.5; }
.sp-role{
  display:inline-block; margin-top:.5rem; font-size:.75rem; letter-spacing:.13em;
  text-transform:uppercase; color:var(--gold-ink); font-weight:600;
}
html[lang="ar"] .sp-role{ letter-spacing:0; font-size:.74rem; text-transform:none; }
.sp-card.is-slot .sp-photo{ border-style:dashed; }
/* Sessions whose line-up is outstanding. Not a card and not a circle: it must not compete with a confirmed speaker. */
.sp-pending{
  margin-top:clamp(2.6rem,5vw,4rem);
  padding-top:clamp(1.6rem,3vw,2.2rem);
  border-top:1px solid rgba(184,147,90,.28);
}
.sp-pending:empty{ display:none; }
.sp-pending-lead{
  font-size:.78rem; letter-spacing:.16em; text-transform:uppercase;
  color:var(--ink-3); margin:0 0 1rem;
}
html[lang="ar"] .sp-pending-lead{ letter-spacing:0; font-size:.94rem; text-transform:none; }
.sp-pending-list{
  display:flex; flex-wrap:wrap; gap:.5rem .6rem; margin:0; padding:0; list-style:none;
}
.sp-pending-list li{
  font-size:.82rem; color:var(--ink-2);
  border:1px solid rgba(184,147,90,.3); border-radius:3px;
  padding:.34rem .7rem;
}

/* Lucky draw */
.draw-grid{ display:grid; grid-template-columns:minmax(0,1.35fr) minmax(0,.85fr); gap:clamp(2rem,4vw,3.5rem); align-items:start; }
.tick-list{ margin-top:1.6rem; display:flex; flex-direction:column; gap:.9rem; }
.tick-list li{ position:relative; padding-inline-start:2rem; color:var(--ink-2); }
.tick-list li::before{
  content:"✦"; position:absolute; inset-inline-start:0; top:0; color:var(--gold); font-size:.9em;
}
.note-card{
  background:rgba(255,255,255,.5); border:1px solid rgba(184,147,90,.4);
  border-radius:var(--r-md); padding:clamp(1.4rem,2.6vw,2rem);
  backdrop-filter:blur(4px);
}
.note-card h3{ font-size:var(--fs-h4); margin-bottom:.7rem; color:var(--forest); }
.note-card p{ font-size:.92rem; color:var(--ink-2); }
/* On a forest ground both need the ivory ramp; their light-ground defaults go muddy. */
.section-forest .tick-list li{ color:rgba(239,231,216,.82); }
.section-forest .note-card{
  background:rgba(12,20,16,.34); border-color:rgba(212,182,121,.34);
}
.section-forest .note-card h3{ color:var(--gold-lite); }
.section-forest .note-card p{ color:rgba(239,231,216,.76); }

/* Sponsors */
.tier{ margin-bottom:clamp(2.5rem,5vw,4rem); }
.tier-head{ display:flex; align-items:baseline; gap:1rem; flex-wrap:wrap; margin-bottom:1.4rem; padding-bottom:.8rem; border-bottom:1px solid rgba(184,147,90,.3); }
.tier-name{ font-size:var(--fs-h3-sm); }
.tier-note{ font-size:.84rem; color:var(--ink-3); margin:0; }
/* Stands in for a whole tier's worth of empty slots — see renderSponsors(). */
.tier-pending{ margin:0; font-size:.95rem; font-style:italic; color:var(--ink-3); }
.logo-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(170px,1fr)); gap:1rem; }
.logo-slot{
  aspect-ratio:16/9; display:grid; place-items:center; border-radius:var(--r-md);
  background:var(--ivory); border:1px dashed rgba(184,147,90,.45);
  color:var(--ink-3); font-size:.68rem; letter-spacing:.13em; text-transform:uppercase; text-align:center; padding:.8rem;
}
html[lang="ar"] .logo-slot{ letter-spacing:0; font-size:.82rem; text-transform:none; }
.logo-slot.is-filled{ border-style:solid; border-color:rgba(184,147,90,.28); box-shadow:var(--shadow-sm); }
.logo-slot img{ max-width:78%; max-height:70%; object-fit:contain; }

/* Named-hosts strip. Keeps a dark ground even though #partners is light: these logos are drawn for a dark backdrop. */
.plogos{
  position:relative; isolation:isolate; overflow:hidden;
  display:flex; flex-wrap:wrap; justify-content:center;
  margin:1.4rem auto 0; max-width:900px;
  padding:clamp(1.6rem,4vw,2.4rem) clamp(1rem,3vw,1.6rem);
  border-radius:18px; border:1px solid rgba(212,182,121,.28);
  background:linear-gradient(175deg,var(--forest-2),var(--forest));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05), var(--shadow-md);
}
.pl-glow{
  position:absolute; inset:-45% -15%; z-index:-1; pointer-events:none;
  background:
    radial-gradient(38% 55% at 18% 28%,rgba(212,182,121,.22),transparent 72%),
    radial-gradient(42% 60% at 82% 74%,rgba(212,182,121,.16),transparent 72%);
  filter:blur(26px); animation:plGlowDrift 11s ease-in-out infinite alternate;
}
@keyframes plGlowDrift{ from{transform:translate(0,0) scale(1)} to{transform:translate(3%,-4%) scale(1.1)} }
.plogo{
  flex:1 1 170px; max-width:210px; position:relative; cursor:default;
  display:flex; flex-direction:column; align-items:center; justify-content:center; text-align:center;
  padding:1.1rem 1.2rem; border-radius:14px;
  animation:plFloat 6s ease-in-out infinite;
  transition:transform .4s var(--ease);
}
.plogo:nth-child(3){animation-delay:-1.5s}
.plogo:nth-child(4){animation-delay:-3s}
.plogo:nth-child(5){animation-delay:-4.5s}
@keyframes plFloat{ 0%,100%{transform:translateY(0)} 50%{transform:translateY(-6px)} }
.plogo::after{
  content:""; position:absolute; inset:-6%; z-index:-1; border-radius:16px;
  background:radial-gradient(60% 70% at 50% 45%,rgba(212,182,121,.32),rgba(212,182,121,.1) 55%,transparent 75%);
  filter:blur(6px); opacity:.55;
  animation:plPulse 4.5s ease-in-out infinite;
  transition:opacity .4s var(--ease), filter .4s var(--ease);
}
.plogo:nth-child(3)::after{animation-delay:-1.1s}
.plogo:nth-child(4)::after{animation-delay:-2.3s}
.plogo:nth-child(5)::after{animation-delay:-3.4s}
@keyframes plPulse{ 0%,100%{opacity:.4;transform:scale(.96)} 50%{opacity:.68;transform:scale(1.04)} }
/* No `outline:none`: the focus ring is the only thing telling a keyboard user where focus is. */
.plogo:hover,.plogo:focus-visible{ transform:translateY(-6px) scale(1.04); }
.plogo:hover::after,.plogo:focus-visible::after{ opacity:1; filter:blur(10px); }
.plogo .lmark{
  height:50px; width:100%; display:flex; align-items:center; justify-content:center;
  margin-bottom:.6rem; transition:transform .4s var(--ease);
}
.plogo:hover .lmark,.plogo:focus-visible .lmark{ transform:scale(1.08); }
.plogo img{
  max-height:100%; max-width:152px; width:auto; height:auto; object-fit:contain; border-radius:4px;
  filter:drop-shadow(0 2px 10px rgba(0,0,0,.25)); transition:filter .4s var(--ease);
}
.plogo:hover img,.plogo:focus-visible img{ filter:drop-shadow(0 4px 16px rgba(212,182,121,.5)); }
/* the coin-spin is scoped to the organizer's mark only, not shared by the other cards */
.spin-badge{ position:relative; width:152px; max-width:100%; height:44px; transform-style:preserve-3d; animation:coinSpin 8s linear infinite; }
.spin-badge .face{ position:absolute; inset:0; margin:auto; backface-visibility:hidden; }
.spin-badge .face.back{ transform:rotateY(180deg); }
@keyframes coinSpin{ from{transform:rotateY(0deg)} to{transform:rotateY(360deg)} }
.plogo .wm{
  font-family:var(--font-display); font-size:.92rem; color:rgba(239,231,216,.86);
  letter-spacing:.13em; line-height:1.4; margin:0;
  transition:color .4s var(--ease), text-shadow .4s var(--ease);
}
html[lang="ar"] .plogo .wm{ letter-spacing:0; }
.plogo:hover .wm,.plogo:focus-visible .wm{ color:var(--ivory); text-shadow:0 0 18px rgba(212,182,121,.5); }
.plogo .rl{
  font-size:.75rem; letter-spacing:.15em; text-transform:uppercase; color:var(--gold-lite);
  margin:.6rem 0 0; opacity:.92; transition:opacity .4s var(--ease);
}
html[lang="ar"] .plogo .rl{ letter-spacing:0; font-size:.78rem; text-transform:none; }
.plogo:hover .rl,.plogo:focus-visible .rl{ opacity:1; }

/* Venue */
.venue-grid{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:clamp(2rem,5vw,4rem); align-items:center; }
/* Helnan mark is gold-on-transparent, legible here because #venue is .section-forest. */
.venue-logo{ height:44px; margin-bottom:1.4rem; }
.venue-logo:empty{ display:none; }
.venue-logo img{ height:100%; width:auto; max-width:180px; object-fit:contain; }
.venue-copy .h3{ margin-bottom:1rem; }
.venue-copy .btn{ margin-top:1.6rem; }
/* Venue photo gallery: crossfading hero + thumbnail rail */
.venue-gallery{ display:flex; flex-direction:column; gap:1rem; }
.venue-gallery-main{
  position:relative; margin:0; aspect-ratio:4/3; border-radius:var(--r-md); overflow:hidden;
  box-shadow:0 22px 44px rgba(8,14,10,.3); border:1px solid rgba(212,182,121,.3);
  background:rgba(239,231,216,.06);
}
.venue-gallery-main::after{
  content:""; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(215deg,rgba(184,147,90,.14) 0%,transparent 30%),
             linear-gradient(to top,rgba(8,14,10,.36) 0%,transparent 40%);
}
.venue-gallery-main img{
  width:100%; height:100%; object-fit:cover; display:block;
  opacity:1; transition:opacity .38s var(--ease);
}
.venue-gallery-cap{
  position:absolute; left:0; bottom:0; margin:0; z-index:1;
  padding:.55rem 1rem; font-size:.76rem; letter-spacing:.1em; text-transform:uppercase;
  color:var(--ivory); background:linear-gradient(to top,rgba(8,14,10,.6),transparent);
}
.venue-gallery-cap:empty{ padding:0; }
html[lang="ar"] .venue-gallery-cap{ letter-spacing:0; text-transform:none; font-size:.85rem; left:auto; right:0; }
/* One row for however many shots the `images` array holds; column auto-flow leaves no dead cell. */
.venue-gallery-thumbs{
  display:grid; grid-auto-flow:column; grid-auto-columns:minmax(0,1fr); gap:.6rem;
}
.venue-thumb{
  position:relative; padding:0; margin:0; border:0; cursor:pointer;
  aspect-ratio:1/1; border-radius:6px; overflow:hidden; background:none;
  box-shadow:0 0 0 1px rgba(212,182,121,.22);
  transition:box-shadow .3s var(--ease), transform .3s var(--ease);
}
.venue-thumb img{ width:100%; height:100%; object-fit:cover; display:block; opacity:.62; transition:opacity .3s var(--ease); }
.venue-thumb:hover,.venue-thumb:focus-visible{ transform:translateY(-3px); }
.venue-thumb:hover img,.venue-thumb:focus-visible img{ opacity:.85; }
.venue-thumb.is-active{ box-shadow:0 0 0 2px var(--gold-lite); }
.venue-thumb.is-active img{ opacity:1; }
@media (max-width:640px){ .venue-gallery-thumbs{ gap:.4rem; } }
.alex-block{
  margin-top:clamp(3rem,6vw,5rem); padding-top:clamp(2.5rem,5vw,3.5rem);
  border-top:1px solid rgba(239,231,216,.16);
}
/* Compass medallion inline beside the heading, for a tighter pairing with the title. */
.alex-head{
  display:flex; align-items:center; gap:clamp(.9rem,2vw,1.2rem);
  margin-bottom:1.6rem;
}
.alex-icon{
  display:flex; align-items:center; justify-content:center; flex:0 0 auto;
  width:clamp(44px,5.5vw,52px); height:clamp(44px,5.5vw,52px); border-radius:50%;
  border:1px solid rgba(212,182,121,.4); color:var(--gold-lite);
  background:radial-gradient(circle at 50% 40%,rgba(212,182,121,.14),transparent 70%);
  box-shadow:0 0 0 1px rgba(212,182,121,.08), 0 4px 14px rgba(11,25,19,.35);
}
.alex-head .h3{ margin-bottom:0; }
/* Gallery on top, a hairline divider, then the guidance copy. */
.alex-grid{ display:flex; flex-direction:column; }
/* Three guidance sentences, each with its own icon and label. Do not use a CSS multi-column flow: it breaks the paragraphs mid-sentence. */
.alex-points{
  display:grid; grid-template-columns:repeat(3,1fr); gap:clamp(1.5rem,3vw,2.5rem);
  max-width:920px; margin-inline:auto;
}
.alex-point{ display:flex; flex-direction:column; align-items:center; text-align:center; }
.alex-point-ico{
  width:42px; height:42px; border-radius:50%; display:grid; place-items:center; flex:0 0 auto;
  margin-bottom:1rem; color:var(--gold-lite); border:1px solid rgba(212,182,121,.32);
  background:radial-gradient(circle at 50% 40%,rgba(212,182,121,.14),transparent 70%);
}
.alex-point h4{
  font-size:.78rem; letter-spacing:.12em; text-transform:uppercase; font-weight:600;
  color:var(--gold-lite); margin-bottom:.6rem;
}
html[lang="ar"] .alex-point h4{ letter-spacing:0; text-transform:none; }
.alex-point p{ font-size:.92rem; line-height:1.65; color:rgba(239,231,216,.86); margin:0; }
@media (max-width:760px){
  .alex-points{ grid-template-columns:1fr; max-width:46ch; gap:1.8rem; }
}
/* The same .venue-gallery crossfade component, scaled up as the section's lead visual. */
.alex-figs{ position:relative; }
.venue-gallery-lg .venue-gallery-main{ aspect-ratio:2.1/1; background:#0b1913; }
.venue-gallery-lg .venue-gallery-main img[data-fit="contain"]{ object-fit:contain; }
/* width:100% is load-bearing: auto cross-axis margins suppress the flex stretch, and `1fr` columns against an indefinite width resolve to zero. */
.venue-gallery-lg .venue-gallery-thumbs{ width:100%; max-width:640px; margin-inline:auto; }
/* The large rail carries more shots, so it wraps rather than shrinking thumbs below a usable tap target. */
@media (max-width:640px){
  .venue-gallery-lg .venue-gallery-thumbs{ grid-auto-flow:row; grid-template-columns:repeat(3,minmax(0,1fr)); }
}
.alex-credit{
  /* Image attribution has to stay legible: 12px at a readable alpha, never smaller. */
  margin:.7rem 0 0; font-size:.75rem;
  color:rgba(239,231,216,.78); letter-spacing:.02em; text-align:end;
}
.alex-credit:empty{ display:none; }
/* Gold as a metal, not a flat swatch: the line catches light at its centre. */
.alex-divider{
  height:1px; margin:clamp(2rem,4.5vw,3rem) auto; max-width:220px;
  background:linear-gradient(90deg,transparent,var(--gold-lite) 50%,transparent);
  opacity:.55;
}
@media (max-width:900px){
  .venue-gallery-lg .venue-gallery-main{ aspect-ratio:4/3; }
  .alex-figs{ margin-top:.5rem; }
}

/* Attendee info */
.reg-card{
  display:grid; grid-template-columns:minmax(0,1fr); gap:clamp(1.5rem,3vw,2.5rem);
  align-items:center; background:var(--ivory);
  border:1px solid rgba(184,147,90,.3); border-inline-start:3px solid var(--gold);
  border-radius:var(--r-md); padding:clamp(1.4rem,3vw,2.2rem);
  margin-bottom:clamp(2rem,4vw,3rem); box-shadow:var(--shadow-sm);
}
.reg-time{ font-family:var(--font-display); font-size:1.5rem; color:var(--gold-ink); font-weight:600; }
.reg-card h3{ margin:.3rem 0 0; }

.info-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(270px,1fr)); gap:clamp(1.1rem,2.2vw,1.6rem); align-items:stretch; }
.info-card{
  display:flex; flex-direction:column; height:100%;
  padding:clamp(1.5rem,2.6vw,2rem);
  background:linear-gradient(165deg,rgba(255,255,255,.55),rgba(255,255,255,.18));
  border:1px solid rgba(184,147,90,.22); border-radius:var(--r-md);
  box-shadow:0 1px 0 rgba(255,255,255,.4) inset, 0 10px 24px rgba(38,54,44,.05);
  transition:border-color .3s var(--ease), transform .3s var(--ease), box-shadow .3s var(--ease);
}
.info-card:hover{
  border-color:rgba(184,147,90,.5); transform:translateY(-4px);
  box-shadow:0 1px 0 rgba(255,255,255,.4) inset, 0 18px 32px rgba(38,54,44,.1);
}
.info-ico{
  width:44px; height:44px; border-radius:50%; display:grid; place-items:center; flex:0 0 auto;
  background:rgba(184,147,90,.14); color:var(--gold); margin-bottom:1.15rem;
  border:1px solid rgba(184,147,90,.28);
  transition:background .35s var(--ease), color .35s var(--ease);
}
/* The one contained use of --sage as a second accent: this hover only. */
.info-card:hover .info-ico{ background:rgba(110,133,112,.18); color:var(--sage); }
.info-card h4{
  font-size:var(--fs-h4); margin-bottom:.9rem; padding-bottom:.8rem;
  border-bottom:1px solid rgba(184,147,90,.18);
}
.info-card ul{ flex:1; }
.info-card li{ position:relative; padding-inline-start:1.15rem; font-size:.9rem; line-height:1.55; color:var(--ink-2); margin-bottom:.55rem; }
.info-card li:last-child{ margin-bottom:0; }
.info-card li::before{
  content:""; position:absolute; inset-inline-start:0; top:.62em;
  width:5px; height:5px; border-radius:50%; background:var(--gold);
}
.fineprint{
  margin-top:clamp(2rem,4vw,3rem); display:grid;
  grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:1.5rem;
  padding-top:1.8rem; border-top:1px solid rgba(184,147,90,.28);
}
.fineprint h5{
  font-family:var(--font-body); font-size:.75rem; letter-spacing:.16em;
  text-transform:uppercase; color:var(--gold-ink); margin:0 0 .5rem; font-weight:600;
}
html[lang="ar"] .fineprint h5{ letter-spacing:0; font-size:.82rem; text-transform:none; }
.fineprint p{ font-size:.86rem; color:var(--ink-3); }

/* Organisation */
.org-stack{ display:flex; flex-direction:column; gap:clamp(2.5rem,5vw,4.5rem); }
.org-block{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:clamp(1.8rem,4vw,3.5rem); align-items:center; }
.org-block:nth-child(even) .org-fig{ order:-1; }
/* These figures are lazy-loaded, so the ratio reserves their space and keeps #org from shifting. `contain` keeps the certificate and wordmark uncropped. */
.org-fig{
  margin:0; border-radius:var(--r-md); overflow:hidden; box-shadow:var(--shadow-md);
  background:var(--parchment-2); aspect-ratio:16/10;
}
.org-fig img{ width:100%; height:100%; object-fit:contain; display:block; }
.org-copy h3{ margin-bottom:1rem; }
.org-copy .prose{ font-size:.98rem; }

/* "Our Branches" */
/* This block's photo is 3:2, so its frame overrides the shared 16:10 default. */
.org-block-branches{ grid-template-columns:minmax(0,1fr) minmax(0,1.12fr); }
.org-fig-branches{ aspect-ratio:3/2; }

/* Organisation stats */
/* The first figure is the network total and the other four break it down. */
.stat-row{
  display:flex; align-items:flex-end; flex-wrap:wrap;
  gap:clamp(1rem,2.4vw,1.9rem);
  margin-top:1.8rem; padding-top:1.5rem;
  border-top:1px solid rgba(184,147,90,.28);
}
/* tabular-nums so the count-up animation doesn't reflow the row on every frame */
.stat b{ display:block; font-family:var(--font-display); font-size:1.85rem; color:var(--gold); line-height:1; font-weight:600; font-variant-numeric:tabular-nums; }
.stat span{ display:block; margin-top:.4rem; font-size:.75rem; letter-spacing:.12em; text-transform:uppercase; color:var(--ink-3); }
html[lang="ar"] .stat span{ letter-spacing:0; font-size:.85rem; text-transform:none; }
/* --ink-3 is a light-ground token (2.68:1 on --forest). Every stats block sits in #org, a forest section. */
.section-forest .stat span{ color:rgba(239,231,216,.72); }
.section-forest .stat b{ color:var(--gold-lite); }
.stat-lead{ padding-inline-end:clamp(1rem,2.4vw,1.9rem); border-inline-end:1px solid rgba(184,147,90,.28); }
.stat-lead b{ font-size:clamp(2.6rem,5.2vw,3.4rem); letter-spacing:-.02em; }
.stat-lead span{ color:var(--gold-ink); }
.section-forest .stat-lead span{ color:var(--gold-lite); }

/* the chairman card trails the org blocks, separated by the same gold hairline */
.org-chairman{
  margin-top:clamp(2.5rem,5vw,4.5rem);
  padding-top:clamp(2.5rem,5vw,4.5rem);
  border-top:1px solid rgba(184,147,90,.28);
}

/* Committees */
.committee-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:clamp(2.5rem,5vw,4rem); }
.committee{ padding-inline-start:clamp(1.4rem,3vw,2rem); border-inline-start:1px solid rgba(184,147,90,.32); }
.committee .h3{ margin-bottom:1rem; }
.committee .prose{ font-size:.96rem; }
.cm-label{
  margin:clamp(1.6rem,3vw,2.2rem) 0 .9rem;
  font-size:.75rem; letter-spacing:.16em; text-transform:uppercase; color:var(--ink-2);
}
html[lang="ar"] .cm-label{ letter-spacing:0; font-size:.88rem; text-transform:none; }
.cm-list{ list-style:none; margin:0; padding:0; display:flex; flex-wrap:wrap; gap:.5rem; }
.cm-name{
  font-size:.86rem; color:var(--ink-2);
  padding:.4rem .8rem; border-radius:var(--r-sm);
  background:rgba(184,147,90,.09); border:1px solid rgba(184,147,90,.24);
}

/* Thank you */
/* A slow gold sweep across the wordmark. The clamp ceiling sits below .hero-title so the closing line does not out-rank the event name. */
.thanks-title{
  font-size:clamp(2.2rem,5.2vw,4rem); color:var(--ivory);
  letter-spacing:-.02em; margin-bottom:1.3rem;
  background:linear-gradient(100deg,var(--ivory) 30%,var(--gold-lite) 50%,var(--ivory) 70%);
  background-size:220% 100%;
  -webkit-background-clip:text; background-clip:text; color:transparent;
  animation:fShine 7s linear infinite;
}
@keyframes fShine{ 0%{background-position:200% 0} 100%{background-position:-20% 0} }
.thanks-body{
  font-family:var(--font-display); font-style:italic;
  font-size:clamp(1.05rem,2.2vw,1.5rem); color:rgba(239,231,216,.72);
  max-width:34ch; margin-inline:auto;
}
html[lang="ar"] .thanks-body{ font-style:normal; }

/* Footer */
.site-footer{ background:#1B2620; color:rgba(239,231,216,.6); padding:clamp(2.5rem,5vw,4rem) 0 1.6rem; }
.footer-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:2rem; padding-bottom:2rem; border-bottom:1px solid rgba(239,231,216,.12); }
.footer-brand{ font-family:var(--font-display); font-size:1.25rem; color:var(--ivory); margin-bottom:.3rem; }
.footer-meta{ font-size:.85rem; margin-bottom:.35rem; }
/* inline-block + padding, so the link gets a real 44px hit area rather than line height */
.footer-link{
  font-size:.85rem; color:var(--gold-lite); text-decoration:none;
  display:inline-block; padding:.7rem 0; min-height:44px;
}
.footer-link:hover{ text-decoration:underline; }
/* .55 is the alpha that clears 4.5:1 on #1B2620 at 12px — do not dim it further. */
.copyright{ text-align:center; font-size:.75rem; margin:1.6rem 0 0; color:rgba(239,231,216,.55); }

/* Reveal on scroll */
.reveal{ opacity:0; transform:translateY(22px); transition:opacity .7s var(--ease), transform .7s var(--ease); }
.reveal.is-in{ opacity:1; transform:none; }

/* Responsive */
@media (max-width:900px){
  /* lede → poster → detail keeps the key visual high without burying the CTAs */
  .hero-inner{
    grid-template-columns:minmax(0,1fr);
    grid-template-areas:"lede" "poster" "detail";
    max-width:520px; justify-items:center; text-align:center;
    row-gap:clamp(1.6rem,4vw,2.2rem);
  }
  .hero-lede, .hero-detail{ align-self:auto; width:100%; }
  .hero-poster{ width:min(300px,72%); transform:rotate(-1.2deg); }
  .hero .eyebrow{ justify-content:center; }
  .hero .eyebrow::after{ display:none; }
  .hero-facts{ align-items:center; }
  .hero-facts li{ justify-content:center; text-align:left; }
  .venue-lines{ align-items:center; }
  .countdown, .hero-cta{ justify-content:center; }
  /* Tightens the hero stack enough to land the CTA above the fold on a standard handset. */
  .hero-frame{ padding-top:clamp(3.4rem,11vw,4.5rem); }
  .hero-inner{ row-gap:clamp(1rem,3vw,1.5rem); }
  .hero-title{ font-size:clamp(2.3rem,9vw,3.4rem); }
  .hero-poster{ width:min(300px,54%); }
  .countdown{ margin:1rem 0 1.1rem; padding-top:1rem; }
  /* min-height holds the 44px touch floor; the reduced padding alone leaves buttons under it. */
  .hero-cta{ gap:.5rem; }
  .hero-cta .btn{ padding:.6rem 1rem; min-height:44px; font-size:.8rem; }
}
/* Short handsets: the poster steps down rather than the CTA sliding under the fold. */
@media (max-width:900px) and (max-height:700px){
  .hero-frame{ padding-top:2.5rem; }
  .hero-poster{ width:min(300px,42%); }
  .hero-inner{ row-gap:.8rem; }
  .countdown{ margin:.7rem 0 .8rem; padding-top:.7rem; }
  /* Below a 640px fold the CTA trades places with the countdown, so the action stays reachable. */
  .hero-detail{ display:flex; flex-direction:column; }
  .hero-cta{ order:1; }
  .countdown{ order:2; margin:.9rem 0 0; }
}
@media (max-width:1000px){
  .split, .hippo-grid, .forum-grid, .venue-grid, .draw-grid, .org-block, .org-block-branches{ grid-template-columns:1fr; }
  .org-block:nth-child(even) .org-fig{ order:0; }
  .leader{ grid-template-columns:minmax(0,200px) minmax(0,1fr); }
  .stat-row{ gap:clamp(.9rem,4vw,1.5rem); }
}
@media (max-width:520px){
  /* A fixed 2-up, so the four breakdown cells read as one set instead of ragged rows. */
  .stat-row{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); align-items:start; }
  .stat-lead{ grid-column:1 / -1; padding-inline-end:0; border-inline-end:0; padding-bottom:.9rem; border-bottom:1px solid rgba(184,147,90,.28); }
}
/* The twelve-link nav stops fitting just above 1080px. Re-measure if you add a link. */
@media (max-width:1080px){
  :root{ --shell: min(1180px, 100% - 1.8rem); }
  .site-nav{
    position:fixed; inset-block:0; inset-inline-end:0; width:min(310px,82vw);
    flex-direction:column; gap:.2rem; justify-content:flex-start;
    background:var(--parchment); border-inline-start:1px solid rgba(184,147,90,.3);
    padding:5rem 1.6rem 2rem; box-shadow:var(--shadow-lg);
    transform:translateX(105%); transition:transform .4s var(--ease); margin:0;
    /* The twelve links run taller than a short viewport, so the drawer has to scroll. */
    overflow-y:auto; overscroll-behavior:contain;
  }
  html[dir="rtl"] .site-nav{ transform:translateX(-105%); }
  .site-nav.is-open{ transform:none; }
  .site-nav a{ font-size:1rem; padding:.75rem .4rem; border-bottom:1px solid rgba(184,147,90,.16); color:var(--ink-2); }
  .site-nav a::after{ display:none; }
  .site-nav a:hover, .site-nav a.is-active{ color:var(--ink); }
  .nav-burger{ display:block; }
  /* The open drawer paints over any static sibling, including the burger that closes it. The burger needs its own stacking context. */
  .header-actions{ margin-inline-start:auto; position:relative; z-index:901; }
  .site-nav{ z-index:899; }
  /* brand + lang + burger need ~386px; below that the brand absorbs the squeeze. */
  .header-inner{ gap:.5rem; }
  .brand{ flex:0 1 auto; min-width:0; }
  .brand-text{ min-width:0; }
  .brand-text b, .brand-text i{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  body.nav-open{ overflow:hidden; }
  .leader{ grid-template-columns:1fr; }
  .leader-photo{ max-width:230px; }
  .hero-frame{ outline-offset:-9px; }
}
@media (max-width:520px){
  .countdown{ gap:.5rem; }
  .cd-unit{ min-width:52px; }
  .hero-facts{ font-size:.9rem; }
  .tl-talks li{ flex-direction:column; gap:.15rem; }
  .tl-talks .t-time{ min-width:0; }
}
/* Only genuinely narrow bars need the brand tightened; at 375px it still fits. */
@media (max-width:370px){
  .brand-text b{ font-size:.95rem; }
  .brand-text i{ font-size:.7rem; letter-spacing:.07em; }
}

@media print{
  .site-header,.nav-burger,.hero-cta,.countdown,.skip-link{ display:none !important; }
  body::before{ display:none; }
  .section{ padding:1.5rem 0; break-inside:avoid; }
  .section-forest,.section-thanks{ background:#fff !important; color:#000 !important; }
  .section-forest .h2,.section-forest .h3,.thanks-title{ color:#000 !important; }
  .reveal{ opacity:1 !important; transform:none !important; }
}
