/* The event detail in the River's ticket look, shared by the River's slide-out sheet
   (ui/river/index.html, #dPanel) and the standalone page at /events/<slug>
   (api/templates/event_page.html). Markup comes from ui/river/river.js, the server template,
   ui/event-deal.js (resale rows) and ui/event-media.js (clips). The River loads this before
   river.css, so its boat and sheet rules still win where they overlap. */
.look-ticket{--paper:#F4F2F0;--ink:#26292C;--muted:#5D6266;--steel:#23557A;--gold:#E1AC36;--gold-deep:#B98A22;--red:#C23A2B;--water:#196CB2;
  --felt:url(/river/assets/river-felt-flare.webp)}
.look-ticket .dstub :is(h1,h2){margin:0;font-weight:900;font-size:28px;line-height:1.08;letter-spacing:-.01em}
.look-ticket .tags{margin-top:10px}
.dsec{padding:18px 18px 4px}
.dsec h3{margin:0 0 8px;font-weight:900;font-size:17px}
.dsec p{margin:0 0 10px;font-size:16px;line-height:1.55;max-width:62ch}
.dsec ul{margin:0;padding:0;list-style:none}
.dmore li{padding:10px 0;border-top:1px solid rgba(38,41,44,.12)}
.dmore li:first-child{border-top:0;padding-top:2px}
.dmore a{font-weight:800;color:var(--ink)}
.dmore span{display:block;font-size:13px;color:var(--muted);margin-top:2px}
.dwhy li{position:relative;padding-left:16px;margin:0 0 6px;font-size:15px}
.dwhy li::before{content:"";position:absolute;left:2px;top:.55em;width:7px;height:7px;border-radius:50%;background:var(--gold)}
.dlinks{display:flex;flex-wrap:wrap;gap:8px 16px;font-weight:800;font-size:15px}
.dlinks a{color:var(--steel)}
.dclips{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding-bottom:4px}
.dclips::-webkit-scrollbar{display:none}
.dclip{flex:none;width:150px;font:inherit;text-align:left;border:0;padding:0;background:none;cursor:pointer;color:var(--ink);text-decoration:none}
.dclip i{position:relative;display:block;aspect-ratio:16/9;border-radius:8px;overflow:hidden;background:#111}
.dclip i img{width:100%;height:100%;object-fit:cover;display:block}
.dclip i::after{content:"";position:absolute;right:6px;bottom:6px;width:26px;height:26px;border-radius:50%;background:var(--red) url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M7 5l8 5-8 5z' fill='white'/%3E%3C/svg%3E") center/16px no-repeat;box-shadow:0 0 0 2px #fff}
.dclip b{display:block;font-size:13px;margin-top:5px;line-height:1.25}
.dclip:focus-visible{outline:3px solid var(--ink);outline-offset:2px;border-radius:8px}
.dcount{font-weight:700;font-size:13px;color:var(--muted);margin-left:4px}
.dclip small{display:block;font-size:12px;color:var(--muted);margin-top:1px}
.dsong i{display:grid;place-items:center;background:radial-gradient(circle at 50% 50%,#1C2B3C,#0D1620)}
.dsong .disc{width:58px;height:58px;border-radius:50%;background:radial-gradient(circle,var(--gold) 0 9px,#111 9.5px 13px,#2A2A2A 13.5px 15px,#151515 15.5px 22px,#262626 22.5px 24px,#111 24.5px)}
.dsong[aria-pressed="true"] .disc{animation:spin 2.4s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.dsong .dprog{position:absolute;left:8px;right:8px;bottom:8px;height:4px;border-radius:2px;background:rgba(255,255,255,.2)}
.dsong .dprog span{display:block;height:100%;width:0;border-radius:2px;background:var(--gold)}
.dsong i::after{background-color:var(--steel)}
.dsong[aria-pressed="true"] i::after{background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M6 5h3v10H6zM11 5h3v10h-3z' fill='white'/%3E%3C/svg%3E")}
@media (prefers-reduced-motion:reduce){.dsong[aria-pressed="true"] .disc{animation:none}}
.dplayer{aspect-ratio:16/9;border-radius:10px;overflow:hidden;background:#000;margin-bottom:10px}
.dplayer{position:relative}
.dplayer iframe{width:100%;height:100%;border:0;display:block}
.dytlink{position:absolute;left:8px;bottom:8px;padding:5px 9px 3px;border-radius:6px;font-weight:800;font-size:12px;color:#fff;background:rgba(0,0,0,.72);text-decoration:none}
.dytlink:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.dplayer[hidden]{display:none}
.dbar{display:flex;align-items:center;gap:8px;padding:10px 12px calc(10px + env(safe-area-inset-bottom));background:var(--paper);border-top:1px solid rgba(38,41,44,.14)}
.dbar .chair{margin:0}
.dbar .dshare{font:inherit;font-weight:800;font-size:14px;border:0;border-radius:10px;padding:12px 12px 10px;cursor:pointer;background:#fff;color:var(--ink);box-shadow:inset 0 0 0 1.5px rgba(38,41,44,.25)}
.dbar .dgo{flex:1;display:block;text-align:center;font-weight:900;font-size:15px;text-decoration:none;border-radius:10px;padding:13px 10px 11px;background:var(--ink);color:#fff}
:is(.dshare,.dgo):focus-visible{outline:3px solid var(--gold);outline-offset:2px}

/* look 3, ticket: one continuous admission ticket, perforated between sections, on the river */
.look-ticket .dbody{background:var(--felt) center/66px auto,var(--water);--tk:#FBF7EC}
.look-ticket .dstrip{position:relative;margin:22px 14px 26px;background:var(--tk);border-radius:4px;filter:drop-shadow(0 7px 0 rgba(4,40,80,.35))}
/* torn edges top and bottom */
.look-ticket .dstrip::before,.look-ticket .dstrip::after{content:"";position:absolute;left:0;right:0;height:9px;
  background:linear-gradient(-45deg,var(--tk) 6px,transparent 0),linear-gradient(45deg,var(--tk) 6px,transparent 0);background-size:12px 12px}
.look-ticket .dstrip::before{top:-8px;background-position:left bottom;transform:scaleY(-1)}
.look-ticket .dstrip::after{bottom:-8px;background-position:left top}
.look-ticket .dhero{padding:14px 14px 0}
.look-ticket .dart img{display:block;width:100%;max-height:40vh;object-fit:contain;border-radius:3px;background:#111}
.look-ticket .dart.logo img{background:#fff;max-height:110px}
.look-ticket .dstub{padding:14px 4px 16px}
.look-ticket .tserial{margin:0 0 4px;font-weight:800;font-size:12px;color:var(--red);letter-spacing:.04em}
.look-ticket .trow{display:flex;align-items:stretch;gap:12px;margin-top:12px}
.look-ticket .tdate{display:flex;align-items:center;gap:8px;padding:6px 12px 4px 10px;border-radius:8px;background:var(--ink);color:#fff}
.look-ticket .tdate b{font-size:38px;font-weight:900;line-height:1}
.look-ticket .tdate span{font-weight:800;font-size:13px;line-height:1.2}
.look-ticket .tdate.trun{padding:8px 12px}
.look-ticket .tfacts{display:flex;gap:16px;margin:0;align-items:center}
.look-ticket .tfacts dt{font-size:12px;font-weight:800;color:var(--muted)}
.look-ticket .tfacts dd{margin:1px 0 0;font-weight:900;font-size:18px}
.look-ticket .tvenue{display:flex;align-items:center;gap:8px;margin-top:12px;font-weight:800;font-size:15px}
.look-ticket .tvenue .vlogo{height:28px;min-width:28px}
/* each section is a stub along the same ticket, torn off along a perforation */
.look-ticket .dsec{position:relative;padding:22px 18px 12px}
.look-ticket .dsec::before{content:"";position:absolute;left:16px;right:16px;top:0;border-top:2.5px dashed rgba(38,41,44,.28)}
.look-ticket .dsec::after{content:"";position:absolute;left:-11px;right:-11px;top:-11px;height:22px;pointer-events:none;
  background:radial-gradient(circle at 11px 11px,var(--water) 10px,transparent 10.5px) left/22px 22px no-repeat,radial-gradient(circle at 11px 11px,var(--water) 10px,transparent 10.5px) right/22px 22px no-repeat}
.look-ticket .dfare .frow{background:var(--tk)}
.look-ticket .dfare .fdeal{background:#FFEFB0}
.look-ticket .dfare .fboard{box-shadow:inset 0 0 0 1.5px rgba(38,41,44,.22)}
.look-ticket .dbar .dgo{background:var(--red)}
/* tickets: venue first, resale only when it undercuts */
.fboard{margin:0 0 6px;padding:0;list-style:none;border-radius:10px;overflow:hidden;box-shadow:inset 0 0 0 1.5px rgba(38,41,44,.18)}
.frow{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:10px;padding:11px 12px;background:#fff}
.frow+.frow{border-top:1.5px solid rgba(38,41,44,.12)}
.fwho b{display:block;font-size:15px}
.rlogo{display:inline-flex;padding:3px;margin:-3px -3px 0;border-radius:5px;line-height:0}
.rlogo img{display:block;height:24px;width:auto}
.rlogo:focus-visible{outline:3px solid var(--gold);outline-offset:2px}
.fwho small{display:block;font-size:12.5px;color:var(--muted);margin-top:1px}
.fprice{font-weight:900;font-size:20px;text-align:right;line-height:1.1}
.fprice em{display:block;font-style:normal;font-weight:800;font-size:12px;color:#1D6B33}
.fbuy{font-weight:900;font-size:13px;text-decoration:none;padding:8px 11px 6px;border-radius:8px;color:var(--ink);box-shadow:inset 0 0 0 1.5px rgba(38,41,44,.3)}
.fdeal{background:#FFF6D1}
.fdeal .fbuy{background:var(--ink);color:#fff;box-shadow:none}
.fnote{font-size:13px !important;line-height:1.45 !important;color:var(--muted);margin:6px 0 4px !important}
.fsample{display:inline-block;vertical-align:2px;margin-left:6px;padding:2px 7px 1px;border-radius:999px;font-size:11px;font-weight:900;color:#5A4500;background:#FFE58A}
.fbuy:focus-visible{outline:3px solid var(--gold);outline-offset:2px}

/* venue line: logo badge, venue, time */
.vlogo{flex:none;display:grid;place-items:center;height:24px;min-width:24px;max-width:64px;padding:2px;border-radius:5px;background:#fff;box-shadow:inset 0 0 0 1px rgba(38,41,44,.16);overflow:hidden}
.vlogo img{max-height:20px;max-width:60px;object-fit:contain;display:block}
.vlogo.dark{background:var(--ink)}
.vlogo.mono{width:24px;font-weight:900;font-size:10px;letter-spacing:.02em;color:#fff;background:var(--steel);box-shadow:none}
.vlogo.sm{height:18px;min-width:18px;max-width:40px;border-radius:4px}
.vlogo.sm img{max-height:14px;max-width:36px}
.vlogo.sm.mono{width:18px;font-size:8px}

/* event tags */
.tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}
.tags span{font-size:10.5px;font-weight:700;line-height:1;padding:4px 6px 3px;border-radius:4px;background:rgba(38,41,44,.06);color:var(--ink);box-shadow:inset 0 0 0 1px rgba(38,41,44,.2)}
.tags span.age{background:var(--ink);color:#fff;box-shadow:none}
.tags span.free{background:#2E7D4F;color:#fff;box-shadow:none}

/* dibs is a Pittsburgh parking chair */
.chair{flex:none;margin-left:auto;width:44px;height:44px;border-radius:10px;border:0;cursor:pointer;display:grid;place-items:center;color:#EBD27A;background:#3B3F43;box-shadow:inset 0 0 0 1.5px #26292C}
.chair svg{width:32px;height:32px}
.chair[aria-pressed="true"]{color:var(--ink);background:var(--gold);box-shadow:inset 0 0 0 1.5px var(--gold-deep);--chair-fill:#FBFAF6}
.chair.sm{width:36px;height:36px}.chair.sm svg{width:26px;height:26px}
/* touch targets reach 44px without changing how the controls look */
.fbuy{display:inline-grid;place-items:center;min-height:44px;padding-top:0;padding-bottom:0}
/* Ticketmaster's terms want its logo prominent where its tickets sell; it stands in for the seller name. */
.primary-provider-logo{display:inline-flex;line-height:0;margin:0 0 6px}
.primary-provider-logo img{display:block;height:32px;width:auto;max-width:none;flex-shrink:0}
/* the full-size logo keeps clear of the price and buy button on narrow boards */
.frow:has(.primary-provider-logo){grid-template-columns:1fr auto}
.fwho:has(.primary-provider-logo){grid-column:1 / -1}
.dsource a{font-size:14px;font-weight:700;color:var(--muted)}
.dsource a::after{content:" \2197"}

/* ---------- the standalone page: one ticket floating on the river ---------- */
.event-detail-page main{background:var(--felt,url(/river/assets/river-felt-flare.webp)) center/66px auto,#196CB2}
.event-detail-page .look-ticket{font-family:Overpass,sans-serif;color:var(--ink)}
.event-detail-page .look-ticket .dbody{padding:6px 0 10px}
.event-detail-page .dstrip{max-width:680px;margin:28px auto 30px}
@media (max-width:720px){.event-detail-page .dstrip{margin:22px 14px 26px}}
.event-detail-page .dart img{max-height:60vh}
.event-detail-page .dbar{position:sticky;bottom:0;z-index:5;max-width:680px;margin:0 auto;box-sizing:border-box;border-radius:12px 12px 0 0}
.event-detail-page .dbar:empty{display:none}
.event-detail-page .dbar .dgo{color:#fff}
.twhen{margin:6px 0 0;font-weight:800;font-size:15px;color:var(--muted)}
.dpast{margin:14px 0 0;font-weight:800;font-size:15px;line-height:1.45}
.dpast a{color:var(--steel)}
.dsharerow{margin-top:12px}
.dsharerow button{font:inherit;font-weight:800;color:var(--steel);background:none;border:0;padding:0;cursor:pointer;text-decoration:underline}
.dsharestatus{margin:8px 0 0;font-weight:700;font-size:14px}
.event-sub .kicker{margin:0 0 4px;font-weight:800;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--red)}
.event-sub .row{display:flex;gap:8px;flex-wrap:wrap}
.event-sub input[type=email]{flex:1 1 220px;min-height:44px;box-sizing:border-box;padding:10px 12px;border:1.5px solid rgba(38,41,44,.35);border-radius:10px;font:inherit;background:#fff}
.event-sub button{min-height:44px;padding:10px 16px;border:0;border-radius:10px;background:var(--gold);color:var(--ink);font:inherit;font-weight:800;cursor:pointer}
.event-sub [data-subscribe-status]{margin:10px 0 0;font-size:14px}
.tfoot{max-width:680px;margin:0 auto 18px;padding:0 14px;color:#fff;font-weight:700;font-size:14px}
.tfoot a{display:inline-flex;align-items:center;min-height:44px;color:#fff}
/* Tap targets (#2647): bare text links get invisible hit areas, the layout stays put */
.event-detail-page :is(.dlinks a,.dmore a){position:relative}
.event-detail-page :is(.dlinks a,.dmore a)::after{content:"";position:absolute;inset:-12px -2px}
.dsharerow :is(a,button){display:inline-flex;align-items:center;min-height:44px}
.dsource a{display:inline-flex;align-items:center;min-height:44px}
.event-detail-page :is(a,button):focus-visible{outline:3px solid var(--gold);outline-offset:2px}


/* Standalone Media Ticket. Every rule is scoped: River retains its original sheet. */
.event-detail-page {--ticket-paper:#fbf7ec;--ticket-ink:#172b3b;--ticket-blue:#196cb2;--ticket-red:#b93227;--ticket-gold:#efbd4e}
.event-detail-page main {padding:0 0 36px;background:var(--felt,url(/river/assets/river-felt-flare.webp)) center/66px auto,var(--ticket-blue)}
.event-detail-page .site-header .bar {max-width:1240px}
.ticket-wrap {max-width:1240px;margin:auto;padding:18px 22px 0}
.ticket-back {display:inline-flex;align-items:center;gap:5px;min-height:44px;color:#fff;font-weight:700;text-underline-offset:4px}
.ticket-icon {display:inline-block;flex:none;width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle}
.ticket-symbols {position:absolute;overflow:hidden}
.event-detail-page .media-ticket {display:grid;grid-template-columns:96px minmax(0,1fr) 316px;grid-template-areas:'date info fare' 'date info actions' 'media media media' 'venue venue venue' 'more more more' 'sub sub sub' 'legal legal legal';font-family:var(--body,'Karla',sans-serif);color:var(--ticket-ink);gap:0;align-items:stretch;position:relative;isolation:isolate}
.media-ticket * {box-sizing:border-box}
.media-ticket [hidden] {display:none!important}
.media-ticket ::selection {background:#efbd4e;color:#172b3b}
.media-ticket :is(h1,h2,h3,p) {margin:0}
.media-ticket :is(h1,h2,h3) {color:var(--ticket-ink)}
.media-ticket :is(h2,h3) {font-family:var(--display,'Alfa Slab One',Georgia,serif);font-size:18px;font-weight:400;line-height:1.35}
.media-ticket a {text-underline-offset:4px}
.media-ticket :is(button,a,[tabindex]):focus-visible {outline:3px solid #a62c22;outline-offset:4px}
.media-ticket .ticket-date {grid-area:date;background:var(--ticket-gold);padding:25px 10px 16px;text-align:center;border-right:2px dashed #a27625;border-radius:12px 0 0 12px;position:relative;display:flex;flex-direction:column;justify-content:space-between;gap:20px}
.ticket-date::before,.ticket-date::after {content:'';position:absolute;right:-12px;width:22px;height:22px;border-radius:50%;background:var(--ticket-blue);z-index:2;pointer-events:none}
.ticket-date::before {top:-11px}.ticket-date::after {bottom:-11px}
.ticket-calendar {display:flex;flex-direction:column;align-items:center;gap:8px}
.ticket-calendar time {display:flex;flex-direction:column;align-items:center;line-height:1.05}
.ticket-calendar time span {font-size:16px;font-weight:800;letter-spacing:.05em}
.ticket-calendar time b {font-size:42px;line-height:1.1;font-weight:800;font-variant-numeric:tabular-nums}
.ticket-calendar time small {font-size:13px;font-weight:700;margin-top:5px}
.date-through {font-size:24px;line-height:1}.date-years {font-size:14px;font-weight:800;max-width:100%}
.media-ticket .tserial {font-size:10px;line-height:1.4;overflow-wrap:anywhere;color:#4e380e;letter-spacing:.02em}
.date-pending {font-weight:700;font-size:15px;line-height:1.4}
.media-ticket .ticket-info {grid-area:info;background:var(--ticket-paper);padding:25px 26px 28px;border-right:2px dashed #d1b56f;min-width:0;position:relative}
.media-ticket h1 {font-family:var(--display,'Alfa Slab One',Georgia,serif);font-size:clamp(24px,2.5vw,36px);font-weight:400;line-height:1.17;letter-spacing:-.025em;overflow-wrap:anywhere;text-wrap:balance;margin-bottom:16px}
.ticket-facts {display:grid;gap:7px;font-size:16px;line-height:1.3}
.ticket-facts p {display:flex;align-items:center;gap:8px}
.media-ticket .ticket-facts .tvenue {margin:0;font-size:16px;font-weight:700}
.ticket-facts .ticket-icon {color:#176ba8}
.ticket-source {padding-left:29px;font-size:14px;color:#365469}
.media-ticket .tags {margin-top:12px;gap:6px}
.media-ticket .tags span {font-size:12px;line-height:1.25;padding:4px 7px;background:#ece6d7;color:#314453;box-shadow:none}
.media-ticket .dabout {margin-top:20px;padding-top:12px;border-top:1px solid #d8d2c2}
.about-heading {display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:7px}
.media-ticket .dsource {font-size:13px;font-weight:700;min-height:28px;display:inline-flex;align-items:center;gap:3px;color:#175b88}
.media-ticket .dsource .ticket-icon {width:14px;height:14px}
.about-copy {font-size:16px;line-height:1.5;max-height:4.5em;overflow:auto;scrollbar-width:thin;scrollbar-color:#a8a28f transparent;padding-right:8px;overscroll-behavior:auto;max-width:70ch;background:transparent;border:0;border-radius:0}
.about-copy p+p {margin-top:.5em}
.about-copy::-webkit-scrollbar {width:4px}.about-copy::-webkit-scrollbar-thumb {background:#a8a28f;border-radius:3px}
.media-ticket .dpast {margin-top:16px;font-size:15px;color:#7c2920}
.media-ticket .ticket-fare {grid-area:fare;background:var(--ticket-paper);padding:24px 20px 14px;border-radius:0 12px 0 0;min-width:0;scroll-margin-top:25px}
.media-ticket .ticket-fare h3 {margin-bottom:14px}
.media-ticket .fboard {border-radius:0;box-shadow:none;margin:0;overflow:visible}
.media-ticket .frow,.media-ticket .frow:has(.primary-provider-logo) {display:block;padding:0;background:transparent;border-top:1px solid #ded7c6;box-shadow:none;grid-template-columns:none}
.media-ticket .frow:first-child {border-top:0}
.media-ticket .seller-link {display:grid;grid-template-columns:minmax(0,1fr) auto 17px;gap:10px;align-items:center;min-height:66px;padding:12px 0;text-decoration:none;color:var(--ticket-ink);border-radius:0;box-shadow:none;font-family:inherit;line-height:1.25}
.media-ticket .seller-link:hover {color:#914022;background:#f1ead8}
.media-ticket .seller-link .ticket-icon {width:16px;height:16px}
.media-ticket .fwho b {font-size:15px}.media-ticket .fwho small {display:block;font-size:12px;line-height:1.35;color:#4e616a;margin-top:3px}
.media-ticket .fprice {font-size:22px;font-weight:800;font-variant-numeric:tabular-nums;max-width:110px;overflow-wrap:anywhere}
.media-ticket .fprice em {font-size:11px;line-height:1.4;color:#265c35;margin-top:4px}
.media-ticket .primary-provider-logo {max-width:100%;margin:0 0 5px}
.media-ticket .primary-provider-logo img {max-width:100%;width:160px;height:auto}
.media-ticket .seller-mark {display:block;height:24px;width:auto;max-width:110px;margin-bottom:5px}
.media-ticket .fnote {font-size:12px!important;line-height:1.45!important;color:#50616b;margin-top:10px}
.ticket-details-link {font-weight:700;color:#175b88;display:inline-flex;align-items:center;gap:6px;min-height:44px}
.media-ticket .ticket-actions {grid-area:actions;position:relative;bottom:auto;z-index:4;display:flex;gap:10px;align-items:center;max-width:none;width:auto;margin:0;padding:12px 18px 16px;background:var(--ticket-paper);border:0;border-radius:0 0 12px 0;align-self:end;flex-wrap:wrap}
.media-ticket .ticket-actions .chair,.media-ticket .ticket-actions .dshare {display:inline-flex;flex:1 1 60px;justify-content:center;align-items:center;gap:5px;width:auto;height:auto;min-height:46px;padding:8px 0;background:none;border:0;box-shadow:none;color:var(--ticket-ink);border-radius:6px;font:inherit;font-size:14px;font-weight:700;margin:0;cursor:pointer}
.media-ticket .ticket-actions .chair {color:var(--ticket-red)}
.media-ticket .ticket-actions .chair svg {width:26px;height:26px}
.media-ticket .ticket-actions .chair[aria-pressed=true] {background:#f4dfd0}
.media-ticket .ticket-actions .dgo {flex:1.4 1 90px;display:flex;justify-content:center;align-items:center;min-height:46px;padding:10px 14px;font-size:15px;font-weight:800;background:var(--ticket-red);color:#fff;border-radius:7px;text-decoration:none}
.media-ticket .dsharestatus {flex-basis:100%;font-size:13px;line-height:1.35;color:#21455c;margin:0}
.event-detail-page .media-ticket .fboard {box-shadow:none}
.media-ticket .ticket-tv {grid-area:media;margin-top:22px;padding:15px 16px 12px;display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,33%);gap:12px 20px;background-color:#613b27;background-image:var(--ticket-wood,none);background-size:480px;border-radius:21px;box-shadow:inset 0 0 0 3px #382315,inset 0 0 0 6px #9b6d43,0 8px 20px #10334b38;min-width:0;position:relative}
.ticket-tv>h2 {grid-column:1/-1;justify-self:start;background:#ead3a3;color:#30210f;padding:3px 15px;font-size:15px;letter-spacing:.02em;border:1px solid #34230d;border-radius:3px;box-shadow:inset 0 0 0 2px #f6e5bf}
.tv-screen-panel {min-width:0;background:#22282a;border:3px solid #242927;border-radius:25px;padding:10px 10px 0;box-shadow:0 0 0 2px #a99b78,inset 0 0 0 2px #565c56}
.gallery-stage {position:relative;aspect-ratio:16/9;border-radius:16px;overflow:hidden;background:#101619;touch-action:pan-y pinch-zoom}
.gallery-slide {position:absolute;inset:0;display:grid;grid-template:minmax(0,1fr)/minmax(0,1fr);place-items:center;background:#101619;min-width:0}
.gallery-poster {display:block;width:100%;height:100%;object-fit:contain;background:#101619;user-select:none;-webkit-user-drag:none}
.gallery-play {position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:62px;height:62px;border:2px solid #fff;border-radius:50%;background:var(--ticket-red);color:#fff;display:grid;place-items:center;cursor:pointer}
.gallery-play .ticket-icon {width:27px;height:27px;fill:currentColor;stroke-width:1.5;margin-left:4px}
.gallery-playback {position:absolute;inset:0;background:#101619;display:grid;place-items:center;z-index:2}
.gallery-playback iframe {width:100%;height:100%;border:0}
.gallery-playback audio {width:85%;max-width:420px}
.gallery-slide[data-kind=song] .gallery-playback {background:transparent;align-items:end;padding-bottom:24px}
/* Song slides: the Apple cover is the sleeve and the record's label, and, blurred, fills the screen.
   Play draws the record out of its sleeve; it turns at 33 1/3 rpm only while sound plays. */
.song-backdrop {position:absolute;left:-8%;top:-8%;width:116%;height:116%;max-width:none;object-fit:cover;filter:blur(20px) saturate(1.15) brightness(.42);pointer-events:none}
.song-deck {position:relative;height:70%;aspect-ratio:1;transition:transform .45s cubic-bezier(.2,.7,.2,1)}
.song-deck.has-art {aspect-ratio:1.7;transform:translateX(13.5%)}
.song-sleeve {position:absolute;left:0;top:0;z-index:2;width:58.82%;height:100%;object-fit:cover;border-radius:3px;box-shadow:0 12px 26px #000b,0 0 0 1px #ffffff1f}
.song-slot {position:absolute;inset:0;transition:left .45s cubic-bezier(.2,.7,.2,1)}
.song-deck.has-art .song-slot {inset:auto;top:3%;left:17.6%;width:55.3%;height:94%}
/* The audio bar takes the bottom ~100px while playing; the deck shrinks to the room above it. */
.gallery-slide.is-playing .song-deck {align-self:start;margin-top:12px;height:min(70%,calc(100% - 104px))}
.gallery-slide.is-playing .song-deck.has-art .song-slot {left:42.9%}
/* Light falls on the record from one side, so the sheen stays put while the disc turns. */
.song-slot::after {content:"";position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 20deg,#fff0 0 8%,#ffffff26 14%,#fff0 21% 55%,#ffffff1c 63%,#fff0 70%);pointer-events:none}
.gallery-record {width:100%;height:100%;border-radius:50%;display:grid;grid-template:minmax(0,1fr)/minmax(0,1fr);place-items:center;background:repeating-radial-gradient(circle,#191b1d 0 1.5px,#25282a 1.5px 3px);box-shadow:0 0 0 1px #000,0 10px 22px #0009;color:#343737;animation:record-spin 1.8s linear infinite paused}
.gallery-slide.is-spinning .gallery-record {animation-play-state:running}
@keyframes record-spin {to {transform:rotate(1turn)}}
.gallery-record>* {grid-area:1/1}
.record-label {width:38%;height:38%;border-radius:50%;object-fit:cover}
.record-cap {display:grid;place-items:center;width:38%;aspect-ratio:1;border-radius:50%;background:#ecd391}
.record-cap .ticket-icon {width:46%;height:auto;aspect-ratio:1}
.song-deck.has-art .record-cap {width:14%;background:#f3e6c4;box-shadow:0 0 0 2px #0007}
.song-deck.has-art .record-cap .ticket-icon {width:64%;stroke-width:2.4}
@media (prefers-reduced-motion:reduce) {.gallery-record {animation:none}.song-deck,.song-slot {transition:none}}
/* Instagram's embed is a portrait card at least 326px wide, so the screen grows to hold it while it plays.
   Keep the source link outside the embedded card, including while it loads. */
.media-ticket .ticket-tv .gallery-stage.is-portrait {aspect-ratio:auto;height:min(80vh,700px);max-height:none}
.gallery-slide[data-kind=instagram] .gallery-playback iframe {width:min(400px,100%);background:#fff}
.gallery-slide.is-playing[data-kind=instagram] .gallery-playback {bottom:54px}
.gallery-loading {position:absolute;bottom:35px;left:9px;z-index:3;color:#fff;font-size:13px;pointer-events:none}
.gallery-flyer-open {position:absolute;bottom:10px;left:10px;z-index:3;border:0;border-radius:4px;background:#101619eF;color:#fff;font:inherit;font-size:14px;font-weight:700;padding:10px 12px;cursor:pointer}
.gallery-flyer-open:focus-visible {outline:3px solid #fff;outline-offset:2px}
.ticket-terms {font-size:13px;line-height:1.45;margin-top:10px;color:#344d5b}
.gallery-thumbs .thumb-art:not(:has(img)) {aspect-ratio:16/9;background:#15272e;border-radius:4px}
.gallery-prev,.gallery-next {position:absolute;top:50%;transform:translateY(-50%);z-index:4;width:44px;height:44px;border:0;border-radius:50%;display:grid;place-items:center;color:#162b3b;background:#fff8e9;cursor:pointer}
.gallery-prev {left:10px}.gallery-next {right:10px}
.gallery-source {position:absolute;bottom:8px;left:9px;z-index:3;background:#101619dc;color:#fff;font-size:12px;padding:6px 8px;border-radius:4px}
.gallery-source .ticket-icon {width:13px;height:13px}
.gallery-external {display:inline-flex;align-items:center;gap:8px;position:absolute;z-index:3;color:#fff;background:#172b3be8;padding:12px;font-weight:700;text-align:center}
.gallery-caption {display:flex;justify-content:space-between;align-items:center;gap:14px;color:#fff6df;font-size:13px;line-height:1.4;min-height:35px;padding:7px 7px 6px}
.gallery-caption [data-gallery-caption] {overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gallery-caption [data-gallery-count] {white-space:nowrap;font-variant-numeric:tabular-nums}
.tv-controls {display:grid;grid-template-columns:minmax(0,1fr) 58px;gap:12px;min-width:0;background:#eddfbf;padding:12px;border-radius:12px;box-shadow:inset 0 0 0 2px #af9465}
.gallery-thumbs {display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;gap:12px 8px;min-width:0;max-height:360px;overflow:auto;scrollbar-width:thin;scrollbar-color:#a48a5e transparent}
.gallery-thumbs button {display:block;min-width:0;border:0;padding:3px;background:none;color:#252b29;border-radius:5px;cursor:pointer;text-align:left;font:inherit;font-size:12px;line-height:1.25}
.gallery-thumbs button[aria-pressed=true] {background:#1d6696;color:#fff}
.gallery-thumbs button>img,.thumb-music {display:block;width:100%;aspect-ratio:16/9;object-fit:contain;background:#15272e;border-radius:4px}
.gallery-thumbs button>span:last-child {display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;padding:5px 2px 2px;overflow-wrap:anywhere}
.thumb-music {display:grid;place-items:center;background:#374450;color:#f3ddb1}.thumb-music .ticket-icon {width:28px;height:28px}
.tv-hardware {display:flex;flex-direction:column;gap:14px;align-items:center;padding-top:6px}
.tv-dial {width:42px;height:42px;background:#d4b77a;border:5px double #634827;border-radius:50%;box-shadow:2px 3px 4px #402c2070;position:relative}
.tv-dial::before {content:'';width:2px;height:15px;background:#563c1c;position:absolute;left:50%;top:0}
.tv-dial.small {width:30px;height:30px}
.tv-speaker {flex:1;min-height:80px;width:100%;border:3px double #ba9c65;border-radius:4px;background:repeating-linear-gradient(0deg,#26251e 0 2px,#9c8051 2px 3px)}
.gallery-hint {grid-column:1/-1;text-align:center;font-size:12px;color:#fff2d4}
.gallery-status {grid-column:1/-1;font-size:13px;color:#fff2d4;line-height:1.35}.gallery-status:empty {display:none}
.media-ticket .ticket-map {grid-area:venue;margin-top:22px;padding:24px;display:grid;grid-template-columns:minmax(190px,.8fr) minmax(260px,1.2fr) minmax(170px,.8fr);gap:24px;background-color:#f4eddb;background-image:var(--ticket-map-paper,none);background-size:cover;border-radius:8px;min-width:0;box-shadow:0 5px 12px #133c5730}
.ticket-map:has(.map-address):not(:has(.map-more)) {grid-template-columns:minmax(190px,.7fr) minmax(260px,1.3fr)}
.ticket-map h3 {margin-bottom:12px}.map-address p {font-size:16px;line-height:1.5;margin-bottom:12px}
.media-ticket .ticket-map .dlinks {display:flex;flex-direction:column;gap:8px;font-size:14px}
.media-ticket .ticket-map a {color:#165a87}.media-ticket .ticket-map .dlinks a {display:inline-flex;align-items:center;gap:5px;min-height:44px}
.event-detail-page .media-ticket .dlinks a::after,.event-detail-page .media-ticket .dmore a::after {display:none}
.venue-map-panel {position:relative;min-width:0;min-height:240px;border-radius:5px;overflow:hidden;background:#e5e4cf}
.venue-map-canvas {position:absolute;inset:0;min-height:240px;background:#e5e4cf}
.map-fallback {min-height:240px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:22px;text-align:center;background-color:#ebe6d2;background-image:var(--ticket-map-paper,none);background-size:cover}
.map-fallback>.ticket-icon {width:34px;height:34px;color:#b93227}.map-fallback>a {font-size:14px;font-weight:700;min-height:44px;display:flex;align-items:center;justify-content:center}
.map-status {position:relative;margin:0;padding:8px;font-size:13px;background:#f8f2e4}.map-status:empty {display:none}
.media-ticket .map-more {border-left:1px solid #c8bea7;padding-left:20px;min-width:0}
.media-ticket .dmore li {font-size:15px}.media-ticket .dmore a {display:inline-block;min-height:44px;line-height:1.35;padding:6px 0}
.media-ticket .dmore span {font-size:13px;line-height:1.4;color:#475d65}
.ticket-more {grid-area:more;margin-top:22px;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:24px;padding:24px;background:var(--ticket-paper);border-radius:8px;min-width:0}
.ticket-more h3 {margin-bottom:12px}.ticket-more ul {list-style:none;padding:0;margin:0}
.ticket-more .dlinks {margin-top:14px}.ticket-more .dlinks a {display:inline-flex;align-items:center;gap:5px;min-height:44px}
.ticket-sub {grid-area:sub;margin-top:22px;padding:24px;background:var(--ticket-paper);border-radius:8px}.ticket-sub>p {margin:10px 0 16px}
.ticket-legal {grid-area:legal;display:flex;gap:20px;flex-wrap:wrap;padding:18px 0;font-size:13px}.ticket-legal a {color:#fff;display:inline-flex;align-items:center;min-height:44px}
.ticket-honeypot {position:absolute;left:-9999px;width:1px;height:0}
@media(max-width:1020px){
 .event-detail-page .media-ticket {grid-template-columns:78px minmax(0,1fr) 265px}
 .media-ticket .ticket-info {padding:22px 20px}.media-ticket h1 {font-size:28px}
 .media-ticket .ticket-fare {padding:22px 15px 10px}.media-ticket .ticket-actions {padding:10px 12px 14px;gap:5px}
 .media-ticket .ticket-map {grid-template-columns:minmax(180px,.7fr) minmax(240px,1.3fr)}
 .media-ticket .map-more {grid-column:1/-1;border-left:0;border-top:1px solid #c8bea7;padding:18px 0 0}
 .tv-controls {grid-template-columns:minmax(0,1fr) 36px;padding:9px;gap:8px}.tv-dial {width:32px;height:32px}.tv-dial.small {width:26px;height:26px}
}
@media(max-width:720px),(max-width:960px) and (max-height:500px){
 .event-detail-page {padding-bottom:calc(var(--ticket-tray-height,80px) + 16px);background:var(--porch)}
 .event-detail-page main {padding-bottom:36px}
 .event-detail-page .site-header .bar {padding:10px 16px;gap:14px;min-width:0}
 .event-detail-page .site-header .bar-mark {flex:none;font-size:23px}
 .event-detail-page .site-header .bar-mark span {display:none}
 .event-detail-page .site-header nav {display:flex;overflow-x:auto;white-space:nowrap;min-width:0;max-width:100%;scrollbar-width:none;gap:14px}
 .event-detail-page .site-header nav a {font-size:12px;min-height:44px;display:flex;align-items:center;flex:none}
 .ticket-wrap {padding:6px 12px 0}.ticket-back {font-size:14px}
 .event-detail-page .media-ticket {grid-template-columns:66px minmax(0,1fr);grid-template-areas:'date info' 'media media' 'fare fare' 'venue venue' 'more more' 'sub sub' 'legal legal'}
 .media-ticket .ticket-date {padding:22px 7px 12px;border-radius:10px 0 0 10px;gap:12px}.ticket-calendar {gap:9px}.ticket-calendar time b {font-size:35px}.ticket-calendar time span {font-size:13px}.date-years {font-size:12px}.ticket-calendar time small {font-size:11px}
 .ticket-date::before,.ticket-date::after {width:18px;height:18px;right:-10px}.ticket-date::before {top:-9px}.ticket-date::after {bottom:-9px}
 .media-ticket .ticket-info {padding:20px 15px 18px;border-right:0;border-radius:0 10px 10px 0}
 .media-ticket h1 {font-size:clamp(21px,5.4vw,27px);line-height:1.17;margin-bottom:14px;text-wrap:initial}
 .ticket-facts,.media-ticket .ticket-facts .tvenue {font-size:14px}.ticket-facts p {gap:6px;align-items:flex-start}.ticket-facts .ticket-icon {width:17px;height:17px}.ticket-source {font-size:12px;padding-left:23px}
 .media-ticket .tags span {font-size:10px;padding:3px 5px}.media-ticket .tags {margin-top:10px}
 .media-ticket .dabout {margin-top:14px;padding-top:10px}.about-heading {gap:4px 12px;margin-bottom:5px}.media-ticket .about-heading h3 {font-size:16px}.media-ticket .dsource {font-size:12px}
 .about-copy {font-size:14px;line-height:1.5;max-height:4.5em;padding-right:5px}
 .media-ticket .ticket-tv {margin-top:17px;padding:12px 10px 10px;grid-template-columns:minmax(0,1fr);gap:12px;border-radius:16px}
 .ticket-tv>h2 {font-size:13px;padding:3px 12px}.tv-screen-panel {border-radius:19px;padding:7px 7px 0}.gallery-stage {border-radius:12px}
 .gallery-prev,.gallery-next {width:38px;height:44px;border-radius:7px}.gallery-prev {left:4px}.gallery-next {right:4px}.gallery-play {width:51px;height:51px}
 .gallery-caption {font-size:12px;gap:8px;padding:7px 2px;min-height:33px}.gallery-source {font-size:11px;bottom:5px;left:5px;padding:5px 6px}
 .tv-controls {grid-template-columns:minmax(0,1fr) 30px;gap:8px;padding:9px;border-radius:8px}.gallery-thumbs {display:flex;gap:7px;overflow-x:auto;overflow-y:hidden;max-height:none;scroll-snap-type:x proximity;scrollbar-width:thin}
 .gallery-thumbs button {flex:0 0 80px;scroll-snap-align:start;font-size:11px}.gallery-thumbs button>span:last-child {line-height:1.3}
 .tv-hardware {gap:10px;padding-top:4px}.tv-dial {width:25px;height:25px;border-width:4px}.tv-dial.small {width:21px;height:21px}.tv-dial::before {height:10px}.tv-speaker {min-height:30px;border-width:2px}
 .gallery-hint {font-size:11px}.media-ticket .ticket-fare {margin-top:17px;padding:20px 19px;border-radius:10px;min-height:70px}
 .media-ticket .seller-link {min-height:65px}.media-ticket .fprice {font-size:23px}.media-ticket .fwho b {font-size:16px}.media-ticket .primary-provider-logo img {width:170px}
 .media-ticket .ticket-actions {position:fixed;left:0;right:0;bottom:0;display:flex;flex-wrap:wrap;z-index:20;padding:10px max(14px,env(safe-area-inset-left)) calc(10px + env(safe-area-inset-bottom));gap:10px;margin:0;width:100%;border-radius:12px 12px 0 0;box-shadow:0 -3px 16px #18394e26;border-top:1px solid #cfc7b3}
 .media-ticket .ticket-actions .chair,.media-ticket .ticket-actions .dshare {flex:1 1 60px;min-height:46px;font-size:14px}.media-ticket .ticket-actions .dgo {flex:1.6 1 110px;min-height:46px}
 .media-ticket .ticket-actions .dsharestatus {font-size:12px;max-height:45px;overflow:auto}
 .media-ticket .ticket-map,.ticket-map:has(.map-address):not(:has(.map-more)) {margin-top:17px;padding:20px;grid-template-columns:minmax(0,1fr);gap:18px}
 .media-ticket .ticket-map .dlinks {flex-direction:row;flex-wrap:wrap;gap:6px 17px}.map-address p {font-size:15px}.media-ticket .map-more {grid-column:auto}
 .venue-map-panel,.venue-map-canvas,.map-fallback {min-height:240px}.ticket-more {grid-template-columns:minmax(0,1fr);padding:20px;margin-top:17px}
 .ticket-sub {padding:20px}.ticket-legal {padding-bottom:20px}.media-ticket .ticket-fare {scroll-margin-bottom:110px}
}
@media(prefers-reduced-motion:reduce){.media-ticket * {scroll-behavior:auto!important}}

.media-ticket .gallery-stage:focus-visible,.media-ticket .gallery-play:focus-visible,.media-ticket .gallery-prev:focus-visible,.media-ticket .gallery-next:focus-visible {outline:3px solid #efbd4e;outline-offset:-5px}

/* Polish pass, matched to the approved Media Ticket concept.
   About is its own grid item so phones can give it the ticket's full width; on wide screens a
   flyer that fits prints on the ticket between About and the seller stub. */
.event-detail-page .media-ticket {grid-template-columns:96px minmax(0,1fr) auto 316px;grid-template-rows:auto 1fr;grid-template-areas:'date info poster fare' 'date about poster actions' 'media media media media' 'venue venue venue venue' 'more more more more' 'sub sub sub sub' 'legal legal legal legal'}
.media-ticket .ticket-date {border-right:3px dotted #a27625;justify-content:flex-start;gap:0}
.media-ticket .tserial {margin-top:auto;padding-top:10px}
.ticket-date::before,.ticket-date::after {right:-9.5px}
.media-ticket .ticket-info {border-right:0;padding-bottom:18px}
.media-ticket .dabout {grid-area:about;position:relative;min-width:0;margin:0;padding:0 26px 26px;border:0;background:var(--ticket-paper)}
.media-ticket .about-heading {border-top:1px solid #d8d2c2;padding-top:14px}
.media-ticket .ticket-source {padding-left:0}
/* The flyer bleeds through its section, top edge to bottom edge; the script sets the width to the flyer's shape. */
/* --poster-gap keeps the flyer off the perforation on its right; event-gallery.js adds it to the column. */
.ticket-poster {--poster-gap:14px;grid-area:poster;display:none;position:relative;min-width:0;width:var(--poster-w,260px);min-height:300px;background:var(--ticket-paper)}
.poster-open {position:absolute;inset:0 var(--poster-gap) 0 0;display:block;width:auto;height:auto;padding:0;border:0;background:none;overflow:hidden;cursor:zoom-in}
.poster-open img {position:relative;display:block;width:100%;height:100%;object-fit:contain}
/* A flyer that doesn't match its column's shape sits on a blurred copy of itself, never on bare paper. */
.poster-open .poster-fill {position:absolute;left:-24px;top:-24px;width:calc(100% + 48px);height:calc(100% + 48px);max-width:none;object-fit:cover;filter:blur(18px) saturate(1.15) brightness(.6)}
.media-ticket .poster-open:focus-visible {outline-offset:-5px}
.poster-dialog {margin:auto;padding:0;border:0;background:transparent;max-width:min(92vw,900px);max-height:94vh;overflow:visible}
.poster-dialog::backdrop {background:#172b3bd9}
.poster-dialog img {display:block;width:auto;height:auto;max-width:min(92vw,900px);max-height:calc(94vh - 64px);border-radius:6px}
.poster-dialog form {display:flex;justify-content:center;margin-top:12px}
.poster-close {min-height:44px;padding:0 22px;border:0;border-radius:8px;background:var(--ticket-paper);color:var(--ticket-ink);font:inherit;font-weight:800;cursor:pointer}
.poster-close:focus-visible {outline:3px solid var(--ticket-gold);outline-offset:3px}
/* Every perforation is dotted and notched top and bottom, the seller stub's included. */
.media-ticket .ticket-fare {position:relative}
.media-ticket .ticket-fare,.media-ticket .ticket-actions {border-left:3px dotted #d1b56f}
.media-ticket .ticket-fare::before,.media-ticket .ticket-actions::after,.media-ticket:not(:has(.ticket-actions)) .ticket-fare::after {content:'';position:absolute;left:-12.5px;width:22px;height:22px;border-radius:50%;background:var(--ticket-blue);z-index:2;pointer-events:none}
.media-ticket .ticket-fare::before {top:-11px}
.media-ticket .ticket-actions::after,.media-ticket:not(:has(.ticket-actions)) .ticket-fare::after {bottom:-11px}
/* Seller rows: a mark, the seller, the price, then the way out. */
.media-ticket .fboard {display:block}
.media-ticket .frow {border-top:1px solid #ded7c6}
.media-ticket .frow:first-child {border-top:0}
.media-ticket .seller-link {grid-template-columns:34px minmax(0,1fr) auto 16px;gap:10px;justify-items:start;min-height:58px;padding:10px 6px;border:0;border-radius:6px}
.media-ticket .frow:has(.primary-provider-logo) .seller-link {grid-template-columns:minmax(0,1fr) auto 16px}
.media-ticket .fwho:has(.primary-provider-logo) {grid-column:auto}
.media-ticket .primary-provider-logo img {width:120px}
.media-ticket .seller-link .seller-icon {justify-self:center;width:22px;height:22px;color:#176ba8}
.media-ticket .seller-link img.seller-icon {width:34px;height:auto;max-width:none;margin:0}
.media-ticket .seller-link .fprice {justify-self:end;text-align:right}
/* A lone seller with no resale offer: its row becomes the ticket button, named for the seller.
   The Ticketmaster wordmark stays in view above it; SeatGeek only arrives as a resale row, which
   ends solo mode and keeps its logo. */
.fsolo,.fsolo-mark {display:none}
.media-ticket .fboard>.frow:only-child:has(.fsolo) {display:flex;flex-direction:column;align-items:stretch;gap:8px;border:0}
.media-ticket .fboard>.frow:only-child .fsolo-mark {display:block;line-height:0}
.media-ticket .fsolo-mark img {width:120px;height:auto}
.media-ticket .fboard>.frow:only-child .seller-link:has(.fsolo) {display:flex;justify-content:center;align-items:center;gap:10px;min-height:50px;padding:10px 16px;background:var(--ticket-red);color:#fff;border-radius:7px}
.media-ticket .fboard>.frow:only-child .seller-link:has(.fsolo):hover {background:#9c2a20;color:#fff}
.media-ticket .fboard>.frow:only-child .seller-link:has(.fsolo)>:not(.fsolo,.fprice) {display:none}
.media-ticket .fboard>.frow:only-child .fsolo {display:inline;order:-1;font-size:16px;font-weight:800}
.media-ticket .fboard>.frow:only-child .seller-link:has(.fsolo) .fprice {font-size:16px;font-weight:700;max-width:none}
.media-ticket .fboard>.frow:only-child .seller-link:has(.fsolo) .fprice-ask {display:none}
.media-ticket a.seller-link:hover {background:#f1ead8;color:var(--ticket-ink)}
.media-ticket a.seller-link>.ticket-icon:last-child {color:var(--ticket-red)}
.media-ticket .fprice.fprice-ask {font-size:14px;font-weight:800;white-space:nowrap;max-width:none;color:#175b88;text-decoration:underline;text-underline-offset:3px}
.about-copy {position:relative}
.about-copy.has-more::after {content:'';display:block;position:sticky;bottom:0;height:1.5em;margin-top:-1.5em;background:linear-gradient(transparent,var(--ticket-paper));pointer-events:none}
/* Gallery: selection is an outline, videos carry a play badge, and a lone flyer drops the browsing chrome. */
.gallery-thumbs .thumb-art {position:relative;display:block}
.gallery-thumbs .thumb-art>img {display:block;width:100%;aspect-ratio:16/9;object-fit:contain;background:#15272e;border-radius:4px}
.gallery-thumbs button[aria-pressed=true] {background:none;color:#252b29}
.gallery-thumbs button[aria-pressed=true] :is(.thumb-art>img,.thumb-music) {box-shadow:0 0 0 3px #1d6696}
.gallery-thumbs button[aria-pressed=true]>span:last-child {font-weight:700}
.thumb-badge {position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:26px;height:26px;display:grid;place-items:center;border:1.5px solid #fff;border-radius:50%;background:var(--ticket-red);color:#fff}
.thumb-badge .ticket-icon {width:12px;height:12px;fill:currentColor;margin-left:2px}
.thumb-badge.is-music .ticket-icon {width:15px;height:15px;fill:none;stroke-width:2.2;margin:0}
.ticket-tv.flyer-only .gallery-caption {display:none}
.ticket-tv.is-single [data-gallery-count] {display:none}
.ticket-tv.flyer-only .tv-screen-panel {padding-bottom:10px}
.ticket-tv.is-single .tv-controls {grid-template-columns:minmax(0,1fr)}
@media(hover:hover) and (pointer:fine){.gallery-hint {display:none!important}}
/* The venue pin carries its name above Google's own place icons. */
.map-callout {position:absolute;transform:translate(-50%,-100%);display:flex;flex-direction:column;align-items:center;gap:3px;font-family:var(--body,'Karla',sans-serif);pointer-events:none}
.map-callout span {max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:4px 9px;background:var(--ticket-paper);color:var(--ticket-ink);font-size:13px;font-weight:800;line-height:1.25;border-radius:6px;box-shadow:0 0 0 1px #172b3b33,0 2px 6px #172b3b40}
.map-callout svg {width:26px;height:34px;fill:var(--ticket-red);stroke:#fff;stroke-width:1.5}
.map-callout svg circle {fill:#fff;stroke:none}
@media(min-width:1021px){
 .media-ticket.has-poster .ticket-poster {display:block}
 /* Until the script finds the flyer too wide, the TV leaves it to the ticket. */
 .media-ticket.has-poster .ticket-tv.flyer-only,.media-ticket.has-poster .gallery-slide[data-kind=flyer],.media-ticket.has-poster .gallery-thumbs [data-slide="0"] {display:none}
 .media-ticket.has-poster:not(:has(.ticket-fare)) :is(.ticket-info,.dabout) {border-radius:0}
 .media-ticket.has-poster:not(:has(.ticket-fare)) .ticket-poster {border-radius:0 12px 12px 0}
}
@media(max-width:1020px){
 .event-detail-page .media-ticket {grid-template-columns:78px minmax(0,1fr) auto 265px}
 .media-ticket .ticket-info {padding-bottom:16px}
 .media-ticket .dabout {padding:0 20px 22px}
}
/* Desktop: prices sit at the top of the stub with Dibs and Share right under them. The Tickets
   jump only scrolls to rows already beside it, so it stays a phone-tray control. */
@media(min-width:961px),(min-width:721px) and (min-height:501px){
 .media-ticket:not(:has(> .dabout)) .ticket-info {grid-row:1/3}
 .media-ticket:not(:has(.ticket-actions)) .ticket-fare {grid-row:1/3;border-radius:0 12px 12px 0}
 .event-detail-page .media-ticket:not(:has(.ticket-fare)) {grid-template-columns:96px minmax(0,1fr) auto 0}
 .media-ticket:not(:has(.ticket-fare)) .ticket-info {border-top-right-radius:12px}
 .media-ticket:not(:has(.ticket-fare)) .dabout,.media-ticket:not(:has(.ticket-fare)):not(:has(> .dabout)) .ticket-info {border-bottom-right-radius:12px}
 .media-ticket .ticket-fare {padding-bottom:16px}
 .media-ticket .ticket-actions {align-self:stretch;align-content:flex-start;justify-content:flex-start;gap:8px;padding:14px 20px 20px;border-top:1px solid #ded7c6}
 .media-ticket .ticket-actions :is([data-ticket-jump],[data-solo-go]) {display:none}
 .media-ticket .ticket-actions .chair,.media-ticket .ticket-actions .dshare {flex:0 0 auto;min-height:44px;padding:0 14px;border:1.5px solid #ded7c6;border-radius:8px}
 .media-ticket .ticket-actions .chair:hover,.media-ticket .ticket-actions .dshare:hover {border-color:var(--ticket-ink)}
 .ticket-tv.is-single {grid-template-columns:minmax(0,1fr) 150px}
 .ticket-tv.flyer-only .gallery-stage {aspect-ratio:var(--banner-ratio,16/9)}
}
@media(max-width:720px),(max-width:960px) and (max-height:500px){
 .event-detail-page .media-ticket {grid-template-columns:66px minmax(0,1fr);grid-template-rows:none;grid-template-areas:'date info' 'about about' 'media media' 'fare fare' 'venue venue' 'more more' 'sub sub' 'legal legal'}
 /* Areas the phone template lacks would otherwise add implicit columns and squeeze the ticket. */
 .media-ticket .ticket-actions,.media-ticket .ticket-poster {grid-area:auto}
 .media-ticket .ticket-date {justify-content:flex-start}
 .media-ticket .tserial {display:none}
 /* About tears off below the date and title, across the ticket's full width. */
 .media-ticket .dabout {padding:12px 15px 18px;border-top:3px dotted #d1b56f;border-radius:0 0 10px 10px}
 .media-ticket .dabout::before,.media-ticket .dabout::after {content:'';position:absolute;top:-12.5px;width:22px;height:22px;border-radius:50%;background:var(--ticket-blue);z-index:2}
 .media-ticket .dabout::before {left:-11px}
 .media-ticket .dabout::after {right:-11px}
 .media-ticket .about-heading {border-top:0;padding-top:0}
 .media-ticket:has(> .dabout) .ticket-date {border-radius:10px 0 0 0}
 .media-ticket:has(> .dabout) .ticket-date::after {display:none}
 .media-ticket:has(> .dabout) .ticket-info {border-radius:0 10px 0 0}
 .about-copy {max-width:none}
 .media-ticket .ticket-fare,.media-ticket .ticket-actions {border-left:0}
 .media-ticket .ticket-fare::before,.media-ticket .ticket-actions::after,.media-ticket:not(:has(.ticket-actions)) .ticket-fare::after {display:none}
 .gallery-stage {aspect-ratio:var(--stage-ratio,16/9);max-height:70vh}
 .ticket-tv.flyer-only .tv-screen-panel {padding-bottom:7px}
 .ticket-tv.is-single .tv-controls {padding:7px 10px}
 .ticket-tv.is-single .tv-hardware {flex-direction:row;padding:0;gap:8px}
 .ticket-tv.is-single .tv-speaker {min-height:22px}
 .ticket-tv.is-single .tv-dial {width:22px;height:22px;border-width:3px}
 .ticket-tv.is-single .tv-dial::before {height:8px}
}
/* The source link sits in a heading row, so its 44px tap area reaches past its box. */
.media-ticket .dsource {position:relative}
.media-ticket .dsource::after {content:'';position:absolute;top:-8px;right:-4px;bottom:-8px;left:-4px}
/* Time and Add to calendar ride the date stub. */
.media-ticket .date-time {margin-top:12px;padding-top:10px;border-top:2px dotted #a27625;font-size:15px;font-weight:800;line-height:1.25;text-align:center}
/* Doors sits above the show time, quieter; the pair shares one dotted rule. */
.media-ticket .date-time small {display:block;font-size:11px;font-weight:700;color:#5a4310}
.media-ticket .date-time:has(+ .is-show) {font-size:13px;font-weight:700;color:#3b2c0c}
.media-ticket .date-time.is-show {margin-top:6px;padding-top:0;border-top:0}
.cal-add {position:relative;margin-top:auto}
.cal-add summary {display:flex;flex-direction:column;align-items:center;gap:3px;min-height:44px;padding:7px 4px;border:1.5px solid #a27625;border-radius:8px;font-size:12px;font-weight:800;line-height:1.2;text-align:center;cursor:pointer;list-style:none}
.cal-add summary::-webkit-details-marker {display:none}
.cal-add summary .ticket-icon {width:20px;height:20px}
.cal-add summary:hover,.cal-add[open] summary {background:#f6e5bf}
.cal-menu {position:absolute;z-index:6;left:0;top:calc(100% + 6px);display:grid;width:210px;padding:6px;background:var(--ticket-paper);border-radius:8px;box-shadow:0 0 0 1px #172b3b33,0 8px 20px #172b3b40;text-align:left}
.cal-menu a {display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:44px;padding:0 10px;border-radius:6px;color:var(--ticket-ink);font-size:14px;font-weight:700;text-decoration:none}
.cal-menu a:hover {background:#f1ead8}
.cal-menu .ticket-icon {width:14px;height:14px;color:var(--ticket-red)}
.media-ticket .ticket-date:has(.cal-add) .tserial {margin-top:10px}
@media(max-width:720px),(max-width:960px) and (max-height:500px){
 .media-ticket .date-time {margin-top:9px;padding-top:8px;font-size:12px}
 .cal-add {margin-top:12px}
 .cal-add summary {padding:6px 2px;font-size:10.5px}
}
/* One clip on a wide screen: a portable TV beside Getting there instead of a full-width set of
   black bars and an empty control panel. The info column splits into two tracks so the TV takes
   a fixed 396px (date stub + 300px) without changing the ticket above it. */
@media(min-width:1200px){
 .event-detail-page .media-ticket:has(.ticket-map):has(.ticket-tv.is-single:not([hidden])) {grid-template-columns:96px 300px minmax(0,1fr) auto 316px;grid-template-areas:'date info info poster fare' 'date about about poster actions' 'media media venue venue venue' 'more more more more more' 'sub sub sub sub sub' 'legal legal legal legal legal'}
 .event-detail-page .media-ticket:has(.ticket-map):not(:has(.ticket-fare)):has(.ticket-tv.is-single:not([hidden])) {grid-template-columns:96px 300px minmax(0,1fr) auto 0}
 .media-ticket:has(.ticket-map) .ticket-tv.is-single {margin-right:22px;grid-template-columns:minmax(0,1fr)}
 .media-ticket:has(.ticket-map) .ticket-tv.is-single .tv-controls {padding:7px 10px}
 .media-ticket:has(.ticket-map) .ticket-tv.is-single .tv-hardware {flex-direction:row;padding:0;gap:8px}
 .media-ticket:has(.ticket-map) .ticket-tv.is-single .tv-speaker {min-height:22px}
 .media-ticket:has(.ticket-map) .ticket-tv.is-single .tv-dial {width:22px;height:22px;border-width:3px}
 .media-ticket:has(.ticket-map) .ticket-tv.is-single .tv-dial::before {height:8px}
 /* A reel is portrait: give it a 4:5 screen rather than a letterboxed 16:9 one. */
 .media-ticket .ticket-tv.is-single .gallery-stage:has(.gallery-slide[data-kind=instagram]:not([hidden])) {aspect-ratio:4/5}
}
