astro-component-kit 0.3.1 → 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 (249) hide show
  1. package/README.md +133 -36
  2. package/package.json +17 -4
  3. package/src/components/index.ts +18 -202
  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/buttons/NeonBorderButton.astro +162 -0
  21. package/src/components/lib/buttons/RippleButton.astro +199 -0
  22. package/src/components/lib/buttons/SlideRevealButton.astro +159 -0
  23. package/src/components/lib/buttons/index.ts +4 -0
  24. package/src/components/lib/cards/GithubRepoCard.astro +176 -0
  25. package/src/components/lib/cards/PricingCompareMiniCard.astro +196 -0
  26. package/src/components/lib/cards/StatsTrendCard.astro +149 -0
  27. package/src/components/lib/cards/index.ts +3 -0
  28. package/src/components/lib/charts/ActivityRings.astro +105 -0
  29. package/src/components/lib/charts/AreaChart.astro +4 -4
  30. package/src/components/lib/charts/BarChart.astro +3 -3
  31. package/src/components/lib/charts/BoxPlotChart.astro +109 -0
  32. package/src/components/lib/charts/BubbleChart.astro +101 -0
  33. package/src/components/lib/charts/BulletChart.astro +160 -0
  34. package/src/components/lib/charts/BumpChart.astro +92 -0
  35. package/src/components/lib/charts/CandlestickChart.astro +105 -0
  36. package/src/components/lib/charts/ChartFrame.astro +373 -0
  37. package/src/components/lib/charts/DivergingBarChart.astro +98 -0
  38. package/src/components/lib/charts/DonutChart.astro +2 -2
  39. package/src/components/lib/charts/DumbbellChart.astro +92 -0
  40. package/src/components/lib/charts/ForecastLineChart.astro +125 -0
  41. package/src/components/lib/charts/FunnelChart.astro +122 -0
  42. package/src/components/lib/charts/GaugeChart.astro +111 -0
  43. package/src/components/lib/charts/GoalProgressChart.astro +97 -0
  44. package/src/components/lib/charts/GroupedBarChart.astro +125 -0
  45. package/src/components/lib/charts/HeatmapChart.astro +131 -0
  46. package/src/components/lib/charts/HistogramChart.astro +111 -0
  47. package/src/components/lib/charts/HorizontalBarChart.astro +155 -0
  48. package/src/components/lib/charts/KpiStatTile.astro +116 -0
  49. package/src/components/lib/charts/KpiTrendGrid.astro +60 -0
  50. package/src/components/lib/charts/LineChart.astro +160 -0
  51. package/src/components/lib/charts/LinearProgressGauge.astro +136 -0
  52. package/src/components/lib/charts/LollipopChart.astro +100 -0
  53. package/src/components/lib/charts/MeterGauge.astro +122 -0
  54. package/src/components/lib/charts/MetricDeltaTable.astro +125 -0
  55. package/src/components/lib/charts/PieChart.astro +135 -0
  56. package/src/components/lib/charts/PolarAreaChart.astro +85 -0
  57. package/src/components/lib/charts/PopulationPyramid.astro +122 -0
  58. package/src/components/lib/charts/PunchCardChart.astro +89 -0
  59. package/src/components/lib/charts/RadarChart.astro +94 -0
  60. package/src/components/lib/charts/RadarMetricChart.astro +168 -0
  61. package/src/components/lib/charts/RadialBarChart.astro +124 -0
  62. package/src/components/lib/charts/RangeAreaChart.astro +113 -0
  63. package/src/components/lib/charts/RetentionCohortTable.astro +126 -0
  64. package/src/components/lib/charts/SankeyChart.astro +128 -0
  65. package/src/components/lib/charts/ScatterPlot.astro +139 -0
  66. package/src/components/lib/charts/SegmentedBarChart.astro +119 -0
  67. package/src/components/lib/charts/SlopeChart.astro +105 -0
  68. package/src/components/lib/charts/SparklineChart.astro +87 -0
  69. package/src/components/lib/charts/StackedAreaChart.astro +130 -0
  70. package/src/components/lib/charts/StackedBarChart.astro +136 -0
  71. package/src/components/lib/charts/SunburstChart.astro +103 -0
  72. package/src/components/lib/charts/TreemapChart.astro +94 -0
  73. package/src/components/lib/charts/WaffleChart.astro +121 -0
  74. package/src/components/lib/charts/WaterfallChart.astro +118 -0
  75. package/src/components/lib/charts/chart-tooltip.ts +75 -0
  76. package/src/components/lib/charts/chart-utils.ts +271 -0
  77. package/src/components/lib/charts/index.ts +46 -0
  78. package/src/components/lib/data/ActivityHeatmapGrid.astro +157 -0
  79. package/src/components/lib/data/MetricComparisonRow.astro +109 -0
  80. package/src/components/lib/data/StatusTimelineFeed.astro +168 -0
  81. package/src/components/lib/data/index.ts +3 -0
  82. package/src/components/lib/ecommerce/CartDrawer.astro +483 -0
  83. package/src/components/lib/ecommerce/CartPageList.astro +290 -0
  84. package/src/components/lib/ecommerce/CartToast.astro +276 -0
  85. package/src/components/lib/ecommerce/CategoryTiles.astro +143 -0
  86. package/src/components/lib/ecommerce/CheckoutForm.astro +423 -0
  87. package/src/components/lib/ecommerce/CountdownBanner.astro +230 -0
  88. package/src/components/lib/ecommerce/FilterBar.astro +278 -0
  89. package/src/components/lib/ecommerce/FilterSidebar.astro +405 -0
  90. package/src/components/lib/ecommerce/LiveActivityToast.astro +213 -0
  91. package/src/components/lib/ecommerce/OrderSummary.astro +295 -0
  92. package/src/components/lib/ecommerce/ProductBuyBox.astro +247 -0
  93. package/src/components/lib/ecommerce/ProductCardMinimal.astro +229 -0
  94. package/src/components/lib/ecommerce/ProductGallery.astro +145 -0
  95. package/src/components/lib/ecommerce/ProductGrid.astro +118 -0
  96. package/src/components/lib/ecommerce/ProductMedia.astro +113 -0
  97. package/src/components/lib/ecommerce/ProductRating.astro +78 -0
  98. package/src/components/lib/ecommerce/ProductToolbar.astro +93 -0
  99. package/src/components/lib/ecommerce/PromoBar.astro +145 -0
  100. package/src/components/lib/ecommerce/StockIndicator.astro +127 -0
  101. package/src/components/lib/ecommerce/StoreHeader.astro +446 -0
  102. package/src/components/lib/ecommerce/StoreHero.astro +260 -0
  103. package/src/components/lib/ecommerce/StoreProductCard.astro +307 -0
  104. package/src/components/lib/ecommerce/TrustBadges.astro +101 -0
  105. package/src/components/lib/ecommerce/VariantPicker.astro +145 -0
  106. package/src/components/lib/ecommerce/cart-store.ts +151 -0
  107. package/src/components/lib/ecommerce/catalog-filter.ts +62 -0
  108. package/src/components/lib/ecommerce/index.ts +34 -0
  109. package/src/components/lib/ecommerce/product-icons.ts +28 -0
  110. package/src/components/lib/ecommerce/types.ts +70 -0
  111. package/src/components/lib/feedback/ProgressRingCounter.astro +118 -0
  112. package/src/components/lib/feedback/ToastNotificationGroup.astro +173 -0
  113. package/src/components/lib/feedback/index.ts +2 -0
  114. package/src/components/lib/forms/AnimatedInput.astro +4 -2
  115. package/src/components/lib/forms/CustomRadioGroup.astro +3 -1
  116. package/src/components/lib/forms/GlassInlineToggleGroup.astro +161 -0
  117. package/src/components/lib/forms/PasswordStrengthInput.astro +242 -0
  118. package/src/components/lib/forms/PhoneCountryInput.astro +145 -0
  119. package/src/components/lib/forms/TagsAutocompleteInput.astro +249 -0
  120. package/src/components/lib/forms/index.ts +5 -0
  121. package/src/components/lib/index.ts +2 -0
  122. package/src/components/lib/layout/BentoGrid3.astro +6 -4
  123. package/src/components/lib/layout/CenterFixedBox.astro +2 -2
  124. package/src/components/lib/layout/CenteredContainer.astro +4 -2
  125. package/src/components/lib/layout/ClusterHorizontal.astro +2 -2
  126. package/src/components/lib/layout/DiagonalSectionDivider.astro +69 -0
  127. package/src/components/lib/layout/FeatureHero.astro +4 -2
  128. package/src/components/lib/layout/FooterCenteredMinimal.astro +4 -2
  129. package/src/components/lib/layout/FullBleedSection.astro +2 -2
  130. package/src/components/lib/layout/GalleryGrid4.astro +2 -2
  131. package/src/components/lib/layout/HolyGrailGrid.astro +127 -0
  132. package/src/components/lib/layout/LandingSectionSplit.astro +5 -3
  133. package/src/components/lib/layout/MasonryGrid.astro +2 -2
  134. package/src/components/lib/layout/MinimalFooterGrid.astro +1 -1
  135. package/src/components/lib/layout/ScrollSnapSection.astro +1 -1
  136. package/src/components/lib/layout/SidebarLayoutWrapper.astro +4 -2
  137. package/src/components/lib/layout/SplitScreenLayout.astro +3 -3
  138. package/src/components/lib/layout/StepLayoutVertical.astro +1 -1
  139. package/src/components/lib/layout/StickySidebarWrapper.astro +4 -2
  140. package/src/components/lib/layout/index.ts +3 -1
  141. package/src/components/lib/navigation/QuickJumpDock.astro +125 -0
  142. package/src/components/lib/navigation/StepBreadcrumbBar.astro +151 -0
  143. package/src/components/lib/navigation/SubNavbarPills.astro +102 -0
  144. package/src/components/lib/navigation/index.ts +3 -0
  145. package/src/components/lib/overlays/CookiePreferencesDrawer.astro +226 -0
  146. package/src/components/lib/overlays/FloatingFeedbackWidget.astro +203 -0
  147. package/src/components/lib/overlays/ImageCompareSlider.astro +172 -0
  148. package/src/components/lib/overlays/index.ts +3 -0
  149. package/src/components/lib/sections/AgencyContactBrief.astro +194 -0
  150. package/src/components/lib/sections/AgencyFooterCta.astro +94 -0
  151. package/src/components/lib/sections/AgencyHeader.astro +161 -0
  152. package/src/components/lib/sections/AgencyHeroKinetic.astro +172 -0
  153. package/src/components/lib/sections/AgencyServicesList.astro +113 -0
  154. package/src/components/lib/sections/AgencyTeamGrid.astro +111 -0
  155. package/src/components/lib/sections/AgencyWorkGrid.astro +147 -0
  156. package/src/components/lib/sections/BlogGridSection.astro +133 -0
  157. package/src/components/lib/sections/ButtonsShowcase.astro +20 -18
  158. package/src/components/lib/sections/CardsShowcase.astro +28 -26
  159. package/src/components/lib/sections/CareersOpenings.astro +141 -0
  160. package/src/components/lib/sections/ChangelogSection.astro +151 -0
  161. package/src/components/lib/sections/ContactGlassForm.astro +10 -8
  162. package/src/components/lib/sections/ContactSplitMap.astro +141 -0
  163. package/src/components/lib/sections/CtaAppDownload.astro +13 -11
  164. package/src/components/lib/sections/CtaGlowBanner.astro +12 -10
  165. package/src/components/lib/sections/CtaNewsletterSection.astro +165 -0
  166. package/src/components/lib/sections/CtaSplitImage.astro +149 -0
  167. package/src/components/lib/sections/DataShowcase.astro +23 -21
  168. package/src/components/lib/sections/FaqAccordionSection.astro +8 -8
  169. package/src/components/lib/sections/FaqTwoColumn.astro +121 -0
  170. package/src/components/lib/sections/FeatureAlternatingRows.astro +192 -0
  171. package/src/components/lib/sections/FeatureBentoGrid.astro +13 -11
  172. package/src/components/lib/sections/FeatureIconGrid.astro +155 -0
  173. package/src/components/lib/sections/FeatureTabsShowcase.astro +182 -0
  174. package/src/components/lib/sections/FeatureTimelineFlow.astro +8 -6
  175. package/src/components/lib/sections/FeedbackShowcase.astro +15 -13
  176. package/src/components/lib/sections/FooterMegaSection.astro +157 -0
  177. package/src/components/lib/sections/FormsShowcase.astro +22 -20
  178. package/src/components/lib/sections/HeroDashboardPreview.astro +182 -0
  179. package/src/components/lib/sections/HeroGlass.astro +22 -20
  180. package/src/components/lib/sections/HeroGradient.astro +15 -13
  181. package/src/components/lib/sections/HeroMinimalCentered.astro +175 -0
  182. package/src/components/lib/sections/HeroShowcaseSplit.astro +306 -0
  183. package/src/components/lib/sections/HeroSplit.astro +13 -11
  184. package/src/components/lib/sections/HeroTerminal.astro +253 -0
  185. package/src/components/lib/sections/HeroWaitlist.astro +231 -0
  186. package/src/components/lib/sections/HowItWorksSteps.astro +180 -0
  187. package/src/components/lib/sections/IntegrationsGrid.astro +167 -0
  188. package/src/components/lib/sections/LayoutShowcase.astro +21 -19
  189. package/src/components/lib/sections/LogoCloudSection.astro +96 -0
  190. package/src/components/lib/sections/LogoWallGrid.astro +93 -0
  191. package/src/components/lib/sections/NavigationShowcase.astro +15 -13
  192. package/src/components/lib/sections/OverlaysShowcase.astro +21 -19
  193. package/src/components/lib/sections/PricingComparisonMatrix.astro +15 -13
  194. package/src/components/lib/sections/PricingSinglePlan.astro +159 -0
  195. package/src/components/lib/sections/PricingTierCards.astro +11 -9
  196. package/src/components/lib/sections/PricingToggleCards.astro +171 -0
  197. package/src/components/lib/sections/ShopCategoryHero.astro +103 -0
  198. package/src/components/lib/sections/ShopCollectionMosaic.astro +131 -0
  199. package/src/components/lib/sections/ShopFooterWordmark.astro +100 -0
  200. package/src/components/lib/sections/ShopHeaderEditorial.astro +396 -0
  201. package/src/components/lib/sections/ShopHeroEditorial.astro +151 -0
  202. package/src/components/lib/sections/ShopLookbook.astro +250 -0
  203. package/src/components/lib/sections/ShopNewsletterEditorial.astro +128 -0
  204. package/src/components/lib/sections/ShopProductRail.astro +150 -0
  205. package/src/components/lib/sections/ShopReviewsEditorial.astro +133 -0
  206. package/src/components/lib/sections/ShopValuesMarquee.astro +91 -0
  207. package/src/components/lib/sections/StatsCounterBand.astro +124 -0
  208. package/src/components/lib/sections/StatsDashboardSection.astro +85 -0
  209. package/src/components/lib/sections/StatsMetricShowcase.astro +9 -7
  210. package/src/components/lib/sections/TeamGridSection.astro +12 -10
  211. package/src/components/lib/sections/TestimonialCarousel.astro +167 -0
  212. package/src/components/lib/sections/TestimonialFeatured.astro +122 -0
  213. package/src/components/lib/sections/TestimonialGridSection.astro +188 -0
  214. package/src/components/lib/sections/TestimonialWallGlass.astro +11 -9
  215. package/src/components/lib/sections/TypographyShowcase.astro +10 -8
  216. package/src/components/lib/sections/index.ts +39 -0
  217. package/src/components/lib/templates/ecommerce/StoreCategoryPage.astro +160 -0
  218. package/src/components/lib/templates/ecommerce/StoreCheckoutPage.astro +98 -0
  219. package/src/components/lib/templates/ecommerce/StoreHomePage.astro +191 -0
  220. package/src/components/lib/templates/ecommerce/StoreLayout.astro +169 -0
  221. package/src/components/lib/templates/ecommerce/StoreProductPage.astro +165 -0
  222. package/src/components/lib/templates/ecommerce/data.ts +187 -0
  223. package/src/components/lib/templates/ecommerce/index.ts +14 -0
  224. package/src/components/lib/templates/ecommerce-editorial/EditorialBagPage.astro +52 -0
  225. package/src/components/lib/templates/ecommerce-editorial/EditorialCheckoutPage.astro +123 -0
  226. package/src/components/lib/templates/ecommerce-editorial/EditorialHomePage.astro +102 -0
  227. package/src/components/lib/templates/ecommerce-editorial/EditorialLayout.astro +216 -0
  228. package/src/components/lib/templates/ecommerce-editorial/EditorialProductPage.astro +205 -0
  229. package/src/components/lib/templates/ecommerce-editorial/EditorialShopPage.astro +112 -0
  230. package/src/components/lib/templates/ecommerce-editorial/data.ts +125 -0
  231. package/src/components/lib/templates/ecommerce-editorial/index.ts +16 -0
  232. package/src/components/lib/templates/saas-hotel/AppLayout.astro +83 -0
  233. package/src/components/lib/templates/saas-hotel/DashboardPage.astro +66 -0
  234. package/src/components/lib/templates/saas-hotel/GuestsPage.astro +65 -0
  235. package/src/components/lib/templates/saas-hotel/LandingPage.astro +213 -0
  236. package/src/components/lib/templates/saas-hotel/ReportsPage.astro +63 -0
  237. package/src/components/lib/templates/saas-hotel/ReservationsPage.astro +49 -0
  238. package/src/components/lib/templates/saas-hotel/RoomsPage.astro +48 -0
  239. package/src/components/lib/templates/saas-hotel/SettingsPage.astro +115 -0
  240. package/src/components/lib/templates/saas-hotel/SignInPage.astro +50 -0
  241. package/src/components/lib/templates/saas-hotel/data.ts +229 -0
  242. package/src/components/lib/templates/saas-hotel/index.ts +19 -0
  243. package/src/components/lib/templates/saas-hotel/lobby-theme.css +90 -0
  244. package/src/components/lib/typography/AnimatedCounterText.astro +102 -0
  245. package/src/components/lib/typography/CurvedPathHeading.astro +86 -0
  246. package/src/components/lib/typography/GradientTextMarquee.astro +105 -0
  247. package/src/components/lib/typography/HackerDecodeText.astro +85 -0
  248. package/src/components/lib/typography/index.ts +4 -0
  249. package/src/styles/global.css +113 -1
