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 = "Cards", subtitle = "Versatile card containers for content display." } = Astro.props;
9
9
  ---
10
10
 
11
+ <div class="cq-cards-showcase-cq">
11
12
  <section class="cards-showcase">
12
13
  <div class="container">
13
14
  <div class="showcase-header">
@@ -74,8 +75,9 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
74
75
  </div>
75
76
  </div>
76
77
  </section>
77
-
78
+ </div>
78
79
  <style>
80
+ .cq-cards-showcase-cq { container-type: inline-size; }
79
81
  .cards-showcase {
80
82
  padding: var(--sp-16) 0;
81
83
  position: relative;
@@ -92,8 +94,8 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
92
94
  text-transform: uppercase;
93
95
  letter-spacing: 0.1em;
94
96
  color: var(--c-primary-light);
95
- background: rgba(184,134,11,0.1);
96
- border: 1px solid rgba(184,134,11,0.25);
97
+ background: color-mix(in srgb, var(--c-primary, #b8860b) 10%, transparent);
98
+ border: 1px solid color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
97
99
  border-radius: var(--r-full);
98
100
  margin-bottom: var(--sp-4);
99
101
  }
@@ -115,7 +117,7 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
115
117
  padding: var(--sp-12);
116
118
  background: rgba(10, 10, 10, 0.6);
117
119
  backdrop-filter: blur(20px);
118
- border: 1px solid rgba(255,255,255,0.08);
120
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
119
121
  border-radius: var(--r-xl);
120
122
  margin-bottom: var(--sp-6);
121
123
  box-shadow: 0 20px 60px rgba(0,0,0,0.4);
@@ -144,16 +146,16 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
144
146
  .glass-card {
145
147
  width: 100%;
146
148
  padding: var(--sp-6);
147
- background: rgba(255,255,255,0.05);
149
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.05);
148
150
  backdrop-filter: blur(16px);
149
- border: 1px solid rgba(255,255,255,0.1);
151
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
150
152
  border-radius: var(--r-lg);
151
153
  text-align: center;
152
154
  transition: all 0.3s ease;
153
155
  }
154
156
  .glass-card:hover {
155
- background: rgba(255,255,255,0.08);
156
- border-color: rgba(184,134,11,0.3);
157
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.08);
158
+ border-color: color-mix(in srgb, var(--c-primary, #b8860b) 30%, transparent);
157
159
  transform: translateY(-4px);
158
160
  box-shadow: 0 12px 40px rgba(0,0,0,0.3);
159
161
  }
@@ -178,15 +180,15 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
178
180
  .profile-card {
179
181
  width: 100%;
180
182
  padding: var(--sp-6);
181
- background: rgba(255,255,255,0.04);
182
- border: 1px solid rgba(255,255,255,0.08);
183
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
184
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
183
185
  border-radius: var(--r-lg);
184
186
  text-align: center;
185
187
  transition: all 0.3s ease;
186
188
  }
187
189
  .profile-card:hover {
188
- background: rgba(255,255,255,0.06);
189
- border-color: rgba(184,134,11,0.25);
190
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.06);
191
+ border-color: color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
190
192
  transform: translateY(-4px);
191
193
  box-shadow: 0 12px 40px rgba(0,0,0,0.3);
192
194
  }
@@ -199,7 +201,7 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
199
201
  display: flex;
200
202
  align-items: center;
201
203
  justify-content: center;
202
- color: #0a0a0a;
204
+ color: var(--c-on-primary, #0a0a0a);
203
205
  }
204
206
  .profile-card__avatar-icon {
205
207
  width: 32px;
@@ -227,7 +229,7 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
227
229
  display: flex;
228
230
  justify-content: center;
229
231
  gap: var(--sp-4);
230
- border-top: 1px solid rgba(255,255,255,0.08);
232
+ border-top: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
231
233
  padding-top: var(--sp-3);
232
234
  }
233
235
  .profile-card__stat {
@@ -243,16 +245,16 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
243
245
  .pricing-card {
244
246
  width: 100%;
245
247
  padding: var(--sp-6);
246
- background: rgba(255,255,255,0.04);
247
- border: 1px solid rgba(184,134,11,0.2);
248
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
249
+ border: 1px solid color-mix(in srgb, var(--c-primary, #b8860b) 20%, transparent);
248
250
  border-radius: var(--r-lg);
249
251
  text-align: center;
250
252
  position: relative;
251
253
  transition: all 0.3s ease;
252
254
  }
253
255
  .pricing-card:hover {
254
- background: rgba(255,255,255,0.06);
255
- border-color: rgba(184,134,11,0.4);
256
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.06);
257
+ border-color: color-mix(in srgb, var(--c-primary, #b8860b) 40%, transparent);
256
258
  transform: translateY(-4px);
257
259
  box-shadow: 0 12px 40px rgba(0,0,0,0.3);
258
260
  }
@@ -263,7 +265,7 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
263
265
  font-weight: 700;
264
266
  text-transform: uppercase;
265
267
  letter-spacing: 0.05em;
266
- color: #0a0a0a;
268
+ color: var(--c-on-primary, #0a0a0a);
267
269
  background: linear-gradient(135deg, var(--c-primary-light), var(--c-primary));
268
270
  border-radius: var(--r-full);
269
271
  margin-bottom: var(--sp-3);
@@ -309,7 +311,7 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
309
311
  font-size: 0.8rem;
310
312
  color: var(--c-text-2);
311
313
  padding: 0.4rem 0;
312
- border-bottom: 1px solid rgba(255,255,255,0.04);
314
+ border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.04);
313
315
  position: relative;
314
316
  padding-left: 1.2rem;
315
317
  }
@@ -329,16 +331,16 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
329
331
  font-size: 0.85rem;
330
332
  font-weight: 700;
331
333
  font-family: var(--font-sans);
332
- color: #0a0a0a;
334
+ color: var(--c-on-primary, #0a0a0a);
333
335
  background: linear-gradient(135deg, var(--c-primary-light), var(--c-primary));
334
336
  border: none;
335
337
  border-radius: var(--r-md);
336
338
  cursor: pointer;
337
339
  transition: all 0.25s ease;
338
- box-shadow: 0 4px 16px rgba(184,134,11,0.25);
340
+ box-shadow: 0 4px 16px color-mix(in srgb, var(--c-primary, #b8860b) 25%, transparent);
339
341
  }
340
342
  .pricing-card__cta:hover {
341
- box-shadow: 0 6px 24px rgba(184,134,11,0.4);
343
+ box-shadow: 0 6px 24px color-mix(in srgb, var(--c-primary, #b8860b) 40%, transparent);
342
344
  transform: translateY(-1px);
343
345
  }
344
346
 
@@ -346,7 +348,7 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
346
348
  .usage-code {
347
349
  text-align: center;
348
350
  padding: var(--sp-4);
349
- background: rgba(255,255,255,0.02);
351
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
350
352
  border-radius: var(--r-md);
351
353
  }
352
354
  .usage-code code {
@@ -355,7 +357,7 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
355
357
  color: var(--c-primary-light);
356
358
  }
357
359
 
358
- @media (max-width: 900px) {
360
+ @container (max-width: 900px) {
359
361
  .card-grid {
360
362
  grid-template-columns: 1fr;
361
363
  max-width: 380px;
@@ -368,7 +370,7 @@ const { title = "Cards", subtitle = "Versatile card containers for content displ
368
370
  padding: var(--sp-8) var(--sp-4);
369
371
  }
370
372
  }
371
- @media (max-width: 640px) {
373
+ @container (max-width: 640px) {
372
374
  .card-grid {
373
375
  max-width: 100%;
374
376
  }
@@ -0,0 +1,141 @@
1
+ ---
2
+ /**
3
+ * CareersOpenings — Job listings section grouped by department, with location,
4
+ * type and remote badges, plus perks strip and a general-application CTA.
5
+ *
6
+ * @param {string} title - Section heading.
7
+ * @param {string} subtitle - Section description.
8
+ * @param {Array<{title: string, department: string, location: string, type: string, remote?: boolean, href: string}>} jobs - Open roles.
9
+ * @param {string[]} perks - Short perk labels.
10
+ * @param {{label: string, href: string}} cta - General application link.
11
+ * @param {string} variant - Row style (list|cards|minimal).
12
+ * @param {string} size - Vertical rhythm (sm|md|lg).
13
+ * @param {string} className - Extra CSS class.
14
+ */
15
+ interface Job { title: string; department: string; location: string; type: string; remote?: boolean; href: string }
16
+ interface Props {
17
+ title?: string;
18
+ subtitle?: string;
19
+ jobs?: Job[];
20
+ perks?: string[];
21
+ cta?: { label: string; href: string };
22
+ variant?: 'list' | 'cards' | 'minimal';
23
+ size?: 'sm' | 'md' | 'lg';
24
+ className?: string;
25
+ }
26
+
27
+ const {
28
+ title = 'Join the team',
29
+ subtitle = 'We’re a small, remote-first crew building tools for the open web.',
30
+ jobs = [
31
+ { title: 'Senior Frontend Engineer', department: 'Engineering', location: 'Europe', type: 'Full-time', remote: true, href: '#' },
32
+ { title: 'Design Systems Engineer', department: 'Engineering', location: 'Americas', type: 'Full-time', remote: true, href: '#' },
33
+ { title: 'Product Designer', department: 'Design', location: 'Barcelona', type: 'Full-time', href: '#' },
34
+ { title: 'Developer Advocate', department: 'Marketing', location: 'Anywhere', type: 'Contract', remote: true, href: '#' },
35
+ ],
36
+ perks = ['Remote-first', '4-day work week', 'Learning budget', 'Equity for everyone'],
37
+ cta = { label: 'Send an open application', href: '#' },
38
+ variant = 'list',
39
+ size = 'md',
40
+ className = '',
41
+ } = Astro.props;
42
+
43
+ const id = `co-${Math.random().toString(36).slice(2, 8)}`;
44
+ const departments = [...new Set(jobs.map((j) => j.department))];
45
+ ---
46
+
47
+ <div class="cq-careers-openings-cq">
48
+ <section class={`co co--${variant} co--${size} ${className}`} aria-labelledby={id}>
49
+ <div class="co__inner">
50
+ <header class="co__head">
51
+ <div>
52
+ <h2 id={id} class="co__title">{title}</h2>
53
+ <p class="co__subtitle">{subtitle}</p>
54
+ </div>
55
+ <span class="co__count">{jobs.length} open roles</span>
56
+ </header>
57
+
58
+ <ul class="co__perks" aria-label="Perks">
59
+ {perks.map((p) => <li>{p}</li>)}
60
+ </ul>
61
+
62
+ {departments.map((d) => (
63
+ <div class="co__dept">
64
+ <h3 class="co__dept-title">{d}</h3>
65
+ <ul class="co__jobs">
66
+ {jobs.filter((j) => j.department === d).map((j) => (
67
+ <li>
68
+ <a class="co__job" href={j.href}>
69
+ <span class="co__job-title">{j.title}</span>
70
+ <span class="co__meta">
71
+ <span class="co__tag">
72
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0z" /><circle cx="12" cy="10" r="3" /></svg>
73
+ {j.location}
74
+ </span>
75
+ <span class="co__tag">{j.type}</span>
76
+ {j.remote && <span class="co__tag co__tag--remote">Remote</span>}
77
+ </span>
78
+ <svg class="co__arrow" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M7 17 17 7M8 7h9v9" /></svg>
79
+ </a>
80
+ </li>
81
+ ))}
82
+ </ul>
83
+ </div>
84
+ ))}
85
+
86
+ {cta && (
87
+ <p class="co__cta">Don’t see your role? <a href={cta.href}>{cta.label}</a></p>
88
+ )}
89
+ </div>
90
+ </section>
91
+ </div>
92
+ <style>
93
+ .cq-careers-openings-cq { container-type: inline-size; }
94
+ .co {
95
+ --co-py: 5.5rem;
96
+ padding: var(--co-py) var(--sp-6, 1.5rem);
97
+ background: var(--c-bg, #050505);
98
+ }
99
+ .co--sm { --co-py: 3.5rem; }
100
+ .co--lg { --co-py: 7.5rem; }
101
+ .co__inner { max-width: 960px; margin: 0 auto; }
102
+ .co__head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1.5rem; flex-wrap: wrap; margin-bottom: 1.5rem; }
103
+ .co__title { margin: 0 0 0.5rem; font-size: clamp(1.9rem, 4vw, 2.75rem); font-weight: 800; letter-spacing: -0.03em; color: var(--c-text-1, #fff); }
104
+ .co__subtitle { margin: 0; font-size: 1.0625rem; color: var(--c-text-2, #a3a3a3); }
105
+ .co__count { padding: 0.35rem 0.85rem; border-radius: 999px; background: rgba(52, 195, 143, 0.12); color: #7ee2b8; font-size: 0.8125rem; font-weight: 650; }
106
+ .co__perks { list-style: none; margin: 0 0 2.5rem; padding: 0; display: flex; flex-wrap: wrap; gap: 0.5rem; }
107
+ .co__perks li { padding: 0.4rem 0.85rem; border-radius: 999px; border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1); font-size: 0.8125rem; color: var(--c-text-2, #a3a3a3); }
108
+ .co__dept + .co__dept { margin-top: 2rem; }
109
+ .co__dept-title { 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); }
110
+ .co__jobs { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.5rem; }
111
+ .co--list .co__jobs { gap: 0; border-top: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.07); }
112
+ .co__job {
113
+ display: grid;
114
+ grid-template-columns: 1fr auto 24px;
115
+ align-items: center;
116
+ gap: 1rem;
117
+ min-height: 64px;
118
+ padding: 0.85rem 1rem;
119
+ color: inherit;
120
+ text-decoration: none;
121
+ transition: background 0.2s ease, border-color 0.2s ease;
122
+ }
123
+ .co--list .co__job { border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.07); }
124
+ .co--cards .co__job { 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)); }
125
+ .co--minimal .co__job { padding-inline: 0; }
126
+ .co__job:hover { background: rgb(var(--ink-rgb, 255 255 255) / 0.035); }
127
+ .co__job:focus-visible { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 2px; border-radius: 10px; }
128
+ .co__job-title { font-size: 1.0625rem; font-weight: 600; color: var(--c-text-1, #fff); }
129
+ .co__meta { display: flex; flex-wrap: wrap; gap: 0.4rem; justify-content: flex-end; }
130
+ .co__tag { display: inline-flex; align-items: center; gap: 0.3rem; padding: 0.2rem 0.6rem; border-radius: 999px; background: rgb(var(--ink-rgb, 255 255 255) / 0.05); font-size: 0.75rem; color: var(--c-text-2, #a3a3a3); }
131
+ .co__tag--remote { background: rgba(57, 135, 229, 0.14); color: #a9cdf7; }
132
+ .co__arrow { color: var(--c-text-3, #8a8a8a); transition: transform 0.2s ease, color 0.2s ease; }
133
+ .co__job:hover .co__arrow { transform: translate(2px, -2px); color: var(--c-text-1, #fff); }
134
+ .co__cta { margin: 2.5rem 0 0; text-align: center; color: var(--c-text-2, #a3a3a3); }
135
+ .co__cta a { color: var(--c-primary-light, #d4a017); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }
136
+ @container (max-width: 640px) {
137
+ .co__job { grid-template-columns: 1fr 24px; }
138
+ .co__meta { grid-column: 1; grid-row: 2; justify-content: flex-start; }
139
+ .co__arrow { grid-row: 1 / span 2; grid-column: 2; }
140
+ }
141
+ </style>
@@ -0,0 +1,151 @@
1
+ ---
2
+ /**
3
+ * ChangelogSection — Release notes timeline with version tags, dates and
4
+ * categorised entries (new / improved / fixed), each labelled with text + icon.
5
+ *
6
+ * @param {string} title - Section heading.
7
+ * @param {string} subtitle - Section description.
8
+ * @param {Array<{version: string, date: string, title: string, changes: Array<{type: 'new'|'improved'|'fixed', text: string}>}>} releases - Releases, newest first.
9
+ * @param {{label: string, href: string}} subscribe - Optional RSS/updates link.
10
+ * @param {string} variant - Layout (timeline|cards|compact).
11
+ * @param {string} size - Vertical rhythm (sm|md|lg).
12
+ * @param {string} className - Extra CSS class.
13
+ */
14
+ interface Change { type: 'new' | 'improved' | 'fixed'; text: string }
15
+ interface Release { version: string; date: string; title: string; changes: Change[] }
16
+ interface Props {
17
+ title?: string;
18
+ subtitle?: string;
19
+ releases?: Release[];
20
+ subscribe?: { label: string; href: string };
21
+ variant?: 'timeline' | 'cards' | 'compact';
22
+ size?: 'sm' | 'md' | 'lg';
23
+ className?: string;
24
+ }
25
+
26
+ const {
27
+ title = 'Changelog',
28
+ subtitle = 'New components, improvements and fixes, shipped every week.',
29
+ releases = [
30
+ { version: 'v0.4.1', date: '2026-11-04', title: 'Multi-page templates & e-commerce suite', changes: [
31
+ { type: 'new', text: 'Three complete production templates: Nova Store, Forma Studio & The Lobby.' },
32
+ { type: 'new', text: '17 e-commerce components with persistent cart, filters and checkout.' },
33
+ { type: 'new', text: 'Light theme tokens with adaptive ink-rgb contrast and theme toggle.' },
34
+ ] },
35
+ { version: 'v0.4.0', date: '2026-11-03', title: 'SVG charts & 24 new sections', changes: [
36
+ { type: 'new', text: '40 zero-dependency SVG charts with tooltips and table fallbacks.' },
37
+ { type: 'new', text: 'Waitlist, terminal and dashboard hero sections.' },
38
+ { type: 'improved', text: 'Chart color tokens validated for color-vision deficiency.' },
39
+ ] },
40
+ { version: 'v0.3.1', date: '2026-10-27', title: 'Localized SEO', changes: [
41
+ { type: 'improved', text: 'Meta titles and descriptions in English, Spanish and Russian.' },
42
+ { type: 'fixed', text: 'Code blocks no longer appear in search snippets.' },
43
+ ] },
44
+ { version: 'v0.3.0', date: '2026-10-12', title: 'Notes & categories', changes: [
45
+ { type: 'new', text: 'Browse-by-category section on the home page.' },
46
+ { type: 'fixed', text: 'Category titles resolve correctly in every locale.' },
47
+ ] },
48
+ ],
49
+ subscribe = { label: 'Subscribe via RSS', href: '#' },
50
+ variant = 'timeline',
51
+ size = 'md',
52
+ className = '',
53
+ } = Astro.props;
54
+
55
+ const id = `cls-${Math.random().toString(36).slice(2, 8)}`;
56
+ const typeLabel = { new: 'New', improved: 'Improved', fixed: 'Fixed' };
57
+ const typeIcon = {
58
+ new: '<path d="M12 5v14M5 12h14"/>',
59
+ improved: '<path d="M12 19V5M5 12l7-7 7 7"/>',
60
+ fixed: '<path d="M20 6 9 17l-5-5"/>',
61
+ };
62
+ const fmtDate = (d: string) => new Date(`${d}T00:00:00Z`).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric', timeZone: 'UTC' });
63
+ ---
64
+
65
+ <div class="cq-changelog-section-cq">
66
+ <section class={`cls cls--${variant} cls--${size} ${className}`} aria-labelledby={id}>
67
+ <div class="cls__inner">
68
+ <header class="cls__head">
69
+ <div>
70
+ <h2 id={id} class="cls__title">{title}</h2>
71
+ <p class="cls__subtitle">{subtitle}</p>
72
+ </div>
73
+ {subscribe && (
74
+ <a class="cls__subscribe" href={subscribe.href}>
75
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16" /><circle cx="5" cy="19" r="1" fill="currentColor" /></svg>
76
+ {subscribe.label}
77
+ </a>
78
+ )}
79
+ </header>
80
+ <ol class="cls__list">
81
+ {releases.map((r) => (
82
+ <li class="cls__release">
83
+ <div class="cls__when">
84
+ <span class="cls__version">{r.version}</span>
85
+ <time datetime={r.date}>{fmtDate(r.date)}</time>
86
+ </div>
87
+ <article class="cls__body">
88
+ <h3 class="cls__release-title">{r.title}</h3>
89
+ <ul class="cls__changes">
90
+ {r.changes.map((c) => (
91
+ <li>
92
+ <span class={`cls__type cls__type--${c.type}`}>
93
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" set:html={typeIcon[c.type]}></svg>
94
+ {typeLabel[c.type]}
95
+ </span>
96
+ <span>{c.text}</span>
97
+ </li>
98
+ ))}
99
+ </ul>
100
+ </article>
101
+ </li>
102
+ ))}
103
+ </ol>
104
+ </div>
105
+ </section>
106
+ </div>
107
+ <style>
108
+ .cq-changelog-section-cq { container-type: inline-size; }
109
+ .cls {
110
+ --cls-py: 5.5rem;
111
+ padding: var(--cls-py) var(--sp-6, 1.5rem);
112
+ background: var(--c-bg, #050505);
113
+ }
114
+ .cls--sm { --cls-py: 3.5rem; }
115
+ .cls--lg { --cls-py: 7.5rem; }
116
+ .cls__inner { max-width: 920px; margin: 0 auto; }
117
+ .cls__head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1rem; flex-wrap: wrap; margin-bottom: 3rem; }
118
+ .cls__title { margin: 0 0 0.5rem; font-size: clamp(1.9rem, 4vw, 2.75rem); font-weight: 800; letter-spacing: -0.03em; color: var(--c-text-1, #fff); }
119
+ .cls__subtitle { margin: 0; font-size: 1.0625rem; color: var(--c-text-2, #a3a3a3); }
120
+ .cls__subscribe { display: inline-flex; align-items: center; gap: 0.45rem; min-height: 44px; padding: 0 1rem; 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-size: 0.875rem; font-weight: 600; text-decoration: none; }
121
+ .cls__subscribe svg { color: #f59e0b; }
122
+ .cls__subscribe:hover { border-color: rgb(var(--ink-rgb, 255 255 255) / 0.3); color: var(--c-text-1, #fff); }
123
+ .cls__subscribe:focus-visible { outline: 2px solid var(--c-primary-light, #d4a017); outline-offset: 2px; }
124
+ .cls__list { list-style: none; margin: 0; padding: 0; display: grid; gap: 2.5rem; }
125
+ .cls__release { display: grid; grid-template-columns: 180px 1fr; gap: 2rem; position: relative; }
126
+ .cls--timeline .cls__release::before { content: ''; position: absolute; left: 196px; top: 10px; bottom: -2.5rem; width: 1px; background: rgb(var(--ink-rgb, 255 255 255) / 0.08); }
127
+ .cls--timeline .cls__release:last-child::before { bottom: 0; }
128
+ .cls--timeline .cls__body { position: relative; padding-left: 2rem; }
129
+ .cls--timeline .cls__body::before { content: ''; position: absolute; left: -21px; top: 7px; width: 9px; height: 9px; border-radius: 50%; background: var(--c-primary-light, #d4a017); box-shadow: 0 0 0 4px var(--c-bg, #050505); }
130
+ .cls--cards .cls__body { padding: 1.5rem; border-radius: var(--r-lg, 18px); 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)); }
131
+ .cls--compact .cls__list { gap: 1.5rem; }
132
+ .cls--compact .cls__release { grid-template-columns: 1fr; gap: 0.5rem; }
133
+ .cls--compact .cls__when { flex-direction: row; align-items: center; }
134
+ .cls__when { display: flex; flex-direction: column; gap: 0.4rem; align-items: flex-start; }
135
+ .cls__version { padding: 0.2rem 0.6rem; border-radius: 6px; background: rgb(var(--ink-rgb, 255 255 255) / 0.06); border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1); font-family: var(--font-mono, monospace); font-size: 0.8125rem; color: var(--c-text-1, #fff); }
136
+ .cls__when time { font-size: 0.8125rem; color: var(--c-text-2, #a3a3a3); }
137
+ .cls__release-title { margin: 0 0 1rem; font-size: 1.25rem; font-weight: 700; color: var(--c-text-1, #fff); letter-spacing: -0.015em; }
138
+ .cls__changes { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.75rem; }
139
+ .cls__changes li { display: flex; align-items: flex-start; gap: 0.75rem; font-size: 0.9375rem; line-height: 1.55; color: var(--c-text-2, #c4c4c4); }
140
+ .cls__type { display: inline-flex; align-items: center; gap: 0.3rem; flex-shrink: 0; min-width: 5.5rem; padding: 0.15rem 0.5rem; border-radius: 999px; font-size: 0.75rem; font-weight: 650; }
141
+ .cls__type--new { background: rgba(57, 135, 229, 0.14); color: #a9cdf7; }
142
+ .cls__type--improved { background: rgba(144, 133, 233, 0.16); color: #c9c3f5; }
143
+ .cls__type--fixed { background: rgba(52, 195, 143, 0.14); color: #7ee2b8; }
144
+ @container (max-width: 680px) {
145
+ .cls__release { grid-template-columns: 1fr; gap: 0.75rem; }
146
+ .cls--timeline .cls__release::before { display: none; }
147
+ .cls--timeline .cls__body { padding-left: 0; }
148
+ .cls--timeline .cls__body::before { display: none; }
149
+ .cls__when { flex-direction: row; align-items: center; }
150
+ }
151
+ </style>
@@ -21,6 +21,7 @@ const {
21
21
  } = Astro.props;
22
22
  ---
23
23
 
24
+ <div class="cq-contact-glass-form-cq">
24
25
  <section class={`contact-section ${className}`} aria-labelledby="contact-title">
25
26
  <div class="contact-bg" aria-hidden="true">
26
27
  <div class="contact-glow"></div>
@@ -115,8 +116,9 @@ const {
115
116
  </div>
116
117
  </div>
117
118
  </section>
118
-
119
+ </div>
119
120
  <style>
121
+ .cq-contact-glass-form-cq { container-type: inline-size; }
120
122
  .contact-section {
121
123
  position: relative;
122
124
  padding: var(--sp-20, 5rem) var(--sp-6, 1.5rem);
@@ -163,7 +165,7 @@ const {
163
165
  font-weight: 700;
164
166
  letter-spacing: 0.06em;
165
167
  text-transform: uppercase;
166
- background: rgba(184, 134, 11, 0.12);
168
+ background: color-mix(in srgb, var(--c-primary, #b8860b) 12%, transparent);
167
169
  color: #eab308;
168
170
  border: 1px solid rgba(234, 179, 8, 0.25);
169
171
  margin-bottom: var(--sp-4, 1rem);
@@ -218,7 +220,7 @@ const {
218
220
  gap: 1rem;
219
221
  padding: 1rem 1.25rem;
220
222
  background: rgba(15, 23, 42, 0.5);
221
- border: 1px solid rgba(255, 255, 255, 0.06);
223
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
222
224
  border-radius: 14px;
223
225
  backdrop-filter: blur(10px);
224
226
  }
@@ -227,7 +229,7 @@ const {
227
229
  width: 40px;
228
230
  height: 40px;
229
231
  border-radius: 10px;
230
- background: rgba(255, 255, 255, 0.05);
232
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.05);
231
233
  color: #eab308;
232
234
  display: flex;
233
235
  align-items: center;
@@ -261,7 +263,7 @@ const {
261
263
  .contact-form {
262
264
  background: rgba(15, 23, 42, 0.7);
263
265
  backdrop-filter: blur(24px);
264
- border: 1px solid rgba(255, 255, 255, 0.1);
266
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
265
267
  border-radius: var(--r-2xl, 24px);
266
268
  padding: clamp(1.75rem, 4vw, 2.5rem);
267
269
  box-shadow: 0 25px 50px -15px rgba(0, 0, 0, 0.7);
@@ -303,7 +305,7 @@ const {
303
305
  width: 100%;
304
306
  padding: 0.75rem 1rem;
305
307
  background: rgba(0, 0, 0, 0.35);
306
- border: 1px solid rgba(255, 255, 255, 0.1);
308
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1);
307
309
  border-radius: 10px;
308
310
  color: #fff;
309
311
  font-size: 0.92rem;
@@ -346,14 +348,14 @@ const {
346
348
  box-shadow: 0 6px 20px rgba(234, 179, 8, 0.45);
347
349
  }
348
350
 
349
- @media (max-width: 960px) {
351
+ @container (max-width: 960px) {
350
352
  .contact-grid {
351
353
  grid-template-columns: 1fr;
352
354
  gap: 3rem;
353
355
  }
354
356
  }
355
357
 
356
- @media (max-width: 640px) {
358
+ @container (max-width: 640px) {
357
359
  .form-row {
358
360
  grid-template-columns: 1fr;
359
361
  }