astro-component-kit 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +139 -27
  2. package/bin/cli.js +67 -0
  3. package/bin/installer.js +179 -0
  4. package/package.json +35 -5
  5. package/src/components/index.ts +2 -0
  6. package/src/components/lib/Galaxy3D.astro +249 -137
  7. package/src/components/lib/app/AppSidebar.astro +249 -0
  8. package/src/components/lib/app/AppTopbar.astro +284 -0
  9. package/src/components/lib/app/ArrivalsBoard.astro +176 -0
  10. package/src/components/lib/app/AuthCard.astro +213 -0
  11. package/src/components/lib/app/DataTable.astro +346 -0
  12. package/src/components/lib/app/GuestProfileCard.astro +133 -0
  13. package/src/components/lib/app/HousekeepingBoard.astro +189 -0
  14. package/src/components/lib/app/PageHeader.astro +157 -0
  15. package/src/components/lib/app/PlanUsageCard.astro +112 -0
  16. package/src/components/lib/app/RoomRack.astro +207 -0
  17. package/src/components/lib/app/SettingsSection.astro +96 -0
  18. package/src/components/lib/app/SwitchRow.astro +71 -0
  19. package/src/components/lib/app/TeamMembers.astro +190 -0
  20. package/src/components/lib/app/app-icons.ts +52 -0
  21. package/src/components/lib/app/index.ts +19 -0
  22. package/src/components/lib/charts/AreaChart.astro +4 -4
  23. package/src/components/lib/charts/BarChart.astro +3 -3
  24. package/src/components/lib/charts/ChartFrame.astro +10 -10
  25. package/src/components/lib/charts/DonutChart.astro +2 -2
  26. package/src/components/lib/charts/DumbbellChart.astro +1 -1
  27. package/src/components/lib/charts/ForecastLineChart.astro +1 -1
  28. package/src/components/lib/charts/GaugeChart.astro +1 -1
  29. package/src/components/lib/charts/HeatmapChart.astro +1 -1
  30. package/src/components/lib/charts/HorizontalBarChart.astro +2 -2
  31. package/src/components/lib/charts/KpiStatTile.astro +4 -4
  32. package/src/components/lib/charts/LinearProgressGauge.astro +4 -4
  33. package/src/components/lib/charts/MetricDeltaTable.astro +3 -3
  34. package/src/components/lib/charts/RadarMetricChart.astro +4 -4
  35. package/src/components/lib/charts/RadialBarChart.astro +1 -1
  36. package/src/components/lib/charts/RetentionCohortTable.astro +2 -2
  37. package/src/components/lib/charts/TreemapChart.astro +1 -1
  38. package/src/components/lib/ecommerce/CartDrawer.astro +483 -0
  39. package/src/components/lib/ecommerce/CartPageList.astro +290 -0
  40. package/src/components/lib/ecommerce/CartToast.astro +276 -0
  41. package/src/components/lib/ecommerce/CategoryTiles.astro +143 -0
  42. package/src/components/lib/ecommerce/CheckoutForm.astro +423 -0
  43. package/src/components/lib/ecommerce/CountdownBanner.astro +230 -0
  44. package/src/components/lib/ecommerce/FilterBar.astro +278 -0
  45. package/src/components/lib/ecommerce/FilterSidebar.astro +405 -0
  46. package/src/components/lib/ecommerce/LiveActivityToast.astro +213 -0
  47. package/src/components/lib/ecommerce/OrderSummary.astro +295 -0
  48. package/src/components/lib/ecommerce/ProductBuyBox.astro +247 -0
  49. package/src/components/lib/ecommerce/ProductCardMinimal.astro +229 -0
  50. package/src/components/lib/ecommerce/ProductGallery.astro +145 -0
  51. package/src/components/lib/ecommerce/ProductGrid.astro +118 -0
  52. package/src/components/lib/ecommerce/ProductMedia.astro +113 -0
  53. package/src/components/lib/ecommerce/ProductRating.astro +78 -0
  54. package/src/components/lib/ecommerce/ProductToolbar.astro +93 -0
  55. package/src/components/lib/ecommerce/PromoBar.astro +145 -0
  56. package/src/components/lib/ecommerce/StockIndicator.astro +127 -0
  57. package/src/components/lib/ecommerce/StoreHeader.astro +446 -0
  58. package/src/components/lib/ecommerce/StoreHero.astro +260 -0
  59. package/src/components/lib/ecommerce/StoreProductCard.astro +307 -0
  60. package/src/components/lib/ecommerce/TrustBadges.astro +101 -0
  61. package/src/components/lib/ecommerce/VariantPicker.astro +145 -0
  62. package/src/components/lib/ecommerce/cart-store.ts +151 -0
  63. package/src/components/lib/ecommerce/catalog-filter.ts +62 -0
  64. package/src/components/lib/ecommerce/index.ts +34 -0
  65. package/src/components/lib/ecommerce/product-icons.ts +28 -0
  66. package/src/components/lib/ecommerce/types.ts +70 -0
  67. package/src/components/lib/forms/AnimatedInput.astro +4 -2
  68. package/src/components/lib/forms/CustomRadioGroup.astro +3 -1
  69. package/src/components/lib/index.ts +2 -0
  70. package/src/components/lib/layout/BentoGrid3.astro +6 -4
  71. package/src/components/lib/layout/CenterFixedBox.astro +2 -2
  72. package/src/components/lib/layout/CenteredContainer.astro +4 -2
  73. package/src/components/lib/layout/ClusterHorizontal.astro +2 -2
  74. package/src/components/lib/layout/FeatureHero.astro +4 -2
  75. package/src/components/lib/layout/FooterCenteredMinimal.astro +4 -2
  76. package/src/components/lib/layout/FullBleedSection.astro +2 -2
  77. package/src/components/lib/layout/GalleryGrid4.astro +2 -2
  78. package/src/components/lib/layout/HolyGrailGrid.astro +11 -9
  79. package/src/components/lib/layout/LandingSectionSplit.astro +5 -3
  80. package/src/components/lib/layout/MasonryGrid.astro +2 -2
  81. package/src/components/lib/layout/MinimalFooterGrid.astro +1 -1
  82. package/src/components/lib/layout/ScrollSnapSection.astro +1 -1
  83. package/src/components/lib/layout/SidebarLayoutWrapper.astro +4 -2
  84. package/src/components/lib/layout/SplitScreenLayout.astro +3 -3
  85. package/src/components/lib/layout/StepLayoutVertical.astro +1 -1
  86. package/src/components/lib/layout/StickySidebarWrapper.astro +4 -2
  87. package/src/components/lib/sections/AgencyContactBrief.astro +194 -0
  88. package/src/components/lib/sections/AgencyFooterCta.astro +94 -0
  89. package/src/components/lib/sections/AgencyHeader.astro +161 -0
  90. package/src/components/lib/sections/AgencyHeroKinetic.astro +172 -0
  91. package/src/components/lib/sections/AgencyServicesList.astro +113 -0
  92. package/src/components/lib/sections/AgencyTeamGrid.astro +111 -0
  93. package/src/components/lib/sections/AgencyWorkGrid.astro +147 -0
  94. package/src/components/lib/sections/BlogGridSection.astro +9 -7
  95. package/src/components/lib/sections/ButtonsShowcase.astro +20 -18
  96. package/src/components/lib/sections/CardsShowcase.astro +28 -26
  97. package/src/components/lib/sections/CareersOpenings.astro +10 -8
  98. package/src/components/lib/sections/ChangelogSection.astro +20 -7
  99. package/src/components/lib/sections/ContactGlassForm.astro +10 -8
  100. package/src/components/lib/sections/ContactSplitMap.astro +11 -9
  101. package/src/components/lib/sections/CtaAppDownload.astro +13 -11
  102. package/src/components/lib/sections/CtaGlowBanner.astro +12 -10
  103. package/src/components/lib/sections/CtaNewsletterSection.astro +13 -11
  104. package/src/components/lib/sections/CtaSplitImage.astro +13 -11
  105. package/src/components/lib/sections/DataShowcase.astro +23 -21
  106. package/src/components/lib/sections/FaqAccordionSection.astro +8 -8
  107. package/src/components/lib/sections/FaqTwoColumn.astro +9 -7
  108. package/src/components/lib/sections/FeatureAlternatingRows.astro +10 -8
  109. package/src/components/lib/sections/FeatureBentoGrid.astro +13 -11
  110. package/src/components/lib/sections/FeatureIconGrid.astro +6 -6
  111. package/src/components/lib/sections/FeatureTabsShowcase.astro +13 -11
  112. package/src/components/lib/sections/FeatureTimelineFlow.astro +8 -6
  113. package/src/components/lib/sections/FeedbackShowcase.astro +15 -13
  114. package/src/components/lib/sections/FooterMegaSection.astro +13 -11
  115. package/src/components/lib/sections/FormsShowcase.astro +22 -20
  116. package/src/components/lib/sections/HeroDashboardPreview.astro +11 -9
  117. package/src/components/lib/sections/HeroGlass.astro +22 -20
  118. package/src/components/lib/sections/HeroGradient.astro +15 -13
  119. package/src/components/lib/sections/HeroMinimalCentered.astro +10 -10
  120. package/src/components/lib/sections/HeroShowcaseSplit.astro +18 -16
  121. package/src/components/lib/sections/HeroSplit.astro +13 -11
  122. package/src/components/lib/sections/HeroTerminal.astro +14 -12
  123. package/src/components/lib/sections/HeroWaitlist.astro +10 -8
  124. package/src/components/lib/sections/HowItWorksSteps.astro +12 -10
  125. package/src/components/lib/sections/IntegrationsGrid.astro +7 -7
  126. package/src/components/lib/sections/LayoutShowcase.astro +21 -19
  127. package/src/components/lib/sections/LogoCloudSection.astro +4 -4
  128. package/src/components/lib/sections/LogoWallGrid.astro +6 -4
  129. package/src/components/lib/sections/NavigationShowcase.astro +15 -13
  130. package/src/components/lib/sections/OverlaysShowcase.astro +21 -19
  131. package/src/components/lib/sections/PricingComparisonMatrix.astro +15 -13
  132. package/src/components/lib/sections/PricingSinglePlan.astro +13 -11
  133. package/src/components/lib/sections/PricingTierCards.astro +11 -9
  134. package/src/components/lib/sections/PricingToggleCards.astro +13 -13
  135. package/src/components/lib/sections/ShopCategoryHero.astro +103 -0
  136. package/src/components/lib/sections/ShopCollectionMosaic.astro +131 -0
  137. package/src/components/lib/sections/ShopFooterWordmark.astro +100 -0
  138. package/src/components/lib/sections/ShopHeaderEditorial.astro +396 -0
  139. package/src/components/lib/sections/ShopHeroEditorial.astro +151 -0
  140. package/src/components/lib/sections/ShopLookbook.astro +250 -0
  141. package/src/components/lib/sections/ShopNewsletterEditorial.astro +128 -0
  142. package/src/components/lib/sections/ShopProductRail.astro +150 -0
  143. package/src/components/lib/sections/ShopReviewsEditorial.astro +133 -0
  144. package/src/components/lib/sections/ShopValuesMarquee.astro +91 -0
  145. package/src/components/lib/sections/StatsCounterBand.astro +9 -7
  146. package/src/components/lib/sections/StatsDashboardSection.astro +4 -2
  147. package/src/components/lib/sections/StatsMetricShowcase.astro +9 -7
  148. package/src/components/lib/sections/TeamGridSection.astro +12 -10
  149. package/src/components/lib/sections/TestimonialCarousel.astro +10 -8
  150. package/src/components/lib/sections/TestimonialFeatured.astro +7 -5
  151. package/src/components/lib/sections/TestimonialGridSection.astro +7 -7
  152. package/src/components/lib/sections/TestimonialWallGlass.astro +11 -9
  153. package/src/components/lib/sections/TypographyShowcase.astro +10 -8
  154. package/src/components/lib/sections/index.ts +10 -0
  155. package/src/components/lib/templates/ecommerce/StoreCategoryPage.astro +160 -0
  156. package/src/components/lib/templates/ecommerce/StoreCheckoutPage.astro +98 -0
  157. package/src/components/lib/templates/ecommerce/StoreHomePage.astro +191 -0
  158. package/src/components/lib/templates/ecommerce/StoreLayout.astro +169 -0
  159. package/src/components/lib/templates/ecommerce/StoreProductPage.astro +165 -0
  160. package/src/components/lib/templates/ecommerce/data.ts +187 -0
  161. package/src/components/lib/templates/ecommerce/index.ts +14 -0
  162. package/src/components/lib/templates/ecommerce-editorial/EditorialBagPage.astro +52 -0
  163. package/src/components/lib/templates/ecommerce-editorial/EditorialCheckoutPage.astro +123 -0
  164. package/src/components/lib/templates/ecommerce-editorial/EditorialHomePage.astro +102 -0
  165. package/src/components/lib/templates/ecommerce-editorial/EditorialLayout.astro +216 -0
  166. package/src/components/lib/templates/ecommerce-editorial/EditorialProductPage.astro +205 -0
  167. package/src/components/lib/templates/ecommerce-editorial/EditorialShopPage.astro +112 -0
  168. package/src/components/lib/templates/ecommerce-editorial/data.ts +125 -0
  169. package/src/components/lib/templates/ecommerce-editorial/index.ts +16 -0
  170. package/src/components/lib/templates/saas-hotel/AppLayout.astro +83 -0
  171. package/src/components/lib/templates/saas-hotel/DashboardPage.astro +66 -0
  172. package/src/components/lib/templates/saas-hotel/GuestsPage.astro +65 -0
  173. package/src/components/lib/templates/saas-hotel/LandingPage.astro +213 -0
  174. package/src/components/lib/templates/saas-hotel/ReportsPage.astro +63 -0
  175. package/src/components/lib/templates/saas-hotel/ReservationsPage.astro +49 -0
  176. package/src/components/lib/templates/saas-hotel/RoomsPage.astro +48 -0
  177. package/src/components/lib/templates/saas-hotel/SettingsPage.astro +115 -0
  178. package/src/components/lib/templates/saas-hotel/SignInPage.astro +50 -0
  179. package/src/components/lib/templates/saas-hotel/data.ts +229 -0
  180. package/src/components/lib/templates/saas-hotel/index.ts +19 -0
  181. package/src/components/lib/templates/saas-hotel/lobby-theme.css +90 -0
  182. package/src/data/registry/app.ts +93 -0
  183. package/src/data/registry/buttons.ts +3279 -0
  184. package/src/data/registry/cards.ts +1753 -0
  185. package/src/data/registry/charts-svg.ts +557 -0
  186. package/src/data/registry/charts.ts +500 -0
  187. package/src/data/registry/data.ts +986 -0
  188. package/src/data/registry/ecommerce.ts +269 -0
  189. package/src/data/registry/feedback.ts +1824 -0
  190. package/src/data/registry/forms.ts +2513 -0
  191. package/src/data/registry/index.ts +64 -0
  192. package/src/data/registry/layout.ts +206 -0
  193. package/src/data/registry/navigation.ts +936 -0
  194. package/src/data/registry/overlays.ts +1133 -0
  195. package/src/data/registry/sections-extra.ts +397 -0
  196. package/src/data/registry/sections.ts +361 -0
  197. package/src/data/registry/sources.ts +41 -0
  198. package/src/data/registry/templates.ts +414 -0
  199. package/src/data/registry/types.ts +30 -0
  200. package/src/data/registry/typography.ts +777 -0
  201. package/src/mcp/http-server.ts +324 -0
  202. package/src/mcp/index.ts +67 -0
  203. package/src/mcp/installer.ts +178 -0
  204. package/src/mcp/registry-adapter.ts +278 -0
  205. package/src/mcp/stdio-server.ts +11 -0
  206. package/src/mcp/tools.ts +247 -0
  207. package/src/mcp/types.ts +53 -0
  208. package/src/styles/global.css +95 -0
