@ticketboothapp/booking 1.2.24 → 1.2.25

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 (158) hide show
  1. package/package.json +29 -2
  2. package/src/assets/icons/minus.svg +7 -0
  3. package/src/assets/icons/partner-logos/getyourguide.svg +8 -0
  4. package/src/assets/icons/plus.svg +3 -0
  5. package/src/colours.css +23 -0
  6. package/src/components/BookingDetails.module.css +1591 -0
  7. package/src/components/BookingDetails.tsx +2264 -0
  8. package/src/components/BookingWidget.tsx +305 -0
  9. package/src/components/ManageBookingView.tsx +437 -0
  10. package/src/components/PhoneInputWithCountry.module.css +131 -0
  11. package/src/components/PhoneInputWithCountry.tsx +44 -0
  12. package/src/components/PickupLocationDialog.module.css +360 -0
  13. package/src/components/PickupLocationDialog.tsx +357 -0
  14. package/src/components/PostBookingDependentAddOnUpsell.module.css +174 -0
  15. package/src/components/PostBookingDependentAddOnUpsell.tsx +407 -0
  16. package/src/components/booking/AddOnsSection.module.css +10 -0
  17. package/src/components/booking/AddOnsSection.tsx +184 -0
  18. package/src/components/booking/AdminPaymentChoiceModal.tsx +98 -0
  19. package/src/components/booking/BookingDialog.module.css +643 -0
  20. package/src/components/booking/BookingDialog.tsx +356 -0
  21. package/src/components/booking/BookingFlow.tsx +4385 -0
  22. package/src/components/booking/BookingFlowCollage.module.css +148 -0
  23. package/src/components/booking/BookingFlowCollage.tsx +184 -0
  24. package/src/components/booking/BookingFlowPlaceholder.module.css +27 -0
  25. package/src/components/booking/BookingFlowPlaceholder.tsx +25 -0
  26. package/src/components/booking/BookingFlowPreview.tsx +51 -0
  27. package/src/components/booking/BookingProductGrid.module.css +359 -0
  28. package/src/components/booking/BookingProductGrid.tsx +497 -0
  29. package/src/components/booking/Calendar.module.css +616 -0
  30. package/src/components/booking/Calendar.tsx +1123 -0
  31. package/src/components/booking/CancellationPolicySelector.module.css +124 -0
  32. package/src/components/booking/CancellationPolicySelector.tsx +142 -0
  33. package/src/components/booking/ChangeBookingDialog.tsx +562 -0
  34. package/src/components/booking/CheckoutForm.module.css +244 -0
  35. package/src/components/booking/CheckoutForm.tsx +364 -0
  36. package/src/components/booking/CheckoutModal.tsx +451 -0
  37. package/src/components/booking/CurrencySwitcher.tsx +81 -0
  38. package/src/components/booking/DapFlowCollage.tsx +88 -0
  39. package/src/components/booking/DapTourDescription.tsx +35 -0
  40. package/src/components/booking/DependentAddOnBookingDialog.tsx +1350 -0
  41. package/src/components/booking/DependentAddOnPaymentForm.tsx +124 -0
  42. package/src/components/booking/ErrorBoundary.tsx +63 -0
  43. package/src/components/booking/InfoTooltip.tsx +108 -0
  44. package/src/components/booking/ItineraryBox.module.css +258 -0
  45. package/src/components/booking/ItineraryBox.tsx +550 -0
  46. package/src/components/booking/ItineraryBuilder.tsx +82 -0
  47. package/src/components/booking/ItineraryPlaceholder.module.css +45 -0
  48. package/src/components/booking/ItineraryPlaceholder.tsx +26 -0
  49. package/src/components/booking/MealDrinkAddOnSelector.tsx +338 -0
  50. package/src/components/booking/PickupLocationSelector.module.css +124 -0
  51. package/src/components/booking/PickupLocationSelector.tsx +1566 -0
  52. package/src/components/booking/PickupTimeSelector.module.css +134 -0
  53. package/src/components/booking/PickupTimeSelector.tsx +112 -0
  54. package/src/components/booking/PriceBreakdown.tsx +154 -0
  55. package/src/components/booking/PriceSummary.tsx +234 -0
  56. package/src/components/booking/PrivateShuttleBookingFlow.module.css +357 -0
  57. package/src/components/booking/PrivateShuttleBookingFlow.tsx +2662 -0
  58. package/src/components/booking/PromoCodeInput.module.css +166 -0
  59. package/src/components/booking/PromoCodeInput.tsx +99 -0
  60. package/src/components/booking/ReturnTimeSelector.module.css +173 -0
  61. package/src/components/booking/ReturnTimeSelector.tsx +145 -0
  62. package/src/components/booking/TermsAcceptance.tsx +111 -0
  63. package/src/components/booking/TicketSelector.module.css +164 -0
  64. package/src/components/booking/TicketSelector.tsx +199 -0
  65. package/src/components/booking/TourDescription.module.css +304 -0
  66. package/src/components/booking/TourDescription.tsx +273 -0
  67. package/src/components/booking/booking-flow-ui.ts +38 -0
  68. package/src/components/booking/booking-flow.css +944 -0
  69. package/src/components/button.css +245 -0
  70. package/src/components/button.tsx +152 -0
  71. package/src/components/colorable-svg.tsx +29 -0
  72. package/src/components/image.css +29 -0
  73. package/src/components/image.tsx +113 -0
  74. package/src/components/partner/PartnerBookingPage.module.css +130 -0
  75. package/src/components/partner/PartnerBookingPage.tsx +390 -0
  76. package/src/components/partner/PartnerBookingPageWithBrowserMetadata.tsx +45 -0
  77. package/src/components/product-tag.module.css +30 -0
  78. package/src/components/product-tag.tsx +34 -0
  79. package/src/components/product-theme-pages/image-modal.tsx +248 -0
  80. package/src/components/product-theme-pages/photo-gallery.module.css +200 -0
  81. package/src/components/terms/TermsContent.tsx +178 -0
  82. package/src/components/value-pill.module.css +59 -0
  83. package/src/components/value-pill.tsx +46 -0
  84. package/src/constants/images.ts +556 -0
  85. package/src/constants/pill-values.ts +210 -0
  86. package/src/constants/products.ts +155 -0
  87. package/src/contexts/AvailabilitiesCacheContext.tsx +125 -0
  88. package/src/contexts/BookingAppContext.tsx +134 -0
  89. package/src/contexts/CompanyContext.tsx +70 -0
  90. package/src/data/dap-descriptions/session-couples-families-friends.en.json +61 -0
  91. package/src/data/dap-descriptions/session-elopements.en.json +60 -0
  92. package/src/data/dap-descriptions/session-proposals.en.json +60 -0
  93. package/src/data/product-descriptions/afternoon-delight.en.json +35 -0
  94. package/src/data/product-descriptions/emerald-lake-escape.en.json +68 -0
  95. package/src/data/product-descriptions/lake-louise-adventure.en.json +74 -0
  96. package/src/data/product-descriptions/moraine-lake-adventure.en.json +78 -0
  97. package/src/data/product-descriptions/moraine-lake-sunrise-lake-louise-golden-hour.en.json +65 -0
  98. package/src/data/product-descriptions/moraine-lake-sunrise.en.json +64 -0
  99. package/src/data/product-descriptions/private-tour.en.json +80 -0
  100. package/src/data/product-descriptions/two-lakes-combo.en.json +65 -0
  101. package/src/data/products-config.json +101 -0
  102. package/src/hooks/useBookingSourceMetadataFromLocation.ts +21 -0
  103. package/src/hooks/useIsBookingLaunchLive.ts +49 -0
  104. package/src/index.ts +79 -0
  105. package/src/lib/analytics.ts +197 -0
  106. package/src/lib/booking/booking-source.ts +51 -0
  107. package/src/lib/booking/checkout-breakdown.ts +69 -0
  108. package/src/lib/booking/correlation-id.ts +46 -0
  109. package/src/lib/booking/i18n/config.ts +21 -0
  110. package/src/lib/booking/i18n/index.tsx +144 -0
  111. package/src/lib/booking/i18n/messages/en.json +236 -0
  112. package/src/lib/booking/i18n/messages/fr.json +236 -0
  113. package/src/lib/booking/itinerary-display.ts +36 -0
  114. package/src/lib/booking/itinerary-labels.ts +70 -0
  115. package/src/lib/booking/location-calculations.ts +43 -0
  116. package/src/lib/booking/location-utils.ts +165 -0
  117. package/src/lib/booking/map-utils.ts +153 -0
  118. package/src/lib/booking/marker-icons.ts +113 -0
  119. package/src/lib/booking/normalize-booking-product-id.ts +21 -0
  120. package/src/lib/booking/pickup-location-types.ts +25 -0
  121. package/src/lib/booking/places-api.ts +154 -0
  122. package/src/lib/booking/pricing.ts +466 -0
  123. package/src/lib/booking/product-option-id.ts +35 -0
  124. package/src/lib/booking/source-metadata.ts +226 -0
  125. package/src/lib/booking/sunday-week.ts +14 -0
  126. package/src/lib/booking/theme.ts +83 -0
  127. package/src/lib/booking/trace-context.ts +62 -0
  128. package/src/lib/booking/utils.ts +9 -0
  129. package/src/lib/booking-api.ts +1793 -0
  130. package/src/lib/booking-constants.ts +23 -0
  131. package/src/lib/booking-ref.ts +13 -0
  132. package/src/lib/booking-types.ts +36 -0
  133. package/src/lib/currency.ts +81 -0
  134. package/src/lib/dap-descriptions.ts +50 -0
  135. package/src/lib/dap-itinerary-preview.ts +315 -0
  136. package/src/lib/dependent-add-on-api.ts +434 -0
  137. package/src/lib/env.ts +96 -0
  138. package/src/lib/firebase.ts +20 -0
  139. package/src/lib/job-application-api.ts +83 -0
  140. package/src/lib/manage-booking-embed-print.ts +16 -0
  141. package/src/lib/manage-booking-post-checkout.ts +68 -0
  142. package/src/lib/photo-dap-config.ts +228 -0
  143. package/src/lib/photo-packages.ts +75 -0
  144. package/src/lib/pickup/map-utils.ts +56 -0
  145. package/src/lib/pickup/marker-icons.ts +19 -0
  146. package/src/lib/product-descriptions.ts +66 -0
  147. package/src/lib/products-config.ts +73 -0
  148. package/src/providers/booking-dialog-provider.tsx +282 -0
  149. package/src/providers/dependent-add-on-dialog-provider.tsx +105 -0
  150. package/src/radius.css +5 -0
  151. package/src/spacing.css +7 -0
  152. package/src/strings/en.json +1774 -0
  153. package/src/strings/es.json +1573 -0
  154. package/src/strings/fr.json +1573 -0
  155. package/src/strings/index.js +23 -0
  156. package/src/text-style.css +56 -0
  157. package/src/utils/currency-converter.ts +101 -0
  158. package/tsconfig.json +8 -2
