@ticketlayer/elements 0.3.3 → 0.4.0

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 (134) hide show
  1. package/README.md +3 -2
  2. package/dist/cjs/{index-BpfoKd9Q.js → index-I9CoYv3k.js} +1 -1
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/loader.cjs.js +2 -2
  5. package/dist/cjs/money-BtmM2gt-.js +118 -0
  6. package/dist/cjs/{order-summary-ZMkJ5bez.js → order-summary-X3TlZxc2.js} +34 -0
  7. package/dist/cjs/ticketlayer-elements.cjs.js +2 -2
  8. package/dist/cjs/tl-buy-modal.cjs.entry.js +3 -3
  9. package/dist/cjs/tl-buy-tickets-button.cjs.entry.js +10 -7
  10. package/dist/cjs/tl-buy-tickets-wrapper.cjs.entry.js +2 -2
  11. package/dist/cjs/tl-cart-badge.cjs.entry.js +2 -2
  12. package/dist/cjs/tl-cart-drawer.cjs.entry.js +3 -3
  13. package/dist/cjs/tl-cart.cjs.entry.js +10 -4
  14. package/dist/cjs/tl-checkout-wrapper.cjs.entry.js +2 -2
  15. package/dist/cjs/tl-event-card.cjs.entry.js +4 -3
  16. package/dist/cjs/tl-event-list.cjs.entry.js +2 -2
  17. package/dist/cjs/tl-login.cjs.entry.js +4 -3
  18. package/dist/cjs/tl-my-orders.cjs.entry.js +4 -3
  19. package/dist/cjs/tl-occurrence-selector_2.cjs.entry.js +454 -122
  20. package/dist/cjs/tl-order-confirmation.cjs.entry.js +11 -8
  21. package/dist/cjs/tl-order-tickets_2.cjs.entry.js +3 -3
  22. package/dist/cjs/tl-promo-code.cjs.entry.js +4 -3
  23. package/dist/cjs/tl-seat-map.cjs.entry.js +2 -2
  24. package/dist/collection/components/tl-buy-modal/tl-buy-modal.css +12 -19
  25. package/dist/collection/components/tl-buy-modal/tl-buy-modal.js +1 -1
  26. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.css +4 -4
  27. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.js +8 -5
  28. package/dist/collection/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.css +2 -2
  29. package/dist/collection/components/tl-cart/tl-cart.css +52 -51
  30. package/dist/collection/components/tl-cart/tl-cart.js +8 -2
  31. package/dist/collection/components/tl-cart-badge/tl-cart-badge.css +11 -11
  32. package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.css +6 -6
  33. package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.js +1 -1
  34. package/dist/collection/components/tl-checkout-wrapper/tl-checkout-wrapper.css +2 -2
  35. package/dist/collection/components/tl-event-card/tl-event-card.css +22 -22
  36. package/dist/collection/components/tl-event-list/tl-event-list.css +17 -17
  37. package/dist/collection/components/tl-login/tl-login.css +26 -26
  38. package/dist/collection/components/tl-my-orders/tl-my-orders.css +40 -40
  39. package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.css +54 -65
  40. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.css +38 -38
  41. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.js +8 -6
  42. package/dist/collection/components/tl-order-tickets/tl-order-tickets.css +9 -9
  43. package/dist/collection/components/tl-promo-code/tl-promo-code.css +25 -25
  44. package/dist/collection/components/tl-seat-map/tl-seat-map.css +10 -10
  45. package/dist/collection/components/tl-ticket/tl-ticket.css +13 -13
  46. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.css +74 -49
  47. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.js +72 -126
  48. package/dist/collection/utils/cart-totals.js +9 -0
  49. package/dist/collection/utils/order-summary.js +36 -0
  50. package/dist/components/money.js +1 -0
  51. package/dist/components/order-summary.js +1 -1
  52. package/dist/components/tl-buy-modal.js +1 -1
  53. package/dist/components/tl-buy-tickets-button.js +1 -1
  54. package/dist/components/tl-buy-tickets-wrapper2.js +1 -1
  55. package/dist/components/tl-cart-badge.js +1 -1
  56. package/dist/components/tl-cart-drawer.js +1 -1
  57. package/dist/components/tl-cart2.js +1 -1
  58. package/dist/components/tl-checkout-wrapper2.js +1 -1
  59. package/dist/components/tl-event-card2.js +1 -1
  60. package/dist/components/tl-event-list.js +1 -1
  61. package/dist/components/tl-login2.js +1 -1
  62. package/dist/components/tl-my-orders.js +1 -1
  63. package/dist/components/tl-occurrence-selector2.js +1 -1
  64. package/dist/components/tl-order-confirmation.js +1 -1
  65. package/dist/components/tl-order-tickets2.js +1 -1
  66. package/dist/components/tl-promo-code.js +1 -1
  67. package/dist/components/tl-seat-map.js +1 -1
  68. package/dist/components/tl-ticket-selector2.js +1 -1
  69. package/dist/components/tl-ticket2.js +1 -1
  70. package/dist/elements.docs.json +4 -4
  71. package/dist/esm/{index-CNX8hZa8.js → index-OoYV1faY.js} +1 -1
  72. package/dist/esm/index.js +1 -1
  73. package/dist/esm/loader.js +3 -3
  74. package/dist/esm/money-4ig0-WB6.js +112 -0
  75. package/dist/esm/{order-summary-BGekdjN9.js → order-summary-DiDtvfZM.js} +34 -1
  76. package/dist/esm/ticketlayer-elements.js +3 -3
  77. package/dist/esm/tl-buy-modal.entry.js +3 -3
  78. package/dist/esm/tl-buy-tickets-button.entry.js +10 -7
  79. package/dist/esm/tl-buy-tickets-wrapper.entry.js +2 -2
  80. package/dist/esm/tl-cart-badge.entry.js +2 -2
  81. package/dist/esm/tl-cart-drawer.entry.js +3 -3
  82. package/dist/esm/tl-cart.entry.js +10 -4
  83. package/dist/esm/tl-checkout-wrapper.entry.js +2 -2
  84. package/dist/esm/tl-event-card.entry.js +4 -3
  85. package/dist/esm/tl-event-list.entry.js +2 -2
  86. package/dist/esm/tl-login.entry.js +4 -3
  87. package/dist/esm/tl-my-orders.entry.js +4 -3
  88. package/dist/esm/tl-occurrence-selector_2.entry.js +455 -123
  89. package/dist/esm/tl-order-confirmation.entry.js +11 -8
  90. package/dist/esm/tl-order-tickets_2.entry.js +3 -3
  91. package/dist/esm/tl-promo-code.entry.js +4 -3
  92. package/dist/esm/tl-seat-map.entry.js +2 -2
  93. package/dist/ticketlayer-elements/index.esm.js +1 -1
  94. package/dist/ticketlayer-elements/p-0814420f.entry.js +1 -0
  95. package/dist/ticketlayer-elements/p-0acabc26.entry.js +1 -0
  96. package/dist/ticketlayer-elements/{p-9629029a.entry.js → p-109a3feb.entry.js} +1 -1
  97. package/dist/ticketlayer-elements/{p-e02079fa.entry.js → p-1a4ba71c.entry.js} +1 -1
  98. package/dist/ticketlayer-elements/p-318965c1.entry.js +1 -0
  99. package/dist/ticketlayer-elements/p-347c7fd1.entry.js +1 -0
  100. package/dist/ticketlayer-elements/p-3649c26d.entry.js +1 -0
  101. package/dist/ticketlayer-elements/p-40260cc9.entry.js +1 -0
  102. package/dist/ticketlayer-elements/p-4ig0-WB6.js +1 -0
  103. package/dist/ticketlayer-elements/p-55fd2f9f.entry.js +1 -0
  104. package/dist/ticketlayer-elements/p-62ee659b.entry.js +1 -0
  105. package/dist/ticketlayer-elements/p-7d4ecc2b.entry.js +1 -0
  106. package/dist/ticketlayer-elements/p-7f0abf95.entry.js +1 -0
  107. package/dist/ticketlayer-elements/p-BXpVGW51.js +1 -0
  108. package/dist/ticketlayer-elements/p-OoYV1faY.js +3 -0
  109. package/dist/ticketlayer-elements/p-a3c1b26c.entry.js +1 -0
  110. package/dist/ticketlayer-elements/{p-1c51cbc1.entry.js → p-ac264adc.entry.js} +1 -1
  111. package/dist/ticketlayer-elements/{p-895ba1f3.entry.js → p-aeb4c6fb.entry.js} +1 -1
  112. package/dist/ticketlayer-elements/{p-fa639d88.entry.js → p-ba62541f.entry.js} +1 -1
  113. package/dist/ticketlayer-elements/ticketlayer-elements.css +1 -1
  114. package/dist/ticketlayer-elements/ticketlayer-elements.esm.js +1 -1
  115. package/dist/types/components/tl-cart/tl-cart.d.ts +10 -0
  116. package/dist/types/components/tl-ticket-selector/tl-ticket-selector.d.ts +40 -29
  117. package/dist/types/components.d.ts +32 -0
  118. package/dist/types/utils/cart-totals.d.ts +10 -0
  119. package/dist/types/utils/order-summary.d.ts +34 -0
  120. package/elements.catalogue.json +91 -22
  121. package/package.json +12 -6
  122. package/dist/ticketlayer-elements/p-0b1d16f8.entry.js +0 -1
  123. package/dist/ticketlayer-elements/p-1471f6d8.entry.js +0 -1
  124. package/dist/ticketlayer-elements/p-5169f68b.entry.js +0 -1
  125. package/dist/ticketlayer-elements/p-8d5722e1.entry.js +0 -1
  126. package/dist/ticketlayer-elements/p-917d8e09.entry.js +0 -1
  127. package/dist/ticketlayer-elements/p-BGekdjN9.js +0 -1
  128. package/dist/ticketlayer-elements/p-CNX8hZa8.js +0 -3
  129. package/dist/ticketlayer-elements/p-a22714d0.entry.js +0 -1
  130. package/dist/ticketlayer-elements/p-bf73044b.entry.js +0 -1
  131. package/dist/ticketlayer-elements/p-e04ace15.entry.js +0 -1
  132. package/dist/ticketlayer-elements/p-e6fab1d5.entry.js +0 -1
  133. package/dist/ticketlayer-elements/p-f826b753.entry.js +0 -1
  134. package/dist/ticketlayer-elements/p-fbaca948.entry.js +0 -1
