@getmicdrop/venue-calendar 4.0.7 → 4.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/{AirbnbSplitMain-QRE-W2ZL.js → AirbnbSplitMain-C6VYPKl1.js} +4 -4
  2. package/dist/{AirbnbSplitMain-QRE-W2ZL.js.map → AirbnbSplitMain-C6VYPKl1.js.map} +1 -1
  3. package/dist/{CarouselView.legacy-DtUAYloL.js → CarouselView.legacy-CQMstj37.js} +3 -3
  4. package/dist/{CarouselView.legacy-DtUAYloL.js.map → CarouselView.legacy-CQMstj37.js.map} +1 -1
  5. package/dist/{CartView-Be1-gajf.js → CartView-tQoTpPaW.js} +220 -221
  6. package/dist/CartView-tQoTpPaW.js.map +1 -0
  7. package/dist/{Checkout-DET04TDs.js → Checkout-ckzVzhIS.js} +4 -4
  8. package/dist/{Checkout-DET04TDs.js.map → Checkout-ckzVzhIS.js.map} +1 -1
  9. package/dist/{Checkout.legacy-Dg8qlXGF.js → Checkout.legacy-C_IGPiV5.js} +4 -4
  10. package/dist/{Checkout.legacy-Dg8qlXGF.js.map → Checkout.legacy-C_IGPiV5.js.map} +1 -1
  11. package/dist/{CheckoutMain-CddDRMZ6.js → CheckoutMain-kbWxrNkd.js} +4 -4
  12. package/dist/{CheckoutMain-CddDRMZ6.js.map → CheckoutMain-kbWxrNkd.js.map} +1 -1
  13. package/dist/{CheckoutTimer-12XARKCb.js → CheckoutTimer-CKFKpW0v.js} +2 -2
  14. package/dist/{CheckoutTimer-12XARKCb.js.map → CheckoutTimer-CKFKpW0v.js.map} +1 -1
  15. package/dist/{CollectionView-DsNE9b9o.js → CollectionView-Bt50h4zh.js} +5 -5
  16. package/dist/{CollectionView-DsNE9b9o.js.map → CollectionView-Bt50h4zh.js.map} +1 -1
  17. package/dist/{CollectionView.legacy-C0EfF6bO.js → CollectionView.legacy-Bv9mbk6i.js} +3 -3
  18. package/dist/{CollectionView.legacy-C0EfF6bO.js.map → CollectionView.legacy-Bv9mbk6i.js.map} +1 -1
  19. package/dist/{EventDetailsView-CKpXTip_.js → EventDetailsView-wfI-_UZX.js} +2 -2
  20. package/dist/{EventDetailsView-CKpXTip_.js.map → EventDetailsView-wfI-_UZX.js.map} +1 -1
  21. package/dist/{FeaturedView.legacy-CKANudQ1.js → FeaturedView.legacy-C0pMsalB.js} +2 -2
  22. package/dist/{FeaturedView.legacy-CKANudQ1.js.map → FeaturedView.legacy-C0pMsalB.js.map} +1 -1
  23. package/dist/{GalleryCard-X_ux5Ig_.js → GalleryCard-KVzIWKVA.js} +2 -2
  24. package/dist/{GalleryCard-X_ux5Ig_.js.map → GalleryCard-KVzIWKVA.js.map} +1 -1
  25. package/dist/{GalleryView.legacy-DiJEEg4a.js → GalleryView.legacy-ry6SX3_5.js} +3 -3
  26. package/dist/{GalleryView.legacy-DiJEEg4a.js.map → GalleryView.legacy-ry6SX3_5.js.map} +1 -1
  27. package/dist/{GroupedListView.legacy-BlY6IUF7.js → GroupedListView.legacy-D8gr26mY.js} +2 -2
  28. package/dist/{GroupedListView.legacy-BlY6IUF7.js.map → GroupedListView.legacy-D8gr26mY.js.map} +1 -1
  29. package/dist/{SeriesPage-AHd2GQvo.js → SeriesPage-CwB-spNR.js} +5 -5
  30. package/dist/{SeriesPage-AHd2GQvo.js.map → SeriesPage-CwB-spNR.js.map} +1 -1
  31. package/dist/{SeriesPage.legacy-DRoCeh7t.js → SeriesPage.legacy-DpqcSN5-.js} +2 -2
  32. package/dist/{SeriesPage.legacy-DRoCeh7t.js.map → SeriesPage.legacy-DpqcSN5-.js.map} +1 -1
  33. package/dist/{Success-BH-b9NQ-.js → Success-DxhQtSXx.js} +5 -5
  34. package/dist/{Success-BH-b9NQ-.js.map → Success-DxhQtSXx.js.map} +1 -1
  35. package/dist/{Success.legacy-BuElevkX.js → Success.legacy-CMFmgHcK.js} +2 -2
  36. package/dist/{Success.legacy-BuElevkX.js.map → Success.legacy-CMFmgHcK.js.map} +1 -1
  37. package/dist/{VenueCalendar-D3g_j17B.js → VenueCalendar-Bf83imE7.js} +14 -14
  38. package/dist/{VenueCalendar-D3g_j17B.js.map → VenueCalendar-Bf83imE7.js.map} +1 -1
  39. package/dist/{ViewTicketsEmbed-BUIrA7s5.js → ViewTicketsEmbed-_Lobsrkg.js} +2 -2
  40. package/dist/{ViewTicketsEmbed-BUIrA7s5.js.map → ViewTicketsEmbed-_Lobsrkg.js.map} +1 -1
  41. package/dist/{labels-CJIz5Cek.js → labels-B3qRgusk.js} +2 -2
  42. package/dist/{labels-CJIz5Cek.js.map → labels-B3qRgusk.js.map} +1 -1
  43. package/dist/{transform-CXAZf_M1.js → transform-CqUUTFuf.js} +2 -2
  44. package/dist/{transform-CXAZf_M1.js.map → transform-CqUUTFuf.js.map} +1 -1
  45. package/dist/venue-calendar.es.js +1 -1
  46. package/dist/venue-calendar.iife.js +15 -15
  47. package/dist/venue-calendar.iife.js.map +1 -1
  48. package/dist/venue-calendar.umd.js +15 -15
  49. package/dist/venue-calendar.umd.js.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/CartView-Be1-gajf.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AirbnbSplitMain-QRE-W2ZL.js","sources":["../src/lib/premium-ticket-experience/variants/v3-airbnb-split/HeroImage.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/EventHeader.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/TicketCard.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/BookingWidget.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/AboutSection.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/PerformerGrid.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/FaqAccordion.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/MobileCta.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/DataToggle.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/PromoCodeInput.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/ShowtimeDesigns.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/AirbnbSplitMain.svelte"],"sourcesContent":["<script lang=\"ts\">\r\n\tinterface Props {\r\n\t\tsrc: string;\r\n\t\talt: string;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { src, alt, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n<div class=\"hero-container relative w-full overflow-hidden rounded-xl bg-surface-secondary\">\r\n\t<img\r\n\t\t{src}\r\n\t\talt=\"\"\r\n\t\tclass=\"hero-blur\"\r\n\t\tloading=\"eager\"\r\n\t\taria-hidden=\"true\"\r\n\t/>\r\n\t<img\r\n\t\t{src}\r\n\t\t{alt}\r\n\t\tclass=\"hero-image\"\r\n\t\tloading=\"eager\"\r\n\t/>\r\n</div>\r\n\r\n<style>\r\n\t.hero-container {\r\n\t\tmax-height: 37.5rem;\r\n\t\tmin-height: 12rem;\r\n\t}\r\n\r\n\t/* Blurred zoomed copy as backdrop */\r\n\t.hero-blur {\r\n\t\tposition: absolute;\r\n\t\tinset: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t\tobject-fit: cover;\r\n\t\ttransform: scale(1.15);\r\n\t\tfilter: blur(16px) saturate(1.2);\r\n\t}\r\n\r\n\t/* Main image on top, contained */\r\n\t.hero-image {\r\n\t\tposition: relative;\r\n\t\twidth: 100%;\r\n\t\tobject-fit: contain;\r\n\t\tmax-height: 37.5rem;\r\n\t\tmin-height: 12rem;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Calendar, Location, Share, Theater, Time, User } from 'carbon-icons-svelte';\r\n\timport { Heading } from '@getmicdrop/svelte-components';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { EventData, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tformatFullDateCompact,\r\n\t\tformatEventTime,\r\n\t\tformatTimeRange,\r\n\t\tformatDoorsTime,\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\thideDateTime?: boolean;\r\n\t\thideVenue?: boolean;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, hideDateTime = false, hideVenue = false, labels = {}, }: Props = $props();\r\n\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(event.totalTicketsRemaining, event.totalTicketsCapacity)\r\n\t);\r\n\tlet scarcityText = $derived(\r\n\t\tgetScarcityText(scarcityLevel, event.totalTicketsRemaining, 'event')\r\n\t);\r\n\r\n\tlet ageText = $derived((() => {\r\n\t\tif (!event.displayAgeRestriction) return null;\r\n\t\tif (event.ageRestriction && event.ageRestriction > 0) {\r\n\t\t\treturn `Ages ${event.ageRestriction}+`;\r\n\t\t}\r\n\t\treturn 'All ages';\r\n\t})());\r\n\r\n\tasync function shareEvent() {\r\n\t\tconst url = typeof window !== 'undefined'\r\n\t\t\t? `${window.location.origin}/e/${event.id}-${event.slug}`\r\n\t\t\t: '#';\r\n\t\tconst shareData = { url };\r\n\r\n\t\tif (navigator.share) {\r\n\t\t\ttry {\r\n\t\t\t\tawait navigator.share(shareData);\r\n\t\t\t} catch (err: unknown) {\r\n\t\t\t\tif (err instanceof Error && err.name !== 'AbortError') {\r\n\t\t\t\t\tfallbackShare(url);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfallbackShare(url);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fallbackShare(url: string) {\r\n\t\tnavigator.clipboard.writeText(url).then(() => {\r\n\t\t\talert('Link copied to clipboard!');\r\n\t\t}).catch(() => {\r\n\t\t\tprompt('Copy this link:', url);\r\n\t\t});\r\n\t}\r\n</script>\r\n\r\n<div class=\"flex flex-col gap-4\">\r\n\t<div class=\"flex items-start gap-3 flex-wrap\">\r\n\t\t<Heading level={1} size=\"xl\" weight=\"bold\" class=\"sm:text-2xl leading-tight\">\r\n\t\t\t{event.title}\r\n\t\t</Heading>\r\n\t\t{#if scarcityText && event.status === 'on_sale'}\r\n\t\t\t<ScarcityBadge\r\n\t\t\t\tremaining={event.totalTicketsRemaining}\r\n\t\t\t\ttotal={event.totalTicketsCapacity}\r\n\t\t\t\tcontext=\"event\"\r\n\t\t\t/>\r\n\t\t{/if}\r\n\t</div>\r\n\r\n\t<!-- Share -->\r\n\t<button type=\"button\" class=\"share-btn text-color-muted hover:text-color-secondary\" onclick={shareEvent}>\r\n\t\t<Share size={16} class=\"shrink-0\" />\r\n\t\tShare\r\n\t</button>\r\n\r\n\t{#if !hideDateTime}\r\n\t\t<!-- Date -->\r\n\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t<Calendar size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t<span class=\"body-md font-medium\">{formatFullDateCompact(event.startDateTime, event.timezone)}</span>\r\n\t\t</div>\r\n\r\n\t\t<!-- Time + doors -->\r\n\t\t{#if event.displayStartTime !== false}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Time size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<div class=\"flex flex-col gap-0.5\">\r\n\t\t\t\t\t{#if event.displayEndTime !== false}\r\n\t\t\t\t\t\t<span class=\"body-md font-medium\">{formatTimeRange(event.startDateTime, event.endDateTime, event.timezone)}</span>\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t<span class=\"body-md font-medium\">{formatEventTime(event.startDateTime, event.timezone)}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{#if event.displayDoorsTime !== false && event.doorsOpenTime}\r\n\t\t\t\t\t\t<span class=\"caption\">Doors open {formatDoorsTime(event.doorsOpenTime, event.timezone)}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{:else if event.displayDoorsTime !== false && event.doorsOpenTime}\r\n\t\t\t<!-- No start/end time, but doors time is shown -->\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Time size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">Doors open {formatDoorsTime(event.doorsOpenTime, event.timezone)}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t{/if}\r\n\r\n\t{#if !hideVenue}\r\n\t\t<!-- Venue + address -->\r\n\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t<Location size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t<div class=\"flex flex-col gap-0.5\">\r\n\t\t\t\t<span class=\"body-md font-medium\">{event.venue.name}</span>\r\n\t\t\t\t{#if event.venue.address}\r\n\t\t\t\t\t<span class=\"caption\">{event.venue.address}</span>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<!-- Stage name -->\r\n\t\t{#if event.stageName}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Theater size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">{event.stageName}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\r\n\t\t<!-- Age restriction -->\r\n\t\t{#if ageText}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<User size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">{ageText}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.share-btn {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tgap: 0.375rem;\r\n\t\tfont-size: 0.75rem;\r\n\t\tline-height: 1rem;\r\n\t\ttransition-property: color;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { Add, Subtract } from 'carbon-icons-svelte';\r\n\timport { Badge, Button, Heading, Input, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { TicketTypeData, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText,\r\n\t\tformatSmartSalesDate,\r\n\t\tDURATION\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tticket: TicketTypeData;\r\n\t\tquantity: number;\r\n\t\tonQuantityChange: (ticketId: number, quantity: number) => void;\r\n\t\tdonationAmount?: string;\r\n\t\tonDonationChange?: (ticketId: number, amount: string) => void;\r\n\t\tisRevealedByPromo?: boolean;\r\n\t\tisDiscountedByPromo?: boolean;\r\n\t\tdiscountedPrice?: number | null;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet {\r\n\t\tticket,\r\n\t\tquantity,\r\n\t\tonQuantityChange,\r\n\t\tdonationAmount = '',\r\n\t\tonDonationChange,\r\n\t\tisRevealedByPromo = false,\r\n\t\tisDiscountedByPromo = false,\r\n\t\tdiscountedPrice = null,\r\n\t\tlabels = {},\r\n\t}: Props = $props();\r\n\r\n\t// --- State detection ---\r\n\tlet isDonation = $derived(ticket.isDonation || ticket.ticketType === 2);\r\n\tlet isSoldOut = $derived(ticket.status === 'sold_out' || ticket.quantityAvailable === 0);\r\n\tlet isComingSoon = $derived(ticket.status === 'coming_soon');\r\n\tlet isSalesEnded = $derived(ticket.status === 'sales_ended');\r\n\tlet isDisabled = $derived(isSoldOut || isComingSoon || isSalesEnded);\r\n\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(ticket.quantityAvailable, ticket.quantityTotal)\r\n\t);\r\n\tlet scarcityText = $derived(getScarcityText(scarcityLevel, ticket.quantityAvailable, 'ticket'));\r\n\tlet isSelected = $derived(quantity > 0);\r\n\r\n\t// Donation validation\r\n\tlet donationValue = $derived(parseFloat(donationAmount) || 0);\r\n\tlet donationError = $derived(\r\n\t\tisDonation && donationAmount !== '' && donationValue < 1 ? 'Minimum $1.00' : ''\r\n\t);\r\n\tlet isDonationValid = $derived(!isDonation || (donationAmount !== '' && donationValue >= 1));\r\n\r\n\tlet canDecrement = $derived(quantity > 0);\r\n\tlet canIncrement = $derived(\r\n\t\t!isDisabled &&\r\n\t\tquantity < ticket.maxPerOrder &&\r\n\t\tquantity < ticket.quantityAvailable &&\r\n\t\tisDonationValid\r\n\t);\r\n\r\n\tfunction decrement() {\r\n\t\tif (canDecrement) {\r\n\t\t\t// If decrementing would go below minimum, jump to 0 (remove from cart)\r\n\t\t\tconst newQty = quantity - 1;\r\n\t\t\tonQuantityChange(ticket.id, newQty < ticket.minPerOrder ? 0 : newQty);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction increment() {\r\n\t\tif (canIncrement) {\r\n\t\t\t// If at 0, jump to minimum purchase quantity\r\n\t\t\tconst newQty = quantity === 0 ? ticket.minPerOrder : quantity + 1;\r\n\t\t\tonQuantityChange(ticket.id, newQty);\r\n\t\t}\r\n\t}\r\n\r\n\tlet donationInputValue = $state(donationAmount);\r\n\r\n\t// Sync external donationAmount prop to local state\r\n\t$effect(() => {\r\n\t\tdonationInputValue = donationAmount;\r\n\t});\r\n\r\n\t// Push local changes upstream\r\n\tfunction syncDonation() {\r\n\t\tif (donationInputValue !== donationAmount) {\r\n\t\t\tonDonationChange?.(ticket.id, donationInputValue);\r\n\t\t}\r\n\t}\r\n\r\n\t// Price display — show total inclusive of fees (matching production TicketBlock.svelte)\r\n\tlet totalPrice = $derived(isDonation ? 0 : ticket.price + (ticket.price === 0 ? 0 : ticket.fee));\r\n\tlet priceDisplay = $derived(\r\n\t\tisDonation ? '' : ticket.price === 0 ? (labels.free || 'Free') : `{formatCurrency(totalPrice as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}`\r\n\t);\r\n\tlet feeCaption = $derived(\r\n\t\t!isDonation && ticket.fee > 0 && ticket.price > 0 ? `incl. {formatCurrency(ticket.fee as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)} ${labels.fee || 'fee'}` : ''\r\n\t);\r\n\r\n\t// Sales start display for coming soon tickets\r\n\tlet salesStartDisplay = $derived(\r\n\t\tisComingSoon && ticket.salesStartDate\r\n\t\t\t? `Sales start ${formatSmartSalesDate(ticket.salesStartDate)}`\r\n\t\t\t: isComingSoon\r\n\t\t\t\t? 'Coming soon'\r\n\t\t\t\t: ''\r\n\t);\r\n</script>\r\n\r\n<article\r\n\tclass=\"ticket-card rounded-lg border p-4 transition-all\"\r\n\tclass:selected={isSelected}\r\n\tclass:disabled-ticket={isDisabled}\r\n\tclass:revealed={isRevealedByPromo && !isDisabled}\r\n\tstyle=\"transition-duration: {DURATION.normal}ms;\"\r\n>\r\n\t<div class=\"vc-flex-between-start gap-4\">\r\n\t\t<!-- Ticket info -->\r\n\t\t<div class=\"flex-1 min-w-0\">\r\n\t\t\t<div class=\"flex-row-2 flex-wrap\">\r\n\t\t\t\t<Heading level={4} size=\"sm\" weight=\"semibold\">\r\n\t\t\t\t\t{ticket.name}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t{#if isSoldOut}\r\n\t\t\t\t\t<Badge variant=\"error\">{labels.soldOut || 'Sold out'}</Badge>\r\n\t\t\t\t{:else if isSalesEnded}\r\n\t\t\t\t\t<Badge variant=\"neutral\">Sales ended</Badge>\r\n\t\t\t\t{:else if isRevealedByPromo}\r\n\t\t\t\t\t<Badge variant=\"success\">Unlocked</Badge>\r\n\t\t\t\t{:else if isDiscountedByPromo}\r\n\t\t\t\t\t<Badge variant=\"green\">Discount applied</Badge>\r\n\t\t\t\t{:else if scarcityText && !isComingSoon}\r\n\t\t\t\t\t<ScarcityBadge\r\n\t\t\t\t\t\tremaining={ticket.quantityAvailable}\r\n\t\t\t\t\t\ttotal={ticket.quantityTotal}\r\n\t\t\t\t\t\tcontext=\"ticket\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t{#if ticket.description}\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block mt-1 line-clamp-2\">\r\n\t\t\t\t\t{ticket.description}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Price row -->\r\n\t\t\t<div class=\"flex-row-2 mt-2\">\r\n\t\t\t\t{#if isDonation}\r\n\t\t\t\t\t<!-- Donation: $ input -->\r\n\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t\t\t<div class=\"donation-input-wrapper\" oninput={syncDonation}>\r\n\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\tlabel=\"Donation amount\"\r\n\t\t\t\t\t\t\tsize=\"md\"\r\n\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\tplaceholder=\"0.00\"\r\n\t\t\t\t\t\t\tbind:value={donationInputValue}\r\n\t\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\t\terrorText={donationError}\r\n\t\t\t\t\t\t\tcolor={donationError ? 'red' : 'base'}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t{:else if isDiscountedByPromo && discountedPrice !== null}\r\n\t\t\t\t\t<!-- Discounted: strikethrough original total + discounted total (both inclusive of fee) -->\r\n\t\t\t\t\t{@const discountedTotal = discountedPrice + (discountedPrice === 0 ? 0 : ticket.fee)}\r\n\t\t\t\t\t<span class=\"price-strikethrough\">{formatCurrency(totalPrice as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}</span>\r\n\t\t\t\t\t<span class=\"price-discounted\">{formatCurrency(discountedTotal as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}</span>\r\n\t\t\t\t\t{#if feeCaption}\r\n\t\t\t\t\t\t<span class=\"price-fee\">{feeCaption}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t{:else if isComingSoon}\r\n\t\t\t\t\t<!-- Coming soon: show price dimmed -->\r\n\t\t\t\t\t<span class=\"price-lg text-color-muted\">{priceDisplay}</span>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<!-- Standard price -->\r\n\t\t\t\t\t<span class=\"price-lg text-color-primary\">{priceDisplay}</span>\r\n\t\t\t\t\t{#if feeCaption}\r\n\t\t\t\t\t\t<span class=\"price-fee\">{feeCaption}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- Coming soon / sales ended message -->\r\n\t\t\t{#if salesStartDisplay}\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block mt-1.5\">\r\n\t\t\t\t\t{salesStartDisplay}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\r\n\t\t<!-- Quantity controls -->\r\n\t\t<div class=\"flex items-center quantity-selector\" class:active={isSelected}>\r\n\t\t\t{#if isSoldOut || isComingSoon || isSalesEnded}\r\n\t\t\t\t<!-- No controls for coming soon / sales ended -->\r\n\t\t\t{:else}\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"alternative\"\r\n\t\t\t\t\tsize=\"icon-lg\"\r\n\t\t\t\t\tonclick={decrement}\r\n\t\t\t\t\tdisabled={!canDecrement}\r\n\t\t\t\t\taria-label=\"{labels.decrease || 'Decrease'} {ticket.name} {labels.quantity || 'quantity'}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Subtract size={16} />\r\n\t\t\t\t</Button>\r\n\r\n\t\t\t\t<span\r\n\t\t\t\t\tclass=\"qty-display\"\r\n\t\t\t\t\taria-live=\"polite\"\r\n\t\t\t\t\taria-label=\"{ticket.name} {labels.quantity || 'quantity'}: {quantity}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{quantity}\r\n\t\t\t\t</span>\r\n\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"alternative\"\r\n\t\t\t\t\tsize=\"icon-lg\"\r\n\t\t\t\t\tonclick={increment}\r\n\t\t\t\t\tdisabled={!canIncrement}\r\n\t\t\t\t\taria-label=\"{labels.increase || 'Increase'} {ticket.name} {labels.quantity || 'quantity'}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Add size={16} />\r\n\t\t\t\t</Button>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t</div>\r\n</article>\r\n\r\n<style>\r\n\t/* Card states using HSL CSS variables (matching TicketBlock.svelte) */\r\n\t.ticket-card {\r\n\t\tborder-color: hsl(var(--stroke-secondary, 220 13% 91%));\r\n\t\tbackground-color: hsl(var(--ts-card-bg, var(--bg-primary, 0 0% 100%)));\r\n\t}\r\n\r\n\t.ticket-card.selected {\r\n\t\tborder-color: hsl(var(--brand-primary, 211 100% 50%));\r\n\t\tbox-shadow: 0 0 0 1px hsl(var(--brand-primary, 211 100% 50%));\r\n\t}\r\n\r\n\t.ticket-card.revealed {\r\n\t\tborder-color: hsl(var(--accent-success) / 50%);\r\n\t\tbackground-color: hsl(var(--accent-success) / 8%);\r\n\t}\r\n\r\n\t.ticket-card.disabled-ticket {\r\n\t\topacity: 0.5;\r\n\t}\r\n\r\n\t/* Quantity selector */\r\n\t.quantity-selector {\r\n\t\tgap: 0.5rem;\r\n\t\tuser-select: none;\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t.qty-display {\r\n\t\tmin-width: 2rem;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\tfont-size: 1.125rem;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: hsl(var(--text-primary, 222 47% 11%));\r\n\t\tuser-select: none;\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t/* Discounted price green text */\r\n\t.price-discounted {\r\n\t\tfont-size: 0.875rem;\r\n\t\tline-height: 1.25rem;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: hsl(var(--accent-success)); /* green-600 */\r\n\t}\r\n\r\n\t/* Donation input wrapper */\r\n\t.donation-input-wrapper {\r\n\t\tmin-width: 10rem;\r\n\t}\r\n\r\n .ticket-card {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--stroke-secondary, 215 19% 35%));\r\n\t\tbackground-color: hsl(var(--ts-card-bg, var(--bg-primary, 222 47% 11%)));\r\n\t }\r\n }\r\n\r\n .ticket-card.revealed {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--accent-success)); /* green-700 */\r\n\t\tbackground-color: hsl(var(--accent-success));\r\n\t }\r\n }\r\n\r\n .qty-display {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tcolor: hsl(var(--text-primary, 0 0% 100%));\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { Calendar } from 'carbon-icons-svelte';\r\n\timport { Badge, Button, Card, Heading, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { EventData, OrderTotals, CtaConfig, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tgetCtaConfig,\r\n\t\tgetPriceDisplay,\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText,\r\n\t\tformatBrowseDate,\r\n\t\tformatEventTime,\r\n\t\tDURATION\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\timport OrderSummary from './OrderSummary.svelte';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\torderTotals: OrderTotals;\r\n\t\thasSelectedTickets: boolean;\r\n\t\tonCheckout: () => void;\r\n\t\tpromoApplied?: boolean;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, orderTotals, hasSelectedTickets, onCheckout, promoApplied = false, labels = {}, }: Props = $props();\r\n\r\n\tlet ctaConfig: CtaConfig = $derived(getCtaConfig(event));\r\n\tlet priceDisplay = $derived(getPriceDisplay(event));\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(event.totalTicketsRemaining, event.totalTicketsCapacity)\r\n\t);\r\n\tlet scarcityText = $derived(\r\n\t\tgetScarcityText(scarcityLevel, event.totalTicketsRemaining, 'event')\r\n\t);\r\n\tlet isFreeEvent = $derived(\r\n\t\tevent.tickets.filter((t) => t.status === 'on_sale' && !t.isHidden).every((t) => t.price === 0)\r\n\t);\r\n\r\n\tfunction scrollToTickets() {\r\n\t\tif (typeof document === 'undefined') return;\r\n\t\tconst section = document.getElementById('desktop-ticket-section');\r\n\t\tif (section) {\r\n\t\t\tsection.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<!--\r\n\tBookingWidget: Airbnb-style sticky sidebar card.\r\n\tTransitions from \"informational\" to \"cart\" mode with no skeleton placeholders.\r\n\tPassword protection is handled at the widget/browse level, not on the event page.\r\n-->\r\n<Card border padding={false} class=\"rounded-xl shadow-lg overflow-hidden bg-surface-secondary\">\r\n\t<div class=\"p-5\">\r\n\t\t{#if event.status === 'on_sale'}\r\n\t\t\t<!-- ON SALE: informational -> cart transition -->\r\n\t\t\t<div class=\"space-y-4\">\r\n\t\t\t\t{#if hasSelectedTickets}\r\n\t\t\t\t\t<!-- FILLED STATE: Order summary + checkout -->\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"space-y-3\"\r\n\t\t\t\t\t\tstyle=\"animation: widgetFadeIn {DURATION.normal}ms ease-out;\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<OrderSummary {orderTotals} />\r\n\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"default\"\r\n\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\tclass=\"w-full\"\r\n\t\t\t\t\t\t\tonclick={onCheckout}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{#if isFreeEvent}\r\n\t\t\t\t\t\t\t\t{event.isRegistrationEvent ? (labels.reserveASpot || 'Reserve a spot') : (labels.getTickets || 'Get tickets')} &middot; Free\r\n\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t{labels.checkout || 'Checkout'} &middot; {formatCurrency(orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<!-- EMPTY STATE: Useful booking info (Airbnb-style) -->\r\n\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t<!-- Price display -->\r\n\t\t\t\t\t\t<div class=\"flex items-baseline gap-2\">\r\n\t\t\t\t\t\t\t{#if priceDisplay}\r\n\t\t\t\t\t\t\t\t<span class=\"price-lg text-color-primary text-xl\">\r\n\t\t\t\t\t\t\t\t\t{priceDisplay}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t{:else if isFreeEvent}\r\n\t\t\t\t\t\t\t\t<span class=\"price-lg text-color-primary text-xl\">\r\n\t\t\t\t\t\t\t\t\tFree\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<!-- Event date/time summary (compact) -->\r\n\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\r\n\t\t\t\t\t\t\t<Calendar size={16} class=\"shrink-0 icon-muted\" />\r\n\t\t\t\t\t\t\t{#if event.displayStartTime !== false}\r\n\t\t\t\t\t\t\t\t<span class=\"body-sm\">{formatBrowseDate(event.startDateTime, event.timezone)} &middot; {formatEventTime(event.startDateTime, event.timezone)}</span>\r\n\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t<span class=\"body-sm\">{formatBrowseDate(event.startDateTime, event.timezone)}</span>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<!-- Scarcity badge -->\r\n\t\t\t\t\t\t{#if scarcityText}\r\n\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t<ScarcityBadge\r\n\t\t\t\t\t\t\t\t\tremaining={event.totalTicketsRemaining}\r\n\t\t\t\t\t\t\t\t\ttotal={event.totalTicketsCapacity}\r\n\t\t\t\t\t\t\t\t\tcontext=\"event\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t<!-- Promo applied badge -->\r\n\t\t\t\t\t\t{#if promoApplied}\r\n\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t<Badge variant=\"success\">{labels.promoApplied || 'Promo applied'}</Badge>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t<!-- Divider -->\r\n\t\t\t\t\t\t<div class=\"divider\"></div>\r\n\r\n\t\t\t\t\t\t<!-- CTA: scroll to ticket section -->\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"default\"\r\n\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\tclass=\"w-full\"\r\n\t\t\t\t\t\t\tonclick={scrollToTickets}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{#if event.isRegistrationEvent}\r\n\t\t\t\t\t\t\t\tReserve a spot\r\n\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\tGet tickets\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</Button>\r\n\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\t\t{:else if event.status === 'sold_out'}\r\n\t\t\t<!-- SOLD OUT: just the disabled CTA, tickets still shown in left column -->\r\n\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"default\"\r\n\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\tclass=\"w-full\"\r\n\t\t\t\t\tdisabled={true}\r\n\t\t\t\t>\r\n\t\t\t\t\tSold out\r\n\t\t\t\t</Button>\r\n\t\t\t</div>\r\n\t\t{:else}\r\n\t\t\t<!-- OTHER DISABLED STATES: cancelled, past, sales_ended, coming_soon -->\r\n\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t<Heading weight=\"semibold\">\r\n\t\t\t\t\t{ctaConfig.text}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t{#if ctaConfig.reason}\r\n\t\t\t\t\t<Text size=\"sm\" color=\"secondary\" class=\"block\">\r\n\t\t\t\t\t\t{ctaConfig.reason}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t{/if}\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"default\"\r\n\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\tclass=\"w-full\"\r\n\t\t\t\t\tdisabled={true}\r\n\t\t\t\t>\r\n\t\t\t\t\t{ctaConfig.text}\r\n\t\t\t\t</Button>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t</div>\r\n</Card>\r\n\r\n<style>\r\n\t@keyframes widgetFadeIn {\r\n\t\tfrom {\r\n\t\t\topacity: 0;\r\n\t\t\ttransform: translateY(-4px);\r\n\t\t}\r\n\r\n\t\tto {\r\n\t\t\topacity: 1;\r\n\t\t\ttransform: translateY(0);\r\n\t\t}\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Heading, Text } from '@getmicdrop/svelte-components';\r\n\r\n\tinterface Props {\r\n\t\tdescription: string;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { description, labels = {}, }: Props = $props();\r\n\r\n\tlet paragraphs = $derived(\r\n\t\tdescription.split('\\n\\n').filter((p) => p.trim().length > 0)\r\n\t);\r\n</script>\r\n\r\n<section>\r\n\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-3\">About</Heading>\r\n\t<div class=\"space-y-4\">\r\n\t\t{#each paragraphs as paragraph}\r\n\t\t\t<Text size=\"sm\" color=\"secondary\" leading=\"relaxed\" class=\"block\">\r\n\t\t\t\t{paragraph}\r\n\t\t\t</Text>\r\n\t\t{/each}\r\n\t</div>\r\n</section>\r\n","<script lang=\"ts\">\r\n\timport { Avatar, Card, Heading } from '@getmicdrop/svelte-components';\r\n\timport type { PerformerData } from '$lib/premium-ticket-experience/types';\r\n\r\n\tinterface Props {\r\n\t\tperformers: PerformerData[];\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { performers, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n{#if performers.length > 0}\r\n\t<section>\r\n\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Performers</Heading>\r\n\t\t<div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n\t\t\t{#each performers as performer (performer.id)}\r\n\t\t\t\t<Card padding={false} class=\"flex items-center gap-3 p-3 bg-surface-secondary shadow-none\">\r\n\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\tsrc={performer.profileImage || ''}\r\n\t\t\t\t\t\talt={performer.displayName}\r\n\t\t\t\t\t\tinitials={performer.displayName.charAt(0)}\r\n\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\tclass=\"shrink-0 rounded-lg\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div class=\"min-w-0\">\r\n\t\t\t\t\t\t<Heading level={4} size=\"sm\" weight=\"semibold\" class=\"truncate\">\r\n\t\t\t\t\t\t\t{performer.displayName}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Card>\r\n\t\t\t{/each}\r\n\t\t</div>\r\n\t</section>\r\n{/if}\r\n\r\n","<script lang=\"ts\">\r\n\timport { Accordion, AccordionItem, Heading } from '@getmicdrop/svelte-components';\r\n\timport type { FAQItem } from '$lib/premium-ticket-experience/types';\r\n\r\n\tinterface Props {\r\n\t\tfaqs: FAQItem[];\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { faqs, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n{#if faqs.length > 0}\r\n\t<section class=\"faq-section\">\r\n\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-3\">\r\n\t\t\tFrequently asked questions\r\n\t\t</Heading>\r\n\t\t<Accordion flush>\r\n\t\t\t{#each faqs as faq (faq.question)}\r\n\t\t\t\t<AccordionItem>\r\n\t\t\t\t\t{#snippet header()}{faq.question}{/snippet}\r\n\t\t\t\t\t{faq.answer}\r\n\t\t\t\t</AccordionItem>\r\n\t\t\t{/each}\r\n\t\t</Accordion>\r\n\t</section>\r\n{/if}\r\n\r\n<style>\r\n\t/* Override AccordionItem's hardcoded gray background — FAQ headers should be transparent */\r\n\t.faq-section :global(button) {\r\n\t\tbackground-color: transparent !important;\r\n\t}\r\n\r\n\t.faq-section :global(button:hover) {\r\n\t\tbackground-color: hsl(var(--bg-secondary, 210 20% 98%)) !important;\r\n\t}\r\n\r\n\t/* Fix chevron direction: point DOWN when closed, UP when open.\r\n\t AccordionItem uses ChevronUpOutline (points up by default) and adds rotate-180 when open.\r\n\t We invert it: rotate 180° by default (down), remove rotation when open (up). */\r\n\t.faq-section :global(button svg) {\r\n\t\ttransform: rotate(180deg) !important;\r\n\t\ttransition: transform 200ms ease;\r\n\t}\r\n\r\n\t.faq-section :global(button[aria-expanded=\"true\"] svg) {\r\n\t\ttransform: rotate(0deg) !important;\r\n\t}\r\n\r\n .faq-section :global(button:hover) {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tbackground-color: hsl(var(--bg-secondary, 217 33% 17%)) !important;\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { ChevronUp, ChevronDown } from 'carbon-icons-svelte';\r\n\timport { Button, Text, Heading, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport type { EventData, OrderTotals, CtaConfig } from '$lib/premium-ticket-experience/types';\r\n\timport { getCtaConfig, getPriceDisplay, DURATION } from '$lib/premium-ticket-experience/defaults';\r\n\timport OrderSummary from './OrderSummary.svelte';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\torderTotals: OrderTotals;\r\n\t\thasSelectedTickets: boolean;\r\n\t\tonCheckout: () => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, orderTotals, hasSelectedTickets, onCheckout, labels = {}, }: Props = $props();\r\n\r\n\tlet ctaConfig: CtaConfig = $derived(getCtaConfig(event));\r\n\tlet priceDisplay = $derived(getPriceDisplay(event));\r\n\tlet totalTicketCount = $derived(\r\n\t\torderTotals.lines.reduce((sum, l) => sum + l.quantity, 0)\r\n\t);\r\n\tlet isFreeEvent = $derived(\r\n\t\tevent.tickets.filter((t) => t.status === 'on_sale' && !t.isHidden).every((t) => t.price === 0)\r\n\t);\r\n\r\n\t// Drawer state\r\n\tlet drawerOpen = $state(false);\r\n\r\n\tfunction scrollToTickets() {\r\n\t\tif (typeof document === 'undefined') return;\r\n\t\tconst section = document.getElementById('mobile-ticket-section');\r\n\t\tif (section) {\r\n\t\t\tsection.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handleCtaClick() {\r\n\t\tif (ctaConfig.disabled) return;\r\n\r\n\t\tif (hasSelectedTickets) {\r\n\t\t\tonCheckout();\r\n\t\t} else {\r\n\t\t\tscrollToTickets();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleDrawer() {\r\n\t\tdrawerOpen = !drawerOpen;\r\n\t}\r\n\r\n\tfunction closeDrawer() {\r\n\t\tdrawerOpen = false;\r\n\t}\r\n</script>\r\n\r\n<!-- Backdrop (when drawer open) -->\r\n{#if drawerOpen}\r\n\t<button\r\n\t\ttype=\"button\"\r\n\t\tclass=\"drawer-backdrop\"\r\n\t\tonclick={closeDrawer}\r\n\t\taria-label=\"Close order summary\"\r\n\t></button>\r\n{/if}\r\n\r\n<!-- Fixed bottom CTA bar for mobile (DICE-style) -->\r\n<div\r\n\tclass=\"fixed bottom-0 left-0 right-0 z-40 md:hidden bg-surface-primary border-t border-default shadow-lg\"\r\n\tstyle=\"padding-bottom: env(safe-area-inset-bottom, 0);\"\r\n>\r\n\t<!-- Slide-up drawer (order summary) -->\r\n\t{#if hasSelectedTickets}\r\n\t\t<div\r\n\t\t\tclass=\"drawer-panel border-default bg-surface-secondary\"\r\n\t\t\tclass:drawer-open={drawerOpen}\r\n\t\t>\r\n\t\t\t<div class=\"px-4 pt-4 pb-3\">\r\n\t\t\t\t<div class=\"flex items-center justify-between mb-3\">\r\n\t\t\t\t\t<Heading level={3} size=\"sm\" weight=\"semibold\">\r\n\t\t\t\t\t\tOrder Summary\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tvariant=\"icon\"\r\n\t\t\t\t\t\tsize=\"icon-sm\"\r\n\t\t\t\t\t\tonclick={toggleDrawer}\r\n\t\t\t\t\t\taria-label=\"Close order summary\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<ChevronDown size={20} />\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<OrderSummary {orderTotals} />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t{/if}\r\n\r\n\t<!-- CTA bar -->\r\n\t<div\r\n\t\tclass=\"flex items-center justify-between gap-3 px-4 py-3 transition-all\"\r\n\t\tstyle=\"transition-duration: {DURATION.normal}ms;\"\r\n\t>\r\n\t\t<!-- Left: dynamic info (tappable when tickets selected) -->\r\n\t\t<div class=\"flex-1 min-w-0\">\r\n\t\t\t{#if hasSelectedTickets}\r\n\t\t\t\t<!-- Has tickets: count + total — tappable to open drawer -->\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"flex items-center gap-1.5 text-left\"\r\n\t\t\t\t\tonclick={toggleDrawer}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Text size=\"sm\" class=\"font-semibold tabular-nums\">\r\n\t\t\t\t\t\t{totalTicketCount} {totalTicketCount === 1 ? 'ticket' : 'tickets'} &middot;\r\n\t\t\t\t\t\t{#if isFreeEvent}\r\n\t\t\t\t\t\t\tFree\r\n\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t{formatCurrency(orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<ChevronUp size={16} class=\"shrink-0 text-color-muted transition-transform {drawerOpen ? 'rotate-180' : ''}\" />\r\n\t\t\t\t</button>\r\n\t\t\t{:else if priceDisplay && !ctaConfig.disabled}\r\n\t\t\t\t<!-- No tickets yet, on sale: \"From $X\" -->\r\n\t\t\t\t<Text size=\"sm\" color=\"secondary\" class=\"font-medium block\">\r\n\t\t\t\t\t{priceDisplay}\r\n\t\t\t\t</Text>\r\n\t\t\t{:else if ctaConfig.reason}\r\n\t\t\t\t<!-- Disabled: show reason -->\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block\">\r\n\t\t\t\t\t{ctaConfig.reason}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\r\n\t\t<!-- Right: CTA button -->\r\n\t\t<Button\r\n\t\t\tvariant=\"default\"\r\n\t\t\tsize=\"lg\"\r\n\t\t\tdisabled={ctaConfig.disabled}\r\n\t\t\tonclick={handleCtaClick}\r\n\t\t\tclass=\"shrink-0 min-w-32\"\r\n\t\t>\r\n\t\t\t{#if hasSelectedTickets}\r\n\t\t\t\tCheckout\r\n\t\t\t{:else}\r\n\t\t\t\t{ctaConfig.text}\r\n\t\t\t{/if}\r\n\t\t</Button>\r\n\t</div>\r\n</div>\r\n\r\n<style>\r\n\t/* Drawer backdrop */\r\n\t.drawer-backdrop {\r\n\t\tposition: fixed;\r\n\t\tinset: 0;\r\n\t\tz-index: var(--z-dropdown);\r\n\t\tbackground-color: rgb(0 0 0 / 40%);\r\n\t\t-webkit-tap-highlight-color: transparent;\r\n\t}\r\n\r\n\t@media (width >= 768px) {\r\n\t\t.drawer-backdrop {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\r\n\t/* Drawer panel — slides up from above the CTA bar */\r\n\t.drawer-panel {\r\n\t\tborder-top-width: 1px;\r\n\t\tborder-top-style: solid;\r\n\t\tmax-height: 0;\r\n\t\toverflow: hidden;\r\n\t\topacity: 0;\r\n\t\ttransition: max-height 300ms cubic-bezier(0.4, 0, 0.2, 1),\r\n\t\t\topacity 200ms ease;\r\n\t}\r\n\r\n\t.drawer-panel.drawer-open {\r\n\t\tmax-height: 400px;\r\n\t\topacity: 1;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\t/**\r\n\t * Mock data toggle — horizontal bar matching the showcase variant nav.\r\n\t */\r\n\timport { Button } from '@getmicdrop/svelte-components';\r\n\r\n\t// Password removed: handled at widget/browse level, not event page\r\n\ttype DataVariant = 'default' | 'sold_out' | 'free' | 'registration'\r\n\t\t| 'series' | 'series_instance' | 'collection' | 'donation' | 'mixed' | 'sections' | 'promo' | 'multi_stage' | 'long' | 'wide';\r\n\r\n\tinterface Props {\r\n\t\tcurrent: DataVariant;\r\n\t\tonChange: (variant: DataVariant) => void;\r\n\t}\r\n\r\n\tlet { current, onChange }: Props = $props();\r\n\r\n\tconst options: { value: DataVariant; label: string; color: string }[] = [\r\n\t\t{ value: 'default', label: 'On sale', color: 'bg-accent-success' },\r\n\t\t{ value: 'sold_out', label: 'Sold out', color: 'bg-muted-foreground' },\r\n\t\t{ value: 'free', label: 'Free', color: 'bg-sky-500' },\r\n\t\t{ value: 'registration', label: 'Registration', color: 'bg-brand-primary' },\r\n\t\t{ value: 'series', label: 'Series', color: 'bg-brand-primary' },\r\n\t\t{ value: 'series_instance', label: 'Instance', color: 'bg-violet-500' },\r\n\t\t{ value: 'collection', label: 'Collection', color: 'bg-fuchsia-500' },\r\n\t\t{ value: 'donation', label: 'Donation', color: 'bg-accent-danger' },\r\n\t\t{ value: 'mixed', label: 'Mixed', color: 'bg-status-warning-bg0' },\r\n\t\t{ value: 'sections', label: 'Sections', color: 'bg-brand-primary' },\r\n\t\t{ value: 'promo', label: 'Promo codes', color: 'bg-accent-success' },\r\n\t\t{ value: 'multi_stage', label: 'Multi-stage', color: 'bg-accent-danger' },\r\n\t\t{ value: 'long', label: 'Long name', color: 'bg-accent-warning' },\r\n\t\t{ value: 'wide', label: 'Wide image', color: 'bg-teal-500' }\r\n\t];\r\n</script>\r\n\r\n<div class=\"toggle-bar bg-surface-primary border-default\">\r\n\t<span class=\"toggle-label text-color-muted\">Data</span>\r\n\t{#each options as option}\r\n\t\t{@const isActive = current === option.value}\r\n\t\t<Button\r\n\t\t\tvariant=\"ghost\"\r\n\t\t\tactive={isActive}\r\n\t\t\tonclick={() => onChange(option.value)}\r\n\t\t\tclass=\"toggle-btn {isActive ? 'active bg-surface-secondary text-color-primary font-medium' : 'text-color-tertiary hover:bg-surface-secondary hover:text-color-secondary'}\"\r\n\t\t>\r\n\t\t\t<span class=\"w-1.5 h-1.5 rounded-full {option.color} shrink-0\"></span>\r\n\t\t\t{option.label}\r\n\t\t</Button>\r\n\t{/each}\r\n</div>\r\n\r\n<style>\r\n\t.toggle-bar {\r\n\t\tposition: sticky;\r\n\t\ttop: 0;\r\n\t\tz-index: var(--z-dropdown);\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 0.25rem;\r\n\t\tpadding: 0.5rem 0.75rem;\r\n\t\toverflow-x: auto;\r\n\t\tborder-bottom-width: 1px;\r\n\t\tborder-bottom-style: solid;\r\n\t}\r\n\r\n\t.toggle-label {\r\n\t\tpadding-left: 0.375rem;\r\n\t\tpadding-right: 0.375rem;\r\n\t\tflex-shrink: 0;\r\n\t\ttext-transform: uppercase;\r\n\t\tletter-spacing: 0.05em;\r\n\t\tfont-size: 0.625rem;\r\n\t}\r\n\r\n\t.toggle-btn {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 0.375rem;\r\n\t\tpadding: 0.25rem 0.5rem;\r\n\t\tborder-radius: 0.375rem;\r\n\t\tfont-size: 0.75rem;\r\n\t\tline-height: 1rem;\r\n\t\twhite-space: nowrap;\r\n\t\ttransition-property: all;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Input, Button } from '@getmicdrop/svelte-components';\r\n\timport type { PromoCodeState } from '$lib/premium-ticket-experience/types';\r\n\timport { DURATION } from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tpromoState: PromoCodeState;\r\n\t\tonApply: (code: string) => void;\r\n\t\tonRemove: () => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { promoState, onApply, onRemove, labels = {}, }: Props = $props();\r\n\r\n\tlet isExpanded = $state(false);\r\n\tlet inputValue = $state('');\r\n\r\n\tfunction handleApply() {\r\n\t\tconst trimmed = inputValue.trim();\r\n\t\tif (!trimmed) return;\r\n\t\tonApply(trimmed);\r\n\t}\r\n\r\n\tfunction handleRemove() {\r\n\t\tinputValue = '';\r\n\t\tonRemove();\r\n\t}\r\n\r\n\tfunction handleKeydown(e: KeyboardEvent) {\r\n\t\tif (e.key === 'Enter') {\r\n\t\t\te.preventDefault();\r\n\t\t\thandleApply();\r\n\t\t}\r\n\t}\r\n\r\n\t// Auto-expand when promo is applied (e.g. on restore)\r\n\tlet shouldExpand = $derived(promoState.isApplied || isExpanded);\r\n</script>\r\n\r\n<div class=\"promo-section\" role=\"group\" aria-labelledby=\"promo-label\">\r\n\t<span id=\"promo-label\" class=\"sr-only\">Promo code entry</span>\r\n\t{#if !shouldExpand}\r\n\t\t<Button variant=\"link\" onclick={() => (isExpanded = true)}>\r\n\t\t\t{labels.havePromoCode || 'Have a promo code?'}\r\n\t\t</Button>\r\n\t{:else}\r\n\t\t<div\r\n\t\t\tclass=\"space-y-2\"\r\n\t\t\tstyle=\"animation: promoSlideIn {DURATION.normal}ms ease-out;\"\r\n\t\t>\r\n\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t<div class=\"promo-input-wrapper\" onkeydown={handleKeydown}>\r\n\t\t\t\t<div class=\"flex-1\">\r\n\t\t\t\t\t<Input\r\n\t\t\t\t\t\tlabel={labels.promoCode || 'Promo code'}\r\n\t\t\t\t\t\tplaceholder={labels.enterCode || 'Enter code'}\r\n\t\t\t\t\t\tsize=\"md\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tbind:value={inputValue}\r\n\t\t\t\t\t\tdisabled={promoState.isApplied || promoState.isValidating}\r\n\t\t\t\t\t\terrorText={promoState.error || ''}\r\n\t\t\t\t\t\tcolor={promoState.error ? 'red' : 'base'}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{#if promoState.isApplied}\r\n\t\t\t\t\t<Button strokebtn onclick={handleRemove} class=\"h-10 self-start mt-5\" aria-label={labels.removePromoCode || 'Remove promo code'}>\r\n\t\t\t\t\t\t{labels.remove || 'Remove'}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tonclick={handleApply}\r\n\t\t\t\t\t\tdisabled={promoState.isValidating || !inputValue.trim()}\r\n\t\t\t\t\t\tclass=\"h-10 self-start mt-5\"\r\n\t\t\t\t\t\taria-label={promoState.isValidating ? (labels.checkingPromoCode || 'Checking promo code') : (labels.applyPromoCode || 'Apply promo code')}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{promoState.isValidating ? (labels.checking || 'Checking...') : (labels.apply || 'Apply')}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- Success hint -->\r\n\t\t\t{#if promoState.hint}\r\n\t\t\t\t<p class=\"promo-message success body-sm\" role=\"status\" aria-live=\"polite\">\r\n\t\t\t\t\t{promoState.hint}\r\n\t\t\t\t</p>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.promo-section {\r\n\t\tmargin-top: 1rem;\r\n\t}\r\n\r\n\t.promo-input-wrapper {\r\n\t\tdisplay: flex;\r\n\t\tgap: 0.5rem;\r\n\t\talign-items: flex-start;\r\n\t}\r\n\r\n\t.promo-message {\r\n\t\tmargin-top: 0.5rem;\r\n\t}\r\n\r\n\t.promo-message.success {\r\n\t\tcolor: hsl(var(--accent-success)); /* green-600 */\r\n\t}\r\n\r\n\t@keyframes promoSlideIn {\r\n\t\tfrom {\r\n\t\t\topacity: 0;\r\n\t\t\ttransform: translateY(-4px);\r\n\t\t}\r\n\r\n\t\tto {\r\n\t\t\topacity: 1;\r\n\t\t\ttransform: translateY(0);\r\n\t\t}\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Button, Text } from '@getmicdrop/svelte-components';\r\n\timport type { EventData } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tformatFullDateCompact,\r\n\t\tformatEventTime,\r\n\t\tformatBrowseDate\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\tonShowtimeClick?: (occurrence: { id: number; slug: string }) => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, onShowtimeClick = undefined, labels = {}, }: Props = $props();\r\n\r\n\t// --- Data ---\r\n\ttype GroupedOccurrences = {\r\n\t\tdateLabel: string;\r\n\t\tdateKey: string;\r\n\t\toccurrences: NonNullable<EventData['seriesOccurrences']>;\r\n\t}[];\r\n\r\n\tlet groupedOccurrences: GroupedOccurrences = $derived((() => {\r\n\t\tif (!event.seriesOccurrences) return [];\r\n\t\tconst groups: Map<string, { dateLabel: string; occurrences: NonNullable<EventData['seriesOccurrences']> }> = new Map();\r\n\t\tfor (const occ of event.seriesOccurrences) {\r\n\t\t\tconst dateKey = formatBrowseDate(occ.startDateTime, event.timezone);\r\n\t\t\tif (!groups.has(dateKey)) {\r\n\t\t\t\tgroups.set(dateKey, {\r\n\t\t\t\t\tdateLabel: formatFullDateCompact(occ.startDateTime, event.timezone),\r\n\t\t\t\t\toccurrences: []\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tgroups.get(dateKey)!.occurrences.push(occ);\r\n\t\t}\r\n\t\treturn [...groups.entries()].map(([dateKey, g]) => ({\r\n\t\t\tdateKey,\r\n\t\t\tdateLabel: g.dateLabel,\r\n\t\t\toccurrences: g.occurrences\r\n\t\t}));\r\n\t})());\r\n\r\n\tfunction handleShowtimeClick(occ: { id: number; slug: string }) {\r\n\t\tif (onShowtimeClick) {\r\n\t\t\tonShowtimeClick(occ);\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<section>\r\n\t<div class=\"space-y-4\">\r\n\t\t{#each groupedOccurrences as group (group.dateKey)}\r\n\t\t\t<div>\r\n\t\t\t\t<Text size=\"sm\" class=\"font-semibold block mb-2\">\r\n\t\t\t\t\t{group.dateLabel}\r\n\t\t\t\t</Text>\r\n\t\t\t\t<div class=\"space-y-2\">\r\n\t\t\t\t\t{#each group.occurrences as occ (occ.id)}\r\n\t\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclass=\"row-a border-default bg-surface-primary hover:bg-surface-secondary\"\r\n\t\t\t\t\t\t\tclass:row-disabled={occ.ctaDisabled}\r\n\t\t\t\t\t\t\tonclick={() => !occ.ctaDisabled && handleShowtimeClick({ id: occ.id, slug: occ.slug })}\r\n\t\t\t\t\t\t\tonkeydown={(e: KeyboardEvent) => e.key === 'Enter' && !occ.ctaDisabled && handleShowtimeClick({ id: occ.id, slug: occ.slug })}\r\n\t\t\t\t\t\t\ttabindex={occ.ctaDisabled ? -1 : 0}\r\n\t\t\t\t\t\t\trole=\"link\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{#if event.displayStartTime !== false}\r\n\t\t\t\t\t\t\t\t<Text size=\"sm\" class=\"font-medium\">\r\n\t\t\t\t\t\t\t\t\t{formatEventTime(occ.startDateTime, event.timezone)}\r\n\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\tvariant={occ.ctaDisabled ? 'alternative' : 'default'}\r\n\t\t\t\t\t\t\t\tdisabled={occ.ctaDisabled}\r\n\t\t\t\t\t\t\t\tclass=\"shrink-0 pointer-events-none\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{occ.ctaText}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/each}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{/each}\r\n\t</div>\r\n</section>\r\n\r\n<style>\r\n\t/* === Shared === */\r\n\t.row-disabled {\r\n\t\topacity: 0.5;\r\n\t\tcursor: default;\r\n\t}\r\n\r\n\t/* === Design A: Full-width rows === */\r\n\t.row-a {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 0.75rem;\r\n\t\tpadding: 0.75rem;\r\n\t\tborder-radius: 0.5rem;\r\n\t\tborder-width: 1px;\r\n\t\tborder-style: solid;\r\n\t\tcursor: pointer;\r\n\t\ttransition-property: all;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n\r\n\t.row-a:hover:not(.row-disabled) {\r\n\t\tborder-color: hsl(var(--stroke-primary)); /* gray-300 */\r\n\t}\r\n\r\n .row-a:hover:not(.row-disabled) {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--stroke-primary)); /* gray-600 */\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { Heading, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport type { EventData, OrderTotals, OrderLine, PromoCodeState } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tmockEvent,\r\n\t\tmockSoldOutEvent,\r\n\t\tmockFreeEvent,\r\n\t\tmockSeriesEvent,\r\n\t\tmockSeriesInstanceEvent,\r\n\t\tmockCollectionEvent,\r\n\t\tmockRegistrationEvent,\r\n\t\tmockDonationEvent,\r\n\t\tmockMixedEvent,\r\n\t\tmockSectionedEvent,\r\n\t\tmockPromoEvent,\r\n\t\tmockMultiStageEvent,\r\n\t\tmockLongNameEvent,\r\n\t\tmockWideImageEvent\r\n\t} from '$lib/premium-ticket-experience/mock-data';\r\n\timport {\r\n\t\tcalculateTax,\r\n\t\tcreateDefaultPromoState,\r\n\t\tDURATION\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\timport HeroImage from './HeroImage.svelte';\r\n\timport EventHeader from './EventHeader.svelte';\r\n\timport TicketCard from './TicketCard.svelte';\r\n\timport BookingWidget from './BookingWidget.svelte';\r\n\timport AboutSection from './AboutSection.svelte';\r\n\timport PerformerGrid from './PerformerGrid.svelte';\r\n\timport FaqAccordion from './FaqAccordion.svelte';\r\n\timport MobileCta from './MobileCta.svelte';\r\n\timport DataToggle from './DataToggle.svelte';\r\n\timport PromoCodeInput from './PromoCodeInput.svelte';\r\n\timport ShowtimeDesigns from './ShowtimeDesigns.svelte';\r\n\timport GalleryCard from '../../../../components/Calendar/GalleryCard.svelte';\r\n\timport { mergeLabels } from '$lib/premium-ticket-experience/i18n/labels.js';\r\n\r\n\t// --- Props (dual-mode: showcase vs production) ---\r\n\tinterface Props {\r\n\t\t/** Real event data from production route. Absence = showcase mode. */\r\n\t\tevent?: EventData;\r\n\t\t/** Production checkout handler. Called with OrderTotals. */\r\n\t\tonCheckout?: (orderTotals: OrderTotals) => void;\r\n\t\t/** Production promo validation. Must return PromoCodeState from API. */\r\n\t\tonPromoApply?: (code: string) => Promise<PromoCodeState>;\r\n\t\t/** Production promo removal. */\r\n\t\tonPromoRemove?: () => void;\r\n\t\t/** Production collection event navigation. */\r\n\t\tonCollectionEventClick?: (event: { id?: number | string; slug: string }) => void;\r\n\t\t/** Production showtime navigation for series events. */\r\n\t\tonShowtimeClick?: (occurrence: { id: number; slug: string }) => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet {\r\n\t\tevent: eventProp = undefined,\r\n\t\tonCheckout: onCheckoutProp = undefined,\r\n\t\tonPromoApply: onPromoApplyProp = undefined,\r\n\t\tonPromoRemove: onPromoRemoveProp = undefined,\r\n\t\tonCollectionEventClick: onCollectionEventClickProp = undefined,\r\n\t\tonShowtimeClick: onShowtimeClickProp = undefined,\r\n\tlabels = {}, }: Props = $props();\r\n\r\n\tconst mergedLabels = $derived(mergeLabels(labels));\r\n\r\n\tlet isShowcaseMode = $derived(!eventProp);\r\n\r\n\t// --- State ---\r\n\t// Password removed: password protection is handled at the widget/browse level, not the event page\r\n\ttype DataVariant = 'default' | 'sold_out' | 'free' | 'registration'\r\n\t\t| 'series' | 'series_instance' | 'collection' | 'donation' | 'mixed' | 'sections' | 'promo' | 'multi_stage' | 'long' | 'wide';\r\n\tlet dataVariant = $state<DataVariant>('default');\r\n\r\n\t// Ticket quantities keyed by ticket ID\r\n\tlet quantities: Record<number, number> = $state({});\r\n\r\n\t// Promo code state\r\n\tlet promoState = $state<PromoCodeState>(createDefaultPromoState());\r\n\r\n\t// Donation amounts keyed by ticket ID\r\n\tlet donationAmounts: Record<number, string> = $state({});\r\n\r\n\t// --- Derived: event selection ---\r\n\tlet event: EventData = $derived(\r\n\t\tisShowcaseMode\r\n\t\t\t? (() => {\r\n\t\t\t\t\tswitch (dataVariant) {\r\n\t\t\t\t\t\tcase 'sold_out': return mockSoldOutEvent;\r\n\t\t\t\t\t\tcase 'free': return mockFreeEvent;\r\n\t\t\t\t\t\tcase 'registration': return mockRegistrationEvent;\r\n\t\t\t\t\t\tcase 'series': return mockSeriesEvent;\r\n\t\t\t\t\t\tcase 'series_instance': return mockSeriesInstanceEvent;\r\n\t\t\t\t\t\tcase 'collection': return mockCollectionEvent;\r\n\t\t\t\t\t\tcase 'donation': return mockDonationEvent;\r\n\t\t\t\t\t\tcase 'mixed': return mockMixedEvent;\r\n\t\t\t\t\t\tcase 'sections': return mockSectionedEvent;\r\n\t\t\t\t\t\tcase 'promo': return mockPromoEvent;\r\n\t\t\t\t\t\tcase 'multi_stage': return mockMultiStageEvent;\r\n\t\t\t\t\t\tcase 'long': return mockLongNameEvent;\r\n\t\t\t\t\t\tcase 'wide': return mockWideImageEvent;\r\n\t\t\t\t\t\tdefault: return mockEvent;\r\n\t\t\t\t\t}\r\n\t\t\t\t})()\r\n\t\t\t: eventProp!\r\n\t);\r\n\r\n\t// Reset all state when variant changes\r\n\t$effect(() => {\r\n\t\tconst _v = dataVariant;\r\n\t\tquantities = {};\r\n\t\tpromoState = createDefaultPromoState();\r\n\t\tdonationAmounts = {};\r\n\t});\r\n\r\n\t// Visible tickets (account for promo reveals)\r\n\tlet visibleTickets = $derived(\r\n\t\tevent.tickets.filter((t) => {\r\n\t\t\tif (!t.isHidden) return true;\r\n\t\t\tif (promoState.revealHiddenTickets) return true;\r\n\t\t\treturn promoState.revealTicketIds.includes(t.id);\r\n\t\t})\r\n\t);\r\n\r\n\t// Group tickets by section\r\n\tlet groupedTickets = $derived((() => {\r\n\t\tconst groups: Record<string, typeof visibleTickets> = {};\r\n\t\tfor (const ticket of visibleTickets) {\r\n\t\t\tconst section = ticket.sectionName || '_default';\r\n\t\t\tif (!groups[section]) groups[section] = [];\r\n\t\t\tgroups[section].push(ticket);\r\n\t\t}\r\n\t\treturn groups;\r\n\t})());\r\n\r\n\tlet hasMultipleSections = $derived(\r\n\t\tObject.keys(groupedTickets).filter((k) => k !== '_default').length > 0\r\n\t);\r\n\r\n\t// Show tickets for on_sale AND sold_out events (sold out shows them as disabled)\r\n\tlet isOnSale = $derived(event.status === 'on_sale');\r\n\tlet showTicketCards = $derived(\r\n\t\t(event.status === 'on_sale' || event.status === 'sold_out') && visibleTickets.length > 0\r\n\t);\r\n\r\n\t// Calculate order totals (with donation amounts and promo discounts)\r\n\tlet orderTotals: OrderTotals = $derived((() => {\r\n\t\tconst lines: OrderLine[] = [];\r\n\t\tlet subtotal = 0;\r\n\t\tlet fees = 0;\r\n\t\tlet promoDiscount = 0;\r\n\r\n\t\tfor (const ticket of event.tickets) {\r\n\t\t\tconst qty = quantities[ticket.id] ?? 0;\r\n\t\t\tif (qty <= 0) continue;\r\n\r\n\t\t\tconst isDonation = ticket.isDonation || ticket.ticketType === 2;\r\n\t\t\tconst basePrice = isDonation ? (parseFloat(donationAmounts[ticket.id]) || 0) : ticket.price;\r\n\t\t\tconst ticketFee = isDonation ? 0 : ticket.fee;\r\n\r\n\t\t\t// Calculate promo discount for this ticket\r\n\t\t\tlet ticketDiscount = 0;\r\n\t\t\tif (promoState.isApplied && promoState.discountAmount > 0 && !isDonation) {\r\n\t\t\t\tconst eligible = promoState.discountTicketIds.length === 0 || promoState.discountTicketIds.includes(ticket.id);\r\n\t\t\t\tif (eligible) {\r\n\t\t\t\t\tif (promoState.discountType === '%') {\r\n\t\t\t\t\t\tticketDiscount = basePrice * (promoState.discountAmount / 100);\r\n\t\t\t\t\t} else if (promoState.discountType === '$') {\r\n\t\t\t\t\t\tticketDiscount = Math.min(promoState.discountAmount, basePrice);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst effectivePrice = Math.max(0, basePrice - ticketDiscount);\r\n\t\t\tconst ticketSubtotal = effectivePrice * qty;\r\n\t\t\tconst totalTicketFee = ticketFee * qty;\r\n\r\n\t\t\tlines.push({\r\n\t\t\t\tticketId: ticket.id,\r\n\t\t\t\tticketName: ticket.name,\r\n\t\t\t\tquantity: qty,\r\n\t\t\t\tunitPrice: effectivePrice,\r\n\t\t\t\tfee: ticketFee,\r\n\t\t\t\tsubtotal: ticketSubtotal\r\n\t\t\t});\r\n\r\n\t\t\tsubtotal += ticketSubtotal;\r\n\t\t\tfees += totalTicketFee;\r\n\t\t\tpromoDiscount += ticketDiscount * qty;\r\n\t\t}\r\n\r\n\t\tconst taxes = calculateTax(subtotal + fees, event.venue.taxPercentage);\r\n\r\n\t\treturn {\r\n\t\t\tlines,\r\n\t\t\tsubtotal,\r\n\t\t\tfees,\r\n\t\t\ttaxes,\r\n\t\t\ttotal: subtotal + fees + taxes,\r\n\t\t\tpromoDiscount,\r\n\t\t\tgiftCardAmount: 0\r\n\t\t};\r\n\t})());\r\n\r\n\tlet hasSelectedTickets = $derived(orderTotals.lines.length > 0);\r\n\r\n\t// Series occurrences — group by date for same-day shows\r\n\tlet isSeries = $derived(!!event.eventSeriesId);\r\n\r\n\t// Collection — loose grouping of different events\r\n\tlet isCollection = $derived(!!event.collectionId);\r\n\r\n\t// Full-width layout mode (no sidebar)\r\n\tlet isFullWidth = $derived(isSeries || isCollection);\r\n\r\n\t// Collection events transformed to GalleryCard shape\r\n\tlet galleryEvents = $derived(\r\n\t\t(event.collectionEvents ?? []).map((ce) => ({\r\n\t\t\t...ce,\r\n\t\t\ttimeZone: event.timezone,\r\n\t\t}))\r\n\t);\r\n\r\n\tfunction handleCollectionEventClick(galleryEvent: { slug: string }) {\r\n\t\tif (onCollectionEventClickProp) {\r\n\t\t\tonCollectionEventClickProp(galleryEvent);\r\n\t\t} else {\r\n\t\t\tconsole.log('Navigate to collection event:', galleryEvent.slug);\r\n\t\t}\r\n\t}\r\n\r\n\t// --- Handlers ---\r\n\tfunction handleQuantityChange(ticketId: number, qty: number) {\r\n\t\tquantities = { ...quantities, [ticketId]: qty };\r\n\t}\r\n\r\n\tfunction handleDonationChange(ticketId: number, amount: string) {\r\n\t\tdonationAmounts = { ...donationAmounts, [ticketId]: amount };\r\n\t}\r\n\r\n\tfunction handleCheckout() {\r\n\t\tif (onCheckoutProp) {\r\n\t\t\tonCheckoutProp(orderTotals);\r\n\t\t} else {\r\n\t\t\tconsole.log('Checkout:', orderTotals);\r\n\t\t\tconst count = orderTotals.lines.reduce((s, l) => s + l.quantity, 0);\r\n\t\t\talert(`Proceeding to checkout with ${count} ticket(s) totaling {formatCurrency(orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}`);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handleDataVariantChange(v: DataVariant) {\r\n\t\tdataVariant = v;\r\n\t}\r\n\r\n\t// --- Promo handlers ---\r\n\t// Showcase test codes: REVEAL (unlocks hidden tickets), DISCOUNT10 (10% off), VIP20 ($20 off + reveal)\r\n\tfunction handlePromoApply(code: string) {\r\n\t\tif (onPromoApplyProp) {\r\n\t\t\t// Production mode: async API validation\r\n\t\t\tpromoState = { ...promoState, isValidating: true, error: '', hint: '' };\r\n\t\t\tonPromoApplyProp(code).then((result) => {\r\n\t\t\t\tpromoState = result;\r\n\t\t\t}).catch(() => {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\t...createDefaultPromoState(),\r\n\t\t\t\t\tcode: code.toUpperCase(),\r\n\t\t\t\t\terror: 'Failed to validate promo code'\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Showcase mode: mock validation\r\n\t\tconst upper = code.toUpperCase();\r\n\t\tpromoState = { ...promoState, isValidating: true, error: '', hint: '' };\r\n\r\n\t\t// Simulate async validation\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (upper === 'REVEAL') {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\tcode: upper,\r\n\t\t\t\t\tisApplied: true,\r\n\t\t\t\t\tisValidating: false,\r\n\t\t\t\t\terror: '',\r\n\t\t\t\t\thint: `${upper} applied. Hidden tickets are now visible.`,\r\n\t\t\t\t\tdiscountAmount: 0,\r\n\t\t\t\t\tdiscountType: '',\r\n\t\t\t\t\tdiscountTicketIds: [],\r\n\t\t\t\t\trevealHiddenTickets: true,\r\n\t\t\t\t\trevealTicketIds: []\r\n\t\t\t\t};\r\n\t\t\t} else if (upper === 'DISCOUNT10') {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\tcode: upper,\r\n\t\t\t\t\tisApplied: true,\r\n\t\t\t\t\tisValidating: false,\r\n\t\t\t\t\terror: '',\r\n\t\t\t\t\thint: `${upper} applied. 10% off all tickets.`,\r\n\t\t\t\t\tdiscountAmount: 10,\r\n\t\t\t\t\tdiscountType: '%',\r\n\t\t\t\t\tdiscountTicketIds: [],\r\n\t\t\t\t\trevealHiddenTickets: false,\r\n\t\t\t\t\trevealTicketIds: []\r\n\t\t\t\t};\r\n\t\t\t} else if (upper === 'VIP20') {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\tcode: upper,\r\n\t\t\t\t\tisApplied: true,\r\n\t\t\t\t\tisValidating: false,\r\n\t\t\t\t\terror: '',\r\n\t\t\t\t\thint: `${upper} applied. $20 off + hidden tickets revealed.`,\r\n\t\t\t\t\tdiscountAmount: 20,\r\n\t\t\t\t\tdiscountType: '$',\r\n\t\t\t\t\tdiscountTicketIds: [],\r\n\t\t\t\t\trevealHiddenTickets: true,\r\n\t\t\t\t\trevealTicketIds: []\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\t...createDefaultPromoState(),\r\n\t\t\t\t\tcode: upper,\r\n\t\t\t\t\terror: 'Invalid promo code'\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}, 800);\r\n\t}\r\n\r\n\tfunction handlePromoRemove() {\r\n\t\t// Always clean up hidden ticket quantities locally\r\n\t\tconst hiddenIds = event.tickets.filter((t) => t.isHidden).map((t) => t.id);\r\n\t\tconst newQuantities = { ...quantities };\r\n\t\tfor (const id of hiddenIds) {\r\n\t\t\tdelete newQuantities[id];\r\n\t\t}\r\n\t\tquantities = newQuantities;\r\n\t\tpromoState = createDefaultPromoState();\r\n\r\n\t\t// Notify production caller\r\n\t\tif (onPromoRemoveProp) {\r\n\t\t\tonPromoRemoveProp();\r\n\t\t}\r\n\t}\r\n\r\n\t// Compute per-ticket promo info\r\n\tfunction getTicketPromoInfo(ticketId: number, ticket: { price: number; isDonation: boolean; isHidden: boolean; ticketType?: number }) {\r\n\t\tconst isDonation = ticket.isDonation || ticket.ticketType === 2;\r\n\t\tconst isRevealed = ticket.isHidden && (promoState.revealHiddenTickets || promoState.revealTicketIds.includes(ticketId));\r\n\r\n\t\tlet isDiscounted = false;\r\n\t\tlet discountedPrice: number | null = null;\r\n\r\n\t\tif (promoState.isApplied && promoState.discountAmount > 0 && !isDonation) {\r\n\t\t\tconst eligible = promoState.discountTicketIds.length === 0 || promoState.discountTicketIds.includes(ticketId);\r\n\t\t\tif (eligible) {\r\n\t\t\t\tisDiscounted = true;\r\n\t\t\t\tif (promoState.discountType === '%') {\r\n\t\t\t\t\tdiscountedPrice = ticket.price * (1 - promoState.discountAmount / 100);\r\n\t\t\t\t} else if (promoState.discountType === '$') {\r\n\t\t\t\t\tdiscountedPrice = Math.max(0, ticket.price - promoState.discountAmount);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn { isRevealed, isDiscounted, discountedPrice };\r\n\t}\r\n</script>\r\n\r\n<div class=\"w-full min-h-screen bg-surface-primary text-color-primary\">\r\n\t<!-- Dev: mock data toggle (showcase mode only) -->\r\n\t{#if isShowcaseMode}\r\n\t\t<DataToggle current={dataVariant} onChange={handleDataVariantChange} />\r\n\t{/if}\r\n\r\n\t<div class=\"max-w-6xl mx-auto px-4 py-6 md:px-6 md:py-8\">\r\n\r\n\t\t<!-- Shared desktop content (rendered via snippet to avoid duplication) -->\r\n\t\t{#snippet desktopContent()}\r\n\t\t\t<!-- Hero image -->\r\n\t\t\t<HeroImage src={event.imageUrl} alt={event.title}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\r\n\t\t\t<!-- Event header (title, date, venue, stage, age, scarcity badge) -->\r\n\t\t\t<EventHeader {event} hideDateTime={isFullWidth} hideVenue={isCollection}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\r\n\t\t\t<!-- INLINE TICKET SELECTION (hidden for series/collection — no single-event tickets) -->\r\n\t\t\t{#if showTicketCards && !isFullWidth}\r\n\t\t\t\t<section id=\"desktop-ticket-section\">\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">\r\n\t\t\t\t\t\t{isOnSale ? (labels.selectTickets || 'Select tickets') : (labels.ticketsTab || 'Tickets')}\r\n\t\t\t\t\t</Heading>\r\n\r\n\t\t\t\t\t{#if hasMultipleSections}\r\n\t\t\t\t\t\t<!-- Sectioned tickets -->\r\n\t\t\t\t\t\t{#each Object.entries(groupedTickets) as [sectionName, sectionTickets] (sectionName)}\r\n\t\t\t\t\t\t\t<div class=\"mb-6 last:mb-0\">\r\n\t\t\t\t\t\t\t\t{#if sectionName !== '_default'}\r\n\t\t\t\t\t\t\t\t\t<Heading level={3} size=\"sm\" weight=\"semibold\" class=\"mb-3\">\r\n\t\t\t\t\t\t\t\t\t\t{sectionName}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t\t\t\t{#each sectionTickets as ticket (ticket.id)}\r\n\t\t\t\t\t\t\t\t\t\t{@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n\t\t\t\t\t\t\t\t\t\t<TicketCard\r\n\t\t\t\t\t\t\t\t\t\t\t{ticket}\r\n\t\t\t\t\t\t\t\t\t\t\tquantity={quantities[ticket.id] ?? 0}\r\n\t\t\t\t\t\t\t\t\t\t\tonQuantityChange={handleQuantityChange}\r\n\t\t\t\t\t\t\t\t\t\t\tdonationAmount={donationAmounts[ticket.id] ?? ''}\r\n\t\t\t\t\t\t\t\t\t\t\tonDonationChange={handleDonationChange}\r\n\t\t\t\t\t\t\t\t\t\t\tisRevealedByPromo={promoInfo.isRevealed}\r\n\t\t\t\t\t\t\t\t\t\t\tisDiscountedByPromo={promoInfo.isDiscounted}\r\n\t\t\t\t\t\t\t\t\t\t\tdiscountedPrice={promoInfo.discountedPrice}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t<!-- Flat ticket list -->\r\n\t\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t\t{#each visibleTickets as ticket (ticket.id)}\r\n\t\t\t\t\t\t\t\t{@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n\t\t\t\t\t\t\t\t<TicketCard\r\n\t\t\t\t\t\t\t\t\t{ticket}\r\n\t\t\t\t\t\t\t\t\tquantity={quantities[ticket.id] ?? 0}\r\n\t\t\t\t\t\t\t\t\tonQuantityChange={handleQuantityChange}\r\n\t\t\t\t\t\t\t\t\tdonationAmount={donationAmounts[ticket.id] ?? ''}\r\n\t\t\t\t\t\t\t\t\tonDonationChange={handleDonationChange}\r\n\t\t\t\t\t\t\t\t\tisRevealedByPromo={promoInfo.isRevealed}\r\n\t\t\t\t\t\t\t\t\tisDiscountedByPromo={promoInfo.isDiscounted}\r\n\t\t\t\t\t\t\t\t\tdiscountedPrice={promoInfo.discountedPrice}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t<!-- Promo code input: only show when event is on sale -->\r\n\t\t\t\t\t{#if isOnSale}\r\n\t\t\t\t\t\t<PromoCodeInput\r\n\t\t\t\t\t\t\t{promoState}\r\n\t\t\t\t\t\t\tonApply={handlePromoApply}\r\n\t\t\t\t\t\t\tonRemove={handlePromoRemove}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Showtimes (series — primary content, before About) -->\r\n\t\t\t{#if isSeries}\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Upcoming Shows</Heading>\r\n\t\t\t\t\t<ShowtimeDesigns {event} onShowtimeClick={onShowtimeClickProp}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Collection: About goes above event widgets -->\r\n\t\t\t{#if isCollection}\r\n\t\t\t\t<AboutSection description={event.description}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Collection events grid (widgets) -->\r\n\t\t\t{#if isCollection}\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Events</Heading>\r\n\t\t\t\t\t<div class=\"collection-grid\">\r\n\t\t\t\t\t\t{#each galleryEvents as ce (ce.id)}\r\n\t\t\t\t\t\t\t<GalleryCard event={ce} oneventClick={handleCollectionEventClick} />\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- About section (non-collection) -->\r\n\t\t\t{#if !isCollection}\r\n\t\t\t\t<AboutSection description={event.description}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Performers (hidden for series/collection) -->\r\n\t\t\t{#if !isFullWidth}\r\n\t\t\t\t<PerformerGrid performers={event.performers}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- FAQs (hidden for collection — FAQs are per-venue, not per-collection) -->\r\n\t\t\t{#if event.faqs.length > 0 && !isCollection}\r\n\t\t\t\t<FaqAccordion faqs={event.faqs}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Disclaimer -->\r\n\t\t\t{#if event.disclaimer}\r\n\t\t\t\t<section class=\"pt-4 border-t border-default\">\r\n\t\t\t\t\t<Text size=\"xs\" color=\"muted\" leading=\"relaxed\" class=\"block\">\r\n\t\t\t\t\t\t{event.disclaimer}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\t\t{/snippet}\r\n\r\n\t\t<!-- ============================================== -->\r\n\t\t<!-- DESKTOP LAYOUT -->\r\n\t\t<!-- ============================================== -->\r\n\t\t{#if isFullWidth}\r\n\t\t\t<!-- Series/Collection: full-width single column (no sidebar) -->\r\n\t\t\t<div class=\"hidden md:block space-y-8\">\r\n\t\t\t\t{@render desktopContent()}\r\n\t\t\t</div>\r\n\t\t{:else}\r\n\t\t\t<!-- Regular: two-column Airbnb split (1fr 360px) -->\r\n\t\t\t<div class=\"hidden md:grid gap-8 items-start\" style=\"grid-template-columns: 1fr 360px;\">\r\n\t\t\t\t<div class=\"space-y-8\">\r\n\t\t\t\t\t{@render desktopContent()}\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"sticky top-6\">\r\n\t\t\t\t\t<BookingWidget\r\n\t\t\t\t\t\t{event}\r\n\t\t\t\t\t\t{orderTotals}\r\n\t\t\t\t\t\t{hasSelectedTickets}\r\n\t\t\t\t\t\tonCheckout={handleCheckout}\r\n\t\t\t\t\t\tpromoApplied={promoState.isApplied}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\r\n\t\t<!-- ============================================== -->\r\n\t\t<!-- MOBILE: Single column with fixed bottom CTA -->\r\n\t\t<!-- ============================================== -->\r\n\t\t<div class=\"md:hidden space-y-6\" class:pb-24={!isFullWidth}>\r\n\t\t\t<!-- Hero image -->\r\n\t\t\t<HeroImage src={event.imageUrl} alt={event.title}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\r\n\t\t\t<!-- Event header -->\r\n\t\t\t<EventHeader {event} hideDateTime={isFullWidth} hideVenue={isCollection}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\r\n\t\t\t<!-- Inline ticket selection (mobile — hidden for series/collection) -->\r\n\t\t\t{#if showTicketCards && !isFullWidth}\r\n\t\t\t\t<section id=\"mobile-ticket-section\">\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">\r\n\t\t\t\t\t\t{isOnSale ? (labels.selectTickets || 'Select tickets') : (labels.ticketsTab || 'Tickets')}\r\n\t\t\t\t\t</Heading>\r\n\r\n\t\t\t\t\t{#if hasMultipleSections}\r\n\t\t\t\t\t\t{#each Object.entries(groupedTickets) as [sectionName, sectionTickets] (sectionName)}\r\n\t\t\t\t\t\t\t<div class=\"mb-6 last:mb-0\">\r\n\t\t\t\t\t\t\t\t{#if sectionName !== '_default'}\r\n\t\t\t\t\t\t\t\t\t<Heading level={3} size=\"sm\" weight=\"semibold\" class=\"mb-3\">\r\n\t\t\t\t\t\t\t\t\t\t{sectionName}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t\t\t\t{#each sectionTickets as ticket (ticket.id)}\r\n\t\t\t\t\t\t\t\t\t\t{@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n\t\t\t\t\t\t\t\t\t\t<TicketCard\r\n\t\t\t\t\t\t\t\t\t\t\t{ticket}\r\n\t\t\t\t\t\t\t\t\t\t\tquantity={quantities[ticket.id] ?? 0}\r\n\t\t\t\t\t\t\t\t\t\t\tonQuantityChange={handleQuantityChange}\r\n\t\t\t\t\t\t\t\t\t\t\tdonationAmount={donationAmounts[ticket.id] ?? ''}\r\n\t\t\t\t\t\t\t\t\t\t\tonDonationChange={handleDonationChange}\r\n\t\t\t\t\t\t\t\t\t\t\tisRevealedByPromo={promoInfo.isRevealed}\r\n\t\t\t\t\t\t\t\t\t\t\tisDiscountedByPromo={promoInfo.isDiscounted}\r\n\t\t\t\t\t\t\t\t\t\t\tdiscountedPrice={promoInfo.discountedPrice}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t\t{#each visibleTickets as ticket (ticket.id)}\r\n\t\t\t\t\t\t\t\t{@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n\t\t\t\t\t\t\t\t<TicketCard\r\n\t\t\t\t\t\t\t\t\t{ticket}\r\n\t\t\t\t\t\t\t\t\tquantity={quantities[ticket.id] ?? 0}\r\n\t\t\t\t\t\t\t\t\tonQuantityChange={handleQuantityChange}\r\n\t\t\t\t\t\t\t\t\tdonationAmount={donationAmounts[ticket.id] ?? ''}\r\n\t\t\t\t\t\t\t\t\tonDonationChange={handleDonationChange}\r\n\t\t\t\t\t\t\t\t\tisRevealedByPromo={promoInfo.isRevealed}\r\n\t\t\t\t\t\t\t\t\tisDiscountedByPromo={promoInfo.isDiscounted}\r\n\t\t\t\t\t\t\t\t\tdiscountedPrice={promoInfo.discountedPrice}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t<!-- Promo code input: only show when event is on sale -->\r\n\t\t\t\t\t{#if isOnSale}\r\n\t\t\t\t\t\t<PromoCodeInput\r\n\t\t\t\t\t\t\t{promoState}\r\n\t\t\t\t\t\t\tonApply={handlePromoApply}\r\n\t\t\t\t\t\t\tonRemove={handlePromoRemove}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</section>\r\n\r\n\t\t\t\t<!-- Mobile order summary: now in slide-up drawer from MobileCta -->\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Showtimes (mobile — primary content for series) -->\r\n\t\t\t{#if isSeries}\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Upcoming Shows</Heading>\r\n\t\t\t\t\t<ShowtimeDesigns {event} onShowtimeClick={onShowtimeClickProp}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Collection: About goes above event widgets -->\r\n\t\t\t{#if isCollection}\r\n\t\t\t\t<AboutSection description={event.description}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Collection events grid (mobile) -->\r\n\t\t\t{#if isCollection}\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Events</Heading>\r\n\t\t\t\t\t<div class=\"collection-grid\">\r\n\t\t\t\t\t\t{#each galleryEvents as ce (ce.id)}\r\n\t\t\t\t\t\t\t<GalleryCard event={ce} oneventClick={handleCollectionEventClick} />\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- About section (non-collection) -->\r\n\t\t\t{#if !isCollection}\r\n\t\t\t\t<AboutSection description={event.description}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Performers (hidden for series/collection) -->\r\n\t\t\t{#if !isFullWidth}\r\n\t\t\t\t<PerformerGrid performers={event.performers}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- FAQs (hidden for collection) -->\r\n\t\t\t{#if !isCollection}\r\n\t\t\t\t<FaqAccordion faqs={event.faqs}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Disclaimer -->\r\n\t\t\t{#if event.disclaimer}\r\n\t\t\t\t<section class=\"pt-4 border-t border-default\">\r\n\t\t\t\t\t<Text size=\"xs\" color=\"muted\" leading=\"relaxed\" class=\"block\">\r\n\t\t\t\t\t\t{event.disclaimer}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\r\n\t\t<!-- Mobile: Fixed bottom CTA bar (DICE-style) — hidden for series/collection -->\r\n\t\t{#if !isFullWidth}\r\n\t\t\t<div class=\"md:hidden\">\r\n\t\t\t\t<MobileCta\r\n\t\t\t\t\t{event}\r\n\t\t\t\t\t{orderTotals}\r\n\t\t\t\t\t{hasSelectedTickets}\r\n\t\t\t\t\tonCheckout={handleCheckout}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t</div>\r\n</div>\r\n\r\n<style>\r\n\t.collection-grid {\r\n\t\tdisplay: grid;\r\n\t\tgap: 1.5rem;\r\n\t\tgrid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\r\n\t}\r\n</style>\r\n"],"names":["$","$$props","div","root","img","img_1","hideDateTime","hideVenue","scarcityLevel","getScarcityLevel","scarcityText","getScarcityText","ageText","shareEvent","url","shareData","err","fallbackShare","div_1","Heading","node","ScarcityBadge","$$anchor","$$render","consequent","button","Share","div_2","fragment_2","Calendar","span","node_4","div_3","root_4","Time","div_4","node_6","span_1","root_5","formatTimeRange","span_2","root_6","formatEventTime","consequent_1","alternate","span_3","root_7","formatDoorsTime","consequent_2","div_5","root_8","span_4","node_9","consequent_3","consequent_4","formatFullDateCompact","consequent_5","div_6","fragment_3","Location","div_7","node_11","span_5","span_6","root_10","text_7","consequent_6","div_8","root_11","Theater","span_7","node_14","consequent_7","div_9","root_12","User","span_8","node_16","consequent_8","text_6","consequent_9","donationAmount","isRevealedByPromo","isDiscountedByPromo","discountedPrice","labels","isDonation","isSoldOut","isComingSoon","isSalesEnded","isDisabled","isSelected","donationValue","donationError","isDonationValid","canDecrement","canIncrement","decrement","newQty","increment","donationInputValue","syncDonation","totalPrice","priceDisplay","feeCaption","salesStartDisplay","formatSmartSalesDate","article","Badge","Text","node_2","root_13","Input","$$value","discountedTotal","fragment_9","root_15","formatCurrency","root_16","fragment_10","root_18","consequent_10","consequent_11","Button","Subtract","node_10","Add","consequent_12","alternate_1","classes","DURATION","classes_1","promoApplied","ctaConfig","getCtaConfig","getPriceDisplay","isFreeEvent","t","scrollToTickets","section","Card","root_1","root_2","root_3","OrderSummary","node_3","$0","text_1","root_9","formatBrowseDate","node_12","alternate_2","root_20","node_15","text_9","text_10","node_17","text_11","alternate_4","paragraphs","p","paragraph","node_1","performer","$1","Avatar","Accordion","faq","AccordionItem","text_2","totalTicketCount","sum","l","drawerOpen","handleCtaClick","toggleDrawer","closeDrawer","ChevronDown","button_1","text_3","ChevronUp","node_8","text_5","options","option","isActive","fragment_1","text","isExpanded","inputValue","handleApply","trimmed","handleRemove","handleKeydown","e","shouldExpand","$2","$3","onShowtimeClick","groupedOccurrences","groups","occ","dateKey","g","handleShowtimeClick","group","eventProp","onCheckoutProp","onPromoApplyProp","onPromoRemoveProp","onCollectionEventClickProp","onShowtimeClickProp","mergedLabels","mergeLabels","isShowcaseMode","dataVariant","quantities","promoState","createDefaultPromoState","donationAmounts","event","mockSoldOutEvent","mockFreeEvent","mockRegistrationEvent","mockSeriesEvent","mockSeriesInstanceEvent","mockCollectionEvent","mockDonationEvent","mockMixedEvent","mockSectionedEvent","mockPromoEvent","mockMultiStageEvent","mockLongNameEvent","mockWideImageEvent","mockEvent","visibleTickets","groupedTickets","ticket","hasMultipleSections","k","isOnSale","showTicketCards","orderTotals","lines","subtotal","fees","promoDiscount","qty","basePrice","ticketFee","ticketDiscount","effectivePrice","ticketSubtotal","totalTicketFee","taxes","calculateTax","hasSelectedTickets","isSeries","isCollection","isFullWidth","galleryEvents","ce","handleCollectionEventClick","galleryEvent","handleQuantityChange","ticketId","handleDonationChange","amount","handleCheckout","count","s","handleDataVariantChange","v","handlePromoApply","code","result","upper","handlePromoRemove","hiddenIds","newQuantities","id","getTicketPromoInfo","isRevealed","isDiscounted","DataToggle","desktopContent","HeroImage","EventHeader","section_1","sectionName","sectionTickets","$$item","$$array","node_7","promoInfo","TicketCard","PromoCodeInput","section_2","ShowtimeDesigns","AboutSection","section_3","GalleryCard","PerformerGrid","FaqAccordion","section_4","root_22","node_19","text_4","root_24","node_21","root_25","node_22","BookingWidget","node_23","div_10","node_20","node_24","node_25","section_5","root_26","node_27","$$array_1","div_11","root_29","consequent_13","div_12","node_30","div_13","root_33","consequent_14","consequent_15","consequent_16","section_6","root_36","node_33","node_34","consequent_17","consequent_18","section_7","root_39","node_37","div_14","consequent_19","consequent_20","consequent_21","consequent_22","section_8","root_45","node_42","consequent_23","div_15","root_47","MobileCta","node_44","consequent_24"],"mappings":"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"}
1
+ {"version":3,"file":"AirbnbSplitMain-C6VYPKl1.js","sources":["../src/lib/premium-ticket-experience/variants/v3-airbnb-split/HeroImage.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/EventHeader.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/TicketCard.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/BookingWidget.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/AboutSection.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/PerformerGrid.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/FaqAccordion.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/MobileCta.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/DataToggle.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/PromoCodeInput.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/ShowtimeDesigns.svelte","../src/lib/premium-ticket-experience/variants/v3-airbnb-split/AirbnbSplitMain.svelte"],"sourcesContent":["<script lang=\"ts\">\r\n\tinterface Props {\r\n\t\tsrc: string;\r\n\t\talt: string;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { src, alt, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n<div class=\"hero-container relative w-full overflow-hidden rounded-xl bg-surface-secondary\">\r\n\t<img\r\n\t\t{src}\r\n\t\talt=\"\"\r\n\t\tclass=\"hero-blur\"\r\n\t\tloading=\"eager\"\r\n\t\taria-hidden=\"true\"\r\n\t/>\r\n\t<img\r\n\t\t{src}\r\n\t\t{alt}\r\n\t\tclass=\"hero-image\"\r\n\t\tloading=\"eager\"\r\n\t/>\r\n</div>\r\n\r\n<style>\r\n\t.hero-container {\r\n\t\tmax-height: 37.5rem;\r\n\t\tmin-height: 12rem;\r\n\t}\r\n\r\n\t/* Blurred zoomed copy as backdrop */\r\n\t.hero-blur {\r\n\t\tposition: absolute;\r\n\t\tinset: 0;\r\n\t\twidth: 100%;\r\n\t\theight: 100%;\r\n\t\tobject-fit: cover;\r\n\t\ttransform: scale(1.15);\r\n\t\tfilter: blur(16px) saturate(1.2);\r\n\t}\r\n\r\n\t/* Main image on top, contained */\r\n\t.hero-image {\r\n\t\tposition: relative;\r\n\t\twidth: 100%;\r\n\t\tobject-fit: contain;\r\n\t\tmax-height: 37.5rem;\r\n\t\tmin-height: 12rem;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Calendar, Location, Share, Theater, Time, User } from 'carbon-icons-svelte';\r\n\timport { Heading } from '@getmicdrop/svelte-components';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { EventData, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tformatFullDateCompact,\r\n\t\tformatEventTime,\r\n\t\tformatTimeRange,\r\n\t\tformatDoorsTime,\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\thideDateTime?: boolean;\r\n\t\thideVenue?: boolean;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, hideDateTime = false, hideVenue = false, labels = {}, }: Props = $props();\r\n\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(event.totalTicketsRemaining, event.totalTicketsCapacity)\r\n\t);\r\n\tlet scarcityText = $derived(\r\n\t\tgetScarcityText(scarcityLevel, event.totalTicketsRemaining, 'event')\r\n\t);\r\n\r\n\tlet ageText = $derived((() => {\r\n\t\tif (!event.displayAgeRestriction) return null;\r\n\t\tif (event.ageRestriction && event.ageRestriction > 0) {\r\n\t\t\treturn `Ages ${event.ageRestriction}+`;\r\n\t\t}\r\n\t\treturn 'All ages';\r\n\t})());\r\n\r\n\tasync function shareEvent() {\r\n\t\tconst url = typeof window !== 'undefined'\r\n\t\t\t? `${window.location.origin}/e/${event.id}-${event.slug}`\r\n\t\t\t: '#';\r\n\t\tconst shareData = { url };\r\n\r\n\t\tif (navigator.share) {\r\n\t\t\ttry {\r\n\t\t\t\tawait navigator.share(shareData);\r\n\t\t\t} catch (err: unknown) {\r\n\t\t\t\tif (err instanceof Error && err.name !== 'AbortError') {\r\n\t\t\t\t\tfallbackShare(url);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfallbackShare(url);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fallbackShare(url: string) {\r\n\t\tnavigator.clipboard.writeText(url).then(() => {\r\n\t\t\talert('Link copied to clipboard!');\r\n\t\t}).catch(() => {\r\n\t\t\tprompt('Copy this link:', url);\r\n\t\t});\r\n\t}\r\n</script>\r\n\r\n<div class=\"flex flex-col gap-4\">\r\n\t<div class=\"flex items-start gap-3 flex-wrap\">\r\n\t\t<Heading level={1} size=\"xl\" weight=\"bold\" class=\"sm:text-2xl leading-tight\">\r\n\t\t\t{event.title}\r\n\t\t</Heading>\r\n\t\t{#if scarcityText && event.status === 'on_sale'}\r\n\t\t\t<ScarcityBadge\r\n\t\t\t\tremaining={event.totalTicketsRemaining}\r\n\t\t\t\ttotal={event.totalTicketsCapacity}\r\n\t\t\t\tcontext=\"event\"\r\n\t\t\t/>\r\n\t\t{/if}\r\n\t</div>\r\n\r\n\t<!-- Share -->\r\n\t<button type=\"button\" class=\"share-btn text-color-muted hover:text-color-secondary\" onclick={shareEvent}>\r\n\t\t<Share size={16} class=\"shrink-0\" />\r\n\t\tShare\r\n\t</button>\r\n\r\n\t{#if !hideDateTime}\r\n\t\t<!-- Date -->\r\n\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t<Calendar size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t<span class=\"body-md font-medium\">{formatFullDateCompact(event.startDateTime, event.timezone)}</span>\r\n\t\t</div>\r\n\r\n\t\t<!-- Time + doors -->\r\n\t\t{#if event.displayStartTime !== false}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Time size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<div class=\"flex flex-col gap-0.5\">\r\n\t\t\t\t\t{#if event.displayEndTime !== false}\r\n\t\t\t\t\t\t<span class=\"body-md font-medium\">{formatTimeRange(event.startDateTime, event.endDateTime, event.timezone)}</span>\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t<span class=\"body-md font-medium\">{formatEventTime(event.startDateTime, event.timezone)}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t\t{#if event.displayDoorsTime !== false && event.doorsOpenTime}\r\n\t\t\t\t\t\t<span class=\"caption\">Doors open {formatDoorsTime(event.doorsOpenTime, event.timezone)}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{:else if event.displayDoorsTime !== false && event.doorsOpenTime}\r\n\t\t\t<!-- No start/end time, but doors time is shown -->\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Time size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">Doors open {formatDoorsTime(event.doorsOpenTime, event.timezone)}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t{/if}\r\n\r\n\t{#if !hideVenue}\r\n\t\t<!-- Venue + address -->\r\n\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t<Location size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t<div class=\"flex flex-col gap-0.5\">\r\n\t\t\t\t<span class=\"body-md font-medium\">{event.venue.name}</span>\r\n\t\t\t\t{#if event.venue.address}\r\n\t\t\t\t\t<span class=\"caption\">{event.venue.address}</span>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\r\n\t\t<!-- Stage name -->\r\n\t\t{#if event.stageName}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<Theater size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">{event.stageName}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\r\n\t\t<!-- Age restriction -->\r\n\t\t{#if ageText}\r\n\t\t\t<div class=\"flex items-start gap-3\">\r\n\t\t\t\t<User size={16} class=\"shrink-0 mt-0.5 icon-muted\" />\r\n\t\t\t\t<span class=\"body-md font-medium\">{ageText}</span>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.share-btn {\r\n\t\tdisplay: inline-flex;\r\n\t\talign-items: center;\r\n\t\tgap: 0.375rem;\r\n\t\tfont-size: 0.75rem;\r\n\t\tline-height: 1rem;\r\n\t\ttransition-property: color;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { Add, Subtract } from 'carbon-icons-svelte';\r\n\timport { Badge, Button, Heading, Input, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { TicketTypeData, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText,\r\n\t\tformatSmartSalesDate,\r\n\t\tDURATION\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tticket: TicketTypeData;\r\n\t\tquantity: number;\r\n\t\tonQuantityChange: (ticketId: number, quantity: number) => void;\r\n\t\tdonationAmount?: string;\r\n\t\tonDonationChange?: (ticketId: number, amount: string) => void;\r\n\t\tisRevealedByPromo?: boolean;\r\n\t\tisDiscountedByPromo?: boolean;\r\n\t\tdiscountedPrice?: number | null;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet {\r\n\t\tticket,\r\n\t\tquantity,\r\n\t\tonQuantityChange,\r\n\t\tdonationAmount = '',\r\n\t\tonDonationChange,\r\n\t\tisRevealedByPromo = false,\r\n\t\tisDiscountedByPromo = false,\r\n\t\tdiscountedPrice = null,\r\n\t\tlabels = {},\r\n\t}: Props = $props();\r\n\r\n\t// --- State detection ---\r\n\tlet isDonation = $derived(ticket.isDonation || ticket.ticketType === 2);\r\n\tlet isSoldOut = $derived(ticket.status === 'sold_out' || ticket.quantityAvailable === 0);\r\n\tlet isComingSoon = $derived(ticket.status === 'coming_soon');\r\n\tlet isSalesEnded = $derived(ticket.status === 'sales_ended');\r\n\tlet isDisabled = $derived(isSoldOut || isComingSoon || isSalesEnded);\r\n\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(ticket.quantityAvailable, ticket.quantityTotal)\r\n\t);\r\n\tlet scarcityText = $derived(getScarcityText(scarcityLevel, ticket.quantityAvailable, 'ticket'));\r\n\tlet isSelected = $derived(quantity > 0);\r\n\r\n\t// Donation validation\r\n\tlet donationValue = $derived(parseFloat(donationAmount) || 0);\r\n\tlet donationError = $derived(\r\n\t\tisDonation && donationAmount !== '' && donationValue < 1 ? 'Minimum $1.00' : ''\r\n\t);\r\n\tlet isDonationValid = $derived(!isDonation || (donationAmount !== '' && donationValue >= 1));\r\n\r\n\tlet canDecrement = $derived(quantity > 0);\r\n\tlet canIncrement = $derived(\r\n\t\t!isDisabled &&\r\n\t\tquantity < ticket.maxPerOrder &&\r\n\t\tquantity < ticket.quantityAvailable &&\r\n\t\tisDonationValid\r\n\t);\r\n\r\n\tfunction decrement() {\r\n\t\tif (canDecrement) {\r\n\t\t\t// If decrementing would go below minimum, jump to 0 (remove from cart)\r\n\t\t\tconst newQty = quantity - 1;\r\n\t\t\tonQuantityChange(ticket.id, newQty < ticket.minPerOrder ? 0 : newQty);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction increment() {\r\n\t\tif (canIncrement) {\r\n\t\t\t// If at 0, jump to minimum purchase quantity\r\n\t\t\tconst newQty = quantity === 0 ? ticket.minPerOrder : quantity + 1;\r\n\t\t\tonQuantityChange(ticket.id, newQty);\r\n\t\t}\r\n\t}\r\n\r\n\tlet donationInputValue = $state(donationAmount);\r\n\r\n\t// Sync external donationAmount prop to local state\r\n\t$effect(() => {\r\n\t\tdonationInputValue = donationAmount;\r\n\t});\r\n\r\n\t// Push local changes upstream\r\n\tfunction syncDonation() {\r\n\t\tif (donationInputValue !== donationAmount) {\r\n\t\t\tonDonationChange?.(ticket.id, donationInputValue);\r\n\t\t}\r\n\t}\r\n\r\n\t// Price display — show total inclusive of fees (matching production TicketBlock.svelte)\r\n\tlet totalPrice = $derived(isDonation ? 0 : ticket.price + (ticket.price === 0 ? 0 : ticket.fee));\r\n\tlet priceDisplay = $derived(\r\n\t\tisDonation ? '' : ticket.price === 0 ? (labels.free || 'Free') : `{formatCurrency(totalPrice as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}`\r\n\t);\r\n\tlet feeCaption = $derived(\r\n\t\t!isDonation && ticket.fee > 0 && ticket.price > 0 ? `incl. {formatCurrency(ticket.fee as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)} ${labels.fee || 'fee'}` : ''\r\n\t);\r\n\r\n\t// Sales start display for coming soon tickets\r\n\tlet salesStartDisplay = $derived(\r\n\t\tisComingSoon && ticket.salesStartDate\r\n\t\t\t? `Sales start ${formatSmartSalesDate(ticket.salesStartDate)}`\r\n\t\t\t: isComingSoon\r\n\t\t\t\t? 'Coming soon'\r\n\t\t\t\t: ''\r\n\t);\r\n</script>\r\n\r\n<article\r\n\tclass=\"ticket-card rounded-lg border p-4 transition-all\"\r\n\tclass:selected={isSelected}\r\n\tclass:disabled-ticket={isDisabled}\r\n\tclass:revealed={isRevealedByPromo && !isDisabled}\r\n\tstyle=\"transition-duration: {DURATION.normal}ms;\"\r\n>\r\n\t<div class=\"vc-flex-between-start gap-4\">\r\n\t\t<!-- Ticket info -->\r\n\t\t<div class=\"flex-1 min-w-0\">\r\n\t\t\t<div class=\"flex-row-2 flex-wrap\">\r\n\t\t\t\t<Heading level={4} size=\"sm\" weight=\"semibold\">\r\n\t\t\t\t\t{ticket.name}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t{#if isSoldOut}\r\n\t\t\t\t\t<Badge variant=\"error\">{labels.soldOut || 'Sold out'}</Badge>\r\n\t\t\t\t{:else if isSalesEnded}\r\n\t\t\t\t\t<Badge variant=\"neutral\">Sales ended</Badge>\r\n\t\t\t\t{:else if isRevealedByPromo}\r\n\t\t\t\t\t<Badge variant=\"success\">Unlocked</Badge>\r\n\t\t\t\t{:else if isDiscountedByPromo}\r\n\t\t\t\t\t<Badge variant=\"green\">Discount applied</Badge>\r\n\t\t\t\t{:else if scarcityText && !isComingSoon}\r\n\t\t\t\t\t<ScarcityBadge\r\n\t\t\t\t\t\tremaining={ticket.quantityAvailable}\r\n\t\t\t\t\t\ttotal={ticket.quantityTotal}\r\n\t\t\t\t\t\tcontext=\"ticket\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t{#if ticket.description}\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block mt-1 line-clamp-2\">\r\n\t\t\t\t\t{ticket.description}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Price row -->\r\n\t\t\t<div class=\"flex-row-2 mt-2\">\r\n\t\t\t\t{#if isDonation}\r\n\t\t\t\t\t<!-- Donation: $ input -->\r\n\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t\t\t<div class=\"donation-input-wrapper\" oninput={syncDonation}>\r\n\t\t\t\t\t\t<Input\r\n\t\t\t\t\t\t\tlabel=\"Donation amount\"\r\n\t\t\t\t\t\t\tsize=\"md\"\r\n\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\tplaceholder=\"0.00\"\r\n\t\t\t\t\t\t\tbind:value={donationInputValue}\r\n\t\t\t\t\t\t\tdisabled={isDisabled}\r\n\t\t\t\t\t\t\terrorText={donationError}\r\n\t\t\t\t\t\t\tcolor={donationError ? 'red' : 'base'}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t{:else if isDiscountedByPromo && discountedPrice !== null}\r\n\t\t\t\t\t<!-- Discounted: strikethrough original total + discounted total (both inclusive of fee) -->\r\n\t\t\t\t\t{@const discountedTotal = discountedPrice + (discountedPrice === 0 ? 0 : ticket.fee)}\r\n\t\t\t\t\t<span class=\"price-strikethrough\">{formatCurrency(totalPrice as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}</span>\r\n\t\t\t\t\t<span class=\"price-discounted\">{formatCurrency(discountedTotal as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}</span>\r\n\t\t\t\t\t{#if feeCaption}\r\n\t\t\t\t\t\t<span class=\"price-fee\">{feeCaption}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t{:else if isComingSoon}\r\n\t\t\t\t\t<!-- Coming soon: show price dimmed -->\r\n\t\t\t\t\t<span class=\"price-lg text-color-muted\">{priceDisplay}</span>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<!-- Standard price -->\r\n\t\t\t\t\t<span class=\"price-lg text-color-primary\">{priceDisplay}</span>\r\n\t\t\t\t\t{#if feeCaption}\r\n\t\t\t\t\t\t<span class=\"price-fee\">{feeCaption}</span>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- Coming soon / sales ended message -->\r\n\t\t\t{#if salesStartDisplay}\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block mt-1.5\">\r\n\t\t\t\t\t{salesStartDisplay}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\r\n\t\t<!-- Quantity controls -->\r\n\t\t<div class=\"flex items-center quantity-selector\" class:active={isSelected}>\r\n\t\t\t{#if isSoldOut || isComingSoon || isSalesEnded}\r\n\t\t\t\t<!-- No controls for coming soon / sales ended -->\r\n\t\t\t{:else}\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"alternative\"\r\n\t\t\t\t\tsize=\"icon-lg\"\r\n\t\t\t\t\tonclick={decrement}\r\n\t\t\t\t\tdisabled={!canDecrement}\r\n\t\t\t\t\taria-label=\"{labels.decrease || 'Decrease'} {ticket.name} {labels.quantity || 'quantity'}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Subtract size={16} />\r\n\t\t\t\t</Button>\r\n\r\n\t\t\t\t<span\r\n\t\t\t\t\tclass=\"qty-display\"\r\n\t\t\t\t\taria-live=\"polite\"\r\n\t\t\t\t\taria-label=\"{ticket.name} {labels.quantity || 'quantity'}: {quantity}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t{quantity}\r\n\t\t\t\t</span>\r\n\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"alternative\"\r\n\t\t\t\t\tsize=\"icon-lg\"\r\n\t\t\t\t\tonclick={increment}\r\n\t\t\t\t\tdisabled={!canIncrement}\r\n\t\t\t\t\taria-label=\"{labels.increase || 'Increase'} {ticket.name} {labels.quantity || 'quantity'}\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<Add size={16} />\r\n\t\t\t\t</Button>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t</div>\r\n</article>\r\n\r\n<style>\r\n\t/* Card states using HSL CSS variables (matching TicketBlock.svelte) */\r\n\t.ticket-card {\r\n\t\tborder-color: hsl(var(--stroke-secondary, 220 13% 91%));\r\n\t\tbackground-color: hsl(var(--ts-card-bg, var(--bg-primary, 0 0% 100%)));\r\n\t}\r\n\r\n\t.ticket-card.selected {\r\n\t\tborder-color: hsl(var(--brand-primary, 211 100% 50%));\r\n\t\tbox-shadow: 0 0 0 1px hsl(var(--brand-primary, 211 100% 50%));\r\n\t}\r\n\r\n\t.ticket-card.revealed {\r\n\t\tborder-color: hsl(var(--accent-success) / 50%);\r\n\t\tbackground-color: hsl(var(--accent-success) / 8%);\r\n\t}\r\n\r\n\t.ticket-card.disabled-ticket {\r\n\t\topacity: 0.5;\r\n\t}\r\n\r\n\t/* Quantity selector */\r\n\t.quantity-selector {\r\n\t\tgap: 0.5rem;\r\n\t\tuser-select: none;\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t.qty-display {\r\n\t\tmin-width: 2rem;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: center;\r\n\t\tfont-size: 1.125rem;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: hsl(var(--text-primary, 222 47% 11%));\r\n\t\tuser-select: none;\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t/* Discounted price green text */\r\n\t.price-discounted {\r\n\t\tfont-size: 0.875rem;\r\n\t\tline-height: 1.25rem;\r\n\t\tfont-weight: 600;\r\n\t\tcolor: hsl(var(--accent-success)); /* green-600 */\r\n\t}\r\n\r\n\t/* Donation input wrapper */\r\n\t.donation-input-wrapper {\r\n\t\tmin-width: 10rem;\r\n\t}\r\n\r\n .ticket-card {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--stroke-secondary, 215 19% 35%));\r\n\t\tbackground-color: hsl(var(--ts-card-bg, var(--bg-primary, 222 47% 11%)));\r\n\t }\r\n }\r\n\r\n .ticket-card.revealed {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--accent-success)); /* green-700 */\r\n\t\tbackground-color: hsl(var(--accent-success));\r\n\t }\r\n }\r\n\r\n .qty-display {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tcolor: hsl(var(--text-primary, 0 0% 100%));\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { Calendar } from 'carbon-icons-svelte';\r\n\timport { Badge, Button, Card, Heading, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport ScarcityBadge from '../../../../components/ScarcityBadge.svelte';\r\n\timport type { EventData, OrderTotals, CtaConfig, ScarcityLevel } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tgetCtaConfig,\r\n\t\tgetPriceDisplay,\r\n\t\tgetScarcityLevel,\r\n\t\tgetScarcityText,\r\n\t\tformatBrowseDate,\r\n\t\tformatEventTime,\r\n\t\tDURATION\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\timport OrderSummary from './OrderSummary.svelte';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\torderTotals: OrderTotals;\r\n\t\thasSelectedTickets: boolean;\r\n\t\tonCheckout: () => void;\r\n\t\tpromoApplied?: boolean;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, orderTotals, hasSelectedTickets, onCheckout, promoApplied = false, labels = {}, }: Props = $props();\r\n\r\n\tlet ctaConfig: CtaConfig = $derived(getCtaConfig(event));\r\n\tlet priceDisplay = $derived(getPriceDisplay(event));\r\n\tlet scarcityLevel: ScarcityLevel = $derived(\r\n\t\tgetScarcityLevel(event.totalTicketsRemaining, event.totalTicketsCapacity)\r\n\t);\r\n\tlet scarcityText = $derived(\r\n\t\tgetScarcityText(scarcityLevel, event.totalTicketsRemaining, 'event')\r\n\t);\r\n\tlet isFreeEvent = $derived(\r\n\t\tevent.tickets.filter((t) => t.status === 'on_sale' && !t.isHidden).every((t) => t.price === 0)\r\n\t);\r\n\r\n\tfunction scrollToTickets() {\r\n\t\tif (typeof document === 'undefined') return;\r\n\t\tconst section = document.getElementById('desktop-ticket-section');\r\n\t\tif (section) {\r\n\t\t\tsection.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<!--\r\n\tBookingWidget: Airbnb-style sticky sidebar card.\r\n\tTransitions from \"informational\" to \"cart\" mode with no skeleton placeholders.\r\n\tPassword protection is handled at the widget/browse level, not on the event page.\r\n-->\r\n<Card border padding={false} class=\"rounded-xl shadow-lg overflow-hidden bg-surface-secondary\">\r\n\t<div class=\"p-5\">\r\n\t\t{#if event.status === 'on_sale'}\r\n\t\t\t<!-- ON SALE: informational -> cart transition -->\r\n\t\t\t<div class=\"space-y-4\">\r\n\t\t\t\t{#if hasSelectedTickets}\r\n\t\t\t\t\t<!-- FILLED STATE: Order summary + checkout -->\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"space-y-3\"\r\n\t\t\t\t\t\tstyle=\"animation: widgetFadeIn {DURATION.normal}ms ease-out;\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<OrderSummary {orderTotals} />\r\n\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"default\"\r\n\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\tclass=\"w-full\"\r\n\t\t\t\t\t\t\tonclick={onCheckout}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{#if isFreeEvent}\r\n\t\t\t\t\t\t\t\t{event.isRegistrationEvent ? (labels.reserveASpot || 'Reserve a spot') : (labels.getTickets || 'Get tickets')} &middot; Free\r\n\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t{labels.checkout || 'Checkout'} &middot; {formatCurrency(orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<!-- EMPTY STATE: Useful booking info (Airbnb-style) -->\r\n\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t<!-- Price display -->\r\n\t\t\t\t\t\t<div class=\"flex items-baseline gap-2\">\r\n\t\t\t\t\t\t\t{#if priceDisplay}\r\n\t\t\t\t\t\t\t\t<span class=\"price-lg text-color-primary text-xl\">\r\n\t\t\t\t\t\t\t\t\t{priceDisplay}\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t{:else if isFreeEvent}\r\n\t\t\t\t\t\t\t\t<span class=\"price-lg text-color-primary text-xl\">\r\n\t\t\t\t\t\t\t\t\tFree\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<!-- Event date/time summary (compact) -->\r\n\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\r\n\t\t\t\t\t\t\t<Calendar size={16} class=\"shrink-0 icon-muted\" />\r\n\t\t\t\t\t\t\t{#if event.displayStartTime !== false}\r\n\t\t\t\t\t\t\t\t<span class=\"body-sm\">{formatBrowseDate(event.startDateTime, event.timezone)} &middot; {formatEventTime(event.startDateTime, event.timezone)}</span>\r\n\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\t<span class=\"body-sm\">{formatBrowseDate(event.startDateTime, event.timezone)}</span>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t<!-- Scarcity badge -->\r\n\t\t\t\t\t\t{#if scarcityText}\r\n\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t<ScarcityBadge\r\n\t\t\t\t\t\t\t\t\tremaining={event.totalTicketsRemaining}\r\n\t\t\t\t\t\t\t\t\ttotal={event.totalTicketsCapacity}\r\n\t\t\t\t\t\t\t\t\tcontext=\"event\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t<!-- Promo applied badge -->\r\n\t\t\t\t\t\t{#if promoApplied}\r\n\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t<Badge variant=\"success\">{labels.promoApplied || 'Promo applied'}</Badge>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t\t<!-- Divider -->\r\n\t\t\t\t\t\t<div class=\"divider\"></div>\r\n\r\n\t\t\t\t\t\t<!-- CTA: scroll to ticket section -->\r\n\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\tvariant=\"default\"\r\n\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\tclass=\"w-full\"\r\n\t\t\t\t\t\t\tonclick={scrollToTickets}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{#if event.isRegistrationEvent}\r\n\t\t\t\t\t\t\t\tReserve a spot\r\n\t\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t\tGet tickets\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t</Button>\r\n\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\t\t{:else if event.status === 'sold_out'}\r\n\t\t\t<!-- SOLD OUT: just the disabled CTA, tickets still shown in left column -->\r\n\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"default\"\r\n\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\tclass=\"w-full\"\r\n\t\t\t\t\tdisabled={true}\r\n\t\t\t\t>\r\n\t\t\t\t\tSold out\r\n\t\t\t\t</Button>\r\n\t\t\t</div>\r\n\t\t{:else}\r\n\t\t\t<!-- OTHER DISABLED STATES: cancelled, past, sales_ended, coming_soon -->\r\n\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t<Heading weight=\"semibold\">\r\n\t\t\t\t\t{ctaConfig.text}\r\n\t\t\t\t</Heading>\r\n\t\t\t\t{#if ctaConfig.reason}\r\n\t\t\t\t\t<Text size=\"sm\" color=\"secondary\" class=\"block\">\r\n\t\t\t\t\t\t{ctaConfig.reason}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t{/if}\r\n\t\t\t\t<Button\r\n\t\t\t\t\tvariant=\"default\"\r\n\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\tclass=\"w-full\"\r\n\t\t\t\t\tdisabled={true}\r\n\t\t\t\t>\r\n\t\t\t\t\t{ctaConfig.text}\r\n\t\t\t\t</Button>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t</div>\r\n</Card>\r\n\r\n<style>\r\n\t@keyframes widgetFadeIn {\r\n\t\tfrom {\r\n\t\t\topacity: 0;\r\n\t\t\ttransform: translateY(-4px);\r\n\t\t}\r\n\r\n\t\tto {\r\n\t\t\topacity: 1;\r\n\t\t\ttransform: translateY(0);\r\n\t\t}\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Heading, Text } from '@getmicdrop/svelte-components';\r\n\r\n\tinterface Props {\r\n\t\tdescription: string;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { description, labels = {}, }: Props = $props();\r\n\r\n\tlet paragraphs = $derived(\r\n\t\tdescription.split('\\n\\n').filter((p) => p.trim().length > 0)\r\n\t);\r\n</script>\r\n\r\n<section>\r\n\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-3\">About</Heading>\r\n\t<div class=\"space-y-4\">\r\n\t\t{#each paragraphs as paragraph}\r\n\t\t\t<Text size=\"sm\" color=\"secondary\" leading=\"relaxed\" class=\"block\">\r\n\t\t\t\t{paragraph}\r\n\t\t\t</Text>\r\n\t\t{/each}\r\n\t</div>\r\n</section>\r\n","<script lang=\"ts\">\r\n\timport { Avatar, Card, Heading } from '@getmicdrop/svelte-components';\r\n\timport type { PerformerData } from '$lib/premium-ticket-experience/types';\r\n\r\n\tinterface Props {\r\n\t\tperformers: PerformerData[];\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { performers, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n{#if performers.length > 0}\r\n\t<section>\r\n\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Performers</Heading>\r\n\t\t<div class=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\r\n\t\t\t{#each performers as performer (performer.id)}\r\n\t\t\t\t<Card padding={false} class=\"flex items-center gap-3 p-3 bg-surface-secondary shadow-none\">\r\n\t\t\t\t\t<Avatar\r\n\t\t\t\t\t\tsrc={performer.profileImage || ''}\r\n\t\t\t\t\t\talt={performer.displayName}\r\n\t\t\t\t\t\tinitials={performer.displayName.charAt(0)}\r\n\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\tclass=\"shrink-0 rounded-lg\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t<div class=\"min-w-0\">\r\n\t\t\t\t\t\t<Heading level={4} size=\"sm\" weight=\"semibold\" class=\"truncate\">\r\n\t\t\t\t\t\t\t{performer.displayName}\r\n\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</Card>\r\n\t\t\t{/each}\r\n\t\t</div>\r\n\t</section>\r\n{/if}\r\n\r\n","<script lang=\"ts\">\r\n\timport { Accordion, AccordionItem, Heading } from '@getmicdrop/svelte-components';\r\n\timport type { FAQItem } from '$lib/premium-ticket-experience/types';\r\n\r\n\tinterface Props {\r\n\t\tfaqs: FAQItem[];\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { faqs, labels = {}, }: Props = $props();\r\n</script>\r\n\r\n{#if faqs.length > 0}\r\n\t<section class=\"faq-section\">\r\n\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-3\">\r\n\t\t\tFrequently asked questions\r\n\t\t</Heading>\r\n\t\t<Accordion flush>\r\n\t\t\t{#each faqs as faq (faq.question)}\r\n\t\t\t\t<AccordionItem>\r\n\t\t\t\t\t{#snippet header()}{faq.question}{/snippet}\r\n\t\t\t\t\t{faq.answer}\r\n\t\t\t\t</AccordionItem>\r\n\t\t\t{/each}\r\n\t\t</Accordion>\r\n\t</section>\r\n{/if}\r\n\r\n<style>\r\n\t/* Override AccordionItem's hardcoded gray background — FAQ headers should be transparent */\r\n\t.faq-section :global(button) {\r\n\t\tbackground-color: transparent !important;\r\n\t}\r\n\r\n\t.faq-section :global(button:hover) {\r\n\t\tbackground-color: hsl(var(--bg-secondary, 210 20% 98%)) !important;\r\n\t}\r\n\r\n\t/* Fix chevron direction: point DOWN when closed, UP when open.\r\n\t AccordionItem uses ChevronUpOutline (points up by default) and adds rotate-180 when open.\r\n\t We invert it: rotate 180° by default (down), remove rotation when open (up). */\r\n\t.faq-section :global(button svg) {\r\n\t\ttransform: rotate(180deg) !important;\r\n\t\ttransition: transform 200ms ease;\r\n\t}\r\n\r\n\t.faq-section :global(button[aria-expanded=\"true\"] svg) {\r\n\t\ttransform: rotate(0deg) !important;\r\n\t}\r\n\r\n .faq-section :global(button:hover) {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tbackground-color: hsl(var(--bg-secondary, 217 33% 17%)) !important;\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { ChevronUp, ChevronDown } from 'carbon-icons-svelte';\r\n\timport { Button, Text, Heading, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport type { EventData, OrderTotals, CtaConfig } from '$lib/premium-ticket-experience/types';\r\n\timport { getCtaConfig, getPriceDisplay, DURATION } from '$lib/premium-ticket-experience/defaults';\r\n\timport OrderSummary from './OrderSummary.svelte';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\torderTotals: OrderTotals;\r\n\t\thasSelectedTickets: boolean;\r\n\t\tonCheckout: () => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, orderTotals, hasSelectedTickets, onCheckout, labels = {}, }: Props = $props();\r\n\r\n\tlet ctaConfig: CtaConfig = $derived(getCtaConfig(event));\r\n\tlet priceDisplay = $derived(getPriceDisplay(event));\r\n\tlet totalTicketCount = $derived(\r\n\t\torderTotals.lines.reduce((sum, l) => sum + l.quantity, 0)\r\n\t);\r\n\tlet isFreeEvent = $derived(\r\n\t\tevent.tickets.filter((t) => t.status === 'on_sale' && !t.isHidden).every((t) => t.price === 0)\r\n\t);\r\n\r\n\t// Drawer state\r\n\tlet drawerOpen = $state(false);\r\n\r\n\tfunction scrollToTickets() {\r\n\t\tif (typeof document === 'undefined') return;\r\n\t\tconst section = document.getElementById('mobile-ticket-section');\r\n\t\tif (section) {\r\n\t\t\tsection.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handleCtaClick() {\r\n\t\tif (ctaConfig.disabled) return;\r\n\r\n\t\tif (hasSelectedTickets) {\r\n\t\t\tonCheckout();\r\n\t\t} else {\r\n\t\t\tscrollToTickets();\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleDrawer() {\r\n\t\tdrawerOpen = !drawerOpen;\r\n\t}\r\n\r\n\tfunction closeDrawer() {\r\n\t\tdrawerOpen = false;\r\n\t}\r\n</script>\r\n\r\n<!-- Backdrop (when drawer open) -->\r\n{#if drawerOpen}\r\n\t<button\r\n\t\ttype=\"button\"\r\n\t\tclass=\"drawer-backdrop\"\r\n\t\tonclick={closeDrawer}\r\n\t\taria-label=\"Close order summary\"\r\n\t></button>\r\n{/if}\r\n\r\n<!-- Fixed bottom CTA bar for mobile (DICE-style) -->\r\n<div\r\n\tclass=\"fixed bottom-0 left-0 right-0 z-40 md:hidden bg-surface-primary border-t border-default shadow-lg\"\r\n\tstyle=\"padding-bottom: env(safe-area-inset-bottom, 0);\"\r\n>\r\n\t<!-- Slide-up drawer (order summary) -->\r\n\t{#if hasSelectedTickets}\r\n\t\t<div\r\n\t\t\tclass=\"drawer-panel border-default bg-surface-secondary\"\r\n\t\t\tclass:drawer-open={drawerOpen}\r\n\t\t>\r\n\t\t\t<div class=\"px-4 pt-4 pb-3\">\r\n\t\t\t\t<div class=\"flex items-center justify-between mb-3\">\r\n\t\t\t\t\t<Heading level={3} size=\"sm\" weight=\"semibold\">\r\n\t\t\t\t\t\tOrder Summary\r\n\t\t\t\t\t</Heading>\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tvariant=\"icon\"\r\n\t\t\t\t\t\tsize=\"icon-sm\"\r\n\t\t\t\t\t\tonclick={toggleDrawer}\r\n\t\t\t\t\t\taria-label=\"Close order summary\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<ChevronDown size={20} />\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t</div>\r\n\t\t\t\t<OrderSummary {orderTotals} />\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t{/if}\r\n\r\n\t<!-- CTA bar -->\r\n\t<div\r\n\t\tclass=\"flex items-center justify-between gap-3 px-4 py-3 transition-all\"\r\n\t\tstyle=\"transition-duration: {DURATION.normal}ms;\"\r\n\t>\r\n\t\t<!-- Left: dynamic info (tappable when tickets selected) -->\r\n\t\t<div class=\"flex-1 min-w-0\">\r\n\t\t\t{#if hasSelectedTickets}\r\n\t\t\t\t<!-- Has tickets: count + total — tappable to open drawer -->\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"flex items-center gap-1.5 text-left\"\r\n\t\t\t\t\tonclick={toggleDrawer}\r\n\t\t\t\t>\r\n\t\t\t\t\t<Text size=\"sm\" class=\"font-semibold tabular-nums\">\r\n\t\t\t\t\t\t{totalTicketCount} {totalTicketCount === 1 ? 'ticket' : 'tickets'} &middot;\r\n\t\t\t\t\t\t{#if isFreeEvent}\r\n\t\t\t\t\t\t\tFree\r\n\t\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t\t{formatCurrency(orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}\r\n\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t\t<ChevronUp size={16} class=\"shrink-0 text-color-muted transition-transform {drawerOpen ? 'rotate-180' : ''}\" />\r\n\t\t\t\t</button>\r\n\t\t\t{:else if priceDisplay && !ctaConfig.disabled}\r\n\t\t\t\t<!-- No tickets yet, on sale: \"From $X\" -->\r\n\t\t\t\t<Text size=\"sm\" color=\"secondary\" class=\"font-medium block\">\r\n\t\t\t\t\t{priceDisplay}\r\n\t\t\t\t</Text>\r\n\t\t\t{:else if ctaConfig.reason}\r\n\t\t\t\t<!-- Disabled: show reason -->\r\n\t\t\t\t<Text size=\"xs\" color=\"muted\" class=\"block\">\r\n\t\t\t\t\t{ctaConfig.reason}\r\n\t\t\t\t</Text>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\r\n\t\t<!-- Right: CTA button -->\r\n\t\t<Button\r\n\t\t\tvariant=\"default\"\r\n\t\t\tsize=\"lg\"\r\n\t\t\tdisabled={ctaConfig.disabled}\r\n\t\t\tonclick={handleCtaClick}\r\n\t\t\tclass=\"shrink-0 min-w-32\"\r\n\t\t>\r\n\t\t\t{#if hasSelectedTickets}\r\n\t\t\t\tCheckout\r\n\t\t\t{:else}\r\n\t\t\t\t{ctaConfig.text}\r\n\t\t\t{/if}\r\n\t\t</Button>\r\n\t</div>\r\n</div>\r\n\r\n<style>\r\n\t/* Drawer backdrop */\r\n\t.drawer-backdrop {\r\n\t\tposition: fixed;\r\n\t\tinset: 0;\r\n\t\tz-index: var(--z-dropdown);\r\n\t\tbackground-color: rgb(0 0 0 / 40%);\r\n\t\t-webkit-tap-highlight-color: transparent;\r\n\t}\r\n\r\n\t@media (width >= 768px) {\r\n\t\t.drawer-backdrop {\r\n\t\t\tdisplay: none;\r\n\t\t}\r\n\t}\r\n\r\n\t/* Drawer panel — slides up from above the CTA bar */\r\n\t.drawer-panel {\r\n\t\tborder-top-width: 1px;\r\n\t\tborder-top-style: solid;\r\n\t\tmax-height: 0;\r\n\t\toverflow: hidden;\r\n\t\topacity: 0;\r\n\t\ttransition: max-height 300ms cubic-bezier(0.4, 0, 0.2, 1),\r\n\t\t\topacity 200ms ease;\r\n\t}\r\n\r\n\t.drawer-panel.drawer-open {\r\n\t\tmax-height: 400px;\r\n\t\topacity: 1;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\t/**\r\n\t * Mock data toggle — horizontal bar matching the showcase variant nav.\r\n\t */\r\n\timport { Button } from '@getmicdrop/svelte-components';\r\n\r\n\t// Password removed: handled at widget/browse level, not event page\r\n\ttype DataVariant = 'default' | 'sold_out' | 'free' | 'registration'\r\n\t\t| 'series' | 'series_instance' | 'collection' | 'donation' | 'mixed' | 'sections' | 'promo' | 'multi_stage' | 'long' | 'wide';\r\n\r\n\tinterface Props {\r\n\t\tcurrent: DataVariant;\r\n\t\tonChange: (variant: DataVariant) => void;\r\n\t}\r\n\r\n\tlet { current, onChange }: Props = $props();\r\n\r\n\tconst options: { value: DataVariant; label: string; color: string }[] = [\r\n\t\t{ value: 'default', label: 'On sale', color: 'bg-accent-success' },\r\n\t\t{ value: 'sold_out', label: 'Sold out', color: 'bg-muted-foreground' },\r\n\t\t{ value: 'free', label: 'Free', color: 'bg-sky-500' },\r\n\t\t{ value: 'registration', label: 'Registration', color: 'bg-brand-primary' },\r\n\t\t{ value: 'series', label: 'Series', color: 'bg-brand-primary' },\r\n\t\t{ value: 'series_instance', label: 'Instance', color: 'bg-violet-500' },\r\n\t\t{ value: 'collection', label: 'Collection', color: 'bg-fuchsia-500' },\r\n\t\t{ value: 'donation', label: 'Donation', color: 'bg-accent-danger' },\r\n\t\t{ value: 'mixed', label: 'Mixed', color: 'bg-status-warning-bg0' },\r\n\t\t{ value: 'sections', label: 'Sections', color: 'bg-brand-primary' },\r\n\t\t{ value: 'promo', label: 'Promo codes', color: 'bg-accent-success' },\r\n\t\t{ value: 'multi_stage', label: 'Multi-stage', color: 'bg-accent-danger' },\r\n\t\t{ value: 'long', label: 'Long name', color: 'bg-accent-warning' },\r\n\t\t{ value: 'wide', label: 'Wide image', color: 'bg-teal-500' }\r\n\t];\r\n</script>\r\n\r\n<div class=\"toggle-bar bg-surface-primary border-default\">\r\n\t<span class=\"toggle-label text-color-muted\">Data</span>\r\n\t{#each options as option}\r\n\t\t{@const isActive = current === option.value}\r\n\t\t<Button\r\n\t\t\tvariant=\"ghost\"\r\n\t\t\tactive={isActive}\r\n\t\t\tonclick={() => onChange(option.value)}\r\n\t\t\tclass=\"toggle-btn {isActive ? 'active bg-surface-secondary text-color-primary font-medium' : 'text-color-tertiary hover:bg-surface-secondary hover:text-color-secondary'}\"\r\n\t\t>\r\n\t\t\t<span class=\"w-1.5 h-1.5 rounded-full {option.color} shrink-0\"></span>\r\n\t\t\t{option.label}\r\n\t\t</Button>\r\n\t{/each}\r\n</div>\r\n\r\n<style>\r\n\t.toggle-bar {\r\n\t\tposition: sticky;\r\n\t\ttop: 0;\r\n\t\tz-index: var(--z-dropdown);\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 0.25rem;\r\n\t\tpadding: 0.5rem 0.75rem;\r\n\t\toverflow-x: auto;\r\n\t\tborder-bottom-width: 1px;\r\n\t\tborder-bottom-style: solid;\r\n\t}\r\n\r\n\t.toggle-label {\r\n\t\tpadding-left: 0.375rem;\r\n\t\tpadding-right: 0.375rem;\r\n\t\tflex-shrink: 0;\r\n\t\ttext-transform: uppercase;\r\n\t\tletter-spacing: 0.05em;\r\n\t\tfont-size: 0.625rem;\r\n\t}\r\n\r\n\t.toggle-btn {\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tgap: 0.375rem;\r\n\t\tpadding: 0.25rem 0.5rem;\r\n\t\tborder-radius: 0.375rem;\r\n\t\tfont-size: 0.75rem;\r\n\t\tline-height: 1rem;\r\n\t\twhite-space: nowrap;\r\n\t\ttransition-property: all;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Input, Button } from '@getmicdrop/svelte-components';\r\n\timport type { PromoCodeState } from '$lib/premium-ticket-experience/types';\r\n\timport { DURATION } from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tpromoState: PromoCodeState;\r\n\t\tonApply: (code: string) => void;\r\n\t\tonRemove: () => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { promoState, onApply, onRemove, labels = {}, }: Props = $props();\r\n\r\n\tlet isExpanded = $state(false);\r\n\tlet inputValue = $state('');\r\n\r\n\tfunction handleApply() {\r\n\t\tconst trimmed = inputValue.trim();\r\n\t\tif (!trimmed) return;\r\n\t\tonApply(trimmed);\r\n\t}\r\n\r\n\tfunction handleRemove() {\r\n\t\tinputValue = '';\r\n\t\tonRemove();\r\n\t}\r\n\r\n\tfunction handleKeydown(e: KeyboardEvent) {\r\n\t\tif (e.key === 'Enter') {\r\n\t\t\te.preventDefault();\r\n\t\t\thandleApply();\r\n\t\t}\r\n\t}\r\n\r\n\t// Auto-expand when promo is applied (e.g. on restore)\r\n\tlet shouldExpand = $derived(promoState.isApplied || isExpanded);\r\n</script>\r\n\r\n<div class=\"promo-section\" role=\"group\" aria-labelledby=\"promo-label\">\r\n\t<span id=\"promo-label\" class=\"sr-only\">Promo code entry</span>\r\n\t{#if !shouldExpand}\r\n\t\t<Button variant=\"link\" onclick={() => (isExpanded = true)}>\r\n\t\t\t{labels.havePromoCode || 'Have a promo code?'}\r\n\t\t</Button>\r\n\t{:else}\r\n\t\t<div\r\n\t\t\tclass=\"space-y-2\"\r\n\t\t\tstyle=\"animation: promoSlideIn {DURATION.normal}ms ease-out;\"\r\n\t\t>\r\n\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t<div class=\"promo-input-wrapper\" onkeydown={handleKeydown}>\r\n\t\t\t\t<div class=\"flex-1\">\r\n\t\t\t\t\t<Input\r\n\t\t\t\t\t\tlabel={labels.promoCode || 'Promo code'}\r\n\t\t\t\t\t\tplaceholder={labels.enterCode || 'Enter code'}\r\n\t\t\t\t\t\tsize=\"md\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\tbind:value={inputValue}\r\n\t\t\t\t\t\tdisabled={promoState.isApplied || promoState.isValidating}\r\n\t\t\t\t\t\terrorText={promoState.error || ''}\r\n\t\t\t\t\t\tcolor={promoState.error ? 'red' : 'base'}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\r\n\t\t\t\t{#if promoState.isApplied}\r\n\t\t\t\t\t<Button strokebtn onclick={handleRemove} class=\"h-10 self-start mt-5\" aria-label={labels.removePromoCode || 'Remove promo code'}>\r\n\t\t\t\t\t\t{labels.remove || 'Remove'}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t{:else}\r\n\t\t\t\t\t<Button\r\n\t\t\t\t\t\tonclick={handleApply}\r\n\t\t\t\t\t\tdisabled={promoState.isValidating || !inputValue.trim()}\r\n\t\t\t\t\t\tclass=\"h-10 self-start mt-5\"\r\n\t\t\t\t\t\taria-label={promoState.isValidating ? (labels.checkingPromoCode || 'Checking promo code') : (labels.applyPromoCode || 'Apply promo code')}\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t{promoState.isValidating ? (labels.checking || 'Checking...') : (labels.apply || 'Apply')}\r\n\t\t\t\t\t</Button>\r\n\t\t\t\t{/if}\r\n\t\t\t</div>\r\n\r\n\t\t\t<!-- Success hint -->\r\n\t\t\t{#if promoState.hint}\r\n\t\t\t\t<p class=\"promo-message success body-sm\" role=\"status\" aria-live=\"polite\">\r\n\t\t\t\t\t{promoState.hint}\r\n\t\t\t\t</p>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\t{/if}\r\n</div>\r\n\r\n<style>\r\n\t.promo-section {\r\n\t\tmargin-top: 1rem;\r\n\t}\r\n\r\n\t.promo-input-wrapper {\r\n\t\tdisplay: flex;\r\n\t\tgap: 0.5rem;\r\n\t\talign-items: flex-start;\r\n\t}\r\n\r\n\t.promo-message {\r\n\t\tmargin-top: 0.5rem;\r\n\t}\r\n\r\n\t.promo-message.success {\r\n\t\tcolor: hsl(var(--accent-success)); /* green-600 */\r\n\t}\r\n\r\n\t@keyframes promoSlideIn {\r\n\t\tfrom {\r\n\t\t\topacity: 0;\r\n\t\t\ttransform: translateY(-4px);\r\n\t\t}\r\n\r\n\t\tto {\r\n\t\t\topacity: 1;\r\n\t\t\ttransform: translateY(0);\r\n\t\t}\r\n\t}\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport { Button, Text } from '@getmicdrop/svelte-components';\r\n\timport type { EventData } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tformatFullDateCompact,\r\n\t\tformatEventTime,\r\n\t\tformatBrowseDate\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\tinterface Props {\r\n\t\tevent: EventData;\r\n\t\tonShowtimeClick?: (occurrence: { id: number; slug: string }) => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet { event, onShowtimeClick = undefined, labels = {}, }: Props = $props();\r\n\r\n\t// --- Data ---\r\n\ttype GroupedOccurrences = {\r\n\t\tdateLabel: string;\r\n\t\tdateKey: string;\r\n\t\toccurrences: NonNullable<EventData['seriesOccurrences']>;\r\n\t}[];\r\n\r\n\tlet groupedOccurrences: GroupedOccurrences = $derived((() => {\r\n\t\tif (!event.seriesOccurrences) return [];\r\n\t\tconst groups: Map<string, { dateLabel: string; occurrences: NonNullable<EventData['seriesOccurrences']> }> = new Map();\r\n\t\tfor (const occ of event.seriesOccurrences) {\r\n\t\t\tconst dateKey = formatBrowseDate(occ.startDateTime, event.timezone);\r\n\t\t\tif (!groups.has(dateKey)) {\r\n\t\t\t\tgroups.set(dateKey, {\r\n\t\t\t\t\tdateLabel: formatFullDateCompact(occ.startDateTime, event.timezone),\r\n\t\t\t\t\toccurrences: []\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tgroups.get(dateKey)!.occurrences.push(occ);\r\n\t\t}\r\n\t\treturn [...groups.entries()].map(([dateKey, g]) => ({\r\n\t\t\tdateKey,\r\n\t\t\tdateLabel: g.dateLabel,\r\n\t\t\toccurrences: g.occurrences\r\n\t\t}));\r\n\t})());\r\n\r\n\tfunction handleShowtimeClick(occ: { id: number; slug: string }) {\r\n\t\tif (onShowtimeClick) {\r\n\t\t\tonShowtimeClick(occ);\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<section>\r\n\t<div class=\"space-y-4\">\r\n\t\t{#each groupedOccurrences as group (group.dateKey)}\r\n\t\t\t<div>\r\n\t\t\t\t<Text size=\"sm\" class=\"font-semibold block mb-2\">\r\n\t\t\t\t\t{group.dateLabel}\r\n\t\t\t\t</Text>\r\n\t\t\t\t<div class=\"space-y-2\">\r\n\t\t\t\t\t{#each group.occurrences as occ (occ.id)}\r\n\t\t\t\t\t\t<!-- svelte-ignore a11y_no_static_element_interactions -->\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclass=\"row-a border-default bg-surface-primary hover:bg-surface-secondary\"\r\n\t\t\t\t\t\t\tclass:row-disabled={occ.ctaDisabled}\r\n\t\t\t\t\t\t\tonclick={() => !occ.ctaDisabled && handleShowtimeClick({ id: occ.id, slug: occ.slug })}\r\n\t\t\t\t\t\t\tonkeydown={(e: KeyboardEvent) => e.key === 'Enter' && !occ.ctaDisabled && handleShowtimeClick({ id: occ.id, slug: occ.slug })}\r\n\t\t\t\t\t\t\ttabindex={occ.ctaDisabled ? -1 : 0}\r\n\t\t\t\t\t\t\trole=\"link\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{#if event.displayStartTime !== false}\r\n\t\t\t\t\t\t\t\t<Text size=\"sm\" class=\"font-medium\">\r\n\t\t\t\t\t\t\t\t\t{formatEventTime(occ.startDateTime, event.timezone)}\r\n\t\t\t\t\t\t\t\t</Text>\r\n\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t<Button\r\n\t\t\t\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t\t\t\tvariant={occ.ctaDisabled ? 'alternative' : 'default'}\r\n\t\t\t\t\t\t\t\tdisabled={occ.ctaDisabled}\r\n\t\t\t\t\t\t\t\tclass=\"shrink-0 pointer-events-none\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{occ.ctaText}\r\n\t\t\t\t\t\t\t</Button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/each}\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{/each}\r\n\t</div>\r\n</section>\r\n\r\n<style>\r\n\t/* === Shared === */\r\n\t.row-disabled {\r\n\t\topacity: 0.5;\r\n\t\tcursor: default;\r\n\t}\r\n\r\n\t/* === Design A: Full-width rows === */\r\n\t.row-a {\r\n\t\twidth: 100%;\r\n\t\tdisplay: flex;\r\n\t\talign-items: center;\r\n\t\tjustify-content: space-between;\r\n\t\tgap: 0.75rem;\r\n\t\tpadding: 0.75rem;\r\n\t\tborder-radius: 0.5rem;\r\n\t\tborder-width: 1px;\r\n\t\tborder-style: solid;\r\n\t\tcursor: pointer;\r\n\t\ttransition-property: all;\r\n\t\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\r\n\t\ttransition-duration: 150ms;\r\n\t}\r\n\r\n\t.row-a:hover:not(.row-disabled) {\r\n\t\tborder-color: hsl(var(--stroke-primary)); /* gray-300 */\r\n\t}\r\n\r\n .row-a:hover:not(.row-disabled) {\r\n &:is([data-theme=\"dark\"], [data-theme=\"dark\"] *) {\r\n\t\tborder-color: hsl(var(--stroke-primary)); /* gray-600 */\r\n\t }\r\n }\r\n</style>\r\n","<script lang=\"ts\">\r\n\timport type { USD } from '@getmicdrop/svelte-components';\r\nimport { Heading, Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n\timport type { EventData, OrderTotals, OrderLine, PromoCodeState } from '$lib/premium-ticket-experience/types';\r\n\timport {\r\n\t\tmockEvent,\r\n\t\tmockSoldOutEvent,\r\n\t\tmockFreeEvent,\r\n\t\tmockSeriesEvent,\r\n\t\tmockSeriesInstanceEvent,\r\n\t\tmockCollectionEvent,\r\n\t\tmockRegistrationEvent,\r\n\t\tmockDonationEvent,\r\n\t\tmockMixedEvent,\r\n\t\tmockSectionedEvent,\r\n\t\tmockPromoEvent,\r\n\t\tmockMultiStageEvent,\r\n\t\tmockLongNameEvent,\r\n\t\tmockWideImageEvent\r\n\t} from '$lib/premium-ticket-experience/mock-data';\r\n\timport {\r\n\t\tcalculateTax,\r\n\t\tcreateDefaultPromoState,\r\n\t\tDURATION\r\n\t} from '$lib/premium-ticket-experience/defaults';\r\n\r\n\timport HeroImage from './HeroImage.svelte';\r\n\timport EventHeader from './EventHeader.svelte';\r\n\timport TicketCard from './TicketCard.svelte';\r\n\timport BookingWidget from './BookingWidget.svelte';\r\n\timport AboutSection from './AboutSection.svelte';\r\n\timport PerformerGrid from './PerformerGrid.svelte';\r\n\timport FaqAccordion from './FaqAccordion.svelte';\r\n\timport MobileCta from './MobileCta.svelte';\r\n\timport DataToggle from './DataToggle.svelte';\r\n\timport PromoCodeInput from './PromoCodeInput.svelte';\r\n\timport ShowtimeDesigns from './ShowtimeDesigns.svelte';\r\n\timport GalleryCard from '../../../../components/Calendar/GalleryCard.svelte';\r\n\timport { mergeLabels } from '$lib/premium-ticket-experience/i18n/labels.js';\r\n\r\n\t// --- Props (dual-mode: showcase vs production) ---\r\n\tinterface Props {\r\n\t\t/** Real event data from production route. Absence = showcase mode. */\r\n\t\tevent?: EventData;\r\n\t\t/** Production checkout handler. Called with OrderTotals. */\r\n\t\tonCheckout?: (orderTotals: OrderTotals) => void;\r\n\t\t/** Production promo validation. Must return PromoCodeState from API. */\r\n\t\tonPromoApply?: (code: string) => Promise<PromoCodeState>;\r\n\t\t/** Production promo removal. */\r\n\t\tonPromoRemove?: () => void;\r\n\t\t/** Production collection event navigation. */\r\n\t\tonCollectionEventClick?: (event: { id?: number | string; slug: string }) => void;\r\n\t\t/** Production showtime navigation for series events. */\r\n\t\tonShowtimeClick?: (occurrence: { id: number; slug: string }) => void;\r\n\t\t\tlabels?: Record<string, string>;\r\n\t}\r\n\r\n\tlet {\r\n\t\tevent: eventProp = undefined,\r\n\t\tonCheckout: onCheckoutProp = undefined,\r\n\t\tonPromoApply: onPromoApplyProp = undefined,\r\n\t\tonPromoRemove: onPromoRemoveProp = undefined,\r\n\t\tonCollectionEventClick: onCollectionEventClickProp = undefined,\r\n\t\tonShowtimeClick: onShowtimeClickProp = undefined,\r\n\tlabels = {}, }: Props = $props();\r\n\r\n\tconst mergedLabels = $derived(mergeLabels(labels));\r\n\r\n\tlet isShowcaseMode = $derived(!eventProp);\r\n\r\n\t// --- State ---\r\n\t// Password removed: password protection is handled at the widget/browse level, not the event page\r\n\ttype DataVariant = 'default' | 'sold_out' | 'free' | 'registration'\r\n\t\t| 'series' | 'series_instance' | 'collection' | 'donation' | 'mixed' | 'sections' | 'promo' | 'multi_stage' | 'long' | 'wide';\r\n\tlet dataVariant = $state<DataVariant>('default');\r\n\r\n\t// Ticket quantities keyed by ticket ID\r\n\tlet quantities: Record<number, number> = $state({});\r\n\r\n\t// Promo code state\r\n\tlet promoState = $state<PromoCodeState>(createDefaultPromoState());\r\n\r\n\t// Donation amounts keyed by ticket ID\r\n\tlet donationAmounts: Record<number, string> = $state({});\r\n\r\n\t// --- Derived: event selection ---\r\n\tlet event: EventData = $derived(\r\n\t\tisShowcaseMode\r\n\t\t\t? (() => {\r\n\t\t\t\t\tswitch (dataVariant) {\r\n\t\t\t\t\t\tcase 'sold_out': return mockSoldOutEvent;\r\n\t\t\t\t\t\tcase 'free': return mockFreeEvent;\r\n\t\t\t\t\t\tcase 'registration': return mockRegistrationEvent;\r\n\t\t\t\t\t\tcase 'series': return mockSeriesEvent;\r\n\t\t\t\t\t\tcase 'series_instance': return mockSeriesInstanceEvent;\r\n\t\t\t\t\t\tcase 'collection': return mockCollectionEvent;\r\n\t\t\t\t\t\tcase 'donation': return mockDonationEvent;\r\n\t\t\t\t\t\tcase 'mixed': return mockMixedEvent;\r\n\t\t\t\t\t\tcase 'sections': return mockSectionedEvent;\r\n\t\t\t\t\t\tcase 'promo': return mockPromoEvent;\r\n\t\t\t\t\t\tcase 'multi_stage': return mockMultiStageEvent;\r\n\t\t\t\t\t\tcase 'long': return mockLongNameEvent;\r\n\t\t\t\t\t\tcase 'wide': return mockWideImageEvent;\r\n\t\t\t\t\t\tdefault: return mockEvent;\r\n\t\t\t\t\t}\r\n\t\t\t\t})()\r\n\t\t\t: eventProp!\r\n\t);\r\n\r\n\t// Reset all state when variant changes\r\n\t$effect(() => {\r\n\t\tconst _v = dataVariant;\r\n\t\tquantities = {};\r\n\t\tpromoState = createDefaultPromoState();\r\n\t\tdonationAmounts = {};\r\n\t});\r\n\r\n\t// Visible tickets (account for promo reveals)\r\n\tlet visibleTickets = $derived(\r\n\t\tevent.tickets.filter((t) => {\r\n\t\t\tif (!t.isHidden) return true;\r\n\t\t\tif (promoState.revealHiddenTickets) return true;\r\n\t\t\treturn promoState.revealTicketIds.includes(t.id);\r\n\t\t})\r\n\t);\r\n\r\n\t// Group tickets by section\r\n\tlet groupedTickets = $derived((() => {\r\n\t\tconst groups: Record<string, typeof visibleTickets> = {};\r\n\t\tfor (const ticket of visibleTickets) {\r\n\t\t\tconst section = ticket.sectionName || '_default';\r\n\t\t\tif (!groups[section]) groups[section] = [];\r\n\t\t\tgroups[section].push(ticket);\r\n\t\t}\r\n\t\treturn groups;\r\n\t})());\r\n\r\n\tlet hasMultipleSections = $derived(\r\n\t\tObject.keys(groupedTickets).filter((k) => k !== '_default').length > 0\r\n\t);\r\n\r\n\t// Show tickets for on_sale AND sold_out events (sold out shows them as disabled)\r\n\tlet isOnSale = $derived(event.status === 'on_sale');\r\n\tlet showTicketCards = $derived(\r\n\t\t(event.status === 'on_sale' || event.status === 'sold_out') && visibleTickets.length > 0\r\n\t);\r\n\r\n\t// Calculate order totals (with donation amounts and promo discounts)\r\n\tlet orderTotals: OrderTotals = $derived((() => {\r\n\t\tconst lines: OrderLine[] = [];\r\n\t\tlet subtotal = 0;\r\n\t\tlet fees = 0;\r\n\t\tlet promoDiscount = 0;\r\n\r\n\t\tfor (const ticket of event.tickets) {\r\n\t\t\tconst qty = quantities[ticket.id] ?? 0;\r\n\t\t\tif (qty <= 0) continue;\r\n\r\n\t\t\tconst isDonation = ticket.isDonation || ticket.ticketType === 2;\r\n\t\t\tconst basePrice = isDonation ? (parseFloat(donationAmounts[ticket.id]) || 0) : ticket.price;\r\n\t\t\tconst ticketFee = isDonation ? 0 : ticket.fee;\r\n\r\n\t\t\t// Calculate promo discount for this ticket\r\n\t\t\tlet ticketDiscount = 0;\r\n\t\t\tif (promoState.isApplied && promoState.discountAmount > 0 && !isDonation) {\r\n\t\t\t\tconst eligible = promoState.discountTicketIds.length === 0 || promoState.discountTicketIds.includes(ticket.id);\r\n\t\t\t\tif (eligible) {\r\n\t\t\t\t\tif (promoState.discountType === '%') {\r\n\t\t\t\t\t\tticketDiscount = basePrice * (promoState.discountAmount / 100);\r\n\t\t\t\t\t} else if (promoState.discountType === '$') {\r\n\t\t\t\t\t\tticketDiscount = Math.min(promoState.discountAmount, basePrice);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst effectivePrice = Math.max(0, basePrice - ticketDiscount);\r\n\t\t\tconst ticketSubtotal = effectivePrice * qty;\r\n\t\t\tconst totalTicketFee = ticketFee * qty;\r\n\r\n\t\t\tlines.push({\r\n\t\t\t\tticketId: ticket.id,\r\n\t\t\t\tticketName: ticket.name,\r\n\t\t\t\tquantity: qty,\r\n\t\t\t\tunitPrice: effectivePrice,\r\n\t\t\t\tfee: ticketFee,\r\n\t\t\t\tsubtotal: ticketSubtotal\r\n\t\t\t});\r\n\r\n\t\t\tsubtotal += ticketSubtotal;\r\n\t\t\tfees += totalTicketFee;\r\n\t\t\tpromoDiscount += ticketDiscount * qty;\r\n\t\t}\r\n\r\n\t\tconst taxes = calculateTax(subtotal + fees, event.venue.taxPercentage);\r\n\r\n\t\treturn {\r\n\t\t\tlines,\r\n\t\t\tsubtotal,\r\n\t\t\tfees,\r\n\t\t\ttaxes,\r\n\t\t\ttotal: subtotal + fees + taxes,\r\n\t\t\tpromoDiscount,\r\n\t\t\tgiftCardAmount: 0\r\n\t\t};\r\n\t})());\r\n\r\n\tlet hasSelectedTickets = $derived(orderTotals.lines.length > 0);\r\n\r\n\t// Series occurrences — group by date for same-day shows\r\n\tlet isSeries = $derived(!!event.eventSeriesId);\r\n\r\n\t// Collection — loose grouping of different events\r\n\tlet isCollection = $derived(!!event.collectionId);\r\n\r\n\t// Full-width layout mode (no sidebar)\r\n\tlet isFullWidth = $derived(isSeries || isCollection);\r\n\r\n\t// Collection events transformed to GalleryCard shape\r\n\tlet galleryEvents = $derived(\r\n\t\t(event.collectionEvents ?? []).map((ce) => ({\r\n\t\t\t...ce,\r\n\t\t\ttimeZone: event.timezone,\r\n\t\t}))\r\n\t);\r\n\r\n\tfunction handleCollectionEventClick(galleryEvent: { slug: string }) {\r\n\t\tif (onCollectionEventClickProp) {\r\n\t\t\tonCollectionEventClickProp(galleryEvent);\r\n\t\t} else {\r\n\t\t\tconsole.log('Navigate to collection event:', galleryEvent.slug);\r\n\t\t}\r\n\t}\r\n\r\n\t// --- Handlers ---\r\n\tfunction handleQuantityChange(ticketId: number, qty: number) {\r\n\t\tquantities = { ...quantities, [ticketId]: qty };\r\n\t}\r\n\r\n\tfunction handleDonationChange(ticketId: number, amount: string) {\r\n\t\tdonationAmounts = { ...donationAmounts, [ticketId]: amount };\r\n\t}\r\n\r\n\tfunction handleCheckout() {\r\n\t\tif (onCheckoutProp) {\r\n\t\t\tonCheckoutProp(orderTotals);\r\n\t\t} else {\r\n\t\t\tconsole.log('Checkout:', orderTotals);\r\n\t\t\tconst count = orderTotals.lines.reduce((s, l) => s + l.quantity, 0);\r\n\t\t\talert(`Proceeding to checkout with ${count} ticket(s) totaling {formatCurrency(orderTotals.total as USD /* FIXME(canonical-cleanup:toFixed): this cast bypasses the brand boundary; replace with toCents/toUSD at the API-response-transform layer. */)}`);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction handleDataVariantChange(v: DataVariant) {\r\n\t\tdataVariant = v;\r\n\t}\r\n\r\n\t// --- Promo handlers ---\r\n\t// Showcase test codes: REVEAL (unlocks hidden tickets), DISCOUNT10 (10% off), VIP20 ($20 off + reveal)\r\n\tfunction handlePromoApply(code: string) {\r\n\t\tif (onPromoApplyProp) {\r\n\t\t\t// Production mode: async API validation\r\n\t\t\tpromoState = { ...promoState, isValidating: true, error: '', hint: '' };\r\n\t\t\tonPromoApplyProp(code).then((result) => {\r\n\t\t\t\tpromoState = result;\r\n\t\t\t}).catch(() => {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\t...createDefaultPromoState(),\r\n\t\t\t\t\tcode: code.toUpperCase(),\r\n\t\t\t\t\terror: 'Failed to validate promo code'\r\n\t\t\t\t};\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Showcase mode: mock validation\r\n\t\tconst upper = code.toUpperCase();\r\n\t\tpromoState = { ...promoState, isValidating: true, error: '', hint: '' };\r\n\r\n\t\t// Simulate async validation\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (upper === 'REVEAL') {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\tcode: upper,\r\n\t\t\t\t\tisApplied: true,\r\n\t\t\t\t\tisValidating: false,\r\n\t\t\t\t\terror: '',\r\n\t\t\t\t\thint: `${upper} applied. Hidden tickets are now visible.`,\r\n\t\t\t\t\tdiscountAmount: 0,\r\n\t\t\t\t\tdiscountType: '',\r\n\t\t\t\t\tdiscountTicketIds: [],\r\n\t\t\t\t\trevealHiddenTickets: true,\r\n\t\t\t\t\trevealTicketIds: []\r\n\t\t\t\t};\r\n\t\t\t} else if (upper === 'DISCOUNT10') {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\tcode: upper,\r\n\t\t\t\t\tisApplied: true,\r\n\t\t\t\t\tisValidating: false,\r\n\t\t\t\t\terror: '',\r\n\t\t\t\t\thint: `${upper} applied. 10% off all tickets.`,\r\n\t\t\t\t\tdiscountAmount: 10,\r\n\t\t\t\t\tdiscountType: '%',\r\n\t\t\t\t\tdiscountTicketIds: [],\r\n\t\t\t\t\trevealHiddenTickets: false,\r\n\t\t\t\t\trevealTicketIds: []\r\n\t\t\t\t};\r\n\t\t\t} else if (upper === 'VIP20') {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\tcode: upper,\r\n\t\t\t\t\tisApplied: true,\r\n\t\t\t\t\tisValidating: false,\r\n\t\t\t\t\terror: '',\r\n\t\t\t\t\thint: `${upper} applied. $20 off + hidden tickets revealed.`,\r\n\t\t\t\t\tdiscountAmount: 20,\r\n\t\t\t\t\tdiscountType: '$',\r\n\t\t\t\t\tdiscountTicketIds: [],\r\n\t\t\t\t\trevealHiddenTickets: true,\r\n\t\t\t\t\trevealTicketIds: []\r\n\t\t\t\t};\r\n\t\t\t} else {\r\n\t\t\t\tpromoState = {\r\n\t\t\t\t\t...createDefaultPromoState(),\r\n\t\t\t\t\tcode: upper,\r\n\t\t\t\t\terror: 'Invalid promo code'\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}, 800);\r\n\t}\r\n\r\n\tfunction handlePromoRemove() {\r\n\t\t// Always clean up hidden ticket quantities locally\r\n\t\tconst hiddenIds = event.tickets.filter((t) => t.isHidden).map((t) => t.id);\r\n\t\tconst newQuantities = { ...quantities };\r\n\t\tfor (const id of hiddenIds) {\r\n\t\t\tdelete newQuantities[id];\r\n\t\t}\r\n\t\tquantities = newQuantities;\r\n\t\tpromoState = createDefaultPromoState();\r\n\r\n\t\t// Notify production caller\r\n\t\tif (onPromoRemoveProp) {\r\n\t\t\tonPromoRemoveProp();\r\n\t\t}\r\n\t}\r\n\r\n\t// Compute per-ticket promo info\r\n\tfunction getTicketPromoInfo(ticketId: number, ticket: { price: number; isDonation: boolean; isHidden: boolean; ticketType?: number }) {\r\n\t\tconst isDonation = ticket.isDonation || ticket.ticketType === 2;\r\n\t\tconst isRevealed = ticket.isHidden && (promoState.revealHiddenTickets || promoState.revealTicketIds.includes(ticketId));\r\n\r\n\t\tlet isDiscounted = false;\r\n\t\tlet discountedPrice: number | null = null;\r\n\r\n\t\tif (promoState.isApplied && promoState.discountAmount > 0 && !isDonation) {\r\n\t\t\tconst eligible = promoState.discountTicketIds.length === 0 || promoState.discountTicketIds.includes(ticketId);\r\n\t\t\tif (eligible) {\r\n\t\t\t\tisDiscounted = true;\r\n\t\t\t\tif (promoState.discountType === '%') {\r\n\t\t\t\t\tdiscountedPrice = ticket.price * (1 - promoState.discountAmount / 100);\r\n\t\t\t\t} else if (promoState.discountType === '$') {\r\n\t\t\t\t\tdiscountedPrice = Math.max(0, ticket.price - promoState.discountAmount);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn { isRevealed, isDiscounted, discountedPrice };\r\n\t}\r\n</script>\r\n\r\n<div class=\"w-full min-h-screen bg-surface-primary text-color-primary\">\r\n\t<!-- Dev: mock data toggle (showcase mode only) -->\r\n\t{#if isShowcaseMode}\r\n\t\t<DataToggle current={dataVariant} onChange={handleDataVariantChange} />\r\n\t{/if}\r\n\r\n\t<div class=\"max-w-6xl mx-auto px-4 py-6 md:px-6 md:py-8\">\r\n\r\n\t\t<!-- Shared desktop content (rendered via snippet to avoid duplication) -->\r\n\t\t{#snippet desktopContent()}\r\n\t\t\t<!-- Hero image -->\r\n\t\t\t<HeroImage src={event.imageUrl} alt={event.title}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\r\n\t\t\t<!-- Event header (title, date, venue, stage, age, scarcity badge) -->\r\n\t\t\t<EventHeader {event} hideDateTime={isFullWidth} hideVenue={isCollection}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\r\n\t\t\t<!-- INLINE TICKET SELECTION (hidden for series/collection — no single-event tickets) -->\r\n\t\t\t{#if showTicketCards && !isFullWidth}\r\n\t\t\t\t<section id=\"desktop-ticket-section\">\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">\r\n\t\t\t\t\t\t{isOnSale ? (labels.selectTickets || 'Select tickets') : (labels.ticketsTab || 'Tickets')}\r\n\t\t\t\t\t</Heading>\r\n\r\n\t\t\t\t\t{#if hasMultipleSections}\r\n\t\t\t\t\t\t<!-- Sectioned tickets -->\r\n\t\t\t\t\t\t{#each Object.entries(groupedTickets) as [sectionName, sectionTickets] (sectionName)}\r\n\t\t\t\t\t\t\t<div class=\"mb-6 last:mb-0\">\r\n\t\t\t\t\t\t\t\t{#if sectionName !== '_default'}\r\n\t\t\t\t\t\t\t\t\t<Heading level={3} size=\"sm\" weight=\"semibold\" class=\"mb-3\">\r\n\t\t\t\t\t\t\t\t\t\t{sectionName}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t\t\t\t{#each sectionTickets as ticket (ticket.id)}\r\n\t\t\t\t\t\t\t\t\t\t{@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n\t\t\t\t\t\t\t\t\t\t<TicketCard\r\n\t\t\t\t\t\t\t\t\t\t\t{ticket}\r\n\t\t\t\t\t\t\t\t\t\t\tquantity={quantities[ticket.id] ?? 0}\r\n\t\t\t\t\t\t\t\t\t\t\tonQuantityChange={handleQuantityChange}\r\n\t\t\t\t\t\t\t\t\t\t\tdonationAmount={donationAmounts[ticket.id] ?? ''}\r\n\t\t\t\t\t\t\t\t\t\t\tonDonationChange={handleDonationChange}\r\n\t\t\t\t\t\t\t\t\t\t\tisRevealedByPromo={promoInfo.isRevealed}\r\n\t\t\t\t\t\t\t\t\t\t\tisDiscountedByPromo={promoInfo.isDiscounted}\r\n\t\t\t\t\t\t\t\t\t\t\tdiscountedPrice={promoInfo.discountedPrice}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t<!-- Flat ticket list -->\r\n\t\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t\t{#each visibleTickets as ticket (ticket.id)}\r\n\t\t\t\t\t\t\t\t{@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n\t\t\t\t\t\t\t\t<TicketCard\r\n\t\t\t\t\t\t\t\t\t{ticket}\r\n\t\t\t\t\t\t\t\t\tquantity={quantities[ticket.id] ?? 0}\r\n\t\t\t\t\t\t\t\t\tonQuantityChange={handleQuantityChange}\r\n\t\t\t\t\t\t\t\t\tdonationAmount={donationAmounts[ticket.id] ?? ''}\r\n\t\t\t\t\t\t\t\t\tonDonationChange={handleDonationChange}\r\n\t\t\t\t\t\t\t\t\tisRevealedByPromo={promoInfo.isRevealed}\r\n\t\t\t\t\t\t\t\t\tisDiscountedByPromo={promoInfo.isDiscounted}\r\n\t\t\t\t\t\t\t\t\tdiscountedPrice={promoInfo.discountedPrice}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t<!-- Promo code input: only show when event is on sale -->\r\n\t\t\t\t\t{#if isOnSale}\r\n\t\t\t\t\t\t<PromoCodeInput\r\n\t\t\t\t\t\t\t{promoState}\r\n\t\t\t\t\t\t\tonApply={handlePromoApply}\r\n\t\t\t\t\t\t\tonRemove={handlePromoRemove}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Showtimes (series — primary content, before About) -->\r\n\t\t\t{#if isSeries}\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Upcoming Shows</Heading>\r\n\t\t\t\t\t<ShowtimeDesigns {event} onShowtimeClick={onShowtimeClickProp}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Collection: About goes above event widgets -->\r\n\t\t\t{#if isCollection}\r\n\t\t\t\t<AboutSection description={event.description}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Collection events grid (widgets) -->\r\n\t\t\t{#if isCollection}\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Events</Heading>\r\n\t\t\t\t\t<div class=\"collection-grid\">\r\n\t\t\t\t\t\t{#each galleryEvents as ce (ce.id)}\r\n\t\t\t\t\t\t\t<GalleryCard event={ce} oneventClick={handleCollectionEventClick} />\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- About section (non-collection) -->\r\n\t\t\t{#if !isCollection}\r\n\t\t\t\t<AboutSection description={event.description}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Performers (hidden for series/collection) -->\r\n\t\t\t{#if !isFullWidth}\r\n\t\t\t\t<PerformerGrid performers={event.performers}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- FAQs (hidden for collection — FAQs are per-venue, not per-collection) -->\r\n\t\t\t{#if event.faqs.length > 0 && !isCollection}\r\n\t\t\t\t<FaqAccordion faqs={event.faqs}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Disclaimer -->\r\n\t\t\t{#if event.disclaimer}\r\n\t\t\t\t<section class=\"pt-4 border-t border-default\">\r\n\t\t\t\t\t<Text size=\"xs\" color=\"muted\" leading=\"relaxed\" class=\"block\">\r\n\t\t\t\t\t\t{event.disclaimer}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\t\t{/snippet}\r\n\r\n\t\t<!-- ============================================== -->\r\n\t\t<!-- DESKTOP LAYOUT -->\r\n\t\t<!-- ============================================== -->\r\n\t\t{#if isFullWidth}\r\n\t\t\t<!-- Series/Collection: full-width single column (no sidebar) -->\r\n\t\t\t<div class=\"hidden md:block space-y-8\">\r\n\t\t\t\t{@render desktopContent()}\r\n\t\t\t</div>\r\n\t\t{:else}\r\n\t\t\t<!-- Regular: two-column Airbnb split (1fr 360px) -->\r\n\t\t\t<div class=\"hidden md:grid gap-8 items-start\" style=\"grid-template-columns: 1fr 360px;\">\r\n\t\t\t\t<div class=\"space-y-8\">\r\n\t\t\t\t\t{@render desktopContent()}\r\n\t\t\t\t</div>\r\n\t\t\t\t<div class=\"sticky top-6\">\r\n\t\t\t\t\t<BookingWidget\r\n\t\t\t\t\t\t{event}\r\n\t\t\t\t\t\t{orderTotals}\r\n\t\t\t\t\t\t{hasSelectedTickets}\r\n\t\t\t\t\t\tonCheckout={handleCheckout}\r\n\t\t\t\t\t\tpromoApplied={promoState.isApplied}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\r\n\t\t<!-- ============================================== -->\r\n\t\t<!-- MOBILE: Single column with fixed bottom CTA -->\r\n\t\t<!-- ============================================== -->\r\n\t\t<div class=\"md:hidden space-y-6\" class:pb-24={!isFullWidth}>\r\n\t\t\t<!-- Hero image -->\r\n\t\t\t<HeroImage src={event.imageUrl} alt={event.title}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\r\n\t\t\t<!-- Event header -->\r\n\t\t\t<EventHeader {event} hideDateTime={isFullWidth} hideVenue={isCollection}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\r\n\t\t\t<!-- Inline ticket selection (mobile — hidden for series/collection) -->\r\n\t\t\t{#if showTicketCards && !isFullWidth}\r\n\t\t\t\t<section id=\"mobile-ticket-section\">\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">\r\n\t\t\t\t\t\t{isOnSale ? (labels.selectTickets || 'Select tickets') : (labels.ticketsTab || 'Tickets')}\r\n\t\t\t\t\t</Heading>\r\n\r\n\t\t\t\t\t{#if hasMultipleSections}\r\n\t\t\t\t\t\t{#each Object.entries(groupedTickets) as [sectionName, sectionTickets] (sectionName)}\r\n\t\t\t\t\t\t\t<div class=\"mb-6 last:mb-0\">\r\n\t\t\t\t\t\t\t\t{#if sectionName !== '_default'}\r\n\t\t\t\t\t\t\t\t\t<Heading level={3} size=\"sm\" weight=\"semibold\" class=\"mb-3\">\r\n\t\t\t\t\t\t\t\t\t\t{sectionName}\r\n\t\t\t\t\t\t\t\t\t</Heading>\r\n\t\t\t\t\t\t\t\t{/if}\r\n\t\t\t\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t\t\t\t{#each sectionTickets as ticket (ticket.id)}\r\n\t\t\t\t\t\t\t\t\t\t{@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n\t\t\t\t\t\t\t\t\t\t<TicketCard\r\n\t\t\t\t\t\t\t\t\t\t\t{ticket}\r\n\t\t\t\t\t\t\t\t\t\t\tquantity={quantities[ticket.id] ?? 0}\r\n\t\t\t\t\t\t\t\t\t\t\tonQuantityChange={handleQuantityChange}\r\n\t\t\t\t\t\t\t\t\t\t\tdonationAmount={donationAmounts[ticket.id] ?? ''}\r\n\t\t\t\t\t\t\t\t\t\t\tonDonationChange={handleDonationChange}\r\n\t\t\t\t\t\t\t\t\t\t\tisRevealedByPromo={promoInfo.isRevealed}\r\n\t\t\t\t\t\t\t\t\t\t\tisDiscountedByPromo={promoInfo.isDiscounted}\r\n\t\t\t\t\t\t\t\t\t\t\tdiscountedPrice={promoInfo.discountedPrice}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t{:else}\r\n\t\t\t\t\t\t<div class=\"space-y-3\">\r\n\t\t\t\t\t\t\t{#each visibleTickets as ticket (ticket.id)}\r\n\t\t\t\t\t\t\t\t{@const promoInfo = getTicketPromoInfo(ticket.id, ticket)}\r\n\t\t\t\t\t\t\t\t<TicketCard\r\n\t\t\t\t\t\t\t\t\t{ticket}\r\n\t\t\t\t\t\t\t\t\tquantity={quantities[ticket.id] ?? 0}\r\n\t\t\t\t\t\t\t\t\tonQuantityChange={handleQuantityChange}\r\n\t\t\t\t\t\t\t\t\tdonationAmount={donationAmounts[ticket.id] ?? ''}\r\n\t\t\t\t\t\t\t\t\tonDonationChange={handleDonationChange}\r\n\t\t\t\t\t\t\t\t\tisRevealedByPromo={promoInfo.isRevealed}\r\n\t\t\t\t\t\t\t\t\tisDiscountedByPromo={promoInfo.isDiscounted}\r\n\t\t\t\t\t\t\t\t\tdiscountedPrice={promoInfo.discountedPrice}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t{/if}\r\n\r\n\t\t\t\t\t<!-- Promo code input: only show when event is on sale -->\r\n\t\t\t\t\t{#if isOnSale}\r\n\t\t\t\t\t\t<PromoCodeInput\r\n\t\t\t\t\t\t\t{promoState}\r\n\t\t\t\t\t\t\tonApply={handlePromoApply}\r\n\t\t\t\t\t\t\tonRemove={handlePromoRemove}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t{/if}\r\n\t\t\t\t</section>\r\n\r\n\t\t\t\t<!-- Mobile order summary: now in slide-up drawer from MobileCta -->\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Showtimes (mobile — primary content for series) -->\r\n\t\t\t{#if isSeries}\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Upcoming Shows</Heading>\r\n\t\t\t\t\t<ShowtimeDesigns {event} onShowtimeClick={onShowtimeClickProp}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Collection: About goes above event widgets -->\r\n\t\t\t{#if isCollection}\r\n\t\t\t\t<AboutSection description={event.description}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Collection events grid (mobile) -->\r\n\t\t\t{#if isCollection}\r\n\t\t\t\t<section>\r\n\t\t\t\t\t<Heading size=\"xl\" weight=\"semibold\" class=\"mb-4\">Events</Heading>\r\n\t\t\t\t\t<div class=\"collection-grid\">\r\n\t\t\t\t\t\t{#each galleryEvents as ce (ce.id)}\r\n\t\t\t\t\t\t\t<GalleryCard event={ce} oneventClick={handleCollectionEventClick} />\r\n\t\t\t\t\t\t{/each}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- About section (non-collection) -->\r\n\t\t\t{#if !isCollection}\r\n\t\t\t\t<AboutSection description={event.description}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Performers (hidden for series/collection) -->\r\n\t\t\t{#if !isFullWidth}\r\n\t\t\t\t<PerformerGrid performers={event.performers}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- FAQs (hidden for collection) -->\r\n\t\t\t{#if !isCollection}\r\n\t\t\t\t<FaqAccordion faqs={event.faqs}\r\n\t\t\t\tlabels={mergedLabels} />\r\n\t\t\t{/if}\r\n\r\n\t\t\t<!-- Disclaimer -->\r\n\t\t\t{#if event.disclaimer}\r\n\t\t\t\t<section class=\"pt-4 border-t border-default\">\r\n\t\t\t\t\t<Text size=\"xs\" color=\"muted\" leading=\"relaxed\" class=\"block\">\r\n\t\t\t\t\t\t{event.disclaimer}\r\n\t\t\t\t\t</Text>\r\n\t\t\t\t</section>\r\n\t\t\t{/if}\r\n\t\t</div>\r\n\r\n\t\t<!-- Mobile: Fixed bottom CTA bar (DICE-style) — hidden for series/collection -->\r\n\t\t{#if !isFullWidth}\r\n\t\t\t<div class=\"md:hidden\">\r\n\t\t\t\t<MobileCta\r\n\t\t\t\t\t{event}\r\n\t\t\t\t\t{orderTotals}\r\n\t\t\t\t\t{hasSelectedTickets}\r\n\t\t\t\t\tonCheckout={handleCheckout}\r\n\t\t\t\tlabels={mergedLabels}\r\n\t\t\t\t/>\r\n\t\t\t</div>\r\n\t\t{/if}\r\n\t</div>\r\n</div>\r\n\r\n<style>\r\n\t.collection-grid {\r\n\t\tdisplay: grid;\r\n\t\tgap: 1.5rem;\r\n\t\tgrid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\r\n\t}\r\n</style>\r\n"],"names":["$","$$props","div","root","img","img_1","hideDateTime","hideVenue","scarcityLevel","getScarcityLevel","scarcityText","getScarcityText","ageText","shareEvent","url","shareData","err","fallbackShare","div_1","Heading","node","ScarcityBadge","$$anchor","$$render","consequent","button","Share","div_2","fragment_2","Calendar","span","node_4","div_3","root_4","Time","div_4","node_6","span_1","root_5","formatTimeRange","span_2","root_6","formatEventTime","consequent_1","alternate","span_3","root_7","formatDoorsTime","consequent_2","div_5","root_8","span_4","node_9","consequent_3","consequent_4","formatFullDateCompact","consequent_5","div_6","fragment_3","Location","div_7","node_11","span_5","span_6","root_10","text_7","consequent_6","div_8","root_11","Theater","span_7","node_14","consequent_7","div_9","root_12","User","span_8","node_16","consequent_8","text_6","consequent_9","donationAmount","isRevealedByPromo","isDiscountedByPromo","discountedPrice","labels","isDonation","isSoldOut","isComingSoon","isSalesEnded","isDisabled","isSelected","donationValue","donationError","isDonationValid","canDecrement","canIncrement","decrement","newQty","increment","donationInputValue","syncDonation","totalPrice","priceDisplay","feeCaption","salesStartDisplay","formatSmartSalesDate","article","Badge","Text","node_2","root_13","Input","$$value","discountedTotal","fragment_9","root_15","formatCurrency","root_16","fragment_10","root_18","consequent_10","consequent_11","Button","Subtract","node_10","Add","consequent_12","alternate_1","classes","DURATION","classes_1","promoApplied","ctaConfig","getCtaConfig","getPriceDisplay","isFreeEvent","t","scrollToTickets","section","Card","root_1","root_2","root_3","OrderSummary","node_3","$0","text_1","root_9","formatBrowseDate","node_12","alternate_2","root_20","node_15","text_9","text_10","node_17","text_11","alternate_4","paragraphs","p","paragraph","node_1","performer","$1","Avatar","Accordion","faq","AccordionItem","text_2","totalTicketCount","sum","l","drawerOpen","handleCtaClick","toggleDrawer","closeDrawer","ChevronDown","button_1","text_3","ChevronUp","node_8","text_5","options","option","isActive","fragment_1","text","isExpanded","inputValue","handleApply","trimmed","handleRemove","handleKeydown","e","shouldExpand","$2","$3","onShowtimeClick","groupedOccurrences","groups","occ","dateKey","g","handleShowtimeClick","group","eventProp","onCheckoutProp","onPromoApplyProp","onPromoRemoveProp","onCollectionEventClickProp","onShowtimeClickProp","mergedLabels","mergeLabels","isShowcaseMode","dataVariant","quantities","promoState","createDefaultPromoState","donationAmounts","event","mockSoldOutEvent","mockFreeEvent","mockRegistrationEvent","mockSeriesEvent","mockSeriesInstanceEvent","mockCollectionEvent","mockDonationEvent","mockMixedEvent","mockSectionedEvent","mockPromoEvent","mockMultiStageEvent","mockLongNameEvent","mockWideImageEvent","mockEvent","visibleTickets","groupedTickets","ticket","hasMultipleSections","k","isOnSale","showTicketCards","orderTotals","lines","subtotal","fees","promoDiscount","qty","basePrice","ticketFee","ticketDiscount","effectivePrice","ticketSubtotal","totalTicketFee","taxes","calculateTax","hasSelectedTickets","isSeries","isCollection","isFullWidth","galleryEvents","ce","handleCollectionEventClick","galleryEvent","handleQuantityChange","ticketId","handleDonationChange","amount","handleCheckout","count","s","handleDataVariantChange","v","handlePromoApply","code","result","upper","handlePromoRemove","hiddenIds","newQuantities","id","getTicketPromoInfo","isRevealed","isDiscounted","DataToggle","desktopContent","HeroImage","EventHeader","section_1","sectionName","sectionTickets","$$item","$$array","node_7","promoInfo","TicketCard","PromoCodeInput","section_2","ShowtimeDesigns","AboutSection","section_3","GalleryCard","PerformerGrid","FaqAccordion","section_4","root_22","node_19","text_4","root_24","node_21","root_25","node_22","BookingWidget","node_23","div_10","node_20","node_24","node_25","section_5","root_26","node_27","$$array_1","div_11","root_29","consequent_13","div_12","node_30","div_13","root_33","consequent_14","consequent_15","consequent_16","section_6","root_36","node_33","node_34","consequent_17","consequent_18","section_7","root_39","node_37","div_14","consequent_19","consequent_20","consequent_21","consequent_22","section_8","root_45","node_42","consequent_23","div_15","root_47","MobileCta","node_44","consequent_24"],"mappings":"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"}