/* MSN26 — overrides + new sections (loaded AFTER style.css). */

/* ============================================================
   B'Fort CSS Imports (10 new elements from RT arsenal audit)
   Source: msn26-bfort-web-arsenal-matrix-2026-05-26.md
   ============================================================ */

/* 1. Nav backdrop-filter blur — smoother glass effect (from EGC26) */
.nav {
  -webkit-backdrop-filter: blur(20px) saturate(1.4);
  backdrop-filter: blur(20px) saturate(1.4);
  background: rgba(10, 10, 10, 0.75);
}

/* 2. Kicker ::before red accent line (from EGC26) */
.section-pretitle {
  position: relative;
  display: inline-block;
  padding-left: 44px;
}
.section-pretitle::before {
  content: '';
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  width: 32px;
  height: 2px;
  background: #e31b23;
}

/* 3. Drop cap — handled in style.css (.manifesto-lead::first-letter) */

/* 4. Pullquote (from Kozminski offer) */
.pullquote {
  font-family: 'Playfair Display', serif;
  font-size: clamp(1.1rem, 2.5vw, 1.4rem);
  font-weight: 600;
  font-style: italic;
  line-height: 1.25;
  color: var(--on-dark-primary);
  border-left: 3px solid #e31b23;
  padding-left: 1.2rem;
  margin: 2rem 0;
  max-width: 700px;
}

/* 5. Stats tiles — 4-col large number tiles (from Kozminski offer) */
.stats-tiles {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1.5rem;
  max-width: 1100px;
  margin: 0 auto 2rem;
  padding: 0 2rem;
}
.stats-tile {
  text-align: center;
  padding: 2rem 1rem;
  background: var(--bg-tertiary);
  border: 1px solid var(--border);
}
.stats-tile .tile-number {
  font-family: 'Playfair Display', serif;
  font-size: clamp(2.5rem, 5vw, 4rem);
  font-weight: 500;
  color: var(--on-dark-accent);
  line-height: 1;
  margin-bottom: 0.5rem;
}
.stats-tile .tile-label {
  font-size: 0.75rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--on-dark-muted);
}
@media (max-width: 768px) {
  .stats-tiles { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 480px) {
  .stats-tiles { grid-template-columns: 1fr; }
}

/* 6. Benefits grid — 2-col icon+title+desc (from Kozminski offer) */
.benefits-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 2rem;
  max-width: 1100px;
  margin: 0 auto;
  padding: 0 2rem;
}
.benefit-card {
  padding: 1.5rem;
  background: var(--bg-tertiary);
  border: 1px solid var(--border);
  transition: border-color 180ms ease, transform 180ms ease;
}
.benefit-card:hover {
  border-color: var(--accent-gold);
  transform: translateY(-2px);
}
.benefit-card h4 {
  font-size: 1rem;
  font-weight: 600;
  color: var(--on-dark-primary);
  margin-bottom: 0.5rem;
}
.benefit-card p {
  font-size: 0.9rem;
  color: var(--on-dark-secondary);
  line-height: 1.6;
}
@media (max-width: 640px) {
  .benefits-grid { grid-template-columns: 1fr; }
}

/* 7. Rich partner cards (from YWC26 partners-section) */
.partner-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 2rem 1.5rem;
  background: var(--bg-tertiary);
  border: 1px solid var(--border);
  transition: border-color 180ms ease;
}
.partner-card:hover {
  border-color: var(--accent-gold);
}
.partner-card .partner-logo {
  max-height: 60px;
  max-width: 160px;
  object-fit: contain;
  margin-bottom: 1rem;
  filter: grayscale(100%) opacity(0.7);
  transition: filter 180ms ease;
}
.partner-card:hover .partner-logo {
  filter: grayscale(0%) opacity(1);
}
.partner-card .partner-category {
  font-size: 0.65rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--on-dark-accent);
  margin-bottom: 0.75rem;
}
.partner-card .partner-name {
  font-size: 1rem;
  font-weight: 600;
  color: var(--on-dark-primary);
  margin-bottom: 0.5rem;
}
.partner-card .partner-desc {
  font-size: 0.85rem;
  color: var(--on-dark-muted);
  line-height: 1.5;
}

/* 8. Gold accent typography classes (from rt-www-home globals.css) */
.rt-event-name {
  color: var(--on-dark-accent);
  font-style: italic;
}
.rt-building-name {
  color: var(--on-dark-accent);
  font-weight: 600;
}
.rt-email-link {
  color: var(--on-dark-accent-bright);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: border-color 180ms ease;
}
.rt-email-link:hover {
  border-bottom-color: var(--on-dark-accent-bright);
}

/* 9. Signal ticker — horizontal scroll in hero (from rt-www-home) */
.signal-ticker {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 2rem;
  padding: 0.75rem 1rem;
  background: var(--bg-secondary);
  border-top: 1px solid var(--border);
  border-bottom: 1px solid var(--border);
  font-family: 'Geist Mono', monospace;
  font-size: 0.72rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--on-dark-muted);
  overflow-x: auto;
  white-space: nowrap;
}
.signal-ticker .ticker-item {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}
.signal-ticker .ticker-dot {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--on-dark-accent);
  flex-shrink: 0;
}

/* 10. Status badge pills (from Obsidian slides) */
.badge {
  display: inline-block;
  padding: 0.2rem 0.6rem;
  font-size: 0.6rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 600;
  border: 1px solid;
}
.badge--confirmed {
  color: #4ade80;
  border-color: #4ade80;
}
.badge--in-talks {
  color: var(--on-dark-accent);
  border-color: var(--accent-gold);
}
.badge--aspirational {
  color: var(--on-dark-muted);
  border-color: var(--border);
}

/* ============================================================
   Ticket pricing phases
   ============================================================ */
.ticket-pricing-phases {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  margin: 1.5rem 0;
  padding: 1rem;
  background: rgba(255,255,255,0.03);
  border: 1px solid var(--border);
}
.pricing-phase {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0.4rem 0;
}
.pricing-phase:not(:last-child) {
  border-bottom: 1px solid rgba(255,255,255,0.06);
}
.phase-label {
  font-size: 0.78rem;
  color: var(--on-dark-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.phase-price {
  font-family: 'Playfair Display', serif;
  font-size: 1.1rem;
  font-weight: 600;
  color: var(--on-dark-accent);
}

/* ============================================================
   End B'Fort CSS Imports
   ============================================================ */

/* Preview-draft banner — visible only while site is non-prod. */
.preview-banner {
  position: sticky;
  top: 0;
  z-index: 200;
  background: #e31b23;
  color: #fff;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  text-align: center;
  padding: 0.55rem 1rem;
}

/* Full-width hero with overlay text. Full-bleed 100vh per Alex 2026-05-13.
   Break out of the global `section { max-width: 1100px; padding: 7rem 3rem; }`
   cage so the video fills the viewport edge-to-edge.
   2026-05-18 (iPhone Safari fix): poster image becomes the base layer of .hero
   itself, so the hero never renders blank even when the <video> element is
   hidden (A/B poster cohort), autoplay is blocked (iOS Low Power Mode), or
   the source fails to decode. Video layers above via z-index when it plays. */
.hero {
  position: relative;
  width: 100vw;
  max-width: none;
  min-height: 100vh;
  margin: 0;
  padding: 0;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  background-image: url("../images/bg/bfort-akwarela-garden-evening.webp");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  background-color: #0f0f0f;
}
.hero-bg {
  position: absolute;
  inset: 0;
  /* override style.css shorthand that bakes in a gradient + image: we set image inline
     and apply darkening via the separate .hero-overlay div for cleaner control. */
  background: none;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  filter: none;
  z-index: 0;
}
.hero-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(10,10,10,0.55) 0%, rgba(10,10,10,0.85) 100%);
  z-index: 1;
}
/* ============================================================
   Hero — Domi-confirmed Variant B (2026-05-27)
   Gold title + 2px white outline, no glass/blur/background.
   Matches hero-outline-test.html exactly.
   ============================================================ */
