/* Native WordPress forms within the approved, scoped event composition. */
body.event-page{--pine:var(--xmas-green,#194b37);--gold:var(--xmas-gold,#efc568);--red:var(--xmas-red,#b9253b);--cream:var(--xmas-cream,#fff4dc);max-width:none;padding:0}
.event-page main{display:block}.event-page .hero h1{font-weight:400}.event-page .header nav a{color:inherit}.event-page .header nav .btn{color:#fff4dc}
.event-page .ticket-live{color:#194b37;transform:none;contain:none;overflow:visible}
.event-page .ticket-live>.tribe-tickets__tickets-wrapper,.event-page .ticket-live>.tribe-tickets__tickets-wrapper>.tribe-tickets__tickets-form{max-width:none!important;margin:0!important;padding:0!important;border:0!important;background:transparent!important}
.event-page .ticket-live .tribe-tickets__tickets-title{font:400 var(--fs-28,28px)/1.2 Anton,sans-serif!important;color:#194b37!important}
.event-page .ticket-live .tribe-tickets__tickets-item{grid-template-columns:minmax(0,1fr) 120px!important;border-color:#194b3730!important;gap:12px!important;padding:24px 0!important}
.event-page .ticket-live .tribe-tickets__tickets-item-content-title-container{grid-column:1;grid-row:1}
.event-page .ticket-live .tribe-tickets__tickets-item-extra{grid-column:2;grid-row:1}
.event-page .ticket-live .tribe-tickets__tickets-item-details-content{grid-column:1;grid-row:2}
.event-page .ticket-live .tribe-tickets__tickets-item-quantity{grid-column:2;grid-row:2;align-self:start;width:120px!important;display:flex!important}
/* C03: 44px square steppers; margin:0 drops TEC's stray bottom margin so both buttons share the input's edges. */
.event-page .ticket-live .tribe-tickets__tickets-item-quantity button{display:grid!important;place-items:center;min-width:44px!important;width:44px!important;height:44px!important;margin:0!important;min-height:44px!important;padding:0!important;background:#194b37!important;color:#fff4dc!important;border-radius:var(--r-sm,4px)!important;font-size:var(--fs-22,22px)!important}
.event-page .ticket-live .tribe-tickets__tickets-item-quantity-number{width:44px!important;flex:0 0 44px!important}
.event-page .ticket-live .tribe-tickets__tickets-item-quantity-number-input{width:44px!important;height:44px!important;border:1px solid #194b3740!important;padding:0!important;text-align:center!important;background:#fffaf0!important;color:#194b37!important}
.event-page .ticket-live .tribe-common-h4,.event-page .ticket-live .tribe-common-h5{font:700 var(--fs-20,20px)/1.35 'Barlow Condensed',sans-serif!important;color:#194b37!important}
.event-page .ticket-live .tribe-common-b2,.event-page .ticket-live .tribe-common-b3{font-family:'DM Sans',sans-serif!important;color:#405443!important}
.event-page .ticket-live .tribe-tickets__tickets-footer{border-color:#194b3730!important;gap:20px!important}
.event-page .ticket-live .tribe-tickets__tickets-buy{display:inline-flex!important;justify-content:center;align-items:center;min-height:52px;background:#b9253b!important;color:#fff4dc!important;border:2px solid #842037!important;border-radius:var(--r-sm,4px)!important;font:400 var(--fs-20,20px)/1.3 Anton,sans-serif!important;padding:14px 24px!important}
.event-page .ticket-live .tribe-tickets__tickets-buy:disabled{opacity:.5!important;cursor:not-allowed}
.event-page .ticket-live .tribe-common-c-loader{display:none!important}
.event-page .ticket-live .checkout-detail{line-height:1.65;margin:18px 0 0;font-size:var(--fs-13,13px);text-align:left;color:#405443}
.event-page .ticket-live .small-note{margin-top:12px;text-align:left;color:#405443}
.event-page #updates .newsletter{background:none;padding:0;max-width:none;color:inherit}
.event-page #updates .newsletter__form{display:flex;flex-wrap:wrap;gap:12px;align-items:stretch}
.event-page #updates input[type=email]{min-width:0;flex:1 1 200px;min-height:52px;padding:12px 16px;color:#194b37;background:#fffaf0;border:1px solid #d8caa4;border-radius:var(--r-sm,4px)}
.event-page #updates button[type=submit]{padding:12px 20px;background:#efc568;color:#194b37;min-height:52px;border-radius:var(--r-sm,4px);font:400 var(--fs-20,20px)/1.3 Anton,sans-serif}
.event-page #updates [data-ml-newsletter-status]{margin-top:12px}.event-page #updates .vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
.holiday-sponsor-slot>a{display:flex;flex-direction:column;align-items:inherit;justify-content:center;gap:10px;min-height:44px;color:inherit}
.holiday-sponsor-slot.sponsor-item{padding:22px;display:flex;flex-direction:column;justify-content:space-between;gap:14px}
.holiday-sponsor-slot.sponsor-item>img,.holiday-sponsor-slot.sponsor-item>svg{width:100%;height:150px;object-fit:contain}
.holiday-sponsor-slot.sponsor-item .logo-placeholder{font-size:var(--fs-16,16px)}.holiday-sponsor-slot.sponsor-item .placement-label{font-size:var(--fs-12,12px)}
.holiday-sponsor-credit>span{font-size:var(--fs-12,12px);letter-spacing:.06em}.holiday-sponsor-credit>div{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px}.holiday-sponsor-credit a,.holiday-sponsor-credit>div>span{display:flex;flex-direction:column;align-items:center;gap:8px;max-width:100%;color:inherit}
.holiday-sponsor-credit img{max-height:80px;width:auto;max-width:100%;object-fit:contain}.holiday-sponsor-credit strong{font:700 var(--fs-17,17px)/1.2 'Barlow Condensed',sans-serif}
.holiday-confirmed-sponsors{margin:30px 0}.holiday-confirmed-sponsors:has(.crawl-empty){display:none}.holiday-confirmed-sponsors .sponsor-grid{display:flex;flex-wrap:wrap;gap:20px}.holiday-confirmed-sponsors .sponsor-card{background:#fffaf0;border:1px solid #d8caa4;padding:20px;max-width:240px;color:#194b37}.holiday-confirmed-sponsors .sponsor-card img{max-width:180px;max-height:110px;object-fit:contain}

.event-page .attendee-mobile-nav>a{display:flex;align-items:center;justify-content:center;min-height:48px;padding:8px;font-size:var(--fs-12,12px)}
.event-page footer>div{flex-wrap:wrap;gap:16px}.event-page footer a{min-height:44px;display:inline-flex;align-items:center}
@media(max-width:600px){.event-page .ticket-shop{padding:24px 18px}.event-page .ticket-live .tribe-tickets__tickets-item{grid-template-columns:minmax(0,1fr) 120px!important}.event-page .ticket-live .tribe-tickets__tickets-footer{flex-wrap:wrap}.event-page .ticket-live .tribe-tickets__tickets-buy{width:100%}.event-page .ticket-live .tribe-common-h4{font-size:var(--fs-18,18px)!important}}

.holiday-sponsor-slot.sponsor-placement{display:block}.holiday-sponsor-slot.sponsor-placement>a{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--ml-space-2);align-items:center;width:100%;text-align:center}.holiday-sponsor-slot.sponsor-placement .logo-placeholder{text-align:center}
.holiday-confirmed-sponsors .crawl-sponsor-tier{margin:28px 0}.holiday-confirmed-sponsors .crawl-sponsor-logos{display:flex;flex-wrap:wrap;gap:18px;margin-top:18px}.holiday-confirmed-sponsors .crawl-sponsor-logos>a,.holiday-confirmed-sponsors .crawl-sponsor-logos>div{background:#fffaf0;border:1px solid #d8caa4;padding:20px;max-width:240px;color:#194b37;display:flex;flex-direction:column;gap:12px}.holiday-confirmed-sponsors img{max-width:180px;max-height:110px;object-fit:contain}
@media(max-width:600px){.holiday-sponsor-slot.sponsor-placement>a{grid-template-columns:1fr;gap:10px;text-align:center}}
.event-page .ticket-live .tribe-tickets__tickets-item{display:grid!important;grid-template-columns:minmax(0,1fr) 136px!important;border-top:1px solid #194b3730!important}
.event-page .ticket-live .tribe-tickets__tickets-item-quantity{width:136px!important;gap:0;align-items:center}
.event-page .ticket-live .tribe-tickets__tickets-item-quantity-number{width:48px!important;flex-basis:48px!important}
.event-page .ticket-live .tribe-tickets__tickets-item-quantity-number-input{width:48px!important}
.event-page .ticket-live .tribe-tickets__tickets-item-content-title{font:700 var(--fs-22,22px)/1.15 'Barlow Condensed',sans-serif!important;text-transform:uppercase;color:#194b37}
.event-page .ticket-live .tribe-tickets__tickets-item-extra-price{text-align:right;font-weight:700!important;color:#194b37!important}
.event-page .ticket-live .tribe-common-a11y-visual-hide{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.event-page .ticket-live .tribe-tickets__tickets-footer{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding:24px 0 0}
.event-page .ticket-live .tribe-tickets__tickets-buy{flex-basis:100%}
.event-page .ticket-live .tribe-tickets__notice{margin:16px 0;padding:12px;font-size:var(--fs-12,12px);background:#f2e7c8;border-radius:var(--r-sm,4px)}

/* Preserve each event component’s palette after its link has been visited. */
.event-page :where(a:visited){color:inherit}
.event-page .header .wordmark:visited,.event-page footer .wordmark:visited,.event-page .header nav a:visited{color:inherit}
.event-page .header nav a.btn:visited{color:#fff4dc}

/* WordPress gives headings their own ink; each holiday section owns its ground. */
body.event-page :where(h1,h2,h3,h4,h5,h6){color:inherit}
.event-page :is(.passport-copy,.venue-chapter .chapter-copy,.good-copy,.updates-section,.closing) h2{color:#fff4dc}
.event-page :is(.updates-section,.closing) h2 :is(em,span){color:#efc568}
.event-page :is(.event-intro>.eyebrow,.event-intro>div>.eyebrow){color:#75452f}
.event-page :is(.section-heading>p:not(.eyebrow),.lineup-intro>p:not(.eyebrow),.map-detail){color:#405443}
.event-page .rail-heading>span{color:#75452f}
.event-page .lineup-list a>span{color:#9e2033}
.event-page .contests-section>.section-heading>p:not(.eyebrow){color:#24382e}
.event-page .ticket-big em,.event-page .sweaters h2 span{color:#19201d}
.event-page .small-note,.event-page .venue-address small{opacity:1}
.event-page .passport-panel :is(.passport-panel-top>div>span,.passport-panel-links small,.passport-panel-note){color:#50604b}
.event-page .good-copy>.small-note{color:#e9dec0!important}
.event-page .venue-theatre .stage-label{background:#19201d;color:#fff4dc;padding:8px 12px;border-radius:var(--r-sm,4px);text-shadow:none}

/* Filled controls own both colors, including visited, hover and keyboard states. */
body.event-page a.btn,.event-page a.dock-tickets{background:#b9253b;color:#fff4dc;border-color:#842037}
body.event-page a.btn:is(:link,:visited,:hover,:focus-visible,:active),.event-page a.dock-tickets:is(:link,:visited,:hover,:focus-visible,:active){color:#fff4dc}
body.event-page a.btn:is(:hover,:focus-visible),.event-page a.dock-tickets:is(:hover,:focus-visible){background:#9e2033}
.event-page :is(a.btn,a.dock-tickets)>span{color:inherit}
.event-page :is(a,button,input,summary):focus-visible{outline:3px solid #194b37;outline-offset:3px;box-shadow:0 0 0 3px #fff4dc}
.event-page .ticket-live .tribe-tickets__tickets-buy:disabled{opacity:1!important;background:#e9dec0!important;color:#405443!important;border-color:#b4aa8d!important}
.event-page input::placeholder{color:#50604b;opacity:1}

/* The poster's expressive display type sits above a readable content scale. */
body.event-page{font-size:var(--fs-17,17px);line-height:1.65}
body.event-page :is(p,li){font-size:var(--fs-17,17px);line-height:1.65}
body.event-page .hero-story{font-size:var(--fs-17,17px);line-height:1.65}
body.event-page :is(.eyebrow,.hero .eyebrow){font-size:var(--fs-14,14px);line-height:1.5;letter-spacing:.08em}
body.event-page :is(small,figcaption,.small-note,.checkout-detail,.hero-prices,.hero-sponsor,.route-note,.map-detail,.passport-panel-note,.sponsor-foot,.parade-art-caption){font-size:var(--fs-15,15px);line-height:1.6}
body.event-page .utility{font-size:var(--fs-13,13px);line-height:1.5;letter-spacing:.03em;gap:16px}
body.event-page .header nav>a:not(.btn){font-size:var(--fs-15,15px);line-height:1.4;min-height:44px;align-items:center}
body.event-page .wordmark small{font-size:var(--fs-12,12px);line-height:1.4}
body.event-page :is(.hero-ctas>a:not(.btn),.early-lineup-heading>a,.chapter-actions>a,.hero-bottom>a,.toy-strip>a,.good-copy>.underline,.parade-link,footer a,.attendee-mobile-nav>a){font-size:var(--fs-16,16px);line-height:1.5;min-height:44px}
body.event-page :is(.btn,.dock-tickets){font-size:var(--fs-20,20px);line-height:1.3;min-height:52px}
body.event-page :is(.placement-label,.placement-link,.hero-bottom>span,.quick-facts>div>span,.ticket-art-header>span,.ticket-stub>span,.lineup-list a>span,.lineup-list a>b,.rail-heading>span,.map-key,.spotlight-label,.pickup,.contest-number,.cause-grid span,.title-sponsor>span,.holiday-sponsor-credit>span){font-size:var(--fs-14,14px);line-height:1.5}
body.event-page :is(.early-venue-copy small,.passport-panel-top>div>span,.passport-date,.passport-panel-links small){font-size:var(--fs-14,14px);line-height:1.5}
body.event-page .passport-panel-links strong{font-size:var(--fs-17,17px);line-height:1.4}
body.event-page :is(.hero-facts>span,.hero-facts small,.wristband-copy>b){font-size:var(--fs-16,16px);line-height:1.5}
body.event-page :is(.faq summary,.venue-fullname){font-size:var(--fs-20,20px);line-height:1.5}
body.event-page .ticket-live :is(.tribe-common-b2,.tribe-common-b3){font-size:var(--fs-16,16px)!important;line-height:1.6!important}
body.event-page .ticket-live .tribe-tickets__tickets-item-quantity-number-input{font-size:var(--fs-17,17px)!important}
body.event-page :is(.stage-label,.venue-tagline){font-size:var(--fs-14,14px);line-height:1.4}
body.event-page .hero-bottom{flex-wrap:wrap;gap:12px 24px}
body.event-page .passport-panel-top{flex-wrap:wrap;gap:12px}
body.event-page .holiday-sponsor-slot.sponsor-placement>a{min-width:0;overflow-wrap:normal;word-break:normal}
body.event-page :is(.ticket-live .tribe-tickets__notice,#updates [data-ml-newsletter-status]:not(:empty)){padding:16px 18px;border:1px solid #71917d;border-left:4px solid #194b37;border-radius:var(--r-md,8px);background:#edf3e9;color:#194b37;font-size:var(--fs-17,17px);line-height:1.6;margin-block:16px}
@media(max-width:700px){
 body.event-page .utility{padding-block:10px;text-align:center}
 body.event-page .early-venue{min-height:84px}
 body.event-page .early-venue-copy small{font-size:var(--fs-13,13px);letter-spacing:.02em}
 body.event-page .hero-facts{flex-wrap:wrap;gap:10px 16px}
 body.event-page .chapter-top{flex-wrap:wrap;gap:12px}
 body.event-page .map-key{flex-wrap:wrap;gap:10px 16px}
 body.event-page .passport-panel{padding:22px 18px}
 body.event-page .ticket-live .tribe-tickets__tickets-item{grid-template-columns:minmax(0,1fr)!important}
 body.event-page .ticket-live .tribe-tickets__tickets-item-extra{grid-column:1;grid-row:2}
 body.event-page .ticket-live .tribe-tickets__tickets-item-extra-price{text-align:left}
 body.event-page .ticket-live .tribe-tickets__tickets-item-details-content{grid-column:1;grid-row:3}
 body.event-page .ticket-live .tribe-tickets__tickets-item-quantity{grid-column:1;grid-row:4}
}
@media(max-width:600px){
 body.event-page .sponsors-section>.sponsor-grid{grid-template-columns:minmax(0,1fr)}
 body.event-page .holiday-sponsor-slot.sponsor-item{grid-column:auto;min-width:0}
}
/* R2 verify R2V-KT-03: every venue marker shows keyboard focus. */
body.event-page .leaflet-container .venue-marker:focus-visible{outline:3px solid #19201d!important;outline-offset:3px;box-shadow:0 0 0 6px #fff1d4;border-radius:var(--r-round,50%)}
/* R2 verify R2V-KT-11: an early, skip-link style motion control for keyboard users. */
body.event-page .motion-skip{left:auto;right:20px;border:0;font:700 var(--fs-16,16px)/1.2 'DM Sans',sans-serif;cursor:pointer}
body.event-page .motion-skip:focus{top:10px}
body.event-page .map-live{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Keep returning visitors and existing carts reachable at every width. */
body.event-page .holiday-header nav>a.holiday-cart-link{gap:var(--ml-holiday-link-gap)}
body.event-page .ticket-live .ticket-eligibility{margin:0 0 var(--ml-space-4);font-weight:700;color:var(--ml-holiday-ink)}
body.event-page .ticket-cart-help{margin:0 0 var(--ml-holiday-cart-margin);padding:var(--ml-holiday-cart-padding);border:var(--ml-holiday-cart-border);border-radius:var(--ml-holiday-cart-radius);background:var(--ml-holiday-cart-ground)}
body.event-page .ticket-cart-help>a{display:inline-flex;align-items:center;min-height:var(--ml-control-h);font-weight:700;text-decoration:underline;text-underline-offset:var(--ml-holiday-underline-offset)}
body.event-page .ticket-cart-help>p{margin:0;font-size:var(--ml-holiday-cart-type);line-height:var(--ml-holiday-cart-leading)}
/* "Bringing 24 or more? Get your own bus" under the ticket form, styled like the cart link above it (Grant, 2026-10-13). */
body.event-page .ticket-live .ticket-bus-link{margin:12px 0 0;text-align:left}
body.event-page .ticket-bus-link>a{display:inline-flex;align-items:center;min-height:var(--ml-control-h);font-weight:700;text-decoration:underline;text-underline-offset:var(--ml-holiday-underline-offset)}

/* Header 1.37.10: one unit at every width, every label on one line. The nav links go to the landing's own
   sections (header.php) and show at every width: this rule outranks the bundle's phone hide and its
   Sponsors hide up to 1100px. The ticket button follows the nav. Above 1000px: wordmark, then the links
   and the button on one centred row. At 1000px and below: the wordmark and the button share the first
   row, centred on each other, and the links get a second row from the wordmark's left edge. */
body.event-page .holiday-header{gap:var(--ml-holiday-header-gap)}
body.event-page .holiday-header .wordmark{flex:none}
body.event-page .holiday-header nav{flex-wrap:nowrap;justify-content:flex-end;gap:var(--ml-holiday-nav-gap);margin-left:auto}
body.event-page .holiday-header nav>a{display:inline-flex;align-items:center;white-space:nowrap}
body.event-page .holiday-header>.btn{flex:none;white-space:nowrap}
/* The cart link (only with crawl items in the cart): "Cart" and a gold count, read as "Cart, 2 tickets". */
body.event-page .holiday-cart-count{display:inline-grid;place-items:center;min-width:var(--ml-holiday-badge-size);height:var(--ml-holiday-badge-size);padding:0 var(--ml-holiday-link-gap);border-radius:calc(var(--ml-holiday-badge-size) / 2);background:var(--xmas-gold,#efc568);color:var(--xmas-green,#194b37);font:700 var(--fs-13,13px)/1 var(--xmas-font-body,'DM Sans',sans-serif)}
@media(max-width:1000px){
 body.event-page .holiday-header{flex-wrap:wrap}
 body.event-page .holiday-header nav{order:1;flex:1 0 100%;justify-content:flex-start;gap:var(--ml-holiday-nav-stack-gap);margin-left:0}
}
/* Phones: the section links share one row at 13px, spread across the width. Below about 370px with a cart
   link they cannot all fit, so the row scrolls sideways inside itself (never the page): the last link is cut
   at the edge and a shadow shows on the side that has more (the local covers hide it at either end). */
@media(max-width:760px){
 body.event-page .holiday-header{gap:var(--ml-holiday-header-gap-phone)}
 body.event-page .holiday-header nav{justify-content:space-between;gap:var(--ml-holiday-nav-phone-gap);min-width:0;overflow-x:auto;scrollbar-width:none;overscroll-behavior-x:contain;background:linear-gradient(to right,var(--xmas-green,#194b37) 40%,#194b3700) left/24px 100% no-repeat local,linear-gradient(to left,var(--xmas-green,#194b37) 40%,#194b3700) right/24px 100% no-repeat local,linear-gradient(to right,#0b201799,#0b201700) left/16px 100% no-repeat scroll,linear-gradient(to left,#0b201799,#0b201700) right/16px 100% no-repeat scroll}
 body.event-page .holiday-header nav::-webkit-scrollbar{display:none}
 body.event-page .holiday-header nav>a:not(.btn){flex:none;font-size:var(--fs-13,13px)}
 body.event-page .holiday-header>.btn{justify-content:center;padding:var(--ml-holiday-action-padding);gap:var(--ml-space-1);font-size:var(--ml-fs-body);min-height:var(--ml-space-7)}
}
@media(max-width:370px){
 body.event-page .holiday-header{gap:var(--ml-holiday-header-gap-narrow)}
 body.event-page .holiday-header>.btn{padding:var(--ml-holiday-action-padding-narrow);font-size:var(--fs-14,14px)}
}

/* Phones show no decorative glyphs (Grant, 2026-10-06): the arrows, asterisks and play/pause marks are
   all aria-hidden spans, so every link and button keeps its words. Desktop keeps them. Separators that
   read as punctuation (the middle dot and bullet in copy) and the FAQ plus stay. */
@media(max-width:760px){
 body.event-page :is(a,button,p,figcaption,.placement-link,.runway-name,.ticket-stub)>span[aria-hidden="true"]:not(.early-number,.holiday-cart-count,.ml-buy-spinner),
 body.event-page :is(.wordmark-icon,.live-spark,.passport-mark,.toy-symbol,.closing-doodle,.ticker-group>b){display:none}
}

/* Sponsor labels and logo artwork must fit the slot without splitting words. */
body.event-page .holiday-sponsor-slot :is(.placement-label,.placement-link,.logo-placeholder){min-width:0;max-width:100%;width:100%;white-space:normal;word-break:normal;overflow-wrap:normal}
body.event-page .holiday-sponsor-slot .logo-placeholder{min-height:var(--ml-holiday-logo-slot-height);padding:var(--ml-space-2) var(--ml-space-3)}
body.event-page .holiday-sponsor-slot .placement-link{letter-spacing:normal}
body.event-page .title-sponsor .title-presenter{width:100%;margin-inline:0}
body.event-page .title-sponsor .title-presenter>a{margin:0;text-decoration:none}
body.event-page .holiday-sponsor-credit{min-width:0;width:100%;text-align:center}
body.event-page .holiday-sponsor-credit>div{justify-content:center}
body.event-page .holiday-sponsor-credit :is(a,div>span){min-width:0;max-width:100%}
body.event-page .holiday-sponsor-credit img{display:block;width:auto;height:auto;max-width:100%;max-height:var(--ml-holiday-logo-image-height);object-fit:contain}
body.event-page .holiday-sponsor-credit strong{max-width:100%;overflow-wrap:break-word}
body.event-page .holiday-sponsor-slot .logo-placeholder.is-booked{flex:0 0 auto;height:var(--ml-holiday-logo-slot-height);padding-block:0;border-color:transparent;background:none}
body.event-page .holiday-sponsor-slot .logo-placeholder.is-booked img{display:block;width:auto;height:auto;max-width:100%;max-height:var(--ml-holiday-logo-slot-height);margin:0;object-fit:contain}

/* Keep all answers in document order and use the full section width. */
body.event-page .faq{display:block}
body.event-page .faq-heading{margin-bottom:var(--ml-space-6)}
body.event-page .faq h2{margin-bottom:0}
body.event-page .faq h2 span{display:inline-block}
body.event-page .faq-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:var(--ml-space-7);align-items:start}
body.event-page .faq-list details{min-width:0;border-bottom:0;border-top:var(--ml-holiday-faq-rule)}
body.event-page .faq-list summary>span{flex-shrink:0}
@media(max-width:760px){body.event-page .faq-list{grid-template-columns:minmax(0,1fr)}}

/* Crawl polish 1.37.3 (audit 2026-10-05 items 1, 2, 3, 7, 14, 19): value changes only. */
/* Items 1 and 2: notes and body copy at a readable size. The bundle's 10px .small-note rules no longer
   carry !important, so the 15px note size above applies; the bundle sets no venue callout size (Release B
   A6), and this (0,3,1) rule ties the bundle's .route-layout .chapter-copy>p and wins by sheet order.
   The body rule outranks the bundle's (0,3,1) .route-layout .chapter-copy>p and the ID-scoped intro. */
body.event-page .chapter-copy .venue-exception{font-size:var(--fs-15,15px);line-height:1.6}
body.event-page :is(.chapter-copy>p,.route-layout .chapter-copy>p,.event-intro p,.section-heading>p,.good-copy>p,.passport-copy>p,.updates-section>div>p,.ticket-live .checkout-detail):not(.eyebrow,.small-note,.venue-fullname,.venue-address,.venue-exception,.ticket-big),
body.event-page #mlcp-passport-intro .passport-copy>p:not(.eyebrow,.small-note){font-size:var(--ml-copy,16px);line-height:1.65}
body.event-page :is(.good-copy>p:not(.eyebrow,.small-note),.wristband-copy p){max-width:62ch}
/* Item 3: desktop body copy steps up beside the 79 to 104px headings (the list above reads --ml-copy). */
@media(min-width:1000px){
 body.event-page{--ml-copy:17px}
 body.event-page .hero-deck{font-size:var(--fs-17,17px)}
}
/* Item 7: the three landing nav links centre in their 44px box like the account links. Flex items are
   blockified, so align-items needs a flex box; zero specificity keeps the bundle's display:none rules. */
:where(body.event-page .holiday-header nav>a:not(.btn)){display:inline-flex;align-items:center}
/* Item 14: the phone ticket bar keeps its date on one line. */
body.event-page .mobile-tickets>span{font-size:var(--fs-16,16px);white-space:nowrap}
/* Item 19: the holder's contest voting links read at 14px with a 44px tap target; the underline stays
   under the text. */
body.event-page .contest-grid a{display:inline-flex;align-items:flex-end;min-height:44px;padding-bottom:3px;font-size:var(--fs-14,14px);line-height:1.4}

/* Crawl polish 1.37.3 motion: transform and opacity only, every new motion off under reduced motion,
   while Pause motion is on (body.paused only pauses animations in the bundle, so these rules scope
   themselves to body:not(.paused)) and for Save-Data visitors (crawl B1: html.data-saver, set by
   performance.js, gated with a zero-specificity :where() so no rule's weight changes). Nothing here
   hides content unless a script has already run. */
/* Item 11: Get Tickets keeps its red while it works, with a spinner beside "Adding to cart". The
   submitting styles in christmas-bar-crawl.css are dequeued on this page, so they live here. */
body.event-page .ticket-live .ml-ticket-submitting .tribe-tickets__tickets-buy:disabled{background:#b9253b!important;color:#fff4dc!important;border-color:#842037!important;cursor:progress}
body.event-page .ticket-live .ml-buy-spinner{display:inline-block;flex:none;width:18px;height:18px;margin-right:10px;border:3px solid currentColor;border-right-color:transparent;border-radius:var(--r-round,50%)}
@keyframes ml-buy-spin{to{transform:rotate(1turn)}}
@keyframes ml-tick{from{transform:translateY(var(--ml-tick-from));opacity:.4}to{transform:none;opacity:1}}
.ml-tick-up{--ml-tick-from:6px}.ml-tick-down{--ml-tick-from:-6px}
@media(prefers-reduced-motion:no-preference){
 /* Motion 1: the ticket bar and the desktop dock slide up from the bottom; layout.js slides them out. The
    individual translate property leaves the dock's centring transform alone. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) :is(.mobile-tickets,.desktop-dock){transition:translate 240ms cubic-bezier(.2,.7,.2,1),opacity 240ms cubic-bezier(.2,.7,.2,1)}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) :is(.mobile-tickets,.desktop-dock).is-leaving{translate:0 calc(100% + 24px);opacity:0}
 @starting-style{:where(:root:not(.data-saver)) body.event-page:not(.paused) :is(.mobile-tickets,.desktop-dock){translate:0 calc(100% + 24px);opacity:0}}
 /* Motion 2: Get Tickets presses in for 120ms before it starts working. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .ticket-live .tribe-tickets__tickets-buy{transition:transform 120ms cubic-bezier(.2,.7,.2,1)}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .ticket-live .tribe-tickets__tickets-buy:active:not(:disabled){transform:scale(.97)}
 /* The ticket form sits in a .quiet-section, whose bundle rule .quiet-section *{animation:none!important}
    (0,1,0) would stop the two animations below, so they carry !important at a higher specificity. They
    exist only here, under no-preference and body:not(.paused), so reduced motion and Pause motion still
    switch them off. */
 /* Item 11: the Get Tickets spinner turns while the tickets are added. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .ticket-live .ml-buy-spinner{animation:ml-buy-spin .8s linear infinite!important}
 /* Motion 3: the quantity and the total tick in the direction of the change (christmas-bar-crawl.js). */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .ticket-live :is(.ml-tick-up,.ml-tick-down){animation:ml-tick 180ms cubic-bezier(.2,.7,.2,1)!important}
 /* Motion 5: the route stops light up in order, 60ms apart (the template sets --ml-stop, capped at 7), the first time the list scrolls into view.
    page-motion.js adds out-of-view before it observes, so without that script every stop stays lit. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .lineup-list a{transition:opacity 320ms cubic-bezier(.2,.7,.2,1),transform 320ms cubic-bezier(.2,.7,.2,1)}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .lineup-list.out-of-view:not(.motion-arrived) a{opacity:.3;transform:translateY(10px)}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .lineup-list a:nth-child(n+2){transition-delay:calc(var(--ml-stop,0)*60ms)}
}
/* Security review T2: a bar on its way out takes no taps. */
body.event-page :is(.mobile-tickets,.desktop-dock).is-leaving{pointer-events:none}
/* Hover lifts only where hover is real; a tap must not leave a sponsor card raised. */
@media(hover:none){body.event-page .sponsor-item:hover{translate:none}}
/* Release A (design audit fixes, 2026-10-07). Item 3a: the Passport "coming soon" line, set off from
   the paragraph above it while the Passport's event setup is pending. */
body.event-page .passport-copy>p.passport-pending{margin:18px 0 0;padding-left:14px;border-left:3px solid var(--lime);color:#fff1d4}
body.event-page .passport-copy>p.passport-pending strong{color:var(--lime)}
/* Item 5: each open sponsor level names its package, price and benefits, so it reads as a sponsor
   package, not a ticket level. */
body.event-page .backer-slots .placement-desc{display:block;font-size:var(--fs-14,14px);line-height:1.5;text-align:left;letter-spacing:normal;text-transform:none;font-weight:400}
body.event-page .business-backers p.backer-intro{font-weight:700}
body.event-page .backer-slots .holiday-sponsor-slot>a{height:100%;justify-content:flex-start}
body.event-page .backer-slots .holiday-sponsor-slot .placement-link{margin-top:auto}
/* Item 1b: the quick facts cell keeps "T-shirt" whole; unset the cell's label styles (.quick-facts span). */
body.event-page .quick-facts strong>.way-in-nowrap{all:unset;white-space:nowrap}
/* Item 6: the one-line pickup reminders link to the full paragraph in the ticket box. */
body.event-page :is(.wristband-copy,.how-grid,.faq-list) p a{text-decoration:underline;text-underline-offset:.15em}
/* The strip's own link styles (small caps-size CTA) are for a standalone link, not one inside the sentence. */
body.event-page .sponsor-strip .wristband-copy p a{display:inline;margin:0;font-size:inherit;font-weight:inherit;white-space:normal;border-bottom:0}
/* Event Tickets indents its buy button 28px from 768px up; it lines up with the ticket rows above it instead. */
body.event-page .ticket-live .tribe-tickets__tickets-form .tribe-tickets__tickets-buy{margin-left:0}
/* Desktop event bar (1.37.29, Grant 2026-10-08: "the two buttons don't really seem like buttons"). The floating dock is
   now the masthead's compact twin: once the header scrolls away it slides down from the top with the wordmark, real
   section tabs that show where the reader is (layout.js marks aria-current), a booked title sponsor and one red ticket
   button. Nothing floats over the content, and the anchors land below it. Phones keep their bottom ticket bar. */
@media(min-width:761px){
 html:has(.event-bar){scroll-padding-top:92px}
 body.event-page .map-rail{top:92px}
}
body.event-page .event-bar{position:fixed;z-index:1100;top:0;left:0;right:0;display:flex;align-items:center;gap:clamp(16px,2.2vw,32px);min-height:68px;padding:10px max(5.5%,calc((100vw - 1450px)/2)) 14px;background:var(--xmas-green,#194b37);color:#fff4dc;box-shadow:0 10px 28px -14px #0b1d15;font-size:var(--fs-14,14px)}
body.event-page .event-bar::after{content:'';position:absolute;left:0;right:0;bottom:0;height:5px;background:repeating-linear-gradient(125deg,#b9253b 0 18px,#fff4dc 18px 31px,#194b37 31px 49px,#fff4dc 49px 62px);pointer-events:none}
body.event-page .event-bar[hidden]{display:none}
body.event-page .event-bar a{color:#fff4dc}
body.event-page .event-bar :focus-visible{outline:3px solid var(--xmas-gold,#efc568);outline-offset:3px}
body.event-page .event-bar .bar-mark{display:flex;align-items:center;gap:10px;flex:none;min-height:44px;font:700 var(--fs-17,17px)/1 'Barlow Condensed',sans-serif;letter-spacing:.06em;text-decoration:none}
body.event-page .event-bar .bar-mark small{display:block;margin-top:4px;font-size:var(--fs-10,10px);letter-spacing:.16em;color:#d9e4cf}
body.event-page .event-bar .bar-spark{display:grid;place-items:center;font-size:var(--fs-28,28px);color:var(--xmas-gold,#efc568)}
body.event-page .event-bar .bar-links{display:flex;align-items:stretch;justify-content:center;gap:clamp(14px,2vw,30px);flex:1;min-width:0}
body.event-page .event-bar .bar-links a{display:inline-flex;align-items:center;min-height:44px;padding:0 2px;border-bottom:3px solid transparent;border-top:3px solid transparent;font:600 var(--fs-15,15px)/1.2 'DM Sans',sans-serif;white-space:nowrap;text-decoration:none;color:#fff4dcd9;transition:color .18s,border-color .18s}
body.event-page .event-bar .bar-links a:hover,body.event-page .event-bar .bar-links a[aria-current]{color:#fff4dc;border-bottom-color:var(--xmas-gold,#efc568)}
body.event-page .event-bar .bar-presenter{display:flex;align-items:center;gap:10px;flex:none;max-width:clamp(150px,18vw,280px);font-size:var(--fs-11,11px);letter-spacing:.08em;text-transform:uppercase;color:#d9e4cf}
body.event-page .event-bar .bar-presenter>div{display:flex;align-items:center;gap:8px;min-width:0}
body.event-page .event-bar .bar-presenter a,body.event-page .event-bar .bar-presenter>div>span{display:flex;align-items:center;gap:8px;min-width:0;text-decoration:none}
body.event-page .event-bar .bar-presenter img{display:block;width:auto;height:auto;max-width:96px;max-height:32px;object-fit:contain;border-radius:4px;background:#fff4dc;padding:3px}
body.event-page .event-bar .bar-presenter strong{overflow:hidden;font:700 var(--fs-15,15px)/1.1 'Barlow Condensed',sans-serif;letter-spacing:.02em;text-transform:none;white-space:nowrap;text-overflow:ellipsis;color:#fff4dc}
body.event-page .event-bar .dock-price{flex:none;margin-left:auto;text-align:right;font:700 var(--fs-15,15px)/1.15 'Barlow Condensed',sans-serif;letter-spacing:.03em;white-space:nowrap}
body.event-page .event-bar .dock-price small{display:block;margin-top:3px;font:500 var(--fs-12,12px)/1.2 'DM Sans',sans-serif;letter-spacing:0;color:var(--xmas-gold,#efc568)}
body.event-page .event-bar .dock-tickets{--cta-shadow:#0b261b;flex:none;justify-content:center;gap:12px;min-height:46px;padding:0 20px;border:2px solid #842037;box-shadow:3px 3px 0 #0b261b;font:400 var(--fs-18,18px)/1 Anton,Impact,sans-serif;letter-spacing:.03em;text-transform:uppercase;white-space:nowrap}
body.event-page .event-bar .dock-tickets>span{font-size:var(--fs-18,18px)}
@media(max-width:1180px){body.event-page .event-bar .dock-price:not(.dock-cart),body.event-page .event-bar .bar-presenter>span{display:none}}
@media(max-width:1020px){body.event-page .event-bar .bar-mark small{display:none}body.event-page .event-bar .bar-links{gap:16px}body.event-page .event-bar .bar-links a{font-size:var(--fs-14,14px)}body.event-page .event-bar .bar-presenter{display:none}}
@media(max-width:900px){body.event-page .event-bar .bar-links a:nth-child(3),body.event-page .event-bar .bar-links a:nth-child(4){display:none}body.event-page .event-bar:has(.dock-cart) .bar-links{display:none}}
@media(max-width:760px){body.event-page .event-bar{display:none}}
@media(prefers-reduced-motion:no-preference){
 /* The bar comes down from the top and goes back up (layout.js); the phone bar still rises from the bottom. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .desktop-dock.event-bar.is-leaving{translate:0 calc(-100% - 12px);opacity:0}
 @starting-style{:where(:root:not(.data-saver)) body.event-page:not(.paused) .desktop-dock.event-bar{translate:0 calc(-100% - 12px);opacity:0}}
}
/* Showtime motion (2026-10-08). The bus pulls in and parks, its garland switches on and a short flurry
   falls; the sales buttons lift, press and catch the light; headlines rise and photos are dealt as they
   arrive; tapping a character replays its dance. Only transform and opacity move. Each piece plays once
   or settles under C15 (page-motion.js), and none runs under reduced motion, Save-Data or Pause motion:
   every element's resting style is its finished pose, and the hero's new SVG parts are hidden at rest. */
.hb-flurry circle,.hb-chase circle{opacity:0}
.hb-ride{transform-origin:410px 470px}
.hb-spin,.hb-puffs circle{transform-box:fill-box;transform-origin:center}
.hb-bubble{transform-box:fill-box;transform-origin:92% 100%}
body.event-page :is(a.btn,a.dock-tickets){position:relative;overflow:hidden;isolation:isolate}
body.event-page :is(a.btn,a.dock-tickets):is(:hover,:focus-visible){text-decoration:none}
body.event-page :is(a.btn,a.dock-tickets)::after{content:'';position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(110deg,transparent 28%,#fff4dc59 45%,#fffbefa6 50%,#fff4dc59 55%,transparent 72%);translate:-105% 0}
body.event-page .ml-crawl-arrow path{transition:translate .2s cubic-bezier(.2,.7,.2,1)}
body.event-page .photo-grid figure{position:relative}
body.event-page .faq summary span{transition:rotate .25s cubic-bezier(.2,.7,.2,1)}
.ml-burst{position:fixed;z-index:4000;width:0;height:0;pointer-events:none}
.ml-burst i{position:absolute;left:-7px;top:-7px;width:14px;height:14px;background:var(--c,#efc568);clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);opacity:0;animation:ml-burst .72s cubic-bezier(.15,.75,.3,1) forwards}
.ml-burst i:nth-child(3n){border-radius:50%;clip-path:none;left:-4px;top:-4px;width:8px;height:8px}
.ml-burst b{position:absolute;left:-14px;top:-14px;width:28px;height:28px;border:2px solid #efc568;border-radius:50%;opacity:0;animation:ml-ring .5s cubic-bezier(.2,.7,.2,1) forwards}
@keyframes ml-ring{0%{opacity:.9;transform:scale(.3)}100%{opacity:0;transform:scale(2.6)}}
@keyframes ml-burst{0%{opacity:1;transform:translate(0,0) scale(.3) rotate(0)}70%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(var(--s,1)) rotate(var(--r,90deg))}}
@media(prefers-reduced-motion:no-preference){
 /* The bus drives in from the right, its wheels rolling, brakes with a nod of the nose and parks. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hb-ride{animation:hb-arrive 1.3s cubic-bezier(.16,.72,.24,1) backwards,hb-brake 1.3s ease-out}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hb-spin{animation:hb-roll 1.3s cubic-bezier(.16,.72,.24,1) backwards}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hb-lamps{animation:hb-highbeam 1.25s ease-out 1.05s backwards}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hb-puffs circle{animation:hb-puff 1.15s ease-out 1s backwards}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hb-puffs circle:nth-child(2){animation-delay:1.12s}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hb-puffs circle:nth-child(3){animation-delay:1.24s}
 /* The garland lights up bulb by bulb, then glimmers until the hero settles. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hb-chase circle{animation:hb-chase 1.6s ease-out calc(1.1s + var(--i,0)*75ms) backwards,hb-glimmer 3s ease-in-out calc(3s + var(--i,0)*.35s) infinite}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hb-flurry circle{animation:hb-fall var(--t,7s) linear var(--d,0s) infinite}
 /* The red sales buttons glint once when they arrive: the hero's after the bus parks, the floating bars' as they slide in. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .hero-ctas>a.btn::after{animation:ml-glint 1.1s cubic-bezier(.3,.6,.2,1) 1.6s,ml-glint 1.1s cubic-bezier(.3,.6,.2,1) 6.5s}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) :is(.mobile-tickets,.desktop-dock) a.btn::after,:where(:root:not(.data-saver)) body.event-page:not(.paused) a.btn.ml-glint::after{animation:ml-glint 1.1s cubic-bezier(.3,.6,.2,1) .45s}
 /* A press sinks into the shadow; where hover is real the button lifts, deepens its shadow and catches the light. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) :is(a.btn,a.dock-tickets){transition:background-color .18s,color .18s,border-color .18s,box-shadow .18s cubic-bezier(.2,.7,.2,1),translate .18s cubic-bezier(.2,.7,.2,1)}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) :is(a.btn,a.dock-tickets):not(:where(.quiet-section *)):active{translate:2px 2px;box-shadow:1px 1px 0 var(--cta-shadow,#19201d)}
 @media(hover:hover){
  :where(:root:not(.data-saver)) body.event-page:not(.paused) :is(a.btn,a.dock-tickets):not(:where(.quiet-section *)):is(:hover,:focus-visible):not(:active){translate:-2px -2px;box-shadow:5px 5px 0 var(--cta-shadow,#19201d)}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) :is(a.btn,a.dock-tickets):hover::after{translate:105% 0;transition:translate .75s cubic-bezier(.3,.6,.2,1)}
  /* Arrows lean the way they point. */
  :where(:root:not(.data-saver)) body.event-page:not(.paused) a:is(:hover,:focus-visible) .ml-crawl-arrow path:not([transform]){translate:2.5px 0}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) a:is(:hover,:focus-visible) .ml-crawl-arrow path[transform="rotate(315 8 8)"]{translate:2px -2px}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) a:is(:hover,:focus-visible) .ml-crawl-arrow path[transform="rotate(45 8 8)"]{translate:2px 2px}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) a:is(:hover,:focus-visible) .ml-crawl-arrow path[transform="rotate(90 8 8)"]{translate:0 2.5px}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) a:is(:hover,:focus-visible) .ml-crawl-arrow path[transform="rotate(180 8 8)"]{translate:-2.5px 0}
  /* Photos are picked up off the table; contest cards rise to meet the pointer. */
  :where(:root:not(.data-saver)) body.event-page:not(.paused) .photo-grid figure{transition:rotate .35s cubic-bezier(.2,.7,.2,1),translate .35s cubic-bezier(.2,.7,.2,1),scale .35s cubic-bezier(.2,.7,.2,1),box-shadow .35s}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) .photo-grid figure:hover{rotate:0deg;translate:0 -6px;scale:1.035;z-index:2;box-shadow:0 22px 34px -16px #19201d66}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) .contest-grid article{transition:translate .25s cubic-bezier(.2,.7,.2,1),box-shadow .25s cubic-bezier(.2,.7,.2,1)}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) .contest-grid article:hover{translate:-3px -3px;box-shadow:8px 8px 0 var(--ink,#19201d)}
  /* The souvenir ticket tilts toward the pointer with a foil glint (page-motion.js writes --tx, --ty and --gx). */
  :where(:root:not(.data-saver)) body.event-page:not(.paused) .souvenir-ticket{transition:transform .5s cubic-bezier(.2,.7,.2,1);transform:perspective(900px) rotateX(var(--ty,0deg)) rotateY(var(--tx,0deg))}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) .souvenir-ticket.ml-tilting{transition:transform .12s linear}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) .souvenir-ticket::after{content:'';position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .4s;background:linear-gradient(115deg,transparent calc(var(--gx,50%) - 22%),#fff8e466 calc(var(--gx,50%) - 6%),#fffdf5b3 var(--gx,50%),#dfff7333 calc(var(--gx,50%) + 8%),transparent calc(var(--gx,50%) + 24%))}
  :where(:root:not(.data-saver)) body.event-page:not(.paused) .souvenir-ticket.ml-tilting::after{opacity:1}
 }
 /* Headlines rise and cards are dealt as they first arrive. page-motion.js marks only what is still below
    the fold, so nothing already on screen hides, and the marks come off once each piece lands. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .ml-rv.ml-rv{opacity:0;translate:0 34px;transition:opacity .7s cubic-bezier(.2,.7,.2,1) calc(var(--rv,0)*90ms),translate .8s cubic-bezier(.2,.7,.2,1) calc(var(--rv,0)*90ms),scale .8s cubic-bezier(.2,.7,.2,1) calc(var(--rv,0)*90ms)}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .photo-grid>.ml-rv{translate:0 46px;scale:.94}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .ml-rv.ml-rv-in{opacity:1;translate:0 0;scale:1}
 /* Get Tickets pops once when the first ticket is chosen (christmas-bar-crawl.js); like the tick it outranks the quiet section. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .ticket-live .tribe-tickets__tickets-buy.ml-buy-ready:not(:disabled){animation:ml-buy-ready .6s cubic-bezier(.2,.7,.2,1)!important}
 /* A "Get tickets" press lands on the ticket box with one gold ring (christmas-bar-crawl.js); an outline, so the box keeps its shadow. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .ticket-shop.ml-tickets-arrive{animation:ml-tickets-arrive 1.5s cubic-bezier(.2,.7,.2,1)!important}
 /* The closing asterisk turns once while the band is in view; page-motion.js settles it. */
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .closing-doodle svg{animation:ml-doodle-turn 16s linear infinite}
 :where(:root:not(.data-saver)) body.event-page:not(.paused) .closing-stars i{animation:ml-twinkle 2.8s ease-in-out var(--d,0s) infinite}
}
/* Restart a settled character: page-motion.js adds this for one frame. */
.ml-replay *,.ml-replay{animation:none!important}
.closing-stars{position:absolute;inset:0;z-index:1;pointer-events:none}
.closing-stars i{position:absolute;left:var(--x);top:var(--y);width:var(--s,14px);height:var(--s,14px);background:var(--c,#efc568);clip-path:polygon(50% 0,60% 40%,100% 50%,60% 60%,50% 100%,40% 60%,0 50%,40% 40%);opacity:.18}
@media print{body.event-page .ml-rv{opacity:1!important;translate:none!important;scale:none!important}}
@keyframes hb-arrive{from{transform:translateX(170px);opacity:0}25%{opacity:1}to{transform:none}}
@keyframes hb-brake{0%,64%{rotate:0deg}78%{rotate:-2deg}90%{rotate:.7deg}to{rotate:0deg}}
@keyframes hb-roll{from{transform:rotate(220deg)}to{transform:none}}
@keyframes hb-highbeam{0%{opacity:0}12%{opacity:1}30%{opacity:.15}44%{opacity:1}to{opacity:0}}
@keyframes hb-puff{from{opacity:0;transform:scale(.3)}25%{opacity:.95}to{opacity:0;transform:translate(26px,-16px) scale(1.7)}}
@keyframes hb-chase{0%{opacity:0}18%{opacity:1}to{opacity:0}}
@keyframes hb-glimmer{0%,100%{opacity:0}50%{opacity:.75}}
@keyframes hb-fall{0%{transform:translate(0,-34px);opacity:0}14%{opacity:.95}84%{opacity:.85}to{transform:translate(var(--x,8px),200px);opacity:0}}
@keyframes ml-glint{from{translate:-105% 0}to{translate:105% 0}}
@keyframes ml-buy-ready{0%{transform:scale(1);box-shadow:0 0 0 0 #b9253b66}40%{transform:scale(1.045)}70%{transform:scale(.99)}100%{transform:scale(1);box-shadow:0 0 0 14px #b9253b00}}
@keyframes ml-tickets-arrive{0%{outline:3px solid #efc56800;outline-offset:0}25%{outline:3px solid #efc568;outline-offset:6px}100%{outline:3px solid #efc56800;outline-offset:18px}}
@keyframes ml-doodle-turn{to{transform:rotate(1turn)}}
@keyframes ml-twinkle{0%,100%{opacity:.18;transform:scale(.7)}50%{opacity:1;transform:scale(1.15)}}
body.event-page .hero-ctas>a.btn{--cta-shadow:#842037}
body.event-page .sponsors-section a.btn.dark{--cta-shadow:#78836d}
