@develemit/commerce-admin 0.6.0 → 0.7.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.
Files changed (67) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +84 -8
  3. package/dist/client/admin-client.d.ts +3 -2
  4. package/dist/client/errors.d.ts +5 -0
  5. package/dist/client/index.js +1 -1
  6. package/dist/{client-CSjuKdIE.js → client-DCL5DSHP.js} +55 -49
  7. package/dist/client-DCL5DSHP.js.map +1 -0
  8. package/dist/components/admin-layout/admin-layout.d.ts +5 -6
  9. package/dist/components/admin-layout/nav-icons.d.ts +9 -0
  10. package/dist/components/admin-layout/nav-items.d.ts +36 -0
  11. package/dist/components/admin-layout/use-more-sheet.d.ts +5 -0
  12. package/dist/components/empty-state/empty-state.d.ts +10 -0
  13. package/dist/components/notice/notice.d.ts +5 -1
  14. package/dist/components/page-header/admin-page-header.d.ts +8 -0
  15. package/dist/components/setup-checklist/setup-checklist.d.ts +15 -0
  16. package/dist/components/switch/switch.d.ts +7 -0
  17. package/dist/index.d.ts +12 -0
  18. package/dist/index.js +3248 -1109
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/admin-labels.d.ts +2 -0
  21. package/dist/lib/discount-labels.d.ts +1 -0
  22. package/dist/lib/fill-alts.d.ts +3 -0
  23. package/dist/lib/order-labels.d.ts +1 -0
  24. package/dist/lib/product-draft.d.ts +11 -0
  25. package/dist/lib/product-flow-labels.d.ts +54 -0
  26. package/dist/lib/product-labels.d.ts +53 -0
  27. package/dist/lib/product-missing.d.ts +4 -0
  28. package/dist/lib/product-sheet-actions.d.ts +13 -0
  29. package/dist/lib/shipping-labels.d.ts +2 -0
  30. package/dist/lib/stock-labels.d.ts +41 -0
  31. package/dist/lib/use-batch-upload.d.ts +38 -0
  32. package/dist/lib/use-focus-trap.d.ts +2 -0
  33. package/dist/lib/use-image-upload.d.ts +3 -2
  34. package/dist/lib/use-product-autosave.d.ts +95 -0
  35. package/dist/lib/use-product-pages.d.ts +2 -2
  36. package/dist/styles.css +1300 -55
  37. package/dist/views/products/add-several/admin-add-several.d.ts +5 -0
  38. package/dist/views/products/add-several/photo-picker.d.ts +7 -0
  39. package/dist/views/products/admin-product-editor.d.ts +3 -1
  40. package/dist/views/products/admin-product-list.d.ts +13 -1
  41. package/dist/views/products/finish-drafts/admin-finish-drafts.d.ts +7 -0
  42. package/dist/views/products/finish-drafts/piece-card.d.ts +10 -0
  43. package/dist/views/products/finish-drafts/piece-fields.d.ts +7 -0
  44. package/dist/views/products/finish-drafts/piece-summary.d.ts +10 -0
  45. package/dist/views/products/finish-drafts/use-publish-pieces.d.ts +52 -0
  46. package/dist/views/products/product-card.d.ts +6 -0
  47. package/dist/views/products/product-flow/admin-product-flow.d.ts +15 -0
  48. package/dist/views/products/product-flow/basics-section.d.ts +6 -0
  49. package/dist/views/products/product-flow/flow-actions.d.ts +10 -0
  50. package/dist/views/products/product-flow/flow-frame.d.ts +28 -0
  51. package/dist/views/products/product-flow/flow-images.d.ts +7 -0
  52. package/dist/views/products/product-flow/flow-section-props.d.ts +5 -0
  53. package/dist/views/products/product-flow/flow-success.d.ts +8 -0
  54. package/dist/views/products/product-flow/flow-test-helpers.d.ts +12 -0
  55. package/dist/views/products/product-flow/photos-section.d.ts +9 -0
  56. package/dist/views/products/product-flow/preview-section.d.ts +10 -0
  57. package/dist/views/products/product-flow/story-section.d.ts +8 -0
  58. package/dist/views/products/product-flow/use-product-flow.d.ts +138 -0
  59. package/dist/views/products/product-sheet/admin-product-sheet.d.ts +8 -0
  60. package/dist/views/products/product-sheet/sheet-carousel.d.ts +4 -0
  61. package/dist/views/products/product-sheet/sheet-edit-link.d.ts +14 -0
  62. package/dist/views/products/product-sheet/use-product-change.d.ts +16 -0
  63. package/dist/views/products/product-toolbar.d.ts +10 -0
  64. package/dist/views/products/product-welcome.d.ts +8 -0
  65. package/dist/views/shipping/admin-shipping-rates.d.ts +6 -1
  66. package/package.json +11 -3
  67. package/dist/client-CSjuKdIE.js.map +0 -1
