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 = "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:
|
|
96
|
-
border: 1px solid
|
|
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
|
|
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:
|
|
149
|
+
background: rgb(var(--ink-rgb, 255 255 255) / 0.05);
|
|
148
150
|
backdrop-filter: blur(16px);
|
|
149
|
-
border: 1px solid
|
|
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:
|
|
156
|
-
border-color:
|
|
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:
|
|
182
|
-
border: 1px solid
|
|
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:
|
|
189
|
-
border-color:
|
|
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
|
|
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:
|
|
247
|
-
border: 1px solid
|
|
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:
|
|
255
|
-
border-color:
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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
|
-
@
|
|
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
|
-
@
|
|
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:
|
|
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
|
|
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:
|
|
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
|
|
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
|
|
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
|
-
@
|
|
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
|
-
@
|
|
358
|
+
@container (max-width: 640px) {
|
|
357
359
|
.form-row {
|
|
358
360
|
grid-template-columns: 1fr;
|
|
359
361
|
}
|