@nuitee/booking-widget 1.0.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.
@@ -0,0 +1,1711 @@
1
+ /* ===== Booking Widget Styles ===== */
2
+ /* Load fonts so widget looks consistent when embedded (host may not load them) */
3
+ @import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500;600;700&family=Inter:wght@300;400;500;600&display=swap');
4
+
5
+ /* Global reset shared by all widget versions (React, Vue, vanilla, standalone) */
6
+ * {
7
+ box-sizing: border-box;
8
+ margin: 0;
9
+ padding: 0;
10
+ }
11
+
12
+ /* Prefix all classes with booking-widget- to avoid conflicts */
13
+ /* Isolate sizing: 16px base + em units so widget renders consistently when embedded (host may change html font-size) */
14
+ /* Note: overlay and modal are siblings, not parent/child — both need explicit font-size */
15
+ .booking-widget-overlay {
16
+ font-size: 16px;
17
+ }
18
+ .booking-widget-modal {
19
+ font-size: 16px;
20
+ }
21
+
22
+ .booking-widget-overlay {
23
+ position: fixed;
24
+ inset: 0;
25
+ background: rgba(0, 0, 0, 0.7);
26
+ z-index: 99990;
27
+ opacity: 0;
28
+ pointer-events: none;
29
+ transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1);
30
+ }
31
+
32
+ .booking-widget-overlay.active {
33
+ opacity: 1;
34
+ pointer-events: auto;
35
+ }
36
+
37
+ .booking-widget-modal {
38
+ position: fixed;
39
+ top: 50%;
40
+ left: 50%;
41
+ transform: translate(-50%, -50%) scale(0.92);
42
+ width: min(95vw, 960px);
43
+ max-height: 90vh;
44
+ background: hsl(30, 8%, 10%);
45
+ border: 1px solid var(--border, hsl(30, 8%, 22%));
46
+ border-radius: 1em;
47
+ z-index: 100000;
48
+ overflow-y: auto;
49
+ opacity: 0;
50
+ pointer-events: none;
51
+ transition: opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
52
+ }
53
+
54
+ .booking-widget-modal.active {
55
+ opacity: 1;
56
+ pointer-events: auto;
57
+ transform: translate(-50%, -50%) scale(1);
58
+ }
59
+
60
+ .booking-widget-close {
61
+ position: absolute;
62
+ top: 1em;
63
+ right: 1em;
64
+ background: none;
65
+ border: none;
66
+ color: var(--muted, hsl(30, 10%, 55%));
67
+ font-size: 1.5em;
68
+ cursor: pointer;
69
+ z-index: 10;
70
+ line-height: 1;
71
+ transition: color 0.2s;
72
+ }
73
+
74
+ .booking-widget-close:hover {
75
+ color: var(--fg, hsl(40, 20%, 90%));
76
+ }
77
+
78
+ /* ===== CSS Variables ===== */
79
+ .booking-widget-modal {
80
+ /* Default colors - can be overridden via inline styles */
81
+ --bg: hsl(30, 10%, 8%);
82
+ --fg: hsl(40, 20%, 90%);
83
+ --card: hsl(30, 8%, 12%);
84
+ --card-fg: hsl(40, 20%, 90%);
85
+ --primary: hsl(38, 60%, 55%);
86
+ --primary-fg: hsl(30, 10%, 8%);
87
+ --secondary: hsl(30, 6%, 18%);
88
+ --secondary-fg: hsl(40, 15%, 80%);
89
+ --muted: hsl(30, 10%, 55%);
90
+ --border: hsl(30, 8%, 22%);
91
+ --input-bg: hsl(30, 8%, 14%);
92
+ --font-serif: 'Playfair Display', Georgia, serif;
93
+ --font-sans: 'Inter', system-ui, sans-serif;
94
+ --radius: 0.75em;
95
+ color: var(--fg);
96
+ font-family: var(--font-sans);
97
+ line-height: 1.5;
98
+ background: var(--bg);
99
+ }
100
+
101
+ .booking-widget-modal h1,
102
+ .booking-widget-modal h2,
103
+ .booking-widget-modal h3,
104
+ .booking-widget-modal h4 {
105
+ font-family: var(--font-serif);
106
+ font-weight: 500;
107
+ }
108
+
109
+ /* ===== Step Indicator ===== */
110
+ .booking-widget-step-indicator {
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: center;
114
+ gap: 0.5em;
115
+ padding: 1.5em 1em;
116
+ }
117
+
118
+ .booking-widget-modal .step-item {
119
+ display: flex;
120
+ align-items: center;
121
+ gap: 0.5em;
122
+ }
123
+
124
+ .booking-widget-modal .step-circle {
125
+ width: 2em;
126
+ height: 2em;
127
+ border-radius: 50%;
128
+ display: flex;
129
+ align-items: center;
130
+ justify-content: center;
131
+ font-size: 0.7em;
132
+ font-family: var(--font-sans);
133
+ font-weight: 500;
134
+ letter-spacing: 0.1em;
135
+ transition: all 0.3s;
136
+ }
137
+
138
+ .booking-widget-modal .step-circle.active {
139
+ background: var(--primary);
140
+ color: var(--primary-fg);
141
+ }
142
+
143
+ .booking-widget-modal .step-circle.past {
144
+ background: hsl(38, 60%, 55%, 0.2);
145
+ color: var(--primary);
146
+ cursor: pointer;
147
+ cursor: pointer;
148
+ }
149
+
150
+ .booking-widget-modal .step-circle.future {
151
+ background: var(--secondary);
152
+ color: var(--muted);
153
+ }
154
+
155
+ .booking-widget-modal .step-label {
156
+ font-size: 0.65em;
157
+ text-transform: uppercase;
158
+ letter-spacing: 0.2em;
159
+ transition: color 0.3s;
160
+ display: none;
161
+ }
162
+
163
+ @media (min-width: 640px) {
164
+ .booking-widget-modal .step-label {
165
+ display: inline;
166
+ }
167
+ }
168
+
169
+ .booking-widget-modal .step-label.active {
170
+ color: var(--primary);
171
+ }
172
+
173
+ .booking-widget-modal .step-label.past {
174
+ color: hsl(38, 60%, 55%, 0.6);
175
+ cursor: pointer;
176
+ }
177
+
178
+ .booking-widget-modal .step-label.future {
179
+ color: var(--muted);
180
+ }
181
+
182
+ .booking-widget-modal .step-line {
183
+ width: 2em;
184
+ height: 1px;
185
+ background: var(--border);
186
+ position: relative;
187
+ }
188
+
189
+ @media (min-width: 640px) {
190
+ .booking-widget-modal .step-line {
191
+ width: 3.5em;
192
+ }
193
+ }
194
+
195
+ .booking-widget-modal .step-line-fill {
196
+ position: absolute;
197
+ inset: 0;
198
+ background: var(--primary);
199
+ transform-origin: left;
200
+ transform: scaleX(0);
201
+ transition: transform 0.4s;
202
+ }
203
+
204
+ .booking-widget-modal .step-line-fill.filled {
205
+ transform: scaleX(1);
206
+ }
207
+
208
+ /* ===== Step Content ===== */
209
+ .booking-widget-step-content {
210
+ padding: 1em 1.5em 2em;
211
+ }
212
+
213
+ @media (min-width: 640px) {
214
+ .booking-widget-step-content {
215
+ padding: 1em 2em 2.5em;
216
+ }
217
+ }
218
+
219
+ .booking-widget-modal .step-title {
220
+ font-size: 1.75em;
221
+ text-align: center;
222
+ margin-bottom: 0.25em;
223
+ }
224
+
225
+ .booking-widget-modal .step-subtitle {
226
+ font-size: 0.8em;
227
+ color: var(--muted);
228
+ text-align: center;
229
+ margin-bottom: 2em;
230
+ }
231
+
232
+ /* ===== Form Elements ===== */
233
+ .booking-widget-modal .form-label {
234
+ display: block;
235
+ font-size: 0.65em;
236
+ text-transform: uppercase;
237
+ letter-spacing: 0.2em;
238
+ color: var(--muted);
239
+ margin-bottom: 0.5em;
240
+ }
241
+
242
+ .booking-widget-modal .form-input,
243
+ .booking-widget-modal .form-textarea {
244
+ width: 100%;
245
+ padding: 0.75em 1em;
246
+ border-radius: var(--radius);
247
+ border: 1px solid var(--border);
248
+ background: var(--card);
249
+ color: var(--fg);
250
+ font-family: var(--font-sans);
251
+ font-size: 0.85em;
252
+ outline: none;
253
+ transition: border-color 0.2s;
254
+ }
255
+
256
+ .booking-widget-modal .form-input:focus,
257
+ .booking-widget-modal .form-textarea:focus {
258
+ border-color: var(--primary);
259
+ }
260
+
261
+ .booking-widget-modal .form-input::placeholder,
262
+ .booking-widget-modal .form-textarea::placeholder {
263
+ color: hsl(30, 10%, 55%, 0.5);
264
+ }
265
+
266
+ .booking-widget-modal select.form-input {
267
+ appearance: none;
268
+ -webkit-appearance: none;
269
+ padding-right: 2.5em;
270
+ background-color: var(--card);
271
+ /* Custom chevron positioned with 0.75em gap from right border */
272
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23737373' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
273
+ background-repeat: no-repeat;
274
+ background-position: right 0.75em center;
275
+ background-size: 1em auto;
276
+ }
277
+
278
+ .booking-widget-modal .form-textarea {
279
+ resize: none;
280
+ }
281
+
282
+ /* ===== Counters ===== */
283
+ .booking-widget-modal .counter-row {
284
+ display: flex;
285
+ align-items: center;
286
+ justify-content: space-between;
287
+ padding: 0.85em 0;
288
+ border-bottom: 1px solid var(--border);
289
+ }
290
+
291
+ /* When Children counter is followed by child age selects, move border below the whole section */
292
+ .booking-widget-modal .counter-row:has(+ .child-ages-section) {
293
+ border-bottom: none;
294
+ }
295
+
296
+ .booking-widget-modal .child-ages-section {
297
+ padding: 0.25em 0 0.85em;
298
+ border-bottom: 1px solid var(--border);
299
+ }
300
+
301
+ .booking-widget-modal .counter-row:last-child {
302
+ border-bottom: none;
303
+ }
304
+
305
+ /* Guests & Rooms section: room cards + Add room button (scrollable) */
306
+ .booking-widget-modal .guests-rooms-section {
307
+ padding: 0.75em;
308
+ border: 1px solid var(--border);
309
+ border-radius: var(--radius);
310
+ background: var(--card);
311
+ max-height: 20em;
312
+ overflow-y: auto;
313
+ }
314
+
315
+ .booking-widget-modal .add-room-btn {
316
+ display: flex;
317
+ align-items: center;
318
+ justify-content: center;
319
+ gap: 0.5em;
320
+ width: 100%;
321
+ margin-top: 1em;
322
+ padding: 0.75em 1em;
323
+ font-size: 0.9em;
324
+ color: var(--primary);
325
+ background: transparent;
326
+ border: 1px dashed var(--border);
327
+ border-radius: var(--radius);
328
+ cursor: pointer;
329
+ transition: border-color 0.2s, color 0.2s, background 0.2s;
330
+ }
331
+ .booking-widget-modal .add-room-btn:hover:not(:disabled) {
332
+ border-color: var(--primary);
333
+ background: rgba(255, 255, 255, 0.03);
334
+ }
335
+ .booking-widget-modal .add-room-btn:disabled {
336
+ opacity: 0.4;
337
+ cursor: default;
338
+ }
339
+
340
+ /* Room card: each room in its own box */
341
+ .booking-widget-modal .room-card {
342
+ margin-top: 1.25em;
343
+ padding: 1em 1.25em;
344
+ border-radius: var(--radius);
345
+ background: var(--input-bg);
346
+ border: 1px solid var(--border);
347
+ }
348
+ .booking-widget-modal .room-card-header {
349
+ display: flex;
350
+ align-items: center;
351
+ justify-content: space-between;
352
+ margin-bottom: 0.75em;
353
+ padding-bottom: 0.5em;
354
+ border-bottom: 1px solid var(--border);
355
+ }
356
+ .booking-widget-modal .room-card-title {
357
+ font-size: 0.7em;
358
+ font-weight: 600;
359
+ text-transform: uppercase;
360
+ letter-spacing: 0.06em;
361
+ color: var(--muted);
362
+ margin: 0;
363
+ }
364
+ .booking-widget-modal .remove-room-btn {
365
+ padding: 0.25em 0.5em;
366
+ font-size: 0.75em;
367
+ color: var(--muted);
368
+ background: none;
369
+ border: none;
370
+ border-radius: var(--radius);
371
+ cursor: pointer;
372
+ transition: color 0.2s, background 0.2s;
373
+ }
374
+ .booking-widget-modal .remove-room-btn:hover {
375
+ color: var(--destructive, #ef4444);
376
+ background: rgba(239, 68, 68, 0.1);
377
+ }
378
+ .booking-widget-modal .room-card .counter-row {
379
+ border-bottom-color: var(--border);
380
+ }
381
+ .booking-widget-modal .room-card .counter-row:last-of-type {
382
+ border-bottom: none;
383
+ }
384
+ .booking-widget-modal .room-card .child-ages-section {
385
+ border-top: 1px solid var(--border);
386
+ margin-top: 0.25em;
387
+ padding-top: 0.75em;
388
+ }
389
+
390
+ .booking-widget-modal .counter-label {
391
+ font-size: 0.85em;
392
+ color: var(--fg);
393
+ }
394
+
395
+ .booking-widget-modal .counter-controls {
396
+ display: flex;
397
+ align-items: center;
398
+ gap: 1em;
399
+ }
400
+
401
+ .booking-widget-modal .counter-btn {
402
+ width: 2em;
403
+ height: 2em;
404
+ border-radius: 50%;
405
+ border: 1px solid var(--border);
406
+ background: none;
407
+ color: var(--fg);
408
+ cursor: pointer;
409
+ display: flex;
410
+ align-items: center;
411
+ justify-content: center;
412
+ font-size: 1em;
413
+ transition: border-color 0.2s, color 0.2s;
414
+ }
415
+
416
+ .booking-widget-modal .counter-btn:hover:not(:disabled) {
417
+ border-color: var(--primary);
418
+ color: var(--primary);
419
+ }
420
+
421
+ .booking-widget-modal .counter-btn:disabled {
422
+ opacity: 0.3;
423
+ cursor: default;
424
+ }
425
+
426
+ .booking-widget-modal .counter-val {
427
+ width: 1.5em;
428
+ text-align: center;
429
+ font-size: 0.85em;
430
+ font-weight: 500;
431
+ }
432
+
433
+ /* ===== Date Picker ===== */
434
+ .booking-widget-modal .date-trigger {
435
+ width: 100%;
436
+ display: flex;
437
+ align-items: center;
438
+ gap: 0.75em;
439
+ padding: 0.85em 1em;
440
+ border-radius: var(--radius);
441
+ border: 1px solid var(--border);
442
+ background: var(--card);
443
+ cursor: pointer;
444
+ transition: border-color 0.2s;
445
+ font-family: var(--font-sans);
446
+ font-size: 0.85em;
447
+ color: var(--fg);
448
+ }
449
+
450
+ .booking-widget-modal .date-trigger:hover {
451
+ border-color: hsl(38, 60%, 55%, 0.5);
452
+ }
453
+
454
+ .booking-widget-modal .date-trigger .placeholder {
455
+ color: var(--muted);
456
+ }
457
+
458
+ .booking-widget-modal .date-wrapper {
459
+ position: relative;
460
+ overflow: visible;
461
+ }
462
+
463
+ /* Min width so two month grids fit without clipping edge columns (SU/SA) */
464
+ .booking-widget-modal .calendar-popup {
465
+ display: none;
466
+ position: absolute;
467
+ top: 100%;
468
+ left: 50%;
469
+ transform: translateX(-50%);
470
+ width: max(100%, 32em);
471
+ min-width: 32em;
472
+ max-width: calc(100vw - 2em);
473
+ box-sizing: border-box;
474
+ z-index: 10;
475
+ background: var(--card);
476
+ border: 1px solid var(--border);
477
+ border-radius: var(--radius);
478
+ padding: 1em;
479
+ margin-top: 0.5em;
480
+ overflow: visible;
481
+ }
482
+
483
+ .booking-widget-modal .calendar-popup.open {
484
+ display: block;
485
+ }
486
+
487
+ /* Cal header: [‹] [Month1] gap [Month2] [›] with even spacing */
488
+ .booking-widget-modal .cal-header {
489
+ display: grid;
490
+ grid-template-columns: auto 1fr 1fr auto;
491
+ align-items: center;
492
+ gap: 0 1.5em;
493
+ margin-bottom: 0.75em;
494
+ /* padding: 0 0.5em; */
495
+ }
496
+
497
+ .booking-widget-modal .cal-header button {
498
+ background: none;
499
+ border: none;
500
+ color: var(--muted);
501
+ cursor: pointer;
502
+ font-size: 1em;
503
+ padding: 0.25em 0em;
504
+ transition: color 0.2s;
505
+ }
506
+
507
+ .booking-widget-modal .cal-header button:hover {
508
+ color: var(--primary);
509
+ }
510
+
511
+ .booking-widget-modal .cal-title {
512
+ font-size: 0.85em;
513
+ font-weight: 500;
514
+ text-align: center;
515
+ justify-self: center;
516
+ min-width: 0;
517
+ }
518
+ .booking-widget-modal .cal-header .cal-title:nth-child(2) {
519
+ margin-right: 42px;
520
+ }
521
+ .booking-widget-modal .cal-header .cal-title:nth-child(3) {
522
+ margin-left: 42px;
523
+ }
524
+
525
+ .booking-widget-modal .cal-grid {
526
+ display: grid;
527
+ grid-template-columns: repeat(7, 2em);
528
+ gap: 0.15em;
529
+ }
530
+
531
+ .booking-widget-modal .cal-day-name {
532
+ text-align: center;
533
+ font-size: 0.6em;
534
+ text-transform: uppercase;
535
+ color: var(--muted);
536
+ letter-spacing: 0.1em;
537
+ padding: 0.25em;
538
+ }
539
+
540
+ .booking-widget-modal .cal-day {
541
+ text-align: center;
542
+ padding: 0.2em;
543
+ font-size: 0.8em;
544
+ border-radius: 50%;
545
+ cursor: pointer;
546
+ border: none;
547
+ background: none;
548
+ color: var(--fg);
549
+ transition: all 0.15s;
550
+ width: 32px;
551
+ height: 32px;
552
+ }
553
+
554
+ .booking-widget-modal .cal-day:hover:not(.disabled):not(.empty) {
555
+ background: hsl(38, 60%, 55%, 0.2);
556
+ }
557
+
558
+ .booking-widget-modal .cal-day.selected {
559
+ background: var(--primary);
560
+ color: var(--primary-fg);
561
+ }
562
+
563
+ .booking-widget-modal .cal-day.in-range {
564
+ background: hsl(38, 60%, 55%, 0.15);
565
+ }
566
+
567
+ .booking-widget-modal .cal-day.disabled {
568
+ color: hsl(30, 10%, 55%, 0.3);
569
+ cursor: default;
570
+ }
571
+
572
+ .booking-widget-modal .cal-day.empty {
573
+ cursor: default;
574
+ }
575
+
576
+ .booking-widget-modal .cal-day.today {
577
+ border: 1px solid var(--primary);
578
+ }
579
+
580
+ /* Two months side-by-side horizontally */
581
+ .booking-widget-modal .cal-months {
582
+ display: flex;
583
+ flex-direction: row;
584
+ flex-wrap: nowrap;
585
+ gap: 1.5em;
586
+ justify-content: center;
587
+ align-items: flex-start;
588
+ }
589
+
590
+ /* ===== Primary Button ===== */
591
+ .booking-widget-modal .btn-primary {
592
+ display: block;
593
+ width: 100%;
594
+ max-width: 20em;
595
+ margin: 2em auto 0;
596
+ padding: 1em;
597
+ border-radius: var(--radius);
598
+ background: var(--primary);
599
+ color: var(--primary-fg);
600
+ font-family: var(--font-sans);
601
+ font-size: 0.8em;
602
+ text-transform: uppercase;
603
+ letter-spacing: 0.2em;
604
+ border: none;
605
+ cursor: pointer;
606
+ transition: opacity 0.3s;
607
+ }
608
+
609
+ .booking-widget-modal .btn-primary:hover:not(:disabled) {
610
+ opacity: 0.85;
611
+ }
612
+
613
+ .booking-widget-modal .btn-primary:disabled {
614
+ opacity: 0.3;
615
+ cursor: not-allowed;
616
+ }
617
+
618
+ .booking-widget-modal .btn-secondary {
619
+ display: inline-block;
620
+ padding: 0.85em 2.5em;
621
+ border-radius: var(--radius);
622
+ border: 1px solid var(--border);
623
+ background: none;
624
+ color: var(--fg);
625
+ font-family: var(--font-sans);
626
+ font-size: 0.8em;
627
+ text-transform: uppercase;
628
+ letter-spacing: 0.2em;
629
+ cursor: pointer;
630
+ transition: border-color 0.2s, color 0.2s;
631
+ }
632
+
633
+ .booking-widget-modal .btn-secondary:hover {
634
+ border-color: var(--primary);
635
+ color: var(--primary);
636
+ }
637
+
638
+ /* Rooms empty state - centered message and button */
639
+ .booking-widget-modal .rooms-empty-state {
640
+ display: flex;
641
+ flex-direction: column;
642
+ align-items: center;
643
+ text-align: center;
644
+ margin-top: 2.5em;
645
+ }
646
+
647
+ .booking-widget-modal .rooms-empty-state .rooms-empty-message {
648
+ color: var(--muted);
649
+ font-size: 0.9em;
650
+ margin: 0;
651
+ }
652
+
653
+ .booking-widget-modal .rooms-empty-state .btn-secondary {
654
+ margin-top: 1.25em;
655
+ }
656
+
657
+ /* ===== Room selection cards (carousel) ===== */
658
+ .booking-widget-modal .room-grid-wrapper {
659
+ position: relative;
660
+ margin: 1.5em 0;
661
+ }
662
+
663
+ .booking-widget-modal .room-grid {
664
+ display: flex;
665
+ gap: 1.25em;
666
+ overflow-x: auto;
667
+ overflow-y: hidden;
668
+ scroll-behavior: smooth;
669
+ scrollbar-width: thin;
670
+ scrollbar-color: var(--muted) transparent;
671
+ padding: 0.25em 0 1em;
672
+ -webkit-overflow-scrolling: touch;
673
+ scroll-padding: 0 3em;
674
+ }
675
+
676
+ .booking-widget-modal .room-grid::-webkit-scrollbar {
677
+ height: 6px;
678
+ }
679
+
680
+ .booking-widget-modal .room-grid::-webkit-scrollbar-track {
681
+ background: transparent;
682
+ }
683
+
684
+ .booking-widget-modal .room-grid::-webkit-scrollbar-thumb {
685
+ background: var(--muted);
686
+ border-radius: 3px;
687
+ }
688
+
689
+ .booking-widget-modal .room-grid::-webkit-scrollbar-thumb:hover {
690
+ background: var(--primary);
691
+ }
692
+
693
+ .booking-widget-modal .room-nav-btn {
694
+ position: absolute;
695
+ top: 50%;
696
+ transform: translateY(-50%);
697
+ z-index: 10;
698
+ width: 2.75em;
699
+ height: 2.75em;
700
+ border-radius: 50%;
701
+ background: var(--card);
702
+ border: 1px solid var(--border);
703
+ color: var(--fg);
704
+ display: flex;
705
+ align-items: center;
706
+ justify-content: center;
707
+ cursor: pointer;
708
+ transition: all 0.2s;
709
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
710
+ }
711
+
712
+ .booking-widget-modal .room-nav-btn:hover {
713
+ background: var(--primary);
714
+ color: var(--primary-fg);
715
+ border-color: var(--primary);
716
+ transform: translateY(-50%) scale(1.08);
717
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
718
+ }
719
+
720
+ .booking-widget-modal .room-nav-btn:active {
721
+ transform: translateY(-50%) scale(0.96);
722
+ }
723
+
724
+ .booking-widget-modal .room-nav-prev {
725
+ left: -0.75em;
726
+ }
727
+
728
+ .booking-widget-modal .room-nav-next {
729
+ right: -0.75em;
730
+ }
731
+
732
+ .booking-widget-modal .room-nav-btn .icon {
733
+ width: 1.5em;
734
+ height: 1.5em;
735
+ }
736
+
737
+ /* Room skeleton loader */
738
+ .booking-widget-modal .room-skeleton {
739
+ flex: 0 0 280px;
740
+ min-width: 280px;
741
+ height: 420px;
742
+ border-radius: 1em;
743
+ border: 1px solid var(--border);
744
+ background: var(--card);
745
+ overflow: hidden;
746
+ display: flex;
747
+ flex-direction: column;
748
+ }
749
+
750
+ .booking-widget-modal .room-skeleton-img {
751
+ height: 160px;
752
+ background: linear-gradient(90deg, var(--input-bg) 25%, hsl(30, 8%, 18%) 50%, var(--input-bg) 75%);
753
+ background-size: 200% 100%;
754
+ animation: booking-widget-skeleton-shimmer 1.2s ease-in-out infinite;
755
+ }
756
+
757
+ .booking-widget-modal .room-skeleton-body {
758
+ padding: 1.25em;
759
+ display: flex;
760
+ flex-direction: column;
761
+ gap: 0.75em;
762
+ }
763
+
764
+ .booking-widget-modal .room-skeleton-line {
765
+ height: 0.85em;
766
+ border-radius: 4px;
767
+ background: linear-gradient(90deg, var(--input-bg) 25%, hsl(30, 8%, 18%) 50%, var(--input-bg) 75%);
768
+ background-size: 200% 100%;
769
+ animation: booking-widget-skeleton-shimmer 1.2s ease-in-out infinite;
770
+ }
771
+
772
+ .booking-widget-modal .room-skeleton-line.title {
773
+ width: 70%;
774
+ height: 1.1em;
775
+ }
776
+
777
+ .booking-widget-modal .room-skeleton-line.price {
778
+ width: 40%;
779
+ align-self: flex-end;
780
+ margin-top: -0.5em;
781
+ }
782
+
783
+ .booking-widget-modal .room-skeleton-line.desc {
784
+ width: 100%;
785
+ height: 0.7em;
786
+ }
787
+
788
+ .booking-widget-modal .room-skeleton-line.desc:nth-of-type(4) {
789
+ width: 85%;
790
+ }
791
+
792
+ .booking-widget-modal .room-skeleton-meta {
793
+ display: flex;
794
+ gap: 1em;
795
+ margin-top: 0.25em;
796
+ }
797
+
798
+ .booking-widget-modal .room-skeleton-line.meta {
799
+ width: 4em;
800
+ height: 0.7em;
801
+ }
802
+
803
+ .booking-widget-modal .room-skeleton-tags {
804
+ display: flex;
805
+ gap: 0.4em;
806
+ flex-wrap: wrap;
807
+ }
808
+
809
+ .booking-widget-modal .room-skeleton-tag {
810
+ width: 3.5em;
811
+ height: 0.65em;
812
+ border-radius: 999px;
813
+ background: linear-gradient(90deg, var(--input-bg) 25%, hsl(30, 8%, 18%) 50%, var(--input-bg) 75%);
814
+ background-size: 200% 100%;
815
+ animation: booking-widget-skeleton-shimmer 1.2s ease-in-out infinite;
816
+ }
817
+
818
+ @keyframes booking-widget-skeleton-shimmer {
819
+ 0% { background-position: 200% 0; }
820
+ 100% { background-position: -200% 0; }
821
+ }
822
+
823
+ /* Base .room-card is used by both occupancy cards and room-grid cards; grid card styles below */
824
+ .booking-widget-modal .room-card {
825
+ border: 1px solid var(--border);
826
+ border-radius: var(--radius);
827
+ overflow: hidden;
828
+ cursor: pointer;
829
+ transition: border-color 0.3s, box-shadow 0.3s;
830
+ background: var(--card);
831
+ }
832
+
833
+ /* Room selection cards in carousel only – fixed height so all cards match */
834
+ .booking-widget-modal .room-grid .room-card {
835
+ flex: 0 0 280px;
836
+ min-width: 280px;
837
+ height: 420px;
838
+ display: flex;
839
+ flex-direction: column;
840
+ border-radius: 1em;
841
+ border-color: hsl(30, 8%, 24%);
842
+ background: var(--card);
843
+ transition: border-color 0.25s, box-shadow 0.25s, transform 0.25s;
844
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
845
+ }
846
+
847
+ .booking-widget-modal .room-grid .room-card:hover {
848
+ transform: translateY(-4px);
849
+ border-color: hsl(30, 8%, 30%);
850
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35);
851
+ }
852
+
853
+ .booking-widget-modal .room-grid .room-card.selected {
854
+ border-color: var(--primary);
855
+ box-shadow: 0 0 0 2px var(--primary), 0 6px 20px rgba(0, 0, 0, 0.3);
856
+ }
857
+
858
+ .booking-widget-modal .room-grid .room-card-img-wrap {
859
+ overflow: hidden;
860
+ position: relative;
861
+ flex-shrink: 0;
862
+ height: 160px;
863
+ background: var(--input-bg);
864
+ border-radius: 4px;
865
+ }
866
+
867
+ .booking-widget-modal .room-grid .room-card-img {
868
+ width: 100%;
869
+ height: 100%;
870
+ object-fit: cover;
871
+ transition: transform 0.5s ease;
872
+ }
873
+
874
+ .booking-widget-modal .room-grid .room-card:hover .room-card-img {
875
+ transform: scale(1.05);
876
+ }
877
+
878
+ .booking-widget-modal .room-grid .room-card-check {
879
+ position: absolute;
880
+ top: 0.75em;
881
+ right: 0.75em;
882
+ width: 2.25em;
883
+ height: 2.25em;
884
+ border-radius: 50%;
885
+ background: var(--primary);
886
+ color: var(--primary-fg);
887
+ display: none;
888
+ align-items: center;
889
+ justify-content: center;
890
+ font-size: 0.9em;
891
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
892
+ }
893
+
894
+ .booking-widget-modal .room-grid .room-card.selected .room-card-check {
895
+ display: flex;
896
+ }
897
+
898
+ .booking-widget-modal .room-grid .room-card-body {
899
+ padding-top: 1.25em;
900
+ display: flex;
901
+ flex-direction: column;
902
+ gap: 0.625em;
903
+ flex: 1;
904
+ min-height: 0;
905
+ overflow: hidden;
906
+ }
907
+
908
+ .booking-widget-modal .room-grid .room-card-top {
909
+ display: flex;
910
+ justify-content: space-between;
911
+ align-items: flex-start;
912
+ gap: 0.75em;
913
+ margin-bottom: 0;
914
+ }
915
+
916
+ .booking-widget-modal .room-grid .room-card-name {
917
+ font-family: var(--font-serif);
918
+ font-size: 1.1em;
919
+ font-weight: 600;
920
+ color: var(--fg);
921
+ line-height: 1.3;
922
+ flex: 1;
923
+ min-width: 0;
924
+ display: -webkit-box;
925
+ -webkit-line-clamp: 2;
926
+ -webkit-box-orient: vertical;
927
+ overflow: hidden;
928
+ }
929
+
930
+ .booking-widget-modal .room-grid .room-card-price {
931
+ text-align: right;
932
+ flex-shrink: 0;
933
+ }
934
+
935
+ .booking-widget-modal .room-grid .room-card-price strong {
936
+ font-family: var(--font-serif);
937
+ color: var(--primary);
938
+ font-size: 1.15em;
939
+ font-weight: 600;
940
+ display: block;
941
+ line-height: 1.2;
942
+ }
943
+
944
+ .booking-widget-modal .room-grid .room-card-price small {
945
+ font-size: 0.65em;
946
+ color: var(--muted);
947
+ font-weight: 400;
948
+ }
949
+
950
+ .booking-widget-modal .room-grid .room-card-desc {
951
+ font-size: 0.8em;
952
+ color: var(--muted);
953
+ line-height: 1.45;
954
+ margin: 0;
955
+ display: -webkit-box;
956
+ -webkit-line-clamp: 4;
957
+ -webkit-box-orient: vertical;
958
+ overflow: hidden;
959
+ }
960
+
961
+ .booking-widget-modal .room-grid .room-card-meta {
962
+ display: flex;
963
+ align-items: center;
964
+ gap: 1em;
965
+ font-size: 0.75em;
966
+ color: var(--muted);
967
+ margin: 0;
968
+ }
969
+
970
+ .booking-widget-modal .room-grid .room-card-meta span {
971
+ display: inline-flex;
972
+ align-items: center;
973
+ gap: 0.35em;
974
+ }
975
+
976
+ .booking-widget-modal .room-grid .room-card-meta .icon {
977
+ opacity: 0.85;
978
+ flex-shrink: 0;
979
+ }
980
+
981
+ .booking-widget-modal .room-grid .amenity-tags {
982
+ display: flex;
983
+ flex-wrap: wrap;
984
+ gap: 0.4em;
985
+ margin-top: 0.25em;
986
+ }
987
+
988
+ .booking-widget-modal .room-grid .amenity-tag {
989
+ font-size: 0.65em;
990
+ text-transform: uppercase;
991
+ letter-spacing: 0.06em;
992
+ padding: 0.3em 0.6em;
993
+ border-radius: 999px;
994
+ background: hsl(30, 8%, 18%);
995
+ color: var(--muted);
996
+ border: 1px solid var(--border);
997
+ }
998
+
999
+ .booking-widget-modal .amenity-tags {
1000
+ display: flex;
1001
+ flex-wrap: wrap;
1002
+ gap: 0.35em;
1003
+ }
1004
+
1005
+ .booking-widget-modal .amenity-tag {
1006
+ font-size: 0.55em;
1007
+ text-transform: uppercase;
1008
+ letter-spacing: 0.15em;
1009
+ padding: 0.25em 0.5em;
1010
+ border-radius: 0.25em;
1011
+ background: var(--secondary);
1012
+ color: var(--secondary-fg);
1013
+ }
1014
+
1015
+ .booking-widget-modal .policy-info-icon {
1016
+ display: inline-flex;
1017
+ align-items: center;
1018
+ justify-content: center;
1019
+ color: var(--muted);
1020
+ cursor: help;
1021
+ flex-shrink: 0;
1022
+ }
1023
+ .booking-widget-modal .policy-info-icon:hover {
1024
+ color: var(--fg);
1025
+ }
1026
+
1027
+ /* ===== Rate Step: one card for room summary + rate list ===== */
1028
+ .booking-widget-modal .rate-step-card {
1029
+ border: 1px solid var(--border);
1030
+ border-radius: var(--radius);
1031
+ background: var(--card);
1032
+ max-width: 40em;
1033
+ margin: 0 auto 1.5em;
1034
+ overflow: hidden;
1035
+ }
1036
+
1037
+ .booking-widget-modal .rate-step-card .rate-step-room-summary {
1038
+ border: none;
1039
+ border-radius: 0;
1040
+ margin: 0;
1041
+ border-bottom: 1px solid var(--border);
1042
+ }
1043
+
1044
+ .booking-widget-modal .rate-step-card .rate-list {
1045
+ margin: 0;
1046
+ padding: 1em;
1047
+ gap: 1em;
1048
+ }
1049
+
1050
+ /* ===== Rate Step: selected room summary (inside card) ===== */
1051
+ .booking-widget-modal .rate-step-room-summary {
1052
+ display: flex;
1053
+ gap: 1.25em;
1054
+ padding: 1em;
1055
+ margin-bottom: 0;
1056
+ border-radius: var(--radius);
1057
+ border: 1px solid var(--border);
1058
+ background: var(--card);
1059
+ text-align: left;
1060
+ max-width: 40em;
1061
+ margin-left: auto;
1062
+ margin-right: auto;
1063
+ }
1064
+
1065
+ .booking-widget-modal .rate-step-card .rate-step-room-summary {
1066
+ max-width: none;
1067
+ margin-left: 0;
1068
+ margin-right: 0;
1069
+ }
1070
+
1071
+ .booking-widget-modal .rate-step-room-summary-image {
1072
+ flex-shrink: 0;
1073
+ width: 7em;
1074
+ height: 5em;
1075
+ border-radius: var(--radius);
1076
+ object-fit: cover;
1077
+ background: var(--input-bg);
1078
+ }
1079
+
1080
+ .booking-widget-modal .rate-step-room-summary-body {
1081
+ flex: 1;
1082
+ min-width: 0;
1083
+ }
1084
+
1085
+ .booking-widget-modal .rate-step-room-summary-name {
1086
+ font-family: var(--font-serif);
1087
+ font-size: 1.1em;
1088
+ font-weight: 600;
1089
+ color: var(--fg);
1090
+ margin-bottom: 0.35em;
1091
+ }
1092
+
1093
+ .booking-widget-modal .rate-step-room-summary-desc {
1094
+ font-size: 0.8em;
1095
+ color: var(--muted);
1096
+ line-height: 1.4;
1097
+ margin-bottom: 0.5em;
1098
+ display: -webkit-box;
1099
+ -webkit-line-clamp: 3;
1100
+ -webkit-box-orient: vertical;
1101
+ overflow: hidden;
1102
+ }
1103
+
1104
+ .booking-widget-modal .rate-step-room-summary-meta {
1105
+ display: flex;
1106
+ flex-wrap: wrap;
1107
+ align-items: center;
1108
+ gap: 1em;
1109
+ font-size: 0.75em;
1110
+ color: var(--muted);
1111
+ }
1112
+
1113
+ .booking-widget-modal .rate-step-room-summary-meta span {
1114
+ display: inline-flex;
1115
+ align-items: center;
1116
+ gap: 0.35em;
1117
+ }
1118
+
1119
+ /* ===== Rate Cards ===== */
1120
+ .booking-widget-modal .rate-list {
1121
+ display: flex;
1122
+ flex-direction: column;
1123
+ gap: 1em;
1124
+ max-width: 40em;
1125
+ margin: 0 auto;
1126
+ }
1127
+
1128
+ .booking-widget-modal .rate-step-card .rate-card {
1129
+ border-radius: var(--radius);
1130
+ }
1131
+
1132
+ .booking-widget-modal .rate-card {
1133
+ width: 100%;
1134
+ text-align: left;
1135
+ padding: 1em;
1136
+ border-radius: var(--radius);
1137
+ border: 1px solid var(--border);
1138
+ background: var(--card);
1139
+ cursor: pointer;
1140
+ transition: border-color 0.3s;
1141
+ position: relative;
1142
+ /* overflow: hidden; */
1143
+ }
1144
+
1145
+ .booking-widget-modal .rate-card:hover {
1146
+ border-color: hsl(38, 60%, 55%, 0.3);
1147
+ }
1148
+
1149
+ .booking-widget-modal .rate-card.selected {
1150
+ border-color: var(--primary);
1151
+ box-shadow: 0 0 0 1px hsl(38, 60%, 55%, 0.3);
1152
+ }
1153
+
1154
+ .booking-widget-modal .rate-badge {
1155
+ display: none;
1156
+ position: absolute;
1157
+ top: 0;
1158
+ right: 0;
1159
+ padding: 0.25em 0.75em;
1160
+ font-size: 0.55em;
1161
+ text-transform: uppercase;
1162
+ letter-spacing: 0.15em;
1163
+ background: var(--primary);
1164
+ color: var(--primary-fg);
1165
+ border-bottom-left-radius: 0.5em;
1166
+ }
1167
+
1168
+ .booking-widget-modal .rate-top {
1169
+ display: flex;
1170
+ justify-content: space-between;
1171
+ align-items: flex-start;
1172
+ gap: 1em;
1173
+ }
1174
+
1175
+ .booking-widget-modal .rate-top-left {
1176
+ display: flex;
1177
+ flex-wrap: wrap;
1178
+ align-items: center;
1179
+ gap: 0.5em 0.75em;
1180
+ flex: 1;
1181
+ min-width: 0;
1182
+ }
1183
+
1184
+ .booking-widget-modal .rate-radio {
1185
+ width: 1.25em;
1186
+ height: 1.25em;
1187
+ border-radius: 50%;
1188
+ border: 2px solid var(--border);
1189
+ display: flex;
1190
+ align-items: center;
1191
+ justify-content: center;
1192
+ flex-shrink: 0;
1193
+ margin-top: 0.15em;
1194
+ transition: border-color 0.2s, background 0.2s;
1195
+ }
1196
+
1197
+ .booking-widget-modal .rate-card.selected .rate-radio {
1198
+ border-color: var(--primary);
1199
+ background: var(--primary);
1200
+ }
1201
+
1202
+ .booking-widget-modal .rate-radio-dot {
1203
+ width: 0.5em;
1204
+ height: 0.5em;
1205
+ border-radius: 50%;
1206
+ background: var(--primary-fg);
1207
+ display: none;
1208
+ }
1209
+
1210
+ .booking-widget-modal .rate-card.selected .rate-radio-dot {
1211
+ display: block;
1212
+ }
1213
+
1214
+ .booking-widget-modal .rate-name {
1215
+ font-family: var(--font-serif);
1216
+ font-size: 1.05em;
1217
+ }
1218
+
1219
+ .booking-widget-modal .rate-desc {
1220
+ font-size: 0.8em;
1221
+ color: var(--muted);
1222
+ margin: 0.35em 0 0.5em 2.25em;
1223
+ }
1224
+
1225
+ .booking-widget-modal .rate-card .rate-benefits {
1226
+ display: inline-flex;
1227
+ flex-wrap: wrap;
1228
+ gap: 0.35em;
1229
+ margin: 0;
1230
+ }
1231
+
1232
+ .booking-widget-modal .rate-price {
1233
+ text-align: right;
1234
+ flex-shrink: 0;
1235
+ }
1236
+
1237
+ .booking-widget-modal .rate-price strong {
1238
+ font-family: var(--font-serif);
1239
+ /* color: var(--primary); */
1240
+ font-size: 1.25em;
1241
+ }
1242
+
1243
+ .booking-widget-modal .rate-price small {
1244
+ display: block;
1245
+ font-size: 0.65em;
1246
+ color: var(--muted);
1247
+ }
1248
+
1249
+ /* ===== Checkout ===== */
1250
+ .booking-widget-modal .checkout-grid {
1251
+ display: grid;
1252
+ grid-template-columns: 1fr;
1253
+ gap: 2em;
1254
+ }
1255
+
1256
+ @media (min-width: 768px) {
1257
+ .booking-widget-modal .checkout-grid {
1258
+ grid-template-columns: 3fr 2fr;
1259
+ }
1260
+ }
1261
+
1262
+ .booking-widget-modal .form-row {
1263
+ display: grid;
1264
+ grid-template-columns: 1fr 1fr;
1265
+ gap: 1em;
1266
+ }
1267
+
1268
+ .booking-widget-modal .form-group {
1269
+ margin-bottom: 1em;
1270
+ }
1271
+
1272
+ .booking-widget-modal .summary-box {
1273
+ border: 1px solid var(--border);
1274
+ border-radius: var(--radius);
1275
+ background: var(--card);
1276
+ padding: 1.25em;
1277
+ }
1278
+
1279
+ .booking-widget-modal .summary-box h3 {
1280
+ font-size: 0.65em;
1281
+ text-transform: uppercase;
1282
+ letter-spacing: 0.2em;
1283
+ color: var(--muted);
1284
+ padding-bottom: 0.5em;
1285
+ border-bottom: 1px solid var(--border);
1286
+ margin-bottom: 1em;
1287
+ font-family: var(--font-sans);
1288
+ font-weight: 500;
1289
+ }
1290
+
1291
+ .booking-widget-modal .summary-row {
1292
+ display: flex;
1293
+ justify-content: space-between;
1294
+ font-size: 0.8em;
1295
+ margin-bottom: 0.5em;
1296
+ color: var(--muted);
1297
+ }
1298
+
1299
+ .booking-widget-modal .summary-row span:last-child {
1300
+ color: var(--fg);
1301
+ }
1302
+
1303
+ .booking-widget-modal .summary-fees {
1304
+ margin-top: 0.75em;
1305
+ padding-top: 0.75em;
1306
+ border-top: 1px solid var(--border);
1307
+ }
1308
+
1309
+ .booking-widget-modal .summary-fees-heading {
1310
+ font-size: 0.65em;
1311
+ text-transform: uppercase;
1312
+ letter-spacing: 0.15em;
1313
+ color: var(--muted);
1314
+ margin-bottom: 0.25em;
1315
+ font-family: var(--font-sans);
1316
+ font-weight: 500;
1317
+ }
1318
+
1319
+ .booking-widget-modal .summary-fees-note {
1320
+ font-size: 0.7em;
1321
+ color: var(--muted);
1322
+ margin-bottom: 0.5em;
1323
+ font-style: italic;
1324
+ }
1325
+
1326
+ .booking-widget-modal .summary-fees-list {
1327
+ display: flex;
1328
+ flex-direction: column;
1329
+ gap: 0.35em;
1330
+ }
1331
+
1332
+ .booking-widget-modal .summary-row--fee {
1333
+ margin-bottom: 0;
1334
+ font-size: 0.75em;
1335
+ padding-left: 0.25em;
1336
+ border-left: 2px solid var(--border);
1337
+ }
1338
+
1339
+ .booking-widget-modal .summary-row--fee .summary-fee-label {
1340
+ display: inline-flex;
1341
+ align-items: center;
1342
+ gap: 0.35em;
1343
+ flex-wrap: wrap;
1344
+ }
1345
+
1346
+ .booking-widget-modal .summary-fee-badge {
1347
+ font-size: 0.6em;
1348
+ text-transform: uppercase;
1349
+ letter-spacing: 0.05em;
1350
+ padding: 0.15em 0.4em;
1351
+ border-radius: 999px;
1352
+ background: var(--border);
1353
+ color: var(--muted);
1354
+ font-style: normal;
1355
+ font-weight: 500;
1356
+ }
1357
+
1358
+ .booking-widget-modal .summary-fee-badge--excluded {
1359
+ background: transparent;
1360
+ border: 1px solid var(--border);
1361
+ color: var(--muted);
1362
+ }
1363
+
1364
+ /* Stripe Payment Element container (mount point for host app) */
1365
+ .booking-widget-modal .checkout-payment-section {
1366
+ margin-top: 1em;
1367
+ padding-top: 1em;
1368
+ border-top: 1px solid var(--border);
1369
+ }
1370
+
1371
+ .booking-widget-modal .booking-widget-payment-element {
1372
+ min-height: 2.5em;
1373
+ }
1374
+
1375
+ /* ===== Payment Step (dedicated UI) ===== */
1376
+ .booking-widget-modal .payment-step {
1377
+ max-width: 56em;
1378
+ margin: 0 auto;
1379
+ }
1380
+
1381
+ .booking-widget-modal .payment-step-back {
1382
+ display: inline-flex;
1383
+ align-items: center;
1384
+ gap: 0.35em;
1385
+ font-size: 0.8em;
1386
+ color: var(--muted);
1387
+ background: none;
1388
+ border: none;
1389
+ cursor: pointer;
1390
+ padding: 0.25em 0;
1391
+ margin-bottom: 1em;
1392
+ font-family: inherit;
1393
+ transition: color 0.2s;
1394
+ }
1395
+
1396
+ .booking-widget-modal .payment-step-back:hover {
1397
+ color: var(--fg);
1398
+ }
1399
+
1400
+ .booking-widget-modal .payment-step .checkout-grid {
1401
+ align-items: start;
1402
+ }
1403
+
1404
+ .booking-widget-modal .payment-step-form {
1405
+ background: var(--card);
1406
+ border: 1px solid var(--border);
1407
+ border-radius: var(--radius);
1408
+ padding: 1.5em;
1409
+ }
1410
+
1411
+ .booking-widget-modal .payment-step-form .checkout-payment-section {
1412
+ margin-top: 0;
1413
+ padding-top: 0;
1414
+ border-top: none;
1415
+ }
1416
+
1417
+ .booking-widget-modal .payment-step-form .checkout-payment-section h3 {
1418
+ margin-bottom: 0.75em;
1419
+ }
1420
+
1421
+ .booking-widget-modal .payment-step-form .booking-widget-payment-element {
1422
+ min-height: 3em;
1423
+ }
1424
+
1425
+ .booking-widget-modal .payment-step-summary {
1426
+ position: sticky;
1427
+ top: 1em;
1428
+ background: linear-gradient(145deg, var(--card) 0%, hsl(30, 8%, 10%) 100%);
1429
+ border: 1px solid var(--border);
1430
+ border-radius: var(--radius);
1431
+ padding: 1.5em;
1432
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.25);
1433
+ }
1434
+
1435
+ .booking-widget-modal .payment-step-summary h3 {
1436
+ font-size: 0.65em;
1437
+ text-transform: uppercase;
1438
+ letter-spacing: 0.2em;
1439
+ color: var(--muted);
1440
+ margin-bottom: 1em;
1441
+ padding-bottom: 0.75em;
1442
+ border-bottom: 1px solid var(--border);
1443
+ font-family: var(--font-sans);
1444
+ font-weight: 600;
1445
+ }
1446
+
1447
+ .booking-widget-modal .payment-step-summary .payment-total-row {
1448
+ display: flex;
1449
+ justify-content: space-between;
1450
+ align-items: baseline;
1451
+ gap: 1em;
1452
+ margin-bottom: 1.25em;
1453
+ }
1454
+
1455
+ .booking-widget-modal .payment-step-summary .payment-total-label {
1456
+ font-size: 0.75em;
1457
+ text-transform: uppercase;
1458
+ letter-spacing: 0.1em;
1459
+ color: var(--muted);
1460
+ font-weight: 500;
1461
+ }
1462
+
1463
+ .booking-widget-modal .payment-step-summary .payment-total-amount {
1464
+ font-family: var(--font-serif);
1465
+ font-size: 1.75em;
1466
+ font-weight: 600;
1467
+ color: var(--primary);
1468
+ letter-spacing: 0.02em;
1469
+ }
1470
+
1471
+ .booking-widget-modal .payment-step-summary .btn-primary {
1472
+ max-width: 100%;
1473
+ margin: 0;
1474
+ padding: 1em 1.25em;
1475
+ font-weight: 600;
1476
+ letter-spacing: 0.03em;
1477
+ display: inline-flex;
1478
+ align-items: center;
1479
+ justify-content: center;
1480
+ gap: 0.5em;
1481
+ }
1482
+
1483
+ .booking-widget-modal .payment-step-summary .secure-note {
1484
+ margin-top: 1em;
1485
+ display: flex;
1486
+ align-items: center;
1487
+ justify-content: center;
1488
+ gap: 0.5em;
1489
+ font-size: 0.75em;
1490
+ }
1491
+
1492
+ .booking-widget-modal .summary-total {
1493
+ display: flex;
1494
+ justify-content: space-between;
1495
+ align-items: baseline;
1496
+ border-top: 1px solid var(--border);
1497
+ padding-top: 0.75em;
1498
+ margin-top: 0.75em;
1499
+ }
1500
+
1501
+ .booking-widget-modal .summary-total-label {
1502
+ font-size: 0.65em;
1503
+ text-transform: uppercase;
1504
+ letter-spacing: 0.15em;
1505
+ color: var(--muted);
1506
+ }
1507
+
1508
+ .booking-widget-modal .summary-total-price {
1509
+ font-family: var(--font-serif);
1510
+ font-size: 1.5em;
1511
+ color: var(--primary);
1512
+ }
1513
+
1514
+ .booking-widget-modal .secure-note {
1515
+ text-align: center;
1516
+ font-size: 0.7em;
1517
+ color: var(--muted);
1518
+ margin-top: 0.75em;
1519
+ }
1520
+
1521
+ /* ===== Confirmation ===== */
1522
+ .booking-widget-modal .confirmation {
1523
+ text-align: center;
1524
+ max-width: 28em;
1525
+ margin: 0 auto;
1526
+ }
1527
+
1528
+ .booking-widget-modal .confirmation-loader {
1529
+ display: flex;
1530
+ flex-direction: column;
1531
+ align-items: center;
1532
+ justify-content: center;
1533
+ gap: 1.25em;
1534
+ padding: 2.5em 1em;
1535
+ min-height: 12em;
1536
+ }
1537
+
1538
+ .booking-widget-modal .confirmation-loader-spinner {
1539
+ width: 2.5em;
1540
+ height: 2.5em;
1541
+ border: 3px solid var(--border);
1542
+ border-top-color: var(--primary);
1543
+ border-radius: 50%;
1544
+ animation: booking-widget-spin 0.8s linear infinite;
1545
+ }
1546
+
1547
+ @keyframes booking-widget-spin {
1548
+ to { transform: rotate(360deg); }
1549
+ }
1550
+
1551
+ .booking-widget-modal .confirm-icon {
1552
+ font-size: 3.5em;
1553
+ color: var(--primary);
1554
+ margin-bottom: 1em;
1555
+ }
1556
+
1557
+ .booking-widget-modal .confirm-box {
1558
+ border: 1px solid var(--border);
1559
+ border-radius: var(--radius);
1560
+ background: var(--card);
1561
+ padding: 1.5em;
1562
+ text-align: left;
1563
+ margin: 1.5em 0;
1564
+ }
1565
+
1566
+ .booking-widget-modal .confirm-header {
1567
+ display: flex;
1568
+ justify-content: space-between;
1569
+ align-items: center;
1570
+ padding-bottom: 0.75em;
1571
+ border-bottom: 1px solid var(--border);
1572
+ margin-bottom: 1em;
1573
+ }
1574
+
1575
+ .booking-widget-modal .confirm-header small {
1576
+ font-size: 0.65em;
1577
+ text-transform: uppercase;
1578
+ letter-spacing: 0.15em;
1579
+ color: var(--muted);
1580
+ }
1581
+
1582
+ .booking-widget-modal .confirm-header strong {
1583
+ font-family: var(--font-serif);
1584
+ color: var(--primary);
1585
+ font-size: 1.1em;
1586
+ }
1587
+
1588
+ .booking-widget-modal .confirm-booking-id {
1589
+ display: block;
1590
+ margin-top: 0;
1591
+ }
1592
+
1593
+ .booking-widget-modal .confirm-booking-id-label {
1594
+ display: block;
1595
+ font-size: 0.65em;
1596
+ text-transform: uppercase;
1597
+ letter-spacing: 0.12em;
1598
+ color: var(--muted);
1599
+ margin-bottom: 0.35em;
1600
+ }
1601
+
1602
+ .booking-widget-modal .confirm-booking-id-value {
1603
+ display: block;
1604
+ font-family: var(--font-sans);
1605
+ font-size: 1.1em;
1606
+ font-weight: 600;
1607
+ color: var(--primary);
1608
+ letter-spacing: 0.02em;
1609
+ }
1610
+
1611
+ .booking-widget-modal .confirm-detail {
1612
+ display: flex;
1613
+ gap: 0.75em;
1614
+ margin-bottom: 0.75em;
1615
+ font-size: 0.85em;
1616
+ }
1617
+
1618
+ .booking-widget-modal .confirm-detail-icon {
1619
+ color: var(--primary);
1620
+ flex-shrink: 0;
1621
+ }
1622
+
1623
+ .booking-widget-modal .confirm-detail-content {
1624
+ display: flex;
1625
+ flex-direction: column;
1626
+ gap: 0.2em;
1627
+ min-width: 0;
1628
+ }
1629
+
1630
+ .booking-widget-modal .confirm-detail-content > span:first-child {
1631
+ font-weight: 500;
1632
+ color: var(--fg);
1633
+ }
1634
+
1635
+ .booking-widget-modal .confirm-detail-content small {
1636
+ display: block;
1637
+ font-size: 0.75em;
1638
+ color: var(--muted);
1639
+ font-weight: normal;
1640
+ line-height: 1.35;
1641
+ }
1642
+
1643
+ .booking-widget-modal .confirm-detail-rate-line {
1644
+ font-size: 0.8em;
1645
+ color: var(--muted);
1646
+ margin-top: 0.15em;
1647
+ }
1648
+
1649
+ .booking-widget-modal .confirm-detail-text small {
1650
+ display: block;
1651
+ font-size: 0.7em;
1652
+ color: var(--muted);
1653
+ }
1654
+
1655
+ /* ===== Icon Styles ===== */
1656
+ .booking-widget-modal .icon {
1657
+ display: inline-flex;
1658
+ align-items: center;
1659
+ justify-content: center;
1660
+ vertical-align: middle;
1661
+ flex-shrink: 0;
1662
+ color: var(--fg);
1663
+ background: transparent;
1664
+ line-height: 0;
1665
+ }
1666
+
1667
+ .booking-widget-modal .icon svg {
1668
+ width: 100%;
1669
+ height: 100%;
1670
+ min-width: 1em;
1671
+ min-height: 1em;
1672
+ stroke: currentColor;
1673
+ fill: none !important;
1674
+ display: block;
1675
+ overflow: visible;
1676
+ stroke-width: 2;
1677
+ stroke-linecap: round;
1678
+ stroke-linejoin: round;
1679
+ }
1680
+
1681
+ /* Force all SVG child elements to have no fill and use currentColor */
1682
+ .booking-widget-modal .icon svg * {
1683
+ fill: none !important;
1684
+ stroke: currentColor;
1685
+ }
1686
+
1687
+ .booking-widget-modal .date-trigger .icon {
1688
+ margin-right: 0.25em;
1689
+ }
1690
+
1691
+ .booking-widget-modal .form-label .icon {
1692
+ margin-right: 0.25em;
1693
+ }
1694
+
1695
+ .booking-widget-modal .room-card-meta .icon {
1696
+ margin-right: 0.25em;
1697
+ }
1698
+
1699
+ .booking-widget-modal .confirm-detail-icon {
1700
+ display: inline-flex;
1701
+ align-items: center;
1702
+ justify-content: center;
1703
+ flex-shrink: 0;
1704
+ }
1705
+
1706
+ .booking-widget-modal .confirm-detail-icon svg {
1707
+ width: 100%;
1708
+ height: 100%;
1709
+ stroke: currentColor;
1710
+ fill: none;
1711
+ }