@wix/agent-skills 1.6.0 → 1.8.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 (195) hide show
  1. package/README.md +5 -9
  2. package/package.json +1 -1
  3. package/skills/wix-app/SKILL.md +51 -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/EMBEDDED_SCRIPT.md +41 -268
  12. package/skills/wix-app/references/EXTENSION_REGISTRATION.md +27 -76
  13. package/skills/wix-app/references/SERVICE_PLUGIN.md +35 -188
  14. package/skills/wix-app/references/SITE_PLUGIN.md +8 -92
  15. package/skills/wix-app/references/STORES_VERSIONING.md +1 -0
  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/service-plugin/ADDITIONAL-FEES.md +2 -18
  23. package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +2 -42
  24. package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +1 -11
  25. package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +1 -11
  26. package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +2 -40
  27. package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +2 -19
  28. package/skills/wix-app/references/service-plugin/VALIDATIONS.md +2 -18
  29. package/skills/wix-app/references/site-plugin/SLOTS.md +17 -68
  30. package/skills/wix-design-system/SKILL.md +4 -0
  31. package/skills/wix-headless/SKILL.md +131 -386
  32. package/skills/wix-headless/references/BUILD-astro.md +246 -0
  33. package/skills/wix-headless/references/BUILD-own-build.md +167 -0
  34. package/skills/wix-headless/references/BUILD.md +105 -0
  35. package/skills/wix-headless/references/DESIGN_SYSTEM.md +175 -0
  36. package/skills/wix-headless/references/DISCOVERY-connect.md +55 -0
  37. package/skills/wix-headless/references/DISCOVERY-create.md +238 -0
  38. package/skills/wix-headless/references/DISCOVERY.md +50 -306
  39. package/skills/wix-headless/references/PLAN-connect.md +19 -0
  40. package/skills/wix-headless/references/PLAN-create.md +17 -0
  41. package/skills/wix-headless/references/PLAN.md +92 -0
  42. package/skills/wix-headless/references/SEED.md +214 -0
  43. package/skills/wix-headless/references/SETUP.md +73 -248
  44. package/skills/wix-headless/references/{blog → astro/blog}/BLOG_PAGES.md +6 -5
  45. package/skills/wix-headless/references/{blog → astro/blog}/BLOG_SETUP.md +2 -2
  46. package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +337 -0
  47. package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +428 -0
  48. package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +214 -0
  49. package/skills/wix-headless/references/{cms → astro/cms}/FAQ_KNOWLEDGE_BASE.md +14 -12
  50. package/skills/wix-headless/references/{cms → astro/cms}/PORTFOLIO.md +15 -16
  51. package/skills/wix-headless/references/{cms → astro/cms}/RESOURCE_LIBRARY.md +13 -15
  52. package/skills/wix-headless/references/{cms → astro/cms}/TEAM_DIRECTORY.md +11 -11
  53. package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +354 -0
  54. package/skills/wix-headless/references/{ecom → astro/ecom}/CART_PAGES.md +8 -9
  55. package/skills/wix-headless/references/{ecom → astro/ecom}/CART_WIRING.md +6 -6
  56. package/skills/wix-headless/references/{ecom → astro/ecom}/COMPONENTS_CSS.md +6 -6
  57. package/skills/wix-headless/references/{forms → astro/forms}/CONTACT_FORM.md +18 -32
  58. package/skills/wix-headless/references/{gift-cards → astro/gift-cards}/COMPONENTS.md +3 -3
  59. package/skills/wix-headless/references/{gift-cards → astro/gift-cards}/PAGES.md +2 -2
  60. package/skills/wix-headless/references/{stores → astro/stores}/BACK_IN_STOCK.md +7 -7
  61. package/skills/wix-headless/references/{stores → astro/stores}/CATEGORY_PAGES.md +12 -13
  62. package/skills/wix-headless/references/{stores → astro/stores}/COMPONENTS_CSS.md +7 -7
  63. package/skills/wix-headless/references/{stores → astro/stores}/HOME_AND_NAV.md +11 -9
  64. package/skills/wix-headless/references/{stores → astro/stores}/PRODUCT_PAGES.md +11 -9
  65. package/skills/wix-headless/references/{stores → astro/stores}/SHARED_WIRING.md +8 -7
  66. package/skills/wix-headless/references/astro/templates/Footer.astro +27 -0
  67. package/skills/wix-headless/references/astro/templates/Layout.astro +132 -0
  68. package/skills/wix-headless/references/astro/templates/Navigation.astro +38 -0
  69. package/skills/wix-headless/references/astro/templates/astro.config.mjs +41 -0
  70. package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +218 -0
  71. package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +194 -0
  72. package/skills/wix-headless/references/astro/templates/bookings/ManageBooking.tsx +84 -0
  73. package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +25 -0
  74. package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +50 -0
  75. package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +45 -0
  76. package/skills/wix-headless/references/astro/templates/bookings/api/confirm-booking.ts +34 -0
  77. package/skills/wix-headless/references/astro/templates/bookings/api/waitlist.ts +74 -0
  78. package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +111 -0
  79. package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +413 -0
  80. package/skills/wix-headless/references/astro/templates/bookings/manage-booking.astro +76 -0
  81. package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +81 -0
  82. package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +65 -0
  83. package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +302 -0
  84. package/skills/wix-headless/references/astro/templates/global.css +286 -0
  85. package/skills/wix-headless/references/astro/templates/index.astro +56 -0
  86. package/skills/wix-headless/{templates → references/astro/templates}/stores/back-in-stock.ts +1 -1
  87. package/skills/wix-headless/{templates → references/astro/templates}/stores/components-stores.css +138 -33
  88. package/skills/wix-headless/references/blog/BLOG_CONTENT.md +28 -19
  89. package/skills/wix-headless/references/blog/INSTRUCTIONS.md +6 -6
  90. package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +106 -0
  91. package/skills/wix-headless/references/bookings/SERVICES_DATA.md +295 -0
  92. package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +35 -232
  93. package/skills/wix-headless/references/cms/INSTRUCTIONS.md +39 -8
  94. package/skills/wix-headless/references/commands/known-apps.json +2 -1
  95. package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +142 -0
  96. package/skills/wix-headless/references/custom/INSTRUCTIONS.md +88 -0
  97. package/skills/wix-headless/references/custom/blog/WIRING.md +52 -0
  98. package/skills/wix-headless/references/custom/bookings/WIRING.md +88 -0
  99. package/skills/wix-headless/references/custom/cms/WIRING.md +97 -0
  100. package/skills/wix-headless/references/custom/ecom/WIRING.md +67 -0
  101. package/skills/wix-headless/references/custom/forms/WIRING.md +101 -0
  102. package/skills/wix-headless/references/custom/stores/WIRING.md +80 -0
  103. package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +12 -12
  104. package/skills/wix-headless/references/forms/INSTRUCTIONS.md +6 -6
  105. package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +13 -13
  106. package/skills/wix-headless/references/images/INSTRUCTIONS.md +58 -60
  107. package/skills/wix-headless/references/seed-recipes.md +49 -0
  108. package/skills/wix-headless/references/shared/AGENTS_MD.md +47 -0
  109. package/skills/wix-headless/references/shared/AUTHENTICATION.md +108 -0
  110. package/skills/wix-headless/references/shared/BUILD_NOISE.md +2 -2
  111. package/skills/wix-headless/references/shared/DESIGN_MD.md +85 -0
  112. package/skills/wix-headless/references/shared/DOCS_SEARCH.md +41 -0
  113. package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +40 -39
  114. package/skills/wix-headless/references/shared/IMPLEMENTER.md +92 -41
  115. package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +3 -3
  116. package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +32 -312
  117. package/skills/wix-headless/references/shared/STYLING.md +48 -21
  118. package/skills/wix-headless/references/stores/INSTRUCTIONS.md +59 -29
  119. package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +31 -28
  120. package/skills/wix-headless/references/verticals/_schema.json +31 -117
  121. package/skills/wix-headless/references/verticals/_schema.md +60 -150
  122. package/skills/wix-headless/references/verticals/blog.md +5 -99
  123. package/skills/wix-headless/references/verticals/bookings.md +41 -0
  124. package/skills/wix-headless/references/verticals/cms.md +9 -100
  125. package/skills/wix-headless/references/verticals/ecom.md +6 -77
  126. package/skills/wix-headless/references/verticals/forms.md +5 -85
  127. package/skills/wix-headless/references/verticals/gift-cards.md +6 -103
  128. package/skills/wix-headless/references/verticals/stores.md +10 -144
  129. package/skills/wix-headless/scripts/check-manifest.mjs +148 -11
  130. package/skills/wix-headless/scripts/compose.mjs +540 -0
  131. package/skills/wix-headless/scripts/emit-design-tokens.mjs +136 -53
  132. package/skills/wix-headless/scripts/flatten.sh +61 -0
  133. package/skills/wix-headless/scripts/generate-images.mjs +242 -0
  134. package/skills/wix-headless/scripts/patch-decorative-slots.mjs +67 -43
  135. package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +3 -3
  136. package/skills/wix-headless/scripts/scaffold.sh +113 -27
  137. package/skills/wix-headless/scripts/seed-utilities.sh +50 -12
  138. package/skills/wix-headless/scripts/write-decorative-json.mjs +62 -0
  139. package/skills/wix-manage/SKILL.md +4 -8
  140. package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +2 -0
  141. package/skills/wix-manage/references/cms/cms-data-items-crud.md +4 -0
  142. package/skills/wix-manage/references/cms/cms-references-and-relationships.md +2 -0
  143. package/skills/wix-manage/references/cms/cms-schema-management.md +4 -0
  144. package/skills/wix-manage/references/domains/domain-search-and-purchase.md +10 -7
  145. package/skills/wix-manage/references/ecommerce/api-shipping.md +443 -0
  146. package/skills/wix-manage/references/ecommerce/flow-add-free-shipping.md +5 -6
  147. package/skills/wix-manage/references/ecommerce/flow-fix-coverage-gaps.md +4 -5
  148. package/skills/wix-manage/references/ecommerce/flow-optimize-shipping-rates.md +4 -5
  149. package/skills/wix-manage/references/ecommerce/goal-increase-aov.md +1 -1
  150. package/skills/wix-manage/references/ecommerce/goal-reduce-cart-abandonment.md +1 -2
  151. package/skills/wix-manage/references/ecommerce/guardrail-shipping-health.md +2 -2
  152. package/skills/wix-manage/references/ecommerce/recipe-apply-shipping-recommendations.md +4 -5
  153. package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +7 -7
  154. package/skills/wix-manage/references/ecommerce/setup-discount-rules.md +209 -72
  155. package/skills/wix-manage/references/ecommerce/setup-store-pickup-location.md +9 -10
  156. package/skills/wix-manage/references/ecommerce/skill-graph.md +4 -4
  157. package/skills/wix-manage/references/forms/create-form.md +50 -0
  158. package/skills/wix-manage/references/stores/bulk-create-products-with-options.md +2 -0
  159. package/skills/wix-manage/references/stores/create-product-from-image.md +91 -38
  160. package/skills/wix-manage/references/stores/setup-online-store-catalog-v3.md +2 -0
  161. package/skills/wix-app/references/custom-element-widget/default-thumbnail.png +0 -0
  162. package/skills/wix-app/references/data-collection/extension-template.ts +0 -107
  163. package/skills/wix-headless/references/ORCHESTRATION.md +0 -269
  164. package/skills/wix-headless/references/commands/install-app.md +0 -42
  165. package/skills/wix-headless/references/commands/mcp-bootstrap.md +0 -28
  166. package/skills/wix-headless/references/designer/INSTRUCTIONS.md +0 -828
  167. package/skills/wix-headless/references/shared/MCP_PREFIX.md +0 -105
  168. package/skills/wix-headless/scripts/copy-utility-templates.mjs +0 -153
  169. package/skills/wix-headless/scripts/finalize-run-json.mjs +0 -141
  170. package/skills/wix-headless/scripts/init-site-json.mjs +0 -63
  171. package/skills/wix-headless/scripts/preview.sh +0 -45
  172. package/skills/wix-headless/scripts/release.sh +0 -73
  173. package/skills/wix-headless/templates/ecom/components-ecom.css +0 -215
  174. package/skills/wix-manage/references/events/list-events.md +0 -203
  175. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/CartBadge.tsx +0 -0
  176. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/CartView.tsx +0 -0
  177. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/cart.astro +0 -0
  178. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/discounts.ts +0 -0
  179. /package/skills/wix-headless/{templates → references/astro/templates}/ecom/thank-you.astro +0 -0
  180. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/GiftCardPurchase.tsx +0 -0
  181. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/_home-teaser-snippet.astro +0 -0
  182. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/_nav-snippet.astro +0 -0
  183. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/components-gift-cards.css +0 -0
  184. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/gift-cards.astro +0 -0
  185. /package/skills/wix-headless/{templates → references/astro/templates}/gift-cards/gift-cards.ts +0 -0
  186. /package/skills/wix-headless/{templates → references/astro/templates}/stores/AddToCartButton.tsx +0 -0
  187. /package/skills/wix-headless/{templates → references/astro/templates}/stores/BackInStockForm.tsx +0 -0
  188. /package/skills/wix-headless/{templates → references/astro/templates}/stores/CategoryRail.astro +0 -0
  189. /package/skills/wix-headless/{templates → references/astro/templates}/stores/ProductCard.astro +0 -0
  190. /package/skills/wix-headless/{templates → references/astro/templates}/stores/ProductPurchase.tsx +0 -0
  191. /package/skills/wix-headless/{templates → references/astro/templates}/stores/SeoTags.astro +0 -0
  192. /package/skills/wix-headless/{templates → references/astro/templates}/stores/categories.ts +0 -0
  193. /package/skills/wix-headless/{templates → references/astro/templates}/stores/category/[slug].astro +0 -0
  194. /package/skills/wix-headless/{templates → references/astro/templates}/stores/products/[slug].astro +0 -0
  195. /package/skills/wix-headless/{templates → references/astro/templates}/stores/products/index.astro +0 -0