.hero-content {
  position: relative;
  z-index: 2;
  max-width: min(960px, calc(100vw - 2rem));
  padding: 4rem 1rem;
  text-align: center;
  color: #ffffff;
  background: none !important;
  border: none !important;
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}
.hero-content * {
  text-shadow: 0 2px 20px rgba(0,0,0,0.8), 0 1px 4px rgba(0,0,0,0.9);
}
.hero-edition-badge { display: none !important; }
.hero-title {
  font-family: 'Playfair Display', serif;
  font-size: clamp(3rem, 7vw, 5rem) !important;
  font-weight: 700;
  line-height: 1.1;
  color: #ddc074 !important;
  -webkit-text-stroke: 2px #ffffff;
  margin-bottom: 1rem;
}
.hero-fullname {
  font-family: 'Playfair Display', serif;
  font-style: italic;
  font-size: clamp(2.2rem, 5.5vw, 3.8rem) !important;
  color: #ffffff !important;
  margin-bottom: 1.2rem;
}
.hero-date-prominent {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 1.15rem !important;
  font-weight: 600 !important;
  color: #ffffff !important;
  margin: 0.5rem 0 !important;
}
.hero-subtitle {
  display: none !important;
}
.hero-when {
  margin-top: 0.8rem;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 1.15rem !important;
  font-weight: 600;
  color: #ddc074 !important;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.hero-when {
  margin-top: 1.5rem;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  color: var(--on-dark-accent, #e3c178);
  text-transform: uppercase;
}
.hero-when-sep {
  margin: 0 0.6rem;
  color: var(--on-dark-muted, #b0aca8); /* decorative date separator dot — not text content */
}
.hero-meta {
  position: absolute;
  bottom: 1.5rem;
  right: 1.5rem;
  z-index: 2;
}

/* Full-width performance section with overlay. Full-bleed 100vh via .section-image. */
.performance {
  position: relative;
  width: 100%;
  min-height: 100vh;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}
.performance-bg {
  position: absolute;
  inset: 0;
  background: none;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  filter: none;
  z-index: 0;
}
.performance-overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(10,10,10,0.55) 0%, rgba(10,10,10,0.85) 100%);
  z-index: 1;
}
.performance-content {
  position: relative;
  z-index: 2;
  max-width: min(960px, calc(100vw - 2rem));
  padding: 4rem 1rem;
  text-align: center;
  color: var(--on-dark-primary, #ffffff);
}

/* Lang toggle button refinement — ensure 44px tap target. */
/* Lang toggle — active indicator */
.lang-opt {
  transition: color 180ms ease, opacity 180ms ease;
  opacity: 0.4;
}
.lang-opt.lang-active,
.lang-opt.is-active {
  color: #ddc074;
  opacity: 1;
  font-weight: 700;
}
.lang-toggle {
  background: transparent;
  border: 1px solid rgba(255,255,255,0.25);
  color: var(--on-dark-primary, #ffffff);
  padding: 0.5rem 0.85rem;
  min-height: 44px;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  letter-spacing: 0.08em;
  cursor: pointer;
  border-radius: 0;
  transition: background 180ms ease, border-color 180ms ease;
}
.lang-toggle:hover,
.lang-toggle:focus-visible {
  background: rgba(255,255,255,0.06);
  border-color: rgba(255,255,255,0.5);
  outline: none;
}

/* Ticket-soon banner. */
.ticket-soon-banner {
  margin: 1rem auto 2rem;
  max-width: min(720px, calc(100vw - 2rem));
  padding: 1rem 1.5rem;
  border: 1px solid var(--accent-gold, #ddc074);
  background: rgba(197,165,90,0.06);
  color: var(--on-dark-primary, #ffffff);
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.95rem;
}
.ticket-soon-banner a {
  color: var(--on-dark-accent, #e3c178);
}

/* Venue prose block. */
.venue-prose {
  max-width: min(840px, calc(100vw - 2rem));
  margin: 2rem auto 3rem;
  padding: 0 1rem;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 1rem;
  line-height: 1.7;
  color: var(--on-dark-primary, #ffffff);
}
.venue-prose p { margin-bottom: 1.2rem; }
.venue-prose strong { color: var(--on-dark-primary, #ffffff); }

/* Partners tier blocks. */
.partners-tier {
  max-width: min(960px, calc(100vw - 2rem));
  margin: 2rem auto;
  padding: 0 1rem;
}
.partners-tier h3 {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 1.4rem;
  color: var(--on-dark-accent, #e3c178);
  margin-bottom: 1rem;
}
.partners-list {
  list-style-type: disc;
  padding-left: 1.4rem;
  font-family: 'Inter', system-ui, sans-serif;
  color: var(--on-dark-primary, #ffffff);
  font-size: 1rem;
  line-height: 1.8;
}
.partners-list li { margin-bottom: 0.4rem; }

/* FAQ. */
.faq {
  max-width: min(840px, calc(100vw - 2rem));
  margin: 4rem auto;
  padding: 0 1rem;
}
.faq-list details {
  border-bottom: 1px solid rgba(255,255,255,0.08);
  padding: 1.2rem 0;
}
.faq-list summary {
  cursor: pointer;
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 1.15rem;
  color: var(--on-dark-primary, #ffffff);
  list-style: none;
  position: relative;
  padding-right: 2rem;
}
.faq-list summary::-webkit-details-marker { display: none; }
.faq-list summary::after {
  content: "+";
  position: absolute;
  right: 0;
  top: 0;
  color: var(--on-dark-accent, #e3c178);
  font-size: 1.4rem;
  transition: transform 180ms ease;
}
.faq-list details[open] summary::after { content: "−"; }
.faq-list p {
  margin-top: 0.8rem;
  color: var(--on-dark-primary, #ffffff);
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.95rem;
  line-height: 1.7;
}
.faq-list a { color: var(--on-dark-accent, #e3c178); }

/* Speaker note (under role). */
.speaker-card .speaker-note {
  margin-top: 0.8rem;
  font-size: 0.85rem;
  color: var(--on-dark-primary, #ffffff);
  line-height: 1.5;
}
.speaker-card.moderator { border-color: var(--accent-gold, #ddc074); }

/* Form note. */
.form-note {
  margin-top: 0.8rem;
  font-size: 0.85rem;
  color: var(--on-dark-muted, #b0aca8); /* form helper text below input — UI metadata */
}
.form-note a { color: var(--on-dark-accent, #e3c178); }

/* Tickets vip note. */
.tickets-vip-note {
  max-width: min(720px, calc(100vw - 2rem));
  margin: 2rem auto;
  padding: 0 1rem;
  text-align: center;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.85rem;
  color: var(--on-dark-primary, #ffffff);
  line-height: 1.6;
}

/* Mobile tap-targets. */
@media (max-width: 720px) {
  .nav-links a, .nav-cta, .lang-toggle {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
}

/* Agenda — NORMAL parallax bed (R14, 2026-06-03).
   Was a position:fixed full-viewport sticky bg whose opacity was 0 until the
   IntersectionObserver toggled .agenda-visible — so it rendered blank if that
   JS never fired. Now a standard full-bleed overscan bed mirroring
   .section-image: the garden bg always renders (opacity 1), gets a normal
   parallax when the markup's .section-bg carries data-parallax (main.js
   transforms it), and falls back to a static bed on reduced-motion + touch. */
.agenda-sticky-bg {
  position: relative;
  width: 100vw;
  max-width: none;
  margin-left: calc(-50vw + 50%);
  padding: 6rem 0;
  overflow: hidden;
}
.agenda-sticky-bg > .section-bg {
  position: absolute;
  inset: -18% 0;            /* overscan gives parallax travel room */
  z-index: 0;
  overflow: hidden;
  pointer-events: none;
  opacity: 1;               /* always visible — no JS dependency to render */
  will-change: transform;
}
/* keep .agenda-visible harmless (bg already shown) */
.agenda-sticky-bg.agenda-visible > .section-bg {
  opacity: 1;
}
/* SCRIM NEUTRALIZED 2026-06-03 WW-E — glass container provides legibility now.
   Keep the rule structure for reduced-motion/touch static fallback but zero the overlay. */
.agenda-sticky-bg > .section-bg::after {
  content: '';
  position: absolute;
  inset: 0;
  background: transparent;  /* was gradient scrim; glass replaces it */
  z-index: 1;
  pointer-events: none;
}
.agenda-sticky-bg > .section-bg img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}
.agenda-sticky-bg > *:not(.section-bg) {
  position: relative;
  z-index: 1;
  max-width: min(1160px, calc(100vw - 2.5rem));
  margin-left: auto;
  margin-right: auto;
  padding-left: 2rem;
  padding-right: 2rem;
}
.agenda-sticky-bg > .section-header {
  padding-top: 2rem;
}
/* reduced-motion + touch → static overscan-free bed (no parallax travel) */
@media (prefers-reduced-motion: reduce), (max-width: 720px) {
  .agenda-sticky-bg > .section-bg {
    transform: none !important;
    inset: 0;
    will-change: auto;
  }
}

/* Hero date-prominent — consolidated into hero Variant B block above */

/* Speaker avatar: TBA placeholder (question mark, no initials) — Domi review note 5. */
.speaker-avatar-tba {
  background: rgba(197, 165, 90, 0.15);
  color: var(--on-dark-accent, #e3c178);
  font-size: 2.5rem;
  font-weight: 300;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* Speaker avatar: card image (Panel I real photos) — FIX-1 R3 */
.speaker-card .speaker-avatar {
  width: 70px;
  height: 70px;
  border-radius: 50%;
  object-fit: cover;
  object-position: center top;
  margin: 0 auto 1.2rem;
  display: block;
}
/* Confirmed-speaker cards (R4, Alex 2026-06-11): larger photo + name/role/company lines.
   R6.6: frame line at 200% (2px -> 4px) — this two-class selector is the one
   that actually wins the cascade for the portrait border. */
.speaker-card .speaker-avatar--lg {
  width: 108px;
  height: 108px;
  border: 4px solid rgba(197, 165, 90, 0.45);
}
.speaker-card .speaker-role {
  color: var(--on-dark-accent, #e3c178);
  font-size: 0.76rem;
  letter-spacing: 0.05em;
  margin: 0.25rem 0 0.1rem;
}
.speaker-card .speaker-company {
  color: var(--on-dark-primary, #f5efe6);
  font-size: 0.8rem;
  opacity: 0.85;
}

/* Tickets grid — deterministic responsive: 4-up desktop, 2x2 tablet, 1-up mobile
   (Alex 2026-05-12 directive: no orphan card on a row, no 3+1 split). */
.tickets-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1.5rem;
  max-width: min(1200px, calc(100vw - 2rem));
  margin: 0 auto;
}
@media (max-width: 980px) {
  .tickets-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 480px) {
  .tickets-grid {
    grid-template-columns: 1fr;
  }
}

/* Hyperlinks: gold by default in content sections (Alex 2026-05-12 directive: gold not blue).
   Excludes nav, CTAs, and buttons which have their own styling. */
.partners-form a,
.partners-tier a,
.faq-list a,
.form-note a,
.footer-organizer a,
section p a,
.venue-prose a,
.hero-organizer a,
.three-acts a,
.tickets-vip-note a,
.about-content a,
.manifesto a {
  color: var(--on-dark-accent, #e3c178);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 0.18em;
}
.partners-form a:hover,
.partners-tier a:hover,
.faq-list a:hover,
.form-note a:hover,
.footer-organizer a:hover,
section p a:hover,
.venue-prose a:hover,
.hero-organizer a:hover,
.three-acts a:hover,
.tickets-vip-note a:hover,
.about-content a:hover,
.manifesto a:hover {
  color: var(--on-dark-accent-bright, #ffd76a);
  text-decoration-thickness: 2px;
}

/* Footer-organizer block: normal capitalization, not ALL CAPS (Alex 2026-05-12 directive).
   Overrides style.css uppercase + small-caps treatments on this block. */
.footer-organizer,
.footer-organizer p,
.footer-organizer a,
.footer-organizer span {
  text-transform: none !important;
  letter-spacing: normal;
}
.footer-organizer p:first-child {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.85rem;
  color: var(--on-dark-muted, #b0aca8); /* small uppercase metadata label override — caption tier */
  margin-bottom: 0.25rem;
}

/* Form labels: normal capitalization (Alex 2026-05-12 — screenshot showed IMIE I NAZWISKO in caps). */
.form-group label {
  text-transform: none !important;
  letter-spacing: 0.02em;
}

/* Networking pill tag on agenda cards (Alex 2026-05-12: "plenty of networking space-time"
   amplification — highlight networking-heavy blocks visually). */
.agenda-tag-networking {
  display: inline-block;
  margin-right: 0.5rem;
  padding: 0.18em 0.6em;
  background: rgba(184, 149, 106, 0.15);
  color: var(--on-dark-accent, #e3c178);
  border: 1px solid var(--accent-gold, #ddc074);
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

/* Networking-time visual section: "Sporo czasoprzestrzeni na networking"
   (Alex 2026-05-12 amplification — section between #agenda and .performance). */
.networking-section {
  max-width: min(1160px, calc(100vw - 2rem));
  margin: 5rem auto;
  padding: 0 1rem;
  text-align: center;
}
.networking-philosophy {
  text-align: center;
  margin-left: auto;
  margin-right: auto;
}
.networking-philosophy .networking-tagline {
  display: none;
}

/* C-013.b (Alex 2026-05-13): time-axis bar removed — "not of high value imho".
   All .day-timeline / .timeline-* / .legend-* rules deleted from this file.
   Networking philosophy prose retained below. */

.networking-philosophy {
  max-width: min(720px, calc(100vw - 2rem));
  margin: 3rem auto 0;
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 1.05rem;
  line-height: 1.7;
  color: var(--on-dark-primary, #ffffff);
}

.networking-philosophy p {
  margin-bottom: 1.4rem;
}

.networking-philosophy .networking-tagline {
  font-family: 'Playfair Display', Georgia, serif;
  font-style: italic;
  color: var(--on-dark-accent, #e3c178);
  font-size: 1.15rem;
  border-left: 2px solid var(--accent-gold, #ddc074);
  padding-left: 1.2rem;
  margin-bottom: 0;
}

/* SOP D2.5 — Mobile nav tap-target + touch-action (per reference_mobile_nav_golden_standard.md).
   Suppress double-tap zoom delay on interactive controls and enforce iOS HIG 44x44 minimum
   on touch viewports. Desktop sizes preserved. */
.nav-links a,
.nav-cta,
.lang-toggle,
.btn-primary,
.btn-secondary,
button[type="button"] {
  touch-action: manipulation;
}

@media (max-width: 720px) and (pointer: coarse) {
  .nav-links a,
  .nav-cta,
  .lang-toggle {
    min-height: 44px;
    min-width: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
}

/* Hero video — Part C addition 2026-05-13. Replaces the static hero-bg div
   placeholder. Covers full hero (100vh) underneath .hero-overlay gradient. */
.hero-bg-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  z-index: 0;
  pointer-events: none;
}

/* ============================================================
   Part C — alternating-rhythm + parallax image beds (2026-05-13)
   ============================================================ */
/* Full-bleed cage-break for .section-image parallax beds.
   Mirrors .hero pattern (line 17-31): 100vw + margin 0 + max-width none.
   Body has overflow-x hidden so 100vw scrollbar-width overhang is clipped.
   Inner content capped at 1100px via .section-image > *:not(.section-bg) rule below. */
.section-image {
  position: relative;
  width: 100vw;
  margin: 0;
  max-width: none;
  overflow: hidden;
  min-height: 100vh;         /* Full-page parallax beds per Alex 2026-05-13 (uniform) */
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 4rem 0;           /* Reduced from 6rem — flex centering handles vertical distribution on 100vh */
}

.section-image .section-bg {
  position: absolute;
  inset: -30% 0;            /* 30% overscan for strong parallax travel */
  z-index: 0;
  pointer-events: none;
  will-change: transform;
}

.section-image .section-bg picture,
.section-image .section-bg img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}

/* C-002 (Alex 2026-05-13): "no dark overlay" — gradient removed.
   Bed images breathe at full luminance; section text still readable because
   text uses --on-dark-* tokens that hit AAA contrast against the warm-dark
   image compositions (venue visualizations).
   If a future image needs darkening for legibility, set:
     .section-image[data-overlay] .section-bg::after { ...gradient... }
   on that specific section, not globally. */
/* DELETED C-002 rule — was killing all overlays. See Step 1. */

/* Activate the overlay only on sections that opt in via data-overlay="true".
   Center-band darker than edges so gold .section-title (#ddc074) headings
   keep AAA contrast over the warm watercolor mid-tones. */
.section-image[data-overlay="true"] .section-bg::after {
  content: '';
  display: block;
  position: absolute;
  inset: 0;
  background: linear-gradient(
    180deg,
    rgba(15, 15, 15, 0.25) 0%,
    rgba(15, 15, 15, 0.60) 50%,
    rgba(15, 15, 15, 0.25) 100%
  );
  z-index: 1;
  pointer-events: none;
}

/* Content children: retain 1100px centering + the original section padding,
   so visual hierarchy of section content matches non-parallax sections. */
.section-image > *:not(.section-bg) {
  position: relative;
  z-index: 2;
  width: 100%;
  max-width: 1100px;
  margin-left: auto;
  margin-right: auto;
  padding-left: 3rem;
  padding-right: 3rem;
  box-sizing: border-box;
}
.section-image > *:not(.section-bg):first-child:not([class*="header"]),
.section-image > .section-header { padding-top: 7rem; }
.section-image > *:last-child:not(.section-bg) { padding-bottom: 7rem; }

/* Motion gates: kill parallax for reduced-motion + small/touch viewports. */
@media (prefers-reduced-motion: reduce) {
  .section-image .section-bg {
    transform: none !important;
    will-change: auto;
  }
  /* Hide auto-playing hero video; poster image fills the gap via the .hero-bg-video
     element's `poster` attribute (Chromium/Safari render the poster when video is hidden). */
  .hero-bg-video {
    display: none;
  }
  .hero::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: url("../images/bg/bfort-akwarela-garden-evening.webp");
    background-size: cover;
    background-position: center;
    z-index: 0;
  }
}

/* R6.5: this legacy mobile kill now applies ONLY where CSS scroll-driven
   animations are unsupported — modern mobile browsers get the reduced
   r6-effects mobile timeline instead (Alex go 2026-06-12). */
@supports not (animation-timeline: view()) {
  @media (max-width: 720px) {
    .section-image .section-bg {
      transform: none !important;
      will-change: auto;
      inset: 0;               /* No overscan needed without parallax */
    }
  }
}
@media (max-width: 720px) and (prefers-reduced-motion: reduce) {
  .section-image .section-bg {
    transform: none !important;
    will-change: auto;
    inset: 0;
  }
}

/* === MOBILE UI FIXES — 2026-05-14 ===
   Surgical fixes for mobile defects without altering desktop canonical layout:
   1. Hamburger menu (no toggle existed; .nav-links was display:none with no fallback)
   2. Footer-links horizontal overflow (flex nowrap with 7 children pushed content offscreen)
   3. Stats-bar uneven 2x2 (flex-wrap with inconsistent item widths → switch to grid)
   4. Hero uses 100dvh (better mobile-webview compatibility than 100vh)
   5. Body x-overflow safety net (html.scrollWidth was 473 vs 375 viewport before this).
*/

/* Safety net: prevent any descendant from creating horizontal scrollbars on mobile. */
@media (max-width: 768px) {
  html { overflow-x: hidden; }
}

/* Hero on mobile: prefer dynamic viewport height for iOS Safari + LinkedIn webview. */
@media (max-width: 768px) {
  .hero { min-height: 100svh; height: auto; }
}

/* Hamburger button (hidden on desktop, shown on mobile). 44x44 minimum per iOS HIG. */
.nav-hamburger {
  display: none;
  background: transparent;
  border: 1px solid rgba(255,255,255,0.25);
  padding: 0;
  margin: 0;
  cursor: pointer;
  width: 44px;
  height: 44px;
  position: relative;
  flex: 0 0 auto;
  touch-action: manipulation;
  -webkit-tap-highlight-color: rgba(227,27,35,0.2);
}
.nav-hamburger span {
  display: block;
  position: absolute;
  left: 50%;
  width: 18px;
  height: 2px;
  background: var(--on-dark-primary, #ffffff);
  transform: translateX(-50%);
  transition: transform 0.25s ease, opacity 0.2s ease, top 0.25s ease;
}
.nav-hamburger span:nth-child(1) { top: 14px; }
.nav-hamburger span:nth-child(2) { top: 21px; }
.nav-hamburger span:nth-child(3) { top: 28px; }
.nav-hamburger.open span:nth-child(1) { top: 21px; transform: translateX(-50%) rotate(45deg); }
.nav-hamburger.open span:nth-child(2) { opacity: 0; }
.nav-hamburger.open span:nth-child(3) { top: 21px; transform: translateX(-50%) rotate(-45deg); }

@media (max-width: 768px) {
  /* NAVFIX 2026-07-02: nav pinned to the VIEWPORT (fixed), not in-flow (was
     position:relative, and a higher-specificity .nav#msn-nav sticky below).
     Sticky broke under `html{overflow-x:hidden}` on mobile webviews, so the
     nav effectively sat in-flow at document top; the absolute dropdown
     (top:100%) then opened at document top and was invisible mid-scroll.
     Fixed is viewport-relative and immune to that ancestor-overflow gotcha
     (no transformed ancestor of #msn-nav). Mirrors the desktop nav, which is
     already position:fixed with a full-bleed hero underneath. */
  .nav { position: fixed; top: 0; left: 0; right: 0; }
  .nav-hamburger { display: inline-block; }

  /* Mobile dropdown panel: section anchors + lang toggle + CTA stack vertically below nav. */
  .nav-links.nav-sections {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    width: 100%;
    background: rgba(15, 15, 15, 0.97);
    backdrop-filter: blur(12px);
    -webkit-backdrop-filter: blur(12px);
    padding: 0.5rem 1.5rem 1rem;
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    gap: 0;
    box-shadow: 0 6px 16px rgba(0,0,0,0.45);
    border-bottom: 1px solid rgba(255,255,255,0.08);
    transform: translateY(-12px);
    opacity: 0;
    pointer-events: none;
    visibility: hidden;
    transition: transform 0.22s ease, opacity 0.2s ease, visibility 0s linear 0.22s;
    margin: 0;
    flex-wrap: nowrap;
    max-height: calc(100dvh - 4rem);
    overflow-y: auto;
    z-index: 999;
    display: flex; /* override desktop display: flex (was previously display:none) */
  }
  .nav-links.nav-sections.open {
    transform: translateY(0);
    opacity: 1;
    pointer-events: auto;
    visibility: visible;
    transition: transform 0.22s ease, opacity 0.2s ease, visibility 0s linear 0s;
  }
  .nav-links.nav-sections > a,
  .nav-links.nav-sections > button {
    display: flex;
    align-items: center;
    padding: 0.9rem 0.5rem;
    margin: 0;
    font-size: 0.9rem;
    min-height: 48px;
    color: var(--on-dark-primary, #ffffff);
    border-bottom: 1px solid rgba(255,255,255,0.08);
    text-align: left;
    width: 100%;
    background: transparent;
    letter-spacing: 0.05em;
  }
  .nav-links.nav-sections > a:last-child,
  .nav-links.nav-sections > button:last-child {
    border-bottom: none;
  }
  .nav-links.nav-sections .lang-toggle {
    justify-content: center;
    text-align: center;
    border: 1px solid rgba(255,255,255,0.25);
    margin: 0.5rem 0;
  }
  .nav-links.nav-sections .nav-cta {
    background: var(--accent-gold, #ddc074);
    color: var(--bg-primary, #0f0f0f);
    margin-top: 0.5rem;
    justify-content: center;
    text-transform: uppercase;
    font-weight: 600;
    letter-spacing: 0.08em;
  }
}

/* Footer-links: wrap on narrow viewports instead of nowrap-overflow. */
@media (max-width: 720px) {
  .footer-links {
    flex-wrap: wrap;
    gap: 0.75rem 1.5rem;
    padding: 0 1rem;
  }
  .footer-links a {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
}

/* Stats-bar: clean grid on mobile/tablet (was flex with uneven item widths).
   4-col at tablet, 2x2 at phone, 1-col at <340. */
@media (max-width: 768px) {
  .stats-bar {
    display: grid !important;
    grid-template-columns: repeat(4, 1fr) !important;
    gap: 1.5rem 1rem !important;
    padding: 2.5rem 1.5rem !important;
    flex-wrap: initial !important;
    justify-content: stretch !important;
  }
  .stats-bar .stat-item {
    text-align: center;
  }
}
@media (max-width: 520px) {
  .stats-bar {
    grid-template-columns: 1fr 1fr !important;
  }
}
@media (max-width: 340px) {
  .stats-bar { grid-template-columns: 1fr !important; }
}


/* Hero-meta: don't span full width on mobile; pin to bottom-right with content-fit. */
@media (max-width: 720px) {
  .hero-meta {
    bottom: 1rem;
    right: 1rem;
    left: auto;
    width: auto;
    max-width: calc(100vw - 2rem);
    text-align: right;
  }
  .hero-organizer {
    text-align: right;
  }
}

/* Speakers grid: 2-col on tablets, 1-col on phones */
@media (max-width: 768px) {
  .speakers-grid,
  .speakers-grid.speakers-grid--4 {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 520px) {
  .speakers-grid,
  .speakers-grid.speakers-grid--4 {
    grid-template-columns: 1fr !important;
  }
}

/* Hero CTA group: stack and full-width on phones. */
@media (max-width: 480px) {
  .hero-cta-group {
    flex-direction: column;
    align-items: stretch;
    gap: 0.75rem;
  }
  .hero-cta-group .btn-primary,
  .hero-cta-group .btn-secondary {
    width: 100%;
    justify-content: center;
    text-align: center;
  }
}

/* Countdown timer: tighten gap on very narrow screens. */
@media (max-width: 380px) {
  .countdown-timer { gap: 0.6rem; }
  .countdown-banner { padding: 1.5rem 1rem; }
}

/* Tickets grid already collapses correctly (handled at 480px earlier); ensure cards comfortable. */
@media (max-width: 480px) {
  .tickets-grid { padding: 0 0.5rem; }
}

/* Body class for menu-open: prevent background scroll. */
body.nav-menu-open {
  overflow: hidden;
}

/* === STICKY MOBILE NAV (2026-05-14, Alex feedback) ===
   On mobile the nav stays visible during scroll so users always have a way
   back to the menu. Desktop unchanged (nav remains static at top). */
@media (max-width: 768px) {
  .nav#msn-nav {
    /* NAVFIX 2026-07-02: was position:sticky (broke under html{overflow-x:hidden}
       on mobile webviews). Fixed = viewport-anchored, so the hamburger and the
       dropdown are reachable + visible at any scroll position. */
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 1000;
    background: rgba(15, 15, 15, 0.88);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    transition: background 200ms ease;
  }
  .nav#msn-nav.menu-open {
    background: rgba(15, 15, 15, 0.97);
  }
}

/* === ORPHAN PREVENTION (no single word on last line) ===
   text-wrap: pretty does this natively in modern Chrome/Safari.
   Fallback: text-wrap: balance for hero/heading copy.
   Hero / section titles / subtitles / paragraphs use these so the last line
   never carries a single dangling word. Browsers without support fall back to
   normal wrapping gracefully. */
.hero-title,
.hero-fullname,
.hero-date-prominent,
.hero-subtitle,
.section-title,
.section-subtitle,
.section-pretitle,
.manifesto-quote,
.act-card h3,
.act-card p,
.agenda-content h4,
.agenda-content p,
.ticket-card p,
.faq-list summary,
.faq-list p {
  text-wrap: pretty;
}
.hero-title,
.hero-fullname,
.section-title,
.section-subtitle,
.manifesto-quote {
  text-wrap: balance;
}

/* === MOBILE: split hero subtitle into separate sentence lines for rhythm ===
   "Jeden dzień. Osiem bloków. Dwie trzecie programu: networking."
   On mobile, line-break after each period for the "Four successors. / Four
   answers." cadence Alex asked for. Works without changing markup: we use
   word-spacing tricks via CSS so periods become natural break points.
   Implementation: use ::before content on a span-less paragraph is fragile,
   so just allow natural balance to position breaks. */
@media (max-width: 480px) {
  .hero-subtitle {
    font-size: 1rem;
    line-height: 1.55;
    max-width: 22ch;
    margin-left: auto;
    margin-right: auto;
  }
}
/* === END MOBILE UI FIXES === */

/* ==========================================================================
   MSN26 2026-05-16: ROUND-3 COPY + LAYOUT REFRESH
   --------------------------------------------------------------------------
   Origin: SAR-2026-05-14-mhp-abbreviation-third-strike.md
   - Stats disclaimer "work-in-progress" line under the 4-stat grid
   - Concept section single-column refactor (overrides broken .about-grid)
   - Speakers panel-intro paragraph (Past, Present, Future: Tense? intro)
   - Networking philosophy paragraph (why Spacetime for Networking matters)
   - Venue -> Tickets gap condense
   - Orphan-prevention text-wrap extensions
   ========================================================================== */

/* Stats disclaimer — single italic line below the 4-stat grid. */
.stats-disclaimer {
  text-align: center;
  font-size: 0.78rem;
  font-style: italic;
  color: var(--text-muted, #a5a09a);
  margin: 0;
  padding: 0.75rem 1.5rem 1.75rem;
  background: var(--bg-tertiary);
  border-bottom: 1px solid var(--border);
  letter-spacing: 0.02em;
}
@media (max-width: 480px) {
  .stats-disclaimer {
    font-size: 0.72rem;
    padding: 0.5rem 1rem 1.25rem;
  }
}

/* Concept section refactor — single column, centered, 720px max.
   Neutralises the broken `.about-grid { grid-template-columns: 1fr 1fr; }`
   from style.css:405-410 (second column empty because no .about-image
   sibling was ever added). We render the new `.about-concept` instead. */
.about .about-concept {
  display: block;
  max-width: 720px;
  margin: 0 auto;
  padding: 0 1rem;
}
.about .about-concept .concept-block {
  margin-bottom: 2.5rem;
}
.about .about-concept .concept-block:last-of-type {
  margin-bottom: 2rem;
}
.about .about-concept .concept-block h3 {
  font-size: 1.35rem;
  margin-bottom: 0.9rem;
  line-height: 1.3;
  color: var(--accent-gold, #ddc074);
  letter-spacing: 0.01em;
  font-weight: 600;
}
.about .about-concept .concept-block p {
  color: var(--on-dark-primary, #f5f0e8);
  line-height: 1.7;
  font-weight: 300;
  margin: 0;
}
.about .about-concept .about-closing {
  margin: 2.25rem 0 1.5rem;
  font-style: italic;
  color: var(--on-dark-secondary, #ddc074);
  line-height: 1.6;
}
.about .about-concept .about-meta {
  margin-top: 2.5rem;
  text-align: left;
  border-top: 1px solid var(--border);
  padding-top: 1.25rem;
}
.about .about-concept .about-meta .sep {
  color: var(--text-muted, #a5a09a);
  margin: 0 0.75rem;
}
.about .about-concept .about-meta span[data-i18n] {
  color: var(--accent-gold, #ddc074);
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  font-weight: 500;
}
@media (max-width: 480px) {
  .about .about-concept .concept-block h3 {
    font-size: 1.15rem;
  }
  .about .about-concept .about-meta {
    text-align: center;
  }
  .about .about-concept .about-meta .sep {
    display: block;
    margin: 0.5rem 0;
  }
}

/* Speakers panel intro — paragraph block between section header and grid. */
.speakers .panel-intro {
  max-width: 720px;
  margin: 0 auto 3rem;
  padding: 0 1rem;
  text-align: center;
}
.speakers .panel-intro p {
  font-size: 1rem;
  line-height: 1.65;
  color: var(--on-dark-secondary, #ddc074);
  font-style: italic;
  margin: 0;
}
@media (max-width: 480px) {
  .speakers .panel-intro {
    margin-bottom: 2rem;
  }
  .speakers .panel-intro p {
    font-size: 0.95rem;
    line-height: 1.6;
  }
}

/* Networking philosophy paragraph — between section header and existing
   .networking-philosophy legend block. */
.networking-section .networking-philosophy-intro {
  max-width: 720px;
  margin: 0 auto 2rem;
  padding: 0 1rem;
}
.networking-section .networking-philosophy-intro p {
  font-size: 1.05rem;
  line-height: 1.7;
  color: var(--on-dark-primary, #f5f0e8);
  text-align: center;
  margin: 0;
}
@media (max-width: 480px) {
  .networking-section .networking-philosophy-intro p {
    font-size: 0.98rem;
    line-height: 1.65;
  }
}

/* D5 — Agenda: bigger font, full .rt-shell width */
.agenda-timeline {
  max-width: min(1160px, calc(100vw - 2.5rem));
  margin: 0 auto;
  border-left: 1px solid var(--border);
  border-right: 1px solid var(--border);
  padding-left: 2rem;
  padding-right: 2rem;
}
.agenda-content h4 {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(1.8rem, 4vw, 2.5rem);
  font-weight: 700;
  color: #ffffff;
  text-shadow: 0 2px 20px rgba(0,0,0,0.8), 0 1px 4px rgba(0,0,0,0.9);
}

/* ALL section titles — gold + 2px white outline (consistent with hero) */
.section-title,
.performance-content h2,
.venue h2,
#tickets h2,
#partners h2,
#faq h2,
.networking-section h2 {
  font-family: 'Playfair Display', serif !important;
  color: #ddc074 !important;
  -webkit-text-stroke: 2px #ffffff;
  text-shadow: 0 2px 20px rgba(0,0,0,0.8), 0 1px 4px rgba(0,0,0,0.9);
  font-weight: 700 !important;
  font-size: clamp(2rem, 5vw, 3.5rem) !important;
}
.agenda-content p {
  font-size: 1.1rem;
  line-height: 1.7;
}
.agenda-time {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(3rem, 7vw, 5rem);
  font-weight: 700;
  color: #ddc074;
  -webkit-text-stroke: 2px #ffffff;
  text-shadow: 0 2px 20px rgba(0,0,0,0.8), 0 1px 4px rgba(0,0,0,0.9);
  white-space: nowrap;
}

/* Venue -> tickets gap tightening. Default section padding is 7rem top/bottom
   creating 14rem cumulative gap. Halve it for this transition specifically. */
section.venue {
  padding-bottom: 3.5rem;
}
section#tickets {
  padding-top: 3.5rem;
}
@media (max-width: 768px) {
  section.venue {
    padding-bottom: 2.5rem;
  }
  section#tickets {
    padding-top: 2.5rem;
  }
}

/* Orphan-prevention text-wrap extensions for newly added content.
   text-wrap: pretty avoids 1-2 word orphans on continuation lines;
   text-wrap: balance distributes lines evenly on short headlines. */
.stats-disclaimer,
.about .about-concept .concept-block h3,
.about .about-concept .concept-block p,
.about .about-concept .about-closing,
.speakers .panel-intro p,
.networking-section .networking-philosophy-intro p {
  text-wrap: pretty;
}
.about .about-concept .concept-block h3,
.speakers .panel-intro p,
.networking-section .networking-philosophy-intro p {
  text-wrap: balance;
}
/* === END ROUND-3 COPY + LAYOUT REFRESH === */

/* ============================================================
   D1 — Hero countdown inside hero content (2026-05-26)
   ============================================================ */
.hero-countdown {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 1.5rem;
  margin-top: 2rem;
  padding: 0.75rem;
  background: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border-radius: 0;
}
.hero-countdown .countdown-timer {
  display: flex;
  gap: 1.5rem;
  align-items: center;
}
.hero-countdown .countdown-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.25rem;
}
.hero-countdown .number {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(3rem, 7vw, 5rem);
  font-weight: 700;
  color: var(--on-dark-accent, #ddc074);
  -webkit-text-stroke: 2px #ffffff;
  text-shadow: 0 2px 20px rgba(0,0,0,0.8), 0 1px 4px rgba(0,0,0,0.9);
  line-height: 1;
}
.hero-countdown .label {
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: #ffffff;
  text-shadow: 0 1px 10px rgba(0,0,0,0.7);
  margin-top: 0.3rem;
}
.hero-countdown .countdown-cta {
  display: none;
}
@media (max-width: 480px) {
  .hero-countdown {
    flex-direction: column;
    gap: 0.75rem;
  }
  .hero-countdown .countdown-timer {
    gap: 1rem;
  }
  .hero-countdown .number {
    font-size: 1.5rem;
  }
}

/* ============================================================
   D2 — Stats card (single combined row, 2026-05-26)
   ============================================================ */
.stats-card {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 1.5rem;
  padding: 1.2rem 2rem;
  background: var(--bg-tertiary, #1a1a1a);
  border: 1px solid var(--border, rgba(255,255,255,0.12));
  max-width: 1100px;
  margin: 0 auto 3rem;
}
.stats-card-item strong {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 1.4rem;
  color: var(--on-dark-accent, #e3c178);
  margin-right: 0.4rem;
  font-weight: 500;
}
.stats-card-item span {
  font-size: 0.78rem;
  color: var(--on-dark-muted, #b0aca8);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.stats-card-sep {
  color: var(--border, rgba(255,255,255,0.12));
  font-size: 1.2rem;
}
@media (max-width: 640px) {
  .stats-card {
    flex-direction: column;
    gap: 0.75rem;
  }
  .stats-card-sep {
    display: none;
  }
}

/* ============================================================
   D3 — Vignette on parallax images only (2026-05-26)
   ============================================================ */
.section-image .section-bg::after {
  content: '';
  display: block;
  position: absolute;
  inset: 0;
  background: linear-gradient(to bottom, rgba(10,10,10,0.55) 0%, transparent 18%, transparent 82%, rgba(10,10,10,0.55) 100%);
  z-index: 1;
  pointer-events: none;
}

/* Hero: NO glass on ANY sub-element (Variant B — clean text on watercolor) */
.hero-content .stats-card,
.hero-content .countdown-timer,
.hero-content .hero-countdown,
.hero-content .hero-cta-group,
.hero-content .btn-primary,
.hero-content .btn-secondary {
  background: none !important;
  border: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  box-shadow: none !important;
}
.hero-content .stats-card {
  margin-top: 1.5rem;
  padding: 0.6rem 0;
  font-size: 0.85rem;
  max-width: none;
  margin-bottom: 0;
}
.hero-content .stats-card-item strong {
  font-size: 1.1rem;
}
.hero-content .stats-card-item span {
  font-size: 0.7rem;
}
.hero-content .btn-primary {
  border: 2px solid #ffffff !important;
  color: #ffffff !important;
  padding: 0.8rem 2rem;
  text-shadow: 0 1px 8px rgba(0,0,0,0.7);
}
.hero-content .btn-secondary {
  border: 1px solid rgba(255,255,255,0.4) !important;
  color: #ffffff !important;
  padding: 0.8rem 2rem;
  text-shadow: 0 1px 8px rgba(0,0,0,0.7);
}

/* ============================================================
   Canonical RT footer (2026-05-18) — mirrors realtimes.co home page footer.
   Rule: all pages on realtimes.co domain use this footer.
   Source of truth: rt-www-home/src/app/globals.css `.cf-footer*` rules.
   ============================================================ */
.cf-footer {
  border-top: 1px solid rgba(255, 255, 255, 0.12);
  padding: 3.5rem 0 2.5rem;
  background: var(--background, #0f0f0f);
  width: 100vw;
  max-width: none;
  margin: 0;
  text-align: left;
}
.cf-footer .cf-container {
  width: min(1160px, calc(100vw - 2rem));
  margin: 0 auto;
  padding: 0 1rem;
}
.cf-footer-grid {
  display: grid;
  grid-template-columns: 1.5fr 1fr 1fr 1fr;
  gap: 2.5rem;
}
.cf-footer-brand img {
  display: block;
  height: 32px;
  width: auto;
}
.cf-footer-brand p {
  color: var(--on-dark-muted, #8a8580);
  font-size: 0.88rem;
  line-height: 1.55;
  margin-top: 0.8rem;
  max-width: 420px;
}
.cf-footer h4 {
  font-size: 0.8rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #c5a55a; /* RT canonical gold */
  margin: 0 0 0.9rem;
  font-family: 'Geist Mono', ui-monospace, SFMono-Regular, monospace;
}
.cf-footer div:not(.cf-footer-brand):not(.cf-footer-grid) {
  display: flex;
  flex-direction: column;
  gap: 0.55rem;
}
.cf-footer a {
  color: var(--on-dark-muted, #8a8580);
  font-size: 0.86rem;
  text-decoration: none;
  transition: color 0.15s ease;
}
.cf-footer a:hover {
  color: var(--on-dark-primary, #ffffff);
}
.cf-footer span {
  color: rgba(255, 255, 255, 0.38);
  font-size: 0.82rem;
}
/* Brand-column early-access CTA block (ported verbatim from globals.css .cf-footer-cta*) */
.cf-footer-cta { margin-top: 1.4rem; display: flex; flex-direction: column; gap: 0.5rem; max-width: 420px; }
.cf-footer-cta-label { color: #c5a55a; font-family: 'Geist Mono', ui-monospace, monospace; font-size: 0.7rem; letter-spacing: 0.1em; }
.cf-footer-cta-link { display: flex; align-items: stretch; border: 1px solid rgba(255, 255, 255, 0.12); transition: border-color 180ms ease; }
.cf-footer-cta-link:hover { border-color: rgba(197, 165, 90, 0.5); }
.cf-footer-cta-fauxinput { flex: 1; padding: 0.7rem 0.9rem; color: #9a9a9a; font-size: 0.85rem; }
.cf-footer-cta-btn { padding: 0.7rem 0.9rem; background: rgba(197, 165, 90, 0.12); color: #c5a55a; font-size: 0.82rem; white-space: nowrap; }
.cf-footer-cta-help { color: #9a9a9a; font-size: 0.78rem; line-height: 1.5; }
/* Events-column featured-event badge + Become-a-Partner (ported verbatim from globals.css) */
.cf-footer a.cf-footer-cta-partner { color: #c5a55a; }
.cf-footer a.cf-footer-cta-partner:hover { color: #d4b84a; }
.cf-footer a.cf-footer-event-featured { color: #c5a55a; font-weight: 600; display: inline-flex; align-items: center; flex-wrap: wrap; gap: 0.45rem; }
.cf-footer a.cf-footer-event-featured:hover { color: #d4b84a; }
.cf-footer a.cf-footer-event-featured:hover .cf-footer-event-badge { border-color: rgba(197, 165, 90, 0.9); background: rgba(197, 165, 90, 0.16); }
.cf-footer-event-dot { width: 7px; height: 7px; flex: 0 0 auto; border-radius: 50%; background: #ddc074; box-shadow: 0 0 0 0 rgba(197, 165, 90, 0.7); animation: cf-footer-pulse 2s ease-out infinite; }
.cf-footer-event-badge { font-family: 'Geist Mono', ui-monospace, monospace; font-size: 0.62rem; letter-spacing: 0.06em; text-transform: uppercase; color: #c5a55a; border: 1px solid rgba(197, 165, 90, 0.55); background: rgba(197, 165, 90, 0.08); padding: 0.12rem 0.45rem; white-space: nowrap; transition: border-color 180ms ease, background 180ms ease; }
@keyframes cf-footer-pulse {
  0% { box-shadow: 0 0 0 0 rgba(197, 165, 90, 0.6); }
  70% { box-shadow: 0 0 0 6px rgba(197, 165, 90, 0); }
  100% { box-shadow: 0 0 0 0 rgba(197, 165, 90, 0); }
}
@media (prefers-reduced-motion: reduce) {
  .cf-footer-event-dot { animation: none; }
}

/* ============================================================
   PER-EVENT FOOTER (.evf) — event-scoped band ABOVE the canonical footer.
   Carries venue / organizer / event-legal links only. Visually subordinate
   (smaller, muted, thin top border) but on-brand. In normal flow (not a
   modal) so stacking/z-index is irrelevant. REUSABLE: a future event swaps
   only the HTML values (event name / where / organizer NIP / legal hrefs).
   Origin: SAR-2026-06-01 (keep canonical footer pure of event legal links).
   ============================================================ */
.evf {
  border-top: 1px solid rgba(255, 255, 255, 0.08);
  background: var(--background, #0f0f0f);
  width: 100vw;
  max-width: none;
  margin: 0;
  padding: 1.6rem 0 0;
}
.evf-inner {
  width: min(1160px, calc(100vw - 2rem));
  margin: 0 auto;
  padding: 0 1rem;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 0.6rem 2rem;
}
.evf-event { display: flex; flex-direction: column; gap: 0.2rem; }
.evf-name { color: rgba(255, 255, 255, 0.7); font-size: 0.8rem; font-weight: 600; letter-spacing: 0.02em; }
.evf-where { color: #8a8580; font-size: 0.78rem; }
.evf-org { color: rgba(255, 255, 255, 0.38); font-size: 0.74rem; }
.evf-legal { display: flex; flex-wrap: wrap; gap: 0.4rem 1.2rem; }
.evf-legal a { color: #8a8580; font-size: 0.78rem; text-decoration: none; transition: color 0.15s ease; }
.evf-legal a:hover { color: #ddc074; }

@media (max-width: 980px) {
  .cf-footer-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 720px) {
  .cf-footer-grid { grid-template-columns: 1fr; text-align: center; }
  .cf-footer-brand { display: flex; flex-direction: column; align-items: center; }
  .cf-footer-brand img { margin: 0 auto; }
  .cf-footer-brand p { margin-left: auto; margin-right: auto; max-width: none; }
  .cf-footer-cta { margin-left: auto; margin-right: auto; }
  .cf-footer div:not(.cf-footer-brand):not(.cf-footer-grid) { align-items: center; }
  .evf-inner { flex-direction: column; align-items: center; text-align: center; }
  .evf-event { align-items: center; }
  .evf-legal { justify-content: center; }
}
/* Mobile-center the featured-event link (2026-05-30 SAR fix: wrapping flex children
   inside a centered column need their OWN internal centering — block centering doesn't cascade). */
@media (max-width: 640px) {
  .cf-footer a.cf-footer-event-featured { justify-content: center; width: 100%; text-align: center; }
}

/* MMA section — dramatic statement sizing */
.mma-content {
  text-align: center;
  padding: 2rem 1rem;
}
.mma-label {
  font-size: 1rem;
  letter-spacing: 0.3em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.5);
  margin-bottom: 1.5rem;
}
.mma-title {
  font-family: 'Playfair Display', serif;
  font-size: clamp(3rem, 8vw, 5.5rem);
  color: #ddc074;
  -webkit-text-stroke: 2px #ffffff;
  text-shadow: 0 2px 20px rgba(0,0,0,0.8), 0 1px 4px rgba(0,0,0,0.9);
  margin-bottom: 1.5rem;
  line-height: 1.1;
  font-weight: 700;
}
.mma-subtitle {
  font-size: clamp(1.2rem, 3vw, 2rem);
  letter-spacing: 0.25em;
  text-transform: uppercase;
  color: #fff;
  font-weight: 600;
}
.mma-tagline {
  font-family: 'Playfair Display', serif;
  font-size: clamp(1.2rem, 3vw, 2rem);
  font-style: normal;
  font-weight: 700;
  color: #ffffff;
  margin-top: 2rem;
  letter-spacing: 0.05em;
  text-transform: none;
}

/* Complimentary brands — grouped by category */
.comp-category {
  margin-bottom: 1.2rem;
}
.comp-category-label {
  display: block;
  font-size: 0.65rem;
  font-weight: 700;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--on-dark-accent, #ddc074);
  margin-bottom: 0.3rem;
  font-family: 'Geist Mono', ui-monospace, SFMono-Regular, monospace;
}
.comp-brands {
  font-size: 0.78rem;
  color: rgba(255, 255, 255, 0.5);
  letter-spacing: 0.04em;
  line-height: 1.8;
  margin: 0;
}
.comp-logo-grid {
  display: grid;
  justify-content: center;
  justify-items: center;
  align-items: center;
  gap: 1.5rem 2rem;
  margin-top: 0.8rem;
}
.comp-logo-grid--6 { grid-template-columns: repeat(6, 1fr); }
.comp-logo-grid--4 { grid-template-columns: repeat(4, 1fr); }
.comp-logo-grid--3 { grid-template-columns: repeat(3, 1fr); }
.comp-logo-grid img {
  height: 36px;
  width: auto;
  max-width: 140px;
  object-fit: contain;
  opacity: 0.55;
  filter: grayscale(100%);
  transition: opacity 180ms ease, filter 180ms ease;
}
.comp-logo-grid img:hover {
  opacity: 1;
  filter: grayscale(0%);
}
@media (max-width: 768px) {
  .comp-logo-grid--6 { grid-template-columns: repeat(3, 1fr); }
  .comp-logo-grid--4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 480px) {
  .comp-logo-grid--6,
  .comp-logo-grid--4,
  .comp-logo-grid--3 { grid-template-columns: repeat(2, 1fr); }
}

/* CANON:wa-float-style  (canonical element design — locked 2026-06-17; change only with CANONICAL-UNLOCK) */
/* WhatsApp floating button — gold */
.wa-float {
  position: fixed;
  bottom: 2rem;
  right: 2rem;
  z-index: 9999;
  width: 56px;
  height: 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(15, 15, 15, 0.85);
  border: 1px solid rgba(197, 165, 90, 0.4);
  border-radius: 50%;
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4);
  transition: transform 180ms ease, box-shadow 180ms ease;
}
.wa-float, .wa-float:hover, .wa-float:visited, .wa-float:active {
  text-decoration: none !important;
  color: #ddc074 !important;
}
.wa-float:hover {
  transform: scale(1.05);
  box-shadow: 0 4px 24px rgba(197, 165, 90, 0.4);
}
.wa-float svg {
  width: 30px;
  height: 30px;
}
/* WhatsApp expanded state — shows label, then collapses to icon only */
.wa-float.wa-expanded {
  width: auto;
  border-radius: 28px;
  padding: 0.6rem 1.2rem 0.6rem 0.8rem;
  gap: 0.6rem;
}
.wa-float .wa-label {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 0.78rem;
  font-weight: 600;
  color: #ddc074;
  white-space: nowrap;
  max-width: 0;
  overflow: hidden;
  opacity: 0;
  transition: max-width 400ms ease, opacity 300ms ease, margin 300ms ease;
  margin-left: 0;
}
.wa-float.wa-expanded .wa-label {
  max-width: 300px;
  opacity: 1;
  margin-left: 0.4rem;
}
@media (max-width: 768px) {
  .wa-float {
    bottom: 1rem;
    right: 1rem;
  }
  .wa-float.wa-expanded {
    bottom: 0;
    right: 0;
    left: 0;
    width: 100%;
    border-radius: 0;
    justify-content: center;
    padding: 0.8rem 1.5rem;
    border-top: 1px solid rgba(197, 165, 90, 0.3);
  }
  .wa-float.wa-expanded .wa-label {
    font-size: 0.85rem;
  }
}
/* /CANON:wa-float-style */

/* Three Acts — full-width editorial stacked blocks */
.acts-editorial {
  max-width: min(1160px, calc(100vw - 2.5rem));
  margin: 0 auto;
}
.act-band {
  display: flex;
  align-items: flex-start;
  gap: 2.5rem;
  padding: 2.5rem 0;
  border-bottom: 1px solid rgba(255,255,255,0.1);
}
.act-band:last-child {
  border-bottom: none;
}
.act-num {
  font-family: 'Playfair Display', serif;
  font-size: clamp(3rem, 7vw, 5rem);
  font-weight: 700;
  color: #ddc074;
  -webkit-text-stroke: 2px #ffffff;
  text-shadow: 0 2px 20px rgba(0,0,0,0.8), 0 1px 4px rgba(0,0,0,0.9);
  line-height: 1;
  min-width: 1.5em;
}
.act-body h3 {
  font-family: 'Playfair Display', serif;
  font-size: clamp(1.6rem, 3.5vw, 2.2rem);
  font-weight: 700;
  color: #ffffff;
  margin-bottom: 0.8rem;
  text-shadow: 0 1px 10px rgba(0,0,0,0.6);
}
.act-body p {
  font-size: 1.05rem;
  line-height: 1.7;
  color: rgba(255,255,255,0.85);
  text-shadow: 0 1px 8px rgba(0,0,0,0.5);
}
@media (max-width: 520px) {
  .act-band {
    flex-direction: column;
    gap: 1rem;
  }
  .act-num {
    font-size: 2.5rem;
  }
}

/* D15 — Partners grid (5-col responsive) */
.partners-grid {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 1.5rem;
  max-width: 1100px;
  margin: 0 auto 3rem;
  padding: 0 2rem;
}
@media (max-width: 980px) {
  .partners-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
@media (max-width: 640px) {
  .partners-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* R2-4: Three Acts bolder pretitle + larger fonts */
.three-acts .section-pretitle {
  font-weight: 700;
  color: var(--on-dark-accent-bright, #ffd76a);
  font-size: 0.85rem;
}
.three-acts .acts-grid {
  max-width: min(1160px, calc(100vw - 2rem));
  margin: 0 auto;
}
.three-acts .act-card h3 {
  font-size: 1.5rem;
}
.three-acts .act-card p {
  font-size: 1.05rem;
  line-height: 1.7;
}

/* R2-7: Garden Experience bolder heading + larger copy */
.performance .section-pretitle {
  font-weight: 700;
  color: var(--on-dark-accent-bright, #ffd76a);
}
.performance .section-title {
  font-weight: 700;
  color: var(--on-dark-accent-bright, #ffd76a);
}
.performance-content p {
  font-size: 1.1rem;
  line-height: 1.75;
}
.performance-mystery {
  font-size: 1.3rem;
}

/* R2-8: Speakers center-align + Phoenix jury hidden */
.speaker-subsection {
  text-align: center;
}
.subsection-title {
  text-align: center;
}
.speakers-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  max-width: min(1160px, calc(100vw - 2rem));
  margin: 0 auto;
  gap: 1.5rem;
}
.speakers-grid.speakers-grid--4 {
  grid-template-columns: repeat(4, 1fr);
}
/* W3 2026-07-02: Panel I now holds 6 cards (5 panelistów + Joanna Mroczek jako
   moderator). Alex VA preference = 3 + 3 (dwa rzędy po trzy) na desktopie, nie
   jeden rząd sześciu. Desktop-only (min-width 769px) so the tablet/phone
   responsive blocks (2-col at <=768, 1-col at <=520) stay authoritative.
   ID-scoped so it only affects Panel I, not Panel II / jury (Panel II = 5 kart,
   domyślny 3-col daje 3 + 2). */
@media (min-width: 769px) {
  #grid-panel1.speakers-grid--4 {
    grid-template-columns: repeat(3, 1fr);
  }
}
/* CANON:panel2-moderator-style  (canonical Panel II desktop layout — 4 panelists + moderator = 5 cards → 3 across row 1, trailing 2 centered on row 2; Nitner named 2026-07-14; change only with CANONICAL-UNLOCK) */
/* Panel II (#grid-panel2) holds 5 cards: Bondar, Szukalski, Skowroński, Nitner + moderator
   Ewa Łabno-Falęcka. Desktop VA preference (Alex 2026-07-14): 3 on row 1, then the remaining 2
   centered on row 2. A 6-col grid with each card spanning 2 cols puts row 1 in cols 1-2 / 3-4 / 5-6
   and seats the 4th + 5th cards in cols 2-3 and 4-5 (symmetric = centered), at the same one-third
   card width as row 1. Desktop only (min-width 769px); tablet (2-col → 2+2+1) and phone (1-col)
   stack and need no centering. */
@media (min-width: 769px) {
  #grid-panel2 {
    grid-template-columns: repeat(6, 1fr);
  }
  #grid-panel2 .speaker-card {
    grid-column: span 2;
  }
  #grid-panel2 .speaker-card:nth-child(4) {
    grid-column: 2 / span 2;
  }
  #grid-panel2 .speaker-card:nth-child(5) {
    grid-column: 4 / span 2;
  }
}
/* /CANON:panel2-moderator-style */
.speaker-subsection[data-section="phoenix-jury"] {
  display: none;
}

/* R2-9: Venue as parallax section-image */
section.venue.section-image {
  position: relative;
  width: 100vw;
  max-width: none;
  margin: 0;
  overflow: hidden;
  min-height: 80vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: transparent;
  padding: 4rem 0;
}
section.venue.section-image > *:not(.section-bg) {
  position: relative;
  z-index: 2;
  max-width: 840px;
  margin-left: auto;
  margin-right: auto;
  padding-left: 2rem;
  padding-right: 2rem;
}
.venue .venue-gallery {
  display: none;
}

/* CANON:tickets-style  (canonical ticket cards — chips, uniform box, traveling-light, VIP; locked 2026-06-19; change only with CANONICAL-UNLOCK) */
/* Ticket phase chip — straddles card top border */
.ticket-card {
  position: relative;
}
.ticket-phase-chip {
  position: absolute;
  top: -0.9em;
  left: 50%;
  transform: translateX(-50%);
  display: inline-block;
  background: var(--accent-gold, #ddc074);
  color: #0f0f0f;
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  padding: 0.35em 1.2em;
  white-space: nowrap;
  z-index: 5; /* above the card's gold border so the chip is never see-through */
  transition: background 0.25s ease, color 0.25s ease;
}
.ticket-phase-chip[data-phase="regular"] {
  background: #1c1c1c; /* opaque dark — was rgba(255,255,255,.15), which let the gold border bleed through */
  color: var(--on-dark-primary, #fff);
}
.ticket-phase-chip[data-phase="last"] {
  background: var(--rt-red, #e31b23);
  color: #fff;
}

/* Pricing phase rows — name + deadline + price */
.pricing-phase {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.3rem 0.8rem;
}
.phase-name {
  font-size: 0.75rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--on-dark-accent, #ddc074);
  flex-basis: 100%;
  text-align: left;
}
.pricing-phase {
  text-align: left;
}
.ticket-card {
  display: flex;
  flex-direction: column;
}
.ticket-pricing-phases {
  flex-grow: 1;
}
.ticket-card .btn-primary,
.ticket-card .btn-secondary {
  margin-top: auto;
}
.phase-deadline {
  font-size: 0.72rem;
  color: var(--on-dark-muted, #8a8580);
  letter-spacing: 0.04em;
}

/* Current phase price — prominent, below card name */
.ticket-current-price {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 2.2rem;
  font-weight: 700;
  color: var(--on-dark-accent, #ddc074);
  margin-bottom: 1rem;
}

/* V1 (2026-06-19): glow removed — solid "register-button" chip, no chipShimmer. */

/* VIP card — single flat price, prominent */
.ticket-card--vip {
  border-color: var(--accent-gold, #ddc074);
}
.ticket-phase-chip--vip {
  background: var(--accent-gold, #ddc074);
  color: #0f0f0f;
  font-size: 0.9rem;
  padding: 0.5em 1.8em;
  letter-spacing: 0.18em;
}
/* Rest state: EVERY chip is gold bg + black text, regardless of pricing phase
   (the date logic can set data-phase="regular"/"last" which previously darkened
   or reddened the chip). Only hover turns it red. (Alex 2026-06-19) */
.ticket-phase-chip,
.ticket-phase-chip[data-phase="regular"],
.ticket-phase-chip[data-phase="last"],
.ticket-phase-chip--vip {
  background: var(--accent-gold, #ddc074);
  color: #0f0f0f;
}
/* Hover the ticket card → chip turns RT red (V1, 2026-06-19).
   Listed selectors out-specific the data-phase / --vip rules so red wins in every phase. */
.ticket-card:hover .ticket-phase-chip,
.ticket-card:hover .ticket-phase-chip[data-phase="regular"],
.ticket-card:hover .ticket-phase-chip[data-phase="last"],
.ticket-card:hover .ticket-phase-chip--vip {
  background: var(--rt-red, #e31b23);
  color: #fff;
}

/* Kill the stale legacy "Early Bird" badge that style.css renders ONLY on the
   .featured card via .ticket-card.featured::before. The single phase badge is now
   JS-driven (.ticket-phase-chip, set by applyTicketPhase). On the Beyond RE card the
   pseudo-badge stacked on top of the real chip at the same top-center spot, so its
   chip area read bigger / a fuller gold block than the CRE card's single chip. Removing
   it makes the Regular (and Late Bird) chip identical in size + gold fill on both cards.
   (Root cause of the "Beyond RE chip bigger" report, 2026-06-22.) */
#tickets .ticket-card.featured::before {
  content: none !important;
  display: none !important;
}

/* All three ticket cards share the "featured" pop (Alex 2026-06-19):
   left (CRE/RE) + right (VIP) now match the Beyond RE card — gold frame, scale, shadow. */
#tickets .ticket-card {
  border-color: var(--accent-gold, #ddc074) !important;
  transform: scale(1.04);
  box-shadow: 0 20px 60px rgba(0,0,0,0.4);
}
#tickets .ticket-card:hover {
  transform: scale(1.04) translateY(-8px);
  box-shadow: 0 24px 60px rgba(0,0,0,0.5), 0 0 0 1px var(--accent-gold-light, #e8cd8a);
}
@media (max-width: 768px) {
  #tickets .ticket-card,
  #tickets .ticket-card:hover { transform: none; }
}

/* Uniform inner box: VIP has no audience desc line, so reserve the same
   slot (base .ticket-desc min-height: 3.5em) — this aligns the top edge of
   the price/perks box across all three cards. The box already flex-grows to
   a shared bottom (button is margin-top:auto), so reserving the slot makes
   the three boxes identical in size AND position (Alex 2026-06-19). */
.ticket-desc--spacer {
  visibility: hidden;
  margin: 0 0 2rem;
}
/* Fixed desc-slot height so the box top edge aligns across all three cards
   (descs run 2–3 lines; a fixed height makes the slot above the box identical).
   Desktop 3-up only — mobile stacks, so it resets to auto below. */
@media (min-width: 769px) {
  section#tickets .ticket-card .ticket-desc {
    height: 5.2em;
    min-height: 5.2em;
    margin-bottom: 1.5rem;
    overflow: hidden;
  }
}

/* Traveling light around each ticket frame on hover (Alex 2026-06-19):
   same idea as the panelist avatar ring (r62-anim.css) — a masked
   conic-gradient that loops continuously around the whole card border.
   Per card, triggered on that card's own hover. */
@property --tk-angle {
  syntax: "<angle>";
  initial-value: 0deg;
  inherits: false;
}
#tickets .ticket-card::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 2px; /* light band thickness */
  background: conic-gradient(
    from var(--tk-angle),
    transparent 0deg,
    transparent 240deg,
    var(--accent-gold-light, #e8cd8a) 300deg,
    #ffffff 330deg,
    var(--accent-gold-light, #e8cd8a) 360deg
  );
  /* keep only the 2px border band, cut out the centre */
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
  opacity: 0;
  transition: opacity 0.35s ease;
  pointer-events: none;
  z-index: 3; /* above the static gold border, below the chip (z-index:5) */
}
#tickets .ticket-card:hover::after {
  opacity: 1;
  animation: tk-travel 2.4s linear 1 forwards; /* one round, then hold (Alex 2026-06-19) */
}
@keyframes tk-travel {
  to { --tk-angle: 360deg; }
}
@media (prefers-reduced-motion: reduce) {
  #tickets .ticket-card:hover::after { animation: none; opacity: 0; }
}
@media (max-width: 768px) {
  #tickets .ticket-card::after,
  #tickets .ticket-card:hover::after { opacity: 0; animation: none; }
}
.pricing-phase--flat {
  justify-content: center;
  padding: 1rem 0;
}
.phase-price--vip {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: 2.2rem !important;
  font-weight: 700;
  color: var(--on-dark-accent, #ddc074);
}
.vip-perks-box {
  padding: 1rem 1.2rem !important;
}
.vip-perks-text {
  font-size: 0.85rem;
  line-height: 1.65;
  color: #ffffff;
  margin: 0;
  text-align: left;
}
.vip-perks-text strong {
  display: block;
  margin-top: 0.8rem;
  color: var(--on-dark-accent, #ddc074);
}

/* R2-10: 3-tier ticket grid + larger names */
section#tickets .tickets-grid {
  grid-template-columns: repeat(3, 1fr);
  max-width: min(1160px, calc(100vw - 2rem));
  gap: 1.5rem;
}
section#tickets .ticket-card .ticket-name {
  font-size: 1.4rem;
  font-weight: 600;
  color: var(--on-dark-accent, #e3c178);
}
section#tickets .ticket-card .ticket-desc {
  font-size: 0.95rem;
  line-height: 1.6;
}
@media (max-width: 768px) {
  section#tickets .tickets-grid {
    grid-template-columns: 1fr;
  }
}
/* /CANON:tickets-style */

/* R2-13/14/16/17: Partner logo marquee bands */
.partners-grid {
  display: none !important;
}
.partner-marquee-section {
  width: 100vw;
  max-width: none;
  margin-left: calc(-50vw + 50%);
  overflow: hidden;
  padding: 2rem 0;
}
.partner-marquee-label {
  text-align: center;
  font-size: 0.85rem;
  letter-spacing: 0.15em;
  text-transform: none;
  color: #ffffff;
  margin-bottom: 1.5rem;
  font-family: 'Geist Mono', monospace;
  font-weight: 700;
}
.partner-marquee-band {
  display: flex;
  align-items: center;
  gap: 4rem;
  width: max-content;
  padding: 0.5rem 0;
}
.partner-marquee-band img {
  height: 52px;
  width: auto;
  max-width: 180px;
  object-fit: contain;
  opacity: 0.6;
  transition: opacity 200ms ease;
  flex-shrink: 0;
}
.partner-marquee-band img:hover {
  opacity: 1;
}
.partner-marquee-band--left {
  animation: marquee-scroll-left 45s linear infinite;
}
.partner-marquee-band--right {
  animation: marquee-scroll-right 45s linear infinite;
}
@keyframes marquee-scroll-left {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}
@keyframes marquee-scroll-right {
  0% { transform: translateX(-50%); }
  100% { transform: translateX(0); }
}
@media (prefers-reduced-motion: reduce) {
  .partner-marquee-band--left,
  .partner-marquee-band--right {
    animation: none;
    flex-wrap: wrap;
    width: auto;
    justify-content: center;
    gap: 2rem;
  }
}

/* ============================================================
   T5 (2026-06-01) — Registration band + current-MSN26-partners block
   ============================================================ */

/* Registration band — top-of-page conversion driver below the hero.
   Scrolls to #tickets (the 3 priced tier cards = conversion target). */
.reg-band {
  width: 100vw;
  max-width: none;
  margin-left: calc(-50vw + 50%);
  background: var(--rt-charcoal, #1a1a1a);
  border-top: 1px solid var(--rt-red, #e31b23);
  border-bottom: 1px solid rgba(255, 255, 255, 0.12);
  padding: 1.6rem 1.25rem;
}
.reg-band-inner {
  max-width: min(1160px, calc(100vw - 2.5rem));
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem 2rem;
  flex-wrap: wrap;
}
.reg-band-copy {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  min-width: 0;
}
.reg-band-kicker {
  font-family: 'Geist Mono', monospace;
  font-size: 0.78rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--rt-gold, #ddc074);
  margin: 0;
}
.reg-band-headline {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(1.25rem, 2.6vw, 1.7rem);
  font-weight: 700;
  color: #ffffff;
  line-height: 1.25;
  margin: 0;
  text-wrap: balance;
}
.reg-band-cta {
  flex-shrink: 0;
  white-space: nowrap;
}

@media (max-width: 640px) {
  .reg-band-inner {
    flex-direction: column;
    align-items: stretch;
    text-align: center;
  }
  .reg-band-copy { align-items: center; }
  .reg-band-cta {
    width: 100%;
    text-align: center;
    white-space: normal;
  }
}

/* Current-MSN26-partners block — sits ABOVE the previous-events marquee.
   Graceful TBA state (0 confirmed at launch): no awkward 1-logo row. */
.msn26-current-partners {
  max-width: min(960px, calc(100vw - 2rem));
  margin: 2.5rem auto 1rem;
  padding: 0 1rem;
  text-align: center;
}
.msn26-current-empty {
  border: 1px solid rgba(255, 255, 255, 0.14);
  background: rgba(255, 255, 255, 0.02);
  padding: 2rem 1.5rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1.25rem;
}
.msn26-current-tba {
  font-family: 'Inter', system-ui, sans-serif;
  font-size: 1.05rem;
  color: var(--on-dark-primary, #ffffff);
  line-height: 1.6;
  max-width: 560px;
  margin: 0;
  text-wrap: pretty;
}
.msn26-current-cta {
  flex-shrink: 0;
}

/* ============================================================
   Speaker Modal System (MSN26 B'Fort)
   Created: 2026-05-26
   ============================================================ */

/* Speaker sub-sections */
.speaker-subsection {
  margin-bottom: 4rem;
}

.subsection-title {
  font-size: 1.1rem;
  font-weight: 600;
  color: var(--on-dark-accent, #e3c178);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: 1.5rem;
  padding-bottom: 0.75rem;
  border-bottom: 1px solid var(--border, #4a4846);
}

/* CANON:fireside-keynote-grid-style  (canonical Fireside 2-up keynote grid — Wojciech Kolęda + Grochowski symmetric; locked 2026-07-13; change only with CANONICAL-UNLOCK) */
/* Keynote grid: 2-up centered (fireside pair) */
.speakers-grid--keynote {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 260px));
  justify-content: center;
  max-width: 640px;
  margin: 0 auto;
  gap: 1.5rem;
}
@media (max-width: 560px) {
  .speakers-grid--keynote {
    grid-template-columns: minmax(0, 300px);
    max-width: 300px;
  }
}
/* /CANON:fireside-keynote-grid-style */

/* Make speaker cards clickable */
.speaker-card[data-name] {
  cursor: pointer;
  transition: transform 180ms ease, border-color 180ms ease;
}

.speaker-card[data-name]:hover {
  transform: translateY(-4px);
  border-color: var(--accent-gold, #ddc074);
}

/* Modal overlay */
.speaker-modal-overlay {
  position: fixed;
  inset: 0;
  z-index: 9000;
  background: rgba(10, 10, 10, 0.85);
  backdrop-filter: blur(8px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
  opacity: 0;
  transition: opacity 180ms ease;
}

/* Modal card */
.speaker-modal-card {
  position: relative;
  max-width: 480px;
  width: calc(100% - 2rem);
  background: var(--bg-tertiary, #1a1a1a);
  border: 1px solid var(--border, #4a4846);
  padding: 2rem;
  /* R6.4c: 100vh on iOS includes the area behind the dynamic URL bar, so the
     card extended below the visible viewport with the tail cut off. dvh tracks
     the VISIBLE viewport; the vh line stays as fallback for older browsers. */
  max-height: calc(100vh - 4rem);
  max-height: calc(100dvh - 2.5rem);
  overflow-y: auto;
  /* Keep swipe momentum inside the card — no scroll chaining to the page */
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}

/* Close button */
.speaker-modal-close {
  position: absolute;
  top: 1rem;
  right: 1rem;
  width: 44px;
  height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  color: var(--accent-gold, #ddc074);
  font-size: 2rem;
  line-height: 1;
  cursor: pointer;
  transition: color 180ms ease;
  font-weight: 300;
}

.speaker-modal-close:hover {
  color: var(--accent-gold-light, #c9a87a);
}

/* Avatar container */
.speaker-modal-avatar-container {
  display: flex;
  justify-content: center;
  margin-bottom: 1.5rem;
}

/* Avatar image — DEFECT 2 FIX: increased from 80px to 150px desktop */
.speaker-modal-avatar {
  width: 150px;
  height: 150px;
  border-radius: 50%;
  object-fit: cover;
  /* R6.6: frame line 2x — kept in sync with card portrait frame */
  border: 4px solid var(--accent-gold, #ddc074);
}

/* Monogram fallback */
.speaker-modal-monogram {
  width: 150px;
  height: 150px;
  border-radius: 50%;
  background: var(--bg-secondary, #111111);
  border: 4px solid var(--accent-gold, #ddc074);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: 'Playfair Display', serif;
  font-size: 3.2rem;
  font-weight: 600;
  color: var(--accent-gold, #ddc074);
}

/* Modal text content */
.speaker-modal-name {
  font-family: 'Playfair Display', serif;
  font-size: 1.5rem;
  font-weight: 600;
  color: var(--on-dark-primary, #ffffff);
  margin-bottom: 0.5rem;
  text-align: center;
  letter-spacing: -0.01em;
}

.speaker-modal-role {
  font-size: 0.9rem;
  color: var(--on-dark-accent, #e3c178);
  text-align: center;
  margin-bottom: 0.25rem;
  font-weight: 500;
  letter-spacing: 0.02em;
}

.speaker-modal-company {
  /* Typography matches speaker-card company (r61-panel.css:21) per SAR-2026-06-12 */
  font-size: 1.1rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  color: var(--on-dark-primary, #f5efe6);
  text-align: center;
  margin-bottom: 1.5rem;
}

.speaker-modal-bio {
  font-size: 0.9rem;
  line-height: 1.6;
  color: var(--on-dark-secondary, #e8e6e3);
  margin-bottom: 1.5rem;
}

/* LinkedIn button — DEPRECATED (superseded by line ~4609 newer rules)
   These rules are kept but commented out to avoid cascade conflicts.

.speaker-modal-linkedin {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  padding: 0.75rem 1.5rem;
  background: transparent;
  border: 1px solid var(--accent-gold, #ddc074);
  color: var(--accent-gold, #ddc074);
  font-size: 0.85rem;
  font-weight: 600;
  text-decoration: none;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  transition: background 180ms ease, color 180ms ease;
}

.speaker-modal-linkedin:hover {
  background: var(--accent-gold, #ddc074);
  color: var(--bg-primary, #0a0a0a);
}
*/

/* Mobile adjustments — DEFECT 2 FIX: avatar 120px on mobile (<=768px) */
@media (max-width: 768px) {
  .speaker-modal-card {
    padding: 1.5rem;
  }

  .speaker-modal-name {
    font-size: 1.25rem;
  }

  .speaker-modal-avatar,
  .speaker-modal-monogram {
    width: 120px;
    height: 120px;
  }

  .speaker-modal-monogram {
    font-size: 2.5rem;
  }
}

/* Partnership form AJAX status line (2026-05-30) */
.pf-status {
  margin: 0.75rem 0 0;
  font-size: 0.95rem;
  line-height: 1.5;
  min-height: 1.2em;
}
.pf-status--ok { color: #7cfc9b; }
.pf-status--err { color: #ff8a8a; }
.pf-status--pending { color: var(--on-dark-muted, #aaaaaa); }

/* ============================================================
   T6 4b — Per-class ticket info layer ("Kto może wybrać ten bilet?")
   Layered modal z-index 10050 (above apply modal 9999, speaker 9000).
   Dark, sharp corners (no border-radius), Geist, >=44px tap targets.
   ============================================================ */

/* Tier option now wraps: label (radio) on top, info trigger below OUTSIDE label.
   Higher specificity than the runtime-injected #msn26-register-root .msn-tier-opt
   so the wrapper, not the label, becomes the flex child of .msn-tier-opts. */
#msn26-register-root .msn-tier-opts {
  align-items: stretch; /* equal-height columns so the info triggers share one baseline */
}
#msn26-register-root .msn-tier-opt-wrap {
  flex: 1;
  min-width: 120px;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}
/* Label fills the (equal-height) wrapper so every tier box + its info trigger
   line up on the same baseline regardless of how many price lines a tier has. */
#msn26-register-root .msn-tier-opt-wrap .msn-tier-opt {
  flex: 1 0 auto;
  min-width: 0;
}

.tkt-info-trigger {
  appearance: none;
  -webkit-appearance: none;
  display: block;
  width: 100%;
  min-height: 44px;
  padding: 0.5rem 0.6rem;
  background: transparent;
  border: 1px solid rgba(255, 255, 255, 0.22);
  border-radius: 0;
  color: #ddc074;
  font-family: 'Geist', 'Geist Sans', system-ui, sans-serif;
  font-size: 0.74rem;
  letter-spacing: 0.01em;
  text-align: center;
  cursor: pointer;
  transition: border-color 180ms ease, color 180ms ease, background 180ms ease;
}
.tkt-info-trigger:hover,
.tkt-info-trigger:focus-visible {
  border-color: #ddc074;
  background: #16130c;
  outline: none;
}

.tkt-info-overlay {
  position: fixed;
  inset: 0;
  z-index: 10050;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 1rem;
}
.tkt-info-overlay.is-open { display: flex; }
.tkt-info-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(10, 10, 10, 0.85);
  backdrop-filter: blur(3px);
}
.tkt-info-card {
  position: relative;
  z-index: 1;
  max-width: 460px;
  width: calc(100% - 2rem);
  max-height: 88vh;
  overflow-y: auto;
  background: #1a1a1a;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 0;
  padding: 1.8rem 1.6rem 1.6rem;
  color: #fff;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6);
  font-family: 'Geist', 'Geist Sans', system-ui, sans-serif;
}
.tkt-info-close {
  position: absolute;
  top: 0.5rem;
  right: 0.5rem;
  width: 44px;
  height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  color: #fff;
  font-size: 1.7rem;
  line-height: 1;
  cursor: pointer;
}
.tkt-info-close:hover { color: #ddc074; }
.tkt-info-eyebrow {
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 0.68rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #ddc074;
  margin: 0 0 0.4rem;
}
.tkt-info-title {
  font-size: 1.15rem;
  font-weight: 700;
  margin: 0 0 0.5rem;
  color: #fff;
  padding-right: 2.4rem;
  text-wrap: balance; /* avoid single-word widow on narrow viewports (375) */
}
.tkt-info-tier {
  font-size: 0.82rem;
  color: #ddc074;
  margin: 0 0 1rem;
  font-family: 'Geist Mono', ui-monospace, monospace;
}
.tkt-info-toggle {
  display: inline-flex;
  margin: 0 0 1rem;
  border: 1px solid rgba(255, 255, 255, 0.22);
}
.tkt-toggle-btn {
  appearance: none;
  -webkit-appearance: none;
  min-width: 48px;
  min-height: 44px;
  padding: 0.4rem 1rem;
  background: transparent;
  border: none;
  border-radius: 0;
  color: rgba(255, 255, 255, 0.6);
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 0.78rem;
  letter-spacing: 0.04em;
  cursor: pointer;
  transition: background 180ms ease, color 180ms ease;
}
.tkt-toggle-btn + .tkt-toggle-btn { border-left: 1px solid rgba(255, 255, 255, 0.22); }
.tkt-toggle-btn.is-active { background: #ddc074; color: #16130c; font-weight: 600; }
.tkt-info-body {
  font-size: 0.92rem;
  line-height: 1.65;
  color: rgba(255, 255, 255, 0.85);
  margin: 0;
}

/* T6 4b/4c — VIP expect-bullets + phone country combobox */

/* FEATURE 1 — VIP "What you can expect" bullet list (inside .tkt-info-body) */
.tkt-info-expect-label {
  color: #ddc074;
  font-size: 0.8rem;
  margin: 0 0 0.5rem;
  font-family: 'Geist Mono', ui-monospace, monospace;
  letter-spacing: 0.04em;
}
.tkt-info-list {
  list-style: disc;
  padding-left: 1.4rem;
  margin: 0;
}
.tkt-info-list li {
  color: rgba(255, 255, 255, 0.85);
  font-size: 0.92rem;
  line-height: 1.6;
  margin-bottom: 0.4rem;
}
.tkt-info-list li:last-child { margin-bottom: 0; }
.tkt-info-list li::marker { color: #ddc074; }

/* FEATURE 2 — Phone country-code combobox (apply modal step 1) */
.tkt-phone-row {
  display: flex;
  gap: 0.5rem;
  align-items: stretch;
}
.tkt-cc-combo {
  position: relative;
  flex: 0 0 auto;
}
.tkt-cc-btn {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.7rem 0.8rem;
  background: #0f0f0f;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 0;
  color: #fff;
  font-family: 'Geist', 'Geist Sans', system-ui, sans-serif;
  font-size: 1rem;
  cursor: pointer;
  white-space: nowrap;
}
.tkt-cc-btn:focus-visible {
  outline: 2px solid #ddc074;
  outline-offset: 2px;
}
.tkt-cc-caret {
  color: #ddc074;
  font-size: 0.7rem;
}
.tkt-phone-input {
  flex: 1 1 auto;
  min-width: 0;
}
.tkt-cc-pop {
  position: absolute;
  top: calc(100% + 2px);
  left: 0;
  z-index: 5;
  width: min(280px, 78vw);
  max-height: 260px;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  background: #1a1a1a;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 0;
  box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5);
}
.tkt-cc-pop[hidden] { display: none; }
.tkt-cc-search {
  flex: 0 0 auto;
  margin: 0.5rem;
  padding: 0.55rem 0.6rem;
  background: #0f0f0f;
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 0;
  color: #fff;
  font-size: 0.95rem;
}
.tkt-cc-search:focus-visible {
  outline: 2px solid #ddc074;
  outline-offset: 2px;
}
.tkt-cc-list {
  list-style: none;
  margin: 0;
  padding: 0;
  overflow-y: auto;
  flex: 1 1 auto;
}
.tkt-cc-opt {
  min-height: 44px;
  display: flex;
  align-items: center;
  padding: 0.5rem 0.7rem;
  font-size: 0.9rem;
  color: rgba(255, 255, 255, 0.85);
  cursor: pointer;
  border-radius: 0;
}
.tkt-cc-opt:hover,
.tkt-cc-opt.is-active {
  background: #16130c;
  color: #fff;
}

/* ===== MSN26 slice integration 2026-06-03 (W3 manifesto, W4 agenda, W5 night-rewards, W6 marquee) ===== */

/* --- slices/manifesto.css --- */
/* ==========================================================================
   MSN26 W3 — Manifesto 2-column layout (quote LEFT / CTA RIGHT)
   --------------------------------------------------------------------------
   Origin: Alex live-prod check image #1 — manifesto was centered; convert to
   a 2-col grid with a gold CTA on the right that scrolls to #tickets.
   Splice target: css/overrides.css (append near the existing .manifesto rules,
   AFTER the base `.manifesto a {…}` block at overrides.css:686 so the
   compound button selectors below win the cascade).

   Section is DARK (.manifesto background var(--bg-secondary) #111111).
   Tokens reused (no new colors): --accent-gold, --accent-gold-light,
   --bg-primary, --on-dark-secondary.

   CASCADE NOTE: overrides.css:686 `.manifesto a` (spec 0,1,1) forces underline
   + gold text on EVERY anchor in the section. The button is an <a>, so its
   styling is written as `.manifesto a.manifesto-cta-btn` (0,2,1) and the hover
   as `.manifesto a.manifesto-cta-btn:hover` (0,3,1) to beat the base rules in
   an ORDER-INDEPENDENT way. Do not downgrade these to a single class.
   ========================================================================== */

.manifesto-grid {
  display: grid;
  grid-template-columns: 1.5fr 1fr;
  gap: clamp(2.5rem, 6vw, 6rem);
  align-items: center;
  max-width: 1100px;
  margin: 0 auto;
  text-align: left;
}

/* Left column — quote no longer auto-centered/narrow */
.manifesto-grid .manifesto-quote {
  max-width: none;
  margin: 0 0 1.5rem;
  text-align: left;
}
.manifesto-grid .manifesto-author {
  text-align: left;
}

/* Right column — CTA block, separated by a thin gold rule */
.manifesto-cta {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1.75rem;
  border-left: 1px solid rgba(184, 149, 106, 0.25);
  padding-left: clamp(1.5rem, 3vw, 2.5rem);
}
.manifesto-cta-lead {
  font-family: 'Inter', sans-serif;
  font-weight: 300;
  font-size: clamp(1rem, 1.3vw, 1.15rem);
  line-height: 1.7;
  color: var(--on-dark-secondary, #e8e6e3);
  margin: 0;
  text-wrap: pretty;
}

/* Gold button — mirrors .btn-primary token usage; compound selector defeats
   the base `.manifesto a` underline/gold-text rule (see CASCADE NOTE). */
.manifesto a.manifesto-cta-btn {
  display: inline-block;
  background: var(--accent-gold);
  color: var(--bg-primary);
  padding: 1rem 2.8rem;
  font-family: 'Geist', 'Inter', sans-serif;
  font-weight: 600;
  font-size: 0.85rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  text-decoration: none;
  transition: all 0.3s ease;
}
.manifesto a.manifesto-cta-btn:hover {
  background: var(--accent-gold-light);
  color: var(--bg-primary);
  text-decoration: none;
  transform: translateY(-2px);
  box-shadow: 0 12px 50px rgba(184, 149, 106, 0.25);
}

/* Responsive → single column, recentered (mirrors the original centered feel) */
@media (max-width: 860px) {
  .manifesto-grid {
    grid-template-columns: 1fr;
    gap: 2.5rem;
    text-align: center;
  }
  .manifesto-grid .manifesto-quote,
  .manifesto-grid .manifesto-author {
    text-align: center;
    margin-left: auto;
    margin-right: auto;
  }
  .manifesto-grid .manifesto-quote {
    max-width: 640px;
  }
  .manifesto-cta {
    align-items: center;
    text-align: center;
    border-left: none;
    border-top: 1px solid rgba(184, 149, 106, 0.25);
    padding-left: 0;
    padding-top: 2.5rem;
    max-width: 480px;
    margin: 0 auto;
  }
}

@media (prefers-reduced-motion: reduce) {
  .manifesto a.manifesto-cta-btn { transition: none; }
  .manifesto a.manifesto-cta-btn:hover { transform: none; }
}

/* --- slices/agenda.css --- */
/* ============================================================
   MSN26 W4 SLICE — agenda glass + accordion + enlarged act titles
   Integration: append verbatim to css/overrides.css (end of file).
   Pairs with slices/agenda.html + js/agenda-accordion.js + js/agenda-data.json.

   D3  frosted ROUNDED glass behind agenda TITLE + DESC only (.glass-body)
   D5  enlarge "Trzy akty wieczoru" act titles (.act-title / .three-acts h3)
   D4  clickable agenda blocks -> collapsible .agenda-detail accordion

   NOTE: the OLD #agenda used .agenda-timeline / .agenda-item / .agenda-content
   (styled in style.css + overrides.css). This slice introduces NEW class names
   (.agenda-cards / .agenda-card / .glass-body / .agenda-detail), so the legacy
   rules simply stop matching once the markup is swapped — no override war.
   .agenda-tag + .agenda-tag-networking are intentionally REUSED (existing styling).
   ============================================================ */

/* ---- D5: enlarge the "Trzy akty wieczoru" act titles ---- */
/* Targets current markup (.three-acts .act-body h3) AND the .act-title class
   in case the orchestrator adds it. Bumped from clamp(1.6,2.2) -> clamp(2.1,3.1). */
.three-acts .act-body h3,
.three-acts .act-title,
.act-title {
  font-family: 'Playfair Display', serif;
  font-size: clamp(2.1rem, 4.4vw, 3.1rem) !important;
  font-weight: 700;
  line-height: 1.12;
  color: #ffffff;
  margin-bottom: 0.9rem;
  text-shadow: 0 1px 10px rgba(0, 0, 0, 0.6);
  text-wrap: balance;
}

/* ---- D3 + D4: agenda cards ---- */
.agenda-cards {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  margin: 0 auto;
  padding-bottom: 1rem;
}

.agenda-card {
  position: relative;
}

.agenda-card-head {
  display: grid;
  grid-template-columns: minmax(104px, 13%) 1fr;
  gap: 1.6rem;
  align-items: start;
  cursor: pointer;
}

/* Time — NOT glassed (D3). Gold Playfair on the photo, legible via text-shadow. */
.agenda-card-time {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(1.5rem, 3vw, 2.3rem);
  font-weight: 700;
  color: #ddc074;
  -webkit-text-stroke: 1px rgba(255, 255, 255, 0.85);
  text-shadow: 0 2px 16px rgba(0, 0, 0, 0.85), 0 1px 4px rgba(0, 0, 0, 0.9);
  white-space: nowrap;
  line-height: 1.15;
  padding-top: 0.35rem;
}

.agenda-card-main {
  display: flex;
  flex-direction: column;
  gap: 0.8rem;
  min-width: 0;
}

/* The frosted ROUNDED panel — behind TITLE + DESC only (D3). */
.glass-body {
  background: rgba(16, 15, 14, 0.58);
  -webkit-backdrop-filter: blur(15px) saturate(125%);
  backdrop-filter: blur(15px) saturate(125%);
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: 18px;
  padding: 1.35rem 1.6rem;
  box-shadow: 0 10px 34px rgba(0, 0, 0, 0.34);
}
/* Fallback for browsers without backdrop-filter: solid darker panel keeps contrast. */
@supports not ((-webkit-backdrop-filter: blur(2px)) or (backdrop-filter: blur(2px))) {
  .glass-body { background: rgba(14, 13, 12, 0.9); }
}

/* Title row = a full-width reset button (the accordion control). */
.agenda-card-title {
  margin: 0;
  font-weight: 400;
}
.agenda-card-toggle {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  width: 100%;
  margin: 0;
  padding: 0;
  background: none;
  border: none;
  text-align: left;
  cursor: pointer;
  color: inherit;
  font: inherit;
}
.agenda-card-toggle:focus-visible {
  outline: 2px solid #ddc074;
  outline-offset: 4px;
  border-radius: 4px;
}
.agenda-card-title-text {
  font-family: 'Playfair Display', Georgia, serif;
  font-size: clamp(1.25rem, 2.2vw, 1.6rem);
  font-weight: 700;
  line-height: 1.25;
  color: #ffffff;
  text-wrap: balance;
}

/* Chevron — rotates when the card opens. */
.agenda-chevron {
  flex: 0 0 auto;
  width: 0.7rem;
  height: 0.7rem;
  margin-top: 0.2rem;
  border-right: 2px solid #ddc074;
  border-bottom: 2px solid #ddc074;
  transform: rotate(45deg);
  transition: transform 280ms ease;
}
.agenda-card-toggle[aria-expanded="true"] .agenda-chevron {
  transform: rotate(-135deg);
}

/* Teaser description (collapsed view) — 2-line clamp inside the glass. */
.agenda-card-desc {
  margin: 0.65rem 0 0;
  font-size: 1rem;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.86);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Tags — NOT glassed (D3): sit below the panel, on the photo. */
.agenda-card-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  padding-left: 0.2rem;
}

/* ---- D4: collapsible detail panel ---- */
.agenda-detail {
  overflow: hidden;
  max-height: 0;
  opacity: 0;
  margin-top: 0;
  transition: max-height 360ms ease, opacity 300ms ease, margin-top 360ms ease;
}
.agenda-card.is-open .agenda-detail {
  max-height: 80rem;
  opacity: 1;
  margin-top: 1rem;
}
.agenda-detail-inner {
  margin-left: clamp(0px, 13%, 168px);
  background: rgba(16, 15, 14, 0.5);
  -webkit-backdrop-filter: blur(12px) saturate(120%);
  backdrop-filter: blur(12px) saturate(120%);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 16px;
  padding: 1.4rem 1.6rem;
}
@supports not ((-webkit-backdrop-filter: blur(2px)) or (backdrop-filter: blur(2px))) {
  .agenda-detail-inner { background: rgba(14, 13, 12, 0.92); }
}

/* meta row (godziny / miejsce) */
.agenda-detail-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 1.4rem 2.4rem;
  margin: 0 0 1rem;
}
.agenda-detail-meta > div {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
}
.agenda-detail-meta dt {
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 0.66rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #ddc074;
}
.agenda-detail-meta dd {
  margin: 0;
  font-size: 0.98rem;
  color: #ffffff;
}
.agenda-detail-desc {
  margin: 0 0 1rem;
  font-size: 1rem;
  line-height: 1.7;
  color: rgba(255, 255, 255, 0.88);
}

/* roster / panelists */
.agenda-roster-label {
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 0.66rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #ddc074;
  margin: 0 0 0.7rem;
}
.agenda-roster-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.7rem;
  margin: 0;
  padding: 0;
  list-style: none;
}
.agenda-panelist {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.5rem 0.85rem;
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 12px;
}
.agenda-panelist-logo {
  width: 28px;
  height: 28px;
  object-fit: contain;
  flex: 0 0 auto;
}
.agenda-panelist-text { display: flex; flex-direction: column; gap: 0.1rem; }
.agenda-panelist-name { font-size: 0.92rem; font-weight: 600; color: #ffffff; }
.agenda-panelist-company { font-size: 0.92rem; font-weight: 600; color: #ffffff; }
.agenda-panelist-role { font-size: 0.78rem; color: rgba(255, 255, 255, 0.7); }
.agenda-soon {
  display: inline-block;
  margin: 0;
  font-size: 0.85rem;
  font-style: italic;
  color: rgba(255, 255, 255, 0.72);
  padding: 0.4rem 0.85rem;
  background: rgba(197, 165, 90, 0.12);
  border: 1px solid rgba(197, 165, 90, 0.55);
  border-radius: 10px;
}

/* ---- responsive ---- */
@media (max-width: 640px) {
  .agenda-card-head {
    grid-template-columns: 1fr;
    gap: 0.7rem;
  }
  .agenda-card-time { padding-top: 0; }
  .glass-body { padding: 1.1rem 1.2rem; border-radius: 14px; }
  .agenda-detail-inner { margin-left: 0; padding: 1.15rem 1.2rem; }
  .agenda-detail-meta { gap: 0.9rem 1.6rem; }
}

/* ---- reduced motion ---- */
@media (prefers-reduced-motion: reduce) {
  .agenda-detail,
  .agenda-chevron { transition: none; }
}

/* --- slices/night-rewards.css --- */
/* ============================================================
   NIGHT REWARDS  (W5 / Domi D7) — evening prize draw section.
   Appended to css/overrides.css by the Orchestrator during
   integration. Pairs with slices/night-rewards.html.

   The section inherits the global `section { max-width: 1100px;
   padding: 7rem 3rem; margin: 0 auto; }` cage — exactly like
   #tickets / #networking — so it sits on the page background with
   NO full-bleed band (intentional: avoids a half-width colored
   stripe and stays consistent with its Tickets/Partners
   neighbours). Visual interest comes from the gold pretitle,
   heading and centred sponsor logos. Uses existing brand tokens.
   ============================================================ */

.night-rewards {
  text-align: center;
}

/* Tighten the default 5rem section-header gap — this is a compact
   section (pretitle + title only), so 5rem reads too airy here. */
.night-rewards .section-header {
  margin-bottom: 2.5rem;
}

.night-rewards .nr-content {
  max-width: 640px;
  margin: 0 auto;
}

.night-rewards .nr-body {
  color: var(--on-dark-primary, #ffffff);
  font-weight: 300;
  font-size: 1.05rem;
  line-height: 1.7;
  margin: 0 auto 2.75rem;
}

/* Sponsor lead-in label — mirrors the .section-pretitle treatment. */
.night-rewards .nr-sponsors-label {
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.25em;
  color: var(--on-dark-accent, #e3c178);
  margin-bottom: 1.75rem;
}

.night-rewards .nr-sponsors {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 2.5rem;
  margin-bottom: 2.5rem;
}

/* R24 (2026-06-03) — sponsor logos LARGER + all-white monochrome.
   Sierra Golf + GPOLAND PNGs are dark/low-contrast on the night bg (GPOLAND
   ~invisible). brightness(0) invert(1) flattens each to a clean white
   silhouette; bumped optical height so they read on the dark section. */
.night-rewards .nr-logo {
  height: 72px;
  width: auto;
  max-width: 240px;
  object-fit: contain;
  display: block;
  filter: brightness(0) invert(1);
  opacity: 0.95;
  transition: opacity 180ms ease;
}
.night-rewards .nr-logo:hover { opacity: 1; }

.night-rewards .nr-note {
  font-size: 0.9rem;
  font-style: italic;
  color: var(--on-dark-muted, #b0aca8);
  margin: 0;
}

@media (max-width: 720px) {
  .night-rewards .nr-sponsors {
    gap: 1.75rem;
  }
  .night-rewards .nr-logo {
    height: 56px;
    max-width: 180px;
  }
}

/* --- slices/marquee.css --- */
/* ============================================================
   MSN26 — W6 PARTNER MARQUEE BAND (seashell, below hero)
   Append to css/overrides.css during integration.
   Scoped under .marquee-band so it does NOT collide with the legacy
   .partner-marquee-* rules (overrides.css ~2211-2274) — those can be
   removed by the Orchestrator once the old dark block is deleted.

   Design: full-bleed Seashell (#fff5ee) band, gold mono headings (#ddc074),
   two single-line marquees. Top = MSN scaffold (empty). Bottom = "Zaufali nam"
   infinite horizontal scroll of COLOR partner logos.
   ============================================================ */

/* Full-bleed light band ------------------------------------- */
.marquee-band {
  width: 100vw;
  max-width: none;
  margin-left: calc(-50vw + 50%);
  background: #fff5ee;                                  /* RT Seashell */
  border-top: 1px solid rgba(197, 165, 90, 0.35);       /* gold hairline */
  border-bottom: 1px solid rgba(197, 165, 90, 0.35);
  padding: 2.75rem 0;
  overflow: hidden;
}

/* The global style.css `section::before` paints a second hairline
   inside the band + a 4rem spacer, making top whitespace ~2x bottom.
   The band has its own border hairlines — kill the generic one so
   top padding == bottom padding. */
.marquee-band::before { display: none; }

.marquee { padding: 0.9rem 0; }
.marquee + .marquee { margin-top: 0.4rem; }

/* Golden mono heading --------------------------------------- */
.marquee-heading {
  text-align: center;
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 0.82rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  font-weight: 700;
  color: #ddc074;                                       /* RT gold */
  margin: 0 0 1.4rem;
}

/* V2 (7802) Playfair editorial heading — SAME treatment for BOTH
   section headings (Partnerzy Mid-Summer Night + Zaufali nam).
   Identical font/size/color per VA symmetry rule. */
.marquee--prev .marquee-heading,
.partners-static .marquee-heading,
.partners-featured .marquee-heading,
.msn26-current-partners .marquee-heading {
  font-family: 'Playfair Display', serif !important;
  font-size: clamp(1.7rem, 1rem + 2.4vw, 2.85rem) !important;
  font-weight: 600 !important;
  line-height: 1.08 !important;
  color: #161310 !important;
  letter-spacing: normal !important;
  text-transform: none !important;
  margin: 0 0 2.25rem !important;
  text-wrap: balance !important;
}
/* thin gold underscore beneath both headlines (V2 signature) */
.marquee--prev .marquee-heading::after,
.partners-static .marquee-heading::after,
.partners-featured .marquee-heading::after,
.msn26-current-partners .marquee-heading::after {
  content: "";
  display: block;
  width: 52px;
  height: 2px;
  margin: 0.95rem auto 0;
  background: var(--accent-gold, #ddc074);
}

/* Viewport clips the over-wide track ------------------------ */
.marquee-viewport {
  width: 100%;
  overflow: hidden;
}

/* Track = the moving flex row (SCROLL DISABLED for .marquee--prev / .partners-static per WW-E) */
.marquee-track {
  display: flex;
  align-items: center;
  gap: 4rem;
  width: max-content;
  padding: 0.4rem 2rem;
  animation: marquee-band-scroll 50s linear infinite;
  will-change: transform;
}

/* pause on hover so visitors can read a logo */
.marquee--prev .marquee-track:hover { animation-play-state: paused; }

/* V1: Section 2 ("Zaufali nam") = single-line infinite scroll marquee.
   Track holds 21 logos ×2; translateX(0 → -50%) lands set2 exactly on set1. */
.marquee--prev.partners-scroll .marquee-track,
.partners-scroll .marquee-track {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 4rem;
  width: max-content;
  animation: marquee-band-scroll 60s linear infinite;
  will-change: transform;
}
/* pause-on-hover so a visitor can read a logo */
.partners-scroll .marquee-track:hover { animation-play-state: paused; }

/* Color logo sizing (light band → full color, no grayscale) - */
.marquee-logo {
  height: 46px;
  width: auto;
  max-width: 170px;
  object-fit: contain;
  opacity: 0.9;
  transition: opacity 200ms ease, transform 200ms ease;
  flex-shrink: 0;
}
.marquee-logo:hover { opacity: 1; transform: scale(1.04); }

/* V1: Section 2 scrolling-strip logos uniform 40px, full color */
.marquee--prev.partners-scroll .marquee-logo,
.partners-scroll .marquee-logo {
  height: 40px;
  max-width: none;
  opacity: 1;
  filter: none;
}

@keyframes marquee-band-scroll {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-50%); }                 /* set1 -> set2 seam */
}

/* ============================================================
   V1 (Google Stitch style): SECTION 1 — Featured "partner cards".
   Two elevated, equal cards side-by-side. Material-influenced:
   soft elevation, rounded corners, generous whitespace, kicker label.
   ============================================================ */
.partners-featured { margin-bottom: 3.25rem; }

/* Section-1 heading styling unified with Section 2 above (Playfair). */

.partners-featured .marquee-track {
  animation: none;
  width: auto;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: stretch;
  gap: 2rem;
  will-change: auto;
}

.partner-card {
  margin: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  width: 280px;
  max-width: 42vw;
  padding: 2.25rem 2rem;
  background: #fffaf6;                                   /* lifted off Seashell */
  border: 1px solid rgba(197, 165, 90, 0.35);            /* gold hairline */
  border-radius: 18px;
  box-shadow: 0 1px 2px rgba(26, 22, 14, 0.06),
              0 10px 28px rgba(26, 22, 14, 0.08);         /* soft elevation */
  transition: transform 240ms ease, box-shadow 240ms ease;
}
.partner-card:hover,
.partner-card-link:hover .partner-card,
.partner-card-link:focus-visible .partner-card {
  transform: translateY(-4px);
  box-shadow: 0 2px 4px rgba(26, 22, 14, 0.08),
              0 18px 40px rgba(26, 22, 14, 0.12);
}

/* Whole card is a link to the partner's site (opens in new tab) */
.partner-card-link {
  display: block;
  text-decoration: none;
  color: inherit;
  border-radius: 18px;
  outline-offset: 4px;
}
.partner-card-link .partner-card { height: 100%; }

.partner-card-logo {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 72px;
}
.partner-card-logo .marquee-logo {
  height: 64px;
  max-width: 200px;
  opacity: 1;
  filter: none;
}

/* Wide wordmark logos (Capital Park) fill the card width */
.partner-card-logo .marquee-logo--wide {
  height: auto;
  max-height: 56px;
  width: 100%;
  max-width: 232px;
}

.partner-card-label {
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 0.72rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--rt-red, #e31b23);                         /* RT logo red */
  text-align: center;
}

/* Accessibility: stop motion, wrap + center ----------------- */
@media (prefers-reduced-motion: reduce) {
  .marquee-track,
  .partners-scroll .marquee-track {
    animation: none;
    flex-wrap: wrap;
    width: auto;
    justify-content: center;
    gap: 2rem;
  }
}

/* Mobile ---------------------------------------------------- */
@media (max-width: 640px) {
  .marquee-band { padding: 2rem 0; }
  .marquee-heading { margin-bottom: 1.4rem; }
  .marquee-track { gap: 2.5rem; }
  .marquee-logo { height: 38px; max-width: 130px; }
  .partners-scroll .marquee-logo { height: 34px; }
  /* link wrapper carries the width so both stacked cards are EQUAL */
  .partner-card-link { width: 100%; max-width: 320px; }
  .partner-card { width: 100%; max-width: none; padding: 1.75rem 1.5rem; }
  .partner-card-logo .marquee-logo { height: 52px; }
}

/* ============================================================
   WW-E REVISION PASS — 2026-06-03
   R9 (manifesto layout) · R11/R21/R22 (.section-subhead) ·
   R12 (white body via token re-scope) · R16 (agenda glass) ·
   R19 (agenda titles → Geist) · utility .nowrap.
   Appended LAST so same-specificity rules win over the W3/W4 slices.
   Selects on WW-D's contract classes:
   .manifesto-grid / .manifesto-col / .manifesto-cta--center / .agenda-card.
   ============================================================ */

/* -------------------------------------------------------------------------
   AGENDA GLASS — single container wrapping the entire agenda (cards + headers).
   The markup worker emits .agenda-container / .agenda-background / .agenda-glass
   contract. NO per-item glass; the old .agenda-card glass stays as the item shell
   (no backdrop-filter — neutralized below). The agenda photo renders at opacity 1,
   NO scrim (removed from .section-bg::after above).
   ------------------------------------------------------------------------- */
.agenda-container {
  position: relative;
  max-width: 1160px;
  margin: 0 auto;
}

.agenda-background {
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: url('../images/bg/bfort-akwarela-garden-evening.webp');
  background-size: cover;
  background-position: center;
  border-radius: 16px;
}

.agenda-glass {
  position: relative;
  background: rgba(15, 15, 15, 0.75);
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
  border: 1px solid rgba(221, 192, 116, 0.15);
  border-radius: 16px;
  padding: 48px 40px;
  z-index: 1;
}

.agenda-item {
  border-bottom: 1px solid rgba(255, 255, 255, 0.08);
  padding: 24px 0;
}
.agenda-item:last-child {
  border-bottom: none;
}

.agenda-item-header {
  cursor: pointer;
  display: grid;
  grid-template-columns: 140px 1fr auto;
  gap: 24px;
  align-items: start;
  transition: opacity 0.2s ease;
  background: transparent;
  border: none;
  padding: 0;
  width: 100%;
  text-align: left;
}
.agenda-item-header:hover {
  opacity: 0.85;
}

.agenda-time {
  font-family: 'Geist Mono', 'Courier New', monospace;
  font-size: 0.875rem;
  font-weight: 500;
  color: #ddc074;
  letter-spacing: 0.02em;
  white-space: nowrap;
  padding-top: 2px;
}

.agenda-content {
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.agenda-title {
  font-size: 1.25rem;
  font-weight: 600;
  color: #ffffff;
  line-height: 1.4;
  font-family: 'Geist', 'Geist Sans', 'Inter', system-ui, sans-serif;
}

.agenda-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.agenda-tag {
  font-family: 'Geist Mono', monospace;
  font-size: 0.75rem;
  padding: 4px 10px;
  background: rgba(221, 192, 116, 0.12);
  border: 1px solid rgba(221, 192, 116, 0.3);
  border-radius: 4px;
  color: #ddc074;
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.agenda-chevron {
  width: 24px;
  height: 24px;
  display: flex;
  align-items: center;
  justify-content: center;
  color: rgba(255, 255, 255, 0.4);
  transition: transform 0.3s ease, color 0.2s ease;
}

.agenda-chevron svg {
  width: 16px;
  height: 16px;
}

.agenda-item.expanded .agenda-chevron {
  transform: rotate(180deg);
  color: #ddc074;
}

.agenda-detail {
  max-height: 0;
  overflow: hidden;
  opacity: 0;
  transition: max-height 0.4s ease, opacity 0.3s ease;
  margin-top: 0;
}

.agenda-item.expanded .agenda-detail {
  max-height: 800px;
  opacity: 1;
  margin-top: 24px;
}

.agenda-detail-content {
  padding: 24px;
  background: rgba(255, 255, 255, 0.03);
  border-radius: 12px;
  border: 1px solid rgba(221, 192, 116, 0.1);
}

.agenda-location {
  font-family: 'Geist Mono', monospace;
  font-size: 0.875rem;
  color: #ddc074;
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  gap: 8px;
}

.agenda-location::before {
  content: '📍';
  font-size: 1rem;
}

.agenda-description {
  font-size: 1rem;
  color: #ffffff;
  line-height: 1.7;
  margin-bottom: 20px;
}

.agenda-panelists {
  margin-top: 20px;
  padding-top: 20px;
  border-top: 1px solid rgba(255, 255, 255, 0.08);
}

.agenda-panelists-title {
  font-size: 0.875rem;
  font-weight: 600;
  color: #ddc074;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 12px;
}

.agenda-panelist {
  font-size: 0.9375rem;
  color: rgba(255, 255, 255, 0.9);
  margin-bottom: 4px;
}

/* Mobile responsive */
@media (max-width: 768px) {
  .agenda-glass {
    padding: 32px 24px;
  }

  .agenda-item-header {
    grid-template-columns: 1fr auto;
    gap: 12px;
  }

  .agenda-time {
    grid-column: 1 / -1;
    margin-bottom: 4px;
  }

  .agenda-title {
    font-size: 1.125rem;
  }

  .agenda-detail-content {
    padding: 20px;
  }
}

/* Reduced-motion: static background */
@media (prefers-reduced-motion: reduce) {
  .agenda-background {
    transform: none !important;
  }
}

/* ---- utility: nowrap (frozen contract) ---- */
.nowrap { white-space: nowrap; }

/* -------------------------------------------------------------------------
   R9 — Manifesto: two EQUAL text columns, full-width centered CTA below.
   WW-D markup: .manifesto-grid > .manifesto-col ×2 + .manifesto-cta--center.
   Higher specificity (.manifesto .manifesto-grid) defeats the W3 slice's
   1.5fr 1fr grid in an order-independent way.
   ------------------------------------------------------------------------- */
.manifesto .manifesto-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: start;
  max-width: 1100px;
  margin: 0 auto;
  text-align: left;
}
.manifesto .manifesto-col {
  min-width: 0;
}
/* Full-width CTA spanning BOTH columns, centred, sitting BELOW them. */
.manifesto .manifesto-cta--center {
  grid-column: 1 / -1;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 1.5rem;
  margin-top: clamp(1.5rem, 4vw, 3rem);
  padding-top: clamp(1.5rem, 4vw, 3rem);
  border-top: 1px solid rgba(221, 192, 116, 0.28);  /* brighter-gold hairline */
}
.manifesto .manifesto-cta--center .manifesto-cta-lead {
  max-width: 640px;
  margin: 0;
}
@media (max-width: 720px) {
  .manifesto .manifesto-grid {
    grid-template-columns: 1fr;
    gap: 2.25rem;
    text-align: center;
  }
  .manifesto .manifesto-col { text-align: center; }
  .manifesto .manifesto-cta--center { margin-top: 0.5rem; }
}

/* -------------------------------------------------------------------------
   R11 / R21 / R22 — shared .section-subhead treatment.
   Applied by WW-D to acts.subtitle, venue.subtitle, tickets.comp.intro.
   Larger, full white, bold subheading (not muted body). !important defeats
   the inline style still on tickets.comp.intro
   (style="font-size:0.85rem;color:var(--on-dark-muted)").
   ------------------------------------------------------------------------- */
.section-subhead {
  max-width: 820px;
  margin: 0 auto;
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 700 !important;
  font-size: clamp(1.2rem, 2.4vw, 1.6rem) !important;
  line-height: 1.5;
  color: #ffffff !important;
  text-shadow: 0 1px 8px rgba(0, 0, 0, 0.55);  /* legible on acts/venue photo beds */
  text-wrap: balance;
}
@media (max-width: 480px) {
  .section-subhead {
    font-size: clamp(1.05rem, 4.5vw, 1.25rem) !important;
  }
}

/* -------------------------------------------------------------------------
   R16 — Glass over the WHOLE agenda card (wraps time + content).
   Domi's "rounded glass" ask → subtle radius (RT sharp-corner exception,
   per the WW-E frozen contract). The inner .glass-body / .agenda-detail-inner
   no longer carry their own frost (avoids glass-on-glass).
   ------------------------------------------------------------------------- */
.agenda-cards .agenda-card,
.agenda-card {
  background: rgba(16, 15, 14, 0.58);
  -webkit-backdrop-filter: blur(16px) saturate(125%);
  backdrop-filter: blur(16px) saturate(125%);
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 18px;
  padding: 1.4rem 1.7rem;
  box-shadow: 0 10px 34px rgba(0, 0, 0, 0.34);
}
@supports not ((-webkit-backdrop-filter: blur(2px)) or (backdrop-filter: blur(2px))) {
  .agenda-card { background: rgba(14, 13, 12, 0.92); }
}
.agenda-card .glass-body {
  background: none;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  border: none;
  border-radius: 0;
  padding: 0;
  box-shadow: none;
}
.agenda-card .agenda-detail-inner {
  background: rgba(255, 255, 255, 0.04);
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  border: 1px solid rgba(255, 255, 255, 0.10);
}
/* Time — legible WHITE/strong on the glass (was gold-on-photo + white stroke). */
.agenda-card .agenda-card-time,
.agenda-card .agenda-time,
.agenda-time {
  color: #ffffff;
  -webkit-text-stroke: 0;
  text-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
}

/* -------------------------------------------------------------------------
   R19 — Agenda / keynote / panel TITLES → legible site heading sans (Geist).
   Agenda-scoped only (Playfair stays elsewhere site-wide).
   ------------------------------------------------------------------------- */
.agenda-card .agenda-card-title-text,
.agenda-card .agenda-card-title,
.agenda-card .agenda-title {
  font-family: 'Geist', 'Geist Sans', 'Inter', system-ui, sans-serif;
  letter-spacing: -0.01em;
}

/* -------------------------------------------------------------------------
   R12 — Agenda DETAIL + acts + about body copy → FULL WHITE.
   Token re-scope (NOT an equal-specificity rule — origin SAR 2026-06-02 venue
   band): set --rt-muted white inside the containers; body selectors consume
   var(--rt-muted, #fff). Panelist ROLE kept softer for hierarchy.
   ------------------------------------------------------------------------- */
.agenda-detail,
.agenda-card .agenda-card-main,
.acts-desc,
.three-acts .act-body,
.about .about-concept .concept-block {
  --rt-muted: #ffffff;
}
.agenda-card-desc,
.agenda-detail-desc,
.agenda-detail-meta dd,
.three-acts .act-body p,
.three-acts .act-body .act-subtitle,
.acts-desc,
.about .about-concept .concept-block p {
  color: var(--rt-muted, #ffffff);
}

/* -------------------------------------------------------------------------
   WIDOW DEFENSE (#8 / #9) — text-wrap: balance on Garden/performance copy + partnership CTA.
   Pairs with &nbsp; already in markup for defense-in-depth.
   ------------------------------------------------------------------------- */
.performance-content p,
.performance .perf-desc,
.acts-desc,
.three-acts .act-body p,
.manifesto-cta-lead,
.manifesto .manifesto-cta--center .manifesto-cta-lead {
  text-wrap: balance;
}

/* ============================================================
   END WW-E REVISION PASS
   ============================================================ */

/* -------------------------------------------------------------------------
   Right-column manifesto paragraph (.manifesto-about) is FULLY SYMMETRIC with
   the LEFT column .manifesto-quote: identical font-family, size, line-height,
   style, and colour at ALL viewports. Mirrors style.css:397 exactly so the two
   columns read as one balanced typographic pair. Updated 2026-06-03 after the
   first pass shipped a deliberately-smaller "secondary" size = VA asymmetry
   breach (see SAR-2026-06-03-manifesto-about-smaller-than-quote-va-asymmetry).
   ------------------------------------------------------------------------- */
.manifesto-grid .manifesto-about {
  font-family: 'Playfair Display', serif;
  font-style: italic;
  font-size: clamp(1.5rem, 3vw, 2.2rem);  /* === .manifesto-quote (style.css:397) */
  line-height: 1.4;                        /* === .manifesto-quote */
  color: #ffffff;                          /* === .manifesto-quote (style.css:1824) */
  text-wrap: pretty;
}

/* ============================================================
   MSN26 CANONICAL AGENDA — V2 "glass" ported 2026-06-03
   Static (no dropdown) · two-col time-left/content-right ·
   bg image VISIBLE (no overlay) · STRONG parallax (JS transform
   layer .agenda-prog-bg + js/parallax.js, works on mobile too) ·
   white text · gold #ddc074 time+chips · i18n-wired.
   ============================================================ */
#agenda.agenda-prog{
  position:relative;
  width:100vw;
  max-width:none;
  margin-left:calc(-50vw + 50%);
  padding:84px 0 108px;
  background:#15120e;                      /* fallback behind the parallax layer */
  overflow:hidden;
}
/* Parallax layer: bleeds ±28% beyond the section so the JS translateY
   (±25% of section height, see js/parallax.js) never exposes edges.
   transform-based → works on iOS (unlike background-attachment:fixed). */
.agenda-prog-bg{
  position:absolute;left:0;right:0;top:-28%;bottom:-28%;z-index:0;
  background:#15120e url("../images/bg/bfort-akwarela-terrace-dusk.webp?v=20260528r2") center/cover no-repeat;
  will-change:transform;
  transform:translate3d(0,0,0);
}
.agenda-prog-inner{
  position:relative;z-index:1;
  width:min(1000px, calc(100vw - 2.5rem));
  margin:0 auto;
}
#agenda.agenda-prog .section-header{ text-align:center; margin-bottom:48px; }
/* Pretitle: canonical kicker (base .section-pretitle = red dash + gold
   uppercase, padding-left:44px) — NO pill. Only readability shadow added. */
#agenda.agenda-prog .section-pretitle{
  color:var(--accent-gold,#ddc074);
  text-shadow:0 1px 14px rgba(0,0,0,.6);
}
#agenda.agenda-prog .section-title{
  color:#fff;text-shadow:0 2px 26px rgba(0,0,0,.5);text-wrap:balance;
}
#agenda.agenda-prog .section-subtitle{
  color:#fff;max-width:620px;margin:16px auto 0;text-wrap:balance;
  text-shadow:0 1px 14px rgba(0,0,0,.5);
}
.agenda-prog-list{ display:flex;flex-direction:column;gap:18px; }
.ap-row{
  display:grid;grid-template-columns:170px 1fr;gap:24px;
  padding:22px 26px 23px;border-radius:18px;
  background:rgba(28,25,21,.42);
  border:1px solid rgba(255,255,255,.16);
  backdrop-filter:blur(16px) saturate(135%);-webkit-backdrop-filter:blur(16px) saturate(135%);
  box-shadow:0 14px 40px rgba(0,0,0,.30), inset 0 1px 0 rgba(255,255,255,.12);
  position:relative;overflow:hidden;
}
.ap-row::before{
  content:"";position:absolute;inset:0 0 auto 0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.4),transparent);
}
.ap-time{
  font-family:'Playfair Display',Georgia,serif;font-weight:600;font-size:23px;
  color:var(--accent-gold,#ddc074);white-space:nowrap;line-height:1.15;
  border-right:1px solid rgba(255,255,255,.13);padding-right:22px;
}
.ap-content{ min-width:0; }
.ap-title{
  font-family:'Playfair Display',Georgia,serif;font-weight:600;font-size:21px;
  line-height:1.24;color:#fff;text-wrap:balance;margin:0;
}
.ap-desc{ margin-top:9px;font-size:14.5px;color:#fff;line-height:1.6;text-wrap:pretty; }
.ap-chips{ margin-top:14px;display:flex;flex-wrap:wrap;gap:8px; }
.ap-chip{
  font-size:11.5px;letter-spacing:.06em;padding:5px 12px;border-radius:999px;
  border:1px solid rgba(221,192,116,.30);color:var(--accent-gold,#ddc074);
  background:rgba(221,192,116,.10);white-space:nowrap;
}
.ap-chip-loc{ color:#fff;border-color:rgba(255,255,255,.22);background:rgba(255,255,255,.07); }
.ap-endline{
  margin-top:52px;text-align:center;
  font-family:'Playfair Display',Georgia,serif;font-style:italic;
  font-size:clamp(22px,3.4vw,30px);color:#fff;text-shadow:0 1px 14px rgba(0,0,0,.5);
}
@media (max-width:768px){
  #agenda.agenda-prog{ padding:52px 0 72px; }
  .agenda-prog-inner{ width:calc(100vw - 1.5rem); }
  .ap-row{ grid-template-columns:1fr;gap:14px;padding:18px 18px 19px; }
  .ap-time{
    border-right:none;border-bottom:1px solid rgba(255,255,255,.14);
    padding-right:0;padding-bottom:13px;font-size:20px;
  }
  .ap-title{ font-size:18.5px; }
}

/* ============================================================
   MSN26 SELECTED-INSTITUTIONS BAND — V1 "Atelier" port 2026-06-03
   Full-bleed bg + STRONG parallax · NO overlay (standing rule) ·
   white copy · bright-gold "sztuki, biznesu i kultury" ·
   white logos · ≥3-per-row grids (never an orphan).
   ============================================================ */
.comp-band{
  position:relative; width:100vw; max-width:none;
  margin-left:calc(-50vw + 50%); margin-top:3rem;
  padding:64px 24px 88px;
  background:#15120e;
  overflow:hidden;
}
/* animated bg image layer — slow smooth Ken Burns drift (zoom + pan), NO overlay */
.comp-band::before{
  content:""; position:absolute; inset:-7%; z-index:0;
  background:url("../images/bg/bfort-akwarela-lounge-night.webp?v=20260603") center/cover no-repeat;
  transform:scale(1.05);
  animation:compKenBurns 32s ease-in-out infinite alternate;
  will-change:transform; pointer-events:none;
}
@keyframes compKenBurns{
  0%   { transform:scale(1.05) translate3d(0,0,0); }
  100% { transform:scale(1.13) translate3d(-2%,-2.2%,0); }
}
@media (prefers-reduced-motion:reduce){
  .comp-band::before{ animation:none; transform:scale(1.05); }
}
.comp-atelier{
  position:relative; z-index:1; width:min(960px,100%); margin:0 auto;
  background:rgba(24,21,16,.46); border:1px solid rgba(255,255,255,.14);
  border-radius:22px;
  backdrop-filter:blur(22px) saturate(140%);
  -webkit-backdrop-filter:blur(22px) saturate(140%);
  box-shadow:0 30px 80px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.12);
  padding:56px clamp(24px,5vw,72px) 48px; text-align:center; overflow:hidden;
}
.comp-atelier::before{ content:""; position:absolute; inset:0 0 auto 0; height:1px;
  background:linear-gradient(90deg,transparent,rgba(221,192,116,.32),transparent); }
.comp-kicker{
  display:inline-block; font-family:'Geist Mono',ui-monospace,monospace;
  font-size:11px; letter-spacing:.42em; text-transform:uppercase;
  color:var(--accent-gold,#ddc074);
  padding:7px 18px; border:1px solid rgba(221,192,116,.32); border-radius:999px;
  background:rgba(221,192,116,.06); margin-bottom:24px;
}
.comp-intro{
  font-family:'Playfair Display',Georgia,serif; font-weight:400; font-style:italic;
  font-size:clamp(1.2rem,2.5vw,1.75rem); line-height:1.5; color:#fff;
  max-width:760px; margin:0 auto; text-wrap:balance;
}
.comp-intro .comp-gold{ color:var(--accent-gold,#ddc074); font-style:italic; }
.comp-rule{ width:64px; height:1px; margin:34px auto 6px;
  background:linear-gradient(90deg,transparent,var(--accent-gold,#ddc074),transparent); }

/* category grids inside the atelier — fixed counts, ≥3/row, never an orphan */
.comp-atelier .comp-category{ padding:24px 0; margin:0;
  border-top:1px solid rgba(255,255,255,.08); }
.comp-atelier .comp-category:first-of-type{ border-top:none; }
.comp-atelier .comp-category-label{ color:var(--accent-gold,#ddc074); margin-bottom:16px; }
.comp-atelier .comp-logo-grid{ gap:24px 28px; margin-top:0; margin-inline:auto; }
.comp-atelier .comp-logo-grid--6{ grid-template-columns:repeat(3,minmax(0,1fr)); max-width:560px; }
.comp-atelier .comp-logo-grid--4{ grid-template-columns:repeat(4,minmax(0,1fr)); max-width:720px; }
.comp-atelier .comp-logo-grid--3{ grid-template-columns:repeat(3,minmax(0,1fr)); max-width:560px; }
.comp-atelier .comp-logo-grid img{
  height:30px; max-width:140px; opacity:1;
  filter:brightness(0) invert(1) drop-shadow(0 2px 7px rgba(0,0,0,.6));
}
.comp-atelier .comp-logo-grid img:hover{
  opacity:1; transform:translateY(-2px);
  filter:brightness(0) invert(1) drop-shadow(0 2px 10px rgba(0,0,0,.7));
}
@media (max-width:560px){
  .comp-atelier{ padding:40px 16px 36px; }
  .comp-atelier .comp-logo-grid{ gap:16px 14px; }
  .comp-atelier .comp-logo-grid img{ height:18px; max-width:100%; }
  /* mobile: legible packing, no overlap, no orphan — 6 -> 2x3, 4 -> 2x2, 3 -> one row of 3 */
  .comp-atelier .comp-logo-grid--6{ grid-template-columns:repeat(2,minmax(0,1fr)); max-width:300px; }
  .comp-atelier .comp-logo-grid--4{ grid-template-columns:repeat(2,minmax(0,1fr)); max-width:300px; }
  .comp-atelier .comp-logo-grid--3{ grid-template-columns:repeat(3,minmax(0,1fr)); max-width:320px; }
}

/* ===== Nav top-right CTA → "Register / Rejestracja" in RT red (2026-06-03) ===== */
.nav-cta{
  background:var(--rt-red,#e31b23) !important;
  color:#fff !important;
  border:1px solid var(--rt-red,#e31b23);
  font-weight:700;
}
.nav-cta:hover{
  background:#c8141c !important;
  color:#fff !important;
  box-shadow:0 0 22px rgba(227,27,35,.40) !important;
}

/* ============================================================
   THIRD PARTNER BOX — "open slot" CTA → partnership form
   (2026-06-03, Variant B from _mockups/partner-cta-card-variants.html)
   Dashed gold border = reserved slot for the next partner logo.
   Click scrolls to + reveals the #partners inquiry form.
   ============================================================ */
.partner-card--cta {
  border: 1.5px dashed rgba(197, 165, 90, 0.75);
  background: rgba(255, 250, 246, 0.6);
}
.partner-card-cta-body {
  flex-direction: column;
  gap: 0.75rem;
}
.partner-cta-plus {
  position: relative;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1.5px solid #c5a55a;
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: 'Playfair Display', serif;
  font-size: 1.6rem;
  font-weight: 500;
  color: #c5a55a;
  line-height: 1;
  padding-bottom: 3px;
  /* gentle breathing — transform-only (no layout/paint thrash) */
  animation: partner-cta-breathe 2.8s ease-in-out infinite;
}
/* radar ping ring — transform+opacity only */
.partner-cta-plus::after {
  content: "";
  position: absolute;
  inset: -1.5px;
  border-radius: 50%;
  border: 1.5px solid #c5a55a;
  opacity: 0;
  animation: partner-cta-ping 2.8s ease-out infinite;
}
@keyframes partner-cta-breathe {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.07); }
}
@keyframes partner-cta-ping {
  0%   { transform: scale(1);   opacity: 0.55; }
  70%  { transform: scale(1.6); opacity: 0; }
  100% { transform: scale(1.6); opacity: 0; }
}
/* hover: plus turns into a quarter-rotation "open" gesture */
.partner-card-link:hover .partner-cta-plus,
.partner-card-link:focus-visible .partner-cta-plus {
  transform: rotate(90deg);
  animation-play-state: paused;
}
.partner-cta-slot {
  font-family: 'Playfair Display', serif;
  font-style: italic;
  font-size: 1.25rem;
  color: #1a160e;
  text-align: center;
  margin: 0;
  text-wrap: balance;
}
/* Red CTA labels NEVER wrap — single line on every card (VA gate).
   Origin: SAR-2026-06-03 partner-cta label wrap. */
.partner-card-label { white-space: nowrap; }

@media (prefers-reduced-motion: reduce) {
  .partner-cta-plus { animation: none; }
  .partner-cta-plus::after { animation: none; opacity: 0; }
}

/* Partner-category sections (R2, 2026-06-11) — rendered by partners-data.js renderByCategory()
   into #msn26-current-partners. Categories: Urban Visionaries / Art & Heritage / Hosts of Experience. */
.partner-category {
  margin: 2rem 0 0;
}
.partner-category-label {
  font-size: 1.25rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: #d9b15f; /* brighter gold (Alex 2026-06-11) */
  text-align: center;
  margin: 0 0 1.3rem;
  font-weight: 700;
}
/* Cards render at the FULL featured-card benchmark size (.partner-card 280px,
   64px logo, "Więcej o nas →" label) — same visual weight as the static
   Sierra/GPOLAND cards. Alex 2026-06-11: "partner boxes must be larger, like
   GPoland — that's the benchmark." Flex-wrap mirrors .partners-featured. */
.partner-category-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: stretch;
  gap: 2rem;
}

/* R4 (Alex 2026-06-11): uniform card anatomy, Echo = canonical.
   - "Więcej o nas" caption PINNED to the bottom (margin-top:auto) → identical
     bottom padding on every card in a row (cards stretch to equal height).
   - Logo zone flexes in the remaining space, centered; tighter side padding
     gives the logo field more width, so logos render larger. */
.partner-category-grid .partner-card {
  min-height: 230px;
  padding: 1.5rem 1.25rem 1.9rem;
  gap: 1rem;
  justify-content: flex-start;
}
.partner-category-grid .partner-card-logo {
  flex: 1 1 auto;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
.partner-category-grid .partner-card-label {
  margin-top: auto;
}
/* Uniform logo widths — every category logo spans the same field width
   (Capital Park benchmark). 400x200 canvases → equal width = equal field. */
.partner-category-grid .partner-card-logo .marquee-logo {
  width: 100%;
  max-width: 236px;
  height: auto;
  max-height: 124px;
  object-fit: contain;
}

/* R6.2 (Alex 2026-06-12, Images #21/#22): the partner-invitation CTA card
   sits in its OWN centered row below each category grid. margin-top mirrors
   the 2rem flex gap so the spacing matches the approved Art & Heritage look. */
.partner-cta-row {
  margin-top: 2rem;
}

/* W3 (Alex 2026-06-30): per-category desktop row layout, targeted by the grid's
   data-cat (robust — the old :first-of-type selector broke once the gold
   spotlight div preceded the categories). Desktop only; below 1024px every row
   falls back to the default flex-wrap (cards 280px / max 42vw → stack/wrap). */
@media (min-width: 1024.1px) {
  /* Urban Visionaries: 6 sponsors as a symmetric 3 + 3 at the 280px benchmark.
     The invitation box rides in its own .partner-cta-row below (no data-cat). */
  .partner-category-grid[data-cat="urban"] {
    max-width: calc(3 * 280px + 2 * 2rem);
    margin-left: auto;
    margin-right: auto;
  }
  .partner-category-grid[data-cat="urban"] .partner-card-link { flex: 0 0 280px; }
  .partner-category-grid[data-cat="urban"] .partner-card { width: 100%; max-width: 100%; }

  /* Art & Heritage: 3 partners + the invitation box on ONE row (4 across).
     The partners section is ~960px wide, so the four cards trim to 210px with a
     tighter 1.5rem gap to sit on a single centered line (4*210 + 3*24 = 912). */
  .partner-category-grid[data-cat="art"] {
    max-width: calc(4 * 210px + 3 * 1.5rem);
    gap: 1.5rem;
    margin-left: auto;
    margin-right: auto;
  }
  .partner-category-grid[data-cat="art"] .partner-card-link { flex: 0 0 210px; }
  .partner-category-grid[data-cat="art"] .partner-card { width: 100%; max-width: 100%; }

  /* Media + Experience + Silver: partners + the invitation box on ONE centered row
     (3 across) at the 280px benchmark. */
  .partner-category-grid[data-cat="media"],
  .partner-category-grid[data-cat="experience"],
  .partner-category-grid[data-cat="silver"] {
    max-width: calc(3 * 280px + 2 * 2rem);
    margin-left: auto;
    margin-right: auto;
  }
  .partner-category-grid[data-cat="media"] .partner-card-link,
  .partner-category-grid[data-cat="experience"] .partner-card-link,
  .partner-category-grid[data-cat="silver"] .partner-card-link { flex: 0 0 280px; }
  .partner-category-grid[data-cat="media"] .partner-card,
  .partner-category-grid[data-cat="experience"] .partner-card,
  .partner-category-grid[data-cat="silver"] .partner-card { width: 100%; max-width: 100%; }
}

/* ============================================================
   GOLD PARTNER (Złoty Partner) spotlight band — Alex 2026-06-30.
   Krotoski = headline tier. Rendered ON TOP of all partner categories
   (own .partner-gold-spotlight wrapper, so Urban stays :first-of-type).
   Premium: gold double frame + warm glow, larger card + logo, Audi·Porsche
   subline. Invitation-only → no "Become a partner" CTA.
   ============================================================ */
.partner-gold-spotlight {
  margin: 0 auto 2.6rem;
  text-align: center;
}
.partner-gold-label {
  font-size: 1.45rem;
  letter-spacing: 0.2em;
  color: #c9952c;                 /* brighter gold on Seashell */
  margin: 0 0 1.4rem;
}
.partner-gold-grid {
  display: flex;
  justify-content: center;
}
.partner-gold-card-link {
  display: block;
  width: min(620px, 100%);
  text-decoration: none;
}
.partner-card.partner-card--gold {
  width: 100%;
  min-height: 280px;
  padding: 2.4rem 2.6rem 2.1rem;
  border: 2px solid #c5a55a;
  border-radius: 14px;
  background: linear-gradient(180deg, #fffaf2 0%, #fff5ee 100%);
  box-shadow: 0 0 0 6px rgba(201, 149, 44, 0.10),
              0 18px 48px rgba(120, 85, 20, 0.16);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.partner-gold-card-link:hover .partner-card--gold {
  transform: translateY(-4px);
  box-shadow: 0 0 0 6px rgba(201, 149, 44, 0.18),
              0 24px 60px rgba(120, 85, 20, 0.24);
}
.partner-card--gold .partner-card-logo {
  flex: 0 0 auto;
  margin-bottom: 1.3rem;
}
.partner-card--gold .partner-card-logo .marquee-logo {
  width: 100%;
  max-width: min(540px, 96%);
  max-height: 200px;
  object-fit: contain;
}
.partner-gold-subline {
  margin: 0.2rem 0 0;
  font-size: 1.02rem;
  color: #3a3a3a;
  font-weight: 500;
}
.partner-gold-brands {
  margin: 0.25rem 0 0;
  font-size: 0.95rem;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: #c9952c;
  font-weight: 700;
}
@media (max-width: 600px) {
  .partner-gold-card-link { width: 100%; }
  .partner-card.partner-card--gold { padding: 1.8rem 1.4rem 1.6rem; }
  .partner-card--gold .partner-card-logo .marquee-logo { max-width: 78%; }
  .partner-gold-label { font-size: 1.2rem; }
}

/* ============================================================
   WW5 2026-06-11 — Performance + sponsor surfaces
   ============================================================ */

/* P1 HERO LCP — the .hero CSS base layer (Safari-safe poster pattern, see
   ~line 294) must point at the SAME responsive variant the <picture> element
   selects, otherwise small viewports would still download the 1920w original
   (490KB) on top of the 640w (68KB) variant. Media-queried backgrounds are
   only fetched when matched, so each breakpoint downloads exactly one file. */
@media (max-width: 640px) {
  .hero { background-image: url("../images/bg/bfort-akwarela-garden-evening-640.webp"); }
}
@media (min-width: 640.1px) and (max-width: 1024px) {
  .hero { background-image: url("../images/bg/bfort-akwarela-garden-evening-1024.webp"); }
}

/* S1 — confirmed-partner category labels now render inside the light Seashell
   .marquee-band: the default gold (#c9a35c) is too low-contrast on #fff5ee.
   Scoped darker gold keeps the brand hue at readable contrast. */
.marquee-band .partner-category-label { color: #c9952c; } /* brighter gold on Seashell (Alex 2026-06-11) */
.marquee-band .msn26-current-partners { margin: 0 auto 2.25rem; }

/* S5 — slim LinkedIn social-proof band (gold-on-dark, subtle). Sits as a
   full-bleed hairline strip directly below the Seashell marquee band. */
.li-band {
  width: 100vw;
  max-width: none;
  margin: 0 0 0 calc(-50vw + 50%);
  padding: 0.85rem 1.25rem;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.6rem;
  background: #0f0d0a;
  border-bottom: 1px solid rgba(197, 165, 90, 0.25);
}
.li-band svg { width: 17px; height: 17px; flex-shrink: 0; }
.li-band-text {
  font-family: 'Geist Mono', ui-monospace, monospace;
  font-size: 0.8rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #ddc074;
  white-space: nowrap;
}
@media (max-width: 640px) {
  .li-band-text { white-space: normal; text-align: center; }
}

/* P4 — sticky mobile register CTA. Hidden above 640px; shown by main.js
   Part F only after the hero scrolls past and while #tickets is NOT in view.
   body.sticky-cta-visible lifts the WhatsApp float above the bar so the two
   fixed elements never overlap (WA collapsed bubble AND expanded full-width
   mobile bar both move up by the bar height). */
.sticky-cta { display: none; }
@media (max-width: 640px) {
  .sticky-cta {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 9998;
    display: flex;
    justify-content: center;
    padding: 0.6rem 1rem calc(0.6rem + env(safe-area-inset-bottom, 0px));
    background: rgba(10, 10, 10, 0.94);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border-top: 1px solid rgba(197, 165, 90, 0.35);
  }
  .sticky-cta[hidden] { display: none; }
  .sticky-cta-btn {
    display: block;
    width: 100%;
    max-width: 420px;
    text-align: center;
    font-family: 'Inter', system-ui, sans-serif;
    font-weight: 700;
    font-size: 1rem;
    letter-spacing: 0.04em;
    color: #0f0f0f !important;
    background: #c5a55a;
    border-radius: 4px;
    padding: 0.8rem 1.2rem;
    text-decoration: none !important;
    min-height: 44px;
  }
  /* CANON:wa-float-style-lift  (canonical element design — locked 2026-06-17; change only with CANONICAL-UNLOCK) */
  /* --sticky-cta-h is set by main.js Part F to the measured bar height. */
  body.sticky-cta-visible .wa-float { bottom: calc(1rem + var(--sticky-cta-h, 72px)); }
  body.sticky-cta-visible .wa-float.wa-expanded { bottom: var(--sticky-cta-h, 72px); }
  /* /CANON:wa-float-style-lift */
}

/* ============================================================
   R6 FIXS Worker — Speaker Card & Modal Enhancements (2026-06-12)
   ============================================================ */

/* TASK 3: Card row alignment + bigger photos */

/* Increase confirmed speaker avatar size to 144px */
.speaker-card .speaker-avatar--lg {
  width: 144px;
  height: 144px;
}

/* Flexbox column layout for confirmed speaker cards */
.speaker-card {
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* Name h4: min-height for exactly 2 lines (1.05rem × 1.3 line-height × 2 = 2.73rem) */
.speaker-card h4 {
  min-height: 2.73rem;
}

/* Role: min-height for 2 lines (0.76rem × 1.3 line-height × 2 = 1.976rem) */
.speaker-card .speaker-role {
  min-height: 1.976rem;
}

/* Company name: push to bottom of card */
.speaker-card .speaker-company {
  margin-top: auto;
}

/* TASK 3b: Orphan words — text-wrap balance + NBSP in data */
.speaker-card h4,
.speaker-role,
.speaker-company {
  text-wrap: balance;
}

/* TASK 4: Three luxury hover animations on portrait boxes */

/* R6.6: positioning zone — hosts the clipping wrap AND the .avatar-ring,
   which must NOT be clipped (the ring renders OUTSIDE the portrait circle) */
.speaker-avatar-zone {
  position: relative;
  display: block;
  width: 144px;
  height: 144px;
  margin: 0 auto 1.2rem;
}

/* Avatar wrapper for pseudo-elements */
.speaker-avatar-wrap {
  position: relative;
  display: block;
  width: 144px;
  height: 144px;
  border-radius: 50%;
  overflow: hidden;
  margin: 0 auto 1.2rem;
}

/* Inside the zone the wrap must not double the outer margin */
.speaker-avatar-zone .speaker-avatar-wrap {
  margin: 0;
}

.speaker-avatar-wrap img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center top;
  /* R6.6 (Alex): image frame line at 200% of previous 2px */
  border: 4px solid rgba(197, 165, 90, 0.45);
  border-radius: 50%;
  transition: transform 1s ease, filter 1s ease, border-color 0.3s ease;
}

/* V1: Gold shimmer sweep */
.speaker-card[data-anim="v1"] .speaker-avatar-wrap::after {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 200%;
  height: 100%;
  background: linear-gradient(115deg, transparent 35%, rgba(255, 235, 190, 0.5) 50%, transparent 65%);
  pointer-events: none;
  transition: transform 1.1s ease;
}

.speaker-card[data-anim="v1"]:hover .speaker-avatar-wrap::after {
  transform: translateX(100%);
}

/* V2: Slow zoom + ring glow */
.speaker-card[data-anim="v2"]:hover .speaker-avatar-wrap img {
  transform: scale(1.08);
  border-color: #ddc074;
  box-shadow: 0 0 28px rgba(197, 165, 90, 0.45);
}

/* V3: Gilded rotating ring */
.speaker-card[data-anim="v3"] .speaker-avatar-wrap::before {
  content: '';
  position: absolute;
  inset: -4px;
  border-radius: 50%;
  background: conic-gradient(from 0deg, rgba(197, 165, 90, 0), #ddc074, rgba(197, 165, 90, 0));
  opacity: 0;
  transition: opacity 0.9s ease;
  pointer-events: none;
  animation: none;
}

.speaker-card[data-anim="v3"]:hover .speaker-avatar-wrap::before {
  opacity: 1;
  animation: rotate-ring 6s linear infinite;
}

.speaker-card[data-anim="v3"]:hover .speaker-avatar-wrap img {
  filter: brightness(1.06);
}

@keyframes rotate-ring {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

/* Disable animations for reduced-motion */
@media (prefers-reduced-motion: reduce) {
  .speaker-card[data-anim] .speaker-avatar-wrap::after,
  .speaker-card[data-anim] .speaker-avatar-wrap::before {
    display: none;
  }
  .speaker-card[data-anim]:hover .speaker-avatar-wrap img {
    transform: none;
    filter: none;
    box-shadow: none;
    animation: none;
  }
}

/* TASK 2: Modal LinkedIn gold icon button — DEFECT 1 FIX: hover text+glyph to black */
.speaker-modal-linkedin {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  background: transparent;
  color: #c5a55a;
  border: 1px solid rgba(197, 165, 90, 0.45);
  padding: 0.55rem 1.1rem;
  border-radius: 999px;
  letter-spacing: 0.08em;
  font-size: 0.8rem;
  text-transform: uppercase;
  text-decoration: none;
  transition: color 0.3s ease, background 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
}

.speaker-modal-linkedin:hover,
.speaker-modal-linkedin:focus-visible {
  background: #ddc074;
  color: #161310; /* BLACK text + glyph on gold fill — visible */
  border-color: #ddc074;
  box-shadow: 0 0 18px rgba(197, 165, 90, 0.25);
}

.speaker-modal-linkedin svg {
  flex-shrink: 0;
  fill: currentColor; /* glyph follows text color */
}

/* End R6 block */

/* ========== R6 FIX-P (2026-06-12) — Partner category ring icons ========== */
/* Each of the 3 partner category blocks gets a centered gold thin-ring circle
   icon on its OWN ROW above the category label (same motif as the dashed CTA
   card's circled "+"). Themed glyph per category inside an identical ring. */
.partner-category-icon {
  display: flex;
  justify-content: center;
  margin: 0 0 0.9rem;
}
.partner-category-icon svg {
  width: 56px;
  height: 56px;
  opacity: 0.85;
}

/* =============================================================================
   R6.4b HERO VIDEO LAYER — FortJourney v2b (Alex pick 2026-06-12)
   Injected by js/hero-video.js desktop-only after load; akwarela <picture>
   poster stays underneath as base layer + LCP element (WW5 rescue intact).
   ============================================================================= */
.hero-bg-image .hero-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 1.4s ease;
  pointer-events: none;
}
.hero-bg-image .hero-video.is-playing {
  opacity: 1;
}

/* ===== Subpage page-hero (WW7 subpage split 2026-06-19) — compact branded header for spokes (Program/Partnership/Registration). Reuses MSN tokens: Playfair + gold #c5a55a + near-black. Top padding clears the fixed nav. ===== */
.page-hero { position: relative; padding: 120px 24px 56px; background: #0a0a0a; border-bottom: 1px solid rgba(197,165,90,.22); text-align: center; overflow: hidden; }
.page-hero-inner { max-width: 880px; margin: 0 auto; }
.page-hero-kicker { font-family: 'Geist Mono', monospace; text-transform: uppercase; letter-spacing: .18em; font-size: .72rem; color: #c5a55a; margin: 0 0 14px; }
.page-hero-title { font-family: 'Playfair Display', serif; font-weight: 600; font-size: clamp(2.1rem, 5vw, 3.4rem); line-height: 1.08; color: #fff; margin: 0 0 14px; text-wrap: balance; }
.page-hero-sub { font-family: 'Geist', sans-serif; font-weight: 300; font-size: clamp(1rem, 2.2vw, 1.18rem); line-height: 1.55; color: rgba(255,255,255,.82); margin: 0 auto; max-width: 620px; text-wrap: balance; }
@media (max-width: 640px) { .page-hero { padding: 96px 18px 40px; } }

/* ===== Subpage teasers + price teaser (WW7 split 2026-06-19) — Home hub links to the 4 spokes ===== */
.subpage-teasers { background: #0f0f10; padding: 72px 24px; }
.subpage-teasers-inner { max-width: 1140px; margin: 0 auto; }
.teaser-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; margin: 36px 0 28px; }
.teaser-card { display: flex; flex-direction: column; gap: 10px; padding: 26px 22px; background: #16161a; border: 1px solid rgba(197,165,90,.20); border-radius: 14px; text-decoration: none; transition: border-color .2s ease, transform .2s ease, background .2s ease; }
.teaser-card:hover { border-color: rgba(197,165,90,.55); transform: translateY(-3px); background: #1b1b20; }
.teaser-card-k { font-family: 'Playfair Display', serif; font-weight: 600; font-size: 1.22rem; color: #fff; }
.teaser-card-d { font-family: 'Geist', sans-serif; font-weight: 300; font-size: .94rem; line-height: 1.5; color: rgba(255,255,255,.74); flex: 1; }
.teaser-card-cta { font-family: 'Geist Mono', monospace; font-size: .78rem; letter-spacing: .06em; color: #c5a55a; }
.price-teaser { display: flex; align-items: center; justify-content: center; gap: 14px; flex-wrap: wrap; padding-top: 14px; }
.price-teaser-from { font-family: 'Geist', sans-serif; font-weight: 300; color: rgba(255,255,255,.7); }
.price-teaser-amt { font-family: 'Playfair Display', serif; font-weight: 700; font-size: 1.8rem; color: #fff; }
@media (max-width: 920px) { .teaser-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 520px) { .teaser-grid { grid-template-columns: 1fr; } }

/* ===== Phoenix Award temp placeholder (WW7 split 2026-06-19) — "more updates shortly" ===== */
.phoenix-soon { background: #0f0f10; padding: 80px 24px 96px; text-align: center; }
.phoenix-soon-inner { max-width: 680px; margin: 0 auto; display: flex; flex-direction: column; gap: 18px; align-items: center; }
.phoenix-soon-title { font-family: 'Playfair Display', serif; font-weight: 600; font-size: clamp(1.5rem, 3.4vw, 2.1rem); color: #c5a55a; margin: 0; }
.phoenix-soon-body { font-family: 'Geist', sans-serif; font-weight: 300; font-size: 1.05rem; line-height: 1.6; color: rgba(255,255,255,.78); margin: 0; }
.phoenix-soon-cta { margin-top: 10px; }
.evf-soon { color: rgba(255,255,255,.55); }

/* ============================================================================
   MSN unified second-tier sub-nav — dark bar + one-lap travelling light.
   Alex-approved wireframe 2026-06-19 (_mockups/menu-wire.html).
   Spokes self-clear the fixed 74px top-nav via .page-hero 120px top padding,
   so body.msn-subpage shifts content down 74px and the page-hero top padding
   is trimmed (no double-offset). Dark bg so the travelling light reads.
   ============================================================================ */
@property --msn-sweep { syntax: '<angle>'; initial-value: 0deg; inherits: true; }
body.msn-subpage { padding-top: 74px; }                 /* clear the fixed 74px top-nav */
body.msn-subpage .page-hero { padding-top: 36px; }      /* hero no longer clears the nav itself */
.msn-subnav {
  position: sticky; top: 74px; z-index: 900;
  background: #14110e; border-bottom: 1px solid #000;
}
/* scroll-direction show/hide ("headroom") — JS toggles .is-hidden on scroll
   down/up; translateY(-120%) lifts the sticky bar fully out of view above its
   slot. JS owns the toggle; CSS owns the transition. */
.msn-subnav, .phx-subnav { transition: transform .28s ease, opacity .28s ease; }
.msn-subnav.is-hidden, .phx-subnav.is-hidden {
  transform: translateY(-120%); opacity: 0; pointer-events: none;
}
.msn-subnav-inner {
  position: relative; max-width: 1180px; margin: 0 auto;
  display: flex; align-items: center; gap: .1rem;
  padding: .4rem 2rem; flex-wrap: wrap;
}
/* push items to the RIGHT; auto-margin collapses to 0 on mobile overflow so the
   first/active item stays reachable (scroll-from-left) instead of clipping off-screen */
.msn-subnav-inner > a:first-child { margin-left: auto; }
.msn-subnav a {
  font-family: 'Geist', 'Inter', sans-serif;          /* match the top nav (was monospace) */
  font-size: .74rem; font-weight: 500; letter-spacing: .1em; text-transform: uppercase;
  text-decoration: none; color: #b0aca8;
  padding: .5rem .85rem; border-radius: 5px; white-space: nowrap;
  transition: color .15s ease, background .15s ease;
}
.msn-subnav a:hover { color: #fff; }
.msn-subnav a.active,
.msn-subnav a[aria-current="page"] {                  /* active = gold fill, black text */
  background: #ddc074; color: #0f0f0f; font-weight: 600;
}
.msn-subnav-cta {
  margin-left: .6rem; color: #fff !important; background: #e31b23;
  padding: .5rem 1rem !important; border-radius: 4px;
}
.msn-subnav-cta:hover { background: #c8161d; }
/* continuous travelling light around the inner bar — the --msn-sweep angle is
   driven by subnav.js (slow resting orbit, boosts on mouse movement, then eases
   back to slow). JS owns the motion so animation is none here. */
.msn-subnav.lit .msn-subnav-inner::before {
  content: ''; position: absolute; inset: 0; padding: 2px; border-radius: 5px;
  background: conic-gradient(from var(--msn-sweep),
     transparent 0deg, transparent 280deg,
     rgba(255,216,122,.55) 305deg, #ffe9b0 330deg, #fff 345deg, #fff 352deg,
     rgba(255,233,176,.6) 360deg);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
          mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude;
  filter: drop-shadow(0 0 6px rgba(255,224,150,.95));
  animation: none; pointer-events: none;
}
@media (max-width: 768px) {
  body.msn-subpage { padding-top: 0; }                  /* mobile nav is sticky in-flow */
  body.msn-subpage .page-hero { padding-top: 28px; }
  .msn-subnav { position: static; top: auto; }
  .msn-subnav-inner { justify-content: flex-start; padding: .45rem 1.1rem; gap: 0; flex-wrap: nowrap;
    overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .msn-subnav-cta { margin-left: .5rem; }
}
@media (prefers-reduced-motion: reduce) {
  .msn-subnav.lit .msn-subnav-inner::before { animation: none; }
}

/* Ticket price anchor (2026-07-14): current price stays the headline; the phases that
   have already passed list below, struck through in red, under a "previous tiers" label.
   .pricing-phase has display:flex, so [hidden] needs an explicit override to hide rows. */
.pricing-phases-label {
  flex-basis: 100%;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--on-dark-muted, #8a8580);
  margin-bottom: 0.15rem;
}
.pricing-phase[hidden],
.pricing-phases-label[hidden] { display: none !important; }
.pricing-phase--past .phase-price {
  text-decoration: line-through;
  text-decoration-color: var(--rt-red, #e31b23);
  text-decoration-thickness: 2px;
  color: var(--on-dark-muted, #8a8580);
}
.pricing-phase--past .phase-name,
.pricing-phase--past .phase-deadline { opacity: 0.75; }
