astro-component-kit 0.4.0 → 0.5.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 +139 -27
- package/bin/cli.js +67 -0
- package/bin/installer.js +179 -0
- package/package.json +35 -5
- package/src/components/index.ts +2 -0
- package/src/components/lib/Galaxy3D.astro +249 -137
- package/src/components/lib/app/AppSidebar.astro +249 -0
- package/src/components/lib/app/AppTopbar.astro +284 -0
- package/src/components/lib/app/ArrivalsBoard.astro +176 -0
- package/src/components/lib/app/AuthCard.astro +213 -0
- package/src/components/lib/app/DataTable.astro +346 -0
- package/src/components/lib/app/GuestProfileCard.astro +133 -0
- package/src/components/lib/app/HousekeepingBoard.astro +189 -0
- package/src/components/lib/app/PageHeader.astro +157 -0
- package/src/components/lib/app/PlanUsageCard.astro +112 -0
- package/src/components/lib/app/RoomRack.astro +207 -0
- package/src/components/lib/app/SettingsSection.astro +96 -0
- package/src/components/lib/app/SwitchRow.astro +71 -0
- package/src/components/lib/app/TeamMembers.astro +190 -0
- package/src/components/lib/app/app-icons.ts +52 -0
- package/src/components/lib/app/index.ts +19 -0
- package/src/components/lib/charts/AreaChart.astro +4 -4
- package/src/components/lib/charts/BarChart.astro +3 -3
- package/src/components/lib/charts/ChartFrame.astro +10 -10
- package/src/components/lib/charts/DonutChart.astro +2 -2
- package/src/components/lib/charts/DumbbellChart.astro +1 -1
- package/src/components/lib/charts/ForecastLineChart.astro +1 -1
- package/src/components/lib/charts/GaugeChart.astro +1 -1
- package/src/components/lib/charts/HeatmapChart.astro +1 -1
- package/src/components/lib/charts/HorizontalBarChart.astro +2 -2
- package/src/components/lib/charts/KpiStatTile.astro +4 -4
- package/src/components/lib/charts/LinearProgressGauge.astro +4 -4
- package/src/components/lib/charts/MetricDeltaTable.astro +3 -3
- package/src/components/lib/charts/RadarMetricChart.astro +4 -4
- package/src/components/lib/charts/RadialBarChart.astro +1 -1
- package/src/components/lib/charts/RetentionCohortTable.astro +2 -2
- package/src/components/lib/charts/TreemapChart.astro +1 -1
- package/src/components/lib/ecommerce/CartDrawer.astro +483 -0
- package/src/components/lib/ecommerce/CartPageList.astro +290 -0
- package/src/components/lib/ecommerce/CartToast.astro +276 -0
- package/src/components/lib/ecommerce/CategoryTiles.astro +143 -0
- package/src/components/lib/ecommerce/CheckoutForm.astro +423 -0
- package/src/components/lib/ecommerce/CountdownBanner.astro +230 -0
- package/src/components/lib/ecommerce/FilterBar.astro +278 -0
- package/src/components/lib/ecommerce/FilterSidebar.astro +405 -0
- package/src/components/lib/ecommerce/LiveActivityToast.astro +213 -0
- package/src/components/lib/ecommerce/OrderSummary.astro +295 -0
- package/src/components/lib/ecommerce/ProductBuyBox.astro +247 -0
- package/src/components/lib/ecommerce/ProductCardMinimal.astro +229 -0
- package/src/components/lib/ecommerce/ProductGallery.astro +145 -0
- package/src/components/lib/ecommerce/ProductGrid.astro +118 -0
- package/src/components/lib/ecommerce/ProductMedia.astro +113 -0
- package/src/components/lib/ecommerce/ProductRating.astro +78 -0
- package/src/components/lib/ecommerce/ProductToolbar.astro +93 -0
- package/src/components/lib/ecommerce/PromoBar.astro +145 -0
- package/src/components/lib/ecommerce/StockIndicator.astro +127 -0
- package/src/components/lib/ecommerce/StoreHeader.astro +446 -0
- package/src/components/lib/ecommerce/StoreHero.astro +260 -0
- package/src/components/lib/ecommerce/StoreProductCard.astro +307 -0
- package/src/components/lib/ecommerce/TrustBadges.astro +101 -0
- package/src/components/lib/ecommerce/VariantPicker.astro +145 -0
- package/src/components/lib/ecommerce/cart-store.ts +151 -0
- package/src/components/lib/ecommerce/catalog-filter.ts +62 -0
- package/src/components/lib/ecommerce/index.ts +34 -0
- package/src/components/lib/ecommerce/product-icons.ts +28 -0
- package/src/components/lib/ecommerce/types.ts +70 -0
- package/src/components/lib/forms/AnimatedInput.astro +4 -2
- package/src/components/lib/forms/CustomRadioGroup.astro +3 -1
- package/src/components/lib/index.ts +2 -0
- package/src/components/lib/layout/BentoGrid3.astro +6 -4
- package/src/components/lib/layout/CenterFixedBox.astro +2 -2
- package/src/components/lib/layout/CenteredContainer.astro +4 -2
- package/src/components/lib/layout/ClusterHorizontal.astro +2 -2
- package/src/components/lib/layout/FeatureHero.astro +4 -2
- package/src/components/lib/layout/FooterCenteredMinimal.astro +4 -2
- package/src/components/lib/layout/FullBleedSection.astro +2 -2
- package/src/components/lib/layout/GalleryGrid4.astro +2 -2
- package/src/components/lib/layout/HolyGrailGrid.astro +11 -9
- package/src/components/lib/layout/LandingSectionSplit.astro +5 -3
- package/src/components/lib/layout/MasonryGrid.astro +2 -2
- package/src/components/lib/layout/MinimalFooterGrid.astro +1 -1
- package/src/components/lib/layout/ScrollSnapSection.astro +1 -1
- package/src/components/lib/layout/SidebarLayoutWrapper.astro +4 -2
- package/src/components/lib/layout/SplitScreenLayout.astro +3 -3
- package/src/components/lib/layout/StepLayoutVertical.astro +1 -1
- package/src/components/lib/layout/StickySidebarWrapper.astro +4 -2
- package/src/components/lib/sections/AgencyContactBrief.astro +194 -0
- package/src/components/lib/sections/AgencyFooterCta.astro +94 -0
- package/src/components/lib/sections/AgencyHeader.astro +161 -0
- package/src/components/lib/sections/AgencyHeroKinetic.astro +172 -0
- package/src/components/lib/sections/AgencyServicesList.astro +113 -0
- package/src/components/lib/sections/AgencyTeamGrid.astro +111 -0
- package/src/components/lib/sections/AgencyWorkGrid.astro +147 -0
- package/src/components/lib/sections/BlogGridSection.astro +9 -7
- package/src/components/lib/sections/ButtonsShowcase.astro +20 -18
- package/src/components/lib/sections/CardsShowcase.astro +28 -26
- package/src/components/lib/sections/CareersOpenings.astro +10 -8
- package/src/components/lib/sections/ChangelogSection.astro +20 -7
- package/src/components/lib/sections/ContactGlassForm.astro +10 -8
- package/src/components/lib/sections/ContactSplitMap.astro +11 -9
- package/src/components/lib/sections/CtaAppDownload.astro +13 -11
- package/src/components/lib/sections/CtaGlowBanner.astro +12 -10
- package/src/components/lib/sections/CtaNewsletterSection.astro +13 -11
- package/src/components/lib/sections/CtaSplitImage.astro +13 -11
- package/src/components/lib/sections/DataShowcase.astro +23 -21
- package/src/components/lib/sections/FaqAccordionSection.astro +8 -8
- package/src/components/lib/sections/FaqTwoColumn.astro +9 -7
- package/src/components/lib/sections/FeatureAlternatingRows.astro +10 -8
- package/src/components/lib/sections/FeatureBentoGrid.astro +13 -11
- package/src/components/lib/sections/FeatureIconGrid.astro +6 -6
- package/src/components/lib/sections/FeatureTabsShowcase.astro +13 -11
- package/src/components/lib/sections/FeatureTimelineFlow.astro +8 -6
- package/src/components/lib/sections/FeedbackShowcase.astro +15 -13
- package/src/components/lib/sections/FooterMegaSection.astro +13 -11
- package/src/components/lib/sections/FormsShowcase.astro +22 -20
- package/src/components/lib/sections/HeroDashboardPreview.astro +11 -9
- package/src/components/lib/sections/HeroGlass.astro +22 -20
- package/src/components/lib/sections/HeroGradient.astro +15 -13
- package/src/components/lib/sections/HeroMinimalCentered.astro +10 -10
- package/src/components/lib/sections/HeroShowcaseSplit.astro +18 -16
- package/src/components/lib/sections/HeroSplit.astro +13 -11
- package/src/components/lib/sections/HeroTerminal.astro +14 -12
- package/src/components/lib/sections/HeroWaitlist.astro +10 -8
- package/src/components/lib/sections/HowItWorksSteps.astro +12 -10
- package/src/components/lib/sections/IntegrationsGrid.astro +7 -7
- package/src/components/lib/sections/LayoutShowcase.astro +21 -19
- package/src/components/lib/sections/LogoCloudSection.astro +4 -4
- package/src/components/lib/sections/LogoWallGrid.astro +6 -4
- package/src/components/lib/sections/NavigationShowcase.astro +15 -13
- package/src/components/lib/sections/OverlaysShowcase.astro +21 -19
- package/src/components/lib/sections/PricingComparisonMatrix.astro +15 -13
- package/src/components/lib/sections/PricingSinglePlan.astro +13 -11
- package/src/components/lib/sections/PricingTierCards.astro +11 -9
- package/src/components/lib/sections/PricingToggleCards.astro +13 -13
- package/src/components/lib/sections/ShopCategoryHero.astro +103 -0
- package/src/components/lib/sections/ShopCollectionMosaic.astro +131 -0
- package/src/components/lib/sections/ShopFooterWordmark.astro +100 -0
- package/src/components/lib/sections/ShopHeaderEditorial.astro +396 -0
- package/src/components/lib/sections/ShopHeroEditorial.astro +151 -0
- package/src/components/lib/sections/ShopLookbook.astro +250 -0
- package/src/components/lib/sections/ShopNewsletterEditorial.astro +128 -0
- package/src/components/lib/sections/ShopProductRail.astro +150 -0
- package/src/components/lib/sections/ShopReviewsEditorial.astro +133 -0
- package/src/components/lib/sections/ShopValuesMarquee.astro +91 -0
- package/src/components/lib/sections/StatsCounterBand.astro +9 -7
- package/src/components/lib/sections/StatsDashboardSection.astro +4 -2
- package/src/components/lib/sections/StatsMetricShowcase.astro +9 -7
- package/src/components/lib/sections/TeamGridSection.astro +12 -10
- package/src/components/lib/sections/TestimonialCarousel.astro +10 -8
- package/src/components/lib/sections/TestimonialFeatured.astro +7 -5
- package/src/components/lib/sections/TestimonialGridSection.astro +7 -7
- package/src/components/lib/sections/TestimonialWallGlass.astro +11 -9
- package/src/components/lib/sections/TypographyShowcase.astro +10 -8
- package/src/components/lib/sections/index.ts +10 -0
- package/src/components/lib/templates/ecommerce/StoreCategoryPage.astro +160 -0
- package/src/components/lib/templates/ecommerce/StoreCheckoutPage.astro +98 -0
- package/src/components/lib/templates/ecommerce/StoreHomePage.astro +191 -0
- package/src/components/lib/templates/ecommerce/StoreLayout.astro +169 -0
- package/src/components/lib/templates/ecommerce/StoreProductPage.astro +165 -0
- package/src/components/lib/templates/ecommerce/data.ts +187 -0
- package/src/components/lib/templates/ecommerce/index.ts +14 -0
- package/src/components/lib/templates/ecommerce-editorial/EditorialBagPage.astro +52 -0
- package/src/components/lib/templates/ecommerce-editorial/EditorialCheckoutPage.astro +123 -0
- package/src/components/lib/templates/ecommerce-editorial/EditorialHomePage.astro +102 -0
- package/src/components/lib/templates/ecommerce-editorial/EditorialLayout.astro +216 -0
- package/src/components/lib/templates/ecommerce-editorial/EditorialProductPage.astro +205 -0
- package/src/components/lib/templates/ecommerce-editorial/EditorialShopPage.astro +112 -0
- package/src/components/lib/templates/ecommerce-editorial/data.ts +125 -0
- package/src/components/lib/templates/ecommerce-editorial/index.ts +16 -0
- package/src/components/lib/templates/saas-hotel/AppLayout.astro +83 -0
- package/src/components/lib/templates/saas-hotel/DashboardPage.astro +66 -0
- package/src/components/lib/templates/saas-hotel/GuestsPage.astro +65 -0
- package/src/components/lib/templates/saas-hotel/LandingPage.astro +213 -0
- package/src/components/lib/templates/saas-hotel/ReportsPage.astro +63 -0
- package/src/components/lib/templates/saas-hotel/ReservationsPage.astro +49 -0
- package/src/components/lib/templates/saas-hotel/RoomsPage.astro +48 -0
- package/src/components/lib/templates/saas-hotel/SettingsPage.astro +115 -0
- package/src/components/lib/templates/saas-hotel/SignInPage.astro +50 -0
- package/src/components/lib/templates/saas-hotel/data.ts +229 -0
- package/src/components/lib/templates/saas-hotel/index.ts +19 -0
- package/src/components/lib/templates/saas-hotel/lobby-theme.css +90 -0
- package/src/data/registry/app.ts +93 -0
- package/src/data/registry/buttons.ts +3279 -0
- package/src/data/registry/cards.ts +1753 -0
- package/src/data/registry/charts-svg.ts +557 -0
- package/src/data/registry/charts.ts +500 -0
- package/src/data/registry/data.ts +986 -0
- package/src/data/registry/ecommerce.ts +269 -0
- package/src/data/registry/feedback.ts +1824 -0
- package/src/data/registry/forms.ts +2513 -0
- package/src/data/registry/index.ts +64 -0
- package/src/data/registry/layout.ts +206 -0
- package/src/data/registry/navigation.ts +936 -0
- package/src/data/registry/overlays.ts +1133 -0
- package/src/data/registry/sections-extra.ts +397 -0
- package/src/data/registry/sections.ts +361 -0
- package/src/data/registry/sources.ts +41 -0
- package/src/data/registry/templates.ts +414 -0
- package/src/data/registry/types.ts +30 -0
- package/src/data/registry/typography.ts +777 -0
- package/src/mcp/http-server.ts +324 -0
- package/src/mcp/index.ts +67 -0
- package/src/mcp/installer.ts +178 -0
- package/src/mcp/registry-adapter.ts +278 -0
- package/src/mcp/stdio-server.ts +11 -0
- package/src/mcp/tools.ts +247 -0
- package/src/mcp/types.ts +53 -0
- package/src/styles/global.css +95 -0
|
@@ -8,6 +8,7 @@ interface Props {
|
|
|
8
8
|
const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astro.props;
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
<div class="cq-overlays-showcase-cq">
|
|
11
12
|
<section class="overlays-showcase">
|
|
12
13
|
<div class="container">
|
|
13
14
|
<div class="showcase-header">
|
|
@@ -77,8 +78,9 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
77
78
|
</div>
|
|
78
79
|
</div>
|
|
79
80
|
</section>
|
|
80
|
-
|
|
81
|
+
</div>
|
|
81
82
|
<style>
|
|
83
|
+
.cq-overlays-showcase-cq { container-type: inline-size; }
|
|
82
84
|
.overlays-showcase {
|
|
83
85
|
padding: var(--sp-16) 0;
|
|
84
86
|
position: relative;
|
|
@@ -95,8 +97,8 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
95
97
|
text-transform: uppercase;
|
|
96
98
|
letter-spacing: 0.1em;
|
|
97
99
|
color: var(--c-primary-light);
|
|
98
|
-
background:
|
|
99
|
-
border: 1px solid
|
|
100
|
+
background: color-mix(in srgb, var(--c-primary, #b8860b) 10%, transparent);
|
|
101
|
+
border: 1px solid color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
|
|
100
102
|
border-radius: var(--r-full);
|
|
101
103
|
margin-bottom: var(--sp-4);
|
|
102
104
|
}
|
|
@@ -118,7 +120,7 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
118
120
|
padding: var(--sp-12);
|
|
119
121
|
background: rgba(10, 10, 10, 0.6);
|
|
120
122
|
backdrop-filter: blur(20px);
|
|
121
|
-
border: 1px solid
|
|
123
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
|
|
122
124
|
border-radius: var(--r-xl);
|
|
123
125
|
margin-bottom: var(--sp-6);
|
|
124
126
|
box-shadow: 0 20px 60px rgba(0,0,0,0.4);
|
|
@@ -160,9 +162,9 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
160
162
|
padding: var(--sp-6);
|
|
161
163
|
background: rgba(30, 30, 30, 0.9);
|
|
162
164
|
backdrop-filter: blur(16px);
|
|
163
|
-
border: 1px solid
|
|
165
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
|
|
164
166
|
border-radius: var(--r-lg);
|
|
165
|
-
box-shadow: 0 24px 80px rgba(0,0,0,0.5), 0 0 0 1px
|
|
167
|
+
box-shadow: 0 24px 80px rgba(0,0,0,0.5), 0 0 0 1px rgb(var(--ink-rgb, 255 255 255) / 0.05);
|
|
166
168
|
transform: scale(1) translateY(0);
|
|
167
169
|
}
|
|
168
170
|
.overlay-card__header {
|
|
@@ -191,7 +193,7 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
191
193
|
transition: all 0.2s ease;
|
|
192
194
|
}
|
|
193
195
|
.overlay-close:hover {
|
|
194
|
-
background:
|
|
196
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.1);
|
|
195
197
|
color: var(--c-text-1);
|
|
196
198
|
}
|
|
197
199
|
.overlay-card__body {
|
|
@@ -226,7 +228,7 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
226
228
|
width: 200px;
|
|
227
229
|
background: rgba(25, 25, 25, 0.95);
|
|
228
230
|
backdrop-filter: blur(18px);
|
|
229
|
-
border: 1px solid
|
|
231
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
|
|
230
232
|
border-radius: var(--r-lg);
|
|
231
233
|
box-shadow: -12px 0 40px rgba(0,0,0,0.4);
|
|
232
234
|
transform: translateX(0);
|
|
@@ -278,15 +280,15 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
278
280
|
font-size: 0.8rem;
|
|
279
281
|
font-weight: 600;
|
|
280
282
|
color: var(--c-text-2);
|
|
281
|
-
background:
|
|
282
|
-
border: 1px solid
|
|
283
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
|
|
284
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
|
|
283
285
|
border-radius: var(--r-md);
|
|
284
286
|
cursor: pointer;
|
|
285
287
|
transition: all 0.2s ease;
|
|
286
288
|
}
|
|
287
289
|
.popover-target:hover {
|
|
288
290
|
color: var(--c-text-1);
|
|
289
|
-
border-color:
|
|
291
|
+
border-color: color-mix(in srgb, var(--c-primary, #b8860b) 30%, transparent);
|
|
290
292
|
}
|
|
291
293
|
.popover-content {
|
|
292
294
|
position: absolute;
|
|
@@ -297,7 +299,7 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
297
299
|
padding: var(--sp-3) var(--sp-4);
|
|
298
300
|
background: rgba(40, 40, 40, 0.95);
|
|
299
301
|
backdrop-filter: blur(14px);
|
|
300
|
-
border: 1px solid
|
|
302
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
|
|
301
303
|
border-radius: var(--r-md);
|
|
302
304
|
box-shadow: 0 12px 32px rgba(0,0,0,0.4);
|
|
303
305
|
}
|
|
@@ -309,8 +311,8 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
309
311
|
width: 10px;
|
|
310
312
|
height: 10px;
|
|
311
313
|
background: rgba(40, 40, 40, 0.95);
|
|
312
|
-
border-right: 1px solid
|
|
313
|
-
border-bottom: 1px solid
|
|
314
|
+
border-right: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
|
|
315
|
+
border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
|
|
314
316
|
transform: translateX(-50%) rotate(45deg);
|
|
315
317
|
}
|
|
316
318
|
.popover-text {
|
|
@@ -334,12 +336,12 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
334
336
|
}
|
|
335
337
|
.btn--primary {
|
|
336
338
|
background: linear-gradient(135deg, var(--c-primary-light), var(--c-primary));
|
|
337
|
-
color: #0a0a0a;
|
|
338
|
-
box-shadow: 0 4px 20px
|
|
339
|
+
color: var(--c-on-primary, #0a0a0a);
|
|
340
|
+
box-shadow: 0 4px 20px color-mix(in srgb, var(--c-primary, #b8860b) 30%, transparent);
|
|
339
341
|
}
|
|
340
342
|
.btn--primary:hover {
|
|
341
343
|
transform: translateY(-2px);
|
|
342
|
-
box-shadow: 0 8px 30px
|
|
344
|
+
box-shadow: 0 8px 30px color-mix(in srgb, var(--c-primary, #b8860b) 40%, transparent);
|
|
343
345
|
}
|
|
344
346
|
.btn--ghost {
|
|
345
347
|
background: transparent;
|
|
@@ -354,7 +356,7 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
354
356
|
.usage-code {
|
|
355
357
|
text-align: center;
|
|
356
358
|
padding: var(--sp-4);
|
|
357
|
-
background:
|
|
359
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
|
|
358
360
|
border-radius: var(--r-md);
|
|
359
361
|
}
|
|
360
362
|
.usage-code code {
|
|
@@ -363,7 +365,7 @@ const { title = "Overlays", subtitle = "Modals, drawers, and popovers." } = Astr
|
|
|
363
365
|
color: var(--c-primary-light);
|
|
364
366
|
}
|
|
365
367
|
|
|
366
|
-
@
|
|
368
|
+
@container (max-width: 640px) {
|
|
367
369
|
.preview-stage { padding: var(--sp-8) var(--sp-4); }
|
|
368
370
|
.overlay-card { width: 240px; padding: var(--sp-4); }
|
|
369
371
|
.drawer-panel { width: 160px; right: var(--sp-2); }
|
|
@@ -21,6 +21,7 @@ const {
|
|
|
21
21
|
} = Astro.props;
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
+
<div class="cq-pricing-comparison-matrix-cq">
|
|
24
25
|
<section class={`pricing-section ${className}`} aria-labelledby="pricing-title">
|
|
25
26
|
<div class="pricing-bg" aria-hidden="true">
|
|
26
27
|
<div class="pricing-glow"></div>
|
|
@@ -129,7 +130,7 @@ const {
|
|
|
129
130
|
</div>
|
|
130
131
|
</div>
|
|
131
132
|
</section>
|
|
132
|
-
|
|
133
|
+
</div>
|
|
133
134
|
<script>
|
|
134
135
|
const toggleBtn = document.getElementById('billingToggleBtn');
|
|
135
136
|
const priceVals = document.querySelectorAll('.price-val');
|
|
@@ -149,6 +150,7 @@ const {
|
|
|
149
150
|
</script>
|
|
150
151
|
|
|
151
152
|
<style>
|
|
153
|
+
.cq-pricing-comparison-matrix-cq { container-type: inline-size; }
|
|
152
154
|
.pricing-section {
|
|
153
155
|
position: relative;
|
|
154
156
|
padding: var(--sp-20, 5rem) var(--sp-6, 1.5rem);
|
|
@@ -170,7 +172,7 @@ const {
|
|
|
170
172
|
transform: translateX(-50%);
|
|
171
173
|
width: 600px;
|
|
172
174
|
height: 500px;
|
|
173
|
-
background: radial-gradient(circle,
|
|
175
|
+
background: radial-gradient(circle, color-mix(in srgb, var(--c-primary, #b8860b) 12%, transparent), transparent 70%);
|
|
174
176
|
filter: blur(100px);
|
|
175
177
|
}
|
|
176
178
|
|
|
@@ -195,7 +197,7 @@ const {
|
|
|
195
197
|
font-weight: 700;
|
|
196
198
|
letter-spacing: 0.06em;
|
|
197
199
|
text-transform: uppercase;
|
|
198
|
-
background:
|
|
200
|
+
background: color-mix(in srgb, var(--c-primary, #b8860b) 12%, transparent);
|
|
199
201
|
color: #eab308;
|
|
200
202
|
border: 1px solid rgba(234, 179, 8, 0.25);
|
|
201
203
|
margin-bottom: var(--sp-4, 1rem);
|
|
@@ -224,7 +226,7 @@ const {
|
|
|
224
226
|
gap: 0.75rem;
|
|
225
227
|
padding: 0.4rem 0.8rem;
|
|
226
228
|
background: rgba(15, 23, 42, 0.8);
|
|
227
|
-
border: 1px solid
|
|
229
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
|
|
228
230
|
border-radius: 9999px;
|
|
229
231
|
}
|
|
230
232
|
|
|
@@ -248,7 +250,7 @@ const {
|
|
|
248
250
|
width: 44px;
|
|
249
251
|
height: 24px;
|
|
250
252
|
border-radius: 9999px;
|
|
251
|
-
background:
|
|
253
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.15);
|
|
252
254
|
border: none;
|
|
253
255
|
position: relative;
|
|
254
256
|
cursor: pointer;
|
|
@@ -286,7 +288,7 @@ const {
|
|
|
286
288
|
background: rgba(15, 23, 42, 0.6);
|
|
287
289
|
backdrop-filter: blur(20px);
|
|
288
290
|
-webkit-backdrop-filter: blur(20px);
|
|
289
|
-
border: 1px solid
|
|
291
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
|
|
290
292
|
border-radius: var(--r-xl, 20px);
|
|
291
293
|
padding: 2.25rem 2rem;
|
|
292
294
|
display: flex;
|
|
@@ -297,7 +299,7 @@ const {
|
|
|
297
299
|
|
|
298
300
|
.plan-card:hover {
|
|
299
301
|
transform: translateY(-4px);
|
|
300
|
-
border-color:
|
|
302
|
+
border-color: rgb(var(--ink-rgb, 255 255 255) / 0.18);
|
|
301
303
|
}
|
|
302
304
|
|
|
303
305
|
.plan-card--popular {
|
|
@@ -393,19 +395,19 @@ const {
|
|
|
393
395
|
}
|
|
394
396
|
|
|
395
397
|
.plan-btn--ghost {
|
|
396
|
-
background:
|
|
398
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.05);
|
|
397
399
|
color: #fff;
|
|
398
|
-
border: 1px solid
|
|
400
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.12);
|
|
399
401
|
}
|
|
400
402
|
|
|
401
403
|
.plan-btn--ghost:hover {
|
|
402
|
-
background:
|
|
403
|
-
border-color:
|
|
404
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.1);
|
|
405
|
+
border-color: rgb(var(--ink-rgb, 255 255 255) / 0.25);
|
|
404
406
|
}
|
|
405
407
|
|
|
406
408
|
.plan-divider {
|
|
407
409
|
height: 1px;
|
|
408
|
-
background:
|
|
410
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.08);
|
|
409
411
|
margin: 1.5rem 0;
|
|
410
412
|
}
|
|
411
413
|
|
|
@@ -454,7 +456,7 @@ const {
|
|
|
454
456
|
color: #10b981;
|
|
455
457
|
}
|
|
456
458
|
|
|
457
|
-
@
|
|
459
|
+
@container (max-width: 960px) {
|
|
458
460
|
.pricing-cards {
|
|
459
461
|
grid-template-columns: 1fr;
|
|
460
462
|
}
|
|
@@ -58,6 +58,7 @@ const {
|
|
|
58
58
|
const id = `psp-${Math.random().toString(36).slice(2, 8)}`;
|
|
59
59
|
---
|
|
60
60
|
|
|
61
|
+
<div class="cq-pricing-single-plan-cq">
|
|
61
62
|
<section class={`psp psp--${variant} psp--${size} ${className}`} aria-labelledby={id}>
|
|
62
63
|
<div class="psp__inner">
|
|
63
64
|
<header class="psp__head">
|
|
@@ -89,8 +90,9 @@ const id = `psp-${Math.random().toString(36).slice(2, 8)}`;
|
|
|
89
90
|
</div>
|
|
90
91
|
</div>
|
|
91
92
|
</section>
|
|
92
|
-
|
|
93
|
+
</div>
|
|
93
94
|
<style>
|
|
95
|
+
.cq-pricing-single-plan-cq { container-type: inline-size; }
|
|
94
96
|
.psp {
|
|
95
97
|
--psp-py: 5.5rem;
|
|
96
98
|
padding: var(--psp-py) var(--sp-6, 1.5rem);
|
|
@@ -108,19 +110,19 @@ const id = `psp-${Math.random().toString(36).slice(2, 8)}`;
|
|
|
108
110
|
grid-template-columns: 1fr 1.3fr;
|
|
109
111
|
border-radius: var(--r-xl, 28px);
|
|
110
112
|
overflow: hidden;
|
|
111
|
-
border: 1px solid var(--c-border,
|
|
112
|
-
background:
|
|
113
|
+
border: 1px solid var(--c-border, rgb(var(--ink-rgb, 255 255 255) / 0.08));
|
|
114
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
|
|
113
115
|
}
|
|
114
|
-
.psp--glow .psp__card { border-color:
|
|
115
|
-
.psp--glass .psp__card { backdrop-filter: blur(16px); background: linear-gradient(160deg,
|
|
116
|
+
.psp--glow .psp__card { border-color: color-mix(in srgb, var(--c-primary-light, #d4a017) 35%, transparent); box-shadow: 0 0 0 1px color-mix(in srgb, var(--c-primary-light, #d4a017) 8%, transparent), 0 40px 100px -40px color-mix(in srgb, var(--c-primary-light, #d4a017) 40%, transparent); }
|
|
117
|
+
.psp--glass .psp__card { backdrop-filter: blur(16px); background: linear-gradient(160deg, rgb(var(--ink-rgb, 255 255 255) / 0.06), rgb(var(--ink-rgb, 255 255 255) / 0.015)); }
|
|
116
118
|
.psp--minimal .psp__card { background: transparent; }
|
|
117
119
|
.psp__price-col {
|
|
118
120
|
display: flex;
|
|
119
121
|
flex-direction: column;
|
|
120
122
|
justify-content: center;
|
|
121
123
|
padding: clamp(2rem, 5vw, 3rem);
|
|
122
|
-
background: radial-gradient(circle at 30% 0%, var(--c-primary-glow,
|
|
123
|
-
border-right: 1px solid
|
|
124
|
+
background: radial-gradient(circle at 30% 0%, var(--c-primary-glow, color-mix(in srgb, var(--c-primary, #b8860b) 18%, transparent)), transparent 70%), rgb(var(--ink-rgb, 255 255 255) / 0.02);
|
|
125
|
+
border-right: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
|
|
124
126
|
}
|
|
125
127
|
.psp__plan { margin: 0 0 1rem; font-size: 0.875rem; font-weight: 650; letter-spacing: 0.06em; text-transform: uppercase; color: var(--c-primary-light, #d4a017); }
|
|
126
128
|
.psp__price { display: flex; align-items: baseline; gap: 0.75rem; margin: 0; }
|
|
@@ -134,12 +136,12 @@ const id = `psp-${Math.random().toString(36).slice(2, 8)}`;
|
|
|
134
136
|
min-height: 52px;
|
|
135
137
|
border-radius: var(--r-md, 12px);
|
|
136
138
|
background: var(--c-primary-light, #d4a017);
|
|
137
|
-
color: #0a0a0a;
|
|
139
|
+
color: var(--c-on-primary, #0a0a0a);
|
|
138
140
|
font-weight: 700;
|
|
139
141
|
text-decoration: none;
|
|
140
142
|
transition: background 0.2s ease, transform 0.2s ease;
|
|
141
143
|
}
|
|
142
|
-
.psp__cta:hover { background: var(--c-accent, #fef3c7); color: #0a0a0a; transform: translateY(-1px); }
|
|
144
|
+
.psp__cta:hover { background: var(--c-accent, #fef3c7); color: var(--c-on-primary, #0a0a0a); transform: translateY(-1px); }
|
|
143
145
|
.psp__cta:focus-visible { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 3px; }
|
|
144
146
|
.psp__guarantee { display: flex; align-items: flex-start; gap: 0.5rem; margin: 1.25rem 0 0; font-size: 0.8125rem; line-height: 1.5; color: var(--c-text-2, #a3a3a3); }
|
|
145
147
|
.psp__guarantee svg { color: var(--chart-pos, #34c38f); flex-shrink: 0; margin-top: 1px; }
|
|
@@ -149,9 +151,9 @@ const id = `psp-${Math.random().toString(36).slice(2, 8)}`;
|
|
|
149
151
|
.psp__features li { display: flex; align-items: flex-start; gap: 0.6rem; font-size: 0.9375rem; line-height: 1.4; color: var(--c-text-1, #fff); }
|
|
150
152
|
.psp__features svg { color: var(--c-primary-light, #d4a017); flex-shrink: 0; }
|
|
151
153
|
.psp__sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
|
|
152
|
-
@
|
|
154
|
+
@container (max-width: 760px) {
|
|
153
155
|
.psp__card { grid-template-columns: 1fr; }
|
|
154
|
-
.psp__price-col { border-right: 0; border-bottom: 1px solid
|
|
156
|
+
.psp__price-col { border-right: 0; border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06); }
|
|
155
157
|
.psp__features { grid-template-columns: 1fr; }
|
|
156
158
|
}
|
|
157
159
|
</style>
|
|
@@ -21,6 +21,7 @@ const {
|
|
|
21
21
|
} = Astro.props;
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
+
<div class="cq-pricing-tier-cards-cq">
|
|
24
25
|
<section class={`tier-pricing-section ${className}`} aria-labelledby="tier-pricing-title">
|
|
25
26
|
<div class="container">
|
|
26
27
|
<div class="section-header">
|
|
@@ -79,8 +80,9 @@ const {
|
|
|
79
80
|
</div>
|
|
80
81
|
</div>
|
|
81
82
|
</section>
|
|
82
|
-
|
|
83
|
+
</div>
|
|
83
84
|
<style>
|
|
85
|
+
.cq-pricing-tier-cards-cq { container-type: inline-size; }
|
|
84
86
|
.tier-pricing-section {
|
|
85
87
|
padding: var(--sp-20, 5rem) var(--sp-6, 1.5rem);
|
|
86
88
|
background: var(--c-bg-primary, #030712);
|
|
@@ -105,7 +107,7 @@ const {
|
|
|
105
107
|
font-weight: 700;
|
|
106
108
|
letter-spacing: 0.06em;
|
|
107
109
|
text-transform: uppercase;
|
|
108
|
-
background:
|
|
110
|
+
background: color-mix(in srgb, var(--c-primary, #b8860b) 12%, transparent);
|
|
109
111
|
color: #eab308;
|
|
110
112
|
border: 1px solid rgba(234, 179, 8, 0.25);
|
|
111
113
|
margin-bottom: var(--sp-4, 1rem);
|
|
@@ -136,7 +138,7 @@ const {
|
|
|
136
138
|
|
|
137
139
|
.tier-card {
|
|
138
140
|
background: rgba(15, 23, 42, 0.55);
|
|
139
|
-
border: 1px solid
|
|
141
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
|
|
140
142
|
border-radius: 20px;
|
|
141
143
|
padding: 2.5rem 2rem;
|
|
142
144
|
display: flex;
|
|
@@ -146,7 +148,7 @@ const {
|
|
|
146
148
|
|
|
147
149
|
.tier-card:hover {
|
|
148
150
|
transform: translateY(-4px);
|
|
149
|
-
border-color:
|
|
151
|
+
border-color: rgb(var(--ink-rgb, 255 255 255) / 0.2);
|
|
150
152
|
}
|
|
151
153
|
|
|
152
154
|
.tier-card--highlight {
|
|
@@ -163,7 +165,7 @@ const {
|
|
|
163
165
|
font-size: 0.72rem;
|
|
164
166
|
font-weight: 700;
|
|
165
167
|
text-transform: uppercase;
|
|
166
|
-
background:
|
|
168
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.08);
|
|
167
169
|
color: #cbd5e1;
|
|
168
170
|
margin-bottom: 1rem;
|
|
169
171
|
}
|
|
@@ -225,13 +227,13 @@ const {
|
|
|
225
227
|
}
|
|
226
228
|
|
|
227
229
|
.tier-btn--ghost {
|
|
228
|
-
background:
|
|
229
|
-
border: 1px solid
|
|
230
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.05);
|
|
231
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.12);
|
|
230
232
|
color: #fff;
|
|
231
233
|
}
|
|
232
234
|
|
|
233
235
|
.tier-btn--ghost:hover {
|
|
234
|
-
background:
|
|
236
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.12);
|
|
235
237
|
}
|
|
236
238
|
|
|
237
239
|
.tier-list {
|
|
@@ -248,7 +250,7 @@ const {
|
|
|
248
250
|
color: #cbd5e1;
|
|
249
251
|
}
|
|
250
252
|
|
|
251
|
-
@
|
|
253
|
+
@container (max-width: 960px) {
|
|
252
254
|
.tier-grid {
|
|
253
255
|
grid-template-columns: 1fr;
|
|
254
256
|
}
|
|
@@ -99,7 +99,7 @@ const id = `ptc-${Math.random().toString(36).slice(2, 8)}`;
|
|
|
99
99
|
.ptc {
|
|
100
100
|
--ptc-py: 5.5rem;
|
|
101
101
|
padding: var(--ptc-py) var(--sp-6, 1.5rem);
|
|
102
|
-
background: radial-gradient(ellipse 60% 40% at 50% 0%, var(--c-primary-glow,
|
|
102
|
+
background: radial-gradient(ellipse 60% 40% at 50% 0%, var(--c-primary-glow, color-mix(in srgb, var(--c-primary, #b8860b) 10%, transparent)), transparent 70%), var(--c-bg, #050505);
|
|
103
103
|
}
|
|
104
104
|
.ptc--sm { --ptc-py: 3.5rem; }
|
|
105
105
|
.ptc--lg { --ptc-py: 7.5rem; }
|
|
@@ -112,9 +112,9 @@ const id = `ptc-${Math.random().toString(36).slice(2, 8)}`;
|
|
|
112
112
|
position: relative;
|
|
113
113
|
width: 52px;
|
|
114
114
|
height: 30px;
|
|
115
|
-
border: 1px solid
|
|
115
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.15);
|
|
116
116
|
border-radius: 999px;
|
|
117
|
-
background:
|
|
117
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.08);
|
|
118
118
|
cursor: pointer;
|
|
119
119
|
transition: background 0.25s ease;
|
|
120
120
|
}
|
|
@@ -135,11 +135,11 @@ const id = `ptc-${Math.random().toString(36).slice(2, 8)}`;
|
|
|
135
135
|
padding: 2rem;
|
|
136
136
|
border-radius: var(--r-xl, 24px);
|
|
137
137
|
}
|
|
138
|
-
.ptc--glass .ptc__card { background: linear-gradient(160deg,
|
|
139
|
-
.ptc--solid .ptc__card { background: var(--c-bg-2, #111); border: 1px solid
|
|
140
|
-
.ptc--outline .ptc__card { border: 1px solid
|
|
141
|
-
.ptc__card--featured { border-color:
|
|
142
|
-
.ptc__ribbon { position: absolute; top: -12px; left: 2rem; padding: 0.25rem 0.75rem; border-radius: 999px; background: var(--c-primary-light, #d4a017); color: #0a0a0a; font-size: 0.75rem; font-weight: 700; }
|
|
138
|
+
.ptc--glass .ptc__card { background: linear-gradient(160deg, rgb(var(--ink-rgb, 255 255 255) / 0.05), rgb(var(--ink-rgb, 255 255 255) / 0.015)); border: 1px solid var(--c-border, rgb(var(--ink-rgb, 255 255 255) / 0.07)); backdrop-filter: blur(12px); }
|
|
139
|
+
.ptc--solid .ptc__card { background: var(--c-bg-2, #111); border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06); }
|
|
140
|
+
.ptc--outline .ptc__card { border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.12); }
|
|
141
|
+
.ptc__card--featured { border-color: color-mix(in srgb, var(--c-primary-light, #d4a017) 55%, transparent) !important; box-shadow: 0 30px 80px -30px color-mix(in srgb, var(--c-primary-light, #d4a017) 35%, transparent); }
|
|
142
|
+
.ptc__ribbon { position: absolute; top: -12px; left: 2rem; padding: 0.25rem 0.75rem; border-radius: 999px; background: var(--c-primary-light, #d4a017); color: var(--c-on-primary, #0a0a0a); font-size: 0.75rem; font-weight: 700; }
|
|
143
143
|
.ptc__name { margin: 0 0 0.35rem; font-size: 1.125rem; font-weight: 650; color: var(--c-text-1, #fff); }
|
|
144
144
|
.ptc__desc { margin: 0 0 1.5rem; font-size: 0.9rem; color: var(--c-text-2, #a3a3a3); }
|
|
145
145
|
.ptc__price { display: flex; align-items: baseline; gap: 0.4rem; margin: 0 0 1.5rem; }
|
|
@@ -153,17 +153,17 @@ const id = `ptc-${Math.random().toString(36).slice(2, 8)}`;
|
|
|
153
153
|
justify-content: center;
|
|
154
154
|
min-height: 48px;
|
|
155
155
|
border-radius: var(--r-md, 12px);
|
|
156
|
-
border: 1px solid
|
|
156
|
+
border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.14);
|
|
157
157
|
color: var(--c-text-1, #fff);
|
|
158
158
|
font-weight: 650;
|
|
159
159
|
text-decoration: none;
|
|
160
160
|
transition: background 0.2s ease, border-color 0.2s ease;
|
|
161
161
|
}
|
|
162
|
-
.ptc__cta:hover { border-color:
|
|
163
|
-
.ptc__card--featured .ptc__cta { background: var(--c-primary-light, #d4a017); color: #0a0a0a; border-color: transparent; }
|
|
164
|
-
.ptc__card--featured .ptc__cta:hover { background: var(--c-accent, #fef3c7); color: #0a0a0a; }
|
|
162
|
+
.ptc__cta:hover { border-color: rgb(var(--ink-rgb, 255 255 255) / 0.3); color: var(--c-text-1, #fff); }
|
|
163
|
+
.ptc__card--featured .ptc__cta { background: var(--c-primary-light, #d4a017); color: var(--c-on-primary, #0a0a0a); border-color: transparent; }
|
|
164
|
+
.ptc__card--featured .ptc__cta:hover { background: var(--c-accent, #fef3c7); color: var(--c-on-primary, #0a0a0a); }
|
|
165
165
|
.ptc__cta:focus-visible { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 3px; }
|
|
166
|
-
.ptc__features { list-style: none; margin: 1.75rem 0 0; padding: 1.5rem 0 0; border-top: 1px solid
|
|
166
|
+
.ptc__features { list-style: none; margin: 1.75rem 0 0; padding: 1.5rem 0 0; border-top: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.07); display: grid; gap: 0.7rem; }
|
|
167
167
|
.ptc__features li { display: flex; align-items: center; gap: 0.6rem; font-size: 0.9rem; color: var(--c-text-1, #fff); }
|
|
168
168
|
.ptc__features svg { color: var(--c-primary-light, #d4a017); flex-shrink: 0; }
|
|
169
169
|
.ptc__live { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* ShopCategoryHero — Catalogue page header: breadcrumb, oversized category title with item
|
|
4
|
+
* count, intro text, sub-category links and a strip of three visuals.
|
|
5
|
+
*
|
|
6
|
+
* @param {Array<{label: string, href?: string}>} breadcrumb - Trail; the last item is the current page.
|
|
7
|
+
* @param {string} title - Category name. Default 'Clothing'.
|
|
8
|
+
* @param {number} count - Number of products (superscript). Optional.
|
|
9
|
+
* @param {string} text - Intro paragraph.
|
|
10
|
+
* @param {Array<{label: string, href: string, active?: boolean}>} links - Sub-category links.
|
|
11
|
+
* @param {Array<{icon?: string, hue?: number, image?: string}>} visuals - Up to three images (empty hides the strip).
|
|
12
|
+
* @param {string} variant - Layout (split|centered). Default 'split'.
|
|
13
|
+
* @param {string} size - Vertical rhythm (sm|md|lg). Default 'md'.
|
|
14
|
+
* @param {string} className - Extra class.
|
|
15
|
+
*
|
|
16
|
+
* Accessibility: breadcrumb nav with aria-current; one h1; visuals are decorative.
|
|
17
|
+
*/
|
|
18
|
+
import ProductMedia from '../ecommerce/ProductMedia.astro';
|
|
19
|
+
|
|
20
|
+
interface Props {
|
|
21
|
+
breadcrumb?: Array<{ label: string; href?: string }>;
|
|
22
|
+
title?: string;
|
|
23
|
+
count?: number;
|
|
24
|
+
text?: string;
|
|
25
|
+
links?: Array<{ label: string; href: string; active?: boolean }>;
|
|
26
|
+
visuals?: Array<{ icon?: string; hue?: number; image?: string }>;
|
|
27
|
+
variant?: 'split' | 'centered';
|
|
28
|
+
size?: 'sm' | 'md' | 'lg';
|
|
29
|
+
className?: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const {
|
|
33
|
+
breadcrumb = [{ label: 'Home', href: '#' }, { label: 'Shop', href: '#' }, { label: 'Clothing' }],
|
|
34
|
+
title = 'Clothing',
|
|
35
|
+
count = 24,
|
|
36
|
+
text = 'Overshirts, knitwear and outerwear cut from linen, merino and organic cotton. Designed to be layered, washed and worn for a decade.',
|
|
37
|
+
links = [
|
|
38
|
+
{ label: 'All', href: '#', active: true },
|
|
39
|
+
{ label: 'Overshirts', href: '#' },
|
|
40
|
+
{ label: 'Knitwear', href: '#' },
|
|
41
|
+
{ label: 'Outerwear', href: '#' },
|
|
42
|
+
],
|
|
43
|
+
visuals = [{ icon: 'shirt', hue: 30 }, { icon: 'jacket', hue: 22 }, { icon: 'sneaker', hue: 12 }],
|
|
44
|
+
variant = 'split',
|
|
45
|
+
size = 'md',
|
|
46
|
+
className = '',
|
|
47
|
+
} = Astro.props;
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
<header class:list={['sch', `sch--${variant}`, `sch--${size}`, className]}>
|
|
51
|
+
<nav class="sch__crumbs" aria-label="Breadcrumb">
|
|
52
|
+
<ol>
|
|
53
|
+
{breadcrumb.map((b, i) => (
|
|
54
|
+
<li>{b.href && i < breadcrumb.length - 1 ? <a href={b.href}>{b.label}</a> : <span aria-current="page">{b.label}</span>}</li>
|
|
55
|
+
))}
|
|
56
|
+
</ol>
|
|
57
|
+
</nav>
|
|
58
|
+
<div class="sch__main">
|
|
59
|
+
<h1 class="sch__title">{title}{count !== undefined && <sup>{count}</sup>}</h1>
|
|
60
|
+
<div class="sch__side">
|
|
61
|
+
{text && <p class="sch__text">{text}</p>}
|
|
62
|
+
{links.length > 0 && (
|
|
63
|
+
<ul class="sch__links">
|
|
64
|
+
{links.map((l) => <li><a href={l.href} aria-current={l.active ? 'page' : undefined}>{l.label}</a></li>)}
|
|
65
|
+
</ul>
|
|
66
|
+
)}
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
{visuals.length > 0 && (
|
|
70
|
+
<div class="sch__strip" aria-hidden="true">
|
|
71
|
+
{visuals.slice(0, 3).map((v) => <ProductMedia image={v.image} icon={v.icon} hue={v.hue} ratio="16 / 9" variant="soft" size="md" />)}
|
|
72
|
+
</div>
|
|
73
|
+
)}
|
|
74
|
+
</header>
|
|
75
|
+
|
|
76
|
+
<style>
|
|
77
|
+
.sch { container-type: inline-size; --py: clamp(1.5rem, 4vw, 3rem); padding-block: var(--py); color: var(--c-text-1, #fff); }
|
|
78
|
+
.sch--sm { --py: 1rem; }
|
|
79
|
+
.sch--lg { --py: clamp(2.5rem, 6vw, 5rem); }
|
|
80
|
+
.sch__crumbs ol { display: flex; flex-wrap: wrap; gap: 0.5rem; margin: 0 0 var(--sp-6, 1.5rem); padding: 0; list-style: none; font-size: 0.75rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--c-text-2, #a3a3a3); }
|
|
81
|
+
.sch__crumbs li + li::before { content: '/'; margin-right: 0.5rem; opacity: 0.5; }
|
|
82
|
+
.sch__crumbs a { color: inherit; text-decoration: none; }
|
|
83
|
+
.sch__crumbs a:hover { color: var(--c-text-1, #fff); }
|
|
84
|
+
.sch__crumbs [aria-current] { color: var(--c-text-1, #fff); }
|
|
85
|
+
.sch__main { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 0.7fr); gap: clamp(1rem, 4vw, 4rem); align-items: end; }
|
|
86
|
+
.sch--centered .sch__main { grid-template-columns: 1fr; text-align: center; justify-items: center; }
|
|
87
|
+
.sch__title { margin: 0; font-family: var(--font-display, Georgia, 'Times New Roman', serif); font-size: clamp(3.5rem, 12vw, 10rem); font-weight: 400; letter-spacing: -0.055em; line-height: 0.85; }
|
|
88
|
+
.sch__title sup { margin-left: 0.15em; font-family: var(--font-sans, system-ui); font-size: 0.14em; font-weight: 600; letter-spacing: 0; vertical-align: super; color: var(--shop-accent, var(--c-primary-light, #d4a017)); }
|
|
89
|
+
.sch__text { margin: 0 0 var(--sp-4, 1rem); max-width: 30rem; line-height: 1.65; color: var(--c-text-2, #a3a3a3); }
|
|
90
|
+
.sch__links { display: flex; flex-wrap: wrap; gap: 0 var(--sp-5, 1.25rem); margin: 0; padding: 0; list-style: none; }
|
|
91
|
+
.sch--centered .sch__links { justify-content: center; }
|
|
92
|
+
.sch__links a { display: inline-flex; align-items: center; min-height: 40px; font-size: 0.9rem; color: var(--c-text-2, #a3a3a3); text-decoration: none; border-bottom: 1px solid transparent; }
|
|
93
|
+
.sch__links a:hover, .sch__links a[aria-current] { color: var(--c-text-1, #fff); border-bottom-color: currentColor; }
|
|
94
|
+
.sch a:focus-visible { outline: 2px solid var(--shop-accent, var(--c-primary-light, #d4a017)); outline-offset: 3px; }
|
|
95
|
+
.sch__strip { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: var(--sp-3, 0.75rem); margin-top: clamp(1.5rem, 4vw, 3rem); }
|
|
96
|
+
.sch__strip :global(.p-media) { height: 100%; border-radius: var(--r-sm, 2px); }
|
|
97
|
+
|
|
98
|
+
@container (max-width: 760px) {
|
|
99
|
+
.sch__main { grid-template-columns: 1fr; }
|
|
100
|
+
.sch__strip { grid-template-columns: 1fr 1fr; }
|
|
101
|
+
.sch__strip > :global(:first-child) { grid-column: 1 / -1; }
|
|
102
|
+
}
|
|
103
|
+
</style>
|