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