@wix/agent-skills 1.5.0 → 1.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 (156) hide show
  1. package/README.md +2 -2
  2. package/package.json +1 -1
  3. package/skills/wix-app/SKILL.md +49 -42
  4. package/skills/wix-app/references/BACKEND_EVENT.md +10 -65
  5. package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +101 -406
  6. package/skills/wix-app/references/DASHBOARD_MENU_PLUGIN.md +14 -111
  7. package/skills/wix-app/references/DASHBOARD_MODAL.md +56 -205
  8. package/skills/wix-app/references/DASHBOARD_PAGE.md +19 -98
  9. package/skills/wix-app/references/DASHBOARD_PLUGIN.md +6 -108
  10. package/skills/wix-app/references/DATA_COLLECTION.md +113 -198
  11. package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +15 -1
  12. package/skills/wix-app/references/EMBEDDED_SCRIPT.md +41 -268
  13. package/skills/wix-app/references/EXTENSION_REGISTRATION.md +27 -76
  14. package/skills/wix-app/references/SERVICE_PLUGIN.md +35 -188
  15. package/skills/wix-app/references/SITE_PLUGIN.md +8 -92
  16. package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +0 -44
  17. package/skills/wix-app/references/custom-element-widget/SETTINGS_PANEL.md +19 -330
  18. package/skills/wix-app/references/dashboard-menu-plugin/bookings-slots.md +0 -12
  19. package/skills/wix-app/references/dashboard-menu-plugin/ecommerce-slots.md +7 -0
  20. package/skills/wix-app/references/dashboard-menu-plugin/restaurants-slots.md +0 -12
  21. package/skills/wix-app/references/dashboard-plugin/SLOTS.md +3 -15
  22. package/skills/wix-app/references/data-collection/WIX_DATA.md +1 -1
  23. package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +1 -1
  24. package/skills/wix-app/references/service-plugin/ADDITIONAL-FEES.md +2 -18
  25. package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +2 -42
  26. package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +1 -11
  27. package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +1 -11
  28. package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +2 -40
  29. package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +2 -19
  30. package/skills/wix-app/references/service-plugin/VALIDATIONS.md +2 -18
  31. package/skills/wix-app/references/site-plugin/SLOTS.md +17 -68
  32. package/skills/wix-headless/SKILL.md +112 -368
  33. package/skills/wix-headless/references/BUILD.md +307 -0
  34. package/skills/wix-headless/references/DESIGN_SYSTEM.md +115 -0
  35. package/skills/wix-headless/references/DISCOVERY.md +237 -112
  36. package/skills/wix-headless/references/PLAN.md +82 -0
  37. package/skills/wix-headless/references/SEED.md +205 -0
  38. package/skills/wix-headless/references/SETUP.md +250 -94
  39. package/skills/wix-headless/references/astro/COMPOSE.md +142 -0
  40. package/skills/wix-headless/references/{blog → astro/blog}/BLOG_PAGES.md +1 -1
  41. package/skills/wix-headless/references/{blog → astro/blog}/BLOG_SETUP.md +2 -2
  42. package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +214 -0
  43. package/skills/wix-headless/references/{cms → astro/cms}/FAQ_KNOWLEDGE_BASE.md +6 -4
  44. package/skills/wix-headless/references/{cms → astro/cms}/PORTFOLIO.md +5 -5
  45. package/skills/wix-headless/references/{cms → astro/cms}/RESOURCE_LIBRARY.md +5 -5
  46. package/skills/wix-headless/references/{cms → astro/cms}/TEAM_DIRECTORY.md +5 -5
  47. package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +331 -0
  48. package/skills/wix-headless/references/{ecom → astro/ecom}/CART_PAGES.md +1 -1
  49. package/skills/wix-headless/references/{ecom → astro/ecom}/CART_WIRING.md +1 -1
  50. package/skills/wix-headless/references/{ecom → astro/ecom}/COMPONENTS_CSS.md +3 -3
  51. package/skills/wix-headless/references/{forms → astro/forms}/CONTACT_FORM.md +13 -13
  52. package/skills/wix-headless/references/{gift-cards → astro/gift-cards}/COMPONENTS.md +1 -1
  53. package/skills/wix-headless/references/{gift-cards → astro/gift-cards}/PAGES.md +1 -1
  54. package/skills/wix-headless/references/{stores → astro/stores}/BACK_IN_STOCK.md +1 -1
  55. package/skills/wix-headless/references/{stores → astro/stores}/CATEGORY_PAGES.md +12 -13
  56. package/skills/wix-headless/references/{stores → astro/stores}/COMPONENTS_CSS.md +4 -4
  57. package/skills/wix-headless/references/{stores → astro/stores}/HOME_AND_NAV.md +11 -9
  58. package/skills/wix-headless/references/{stores → astro/stores}/PRODUCT_PAGES.md +5 -3
  59. package/skills/wix-headless/references/{stores → astro/stores}/SHARED_WIRING.md +3 -3
  60. package/skills/wix-headless/references/astro/templates/Footer.astro +27 -0
  61. package/skills/wix-headless/references/astro/templates/Layout.astro +132 -0
  62. package/skills/wix-headless/references/astro/templates/Navigation.astro +38 -0
  63. package/skills/wix-headless/references/astro/templates/astro.config.mjs +41 -0
  64. package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +302 -0
  65. package/skills/wix-headless/references/astro/templates/global.css +286 -0
  66. package/skills/wix-headless/references/astro/templates/index.astro +56 -0
  67. package/skills/wix-headless/{templates → references/astro/templates}/stores/back-in-stock.ts +1 -1
  68. package/skills/wix-headless/{templates → references/astro/templates}/stores/components-stores.css +138 -33
  69. package/skills/wix-headless/references/blog/BLOG_CONTENT.md +10 -11
  70. package/skills/wix-headless/references/blog/INSTRUCTIONS.md +5 -5
  71. package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +31 -230
  72. package/skills/wix-headless/references/cms/INSTRUCTIONS.md +13 -8
  73. package/skills/wix-headless/references/custom/INSTRUCTIONS.md +38 -0
  74. package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +10 -10
  75. package/skills/wix-headless/references/forms/INSTRUCTIONS.md +5 -5
  76. package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +11 -11
  77. package/skills/wix-headless/references/images/INSTRUCTIONS.md +47 -50
  78. package/skills/wix-headless/references/seed-recipes.md +49 -0
  79. package/skills/wix-headless/references/shared/AUTHENTICATION.md +110 -0
  80. package/skills/wix-headless/references/shared/BUILD_NOISE.md +2 -2
  81. package/skills/wix-headless/references/shared/DOCS_SEARCH.md +41 -0
  82. package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +17 -17
  83. package/skills/wix-headless/references/shared/IMPLEMENTER.md +20 -29
  84. package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +1 -1
  85. package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +25 -16
  86. package/skills/wix-headless/references/shared/STYLING.md +47 -10
  87. package/skills/wix-headless/references/stores/INSTRUCTIONS.md +25 -25
  88. package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +17 -17
  89. package/skills/wix-headless/references/verticals/_schema.json +31 -117
  90. package/skills/wix-headless/references/verticals/_schema.md +60 -150
  91. package/skills/wix-headless/references/verticals/blog.md +5 -99
  92. package/skills/wix-headless/references/verticals/cms.md +9 -100
  93. package/skills/wix-headless/references/verticals/ecom.md +5 -76
  94. package/skills/wix-headless/references/verticals/forms.md +5 -85
  95. package/skills/wix-headless/references/verticals/gift-cards.md +6 -103
  96. package/skills/wix-headless/references/verticals/stores.md +10 -144
  97. package/skills/wix-headless/scripts/check-manifest.mjs +5 -5
  98. package/skills/wix-headless/scripts/emit-design-tokens.mjs +29 -23
  99. package/skills/wix-headless/scripts/init-site-json.mjs +59 -21
  100. package/skills/wix-headless/scripts/patch-decorative-slots.mjs +67 -43
  101. package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +3 -3
  102. package/skills/wix-headless/scripts/preview.sh +3 -3
  103. package/skills/wix-headless/scripts/release.sh +4 -4
  104. package/skills/wix-headless/scripts/scaffold.sh +75 -20
  105. package/skills/wix-headless/scripts/seed-utilities.sh +50 -12
  106. package/skills/wix-manage/SKILL.md +4 -8
  107. package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +70 -1
  108. package/skills/wix-manage/references/cms/cms-data-items-crud.md +4 -0
  109. package/skills/wix-manage/references/cms/cms-references-and-relationships.md +2 -0
  110. package/skills/wix-manage/references/cms/cms-schema-management.md +4 -0
  111. package/skills/wix-manage/references/ecommerce/api-shipping.md +443 -0
  112. package/skills/wix-manage/references/ecommerce/flow-add-free-shipping.md +5 -6
  113. package/skills/wix-manage/references/ecommerce/flow-fix-coverage-gaps.md +4 -5
  114. package/skills/wix-manage/references/ecommerce/flow-optimize-shipping-rates.md +4 -5
  115. package/skills/wix-manage/references/ecommerce/goal-increase-aov.md +1 -1
  116. package/skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md +1 -2
  117. package/skills/wix-manage/references/ecommerce/guardrail-shipping-health.md +2 -2
  118. package/skills/wix-manage/references/ecommerce/recipe-apply-shipping-recommendations.md +4 -5
  119. package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +7 -7
  120. package/skills/wix-manage/references/ecommerce/setup-discount-rules.md +209 -72
  121. package/skills/wix-manage/references/ecommerce/setup-store-pickup-location.md +9 -10
  122. package/skills/wix-manage/references/ecommerce/skill-graph.md +4 -4
  123. package/skills/wix-manage/references/forms/create-form.md +2 -0
  124. package/skills/wix-manage/references/stores/bulk-create-products-with-options.md +2 -0
  125. package/skills/wix-manage/references/stores/create-product-from-image.md +91 -38
  126. package/skills/wix-manage/references/stores/setup-online-store-catalog-v3.md +14 -7
  127. package/skills/wix-app/references/data-collection/extension-template.ts +0 -107
  128. package/skills/wix-headless/references/ORCHESTRATION.md +0 -269
  129. package/skills/wix-headless/references/commands/install-app.md +0 -42
  130. package/skills/wix-headless/references/commands/mcp-bootstrap.md +0 -28
  131. package/skills/wix-headless/references/designer/INSTRUCTIONS.md +0 -828
  132. package/skills/wix-headless/references/shared/MCP_PREFIX.md +0 -105
  133. package/skills/wix-headless/scripts/copy-utility-templates.mjs +0 -153
  134. package/skills/wix-headless/templates/ecom/components-ecom.css +0 -215
  135. package/skills/wix-manage/references/events/list-events.md +0 -203
  136. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/CartBadge.tsx +0 -0
  137. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/CartView.tsx +0 -0
  138. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/cart.astro +0 -0
  139. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/discounts.ts +0 -0
  140. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/thank-you.astro +0 -0
  141. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/GiftCardPurchase.tsx +0 -0
  142. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/_home-teaser-snippet.astro +0 -0
  143. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/_nav-snippet.astro +0 -0
  144. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/components-gift-cards.css +0 -0
  145. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/gift-cards.astro +0 -0
  146. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/gift-cards.ts +0 -0
  147. /package/skills/wix-headless/{templates → references/astro/templates}/stores/AddToCartButton.tsx +0 -0
  148. /package/skills/wix-headless/{templates → references/astro/templates}/stores/BackInStockForm.tsx +0 -0
  149. /package/skills/wix-headless/{templates → references/astro/templates}/stores/CategoryRail.astro +0 -0
  150. /package/skills/wix-headless/{templates → references/astro/templates}/stores/ProductCard.astro +0 -0
  151. /package/skills/wix-headless/{templates → references/astro/templates}/stores/ProductPurchase.tsx +0 -0
  152. /package/skills/wix-headless/{templates → references/astro/templates}/stores/SeoTags.astro +0 -0
  153. /package/skills/wix-headless/{templates → references/astro/templates}/stores/categories.ts +0 -0
  154. /package/skills/wix-headless/{templates → references/astro/templates}/stores/category/[slug].astro +0 -0
  155. /package/skills/wix-headless/{templates → references/astro/templates}/stores/products/[slug].astro +0 -0
  156. /package/skills/wix-headless/{templates → references/astro/templates}/stores/products/index.astro +0 -0
