/* Page styles. Shared header/nav/footer/scroll-top chrome now lives in
   ../chrome.css — do not re-add it here. */

a { color: var(--purple-600); }

.ts-intro, .ts-lede { max-width: calc(var(--maxw) * 0.72); margin-left: auto; margin-right: auto; }
@media (max-width: 1440px) { .ts-intro, .ts-lede { max-width: calc(var(--maxw) * 0.80); } }
@media (max-width: 1024px) { .ts-intro, .ts-lede { max-width: calc(var(--maxw) * 0.88); } }
@media (max-width: 480px)  { .ts-intro, .ts-lede { max-width: 100%; } }
@media (max-width: 1024px) {
    .ts-nav-desktop { display: none !important; }
    .ts-nav-mobile { display: flex !important; }
    .ts-herosec { padding-top: 10.5rem !important; }
    .ts-sec { padding-top: 84px !important; padding-bottom: 84px !important; }
  }
@media (max-width: 900px) {
    .ts-cta-row { flex-direction: column !important; text-align: center; gap: var(--space-sm) !important; }
    .ts-cta-row > div { flex: 1 1 auto !important; }
  }
@media (max-width: 1024px) {
    .ts-footer-grid { flex-direction: column !important; align-items: center !important; text-align: center !important; gap: 2.5rem !important; }
    .ts-footer-grid .ts-fbrand, .ts-footer-grid .ts-fright { flex: 1 1 auto !important; width: 100% !important; }
    .ts-footer-grid .ts-flist { align-items: center !important; }
    .ts-footer-grid .ts-flist a { width: auto !important; }
    .ts-frow { gap: 1.5rem !important; }
    .ts-footer-grid .ts-fsocial { justify-content: center !important; }
    .ts-fcopy { text-align: center !important; }
    .ts-cta-row { padding-bottom: calc(var(--section-y) + 2.5rem) !important; }
    .ts-fsocial { flex-direction: column !important; }
  }
@media (max-width: 560px) {
    .ts-flogo { width: 320px !important; height: auto !important; }
    .ts-fseam { height: clamp(10px, 1vw, 14px) !important; top: -4px !important; }
    .ts-pad { padding-left: 20px !important; padding-right: 20px !important; }
  }
