@wix/agent-skills 1.13.0 → 1.15.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.
- package/README.md +4 -1
- package/package.json +1 -1
- package/skills/README.md +23 -0
- package/skills/wix-app/SKILL.md +10 -2
- package/skills/wix-app/references/AUTO_PATTERNS_DASHBOARD.md +326 -0
- package/skills/wix-app/references/CODE_QUALITY.md +1 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +124 -115
- package/skills/wix-app/references/DASHBOARD_PAGE.md +3 -0
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +23 -9
- package/skills/wix-app/references/SITE_PLUGIN.md +1 -1
- package/skills/wix-app/references/auto-patterns-dashboard/action-cell.md +115 -0
- package/skills/wix-app/references/auto-patterns-dashboard/app-config-structure.md +264 -0
- package/skills/wix-app/references/auto-patterns-dashboard/app-context.md +37 -0
- package/skills/wix-app/references/auto-patterns-dashboard/bulk-actions.md +86 -0
- package/skills/wix-app/references/auto-patterns-dashboard/collection-page-actions.md +119 -0
- package/skills/wix-app/references/auto-patterns-dashboard/collection-page.md +103 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-actions-override.md +76 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-columns-override.md +82 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-components-override.md +89 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-header-override.md +124 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-sections-override.md +91 -0
- package/skills/wix-app/references/auto-patterns-dashboard/custom-slots-override.md +71 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page-actions.md +70 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page-view-actions.md +73 -0
- package/skills/wix-app/references/auto-patterns-dashboard/entity-page.md +98 -0
- package/skills/wix-app/references/auto-patterns-dashboard/example-patterns.json +278 -0
- package/skills/wix-app/references/auto-patterns-dashboard/pages-configuration.md +94 -0
- package/skills/wix-app/references/auto-patterns-dashboard/resolved-action.md +43 -0
- package/skills/wix-app/references/auto-patterns-dashboard/sdk-utilities.md +66 -0
- package/skills/wix-app/references/auto-patterns-dashboard/views.md +76 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +1 -14
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +54 -29
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +2 -2
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +17 -105
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +127 -0
- package/skills/wix-app/references/editor-react-component/PARTS.md +2 -1
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +15 -15
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +25 -53
- package/skills/wix-app/scripts/generate-auto-patterns.js +510 -0
- package/skills/wix-auth/SKILL.md +12 -0
- package/skills/wix-auth/references/device-flow.md +140 -0
- package/skills/wix-docs/SKILL.md +188 -0
- package/skills/wix-docs/references/API_SPEC_SEARCH.md +213 -0
- package/skills/wix-docs/references/EXTRACTING.md +120 -0
- package/skills/wix-headless/SKILL.md +84 -130
- package/skills/wix-headless/entry/bootstrap.mjs +93 -0
- package/skills/wix-headless/entry/skill.md +78 -0
- package/skills/wix-headless/references/AI_FEATURES.md +178 -0
- package/skills/wix-headless/references/CAPABILITIES.md +84 -0
- package/skills/wix-headless/references/DISCOVERY.md +34 -56
- package/skills/wix-headless/references/DOC_DISCOVERY.md +37 -0
- package/skills/wix-headless/references/FEEDBACK.md +118 -0
- package/skills/wix-headless/references/IMAGE_GENERATION.md +69 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +97 -0
- package/skills/wix-headless/references/SEED.md +44 -188
- package/skills/wix-headless/references/SETUP.md +32 -103
- package/skills/wix-headless/references/astro.md +98 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +196 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +236 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +279 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +163 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +203 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +222 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +124 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +160 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +118 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +132 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +124 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +188 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +173 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +161 -0
- package/skills/wix-headless/references/inline-recipes/setup-blog.md +175 -0
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +228 -0
- package/skills/wix-headless/references/inline-recipes/setup-cms.md +200 -0
- package/skills/wix-headless/references/inline-recipes/setup-events.md +196 -0
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +174 -0
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +176 -0
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +153 -0
- package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +229 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +161 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +117 -0
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +152 -0
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +57 -0
- package/skills/wix-headless/references/managed/CONNECT.md +74 -0
- package/skills/wix-headless/references/managed/CREATE.md +130 -0
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +57 -0
- package/skills/wix-headless/references/non-astro.md +59 -0
- package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +22 -0
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +7 -0
- package/skills/wix-headless/references/stripe/AUTHENTICATION.md +55 -0
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +63 -0
- package/skills/wix-manage/SKILL.md +24 -1
- package/skills/wix-manage/references/analytics/query-site-analytics.md +241 -0
- package/skills/wix-manage/references/bookings/create-and-update-booking-services.md +1 -1
- package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +265 -0
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +436 -0
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +209 -0
- package/skills/wix-manage/references/rich-content/author-ricos-rich-content.md +249 -0
- package/skills/wix-manage/references/stores/create-product-with-options-catalog-v3.md +51 -0
- package/skills/wix-vibe-headless/SKILL.md +136 -0
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +128 -0
- package/skills/wix-vibe-headless/references/blog/wix-blog.js +217 -0
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +153 -0
- package/skills/wix-vibe-headless/references/bookings/wix-bookings-checkout.js +147 -0
- package/skills/wix-vibe-headless/references/bookings/wix-bookings-services.js +215 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +154 -0
- package/skills/wix-vibe-headless/references/cms/wix-cms.js +186 -0
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +142 -0
- package/skills/wix-vibe-headless/references/events/wix-events-browse.js +135 -0
- package/skills/wix-vibe-headless/references/events/wix-events-registration.js +187 -0
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +211 -0
- package/skills/wix-vibe-headless/references/members/wix-members-auth.js +387 -0
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +111 -0
- package/skills/wix-vibe-headless/references/portfolio/wix-portfolio.js +194 -0
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +127 -0
- package/skills/wix-vibe-headless/references/pricing-plans/wix-pricing-plans.js +157 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +138 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-menu.js +224 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-ordering.js +156 -0
- package/skills/wix-vibe-headless/references/restaurants/wix-restaurants-reservations.js +107 -0
- package/skills/wix-vibe-headless/references/shared/wix-client.js +186 -0
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +155 -0
- package/skills/wix-vibe-headless/references/storefront/wix-store-cart.js +147 -0
- package/skills/wix-vibe-headless/references/storefront/wix-store-catalog.js +142 -0
- package/skills/wix-headless/references/BUILD-astro.md +0 -244
- package/skills/wix-headless/references/BUILD-own-build.md +0 -167
- package/skills/wix-headless/references/BUILD.md +0 -105
- package/skills/wix-headless/references/DESIGN_SYSTEM.md +0 -165
- package/skills/wix-headless/references/DISCOVERY-connect.md +0 -55
- package/skills/wix-headless/references/DISCOVERY-create.md +0 -238
- package/skills/wix-headless/references/PLAN-connect.md +0 -19
- package/skills/wix-headless/references/PLAN-create.md +0 -17
- package/skills/wix-headless/references/PLAN.md +0 -92
- package/skills/wix-headless/references/astro/blog/BLOG_PAGES.md +0 -300
- package/skills/wix-headless/references/astro/blog/BLOG_SETUP.md +0 -218
- package/skills/wix-headless/references/astro/bookings/COMPONENTS.md +0 -45
- package/skills/wix-headless/references/astro/bookings/SERVICES_PAGES.md +0 -77
- package/skills/wix-headless/references/astro/cms/CMS_FOUNDATIONS.md +0 -214
- package/skills/wix-headless/references/astro/cms/FAQ_KNOWLEDGE_BASE.md +0 -231
- package/skills/wix-headless/references/astro/cms/PORTFOLIO.md +0 -453
- package/skills/wix-headless/references/astro/cms/RESOURCE_LIBRARY.md +0 -354
- package/skills/wix-headless/references/astro/cms/TEAM_DIRECTORY.md +0 -299
- package/skills/wix-headless/references/astro/designer/INSTRUCTIONS.md +0 -351
- package/skills/wix-headless/references/astro/ecom/CART_PAGES.md +0 -119
- package/skills/wix-headless/references/astro/ecom/CART_WIRING.md +0 -103
- package/skills/wix-headless/references/astro/ecom/COMPONENTS_CSS.md +0 -132
- package/skills/wix-headless/references/astro/forms/CONTACT_FORM.md +0 -463
- package/skills/wix-headless/references/astro/gift-cards/COMPONENTS.md +0 -119
- package/skills/wix-headless/references/astro/gift-cards/PAGES.md +0 -129
- package/skills/wix-headless/references/astro/stores/BACK_IN_STOCK.md +0 -178
- package/skills/wix-headless/references/astro/stores/CATEGORY_PAGES.md +0 -85
- package/skills/wix-headless/references/astro/stores/COMPONENTS_CSS.md +0 -129
- package/skills/wix-headless/references/astro/stores/HOME_AND_NAV.md +0 -229
- package/skills/wix-headless/references/astro/stores/PRODUCT_PAGES.md +0 -215
- package/skills/wix-headless/references/astro/stores/SHARED_WIRING.md +0 -165
- package/skills/wix-headless/references/astro/templates/Footer.astro +0 -27
- package/skills/wix-headless/references/astro/templates/Layout.astro +0 -132
- package/skills/wix-headless/references/astro/templates/Navigation.astro +0 -38
- package/skills/wix-headless/references/astro/templates/astro.config.mjs +0 -41
- package/skills/wix-headless/references/astro/templates/bookings/AvailabilityCalendar.tsx +0 -374
- package/skills/wix-headless/references/astro/templates/bookings/BookingForm.tsx +0 -136
- package/skills/wix-headless/references/astro/templates/bookings/SeoTags.astro +0 -25
- package/skills/wix-headless/references/astro/templates/bookings/ServiceBookingFlow.tsx +0 -71
- package/skills/wix-headless/references/astro/templates/bookings/ServiceCard.astro +0 -54
- package/skills/wix-headless/references/astro/templates/bookings/booking-confirmation.astro +0 -49
- package/skills/wix-headless/references/astro/templates/bookings/bookingDriver.ts +0 -245
- package/skills/wix-headless/references/astro/templates/bookings/components-bookings.css +0 -424
- package/skills/wix-headless/references/astro/templates/bookings/services/[slug].astro +0 -176
- package/skills/wix-headless/references/astro/templates/bookings/services/index.astro +0 -181
- package/skills/wix-headless/references/astro/templates/ecom/CartBadge.tsx +0 -84
- package/skills/wix-headless/references/astro/templates/ecom/CartView.tsx +0 -543
- package/skills/wix-headless/references/astro/templates/ecom/cart.astro +0 -13
- package/skills/wix-headless/references/astro/templates/ecom/components-ecom.css +0 -302
- package/skills/wix-headless/references/astro/templates/ecom/discounts.ts +0 -71
- package/skills/wix-headless/references/astro/templates/ecom/thank-you.astro +0 -24
- package/skills/wix-headless/references/astro/templates/gift-cards/GiftCardPurchase.tsx +0 -172
- package/skills/wix-headless/references/astro/templates/gift-cards/_home-teaser-snippet.astro +0 -42
- package/skills/wix-headless/references/astro/templates/gift-cards/_nav-snippet.astro +0 -11
- package/skills/wix-headless/references/astro/templates/gift-cards/components-gift-cards.css +0 -220
- package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.astro +0 -51
- package/skills/wix-headless/references/astro/templates/gift-cards/gift-cards.ts +0 -75
- package/skills/wix-headless/references/astro/templates/global.css +0 -288
- package/skills/wix-headless/references/astro/templates/index.astro +0 -56
- package/skills/wix-headless/references/astro/templates/stores/AddToCartButton.tsx +0 -77
- package/skills/wix-headless/references/astro/templates/stores/BackInStockForm.tsx +0 -176
- package/skills/wix-headless/references/astro/templates/stores/CategoryRail.astro +0 -69
- package/skills/wix-headless/references/astro/templates/stores/ProductCard.astro +0 -79
- package/skills/wix-headless/references/astro/templates/stores/ProductPurchase.tsx +0 -397
- package/skills/wix-headless/references/astro/templates/stores/SeoTags.astro +0 -21
- package/skills/wix-headless/references/astro/templates/stores/back-in-stock.ts +0 -67
- package/skills/wix-headless/references/astro/templates/stores/categories.ts +0 -155
- package/skills/wix-headless/references/astro/templates/stores/category/[slug].astro +0 -130
- package/skills/wix-headless/references/astro/templates/stores/components-stores.css +0 -400
- package/skills/wix-headless/references/astro/templates/stores/products/[slug].astro +0 -128
- package/skills/wix-headless/references/astro/templates/stores/products/index.astro +0 -101
- package/skills/wix-headless/references/blog/BLOG_CONTENT.md +0 -161
- package/skills/wix-headless/references/blog/INSTRUCTIONS.md +0 -32
- package/skills/wix-headless/references/bookings/FLOW.md +0 -246
- package/skills/wix-headless/references/bookings/INSTRUCTIONS.md +0 -95
- package/skills/wix-headless/references/bookings/SERVICES_DATA.md +0 -355
- package/skills/wix-headless/references/cms/CMS_FOUNDATIONS.md +0 -176
- package/skills/wix-headless/references/cms/INSTRUCTIONS.md +0 -71
- package/skills/wix-headless/references/commands/known-apps.json +0 -6
- package/skills/wix-headless/references/custom/CONNECTION_PLAN.md +0 -142
- package/skills/wix-headless/references/custom/INSTRUCTIONS.md +0 -88
- package/skills/wix-headless/references/custom/blog/WIRING.md +0 -52
- package/skills/wix-headless/references/custom/bookings/WIRING.md +0 -197
- package/skills/wix-headless/references/custom/cms/WIRING.md +0 -97
- package/skills/wix-headless/references/custom/ecom/WIRING.md +0 -67
- package/skills/wix-headless/references/custom/forms/WIRING.md +0 -101
- package/skills/wix-headless/references/custom/stores/WIRING.md +0 -80
- package/skills/wix-headless/references/ecom/INSTRUCTIONS.md +0 -59
- package/skills/wix-headless/references/forms/INSTRUCTIONS.md +0 -43
- package/skills/wix-headless/references/gift-cards/INSTRUCTIONS.md +0 -51
- package/skills/wix-headless/references/images/INSTRUCTIONS.md +0 -357
- package/skills/wix-headless/references/seed-recipes.md +0 -49
- package/skills/wix-headless/references/shared/AGENTS_MD.md +0 -47
- package/skills/wix-headless/references/shared/AUTHENTICATION.md +0 -108
- package/skills/wix-headless/references/shared/BUILD_NOISE.md +0 -8
- package/skills/wix-headless/references/shared/DESIGN_MD.md +0 -84
- package/skills/wix-headless/references/shared/DOCS_SEARCH.md +0 -41
- package/skills/wix-headless/references/shared/IMAGE_GENERATION.md +0 -186
- package/skills/wix-headless/references/shared/IMPLEMENTER.md +0 -206
- package/skills/wix-headless/references/shared/PRODUCTION_SHARP_EDGES.md +0 -97
- package/skills/wix-headless/references/shared/RETURN_CONTRACT.md +0 -143
- package/skills/wix-headless/references/shared/STYLING.md +0 -141
- package/skills/wix-headless/references/stores/INSTRUCTIONS.md +0 -126
- package/skills/wix-headless/references/stores/PRODUCT_CATALOG_DATA.md +0 -252
- package/skills/wix-headless/references/verticals/_schema.json +0 -74
- package/skills/wix-headless/references/verticals/_schema.md +0 -95
- package/skills/wix-headless/references/verticals/blog.md +0 -31
- package/skills/wix-headless/references/verticals/bookings.md +0 -41
- package/skills/wix-headless/references/verticals/cms.md +0 -30
- package/skills/wix-headless/references/verticals/ecom.md +0 -25
- package/skills/wix-headless/references/verticals/forms.md +0 -26
- package/skills/wix-headless/references/verticals/gift-cards.md +0 -24
- package/skills/wix-headless/references/verticals/stores.md +0 -33
- package/skills/wix-headless/scripts/check-manifest.mjs +0 -335
- package/skills/wix-headless/scripts/compose.mjs +0 -525
- package/skills/wix-headless/scripts/emit-design-tokens.mjs +0 -157
- package/skills/wix-headless/scripts/flatten.sh +0 -61
- package/skills/wix-headless/scripts/generate-images.mjs +0 -242
- package/skills/wix-headless/scripts/patch-decorative-slots.mjs +0 -148
- package/skills/wix-headless/scripts/plan-entity-image-waves.mjs +0 -190
- package/skills/wix-headless/scripts/scaffold.sh +0 -139
- package/skills/wix-headless/scripts/seed-utilities.sh +0 -93
- package/skills/wix-headless/scripts/write-decorative-json.mjs +0 -62
- package/skills/wix-headless/shared-utilities/analytics.ts +0 -40
- package/skills/wix-headless/shared-utilities/ricos.ts +0 -179
- package/skills/wix-headless/shared-utilities/wix-image.ts +0 -72
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
/* Gift Cards pack — scoped CSS.
|
|
2
|
-
*
|
|
3
|
-
* Imported by Layout.astro alongside other components-*.css files. Covers:
|
|
4
|
-
* 1. Buy form (`.gift-card-form` + fields)
|
|
5
|
-
* 2. /gift-cards landing page sections
|
|
6
|
-
* 3. Home teaser block
|
|
7
|
-
*
|
|
8
|
-
* Reuses tokens declared by the designer foundation: --color-cream,
|
|
9
|
-
* --color-cream-deep, --color-ink, --color-ink-soft, --color-muted,
|
|
10
|
-
* --color-rule, --color-paper, --color-bark/espresso/gold-deep,
|
|
11
|
-
* --radius-sm, --font-body, --font-display. (Spacing uses Tailwind's numeric
|
|
12
|
-
* scale — gap-4, py-24 — not a design token.) If a token isn't in your design
|
|
13
|
-
* system, fall back to a
|
|
14
|
-
* sibling token; do NOT invent new ones.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
/* -------------------------------------------------------------------------- */
|
|
18
|
-
/* Buy form */
|
|
19
|
-
/* -------------------------------------------------------------------------- */
|
|
20
|
-
|
|
21
|
-
.gift-card-form {
|
|
22
|
-
display: flex;
|
|
23
|
-
flex-direction: column;
|
|
24
|
-
gap: 1.5rem;
|
|
25
|
-
margin-top: 1.5rem;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
.gift-card-fieldset {
|
|
29
|
-
border: none;
|
|
30
|
-
padding: 0;
|
|
31
|
-
margin: 0;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.gift-card-amounts {
|
|
35
|
-
display: flex;
|
|
36
|
-
flex-wrap: wrap;
|
|
37
|
-
gap: 0.75rem;
|
|
38
|
-
margin-top: 0.75rem;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.gift-card-grid {
|
|
42
|
-
display: grid;
|
|
43
|
-
grid-template-columns: 1fr 1fr;
|
|
44
|
-
gap: 1rem;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.gift-card-field {
|
|
48
|
-
display: flex;
|
|
49
|
-
flex-direction: column;
|
|
50
|
-
gap: 0.4rem;
|
|
51
|
-
position: relative;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.gift-card-field-wide {
|
|
55
|
-
grid-column: 1 / -1;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.gift-card-field input,
|
|
59
|
-
.gift-card-field textarea {
|
|
60
|
-
font-family: var(--font-body);
|
|
61
|
-
font-size: 0.9375rem;
|
|
62
|
-
line-height: 1.5;
|
|
63
|
-
color: var(--color-ink);
|
|
64
|
-
background: var(--color-cream);
|
|
65
|
-
border: 1px solid var(--color-rule);
|
|
66
|
-
border-radius: var(--radius-sm);
|
|
67
|
-
padding: 0.65rem 0.8rem;
|
|
68
|
-
transition: border-color 0.2s ease;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.gift-card-field input:focus,
|
|
72
|
-
.gift-card-field textarea:focus {
|
|
73
|
-
outline: none;
|
|
74
|
-
border-color: var(--color-ink);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.gift-card-field textarea {
|
|
78
|
-
resize: vertical;
|
|
79
|
-
min-height: 5rem;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
.gift-card-counter {
|
|
83
|
-
position: absolute;
|
|
84
|
-
right: 0;
|
|
85
|
-
bottom: -1.2rem;
|
|
86
|
-
font-family: var(--font-body);
|
|
87
|
-
font-size: 0.6875rem;
|
|
88
|
-
color: var(--color-muted);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.gift-card-error {
|
|
92
|
-
font-family: var(--font-body);
|
|
93
|
-
font-size: 0.875rem;
|
|
94
|
-
color: var(--color-gold-deep, #a04a3c);
|
|
95
|
-
margin: 0;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/* -------------------------------------------------------------------------- */
|
|
99
|
-
/* /gift-cards landing page */
|
|
100
|
-
/* -------------------------------------------------------------------------- */
|
|
101
|
-
|
|
102
|
-
.gift-card-page {
|
|
103
|
-
max-width: 80rem;
|
|
104
|
-
margin: 0 auto;
|
|
105
|
-
padding: 4rem 1.5rem 6rem;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
.gift-card-grid-wrap {
|
|
109
|
-
display: grid;
|
|
110
|
-
grid-template-columns: 1fr;
|
|
111
|
-
gap: 3rem;
|
|
112
|
-
align-items: start;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
@media (min-width: 768px) {
|
|
116
|
-
.gift-card-grid-wrap {
|
|
117
|
-
grid-template-columns: 1fr 1fr;
|
|
118
|
-
gap: 6rem;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.gift-card-hero-image {
|
|
123
|
-
background: var(--color-cream-deep, var(--color-paper, var(--color-cream)));
|
|
124
|
-
border-radius: var(--radius-sm);
|
|
125
|
-
overflow: hidden;
|
|
126
|
-
aspect-ratio: 1 / 1;
|
|
127
|
-
display: flex;
|
|
128
|
-
align-items: center;
|
|
129
|
-
justify-content: center;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
.gift-card-hero-image img {
|
|
133
|
-
width: 100%;
|
|
134
|
-
height: 100%;
|
|
135
|
-
object-fit: cover;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.gift-card-body {
|
|
139
|
-
max-width: 36rem;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
.gift-card-body h1 {
|
|
143
|
-
margin: 1rem 0 1rem;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
.gift-card-lede {
|
|
147
|
-
font-family: var(--font-body);
|
|
148
|
-
font-size: 1.0625rem;
|
|
149
|
-
line-height: 1.7;
|
|
150
|
-
color: var(--color-ink-soft);
|
|
151
|
-
max-width: 48ch;
|
|
152
|
-
margin: 0 0 2rem;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.gift-card-fineprint {
|
|
156
|
-
margin-top: 1.5rem;
|
|
157
|
-
font-family: var(--font-body);
|
|
158
|
-
font-size: 0.8125rem;
|
|
159
|
-
line-height: 1.6;
|
|
160
|
-
color: var(--color-muted);
|
|
161
|
-
max-width: 44ch;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/* -------------------------------------------------------------------------- */
|
|
165
|
-
/* Home teaser */
|
|
166
|
-
/* -------------------------------------------------------------------------- */
|
|
167
|
-
|
|
168
|
-
.gift-card-teaser {
|
|
169
|
-
padding: 6rem 1.5rem;
|
|
170
|
-
background: var(--color-cream-deep, var(--color-paper, var(--color-cream)));
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
.gift-card-teaser-link {
|
|
174
|
-
display: grid;
|
|
175
|
-
grid-template-columns: 1fr;
|
|
176
|
-
gap: 3rem;
|
|
177
|
-
max-width: 80rem;
|
|
178
|
-
margin: 0 auto;
|
|
179
|
-
align-items: center;
|
|
180
|
-
text-decoration: none;
|
|
181
|
-
color: var(--color-ink);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
@media (min-width: 768px) {
|
|
185
|
-
.gift-card-teaser-link {
|
|
186
|
-
grid-template-columns: 1fr 1fr;
|
|
187
|
-
gap: 6rem;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
.gift-card-teaser-image {
|
|
192
|
-
aspect-ratio: 4 / 3;
|
|
193
|
-
overflow: hidden;
|
|
194
|
-
border-radius: var(--radius-sm);
|
|
195
|
-
background: var(--color-cream);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
.gift-card-teaser-image img {
|
|
199
|
-
width: 100%;
|
|
200
|
-
height: 100%;
|
|
201
|
-
object-fit: cover;
|
|
202
|
-
transition: transform 0.6s ease;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
.gift-card-teaser-link:hover .gift-card-teaser-image img {
|
|
206
|
-
transform: scale(1.02);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
.gift-card-teaser-body h2 {
|
|
210
|
-
margin: 1rem 0 1rem;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
.gift-card-teaser-lede {
|
|
214
|
-
font-family: var(--font-body);
|
|
215
|
-
font-size: 1.0625rem;
|
|
216
|
-
line-height: 1.7;
|
|
217
|
-
color: var(--color-ink-soft);
|
|
218
|
-
max-width: 44ch;
|
|
219
|
-
margin: 0 0 1.5rem;
|
|
220
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
import Layout from "../layouts/Layout.astro";
|
|
3
|
-
import GiftCardPurchase from "../components/GiftCardPurchase.tsx";
|
|
4
|
-
import { getGiftCardProduct } from "../utils/gift-cards";
|
|
5
|
-
import { resolveWixImageUrl } from "../utils/wix-image";
|
|
6
|
-
|
|
7
|
-
// The probe returns null if the Wix Gift Card app is uninstalled, revoked,
|
|
8
|
-
// or the dashboard's eGift Card template hasn't been configured. Redirect
|
|
9
|
-
// rather than rendering an empty page — keeps stale links from showing a
|
|
10
|
-
// broken UI.
|
|
11
|
-
const product = await getGiftCardProduct();
|
|
12
|
-
if (!product) return Astro.redirect("/", 302);
|
|
13
|
-
|
|
14
|
-
const heroImage = resolveWixImageUrl(product.image, 800, 800);
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
<Layout
|
|
18
|
-
title={product.name}
|
|
19
|
-
description={product.description}
|
|
20
|
-
>
|
|
21
|
-
<section class="py-16 md:py-24">
|
|
22
|
-
<div class="max-w-wide mx-auto px-8 grid grid-cols-1 md:grid-cols-2 gap-12 md:gap-24 items-center">
|
|
23
|
-
<div class="aspect-square bg-cream rounded-sm overflow-hidden">
|
|
24
|
-
{heroImage && (
|
|
25
|
-
<img
|
|
26
|
-
src={heroImage}
|
|
27
|
-
alt={product.image?.altText || product.name}
|
|
28
|
-
loading="lazy"
|
|
29
|
-
decoding="async"
|
|
30
|
-
width={product.image?.width ?? 800}
|
|
31
|
-
height={product.image?.height ?? 800}
|
|
32
|
-
class="w-full h-full object-cover"
|
|
33
|
-
/>
|
|
34
|
-
)}
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<div class="flex flex-col gap-6">
|
|
38
|
-
<p class="eyebrow">A gift, considered</p>
|
|
39
|
-
<h1 class="font-display text-5xl leading-tight">{product.name}</h1>
|
|
40
|
-
<p class="text-ink-soft leading-relaxed">{product.description}</p>
|
|
41
|
-
|
|
42
|
-
<GiftCardPurchase product={product} client:load />
|
|
43
|
-
|
|
44
|
-
<p class="text-mute text-sm leading-relaxed">
|
|
45
|
-
Sent by email to your recipient with a redeemable code. Redeemed at
|
|
46
|
-
checkout against any product on the site.
|
|
47
|
-
</p>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
</section>
|
|
51
|
-
</Layout>
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
// Wix Gift Card app — eGift Card template fetch.
|
|
2
|
-
//
|
|
3
|
-
// The dashboard's Catalog → Gift Cards screen configures a single eGift Card
|
|
4
|
-
// "product" with preset denominations. That product is queryable via a public
|
|
5
|
-
// REST endpoint (POST /gift-cards/v1/gift-card-products/query). The JS SDK
|
|
6
|
-
// auto-package @wix/auto_sdk_ecom_gift-vouchers only exposes redemption
|
|
7
|
-
// methods (getGiftCard / redeemGiftCard / voidTransaction), so we hit REST
|
|
8
|
-
// directly using @wix/essentials httpClient.fetchWithAuth.
|
|
9
|
-
//
|
|
10
|
-
// The buy flow uses the standard cart: currentCart.addToCurrentCart with a
|
|
11
|
-
// catalogReference whose appId is WIX_GIFT_CARDS_APP_ID below. After payment,
|
|
12
|
-
// Wix's gift-card backend automatically issues a redeemable gift card with
|
|
13
|
-
// source: "ORDER" and emails the recipient — no follow-up API call needed.
|
|
14
|
-
//
|
|
15
|
-
// The appId is observable on installed sites and stable across sites. If Wix
|
|
16
|
-
// ever rotates it, update this constant; both the runtime probe and the buy
|
|
17
|
-
// flow will fail together (and the page hides gracefully — same as "app
|
|
18
|
-
// uninstalled").
|
|
19
|
-
|
|
20
|
-
import { httpClient } from "@wix/essentials";
|
|
21
|
-
|
|
22
|
-
export const WIX_GIFT_CARDS_APP_ID = "d80111c5-a0f4-47a8-b63a-65b54d774a27";
|
|
23
|
-
|
|
24
|
-
export interface GiftCardImage {
|
|
25
|
-
id?: string;
|
|
26
|
-
url?: string;
|
|
27
|
-
height?: number;
|
|
28
|
-
width?: number;
|
|
29
|
-
altText?: string;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface GiftCardPresetVariant {
|
|
33
|
-
id: string;
|
|
34
|
-
price: { amount: string; formattedAmount: string; convertedAmount?: string; formattedConvertedAmount?: string };
|
|
35
|
-
value: { amount: string; formattedAmount: string; convertedAmount?: string; formattedConvertedAmount?: string };
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export interface GiftCardProduct {
|
|
39
|
-
id: string;
|
|
40
|
-
revision?: string;
|
|
41
|
-
name: string;
|
|
42
|
-
description: string;
|
|
43
|
-
image?: GiftCardImage;
|
|
44
|
-
expirationType?: string;
|
|
45
|
-
presetVariants: GiftCardPresetVariant[];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const ENDPOINT = "https://www.wixapis.com/gift-cards/v1/gift-card-products/query";
|
|
49
|
-
|
|
50
|
-
// Module-level memoization. Navigation, the home teaser, and /gift-cards all
|
|
51
|
-
// call getGiftCardProduct() in the same request — coalesce them into one
|
|
52
|
-
// fetch by holding the in-flight promise at module scope.
|
|
53
|
-
let cached: Promise<GiftCardProduct | null> | null = null;
|
|
54
|
-
|
|
55
|
-
export async function getGiftCardProduct(): Promise<GiftCardProduct | null> {
|
|
56
|
-
if (cached) return cached;
|
|
57
|
-
cached = (async () => {
|
|
58
|
-
try {
|
|
59
|
-
const res = await httpClient.fetchWithAuth(ENDPOINT, {
|
|
60
|
-
method: "POST",
|
|
61
|
-
headers: { "Content-Type": "application/json" },
|
|
62
|
-
body: JSON.stringify({ query: { paging: { limit: 1 } } }),
|
|
63
|
-
});
|
|
64
|
-
if (!res.ok) return null;
|
|
65
|
-
const data = await res.json();
|
|
66
|
-
const products = data?.giftCardProducts;
|
|
67
|
-
if (!Array.isArray(products) || products.length === 0) return null;
|
|
68
|
-
return products[0] as GiftCardProduct;
|
|
69
|
-
} catch (err) {
|
|
70
|
-
console.error("[gift-cards] queryGiftCardProducts failed:", err);
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
})();
|
|
74
|
-
return cached;
|
|
75
|
-
}
|
|
@@ -1,288 +0,0 @@
|
|
|
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-*, --container-*, and --radius-* line. The
|
|
14
|
-
required-token set (enforced by compose.mjs) MUST all be present, or
|
|
15
|
-
components render unstyled. Spacing is NOT a token here — it uses
|
|
16
|
-
Tailwind's built-in numeric scale (gap-4, py-24, …); never add a named
|
|
17
|
-
--spacing-* scale, since that namespace also powers the width utilities
|
|
18
|
-
(max-w-*/w-*) and would shadow them. */
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/* Reading-width helper so prose pages center without guessing Tailwind sizes. */
|
|
22
|
-
@utility container-reading {
|
|
23
|
-
max-width: var(--container-prose);
|
|
24
|
-
margin-inline: auto;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/* Shared button primitive — declared with @utility so the variants below can
|
|
28
|
-
@apply it (a plain contract class is NOT @apply-able in Tailwind v4). */
|
|
29
|
-
@utility btn {
|
|
30
|
-
@apply inline-flex items-center justify-center px-6 py-4 rounded-md font-medium;
|
|
31
|
-
transition: background-color 200ms ease, color 200ms ease, border-color 200ms ease;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
@layer base {
|
|
35
|
-
* {
|
|
36
|
-
box-sizing: border-box;
|
|
37
|
-
}
|
|
38
|
-
html {
|
|
39
|
-
-webkit-text-size-adjust: 100%;
|
|
40
|
-
}
|
|
41
|
-
body {
|
|
42
|
-
margin: 0;
|
|
43
|
-
background: var(--color-paper);
|
|
44
|
-
color: var(--color-ink);
|
|
45
|
-
font-family: var(--font-body);
|
|
46
|
-
line-height: 1.6;
|
|
47
|
-
-webkit-font-smoothing: antialiased;
|
|
48
|
-
}
|
|
49
|
-
h1, h2, h3, h4, h5, h6 {
|
|
50
|
-
font-family: var(--font-display);
|
|
51
|
-
line-height: 1.15;
|
|
52
|
-
margin: 0;
|
|
53
|
-
}
|
|
54
|
-
p {
|
|
55
|
-
margin: 0;
|
|
56
|
-
}
|
|
57
|
-
a {
|
|
58
|
-
color: inherit;
|
|
59
|
-
text-decoration: none;
|
|
60
|
-
}
|
|
61
|
-
button {
|
|
62
|
-
font: inherit;
|
|
63
|
-
cursor: pointer;
|
|
64
|
-
}
|
|
65
|
-
input, textarea, select {
|
|
66
|
-
font: inherit;
|
|
67
|
-
}
|
|
68
|
-
img {
|
|
69
|
-
display: block;
|
|
70
|
-
max-width: 100%;
|
|
71
|
-
height: auto;
|
|
72
|
-
}
|
|
73
|
-
ul, ol {
|
|
74
|
-
margin: 0;
|
|
75
|
-
padding: 0;
|
|
76
|
-
list-style: none;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/* ── Button family — used on every page in every vertical ─────────────────── */
|
|
81
|
-
.btn-primary {
|
|
82
|
-
@apply btn;
|
|
83
|
-
background: var(--color-ink);
|
|
84
|
-
color: var(--color-paper);
|
|
85
|
-
}
|
|
86
|
-
.btn-primary:hover:not(:disabled) {
|
|
87
|
-
background: var(--color-accent);
|
|
88
|
-
}
|
|
89
|
-
.btn-primary:disabled {
|
|
90
|
-
opacity: 0.5;
|
|
91
|
-
cursor: not-allowed;
|
|
92
|
-
}
|
|
93
|
-
.btn-secondary {
|
|
94
|
-
@apply btn;
|
|
95
|
-
background: transparent;
|
|
96
|
-
color: var(--color-ink);
|
|
97
|
-
border: 1px solid var(--color-rule);
|
|
98
|
-
}
|
|
99
|
-
.btn-secondary:hover:not(:disabled) {
|
|
100
|
-
border-color: var(--color-accent);
|
|
101
|
-
color: var(--color-accent);
|
|
102
|
-
}
|
|
103
|
-
.btn-secondary:disabled {
|
|
104
|
-
opacity: 0.5;
|
|
105
|
-
cursor: not-allowed;
|
|
106
|
-
}
|
|
107
|
-
.btn-ghost {
|
|
108
|
-
@apply btn;
|
|
109
|
-
background: transparent;
|
|
110
|
-
color: var(--color-ink);
|
|
111
|
-
}
|
|
112
|
-
.btn-ghost:hover:not(:disabled) {
|
|
113
|
-
background: var(--color-paper-warm);
|
|
114
|
-
}
|
|
115
|
-
.btn-ghost:disabled {
|
|
116
|
-
opacity: 0.5;
|
|
117
|
-
cursor: not-allowed;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/* ── Cross-cutting decorative patterns ────────────────────────────────────── */
|
|
121
|
-
[data-decorative-slot] {
|
|
122
|
-
position: relative;
|
|
123
|
-
overflow: hidden;
|
|
124
|
-
}
|
|
125
|
-
[data-decorative-slot] > img {
|
|
126
|
-
width: 100%;
|
|
127
|
-
height: 100%;
|
|
128
|
-
object-fit: cover;
|
|
129
|
-
}
|
|
130
|
-
.editorial-rule {
|
|
131
|
-
border: 0;
|
|
132
|
-
height: 1px;
|
|
133
|
-
background: var(--color-accent);
|
|
134
|
-
opacity: 0.6;
|
|
135
|
-
margin-block: 1.5rem;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/* ── Universal site chrome ────────────────────────────────────────────────── */
|
|
139
|
-
.site-nav {
|
|
140
|
-
position: sticky;
|
|
141
|
-
top: 0;
|
|
142
|
-
z-index: 50;
|
|
143
|
-
background: color-mix(in srgb, var(--color-paper) 88%, transparent);
|
|
144
|
-
backdrop-filter: saturate(1.1) blur(8px);
|
|
145
|
-
border-bottom: 1px solid var(--color-rule);
|
|
146
|
-
}
|
|
147
|
-
.site-footer {
|
|
148
|
-
border-top: 1px solid var(--color-rule);
|
|
149
|
-
background: var(--color-paper-warm);
|
|
150
|
-
color: var(--color-mute);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/* ── View Transitions wiring (paired with Layout.astro <script>) ──────────────
|
|
154
|
-
Disable the default ClientRouter root cross-fade; the progress bar + grid-dim
|
|
155
|
-
carry navigation feedback instead. Do not split into a separate file. */
|
|
156
|
-
::view-transition-old(root),
|
|
157
|
-
::view-transition-new(root) {
|
|
158
|
-
animation: none;
|
|
159
|
-
mix-blend-mode: normal;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
.nav-progress {
|
|
163
|
-
position: fixed;
|
|
164
|
-
top: 0;
|
|
165
|
-
left: 0;
|
|
166
|
-
right: 0;
|
|
167
|
-
height: 2px;
|
|
168
|
-
background: var(--color-accent, currentColor);
|
|
169
|
-
transform: scaleX(0);
|
|
170
|
-
transform-origin: left;
|
|
171
|
-
z-index: 1000;
|
|
172
|
-
pointer-events: none;
|
|
173
|
-
opacity: 0;
|
|
174
|
-
}
|
|
175
|
-
.nav-progress[data-state="loading"] {
|
|
176
|
-
opacity: 1;
|
|
177
|
-
transform: scaleX(0.85);
|
|
178
|
-
transition: transform 1.6s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 120ms ease;
|
|
179
|
-
}
|
|
180
|
-
.nav-progress[data-state="done"] {
|
|
181
|
-
opacity: 0;
|
|
182
|
-
transform: scaleX(1);
|
|
183
|
-
transition: transform 200ms ease, opacity 240ms ease 60ms;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/* Dim the product grid while ClientRouter fetches/swaps for immediate feedback. */
|
|
187
|
-
body[data-navigating="true"] .product-grid {
|
|
188
|
-
opacity: 0.55;
|
|
189
|
-
transition: opacity 140ms ease;
|
|
190
|
-
pointer-events: none;
|
|
191
|
-
}
|
|
192
|
-
.product-grid {
|
|
193
|
-
transition: opacity 200ms ease;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/* ── Navigation submenu + CategoryRail/pagination (stores pack) ───────────────
|
|
197
|
-
These reference declared tokens and stay inert when stores is not loaded (no
|
|
198
|
-
markup uses them), so they ship unconditionally as fixed bulk. */
|
|
199
|
-
.site-nav-item.has-submenu {
|
|
200
|
-
position: relative;
|
|
201
|
-
}
|
|
202
|
-
.site-nav-submenu {
|
|
203
|
-
position: absolute;
|
|
204
|
-
top: 100%;
|
|
205
|
-
left: 0;
|
|
206
|
-
min-width: 12rem;
|
|
207
|
-
display: flex;
|
|
208
|
-
flex-direction: column;
|
|
209
|
-
gap: 0.25rem;
|
|
210
|
-
padding: 0.75rem;
|
|
211
|
-
background: var(--color-paper);
|
|
212
|
-
border: 1px solid var(--color-rule);
|
|
213
|
-
border-radius: var(--radius-md);
|
|
214
|
-
opacity: 0;
|
|
215
|
-
visibility: hidden;
|
|
216
|
-
transform: translateY(4px);
|
|
217
|
-
transition: opacity 160ms ease, transform 160ms ease, visibility 160ms;
|
|
218
|
-
}
|
|
219
|
-
.site-nav-item.has-submenu:hover .site-nav-submenu,
|
|
220
|
-
.site-nav-item.has-submenu:focus-within .site-nav-submenu {
|
|
221
|
-
opacity: 1;
|
|
222
|
-
visibility: visible;
|
|
223
|
-
transform: translateY(0);
|
|
224
|
-
}
|
|
225
|
-
.site-nav-sublink {
|
|
226
|
-
font-size: 0.875rem;
|
|
227
|
-
color: var(--color-ink-soft, var(--color-mute));
|
|
228
|
-
padding-block: 0.25rem;
|
|
229
|
-
}
|
|
230
|
-
.site-nav-sublink:hover,
|
|
231
|
-
.site-nav-sublink[aria-current="page"] {
|
|
232
|
-
color: var(--color-accent);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
.category-rail {
|
|
236
|
-
background: var(--color-paper-warm);
|
|
237
|
-
border-bottom: 1px solid var(--color-rule);
|
|
238
|
-
}
|
|
239
|
-
.category-rail-inner {
|
|
240
|
-
display: flex;
|
|
241
|
-
flex-wrap: wrap;
|
|
242
|
-
gap: 0.75rem;
|
|
243
|
-
padding-block: 1rem;
|
|
244
|
-
}
|
|
245
|
-
.category-pill {
|
|
246
|
-
display: inline-flex;
|
|
247
|
-
align-items: center;
|
|
248
|
-
padding: 0.25rem 1rem;
|
|
249
|
-
border: 1px solid var(--color-rule);
|
|
250
|
-
border-radius: var(--radius-sm);
|
|
251
|
-
font-size: 0.8125rem;
|
|
252
|
-
text-transform: uppercase;
|
|
253
|
-
letter-spacing: 0.06em;
|
|
254
|
-
color: var(--color-ink-soft, var(--color-ink));
|
|
255
|
-
transition: border-color 160ms ease, color 160ms ease, background-color 160ms ease;
|
|
256
|
-
}
|
|
257
|
-
.category-pill:hover {
|
|
258
|
-
border-color: var(--color-accent);
|
|
259
|
-
color: var(--color-accent);
|
|
260
|
-
}
|
|
261
|
-
.category-pill[aria-current="page"] {
|
|
262
|
-
background: var(--color-ink);
|
|
263
|
-
color: var(--color-paper);
|
|
264
|
-
border-color: var(--color-ink);
|
|
265
|
-
}
|
|
266
|
-
.pagination {
|
|
267
|
-
margin-block: 2rem;
|
|
268
|
-
}
|
|
269
|
-
.pagination-inner {
|
|
270
|
-
display: flex;
|
|
271
|
-
justify-content: space-between;
|
|
272
|
-
gap: 1rem;
|
|
273
|
-
}
|
|
274
|
-
.pagination-link {
|
|
275
|
-
color: var(--color-ink);
|
|
276
|
-
}
|
|
277
|
-
.pagination-link:hover {
|
|
278
|
-
color: var(--color-accent);
|
|
279
|
-
}
|
|
280
|
-
.pagination-link.is-disabled {
|
|
281
|
-
opacity: 0.4;
|
|
282
|
-
pointer-events: none;
|
|
283
|
-
}
|
|
284
|
-
.breadcrumbs {
|
|
285
|
-
font-size: 0.8125rem;
|
|
286
|
-
color: var(--color-mute);
|
|
287
|
-
margin-bottom: 0.75rem;
|
|
288
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
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-6 py-24 grid grid-cols-1 md:grid-cols-2 gap-16 items-center">
|
|
21
|
-
<div class="flex flex-col gap-6">
|
|
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-6 py-24 grid grid-cols-1 md:grid-cols-2 gap-16 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-4 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>
|