@@ -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.mjs). 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 (enforced by compose.mjs)
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.mjs):
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
@@ -182,114 +182,219 @@ body[data-navigating="true"] .product-grid {
182
182
  }
183
183
 
184
184
 
185
+ /* =========================================================================
186
+ Rules below use direct CSS (var(--token)) only — no `@apply`.
187
+
188
+ Tailwind v4 `@apply` in a non-entrypoint CSS file only works for utilities
189
+ whose theme keys the designer's `@theme` block declares. Earlier revisions
190
+ of this template used `@apply font-heading text-bark/70 bg-parchment …`,
191
+ which assumed a different token vocabulary than current designer output
192
+ (`paper`/`ink`/`font-display` …) and built-failed on every run that loaded
193
+ it. Direct `var(--color-paper)` / `var(--spacing-sm)` calls work against
194
+ any designer-published token set as long as the core scales exist (they
195
+ always do). Use fallback chains (`var(--color-paper-warm, var(--color-cream))`)
196
+ when a token is sometimes-published.
197
+ ========================================================================= */
198
+
185
199
  /* --- Variant / option pills (ProductPurchase.tsx) --- */
186
200
  .option-group {
187
- @apply flex flex-col gap-sm mb-lg;
201
+ display: flex;
202
+ flex-direction: column;
203
+ gap: var(--spacing-sm);
204
+ margin-bottom: var(--spacing-lg);
188
205
  }
