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
@@ -0,0 +1,167 @@
1
+ ---
2
+ /**
3
+ * IntegrationsGrid — Integrations directory with category filter chips
4
+ * (progressively enhanced), monogram tiles and connection status badges.
5
+ *
6
+ * @param {string} title - Section heading.
7
+ * @param {string} subtitle - Section description.
8
+ * @param {Array<{name: string, category: string, description: string, status?: 'available'|'beta'|'soon'}>} items - Integrations.
9
+ * @param {string} variant - Tile style (card|compact|outline).
10
+ * @param {string} size - Vertical rhythm (sm|md|lg).
11
+ * @param {string} className - Extra CSS class.
12
+ */
13
+ interface Item { name: string; category: string; description: string; status?: 'available' | 'beta' | 'soon' }
14
+ interface Props {
15
+ title?: string;
16
+ subtitle?: string;
17
+ items?: Item[];
18
+ variant?: 'card' | 'compact' | 'outline';
19
+ size?: 'sm' | 'md' | 'lg';
20
+ className?: string;
21
+ }
22
+
23
+ const {
24
+ title = 'Plays well with your stack',
25
+ subtitle = 'Connect the tools your team already uses. New integrations every month.',
26
+ items = [
27
+ { name: 'Slack', category: 'Messaging', description: 'Post alerts and weekly digests to channels.', status: 'available' },
28
+ { name: 'GitHub', category: 'Developer', description: 'Annotate charts with deploys and releases.', status: 'available' },
29
+ { name: 'Stripe', category: 'Payments', description: 'Sync MRR, churn and invoices automatically.', status: 'available' },
30
+ { name: 'Linear', category: 'Developer', description: 'Turn insights into issues in one click.', status: 'beta' },
31
+ { name: 'Notion', category: 'Docs', description: 'Embed live charts in your team wiki.', status: 'available' },
32
+ { name: 'HubSpot', category: 'CRM', description: 'Attribute revenue to campaigns and deals.', status: 'beta' },
33
+ { name: 'Postgres', category: 'Data', description: 'Query your warehouse with zero ETL.', status: 'available' },
34
+ { name: 'Discord', category: 'Messaging', description: 'Community metrics and bot notifications.', status: 'soon' },
35
+ ],
36
+ variant = 'card',
37
+ size = 'md',
38
+ className = '',
39
+ } = Astro.props;
40
+
41
+ const id = `ig-${Math.random().toString(36).slice(2, 8)}`;
42
+ const categories = ['All', ...new Set(items.map((i) => i.category))];
43
+ const hues = ['var(--chart-1, #3987e5)', 'var(--chart-2, #d95926)', 'var(--chart-3, #199e70)', 'var(--chart-4, #c98500)', 'var(--chart-5, #d55181)', 'var(--chart-7, #9085e9)'];
44
+ const statusLabel = { available: 'Available', beta: 'Beta', soon: 'Coming soon' };
45
+ ---
46
+
47
+ <section class={`ig ig--${variant} ig--${size} ${className}`} aria-labelledby={id} data-ig>
48
+ <div class="ig__inner">
49
+ <header class="ig__head">
50
+ <h2 id={id} class="ig__title">{title}</h2>
51
+ <p class="ig__subtitle">{subtitle}</p>
52
+ </header>
53
+
54
+ <div class="ig__filters" role="group" aria-label="Filter integrations by category">
55
+ {categories.map((c, i) => (
56
+ <button type="button" class="ig__chip" data-filter={c} aria-pressed={i === 0 ? 'true' : 'false'}>{c}</button>
57
+ ))}
58
+ </div>
59
+ <p class="ig__count" role="status" aria-live="polite">{items.length} integrations</p>
60
+
61
+ <ul class="ig__grid">
62
+ {items.map((it, i) => (
63
+ <li class="ig__tile" data-category={it.category}>
64
+ <span class="ig__logo" style={`--c:${hues[i % hues.length]}`} aria-hidden="true">{it.name.slice(0, 2)}</span>
65
+ <div class="ig__body">
66
+ <div class="ig__row">
67
+ <h3 class="ig__name">{it.name}</h3>
68
+ {it.status && <span class={`ig__status ig__status--${it.status}`}>{statusLabel[it.status]}</span>}
69
+ </div>
70
+ <p class="ig__desc">{it.description}</p>
71
+ <span class="ig__cat">{it.category}</span>
72
+ </div>
73
+ </li>
74
+ ))}
75
+ </ul>
76
+ </div>
77
+ </section>
78
+
79
+ <script>
80
+ document.querySelectorAll<HTMLElement>('[data-ig]').forEach((root) => {
81
+ const chips = root.querySelectorAll<HTMLButtonElement>('.ig__chip');
82
+ const tiles = root.querySelectorAll<HTMLElement>('.ig__tile');
83
+ const count = root.querySelector('.ig__count');
84
+ chips.forEach((chip) => {
85
+ chip.addEventListener('click', () => {
86
+ const f = chip.dataset.filter;
87
+ chips.forEach((c) => c.setAttribute('aria-pressed', String(c === chip)));
88
+ let shown = 0;
89
+ tiles.forEach((t) => {
90
+ const on = f === 'All' || t.dataset.category === f;
91
+ t.hidden = !on;
92
+ if (on) shown += 1;
93
+ });
94
+ if (count) count.textContent = `${shown} integration${shown === 1 ? '' : 's'}${f === 'All' ? '' : ` in ${f}`}`;
95
+ });
96
+ });
97
+ });
98
+ </script>
99
+
100
+ <style>
101
+ .ig {
102
+ --ig-py: 5.5rem;
103
+ padding: var(--ig-py) var(--sp-6, 1.5rem);
104
+ background: var(--c-bg, #050505);
105
+ }
106
+ .ig--sm { --ig-py: 3.5rem; }
107
+ .ig--lg { --ig-py: 7.5rem; }
108
+ .ig__inner { max-width: 1180px; margin: 0 auto; }
109
+ .ig__head { text-align: center; max-width: 620px; margin: 0 auto 2rem; }
110
+ .ig__title { margin: 0 0 0.75rem; font-size: clamp(1.9rem, 4vw, 2.75rem); font-weight: 800; letter-spacing: -0.03em; color: var(--c-text-1, #fff); }
111
+ .ig__subtitle { margin: 0; font-size: 1.0625rem; color: var(--c-text-2, #a3a3a3); }
112
+ .ig__filters { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.5rem; }
113
+ .ig__chip {
114
+ min-height: 40px;
115
+ padding: 0 1rem;
116
+ border-radius: var(--r-full, 999px);
117
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
118
+ background: transparent;
119
+ color: var(--c-text-2, #a3a3a3);
120
+ font: inherit;
121
+ font-size: 0.875rem;
122
+ font-weight: 550;
123
+ cursor: pointer;
124
+ transition: all 0.2s ease;
125
+ }
126
+ .ig__chip:hover { color: var(--c-text-1, #fff); border-color: rgb(var(--ink-rgb, 255 255 255) / 0.25); }
127
+ .ig__chip[aria-pressed='true'] { background: var(--c-text-1, #fff); color: var(--c-on-primary, #0a0a0a); border-color: transparent; }
128
+ .ig__chip:focus-visible { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 2px; }
129
+ .ig__count { margin: 1rem 0 1.5rem; text-align: center; font-size: 0.8125rem; color: var(--c-text-3, #8a8a8a); }
130
+ .ig__grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 1rem; }
131
+ .ig__tile {
132
+ display: flex;
133
+ gap: 1rem;
134
+ padding: 1.25rem;
135
+ border-radius: var(--r-lg, 18px);
136
+ transition: border-color 0.2s ease, transform 0.2s ease;
137
+ }
138
+ .ig__tile[hidden] { display: none; }
139
+ .ig--card .ig__tile { 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)); }
140
+ .ig--outline .ig__tile { border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.12); }
141
+ .ig--compact .ig__tile { padding: 0.75rem; }
142
+ .ig--compact .ig__desc { display: none; }
143
+ .ig__tile:hover { border-color: rgb(var(--ink-rgb, 255 255 255) / 0.2); transform: translateY(-2px); }
144
+ .ig__logo {
145
+ display: grid;
146
+ place-items: center;
147
+ flex-shrink: 0;
148
+ width: 44px;
149
+ height: 44px;
150
+ border-radius: 12px;
151
+ background: color-mix(in srgb, var(--c) 22%, transparent);
152
+ border: 1px solid color-mix(in srgb, var(--c) 45%, transparent);
153
+ color: var(--c-text-1, #fff);
154
+ font-weight: 750;
155
+ font-size: 0.9rem;
156
+ }
157
+ .ig__body { min-width: 0; flex: 1; }
158
+ .ig__row { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
159
+ .ig__name { margin: 0; font-size: 1rem; font-weight: 650; color: var(--c-text-1, #fff); }
160
+ .ig__status { font-size: 0.6875rem; font-weight: 650; padding: 0.15rem 0.5rem; border-radius: var(--r-full, 999px); white-space: nowrap; }
161
+ .ig__status--available { background: rgba(52, 195, 143, 0.14); color: #7ee2b8; }
162
+ .ig__status--beta { background: rgba(201, 133, 0, 0.16); color: #f2c66a; }
163
+ .ig__status--soon { background: rgb(var(--ink-rgb, 255 255 255) / 0.06); color: var(--c-text-2, #a3a3a3); }
164
+ .ig__desc { margin: 0.35rem 0 0.6rem; font-size: 0.875rem; line-height: 1.5; color: var(--c-text-2, #a3a3a3); }
165
+ .ig__cat { font-size: 0.75rem; color: var(--c-text-3, #8a8a8a); }
166
+ @media (prefers-reduced-motion: reduce) { .ig__tile, .ig__chip { transition: none; } }
167
+ </style>
@@ -8,6 +8,7 @@ interface Props {
8
8
  const { title = "Layout", subtitle = "Grids, containers, and structural sections." } = Astro.props;
9
9
  ---
10
10
 
11
+ <div class="cq-layout-showcase-cq">
11
12
  <section class="layout-showcase">
12
13
  <div class="container">
13
14
  <div class="showcase-header">
@@ -82,8 +83,9 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
82
83
  </div>
83
84
  </div>
84
85
  </section>
85
-
86
+ </div>
86
87
  <style>
88
+ .cq-layout-showcase-cq { container-type: inline-size; }
87
89
  .layout-showcase {
88
90
  padding: var(--sp-16) 0;
89
91
  position: relative;
@@ -100,8 +102,8 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
100
102
  text-transform: uppercase;
101
103
  letter-spacing: 0.1em;
102
104
  color: var(--c-primary-light);
103
- background: rgba(184,134,11,0.1);
104
- border: 1px solid rgba(184,134,11,0.25);
105
+ background: color-mix(in srgb, var(--c-primary, #b8860b) 10%, transparent);
106
+ border: 1px solid color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
105
107
  border-radius: var(--r-full);
106
108
  margin-bottom: var(--sp-4);
107
109
  }
@@ -123,7 +125,7 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
123
125
  padding: var(--sp-12);
124
126
  background: rgba(10, 10, 10, 0.6);
125
127
  backdrop-filter: blur(20px);
126
- border: 1px solid rgba(255,255,255,0.08);
128
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
127
129
  border-radius: var(--r-xl);
128
130
  margin-bottom: var(--sp-6);
129
131
  box-shadow: 0 20px 60px rgba(0,0,0,0.4);
@@ -159,8 +161,8 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
159
161
  gap: var(--sp-3);
160
162
  }
161
163
  .bento-item {
162
- background: rgba(255,255,255,0.04);
163
- border: 1px solid rgba(255,255,255,0.08);
164
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
165
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
164
166
  border-radius: var(--r-md);
165
167
  min-height: 80px;
166
168
  display: flex;
@@ -173,7 +175,7 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
173
175
  content: '';
174
176
  position: absolute;
175
177
  inset: 0;
176
- background: linear-gradient(135deg, rgba(184,134,11,0.05), transparent);
178
+ background: linear-gradient(135deg, color-mix(in srgb, var(--c-primary, #b8860b) 5%, transparent), transparent);
177
179
  pointer-events: none;
178
180
  }
179
181
  .bento-item--wide {
@@ -200,8 +202,8 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
200
202
  }
201
203
  .split-screen__left,
202
204
  .split-screen__right {
203
- background: rgba(255,255,255,0.04);
204
- border: 1px solid rgba(255,255,255,0.08);
205
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
206
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
205
207
  border-radius: var(--r-md);
206
208
  display: flex;
207
209
  align-items: center;
@@ -213,7 +215,7 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
213
215
  content: '';
214
216
  position: absolute;
215
217
  inset: 0;
216
- background: linear-gradient(135deg, rgba(184,134,11,0.05), transparent);
218
+ background: linear-gradient(135deg, color-mix(in srgb, var(--c-primary, #b8860b) 5%, transparent), transparent);
217
219
  pointer-events: none;
218
220
  }
219
221
  .split-screen__right::before {
@@ -232,8 +234,8 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
232
234
 
233
235
  /* Footer Mockup */
234
236
  .footer-mockup {
235
- background: rgba(255,255,255,0.04);
236
- border: 1px solid rgba(255,255,255,0.08);
237
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
238
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
237
239
  border-radius: var(--r-md);
238
240
  overflow: hidden;
239
241
  }
@@ -244,8 +246,8 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
244
246
  padding: var(--sp-4);
245
247
  }
246
248
  .footer-mockup__brand {
247
- background: rgba(255,255,255,0.03);
248
- border: 1px solid rgba(255,255,255,0.06);
249
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.03);
250
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
249
251
  border-radius: var(--r-sm);
250
252
  min-height: 60px;
251
253
  display: flex;
@@ -258,8 +260,8 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
258
260
  gap: var(--sp-3);
259
261
  }
260
262
  .footer-mockup__col {
261
- background: rgba(255,255,255,0.03);
262
- border: 1px solid rgba(255,255,255,0.06);
263
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.03);
264
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
263
265
  border-radius: var(--r-sm);
264
266
  min-height: 60px;
265
267
  display: flex;
@@ -267,7 +269,7 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
267
269
  justify-content: center;
268
270
  }
269
271
  .footer-mockup__bottom {
270
- border-top: 1px solid rgba(255,255,255,0.06);
272
+ border-top: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
271
273
  padding: var(--sp-3) var(--sp-4);
272
274
  display: flex;
273
275
  align-items: center;
@@ -283,7 +285,7 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
283
285
  .usage-code {
284
286
  text-align: center;
285
287
  padding: var(--sp-4);
286
- background: rgba(255,255,255,0.02);
288
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
287
289
  border-radius: var(--r-md);
288
290
  }
289
291
  .usage-code code {
@@ -292,7 +294,7 @@ const { title = "Layout", subtitle = "Grids, containers, and structural sections
292
294
  color: var(--c-primary-light);
293
295
  }
294
296
 
295
- @media (max-width: 640px) {
297
+ @container (max-width: 640px) {
296
298
  .preview-stage { padding: var(--sp-8) var(--sp-4); }
297
299
  .bento-grid {
298
300
  grid-template-columns: 1fr 1fr;
@@ -0,0 +1,96 @@
1
+ ---
2
+ /**
3
+ * LogoCloudSection — High-trust partner and client brand wall with monochrome glass badges.
4
+ *
5
+ * @param {string} title - Section headline. Default is 'TRUSTED BY MODERN TECH STACKS'.
6
+ * @param {Array<{name: string, symbol: string}>} logos - Partner entries list.
7
+ */
8
+ interface Props {
9
+ title?: string;
10
+ logos?: Array<{ name: string; symbol: string }>;
11
+ }
12
+
13
+ const {
14
+ title = 'POWERING FORWARD-THINKING WEB PROJECTS',
15
+ logos = [
16
+ { name: 'Vercel', symbol: '▲' },
17
+ { name: 'Cloudflare', symbol: '☁' },
18
+ { name: 'Supabase', symbol: '⚡' },
19
+ { name: 'TailwindCSS', symbol: '≋' },
20
+ { name: 'Netlify', symbol: '◈' },
21
+ { name: 'Docker', symbol: '⚓' },
22
+ ],
23
+ } = Astro.props;
24
+ ---
25
+
26
+ <section class="logo-cloud">
27
+ <div class="logo-cloud__inner">
28
+ <p class="logo-cloud__title">{title}</p>
29
+ <div class="logo-cloud__grid">
30
+ {logos.map((logo) => (
31
+ <div class="logo-badge">
32
+ <span class="logo-badge__symbol">{logo.symbol}</span>
33
+ <span class="logo-badge__name">{logo.name}</span>
34
+ </div>
35
+ ))}
36
+ </div>
37
+ </div>
38
+ </section>
39
+
40
+ <style>
41
+ .logo-cloud {
42
+ padding: var(--sp-8, 2rem) var(--sp-6, 1.5rem);
43
+ width: 100%;
44
+ font-family: var(--font-sans, system-ui, sans-serif);
45
+ }
46
+
47
+ .logo-cloud__inner {
48
+ max-width: 1100px;
49
+ margin: 0 auto;
50
+ text-align: center;
51
+ }
52
+
53
+ .logo-cloud__title {
54
+ font-size: 0.75rem;
55
+ font-weight: 800;
56
+ letter-spacing: 0.12em;
57
+ color: var(--c-text-3, #737373);
58
+ text-transform: uppercase;
59
+ margin-bottom: 1.5rem;
60
+ }
61
+
62
+ .logo-cloud__grid {
63
+ display: flex;
64
+ flex-wrap: wrap;
65
+ align-items: center;
66
+ justify-content: center;
67
+ gap: 16px;
68
+ }
69
+
70
+ .logo-badge {
71
+ display: inline-flex;
72
+ align-items: center;
73
+ gap: 10px;
74
+ padding: 0.65rem 1.4rem;
75
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
76
+ backdrop-filter: blur(12px);
77
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
78
+ border-radius: var(--r-full, 9999px);
79
+ color: var(--c-text-2, #a3a3a3);
80
+ font-size: 0.88rem;
81
+ font-weight: 700;
82
+ transition: all 0.25s ease;
83
+ }
84
+
85
+ .logo-badge:hover {
86
+ color: var(--c-text-1, #ffffff);
87
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.06);
88
+ border-color: color-mix(in srgb, var(--c-primary, #b8860b) 40%, transparent);
89
+ transform: translateY(-2px);
90
+ }
91
+
92
+ .logo-badge__symbol {
93
+ font-size: 1.1rem;
94
+ color: var(--c-primary-light, #d4a017);
95
+ }
96
+ </style>
@@ -0,0 +1,93 @@
1
+ ---
2
+ /**
3
+ * LogoWallGrid — Static grid of customer wordmarks with hairline dividers and
4
+ * an optional headline stat. Logos render as text wordmarks by default; pass
5
+ * image URLs to use real logos.
6
+ *
7
+ * @param {string} title - Small heading above the grid.
8
+ * @param {Array<{name: string, src?: string, href?: string}>} logos - Customers.
9
+ * @param {number} columns - Columns on desktop (3|4|6).
10
+ * @param {string} variant - Grid style (divided|cards|plain).
11
+ * @param {string} size - Vertical rhythm (sm|md|lg).
12
+ * @param {string} className - Extra CSS class.
13
+ */
14
+ interface Logo { name: string; src?: string; href?: string }
15
+ interface Props {
16
+ title?: string;
17
+ logos?: Logo[];
18
+ columns?: 3 | 4 | 6;
19
+ variant?: 'divided' | 'cards' | 'plain';
20
+ size?: 'sm' | 'md' | 'lg';
21
+ className?: string;
22
+ }
23
+
24
+ const {
25
+ title = 'Powering 12,000+ teams, from startups to the Fortune 500',
26
+ logos = [
27
+ { name: 'Northwind' }, { name: 'Lumen' }, { name: 'Orbitly' }, { name: 'Civic' },
28
+ { name: 'Driftly' }, { name: 'Acme' }, { name: 'Helix' }, { name: 'Nimbus' },
29
+ ],
30
+ columns = 4,
31
+ variant = 'divided',
32
+ size = 'md',
33
+ className = '',
34
+ } = Astro.props;
35
+
36
+ const id = `lwg-${Math.random().toString(36).slice(2, 8)}`;
37
+ const glyphs = [
38
+ '<circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="3.5" fill="currentColor"/>',
39
+ '<path d="M12 3 21 20H3z"/>',
40
+ '<rect x="4" y="4" width="16" height="16" rx="4"/><path d="M4 12h16"/>',
41
+ '<path d="M4 18 12 4l8 14M8 12h8"/>',
42
+ ];
43
+ ---
44
+
45
+ <div class="cq-logo-wall-grid-cq">
46
+ <section class={`lwg lwg--${variant} lwg--${size} ${className}`} aria-labelledby={id} style={`--lwg-cols:${columns}`}>
47
+ <div class="lwg__inner">
48
+ <h2 id={id} class="lwg__title">{title}</h2>
49
+ <ul class="lwg__grid">
50
+ {logos.map((l, i) => {
51
+ const inner = l.src
52
+ ? <img src={l.src} alt={l.name} loading="lazy" decoding="async" />
53
+ : (
54
+ <span class="lwg__word">
55
+ <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linejoin="round" aria-hidden="true" set:html={glyphs[i % glyphs.length]}></svg>
56
+ {l.name}
57
+ </span>
58
+ );
59
+ return (
60
+ <li class="lwg__cell">
61
+ {l.href ? <a href={l.href} class="lwg__link">{inner}</a> : inner}
62
+ </li>
63
+ );
64
+ })}
65
+ </ul>
66
+ </div>
67
+ </section>
68
+ </div>
69
+ <style>
70
+ .cq-logo-wall-grid-cq { container-type: inline-size; }
71
+ .lwg {
72
+ --lwg-py: 4.5rem;
73
+ padding: var(--lwg-py) var(--sp-6, 1.5rem);
74
+ background: var(--c-bg, #050505);
75
+ }
76
+ .lwg--sm { --lwg-py: 3rem; }
77
+ .lwg--lg { --lwg-py: 6.5rem; }
78
+ .lwg__inner { max-width: 1120px; margin: 0 auto; }
79
+ .lwg__title { margin: 0 auto 2.5rem; max-width: 560px; text-align: center; font-size: 1rem; font-weight: 550; line-height: 1.5; color: var(--c-text-2, #a3a3a3); text-wrap: balance; }
80
+ .lwg__grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(var(--lwg-cols), minmax(0, 1fr)); }
81
+ .lwg--divided .lwg__grid { gap: 1px; background: rgb(var(--ink-rgb, 255 255 255) / 0.07); border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.07); border-radius: var(--r-lg, 20px); overflow: hidden; }
82
+ .lwg--cards .lwg__grid { gap: 0.75rem; }
83
+ .lwg__cell { display: grid; place-items: center; min-height: 112px; padding: 1.25rem; background: var(--c-bg, #050505); }
84
+ .lwg--cards .lwg__cell { 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)); }
85
+ .lwg--plain .lwg__cell { background: transparent; }
86
+ .lwg__word { display: inline-flex; align-items: center; gap: 0.5rem; font-size: 1.25rem; font-weight: 750; letter-spacing: -0.03em; color: var(--c-text-2, #a3a3a3); transition: color 0.25s ease; }
87
+ .lwg__cell:hover .lwg__word { color: var(--c-text-1, #fff); }
88
+ .lwg__cell img { max-width: 140px; max-height: 40px; object-fit: contain; filter: grayscale(1) brightness(1.6); opacity: 0.75; transition: opacity 0.25s ease, filter 0.25s ease; }
89
+ .lwg__cell:hover img { opacity: 1; filter: none; }
90
+ .lwg__link { display: grid; place-items: center; width: 100%; height: 100%; min-height: 44px; text-decoration: none; border-radius: 8px; }
91
+ .lwg__link:focus-visible { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 2px; }
92
+ @container (max-width: 760px) { .lwg__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
93
+ </style>
@@ -8,6 +8,7 @@ interface Props {
8
8
  const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigation patterns." } = Astro.props;
9
9
  ---
10
10
 
11
+ <div class="cq-navigation-showcase-cq">
11
12
  <section class="navigation-showcase">
12
13
  <div class="container">
13
14
  <div class="showcase-header">
@@ -62,8 +63,9 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
62
63
  </div>
63
64
  </div>
64
65
  </section>
65
-
66
+ </div>
66
67
  <style>
68
+ .cq-navigation-showcase-cq { container-type: inline-size; }
67
69
  .navigation-showcase {
68
70
  padding: var(--sp-16) 0;
69
71
  position: relative;
@@ -80,8 +82,8 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
80
82
  text-transform: uppercase;
81
83
  letter-spacing: 0.1em;
82
84
  color: var(--c-primary-light);
83
- background: rgba(184,134,11,0.1);
84
- border: 1px solid rgba(184,134,11,0.25);
85
+ background: color-mix(in srgb, var(--c-primary, #b8860b) 10%, transparent);
86
+ border: 1px solid color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
85
87
  border-radius: var(--r-full);
86
88
  margin-bottom: var(--sp-4);
87
89
  }
@@ -103,7 +105,7 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
103
105
  padding: var(--sp-12);
104
106
  background: rgba(10, 10, 10, 0.6);
105
107
  backdrop-filter: blur(20px);
106
- border: 1px solid rgba(255,255,255,0.08);
108
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
107
109
  border-radius: var(--r-xl);
108
110
  margin-bottom: var(--sp-6);
109
111
  box-shadow: 0 20px 60px rgba(0,0,0,0.4);
@@ -127,8 +129,8 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
127
129
  align-items: center;
128
130
  justify-content: space-between;
129
131
  padding: 0.85rem 1.5rem;
130
- background: rgba(255,255,255,0.04);
131
- border: 1px solid rgba(255,255,255,0.08);
132
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
133
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
132
134
  border-radius: var(--r-lg);
133
135
  backdrop-filter: blur(10px);
134
136
  }
@@ -166,16 +168,16 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
166
168
  font-weight: 600;
167
169
  font-family: var(--font-sans);
168
170
  background: linear-gradient(135deg, var(--c-primary-light), var(--c-primary));
169
- color: #0a0a0a;
171
+ color: var(--c-on-primary, #0a0a0a);
170
172
  border: none;
171
173
  border-radius: var(--r-md);
172
174
  cursor: pointer;
173
- box-shadow: 0 4px 16px rgba(184,134,11,0.25);
175
+ box-shadow: 0 4px 16px color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
174
176
  transition: all 0.25s ease;
175
177
  }
176
178
  .navbar-mock__cta:hover {
177
179
  transform: translateY(-1px);
178
- box-shadow: 0 6px 24px rgba(184,134,11,0.35);
180
+ box-shadow: 0 6px 24px color-mix(in srgb, var(--c-primary, #b8860b) 35%, transparent);
179
181
  }
180
182
 
181
183
  /* Tabs Mockup */
@@ -185,7 +187,7 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
185
187
  align-items: flex-end;
186
188
  gap: var(--sp-6);
187
189
  padding: 0 var(--sp-2);
188
- border-bottom: 2px solid rgba(255,255,255,0.08);
190
+ border-bottom: 2px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
189
191
  }
190
192
  .tabs-mock__tab {
191
193
  padding: 0.7rem 0.5rem;
@@ -245,7 +247,7 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
245
247
  .usage-code {
246
248
  text-align: center;
247
249
  padding: var(--sp-4);
248
- background: rgba(255,255,255,0.02);
250
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
249
251
  border-radius: var(--r-md);
250
252
  }
251
253
  .usage-code code {
@@ -254,7 +256,7 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
254
256
  color: var(--c-primary-light);
255
257
  }
256
258
 
257
- @media (max-width: 768px) {
259
+ @container (max-width: 768px) {
258
260
  .navbar-mock {
259
261
  flex-direction: column;
260
262
  gap: var(--sp-4);
@@ -273,7 +275,7 @@ const { title = "Navigation", subtitle = "Navbars, tabs, breadcrumbs and navigat
273
275
  .preview-stage { padding: var(--sp-8) var(--sp-4); }
274
276
  }
275
277
 
276
- @media (max-width: 480px) {
278
+ @container (max-width: 480px) {
277
279
  .navbar-mock__links {
278
280
  display: none;
279
281
  }