@session-services/web-elements 0.1.3

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 (40) hide show
  1. package/LICENSE +11 -0
  2. package/README.md +101 -0
  3. package/dist/cjs/app-globals-V2Kpy_OQ.js +5 -0
  4. package/dist/cjs/index-C6e98Atu.js +1529 -0
  5. package/dist/cjs/index.cjs.js +2 -0
  6. package/dist/cjs/loader.cjs.js +13 -0
  7. package/dist/cjs/session-services-elements.cjs.js +25 -0
  8. package/dist/cjs/session-services-ticketing.cjs.entry.js +1953 -0
  9. package/dist/collection/collection-manifest.json +12 -0
  10. package/dist/collection/components/session-services-ticketing/session-services-ticketing.css +879 -0
  11. package/dist/collection/components/session-services-ticketing/session-services-ticketing.js +708 -0
  12. package/dist/collection/index.js +11 -0
  13. package/dist/components/index.d.ts +33 -0
  14. package/dist/components/index.js +1311 -0
  15. package/dist/components/session-services-ticketing.d.ts +11 -0
  16. package/dist/components/session-services-ticketing.js +1995 -0
  17. package/dist/esm/app-globals-DQuL1Twl.js +3 -0
  18. package/dist/esm/index-CeXOR4aK.js +1521 -0
  19. package/dist/esm/index.js +1 -0
  20. package/dist/esm/loader.js +11 -0
  21. package/dist/esm/session-services-elements.js +21 -0
  22. package/dist/esm/session-services-ticketing.entry.js +1951 -0
  23. package/dist/index.cjs.js +1 -0
  24. package/dist/index.js +1 -0
  25. package/dist/session-services-elements/index.esm.js +0 -0
  26. package/dist/session-services-elements/p-9ca1f04b.entry.js +1 -0
  27. package/dist/session-services-elements/p-CeXOR4aK.js +2 -0
  28. package/dist/session-services-elements/p-DQuL1Twl.js +1 -0
  29. package/dist/session-services-elements/session-services-elements.esm.js +1 -0
  30. package/dist/sst-env.d.ts +9 -0
  31. package/dist/types/components/session-services-ticketing/session-services-ticketing.d.ts +64 -0
  32. package/dist/types/components.d.ts +111 -0
  33. package/dist/types/index.d.ts +9 -0
  34. package/dist/types/stencil-public-runtime.d.ts +1799 -0
  35. package/loader/cdn.js +1 -0
  36. package/loader/index.cjs.js +1 -0
  37. package/loader/index.d.ts +24 -0
  38. package/loader/index.es2017.js +1 -0
  39. package/loader/index.js +2 -0
  40. package/package.json +101 -0