189
206
  .option-label {
190
- @apply font-heading text-sm uppercase tracking-wider text-bark/70;
207
+ font-family: var(--font-display);
208
+ font-size: 0.875rem;
209
+ text-transform: uppercase;
210
+ letter-spacing: 0.05em;
211
+ color: var(--color-ink-soft, var(--color-mute));
191
212
  }
192
213
  .option-choices {
193
- @apply flex flex-wrap gap-sm;
214
+ display: flex;
215
+ flex-wrap: wrap;
216
+ gap: var(--spacing-sm);
194
217
  }
195
218
  .option-pill {
196
- @apply px-md py-sm border border-bark bg-transparent text-bark font-body rounded-full cursor-pointer transition-colors;
219
+ padding: var(--spacing-sm) var(--spacing-md);
220
+ border: 1px solid var(--color-ink);
221
+ background: transparent;
222
+ color: var(--color-ink);
223
+ font-family: var(--font-body);
224
+ border-radius: 9999px;
225
+ cursor: pointer;
226
+ transition: background-color 150ms ease, color 150ms ease;
197
227
  }
198
228
  .option-pill.selected {
199
- @apply bg-bark text-cream;
229
+ background: var(--color-ink);
230
+ color: var(--color-paper);
200
231
  }
201
232
  .option-pill:disabled {
202
- @apply opacity-40 cursor-not-allowed;
233
+ opacity: 0.4;
234
+ cursor: not-allowed;
203
235
  }
