/* FESTS (centered slides, horizontal pinned) */
.fests{position:relative}
.fests-sticky{position:sticky;top:0;height:100vh;overflow:hidden}
.fest-label{position:absolute;top:26px;left:5vw;z-index:6;font-family:'Inter Tight',sans-serif;font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--muted)}
.fest-count{position:absolute;top:26px;right:5vw;z-index:6;font-family:'Inter Tight',sans-serif;font-size:12px;letter-spacing:2px;color:var(--gold)}
.fest-track{display:flex;height:100%;will-change:transform;position:relative;z-index:1}
.slide{flex:0 0 100vw;height:100%;position:relative}
.ph{position:absolute;top:10vh;left:3.5vw;right:3.5vw;bottom:3.5vh;border-radius:12px;overflow:hidden;border:1px solid var(--line);background:var(--card)}
.ph img,.ph video{width:100%;height:100%;object-fit:cover;transform:scale(1.02);transition:transform 7s ease-out}
.slide.active .ph img,.slide.active .ph video{transform:scale(1.09)}
/* two stacked copies of the fest video crossfade the loop point so it dissolves
   instead of hard-cutting (which read as an abrupt "zoom out" at every restart) */
.ph .ph-vid{position:absolute;inset:0;transition:transform 7s ease-out,opacity .6s linear}
.ph .ph-vid.ph-standby{opacity:0}
.ph::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,rgba(12,8,3,.8),rgba(12,8,3,.28) 46%,rgba(12,8,3,0) 72%),linear-gradient(0deg,rgba(12,8,3,.72),rgba(12,8,3,0) 44%)}
.s-ov{position:absolute;left:8vw;right:8vw;bottom:12vh;z-index:3;max-width:44ch}
.s-kicker{font-family:'Inter Tight',sans-serif;font-size:12px;letter-spacing:3px;text-transform:uppercase;color:#e7c98a;margin-bottom:16px;opacity:0;transform:translateY(10px);transition:opacity .5s,transform .5s;transition-delay:.1s}
/* the overlay is capped at 44ch for the body copy, but a two-word fest name (Bhasha Utsav)
   breaks across two lines inside it — let the head size to its own text and stay on one line */
.s-head{font-family:'Fraunces',Georgia,serif;font-weight:600;font-size:clamp(2.6rem,6vw,5.4rem);line-height:1.0;letter-spacing:-.015em;color:#fdf8ee;white-space:nowrap;width:max-content;max-width:84vw}
.s-head .w{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.05em}
.s-head .i{display:inline-block;transform:translateY(115%);transition:transform .85s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--i)*.05s)}
.s-desc{font-family:'Inter Tight',sans-serif;font-weight:300;color:#e9e1d2;font-size:clamp(1rem,1.5vw,1.2rem);line-height:1.6;margin-top:18px;max-width:40ch;opacity:0;transform:translateY(10px);transition:opacity .5s,transform .5s;transition-delay:.45s}
.s-cap{font-family:'Inter Tight',sans-serif;font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:#c9beac;margin-top:22px;opacity:0;transition:opacity .5s;transition-delay:.55s}
.slide.active .s-kicker{opacity:1;transform:none}
.slide.active .s-head .i{transform:none}
.slide.active .s-desc{opacity:1;transform:none}
.slide.active .s-cap{opacity:1}
.fest-hint{position:absolute;left:50%;bottom:4.5vh;transform:translateX(-50%);z-index:6;display:flex;align-items:center;gap:10px;font-family:'Inter Tight',sans-serif;font-size:11px;letter-spacing:2px;text-transform:uppercase;color:var(--muted);transition:opacity .5s;pointer-events:none}
.fest-hint.gone{opacity:0}
.fest-hint .arw{display:inline-block;color:var(--gold);animation:harrow 1.4s ease-in-out infinite}
@keyframes harrow{0%,100%{transform:translateX(0)}50%{transform:translateX(7px)}}
/* end-of-track cue — shown when the user keeps swiping horizontally past the last fest (Nritta).
   mirrors the hero .scroll-cue (scGlow/scBounce keyframes live in grid.css) */
.fest-endcue{position:absolute;left:50%;bottom:4.5vh;transform:translateX(-50%) translateY(8px);z-index:7;display:flex;flex-direction:column;align-items:center;gap:12px;pointer-events:none;opacity:0;visibility:hidden;transition:opacity .45s ease,transform .45s ease,visibility 0s linear .45s}
.fest-endcue.show{opacity:1;visibility:visible;transform:translateX(-50%) translateY(0);transition:opacity .45s ease,transform .45s ease,visibility 0s}
.fest-endcue .sc-txt{font-family:'Inter Tight',sans-serif;font-weight:400;font-size:11px;letter-spacing:3px;text-transform:uppercase;color:#e7c98a;animation:scGlow 2.1s ease-in-out infinite}
.fest-endcue .sc-arrow{width:19px;height:19px;border-right:2.4px solid #f4dfa0;border-bottom:2.4px solid #f4dfa0;animation:scBounce 1.8s ease-in-out infinite;filter:drop-shadow(0 0 10px rgba(231,201,138,.85))}
@media(max-width:820px){
  .fests{height:auto!important}
  .fests-sticky{position:relative;height:auto;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}
  .fest-track{transform:none!important}
  .fest-count,.fest-hint{display:none}
  .slide{flex:0 0 90vw;scroll-snap-align:center;height:88vh}
  .ph{top:2vh;left:2.5vw;right:2.5vw;bottom:2vh}
  .s-ov{left:8vw;right:8vw;bottom:8vh}
  .slide .s-kicker,.slide .s-desc,.slide .s-cap,.slide .s-open{opacity:1;transform:none}
  .slide .s-head .i{transform:none}
}
/* on the narrowest phones the longest name (Bhasha Utsav) would run past the frame edge
   now that it can't wrap — ease the type down just enough to keep it inside */
@media(max-width:360px){.s-head{font-size:2.2rem}}
