/* Boarding-pass ceremony — explicit JS timeline, no competing CSS ticket keyframes. */
.tfw-ticket-reveal{position:fixed;inset:0;z-index:2147482600;isolation:isolate;
 display:grid;place-items:center;overflow-y:auto;overscroll-behavior:contain;
 padding:25px 16px;background:radial-gradient(ellipse at 50% -12%,#7339797b,transparent 45%),
 linear-gradient(145deg,#0d0817,#21102a 50%,#09070f);color:#fff;
 animation:tfwRevealAppear .25s ease both}
.tfw-ticket-reveal.tfw-reveal-leaving{opacity:0;pointer-events:none;transition:opacity .26s}
.tfw-reveal-aura{position:fixed;inset:-35%;pointer-events:none;z-index:-1;
 background:conic-gradient(from 90deg at 50% 50%,transparent,#ea79bb26,#9366fd24,transparent);
 animation:tfwRevealAura 20s linear infinite}
.tfw-reveal-grid{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.25;
 background-image:linear-gradient(#ffdef310 1px,transparent 1px),
 linear-gradient(90deg,#ffdef310 1px,transparent 1px);
 background-size:58px 58px;mask-image:linear-gradient(transparent,#000 50%,transparent)}
.tfw-reveal-beam{position:fixed;inset:-20%;z-index:-1;pointer-events:none;
 background:linear-gradient(115deg,transparent 46%,#ffc1e411 51%,transparent 56%);
 animation:tfwRevealBeam 7s ease-in-out infinite}
.tfw-reveal-inner{width:min(1120px,100%);margin:auto;text-align:center;position:relative;padding:28px 0}
.tfw-reveal-heading{margin:0 auto 22px}
.tfw-reveal-eyebrow{font:900 10px/1.2 Arial;letter-spacing:.27em;color:#f9b8df}
.tfw-reveal-heading h2{margin:13px 0 8px;font:900 clamp(36px,7vw,79px)/.95 "Arial Black",Impact,Arial;
 letter-spacing:-.055em;text-shadow:0 0 43px #f58fc148}
.tfw-reveal-heading h2 span{color:#f3a4d5}
.tfw-reveal-subtitle{margin:0;color:#ddc4e1;font:900 10px/1.5 Arial;letter-spacing:.13em}
.tfw-reveal-track{height:5px;width:min(440px,88%);border-radius:10px;margin:0 auto 10px;
 overflow:hidden;background:#ffffff22}
.tfw-reveal-track i{display:block;width:100%;height:100%;
 background:linear-gradient(90deg,#a663ed,#f37abf,#ffdba7);
 transform:scaleX(0);transform-origin:left;box-shadow:0 0 18px #f67fd8;
 transition:transform .75s cubic-bezier(.25,.8,.3,1)}
.tfw-ticket-reveal[data-step="1"] .tfw-reveal-track i{transform:scaleX(.25)}
.tfw-ticket-reveal[data-step="2"] .tfw-reveal-track i{transform:scaleX(.5)}
.tfw-ticket-reveal[data-step="3"] .tfw-reveal-track i{transform:scaleX(.75)}
.tfw-ticket-reveal[data-step="4"] .tfw-reveal-track i{transform:scaleX(1)}
.tfw-reveal-status{color:#f2c2e4;letter-spacing:.2em;font:900 9px/1.5 Arial;min-height:20px;margin:0 0 18px}
.tfw-reveal-ticket{position:relative;width:min(1080px,94vw);margin:auto;min-width:0;min-height:215px}
.tfw-reveal-placeholder{display:flex;flex-direction:column;justify-content:center;align-items:center;
 gap:14px;width:min(480px,85%);height:225px;margin:auto;border-radius:23px;
 border:1px dashed #faacd972;background:linear-gradient(120deg,#c64d9532,#ad6ce729);
 box-shadow:inset 0 0 60px #f886ac15}
.tfw-reveal-placeholder span{font-size:55px;color:#ffbce8;animation:tfwRevealPulse 1s ease-in-out infinite alternate}
.tfw-reveal-placeholder strong{letter-spacing:.23em;font:900 13px/1.4 Arial;color:#fcd9ef}
.tfw-reveal-print-window{display:block;position:relative;width:100%;min-width:0;
 clip-path:inset(0 0 0 100%);will-change:clip-path}
.tfw-reveal-print-window .tfw-ticket{width:100%;max-width:1080px;box-sizing:border-box;
 margin:0 auto;transition:none!important;animation:none!important;transform:none;
 pointer-events:none}
.tfw-reveal-scanner{position:absolute;top:-7px;bottom:-7px;left:0;width:5px;
 z-index:7;pointer-events:none;opacity:0;
 background:linear-gradient(180deg,transparent,#fff8e4,#f899d6,transparent);
 box-shadow:0 0 19px #ffc2ea,0 0 45px #c15aaa}
.tfw-reveal-complete .tfw-reveal-print-window .tfw-ticket{
 box-shadow:0 30px 130px #000a,0 0 95px #f17ace36}
.tfw-reveal-choices{display:flex;justify-content:center;flex-wrap:wrap;gap:12px;margin:23px auto 0}
.tfw-reveal-choices[hidden]{display:none!important}
.tfw-reveal-continue{min-height:47px;padding:13px 26px;border-radius:12px;
 border:1px solid #f3afdfb3;color:#fff;background:linear-gradient(120deg,#c14f9e,#8657bc);
 font:900 10px/1.4 Arial;letter-spacing:.1em;cursor:pointer;
 transition:transform .2s,filter .2s}
.tfw-reveal-continue:hover{transform:translateY(-2px);filter:brightness(1.12)}
.tfw-reveal-error{font:700 13px/1.7 Arial;color:#ffcedf}
.tfw-reveal-sound{display:flex;justify-content:flex-end;margin-bottom:8px}
@keyframes tfwRevealAppear{from{opacity:0}to{opacity:1}}
@keyframes tfwRevealAura{to{transform:rotate(360deg)}}
@keyframes tfwRevealBeam{0%,20%{transform:translateX(-130%)}68%,100%{transform:translateX(130%)}}
@keyframes tfwRevealPulse{to{transform:scale(1.25);filter:drop-shadow(0 0 20px #f38ddd)}}
html.tfw-ticket-reveal-open,html.tfw-ticket-reveal-open body{
 overflow:hidden!important;overscroll-behavior:none!important}
#tfwTicketReveal{touch-action:pan-y}
@media(pointer:fine){
 html.tfw-global-cursor-ready #tfwTicketReveal,
 html.tfw-global-cursor-ready #tfwTicketReveal *{cursor:none!important}
 #tfwGlobalCursor.tfw-global-cursor-layer{z-index:2147483000!important}
}
@media(max-width:680px){
 .tfw-ticket-reveal{padding:14px;align-items:start}
 .tfw-reveal-inner{padding:15px 0}
 .tfw-reveal-heading h2{font-size:clamp(34px,9vw,54px)}
 .tfw-reveal-ticket{width:min(100%,94vw)}
 .tfw-reveal-placeholder{height:190px}
 .tfw-reveal-sound{justify-content:center}
}
@media(prefers-reduced-motion:reduce){
 .tfw-ticket-reveal,.tfw-reveal-aura,.tfw-reveal-beam,
 .tfw-reveal-placeholder span{animation:none!important}
 .tfw-reveal-track i,.tfw-ticket-reveal{transition:none!important}
}

/* Accessible soundtrack controls shared with the account registration gate.
   These work during the reveal and use the site's existing master volume. */
.tfw-onboarding-audio{display:flex;align-items:center;gap:10px;padding:10px 13px;
 width:min(370px,100%);border:1px solid rgba(246,178,221,.36);
 border-radius:15px;background:rgba(28,15,41,.85);backdrop-filter:blur(15px);
 box-shadow:0 12px 35px rgba(0,0,0,.32);color:#fff}
.tfw-onboarding-audio-label{font:900 9px/1 Arial;letter-spacing:.11em;color:#eec1dd}
.tfw-onboarding-mute{flex-shrink:0;padding:8px 10px;
 border:1px solid rgba(245,162,218,.65);border-radius:9px;
 background:rgba(197,74,151,.26);color:#fff;font:900 9px/1 Arial;cursor:pointer}
.tfw-onboarding-mute:hover{background:rgba(235,111,187,.45)}
.tfw-onboarding-volume{appearance:none;flex:1;min-width:58px;height:6px;
 border-radius:99px;cursor:pointer;outline-offset:5px;
 background:linear-gradient(90deg,#986eff,#ed6daf) 0/var(--onboarding-fill,100%) 100% no-repeat,rgba(255,255,255,.19)}
.tfw-onboarding-volume::-webkit-slider-thumb{appearance:none;width:16px;height:16px;
 border-radius:50%;background:#fff;border:3px solid #eb79c3;
 box-shadow:0 0 12px rgba(243,100,186,.4)}
.tfw-onboarding-volume::-moz-range-thumb{width:12px;height:12px;border-radius:50%;
 background:#fff;border:3px solid #eb79c3}
.tfw-onboarding-volume-value{flex-shrink:0;min-width:33px;text-align:right;
 font:900 10px/1 Arial;letter-spacing:.02em;color:#ffdef1;font-variant-numeric:tabular-nums}
#tfwCommunityGate #tfwGateSound{display:flex;justify-content:center;margin:14px auto 0}
#tfwCommunityGate .tfw-onboarding-audio{width:min(385px,100%)}
@media(max-width:380px){
 .tfw-onboarding-audio{gap:7px;padding:8px}
 .tfw-onboarding-audio-label{font-size:8px}
 .tfw-onboarding-mute{font-size:8px;padding:8px}
}

/* Audio dock: anchored to the actual viewport in both account steps. */
#tfwTicketReveal > #tfwRevealSound{
 position:fixed!important;inset:auto max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) auto!important;
 z-index:25!important;display:block!important;flex:none!important;
 width:min(370px,calc(100vw - 32px));max-width:calc(100vw - 32px);
 margin:0!important;padding:0!important
}
#tfwCommunityGate > #tfwGateSound .tfw-onboarding-audio,
#tfwTicketReveal > #tfwRevealSound .tfw-onboarding-audio{
 width:100%!important;box-sizing:border-box
}
@media(max-width:680px){
 #tfwTicketReveal > #tfwRevealSound{
  right:max(12px,env(safe-area-inset-right))!important;
  bottom:max(12px,env(safe-area-inset-bottom))!important;
  width:min(340px,calc(100vw - 24px))
 }
 #tfwTicketReveal .tfw-reveal-inner{padding-bottom:90px}
 #tfwCommunityGate{padding-bottom:max(110px,env(safe-area-inset-bottom))!important}
}

/* The reveal is scrollable on short and rotated screens; never clip the
   completion button or obscure the pass with a floating audio panel. */
#tfwTicketReveal{display:block!important;overflow-y:auto!important;overflow-x:hidden!important;
 height:100dvh!important;max-height:100dvh!important;overscroll-behavior:contain!important;
 -webkit-overflow-scrolling:touch;padding:clamp(12px,3vw,30px) 12px 100px!important;box-sizing:border-box!important}
#tfwTicketReveal .tfw-reveal-inner{width:min(1120px,100%);margin:0 auto!important;padding:12px 0 40px!important}
#tfwTicketReveal .tfw-reveal-print-window{width:100%!important;max-width:100%!important;overflow:hidden!important}
#tfwTicketReveal .tfw-reveal-ticket{width:100%!important;max-width:100%!important;min-height:0!important}
#tfwTicketReveal .tfw-reveal-print-window .tfw-ticket-viewport{max-width:100%!important}
#tfwTicketReveal .tfw-reveal-choices{margin-bottom:15px!important}
#tfwTicketReveal > #tfwRevealSound{position:relative!important;left:auto!important;right:auto!important;bottom:auto!important;margin:12px auto 0!important;z-index:8!important;width:min(370px,100%)!important;max-width:100%!important}
@media(max-height:650px){
 #tfwTicketReveal .tfw-reveal-heading{margin:0 auto 8px!important}
 #tfwTicketReveal .tfw-reveal-heading h2{font-size:clamp(25px,6vw,43px)!important;margin:8px 0!important}
 #tfwTicketReveal .tfw-reveal-track{margin-bottom:5px!important}
 #tfwTicketReveal .tfw-reveal-status{margin-bottom:9px!important}
}

/* Scrollable ticket ceremony; keep only the ticket-print scanner, no white flare. */
#tfwTicketReveal .tfw-reveal-aura,#tfwTicketReveal .tfw-reveal-beam,
#tfwTicketReveal .tfw-reveal-grid,#tfwTicketReveal .tfw-ticket:after{display:none!important;animation:none!important}
#tfwTicketReveal{display:flex!important;flex-direction:column!important;align-items:stretch!important;
 justify-content:flex-start!important;overflow-y:auto!important;overflow-x:hidden!important;
 touch-action:pan-y!important;height:100dvh!important;max-height:100dvh!important;
 padding:12px clamp(12px,2vw,28px) max(22px,env(safe-area-inset-bottom))!important}
#tfwTicketReveal .tfw-reveal-inner{min-height:calc(100dvh - 126px)!important;
 display:flex!important;flex-direction:column!important;align-items:stretch!important;
 justify-content:center!important;flex:none!important;box-sizing:border-box!important;
 margin:0 auto!important;padding:clamp(12px,3vh,30px) 0 20px!important}
#tfwTicketReveal .tfw-reveal-ticket{flex:none!important;margin:0 auto!important}
#tfwTicketReveal .tfw-reveal-choices{flex:none!important}
#tfwTicketReveal > #tfwRevealSound{position:sticky!important;
 bottom:max(8px,env(safe-area-inset-bottom))!important;left:auto!important;right:auto!important;top:auto!important;
 align-self:flex-end!important;margin:10px 0 0 auto!important;width:min(330px,calc(100% - 4px))!important;
 flex:none!important;z-index:30!important}
@media(max-height:650px){
 #tfwTicketReveal .tfw-reveal-inner{min-height:0!important;justify-content:flex-start!important}
 #tfwTicketReveal .tfw-reveal-ticket{margin-block:6px!important}
 #tfwTicketReveal .tfw-reveal-choices{margin:12px auto 16px!important}
}

/* Ticket printer: keep the moving line and eliminate white bloom behind it. */
#tfwTicketReveal .tfw-reveal-print-window .tfw-ticket,
#tfwTicketReveal.tfw-reveal-complete .tfw-reveal-print-window .tfw-ticket{
 box-shadow:none!important;filter:none!important
}
#tfwTicketReveal .tfw-reveal-ticket,
#tfwTicketReveal .tfw-reveal-print-window,
#tfwTicketReveal .tfw-ticket-viewport{box-shadow:none!important;background:transparent!important}
#tfwTicketReveal .tfw-reveal-scanner{
 width:4px!important;box-shadow:0 0 8px rgba(255,188,229,.7)!important;
 background:linear-gradient(180deg,transparent,#ffe4f4 28%,#fff 50%,#f39acc 74%,transparent)!important
}

/* The ticket's volume control follows content, not the viewport. */
#tfwTicketReveal .tfw-reveal-inner > #tfwRevealSound{
 position:static!important;inset:auto!important;top:auto!important;bottom:auto!important;
 left:auto!important;right:auto!important;translate:none!important;transform:none!important;
 z-index:auto!important;align-self:flex-end!important;flex:0 0 auto!important;
 width:min(340px,100%)!important;max-width:100%!important;height:auto!important;
 margin:clamp(20px,4vh,34px) 0 0 auto!important;padding:0!important
}

/* Soundtrack belongs at the END of the scrollable ticket, never the viewport.
   The separate footer is after the pass and Explore button in document flow. */
#tfwTicketReveal .tfw-reveal-footer{
 position:static!important;display:flex!important;justify-content:flex-end!important;
 align-self:stretch!important;flex:0 0 auto!important;
 box-sizing:border-box!important;width:min(1120px,100%)!important;
 margin:0 auto!important;padding:12px 0 max(14px,env(safe-area-inset-bottom))!important;
}
#tfwTicketReveal .tfw-reveal-footer > #tfwRevealSound{
 position:static!important;inset:auto!important;top:auto!important;bottom:auto!important;
 right:auto!important;left:auto!important;transform:none!important;translate:none!important;
 display:block!important;width:min(340px,100%)!important;max-width:100%!important;
 margin:0!important;padding:0!important;align-self:auto!important;z-index:auto!important;
}
@media(max-width:680px){
 #tfwTicketReveal .tfw-reveal-inner{min-height:100dvh!important}
 #tfwTicketReveal .tfw-reveal-footer{justify-content:center!important}
}

/* Phase 3 — keep the host countdown entirely out of the paint tree for
   the full boarding ceremony (including overscroll and landscape resize).
   The ticket reveal is the sole visible document layer until it closes. */
html.tfw-ticket-reveal-open,
html.tfw-ticket-reveal-open body{
 overflow:hidden!important;overscroll-behavior:none!important
}
html.tfw-ticket-reveal-open body > :not(#tfwTicketReveal){
 visibility:hidden!important;pointer-events:none!important
}
html.tfw-ticket-reveal-open body > #tfwTicketReveal{
 visibility:visible!important;pointer-events:auto!important
}
#tfwTicketReveal:not(.tfw-reveal-leaving){
 animation:none!important;opacity:1!important
}
#tfwTicketReveal{
 position:fixed!important;inset:0!important;
 box-sizing:border-box!important;overscroll-behavior:none!important;
 background:radial-gradient(ellipse at 50% -12%,#7339797b,transparent 45%),
 linear-gradient(145deg,#0d0817,#21102a 50%,#09070f)!important;
 isolation:isolate!important
}
/* The volume footer is part of the scrollable document, but its RIGHT edge
   must follow the page viewport, not the centered 1120px ticket container. */
#tfwTicketReveal .tfw-reveal-footer{
 box-sizing:border-box!important;max-width:none!important;
 width:100%!important;margin:0!important;align-self:stretch!important;
 justify-content:flex-end!important;position:static!important;flex:0 0 auto!important
}
@media(max-width:680px) and (orientation:portrait){
 #tfwTicketReveal .tfw-reveal-footer{justify-content:center!important}
}
@media(orientation:landscape) and (pointer:coarse){
 #tfwTicketReveal{
  height:100dvh!important;min-height:100dvh!important;max-height:100dvh!important;
  overflow-y:auto!important;overflow-x:hidden!important;
  -webkit-overflow-scrolling:touch!important;overscroll-behavior:none!important
 }
 #tfwTicketReveal .tfw-reveal-footer{
  width:100%!important;max-width:none!important;
  justify-content:flex-end!important;align-self:stretch!important;
  padding:14px max(0px,env(safe-area-inset-right)) max(14px,env(safe-area-inset-bottom)) 0!important
 }
 #tfwTicketReveal .tfw-reveal-footer > #tfwRevealSound{
  margin:0!important;position:static!important;
  width:min(340px,100%)!important;align-self:flex-end!important
 }
}