204
236
 
205
237
  /* --- Quantity stepper (ProductPurchase.tsx, CartView.tsx qty editing) --- */
206
238
  .quantity-selector {
207
- @apply inline-flex items-center border border-bark rounded-md overflow-hidden;
239
+ display: inline-flex;
240
+ align-items: center;
241
+ border: 1px solid var(--color-ink);
242
+ border-radius: var(--radius-md);
243
+ overflow: hidden;
208
244
  }
209
245
  .quantity-btn {
210
- @apply px-3 py-2 bg-transparent border-none cursor-pointer text-bark font-body;
246
+ padding: 0.5rem 0.75rem;
247
+ background: transparent;
248
+ border: none;
249
+ cursor: pointer;
250
+ color: var(--color-ink);
251
+ font-family: var(--font-body);
211
252
  }
212
253
  .quantity-btn:disabled {
213
- @apply opacity-40 cursor-not-allowed;
254
+ opacity: 0.4;
255
+ cursor: not-allowed;
214
256
  }
215
257
  .quantity-value {
216
- @apply px-md py-sm tabular-nums;
258
+ padding: var(--spacing-sm) var(--spacing-md);
259
+ font-variant-numeric: tabular-nums;
217
260
  }
218
261
 
219
262
  /* --- Modifier free-text input (ProductPurchase.tsx, FREE_TEXT render type) --- */