@@ -48,9 +48,9 @@ const chartConfig = {
48
48
 
49
49
  <style>
50
50
  .premium-chart-card {
51
- background: rgba(255, 255, 255, 0.03);
51
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.03);
52
52
  backdrop-filter: blur(12px);
53
- border: 1px solid rgba(255, 255, 255, 0.08);
53
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
54
54
  border-radius: var(--r-xl, 24px);
55
55
  padding: var(--sp-6, 24px);
56
56
  overflow: hidden;
@@ -102,7 +102,7 @@ const chartConfig = {
102
102
  :global(.apexcharts-tooltip) {
103
103
  background: rgba(15, 23, 42, 0.9) !important;
104
104
  backdrop-filter: blur(8px) !important;
105
- border: 1px solid rgba(255, 255, 255, 0.1) !important;
105
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.1) !important;
106
106
  border-radius: 12px !important;
107
107
  color: #fff !important;
108
108
  box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.3) !important;
@@ -175,7 +175,7 @@ const chartConfig = {
175
175
  },
176
176
  grid: {
177
177
  show: config.showGrid,
178
- borderColor: 'rgba(255, 255, 255, 0.05)',
178
+ borderColor: 'rgb(var(--ink-rgb, 255 255 255) / 0.05)',
179
179
  strokeDashArray: 4,
180
180
  },
181
181
  legend: {
@@ -51,9 +51,9 @@ const chartConfig = {
51
51
 
52
52
  <style>
53
53
  .premium-chart-card {
54
- background: rgba(255, 255, 255, 0.03);
54
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.03);
55
55
  backdrop-filter: blur(12px);
56
- border: 1px solid rgba(255, 255, 255, 0.08);
56
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
57
57
  border-radius: var(--r-xl, 24px);
58
58
  padding: var(--sp-6, 24px);
59
59
  width: 100%;
@@ -158,7 +158,7 @@ const chartConfig = {
158
158
  labels: { style: { colors: '#64748b', fontSize: '12px' } },
159
159
  },
160
160
  grid: {
161
- borderColor: 'rgba(255, 255, 255, 0.05)',
161
+ borderColor: 'rgb(var(--ink-rgb, 255 255 255) / 0.05)',
162
162
  strokeDashArray: 4,
163
163
  },
164
164
  legend: {
@@ -133,14 +133,14 @@ const titleId = `cf-${Math.random().toString(36).slice(2, 9)}`;
133
133
  font-family: var(--font-sans, system-ui, sans-serif);
134
134
  }
135
135
  .cf--glass {
136
- background: linear-gradient(160deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.015));
137
- border: 1px solid var(--c-border, rgba(255, 255, 255, 0.07));
136
+ background: linear-gradient(160deg, rgb(var(--ink-rgb, 255 255 255) / 0.045), rgb(var(--ink-rgb, 255 255 255) / 0.015));
137
+ border: 1px solid var(--c-border, rgb(var(--ink-rgb, 255 255 255) / 0.07));
138
138
  backdrop-filter: blur(14px);
139
139
  -webkit-backdrop-filter: blur(14px);
140
140
  }
141
141
  .cf--solid {
142
142
  background: var(--chart-surface, #0d0d0f);
143
- border: 1px solid rgba(255, 255, 255, 0.08);
143
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
144
144
  }
145
145
  .cf--ghost {
146
146
  background: transparent;
@@ -231,12 +231,12 @@ const titleId = `cf-${Math.random().toString(36).slice(2, 9)}`;
231
231
 
232
232
  /* ── Shared mark vocabulary for every chart ───────────── */
233
233
  .cf :global(.cf-grid) {
234
- stroke: var(--chart-grid, rgba(255, 255, 255, 0.07));
234
+ stroke: var(--chart-grid, rgb(var(--ink-rgb, 255 255 255) / 0.07));
235
235
  stroke-width: 1;
236
236
  shape-rendering: crispEdges;
237
237
  }
238
238
  .cf :global(.cf-axis) {
239
- stroke: var(--chart-axis, rgba(255, 255, 255, 0.18));
239
+ stroke: var(--chart-axis, rgb(var(--ink-rgb, 255 255 255) / 0.18));
240
240
  stroke-width: 1;
241
241
  shape-rendering: crispEdges;
242
242
  }
@@ -272,7 +272,7 @@ const titleId = `cf-${Math.random().toString(36).slice(2, 9)}`;
272
272
  outline: none;
273
273
  }
274
274
  .cf :global(.cf-cross) {
275
- stroke: rgba(255, 255, 255, 0.35);
275
+ stroke: rgb(var(--ink-rgb, 255 255 255) / 0.35);
276
276
  stroke-width: 1;
277
277
  opacity: 0;
278
278
  pointer-events: none;
@@ -283,7 +283,7 @@ const titleId = `cf-${Math.random().toString(36).slice(2, 9)}`;
283
283
  opacity: 1;
284
284
  }
285
285
  .cf :global(.cf-hit:focus-visible) {
286
- fill: rgba(255, 255, 255, 0.04);
286
+ fill: rgb(var(--ink-rgb, 255 255 255) / 0.04);
287
287
  }
288
288
 
289
289
  /* ── Tooltip ─────────────────────────────────────────── */
@@ -301,8 +301,8 @@ const titleId = `cf-${Math.random().toString(36).slice(2, 9)}`;
301
301
  max-width: 16rem;
302
302
  padding: 0.55rem 0.7rem;
303
303
  border-radius: var(--r-sm, 8px);
304
- background: rgba(12, 12, 14, 0.94);
305
- border: 1px solid rgba(255, 255, 255, 0.12);
304
+ background: rgb(var(--paper-rgb, 12 12 14) / 0.96);
305
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.12);
306
306
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
307
307
  font-size: 0.75rem;
308
308
  color: var(--c-text-1, #fff);
@@ -359,7 +359,7 @@ const titleId = `cf-${Math.random().toString(36).slice(2, 9)}`;
359
359
  .cf__data td {
360
360
  padding: 0.4rem 0.6rem;
361
361
  text-align: right;
362
- border-bottom: 1px solid rgba(255, 255, 255, 0.06);
362
+ border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
363
363
  white-space: nowrap;
364
364
  }
365
365
  .cf__data th:first-child { text-align: left; }
@@ -48,9 +48,9 @@ const chartConfig = {
48
48
 
49
49
  <style>
50
50
  .premium-chart-card {
51
- background: rgba(255, 255, 255, 0.03);
51
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.03);
52
52
  backdrop-filter: blur(12px);
53
- border: 1px solid rgba(255, 255, 255, 0.08);
53
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
54
54
  border-radius: var(--r-xl, 24px);
55
55
  padding: var(--sp-6, 24px);
56
56
  width: 100%;
@@ -82,7 +82,7 @@ const fmt = (v: number) => formatValue(v, prefix, suffix);
82
82
  data-tip-title={it.label} data-tip={`${ca}::${aLabel}: ${fmt(it.a)}|${cb}::${bLabel}: ${fmt(it.b)}|Δ ${fmt(it.b - it.a)}`}>
83
83
  <rect x={m.l} y={cy - rowH / 2} width={W - m.l - m.r} height={rowH} fill="transparent" />
84
84
  <text class="cf-label" x={m.l - 10} y={cy + 4} text-anchor="end">{it.label}</text>
85
- <line x1={x(it.a)} x2={x(it.b)} y1={cy} y2={cy} stroke="rgba(255,255,255,0.22)" stroke-width="4" stroke-linecap="round" />
85
+ <line x1={x(it.a)} x2={x(it.b)} y1={cy} y2={cy} stroke="rgb(var(--ink-rgb, 255 255 255) / 0.22)" stroke-width="4" stroke-linecap="round" />
86
86
  <circle cx={x(it.a)} cy={cy} r="7" fill={ca} stroke="var(--chart-surface, #0d0d0f)" stroke-width="2" />
87
87
  <circle cx={x(it.b)} cy={cy} r="7" fill={cb} stroke="var(--chart-surface, #0d0d0f)" stroke-width="2" />
88
88
  </g>
@@ -97,7 +97,7 @@ const fmt = (v: number) => formatValue(v, prefix, suffix);
97
97
  ))}
98
98
  {categories.map((c, i) => <text class="cf-label" x={x(i)} y={H - 8} text-anchor="middle">{c}</text>)}
99
99
 
100
- <rect x={anchor[0]} y={m.t} width={W - m.r - anchor[0]} height={H - m.t - m.b} fill="rgba(255,255,255,0.025)" aria-hidden="true" />
100
+ <rect x={anchor[0]} y={m.t} width={W - m.r - anchor[0]} height={H - m.t - m.b} fill="rgb(var(--ink-rgb, 255 255 255) / 0.025)" aria-hidden="true" />
101
101
  <line class="cf-axis" x1={anchor[0]} x2={anchor[0]} y1={m.t} y2={H - m.b} />
102
102
  <text class="cf-label" x={anchor[0] + 6} y={m.t + 10}>Today</text>
103
103
 
@@ -64,7 +64,7 @@ const fmt = (v: number) => formatValue(v, prefix, suffix);
64
64
  >
65
65
  <div class="gc" role="meter" aria-valuemin={0} aria-valuemax={max} aria-valuenow={value} aria-label={`${title}: ${fmt(value)} ${label}, ${(pct * 100).toFixed(0)}%`}>
66
66
  <svg viewBox={`0 0 ${W} ${H}`} aria-hidden="true">
67
- <path d={arcStroke(cx, cy, r, a0, a1)} fill="none" stroke="rgba(255,255,255,0.07)" stroke-width="18" stroke-linecap="round" />
67
+ <path d={arcStroke(cx, cy, r, a0, a1)} fill="none" stroke="rgb(var(--ink-rgb, 255 255 255) / 0.07)" stroke-width="18" stroke-linecap="round" />
68
68
  {pct > 0 && <path class="gc__arc" d={arcStroke(cx, cy, r, a0, a0 + Math.PI * pct)} fill="none" stroke={color} stroke-width="18" stroke-linecap="round" />}
69
69
  <text class="cf-label" x={cx - r} y={H - 2} text-anchor="middle">0</text>
70
70
  <text class="cf-label" x={cx + r} y={H - 2} text-anchor="middle">{fmt(max)}</text>
@@ -117,7 +117,7 @@ const fill = (v: number) => `color-mix(in srgb, ${color} ${Math.round(12 + t(v)
117
117
  }
118
118
  .hm__cell:hover { transform: scale(1.06); }
119
119
  .hm__cell:focus-visible { outline: 2px solid var(--c-text-1, #fff); outline-offset: 1px; }
120
- .hm__v { font-size: 0.6875rem; color: rgba(255, 255, 255, 0.7); font-variant-numeric: tabular-nums; }
120
+ .hm__v { font-size: 0.6875rem; color: rgb(var(--ink-rgb, 255 255 255) / 0.7); font-variant-numeric: tabular-nums; }
121
121
  .hm__v--strong { color: #fff; font-weight: 650; }
122
122
  .hm__scale {
123
123
  display: flex;
@@ -104,7 +104,7 @@ const fmt = (v: number) => formatValue(v, prefix, suffix);
104
104
  }
105
105
  .hb__row:hover,
106
106
  .hb__row:focus-visible {
107
- background: rgba(255, 255, 255, 0.04);
107
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
108
108
  }
109
109
  .hb__row:focus-visible {
110
110
  outline: 2px solid var(--c-primary-light, #d4a017);
@@ -120,7 +120,7 @@ const fmt = (v: number) => formatValue(v, prefix, suffix);
120
120
  .hb__track {
121
121
  height: 10px;
122
122
  border-radius: 4px;
123
- background: rgba(255, 255, 255, 0.04);
123
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.04);
124
124
  overflow: hidden;
125
125
  }
126
126
  .hb__bar {
@@ -75,13 +75,13 @@ const good = invert ? !up : up;
75
75
  transition: border-color 0.25s ease, transform 0.25s ease;
76
76
  }
77
77
  .kpi--glass {
78
- background: linear-gradient(160deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.015));
79
- border: 1px solid var(--c-border, rgba(255, 255, 255, 0.07));
78
+ background: linear-gradient(160deg, rgb(var(--ink-rgb, 255 255 255) / 0.05), rgb(var(--ink-rgb, 255 255 255) / 0.015));
79
+ border: 1px solid var(--c-border, rgb(var(--ink-rgb, 255 255 255) / 0.07));
80
80
  backdrop-filter: blur(14px);
81
81
  }
82
- .kpi--solid { background: var(--chart-surface, #0d0d0f); border: 1px solid rgba(255, 255, 255, 0.08); }
82
+ .kpi--solid { background: var(--chart-surface, #0d0d0f); border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08); }
83
83
  .kpi--ghost { background: transparent; border: 1px solid transparent; padding-inline: 0; }
84
- .kpi--glass:hover, .kpi--solid:hover { border-color: rgba(255, 255, 255, 0.16); transform: translateY(-2px); }
84
+ .kpi--glass:hover, .kpi--solid:hover { border-color: rgb(var(--ink-rgb, 255 255 255) / 0.16); transform: translateY(-2px); }
85
85
  .kpi--sm { --kpi-pad: var(--sp-4, 1rem); --kpi-val: 1.5rem; }
86
86
  .kpi--lg { --kpi-pad: var(--sp-8, 2rem); --kpi-val: 2.5rem; }
87
87
  .kpi__head { display: flex; justify-content: space-between; align-items: center; gap: 0.75rem; }
@@ -18,7 +18,7 @@ const {
18
18
  { label: 'SSR Execution', value: 45, color: '#d4a017' },
19
19
  { label: 'Asset Caching', value: 25, color: '#38bdf8' },
20
20
  { label: 'Edge Worker', value: 15, color: '#a855f7' },
21
- { label: 'Free Headroom', value: 15, color: 'rgba(255,255,255,0.1)' },
21
+ { label: 'Free Headroom', value: 15, color: 'rgb(var(--ink-rgb, 255 255 255) / 0.1)' },
22
22
  ],
23
23
  total = '100%',
24
24
  } = Astro.props;
@@ -64,9 +64,9 @@ const totalSum = segments.reduce((acc, s) => acc + s.value, 0) || 100;
64
64
  width: 100%;
65
65
  max-width: 440px;
66
66
  padding: var(--sp-6, 1.5rem);
67
- background: rgba(255, 255, 255, 0.02);
67
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
68
68
  backdrop-filter: blur(16px);
69
- border: 1px solid rgba(255, 255, 255, 0.08);
69
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
70
70
  border-radius: var(--r-xl, 20px);
71
71
  font-family: var(--font-sans, system-ui, sans-serif);
72
72
  }
@@ -94,7 +94,7 @@ const totalSum = segments.reduce((acc, s) => acc + s.value, 0) || 100;
94
94
  height: 10px;
95
95
  border-radius: var(--r-full, 9999px);
96
96
  overflow: hidden;
97
- background: rgba(255, 255, 255, 0.05);
97
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.05);
98
98
  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.5);
99
99
  }
100
100
 
@@ -101,16 +101,16 @@ const fmt = (v: number) => formatValue(v, prefix, suffix, false);
101
101
  .md__table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; font-variant-numeric: tabular-nums; }
102
102
  .md__table th, .md__table td {
103
103
  padding: 0.7rem 0.6rem;
104
- border-bottom: 1px solid rgba(255, 255, 255, 0.06);
104
+ border-bottom: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.06);
105
105
  text-align: left;
106
106
  vertical-align: middle;
107
107
  }
108
108
  .md__table thead th { font-size: 0.6875rem; font-weight: 600; color: var(--c-text-3, #8a8a8a); text-transform: uppercase; letter-spacing: 0.04em; }
109
109
  .md__table tbody tr { transition: background 0.2s ease; }
110
- .md__table tbody tr:hover { background: rgba(255, 255, 255, 0.03); }
110
+ .md__table tbody tr:hover { background: rgb(var(--ink-rgb, 255 255 255) / 0.03); }
111
111
  .md__table tbody th { font-weight: 500; min-width: 9rem; }
112
112
  .md__label { display: block; color: var(--c-text-1, #fff); margin-bottom: 0.35rem; }
113
- .md__bar { display: block; height: 4px; border-radius: 2px; background: rgba(255, 255, 255, 0.05); overflow: hidden; }
113
+ .md__bar { display: block; height: 4px; border-radius: 2px; background: rgb(var(--ink-rgb, 255 255 255) / 0.05); overflow: hidden; }
114
114
  .md__bar span { display: block; height: 100%; border-radius: 2px; }
115
115
  .md__num { text-align: right !important; white-space: nowrap; color: var(--c-text-2, #a3a3a3); }
116
116
  .md__strong { color: var(--c-text-1, #fff); font-weight: 650; }
@@ -112,9 +112,9 @@ const dataPoints = data
112
112
  flex-direction: column;
113
113
  align-items: center;
114
114
  padding: var(--sp-6, 1.5rem);
115
- background: rgba(255, 255, 255, 0.02);
115
+ background: rgb(var(--ink-rgb, 255 255 255) / 0.02);
116
116
  backdrop-filter: blur(16px);
117
- border: 1px solid rgba(255, 255, 255, 0.08);
117
+ border: 1px solid rgb(var(--ink-rgb, 255 255 255) / 0.08);
118
118
  border-radius: var(--r-xl, 24px);
119
119
  width: 100%;
120
120
  max-width: fit-content;
@@ -136,12 +136,12 @@ const dataPoints = data
136
136
 
137
137
  .radar-web {
138
138
  fill: none;
139
- stroke: rgba(255, 255, 255, 0.08);
139
+ stroke: rgb(var(--ink-rgb, 255 255 255) / 0.08);
140
140
  stroke-width: 1;
141
141
  }
142
142
 
143
143
  .radar-spoke {
144
- stroke: rgba(255, 255, 255, 0.08);
144
+ stroke: rgb(var(--ink-rgb, 255 255 255) / 0.08);
145
145
  stroke-width: 1;
146
146
  }
147
147
 
@@ -67,7 +67,7 @@ const rings = items.slice(0, 8).map((it, i) => {
67
67
  {rings.map((r) => (
68
68
  <g class="cf-mark cf-dim" tabindex="0" role="img" aria-label={`${r.label}: ${Math.round(r.pct * 100)}%`}
69
69
  data-tip-title={r.label} data-tip={`${r.color}::${r.value}${r.max ? ` / ${r.max}` : '%'}`}>
70
- <path d={arcStroke(cx, cy, r.r, start, start + sweepRad)} fill="none" stroke="rgba(255,255,255,0.06)" stroke-width={stroke} stroke-linecap="round" />
70
+ <path d={arcStroke(cx, cy, r.r, start, start + sweepRad)} fill="none" stroke="rgb(var(--ink-rgb, 255 255 255) / 0.06)" stroke-width={stroke} stroke-linecap="round" />
71
71
  {r.pct > 0 && (
72
72
  <path class="rb__arc" d={arcStroke(cx, cy, r.r, start, start + sweepRad * r.pct)} fill="none" stroke={r.color} stroke-width={stroke} stroke-linecap="round" />
73
73
  )}
@@ -114,10 +114,10 @@ const avg = cols.map((_, i) => {
114
114
  padding: 0.55rem 0.4rem;
115
115
  text-align: center;
116
116
  border-radius: 4px;
117
- color: rgba(255, 255, 255, 0.78);
117
+ color: rgb(var(--ink-rgb, 255 255 255) / 0.78);
118
118
  }
119
119
  .rc__cell[data-strong] { color: #fff; font-weight: 650; }
120
- .rc__empty { background: rgba(255, 255, 255, 0.02); border-radius: 4px; }
120
+ .rc__empty { background: rgb(var(--ink-rgb, 255 255 255) / 0.02); border-radius: 4px; }
121
121
  .rc__avg { text-align: center; color: var(--c-text-1, #fff); font-weight: 600; padding-top: 0.5rem; }
122
122
  .sr-only {
123
123
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
@@ -84,7 +84,7 @@ const GAP = 2;
84
84
  {showLabel && (
85
85
  <>
86
86
  <text x={r.x + 10} y={r.y + 20} fill="#fff" font-size="12" font-weight="650">{it.label}</text>
87
- <text x={r.x + 10} y={r.y + 36} fill="rgba(255,255,255,0.8)" font-size="11">{fmt(it.value)}</text>
87
+ <text x={r.x + 10} y={r.y + 36} fill="rgb(var(--ink-rgb, 255 255 255) / 0.8)" font-size="11">{fmt(it.value)}</text>
88
88
  </>
89
89
  )}
90
90
  </g>