@@ -0,0 +1,879 @@
1
+ :host {
2
+ /**
3
+ * @prop --radius: Global corner radius used across cards, buttons, and controls.
4
+ * @prop --background: Host/page background behind the component.
5
+ * @prop --foreground: Primary text color.
6
+ * @prop --card: Surface color for cards and panels.
7
+ * @prop --card-foreground: Text color on card surfaces.
8
+ * @prop --popover: Overlay surface color (reserved).
9
+ * @prop --popover-foreground: Text color on overlays (reserved).
10
+ * @prop --primary: Primary action color (e.g., Checkout).
11
+ * @prop --primary-foreground: Text color on primary background.
12
+ * @prop --secondary: Secondary surface (e.g., quantity group, disabled buttons).
13
+ * @prop --secondary-foreground: Text color on secondary surfaces.
14
+ * @prop --muted: Muted/neutral surface color.
15
+ * @prop --muted-foreground: Muted/secondary text color.
16
+ * @prop --accent: Accent/hover color for interactive controls.
17
+ * @prop --accent-foreground: Text color on accent background.
18
+ * @prop --destructive: Destructive state color (errors).
19
+ * @prop --border: Border color for cards/controls.
20
+ * @prop --input: Input border color (reserved).
21
+ * @prop --ring: Focus ring color.
22
+ * @prop --spacing-xs: Spacing scale (xs).
23
+ * @prop --spacing-sm: Spacing scale (sm).
24
+ * @prop --spacing-md: Spacing scale (md).
25
+ * @prop --spacing-lg: Spacing scale (lg).
26
+ * @prop --spacing-xl: Spacing scale (xl).
27
+ * @prop --font-family: Base UI font family.
28
+ * @prop --font-size-xs: Font size xs.
29
+ * @prop --font-size-sm: Font size sm.
30
+ * @prop --font-size-base: Font size base.
31
+ * @prop --font-size-lg: Font size lg.
32
+ * @prop --font-size-xl: Font size xl.
33
+ * @prop --font-size-2xl: Font size 2xl.
34
+ * @prop --font-weight-normal: Font weight normal.
35
+ * @prop --font-weight-medium: Font weight medium.
36
+ * @prop --font-weight-semibold: Font weight semi-bold.
37
+ * @prop --font-weight-bold: Font weight bold.
38
+ * @prop --shadow-sm: Small shadow.
39
+ * @prop --shadow-base: Base shadow.
40
+ * @prop --shadow-md: Medium shadow.
41
+ * @prop --shadow-lg: Large shadow.
42
+ * @prop --shadow-xl: Extra large shadow.
43
+ * @prop --transition-fast: Fast transition.
44
+ * @prop --transition-base: Base transition.
45
+ * @prop --transition-slow: Slow transition.
46
+ */
47
+ --background: transparent;
48
+ --foreground: oklch(0.145 0 0);
49
+ --card: oklch(1 0 0);
50
+ --card-foreground: oklch(0.145 0 0);
51
+ --popover: oklch(1 0 0);
52
+ --popover-foreground: oklch(0.145 0 0);
53
+ --primary: oklch(0.205 0 0);
54
+ --primary-foreground: oklch(0.985 0 0);
55
+ --secondary: oklch(0.97 0 0);
56
+ --secondary-foreground: oklch(0.205 0 0);
57
+ --muted: oklch(0.97 0 0);
58
+ --muted-foreground: oklch(0.556 0 0);
59
+ --accent: oklch(0.97 0 0);
60
+ --accent-foreground: oklch(0.205 0 0);
61
+ --destructive: oklch(0.577 0.245 27.325);
62
+ --destructive-foreground: oklch(1 0 0);
63
+ --border: oklch(0.922 0 0);
64
+ --input: oklch(0.922 0 0);
65
+ --ring: oklch(0.708 0 0);
66
+
67
+ /* Additional colors for component */
68
+ --success: oklch(0.66 0.154 149.48);
69
+ --warning: oklch(0.72 0.153 66.34);
70
+
71
+ /* Radius */
72
+ --radius: 0.625rem;
73
+
74
+ /* Layout spacing - matching Tailwind conventions */
75
+ --spacing-xs: 0.25rem;
76
+ --spacing-sm: 0.5rem;
77
+ --spacing-md: 1rem;
78
+ --spacing-lg: 1.5rem;
79
+ --spacing-xl: 2rem;
80
+
81
+ /* Typography - matching Tailwind font scale */
82
+ --font-family:
83
+ ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
84
+ Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;
85
+ --font-size-xs: 0.75rem;
86
+ --font-size-sm: 0.875rem;
87
+ --font-size-base: 1rem;
88
+ --font-size-lg: 1.125rem;
89
+ --font-size-xl: 1.25rem;
90
+ --font-size-2xl: 1.5rem;
91
+ --font-weight-normal: 400;
92
+ --font-weight-medium: 500;
93
+ --font-weight-semibold: 600;
94
+ --font-weight-bold: 700;
95
+
96
+ /* Shadows - Default theme */
97
+ --shadow-sm:
98
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1);
99
+ --shadow-base:
100
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1);
101
+ --shadow-md:
102
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 2px 4px -1px hsl(0 0% 0% / 0.1);
103
+ --shadow-lg:
104
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 4px 6px -1px hsl(0 0% 0% / 0.1);
105
+ --shadow-xl:
106
+ 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 8px 10px -1px hsl(0 0% 0% / 0.1);
107
+
108
+ /* Transitions */
109
+ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
110
+ --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1);
111
+ --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1);
112
+
113
+ /* Internal tokens with external override fallbacks */
114
+ --internal-background: var(--background, transparent);
115
+ --internal-foreground: var(--foreground, oklch(0.145 0 0));
116
+ --internal-card: var(--card, oklch(1 0 0));
117
+ --internal-card-foreground: var(--card-foreground, oklch(0.145 0 0));
118
+ --internal-popover: var(--popover, oklch(1 0 0));
119
+ --internal-popover-foreground: var(--popover-foreground, oklch(0.145 0 0));
120
+ --internal-primary: var(--primary, oklch(0.205 0 0));
121
+ --internal-primary-foreground: var(--primary-foreground, oklch(0.985 0 0));
122
+ --internal-secondary: var(--secondary, oklch(0.97 0 0));
123
+ --internal-secondary-foreground: var(--secondary-foreground, oklch(0.205 0 0));
124
+ --internal-muted: var(--muted, oklch(0.97 0 0));
125
+ --internal-muted-foreground: var(--muted-foreground, oklch(0.556 0 0));
126
+ --internal-accent: var(--accent, oklch(0.97 0 0));
127
+ --internal-accent-foreground: var(--accent-foreground, oklch(0.205 0 0));
128
+ --internal-destructive: var(--destructive, oklch(0.577 0.245 27.325));
129
+ --internal-destructive-foreground: var(--destructive-foreground, oklch(1 0 0));
130
+ --internal-border: var(--border, oklch(0.922 0 0));
131
+ --internal-input: var(--input, oklch(0.922 0 0));
132
+ --internal-ring: var(--ring, oklch(0.708 0 0));
133
+
134
+ --internal-success: var(--success, oklch(0.66 0.154 149.48));
135
+ --internal-warning: var(--warning, oklch(0.72 0.153 66.34));
136
+
137
+ --internal-radius: var(--radius, 0.625rem);
138
+
139
+ --internal-spacing-xs: var(--spacing-xs, 0.25rem);
140
+ --internal-spacing-sm: var(--spacing-sm, 0.5rem);
141
+ --internal-spacing-md: var(--spacing-md, 1rem);
142
+ --internal-spacing-lg: var(--spacing-lg, 1.5rem);
143
+ --internal-spacing-xl: var(--spacing-xl, 2rem);
144
+
145
+ --internal-font-family:
146
+ var(--font-family, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif);
147
+ --internal-font-size-xs: var(--font-size-xs, 0.75rem);
148
+ --internal-font-size-sm: var(--font-size-sm, 0.875rem);
149
+ --internal-font-size-base: var(--font-size-base, 1rem);
150
+ --internal-font-size-lg: var(--font-size-lg, 1.125rem);
151
+ --internal-font-size-xl: var(--font-size-xl, 1.25rem);
152
+ --internal-font-size-2xl: var(--font-size-2xl, 1.5rem);
153
+ --internal-font-weight-normal: var(--font-weight-normal, 400);
154
+ --internal-font-weight-medium: var(--font-weight-medium, 500);
155
+ --internal-font-weight-semibold: var(--font-weight-semibold, 600);
156
+ --internal-font-weight-bold: var(--font-weight-bold, 700);
157
+
158
+ --internal-shadow-sm:
159
+ var(--shadow-sm, 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1));
160
+ --internal-shadow-base:
161
+ var(--shadow-base, 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 1px 2px -1px hsl(0 0% 0% / 0.1));
162
+ --internal-shadow-md:
163
+ var(--shadow-md, 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 2px 4px -1px hsl(0 0% 0% / 0.1));
164
+ --internal-shadow-lg:
165
+ var(--shadow-lg, 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 4px 6px -1px hsl(0 0% 0% / 0.1));
166
+ --internal-shadow-xl:
167
+ var(--shadow-xl, 0 1px 3px 0px hsl(0 0% 0% / 0.1), 0 8px 10px -1px hsl(0 0% 0% / 0.1));
168
+
169
+ --internal-transition-fast: var(--transition-fast, 150ms cubic-bezier(0.4, 0, 0.2, 1));
170
+ --internal-transition-base: var(--transition-base, 200ms cubic-bezier(0.4, 0, 0.2, 1));
171
+ --internal-transition-slow: var(--transition-slow, 300ms cubic-bezier(0.4, 0, 0.2, 1));
172
+
173
+ display: block;
174
+ font-family: var(--internal-font-family);
175
+ color: var(--internal-foreground);
176
+ background: var(--internal-background);
177
+ }
178
+
179
+ * {
180
+ box-sizing: border-box;
181
+ margin: 0;
182
+ padding: 0;
183
+ }
184
+
185
+ /* Remove default focus outline and add focus-visible styles */
186
+ *:focus {
187
+ outline: none;
188
+ }
189
+
190
+ *:focus-visible {
191
+ outline: 2px solid var(--internal-ring);
192
+ outline-offset: 2px;
193
+ border-radius: calc(var(--internal-radius) - 4px);
194
+ }
195
+
196
+ .session-services-ticketing-container {
197
+ width: 100%;
198
+ max-width: 100%;
199
+ margin: 0;
200
+ }
201
+
202
+ :host([data-theme="dark"]) {
203
+ /* Dark theme inputs (overridable externally) */
204
+ --background: transparent;
205
+ --foreground: oklch(0.96 0 0);
206
+ --card: oklch(0.17 0 0);
207
+ --card-foreground: oklch(0.96 0 0);
208
+ --popover: oklch(0.17 0 0);
209
+ --popover-foreground: oklch(0.96 0 0);
210
+ --primary: oklch(0.78 0 0);
211
+ --primary-foreground: oklch(0.14 0 0);
212
+ --secondary: oklch(0.22 0 0);
213
+ --secondary-foreground: oklch(0.96 0 0);
214
+ --muted: oklch(0.22 0 0);
215
+ --muted-foreground: oklch(0.78 0 0);
216
+ --accent: oklch(0.22 0 0);
217
+ --accent-foreground: oklch(0.96 0 0);
218
+ --destructive: oklch(0.577 0.245 27.325);
219
+ --destructive-foreground: oklch(1 0 0);
220
+ --border: oklch(0.29 0 0);
221
+ --input: oklch(0.29 0 0);
222
+ --ring: oklch(0.60 0 0);
223
+ }
224
+
225
+ /* Tickets Section */
226
+ .tickets-wrapper {
227
+ padding: 0;
228
+ width: 100%;
229
+ }
230
+
231
+ .unsectioned-admissions {
232
+ width: 100%;
233
+ }
234
+
235
+ .unsectioned-admissions .ticket-section {
236
+ background: var(--card);
237
+ border: 1px solid var(--border);
238
+ border-radius: var(--radius);
239
+ margin: 0 0 var(--spacing-lg) 0;
240
+ overflow: hidden;
241
+ width: 100%;
242
+ box-shadow: var(--shadow-sm);
243
+ transition: box-shadow var(--transition-base);
244
+ }
245
+
246
+ .unsectioned-admissions .ticket-section:hover {
247
+ box-shadow: var(--shadow-sm);
248
+ }
249
+
250
+ /* Make unsectioned admission cards have rounded corners */
251
+ .unsectioned-admissions .admission-card {
252
+ border-radius: var(--radius);
253
+ border: none;
254
+ }
255
+
256
+ .unsectioned-admissions .admission-card:first-child {
257
+ border-top-left-radius: var(--radius);
258
+ border-top-right-radius: var(--radius);
259
+ }
260
+
261
+ .unsectioned-admissions .admission-card:last-child {
262
+ border-bottom-left-radius: var(--radius);
263
+ border-bottom-right-radius: var(--radius);
264
+ }
265
+
266
+ .ticket-section {
267
+ background: var(--internal-card);
268
+ border: 1px solid var(--internal-border);
269
+ border-radius: var(--internal-radius);
270
+ margin: 0 0 var(--internal-spacing-lg) 0;
271
+ overflow: hidden;
272
+ width: 100%;
273
+ box-shadow: var(--internal-shadow-sm);
274
+ transition: all var(--internal-transition-base);
275
+ }
276
+
277
+ .ticket-section:focus-within {
278
+ box-shadow: var(--internal-shadow-md);
279
+ }
280
+
281
+ .ticket-section:hover:not(.section-sold-out) {
282
+ box-shadow: var(--internal-shadow-md);
283
+ }
284
+
285
+ .ticket-section.section-sold-out {
286
+ opacity: 1;
287
+ background: var(--card);
288
+ box-shadow: none;
289
+ position: relative;
290
+ border-color: var(--border);
291
+ overflow: hidden;
292
+ }
293
+
294
+ .ticket-section.section-sold-out .section-header {
295
+ background: transparent;
296
+ padding-bottom: var(--spacing-md);
297
+ }
298
+
299
+ .ticket-section.section-sold-out .section-name,
300
+ .ticket-section.section-sold-out .section-time,
301
+ .ticket-section.section-sold-out .section-venue {
302
+ opacity: 0.8;
303
+ }
304
+
305
+ .ticket-section.section-sold-out .admissions-list {
306
+ opacity: 0.6;
307
+ pointer-events: none;
308
+ filter: grayscale(0.3);
309
+ }
310
+
311
+ .ticket-section.section-sold-out .admission-card {
312
+ background: var(--card);
313
+ }
314
+
315
+ .ticket-section.section-sold-out .quantity-controls,
316
+ .ticket-section.section-sold-out .sold-out-controls {
317
+ opacity: 0.7;
318
+ }
319
+
320
+ .section-header {
321
+ padding: var(--internal-spacing-md) var(--internal-spacing-lg);
322
+ border-bottom: 1px solid var(--internal-border);
323
+ background: var(--internal-card);
324
+ }
325
+
326
+ .section-name {
327
+ color: var(--internal-foreground);
328
+ font-size: var(--internal-font-size-lg);
329
+ font-weight: var(--internal-font-weight-semibold);
330
+ letter-spacing: -0.025em;
331
+ margin: 0 0 var(--internal-spacing-xs) 0;
332
+ display: flex;
333
+ align-items: center;
334
+ gap: var(--internal-spacing-sm);
335
+ }
336
+
337
+ .section-time {
338
+ color: var(--internal-muted-foreground);
339
+ font-size: var(--internal-font-size-sm);
340
+ margin-bottom: var(--internal-spacing-xs);
341
+ display: flex;
342
+ align-items: center;
343
+ gap: var(--internal-spacing-xs);
344
+ }
345
+
346
+ .section-time svg {
347
+ width: calc(var(--spacing-sm) + var(--spacing-xs));
348
+ height: calc(var(--spacing-sm) + var(--spacing-xs));
349
+ flex-shrink: 0;
350
+ opacity: 0.8;
351
+ }
352
+
353
+ .section-venue {
354
+ color: var(--muted-foreground);
355
+ font-size: var(--font-size-sm);
356
+ display: flex;
357
+ align-items: center;
358
+ gap: var(--spacing-xs);
359
+ }
360
+
361
+ .section-venue svg {
362
+ width: calc(var(--spacing-sm) + var(--spacing-xs));
363
+ height: calc(var(--spacing-sm) + var(--spacing-xs));
364
+ flex-shrink: 0;
365
+ opacity: 0.8;
366
+ }
367
+
368
+ /* Admission Cards */
369
+ .admissions-list {
370
+ padding: 0;
371
+ }
372
+
373
+ .admission-card {
374
+ border-bottom: 1px solid var(--internal-border);
375
+ padding: var(--internal-spacing-md) var(--internal-spacing-lg);
376
+ position: relative;
377
+ transition: background-color var(--internal-transition-base);
378
+ cursor: default;
379
+ }
380
+
381
+ .admission-card:focus-visible {
382
+ outline: 2px solid var(--internal-ring);
383
+ outline-offset: -2px;
384
+ z-index: 1;
385
+ }
386
+
387
+ .admission-card:hover:not(.sold-out) {
388
+ background: oklch(from var(--internal-card) calc(l - 0.02) c h);
389
+ }
390
+
391
+ .admission-card.sold-out {
392
+ opacity: 1;
393
+ background: var(--card);
394
+ position: relative;
395
+ }
396
+
397
+ .admission-card.sold-out .admission-price,
398
+ .admission-card.sold-out .admission-fee {
399
+ opacity: 0.5;
400
+ }
401
+
402
+ .admission-card:last-child {
403
+ border-bottom: none;
404
+ }
405
+
406
+ .admission-content {
407
+ display: flex;
408
+ justify-content: space-between;
409
+ align-items: center;
410
+ }
411
+
412
+ .admission-details {
413
+ flex: 1;
414
+ }
415
+
416
+ .admission-title {
417
+ color: var(--internal-foreground);
418
+ font-size: var(--internal-font-size-lg); /* match Order summary */
419
+ font-weight: var(--internal-font-weight-semibold);
420
+ margin-bottom: var(--internal-spacing-sm);
421
+ display: flex;
422
+ align-items: center;
423
+ gap: var(--internal-spacing-sm);
424
+ }
425
+
426
+ .admission-time {
427
+ color: var(--muted-foreground);
428
+ font-size: var(--font-size-sm);
429
+ margin-bottom: var(--spacing-xs);
430
+ display: flex;
431
+ align-items: center;
432
+ gap: var(--spacing-xs);
433
+ }
434
+
435
+ .admission-time svg {
436
+ width: calc(var(--spacing-sm) + var(--spacing-xs));
437
+ height: calc(var(--spacing-sm) + var(--spacing-xs));
438
+ flex-shrink: 0;
439
+ opacity: 0.8;
440
+ }
441
+
442
+ .admission-venue {
443
+ color: var(--muted-foreground);
444
+ font-size: var(--font-size-sm);
445
+ margin-bottom: var(--spacing-sm);
446
+ display: flex;
447
+ align-items: center;
448
+ gap: var(--spacing-xs);
449
+ }
450
+
451
+ .admission-venue svg {
452
+ width: calc(var(--spacing-sm) + var(--spacing-xs));
453
+ height: calc(var(--spacing-sm) + var(--spacing-xs));
454
+ flex-shrink: 0;
455
+ opacity: 0.8;
456
+ }
457
+
458
+ /* Solo admission layout adjustments */
459
+ .solo-admission .admission-content {
460
+ flex-direction: column;
461
+ align-items: stretch;
462
+ }
463
+
464
+ .solo-admission .admission-details {
465
+ width: 100%;
466
+ }
467
+
468
+ .solo-admission .admission-price-info {
469
+ margin-top: var(--spacing-md);
470
+ display: flex;
471
+ justify-content: space-between;
472
+ align-items: flex-start;
473
+ width: 100%;
474
+ }
475
+
476
+ .solo-admission .quantity-controls {
477
+ margin-left: auto;
478
+ flex-shrink: 0;
479
+ }
480
+
481
+ .sold-out-badge {
482
+ display: inline-flex;
483
+ align-items: center;
484
+ justify-content: center;
485
+ padding: 0;
486
+ background: transparent;
487
+ color: var(--muted-foreground);
488
+ border: none;
489
+ font-size: var(--font-size-sm);
490
+ font-weight: var(--font-weight-medium);
491
+ text-transform: uppercase;
492
+ letter-spacing: 0.05em;
493
+ margin-left: auto;
494
+ opacity: 0.7;
495
+ }
496
+
497
+ .admission-price-info {
498
+ display: flex;
499
+ align-items: center;
500
+ justify-content: space-between;
501
+ gap: var(--spacing-sm);
502
+ margin-bottom: var(--spacing-sm);
503
+ width: 100%;
504
+ }
505
+
506
+ .admission-price-wrapper {
507
+ display: flex;
508
+ flex-direction: column;
509
+ }
510
+
511
+ .admission-price {
512
+ color: var(--internal-primary);
513
+ font-size: var(--internal-font-size-xl);
514
+ font-weight: var(--internal-font-weight-bold);
515
+ letter-spacing: -0.025em;
516
+ line-height: 1.1;
517
+ }
518
+
519
+ .admission-fee {
520
+ color: var(--muted-foreground);
521
+ font-size: var(--font-size-xs);
522
+ background: transparent;
523
+ padding: 0;
524
+ border-radius: 0;
525
+ font-weight: var(--font-weight-normal);
526
+ display: block;
527
+ margin-top: 0.125rem; /* slight separation from price */
528
+ line-height: 1.12; /* tiny increase for readability */
529
+ }
530
+
531
+ .admission-savings {
532
+ color: var(--success);
533
+ font-size: var(--font-size-sm);
534
+ font-weight: var(--font-weight-medium);
535
+ }
536
+
537
+ .admission-availability {
538
+ color: var(--warning);
539
+ font-size: var(--font-size-xs);
540
+ font-weight: var(--font-weight-medium);
541
+ background: oklch(from var(--warning) l c h / 0.1);
542
+ padding: calc(var(--spacing-xs) / 2) calc(var(--spacing-xs) * 2);
543
+ border-radius: calc(var(--radius) - 4px);
544
+ display: inline-block;
545
+ margin-top: var(--spacing-xs);
546
+ }
547
+
548
+ /* Quantity Controls - Modern, minimal design */
549
+ .quantity-controls {
550
+ display: inline-flex;
551
+ align-items: center;
552
+ gap: 0;
553
+ background: var(--internal-secondary);
554
+ border: 1px solid var(--internal-border);
555
+ border-radius: calc(var(--internal-radius) - 2px);
556
+ overflow: hidden;
557
+ box-shadow: none;
558
+ transition: all var(--internal-transition-fast);
559
+ }
560
+
561
+ .quantity-btn {
562
+ width: calc(var(--internal-spacing-lg) * 1.5);
563
+ height: calc(var(--internal-spacing-lg) * 1.5);
564
+ border: none;
565
+ background: transparent;
566
+ color: var(--internal-muted-foreground);
567
+ font-size: var(--internal-font-size-base);
568
+ font-weight: var(--internal-font-weight-medium);
569
+ cursor: pointer;
570
+ display: flex;
571
+ align-items: center;
572
+ justify-content: center;
573
+ transition: all var(--internal-transition-fast);
574
+ position: relative;
575
+ }
576
+
577
+ .quantity-btn:focus-visible {
578
+ outline: 2px solid var(--internal-ring);
579
+ outline-offset: -2px;
580
+ z-index: 1;
581
+ }
582
+
583
+ .quantity-btn:hover:not(:disabled) {
584
+ background: var(--internal-accent);
585
+ color: var(--internal-accent-foreground);
586
+ }
587
+
588
+ .quantity-btn:active:not(:disabled) {
589
+ transform: scale(0.95);
590
+ }
591
+
592
+ .quantity-btn:disabled {
593
+ opacity: 0.6;
594
+ cursor: not-allowed;
595
+ background: var(--internal-secondary);
596
+ color: var(--internal-muted-foreground);
597
+ border-color: var(--internal-border);
598
+ box-shadow: none;
599
+ }
600
+
601
+ .quantity-btn.decrease {
602
+ border-right: 1px solid var(--internal-border);
603
+ }
604
+
605
+ .quantity-btn.increase {
606
+ border-left: 1px solid var(--internal-border);
607
+ }
608
+
609
+ .quantity-value {
610
+ min-width: 2.5rem;
611
+ text-align: center;
612
+ font-size: var(--internal-font-size-sm);
613
+ font-weight: var(--internal-font-weight-semibold);
614
+ color: var(--internal-foreground);
615
+ padding: 0 var(--internal-spacing-xs);
616
+ }
617
+
618
+ /* Sold Out Controls */
619
+ .sold-out-controls {
620
+ display: inline-flex;
621
+ align-items: center;
622
+ justify-content: center;
623
+ min-width: calc(var(--spacing-lg) * 1.5 * 2 + 2.5rem);
624
+ height: calc(var(--spacing-lg) * 1.5);
625
+ padding: 0 var(--spacing-md);
626
+ background: var(--muted);
627
+ color: var(--muted-foreground);
628
+ border: 1px solid var(--border);
629
+ border-radius: calc(var(--radius) - 2px);
630
+ font-size: var(--font-size-xs);
631
+ font-weight: var(--font-weight-medium);
632
+ letter-spacing: 0.025em;
633
+ text-transform: uppercase;
634
+ }
635
+
636
+ .sold-out-text {
637
+ color: var(--muted-foreground);
638
+ font-size: var(--font-size-xs);
639
+ font-weight: var(--font-weight-medium);
640
+ letter-spacing: 0.025em;
641
+ text-transform: uppercase;
642
+ }
643
+
644
+ /* Order Summary */
645
+ .order-summary {
646
+ background: var(--internal-card);
647
+ border: 1px solid var(--internal-border);
648
+ border-radius: var(--internal-radius);
649
+ padding: var(--internal-spacing-lg);
650
+ margin: var(--internal-spacing-lg) 0 0 0;
651
+ box-shadow: var(--internal-shadow-lg);
652
+ width: 100%;
653
+ }
654
+
655
+ .summary-title {
656
+ font-size: var(--internal-font-size-lg);
657
+ font-weight: var(--internal-font-weight-semibold);
658
+ margin-bottom: var(--internal-spacing-md);
659
+ color: var(--internal-foreground);
660
+ letter-spacing: -0.025em;
661
+ }
662
+
663
+ .order-item {
664
+ display: flex;
665
+ justify-content: space-between;
666
+ margin-bottom: var(--internal-spacing-sm);
667
+ font-size: var(--internal-font-size-base);
668
+ color: var(--internal-foreground);
669
+ }
670
+
671
+ .order-item-with-section {
672
+ margin-bottom: var(--internal-spacing-sm);
673
+ }
674
+
675
+ .item-section-line {
676
+ display: flex;
677
+ justify-content: space-between;
678
+ align-items: baseline;
679
+ font-size: var(--internal-font-size-base);
680
+ color: var(--internal-foreground);
681
+ }
682
+
683
+ .item-section-name {
684
+ flex: 1;
685
+ font-weight: var(--font-weight-medium);
686
+ }
687
+
688
+ .item-admission-name {
689
+ font-size: var(--internal-font-size-sm);
690
+ color: var(--internal-muted-foreground);
691
+ margin-top: var(--internal-spacing-xs);
692
+ padding-left: var(--internal-spacing-md);
693
+ font-weight: var(--internal-font-weight-normal);
694
+ }
695
+
696
+ .item-description {
697
+ flex: 1;
698
+ font-weight: var(--internal-font-weight-medium);
699
+ }
700
+
701
+ .item-price {
702
+ font-weight: var(--internal-font-weight-bold);
703
+ white-space: nowrap;
704
+ }
705
+
706
+ .empty-cart-message {
707
+ display: flex;
708
+ justify-content: space-between;
709
+ align-items: center;
710
+ padding-bottom: var(--internal-spacing-sm);
711
+ color: var(--internal-muted-foreground);
712
+ font-size: var(--internal-font-size-base);
713
+ font-style: normal;
714
+ }
715
+
716
+ .empty-cart-text {
717
+ flex: 1;
718
+ }
719
+
720
+ .empty-cart-price {
721
+ font-weight: var(--font-weight-medium);
722
+ }
723
+
724
+ .order-fees {
725
+ padding: var(--internal-spacing-sm) 0;
726
+ border-top: 1px solid var(--internal-border);
727
+ border-bottom: 1px solid var(--internal-border);
728
+ margin-bottom: var(--internal-spacing-sm);
729
+ }
730
+
731
+ .fee-row {
732
+ display: flex;
733
+ justify-content: space-between;
734
+ font-size: var(--internal-font-size-base);
735
+ color: var(--internal-foreground);
736
+ font-weight: var(--internal-font-weight-medium);
737
+ }
738
+
739
+ .order-total {
740
+ display: flex;
741
+ justify-content: space-between;
742
+ font-size: var(--internal-font-size-base);
743
+ font-weight: var(--internal-font-weight-bold);
744
+ color: var(--internal-foreground);
745
+ margin-bottom: var(--internal-spacing-md);
746
+ }
747
+
748
+ .checkout-btn {
749
+ width: 100%;
750
+ padding: calc(var(--spacing-sm) + var(--spacing-xs)) var(--spacing-lg);
751
+ background: var(--primary);
752
+ color: var(--primary-foreground);
753
+ border: none;
754
+ border-radius: calc(var(--radius) - 2px);
755
+ font-size: var(--internal-font-size-base);
756
+ font-weight: var(--internal-font-weight-bold);
757
+ cursor: pointer;
758
+ transition: all var(--internal-transition-fast);
759
+ box-shadow: var(--internal-shadow-sm);
760
+ position: relative;
761
+ overflow: hidden;
762
+ }
763
+
764
+ .checkout-btn:focus-visible {
765
+ outline: 2px solid var(--internal-ring);
766
+ outline-offset: 2px;
767
+ }
768
+
769
+ .checkout-btn:hover:not(:disabled) {
770
+ background: oklch(from var(--primary) calc(l - 0.08) c h);
771
+ box-shadow: var(--shadow-md);
772
+ transform: translateY(-1px);
773
+ }
774
+
775
+ .checkout-btn:active:not(:disabled) {
776
+ transform: translateY(0);
777
+ box-shadow: var(--shadow-sm);
778
+ }
779
+
780
+ .checkout-btn:disabled {
781
+ opacity: 0.6;
782
+ cursor: not-allowed;
783
+ background: var(--internal-secondary);
784
+ color: var(--internal-muted-foreground);
785
+ box-shadow: none;
786
+ border: 1px solid var(--internal-border);
787
+ }
788
+
789
+ /* Loading & Error States */
790
+ .loading-state,
791
+ .error-state {
792
+ display: flex;
793
+ justify-content: center;
794
+ align-items: center;
795
+ padding: var(--spacing-xl);
796
+ text-align: center;
797
+ min-height: 200px;
798
+ }
799
+
800
+ .error-state {
801
+ color: var(--primary);
802
+ }
803
+
804
+ .error-banner {
805
+ background: oklch(
806
+ from var(--destructive) calc(l + 0.4) calc(c * 0.2) h / 0.05
807
+ );
808
+ border: 1px solid oklch(from var(--destructive) l c h / 0.2);
809
+ border-radius: var(--radius);
810
+ padding: var(--spacing-lg);
811
+ margin: var(--spacing-lg);
812
+ text-align: center;
813
+ }
814
+
815
+ .error-banner strong {
816
+ display: block;
817
+ color: var(--destructive);
818
+ font-size: var(--font-size-lg);
819
+ margin-bottom: var(--spacing-sm);
820
+ }
821
+
822
+ .error-banner p {
823
+ color: var(--muted-foreground);
824
+ margin-bottom: var(--spacing-md);
825
+ }
826
+
827
+ .retry-button {
828
+ background: var(--primary);
829
+ color: var(--primary-foreground);
830
+ border: none;
831
+ padding: calc(var(--spacing-sm) + var(--spacing-xs)) var(--spacing-lg);
832
+ border-radius: calc(var(--radius) - 2px);
833
+ font-size: var(--font-size-sm);
834
+ font-weight: var(--font-weight-medium);
835
+ cursor: pointer;
836
+ transition: all var(--transition-fast);
837
+ box-shadow: var(--shadow-sm);
838
+ }
839
+
840
+ .retry-button:focus-visible {
841
+ outline: 2px solid var(--ring);
842
+ outline-offset: 2px;
843
+ }
844
+
845
+ .retry-button:hover {
846
+ background: oklch(from var(--primary) calc(l - 0.08) c h);
847
+ box-shadow: var(--shadow-md);
848
+ transform: translateY(-1px);
849
+ }
850
+
851
+ .retry-button:active {
852
+ transform: translateY(0);
853
+ box-shadow: var(--shadow-sm);
854
+ }
855
+
856
+ .error-message {
857
+ background: oklch(
858
+ from var(--destructive) calc(l + 0.4) calc(c * 0.2) h / 0.05
859
+ );
860
+ border: 1px solid oklch(from var(--destructive) l c h / 0.2);
861
+ color: var(--destructive);
862
+ padding: var(--spacing-sm) var(--spacing-md);
863
+ border-radius: var(--radius);
864
+ margin-bottom: var(--spacing-md);
865
+ font-size: var(--font-size-sm);
866
+ }
867
+
868
+ /* Responsive adjustments for larger screens */
869
+ @media (min-width: 768px) {
870
+ .ticket-section {
871
+ border-radius: var(--radius);
872
+ margin: 0 0 var(--spacing-md) 0;
873
+ }
874
+
875
+ .order-summary {
876
+ border-radius: var(--radius);
877
+ margin: var(--spacing-md) 0;
878
+ }
879
+ }