220
263
  .modifier-text {
221
- @apply w-full px-sm py-sm font-body text-sm border border-rule rounded bg-parchment text-ink;
264
+ width: 100%;
265
+ padding: var(--spacing-sm);
266
+ font-family: var(--font-body);
267
+ font-size: 0.875rem;
268
+ border: 1px solid var(--color-rule);
269
+ border-radius: var(--radius-sm);
270
+ background: var(--color-paper-warm, var(--color-paper, var(--color-cream)));
271
+ color: var(--color-ink);
222
272
  resize: vertical;
223
273
  }
224
274
  .modifier-text:focus {
225
- @apply outline-none border-ink bg-cream;
275
+ outline: none;
276
+ border-color: var(--color-ink);
277
+ background: var(--color-paper, var(--color-cream));
226
278
  }
227
279
 
228
280
  /* --- Stock status (ProductPurchase.tsx) --- */
229
281
  .stock-status {
230
- @apply text-sm text-bark/70 italic;
282
+ font-size: 0.875rem;
283
+ color: var(--color-ink-soft, var(--color-mute));
284
+ font-style: italic;
231
285
  }
232
286
 
233
287
  /* --- Back-in-stock subscribe form (BackInStockForm.tsx) ---
234
288
  * Rendered inside .purchase-area in three OOS branches when
235
289
  * backInStockEnabled=true (probe in [slug].astro). */
236
290
  .back-in-stock-form {
237
- @apply flex flex-col gap-md mt-md p-lg border border-rule rounded;
238
- background-color: var(--color-cream);
291
+ display: flex;
292
+ flex-direction: column;
293
+ gap: var(--spacing-md);
294
+ margin-top: var(--spacing-md);
295
+ padding: var(--spacing-lg);
296
+ border: 1px solid var(--color-rule);
297
+ border-radius: var(--radius-md);
298
+ background: var(--color-paper, var(--color-cream));
239
299
  }
240
300
  .back-in-stock-headline {
241
- @apply flex flex-col gap-sm;
301
+ display: flex;
302
+ flex-direction: column;
303
+ gap: var(--spacing-sm);
242
304
  }
243
305
  .back-in-stock-eyebrow {
244
- @apply font-heading text-xs uppercase tracking-wider text-bark/70;
306
+ font-family: var(--font-display);
307
+ font-size: 0.75rem;
308
+ text-transform: uppercase;
309
+ letter-spacing: 0.05em;
310
+ color: var(--color-ink-soft, var(--color-mute));
245
311
  }
246
312
  .back-in-stock-lede {
247
- @apply font-body text-sm text-ink;
313
+ font-family: var(--font-body);
314
+ font-size: 0.875rem;
315
+ color: var(--color-ink);
248
316
  line-height: 1.5;
249
317
  }