@@ -0,0 +1,1591 @@
1
+ .container {
2
+ position: relative;
3
+ width: 100%;
4
+ max-width: 650px;
5
+ margin: 0 auto;
6
+ padding: var(--spacing-large);
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: var(--spacing-large);
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ /* Light overlay while parent refetches booking (e.g. after change dialog closes) */
14
+ .bookingRefreshOverlay {
15
+ position: fixed;
16
+ inset: 0;
17
+ z-index: 900;
18
+ display: flex;
19
+ flex-direction: column;
20
+ align-items: center;
21
+ justify-content: center;
22
+ gap: 1rem;
23
+ background-color: rgba(254, 243, 233, 0.92);
24
+ padding: 1rem;
25
+ }
26
+
27
+ .section {
28
+ background-color: var(--primary-background);
29
+ border-radius: 24px;
30
+ padding: var(--spacing-large);
31
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
32
+ }
33
+
34
+ .headerContent {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: var(--spacing-medium);
38
+ margin-bottom: var(--spacing-medium);
39
+ }
40
+
41
+ .checkmarkIcon {
42
+ width: 64px;
43
+ height: 64px;
44
+ background-color: var(--accent-turquoise-60);
45
+ border-radius: 50%;
46
+ display: flex;
47
+ align-items: center;
48
+ justify-content: center;
49
+ flex-shrink: 0;
50
+ }
51
+
52
+ .checkmarkSvg {
53
+ width: 32px;
54
+ height: 32px;
55
+ color: var(--accent-turquoise);
56
+ }
57
+
58
+ .cancelledIcon {
59
+ width: 64px;
60
+ height: 64px;
61
+ background-color: rgba(0, 0, 0, 0.08);
62
+ border-radius: 50%;
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ flex-shrink: 0;
67
+ }
68
+
69
+ .cancelledSvg {
70
+ width: 32px;
71
+ height: 32px;
72
+ color: var(--primary-text);
73
+ }
74
+
75
+ .title {
76
+ font-family: 'Poppins';
77
+ font-weight: 800;
78
+ font-size: 2rem;
79
+ color: var(--primary-text);
80
+ margin: 0;
81
+ text-transform: none;
82
+ }
83
+
84
+ .reference {
85
+ color: var(--grey-text);
86
+ margin: 0.5rem 0 0 0;
87
+ font-size: 1rem;
88
+ }
89
+
90
+ .printSummaryWrap {
91
+ margin-top: 0.35rem;
92
+ }
93
+
94
+ .printSummaryButton {
95
+ display: inline-flex;
96
+ align-items: center;
97
+ gap: 0.3rem;
98
+ font-family: 'Figtree', sans-serif;
99
+ font-size: 0.8125rem;
100
+ font-weight: 500;
101
+ padding: 0;
102
+ margin: 0;
103
+ border: none;
104
+ border-radius: 0;
105
+ background: none;
106
+ color: var(--grey-text);
107
+ cursor: pointer;
108
+ line-height: 1.4;
109
+ text-decoration: underline;
110
+ text-underline-offset: 2px;
111
+ }
112
+
113
+ .printSummaryButton:hover {
114
+ color: var(--accent-turquoise);
115
+ }
116
+
117
+ .printSummaryButton:focus-visible {
118
+ outline: 2px solid var(--accent-turquoise);
119
+ outline-offset: 2px;
120
+ border-radius: 2px;
121
+ }
122
+
123
+ .printSummaryIcon {
124
+ width: 0.8125rem;
125
+ height: 0.8125rem;
126
+ flex-shrink: 0;
127
+ opacity: 0.65;
128
+ }
129
+
130
+ .gygSectionIcon {
131
+ flex-shrink: 0;
132
+ width: 20px;
133
+ height: 20px;
134
+ color: var(--accent-orange);
135
+ }
136
+
137
+ .gygSectionIcon path {
138
+ fill: var(--accent-orange);
139
+ }
140
+
141
+ .gygSectionContent {
142
+ display: flex;
143
+ flex-direction: column;
144
+ gap: 0.5rem;
145
+ }
146
+
147
+ .gygRefLine {
148
+ margin: 0;
149
+ color: var(--primary-text);
150
+ font-size: 1rem;
151
+ }
152
+
153
+ .gygNote {
154
+ color: var(--primary-text);
155
+ font-size: 0.75rem;
156
+ line-height: 1.4;
157
+ margin: 0;
158
+ }
159
+
160
+ .gygNoteLink {
161
+ color: var(--accent-orange);
162
+ text-decoration: underline;
163
+ }
164
+
165
+ .gygNoteLink:hover {
166
+ text-decoration: none;
167
+ }
168
+
169
+ .gygManageLink {
170
+ display: inline-flex;
171
+ align-items: center;
172
+ gap: 0.5rem;
173
+ color: var(--accent-orange);
174
+ font-size: 0.9375rem;
175
+ font-weight: 600;
176
+ text-decoration: none;
177
+ margin-top: 0.5rem;
178
+ }
179
+
180
+ .gygManageLink:hover {
181
+ text-decoration: underline;
182
+ }
183
+
184
+ .gygManageIcon {
185
+ width: 18px;
186
+ height: 18px;
187
+ flex-shrink: 0;
188
+ }
189
+
190
+ .gygSection {
191
+ scroll-margin-top: 6rem;
192
+ }
193
+
194
+ .policyGygLink {
195
+ color: var(--accent-orange);
196
+ text-decoration: underline;
197
+ }
198
+
199
+ .policyGygLink:hover {
200
+ color: var(--accent-turquoise);
201
+ text-decoration: underline;
202
+ }
203
+
204
+ .bookingDetails {
205
+ margin-top: var(--spacing-medium);
206
+ padding-top: var(--spacing-medium);
207
+ border-top: 1px solid var(--accent-orange-10);
208
+ display: flex;
209
+ flex-direction: column;
210
+ gap: var(--spacing-small);
211
+ }
212
+
213
+ .bookingDetailRow {
214
+ display: flex;
215
+ gap: 0;
216
+ align-items: baseline;
217
+ }
218
+
219
+ .bookingDetailLabel {
220
+ font-weight: 600;
221
+ color: var(--primary-text);
222
+ margin-right: 0.35em;
223
+ }
224
+
225
+ .bookingDetailValue {
226
+ display: inline-flex;
227
+ align-items: center;
228
+ flex-wrap: wrap;
229
+ gap: 0;
230
+ color: var(--primary-text);
231
+ flex: 1;
232
+ min-width: 0;
233
+ overflow-wrap: break-word;
234
+ }
235
+
236
+ .customerMessage {
237
+ color: var(--primary-text);
238
+ margin-top: var(--spacing-medium);
239
+ }
240
+
241
+ .sectionTitle {
242
+ font-family: 'Poppins';
243
+ font-weight: 800;
244
+ font-size: 1.5rem;
245
+ color: var(--accent-orange);
246
+ margin: 0 0 var(--spacing-medium) 0;
247
+ display: flex;
248
+ align-items: center;
249
+ gap: 0.5rem;
250
+ text-transform: lowercase;
251
+ }
252
+
253
+ .icon {
254
+ width: 20px;
255
+ height: 20px;
256
+ color: var(--accent-orange);
257
+ flex-shrink: 0;
258
+ }
259
+
260
+ .itinerarySectionHeader {
261
+ display: flex;
262
+ align-items: center;
263
+ justify-content: space-between;
264
+ gap: 0.5rem;
265
+ margin-bottom: var(--spacing-medium);
266
+ }
267
+
268
+ .itinerarySectionHeader .sectionTitle {
269
+ margin: 0;
270
+ }
271
+
272
+ .draftPill {
273
+ display: inline-flex;
274
+ align-items: center;
275
+ padding: 0.2rem 0.6rem;
276
+ font-size: 0.75rem;
277
+ font-weight: 600;
278
+ text-transform: uppercase;
279
+ letter-spacing: 0.05em;
280
+ color: white;
281
+ background-color: var(--accent-orange);
282
+ border-radius: 9999px;
283
+ flex-shrink: 0;
284
+ }
285
+
286
+ .addOnSuccessBanner {
287
+ display: flex;
288
+ align-items: flex-start;
289
+ gap: var(--spacing-medium);
290
+ background-color: rgba(16, 185, 129, 0.12);
291
+ border-left: 4px solid #059669;
292
+ border-radius: 8px;
293
+ padding: var(--spacing-medium);
294
+ margin-bottom: var(--spacing-medium);
295
+ }
296
+
297
+ .addOnSuccessBannerIcon {
298
+ width: 22px;
299
+ height: 22px;
300
+ color: #059669;
301
+ flex-shrink: 0;
302
+ margin-top: 0.125rem;
303
+ }
304
+
305
+ .addOnSuccessBannerText {
306
+ margin: 0;
307
+ flex: 1;
308
+ min-width: 0;
309
+ color: var(--primary-text);
310
+ font-size: 0.9375rem;
311
+ line-height: 1.5;
312
+ }
313
+
314
+ .addOnCard {
315
+ border: 1px solid rgba(0, 0, 0, 0.08);
316
+ border-radius: 12px;
317
+ padding: var(--spacing-medium);
318
+ margin-bottom: var(--spacing-small);
319
+ background: rgba(0, 0, 0, 0.02);
320
+ }
321
+
322
+ .addOnCard:last-child {
323
+ margin-bottom: 0;
324
+ }
325
+
326
+ .addOnCardMeta {
327
+ margin: 0;
328
+ font-size: 0.875rem;
329
+ color: var(--grey-text);
330
+ line-height: 1.45;
331
+ }
332
+
333
+ .addOnRefMono {
334
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;
335
+ font-size: 0.9em;
336
+ }
337
+
338
+ .addOnCardTitle {
339
+ margin: 0 0 0.35rem 0;
340
+ font-size: 1rem;
341
+ font-weight: 600;
342
+ color: var(--primary-text);
343
+ }
344
+
345
+ .draftItineraryBanner {
346
+ display: flex;
347
+ align-items: flex-start;
348
+ gap: var(--spacing-medium);
349
+ background-color: var(--accent-orange-10);
350
+ border-left: 4px solid var(--accent-orange);
351
+ border-radius: 8px;
352
+ padding: var(--spacing-medium);
353
+ margin-bottom: var(--spacing-medium);
354
+ min-width: 0;
355
+ }
356
+
357
+ .draftItineraryBannerBelowList {
358
+ margin-top: var(--spacing-medium);
359
+ margin-bottom: 0;
360
+ }
361
+
362
+ /* Ready-for-review: full-width block, no side icon (see Action Required title) */
363
+ .draftItineraryBannerActionRequired {
364
+ display: block;
365
+ }
366
+
367
+ .draftItineraryReviewFullWidth {
368
+ width: 100%;
369
+ min-width: 0;
370
+ }
371
+
372
+ .draftItineraryActionTitle {
373
+ width: 100%;
374
+ display: flex;
375
+ align-items: center;
376
+ gap: 0.5rem;
377
+ text-align: left;
378
+ font-family: 'Poppins', sans-serif;
379
+ font-size: 1.5rem;
380
+ font-weight: 700;
381
+ line-height: 1.25;
382
+ color: var(--accent-orange);
383
+ margin: 0 0 0.5rem 0;
384
+ }
385
+
386
+ .draftItineraryIcon {
387
+ width: 20px;
388
+ height: 20px;
389
+ color: var(--accent-orange);
390
+ flex-shrink: 0;
391
+ margin-top: 0.125rem;
392
+ }
393
+
394
+ .draftItineraryText {
395
+ margin: 0;
396
+ flex: 1;
397
+ min-width: 0;
398
+ color: var(--primary-text);
399
+ font-size: 0.9375rem;
400
+ line-height: 1.5;
401
+ }
402
+
403
+ .draftItineraryReviewActions {
404
+ display: flex;
405
+ flex-direction: column;
406
+ align-items: stretch;
407
+ gap: 0.5rem;
408
+ margin-top: 1rem;
409
+ min-width: 0;
410
+ width: 100%;
411
+ }
412
+
413
+ .draftItineraryReviewActions .pickupPrimaryButton {
414
+ width: 100%;
415
+ justify-content: center;
416
+ box-sizing: border-box;
417
+ }
418
+
419
+ .draftItineraryRequestChangesButton {
420
+ width: 100%;
421
+ box-sizing: border-box;
422
+ justify-content: center;
423
+ }
424
+
425
+ .draftItineraryFeedbackFields {
426
+ margin-top: 1rem;
427
+ min-width: 0;
428
+ width: 100%;
429
+ max-width: 100%;
430
+ box-sizing: border-box;
431
+ }
432
+
433
+ .draftItineraryFeedbackLabel {
434
+ display: block;
435
+ margin-bottom: 0.35rem;
436
+ font-size: 0.875rem;
437
+ font-weight: 600;
438
+ color: var(--primary-text);
439
+ }
440
+
441
+ .draftItineraryTextarea {
442
+ display: block;
443
+ width: 100%;
444
+ max-width: 100%;
445
+ min-width: 0;
446
+ box-sizing: border-box;
447
+ padding: 0.5rem 0.75rem;
448
+ font: inherit;
449
+ min-height: 5rem;
450
+ border-radius: 8px;
451
+ border: 1px solid rgba(0, 0, 0, 0.18);
452
+ background-color: #fff;
453
+ color: var(--primary-text);
454
+ resize: vertical;
455
+ }
456
+
457
+ .draftItineraryTextarea:focus {
458
+ outline: 2px solid var(--accent-orange);
459
+ outline-offset: 1px;
460
+ }
461
+
462
+ .draftItineraryFeedbackSubmitRow {
463
+ display: flex;
464
+ flex-wrap: wrap;
465
+ gap: 0.75rem;
466
+ margin-top: 0.75rem;
467
+ align-items: stretch;
468
+ min-width: 0;
469
+ width: 100%;
470
+ }
471
+
472
+ .draftItineraryFeedbackSubmitRow .payOwingButton {
473
+ width: 100%;
474
+ box-sizing: border-box;
475
+ }
476
+
477
+ .itineraryList {
478
+ display: flex;
479
+ flex-direction: column;
480
+ gap: var(--spacing-small);
481
+ }
482
+
483
+ .itineraryItem {
484
+ display: flex;
485
+ justify-content: space-between;
486
+ align-items: flex-start;
487
+ gap: var(--spacing-medium);
488
+ padding-left: var(--spacing-medium);
489
+ border-left: 2px solid var(--accent-orange-10);
490
+ }
491
+
492
+ .itineraryItemDraft {
493
+ flex-direction: column;
494
+ align-items: flex-start;
495
+ justify-content: flex-start;
496
+ gap: 0.25rem;
497
+ }
498
+
499
+ .itineraryItemDraft .itineraryLabel {
500
+ flex: none;
501
+ }
502
+
503
+ .itineraryTimeBlock {
504
+ display: block;
505
+ color: var(--grey-text);
506
+ font-weight: 500;
507
+ }
508
+
509
+ .itineraryLabel {
510
+ color: var(--primary-text);
511
+ font-weight: 500;
512
+ flex: 1;
513
+ }
514
+
515
+ .itineraryTime {
516
+ display: flex;
517
+ align-items: center;
518
+ gap: 0.5rem;
519
+ flex-shrink: 0;
520
+ color: var(--grey-text);
521
+ font-weight: 500;
522
+ }
523
+
524
+ .tbdIcon {
525
+ color: var(--grey-text);
526
+ cursor: help;
527
+ }
528
+
529
+ .timeIcon {
530
+ width: 16px;
531
+ height: 16px;
532
+ display: inline-block;
533
+ vertical-align: middle;
534
+ }
535
+
536
+ .tbdText {
537
+ color: var(--grey-text);
538
+ font-weight: 500;
539
+ }
540
+
541
+ .timeTooltipWrap {
542
+ display: inline-flex;
543
+ align-items: center;
544
+ margin-left: 0.35rem;
545
+ position: relative;
546
+ vertical-align: middle;
547
+ }
548
+
549
+ .timeTooltipIcon {
550
+ display: inline-flex;
551
+ align-items: center;
552
+ justify-content: center;
553
+ color: var(--grey-text);
554
+ cursor: pointer;
555
+ width: 18px;
556
+ height: 18px;
557
+ }
558
+
559
+ .timeTooltipIcon svg {
560
+ width: 100%;
561
+ height: 100%;
562
+ }
563
+
564
+
565
+ .timeTooltipIcon:hover {
566
+ color: var(--accent-orange);
567
+ }
568
+
569
+ .timeTooltip {
570
+ position: absolute;
571
+ left: 0;
572
+ top: 100%;
573
+ margin-top: 6px;
574
+ padding: 0.5rem 0.75rem;
575
+ max-width: 260px;
576
+ font-size: 0.8125rem;
577
+ font-weight: 400;
578
+ line-height: 1.4;
579
+ color: #fff;
580
+ background: #333;
581
+ border-radius: 8px;
582
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
583
+ white-space: normal;
584
+ opacity: 0;
585
+ visibility: hidden;
586
+ transition: opacity 0.15s ease, visibility 0.15s ease;
587
+ pointer-events: none;
588
+ z-index: 10;
589
+ }
590
+
591
+ .timeTooltipWrap:hover .timeTooltip {
592
+ opacity: 1;
593
+ visibility: visible;
594
+ pointer-events: auto;
595
+ }
596
+
597
+ .timeTooltipLink {
598
+ color: var(--accent-orange);
599
+ text-decoration: underline;
600
+ }
601
+
602
+ .timeTooltipLink:hover {
603
+ color: #ff7a4d;
604
+ text-decoration: none;
605
+ }
606
+
607
+ .pickupNote {
608
+ margin-top: var(--spacing-medium);
609
+ font-size: 0.875rem;
610
+ color: var(--grey-text);
611
+ }
612
+
613
+ .pickupLink {
614
+ color: var(--accent-orange);
615
+ text-decoration: underline;
616
+ }
617
+
618
+ .pickupLink:hover {
619
+ color: var(--accent-turquoise);
620
+ }
621
+
622
+ .paymentSummaryHeader {
623
+ display: flex;
624
+ align-items: center;
625
+ justify-content: space-between;
626
+ gap: 0.5rem;
627
+ margin-bottom: var(--spacing-medium);
628
+ }
629
+
630
+ .paymentSummaryHeader .sectionTitle {
631
+ margin: 0;
632
+ }
633
+
634
+ .paymentStatusPill {
635
+ display: inline-flex;
636
+ align-items: center;
637
+ padding: 0.2rem 0.6rem;
638
+ font-size: 0.75rem;
639
+ font-weight: 600;
640
+ text-transform: uppercase;
641
+ letter-spacing: 0.05em;
642
+ border-radius: 9999px;
643
+ flex-shrink: 0;
644
+ }
645
+
646
+ .paymentStatusPillPaid {
647
+ color: white;
648
+ background-color: var(--accent-turquoise);
649
+ }
650
+
651
+ .paymentStatusPillDeposit {
652
+ color: #92400e;
653
+ background-color: #fef3c7;
654
+ }
655
+
656
+ .paymentStatusPillOwing {
657
+ color: #92400e;
658
+ background-color: #fef3c7;
659
+ }
660
+
661
+ .paymentStatusPillAwaiting {
662
+ color: var(--grey-text);
663
+ background-color: rgba(0, 0, 0, 0.08);
664
+ }
665
+
666
+ .priceSummary {
667
+ display: flex;
668
+ flex-direction: column;
669
+ gap: var(--spacing-small);
670
+ }
671
+
672
+ .priceLine {
673
+ display: flex;
674
+ justify-content: space-between;
675
+ color: var(--primary-text);
676
+ }
677
+
678
+ .priceLabel {
679
+ font-weight: 400;
680
+ }
681
+
682
+ .priceAmount {
683
+ font-weight: 500;
684
+ }
685
+
686
+ .totalLine {
687
+ margin-top: var(--spacing-small);
688
+ padding-top: var(--spacing-small);
689
+ border-top: 1px solid var(--accent-orange-10);
690
+ }
691
+
692
+ .totalLabel {
693
+ font-weight: 700;
694
+ font-size: 1.125rem;
695
+ }
696
+
697
+ .totalAmount {
698
+ font-weight: 700;
699
+ font-size: 1.125rem;
700
+ color: var(--accent-orange);
701
+ }
702
+
703
+ .changeDifferenceLine {
704
+ margin-top: -0.125rem;
705
+ }
706
+
707
+ .changeDifferenceLabel {
708
+ font-weight: 400;
709
+ font-size: 0.85rem;
710
+ color: var(--grey-text);
711
+ }
712
+
713
+ .changeDifferenceAmount {
714
+ font-weight: 500;
715
+ font-size: 0.85rem;
716
+ color: var(--grey-text);
717
+ }
718
+
719
+ .payOwingSection {
720
+ margin-top: var(--spacing-medium);
721
+ padding-top: var(--spacing-medium);
722
+ border-top: 1px solid var(--accent-orange-10);
723
+ display: flex;
724
+ flex-direction: column;
725
+ gap: var(--spacing-small);
726
+ }
727
+
728
+ .payOwingRow {
729
+ display: flex;
730
+ justify-content: space-between;
731
+ align-items: center;
732
+ }
733
+
734
+ .payOwingLabel {
735
+ font-weight: 600;
736
+ color: var(--primary-text);
737
+ }
738
+
739
+ .payOwingAmount {
740
+ font-weight: 700;
741
+ font-size: 1.125rem;
742
+ color: var(--accent-orange);
743
+ }
744
+
745
+ .payOwingButtons {
746
+ display: flex;
747
+ flex-direction: column;
748
+ gap: 0.5rem;
749
+ margin-top: 0.5rem;
750
+ width: 100%;
751
+ }
752
+
753
+ .payOwingButton {
754
+ width: 100%;
755
+ display: block;
756
+ }
757
+
758
+ .payOwingButtonOutline {
759
+ background-color: transparent !important;
760
+ border: 2px solid var(--accent-orange);
761
+ color: var(--accent-orange);
762
+ }
763
+
764
+ .payOwingButton:disabled {
765
+ opacity: 0.6;
766
+ cursor: not-allowed;
767
+ }
768
+
769
+ .payOwingRefreshHint {
770
+ font-size: 0.875rem;
771
+ margin: 0.25rem 0 0 0;
772
+ }
773
+
774
+ .payOwingRefreshLink {
775
+ padding: 0;
776
+ background: none;
777
+ border: none;
778
+ color: var(--accent-orange);
779
+ font-weight: 500;
780
+ text-decoration: underline;
781
+ cursor: pointer;
782
+ font-family: inherit;
783
+ }
784
+
785
+ .payOwingRefreshLink:hover {
786
+ color: var(--accent-turquoise);
787
+ }
788
+
789
+ .payOwingError {
790
+ font-size: 0.875rem;
791
+ color: #dc2626;
792
+ margin: 0.25rem 0 0 0;
793
+ }
794
+
795
+ .payOwingDisclaimer {
796
+ font-size: 0.8125rem;
797
+ color: var(--grey-text);
798
+ margin: 0.25rem 0 0 0;
799
+ line-height: 1.4;
800
+ text-align: center;
801
+ }
802
+
803
+ .paymentModalOverlay {
804
+ position: fixed;
805
+ inset: 0;
806
+ z-index: 1100;
807
+ display: flex;
808
+ align-items: center;
809
+ justify-content: center;
810
+ padding: 1rem;
811
+ background-color: rgba(0, 0, 0, 0.5);
812
+ }
813
+
814
+ .paymentModal {
815
+ background-color: var(--primary-background);
816
+ border-radius: 16px;
817
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
818
+ max-width: 32rem;
819
+ width: 100%;
820
+ max-height: 90vh;
821
+ overflow: hidden;
822
+ display: flex;
823
+ flex-direction: column;
824
+ }
825
+
826
+ .paymentModalHeader {
827
+ display: flex;
828
+ justify-content: space-between;
829
+ align-items: flex-start;
830
+ padding: 1.5rem;
831
+ border-bottom: 1px solid var(--accent-orange-10);
832
+ }
833
+
834
+ .paymentModalTitle {
835
+ font-size: 1.125rem;
836
+ font-weight: 600;
837
+ color: var(--primary-text);
838
+ margin: 0;
839
+ }
840
+
841
+ .paymentModalClose {
842
+ padding: 0.25rem;
843
+ background: none;
844
+ border: none;
845
+ color: var(--grey-text);
846
+ cursor: pointer;
847
+ }
848
+
849
+ .paymentModalClose:hover {
850
+ color: var(--primary-text);
851
+ }
852
+
853
+ .paymentModalCloseIcon {
854
+ width: 1.25rem;
855
+ height: 1.25rem;
856
+ }
857
+
858
+ .paymentModalSummary {
859
+ padding: 0.75rem 1.5rem 0.5rem;
860
+ display: flex;
861
+ flex-direction: column;
862
+ gap: 0.35rem;
863
+ }
864
+
865
+ .paymentModalLine {
866
+ display: flex;
867
+ justify-content: space-between;
868
+ font-size: 0.875rem;
869
+ color: var(--primary-text);
870
+ }
871
+
872
+ .paymentModalLineLabel {
873
+ font-weight: 400;
874
+ }
875
+
876
+ .paymentModalLineAmount {
877
+ font-weight: 500;
878
+ }
879
+
880
+ .paymentModalTotal {
881
+ display: flex;
882
+ justify-content: space-between;
883
+ margin-top: 0.5rem;
884
+ padding-top: 0.5rem;
885
+ border-top: 1px solid var(--accent-orange-10);
886
+ font-size: 1rem;
887
+ }
888
+
889
+ .paymentModalTotalLabel {
890
+ font-weight: 700;
891
+ }
892
+
893
+ .paymentModalTotalAmount {
894
+ font-weight: 700;
895
+ color: var(--accent-orange);
896
+ }
897
+
898
+ .paymentModalDepositDue {
899
+ display: flex;
900
+ justify-content: space-between;
901
+ margin-top: 0.5rem;
902
+ font-size: 1rem;
903
+ }
904
+
905
+ .paymentModalDepositDueLabel {
906
+ font-weight: 700;
907
+ }
908
+
909
+ .paymentModalDepositDueAmount {
910
+ font-weight: 700;
911
+ color: var(--accent-orange);
912
+ }
913
+
914
+ .paymentModalBody {
915
+ padding: 0.75rem 1.5rem 1.5rem;
916
+ overflow: auto;
917
+ flex: 1;
918
+ }
919
+
920
+ /* Cancel booking confirmation dialog */
921
+ .cancelConfirmModal {
922
+ background-color: var(--primary-background);
923
+ border-radius: 16px;
924
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
925
+ max-width: 28rem;
926
+ width: 100%;
927
+ padding: 1.5rem;
928
+ }
929
+
930
+ .cancelConfirmTitle {
931
+ font-size: 1.25rem;
932
+ font-weight: 600;
933
+ color: var(--primary-text);
934
+ margin: 0 0 0.75rem;
935
+ }
936
+
937
+ .cancelConfirmMessage {
938
+ font-size: 0.9375rem;
939
+ color: var(--primary-text);
940
+ margin: 0 0 1rem;
941
+ line-height: 1.5;
942
+ }
943
+
944
+ .cancelConfirmActions {
945
+ display: flex;
946
+ flex-wrap: wrap;
947
+ gap: 0.75rem;
948
+ justify-content: flex-end;
949
+ margin-top: 0.5rem;
950
+ }
951
+
952
+ .cancelConfirmSecondary {
953
+ padding: 0.625rem 1.25rem;
954
+ background: transparent;
955
+ color: var(--primary-text);
956
+ border: 1px solid var(--grey-text-20, rgba(0, 0, 0, 0.2));
957
+ border-radius: 8px;
958
+ font-size: 0.9375rem;
959
+ cursor: pointer;
960
+ }
961
+
962
+ .cancelConfirmSecondary:hover:not(:disabled) {
963
+ background: var(--grey-text-10, rgba(0, 0, 0, 0.05));
964
+ }
965
+
966
+ .cancelConfirmPrimary {
967
+ padding: 0.625rem 1.25rem;
968
+ background: var(--accent-orange);
969
+ color: white;
970
+ border: none;
971
+ border-radius: 8px;
972
+ font-size: 0.9375rem;
973
+ cursor: pointer;
974
+ }
975
+
976
+ .cancelConfirmPrimary:hover:not(:disabled) {
977
+ opacity: 0.9;
978
+ }
979
+
980
+ .cancelConfirmSecondary:disabled,
981
+ .cancelConfirmPrimary:disabled {
982
+ opacity: 0.6;
983
+ cursor: not-allowed;
984
+ }
985
+
986
+ .cancelBtn {
987
+ border-color: var(--grey-text);
988
+ color: var(--grey-text);
989
+ }
990
+
991
+ .cancelBtn:hover {
992
+ color: var(--grey-text);
993
+ }
994
+
995
+ /* Full-screen overlay while cancelling booking */
996
+ .cancelOverlay {
997
+ position: fixed;
998
+ inset: 0;
999
+ z-index: 1200;
1000
+ display: flex;
1001
+ flex-direction: column;
1002
+ align-items: center;
1003
+ justify-content: center;
1004
+ gap: 1rem;
1005
+ background-color: var(--light-orange-background, #fef3e9);
1006
+ padding: 1rem;
1007
+ }
1008
+
1009
+ .cancelOverlaySpinner {
1010
+ width: 2.5rem;
1011
+ height: 2.5rem;
1012
+ border-radius: 50%;
1013
+ border: 3px solid rgba(0, 0, 0, 0.1);
1014
+ border-top-color: var(--accent-orange);
1015
+ animation: bookingDetailsSpin 0.8s linear infinite;
1016
+ }
1017
+
1018
+ .cancelOverlayText {
1019
+ margin: 0;
1020
+ font-size: 1rem;
1021
+ font-weight: 500;
1022
+ color: var(--primary-text);
1023
+ }
1024
+
1025
+ @keyframes bookingDetailsSpin {
1026
+ to {
1027
+ transform: rotate(360deg);
1028
+ }
1029
+ }
1030
+
1031
+ .paymentForm {
1032
+ display: flex;
1033
+ flex-direction: column;
1034
+ gap: 1rem;
1035
+ }
1036
+
1037
+ .paymentFormError {
1038
+ font-size: 0.875rem;
1039
+ color: #dc2626;
1040
+ margin: 0;
1041
+ }
1042
+
1043
+ .paymentFormActions {
1044
+ display: flex;
1045
+ gap: 0.75rem;
1046
+ padding-top: 0.5rem;
1047
+ }
1048
+
1049
+ .paymentFormCancel {
1050
+ flex: 1;
1051
+ padding: 0.75rem 1rem;
1052
+ border: 2px solid var(--accent-orange-10);
1053
+ background: transparent;
1054
+ color: var(--primary-text);
1055
+ font-weight: 600;
1056
+ font-size: 1rem;
1057
+ border-radius: 12px;
1058
+ cursor: pointer;
1059
+ font-family: inherit;
1060
+ }
1061
+
1062
+ .paymentFormCancel:hover {
1063
+ background-color: var(--accent-orange-10);
1064
+ }
1065
+
1066
+ .paymentFormSubmit {
1067
+ flex: 1;
1068
+ padding: 0.75rem 1rem;
1069
+ background-color: var(--accent-orange);
1070
+ color: white;
1071
+ border: none;
1072
+ font-weight: 600;
1073
+ font-size: 1rem;
1074
+ border-radius: 12px;
1075
+ cursor: pointer;
1076
+ font-family: inherit;
1077
+ }
1078
+
1079
+ .paymentFormSubmit:hover:not(:disabled) {
1080
+ opacity: 0.9;
1081
+ }
1082
+
1083
+ .paymentFormSubmit:disabled {
1084
+ opacity: 0.6;
1085
+ cursor: not-allowed;
1086
+ }
1087
+
1088
+ .paymentMethods {
1089
+ margin-top: var(--spacing-large);
1090
+ padding-top: var(--spacing-medium);
1091
+ border-top: 1px solid var(--accent-orange-10);
1092
+ }
1093
+
1094
+ .paymentMethodsTitle {
1095
+ font-size: 0.875rem;
1096
+ font-weight: 600;
1097
+ color: var(--primary-text);
1098
+ margin: 0 0 var(--spacing-small) 0;
1099
+ }
1100
+
1101
+ .paymentMethodLine {
1102
+ display: flex;
1103
+ justify-content: space-between;
1104
+ color: var(--grey-text);
1105
+ font-size: 0.875rem;
1106
+ }
1107
+
1108
+ .paymentStatus {
1109
+ margin-top: var(--spacing-medium);
1110
+ padding-top: var(--spacing-medium);
1111
+ border-top: 1px solid var(--accent-orange-10);
1112
+ }
1113
+
1114
+ .paymentStatusLine {
1115
+ display: flex;
1116
+ justify-content: space-between;
1117
+ font-size: 0.875rem;
1118
+ }
1119
+
1120
+ .paymentStatusLabel {
1121
+ color: var(--grey-text);
1122
+ }
1123
+
1124
+ .paymentStatusValue {
1125
+ font-weight: 600;
1126
+ }
1127
+
1128
+ .statusPaid {
1129
+ color: var(--accent-turquoise);
1130
+ }
1131
+
1132
+ .statusDeposit {
1133
+ color: #f59e0b;
1134
+ }
1135
+
1136
+ .statusAwaiting {
1137
+ color: var(--grey-text);
1138
+ }
1139
+
1140
+ .balanceDue {
1141
+ margin-top: var(--spacing-small);
1142
+ background-color: #fef3c7;
1143
+ border-radius: 8px;
1144
+ padding: var(--spacing-small);
1145
+ }
1146
+
1147
+ .balanceDueTitle {
1148
+ font-weight: 600;
1149
+ color: #92400e;
1150
+ margin: 0;
1151
+ font-size: 0.875rem;
1152
+ }
1153
+
1154
+ .balanceDueDate {
1155
+ font-size: 0.75rem;
1156
+ color: #92400e;
1157
+ margin: 0.25rem 0 0 0;
1158
+ }
1159
+
1160
+ .policyLabel {
1161
+ color: var(--primary-text);
1162
+ font-weight: 500;
1163
+ font-size: 1rem;
1164
+ margin-bottom: var(--spacing-small);
1165
+ }
1166
+
1167
+ .policyCancelBy {
1168
+ margin-bottom: var(--spacing-small);
1169
+ }
1170
+
1171
+ .policyCancelByHeading {
1172
+ font-weight: 700;
1173
+ font-size: 1rem;
1174
+ color: var(--primary-text);
1175
+ margin: 0 0 var(--spacing-small) 0;
1176
+ text-align: left;
1177
+ }
1178
+
1179
+ .policyTierList {
1180
+ display: flex;
1181
+ flex-direction: column;
1182
+ gap: 0;
1183
+ }
1184
+
1185
+ .policyTierRow {
1186
+ display: grid;
1187
+ grid-template-columns: 1fr 1fr;
1188
+ gap: var(--spacing-medium);
1189
+ align-items: start;
1190
+ padding: var(--spacing-medium) 0;
1191
+ border-bottom: 1px solid var(--accent-orange-10);
1192
+ font-size: 1rem;
1193
+ }
1194
+
1195
+ .policyTierRow:last-child {
1196
+ border-bottom: none;
1197
+ }
1198
+
1199
+ .policyTierDeadline {
1200
+ font-weight: 700;
1201
+ color: var(--primary-text);
1202
+ }
1203
+
1204
+ .policyTierRefund {
1205
+ color: var(--grey-text);
1206
+ }
1207
+
1208
+ .policyChangeWindow {
1209
+ font-size: 1rem;
1210
+ color: var(--grey-text);
1211
+ margin: 0;
1212
+ }
1213
+
1214
+ .changeBookingCopy {
1215
+ margin: 0;
1216
+ color: var(--grey-text);
1217
+ font-size: 0.95rem;
1218
+ }
1219
+
1220
+ .changeBookingActions {
1221
+ margin-top: var(--spacing-medium);
1222
+ display: flex;
1223
+ justify-content: center;
1224
+ }
1225
+
1226
+ .changeBookingMeta {
1227
+ margin: var(--spacing-small) 0 0 0;
1228
+ color: var(--grey-text);
1229
+ font-size: 0.8rem;
1230
+ text-align: center;
1231
+ }
1232
+
1233
+ .changeBookingSuccess {
1234
+ margin: 0 0 var(--spacing-medium) 0;
1235
+ border: 1px solid rgba(5, 150, 105, 0.35);
1236
+ background: rgba(16, 185, 129, 0.12);
1237
+ color: #065f46;
1238
+ border-radius: 12px;
1239
+ padding: 0.75rem 1rem;
1240
+ font-size: 0.9rem;
1241
+ font-weight: 500;
1242
+ }
1243
+
1244
+ .changeBookingBlocked {
1245
+ margin: var(--spacing-small) 0 0 0;
1246
+ color: #b91c1c;
1247
+ font-size: 0.8rem;
1248
+ text-align: center;
1249
+ }
1250
+
1251
+ .cancelBookingSection {
1252
+ margin-top: var(--spacing-large);
1253
+ padding-top: var(--spacing-medium);
1254
+ border-top: 1px solid var(--grey-text-20, rgba(0, 0, 0, 0.08));
1255
+ align-items: center;
1256
+ display: flex;
1257
+ flex-direction: column;
1258
+ gap: var(--spacing-small);
1259
+ }
1260
+
1261
+ .cancelBookingText {
1262
+ font-size: 0.8rem;
1263
+ color: var(--grey-text);
1264
+ }
1265
+
1266
+ .cancelBookingError {
1267
+ font-size: 0.875rem;
1268
+ color: #b91c1c;
1269
+ margin: 0 0 var(--spacing-small) 0;
1270
+ }
1271
+
1272
+ .contactInfo {
1273
+ display: flex;
1274
+ flex-direction: column;
1275
+ gap: 0.5rem;
1276
+ color: var(--primary-text);
1277
+ font-size: 1rem;
1278
+ }
1279
+
1280
+ .contactLine {
1281
+ margin: 0;
1282
+ font-size: 1rem;
1283
+ }
1284
+
1285
+ .contactLabel {
1286
+ font-weight: 500;
1287
+ font-size: 1rem;
1288
+ }
1289
+
1290
+ .finePrintSection {
1291
+ margin-top: var(--spacing-medium);
1292
+ padding-top: var(--spacing-medium);
1293
+ border-top: 1px solid var(--accent-orange-10);
1294
+ }
1295
+
1296
+ .finePrint {
1297
+ font-size: 1rem;
1298
+ color: var(--grey-text);
1299
+ margin: 0;
1300
+ }
1301
+
1302
+ .communicationLabel {
1303
+ font-weight: 500;
1304
+ font-size: 1rem;
1305
+ }
1306
+
1307
+ .whatsappLabel {
1308
+ display: inline-flex;
1309
+ align-items: center;
1310
+ gap: 0.35rem;
1311
+ }
1312
+
1313
+ .whatsappIconSmall {
1314
+ width: 18px;
1315
+ height: 18px;
1316
+ color: #25d366;
1317
+ flex-shrink: 0;
1318
+ }
1319
+
1320
+ .contactUpdateWrap {
1321
+ margin-top: var(--spacing-medium);
1322
+ }
1323
+
1324
+ .contactUpdateLink {
1325
+ display: inline-flex;
1326
+ align-items: center;
1327
+ gap: 0.35rem;
1328
+ padding: 0;
1329
+ background: none;
1330
+ border: none;
1331
+ color: var(--accent-orange);
1332
+ font-weight: 500;
1333
+ font-size: 0.875rem;
1334
+ font-family: inherit;
1335
+ text-decoration: underline;
1336
+ cursor: pointer;
1337
+ }
1338
+
1339
+ .contactForm {
1340
+ display: flex;
1341
+ flex-direction: column;
1342
+ gap: var(--spacing-medium);
1343
+ }
1344
+
1345
+ .contactFieldGroup {
1346
+ display: flex;
1347
+ flex-direction: column;
1348
+ gap: 0.35rem;
1349
+ min-width: 0;
1350
+ }
1351
+
1352
+ .contactFieldLabel {
1353
+ font-weight: 600;
1354
+ font-size: 0.9375rem;
1355
+ color: var(--primary-text);
1356
+ display: inline-flex;
1357
+ align-items: center;
1358
+ gap: 0.35rem;
1359
+ }
1360
+
1361
+ .contactCheckboxGroup {
1362
+ display: flex;
1363
+ flex-direction: row;
1364
+ flex-wrap: wrap;
1365
+ gap: 1rem 1.5rem;
1366
+ }
1367
+
1368
+ .contactCheckboxLabel {
1369
+ display: flex;
1370
+ align-items: center;
1371
+ gap: 0.5rem;
1372
+ cursor: pointer;
1373
+ font-size: 1rem;
1374
+ color: var(--primary-text);
1375
+ }
1376
+
1377
+ .contactCheckbox {
1378
+ width: 1.125rem;
1379
+ height: 1.125rem;
1380
+ accent-color: var(--accent-orange);
1381
+ }
1382
+
1383
+ .contactCheckboxText {
1384
+ display: inline-flex;
1385
+ align-items: center;
1386
+ gap: 0.35rem;
1387
+ }
1388
+
1389
+ .contactHint {
1390
+ font-size: 0.8125rem;
1391
+ color: var(--grey-text);
1392
+ margin: 0;
1393
+ }
1394
+
1395
+ .contactInput {
1396
+ width: 100%;
1397
+ max-width: 100%;
1398
+ padding: 0.625rem 0.875rem;
1399
+ font-size: 1rem;
1400
+ font-family: inherit;
1401
+ border: 2px solid var(--accent-orange-10, rgba(0, 0, 0, 0.08));
1402
+ border-radius: 12px;
1403
+ color: var(--primary-text);
1404
+ box-sizing: border-box;
1405
+ }
1406
+
1407
+ .contactInput:focus {
1408
+ outline: none;
1409
+ border-color: var(--accent-orange);
1410
+ }
1411
+
1412
+ .contactInput::placeholder {
1413
+ color: var(--grey-text);
1414
+ }
1415
+
1416
+ .contactError {
1417
+ color: #dc2626;
1418
+ font-size: 0.9375rem;
1419
+ margin: 0;
1420
+ }
1421
+
1422
+ .contactSaveBtn {
1423
+ align-self: center;
1424
+ padding: 0.625rem 1.25rem;
1425
+ background: var(--accent-orange);
1426
+ color: white;
1427
+ border: none;
1428
+ border-radius: 12px;
1429
+ font-family: 'Poppins', sans-serif;
1430
+ font-weight: 600;
1431
+ font-size: 1rem;
1432
+ text-transform: lowercase;
1433
+ cursor: pointer;
1434
+ }
1435
+
1436
+ .contactSaveBtn:hover:not(:disabled) {
1437
+ opacity: 0.9;
1438
+ }
1439
+
1440
+ .contactSaveBtn:disabled {
1441
+ opacity: 0.6;
1442
+ cursor: not-allowed;
1443
+ }
1444
+
1445
+ #contact-details {
1446
+ scroll-margin-top: 6rem;
1447
+ }
1448
+
1449
+ .pickupDetailsSection {
1450
+ scroll-margin-top: 6rem;
1451
+ }
1452
+
1453
+ .pickupDetails {
1454
+ color: var(--primary-text);
1455
+ margin: 0;
1456
+ }
1457
+
1458
+ .pickupLocationBlock {
1459
+ text-align: center;
1460
+ }
1461
+
1462
+ .pickupLocationBlock .pickupDetails {
1463
+ margin: 0 0 0.25rem 0;
1464
+ text-align: center;
1465
+ }
1466
+
1467
+ .pickupLinksWrap {
1468
+ display: flex;
1469
+ flex-direction: column;
1470
+ align-items: center;
1471
+ gap: 0.35rem;
1472
+ }
1473
+
1474
+ .pickupChangeLink {
1475
+ display: inline-flex;
1476
+ align-items: center;
1477
+ gap: 0.35rem;
1478
+ padding: 0;
1479
+ background: none;
1480
+ border: none;
1481
+ color: var(--accent-orange);
1482
+ font-weight: 500;
1483
+ font-size: 0.875rem;
1484
+ font-family: inherit;
1485
+ text-decoration: underline;
1486
+ cursor: pointer;
1487
+ }
1488
+
1489
+ .pickupChangeLink:hover:not(:disabled) {
1490
+ color: var(--accent-turquoise);
1491
+ }
1492
+
1493
+ .pickupChangeLink:disabled {
1494
+ opacity: 0.45;
1495
+ cursor: not-allowed;
1496
+ }
1497
+
1498
+ .pickupEditIcon {
1499
+ width: 16px;
1500
+ height: 16px;
1501
+ }
1502
+
1503
+ .pickupMapLink {
1504
+ display: inline-block;
1505
+ color: var(--accent-orange);
1506
+ font-weight: 500;
1507
+ }
1508
+
1509
+ .pickupMapLink:hover {
1510
+ color: var(--accent-turquoise);
1511
+ }
1512
+
1513
+ .pickupSelectPrompt {
1514
+ color: var(--primary-text);
1515
+ margin: 0 0 var(--spacing-medium) 0;
1516
+ font-size: 0.9375rem;
1517
+ }
1518
+
1519
+ .pickupButtonWrap {
1520
+ display: flex;
1521
+ justify-content: center;
1522
+ margin-bottom: var(--spacing-medium);
1523
+ }
1524
+
1525
+ .pickupPrimaryButton {
1526
+ display: inline-flex;
1527
+ align-items: center;
1528
+ gap: 0.5rem;
1529
+ padding: 0.625rem 1.25rem;
1530
+ background-color: var(--accent-orange);
1531
+ color: white;
1532
+ font-family: 'Poppins', sans-serif;
1533
+ font-weight: 600;
1534
+ font-size: 1rem;
1535
+ border: none;
1536
+ border-radius: 24px;
1537
+ cursor: pointer;
1538
+ text-decoration: none;
1539
+ }
1540
+
1541
+ .pickupPrimaryButton:hover {
1542
+ background-color: #e85a2e;
1543
+ }
1544
+
1545
+
1546
+ /* Mobile styles */
1547
+ @media (max-width: 768px) {
1548
+ .container {
1549
+ padding: var(--spacing-medium);
1550
+ }
1551
+
1552
+ .section {
1553
+ padding: var(--spacing-medium);
1554
+ }
1555
+
1556
+ .headerContent {
1557
+ flex-direction: column;
1558
+ align-items: center;
1559
+ text-align: center;
1560
+ }
1561
+
1562
+ .title {
1563
+ font-size: 1.5rem;
1564
+ }
1565
+
1566
+ .reference {
1567
+ text-align: center;
1568
+ }
1569
+
1570
+ .sectionTitle {
1571
+ font-size: 1.25rem;
1572
+ }
1573
+
1574
+ .draftItineraryActionTitle {
1575
+ font-size: 1.25rem;
1576
+ }
1577
+
1578
+ .itineraryItem {
1579
+ flex-direction: column;
1580
+ gap: 0.25rem;
1581
+ }
1582
+
1583
+ .bookingDetails {
1584
+ min-width: unset;
1585
+ width: 100%;
1586
+ }
1587
+
1588
+ .policyTierRow {
1589
+ grid-template-columns: 1fr;
1590
+ }
1591
+ }