package/dist/styles.css CHANGED
@@ -1,4 +1,28 @@
1
1
  .sfa-root {
2
+ --sfa-accent-soft: var(
3
+ --sf-color-accent-soft,
4
+ color-mix(
5
+ in srgb,
6
+ var(--sf-color-accent, #1a1a1a) 12%,
7
+ var(--sf-color-bg, #ffffff)
8
+ )
9
+ );
10
+ --sfa-success: var(--sf-color-success, #1b7a3d);
11
+ --sfa-success-soft: var(
12
+ --sf-color-success-soft,
13
+ color-mix(in srgb, var(--sfa-success) 14%, var(--sf-color-bg, #ffffff))
14
+ );
15
+ --sfa-warning: var(--sf-color-warning, #b26a00);
16
+ --sfa-warning-soft: var(
17
+ --sf-color-warning-soft,
18
+ color-mix(in srgb, var(--sfa-warning) 14%, var(--sf-color-bg, #ffffff))
19
+ );
20
+ --sfa-shadow-raised: var(
21
+ --sf-shadow-raised,
22
+ 0 6px 20px color-mix(in srgb, var(--sf-color-fg, #1a1a1a) 14%, transparent)
23
+ );
24
+ --sfa-focus: var(--sf-color-focus, var(--sf-color-accent, #1a1a1a));
25
+ --sfa-unit: var(--sf-space-unit, 0.25rem);
2
26
  color: var(--sf-color-fg, #1a1a1a);
3
27
  background: var(--sf-color-bg, #ffffff);
4
28
  font-family: var(--sf-font-body, system-ui, sans-serif);
@@ -9,44 +33,294 @@
9
33
  background: var(--sf-color-surface, #f6f6f6);
10
34
  padding: calc(var(--sf-space-unit, 0.25rem) * 4);
11
35
  }
12
- .sfa-btn {
13
- min-width: 44px;
14
- min-height: 44px;
15
- padding: 0 calc(var(--sf-space-unit, 0.25rem) * 4);
36
+ .sfa-root :focus-visible {
37
+ outline: 3px solid var(--sfa-focus);
38
+ outline-offset: 2px;
39
+ }
40
+ .sfa-btn,
41
+ .sfa-chip {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ justify-content: center;
45
+ gap: calc(var(--sfa-unit) * 2);
46
+ box-sizing: border-box;
16
47
  font: inherit;
17
- font-size: 1rem;
48
+ font-weight: 700;
49
+ text-decoration: none;
18
50
  border: 1px solid var(--sf-color-border, #e0e0e0);
19
- border-radius: var(--sf-radius, 4px);
20
- background: var(--sf-color-bg, #ffffff);
21
- color: inherit;
51
+ border-radius: 999px;
52
+ background: var(--sf-color-surface, #f6f6f6);
53
+ color: var(--sf-color-fg, #1a1a1a);
22
54
  cursor: pointer;
23
55
  }
56
+ .sfa-btn {
57
+ min-width: 48px;
58
+ min-height: 48px;
59
+ padding: 0 calc(var(--sfa-unit) * 5);
60
+ font-size: 1rem;
61
+ }
24
62
  .sfa-btn--primary {
25
63
  background: var(--sf-color-accent, #1a1a1a);
64
+ border-color: var(--sf-color-accent, #1a1a1a);
26
65
  color: var(--sf-color-accent-fg, #ffffff);
27
66
  }
67
+ .sfa-btn--ghost {
68
+ background: transparent;
69
+ border-color: transparent;
70
+ }
28
71
  .sfa-btn--danger {
29
72
  background: var(--sf-color-danger, #b00020);
73
+ border-color: var(--sf-color-danger, #b00020);
30
74
  color: #ffffff;
31
75
  }
76
+ .sfa-btn:disabled {
77
+ opacity: 0.5;
78
+ cursor: not-allowed;
79
+ }
80
+ /* 44px, not the 40px of the design: admin-tap-targets.spec guards filters. */
81
+ .sfa-chip {
82
+ min-height: 44px;
83
+ padding: 0 calc(var(--sfa-unit) * 4);
84
+ font-size: 0.875rem;
85
+ white-space: nowrap;
86
+ }
87
+ .sfa-chip[aria-pressed='true'] {
88
+ background: var(--sf-color-accent, #1a1a1a);
89
+ border-color: var(--sf-color-accent, #1a1a1a);
90
+ color: var(--sf-color-accent-fg, #ffffff);
91
+ }
92
+ .sfa-input,
93
+ .sfa-root
94
+ :is(input, select, textarea):not(
95
+ [type='checkbox'],
96
+ [type='radio'],
97
+ [type='file'],
98
+ [type='hidden']
99
+ ) {
100
+ box-sizing: border-box;
101
+ min-height: 52px;
102
+ padding: 12px 14px;
103
+ font: inherit;
104
+ font-size: 1rem;
105
+ border: 1px solid var(--sf-color-border, #e0e0e0);
106
+ border-radius: var(--sf-radius, 4px);
107
+ background: var(--sf-color-surface, #ffffff);
108
+ color: var(--sf-color-fg, #1a1a1a);
109
+ }
110
+ .sfa-input:focus,
111
+ .sfa-root :is(input, select, textarea):focus {
112
+ border-color: var(--sf-color-accent, #1a1a1a);
113
+ outline: none;
114
+ box-shadow: 0 0 0 3px var(--sfa-accent-soft);
115
+ }
116
+ .sfa-root input[type='checkbox'],
117
+ .sfa-root input[type='radio'] {
118
+ min-height: 24px;
119
+ }
32
120
  .sfa-layout {
33
- display: flex;
34
- flex-direction: column;
35
121
  min-height: 100vh;
122
+ padding-bottom: calc(72px + env(safe-area-inset-bottom, 0px));
36
123
  }
37
- .sfa-nav ul {
38
- display: flex;
39
- flex-wrap: wrap;
40
- gap: calc(var(--sf-space-unit, 0.25rem) * 2);
124
+ .sfa-layout__content {
125
+ box-sizing: border-box;
126
+ width: 100%;
127
+ max-width: 1120px;
128
+ margin: 0 auto;
129
+ padding: calc(var(--sfa-unit) * 4);
130
+ }
131
+ .sfa-sidebar {
132
+ display: none;
133
+ }
134
+ .sfa-nav ul,
135
+ .sfa-tabbar ul,
136
+ .sfa-more__list {
41
137
  margin: 0;
42
- padding: calc(var(--sf-space-unit, 0.25rem) * 2);
138
+ padding: 0;
43
139
  list-style: none;
44
140
  }
45
- .sfa-nav__link {
141
+ .sfa-nav__icon {
46
142
  display: inline-flex;
143
+ }
144
+ .sfa-nav__badge {
145
+ min-width: 20px;
146
+ padding: 0 6px;
147
+ border-radius: 999px;
148
+ background: var(--sf-color-accent, #1a1a1a);
149
+ color: var(--sf-color-accent-fg, #ffffff);
150
+ font-size: 0.75rem;
151
+ font-weight: 700;
152
+ line-height: 20px;
153
+ text-align: center;
154
+ }
155
+ .sfa-tabbar {
156
+ position: fixed;
157
+ inset: auto 0 0 0;
158
+ z-index: 40;
159
+ padding-bottom: env(safe-area-inset-bottom, 0px);
160
+ background: var(--sf-color-bg, #ffffff);
161
+ border-top: 1px solid var(--sf-color-border, #e0e0e0);
162
+ }
163
+ .sfa-tabbar ul {
164
+ display: flex;
165
+ }
166
+ .sfa-tabbar li {
167
+ flex: 1;
168
+ min-width: 0;
169
+ }
170
+ .sfa-tabbar__item {
171
+ position: relative;
172
+ display: flex;
173
+ flex-direction: column;
47
174
  align-items: center;
48
- min-height: 44px;
49
- padding: 0 calc(var(--sf-space-unit, 0.25rem) * 3);
175
+ justify-content: center;
176
+ gap: 2px;
177
+ width: 100%;
178
+ min-height: 64px;
179
+ box-sizing: border-box;
180
+ padding: 6px 2px;
181
+ font: inherit;
182
+ font-size: 0.75rem;
183
+ font-weight: 700;
184
+ text-decoration: none;
185
+ color: var(--sf-color-fg, #1a1a1a);
186
+ background: transparent;
187
+ border: 0;
188
+ cursor: pointer;
189
+ }
190
+ .sfa-tabbar__item .sfa-nav__label {
191
+ max-width: 100%;
192
+ overflow: hidden;
193
+ text-overflow: ellipsis;
194
+ white-space: nowrap;
195
+ }
196
+ .sfa-tabbar__item .sfa-nav__badge {
197
+ position: absolute;
198
+ top: 6px;
199
+ left: calc(50% + 6px);
200
+ }
201
+ .sfa-nav__badge--dot {
202
+ min-width: 10px;
203
+ width: 10px;
204
+ height: 10px;
205
+ padding: 0;
206
+ }
207
+ .sfa-more[hidden] {
208
+ display: none;
209
+ }
210
+ .sfa-more {
211
+ position: fixed;
212
+ inset: auto 0 calc(64px + env(safe-area-inset-bottom, 0px)) 0;
213
+ z-index: 45;
214
+ display: grid;
215
+ gap: calc(var(--sfa-unit) * 3);
216
+ padding: calc(var(--sfa-unit) * 4);
217
+ background: var(--sf-color-bg, #ffffff);
218
+ border-radius: 20px 20px 0 0;
219
+ box-shadow: var(--sfa-shadow-raised);
220
+ }
221
+ .sfa-more__backdrop {
222
+ position: fixed;
223
+ inset: 0;
224
+ z-index: 42;
225
+ border: 0;
226
+ background: rgba(0, 0, 0, 0.4);
227
+ }
228
+ .sfa-more .sfa-nav__link {
229
+ display: flex;
230
+ align-items: center;
231
+ gap: calc(var(--sfa-unit) * 3);
232
+ min-height: 48px;
233
+ color: inherit;
234
+ text-decoration: none;
235
+ font-weight: 700;
236
+ }
237
+ .sfa-page-header {
238
+ margin-bottom: calc(var(--sfa-unit) * 4);
239
+ }
240
+ .sfa-page-header__row {
241
+ display: flex;
242
+ align-items: center;
243
+ justify-content: space-between;
244
+ gap: calc(var(--sfa-unit) * 3);
245
+ }
246
+ .sfa-page-header__title {
247
+ margin: 0;
248
+ font-family: var(--sf-font-display, inherit);
249
+ font-size: 1.75rem;
250
+ line-height: 1.1;
251
+ min-width: 0;
252
+ }
253
+ .sfa-page-header__actions {
254
+ display: flex;
255
+ align-items: center;
256
+ gap: calc(var(--sfa-unit) * 2);
257
+ flex: none;
258
+ }
259
+ .sfa-fab .sfa-btn {
260
+ position: fixed;
261
+ right: calc(var(--sfa-unit) * 4);
262
+ bottom: calc(80px + env(safe-area-inset-bottom, 0px));
263
+ z-index: 35;
264
+ box-shadow: var(--sfa-shadow-raised);
265
+ }
266
+ @media (min-width: 900px) {
267
+ .sfa-layout {
268
+ display: grid;
269
+ grid-template-columns: 240px minmax(0, 1fr);
270
+ align-items: start;
271
+ padding-bottom: 0;
272
+ }
273
+ .sfa-tabbar,
274
+ .sfa-more,
275
+ .sfa-more__backdrop {
276
+ display: none;
277
+ }
278
+ .sfa-sidebar {
279
+ position: sticky;
280
+ top: 0;
281
+ display: flex;
282
+ flex-direction: column;
283
+ gap: calc(var(--sfa-unit) * 6);
284
+ box-sizing: border-box;
285
+ height: 100vh;
286
+ padding: calc(var(--sfa-unit) * 6) calc(var(--sfa-unit) * 4);
287
+ border-right: 1px solid var(--sf-color-border, #e0e0e0);
288
+ background: var(--sf-color-surface, #f6f6f6);
289
+ }
290
+ .sfa-sidebar .sfa-nav ul {
291
+ display: grid;
292
+ gap: calc(var(--sfa-unit) * 1);
293
+ }
294
+ .sfa-sidebar .sfa-nav__link {
295
+ display: flex;
296
+ align-items: center;
297
+ gap: calc(var(--sfa-unit) * 3);
298
+ min-height: 48px;
299
+ padding: 0 calc(var(--sfa-unit) * 3);
300
+ border-radius: var(--sf-radius, 8px);
301
+ color: inherit;
302
+ text-decoration: none;
303
+ font-weight: 600;
304
+ }
305
+ .sfa-sidebar .sfa-nav__link:hover {
306
+ background: var(--sfa-accent-soft);
307
+ }
308
+ .sfa-sidebar .sfa-nav__badge {
309
+ margin-left: auto;
310
+ }
311
+ .sfa-sidebar .sfa-layout__footer {
312
+ margin-top: auto;
313
+ }
314
+ .sfa-layout__content {
315
+ padding: calc(var(--sfa-unit) * 10) calc(var(--sfa-unit) * 8);
316
+ }
317
+ .sfa-page-header__title {
318
+ font-size: 2rem;
319
+ }
320
+ .sfa-fab .sfa-btn {
321
+ position: static;
322
+ box-shadow: none;
323
+ }
50
324
  }
51
325
  /* Bare inline links measure ~22px; hosts cannot restyle kit internals. */
52
326
  .sfa-link--tap {
@@ -55,10 +329,6 @@
55
329
  min-height: 44px;
56
330
  padding: 0 calc(var(--sf-space-unit, 0.25rem) * 2);
57
331
  }
58
- .sfa-layout__content {
59
- flex: 1;
60
- padding: calc(var(--sf-space-unit, 0.25rem) * 4);
61
- }
62
332
  .sfa-badge {
63
333
  display: inline-block;
64
334
  padding: 2px 10px;
@@ -155,12 +425,6 @@
155
425
  gap: calc(var(--sf-space-unit, 0.25rem) * 2);
156
426
  margin-top: calc(var(--sf-space-unit, 0.25rem) * 4);
157
427
  }
158
- .sfa-root input,
159
- .sfa-root select,
160
- .sfa-root textarea {
161
- font-size: 1rem;
162
- min-height: 44px;
163
- }
164
428
  .sfa-filter-group {
165
429
  display: flex;
166
430
  flex-wrap: nowrap;
@@ -180,23 +444,12 @@
180
444
  flex-shrink: 0;
181
445
  white-space: nowrap;
182
446
  }
183
- .sfa-products__header {
184
- display: flex;
185
- flex-wrap: wrap;
186
- align-items: center;
187
- justify-content: space-between;
188
- gap: calc(var(--sf-space-unit, 0.25rem) * 3);
189
- }
190
447
  .sfa-products__toolbar {
191
448
  display: flex;
192
449
  flex-wrap: wrap;
193
450
  gap: calc(var(--sf-space-unit, 0.25rem) * 3);
194
451
  margin: calc(var(--sf-space-unit, 0.25rem) * 4) 0;
195
452
  }
196
- .sfa-filter[aria-pressed='true'] {
197
- background: var(--sf-color-accent, #1a1a1a);
198
- color: var(--sf-color-accent-fg, #ffffff);
199
- }
200
453
  .sfa-thumb {
201
454
  display: inline-flex;
202
455
  align-items: center;
@@ -389,30 +642,1022 @@
389
642
  gap: calc(var(--sf-space-unit, 0.25rem) * 3);
390
643
  justify-items: start;
391
644
  }
392
- .sfa-rates {
645
+ .sfa-grid {
646
+ display: grid;
647
+ grid-template-columns: repeat(2, minmax(0, 1fr));
648
+ gap: calc(var(--sfa-unit) * 3);
649
+ margin: 0;
650
+ padding: 0;
393
651
  list-style: none;
394
- margin: calc(var(--sf-space-unit, 0.25rem) * 4) 0;
652
+ }
653
+ .sfa-card {
654
+ position: relative;
655
+ display: flex;
656
+ flex-direction: column;
657
+ gap: calc(var(--sfa-unit) * 2);
658
+ min-width: 0;
659
+ padding: calc(var(--sfa-unit) * 2);
660
+ border: 1px solid var(--sf-color-border, #e0e0e0);
661
+ border-radius: var(--sf-radius, 4px);
662
+ background: var(--sf-color-surface, #ffffff);
663
+ transition:
664
+ transform 0.15s ease,
665
+ box-shadow 0.15s ease;
666
+ }
667
+ .sfa-card__face {
668
+ display: flex;
669
+ flex-direction: column;
670
+ gap: calc(var(--sfa-unit) * 1);
671
+ }
672
+ .sfa-card__name::after {
673
+ content: '';
674
+ position: absolute;
675
+ inset: 0;
676
+ }
677
+ .sfa-card__photo {
678
+ position: relative;
679
+ display: block;
680
+ aspect-ratio: 1;
681
+ overflow: hidden;
682
+ border-radius: var(--sf-radius, 4px);
683
+ background: var(--sfa-accent-soft);
684
+ }
685
+ .sfa-card__photo img {
686
+ display: block;
687
+ width: 100%;
688
+ height: 100%;
689
+ object-fit: cover;
690
+ }
691
+ .sfa-card__nophoto {
692
+ position: absolute;
693
+ inset: 0;
694
+ display: flex;
695
+ align-items: center;
696
+ justify-content: center;
697
+ font-size: 0.875rem;
698
+ opacity: 0.6;
699
+ }
700
+ .sfa-card__pill {
701
+ position: absolute;
702
+ top: calc(var(--sfa-unit) * 2);
703
+ left: calc(var(--sfa-unit) * 2);
704
+ }
705
+ .sfa-card__pill .sfa-badge {
706
+ background: var(--sf-color-bg, #ffffff);
707
+ font-size: 0.75rem;
708
+ font-weight: 700;
709
+ }
710
+ .sfa-card[data-status='active'] .sfa-badge {
711
+ background: var(--sfa-success-soft);
712
+ color: var(--sfa-success);
713
+ border-color: transparent;
714
+ }
715
+ .sfa-card[data-status='draft'] .sfa-badge {
716
+ background: var(--sfa-warning-soft);
717
+ color: var(--sfa-warning);
718
+ border-color: transparent;
719
+ }
720
+ .sfa-card__star {
721
+ position: absolute;
722
+ top: calc(var(--sfa-unit) * 2);
723
+ right: calc(var(--sfa-unit) * 2);
724
+ color: var(--sfa-warning);
725
+ font-size: 1.125rem;
726
+ }
727
+ .sfa-card__name {
728
+ display: block;
729
+ min-width: 0;
395
730
  padding: 0;
396
- display: grid;
397
- gap: calc(var(--sf-space-unit, 0.25rem) * 4);
731
+ color: inherit;
732
+ text-decoration: none;
733
+ overflow: hidden;
734
+ font-weight: 700;
735
+ text-overflow: ellipsis;
736
+ white-space: nowrap;
398
737
  }
399
- .sfa-rate {
400
- display: grid;
401
- grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
402
- gap: calc(var(--sf-space-unit, 0.25rem) * 3);
403
- align-items: end;
404
- padding: calc(var(--sf-space-unit, 0.25rem) * 4);
405
- border: 1px solid var(--sf-color-border, #d4d4d4);
738
+ .sfa-card__price {
739
+ font-size: 0.875rem;
740
+ }
741
+ .sfa-card__price.is-missing {
742
+ color: var(--sfa-warning);
743
+ font-weight: 600;
744
+ }
745
+ .sfa-card__actions {
746
+ position: relative;
747
+ z-index: 1;
748
+ display: flex;
749
+ flex-wrap: wrap;
750
+ gap: calc(var(--sfa-unit) * 2);
751
+ }
752
+ .sfa-card__actions .sfa-btn {
753
+ min-height: 44px;
754
+ padding: 0 calc(var(--sfa-unit) * 3);
755
+ font-size: 0.875rem;
756
+ }
757
+ .sfa-chip__count {
758
+ margin-left: calc(var(--sfa-unit) * 2);
759
+ opacity: 0.7;
760
+ }
761
+ .sfa-banner {
762
+ display: flex;
763
+ flex-wrap: wrap;
764
+ align-items: center;
765
+ justify-content: space-between;
766
+ gap: calc(var(--sfa-unit) * 3);
767
+ margin-bottom: calc(var(--sfa-unit) * 4);
768
+ padding: calc(var(--sfa-unit) * 3) calc(var(--sfa-unit) * 4);
406
769
  border-radius: var(--sf-radius, 4px);
770
+ background: var(--sfa-warning-soft);
771
+ color: var(--sfa-warning);
772
+ font-weight: 600;
407
773
  }
408
- .sfa-rate__active {
774
+ .sfa-search-toggle {
775
+ display: inline-flex;
776
+ }
777
+ .sfa-search {
778
+ display: none;
779
+ flex: 1 1 12rem;
780
+ }
781
+ .sfa-search.is-open {
782
+ display: block;
783
+ }
784
+ .sfa-welcome {
785
+ display: flex;
786
+ flex-direction: column;
787
+ gap: calc(var(--sfa-unit) * 6);
788
+ max-width: 40rem;
789
+ margin: 0 auto;
790
+ }
791
+ .sfa-welcome__hero {
409
792
  display: flex;
793
+ flex-direction: column;
410
794
  align-items: center;
411
- gap: calc(var(--sf-space-unit, 0.25rem) * 2);
795
+ gap: calc(var(--sfa-unit) * 3);
796
+ padding: calc(var(--sfa-unit) * 8) calc(var(--sfa-unit) * 4);
797
+ border-radius: var(--sf-radius, 4px);
798
+ background: var(--sfa-accent-soft);
799
+ text-align: center;
412
800
  }
413
- .sfa-rate__actions,
414
- .sfa-shipping__actions {
801
+ .sfa-welcome__art {
802
+ color: var(--sf-color-accent, #1a1a1a);
803
+ }
804
+ .sfa-welcome__title {
805
+ margin: 0;
806
+ font-family: var(--sf-font-display, inherit);
807
+ font-size: 1.5rem;
808
+ }
809
+ .sfa-welcome__body {
810
+ margin: 0;
811
+ }
812
+ .sfa-welcome__actions {
415
813
  display: flex;
416
814
  flex-wrap: wrap;
417
- gap: calc(var(--sf-space-unit, 0.25rem) * 2);
815
+ justify-content: center;
816
+ gap: calc(var(--sfa-unit) * 3);
817
+ }
818
+ @media (min-width: 640px) {
819
+ .sfa-grid {
820
+ grid-template-columns: repeat(3, minmax(0, 1fr));
821
+ }
822
+ }
823
+ @media (min-width: 900px) {
824
+ .sfa-grid {
825
+ grid-template-columns: repeat(4, minmax(0, 1fr));
826
+ }
827
+ .sfa-search-toggle {
828
+ display: none;
829
+ }
830
+ .sfa-search {
831
+ display: block;
832
+ }
833
+ .sfa-card:hover {
834
+ transform: translateY(calc(-1 * var(--sf-card-hover-lift, 0px)));
835
+ box-shadow: var(--sf-card-hover-shadow, none);
836
+ }
837
+ }
838
+ @media (min-width: 1200px) {
839
+ .sfa-grid {
840
+ grid-template-columns: repeat(5, minmax(0, 1fr));
841
+ }
842
+ }
843
+ @media (prefers-reduced-motion: reduce) {
844
+ .sfa-card {
845
+ transition: none;
846
+ }
847
+ }
848
+ .sfa-setup {
849
+ margin-bottom: calc(var(--sfa-unit) * 4);
850
+ padding: calc(var(--sfa-unit) * 4);
851
+ border: 1px solid var(--sf-color-border, #e0e0e0);
852
+ border-radius: var(--sf-radius, 4px);
853
+ background: var(--sf-color-surface, #ffffff);
854
+ }
855
+ .sfa-setup__head,
856
+ .sfa-setup__pill {
857
+ display: flex;
858
+ align-items: center;
859
+ justify-content: space-between;
860
+ gap: calc(var(--sfa-unit) * 3);
861
+ }
862
+ .sfa-setup__pill {
863
+ width: 100%;
864
+ min-height: 44px;
865
+ padding: 0;
866
+ border: 0;
867
+ background: none;
868
+ color: inherit;
869
+ font: inherit;
870
+ font-weight: 700;
871
+ cursor: pointer;
872
+ }
873
+ .sfa-setup__title {
874
+ margin: 0;
875
+ font-size: 1.125rem;
876
+ }
877
+ .sfa-setup__count {
878
+ font-size: 0.875rem;
879
+ font-weight: 700;
880
+ }
881
+ .sfa-setup__bar {
882
+ height: 8px;
883
+ margin: calc(var(--sfa-unit) * 3) 0;
884
+ overflow: hidden;
885
+ border-radius: 999px;
886
+ background: var(--sfa-accent-soft);
887
+ }
888
+ .sfa-setup__bar span {
889
+ display: block;
890
+ height: 100%;
891
+ background: var(--sf-color-accent, #1a1a1a);
892
+ }
893
+ .sfa-setup__list {
894
+ display: flex;
895
+ flex-direction: column;
896
+ gap: calc(var(--sfa-unit) * 2);
897
+ margin: 0;
898
+ padding: 0;
899
+ list-style: none;
900
+ }
901
+ .sfa-setup__action {
902
+ display: flex;
903
+ align-items: center;
904
+ gap: calc(var(--sfa-unit) * 3);
905
+ box-sizing: border-box;
906
+ width: 100%;
907
+ min-height: 48px;
908
+ padding: calc(var(--sfa-unit) * 2);
909
+ border: 0;
910
+ background: none;
911
+ color: inherit;
912
+ font: inherit;
913
+ text-align: left;
914
+ text-decoration: none;
915
+ }
916
+ button.sfa-setup__action,
917
+ a.sfa-setup__action {
918
+ cursor: pointer;
919
+ }
920
+ .sfa-setup__mark {
921
+ display: inline-flex;
922
+ flex: none;
923
+ align-items: center;
924
+ justify-content: center;
925
+ width: 24px;
926
+ height: 24px;
927
+ border: 2px solid var(--sf-color-border, #e0e0e0);
928
+ border-radius: 50%;
929
+ font-size: 0.875rem;
930
+ }
931
+ .sfa-setup__step.is-done .sfa-setup__mark {
932
+ background: var(--sfa-success);
933
+ border-color: var(--sfa-success);
934
+ color: #ffffff;
935
+ }
936
+ .sfa-setup__step.is-done .sfa-setup__name {
937
+ text-decoration: line-through;
938
+ opacity: 0.7;
939
+ }
940
+ .sfa-setup__step.is-locked {
941
+ opacity: 0.6;
942
+ }
943
+ .sfa-setup__text {
944
+ display: flex;
945
+ flex-direction: column;
946
+ }
947
+ .sfa-setup__name {
948
+ font-weight: 600;
949
+ }
950
+ .sfa-setup__detail {
951
+ font-size: 0.875rem;
952
+ opacity: 0.8;
953
+ }
954
+ .sfa-sheet-layer {
955
+ position: fixed;
956
+ inset: 0;
957
+ z-index: 50;
958
+ }
959
+ .sfa-sheet__scrim {
960
+ position: absolute;
961
+ inset: 0;
962
+ background: rgba(0, 0, 0, 0.4);
963
+ }
964
+ .sfa-sheet {
965
+ position: absolute;
966
+ left: 0;
967
+ right: 0;
968
+ bottom: 0;
969
+ max-height: 85vh;
970
+ overflow-y: auto;
971
+ padding: calc(var(--sfa-unit) * 4);
972
+ padding-bottom: calc(env(safe-area-inset-bottom, 0px) + var(--sfa-unit) * 4);
973
+ border-radius: calc(var(--sf-radius, 4px) * 3) calc(var(--sf-radius, 4px) * 3)
974
+ 0 0;
975
+ background: var(--sf-color-bg, #ffffff);
976
+ animation: sfa-sheet-up 0.2s ease-out;
977
+ }
978
+ .sfa-sheet__grip {
979
+ display: block;
980
+ width: 40px;
981
+ height: 4px;
982
+ margin: 0 auto calc(var(--sfa-unit) * 3);
983
+ border-radius: 2px;
984
+ background: var(--sf-color-border, #e0e0e0);
985
+ }
986
+ .sfa-sheet__close {
987
+ position: absolute;
988
+ top: calc(var(--sfa-unit) * 3);
989
+ right: calc(var(--sfa-unit) * 3);
990
+ z-index: 1;
991
+ }
992
+ .sfa-sheet__body {
993
+ display: flex;
994
+ flex-direction: column;
995
+ gap: calc(var(--sfa-unit) * 3);
996
+ }
997
+ .sfa-sheet__photo {
998
+ position: relative;
999
+ display: flex;
1000
+ align-items: center;
1001
+ justify-content: center;
1002
+ aspect-ratio: 4 / 3;
1003
+ overflow: hidden;
1004
+ border-radius: var(--sf-radius, 4px);
1005
+ background: var(--sf-color-surface, #f5f5f5);
1006
+ }
1007
+ .sfa-sheet__photo img {
1008
+ width: 100%;
1009
+ height: 100%;
1010
+ object-fit: cover;
1011
+ }
1012
+ .sfa-sheet__step {
1013
+ position: absolute;
1014
+ top: 50%;
1015
+ transform: translateY(-50%);
1016
+ min-width: 44px;
1017
+ min-height: 44px;
1018
+ border: 0;
1019
+ border-radius: 50%;
1020
+ background: rgba(255, 255, 255, 0.85);
1021
+ cursor: pointer;
1022
+ }
1023
+ .sfa-sheet__step--prev {
1024
+ left: calc(var(--sfa-unit) * 2);
1025
+ }
1026
+ .sfa-sheet__step--next {
1027
+ right: calc(var(--sfa-unit) * 2);
1028
+ }
1029
+ .sfa-sheet__name {
1030
+ margin: 0;
1031
+ }
1032
+ .sfa-sheet__meta {
1033
+ display: flex;
1034
+ flex-wrap: wrap;
1035
+ align-items: center;
1036
+ gap: calc(var(--sfa-unit) * 3);
1037
+ margin: 0;
1038
+ }
1039
+ .sfa-sheet__primary {
1040
+ width: 100%;
1041
+ min-height: 48px;
1042
+ text-align: center;
1043
+ }
1044
+ .sfa-sheet__actions {
1045
+ display: flex;
1046
+ flex-wrap: wrap;
1047
+ gap: calc(var(--sfa-unit) * 2);
1048
+ }
1049
+ @keyframes sfa-sheet-up {
1050
+ from {
1051
+ transform: translateY(24px);
1052
+ opacity: 0;
1053
+ }
1054
+ }
1055
+ @keyframes sfa-sheet-in {
1056
+ from {
1057
+ transform: translateX(24px);
1058
+ opacity: 0;
1059
+ }
1060
+ }
1061
+ @media (min-width: 900px) {
1062
+ .sfa-sheet-layer {
1063
+ pointer-events: none;
1064
+ }
1065
+ .sfa-sheet__scrim {
1066
+ display: none;
1067
+ }
1068
+ .sfa-sheet {
1069
+ left: auto;
1070
+ top: 0;
1071
+ width: 420px;
1072
+ max-height: none;
1073
+ pointer-events: auto;
1074
+ border-radius: 0;
1075
+ border-left: 1px solid var(--sf-color-border, #e0e0e0);
1076
+ animation: sfa-sheet-in 0.2s ease-out;
1077
+ }
1078
+ .sfa-sheet__grip {
1079
+ display: none;
1080
+ }
1081
+ }
1082
+ @media (prefers-reduced-motion: reduce) {
1083
+ .sfa-sheet {
1084
+ animation: none;
1085
+ }
1086
+ }
1087
+ .sfa-switch {
1088
+ display: flex;
1089
+ align-items: center;
1090
+ justify-content: space-between;
1091
+ gap: calc(var(--sfa-unit) * 3);
1092
+ min-height: 56px;
1093
+ font-weight: 700;
1094
+ cursor: pointer;
1095
+ }
1096
+ .sfa-root .sfa-switch input {
1097
+ appearance: none;
1098
+ position: relative;
1099
+ flex: none;
1100
+ width: 52px;
1101
+ height: 32px;
1102
+ min-height: 32px;
1103
+ margin: 0;
1104
+ border-radius: 999px;
1105
+ background: var(--sf-color-border, #c8c8c8);
1106
+ cursor: pointer;
1107
+ transition: background var(--sf-motion-duration, 150ms);
1108
+ }
1109
+ .sfa-switch input::after {
1110
+ content: '';
1111
+ position: absolute;
1112
+ top: 3px;
1113
+ left: 3px;
1114
+ width: 26px;
1115
+ height: 26px;
1116
+ border-radius: 999px;
1117
+ background: #ffffff;
1118
+ box-shadow: 0 1px 3px rgb(0 0 0 / 0.25);
1119
+ transition: transform var(--sf-motion-duration, 150ms);
1120
+ }
1121
+ .sfa-switch input:checked {
1122
+ background: var(--sf-color-accent, #1a1a1a);
1123
+ }
1124
+ .sfa-switch input:checked::after {
1125
+ transform: translateX(20px);
1126
+ }
1127
+ .sfa-flow {
1128
+ display: flex;
1129
+ flex-direction: column;
1130
+ background: var(--sf-color-bg, #ffffff);
1131
+ }
1132
+ .sfa-flow__head {
1133
+ display: flex;
1134
+ align-items: center;
1135
+ gap: calc(var(--sfa-unit) * 3);
1136
+ padding: calc(var(--sfa-unit) * 2) calc(var(--sfa-unit) * 4);
1137
+ }
1138
+ .sfa-flow__title {
1139
+ flex: 1;
1140
+ margin: 0;
1141
+ text-align: center;
1142
+ font-size: 1rem;
1143
+ font-weight: 800;
1144
+ }
1145
+ .sfa-flow__steps ol {
1146
+ display: flex;
1147
+ gap: calc(var(--sfa-unit) * 1.5);
1148
+ margin: 0;
1149
+ padding: 0 calc(var(--sfa-unit) * 5) calc(var(--sfa-unit) * 3);
1150
+ list-style: none;
1151
+ }
1152
+ .sfa-flow__steps li {
1153
+ flex: 1;
1154
+ }
1155
+ .sfa-flow__steps button {
1156
+ width: 100%;
1157
+ min-height: 44px;
1158
+ padding: 0;
1159
+ border: 0;
1160
+ background: none;
1161
+ font: inherit;
1162
+ font-size: 0.8125rem;
1163
+ font-weight: 700;
1164
+ text-align: left;
1165
+ color: var(--sf-color-muted, #666666);
1166
+ cursor: pointer;
1167
+ }
1168
+ .sfa-flow__steps button::before {
1169
+ content: '';
1170
+ display: block;
1171
+ height: 4px;
1172
+ margin-bottom: 6px;
1173
+ border-radius: 999px;
1174
+ background: var(--sfa-accent-soft);
1175
+ }
1176
+ .sfa-flow__steps button[data-state='done']::before,
1177
+ .sfa-flow__steps button[aria-current='step']::before {
1178
+ background: var(--sf-color-accent, #1a1a1a);
1179
+ }
1180
+ .sfa-flow__steps button[aria-current='step'] {
1181
+ color: var(--sf-color-accent, #1a1a1a);
1182
+ }
1183
+ .sfa-flow__steps button:disabled {
1184
+ cursor: default;
1185
+ }
1186
+ .sfa-flow__body {
1187
+ flex: 1;
1188
+ overflow-y: auto;
1189
+ padding: calc(var(--sfa-unit) * 1) calc(var(--sfa-unit) * 5)
1190
+ calc(var(--sfa-unit) * 6);
1191
+ }
1192
+ .sfa-flow__section {
1193
+ display: flex;
1194
+ flex-direction: column;
1195
+ gap: calc(var(--sfa-unit) * 4);
1196
+ scroll-margin-top: calc(var(--sfa-unit) * 4);
1197
+ }
1198
+ .sfa-flow__section > h2 {
1199
+ margin: 0;
1200
+ font-family: var(--sf-font-display, inherit);
1201
+ font-size: 1.625rem;
1202
+ line-height: 1.15;
1203
+ }
1204
+ .sfa-flow__lede {
1205
+ margin: calc(var(--sfa-unit) * -3) 0 0;
1206
+ color: var(--sf-color-muted, #666666);
1207
+ }
1208
+ .sfa-flow__foot {
1209
+ display: flex;
1210
+ gap: calc(var(--sfa-unit) * 2.5);
1211
+ padding: calc(var(--sfa-unit) * 3) calc(var(--sfa-unit) * 5)
1212
+ calc(env(safe-area-inset-bottom, 0px) + var(--sfa-unit) * 4);
1213
+ border-top: 1px solid var(--sfa-accent-soft);
1214
+ background: var(--sf-color-bg, #ffffff);
1215
+ }
1216
+ .sfa-flow__foot .sfa-btn,
1217
+ .sfa-flow__desk-actions .sfa-btn {
1218
+ flex: 1;
1219
+ white-space: nowrap;
1220
+ }
1221
+ .sfa-flow__foot .sfa-btn--primary {
1222
+ flex: 1.4;
1223
+ }
1224
+ .sfa-flow__saved {
1225
+ margin: calc(var(--sfa-unit) * 2) 0 0;
1226
+ font-size: 0.8125rem;
1227
+ text-align: center;
1228
+ color: var(--sf-color-muted, #666666);
1229
+ }
1230
+ .sfa-flow__saved.is-error {
1231
+ display: flex;
1232
+ align-items: center;
1233
+ justify-content: center;
1234
+ gap: calc(var(--sfa-unit) * 3);
1235
+ color: var(--sf-color-danger, #b00020);
1236
+ }
1237
+ .sfa-flow__chips {
1238
+ display: flex;
1239
+ flex-wrap: wrap;
1240
+ gap: calc(var(--sfa-unit) * 2);
1241
+ }
1242
+ .sfa-flow__price {
1243
+ display: flex;
1244
+ align-items: center;
1245
+ gap: calc(var(--sfa-unit) * 2);
1246
+ font-size: 1.75rem;
1247
+ font-weight: 700;
1248
+ }
1249
+ .sfa-root .sfa-flow__price input {
1250
+ flex: 1;
1251
+ min-width: 0;
1252
+ font-size: 1.75rem;
1253
+ font-weight: 700;
1254
+ }
1255
+ .sfa-flow__alts {
1256
+ display: flex;
1257
+ flex-direction: column;
1258
+ gap: calc(var(--sfa-unit) * 3);
1259
+ margin: 0;
1260
+ padding: 0;
1261
+ border: 0;
1262
+ }
1263
+ .sfa-flow__desk-actions {
1264
+ display: none;
1265
+ gap: calc(var(--sfa-unit) * 2.5);
1266
+ }
1267
+ @media (max-width: 899px) {
1268
+ .sfa-flow:not(.sfa-flow--done) {
1269
+ position: fixed;
1270
+ inset: 0;
1271
+ z-index: 55;
1272
+ }
1273
+ .sfa-flow__section[data-active='false'] {
1274
+ display: none;
1275
+ }
1276
+ }
1277
+ @media (min-width: 900px) {
1278
+ .sfa-flow__steps,
1279
+ .sfa-flow__foot {
1280
+ display: none;
1281
+ }
1282
+ .sfa-flow__body {
1283
+ display: grid;
1284
+ grid-template-columns: minmax(0, 1fr) minmax(280px, 360px);
1285
+ gap: calc(var(--sfa-unit) * 10);
1286
+ align-items: start;
1287
+ overflow: visible;
1288
+ }
1289
+ .sfa-flow__main {
1290
+ display: flex;
1291
+ flex-direction: column;
1292
+ gap: calc(var(--sfa-unit) * 10);
1293
+ }
1294
+ .sfa-flow__aside {
1295
+ position: sticky;
1296
+ top: calc(var(--sfa-unit) * 4);
1297
+ }
1298
+ .sfa-flow__desk-actions {
1299
+ display: flex;
1300
+ }
1301
+ }
1302
+ .sfa-flow__dropzone {
1303
+ display: grid;
1304
+ justify-items: center;
1305
+ gap: calc(var(--sfa-unit) * 1.5);
1306
+ padding: calc(var(--sfa-unit) * 7) calc(var(--sfa-unit) * 4);
1307
+ border: 2px dashed var(--sf-color-border, #c8c8c8);
1308
+ border-radius: calc(var(--sf-radius, 4px) * 4);
1309
+ background: var(--sf-color-surface, #f6f6f6);
1310
+ color: var(--sf-color-accent, #1a1a1a);
1311
+ text-align: center;
1312
+ cursor: pointer;
1313
+ }
1314
+ .sfa-flow__dropzone:focus-within {
1315
+ outline: 3px solid var(--sfa-focus);
1316
+ outline-offset: 2px;
1317
+ }
1318
+ .sfa-flow__dropzone-icon {
1319
+ font-size: 2.5rem;
1320
+ line-height: 1;
1321
+ }
1322
+ .sfa-flow__dropzone strong {
1323
+ font-size: 1.0625rem;
1324
+ }
1325
+ .sfa-flow__dropzone small {
1326
+ color: var(--sf-color-muted, #666666);
1327
+ }
1328
+ .sfa-flow__thumbs {
1329
+ display: grid;
1330
+ grid-template-columns: repeat(3, 1fr);
1331
+ gap: calc(var(--sfa-unit) * 2.5);
1332
+ margin: 0;
1333
+ padding: 0;
1334
+ list-style: none;
1335
+ }
1336
+ .sfa-flow__thumb {
1337
+ position: relative;
1338
+ display: grid;
1339
+ place-items: center;
1340
+ aspect-ratio: 1;
1341
+ overflow: hidden;
1342
+ border: 2px solid transparent;
1343
+ border-radius: calc(var(--sf-radius, 4px) * 3);
1344
+ background: var(--sf-color-surface, #f6f6f6);
1345
+ font-size: 0.75rem;
1346
+ text-align: center;
1347
+ }
1348
+ .sfa-flow__thumb.is-cover {
1349
+ border-color: var(--sf-color-accent, #1a1a1a);
1350
+ }
1351
+ .sfa-flow__thumb-pick {
1352
+ width: 100%;
1353
+ height: 100%;
1354
+ padding: 0;
1355
+ border: 0;
1356
+ background: none;
1357
+ cursor: pointer;
1358
+ }
1359
+ .sfa-flow__thumb-pick img {
1360
+ width: 100%;
1361
+ height: 100%;
1362
+ object-fit: cover;
1363
+ }
1364
+ .sfa-flow__badge {
1365
+ position: absolute;
1366
+ left: 6px;
1367
+ bottom: 6px;
1368
+ padding: 2px 8px;
1369
+ border-radius: 999px;
1370
+ background: var(--sf-color-accent, #1a1a1a);
1371
+ color: var(--sf-color-accent-fg, #ffffff);
1372
+ font-size: 0.6875rem;
1373
+ font-weight: 800;
1374
+ }
1375
+ .sfa-flow__thumb-remove {
1376
+ position: absolute;
1377
+ top: 2px;
1378
+ right: 2px;
1379
+ width: 44px;
1380
+ height: 44px;
1381
+ border: 0;
1382
+ border-radius: 999px;
1383
+ background: radial-gradient(circle, rgb(0 0 0 / 0.65) 14px, transparent 15px);
1384
+ color: #ffffff;
1385
+ cursor: pointer;
1386
+ }
1387
+ .sfa-flow__tip {
1388
+ margin: 0;
1389
+ padding: calc(var(--sfa-unit) * 3) calc(var(--sfa-unit) * 3.5);
1390
+ border-radius: calc(var(--sf-radius, 4px) * 3);
1391
+ background: var(--sfa-accent-soft);
1392
+ font-size: 0.875rem;
1393
+ }
1394
+ .sfa-flow__preview {
1395
+ padding: calc(var(--sfa-unit) * 3.5);
1396
+ border: 1px solid var(--sf-color-border, #e0e0e0);
1397
+ border-radius: calc(var(--sf-radius, 4px) * 5);
1398
+ background: var(--sf-color-surface, #f6f6f6);
1399
+ }
1400
+ .sfa-flow__preview-label {
1401
+ margin: 0 0 calc(var(--sfa-unit) * 2.5);
1402
+ font-size: 0.75rem;
1403
+ font-weight: 800;
1404
+ letter-spacing: 0.06em;
1405
+ text-transform: uppercase;
1406
+ color: var(--sf-color-muted, #666666);
1407
+ }
1408
+ .sfa-flow__card {
1409
+ width: 60%;
1410
+ }
1411
+ .sfa-flow__card-photo {
1412
+ display: grid;
1413
+ place-items: center;
1414
+ aspect-ratio: 1;
1415
+ overflow: hidden;
1416
+ border-radius: calc(var(--sf-radius, 4px) * 3);
1417
+ background: var(--sf-color-bg, #ffffff);
1418
+ color: var(--sf-color-muted, #666666);
1419
+ font-size: 0.8125rem;
1420
+ }
1421
+ .sfa-flow__card-photo img {
1422
+ width: 100%;
1423
+ height: 100%;
1424
+ object-fit: cover;
1425
+ }
1426
+ .sfa-flow__card-name {
1427
+ margin: calc(var(--sfa-unit) * 2) 0 0;
1428
+ font-weight: 700;
1429
+ }
1430
+ .sfa-flow__card-price {
1431
+ margin: 0;
1432
+ color: var(--sf-color-muted, #666666);
1433
+ }
1434
+ .sfa-flow__preview-desc {
1435
+ margin: calc(var(--sfa-unit) * 3) 0 0;
1436
+ font-size: 0.875rem;
1437
+ white-space: pre-line;
1438
+ color: var(--sf-color-muted, #666666);
1439
+ }
1440
+ .sfa-flow-success {
1441
+ display: grid;
1442
+ justify-items: center;
1443
+ gap: calc(var(--sfa-unit) * 2.5);
1444
+ padding: calc(var(--sfa-unit) * 10) calc(var(--sfa-unit) * 6);
1445
+ text-align: center;
1446
+ }
1447
+ .sfa-flow-success__photo {
1448
+ width: 170px;
1449
+ height: 170px;
1450
+ overflow: hidden;
1451
+ border-radius: calc(var(--sf-radius, 4px) * 7);
1452
+ background: var(--sf-color-surface, #f6f6f6);
1453
+ box-shadow: var(--sfa-shadow-raised);
1454
+ animation: sfa-pop calc(var(--sf-motion-duration, 150ms) * 3)
1455
+ cubic-bezier(0.34, 1.56, 0.64, 1);
1456
+ }
1457
+ .sfa-flow-success__photo img {
1458
+ width: 100%;
1459
+ height: 100%;
1460
+ object-fit: cover;
1461
+ }
1462
+ .sfa-flow-success h2 {
1463
+ margin: 0;
1464
+ font-family: var(--sf-font-display, inherit);
1465
+ font-size: 1.625rem;
1466
+ }
1467
+ .sfa-flow-success p {
1468
+ margin: 0 0 calc(var(--sfa-unit) * 3);
1469
+ color: var(--sf-color-muted, #666666);
1470
+ }
1471
+ .sfa-flow-success .sfa-btn {
1472
+ width: min(100%, 320px);
1473
+ }
1474
+ @keyframes sfa-pop {
1475
+ from {
1476
+ transform: scale(0.6) rotate(-6deg);
1477
+ opacity: 0;
1478
+ }
1479
+ }
1480
+ @media (prefers-reduced-motion: reduce) {
1481
+ .sfa-flow-success__photo {
1482
+ animation: none;
1483
+ }
1484
+ .sfa-switch input,
1485
+ .sfa-switch input::after {
1486
+ transition: none;
1487
+ }
1488
+ }
1489
+ .sfa-rates {
1490
+ list-style: none;
1491
+ margin: calc(var(--sf-space-unit, 0.25rem) * 4) 0;
1492
+ padding: 0;
1493
+ display: grid;
1494
+ gap: calc(var(--sf-space-unit, 0.25rem) * 4);
1495
+ }
1496
+ .sfa-rate {
1497
+ display: grid;
1498
+ grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
1499
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
1500
+ align-items: end;
1501
+ padding: calc(var(--sf-space-unit, 0.25rem) * 4);
1502
+ border: 1px solid var(--sf-color-border, #d4d4d4);
1503
+ border-radius: var(--sf-radius, 4px);
1504
+ }
1505
+ .sfa-rate__active {
1506
+ display: flex;
1507
+ align-items: center;
1508
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
1509
+ }
1510
+ .sfa-rate__actions,
1511
+ .sfa-shipping__actions {
1512
+ display: flex;
1513
+ flex-wrap: wrap;
1514
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
1515
+ }
1516
+ .sfa-empty-state {
1517
+ display: grid;
1518
+ justify-items: center;
1519
+ gap: calc(var(--sf-space-unit, 0.25rem) * 3);
1520
+ max-width: 28rem;
1521
+ margin: calc(var(--sf-space-unit, 0.25rem) * 8) auto;
1522
+ padding: 0 calc(var(--sf-space-unit, 0.25rem) * 4);
1523
+ text-align: center;
1524
+ }
1525
+ .sfa-empty-state__icon {
1526
+ color: var(--sf-color-muted, #737373);
1527
+ }
1528
+ .sfa-empty-state__title {
1529
+ margin: 0;
1530
+ font-size: 1.125rem;
1531
+ }
1532
+ .sfa-empty-state__body {
1533
+ margin: 0;
1534
+ color: var(--sf-color-muted, #737373);
1535
+ }
1536
+ .sfa-empty-state__action {
1537
+ display: flex;
1538
+ flex-wrap: wrap;
1539
+ justify-content: center;
1540
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
1541
+ }
1542
+ .sfa-empty-state__chips {
1543
+ display: flex;
1544
+ flex-wrap: wrap;
1545
+ justify-content: center;
1546
+ gap: calc(var(--sf-space-unit, 0.25rem) * 2);
1547
+ margin: 0;
1548
+ padding: 0;
1549
+ list-style: none;
1550
+ }
1551
+ .sfa-batch,
1552
+ .sfa-queue {
1553
+ max-width: 640px;
1554
+ margin-inline: auto;
1555
+ }
1556
+ .sfa-batch__card,
1557
+ .sfa-piece {
1558
+ box-sizing: border-box;
1559
+ min-width: 0;
1560
+ display: grid;
1561
+ gap: calc(var(--sfa-unit, 0.25rem) * 4);
1562
+ padding: calc(var(--sfa-unit, 0.25rem) * 5);
1563
+ border: 1px solid var(--sf-color-border, #e0e0e0);
1564
+ border-radius: var(--sf-radius, 12px);
1565
+ background: var(--sf-color-bg, #ffffff);
1566
+ }
1567
+ .sfa-batch__intro,
1568
+ .sfa-batch__result,
1569
+ .sfa-batch__progress {
1570
+ display: grid;
1571
+ justify-items: start;
1572
+ gap: calc(var(--sfa-unit, 0.25rem) * 3);
1573
+ }
1574
+ .sfa-batch__intro h2,
1575
+ .sfa-batch__result h2,
1576
+ .sfa-piece h2,
1577
+ .sfa-piece p {
1578
+ margin: 0;
1579
+ }
1580
+ .sfa-batch__progress progress,
1581
+ .sfa-piece progress {
1582
+ width: 100%;
1583
+ }
1584
+ .sfa-batch__failed {
1585
+ display: grid;
1586
+ gap: calc(var(--sfa-unit, 0.25rem) * 2);
1587
+ margin: 0;
1588
+ padding: 0;
1589
+ list-style: none;
1590
+ }
1591
+ .sfa-batch__actions,
1592
+ .sfa-piece__actions {
1593
+ display: flex;
1594
+ flex-wrap: wrap;
1595
+ justify-content: flex-end;
1596
+ gap: calc(var(--sfa-unit, 0.25rem) * 2);
1597
+ }
1598
+ .sfa-piece__count {
1599
+ font-weight: 700;
1600
+ }
1601
+ .sfa-piece__body {
1602
+ display: grid;
1603
+ gap: calc(var(--sfa-unit, 0.25rem) * 4);
1604
+ }
1605
+ .sfa-piece__photo {
1606
+ display: grid;
1607
+ place-items: center;
1608
+ min-height: 12rem;
1609
+ overflow: hidden;
1610
+ border-radius: var(--sf-radius, 12px);
1611
+ background: var(--sf-color-surface, #f6f6f6);
1612
+ }
1613
+ .sfa-piece__photo img {
1614
+ width: 100%;
1615
+ height: 100%;
1616
+ object-fit: cover;
1617
+ }
1618
+ .sfa-piece__fields {
1619
+ display: grid;
1620
+ gap: calc(var(--sfa-unit, 0.25rem) * 4);
1621
+ align-content: start;
1622
+ }
1623
+ @media (min-width: 900px) {
1624
+ .sfa-piece__body {
1625
+ grid-template-columns: 1fr 1fr;
1626
+ align-items: start;
1627
+ }
1628
+ }
1629
+ .sfa-summary__list {
1630
+ display: grid;
1631
+ gap: calc(var(--sfa-unit, 0.25rem) * 2);
1632
+ margin: 0;
1633
+ padding: 0;
1634
+ list-style: none;
1635
+ }
1636
+ .sfa-summary__row {
1637
+ display: grid;
1638
+ grid-template-columns: 56px 1fr auto;
1639
+ align-items: center;
1640
+ gap: calc(var(--sfa-unit, 0.25rem) * 3);
1641
+ }
1642
+ .sfa-summary__photo {
1643
+ width: 56px;
1644
+ height: 56px;
1645
+ overflow: hidden;
1646
+ border-radius: var(--sf-radius, 8px);
1647
+ background: var(--sf-color-surface, #f6f6f6);
1648
+ }
1649
+ .sfa-summary__photo img {
1650
+ width: 100%;
1651
+ height: 100%;
1652
+ object-fit: cover;
1653
+ }
1654
+
1655
+ .sfa-piece > *,
1656
+ .sfa-piece__body > *,
1657
+ .sfa-piece__fields > * {
1658
+ min-width: 0;
1659
+ }
1660
+ .sfa-piece__fields input[type='text'] {
1661
+ box-sizing: border-box;
1662
+ max-width: 100%;
418
1663
  }