@@ -0,0 +1,302 @@
1
+ /* src/styles/components-ecom.css
2
+ *
3
+ * Ecom-pack component CSS. Owned by the ecom Phase 3 components agent.
4
+ *
5
+ * This file is the SINGLE source of truth for ecom-component classes.
6
+ * The designer's global.css does NOT publish .cart-summary, .cart-total,
7
+ * .cart-empty, or .checkout-btn — those all live here. See
8
+ * references/shared/STYLING.md § "Component-specific CSS is owned by the
9
+ * component, not the designer".
10
+ *
11
+ * Class groups in this file:
12
+ * - .cart-summary / .cart-total / .cart-empty / .checkout-btn → /cart page summary panel and empty state
13
+ * - .cart-item / .cart-item-* / .qty-* → CartView.tsx line items
14
+ * - .cart-discount / .cart-applied-discounts → CartView.tsx discount rows
15
+ * - .cart-badge / .cart-badge-* → CartBadge.tsx (mounted in Navigation)
16
+ *
17
+ * Rules use direct CSS (`var(--token)`) only — no `@apply`. Tailwind v4
18
+ * `@apply` in a non-entrypoint file only resolves utilities whose theme keys
19
+ * the designer's `@theme` block declares. Earlier revisions of this template
20
+ * used `@apply text-bark/70 bg-tobacco …` (stale token vocabulary) and
21
+ * `@apply size-6` (built-in utility that needs `@reference` to be visible
22
+ * here), and both classes built-failed against current designer output.
23
+ * Direct `var(--color-ink)` / `var(--spacing-sm)` calls work against any
24
+ * designer-published token set as long as the core scales exist (they always
25
+ * do). Use fallback chains (`var(--color-paper-warm, var(--color-paper, var(--color-cream)))`)
26
+ * for sometimes-published tokens.
27
+ */
28
+
29
+ /* =========================================================================
30
+ Cart summary panel + total + checkout button + empty state.
31
+ Owned here, NOT in global.css.
32
+ ========================================================================= */
33
+ .cart-summary {
34
+ background: var(--color-paper-warm, var(--color-paper, var(--color-cream)));
35
+ border: 1px solid var(--color-rule);
36
+ padding: var(--spacing-xl);
37
+ border-radius: var(--radius-md);
38
+ display: flex;
39
+ flex-direction: column;
40
+ gap: var(--spacing-sm);
41
+ }
42
+ @media (min-width: 768px) {
43
+ .cart-summary {
44
+ position: sticky;
45
+ top: var(--spacing-xl);
46
+ }
47
+ }
48
+
49
+ .cart-empty {
50
+ text-align: center;
51
+ padding-block: var(--spacing-3xl);
52
+ color: var(--color-mute);
53
+ }
54
+ .cart-empty .checkout-btn {
55
+ display: inline-flex;
56
+ width: auto;
57
+ max-width: 18rem;
58
+ }
59
+
60
+ /* .checkout-btn — primary CTA, full-width inside .cart-summary. Self-contained;
61
+ does NOT @apply the designer's `btn` utility (Tailwind v4 only @applies
62
+ utilities declared with `@utility`, and the designer may or may not have
63
+ declared it under that exact name). Composing the same visual shape inline
64
+ keeps this file portable across designer vocabularies. */
65
+ .checkout-btn {
66
+ display: inline-flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ padding: var(--spacing-md) var(--spacing-lg);
70
+ font-family: var(--font-display);
71
+ font-size: 0.9375rem;
72
+ font-weight: 500;
73
+ background: var(--color-ink);
74
+ color: var(--color-paper);
75
+ border: 1px solid var(--color-ink);
76
+ border-radius: var(--radius-sm);
77
+ cursor: pointer;
78
+ width: 100%;
79
+ margin-top: var(--spacing-md);
80
+ transition: background-color 150ms ease, box-shadow 150ms ease;
81
+ }
82
+ .checkout-btn:hover:not(:disabled) {
83
+ background: var(--color-ink-soft, var(--color-ink));
84
+ }
85
+ .checkout-btn:disabled {
86
+ opacity: 0.5;
87
+ cursor: not-allowed;
88
+ }
89
+
90
+ /* --- Cart badge icon (CartBadge.tsx) --- */
91
+ /* CartBadge.tsx renders an inline SVG bag icon + optional count span. */
92
+ .cart-badge {
93
+ position: relative;
94
+ display: inline-flex;
95
+ align-items: center;
96
+ justify-content: center;
97
+ }
98
+ .cart-badge-icon {
99
+ width: 1.5rem;
100
+ height: 1.5rem;
101
+ flex-shrink: 0;
102
+ }
103
+ .cart-badge-count {
104
+ position: absolute;
105
+ top: -0.25rem;
106
+ right: -0.5rem;
107
+ min-width: 1.25rem;
108
+ height: 1.25rem;
109
+ padding: 0 0.25rem;
110
+ display: inline-flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ border-radius: 9999px;
114
+ background: var(--color-ink);
115
+ color: var(--color-paper);
116
+ font-family: var(--font-body);
117
+ font-size: 0.75rem;
118
+ font-variant-numeric: tabular-nums;
119
+ line-height: 1;
120
+ }
121
+
122
+ /* --- Cart line items (CartView.tsx) --- */
123
+ .cart-item {
124
+ display: flex;
125
+ flex-direction: row;
126
+ gap: var(--spacing-md);
127
+ }
128
+ .cart-item-image {
129
+ flex-shrink: 0;
130
+ }
131
+ .cart-item-image-link {
132
+ display: block;
133
+ flex-shrink: 0;
134
+ cursor: pointer;
135
+ }
136
+ .cart-item-image-link:hover .cart-item-image,
137
+ .cart-item-image-link:focus-visible .cart-item-image {
138
+ border-color: var(--color-ink);
139
+ }
140
+ .cart-item-name-link {
141
+ color: inherit;
142
+ cursor: pointer;
143
+ text-decoration: none;
144
+ border-bottom: 1px solid var(--color-mute);
145
+ padding-bottom: 1px;
146
+ transition: color 150ms ease, border-color 150ms ease;
147
+ }
148
+ .cart-item-name-link:hover,
149
+ .cart-item-name-link:focus-visible {
150
+ color: var(--color-accent);
151
+ outline: none;
152
+ border-bottom-color: var(--color-accent);
153
+ }
154
+ .cart-item-info {
155
+ flex: 1;
156
+ min-width: 0;
157
+ }
158
+
159
+ /* --- Description lines & modifiers --- */
160
+ .cart-item-option {
161
+ font-family: var(--font-body);
162
+ font-size: 0.875rem;
163
+ color: var(--color-ink-soft, var(--color-mute));
164
+ margin: 0.125rem 0;
165
+ }
166
+ .cart-item-modifiers {
167
+ margin-top: 0.25rem;
168
+ }
169
+
170
+ /* --- Quantity stepper --- */
171
+ .cart-item-qty {
172
+ display: inline-flex;
173
+ align-items: center;
174
+ gap: var(--spacing-sm);
175
+ margin-top: var(--spacing-sm);
176
+ width: fit-content;
177
+ }
178
+ .qty-btn {
179
+ width: 1.75rem;
180
+ height: 1.75rem;
181
+ display: inline-flex;
182
+ align-items: center;
183
+ justify-content: center;
184
+ border: 1px solid var(--color-ink);
185
+ border-radius: var(--radius-sm);
186
+ background: transparent;
187
+ color: var(--color-ink);
188
+ cursor: pointer;
189
+ font-family: var(--font-body);
190
+ font-size: 1rem;
191
+ line-height: 1;
192
+ }
193
+ .qty-btn:disabled {
194
+ opacity: 0.3;
195
+ cursor: not-allowed;
196
+ }
197
+ .qty-value {
198
+ font-family: var(--font-body);
199
+ font-size: 0.875rem;
200
+ min-width: 1.5rem;
201
+ text-align: center;
202
+ font-variant-numeric: tabular-nums;
203
+ }
204
+
205
+ /* --- Unavailable state --- */
206
+ .cart-item-unavailable {
207
+ font-family: var(--font-body);
208
+ font-size: 0.875rem;
209
+ font-weight: 500;
210
+ color: var(--color-error, #c0392b);
211
+ }
212
+
213
+ /* --- Price + remove --- */
214
+ .cart-item-actions {
215
+ display: flex;
216
+ flex-direction: column;
217
+ align-items: flex-end;
218
+ gap: 0.25rem;
219
+ flex-shrink: 0;
220
+ }
221
+ .cart-item-prices {
222
+ display: flex;
223
+ align-items: center;
224
+ gap: var(--spacing-sm);
225
+ }
226
+ .cart-item-full-price {
227
+ font-family: var(--font-body);
228
+ font-size: 0.875rem;
229
+ color: var(--color-ink-soft, var(--color-mute));
230
+ text-decoration: line-through;
231
+ }
232
+ .cart-item-unit-price {
233
+ font-family: var(--font-body);
234
+ font-weight: 600;
235
+ white-space: nowrap;
236
+ }
237
+ .cart-item-line-total {
238
+ font-family: var(--font-body);
239
+ font-size: 0.75rem;
240
+ color: var(--color-ink-soft, var(--color-mute));
241
+ margin: 0;
242
+ }
243
+ .cart-item-remove {
244
+ background: transparent;
245
+ border: none;
246
+ font-family: var(--font-body);
247
+ font-size: 0.875rem;
248
+ color: var(--color-mute);
249
+ cursor: pointer;
250
+ text-decoration: underline;
251
+ }
252
+
253
+ /* --- Cart summary: discount + total rows ---
254
+ Subtotal uses the designer's .cart-subtotal contract class in global.css.
255
+ These rows appear only when priceSummary exposes a discount or a total
256
+ that differs from subtotal (see CartView.tsx extractSummary). */
257
+ .cart-discount {
258
+ display: flex;
259
+ align-items: baseline;
260
+ justify-content: space-between;
261
+ gap: var(--spacing-sm);
262
+ font-family: var(--font-body);
263
+ font-size: 0.875rem;
264
+ margin-top: var(--spacing-sm);
265
+ }
266
+ .cart-discount-name {
267
+ font-size: 0.75rem;
268
+ color: var(--color-ink-soft, var(--color-mute));
269
+ }
270
+ .cart-discount-amount {
271
+ white-space: nowrap;
272
+ }
273
+ .cart-total {
274
+ border-top: 1px solid var(--color-rule);
275
+ padding-top: var(--spacing-md);
276
+ margin-top: var(--spacing-sm);
277
+ font-family: var(--font-display);
278
+ font-size: 1.25rem;
279
+ font-weight: 500;
280
+ display: flex;
281
+ justify-content: space-between;
282
+ align-items: baseline;
283
+ }
284
+
285
+ /* Applied-discounts row — name-only (no amount) for cases where the API
286
+ reports a promo NAME via appliedDiscounts[].discountName but no cart-level
287
+ amount in priceSummary.discount (common for line-item automatic discounts
288
+ — the savings already show inline via fullPrice/price strikethrough). */
289
+ .cart-applied-discounts {
290
+ display: flex;
291
+ align-items: baseline;
292
+ justify-content: space-between;
293
+ gap: var(--spacing-sm);
294
+ font-family: var(--font-body);
295
+ font-size: 0.875rem;
296
+ margin-top: var(--spacing-sm);
297
+ }
298
+ .cart-applied-discounts-name {
299
+ text-align: right;
300
+ color: var(--color-ink-soft, var(--color-mute));
301
+ font-style: italic;
302
+ }
@@ -0,0 +1,286 @@
1
+ /* ── Composer skeleton: src/styles/global.css ──────────────────────────────
2
+ The fixed bulk below is LITERAL — do not re-author it. Composer's only edit
3
+ is to replace the {{theme}} block with the @theme palette derived from the
4
+ inlined designTokens (see COMPOSE.md § "1. global.css"). Everything outside
5
+ {{theme}} references the stable token vocabulary via var(--token) / built-in
6
+ utilities and is brand-agnostic; ship it byte-for-byte.
7
+ ─────────────────────────────────────────────────────────────────────────── */
8
+
9
+ @import "tailwindcss";
10
+
11
+ @theme {
12
+ /* {{theme}} — Composer substitutes the full palette here from designTokens:
13
+ every --color-*, --font-*, --spacing-* (2xs..4xl), --container-*, and
14
+ --radius-* line. The required-token set (COMPOSE.md § "Token contract")
15
+ MUST all be present, or components render unstyled. Container scale is
16
+ separate from spacing — never alias --container-3xl to --spacing-3xl. */
17
+ }
18
+
19
+ /* Reading-width helper so prose pages center without guessing Tailwind sizes. */
20
+ @utility container-reading {
21
+ max-width: var(--container-prose);
22
+ margin-inline: auto;
23
+ }
24
+
25
+ /* Shared button primitive — declared with @utility so the variants below can
26
+ @apply it (a plain contract class is NOT @apply-able in Tailwind v4). */
27
+ @utility btn {
28
+ @apply inline-flex items-center justify-center px-lg py-md rounded-md font-medium;
29
+ transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease;
30
+ }
31
+
32
+ @layer base {
33
+ * {
34
+ box-sizing: border-box;
35
+ }
36
+ html {
37
+ -webkit-text-size-adjust: 100%;
38
+ }
39
+ body {
40
+ margin: 0;
41
+ background: var(--color-paper);
42
+ color: var(--color-ink);
43
+ font-family: var(--font-body);
44
+ line-height: 1.6;
45
+ -webkit-font-smoothing: antialiased;
46
+ }
47
+ h1, h2, h3, h4, h5, h6 {
48
+ font-family: var(--font-display);
49
+ line-height: 1.15;
50
+ margin: 0;
51
+ }
52
+ p {
53
+ margin: 0;
54
+ }
55
+ a {
56
+ color: inherit;
57
+ text-decoration: none;
58
+ }
59
+ button {
60
+ font: inherit;
61
+ cursor: pointer;
62
+ }
63
+ input, textarea, select {
64
+ font: inherit;
65
+ }
66
+ img {
67
+ display: block;
68
+ max-width: 100%;
69
+ height: auto;
70
+ }
71
+ ul, ol {
72
+ margin: 0;
73
+ padding: 0;
74
+ list-style: none;
75
+ }
76
+ }
77
+
78
+ /* ── Button family — used on every page in every vertical ─────────────────── */
79
+ .btn-primary {
80
+ @apply btn;
81
+ background: var(--color-ink);
82
+ color: var(--color-paper);
83
+ }
84
+ .btn-primary:hover:not(:disabled) {
85
+ background: var(--color-accent);
86
+ }
87
+ .btn-primary:disabled {
88
+ opacity: 0.5;
89
+ cursor: not-allowed;
90
+ }
91
+ .btn-secondary {
92
+ @apply btn;
93
+ background: transparent;
94
+ color: var(--color-ink);
95
+ border: 1px solid var(--color-rule);
96
+ }
97
+ .btn-secondary:hover:not(:disabled) {
98
+ border-color: var(--color-accent);
99
+ color: var(--color-accent);
100
+ }
101
+ .btn-secondary:disabled {
102
+ opacity: 0.5;
103
+ cursor: not-allowed;
104
+ }
105
+ .btn-ghost {
106
+ @apply btn;
107
+ background: transparent;
108
+ color: var(--color-ink);
109
+ }
110
+ .btn-ghost:hover:not(:disabled) {
111
+ background: var(--color-paper-warm);
112
+ }
113
+ .btn-ghost:disabled {
114
+ opacity: 0.5;
115
+ cursor: not-allowed;
116
+ }
117
+
118
+ /* ── Cross-cutting decorative patterns ────────────────────────────────────── */
119
+ [data-decorative-slot] {
120
+ position: relative;
121
+ overflow: hidden;
122
+ }
123
+ [data-decorative-slot] > img {
124
+ width: 100%;
125
+ height: 100%;
126
+ object-fit: cover;
127
+ }
128
+ .editorial-rule {
129
+ border: 0;
130
+ height: 1px;
131
+ background: var(--color-accent);
132
+ opacity: 0.6;
133
+ margin-block: var(--spacing-lg);
134
+ }
135
+
136
+ /* ── Universal site chrome ────────────────────────────────────────────────── */
137
+ .site-nav {
138
+ position: sticky;
139
+ top: 0;
140
+ z-index: 50;
141
+ background: color-mix(in srgb, var(--color-paper) 88%, transparent);
142
+ backdrop-filter: saturate(1.1) blur(8px);
143
+ border-bottom: 1px solid var(--color-rule);
144
+ }
145
+ .site-footer {
146
+ border-top: 1px solid var(--color-rule);
147
+ background: var(--color-paper-warm);
148
+ color: var(--color-mute);
149
+ }
150
+
151
+ /* ── View Transitions wiring (paired with Layout.astro <script>) ──────────────
152
+ Disable the default ClientRouter root cross-fade; the progress bar + grid-dim
153
+ carry navigation feedback instead. Do not split into a separate file. */
154
+ ::view-transition-old(root),
155
+ ::view-transition-new(root) {
156
+ animation: none;
157
+ mix-blend-mode: normal;
158
+ }
159
+
160
+ .nav-progress {
161
+ position: fixed;
162
+ top: 0;
163
+ left: 0;
164
+ right: 0;
165
+ height: 2px;
166
+ background: var(--color-accent, currentColor);
167
+ transform: scaleX(0);
168
+ transform-origin: left;
169
+ z-index: 1000;
170
+ pointer-events: none;
171
+ opacity: 0;
172
+ }
173
+ .nav-progress[data-state="loading"] {
174
+ opacity: 1;
175
+ transform: scaleX(0.85);
176
+ transition: transform 1.6s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 120ms ease;
177
+ }
178
+ .nav-progress[data-state="done"] {
179
+ opacity: 0;
180
+ transform: scaleX(1);
181
+ transition: transform 200ms ease, opacity 240ms ease 60ms;
182
+ }
183
+
184
+ /* Dim the product grid while ClientRouter fetches/swaps for immediate feedback. */
185
+ body[data-navigating="true"] .product-grid {
186
+ opacity: 0.55;
187
+ transition: opacity 140ms ease;
188
+ pointer-events: none;
189
+ }
190
+ .product-grid {
191
+ transition: opacity 200ms ease;
192
+ }
193
+
194
+ /* ── Navigation submenu + CategoryRail/pagination (stores pack) ───────────────
195
+ These reference declared tokens and stay inert when stores is not loaded (no
196
+ markup uses them), so they ship unconditionally as fixed bulk. */
197
+ .site-nav-item.has-submenu {
198
+ position: relative;
199
+ }
200
+ .site-nav-submenu {
201
+ position: absolute;
202
+ top: 100%;
203
+ left: 0;
204
+ min-width: 12rem;
205
+ display: flex;
206
+ flex-direction: column;
207
+ gap: var(--spacing-2xs);
208
+ padding: var(--spacing-sm);
209
+ background: var(--color-paper);
210
+ border: 1px solid var(--color-rule);
211
+ border-radius: var(--radius-md);
212
+ opacity: 0;
213
+ visibility: hidden;
214
+ transform: translateY(4px);
215
+ transition: opacity 160ms ease, transform 160ms ease, visibility 160ms;
216
+ }
217
+ .site-nav-item.has-submenu:hover .site-nav-submenu,
218
+ .site-nav-item.has-submenu:focus-within .site-nav-submenu {
219
+ opacity: 1;
220
+ visibility: visible;
221
+ transform: translateY(0);
222
+ }
223
+ .site-nav-sublink {
224
+ font-size: 0.875rem;
225
+ color: var(--color-ink-soft, var(--color-mute));
226
+ padding-block: var(--spacing-2xs);
227
+ }
228
+ .site-nav-sublink:hover,
229
+ .site-nav-sublink[aria-current="page"] {
230
+ color: var(--color-accent);
231
+ }
232
+
233
+ .category-rail {
234
+ background: var(--color-paper-warm);
235
+ border-bottom: 1px solid var(--color-rule);
236
+ }
237
+ .category-rail-inner {
238
+ display: flex;
239
+ flex-wrap: wrap;
240
+ gap: var(--spacing-sm);
241
+ padding-block: var(--spacing-md);
242
+ }
243
+ .category-pill {
244
+ display: inline-flex;
245
+ align-items: center;
246
+ padding: var(--spacing-2xs) var(--spacing-md);
247
+ border: 1px solid var(--color-rule);
248
+ border-radius: var(--radius-sm);
249
+ font-size: 0.8125rem;
250
+ text-transform: uppercase;
251
+ letter-spacing: 0.06em;
252
+ color: var(--color-ink-soft, var(--color-ink));
253
+ transition: border-color 160ms ease, color 160ms ease, background-color 160ms ease;
254
+ }
255
+ .category-pill:hover {
256
+ border-color: var(--color-accent);
257
+ color: var(--color-accent);
258
+ }
259
+ .category-pill[aria-current="page"] {
260
+ background: var(--color-ink);
261
+ color: var(--color-paper);
262
+ border-color: var(--color-ink);
263
+ }
264
+ .pagination {
265
+ margin-block: var(--spacing-xl);
266
+ }
267
+ .pagination-inner {
268
+ display: flex;
269
+ justify-content: space-between;
270
+ gap: var(--spacing-md);
271
+ }
272
+ .pagination-link {
273
+ color: var(--color-ink);
274
+ }
275
+ .pagination-link:hover {
276
+ color: var(--color-accent);
277
+ }
278
+ .pagination-link.is-disabled {
279
+ opacity: 0.4;
280
+ pointer-events: none;
281
+ }
282
+ .breadcrumbs {
283
+ font-size: 0.8125rem;
284
+ color: var(--color-mute);
285
+ margin-bottom: var(--spacing-sm);
286
+ }
@@ -0,0 +1,56 @@
1
+ ---
2
+ // ── Composer skeleton: src/pages/index.astro ──────────────────────────────────
3
+ // Home shell. Substitutions (see COMPOSE.md § "6. index.astro"):
4
+ // {{shell.heroHeadline}}, {{shell.heroSub}} — brand-voice hero copy.
5
+ // {{shell.footerTagline}} is NOT used here.
6
+ // {{brand.name}} — used in the brand-story copy.
7
+ // {{home-markers}} — one `<!-- home:<pack> -->` marker per LOADED pack that
8
+ // contributes a home section (e.g. stores, gift-cards). Emit a marker
9
+ // ONLY for such packs; never emit a marker no pack will fill (e.g. no
10
+ // <!-- home:cms --> — CMS owns brand-story directly). Disabled packs
11
+ // (gift-cards) still get their marker; do NOT add hero CTAs / teasers
12
+ // pointing at disabled-pack routes.
13
+ // Fixed bulk (keep literal): the Layout wrapper, hero/brand-story structure,
14
+ // the data-decorative-slot="hero" and "about" placeholders (the orchestrator
15
+ // injects <img> into these after Image Phase 1 — keep them empty).
16
+ import Layout from '../layouts/Layout.astro';
17
+ ---
18
+ <Layout>
19
+ <section class="relative">
20
+ <div class="max-w-6xl mx-auto px-lg py-4xl grid grid-cols-1 md:grid-cols-2 gap-3xl items-center">
21
+ <div class="flex flex-col gap-lg">
22
+ <h1 class="font-display text-4xl md:text-5xl leading-tight">{{shell.heroHeadline}}</h1>
23
+ <p class="text-lg text-mute max-w-prose">{{shell.heroSub}}</p>
24
+ </div>
25
+ <div
26
+ class="hero-image rounded-md"
27
+ data-decorative-slot="hero"
28
+ style="aspect-ratio: 4/5; background-color: var(--color-paper-warm);"
29
+ >
30
+ <!-- orchestrator injects <img src={decorativeImages.hero} …> here -->
31
+ </div>
32
+ </div>
33
+ </section>
34
+
35
+ {{home-markers}}
36
+
37
+ <section class="max-w-6xl mx-auto px-lg py-4xl grid grid-cols-1 md:grid-cols-2 gap-3xl items-center">
38
+ <div
39
+ class="about-image rounded-md order-last md:order-first"
40
+ data-decorative-slot="about"
41
+ style="aspect-ratio: 4/3; background-color: var(--color-paper-warm);"
42
+ >
43
+ <!-- orchestrator injects <img src={decorativeImages.about} …> here -->
44
+ </div>
45
+ <div class="flex flex-col gap-md max-w-prose">
46
+ <hr class="editorial-rule w-16 ml-0" />
47
+ <h2 class="font-display text-3xl leading-tight">The story behind {{brand.name}}</h2>
48
+ <p class="text-ink leading-relaxed">
49
+ A short, brand-contextual paragraph about what makes {{brand.name}} distinct.
50
+ </p>
51
+ <p class="text-mute leading-relaxed">
52
+ A second paragraph adding warmth and detail to the brand story.
53
+ </p>
54
+ </div>
55
+ </section>
56
+ </Layout>
@@ -6,7 +6,7 @@
6
6
  // Wix's back-in-stock service identifies the Stores integration by the
7
7
  // Stores SUB-PAGE registration id (1380b703-…), NOT by the install/catalog
8
8
  // appId (215238eb-…) that the public docs and other catalog endpoints use.
9
- // Reproduced 2026-04-28 against a Catalog-V3 site:
9
+ // Against a Catalog-V3 site the request-collection endpoints behave as follows:
10
10
  // - PUT /settings returned `collectionStates: [{appId: "1380b703-…",
11
11
  // collectingRequests: true}]`.
12
12
  // - POST /settings/start-collecting with `215238eb-…` returned