@@ -1,46 +1,46 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--tl-font-family, system-ui, sans-serif);
4
- color: var(--tl-foreground, #111827);
3
+ font-family: var(--tl-font-family);
4
+ color: var(--tl-foreground);
5
5
  }
6
6
 
7
7
  .field {
8
8
  display: flex;
9
- gap: var(--tl-spacing-2, 0.5rem);
9
+ gap: var(--tl-spacing-2);
10
10
  }
11
11
 
12
12
  .input {
13
13
  flex: 1;
14
14
  min-width: 0;
15
- padding: var(--tl-spacing-3, 0.75rem);
15
+ padding: var(--tl-spacing-3);
16
16
  font: inherit;
17
17
  font-size: 0.875rem;
18
- color: var(--tl-foreground, #111827);
19
- background: var(--tl-background, #ffffff);
20
- border: 1px solid var(--tl-border, #e5e7eb);
21
- border-radius: var(--tl-radius-md, 0.5rem);
18
+ color: var(--tl-foreground);
19
+ background: var(--tl-background);
20
+ border: 1px solid var(--tl-border);
21
+ border-radius: var(--tl-radius-md);
22
22
  text-transform: uppercase;
23
23
  }
24
24
 
25
25
  .input::placeholder {
26
26
  text-transform: none;
27
- color: var(--tl-muted-foreground, #6b7280);
27
+ color: var(--tl-muted-foreground);
28
28
  }
29
29
 
30
30
  .input:focus {
31
- outline: 2px solid var(--tl-primary, #6366f1);
31
+ outline: 2px solid var(--tl-primary);
32
32
  outline-offset: 1px;
33
33
  }
34
34
 
35
35
  .apply {
36
- padding: var(--tl-spacing-3, 0.75rem) var(--tl-spacing-4, 1rem);
36
+ padding: var(--tl-spacing-3) var(--tl-spacing-4);
37
37
  font: inherit;
38
38
  font-size: 0.875rem;
39
39
  font-weight: 500;
40
- color: var(--tl-primary-foreground, #ffffff);
41
- background: var(--tl-primary, #6366f1);
40
+ color: var(--tl-primary-foreground);
41
+ background: var(--tl-primary);
42
42
  border: none;
43
- border-radius: var(--tl-radius-md, 0.5rem);
43
+ border-radius: var(--tl-radius-md);
44
44
  cursor: pointer;
45
45
  white-space: nowrap;
46
46
  }
@@ -56,45 +56,45 @@
56
56
  }
57
57
 
58
58
  .error {
59
- margin: var(--tl-spacing-2, 0.5rem) 0 0;
59
+ margin: var(--tl-spacing-2) 0 0;
60
60
  font-size: 0.8125rem;
61
- color: var(--tl-error, #ef4444);
61
+ color: var(--tl-error);
62
62
  }
63
63
 
64
64
  .applied {
65
65
  display: flex;
66
66
  align-items: center;
67
67
  justify-content: space-between;
68
- gap: var(--tl-spacing-3, 0.75rem);
69
- padding: var(--tl-spacing-3, 0.75rem);
68
+ gap: var(--tl-spacing-3);
69
+ padding: var(--tl-spacing-3);
70
70
  font-size: 0.875rem;
71
- background: var(--tl-muted, #f9fafb);
72
- border: 1px solid var(--tl-border, #e5e7eb);
73
- border-radius: var(--tl-radius-md, 0.5rem);
71
+ background: var(--tl-muted);
72
+ border: 1px solid var(--tl-border);
73
+ border-radius: var(--tl-radius-md);
74
74
  }
75
75
 
76
76
  .applied-text {
77
77
  display: flex;
78
78
  align-items: center;
79
- gap: var(--tl-spacing-2, 0.5rem);
79
+ gap: var(--tl-spacing-2);
80
80
  }
81
81
 
82
82
  .icon {
83
83
  width: 1rem;
84
84
  height: 1rem;
85
85
  flex-shrink: 0;
86
- color: var(--tl-success, #10b981);
86
+ color: var(--tl-success);
87
87
  }
88
88
 
89
89
  .code {
90
- font-family: var(--tl-font-family-mono, ui-monospace, monospace);
90
+ font-family: var(--tl-font-family-mono);
91
91
  }
92
92
 
93
93
  .link {
94
94
  padding: 0;
95
95
  font: inherit;
96
96
  font-size: 0.8125rem;
97
- color: var(--tl-primary, #6366f1);
97
+ color: var(--tl-primary);
98
98
  background: none;
99
99
  border: none;
100
100
  cursor: pointer;
@@ -4,14 +4,14 @@
4
4
 
5
5
  :host {
6
6
  display: block;
7
- font-family: var(--tl-font-family, system-ui, -apple-system, sans-serif);
7
+ font-family: var(--tl-font-family);
8
8
  }
9
9
 
10
10
  .seat-map-container {
11
11
  position: relative;
12
12
  overflow: hidden;
13
- border-radius: var(--tl-radius-md, 0.5rem);
14
- background: var(--tl-color-background, #ffffff);
13
+ border-radius: var(--tl-radius-md);
14
+ background: var(--tl-color-background);
15
15
  }
16
16
 
17
17
  .seat-map-iframe {
@@ -32,22 +32,22 @@
32
32
  flex-direction: column;
33
33
  align-items: center;
34
34
  justify-content: center;
35
- background: var(--tl-color-background, #ffffff);
36
- color: var(--tl-color-foreground, #0f172a);
35
+ background: var(--tl-color-background);
36
+ color: var(--tl-color-foreground);
37
37
  gap: 1rem;
38
38
  }
39
39
 
40
40
  .loading p {
41
41
  margin: 0;
42
42
  font-size: 0.875rem;
43
- color: var(--tl-color-muted-foreground, #64748b);
43
+ color: var(--tl-color-muted-foreground);
44
44
  }
45
45
 
46
46
  .spinner {
47
47
  width: 40px;
48
48
  height: 40px;
49
- border: 3px solid var(--tl-color-border, #e2e8f0);
50
- border-top-color: var(--tl-color-primary, #e64b12);
49
+ border: 3px solid var(--tl-color-border);
50
+ border-top-color: var(--tl-color-primary);
51
51
  border-radius: 50%;
52
52
  animation: tl-seat-map-spin 1s linear infinite;
53
53
  }
@@ -66,8 +66,8 @@
66
66
  flex-direction: column;
67
67
  align-items: center;
68
68
  justify-content: center;
69
- background: var(--tl-color-background, #ffffff);
70
- color: var(--tl-color-error, #ef4444);
69
+ background: var(--tl-color-background);
70
+ color: var(--tl-color-error);
71
71
  padding: 1.5rem;
72
72
  text-align: center;
73
73
  }
@@ -1,13 +1,13 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--tl-font-family, system-ui, sans-serif);
3
+ font-family: var(--tl-font-family);
4
4
  }
5
5
 
6
6
  .ticket {
7
- border: 1px solid var(--tl-border, #e5e7eb);
8
- border-radius: var(--tl-radius-lg, 0.75rem);
9
- background: var(--tl-card, #ffffff);
10
- padding: var(--tl-spacing-5, 1.25rem);
7
+ border: 1px solid var(--tl-border);
8
+ border-radius: var(--tl-radius-lg);
9
+ background: var(--tl-card);
10
+ padding: var(--tl-spacing-5);
11
11
  text-align: center;
12
12
  }
13
13
 
@@ -39,7 +39,7 @@
39
39
  left: 50%;
40
40
  transform: translate(-50%, -50%);
41
41
  padding: 0.25rem 0.5rem;
42
- border-radius: var(--tl-radius-sm, 0.25rem);
42
+ border-radius: var(--tl-radius-sm);
43
43
  background: rgba(17, 24, 39, 0.85);
44
44
  color: #ffffff;
45
45
  font-size: 0.7rem;
@@ -51,37 +51,37 @@
51
51
  .name {
52
52
  margin: 1rem 0 0;
53
53
  font-weight: 600;
54
- color: var(--tl-foreground, #111827);
54
+ color: var(--tl-foreground);
55
55
  }
56
56
 
57
57
  .meta {
58
58
  margin: 0.125rem 0 0;
59
59
  font-size: 0.875rem;
60
- color: var(--tl-muted-foreground, #6b7280);
60
+ color: var(--tl-muted-foreground);
61
61
  }
62
62
 
63
63
  .barcode {
64
64
  margin: 0.25rem 0 0;
65
65
  font-family: ui-monospace, monospace;
66
66
  font-size: 0.625rem;
67
- color: var(--tl-muted-foreground, #9ca3af);
67
+ color: var(--tl-muted-foreground);
68
68
  word-break: break-all;
69
69
  }
70
70
 
71
71
  .download {
72
72
  margin-top: 0.75rem;
73
73
  padding: 0.375rem 0.75rem;
74
- border: 1px solid var(--tl-border, #e5e7eb);
75
- border-radius: var(--tl-radius-md, 0.5rem);
74
+ border: 1px solid var(--tl-border);
75
+ border-radius: var(--tl-radius-md);
76
76
  background: transparent;
77
- color: var(--tl-foreground, #111827);
77
+ color: var(--tl-foreground);
78
78
  font-size: 0.875rem;
79
79
  font-weight: 500;
80
80
  cursor: pointer;
81
81
  }
82
82
 
83
83
  .download:hover {
84
- background: var(--tl-muted, #f3f4f6);
84
+ background: var(--tl-muted);
85
85
  }
86
86
 
87
87
  .download:disabled {
@@ -1,33 +1,33 @@
1
1
  :host {
2
2
  /* Map SDK variables (--tl-*) to component variables (--tl-color-*) */
3
3
  /* This allows the component to inherit theme from SDK */
4
- --tl-color-primary: var(--tl-primary, #6366f1);
5
- --tl-color-primary-foreground: var(--tl-primary-foreground, #ffffff);
6
- --tl-color-background: var(--tl-background, #ffffff);
7
- --tl-color-foreground: var(--tl-foreground, #111827);
8
- --tl-color-muted: var(--tl-muted, #f3f4f6);
9
- --tl-color-muted-foreground: var(--tl-muted-foreground, #6b7280);
10
- --tl-color-border: var(--tl-border, #e5e7eb);
11
- --tl-color-destructive: var(--tl-error, #ef4444);
4
+ --tl-color-primary: var(--tl-primary);
5
+ --tl-color-primary-foreground: var(--tl-primary-foreground);
6
+ --tl-color-background: var(--tl-background);
7
+ --tl-color-foreground: var(--tl-foreground);
8
+ --tl-color-muted: var(--tl-muted);
9
+ --tl-color-muted-foreground: var(--tl-muted-foreground);
10
+ --tl-color-border: var(--tl-border);
11
+ --tl-color-destructive: var(--tl-error);
12
12
 
13
13
  display: block;
14
- font-family: var(--tl-font-family, system-ui, sans-serif);
14
+ font-family: var(--tl-font-family);
15
15
  }
16
16
 
17
17
  .ticket-selector {
18
- background: var(--tl-color-background, #ffffff);
18
+ background: var(--tl-color-background);
19
19
  }
20
20
 
21
21
  /* Skeleton loading */
22
22
  .skeleton-container {
23
- padding: var(--tl-spacing-4, 1rem);
23
+ padding: var(--tl-spacing-4);
24
24
  }
25
25
 
26
26
  .skeleton-row {
27
27
  height: 60px;
28
- background: var(--tl-color-muted, #f3f4f6);
29
- border-radius: var(--tl-radius-md, 0.5rem);
30
- margin-bottom: var(--tl-spacing-3, 0.75rem);
28
+ background: var(--tl-color-muted);
29
+ border-radius: var(--tl-radius-md);
30
+ margin-bottom: var(--tl-spacing-3);
31
31
  animation: pulse 1.5s ease-in-out infinite;
32
32
  }
33
33
 
@@ -38,8 +38,8 @@
38
38
 
39
39
  /* Error state */
40
40
  .error-state {
41
- padding: var(--tl-spacing-4, 1rem);
42
- color: var(--tl-color-destructive, #ef4444);
41
+ padding: var(--tl-spacing-4);
42
+ color: var(--tl-color-destructive);
43
43
  }
44
44
 
45
45
  .error-message {
@@ -49,7 +49,7 @@
49
49
 
50
50
  /* Ticket list */
51
51
  .ticket-list {
52
- margin-bottom: var(--tl-spacing-4, 1rem);
52
+ margin-bottom: var(--tl-spacing-4);
53
53
  }
54
54
 
55
55
  /* Ticket row */
@@ -57,8 +57,8 @@
57
57
  display: flex;
58
58
  align-items: center;
59
59
  justify-content: space-between;
60
- padding: var(--tl-spacing-3, 0.75rem) 0;
61
- border-bottom: 1px solid var(--tl-color-border, #e5e7eb);
60
+ padding: var(--tl-spacing-3) 0;
61
+ border-bottom: 1px solid var(--tl-color-border);
62
62
  }
63
63
 
64
64
  .ticket-row.sold-out {
@@ -73,13 +73,13 @@
73
73
  .ticket-header {
74
74
  display: flex;
75
75
  align-items: center;
76
- gap: var(--tl-spacing-2, 0.5rem);
76
+ gap: var(--tl-spacing-2);
77
77
  flex-wrap: wrap;
78
78
  }
79
79
 
80
80
  .ticket-name {
81
81
  font-weight: 600;
82
- color: var(--tl-color-foreground, #111827);
82
+ color: var(--tl-color-foreground);
83
83
  font-size: 15px;
84
84
  }
85
85
 
@@ -91,43 +91,43 @@
91
91
  }
92
92
 
93
93
  .status-badge.limited {
94
- background-color: var(--tl-color-warning-bg, #fef3c7);
95
- color: var(--tl-color-warning, #d97706);
94
+ background-color: var(--tl-color-warning-bg);
95
+ color: var(--tl-color-warning);
96
96
  }
97
97
 
98
98
  .status-badge.sold-out {
99
- background-color: var(--tl-color-destructive-bg, #fee2e2);
100
- color: var(--tl-color-destructive, #ef4444);
99
+ background-color: var(--tl-color-destructive-bg);
100
+ color: var(--tl-color-destructive);
101
101
  }
102
102
 
103
103
  .ticket-description {
104
- margin: var(--tl-spacing-1, 0.25rem) 0 0;
104
+ margin: var(--tl-spacing-1) 0 0;
105
105
  font-size: 14px;
106
- color: var(--tl-color-muted-foreground, #6b7280);
106
+ color: var(--tl-color-muted-foreground);
107
107
  }
108
108
 
109
109
  .ticket-price {
110
- margin: var(--tl-spacing-1, 0.25rem) 0 0;
110
+ margin: var(--tl-spacing-1) 0 0;
111
111
  font-size: 14px;
112
112
  font-weight: 600;
113
- color: var(--tl-color-foreground, #111827);
113
+ color: var(--tl-color-foreground);
114
114
  }
115
115
 
116
116
  /* Quantity controls */
117
117
  .quantity-controls {
118
118
  display: flex;
119
119
  align-items: center;
120
- gap: var(--tl-spacing-2, 0.5rem);
121
- margin-left: var(--tl-spacing-4, 1rem);
120
+ gap: var(--tl-spacing-2);
121
+ margin-left: var(--tl-spacing-4);
122
122
  }
123
123
 
124
124
  .qty-btn {
125
125
  width: 32px;
126
126
  height: 32px;
127
- border-radius: var(--tl-radius-sm, 0.25rem);
128
- border: 1px solid var(--tl-color-border, #d1d5db);
129
- background: var(--tl-color-background, #ffffff);
130
- color: var(--tl-color-foreground, #111827);
127
+ border-radius: var(--tl-radius-sm);
128
+ border: 1px solid var(--tl-color-border);
129
+ background: var(--tl-color-background);
130
+ color: var(--tl-color-foreground);
131
131
  font-size: 18px;
132
132
  font-weight: 500;
133
133
  cursor: pointer;
@@ -138,8 +138,8 @@
138
138
  }
139
139
 
140
140
  .qty-btn:hover:not(:disabled) {
141
- background-color: var(--tl-color-muted, #f3f4f6);
142
- border-color: var(--tl-color-border-hover, #9ca3af);
141
+ background-color: var(--tl-color-muted);
142
+ border-color: var(--tl-color-border-hover);
143
143
  }
144
144
 
145
145
  .qty-btn:disabled {
@@ -152,7 +152,7 @@
152
152
  text-align: center;
153
153
  font-weight: 600;
154
154
  font-size: 16px;
155
- color: var(--tl-color-foreground, #111827);
155
+ color: var(--tl-color-foreground);
156
156
  }
157
157
 
158
158
  /* Success message */
@@ -160,12 +160,12 @@
160
160
  display: flex;
161
161
  align-items: center;
162
162
  justify-content: center;
163
- gap: var(--tl-spacing-2, 0.5rem);
164
- padding: var(--tl-spacing-3, 0.75rem);
165
- background-color: var(--tl-color-success, #10b981);
163
+ gap: var(--tl-spacing-2);
164
+ padding: var(--tl-spacing-3);
165
+ background-color: var(--tl-color-success);
166
166
  color: #ffffff;
167
- border-radius: var(--tl-radius-md, 0.5rem);
168
- margin-bottom: var(--tl-spacing-3, 0.75rem);
167
+ border-radius: var(--tl-radius-md);
168
+ margin-bottom: var(--tl-spacing-3);
169
169
  font-weight: 500;
170
170
  font-size: 14px;
171
171
  }
@@ -178,11 +178,11 @@
178
178
  /* Add to cart button */
179
179
  .add-to-cart-btn {
180
180
  width: 100%;
181
- padding: var(--tl-spacing-3, 0.75rem) var(--tl-spacing-4, 1rem);
182
- border-radius: var(--tl-radius-md, 0.5rem);
181
+ padding: var(--tl-spacing-3) var(--tl-spacing-4);
182
+ border-radius: var(--tl-radius-md);
183
183
  border: none;
184
- background-color: var(--tl-color-primary, #6366f1);
185
- color: var(--tl-color-primary-foreground, #ffffff);
184
+ background-color: var(--tl-color-primary);
185
+ color: var(--tl-color-primary-foreground);
186
186
  font-weight: 600;
187
187
  font-size: 16px;
188
188
  cursor: pointer;
@@ -199,7 +199,32 @@
199
199
 
200
200
  .add-to-cart-btn.disabled,
201
201
  .add-to-cart-btn:disabled {
202
- background-color: var(--tl-color-muted, #d1d5db);
203
- color: var(--tl-color-muted-foreground, #6b7280);
202
+ background-color: var(--tl-color-muted);
203
+ color: var(--tl-color-muted-foreground);
204
204
  cursor: not-allowed;
205
205
  }
206
+
207
+ /* Selection totals: only rendered when the surface quotes a fee, so the
208
+ buyer sees the booking fee before the tickets reach the cart. */
209
+ .selection-totals {
210
+ padding: var(--tl-spacing-3) 0;
211
+ border-top: 1px solid var(--tl-color-border);
212
+ }
213
+
214
+ .selection-totals .total-row {
215
+ display: flex;
216
+ justify-content: space-between;
217
+ align-items: center;
218
+ padding: var(--tl-spacing-1) 0;
219
+ font-size: 14px;
220
+ color: var(--tl-color-muted-foreground);
221
+ }
222
+
223
+ .selection-totals .total-row.total {
224
+ font-size: 16px;
225
+ font-weight: 700;
226
+ color: var(--tl-color-foreground);
227
+ padding-top: var(--tl-spacing-2);
228
+ border-top: 1px solid var(--tl-color-border);
229
+ margin-top: var(--tl-spacing-2);
230
+ }