@code-collective/booking-widget 1.0.4 → 1.0.7
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.
- package/README.md +42 -3
- package/dist/booking-widget.css +1 -1
- package/dist/booking-widget.js +1870 -2040
- package/dist/booking-widget.min.css +1 -1
- package/dist/booking-widget.min.js +9 -5
- package/dist/booking-widget.umd.cjs +2 -2
- package/package.json +1 -1
- package/src/lib/CartBar.svelte +16 -0
- package/src/lib/CartBarView.svelte +1 -1
- package/src/lib/CartOverviewButton.svelte +28 -36
- package/src/lib/Checkout.svelte +55 -28
- package/src/lib/CheckoutModal.svelte +93 -16
- package/src/lib/ContactForm.svelte +15 -6
- package/src/lib/EditBookingView.svelte +49 -4
- package/src/lib/PaymentPage.svelte +30 -25
- package/src/lib/TicketConfigurator.svelte +91 -39
- package/src/lib/api.ts +12 -3
- package/src/lib/app.css +12 -4
- package/src/lib/cart-manager.ts +14 -0
- package/src/lib/config.ts +11 -8
- package/src/lib/elements/env.ts +0 -1
- package/src/lib/elements/register.ts +16 -3
- package/src/lib/index.ts +20 -8
- package/src/lib/peach-sdk.ts +40 -0
- package/src/lib/fake-api.ts +0 -282
- package/src/lib/mock-data.ts +0 -241
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ The script auto-wires the elements together:
|
|
|
42
42
|
| `product-id` | Yes | OCTO product ID |
|
|
43
43
|
| `checkout-key` | Yes | Public key identifying the supplier |
|
|
44
44
|
| `wizard-pages` | No | JSON string for wizard step ordering |
|
|
45
|
-
| `auto-select-single-time-slot` | No | Boolean. Skips time picker if only one slot |
|
|
45
|
+
| `auto-select-single-time-slot` | No | Boolean. Skips the time picker if only one slot |
|
|
46
46
|
| `cancelable` | No | Boolean. Shows a cancel button |
|
|
47
47
|
| `no-auto-checkout` | No | Boolean. Prevents auto-opening checkout on add |
|
|
48
48
|
| `on-cart-change` | No | Name of a global JS function to call on add |
|
|
@@ -59,7 +59,9 @@ The script auto-wires the elements together:
|
|
|
59
59
|
| Attribute | Required | Description |
|
|
60
60
|
|---|---|---|
|
|
61
61
|
| `checkout-key` | Yes | Public key identifying the supplier |
|
|
62
|
-
| `wizard-pages` | No | JSON string for wizard step ordering
|
|
62
|
+
| `wizard-pages` | No | JSON string for wizard step ordering |
|
|
63
|
+
| `edit-pages` | No | JSON string for how fields are grouped in the cart edit view |
|
|
64
|
+
| `auto-select-single-time-slot` | No | Boolean. Skips the time picker if only one slot |
|
|
63
65
|
|
|
64
66
|
### Global options
|
|
65
67
|
|
|
@@ -71,6 +73,7 @@ Set `window.bwOptions` before the widget script loads:
|
|
|
71
73
|
shouldBottomCloseOnModal: true,
|
|
72
74
|
autoSelectSingleTimeSlot: false,
|
|
73
75
|
wizardPages: '',
|
|
76
|
+
editPages: '',
|
|
74
77
|
};
|
|
75
78
|
</script>
|
|
76
79
|
<script src="https://cdn.jsdelivr.net/npm/@code-collective/booking-widget@1.0.2/dist/booking-widget.min.js"
|
|
@@ -81,8 +84,9 @@ Set `window.bwOptions` before the widget script loads:
|
|
|
81
84
|
| Option | Default | Description |
|
|
82
85
|
|---|---|---|
|
|
83
86
|
| `shouldBottomCloseOnModal` | `true` | Hide bar carts when checkout modal opens |
|
|
84
|
-
| `autoSelectSingleTimeSlot` | `false` | Auto-select when only one
|
|
87
|
+
| `autoSelectSingleTimeSlot` | `false` | Auto-select (and hide) the time picker when only one slot |
|
|
85
88
|
| `wizardPages` | `''` | JSON wizard step ordering for all elements |
|
|
89
|
+
| `editPages` | `''` | JSON field grouping for the checkout edit view (`bw-checkout` only) |
|
|
86
90
|
|
|
87
91
|
### Window events
|
|
88
92
|
|
|
@@ -97,6 +101,7 @@ window.addEventListener('bw:order-confirmed', (e) => {
|
|
|
97
101
|
| Event | Detail | When |
|
|
98
102
|
|---|---|---|
|
|
99
103
|
| `bw:cart-change` | `{ itemCount, cartItemId, totalFormatted }` | Item added to cart |
|
|
104
|
+
| `bw:cart-updated` | `{ cart }` (full `CheckoutCartDetailDto`, or `null` if empty) | Cart changed - add, edit, or remove. Use this to build a custom cart summary (item count, remaining time via `cart.absoluteExpiresAt`, item details via `cart.items`) instead of `bw-cart` |
|
|
100
105
|
| `bw:order-confirmed` | `{ cartToken, value, currency }` | Payment completed |
|
|
101
106
|
| `bw:modal-open` | -- | Checkout modal opens |
|
|
102
107
|
| `bw:modal-close` | -- | Checkout modal closes |
|
|
@@ -140,6 +145,7 @@ const widget = await mountConfigurator(document.getElementById('configurator'),
|
|
|
140
145
|
| `wizardPages` | No | Wizard step ordering |
|
|
141
146
|
| `autoSelectSingleTimeSlot` | No | Skip time picker if single slot |
|
|
142
147
|
| `onCartChange` | No | Callback: `({ itemCount, cartItemId, totalFormatted })` |
|
|
148
|
+
| `onCartUpdated` | No | Callback: `(cart: CheckoutCartDetailDto \| null)`, fires on any cart change - see `bw:cart-updated` above |
|
|
143
149
|
| `onCancel` | No | Callback when cancelled |
|
|
144
150
|
|
|
145
151
|
**`mountCheckout(target, config)`** — Cart review, contact form, payment
|
|
@@ -150,6 +156,7 @@ const widget = await mountConfigurator(document.getElementById('configurator'),
|
|
|
150
156
|
| `apiBaseUrl` | No | Checkout API URL |
|
|
151
157
|
| `onClose` | No | Callback when closed |
|
|
152
158
|
| `onOrderConfirmed` | No | Callback: `({ cartToken, value, currency })` |
|
|
159
|
+
| `onCartUpdated` | No | Callback: `(cart: CheckoutCartDetailDto \| null)`, fires on any cart change - see `bw:cart-updated` above |
|
|
153
160
|
|
|
154
161
|
**`mountCartOverview(target, config)`** — Cart summary
|
|
155
162
|
|
|
@@ -159,6 +166,7 @@ const widget = await mountConfigurator(document.getElementById('configurator'),
|
|
|
159
166
|
| `apiBaseUrl` | No | Checkout API URL |
|
|
160
167
|
| `display` | No | `bar` or `button` |
|
|
161
168
|
| `onCheckout` | No | Callback when checkout clicked |
|
|
169
|
+
| `onCartUpdated` | No | Callback: `(cart: CheckoutCartDetailDto \| null)`, fires on any cart change - see `bw:cart-updated` above |
|
|
162
170
|
|
|
163
171
|
All mount functions return `Promise<{ destroy(): void }>`.
|
|
164
172
|
|
|
@@ -286,6 +294,37 @@ If `wizard-pages` is omitted, the default is `option-first`.
|
|
|
286
294
|
|
|
287
295
|
In the configurator, pages are shown as a step-by-step wizard with dot indicators. In the checkout edit view, pages are shown as collapsible accordion sections with a summary of the selected values when collapsed.
|
|
288
296
|
|
|
297
|
+
### Edit pages (checkout accordion grouping)
|
|
298
|
+
|
|
299
|
+
`edit-pages` controls the same thing as `wizard-pages` — which widgets appear together, and in what order — but for the collapsible accordion shown when editing an item already in the cart (`<bw-checkout>` only; it has no effect on `<bw-configurator>`'s step wizard). It accepts the same two shapes as `wizard-pages`: a preset name (`"option-first"` / `"date-first"`) or a custom JSON array of `{ "title", "widgets" }` objects.
|
|
300
|
+
|
|
301
|
+
```html
|
|
302
|
+
<bw-checkout checkout-key="..." wizard-pages="date-first" edit-pages="date-first"></bw-checkout>
|
|
303
|
+
|
|
304
|
+
<bw-checkout checkout-key="..."
|
|
305
|
+
edit-pages='[
|
|
306
|
+
{"title":"Age, Date & Time","widgets":["age-category","date","time"]},
|
|
307
|
+
{"title":"Option","widgets":["option"]},
|
|
308
|
+
{"title":"Pickup","widgets":["pickup"]}
|
|
309
|
+
]'>
|
|
310
|
+
</bw-checkout>
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
If `edit-pages` is omitted, it's derived from `wizard-pages`: age/date/time are grouped into one accordion section, positioned first for `date-first` and second (after Option) for `option-first`. If `wizard-pages` is itself a custom JSON array rather than a named preset, there's no sensible grouping to infer, so `edit-pages` just mirrors it directly — set `edit-pages` explicitly in that case if you want different grouping in the edit view.
|
|
314
|
+
|
|
315
|
+
While an item is being edited, changing a field can invalidate an earlier selection (e.g. increasing ticket quantity beyond the previously-selected time slot's vacancies resets the date/time). An invalidated accordion section is shown with a red border and a "Changes made require new configuration" summary — even while collapsed — until it's reselected. Fields that don't need to change are preserved automatically (e.g. an already-chosen pickup point stays selected across a date change, since pickup is a property of the option, not the date/time).
|
|
316
|
+
|
|
317
|
+
### Hiding the time selector
|
|
318
|
+
|
|
319
|
+
Some products only ever offer a single time slot per day (or an all-day slot with no specific time). For these, showing a time picker step with only one option to click is pointless friction. Set `auto-select-single-time-slot` to skip it:
|
|
320
|
+
|
|
321
|
+
```html
|
|
322
|
+
<bw-configurator product-id="..." checkout-key="..." auto-select-single-time-slot></bw-configurator>
|
|
323
|
+
<bw-checkout checkout-key="..." auto-select-single-time-slot></bw-checkout>
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
When enabled, and the selected date has exactly one available time slot, that slot is selected automatically and the time-picker widget is hidden entirely — the flow moves straight from date to the next widget (option or pickup, depending on `wizard-pages`). A date with a genuine all-day slot (`allDay: true` from the availability API) always behaves this way, regardless of this flag. Set it on both `<bw-configurator>` and `<bw-checkout>` (or via `window.bwOptions.autoSelectSingleTimeSlot`, which wires it onto every element automatically) so the behavior is consistent between adding an item and editing one already in the cart.
|
|
327
|
+
|
|
289
328
|
## Theming
|
|
290
329
|
|
|
291
330
|
The widget reads CSS custom properties. It automatically picks up site variables (`--header-background`, `--default-font-family`, `--radius`) or can be themed directly:
|
package/dist/booking-widget.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
:root{--bw-color-primary:var(--header-background,#e30613);--bw-color-primary-dark:var(--footer-background,#c00510);--bw-color-primary-light:#e3061314;--bw-color-text:#212121;--bw-color-text-secondary:#757575;--bw-color-border:#e0e0e0;--bw-color-bg:#fff;--bw-color-surface:#f5f5f5;--bw-color-success:#4caf50;--bw-color-error:var(--header-background,#e30613);--bw-font-family:var(--default-font-family,"Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--bw-radius-sm:4px;--bw-radius-md:var(--radius,8px);--bw-radius-lg:12px;--bw-radius-pill:9999px;--bw-transition:.15s ease;--bw-shadow-1:0 1px 3px #0000001a, 0 1px 2px #0000000f;--bw-shadow-2:0 4px 12px #00000014, 0 2px 4px #0000000a;--bw-shadow-3:0 10px 24px #0000001a, 0 4px 8px #0000000a}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--bw-font-family);color:var(--bw-color-text);background:var(--bw-color-bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:3px solid var(--bw-color-border);border-top-color:var(--bw-color-primary);border-radius:50%;width:36px;height:36px;animation:.7s linear infinite spin}.loading-center{flex:1;justify-content:center;align-items:center;min-height:120px;display:flex}.page-header{border-bottom:1px solid var(--bw-color-border);background:var(--bw-color-bg);align-items:center;gap:8px;padding:12px 16px;display:flex}.page-header h2{letter-spacing:-.01em;font-size:18px;font-weight:700}.page-header .spacer{flex:1}.icon-btn{border-radius:var(--bw-radius-pill);width:36px;height:36px;color:var(--bw-color-text);transition:background var(--bw-transition);background:0 0;border:none;justify-content:center;align-items:center;font-size:20px;display:flex}.icon-btn:hover{background:var(--bw-color-surface)}.card{background:var(--bw-color-bg);border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);transition:border-color var(--bw-transition);padding:16px}.card-selectable{cursor:pointer;text-align:left}.card-selectable:hover{border-color:var(--bw-color-text)}.card-selected{border-color:var(--bw-color-text);border-width:2px}.action-bar{border-top:1px solid var(--bw-color-border);background:var(--bw-color-bg);z-index:10;flex-shrink:0;gap:10px;padding:12px 16px;display:flex;position:sticky;bottom:0}.action-bar .btn-secondary{border:1px solid var(--bw-color-border);background:var(--bw-color-bg);height:48px;padding:0 20px}.action-bar .btn-primary{flex:1;height:48px;font-size:16px;font-weight:700;position:relative}.action-bar .btn-primary .arrow{font-size:20px;position:absolute;right:16px}.btn{border-radius:var(--bw-radius-md);transition:background var(--bw-transition), box-shadow var(--bw-transition), opacity var(--bw-transition);border:none;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:14px;font-weight:600;display:inline-flex}.btn:disabled{opacity:.45;cursor:default;pointer-events:none}.btn-primary{background:var(--bw-color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--bw-color-primary-dark);box-shadow:var(--bw-shadow-1)}.btn-secondary{background:var(--bw-color-bg);color:var(--bw-color-text)}.btn-secondary:hover:not(:disabled){background:var(--bw-color-border)}.btn-outline{border:1px solid var(--bw-color-primary);color:var(--bw-color-primary);background:0 0}.btn-outline:hover:not(:disabled){background:var(--bw-color-primary-light)}.btn-split{justify-content:space-between;padding:0 20px}.input{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-md);width:100%;transition:border-color var(--bw-transition), box-shadow var(--bw-transition);outline:none;padding:10px 12px;font-size:14px}.input:focus{border-color:var(--bw-color-primary);box-shadow:0 0 0 3px var(--bw-color-primary-light)}.input-error{border-color:var(--bw-color-error);background:#fef2f2}.input-error:focus{box-shadow:0 0 0 3px #e306131f}.section-title{color:var(--bw-color-text-secondary);margin-bottom:12px;font-size:14px;font-weight:400}.layout.svelte-idp8p9{align-items:center;gap:12px;display:flex}.text.svelte-idp8p9{flex:1}.heading.svelte-idp8p9{margin-bottom:4px;font-size:15px;font-weight:700}.body.svelte-idp8p9{color:var(--bw-color-text-secondary);font-size:13px;line-height:1.5}.radio.svelte-idp8p9{border:2px solid var(--bw-color-border);border-radius:50%;flex-shrink:0;width:22px;height:22px}.radio-selected.svelte-idp8p9{border-color:var(--bw-color-text);background:var(--bw-color-text)}.pricing.svelte-19wqhng{margin-top:8px;font-size:13px;font-weight:700}.row.svelte-bzhcxd{align-items:center;display:flex}.info.svelte-bzhcxd{flex-direction:column;flex:1;gap:2px;display:flex}.name.svelte-bzhcxd{font-size:15px;font-weight:700}.price.svelte-bzhcxd{color:var(--bw-color-text-secondary);font-size:13px}.stepper.svelte-bzhcxd{align-items:center;gap:4px;display:flex}.step-btn.svelte-bzhcxd{border:1.5px solid var(--bw-color-border);width:40px;height:40px;color:var(--bw-color-primary);transition:background var(--bw-transition), color var(--bw-transition), border-color var(--bw-transition);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex}.step-btn.svelte-bzhcxd:hover:not(:disabled){background:var(--bw-color-primary);color:#fff}.step-btn.svelte-bzhcxd:disabled{opacity:.3;cursor:default}.qty.svelte-bzhcxd{text-align:center;font-variant-numeric:tabular-nums;min-width:32px;font-size:17px;font-weight:700}.calendar.svelte-10gu2tq{width:100%}.header.svelte-10gu2tq{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.month.svelte-10gu2tq{font-size:16px;font-weight:700}.nav-btn.svelte-10gu2tq{border:1.5px solid var(--bw-color-border);width:36px;height:36px;color:var(--bw-color-text);transition:border-color var(--bw-transition);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex}.nav-btn.svelte-10gu2tq:hover{border-color:var(--bw-color-text)}.day-names.svelte-10gu2tq{text-align:center;grid-template-columns:repeat(7,1fr);margin-bottom:8px;display:grid}.day-names.svelte-10gu2tq span:where(.svelte-10gu2tq){color:var(--bw-color-text-secondary);padding:4px 0;font-size:11px;font-weight:700}.grid.svelte-10gu2tq{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.cell.svelte-10gu2tq{border-radius:var(--bw-radius-md);min-height:48px;transition:border-color var(--bw-transition), background var(--bw-transition);background:0 0;border:1.5px solid #0000;flex-direction:column;justify-content:center;align-items:center;padding:4px 2px;font-size:14px;display:flex}.cell.empty.svelte-10gu2tq{pointer-events:none}.cell.available.svelte-10gu2tq{color:var(--bw-color-text);border-color:var(--bw-color-border);font-weight:600}.cell.available.svelte-10gu2tq:hover{border-color:var(--bw-color-text)}.cell.selected.svelte-10gu2tq{border-color:var(--bw-color-text);border-width:2px;font-weight:700}.cell.sold-out.svelte-10gu2tq{color:var(--bw-color-text-secondary);cursor:default;text-decoration:line-through}.cell.unavailable.svelte-10gu2tq{color:#d1d5db;cursor:default}.day-num.svelte-10gu2tq{line-height:1}.day-price.svelte-10gu2tq{color:var(--bw-color-text-secondary);margin-top:2px;font-size:9px;font-weight:600;line-height:1}.selected.svelte-10gu2tq .day-price:where(.svelte-10gu2tq){color:var(--bw-color-text)}.hint.svelte-1hu99a4{text-align:center;color:var(--bw-color-text-secondary);padding:12px;font-size:14px}.slots.svelte-1hu99a4{flex-direction:column;gap:10px;display:flex}.wizard.svelte-9w5z1v{flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.wizard-header.svelte-9w5z1v{border-bottom:1px solid var(--bw-color-border);padding:20px 16px 16px}.wizard-header.svelte-9w5z1v h2:where(.svelte-9w5z1v){font-size:20px;font-weight:800}.page-title-row.svelte-9w5z1v{justify-content:space-between;align-items:center;padding:12px 16px 0;display:flex}.page-title.svelte-9w5z1v{color:var(--bw-color-text);font-size:16px;font-weight:700}.page-dots.svelte-9w5z1v{gap:6px;display:flex}.dot.svelte-9w5z1v{background:var(--bw-color-border);border-radius:50%;width:8px;height:8px}.dot.active.svelte-9w5z1v{background:var(--bw-color-text)}.accordion-section.svelte-9w5z1v{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);background:var(--bw-color-bg);margin-bottom:12px;overflow:hidden}.accordion-section.invalidated.svelte-9w5z1v{border-color:var(--bw-color-error)}.accordion-header.svelte-9w5z1v{cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;width:100%;padding:16px 20px;font-family:inherit;display:flex}.accordion-header-text.svelte-9w5z1v{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.accordion-title.svelte-9w5z1v{letter-spacing:.08em;color:var(--bw-color-text-secondary);font-size:11px;font-weight:700}.accordion-summary.svelte-9w5z1v{color:var(--bw-color-text);font-size:15px;font-weight:600}.accordion-summary.invalidated.svelte-9w5z1v{color:var(--bw-color-error)}.accordion-chevron.svelte-9w5z1v{border-right:2px solid var(--bw-color-text-secondary);border-bottom:2px solid var(--bw-color-text-secondary);flex-shrink:0;width:12px;height:12px;margin-left:12px;transition:transform .15s;transform:rotate(45deg)}.accordion-chevron.open.svelte-9w5z1v{transform:rotate(-135deg)}.accordion-body.svelte-9w5z1v{padding:0 20px 20px}.wizard-body.svelte-9w5z1v{flex:1;padding:16px;overflow-y:auto}.section.svelte-9w5z1v{margin-bottom:24px}.option-list.svelte-9w5z1v,.pickup-list.svelte-9w5z1v,.unit-list.svelte-9w5z1v{flex-direction:column;gap:10px;display:flex}.dialog-backdrop.svelte-9w5z1v{z-index:100;background:#00000059;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:fixed;top:0;left:0}.dialog.svelte-9w5z1v{border-radius:var(--bw-radius-lg);width:90%;max-width:360px;box-shadow:var(--bw-shadow-3);background:#fff;padding:24px}.dialog-title.svelte-9w5z1v{margin-bottom:8px;font-size:17px;font-weight:700}.dialog-body.svelte-9w5z1v{color:var(--bw-color-text-secondary);margin-bottom:24px;font-size:14px}.dialog-actions.svelte-9w5z1v{justify-content:flex-end;gap:8px;display:flex}.dialog-btn-text.svelte-9w5z1v{color:var(--bw-color-primary);border-radius:var(--bw-radius-md);background:0 0;border:none;padding:10px 16px;font-size:14px;font-weight:600}.dialog-btn-text.svelte-9w5z1v:hover{background:var(--bw-color-primary-light)}.dialog-btn-fill.svelte-9w5z1v{background:var(--bw-color-primary);color:#fff;border-radius:var(--bw-radius-md);border:none;padding:10px 20px;font-size:14px;font-weight:600}.dialog-btn-fill.svelte-9w5z1v:hover{background:var(--bw-color-primary-dark)}.form.svelte-12xyhj1{flex-direction:column;gap:14px;display:flex}.field.svelte-12xyhj1{flex-direction:column;gap:4px;display:flex}label.svelte-12xyhj1{color:var(--bw-color-text-secondary);font-size:13px;font-weight:600}.consent.svelte-19pmjwi{flex-direction:column;gap:12px;display:flex}.check.svelte-19pmjwi{cursor:pointer;align-items:flex-start;gap:10px;font-size:13px;line-height:1.4;display:flex}.check.error.svelte-19pmjwi span:where(.svelte-19pmjwi){color:var(--bw-color-error)}input[type=checkbox].svelte-19pmjwi{accent-color:var(--bw-color-primary);flex-shrink:0;width:16px;height:16px;margin-top:2px}.timer.svelte-1u82ue3{color:var(--bw-color-text-secondary);font-variant-numeric:tabular-nums;font-size:13px;font-weight:600}.payment-page.svelte-1ubcp68{flex-direction:column;height:100%;display:flex}.body.svelte-1ubcp68{flex:1;padding:16px;overflow-y:auto}.amount-bar.svelte-1ubcp68{background:var(--bw-color-surface);border-radius:var(--bw-radius-lg);justify-content:space-between;align-items:center;margin-bottom:20px;padding:16px;font-size:15px;font-weight:600;display:flex}.amount.svelte-1ubcp68{color:var(--bw-color-primary);font-size:18px;font-weight:700}.brands.svelte-1ubcp68{gap:8px;margin-bottom:16px;display:flex}.brand.svelte-1ubcp68{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-sm);color:var(--bw-color-text-secondary);letter-spacing:.02em;padding:4px 10px;font-size:11px;font-weight:700}.error-state.svelte-1ubcp68{text-align:center;padding:32px 16px}.error-icon.svelte-1ubcp68{border:2px solid var(--bw-color-border);width:48px;height:48px;color:var(--bw-color-text-secondary);border-radius:50%;justify-content:center;align-items:center;margin:0 auto 16px;font-size:24px;display:flex}.error-title.svelte-1ubcp68{margin-bottom:8px;font-size:16px;font-weight:600}.error-msg.svelte-1ubcp68{color:var(--bw-color-text-secondary);font-size:14px}.result.svelte-16gfovn{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;padding:40px 24px;display:flex}.hint.svelte-16gfovn{color:var(--bw-color-text-secondary);margin-top:16px;font-size:14px}.icon.svelte-16gfovn{border-radius:50%;justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:20px;font-size:32px;display:flex}.icon.success.svelte-16gfovn{border:2px solid var(--bw-color-success);color:var(--bw-color-success);background:#4caf5014}.icon.failure.svelte-16gfovn{border:2px solid var(--bw-color-error);color:var(--bw-color-error);background:var(--bw-color-primary-light)}h2.svelte-16gfovn{margin-bottom:8px;font-size:20px;font-weight:700}.desc.svelte-16gfovn{color:var(--bw-color-text-secondary);max-width:280px;margin-bottom:28px;font-size:14px;line-height:1.5}.edit-view.svelte-15l4305{flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.modal.svelte-i0rtg0{background:var(--bw-color-surface);flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.body.svelte-i0rtg0{flex:1;padding:16px;overflow-y:auto}.keep-shopping-btn.svelte-i0rtg0{border-radius:var(--bw-radius-md);color:#222;cursor:pointer;background:0 0;border:2px solid #222;padding:8px 16px;font-size:13px;font-weight:600}.keep-shopping-btn.svelte-i0rtg0:hover{background:#f5f5f5}.cart-card.svelte-i0rtg0{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);margin-bottom:16px;padding:20px}.cart-card-top.svelte-i0rtg0{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.cart-product.svelte-i0rtg0{flex:1;font-size:16px;font-weight:700}.cart-item-total.svelte-i0rtg0{white-space:nowrap;font-size:16px;font-weight:800}.cart-detail-lines.svelte-i0rtg0{margin-top:4px}.cart-detail.svelte-i0rtg0{color:var(--bw-color-text-secondary);font-size:13px;line-height:1.5}.cart-divider.svelte-i0rtg0{border-top:1px dashed var(--bw-color-border);margin:14px 0}.cart-units.svelte-i0rtg0{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.cart-unit-line.svelte-i0rtg0{justify-content:space-between;align-items:center;font-size:14px;display:flex}.cart-unit-label.svelte-i0rtg0{color:#333}.cart-unit-price.svelte-i0rtg0{font-variant-numeric:tabular-nums;font-weight:600}.cart-actions.svelte-i0rtg0{gap:16px;display:flex}.action-edit.svelte-i0rtg0{color:var(--bw-color-primary);cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:700}.action-edit.svelte-i0rtg0:hover{text-decoration:underline}.action-remove.svelte-i0rtg0{color:#555;cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:600}.action-remove.svelte-i0rtg0:hover{text-decoration:underline}.cart-total-divider.svelte-i0rtg0{border-top:3px solid #111;margin:8px 0 20px}.cart-total-row.svelte-i0rtg0{justify-content:space-between;align-items:center;margin-bottom:20px;font-size:16px;font-weight:700;display:flex}.cart-total-amount.svelte-i0rtg0{font-size:20px;font-weight:800}.contact-header.svelte-i0rtg0{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.contact-title.svelte-i0rtg0{font-size:16px;font-weight:700}.required-hint.svelte-i0rtg0{color:var(--bw-color-primary);font-size:12px}.pay-bar.svelte-i0rtg0{background:var(--bw-color-primary);color:#fff;flex-shrink:0;align-items:center;display:flex;position:sticky;bottom:0}.pay-bar-total.svelte-i0rtg0{padding:0 20px;font-size:16px;font-weight:700}.pay-bar-btn.svelte-i0rtg0{color:#fff;background:0 0;border:none;flex:1;justify-content:flex-end;align-items:center;gap:8px;height:52px;padding:0 20px;font-size:16px;font-weight:700;display:flex}.pay-bar-btn.svelte-i0rtg0 .arrow:where(.svelte-i0rtg0){font-size:20px}.cart-bar.svelte-1xt0fxx{border-top:1px solid var(--bw-color-border);background:#fff;justify-content:space-between;align-items:center;width:100%;padding:12px 16px;display:flex;box-shadow:0 -2px 8px #0000000f}.cart-info.svelte-1xt0fxx{flex-direction:column;gap:2px;display:flex}.item-count.svelte-1xt0fxx{color:var(--bw-color-text-secondary);font-size:12px}.total.svelte-1xt0fxx{font-size:16px;font-weight:700}.cart-overview-btn.svelte-16bjfem{background:var(--bw-color-primary);color:#fff;cursor:pointer;border:none;border-radius:999px;align-items:center;gap:10px;width:100%;padding:12px 20px;font-size:14px;font-weight:700;transition:background .15s;display:flex}.cart-overview-btn.svelte-16bjfem:hover{background:var(--bw-color-primary-dark)}.cart-icon.svelte-16bjfem{flex-shrink:0;width:18px;height:18px}.cart-badge.svelte-16bjfem{min-width:22px;height:22px;color:var(--bw-color-primary);background:#fff;border-radius:5px;flex-shrink:0;justify-content:center;align-items:center;padding:0 5px;font-size:12px;font-weight:800;display:flex}.cart-total.svelte-16bjfem{text-align:left;flex:1;font-size:14px;font-weight:700}.cart-sep.svelte-16bjfem{background:#ffffff59;flex-shrink:0;width:1px;height:16px}.cart-timer.svelte-16bjfem{font-variant-numeric:tabular-nums;opacity:.85;flex-shrink:0;font-size:13px}
|
|
1
|
+
:root{--bw-color-primary:var(--header-background,#e30613);--bw-color-primary-dark:var(--footer-background,#c00510);--bw-color-primary-light:#e3061314;--bw-color-text:#212121;--bw-color-text-secondary:#757575;--bw-color-border:#e0e0e0;--bw-color-bg:#fff;--bw-color-surface:#f5f5f5;--bw-color-success:#4caf50;--bw-color-error:var(--header-background,#e30613);--bw-font-family:var(--default-font-family,"Roboto", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif);--bw-radius-sm:4px;--bw-radius-md:var(--radius,8px);--bw-radius-lg:12px;--bw-radius-pill:9999px;--bw-transition:.15s ease;--bw-shadow-1:0 1px 3px #0000001a, 0 1px 2px #0000000f;--bw-shadow-2:0 4px 12px #00000014, 0 2px 4px #0000000a;--bw-shadow-3:0 10px 24px #0000001a, 0 4px 8px #0000000a}.bw-widget,.bw-widget *{box-sizing:border-box;margin:0;padding:0}.bw-widget{font-family:var(--bw-font-family);color:var(--bw-color-text);background:var(--bw-color-bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}.bw-widget button,button.bw-widget{cursor:pointer;font-family:inherit}.bw-widget :is(input,select,textarea),:is(input,select,textarea).bw-widget{font-family:inherit}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:3px solid var(--bw-color-border);border-top-color:var(--bw-color-primary);border-radius:50%;width:36px;height:36px;animation:.7s linear infinite spin}.loading-center{flex:1;justify-content:center;align-items:center;min-height:120px;display:flex}.page-header{border-bottom:1px solid var(--bw-color-border);background:var(--bw-color-bg);align-items:center;gap:8px;padding:12px 16px;display:flex}.page-header h2{letter-spacing:-.01em;font-size:18px;font-weight:700}.page-header .spacer{flex:1}.icon-btn{border-radius:var(--bw-radius-pill);width:36px;height:36px;color:var(--bw-color-text);transition:background var(--bw-transition);background:0 0;border:none;justify-content:center;align-items:center;font-size:20px;display:flex}.icon-btn:hover{background:var(--bw-color-surface)}.card{background:var(--bw-color-bg);border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);transition:border-color var(--bw-transition);padding:16px}.card-selectable{cursor:pointer;text-align:left}.card-selectable:hover{border-color:var(--bw-color-text)}.card-selected{border-color:var(--bw-color-text);border-width:2px}.action-bar{border-top:1px solid var(--bw-color-border);background:var(--bw-color-bg);z-index:10;flex-shrink:0;gap:10px;padding:12px 16px;display:flex;position:sticky;bottom:0}.action-bar .btn-secondary{border:1px solid var(--bw-color-border);background:var(--bw-color-bg);height:48px;padding:0 20px}.action-bar .btn-primary{flex:1;height:48px;font-size:16px;font-weight:700;position:relative}.action-bar .btn-primary .arrow{font-size:20px;position:absolute;right:16px}.btn{border-radius:var(--bw-radius-md);transition:background var(--bw-transition), box-shadow var(--bw-transition), opacity var(--bw-transition);border:none;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:14px;font-weight:600;display:inline-flex}.btn:disabled{opacity:.45;cursor:default;pointer-events:none}.btn-primary{background:var(--bw-color-primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--bw-color-primary-dark);box-shadow:var(--bw-shadow-1)}.btn-secondary{background:var(--bw-color-bg);color:var(--bw-color-text)}.btn-secondary:hover:not(:disabled){background:var(--bw-color-border)}.btn-outline{border:1px solid var(--bw-color-primary);color:var(--bw-color-primary);background:0 0}.btn-outline:hover:not(:disabled){background:var(--bw-color-primary-light)}.btn-split{justify-content:space-between;padding:0 20px}.input{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-md);width:100%;transition:border-color var(--bw-transition), box-shadow var(--bw-transition);outline:none;padding:10px 12px;font-size:14px}.input:focus{border-color:var(--bw-color-primary);box-shadow:0 0 0 3px var(--bw-color-primary-light)}.input-error{border-color:var(--bw-color-error);background:#fef2f2}.input-error:focus{box-shadow:0 0 0 3px #e306131f}.section-title{color:var(--bw-color-text-secondary);margin-bottom:12px;font-size:14px;font-weight:400}.layout.svelte-idp8p9{align-items:center;gap:12px;display:flex}.text.svelte-idp8p9{flex:1}.heading.svelte-idp8p9{margin-bottom:4px;font-size:15px;font-weight:700}.body.svelte-idp8p9{color:var(--bw-color-text-secondary);font-size:13px;line-height:1.5}.radio.svelte-idp8p9{border:2px solid var(--bw-color-border);border-radius:50%;flex-shrink:0;width:22px;height:22px}.radio-selected.svelte-idp8p9{border-color:var(--bw-color-text);background:var(--bw-color-text)}.pricing.svelte-19wqhng{margin-top:8px;font-size:13px;font-weight:700}.row.svelte-bzhcxd{align-items:center;display:flex}.info.svelte-bzhcxd{flex-direction:column;flex:1;gap:2px;display:flex}.name.svelte-bzhcxd{font-size:15px;font-weight:700}.price.svelte-bzhcxd{color:var(--bw-color-text-secondary);font-size:13px}.stepper.svelte-bzhcxd{align-items:center;gap:4px;display:flex}.step-btn.svelte-bzhcxd{border:1.5px solid var(--bw-color-border);width:40px;height:40px;color:var(--bw-color-primary);transition:background var(--bw-transition), color var(--bw-transition), border-color var(--bw-transition);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex}.step-btn.svelte-bzhcxd:hover:not(:disabled){background:var(--bw-color-primary);color:#fff}.step-btn.svelte-bzhcxd:disabled{opacity:.3;cursor:default}.qty.svelte-bzhcxd{text-align:center;font-variant-numeric:tabular-nums;min-width:32px;font-size:17px;font-weight:700}.calendar.svelte-10gu2tq{width:100%}.header.svelte-10gu2tq{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.month.svelte-10gu2tq{font-size:16px;font-weight:700}.nav-btn.svelte-10gu2tq{border:1.5px solid var(--bw-color-border);width:36px;height:36px;color:var(--bw-color-text);transition:border-color var(--bw-transition);background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex}.nav-btn.svelte-10gu2tq:hover{border-color:var(--bw-color-text)}.day-names.svelte-10gu2tq{text-align:center;grid-template-columns:repeat(7,1fr);margin-bottom:8px;display:grid}.day-names.svelte-10gu2tq span:where(.svelte-10gu2tq){color:var(--bw-color-text-secondary);padding:4px 0;font-size:11px;font-weight:700}.grid.svelte-10gu2tq{grid-template-columns:repeat(7,1fr);gap:6px;display:grid}.cell.svelte-10gu2tq{border-radius:var(--bw-radius-md);min-height:48px;transition:border-color var(--bw-transition), background var(--bw-transition);background:0 0;border:1.5px solid #0000;flex-direction:column;justify-content:center;align-items:center;padding:4px 2px;font-size:14px;display:flex}.cell.empty.svelte-10gu2tq{pointer-events:none}.cell.available.svelte-10gu2tq{color:var(--bw-color-text);border-color:var(--bw-color-border);font-weight:600}.cell.available.svelte-10gu2tq:hover{border-color:var(--bw-color-text)}.cell.selected.svelte-10gu2tq{border-color:var(--bw-color-text);border-width:2px;font-weight:700}.cell.sold-out.svelte-10gu2tq{color:var(--bw-color-text-secondary);cursor:default;text-decoration:line-through}.cell.unavailable.svelte-10gu2tq{color:#d1d5db;cursor:default}.day-num.svelte-10gu2tq{line-height:1}.day-price.svelte-10gu2tq{color:var(--bw-color-text-secondary);margin-top:2px;font-size:9px;font-weight:600;line-height:1}.selected.svelte-10gu2tq .day-price:where(.svelte-10gu2tq){color:var(--bw-color-text)}.hint.svelte-1hu99a4{text-align:center;color:var(--bw-color-text-secondary);padding:12px;font-size:14px}.slots.svelte-1hu99a4{flex-direction:column;gap:10px;display:flex}.wizard.svelte-9w5z1v{flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.wizard-header.svelte-9w5z1v{border-bottom:1px solid var(--bw-color-border);padding:20px 16px 16px}.wizard-header.svelte-9w5z1v h2:where(.svelte-9w5z1v){font-size:20px;font-weight:800}.page-title-row.svelte-9w5z1v{justify-content:space-between;align-items:center;padding:12px 16px 0;display:flex}.page-title.svelte-9w5z1v{color:var(--bw-color-text);font-size:16px;font-weight:700}.page-dots.svelte-9w5z1v{gap:6px;display:flex}.dot.svelte-9w5z1v{background:var(--bw-color-border);border-radius:50%;width:8px;height:8px}.dot.active.svelte-9w5z1v{background:var(--bw-color-text)}.accordion-section.svelte-9w5z1v{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);background:var(--bw-color-bg);margin-bottom:12px;overflow:hidden}.accordion-section.invalidated.svelte-9w5z1v{border-color:var(--bw-color-error)}.accordion-header.svelte-9w5z1v{cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:center;width:100%;padding:16px 20px;font-family:inherit;display:flex}.accordion-header-text.svelte-9w5z1v{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.accordion-title.svelte-9w5z1v{letter-spacing:.08em;color:var(--bw-color-text-secondary);font-size:11px;font-weight:700}.accordion-summary.svelte-9w5z1v{color:var(--bw-color-text);font-size:15px;font-weight:600}.accordion-summary.invalidated.svelte-9w5z1v{color:var(--bw-color-error)}.accordion-chevron.svelte-9w5z1v{border-right:2px solid var(--bw-color-text-secondary);border-bottom:2px solid var(--bw-color-text-secondary);flex-shrink:0;width:12px;height:12px;margin-left:12px;transition:transform .15s;transform:rotate(45deg)}.accordion-chevron.open.svelte-9w5z1v{transform:rotate(-135deg)}.accordion-body.svelte-9w5z1v{padding:0 20px 20px}.wizard-body.svelte-9w5z1v{flex:1;padding:16px;overflow-y:auto}.section.svelte-9w5z1v{margin-bottom:24px}.option-list.svelte-9w5z1v,.pickup-list.svelte-9w5z1v,.unit-list.svelte-9w5z1v{flex-direction:column;gap:10px;display:flex}.dialog-backdrop.svelte-9w5z1v{z-index:100;background:#00000059;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:fixed;top:0;left:0}.dialog.svelte-9w5z1v{border-radius:var(--bw-radius-lg);width:90%;max-width:360px;box-shadow:var(--bw-shadow-3);background:#fff;padding:24px}.dialog-title.svelte-9w5z1v{margin-bottom:8px;font-size:17px;font-weight:700}.dialog-body.svelte-9w5z1v{color:var(--bw-color-text-secondary);margin-bottom:24px;font-size:14px}.dialog-actions.svelte-9w5z1v{justify-content:flex-end;gap:8px;display:flex}.dialog-btn-text.svelte-9w5z1v{color:var(--bw-color-primary);border-radius:var(--bw-radius-md);background:0 0;border:none;padding:10px 16px;font-size:14px;font-weight:600}.dialog-btn-text.svelte-9w5z1v:hover{background:var(--bw-color-primary-light)}.dialog-btn-fill.svelte-9w5z1v{background:var(--bw-color-primary);color:#fff;border-radius:var(--bw-radius-md);border:none;padding:10px 20px;font-size:14px;font-weight:600}.dialog-btn-fill.svelte-9w5z1v:hover{background:var(--bw-color-primary-dark)}.bw-widget.svelte-19qd5my{display:contents}.add-to-cart-error.svelte-19qd5my{color:#b3261e;background:#fdecea;margin:0;padding:12px 16px;font-size:14px}.form.svelte-12xyhj1{flex-direction:column;gap:14px;display:flex}.field.svelte-12xyhj1{flex-direction:column;gap:4px;display:flex}label.svelte-12xyhj1{color:var(--bw-color-text-secondary);font-size:13px;font-weight:600}.consent.svelte-19pmjwi{flex-direction:column;gap:12px;display:flex}.check.svelte-19pmjwi{cursor:pointer;align-items:flex-start;gap:10px;font-size:13px;line-height:1.4;display:flex}.check.error.svelte-19pmjwi span:where(.svelte-19pmjwi){color:var(--bw-color-error)}input[type=checkbox].svelte-19pmjwi{accent-color:var(--bw-color-primary);flex-shrink:0;width:16px;height:16px;margin-top:2px}.timer.svelte-1u82ue3{color:var(--bw-color-text-secondary);font-variant-numeric:tabular-nums;font-size:13px;font-weight:600}.payment-page.svelte-1ubcp68{flex-direction:column;height:100%;display:flex}.body.svelte-1ubcp68{flex:1;padding:16px;overflow-y:auto}.amount-bar.svelte-1ubcp68{background:var(--bw-color-surface);border-radius:var(--bw-radius-lg);justify-content:space-between;align-items:center;margin-bottom:20px;padding:16px;font-size:15px;font-weight:600;display:flex}.amount.svelte-1ubcp68{color:var(--bw-color-primary);font-size:18px;font-weight:700}.brands.svelte-1ubcp68{gap:8px;margin-bottom:16px;display:flex}.brand.svelte-1ubcp68{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-sm);color:var(--bw-color-text-secondary);letter-spacing:.02em;padding:4px 10px;font-size:11px;font-weight:700}.error-state.svelte-1ubcp68{text-align:center;padding:32px 16px}.error-icon.svelte-1ubcp68{border:2px solid var(--bw-color-border);width:48px;height:48px;color:var(--bw-color-text-secondary);border-radius:50%;justify-content:center;align-items:center;margin:0 auto 16px;font-size:24px;display:flex}.error-title.svelte-1ubcp68{margin-bottom:8px;font-size:16px;font-weight:600}.error-msg.svelte-1ubcp68{color:var(--bw-color-text-secondary);font-size:14px}.result.svelte-16gfovn{text-align:center;flex-direction:column;justify-content:center;align-items:center;height:100%;padding:40px 24px;display:flex}.hint.svelte-16gfovn{color:var(--bw-color-text-secondary);margin-top:16px;font-size:14px}.icon.svelte-16gfovn{border-radius:50%;justify-content:center;align-items:center;width:64px;height:64px;margin-bottom:20px;font-size:32px;display:flex}.icon.success.svelte-16gfovn{border:2px solid var(--bw-color-success);color:var(--bw-color-success);background:#4caf5014}.icon.failure.svelte-16gfovn{border:2px solid var(--bw-color-error);color:var(--bw-color-error);background:var(--bw-color-primary-light)}h2.svelte-16gfovn{margin-bottom:8px;font-size:20px;font-weight:700}.desc.svelte-16gfovn{color:var(--bw-color-text-secondary);max-width:280px;margin-bottom:28px;font-size:14px;line-height:1.5}.edit-view.svelte-15l4305{flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.edit-error.svelte-15l4305{color:#b3261e;background:#fdecea;margin:0;padding:12px 16px;font-size:14px}.edit-body.svelte-15l4305{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.edit-body.saving.svelte-15l4305{pointer-events:none}.saving-overlay.svelte-15l4305{background:#ffffffb3;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.modal.svelte-i0rtg0{background:var(--bw-color-surface);flex-direction:column;height:100%;max-height:100%;display:flex;overflow:hidden}.body.svelte-i0rtg0{flex:1;padding:16px;overflow-y:auto}.keep-shopping-btn.svelte-i0rtg0{border-radius:var(--bw-radius-md);color:#222;cursor:pointer;background:0 0;border:2px solid #222;padding:8px 16px;font-size:13px;font-weight:600}.keep-shopping-btn.svelte-i0rtg0:hover{background:#f5f5f5}.cart-card.svelte-i0rtg0{border:1px solid var(--bw-color-border);border-radius:var(--bw-radius-lg);margin-bottom:16px;padding:20px}.cart-card-top.svelte-i0rtg0{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.cart-product.svelte-i0rtg0{flex:1;font-size:16px;font-weight:700}.cart-item-total.svelte-i0rtg0{white-space:nowrap;font-size:16px;font-weight:800}.cart-detail-lines.svelte-i0rtg0{margin-top:4px}.cart-detail.svelte-i0rtg0{color:var(--bw-color-text-secondary);font-size:13px;line-height:1.5}.cart-divider.svelte-i0rtg0{border-top:1px dashed var(--bw-color-border);margin:14px 0}.cart-units.svelte-i0rtg0{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.cart-unit-line.svelte-i0rtg0{justify-content:space-between;align-items:center;font-size:14px;display:flex}.cart-unit-label.svelte-i0rtg0{color:#333}.cart-unit-price.svelte-i0rtg0{font-variant-numeric:tabular-nums;font-weight:600}.cart-actions.svelte-i0rtg0{gap:16px;display:flex}.action-edit.svelte-i0rtg0{color:var(--bw-color-primary);cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:700}.action-edit.svelte-i0rtg0:hover{text-decoration:underline}.action-remove.svelte-i0rtg0{color:#555;cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;font-weight:600}.action-remove.svelte-i0rtg0:hover{text-decoration:underline}.cart-total-divider.svelte-i0rtg0{border-top:3px solid #111;margin:8px 0 20px}.cart-total-row.svelte-i0rtg0{justify-content:space-between;align-items:center;margin-bottom:20px;font-size:16px;font-weight:700;display:flex}.cart-total-amount.svelte-i0rtg0{font-size:20px;font-weight:800}.pay-error.svelte-i0rtg0{color:#b3261e;border-radius:var(--bw-radius-md);background:#fdecea;margin:0 0 16px;padding:12px 16px;font-size:14px}.contact-header.svelte-i0rtg0{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.contact-title.svelte-i0rtg0{font-size:16px;font-weight:700}.required-hint.svelte-i0rtg0{color:var(--bw-color-primary);font-size:12px}.pay-bar.svelte-i0rtg0{background:var(--bw-color-primary);color:#fff;flex-shrink:0;align-items:center;display:flex;position:sticky;bottom:0}.pay-bar-total.svelte-i0rtg0{padding:0 20px;font-size:16px;font-weight:700}.pay-bar-btn.svelte-i0rtg0{color:#fff;background:0 0;border:none;flex:1;justify-content:flex-end;align-items:center;gap:8px;height:52px;padding:0 20px;font-size:16px;font-weight:700;display:flex}.pay-bar-btn.svelte-i0rtg0:disabled{opacity:.7;cursor:default}.pay-bar-btn.svelte-i0rtg0 .arrow:where(.svelte-i0rtg0){font-size:20px}.bw-widget.svelte-5e515v{display:contents}.cart-bar.svelte-1xt0fxx{border-top:1px solid var(--bw-color-border);background:#fff;justify-content:space-between;align-items:center;width:100%;padding:12px 16px;display:flex;box-shadow:0 -2px 8px #0000000f}.cart-info.svelte-1xt0fxx{flex-direction:column;gap:2px;display:flex}.item-count.svelte-1xt0fxx{color:var(--bw-color-text-secondary);font-size:12px}.total.svelte-1xt0fxx{font-size:16px;font-weight:700}.cart-overview-btn.svelte-16bjfem{background:var(--bw-color-primary);color:#fff;cursor:pointer;border:none;border-radius:999px;justify-content:center;align-items:center;gap:14px;width:100%;padding:14px 24px;transition:background .15s;display:flex}.cart-overview-btn.svelte-16bjfem:hover{background:var(--bw-color-primary-dark)}.cart-icon.svelte-16bjfem{flex-shrink:0;width:22px;height:22px}.cart-badge.svelte-16bjfem{width:26px;height:26px;color:var(--bw-color-primary);background:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:14px;font-weight:800;display:flex}.cart-timer.svelte-16bjfem{font-variant-numeric:tabular-nums;flex-shrink:0;font-size:20px;font-weight:700}
|
|
2
2
|
/*$vite$:1*/
|