@@ -8,6 +8,7 @@ interface Props {
8
8
  const { title = "Data Display", subtitle = "Stats, tables, and visualization elements." } = Astro.props;
9
9
  ---
10
10
 
11
+ <div class="cq-data-showcase-cq">
11
12
  <section class="data-showcase">
12
13
  <div class="container">
13
14
  <div class="showcase-header">
@@ -78,8 +79,9 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
78
79
  </div>
79
80
  </div>
80
81
  </section>
81
-
82
+ </div>
82
83
  <style>
84
+ .cq-data-showcase-cq { container-type: inline-size; }
83
85
  .data-showcase {
84
86
  padding: var(--sp-16) 0;
85
87
  position: relative;
@@ -96,8 +98,8 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
96
98
  text-transform: uppercase;
97
99
  letter-spacing: 0.1em;
98
100
  color: var(--c-primary-light);
99
- background: rgba(184,134,11,0.1);
100
- border: 1px solid rgba(184,134,11,0.25);
101
+ background: color-mix(in srgb, var(--c-primary, #b8860b) 10%, transparent);
102
+ border: 1px solid color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
101
103
  border-radius: var(--r-full);
102
104
  margin-bottom: var(--sp-4);
103
105
  }
@@ -119,7 +121,7 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
119
121
  padding: var(--sp-12);
120
122
  background: rgba(10, 10, 10, 0.6);
121
123
  backdrop-filter: blur(20px);
122
- border: 1px solid rgba(255,255,255,0.08);
124
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
123
125
  border-radius: var(--r-xl);
124
126
  margin-bottom: var(--sp-6);
125
127
  box-shadow: 0 20px 60px rgba(0,0,0,0.4);
@@ -146,16 +148,16 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
146
148
  }
147
149
  .stat-card {
148
150
  padding: var(--sp-5);
149
- background: rgba(255,255,255,0.04);
151
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
150
152
  backdrop-filter: blur(12px);
151
- border: 1px solid rgba(255,255,255,0.08);
153
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
152
154
  border-radius: var(--r-lg);
153
155
  text-align: center;
154
156
  transition: all 0.25s ease;
155
157
  }
156
158
  .stat-card:hover {
157
- background: rgba(255,255,255,0.07);
158
- border-color: rgba(184,134,11,0.25);
159
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.07);
160
+ border-color: color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
159
161
  transform: translateY(-2px);
160
162
  }
161
163
  .stat-value {
@@ -176,9 +178,9 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
176
178
 
177
179
  /* Mini Table */
178
180
  .mini-table {
179
- background: rgba(255,255,255,0.04);
181
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
180
182
  backdrop-filter: blur(12px);
181
- border: 1px solid rgba(255,255,255,0.08);
183
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
182
184
  border-radius: var(--r-lg);
183
185
  overflow: hidden;
184
186
  }
@@ -186,8 +188,8 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
186
188
  display: grid;
187
189
  grid-template-columns: 1.5fr 0.8fr 1fr;
188
190
  padding: var(--sp-3) var(--sp-5);
189
- background: rgba(255,255,255,0.06);
190
- border-bottom: 1px solid rgba(255,255,255,0.08);
191
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.06);
192
+ border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
191
193
  font-size: 0.7rem;
192
194
  font-weight: 600;
193
195
  text-transform: uppercase;
@@ -198,7 +200,7 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
198
200
  display: grid;
199
201
  grid-template-columns: 1.5fr 0.8fr 1fr;
200
202
  padding: var(--sp-3) var(--sp-5);
201
- border-bottom: 1px solid rgba(255,255,255,0.04);
203
+ border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.04);
202
204
  font-size: 0.85rem;
