astro-component-kit 0.4.0 → 0.4.1

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 (180) hide show
  1. package/README.md +105 -27
  2. package/package.json +16 -3
  3. package/src/components/index.ts +2 -0
  4. package/src/components/lib/Galaxy3D.astro +249 -137
  5. package/src/components/lib/app/AppSidebar.astro +249 -0
  6. package/src/components/lib/app/AppTopbar.astro +284 -0
  7. package/src/components/lib/app/ArrivalsBoard.astro +176 -0
  8. package/src/components/lib/app/AuthCard.astro +213 -0
  9. package/src/components/lib/app/DataTable.astro +346 -0
  10. package/src/components/lib/app/GuestProfileCard.astro +133 -0
  11. package/src/components/lib/app/HousekeepingBoard.astro +189 -0
  12. package/src/components/lib/app/PageHeader.astro +157 -0
  13. package/src/components/lib/app/PlanUsageCard.astro +112 -0
  14. package/src/components/lib/app/RoomRack.astro +207 -0
  15. package/src/components/lib/app/SettingsSection.astro +96 -0
  16. package/src/components/lib/app/SwitchRow.astro +71 -0
  17. package/src/components/lib/app/TeamMembers.astro +190 -0
  18. package/src/components/lib/app/app-icons.ts +52 -0
  19. package/src/components/lib/app/index.ts +19 -0
  20. package/src/components/lib/charts/AreaChart.astro +4 -4
  21. package/src/components/lib/charts/BarChart.astro +3 -3
  22. package/src/components/lib/charts/ChartFrame.astro +10 -10
  23. package/src/components/lib/charts/DonutChart.astro +2 -2
  24. package/src/components/lib/charts/DumbbellChart.astro +1 -1
  25. package/src/components/lib/charts/ForecastLineChart.astro +1 -1
  26. package/src/components/lib/charts/GaugeChart.astro +1 -1
  27. package/src/components/lib/charts/HeatmapChart.astro +1 -1
  28. package/src/components/lib/charts/HorizontalBarChart.astro +2 -2
  29. package/src/components/lib/charts/KpiStatTile.astro +4 -4
  30. package/src/components/lib/charts/LinearProgressGauge.astro +4 -4
  31. package/src/components/lib/charts/MetricDeltaTable.astro +3 -3
  32. package/src/components/lib/charts/RadarMetricChart.astro +4 -4
  33. package/src/components/lib/charts/RadialBarChart.astro +1 -1
  34. package/src/components/lib/charts/RetentionCohortTable.astro +2 -2
  35. package/src/components/lib/charts/TreemapChart.astro +1 -1
  36. package/src/components/lib/ecommerce/CartDrawer.astro +483 -0
  37. package/src/components/lib/ecommerce/CartPageList.astro +290 -0
  38. package/src/components/lib/ecommerce/CartToast.astro +276 -0
  39. package/src/components/lib/ecommerce/CategoryTiles.astro +143 -0
  40. package/src/components/lib/ecommerce/CheckoutForm.astro +423 -0
  41. package/src/components/lib/ecommerce/CountdownBanner.astro +230 -0
  42. package/src/components/lib/ecommerce/FilterBar.astro +278 -0
  43. package/src/components/lib/ecommerce/FilterSidebar.astro +405 -0
  44. package/src/components/lib/ecommerce/LiveActivityToast.astro +213 -0
  45. package/src/components/lib/ecommerce/OrderSummary.astro +295 -0
  46. package/src/components/lib/ecommerce/ProductBuyBox.astro +247 -0
  47. package/src/components/lib/ecommerce/ProductCardMinimal.astro +229 -0
  48. package/src/components/lib/ecommerce/ProductGallery.astro +145 -0
  49. package/src/components/lib/ecommerce/ProductGrid.astro +118 -0
  50. package/src/components/lib/ecommerce/ProductMedia.astro +113 -0
  51. package/src/components/lib/ecommerce/ProductRating.astro +78 -0
  52. package/src/components/lib/ecommerce/ProductToolbar.astro +93 -0
  53. package/src/components/lib/ecommerce/PromoBar.astro +145 -0
  54. package/src/components/lib/ecommerce/StockIndicator.astro +127 -0
  55. package/src/components/lib/ecommerce/StoreHeader.astro +446 -0
  56. package/src/components/lib/ecommerce/StoreHero.astro +260 -0
  57. package/src/components/lib/ecommerce/StoreProductCard.astro +307 -0
  58. package/src/components/lib/ecommerce/TrustBadges.astro +101 -0
  59. package/src/components/lib/ecommerce/VariantPicker.astro +145 -0
  60. package/src/components/lib/ecommerce/cart-store.ts +151 -0
  61. package/src/components/lib/ecommerce/catalog-filter.ts +62 -0
  62. package/src/components/lib/ecommerce/index.ts +34 -0
  63. package/src/components/lib/ecommerce/product-icons.ts +28 -0
  64. package/src/components/lib/ecommerce/types.ts +70 -0
  65. package/src/components/lib/forms/AnimatedInput.astro +4 -2
  66. package/src/components/lib/forms/CustomRadioGroup.astro +3 -1
  67. package/src/components/lib/index.ts +2 -0
  68. package/src/components/lib/layout/BentoGrid3.astro +6 -4
  69. package/src/components/lib/layout/CenterFixedBox.astro +2 -2
  70. package/src/components/lib/layout/CenteredContainer.astro +4 -2
  71. package/src/components/lib/layout/ClusterHorizontal.astro +2 -2
  72. package/src/components/lib/layout/FeatureHero.astro +4 -2
  73. package/src/components/lib/layout/FooterCenteredMinimal.astro +4 -2
  74. package/src/components/lib/layout/FullBleedSection.astro +2 -2
  75. package/src/components/lib/layout/GalleryGrid4.astro +2 -2
  76. package/src/components/lib/layout/HolyGrailGrid.astro +11 -9
  77. package/src/components/lib/layout/LandingSectionSplit.astro +5 -3
  78. package/src/components/lib/layout/MasonryGrid.astro +2 -2
  79. package/src/components/lib/layout/MinimalFooterGrid.astro +1 -1
  80. package/src/components/lib/layout/ScrollSnapSection.astro +1 -1
  81. package/src/components/lib/layout/SidebarLayoutWrapper.astro +4 -2
  82. package/src/components/lib/layout/SplitScreenLayout.astro +3 -3
  83. package/src/components/lib/layout/StepLayoutVertical.astro +1 -1
  84. package/src/components/lib/layout/StickySidebarWrapper.astro +4 -2
  85. package/src/components/lib/sections/AgencyContactBrief.astro +194 -0
  86. package/src/components/lib/sections/AgencyFooterCta.astro +94 -0
  87. package/src/components/lib/sections/AgencyHeader.astro +161 -0
  88. package/src/components/lib/sections/AgencyHeroKinetic.astro +172 -0
  89. package/src/components/lib/sections/AgencyServicesList.astro +113 -0
  90. package/src/components/lib/sections/AgencyTeamGrid.astro +111 -0
  91. package/src/components/lib/sections/AgencyWorkGrid.astro +147 -0
  92. package/src/components/lib/sections/BlogGridSection.astro +9 -7
  93. package/src/components/lib/sections/ButtonsShowcase.astro +20 -18
  94. package/src/components/lib/sections/CardsShowcase.astro +28 -26
  95. package/src/components/lib/sections/CareersOpenings.astro +10 -8
  96. package/src/components/lib/sections/ChangelogSection.astro +14 -7
  97. package/src/components/lib/sections/ContactGlassForm.astro +10 -8
  98. package/src/components/lib/sections/ContactSplitMap.astro +11 -9
  99. package/src/components/lib/sections/CtaAppDownload.astro +13 -11
  100. package/src/components/lib/sections/CtaGlowBanner.astro +12 -10
  101. package/src/components/lib/sections/CtaNewsletterSection.astro +13 -11
  102. package/src/components/lib/sections/CtaSplitImage.astro +13 -11
  103. package/src/components/lib/sections/DataShowcase.astro +23 -21
  104. package/src/components/lib/sections/FaqAccordionSection.astro +8 -8
  105. package/src/components/lib/sections/FaqTwoColumn.astro +9 -7
  106. package/src/components/lib/sections/FeatureAlternatingRows.astro +10 -8
  107. package/src/components/lib/sections/FeatureBentoGrid.astro +13 -11
  108. package/src/components/lib/sections/FeatureIconGrid.astro +6 -6
  109. package/src/components/lib/sections/FeatureTabsShowcase.astro +13 -11
  110. package/src/components/lib/sections/FeatureTimelineFlow.astro +8 -6
  111. package/src/components/lib/sections/FeedbackShowcase.astro +15 -13
  112. package/src/components/lib/sections/FooterMegaSection.astro +13 -11
  113. package/src/components/lib/sections/FormsShowcase.astro +22 -20
  114. package/src/components/lib/sections/HeroDashboardPreview.astro +11 -9
  115. package/src/components/lib/sections/HeroGlass.astro +22 -20
  116. package/src/components/lib/sections/HeroGradient.astro +15 -13
  117. package/src/components/lib/sections/HeroMinimalCentered.astro +10 -10
  118. package/src/components/lib/sections/HeroShowcaseSplit.astro +18 -16
  119. package/src/components/lib/sections/HeroSplit.astro +13 -11
  120. package/src/components/lib/sections/HeroTerminal.astro +14 -12
  121. package/src/components/lib/sections/HeroWaitlist.astro +10 -8
  122. package/src/components/lib/sections/HowItWorksSteps.astro +12 -10
  123. package/src/components/lib/sections/IntegrationsGrid.astro +7 -7
  124. package/src/components/lib/sections/LayoutShowcase.astro +21 -19
  125. package/src/components/lib/sections/LogoCloudSection.astro +4 -4
  126. package/src/components/lib/sections/LogoWallGrid.astro +6 -4
  127. package/src/components/lib/sections/NavigationShowcase.astro +15 -13
  128. package/src/components/lib/sections/OverlaysShowcase.astro +21 -19
  129. package/src/components/lib/sections/PricingComparisonMatrix.astro +15 -13
  130. package/src/components/lib/sections/PricingSinglePlan.astro +13 -11
  131. package/src/components/lib/sections/PricingTierCards.astro +11 -9
  132. package/src/components/lib/sections/PricingToggleCards.astro +13 -13
  133. package/src/components/lib/sections/ShopCategoryHero.astro +103 -0
  134. package/src/components/lib/sections/ShopCollectionMosaic.astro +131 -0
  135. package/src/components/lib/sections/ShopFooterWordmark.astro +100 -0
  136. package/src/components/lib/sections/ShopHeaderEditorial.astro +396 -0
  137. package/src/components/lib/sections/ShopHeroEditorial.astro +151 -0
  138. package/src/components/lib/sections/ShopLookbook.astro +250 -0
  139. package/src/components/lib/sections/ShopNewsletterEditorial.astro +128 -0
  140. package/src/components/lib/sections/ShopProductRail.astro +150 -0
  141. package/src/components/lib/sections/ShopReviewsEditorial.astro +133 -0
  142. package/src/components/lib/sections/ShopValuesMarquee.astro +91 -0
  143. package/src/components/lib/sections/StatsCounterBand.astro +9 -7
  144. package/src/components/lib/sections/StatsDashboardSection.astro +4 -2
  145. package/src/components/lib/sections/StatsMetricShowcase.astro +9 -7
  146. package/src/components/lib/sections/TeamGridSection.astro +12 -10
  147. package/src/components/lib/sections/TestimonialCarousel.astro +10 -8
  148. package/src/components/lib/sections/TestimonialFeatured.astro +7 -5
  149. package/src/components/lib/sections/TestimonialGridSection.astro +7 -7
  150. package/src/components/lib/sections/TestimonialWallGlass.astro +11 -9
  151. package/src/components/lib/sections/TypographyShowcase.astro +10 -8
  152. package/src/components/lib/sections/index.ts +10 -0
  153. package/src/components/lib/templates/ecommerce/StoreCategoryPage.astro +160 -0
  154. package/src/components/lib/templates/ecommerce/StoreCheckoutPage.astro +98 -0
  155. package/src/components/lib/templates/ecommerce/StoreHomePage.astro +191 -0
  156. package/src/components/lib/templates/ecommerce/StoreLayout.astro +169 -0
  157. package/src/components/lib/templates/ecommerce/StoreProductPage.astro +165 -0
  158. package/src/components/lib/templates/ecommerce/data.ts +187 -0
  159. package/src/components/lib/templates/ecommerce/index.ts +14 -0
  160. package/src/components/lib/templates/ecommerce-editorial/EditorialBagPage.astro +52 -0
  161. package/src/components/lib/templates/ecommerce-editorial/EditorialCheckoutPage.astro +123 -0
  162. package/src/components/lib/templates/ecommerce-editorial/EditorialHomePage.astro +102 -0
  163. package/src/components/lib/templates/ecommerce-editorial/EditorialLayout.astro +216 -0
  164. package/src/components/lib/templates/ecommerce-editorial/EditorialProductPage.astro +205 -0
  165. package/src/components/lib/templates/ecommerce-editorial/EditorialShopPage.astro +112 -0
  166. package/src/components/lib/templates/ecommerce-editorial/data.ts +125 -0
  167. package/src/components/lib/templates/ecommerce-editorial/index.ts +16 -0
  168. package/src/components/lib/templates/saas-hotel/AppLayout.astro +83 -0
  169. package/src/components/lib/templates/saas-hotel/DashboardPage.astro +66 -0
  170. package/src/components/lib/templates/saas-hotel/GuestsPage.astro +65 -0
  171. package/src/components/lib/templates/saas-hotel/LandingPage.astro +213 -0
  172. package/src/components/lib/templates/saas-hotel/ReportsPage.astro +63 -0
  173. package/src/components/lib/templates/saas-hotel/ReservationsPage.astro +49 -0
  174. package/src/components/lib/templates/saas-hotel/RoomsPage.astro +48 -0
  175. package/src/components/lib/templates/saas-hotel/SettingsPage.astro +115 -0
  176. package/src/components/lib/templates/saas-hotel/SignInPage.astro +50 -0
  177. package/src/components/lib/templates/saas-hotel/data.ts +229 -0
  178. package/src/components/lib/templates/saas-hotel/index.ts +19 -0
  179. package/src/components/lib/templates/saas-hotel/lobby-theme.css +90 -0
  180. 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: rgba(184,134,11,0.1);