/* hero waveform accent */
.ts-hero-eq { position: absolute; left: 0; right: 0; bottom: 0; height: 5.5rem; z-index: 1; display: flex; align-items: flex-end; gap: 0.06rem; padding: 0 var(--section-x); opacity: 0.38; overflow: hidden; pointer-events: none; }
@media (max-width: 1024px) { .ts-hero-eq { padding-left: 0; padding-right: 0; } }
/* scroll reveal */
.ts-reveal { opacity: 0; transform: translateY(1.6rem); transition: opacity 1.1s var(--ease-out), transform 1.1s var(--ease-out); }
.ts-reveal.ts-reveal-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .ts-reveal { opacity: 1 !important; transform: none !important; } }
/* header quick-jump — gradient-text hover links */
.ts-jump { font-family: var(--font-body); font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; font-size: var(--fs-body-text-md); text-decoration: none; background-image: linear-gradient(90deg, var(--purple-300) 0%, var(--purple-300) 38%, #fff 62%, #fff 100%); background-size: 300% 100%; background-position: 100% center; -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; transition: background-position 1s var(--ease-out); }
.ts-jump:hover { background-position: 0% center; }
.ts-jumpsel select option { color: var(--purple-950); background: #fff; }
@media (max-width: 768px) { .ts-jumpnav { display: none !important; } .ts-jumpsel { display: flex !important; } }
@media (max-width: 560px) { .ts-jumpsel select { font-size: var(--fs-body-text-sm) !important; letter-spacing: 0.04em !important; padding-left: 1rem !important; padding-right: 2.5rem !important; background-position: right 1rem center !important; } }
.ts-pclose { font-family: var(--font-accent); font-weight: 400; font-size: var(--fs-h4); line-height: 1; color: #fff; margin: 0.5rem 0 1.75rem; }
/* ===== full-bleed event panels ===== */
.ts-panels { display: flex; flex-direction: column; }
.ts-panel { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); min-height: clamp(34rem, 80vh, 55rem); color: #fff; overflow: hidden; }
.ts-pmedia { position: relative; overflow: hidden; min-height: 100%; }
.ts-pmedia img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 8s var(--ease-out); }
.ts-panel:hover .ts-pmedia img { transform: scale(1.06); }
.ts-pmedia::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(3,0,32,0.08) 45%, rgba(3,0,32,0.5) 100%); pointer-events: none; }
.ts-pbody { display: flex; flex-direction: column; justify-content: center; padding: clamp(2.5rem, 5vw, 6rem); position: relative; }
.ts-panel.ts-prev .ts-pmedia { order: 1; }
.ts-panel.ts-prev .ts-pbody { order: 2; }
.ts-pbody h3 { margin: 0 0 1.25rem; font-family: var(--font-heading); font-weight: 400; text-transform: uppercase; font-size: var(--fs-h2); line-height: 1.06; color: #fff; letter-spacing: 0.005em; }
.ts-plead { font-family: var(--font-body); font-weight: 300; font-size: var(--fs-body-text); line-height: 1.5; color: rgba(255,255,255,0.9); margin: 0 0 1.75rem; }
.ts-plead strong { font-weight: 600; color: #fff; }
.ts-eyebrow { font-family: var(--font-body); font-weight: 700; text-transform: uppercase; letter-spacing: 0.12em; font-size: var(--fs-other-4); color: #fff; margin: 0 0 0.9rem; }
.ts-featd { list-style: none; margin: 0 0 1.75rem; padding: 0; display: flex; flex-direction: column; gap: 0.85rem; }
.ts-featd li { position: relative; padding-left: 1.6rem; font-family: var(--font-body); font-weight: 300; font-size: var(--fs-body-text-sm); line-height: 1.5; color: rgba(255,255,255,0.86); }
.ts-featd li::before { content: ""; position: absolute; left: 0; top: 0.55em; width: 0.6rem; height: 0.6rem; border-radius: 50%; background: var(--gradient-brand-soft); }
.ts-ptag { font-family: var(--font-accent); font-weight: 400; font-size: var(--fs-h4); line-height: 1; color: #fff; margin: 0 0 1.75rem; }
.ts-arrow-d { display: inline-flex; align-items: center; gap: 0.6rem; font-family: var(--font-body); font-weight: 700; text-transform: uppercase; letter-spacing: 0.09em; font-size: var(--fs-body-text-sm); color: #fff; text-decoration: none; transition: color 0.4s var(--ease-out); }
.ts-arrow-d:hover { color: var(--purple-300); }
.ts-arrow-d .ar { transition: transform 0.4s var(--ease-out); }
.ts-arrow-d:hover .ar { transform: translateX(0.45rem); }
@media (max-width: 1024px) {
    .ts-panel { grid-template-columns: 1fr !important; min-height: 0 !important; }
    .ts-pmedia { min-height: clamp(22rem, 55vw, 32rem); order: 1 !important; }
    .ts-pbody { order: 0 !important; padding: clamp(2rem,7vw,3rem) !important; }
    .ts-panel.ts-prev .ts-pmedia { order: 1 !important; }
    .ts-panel.ts-prev .ts-pbody { order: 0 !important; }
  }
/* glass callout (sound) */
.ts-glass { border-radius: var(--radius-card); padding: clamp(1.75rem, 3.5vw, 3rem); background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.16); backdrop-filter: blur(8px); position: relative; overflow: hidden; text-align: center; }
.ts-glass::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 0.28rem; background: var(--gradient-brand); }
/* travel — horizontal gradient timeline */
.ts-route { position: relative; display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: clamp(1.5rem, 3vw, 2.5rem); max-width: 72rem; margin: 0 auto; }
.ts-route::before { content: ""; position: absolute; top: 1.75rem; left: calc(16.666% ); right: calc(16.666%); height: 0.35rem; border-radius: 999px; background: var(--gradient-brand); }
@media (max-width: 768px) {
    .ts-route { grid-template-columns: 1fr !important; gap: 2.5rem !important; }
    .ts-route::before { left: 1.75rem !important; right: auto !important; top: 1.75rem !important; bottom: 1.75rem !important; width: 0.35rem !important; height: auto !important; }
    .ts-stop { flex-direction: row !important; text-align: left !important; align-items: center !important; }
  }
.ts-stop { position: relative; display: flex; flex-direction: column; align-items: center; gap: 1.25rem; text-align: center; opacity: 0; transform: translateY(3rem); transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out); }
.ts-stop.ts-stop-in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) { .ts-stop { opacity: 1 !important; transform: none !important; } }
.ts-stop-node { flex: 0 0 auto; width: 3.5rem; height: 3.5rem; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: var(--gradient-brand); color: #fff; font-family: var(--font-accent); font-weight: 400; font-size: var(--fs-h4); box-shadow: inset 0 0 0 2rem rgba(210,79,242,0), 0 8px 24px rgba(113,0,255,0.4), 0 0 0 6px var(--gray-100); position: relative; z-index: 1; transition: transform 0.45s var(--ease-out), box-shadow 0.45s var(--ease-out); }
.ts-stop p { opacity: 0.55; transition: opacity 0.5s var(--ease-out); }
.ts-stop:hover .ts-stop-node { transform: scale(1.1); box-shadow: inset 0 0 0 2rem rgba(210,79,242,1), 0 8px 28px rgba(210,79,242,0.55), 0 0 0 6px var(--gray-100); }
.ts-stop:hover p { opacity: 1; }
/* footer col stagger */
@media (prefers-reduced-motion: reduce) { .ts-foot-col { opacity: 1 !important; transform: none !important; } }
/* ============================================================
   Static-port additions
   No new state classes were needed for this page: the DC
   ref-callback observers map onto the shared [data-reveal] hook
   (.ts-reveal → .ts-reveal-in above) and the route/waveform
   behavior is driven by assets/js/pages/events.js using the
   .ts-stop-in / .ts-about-eq-bar rules already in this file.
   ============================================================ */

/* .ts-plead is a div now (WYSIWYG content brings its own <p> tags). */
.ts-plead > p { margin: 0 0 1rem; }
.ts-plead > p:last-child { margin-bottom: 0; }