203
205
  align-items: center;
204
206
  transition: background 0.2s ease;
@@ -207,7 +209,7 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
207
209
  border-bottom: none;
208
210
  }
209
211
  .table-row:hover {
210
- background: rgba(255,255,255,0.03);
212
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.03);
211
213
  }
212
214
  .col--name {
213
215
  color: var(--c-text-1);
@@ -250,9 +252,9 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
250
252
  /* Progress Bar */
251
253
  .progress-section {
252
254
  padding: var(--sp-5);
253
- background: rgba(255,255,255,0.04);
255
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
254
256
  backdrop-filter: blur(12px);
255
- border: 1px solid rgba(255,255,255,0.08);
257
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
256
258
  border-radius: var(--r-lg);
257
259
  }
258
260
  .progress-labels {
@@ -273,16 +275,16 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
273
275
  }
274
276
  .progress-track {
275
277
  height: 8px;
276
- background: rgba(255,255,255,0.08);
278
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.08);
277
279
  border-radius: var(--r-full);
278
280
  overflow: hidden;
279
281
  }
280
282
  .progress-fill {
281
283
  width: 73%;
282
284
  height: 100%;
283
- background: linear-gradient(90deg, var(--c-primary-light), var(--c-primary), rgba(184,134,11,0.4));
285
+ background: linear-gradient(90deg, var(--c-primary-light), var(--c-primary), color-mix(in srgb, var(--c-primary, #b8860b) 40%, transparent));
284
286
  border-radius: var(--r-full);
285
- box-shadow: 0 0 12px rgba(184,134,11,0.3);
287
+ box-shadow: 0 0 12px color-mix(in srgb, var(--c-primary, #b8860b) 30%, transparent);
286
288
  animation: progress-pulse 2.5s ease-in-out infinite;
287
289
  }
288
290
  @keyframes progress-pulse {
@@ -293,7 +295,7 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
293
295
  .usage-code {
294
296
  text-align: center;
295
297
  padding: var(--sp-4);
296
- background: rgba(255,255,255,0.02);
298
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
297
299
  border-radius: var(--r-md);
298
300
  }
299
301
  .usage-code code {
@@ -302,7 +304,7 @@ const { title = "Data Display", subtitle = "Stats, tables, and visualization ele
302
304
  color: var(--c-primary-light);
303
305
  }
304
306
 
305
- @media (max-width: 640px) {
307
+ @container (max-width: 640px) {
306
308
  .stats-row {
307
309
  grid-template-columns: 1fr;
308
310
  gap: var(--sp-3);
@@ -174,7 +174,7 @@ const faqs = [
174
174
  font-weight: 700;
175
175
  letter-spacing: 0.06em;
176
176
  text-transform: uppercase;
177
- background: rgba(184, 134, 11, 0.12);
177
+ background: color-mix(in srgb, var(--c-primary, #b8860b) 12%, transparent);
178
178
  color: #eab308;
179
179
  border: 1px solid rgba(234, 179, 8, 0.25);
180
180
  margin-bottom: var(--sp-4, 1rem);
@@ -208,7 +208,7 @@ const faqs = [
208
208
  .faq-tab {
209
209
  padding: 0.5rem 1.1rem;
210
210
  background: rgba(15, 23, 42, 0.6);
211
- border: 1px solid rgba(255, 255, 255, 0.08);
211
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
212
212
  border-radius: 9999px;
213
213
  color: #94a3b8;
214
214
  font-size: 0.85rem;
@@ -219,7 +219,7 @@ const faqs = [
219
219
 
220
220
  .faq-tab:hover {
221
221
  color: #fff;
222
- border-color: rgba(255, 255, 255, 0.2);
222
+ border-color: rgb(var(--ink-rgb, 255 255 255) / 0.2);
223
223
  }
224
224
 
225
225
  .faq-tab--active {
@@ -239,14 +239,14 @@ const faqs = [
239
239
  .faq-item {
240
240
  background: rgba(15, 23, 42, 0.5);
241
241
  backdrop-filter: blur(16px);
242
- border: 1px solid rgba(255, 255, 255, 0.08);
242
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
243
243
  border-radius: 16px;
244
244
  overflow: hidden;
245
245
  transition: border-color 0.3s ease, background 0.3s ease;
246
246
  }
247
247
 
248
248
  .faq-item:hover {
249
- border-color: rgba(255, 255, 255, 0.18);
249
+ border-color: rgb(var(--ink-rgb, 255 255 255) / 0.18);
250
250
  }
251
251
 
252
252
  .faq-item[open] {
@@ -302,7 +302,7 @@ const faqs = [
302
302
  gap: 1.5rem;
303
303
  padding: 1.75rem 2rem;
304
304
  background: rgba(15, 23, 42, 0.6);
305
- border: 1px solid rgba(255, 255, 255, 0.1);
305
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
306
306
  border-radius: 20px;
307
307
  flex-wrap: wrap;
308
308
  }
@@ -331,8 +331,8 @@ const faqs = [
331
331
 
332
332
  .support-btn {
333
333
  padding: 0.75rem 1.4rem;
334
- background: rgba(255, 255, 255, 0.08);
335
- border: 1px solid rgba(255, 255, 255, 0.15);
334
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.08);
335
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.15);
336
336
  border-radius: 10px;
337
337
  color: #fff;
338
338
  font-size: 0.9rem;
@@ -0,0 +1,121 @@
1
+ ---
2
+ /**
3
+ * FaqTwoColumn — FAQ section with a sticky intro column (heading + support CTA)
4
+ * and native <details> accordions on the right. Works without JavaScript.
5
+ *
6
+ * @param {string} title - Section heading.
7
+ * @param {string} subtitle - Intro copy.
8
+ * @param {Array<{q: string, a: string}>} items - Questions and answers.
9
+ * @param {{label: string, href: string}} support - Support link.
10
+ * @param {boolean} exclusive - Only one item open at a time (uses the `name` attribute).
11
+ * @param {string} variant - Item style (bordered|cards|plain).
12
+ * @param {string} size - Vertical rhythm (sm|md|lg).
13
+ * @param {string} className - Extra CSS class.
14
+ */
15
+ interface Props {
16
+ title?: string;
17
+ subtitle?: string;
18
+ items?: Array<{ q: string; a: string }>;
19
+ support?: { label: string; href: string };
20
+ exclusive?: boolean;
21
+ variant?: 'bordered' | 'cards' | 'plain';
22
+ size?: 'sm' | 'md' | 'lg';
23
+ className?: string;
24
+ }
25
+
26
+ const {
27
+ title = 'Frequently asked questions',
28
+ subtitle = 'Everything you need to know about the kit. Can’t find an answer? Our team replies within a day.',
29
+ items = [
30
+ { q: 'Do I need to install a package?', a: 'No. Every component is a standalone .astro file. Copy it into your project, or install the package if you prefer imports.' },
31
+ { q: 'Do the charts need a JavaScript library?', a: 'No. The SVG charts render at build time. A tiny shared script only powers hover tooltips, and every chart includes a data table fallback.' },
32
+ { q: 'Is it accessible?', a: 'Components target WCAG 2.2 AA: semantic HTML, visible focus states, keyboard support and contrast of at least 4.5:1 for text.' },
33
+ { q: 'Can I use it in commercial projects?', a: 'Yes. The kit is MIT licensed. Use it for client work, SaaS products and anything else.' },
34
+ { q: 'How do I change the colors?', a: 'Edit the CSS custom properties in global.css. Every component reads from the same tokens, so one change updates everything.' },
35
+ ],
36
+ support = { label: 'Contact support', href: '#' },
37
+ exclusive = true,
38
+ variant = 'bordered',
39
+ size = 'md',
40
+ className = '',
41
+ } = Astro.props;
42
+
43
+ const uid = Math.random().toString(36).slice(2, 8);
44
+ const id = `ftc-${uid}`;
45
+ ---
46
+
47
+ <div class="cq-faq-two-column-cq">
48
+ <section class={`ftc ftc--${variant} ftc--${size} ${className}`} aria-labelledby={id}>
49
+ <div class="ftc__inner">
50
+ <div class="ftc__intro">
51
+ <h2 id={id} class="ftc__title">{title}</h2>
52
+ <p class="ftc__subtitle">{subtitle}</p>
53
+ {support && (
54
+ <a class="ftc__support" href={support.href}>
55
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z" /></svg>
56
+ {support.label}
57
+ </a>
58
+ )}
59
+ </div>
60
+ <div class="ftc__list">
61
+ {items.map((it, i) => (
62
+ <details class="ftc__item" name={exclusive ? `faq-${uid}` : undefined} open={i === 0}>
63
+ <summary class="ftc__q">
64
+ <span>{it.q}</span>
65
+ <svg class="ftc__chev" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M12 5v14M5 12h14" /></svg>
66
+ </summary>
67
+ <div class="ftc__a"><p>{it.a}</p></div>
68
+ </details>
69
+ ))}
70
+ </div>
71
+ </div>
72
+ </section>
73
+ </div>
74
+ <style>
75
+ .cq-faq-two-column-cq { container-type: inline-size; }
76
+ .ftc {
77
+ --ftc-py: 5.5rem;
78
+ padding: var(--ftc-py) var(--sp-6, 1.5rem);
79
+ background: var(--c-bg, #050505);
80
+ }
81
+ .ftc--sm { --ftc-py: 3.5rem; }
82
+ .ftc--lg { --ftc-py: 7.5rem; }
83
+ .ftc__inner { max-width: 1120px; margin: 0 auto; display: grid; grid-template-columns: 1fr 1.6fr; gap: clamp(2rem, 6vw, 5rem); align-items: start; }
84
+ .ftc__intro { position: sticky; top: 6rem; }
85
+ .ftc__title { margin: 0 0 1rem; font-size: clamp(1.9rem, 4vw, 2.5rem); font-weight: 800; letter-spacing: -0.03em; line-height: 1.12; color: var(--c-text-1, #fff); }
86
+ .ftc__subtitle { margin: 0 0 1.75rem; font-size: 1rem; line-height: 1.65; color: var(--c-text-2, #a3a3a3); }
87
+ .ftc__support { display: inline-flex; align-items: center; gap: 0.5rem; min-height: 46px; padding: 0 1.25rem; border-radius: var(--r-md, 12px); border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.14); color: var(--c-text-1, #fff); font-weight: 600; text-decoration: none; transition: border-color 0.2s ease; }
88
+ .ftc__support:hover { border-color: rgb(var(--ink-rgb, 255 255 255) / 0.32); color: var(--c-text-1, #fff); }
89
+ .ftc__support:focus-visible { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 2px; }
90
+ .ftc__list { display: grid; }
91
+ .ftc--cards .ftc__list { gap: 0.75rem; }
92
+ .ftc--bordered .ftc__item { border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08); }
93
+ .ftc--bordered .ftc__item:first-child { border-top: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08); }
94
+ .ftc--cards .ftc__item { border-radius: var(--r-md, 14px); background: rgb(var(--ink-rgb, 255 255 255) / 0.025); border: 1px solid var(--c-border, rgb(var(--ink-rgb, 255 255 255) / 0.07)); padding-inline: 1.25rem; }
95
+ .ftc__q {
96
+ display: flex;
97
+ justify-content: space-between;
98
+ align-items: center;
99
+ gap: 1rem;
100
+ min-height: 64px;
101
+ padding: 1rem 0;
102
+ cursor: pointer;
103
+ list-style: none;
104
+ font-size: 1.0625rem;
105
+ font-weight: 600;
106
+ color: var(--c-text-1, #fff);
107
+ }
108
+ .ftc__q::-webkit-details-marker { display: none; }
109
+ .ftc__q:focus-visible { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 2px; border-radius: 6px; }
110
+ .ftc__chev { flex-shrink: 0; color: var(--c-text-2, #a3a3a3); transition: transform 0.25s ease; }
111
+ .ftc__item[open] .ftc__chev { transform: rotate(45deg); color: var(--c-primary-light, #d4a017); }
112
+ .ftc__a { padding: 0 2.5rem 1.25rem 0; }
113
+ .ftc__a p { margin: 0; font-size: 0.9875rem; line-height: 1.7; color: var(--c-text-2, #a3a3a3); }
114
+ .ftc__item[open] .ftc__a { animation: ftc-in 0.25s ease; }
115
+ @keyframes ftc-in { from { opacity: 0; transform: translateY(-4px); } }
116
+ @container (max-width: 820px) {
117
+ .ftc__inner { grid-template-columns: 1fr; }
118
+ .ftc__intro { position: static; }
119
+ }
120
+ @media (prefers-reduced-motion: reduce) { .ftc__chev { transition: none; } .ftc__item[open] .ftc__a { animation: none; } }
121
+ </style>
@@ -0,0 +1,192 @@
1
+ ---
2
+ /**
3
+ * FeatureAlternatingRows — Zig-zag feature section: text and a visual alternate
4
+ * sides on each row. Visuals are pure-CSS illustrations (no images to load).
5
+ *
6
+ * @param {string} title - Section heading (visually hidden if empty-styled).
7
+ * @param {Array<{eyebrow: string, title: string, text: string, bullets: string[], visual: 'chart'|'code'|'stack'}>} rows - Feature rows.
8
+ * @param {boolean} startReversed - Put the visual on the left in the first row.
9
+ * @param {string} variant - Visual frame (glass|outline|plain).
10
+ * @param {string} size - Vertical rhythm (sm|md|lg).
11
+ * @param {string} className - Extra CSS class.
12
+ */
13
+ interface Row { eyebrow: string; title: string; text: string; bullets: string[]; visual: 'chart' | 'code' | 'stack' }
14
+ interface Props {
15
+ title?: string;
16
+ rows?: Row[];
17
+ startReversed?: boolean;
18
+ variant?: 'glass' | 'outline' | 'plain';
19
+ size?: 'sm' | 'md' | 'lg';
20
+ className?: string;
21
+ }
22
+
23
+ const {
24
+ title = 'How the kit helps your team',
25
+ rows = [
26
+ {
27
+ eyebrow: 'Insights',
28
+ title: 'Dashboards your stakeholders actually read',
29
+ text: 'Drop-in SVG charts with tooltips, legends and table fallbacks. No chart library to configure.',
30
+ bullets: ['45 chart types', 'Colorblind-safe palette', 'Keyboard-accessible marks'],
31
+ visual: 'chart',
32
+ },
33
+ {
34
+ eyebrow: 'Developer experience',
35
+ title: 'Typed props, sensible defaults',
36
+ text: 'Every component ships a TypeScript Props interface and renders beautifully with zero configuration.',
37
+ bullets: ['Strict TypeScript', 'JSDoc on every prop', 'Copy-paste friendly'],
38
+ visual: 'code',
39
+ },
40
+ {
41
+ eyebrow: 'Design system',
42
+ title: 'One token file to re-theme everything',
43
+ text: 'Swap colors, radii and spacing in global.css and every section updates consistently.',
44
+ bullets: ['CSS custom properties', 'Dark-first', '8pt spacing grid'],
45
+ visual: 'stack',
46
+ },
47
+ ],
48
+ startReversed = false,
49
+ variant = 'glass',
50
+ size = 'md',
51
+ className = '',
52
+ } = Astro.props;
53
+
54
+ const id = `far-${Math.random().toString(36).slice(2, 8)}`;
55
+ const bars = [38, 62, 48, 80, 66, 92, 74];
56
+ ---
57
+
58
+ <div class="cq-feature-alternating-rows-cq">
59
+ <section class={`far far--${variant} far--${size} ${className}`} aria-labelledby={id}>
60
+ <h2 id={id} class="far__sr">{title}</h2>
61
+ <div class="far__inner">
62
+ {rows.map((r, i) => {
63
+ const reversed = startReversed ? i % 2 === 0 : i % 2 === 1;
64
+ return (
65
+ <article class={`far__row ${reversed ? 'far__row--rev' : ''}`}>
66
+ <div class="far__copy">
67
+ <p class="far__eyebrow">{r.eyebrow}</p>
68
+ <h3 class="far__title">{r.title}</h3>
69
+ <p class="far__text">{r.text}</p>
70
+ <ul class="far__bullets">
71
+ {r.bullets.map((b) => (
72
+ <li>
73
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5" /></svg>
74
+ {b}
75
+ </li>
76
+ ))}
77
+ </ul>
78
+ </div>
79
+ <div class="far__visual" aria-hidden="true">
80
+ {r.visual === 'chart' && (
81
+ <div class="far__chart">
82
+ {bars.map((h, bi) => <span style={`--h:${h}%; --d:${bi * 80}ms`}></span>)}
83
+ </div>
84
+ )}
85
+ {r.visual === 'code' && (
86
+ <pre class="far__code"><code><span class="k">interface</span> <span class="t">Props</span> {'{'}
87
+ title?: <span class="t">string</span>;
88
+ variant?: <span class="s">'glass'</span> | <span class="s">'solid'</span>;
89
+ size?: <span class="s">'sm'</span> | <span class="s">'md'</span> | <span class="s">'lg'</span>;
90
+ {'}'}
91
+
92
+ <span class="c">// Sensible defaults, zero config</span>
93
+ &lt;<span class="t">LineChart</span> /&gt;</code></pre>
94
+ )}
95
+ {r.visual === 'stack' && (
96
+ <div class="far__stack">
97
+ <span style="--c:var(--chart-1, #3987e5)">--chart-1</span>
98
+ <span style="--c:var(--c-primary-light, #d4a017)">--c-primary</span>
99
+ <span style="--c:var(--chart-3, #199e70)">--chart-pos</span>
100
+ <span style="--c:var(--chart-7, #9085e9)">--r-lg: 20px</span>
101
+ </div>
102
+ )}
103
+ </div>
104
+ </article>
105
+ );
106
+ })}
107
+ </div>
108
+ </section>
109
+ </div>
110
+ <style>
111
+ .cq-feature-alternating-rows-cq { container-type: inline-size; }
112
+ .far {
113
+ --far-py: 5.5rem;
114
+ padding: var(--far-py) var(--sp-6, 1.5rem);
115
+ background: var(--c-bg, #050505);
116
+ }
117
+ .far--sm { --far-py: 3.5rem; }
118
+ .far--lg { --far-py: 7.5rem; }
119
+ .far__sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
120
+ .far__inner { max-width: 1120px; margin: 0 auto; display: grid; gap: clamp(4rem, 8vw, 7rem); }
121
+ .far__row { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(2rem, 5vw, 5rem); align-items: center; }
122
+ .far__row--rev .far__copy { order: 2; }
123
+ .far__eyebrow { margin: 0 0 0.75rem; font-size: 0.8125rem; font-weight: 650; letter-spacing: 0.08em; text-transform: uppercase; color: var(--c-primary-light, #d4a017); }
124
+ .far__title { margin: 0 0 1rem; font-size: clamp(1.6rem, 3vw, 2.25rem); font-weight: 750; letter-spacing: -0.025em; line-height: 1.15; color: var(--c-text-1, #fff); }
125
+ .far__text { margin: 0 0 1.5rem; font-size: 1.0625rem; line-height: 1.65; color: var(--c-text-2, #a3a3a3); }
126
+ .far__bullets { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.7rem; }
127
+ .far__bullets li { display: flex; align-items: center; gap: 0.6rem; color: var(--c-text-1, #fff); font-size: 0.9375rem; }
128
+ .far__bullets svg { color: var(--chart-pos, #34c38f); flex-shrink: 0; }
129
+
130
+ .far__visual {
131
+ aspect-ratio: 4 / 3;
132
+ border-radius: var(--r-xl, 24px);
133
+ display: grid;
134
+ place-items: center;
135
+ padding: 2rem;
136
+ overflow: hidden;
137
+ }
138
+ .far--glass .far__visual {
139
+ background: radial-gradient(circle at 30% 20%, rgb(var(--ink-rgb, 255 255 255) / 0.06), transparent 60%), rgb(var(--ink-rgb, 255 255 255) / 0.02);
140
+ border: 1px solid var(--c-border, rgb(var(--ink-rgb, 255 255 255) / 0.07));
141
+ }
142
+ .far--outline .far__visual { border: 1px dashed rgb(var(--ink-rgb, 255 255 255) / 0.14); }
143
+ .far__chart { display: flex; align-items: flex-end; gap: 10px; width: 100%; height: 70%; }
144
+ .far__chart span {
145
+ flex: 1;
146
+ height: var(--h);
147
+ border-radius: 6px 6px 0 0;
148
+ background: linear-gradient(to top, rgba(57, 135, 229, 0.35), var(--chart-1, #3987e5));
149
+ transform-origin: bottom;
150
+ animation: far-grow 0.8s cubic-bezier(0.4, 0, 0.2, 1) both;
151
+ animation-delay: var(--d);
152
+ }
153
+ @keyframes far-grow { from { transform: scaleY(0); } }
154
+ .far__code {
155
+ margin: 0;
156
+ width: 100%;
157
+ padding: 1.5rem;
158
+ border-radius: var(--r-md, 12px);
159
+ background: #0b0b0d;
160
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
161
+ font-family: var(--font-mono, monospace);
162
+ font-size: 0.8125rem;
163
+ line-height: 1.75;
164
+ color: var(--c-text-2, #c4c4c4);
165
+ overflow-x: auto;
166
+ }
167
+ .far__code .k { color: #c792ea; }
168
+ .far__code .t { color: #82aaff; }
169
+ .far__code .s { color: #c3e88d; }
170
+ .far__code .c { color: #6b7280; }
171
+ .far__stack { display: grid; gap: 0.75rem; width: 100%; max-width: 320px; }
172
+ .far__stack span {
173
+ display: flex;
174
+ align-items: center;
175
+ gap: 0.75rem;
176
+ padding: 0.85rem 1rem;
177
+ border-radius: var(--r-md, 12px);
178
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.03);
179
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.07);
180
+ font-family: var(--font-mono, monospace);
181
+ font-size: 0.8125rem;
182
+ color: var(--c-text-1, #fff);
183
+ }
184
+ .far__stack span::before { content: ''; width: 20px; height: 20px; border-radius: 6px; background: var(--c); }
185
+ .far__stack span:nth-child(2) { margin-left: 1.5rem; }
186
+ .far__stack span:nth-child(3) { margin-left: 3rem; }
187
+ @container (max-width: 820px) {
188
+ .far__row { grid-template-columns: 1fr; }
189
+ .far__row--rev .far__copy { order: 0; }
190
+ }
191
+ @media (prefers-reduced-motion: reduce) { .far__chart span { animation: none; } }
192
+ </style>
@@ -21,6 +21,7 @@ const {
21
21
  } = Astro.props;
22
22
  ---
23
23
 
24
+ <div class="cq-feature-bento-grid-cq">
24
25
  <section class={`bento-section ${className}`} aria-labelledby="bento-title">
25
26
  <div class="bento-bg" aria-hidden="true">
26
27
  <div class="bento-glow bento-glow--1"></div>
@@ -139,8 +140,9 @@ const {
139
140
  </div>
140
141
  </div>
141
142
  </section>
142
-
143
+ </div>
143
144
  <style>
145
+ .cq-feature-bento-grid-cq { container-type: inline-size; }
144
146
  .bento-section {
145
147
  position: relative;
146
148
  padding: var(--sp-20, 5rem) var(--sp-6, 1.5rem);
@@ -199,7 +201,7 @@ const {
199
201
  font-weight: 700;
200
202
  letter-spacing: 0.06em;
201
203
  text-transform: uppercase;
202
- background: rgba(184, 134, 11, 0.12);
204
+ background: color-mix(in srgb, var(--c-primary, #b8860b) 12%, transparent);
203
205
  color: #eab308;
204
206
  border: 1px solid rgba(234, 179, 8, 0.25);
205
207
  margin-bottom: var(--sp-4, 1rem);
@@ -233,7 +235,7 @@ const {
233
235
  background: rgba(15, 23, 42, 0.6);
234
236
  backdrop-filter: blur(20px);
235
237
  -webkit-backdrop-filter: blur(20px);
236
- border: 1px solid rgba(255, 255, 255, 0.08);
238
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
237
239
  border-radius: var(--r-xl, 20px);
238
240
  padding: 2rem;
239
241
  display: flex;
@@ -245,7 +247,7 @@ const {
245
247
 
246
248
  .bento-card:hover {
247
249
  transform: translateY(-4px);
248
- border-color: rgba(255, 255, 255, 0.18);
250
+ border-color: rgb(var(--ink-rgb, 255 255 255) / 0.18);
249
251
  box-shadow: 0 20px 40px -15px rgba(0, 0, 0, 0.6);
250
252
  }
251
253
 
@@ -306,13 +308,13 @@ const {
306
308
  padding: 1rem;
307
309
  background: rgba(0, 0, 0, 0.3);
308
310
  border-radius: 12px;
309
- border: 1px solid rgba(255, 255, 255, 0.05);
311
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.05);
310
312
  }
311
313
 
312
314
  .speed-score {
313
315
  text-align: center;
314
316
  padding-right: 1.5rem;
315
- border-right: 1px solid rgba(255, 255, 255, 0.1);
317
+ border-right: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
316
318
  }
317
319
 
318
320
  .score-number {
@@ -364,7 +366,7 @@ const {
364
366
  .a11y-pill {
365
367
  padding: 0.6rem 0.85rem;
366
368
  background: rgba(0, 0, 0, 0.3);
367
- border: 1px solid rgba(255, 255, 255, 0.06);
369
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
368
370
  border-radius: 8px;
369
371
  font-size: 0.82rem;
370
372
  color: #cbd5e1;
@@ -380,7 +382,7 @@ const {
380
382
  width: 22px;
381
383
  height: 22px;
382
384
  border-radius: 50%;
383
- border: 2px solid rgba(255, 255, 255, 0.2);
385
+ border: 2px solid rgb(var(--ink-rgb, 255 255 255) / 0.2);
384
386
  }
385
387
  .color-dot--gold { background: #eab308; }
386
388
  .color-dot--indigo { background: #6366f1; }
@@ -391,7 +393,7 @@ const {
391
393
  padding: 0.75rem;
392
394
  background: rgba(0, 0, 0, 0.5);
393
395
  border-radius: 8px;
394
- border: 1px solid rgba(255, 255, 255, 0.06);
396
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
395
397
  font-size: 0.8rem;
396
398
  color: #93c5fd;
397
399
  font-family: var(--font-mono, monospace);
@@ -424,7 +426,7 @@ const {
424
426
  50% { transform: scale(1.4); opacity: 0.6; }
425
427
  }
426
428
 
427
- @media (max-width: 960px) {
429
+ @container (max-width: 960px) {
428
430
  .bento-grid {
429
431
  grid-template-columns: 1fr;
430
432
  }
@@ -439,7 +441,7 @@ const {
439
441
  }
440
442
  .speed-score {
441
443
  border-right: none;
442
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
444
+ border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
443
445
  padding-right: 0;
444
446
  padding-bottom: 0.75rem;
445
447
  width: 100%;