@sazito/checkout 0.1.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,1696 @@
1
+ /* @sazito/checkout — self-contained styles.
2
+ * Scoped under .szc-root, themable via CSS variables, RTL/LTR via logical
3
+ * properties. Font defaults to `inherit` so the host font flows through. */
4
+
5
+ .szc-root {
6
+ --szc-accent: #4f46e5;
7
+ --szc-accent-foreground: #ffffff;
8
+ --szc-accent-soft: color-mix(in srgb, var(--szc-accent) 10%, #ffffff);
9
+ --szc-radius: 16px;
10
+ --szc-font: inherit;
11
+
12
+ --szc-bg: #ffffff;
13
+ --szc-fg: #0f172a;
14
+ --szc-muted: #f4f4f6;
15
+ --szc-muted-fg: #6b7280;
16
+ --szc-border: #e6e7eb;
17
+ --szc-card: #ffffff;
18
+ --szc-summary-bg: #f6f6fb;
19
+ --szc-danger: #dc2626;
20
+ --szc-success: #16a34a;
21
+
22
+ font-family: var(--szc-font);
23
+ color: var(--szc-fg);
24
+ background: var(--szc-bg);
25
+ box-sizing: border-box;
26
+ width: 100%;
27
+ line-height: 1.6;
28
+ }
29
+
30
+ .szc-root *,
31
+ .szc-root *::before,
32
+ .szc-root *::after {
33
+ box-sizing: inherit;
34
+ }
35
+ /* Host stylesheets often set their own heading font (e.g. h1–h6 { font: Inter }).
36
+ Re-assert our font on every descendant so the checkout font stays consistent. */
37
+ .szc-root h1,
38
+ .szc-root h2,
39
+ .szc-root h3,
40
+ .szc-root h4,
41
+ .szc-root h5,
42
+ .szc-root h6,
43
+ .szc-root p,
44
+ .szc-root button,
45
+ .szc-root input,
46
+ .szc-root select,
47
+ .szc-root textarea {
48
+ font-family: var(--szc-font);
49
+ }
50
+
51
+ /* ---- mobile header --------------------------------------------------- */
52
+ /* Replaces the stepper on small screens: back chevron (inline start),
53
+ step title (center), "step n of m" (inline end). */
54
+ .szc-mobile-head {
55
+ display: none;
56
+ }
57
+ @media (max-width: 880px) {
58
+ .szc-mobile-head {
59
+ display: grid;
60
+ grid-template-columns: 1fr auto 1fr;
61
+ align-items: center;
62
+ gap: 8px;
63
+ padding: 16px;
64
+ border-bottom: 1px solid var(--szc-border);
65
+ background: var(--szc-bg);
66
+ }
67
+ .szc-mobile-head__back {
68
+ justify-self: start;
69
+ display: inline-flex;
70
+ align-items: center;
71
+ justify-content: center;
72
+ width: 36px;
73
+ height: 36px;
74
+ margin-inline-start: -8px;
75
+ border: none;
76
+ border-radius: 10px;
77
+ background: transparent;
78
+ color: var(--szc-fg);
79
+ cursor: pointer;
80
+ transition: background 0.14s;
81
+ }
82
+ .szc-mobile-head__back:hover {
83
+ background: var(--szc-muted);
84
+ }
85
+ /* Title styled like a single active stepper step: accent icon dot + label. */
86
+ .szc-mobile-head__title {
87
+ display: inline-flex;
88
+ align-items: center;
89
+ gap: 9px;
90
+ min-width: 0;
91
+ font-size: 15px;
92
+ font-weight: 700;
93
+ color: var(--szc-fg);
94
+ white-space: nowrap;
95
+ }
96
+ .szc-mobile-head__dot {
97
+ display: inline-flex;
98
+ align-items: center;
99
+ justify-content: center;
100
+ flex: none;
101
+ width: 30px;
102
+ height: 30px;
103
+ border-radius: 999px;
104
+ background: var(--szc-accent);
105
+ color: var(--szc-accent-foreground);
106
+ }
107
+ .szc-mobile-head__count {
108
+ justify-self: end;
109
+ font-size: 13px;
110
+ color: var(--szc-muted-fg);
111
+ white-space: nowrap;
112
+ }
113
+ }
114
+
115
+ /* ---- stepper -------------------------------------------------------- */
116
+ .szc-stepper {
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: center;
120
+ gap: 10px;
121
+ list-style: none;
122
+ margin: 0;
123
+ padding: 28px 16px;
124
+ flex-wrap: wrap;
125
+ }
126
+ .szc-step {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 10px;
130
+ position: relative;
131
+ color: var(--szc-muted-fg);
132
+ font-size: 15px;
133
+ }
134
+ .szc-step__dot {
135
+ display: inline-flex;
136
+ align-items: center;
137
+ justify-content: center;
138
+ width: 32px;
139
+ height: 32px;
140
+ border-radius: 999px;
141
+ background: var(--szc-muted);
142
+ color: var(--szc-muted-fg);
143
+ font-size: 14px;
144
+ font-weight: 600;
145
+ flex: none;
146
+ }
147
+ .szc-step__line {
148
+ width: 42px;
149
+ height: 2px;
150
+ background: var(--szc-border);
151
+ margin-inline: 6px;
152
+ }
153
+ .szc-step--active .szc-step__label,
154
+ .szc-step--done .szc-step__label {
155
+ color: var(--szc-fg);
156
+ font-weight: 600;
157
+ }
158
+ .szc-step--active .szc-step__dot {
159
+ background: var(--szc-accent);
160
+ color: var(--szc-accent-foreground);
161
+ }
162
+ .szc-step--done .szc-step__dot {
163
+ background: var(--szc-success);
164
+ color: #fff;
165
+ }
166
+ /* The mobile header replaces the stepper on small screens. Must come after
167
+ the base .szc-stepper rule — same specificity, source order decides. */
168
+ @media (max-width: 880px) {
169
+ .szc-stepper {
170
+ display: none;
171
+ }
172
+ }
173
+
174
+ /* ---- layout --------------------------------------------------------- */
175
+ .szc-layout {
176
+ display: grid;
177
+ grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
178
+ gap: 24px;
179
+ align-items: start;
180
+ padding: 8px 24px 32px;
181
+ max-width: 1280px;
182
+ margin-inline: auto;
183
+ }
184
+ .szc-layout--full {
185
+ grid-template-columns: 1fr;
186
+ }
187
+ .szc-main {
188
+ display: flex;
189
+ flex-direction: column;
190
+ gap: 20px;
191
+ min-width: 0;
192
+ }
193
+ @media (max-width: 880px) {
194
+ .szc-layout {
195
+ grid-template-columns: 1fr;
196
+ /* Single column: breathing room under the mobile header and a clear
197
+ break between the step content and the order summary. */
198
+ padding-block: 28px 32px;
199
+ gap: 32px;
200
+ }
201
+ }
202
+ @media (max-width: 560px) {
203
+ .szc-layout {
204
+ padding: 24px 16px 28px;
205
+ gap: 28px;
206
+ }
207
+ .szc-main {
208
+ gap: 20px;
209
+ }
210
+ }
211
+
212
+ .szc-step-panel {
213
+ display: flex;
214
+ flex-direction: column;
215
+ gap: 16px;
216
+ }
217
+ .szc-section-title {
218
+ margin: 8px 0 0;
219
+ font-size: 15px;
220
+ font-weight: 700;
221
+ }
222
+ .szc-muted {
223
+ color: var(--szc-muted-fg);
224
+ font-size: 13px;
225
+ }
226
+ .szc-empty {
227
+ margin-block: 4px;
228
+ }
229
+ .szc-empty__card {
230
+ display: flex;
231
+ flex-direction: column;
232
+ align-items: center;
233
+ text-align: center;
234
+ gap: 14px;
235
+ padding: 36px 28px 32px;
236
+ border: 1px solid var(--szc-border);
237
+ border-radius: calc(var(--szc-radius) * 1.2);
238
+ background: var(--szc-card);
239
+ box-shadow: 0 1px 4px color-mix(in srgb, var(--szc-fg) 5%, transparent);
240
+ }
241
+ .szc-empty__badge {
242
+ display: inline-flex;
243
+ align-items: center;
244
+ justify-content: center;
245
+ flex: none;
246
+ width: 72px;
247
+ height: 72px;
248
+ border-radius: calc(var(--szc-radius) * 1.15);
249
+ color: var(--szc-accent);
250
+ background: var(--szc-accent-soft);
251
+ box-shadow:
252
+ inset 0 0 0 1px color-mix(in srgb, var(--szc-accent) 18%, transparent),
253
+ 0 4px 16px color-mix(in srgb, var(--szc-accent) 12%, transparent);
254
+ }
255
+ .szc-empty__badge svg {
256
+ width: 20px;
257
+ height: 20px;
258
+ }
259
+ .szc-empty__copy {
260
+ display: flex;
261
+ flex-direction: column;
262
+ gap: 6px;
263
+ align-items: center;
264
+ }
265
+ .szc-empty__title {
266
+ margin: 0;
267
+ font-size: 17px;
268
+ font-weight: 700;
269
+ line-height: 1.4;
270
+ letter-spacing: -0.015em;
271
+ color: var(--szc-fg);
272
+ }
273
+ .szc-empty__hint {
274
+ margin: 0;
275
+ font-size: 14px;
276
+ line-height: 1.65;
277
+ color: var(--szc-muted-fg);
278
+ }
279
+ .szc-empty__cta {
280
+ flex: none;
281
+ white-space: nowrap;
282
+ min-width: 180px;
283
+ padding-inline: 28px;
284
+ }
285
+ @media (max-width: 560px) {
286
+ .szc-empty__card {
287
+ padding: 40px 20px 36px;
288
+ gap: 16px;
289
+ }
290
+ .szc-empty__badge {
291
+ width: 76px;
292
+ height: 76px;
293
+ }
294
+ .szc-empty__cta {
295
+ width: 100%;
296
+ }
297
+ }
298
+
299
+ /* ---- forms ---------------------------------------------------------- */
300
+ .szc-shipping-form-card {
301
+ overflow: hidden;
302
+ border: 1px solid var(--szc-border);
303
+ border-radius: calc(var(--szc-radius) * 1.15);
304
+ background: var(--szc-card);
305
+ box-shadow: 0 12px 34px color-mix(in srgb, var(--szc-fg) 5%, transparent);
306
+ }
307
+ .szc-shipping-section {
308
+ display: flex;
309
+ flex-direction: column;
310
+ gap: 16px;
311
+ padding: 22px;
312
+ }
313
+ .szc-shipping-section + .szc-shipping-section {
314
+ border-top: 1px solid var(--szc-border);
315
+ background: color-mix(in srgb, var(--szc-muted) 30%, var(--szc-card));
316
+ }
317
+ .szc-shipping-section__head {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 11px;
321
+ }
322
+ .szc-shipping-section__icon {
323
+ width: 36px;
324
+ height: 36px;
325
+ border-radius: calc(var(--szc-radius) * 0.65);
326
+ display: inline-flex;
327
+ align-items: center;
328
+ justify-content: center;
329
+ flex: none;
330
+ color: var(--szc-accent);
331
+ background: var(--szc-accent-soft);
332
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--szc-accent) 12%, transparent);
333
+ }
334
+ .szc-shipping-section__icon svg {
335
+ width: 20px;
336
+ height: 20px;
337
+ }
338
+ .szc-shipping-section__title {
339
+ margin: 0;
340
+ color: var(--szc-fg);
341
+ font-size: 15px;
342
+ font-weight: 700;
343
+ line-height: 1.4;
344
+ }
345
+ @media (max-width: 560px) {
346
+ .szc-shipping-section {
347
+ padding: 17px 14px 19px;
348
+ }
349
+ }
350
+ .szc-form-grid {
351
+ display: grid;
352
+ grid-template-columns: 1fr 1fr;
353
+ gap: 14px;
354
+ }
355
+ @media (max-width: 560px) {
356
+ .szc-form-grid {
357
+ grid-template-columns: 1fr;
358
+ }
359
+ }
360
+ .szc-field {
361
+ display: flex;
362
+ flex-direction: column;
363
+ gap: 6px;
364
+ }
365
+ .szc-field__label {
366
+ font-size: 12.5px;
367
+ color: color-mix(in srgb, var(--szc-fg) 72%, var(--szc-muted-fg));
368
+ font-weight: 600;
369
+ }
370
+ .szc-field__optional {
371
+ margin-inline-start: 4px;
372
+ color: color-mix(in srgb, var(--szc-muted-fg) 72%, transparent);
373
+ font-size: 11px;
374
+ }
375
+ .szc-input {
376
+ width: 100%;
377
+ min-height: 46px;
378
+ padding: 11px 13px;
379
+ border: 1px solid var(--szc-border);
380
+ border-radius: calc(var(--szc-radius) * 0.6);
381
+ background: color-mix(in srgb, var(--szc-card) 94%, var(--szc-muted));
382
+ color: var(--szc-fg);
383
+ font: inherit;
384
+ font-size: 14px;
385
+ outline: none;
386
+ transition: border-color 0.18s, box-shadow 0.18s, background 0.18s;
387
+ }
388
+ .szc-input:hover:not(:disabled):not(:focus) {
389
+ border-color: color-mix(in srgb, var(--szc-muted-fg) 38%, var(--szc-border));
390
+ }
391
+ .szc-input::placeholder {
392
+ color: color-mix(in srgb, var(--szc-muted-fg) 72%, transparent);
393
+ }
394
+ .szc-input:focus {
395
+ border-color: var(--szc-accent);
396
+ background: var(--szc-card);
397
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--szc-accent) 18%, transparent);
398
+ }
399
+ /* Kill the browser's grey/yellow autofill plate — keep our own card bg + fg. */
400
+ .szc-input:-webkit-autofill,
401
+ .szc-input:-webkit-autofill:hover,
402
+ .szc-input:-webkit-autofill:focus,
403
+ .szc-input:-webkit-autofill:active {
404
+ -webkit-text-fill-color: var(--szc-fg);
405
+ -webkit-box-shadow: 0 0 0 1000px var(--szc-card) inset;
406
+ box-shadow: 0 0 0 1000px var(--szc-card) inset;
407
+ caret-color: var(--szc-fg);
408
+ border-color: var(--szc-border);
409
+ transition: background-color 9999s ease-out 0s;
410
+ }
411
+ .szc-input:-webkit-autofill:focus {
412
+ -webkit-box-shadow: 0 0 0 1000px var(--szc-card) inset,
413
+ 0 0 0 3px color-mix(in srgb, var(--szc-accent) 18%, transparent);
414
+ box-shadow: 0 0 0 1000px var(--szc-card) inset,
415
+ 0 0 0 3px color-mix(in srgb, var(--szc-accent) 18%, transparent);
416
+ border-color: var(--szc-accent);
417
+ }
418
+ .szc-input--ltr {
419
+ direction: ltr;
420
+ text-align: left;
421
+ }
422
+ .szc-textarea {
423
+ min-height: 88px;
424
+ resize: vertical;
425
+ line-height: 1.7;
426
+ }
427
+ .szc-input--error {
428
+ border-color: #ef4444;
429
+ }
430
+ .szc-input--error:focus {
431
+ border-color: #ef4444;
432
+ box-shadow: 0 0 0 3px color-mix(in srgb, #ef4444 18%, transparent);
433
+ }
434
+ .szc-field__error {
435
+ font-size: 11.5px;
436
+ color: #ef4444;
437
+ }
438
+ .szc-select-wrap {
439
+ position: relative;
440
+ display: block;
441
+ }
442
+ .szc-select-enhanced {
443
+ appearance: none;
444
+ width: 100%;
445
+ padding-inline-end: 36px;
446
+ font-size: 14px;
447
+ cursor: pointer;
448
+ }
449
+ .szc-select-enhanced option {
450
+ font-size: 14px;
451
+ }
452
+ .szc-select-enhanced:disabled {
453
+ border-color: color-mix(in srgb, var(--szc-border) 72%, transparent);
454
+ background: var(--szc-muted);
455
+ color: var(--szc-muted-fg);
456
+ -webkit-text-fill-color: var(--szc-muted-fg);
457
+ cursor: not-allowed;
458
+ opacity: 1;
459
+ }
460
+ .szc-select-enhanced:disabled + .szc-select-chevron {
461
+ color: color-mix(in srgb, var(--szc-muted-fg) 55%, transparent);
462
+ }
463
+ .szc-select-chevron {
464
+ pointer-events: none;
465
+ position: absolute;
466
+ inset-block-start: 50%;
467
+ inset-inline-end: 12px;
468
+ transform: translateY(-50%);
469
+ color: var(--szc-muted-fg);
470
+ display: flex;
471
+ align-items: center;
472
+ }
473
+
474
+ /* ---- buttons -------------------------------------------------------- */
475
+ .szc-btn {
476
+ display: inline-flex;
477
+ align-items: center;
478
+ justify-content: center;
479
+ gap: 8px;
480
+ padding: 12px 20px;
481
+ border-radius: calc(var(--szc-radius) * 0.7);
482
+ border: 1px solid transparent;
483
+ font: inherit;
484
+ font-weight: 600;
485
+ cursor: pointer;
486
+ transition: background 0.15s, opacity 0.15s, border-color 0.15s;
487
+ }
488
+ /* Host resets can set `span { display: block }` — keep label + inline icons
489
+ on one line regardless. */
490
+ .szc-btn > span {
491
+ display: inline-flex;
492
+ align-items: center;
493
+ gap: 6px;
494
+ white-space: nowrap;
495
+ }
496
+ /* Loading (aria-busy) keeps its variant look; a real disabled goes inert grey. */
497
+ .szc-btn[aria-busy='true'] {
498
+ cursor: progress;
499
+ opacity: 0.85;
500
+ }
501
+ .szc-btn:disabled:not([aria-busy='true']) {
502
+ cursor: not-allowed;
503
+ }
504
+ .szc-btn--primary {
505
+ background: var(--szc-accent);
506
+ color: var(--szc-accent-foreground);
507
+ }
508
+ .szc-btn--primary:not(:disabled):hover {
509
+ background: color-mix(in srgb, var(--szc-accent) 88%, #000);
510
+ }
511
+ .szc-btn--primary:disabled:not([aria-busy='true']) {
512
+ background: color-mix(in srgb, var(--szc-border) 60%, var(--szc-card));
513
+ color: color-mix(in srgb, var(--szc-muted-fg) 65%, var(--szc-border));
514
+ box-shadow: none;
515
+ }
516
+ .szc-btn--outline:disabled:not([aria-busy='true']),
517
+ .szc-btn--ghost:disabled:not([aria-busy='true']) {
518
+ opacity: 0.5;
519
+ }
520
+ .szc-btn--outline {
521
+ background: transparent;
522
+ border-color: var(--szc-border);
523
+ color: var(--szc-fg);
524
+ }
525
+ .szc-btn--ghost {
526
+ background: transparent;
527
+ color: var(--szc-muted-fg);
528
+ padding-inline: 10px;
529
+ }
530
+ .szc-btn--block {
531
+ width: 100%;
532
+ }
533
+
534
+ .szc-spinner {
535
+ width: 16px;
536
+ height: 16px;
537
+ border-radius: 999px;
538
+ border: 2px solid currentColor;
539
+ border-top-color: transparent;
540
+ animation: szc-spin 0.7s linear infinite;
541
+ display: inline-block;
542
+ flex: none;
543
+ }
544
+ @keyframes szc-spin {
545
+ to { transform: rotate(360deg); }
546
+ }
547
+
548
+ /* Replaced heavy text-loading with a subtle fade — the section goes translucent
549
+ and pointer-events off while work is in flight. No text / spinner needed. */
550
+ .szc-step-panel--loading {
551
+ opacity: 0.55;
552
+ pointer-events: none;
553
+ transition: opacity 0.2s;
554
+ }
555
+ .szc-inline-loading {
556
+ display: none;
557
+ }
558
+
559
+ /* Checkout actions.
560
+ Desktop: the next/CTA button renders under the order summary sidebar
561
+ (.szc-side__cta) and the back button sits at the end of the page
562
+ (.szc-back-row); nothing is pinned.
563
+ Mobile (≤880px): the CTA moves into a bar fixed to the viewport bottom
564
+ together with the payable total (.szc-footer-bar); the back control is the
565
+ chevron in the mobile header. */
566
+ .szc-back-row {
567
+ display: flex;
568
+ justify-content: flex-start;
569
+ margin-top: 2px;
570
+ }
571
+ /* On mobile the header chevron is the back control — hide the inline one. */
572
+ @media (max-width: 880px) {
573
+ .szc-back-row {
574
+ display: none;
575
+ }
576
+ }
577
+ .szc-back-btn {
578
+ gap: 6px;
579
+ padding-block: 9px;
580
+ padding-inline: 12px 16px;
581
+ border-radius: 999px;
582
+ }
583
+ .szc-back-btn:not(:disabled):hover {
584
+ background: var(--szc-muted);
585
+ color: var(--szc-fg);
586
+ }
587
+ /* Chevron points toward "previous": right in RTL, left in LTR. */
588
+ .szc-root[dir='rtl'] .szc-back-arrow {
589
+ transform: scaleX(-1);
590
+ }
591
+ .szc-side__cta {
592
+ display: flex;
593
+ }
594
+ .szc-side__cta .szc-btn,
595
+ .szc-side__cta .szc-skeleton--button {
596
+ flex: 1;
597
+ }
598
+ .szc-footer-bar {
599
+ display: none;
600
+ }
601
+ .szc-footer {
602
+ display: flex;
603
+ /* Reversed: CTA at the inline start (right in RTL), total at the end. */
604
+ flex-direction: row-reverse;
605
+ align-items: center;
606
+ justify-content: space-between;
607
+ gap: 20px;
608
+ padding-inline: 16px;
609
+ }
610
+ .szc-footer__total {
611
+ display: flex;
612
+ flex-direction: column;
613
+ gap: 2px;
614
+ min-width: 0;
615
+ }
616
+ .szc-footer__total-label {
617
+ font-size: 12px;
618
+ color: var(--szc-muted-fg);
619
+ }
620
+ .szc-footer__total-value {
621
+ font-size: 17px;
622
+ font-weight: 800;
623
+ line-height: 1.3;
624
+ color: var(--szc-accent);
625
+ white-space: nowrap;
626
+ }
627
+ .szc-footer__actions {
628
+ display: flex;
629
+ align-items: center;
630
+ gap: 10px;
631
+ flex: 1;
632
+ }
633
+ .szc-footer__actions .szc-btn,
634
+ .szc-footer__actions > * {
635
+ flex: 1;
636
+ }
637
+ @media (max-width: 880px) {
638
+ .szc-side__cta {
639
+ display: none;
640
+ }
641
+ /* Pinned to the viewport bottom even when the page is shorter than the
642
+ screen (sticky would rest at its flow position in that case). */
643
+ .szc-footer-bar {
644
+ display: block;
645
+ position: fixed;
646
+ inset-inline: 0;
647
+ bottom: 0;
648
+ z-index: 40;
649
+ border-top: 1px solid var(--szc-border);
650
+ background: color-mix(in srgb, var(--szc-bg) 90%, transparent);
651
+ backdrop-filter: blur(10px);
652
+ -webkit-backdrop-filter: blur(10px);
653
+ box-shadow: 0 -10px 28px color-mix(in srgb, var(--szc-fg) 6%, transparent);
654
+ padding-block-start: 10px;
655
+ padding-block-end: calc(10px + env(safe-area-inset-bottom, 0px));
656
+ }
657
+ /* Reserve room at the end of the checkout so the bar never covers content. */
658
+ .szc-root:has(.szc-footer-bar) {
659
+ padding-block-end: 88px;
660
+ }
661
+ }
662
+
663
+ /* ---- cart ----------------------------------------------------------- */
664
+ .szc-cart-list {
665
+ list-style: none;
666
+ margin: 0;
667
+ padding: 0;
668
+ display: flex;
669
+ flex-direction: column;
670
+ gap: 12px;
671
+ }
672
+ .szc-cart-row {
673
+ display: flex;
674
+ gap: 14px;
675
+ align-items: center;
676
+ padding: 14px;
677
+ border: 1px solid var(--szc-border);
678
+ border-radius: var(--szc-radius);
679
+ background: var(--szc-card);
680
+ }
681
+ .szc-product-placeholder,
682
+ .szc-cart-row__thumb {
683
+ width: 64px;
684
+ height: 64px;
685
+ border-radius: 12px;
686
+ flex: none;
687
+ }
688
+ .szc-product-placeholder {
689
+ display: flex;
690
+ align-items: center;
691
+ justify-content: center;
692
+ background: #ffffff;
693
+ border: 1px solid color-mix(in srgb, var(--szc-border) 85%, var(--szc-muted-fg));
694
+ color: color-mix(in srgb, var(--szc-muted-fg) 78%, var(--szc-accent));
695
+ box-shadow: 0 1px 2px rgb(15 23 42 / 3%);
696
+ }
697
+ .szc-cart-row__thumb {
698
+ object-fit: cover;
699
+ border: 1px solid color-mix(in srgb, var(--szc-border) 60%, transparent);
700
+ }
701
+ .szc-cart-row__main {
702
+ display: flex;
703
+ flex-direction: column;
704
+ gap: 3px;
705
+ flex: 1;
706
+ min-width: 0;
707
+ }
708
+ .szc-cart-row__name {
709
+ font-weight: 600;
710
+ }
711
+ .szc-cart-row__attrs {
712
+ font-size: 12px;
713
+ color: var(--szc-muted-fg);
714
+ display: flex;
715
+ flex-wrap: wrap;
716
+ align-items: center;
717
+ gap: 4px;
718
+ }
719
+ .szc-cart-row__attr {
720
+ display: inline-flex;
721
+ align-items: center;
722
+ gap: 4px;
723
+ }
724
+ .szc-cart-row__attr-sep {
725
+ margin-inline-end: 4px;
726
+ opacity: 0.6;
727
+ }
728
+ .szc-cart-row__swatch {
729
+ display: inline-block;
730
+ width: 12px;
731
+ height: 12px;
732
+ border-radius: 50%;
733
+ border: 1px solid rgba(0, 0, 0, 0.15);
734
+ flex-shrink: 0;
735
+ }
736
+ .szc-cart-row__price {
737
+ font-size: 13px;
738
+ color: var(--szc-muted-fg);
739
+ }
740
+ .szc-cart-row__side {
741
+ display: flex;
742
+ flex-direction: column;
743
+ align-items: flex-end;
744
+ gap: 6px;
745
+ }
746
+ .szc-cart-row__line-total {
747
+ font-weight: 700;
748
+ }
749
+ .szc-cart-row__discount {
750
+ color: var(--szc-danger);
751
+ font-size: 11.5px;
752
+ font-weight: 700;
753
+ white-space: nowrap;
754
+ }
755
+ .szc-qty {
756
+ direction: rtl;
757
+ display: inline-grid;
758
+ grid-template-columns: 26px 34px 26px;
759
+ align-items: center;
760
+ gap: 1px;
761
+ padding: 2px;
762
+ background: var(--szc-card);
763
+ border: 1px solid var(--szc-border);
764
+ border-radius: 9px;
765
+ box-shadow: 0 1px 2px rgb(15 23 42 / 4%);
766
+ transition: border-color 0.16s ease, box-shadow 0.16s ease;
767
+ }
768
+ .szc-qty:focus-within {
769
+ border-color: color-mix(in srgb, var(--szc-accent) 55%, var(--szc-border));
770
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--szc-accent) 12%, transparent);
771
+ }
772
+ .szc-qty--pending:not(:focus-within) {
773
+ border-color: color-mix(in srgb, var(--szc-accent) 28%, var(--szc-border));
774
+ }
775
+ .szc-qty__btn {
776
+ width: 26px;
777
+ height: 26px;
778
+ border: none;
779
+ border-radius: 7px;
780
+ background: transparent;
781
+ color: var(--szc-muted-fg);
782
+ display: inline-flex;
783
+ align-items: center;
784
+ justify-content: center;
785
+ cursor: pointer;
786
+ transition: background 0.14s ease, color 0.14s ease, transform 0.14s ease;
787
+ flex: none;
788
+ }
789
+ .szc-qty__btn:not(:disabled):hover {
790
+ background: var(--szc-accent-soft);
791
+ color: var(--szc-accent);
792
+ }
793
+ .szc-qty__btn:not(:disabled):active {
794
+ transform: scale(0.92);
795
+ }
796
+ .szc-qty__btn:disabled {
797
+ opacity: 0.3;
798
+ cursor: not-allowed;
799
+ }
800
+ .szc-qty__input {
801
+ direction: ltr;
802
+ width: 34px;
803
+ height: 24px;
804
+ padding: 0 2px;
805
+ border: none;
806
+ border-radius: 6px;
807
+ outline: none;
808
+ background: color-mix(in srgb, var(--szc-muted) 45%, var(--szc-card));
809
+ color: var(--szc-fg);
810
+ text-align: center;
811
+ font: inherit;
812
+ font-weight: 700;
813
+ font-size: 12px;
814
+ transition: background 0.14s ease, color 0.14s ease;
815
+ }
816
+ .szc-qty__input:focus {
817
+ background: var(--szc-accent-soft);
818
+ color: var(--szc-accent);
819
+ }
820
+ .szc-qty__input:disabled {
821
+ opacity: 0.55;
822
+ }
823
+ .szc-cart-row__remove {
824
+ border: none;
825
+ border-radius: 8px;
826
+ padding: 5px;
827
+ background: transparent;
828
+ color: var(--szc-muted-fg);
829
+ display: inline-flex;
830
+ align-items: center;
831
+ justify-content: center;
832
+ cursor: pointer;
833
+ transition: background 0.13s, color 0.13s;
834
+ }
835
+ .szc-cart-row__remove:not(:disabled):hover {
836
+ background: color-mix(in srgb, #ef4444 12%, transparent);
837
+ color: #ef4444;
838
+ }
839
+ .szc-cart-row__remove:disabled {
840
+ opacity: 0.35;
841
+ cursor: not-allowed;
842
+ }
843
+ @media (max-width: 560px) {
844
+ .szc-cart-row {
845
+ flex-wrap: wrap;
846
+ padding: 12px;
847
+ gap: 10px 12px;
848
+ }
849
+ /* Quantity / discount / total / remove drop below the product info in a
850
+ fixed two-row grid: counter + remove on top, total + discount under. */
851
+ .szc-cart-row__side {
852
+ width: 100%;
853
+ display: grid;
854
+ grid-template-columns: auto 1fr auto;
855
+ grid-template-areas:
856
+ 'qty . remove'
857
+ 'total total discount';
858
+ align-items: center;
859
+ gap: 10px;
860
+ border-top: 1px solid color-mix(in srgb, var(--szc-border) 70%, transparent);
861
+ padding-top: 10px;
862
+ }
863
+ .szc-cart-row__side .szc-qty {
864
+ grid-area: qty;
865
+ }
866
+ .szc-cart-row__remove {
867
+ grid-area: remove;
868
+ }
869
+ .szc-cart-row__discount {
870
+ grid-area: discount;
871
+ font-size: 11px;
872
+ }
873
+ .szc-cart-row__line-total {
874
+ grid-area: total;
875
+ justify-self: start;
876
+ font-size: 15px;
877
+ white-space: nowrap;
878
+ }
879
+ }
880
+
881
+ /* ---- shipping ------------------------------------------------------- */
882
+ .szc-shipping-methods {
883
+ display: flex;
884
+ flex-direction: column;
885
+ gap: 12px;
886
+ }
887
+ .szc-shipping-methods > .szc-shipping-section__head {
888
+ padding-inline: 4px;
889
+ }
890
+ .szc-shipping-pending {
891
+ display: flex;
892
+ align-items: center;
893
+ gap: 12px;
894
+ padding: 15px 16px;
895
+ border: 1px dashed color-mix(in srgb, var(--szc-accent) 28%, var(--szc-border));
896
+ border-radius: calc(var(--szc-radius) * 0.9);
897
+ color: var(--szc-muted-fg);
898
+ background: color-mix(in srgb, var(--szc-accent-soft) 46%, var(--szc-card));
899
+ }
900
+ .szc-shipping-pending__icon {
901
+ width: 38px;
902
+ height: 38px;
903
+ border-radius: calc(var(--szc-radius) * 0.68);
904
+ display: inline-flex;
905
+ align-items: center;
906
+ justify-content: center;
907
+ flex: none;
908
+ color: var(--szc-accent);
909
+ background: var(--szc-card);
910
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--szc-accent) 12%, var(--szc-border));
911
+ }
912
+ .szc-shipping-pending__icon svg {
913
+ width: 21px;
914
+ height: 21px;
915
+ }
916
+ .szc-shipping-pending__copy {
917
+ min-width: 0;
918
+ display: flex;
919
+ flex-direction: column;
920
+ gap: 2px;
921
+ }
922
+ .szc-shipping-pending__copy strong {
923
+ color: var(--szc-fg);
924
+ font-size: 13px;
925
+ }
926
+ .szc-shipping-pending__copy span {
927
+ font-size: 12px;
928
+ line-height: 1.65;
929
+ }
930
+ .szc-ship-groups {
931
+ display: flex;
932
+ flex-direction: column;
933
+ gap: 12px;
934
+ }
935
+ .szc-ship-group {
936
+ border: 1px solid var(--szc-border);
937
+ border-radius: calc(var(--szc-radius) * 1.15);
938
+ padding: 18px;
939
+ display: flex;
940
+ flex-direction: column;
941
+ gap: 14px;
942
+ background: var(--szc-card);
943
+ box-shadow: 0 12px 34px color-mix(in srgb, var(--szc-fg) 5%, transparent);
944
+ }
945
+ .szc-ship-group__head {
946
+ display: flex;
947
+ align-items: center;
948
+ gap: 10px;
949
+ padding-block-end: 12px;
950
+ border-bottom: 1px solid var(--szc-border);
951
+ }
952
+ .szc-ship-group__mark {
953
+ width: 42px;
954
+ height: 42px;
955
+ border-radius: calc(var(--szc-radius) * 0.72);
956
+ display: inline-flex;
957
+ align-items: center;
958
+ justify-content: center;
959
+ flex: none;
960
+ overflow: hidden;
961
+ color: var(--szc-rate-foreground, var(--szc-accent));
962
+ background: var(--szc-rate-color, var(--szc-accent-soft));
963
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--szc-rate-foreground, var(--szc-accent)) 14%, transparent);
964
+ }
965
+ .szc-ship-group__mark:has(img) {
966
+ background: #fff;
967
+ color: inherit;
968
+ box-shadow: inset 0 0 0 1px var(--szc-border);
969
+ }
970
+ .szc-ship-group__mark img {
971
+ width: 34px;
972
+ height: 34px;
973
+ object-fit: contain;
974
+ }
975
+ .szc-ship-group__heading {
976
+ min-width: 0;
977
+ display: flex;
978
+ flex-direction: column;
979
+ gap: 3px;
980
+ }
981
+ .szc-ship-group__title-row {
982
+ display: flex;
983
+ align-items: center;
984
+ gap: 8px;
985
+ flex-wrap: wrap;
986
+ }
987
+ .szc-ship-group__title {
988
+ font-weight: 700;
989
+ font-size: 15px;
990
+ }
991
+ .szc-ship-group__count {
992
+ font-size: 12px;
993
+ color: var(--szc-fg);
994
+ background: color-mix(in srgb, var(--szc-border) 65%, var(--szc-card));
995
+ padding: 2px 9px;
996
+ border-radius: 999px;
997
+ font-weight: 600;
998
+ }
999
+ .szc-ship-group__hint {
1000
+ display: flex;
1001
+ align-items: center;
1002
+ gap: 8px;
1003
+ color: var(--szc-muted-fg);
1004
+ font-size: 12px;
1005
+ }
1006
+ .szc-ship-group__desc {
1007
+ min-width: 0;
1008
+ overflow: hidden;
1009
+ text-overflow: ellipsis;
1010
+ white-space: nowrap;
1011
+ }
1012
+ .szc-ship-group__rate-price {
1013
+ flex: none;
1014
+ font-weight: 600;
1015
+ color: var(--szc-muted-fg);
1016
+ }
1017
+ .szc-ship-group__desc + .szc-ship-group__rate-price::before {
1018
+ content: '·';
1019
+ margin-inline-end: 8px;
1020
+ color: var(--szc-muted-fg);
1021
+ font-weight: 400;
1022
+ }
1023
+ .szc-ship-group__items {
1024
+ display: flex;
1025
+ gap: 10px;
1026
+ overflow-x: auto;
1027
+ overscroll-behavior-x: contain;
1028
+ scroll-snap-type: x proximity;
1029
+ cursor: grab;
1030
+ user-select: none;
1031
+ scrollbar-width: none; /* Firefox */
1032
+ -ms-overflow-style: none; /* old Edge/IE */
1033
+ }
1034
+ .szc-ship-group__items::-webkit-scrollbar {
1035
+ display: none; /* Chrome/Safari */
1036
+ }
1037
+ .szc-ship-group__items.szc-dragging {
1038
+ cursor: grabbing;
1039
+ scroll-snap-type: none;
1040
+ }
1041
+ .szc-ship-product {
1042
+ flex: 0 0 230px;
1043
+ scroll-snap-align: start;
1044
+ display: flex;
1045
+ align-items: center;
1046
+ gap: 11px;
1047
+ padding: 11px;
1048
+ border: 1px solid var(--szc-border);
1049
+ border-radius: calc(var(--szc-radius) * 0.78);
1050
+ background: color-mix(in srgb, var(--szc-muted) 42%, var(--szc-card));
1051
+ }
1052
+ .szc-ship-product__media {
1053
+ position: relative;
1054
+ width: 58px;
1055
+ height: 58px;
1056
+ flex: none;
1057
+ }
1058
+ .szc-ship-product__media img,
1059
+ .szc-ship-product__media .szc-product-placeholder {
1060
+ width: 100%;
1061
+ height: 100%;
1062
+ border-radius: calc(var(--szc-radius) * 0.62);
1063
+ object-fit: cover;
1064
+ -webkit-user-drag: none;
1065
+ }
1066
+ .szc-ship-product__media img {
1067
+ border: 1px solid color-mix(in srgb, var(--szc-border) 60%, transparent);
1068
+ }
1069
+ .szc-ship-product__quantity {
1070
+ position: absolute;
1071
+ inset-block-start: -6px;
1072
+ inset-inline-end: -6px;
1073
+ min-width: 22px;
1074
+ height: 22px;
1075
+ padding-inline: 5px;
1076
+ border: 2px solid var(--szc-card);
1077
+ border-radius: 999px;
1078
+ display: inline-flex;
1079
+ align-items: center;
1080
+ justify-content: center;
1081
+ background: var(--szc-fg);
1082
+ color: var(--szc-card);
1083
+ font-size: 11px;
1084
+ font-weight: 700;
1085
+ }
1086
+ .szc-ship-product__copy {
1087
+ min-width: 0;
1088
+ display: flex;
1089
+ flex-direction: column;
1090
+ gap: 4px;
1091
+ }
1092
+ .szc-ship-product__name {
1093
+ overflow: hidden;
1094
+ text-overflow: ellipsis;
1095
+ white-space: nowrap;
1096
+ font-size: 13px;
1097
+ }
1098
+ .szc-ship-product__attrs {
1099
+ overflow: hidden;
1100
+ text-overflow: ellipsis;
1101
+ white-space: nowrap;
1102
+ color: var(--szc-muted-fg);
1103
+ font-size: 11.5px;
1104
+ }
1105
+ .szc-rate-list {
1106
+ display: flex;
1107
+ flex-direction: column;
1108
+ gap: 8px;
1109
+ }
1110
+ .szc-rate {
1111
+ position: relative;
1112
+ flex-wrap: wrap;
1113
+ display: flex;
1114
+ align-items: center;
1115
+ gap: 11px;
1116
+ min-height: 52px;
1117
+ padding: 8px 12px;
1118
+ border: 1px solid var(--szc-border);
1119
+ border-radius: calc(var(--szc-radius) * 0.82);
1120
+ background: var(--szc-card);
1121
+ cursor: pointer;
1122
+ font: inherit;
1123
+ text-align: start;
1124
+ width: 100%;
1125
+ color: var(--szc-fg);
1126
+ transition: border-color 0.14s ease, background-color 0.14s ease;
1127
+ }
1128
+ .szc-rate:not(:disabled):hover {
1129
+ border-color: color-mix(in srgb, var(--szc-accent) 24%, var(--szc-border));
1130
+ background: color-mix(in srgb, var(--szc-accent) 3%, var(--szc-card));
1131
+ }
1132
+ .szc-rate:not(:disabled):active {
1133
+ background: color-mix(in srgb, var(--szc-accent) 5%, var(--szc-card));
1134
+ }
1135
+ .szc-rate:focus-visible {
1136
+ outline: 3px solid color-mix(in srgb, var(--szc-accent) 22%, transparent);
1137
+ outline-offset: 2px;
1138
+ }
1139
+ .szc-rate:disabled {
1140
+ cursor: wait;
1141
+ opacity: 0.6;
1142
+ }
1143
+ .szc-rate--selected {
1144
+ border-color: color-mix(in srgb, var(--szc-accent) 58%, var(--szc-border));
1145
+ background: color-mix(in srgb, var(--szc-accent) 7%, var(--szc-card));
1146
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--szc-accent) 7%, transparent);
1147
+ }
1148
+ .szc-rate--selected:not(:disabled):hover {
1149
+ border-color: color-mix(in srgb, var(--szc-accent) 64%, var(--szc-border));
1150
+ background: color-mix(in srgb, var(--szc-accent) 9%, var(--szc-card));
1151
+ }
1152
+ .szc-rate__icon {
1153
+ width: 36px;
1154
+ height: 36px;
1155
+ border-radius: calc(var(--szc-radius) * 0.66);
1156
+ display: inline-flex;
1157
+ align-items: center;
1158
+ justify-content: center;
1159
+ flex: none;
1160
+ overflow: hidden;
1161
+ background: var(--szc-rate-color, var(--szc-accent-soft));
1162
+ color: var(--szc-rate-foreground, var(--szc-accent));
1163
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--szc-rate-foreground, var(--szc-accent)) 14%, transparent);
1164
+ transition: box-shadow 0.14s ease;
1165
+ }
1166
+ .szc-rate--selected .szc-rate__icon {
1167
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--szc-rate-foreground, var(--szc-accent)) 24%, transparent);
1168
+ }
1169
+ /* Image/logo icons render on a clean white plate so brand artwork stays true. */
1170
+ .szc-rate__icon:has(img) {
1171
+ background: #fff;
1172
+ color: inherit;
1173
+ box-shadow: inset 0 0 0 1px var(--szc-border);
1174
+ }
1175
+ .szc-rate__icon img {
1176
+ width: 28px;
1177
+ height: 28px;
1178
+ object-fit: contain;
1179
+ }
1180
+ .szc-rate__copy {
1181
+ min-width: 0;
1182
+ flex: 1;
1183
+ display: flex;
1184
+ flex-direction: column;
1185
+ gap: 3px;
1186
+ }
1187
+ .szc-rate__radio {
1188
+ width: 20px;
1189
+ height: 20px;
1190
+ border-radius: 999px;
1191
+ border: 1.5px solid color-mix(in srgb, var(--szc-muted-fg) 55%, var(--szc-border));
1192
+ display: inline-flex;
1193
+ align-items: center;
1194
+ justify-content: center;
1195
+ flex: none;
1196
+ }
1197
+ .szc-rate--selected .szc-rate__radio {
1198
+ border-color: var(--szc-accent);
1199
+ background: var(--szc-accent);
1200
+ color: var(--szc-accent-foreground);
1201
+ }
1202
+ .szc-rate__name {
1203
+ font-weight: 600;
1204
+ font-size: 14px;
1205
+ }
1206
+ .szc-rate__price {
1207
+ color: var(--szc-muted-fg);
1208
+ font-size: 12px;
1209
+ }
1210
+ .szc-rate__description {
1211
+ flex: 0 0 100%;
1212
+ margin-top: 2px;
1213
+ padding-top: 10px;
1214
+ border-top: 1px solid var(--szc-border);
1215
+ color: var(--szc-muted-fg);
1216
+ font-size: 12px;
1217
+ line-height: 1.65;
1218
+ text-align: start;
1219
+ }
1220
+ .szc-ship-group__description {
1221
+ padding-top: 12px;
1222
+ border-top: 1px solid var(--szc-border);
1223
+ color: var(--szc-muted-fg);
1224
+ font-size: 12px;
1225
+ line-height: 1.65;
1226
+ }
1227
+ @media (max-width: 560px) {
1228
+ .szc-ship-group {
1229
+ padding: 14px;
1230
+ }
1231
+ .szc-ship-product {
1232
+ flex-basis: 80%;
1233
+ }
1234
+ .szc-rate {
1235
+ min-height: 50px;
1236
+ }
1237
+ }
1238
+ .szc-digital-note {
1239
+ display: flex;
1240
+ gap: 12px;
1241
+ padding: 14px;
1242
+ border: 1px dashed var(--szc-border);
1243
+ border-radius: var(--szc-radius);
1244
+ background: var(--szc-muted);
1245
+ }
1246
+ .szc-digital-note ul {
1247
+ margin: 6px 0 0;
1248
+ padding-inline-start: 18px;
1249
+ color: var(--szc-muted-fg);
1250
+ font-size: 13px;
1251
+ }
1252
+
1253
+ /* ---- payment -------------------------------------------------------- */
1254
+ .szc-pay-list {
1255
+ display: flex;
1256
+ flex-direction: column;
1257
+ gap: 10px;
1258
+ }
1259
+ .szc-pay {
1260
+ display: flex;
1261
+ align-items: center;
1262
+ gap: 14px;
1263
+ padding: 14px 16px;
1264
+ border: 1px solid var(--szc-border);
1265
+ border-radius: var(--szc-radius);
1266
+ background: var(--szc-card);
1267
+ cursor: pointer;
1268
+ font: inherit;
1269
+ text-align: start;
1270
+ transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
1271
+ }
1272
+ .szc-pay:hover {
1273
+ border-color: var(--szc-accent);
1274
+ }
1275
+ .szc-pay--selected {
1276
+ border-color: var(--szc-accent);
1277
+ background: var(--szc-accent-soft);
1278
+ box-shadow: 0 0 0 1px var(--szc-accent) inset;
1279
+ }
1280
+ .szc-pay__icon {
1281
+ width: 40px;
1282
+ height: 40px;
1283
+ flex: none;
1284
+ display: inline-flex;
1285
+ align-items: center;
1286
+ justify-content: center;
1287
+ border-radius: calc(var(--szc-radius) * 0.6);
1288
+ background: var(--szc-muted);
1289
+ color: var(--szc-muted-fg);
1290
+ transition: background 0.15s, color 0.15s;
1291
+ }
1292
+ .szc-pay--selected .szc-pay__icon {
1293
+ background: var(--szc-accent);
1294
+ color: #fff;
1295
+ }
1296
+ .szc-pay__body {
1297
+ display: flex;
1298
+ flex-direction: column;
1299
+ gap: 3px;
1300
+ flex: 1;
1301
+ min-width: 0;
1302
+ }
1303
+ .szc-pay__name {
1304
+ font-weight: 600;
1305
+ line-height: 1.3;
1306
+ }
1307
+ .szc-pay__desc {
1308
+ font-size: 13px;
1309
+ color: var(--szc-muted-fg);
1310
+ line-height: 1.4;
1311
+ }
1312
+ .szc-pay__radio {
1313
+ width: 20px;
1314
+ height: 20px;
1315
+ border-radius: 999px;
1316
+ border: 1.5px solid color-mix(in srgb, var(--szc-muted-fg) 55%, var(--szc-border));
1317
+ display: inline-flex;
1318
+ align-items: center;
1319
+ justify-content: center;
1320
+ flex: none;
1321
+ transition: border-color 0.15s, background 0.15s, color 0.15s;
1322
+ }
1323
+ .szc-pay--selected .szc-pay__radio {
1324
+ border-color: var(--szc-accent);
1325
+ background: var(--szc-accent);
1326
+ color: var(--szc-accent-foreground);
1327
+ }
1328
+ .szc-discount-field {
1329
+ display: flex;
1330
+ flex-direction: column;
1331
+ gap: 6px;
1332
+ }
1333
+ .szc-discount {
1334
+ display: flex;
1335
+ gap: 10px;
1336
+ align-items: center;
1337
+ }
1338
+ .szc-discount__error {
1339
+ display: flex;
1340
+ align-items: center;
1341
+ gap: 6px;
1342
+ font-size: 12.5px;
1343
+ color: #ef4444;
1344
+ margin: 0;
1345
+ }
1346
+ .szc-discount__error svg {
1347
+ flex: none;
1348
+ }
1349
+ .szc-discount__inputwrap {
1350
+ position: relative;
1351
+ flex: 1;
1352
+ display: flex;
1353
+ }
1354
+ .szc-discount__inputwrap > svg {
1355
+ position: absolute;
1356
+ inset-inline-start: 12px;
1357
+ top: 50%;
1358
+ transform: translateY(-50%);
1359
+ color: var(--szc-muted-fg);
1360
+ pointer-events: none;
1361
+ }
1362
+ .szc-discount__inputwrap .szc-input {
1363
+ flex: 1;
1364
+ padding-inline-start: 38px;
1365
+ text-transform: uppercase;
1366
+ letter-spacing: 0.04em;
1367
+ }
1368
+ .szc-discount__inputwrap .szc-input::placeholder {
1369
+ text-transform: none;
1370
+ letter-spacing: normal;
1371
+ }
1372
+ .szc-discount--applied {
1373
+ padding: 12px 14px;
1374
+ flex-wrap: wrap;
1375
+ border: 1px solid color-mix(in srgb, var(--szc-success) 40%, var(--szc-border));
1376
+ border-radius: calc(var(--szc-radius) * 0.7);
1377
+ background: color-mix(in srgb, var(--szc-success) 6%, transparent);
1378
+ }
1379
+ .szc-discount__icon {
1380
+ width: 34px;
1381
+ height: 34px;
1382
+ border-radius: 999px;
1383
+ display: inline-flex;
1384
+ align-items: center;
1385
+ justify-content: center;
1386
+ flex: none;
1387
+ color: var(--szc-success);
1388
+ background: color-mix(in srgb, var(--szc-success) 14%, transparent);
1389
+ }
1390
+ .szc-discount__body {
1391
+ flex: 1;
1392
+ min-width: 0;
1393
+ display: flex;
1394
+ flex-direction: column;
1395
+ gap: 2px;
1396
+ }
1397
+ .szc-discount__badge {
1398
+ display: inline-flex;
1399
+ align-items: center;
1400
+ gap: 5px;
1401
+ flex: none;
1402
+ font-size: 12px;
1403
+ font-weight: 700;
1404
+ line-height: 1;
1405
+ padding: 5px 10px;
1406
+ border-radius: 999px;
1407
+ color: var(--szc-success);
1408
+ background: color-mix(in srgb, var(--szc-success) 14%, transparent);
1409
+ }
1410
+ .szc-discount__code {
1411
+ font-weight: 700;
1412
+ letter-spacing: 0.05em;
1413
+ }
1414
+ .szc-discount__desc {
1415
+ font-size: 12.5px;
1416
+ font-weight: 600;
1417
+ color: var(--szc-success);
1418
+ }
1419
+
1420
+ /* ---- review --------------------------------------------------------- */
1421
+ .szc-review-row {
1422
+ border: 1px solid var(--szc-border);
1423
+ border-radius: var(--szc-radius);
1424
+ padding: 14px 16px;
1425
+ display: flex;
1426
+ flex-direction: column;
1427
+ gap: 6px;
1428
+ }
1429
+ .szc-review-row__head {
1430
+ display: flex;
1431
+ align-items: center;
1432
+ justify-content: space-between;
1433
+ }
1434
+ .szc-review-row__title {
1435
+ font-size: 13px;
1436
+ font-weight: 700;
1437
+ color: var(--szc-muted-fg);
1438
+ }
1439
+ .szc-review-ship {
1440
+ display: flex;
1441
+ justify-content: space-between;
1442
+ gap: 12px;
1443
+ }
1444
+ .szc-link {
1445
+ background: none;
1446
+ border: none;
1447
+ color: var(--szc-accent);
1448
+ cursor: pointer;
1449
+ font: inherit;
1450
+ font-size: 13px;
1451
+ }
1452
+ .szc-pay-cta {
1453
+ margin-top: 6px;
1454
+ font-size: 15px;
1455
+ padding-block: 15px;
1456
+ }
1457
+
1458
+ /* ---- order summary -------------------------------------------------- */
1459
+ /* Sidebar column: summary card + CTA stick together while the page scrolls. */
1460
+ .szc-side {
1461
+ position: sticky;
1462
+ top: 16px;
1463
+ display: flex;
1464
+ flex-direction: column;
1465
+ gap: 14px;
1466
+ min-width: 0;
1467
+ }
1468
+ @media (max-width: 880px) {
1469
+ .szc-side {
1470
+ position: static;
1471
+ }
1472
+ }
1473
+ .szc-summary {
1474
+ background: var(--szc-summary-bg);
1475
+ border-radius: calc(var(--szc-radius) * 1.2);
1476
+ padding: 22px;
1477
+ display: flex;
1478
+ flex-direction: column;
1479
+ gap: 18px;
1480
+ }
1481
+ .szc-summary__total-head {
1482
+ display: flex;
1483
+ flex-direction: column;
1484
+ align-items: center;
1485
+ gap: 6px;
1486
+ text-align: center;
1487
+ }
1488
+ .szc-summary__total-label {
1489
+ color: var(--szc-muted-fg);
1490
+ font-size: 14px;
1491
+ }
1492
+ .szc-summary__total-value {
1493
+ font-size: 30px;
1494
+ font-weight: 800;
1495
+ color: var(--szc-accent);
1496
+ }
1497
+ .szc-summary__lines {
1498
+ margin: 0;
1499
+ display: flex;
1500
+ flex-direction: column;
1501
+ gap: 9px;
1502
+ border-top: 1px solid var(--szc-border);
1503
+ padding-top: 16px;
1504
+ }
1505
+ .szc-summary__line {
1506
+ display: flex;
1507
+ justify-content: space-between;
1508
+ font-size: 13.5px;
1509
+ }
1510
+ .szc-summary__line dt {
1511
+ color: var(--szc-muted-fg);
1512
+ }
1513
+ .szc-summary__line--neg {
1514
+ color: var(--szc-success);
1515
+ }
1516
+ .szc-summary__line--discount dt,
1517
+ .szc-summary__line--discount dd {
1518
+ color: var(--szc-danger);
1519
+ font-weight: 700;
1520
+ }
1521
+ .szc-summary__free {
1522
+ color: var(--szc-success);
1523
+ font-weight: 700;
1524
+ }
1525
+ .szc-summary__grand {
1526
+ display: flex;
1527
+ justify-content: space-between;
1528
+ font-weight: 800;
1529
+ font-size: 16px;
1530
+ border-top: 1px solid var(--szc-border);
1531
+ padding-top: 14px;
1532
+ color: var(--szc-accent);
1533
+ }
1534
+ @media (max-width: 560px) {
1535
+ .szc-summary {
1536
+ padding: 18px 16px;
1537
+ gap: 15px;
1538
+ }
1539
+ .szc-summary__total-value {
1540
+ font-size: 26px;
1541
+ }
1542
+ }
1543
+
1544
+ /* ---- result --------------------------------------------------------- */
1545
+ .szc-result-wrap {
1546
+ padding: 24px;
1547
+ display: flex;
1548
+ justify-content: center;
1549
+ }
1550
+ .szc-result {
1551
+ max-width: 460px;
1552
+ width: 100%;
1553
+ text-align: center;
1554
+ display: flex;
1555
+ flex-direction: column;
1556
+ align-items: center;
1557
+ gap: 12px;
1558
+ padding: 40px 24px;
1559
+ border: 1px solid var(--szc-border);
1560
+ border-radius: calc(var(--szc-radius) * 1.2);
1561
+ background: var(--szc-card);
1562
+ }
1563
+ .szc-result--success .szc-result__icon {
1564
+ color: var(--szc-success);
1565
+ }
1566
+ .szc-result--failed .szc-result__icon,
1567
+ .szc-result--stock_violated .szc-result__icon {
1568
+ color: var(--szc-danger);
1569
+ }
1570
+ .szc-result--pending .szc-result__icon {
1571
+ color: var(--szc-accent);
1572
+ }
1573
+ .szc-result__title {
1574
+ margin: 4px 0 0;
1575
+ font-size: 20px;
1576
+ }
1577
+ .szc-result__order {
1578
+ font-size: 14px;
1579
+ }
1580
+ .szc-result__actions {
1581
+ display: flex;
1582
+ gap: 10px;
1583
+ margin-top: 12px;
1584
+ flex-wrap: wrap;
1585
+ justify-content: center;
1586
+ }
1587
+
1588
+ /* ---- misc ----------------------------------------------------------- */
1589
+ .szc-error {
1590
+ padding: 12px 14px;
1591
+ border-radius: calc(var(--szc-radius) * 0.6);
1592
+ background: color-mix(in srgb, var(--szc-danger) 10%, #fff);
1593
+ color: var(--szc-danger);
1594
+ border: 1px solid color-mix(in srgb, var(--szc-danger) 30%, #fff);
1595
+ font-size: 13.5px;
1596
+ }
1597
+ /* ---- checkout skeleton --------------------------------------------- */
1598
+ .szc-skeleton-layout {
1599
+ min-height: 440px;
1600
+ }
1601
+ .szc-skeleton {
1602
+ display: block;
1603
+ border-radius: 7px;
1604
+ background: color-mix(in srgb, var(--szc-border) 62%, var(--szc-card));
1605
+ animation: szc-skeleton-pulse 1.35s ease-in-out infinite;
1606
+ }
1607
+ @keyframes szc-skeleton-pulse {
1608
+ 0%, 100% { opacity: 0.52; }
1609
+ 50% { opacity: 0.92; }
1610
+ }
1611
+ .szc-skeleton-cart-row {
1612
+ min-height: 94px;
1613
+ display: flex;
1614
+ align-items: center;
1615
+ gap: 14px;
1616
+ padding: 14px;
1617
+ border: 1px solid var(--szc-border);
1618
+ border-radius: var(--szc-radius);
1619
+ background: var(--szc-card);
1620
+ }
1621
+ .szc-skeleton-copy {
1622
+ flex: 1;
1623
+ min-width: 0;
1624
+ display: flex;
1625
+ flex-direction: column;
1626
+ gap: 7px;
1627
+ }
1628
+ .szc-skeleton--thumb {
1629
+ width: 64px;
1630
+ height: 64px;
1631
+ border-radius: 12px;
1632
+ flex: none;
1633
+ }
1634
+ .szc-skeleton--title {
1635
+ width: min(68%, 190px);
1636
+ height: 14px;
1637
+ }
1638
+ .szc-skeleton--text {
1639
+ width: min(52%, 140px);
1640
+ height: 10px;
1641
+ }
1642
+ .szc-skeleton--price {
1643
+ width: 72px;
1644
+ height: 12px;
1645
+ }
1646
+ .szc-skeleton--counter {
1647
+ width: 92px;
1648
+ height: 32px;
1649
+ border-radius: 9px;
1650
+ flex: none;
1651
+ }
1652
+ .szc-skeleton--button {
1653
+ width: 100%;
1654
+ height: 51px;
1655
+ border-radius: calc(var(--szc-radius) * 0.7);
1656
+ }
1657
+ .szc-summary--skeleton {
1658
+ min-height: 440px;
1659
+ }
1660
+ .szc-skeleton--summary-label {
1661
+ width: 70px;
1662
+ height: 12px;
1663
+ }
1664
+ .szc-skeleton--summary-total {
1665
+ width: 190px;
1666
+ height: 38px;
1667
+ border-radius: 10px;
1668
+ }
1669
+ .szc-skeleton-summary-lines {
1670
+ display: flex;
1671
+ flex-direction: column;
1672
+ gap: 11px;
1673
+ border-top: 1px solid var(--szc-border);
1674
+ padding-top: 16px;
1675
+ }
1676
+ .szc-skeleton-summary-lines div,
1677
+ .szc-skeleton-summary-grand {
1678
+ display: flex;
1679
+ align-items: center;
1680
+ justify-content: space-between;
1681
+ }
1682
+ .szc-skeleton-summary-lines .szc-skeleton {
1683
+ width: 72px;
1684
+ height: 11px;
1685
+ }
1686
+ .szc-skeleton-summary-grand {
1687
+ border-top: 1px solid var(--szc-border);
1688
+ padding-top: 14px;
1689
+ }
1690
+ .szc-skeleton-summary-grand .szc-skeleton {
1691
+ width: 88px;
1692
+ height: 15px;
1693
+ }
1694
+ @media (prefers-reduced-motion: reduce) {
1695
+ .szc-skeleton { animation: none; }
1696
+ }