99
- border: 1px solid rgba(184,134,11,0.25);
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 rgba(255,255,255,0.08);
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 rgba(255,255,255,0.1);
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 rgba(255,255,255,0.05);
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: rgba(255,255,255,0.1);
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 rgba(255,255,255,0.08);
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: rgba(255,255,255,0.04);
282
- border: 1px solid rgba(255,255,255,0.1);
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: rgba(184,134,11,0.3);
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 rgba(255,255,255,0.1);
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 rgba(255,255,255,0.1);
313
- border-bottom: 1px solid rgba(255,255,255,0.1);
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 rgba(184,134,11,0.3);
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 rgba(184,134,11,0.4);
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: rgba(255,255,255,0.02);
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
- @media (max-width: 640px) {
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, rgba(184, 134, 11, 0.12), transparent 70%);
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: rgba(184, 134, 11, 0.12);
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 rgba(255, 255, 255, 0.1);
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: rgba(255, 255, 255, 0.15);
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 rgba(255, 255, 255, 0.08);
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: rgba(255, 255, 255, 0.18);
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: rgba(255, 255, 255, 0.05);
398
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.05);
397
399
  color: #fff;
398
- border: 1px solid rgba(255, 255, 255, 0.12);
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: rgba(255, 255, 255, 0.1);
403
- border-color: rgba(255, 255, 255, 0.25);
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: rgba(255, 255, 255, 0.08);
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
- @media (max-width: 960px) {
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, rgba(255, 255, 255, 0.08));
112
- background: rgba(255, 255, 255, 0.02);
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: rgba(212, 160, 23, 0.35); box-shadow: 0 0 0 1px rgba(212, 160, 23, 0.08), 0 40px 100px -40px rgba(212, 160, 23, 0.4); }
115
- .psp--glass .psp__card { backdrop-filter: blur(16px); background: linear-gradient(160deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.015)); }
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, rgba(184, 134, 11, 0.18)), transparent 70%), rgba(255, 255, 255, 0.02);
123
- border-right: 1px solid rgba(255, 255, 255, 0.06);
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
- @media (max-width: 760px) {
154
+ @container (max-width: 760px) {
153
155
  .psp__card { grid-template-columns: 1fr; }
154
- .psp__price-col { border-right: 0; border-bottom: 1px solid rgba(255, 255, 255, 0.06); }
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: rgba(184, 134, 11, 0.12);
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 rgba(255, 255, 255, 0.08);
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: rgba(255, 255, 255, 0.2);
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: rgba(255, 255, 255, 0.08);
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: rgba(255, 255, 255, 0.05);
229
- border: 1px solid rgba(255, 255, 255, 0.12);
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: rgba(255, 255, 255, 0.12);
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
- @media (max-width: 960px) {
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, rgba(184, 134, 11, 0.1)), transparent 70%), var(--c-bg, #050505);
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 rgba(255, 255, 255, 0.15);
115
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.15);
116
116
  border-radius: 999px;
117
- background: rgba(255, 255, 255, 0.08);
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, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.015)); border: 1px solid var(--c-border, rgba(255, 255, 255, 0.07)); backdrop-filter: blur(12px); }
139
- .ptc--solid .ptc__card { background: var(--c-bg-2, #111); border: 1px solid rgba(255, 255, 255, 0.06); }
140
- .ptc--outline .ptc__card { border: 1px solid rgba(255, 255, 255, 0.12); }
141
- .ptc__card--featured { border-color: rgba(212, 160, 23, 0.55) !important; box-shadow: 0 30px 80px -30px rgba(212, 160, 23, 0.35); }
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 rgba(255, 255, 255, 0.14);
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: rgba(255, 255, 255, 0.3); color: var(--c-text-1, #fff); }
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 rgba(255, 255, 255, 0.07); display: grid; gap: 0.7rem; }
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>