/* Approved ticket experience. Shared geometry is in ui/ticket-contour.js.
   Copy and controls grow naturally; the outer overlay owns all scrolling. */
.ticket-app [data-ticket]{position:relative;isolation:isolate;--ticket-surface:var(--cream);--ticket-stroke:var(--ink);background:transparent;border:0;border-radius:0;overflow:visible;box-shadow:none}
.ticket-app [data-ticket=dark]{--ticket-surface:var(--midnight);--ticket-stroke:var(--orange)}
.ticket-app [data-ticket]>.ticket-contour{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:-1;overflow:visible}
.ticket-contour path{fill:var(--ticket-surface);stroke:var(--ticket-stroke);stroke-width:2;vector-effect:non-scaling-stroke}
.ticket-app #dealModal,.ticket-app #passModal{background:var(--cream)}
.ticket-app .deal-modal{width:min(500px,100%);--ticket-pad:22px;--ticket-copy:16px;color:var(--ink);padding:8px 0;margin-block:auto}
.ticket-app .deal-modal .ticket-face,.ticket-app .deal-modal .purchase-panel,.ticket-app .pass-ticket-face,.ticket-app .pass-ticket-stub{background:none;mask:none;-webkit-mask:none;color:inherit}
.ticket-app .deal-modal .deal-masthead{min-height:64px;padding:12px 76px 10px 24px;justify-content:flex-start}
.ticket-app .deal-modal .deal-masthead img{width:140px;height:auto}
.ticket-app .deal-modal .modal-close{color:var(--ink);border-color:var(--line);top:12px;right:22px;min-width:44px}
.ticket-app .deal-modal .deal-modal-body{gap:10px;padding:4px var(--ticket-pad) 12px}
.ticket-app .deal-modal .deal-overview{gap:12px}
.ticket-app .deal-modal .deal-overview:has(.deal-modal-image:not([hidden])){grid-template-columns:88px minmax(0,1fr)}
.ticket-app .deal-modal .deal-modal-top h2{font-size:20px;color:var(--ink);line-height:1.25;margin:0 0 6px}
.ticket-app #dealModal .deal-offer strong,.ticket-app #dealModal[data-offer-type=percentage] .deal-offer strong{font-size:30px;line-height:1.12;color:var(--ink)}
.ticket-app .deal-modal .deal-offer span{font-size:16px;line-height:1.4;color:var(--ink);margin-top:6px}
.ticket-app .deal-modal .deal-location{display:flex;flex-wrap:wrap;align-items:center;gap:0 8px;text-align:left;color:var(--ink)}
.ticket-app .deal-modal .ticket-address{flex:1 1 200px;justify-content:flex-start;align-items:center}
.ticket-app .deal-modal .deal-location p,.ticket-app .deal-modal .deal-location a{font-size:16px;line-height:1.4;color:var(--ink)}
.ticket-app .deal-modal .deal-location a{min-height:44px;text-decoration-color:currentColor}
.ticket-app .deal-modal .ticket-info-band{grid-template-columns:1fr 1fr;border:0;border-block:1px solid var(--line);border-radius:0;padding:10px 0;overflow:visible;gap:8px 12px}
.ticket-app .deal-modal .ticket-purchase,.ticket-app .deal-modal .ticket-checkin{background:none;padding:0;color:var(--ink)}
.ticket-app .deal-modal .ticket-times dt,.ticket-app .deal-modal .ticket-opening dt{font-size:16px;line-height:1.4;margin:0 0 3px}
.ticket-app .deal-modal .ticket-times dt .ticket-icon{display:none}
.ticket-app .deal-modal .ticket-times time,.ticket-app .deal-modal .ticket-opening time{font-size:18px;line-height:1.35}
.ticket-app .deal-modal .ticket-opening{margin-top:8px;padding-top:0;border:0}
.ticket-app .deal-modal .ticket-countdown{border:0;padding:0;gap:4px;margin-top:8px;flex-wrap:wrap}
.ticket-app .deal-modal .ticket-countdown .ticket-icon{display:none}
.ticket-app .deal-modal .ticket-countdown strong,.ticket-app .deal-modal .countdown-caption{display:inline;font-size:16px;font-weight:500;line-height:1.4;margin:0}
.ticket-app .deal-modal .countdown-caption:before{content:' '}
.ticket-app .deal-modal .purchase-panel{padding:12px var(--ticket-pad) 16px;gap:8px;color:var(--ink)}
.ticket-app .deal-modal .purchase-estimate{display:grid;grid-template-columns:1fr;gap:4px;color:var(--ink)}
.ticket-app .deal-modal .purchase-estimate>.ticket-icon{display:none}
.ticket-app .deal-modal .purchase-estimate b{font-size:24px;line-height:1.25;color:var(--ink)}
.ticket-app .deal-modal .purchase-estimate span{grid-column:auto;color:var(--ink);font-size:16px;line-height:1.4}
.ticket-app .purchase-how{border-block:1px solid var(--line);margin-top:6px}
.ticket-app .purchase-how summary{min-height:44px;display:list-item;padding:10px 0;font-size:16px;font-weight:600;cursor:pointer}
.ticket-app .purchase-how ol{padding-left:24px;margin:0 0 12px;font-size:16px;line-height:1.5}
.ticket-app .purchase-how li+li{margin-top:8px}
.ticket-app .purchase-details{font-size:16px;min-height:44px;padding:8px 0;justify-content:flex-start}
.ticket-app #dealModal:not([data-page=offer]) :is(.purchase-how,.purchase-details){display:none}
.ticket-app .deal-modal .btn.unlock-button{min-height:52px;border:0;border-radius:28px;background:var(--orange);color:var(--ink);font-size:20px;font-weight:700}
.ticket-app .deal-modal .btn.unlock-button:hover{background:var(--orange);color:var(--ink)}
.ticket-app .deal-modal .secure-note{font-size:16px;line-height:1.4;color:var(--ink);text-align:center}
.ticket-app .deal-modal :is(#checkoutReview,.ticket-utilities,.checkout-summary,.checkout-summary h3,.checkout-summary strong,.consent-row,.deal-rules,.purchase-help,.calculator-label,.savings-details summary,.value-box,.value-box b,.value-box span,.deal-secondary-actions>*,#checkoutReview .section-strip){color:var(--ink)}
.ticket-app .deal-modal :is(.checkout-summary,.value-box,.savings-details){border-color:var(--line);background:none}
.ticket-app .deal-modal :focus-visible{outline-color:var(--ink)}
.ticket-app .deal-modal input:focus-visible{outline-color:var(--ink)}
/* Wallet: imagery belongs to the merchant, never a stock offer substitute. */
.ticket-app .wallet-card{padding:22px;--ticket-surface:var(--cream);color:var(--ink);margin:6px 0}
.ticket-app .wallet-upcoming{--ticket-surface:#eae6de}
.ticket-app .wallet-checked_in,.ticket-app .wallet-payment{--ticket-surface:var(--fx-status-checked-in)}
.ticket-app .wallet-grace{--ticket-surface:var(--sun)}
.ticket-app .wallet-card .wallet-art{padding:0}
.ticket-app .wallet-card .wallet-content{padding:10px 0 0}
.ticket-app .wallet-card :is(h3,.wallet-offer,.wallet-clock,.text-action){color:var(--ink)}
.ticket-app .wallet-card h3{font-size:20px;margin:0 0 6px}
.ticket-app .wallet-card .wallet-offer{font-size:26px;line-height:1.2;margin:6px 0 12px}
.ticket-app .wallet-card .small-tag{background:var(--soft);color:var(--ink);padding:6px 10px;border-radius:24px;display:inline-block;font-size:16px}
.ticket-app .wallet-ready .small-tag{background:var(--green,#22c55e)}
.ticket-app .wallet-photo{float:left;width:80px;height:86px;object-fit:cover;border-radius:8px;margin:0 12px 10px 0}
.ticket-app .wallet-clock{clear:both;font-size:16px;line-height:1.4;gap:2px;padding-top:6px;margin:0}
.ticket-app .wallet-clock b{font-size:18px}
.ticket-app .wallet-card .my-deal-actions{clear:both;border-top:1px solid var(--line);padding-top:14px;margin-top:14px;gap:0}
.ticket-app .wallet-card .btn{border:0;border-radius:26px}
.ticket-app .wallet-card .text-action{font-size:16px;justify-content:center}
.ticket-app #walletHistoryToggle{border:1px solid var(--ink);border-radius:24px;margin-block:12px;min-height:48px}
/* Purchased passes share the same shell in every saved lifecycle state. */
.ticket-app .pass-modal{--pass-copy:16px;--pass-pad:24px;padding:12px 0 16px;width:min(460px,100%);text-align:center}
.ticket-app .pass-ticket-face{padding:0 var(--pass-pad);gap:8px}
.ticket-app .pass-masthead{min-height:52px;justify-content:flex-start;padding:0 48px 0 0}
.ticket-app .pass-brand{width:128px;max-width:100%}
.ticket-app .pass-modal .pass-close{border:0;min-height:44px}
.ticket-app .pass-modal .pass-status{justify-self:center;width:fit-content;border:0;border-radius:24px;font-size:16px;min-height:32px;padding:5px 12px;line-height:1.3}
.ticket-app .pass-modal .pass-status b{font-size:16px}
.ticket-app .pass-modal[data-phase=ready] .pass-status{background:#22c55e;color:var(--ink);border:0}
.ticket-app .pass-status-icon{font-size:18px;width:20px;height:20px;color:inherit}
.ticket-app .pass-modal .pass-next-action{font-size:24px;color:var(--cream);margin:0;line-height:1.2}
.ticket-app .pass-modal .pass-reservation-note{font-size:16px;line-height:1.4}
.ticket-app .pass-overview{padding-block:10px;border-top:1px solid #f7efdf66;gap:4px 10px;text-align:left}
.ticket-app .pass-overview:has(.pass-photo-frame:not([hidden])){grid-template-columns:74px minmax(0,1fr);grid-template-areas:'photo merchant' 'photo offer' 'rules rules'}
.ticket-app .pass-photo-frame{min-height:74px;border:0}
.ticket-app .pass-modal #passRestaurant{font-size:20px;line-height:1.25;margin:0}
.ticket-app .pass-modal .pass-discount,.ticket-app .pass-modal[data-offer-type=percentage] .pass-discount{font-size:28px;color:var(--cream);line-height:1.2;margin:0}
.ticket-app .pass-modal #passTerms{font-size:16px;line-height:1.4;text-align:left}
.ticket-app .pass-validation{gap:8px;padding-top:10px;border-top:1px solid #f7efdf66}
.ticket-app .pass-modal .pass-qr-frame{width:200px;max-width:100%;padding:8px;background:#fff;border-radius:10px;margin:0 auto}
.ticket-app .pass-modal .deal-code{font-size:16px;font-weight:600;line-height:1.4}
.ticket-app .pass-code-copy{min-height:44px;width:100%;padding:8px;border-radius:12px}
.ticket-app .pass-modal .pass-instruction{font-size:16px;line-height:1.4;margin:0;padding:0;border:0}
.ticket-app .pass-modal .pass-state-message{font-size:18px;line-height:1.4;border:1px solid #f7efdf55;border-radius:12px;padding:16px;margin:0;background:#f7efdf08;color:var(--cream)}
.ticket-app .pass-ticket-stub{padding:10px var(--pass-pad) 0}
.ticket-app .pass-timing-band{display:grid;grid-template-columns:1fr;gap:8px;text-align:left;padding:10px 0;border-block:1px solid #f7efdf66}
.ticket-app .pass-timing-band>div{padding:0;border:0;min-width:0}
.ticket-app .pass-timing-band span,.ticket-app .pass-modal .pass-countdown b{font-size:16px;line-height:1.4}
.ticket-app .pass-timing-band time{font-size:20px;line-height:1.3;display:flex;flex-wrap:wrap;gap:0 6px;font-weight:700}
.ticket-app .pass-timing-band .pass-countdown{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline}
.ticket-app .pass-details{padding:0;margin:0;border:0;text-align:left}
.ticket-app .pass-details summary{min-height:44px;padding:10px 0;font-size:16px;color:var(--cream)}
.ticket-app .pass-details p,.ticket-app .pass-details a{font-size:16px;color:var(--cream);line-height:1.5}
.ticket-app .pass-help{min-height:44px;padding:8px 0;color:var(--cream);font-size:16px;justify-content:center}
.ticket-app .pass-modal :focus-visible{outline-color:var(--cream)}
@media(max-width:374px){
 .ticket-app .deal-modal .deal-overview:has(.deal-modal-image:not([hidden])){grid-template-columns:64px minmax(0,1fr)}
 .ticket-app .deal-modal .ticket-info-band{grid-template-columns:1fr}
 .ticket-app .deal-modal .ticket-times>div{display:block}
 .ticket-app .pass-modal{--pass-pad:22px}
 .ticket-app .pass-overview:has(.pass-photo-frame:not([hidden])){grid-template-columns:64px minmax(0,1fr)}
}

.ticket-app .pass-instruction:before{display:none}
.ticket-app .pass-timing-band>div+div{border-left:0;padding-left:0}
.ticket-app .pass-timing-band span:not(.pass-date):not(.pass-time){font-size:16px;line-height:1.4}
.ticket-app .pass-timing-band .pass-date,.ticket-app .pass-timing-band .pass-time{font-size:inherit}
.ticket-app .pass-modal .pass-details{border-top:0}

.ticket-app .pass-timing-band{border:0;border-block:1px solid #f7efdf66;border-radius:0}
.ticket-app .pass-timing-band .pass-countdown{flex-direction:row}
.ticket-app .pass-modal .pass-instruction{font-weight:400}
/* Keep the two secondary actions together without shortening the QR or body copy. */
.ticket-app .pass-ticket-stub{grid-template-columns:minmax(0,1fr) auto;gap:0 12px}
.ticket-app .pass-ticket-stub .pass-timing-band{grid-column:1/-1}
.ticket-app .pass-ticket-stub .pass-details{min-width:0}
.ticket-app .pass-ticket-stub .pass-help{margin:0;align-self:start}
.ticket-app .pass-ticket-stub:has(.pass-details[open]){grid-template-columns:minmax(0,1fr)}
.ticket-app .pass-details[open],.ticket-app .pass-ticket-stub:has(.pass-details[open]) .pass-help{grid-column:1/-1}
.ticket-app .wallet-group-heading{font-size:22px;margin:10px 0 0}
.ticket-app .wallet-card .my-deal-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}
.ticket-app .wallet-card .my-deal-actions>.btn{grid-column:1/-1}
.ticket-app .wallet-card .my-deal-actions>.text-action{padding-inline:4px;overflow-wrap:anywhere}
.ticket-app .wallet-upcoming{filter:none}
.ticket-app .wallet-upcoming:after{display:none}
.ticket-app .wallet-upcoming .wallet-photo{filter:grayscale(1)}
.ticket-app .view h1[tabindex='-1']:focus{outline:none}
.ticket-app #walletTabs{display:grid;grid-template-columns:1fr 1fr;padding:4px;background:var(--soft);border-radius:28px;margin:16px 0}
.ticket-app #walletTabs button{border:0;border-radius:24px;margin:0;min-height:44px;padding:8px;color:var(--ink);background:transparent;font:600 16px/1.4 Inter,sans-serif}
.ticket-app #walletTabs button[aria-pressed=true]{background:var(--midnight);color:var(--cream)}