250
318
  .back-in-stock-label {
251
- @apply font-heading text-xs uppercase tracking-wider text-bark/70;
319
+ font-family: var(--font-display);
320
+ font-size: 0.75rem;
321
+ text-transform: uppercase;
322
+ letter-spacing: 0.05em;
323
+ color: var(--color-ink-soft, var(--color-mute));
252
324
  }
253
325
  .back-in-stock-row {
254
- @apply flex flex-row flex-wrap gap-sm;
326
+ display: flex;
327
+ flex-direction: row;
328
+ flex-wrap: wrap;
329
+ gap: var(--spacing-sm);
255
330
  }
256
331
  .back-in-stock-input {
257
- @apply flex-1 px-md py-sm font-body text-sm border border-rule rounded bg-parchment text-ink;
332
+ flex: 1;
333
+ padding: var(--spacing-sm) var(--spacing-md);
334
+ font-family: var(--font-body);
335
+ font-size: 0.875rem;
336
+ border: 1px solid var(--color-rule);
337
+ border-radius: var(--radius-sm);
338
+ background: var(--color-paper-warm, var(--color-paper, var(--color-cream)));
339
+ color: var(--color-ink);
258
340
  min-width: 0;
259
341
  transition: border-color 0.15s ease;
260
342
  }
261
343
  .back-in-stock-input:focus {
262
- @apply outline-none border-ink;
344
+ outline: none;
345
+ border-color: var(--color-ink);
263
346
  }
264
347
  .back-in-stock-submit {
265
- @apply px-lg py-sm font-heading text-xs uppercase tracking-wider bg-bark text-cream rounded cursor-pointer transition-colors;
266
- border: 1px solid var(--color-bark);
348
+ padding: var(--spacing-sm) var(--spacing-lg);
349
+ font-family: var(--font-display);
350
+ font-size: 0.75rem;
351
+ text-transform: uppercase;
352
+ letter-spacing: 0.05em;
353
+ background: var(--color-ink);
354
+ color: var(--color-paper);
355
+ border: 1px solid var(--color-ink);
356
+ border-radius: var(--radius-sm);
357
+ cursor: pointer;
358
+ transition: background-color 150ms ease;
267
359
  }
268
360
  .back-in-stock-submit:hover:not(:disabled) {
269
- @apply bg-ink;
361
+ background: var(--color-ink-soft, var(--color-ink));
270
362
  }
271
363
  .back-in-stock-submit:disabled {
272
- @apply opacity-50 cursor-not-allowed;
364
+ opacity: 0.5;
365
+ cursor: not-allowed;
273
366
  }
274
367
  .back-in-stock-error {
275
- @apply font-body text-sm;
276
- color: var(--color-rust, var(--color-ink));
368
+ font-family: var(--font-body);
369
+ font-size: 0.875rem;
370
+ color: var(--color-error, var(--color-accent));
277
371
  }
278
372
  .back-in-stock-success {
279
- @apply mt-md p-lg border border-rule rounded;
280
- background-color: var(--color-cream);
373
+ margin-top: var(--spacing-md);
374
+ padding: var(--spacing-lg);
375
+ border: 1px solid var(--color-rule);
376
+ border-radius: var(--radius-md);
377
+ background: var(--color-paper, var(--color-cream));
281
378
  }
282
379
  .back-in-stock-success-headline {
283
- @apply font-heading text-base text-ink;
380
+ font-family: var(--font-display);
381
+ font-size: 1rem;
382
+ color: var(--color-ink);
284
383
  margin: 0 0 0.5rem 0;
285
384
  }
286
385
  .back-in-stock-success-detail {
287
- @apply font-body text-sm text-ink;
386
+ font-family: var(--font-body);
387
+ font-size: 0.875rem;
388
+ color: var(--color-ink);
288
389
  line-height: 1.55;
289
390
  margin: 0;
290
391
  }
291
392
  .stock-status.back-in-stock-alt {
292
- @apply mt-sm font-body text-sm italic text-bark/70;
393
+ margin-top: var(--spacing-sm);
394
+ font-family: var(--font-body);
395
+ font-size: 0.875rem;
396
+ font-style: italic;
397
+ color: var(--color-ink-soft, var(--color-mute));
293
398
  }
294
399
 
295
400
  /* Cart CSS (.cart-item-*, .qty-*) lives in components-ecom.css — not in this file. */