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
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* CurvedPathHeading — Typographic heading flowing along an SVG circular or arched trajectory.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} text - Headline text content. Default is 'ASTRO COMPONENTS KIT • ZERO RUNTIME DEPENDENCIES •'.
|
|
6
|
+
* @param {number} size - Pixel container diameter. Default is 260.
|
|
7
|
+
* @param {boolean} animate - Whether the badge rotates continuously. Default is true.
|
|
8
|
+
*/
|
|
9
|
+
interface Props {
|
|
10
|
+
text?: string;
|
|
11
|
+
size?: number;
|
|
12
|
+
animate?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
text = 'ASTRO COMPONENTS KIT • ZERO RUNTIME • PURE CSS •',
|
|
17
|
+
size = 260,
|
|
18
|
+
animate = true,
|
|
19
|
+
} = Astro.props;
|
|
20
|
+
|
|
21
|
+
const pathId = `curve-path-${Math.random().toString(36).substring(2, 8)}`;
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<div class:list={['curved-heading', { 'is-animated': animate }]} style={`--curved-size: ${size}px;`}>
|
|
25
|
+
<svg viewBox="0 0 300 300" width={size} height={size}>
|
|
26
|
+
<defs>
|
|
27
|
+
<path
|
|
28
|
+
id={pathId}
|
|
29
|
+
d="M 150, 150 m -110, 0 a 110,110 0 1,1 220,0 a 110,110 0 1,1 -220,0"
|
|
30
|
+
/>
|
|
31
|
+
</defs>
|
|
32
|
+
<text class="curved-heading__text">
|
|
33
|
+
<textPath href={`#${pathId}`} startOffset="0%">
|
|
34
|
+
{text}
|
|
35
|
+
</textPath>
|
|
36
|
+
</text>
|
|
37
|
+
</svg>
|
|
38
|
+
<div class="curved-heading__core">✦</div>
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
<style>
|
|
42
|
+
.curved-heading {
|
|
43
|
+
position: relative;
|
|
44
|
+
width: var(--curved-size);
|
|
45
|
+
height: var(--curved-size);
|
|
46
|
+
display: inline-flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
justify-content: center;
|
|
49
|
+
font-family: var(--font-sans, system-ui, sans-serif);
|
|
50
|
+
user-select: none;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.curved-heading.is-animated svg {
|
|
54
|
+
animation: curved-spin 20s linear infinite;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.curved-heading__text {
|
|
58
|
+
font-size: 13.5px;
|
|
59
|
+
font-weight: 800;
|
|
60
|
+
letter-spacing: 0.18em;
|
|
61
|
+
text-transform: uppercase;
|
|
62
|
+
fill: var(--c-primary-light, #d4a017);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.curved-heading__core {
|
|
66
|
+
position: absolute;
|
|
67
|
+
width: 48px;
|
|
68
|
+
height: 48px;
|
|
69
|
+
border-radius: 50%;
|
|
70
|
+
background: rgba(184, 134, 11, 0.12);
|
|
71
|
+
border: 1px solid rgba(184, 134, 11, 0.3);
|
|
72
|
+
color: var(--c-accent, #fef3c7);
|
|
73
|
+
display: grid;
|
|
74
|
+
place-items: center;
|
|
75
|
+
font-size: 1.2rem;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@keyframes curved-spin {
|
|
79
|
+
from { transform: rotate(0deg); }
|
|
80
|
+
to { transform: rotate(360deg); }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@media (prefers-reduced-motion: reduce) {
|
|
84
|
+
.curved-heading.is-animated svg { animation: none; }
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* GradientTextMarquee — Continuous kinetic typographic marquee banner with background-clip gold gradient.
|
|
4
|
+
*
|
|
5
|
+
* @param {string[]} phrases - Array of words or slogans to scroll continuously.
|
|
6
|
+
* @param {string} speed - Animation duration string (e.g. '25s'). Default is '20s'.
|
|
7
|
+
* @param {boolean} reverse - Whether the marquee moves in reverse direction.
|
|
8
|
+
*/
|
|
9
|
+
interface Props {
|
|
10
|
+
phrases?: string[];
|
|
11
|
+
speed?: string;
|
|
12
|
+
reverse?: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
phrases = [
|
|
17
|
+
'PERFORMANCE FIRST',
|
|
18
|
+
'ZERO DEPENDENCIES',
|
|
19
|
+
'ACCESSIBLE WCAG AA',
|
|
20
|
+
'ASTRO 5 READY',
|
|
21
|
+
'DARK GLASS MORPHISM',
|
|
22
|
+
],
|
|
23
|
+
speed = '20s',
|
|
24
|
+
reverse = false,
|
|
25
|
+
} = Astro.props;
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
<div class="grad-marquee" style={`--marquee-speed: ${speed};`} aria-label="Animated slogan marquee">
|
|
29
|
+
<div class:list={['grad-marquee__track', { 'is-reverse': reverse }]}>
|
|
30
|
+
{phrases.map((phrase) => (
|
|
31
|
+
<span class="grad-marquee__item">
|
|
32
|
+
<span class="text">{phrase}</span>
|
|
33
|
+
<span class="dot" aria-hidden="true">✦</span>
|
|
34
|
+
</span>
|
|
35
|
+
))}
|
|
36
|
+
{/* Duplicate loop */}
|
|
37
|
+
{phrases.map((phrase) => (
|
|
38
|
+
<span class="grad-marquee__item" aria-hidden="true">
|
|
39
|
+
<span class="text">{phrase}</span>
|
|
40
|
+
<span class="dot" aria-hidden="true">✦</span>
|
|
41
|
+
</span>
|
|
42
|
+
))}
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<style>
|
|
47
|
+
.grad-marquee {
|
|
48
|
+
position: relative;
|
|
49
|
+
width: 100%;
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
padding: var(--sp-4, 1rem) 0;
|
|
52
|
+
user-select: none;
|
|
53
|
+
mask-image: linear-gradient(90deg, transparent, #000 15%, #000 85%, transparent);
|
|
54
|
+
-webkit-mask-image: linear-gradient(90deg, transparent, #000 15%, #000 85%, transparent);
|
|
55
|
+
font-family: var(--font-sans, system-ui, sans-serif);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.grad-marquee__track {
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: center;
|
|
61
|
+
gap: 2rem;
|
|
62
|
+
width: max-content;
|
|
63
|
+
animation: marquee-roll var(--marquee-speed) linear infinite;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.grad-marquee__track:hover {
|
|
67
|
+
animation-play-state: paused;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.grad-marquee__track.is-reverse {
|
|
71
|
+
animation-direction: reverse;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.grad-marquee__item {
|
|
75
|
+
display: inline-flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
gap: 2rem;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.grad-marquee__item .text {
|
|
81
|
+
font-size: clamp(1.8rem, 4vw, 3.2rem);
|
|
82
|
+
font-weight: 900;
|
|
83
|
+
letter-spacing: 0.05em;
|
|
84
|
+
text-transform: uppercase;
|
|
85
|
+
background: linear-gradient(135deg, #ffffff 0%, #fef3c7 40%, #d4a017 80%, #b8860b 100%);
|
|
86
|
+
-webkit-background-clip: text;
|
|
87
|
+
-webkit-text-fill-color: transparent;
|
|
88
|
+
background-clip: text;
|
|
89
|
+
white-space: nowrap;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.grad-marquee__item .dot {
|
|
93
|
+
color: var(--c-primary-light, #d4a017);
|
|
94
|
+
font-size: 1.2rem;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@keyframes marquee-roll {
|
|
98
|
+
from { transform: translateX(0); }
|
|
99
|
+
to { transform: translateX(-50%); }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@media (prefers-reduced-motion: reduce) {
|
|
103
|
+
.grad-marquee__track { animation: none; overflow-x: auto; }
|
|
104
|
+
}
|
|
105
|
+
</style>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* HackerDecodeText — Cyberpunk Matrix-style randomized character deciphering effect on hover.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} text - Final decoded text string. Default is 'CYBERNETIC SYSTEM READY'.
|
|
6
|
+
* @param {string} tag - HTML heading or paragraph tag. Default is 'h3'.
|
|
7
|
+
* @param {string} className - Optional CSS class names.
|
|
8
|
+
*/
|
|
9
|
+
interface Props {
|
|
10
|
+
text?: string;
|
|
11
|
+
tag?: 'h1' | 'h2' | 'h3' | 'h4' | 'p' | 'span';
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
text = 'CYBERNETIC PROTOCOL ONLINE',
|
|
17
|
+
tag: Tag = 'h3',
|
|
18
|
+
className = '',
|
|
19
|
+
} = Astro.props;
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
<Tag
|
|
23
|
+
class:list={['hacker-text', className]}
|
|
24
|
+
data-hacker-text={text}
|
|
25
|
+
title="Hover to decode"
|
|
26
|
+
>
|
|
27
|
+
{text}
|
|
28
|
+
</Tag>
|
|
29
|
+
|
|
30
|
+
<style>
|
|
31
|
+
.hacker-text {
|
|
32
|
+
font-family: var(--font-mono, 'JetBrains Mono', monospace);
|
|
33
|
+
font-size: clamp(1.2rem, 3vw, 2rem);
|
|
34
|
+
font-weight: 800;
|
|
35
|
+
color: var(--c-primary-light, #d4a017);
|
|
36
|
+
letter-spacing: 0.08em;
|
|
37
|
+
cursor: default;
|
|
38
|
+
user-select: none;
|
|
39
|
+
transition: text-shadow 0.2s ease;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.hacker-text:hover {
|
|
43
|
+
text-shadow: 0 0 12px rgba(212, 160, 23, 0.7);
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
46
|
+
|
|
47
|
+
<script>
|
|
48
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;:,.<>?';
|
|
49
|
+
|
|
50
|
+
function setupHackerText() {
|
|
51
|
+
document.querySelectorAll('[data-hacker-text]').forEach((el) => {
|
|
52
|
+
if (el.getAttribute('data-hacker-init')) return;
|
|
53
|
+
el.setAttribute('data-hacker-init', 'true');
|
|
54
|
+
|
|
55
|
+
const original = el.getAttribute('data-hacker-text') || el.textContent || '';
|
|
56
|
+
let interval: any = null;
|
|
57
|
+
|
|
58
|
+
el.addEventListener('pointerenter', () => {
|
|
59
|
+
let iteration = 0;
|
|
60
|
+
clearInterval(interval);
|
|
61
|
+
|
|
62
|
+
interval = setInterval(() => {
|
|
63
|
+
el.textContent = original
|
|
64
|
+
.split('')
|
|
65
|
+
.map((char, index) => {
|
|
66
|
+
if (char === ' ') return ' ';
|
|
67
|
+
if (index < iteration) {
|
|
68
|
+
return original[index];
|
|
69
|
+
}
|
|
70
|
+
return chars[Math.floor(Math.random() * chars.length)];
|
|
71
|
+
})
|
|
72
|
+
.join('');
|
|
73
|
+
|
|
74
|
+
if (iteration >= original.length) {
|
|
75
|
+
clearInterval(interval);
|
|
76
|
+
}
|
|
77
|
+
iteration += 1 / 2;
|
|
78
|
+
}, 30);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
setupHackerText();
|
|
84
|
+
document.addEventListener('astro:page-load', setupHackerText);
|
|
85
|
+
</script>
|
|
@@ -21,3 +21,7 @@ export { default as ShadowRevealText } from './ShadowRevealText.astro';
|
|
|
21
21
|
export { default as StrokeHeadingOutline } from './StrokeHeadingOutline.astro';
|
|
22
22
|
export { default as Text3DLayer } from './Text3DLayer.astro';
|
|
23
23
|
export { default as TypewriterText } from './TypewriterText.astro';
|
|
24
|
+
export { default as AnimatedCounterText } from './AnimatedCounterText.astro';
|
|
25
|
+
export { default as GradientTextMarquee } from './GradientTextMarquee.astro';
|
|
26
|
+
export { default as CurvedPathHeading } from './CurvedPathHeading.astro';
|
|
27
|
+
export { default as HackerDecodeText } from './HackerDecodeText.astro';
|
package/src/styles/global.css
CHANGED
|
@@ -26,6 +26,21 @@
|
|
|
26
26
|
--c-text-2: #a3a3a3;
|
|
27
27
|
--c-text-3: #737373;
|
|
28
28
|
|
|
29
|
+
/* Data-viz — categorical slots (fixed order, CVD-validated for dark surfaces) */
|
|
30
|
+
--chart-1: #3987e5; /* blue */
|
|
31
|
+
--chart-2: #d95926; /* orange */
|
|
32
|
+
--chart-3: #199e70; /* aqua */
|
|
33
|
+
--chart-4: #c98500; /* yellow */
|
|
34
|
+
--chart-5: #d55181; /* magenta */
|
|
35
|
+
--chart-6: #2f9e2f; /* green */
|
|
36
|
+
--chart-7: #9085e9; /* violet */
|
|
37
|
+
--chart-8: #e66767; /* red */
|
|
38
|
+
--chart-pos: #34c38f; /* status: good */
|
|
39
|
+
--chart-neg: #f06a6a; /* status: critical */
|
|
40
|
+
--chart-grid: rgba(255,255,255,0.07);
|
|
41
|
+
--chart-axis: rgba(255,255,255,0.18);
|
|
42
|
+
--chart-surface: #0d0d0f;
|
|
43
|
+
|
|
29
44
|
/* Typography */
|
|
30
45
|
--font-sans: 'Inter', system-ui, sans-serif;
|
|
31
46
|
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
|
|
@@ -35,8 +50,10 @@
|
|
|
35
50
|
--sp-2: 0.5rem; /* 8px */
|
|
36
51
|
--sp-3: 0.75rem; /* 12px */
|
|
37
52
|
--sp-4: 1rem; /* 16px */
|
|
53
|
+
--sp-5: 1.25rem; /* 20px */
|
|
38
54
|
--sp-6: 1.5rem; /* 24px */
|
|
39
55
|
--sp-8: 2rem; /* 32px */
|
|
56
|
+
--sp-10: 2.5rem; /* 40px */
|
|
40
57
|
--sp-12: 3rem; /* 48px */
|
|
41
58
|
--sp-16: 4rem; /* 64px */
|
|
42
59
|
|
|
@@ -47,11 +64,54 @@
|
|
|
47
64
|
--r-xl: 28px;
|
|
48
65
|
--r-full: 9999px;
|
|
49
66
|
|
|
67
|
+
/* Theme helpers (used by e-commerce components and templates) */
|
|
68
|
+
--ink-rgb: 255 255 255; /* foreground for translucent lines/fills */
|
|
69
|
+
--paper-rgb: 5 5 5; /* background for translucent surfaces */
|
|
70
|
+
--c-on-primary: #050505; /* text on primary (gold) buttons */
|
|
71
|
+
--c-success: #34d399;
|
|
72
|
+
--c-danger: #f87171;
|
|
73
|
+
--c-warning: #fbbf24;
|
|
74
|
+
color-scheme: dark;
|
|
75
|
+
|
|
50
76
|
/* Sidebar */
|
|
51
|
-
--sidebar-w:
|
|
77
|
+
--sidebar-w: 280px;
|
|
52
78
|
--header-h: 85px;
|
|
53
79
|
}
|
|
54
80
|
|
|
81
|
+
/* ── Light theme (opt-in: <html data-theme="light">) ──────── */
|
|
82
|
+
[data-theme='light'] {
|
|
83
|
+
--c-bg: #f6f5f2;
|
|
84
|
+
--c-bg-1: #ffffff;
|
|
85
|
+
--c-bg-2: #ecebe6;
|
|
86
|
+
--c-surface: rgba(17,17,17,0.025);
|
|
87
|
+
--c-border: rgba(17,17,17,0.09);
|
|
88
|
+
|
|
89
|
+
--c-primary: #8a6500;
|
|
90
|
+
--c-primary-light: #8a6500;
|
|
91
|
+
--c-primary-glow: rgba(138,101,0,0.12);
|
|
92
|
+
--c-accent: #5c4300;
|
|
93
|
+
|
|
94
|
+
--c-text-1: #121212;
|
|
95
|
+
--c-text-2: #4a4a4a;
|
|
96
|
+
--c-text-3: #666666;
|
|
97
|
+
|
|
98
|
+
--ink-rgb: 17 17 17;
|
|
99
|
+
--paper-rgb: 255 255 255;
|
|
100
|
+
--c-on-primary: #ffffff;
|
|
101
|
+
--c-success: #047857;
|
|
102
|
+
--c-danger: #b91c1c;
|
|
103
|
+
--c-warning: #92400e;
|
|
104
|
+
--pm-ink-s: 65%;
|
|
105
|
+
--pm-ink-l: 36%;
|
|
106
|
+
--pm-soft-s: 35%;
|
|
107
|
+
--pm-soft-l: 82%;
|
|
108
|
+
--pm-soft-a: 0.9;
|
|
109
|
+
--chart-grid: rgba(17,24,39,0.08);
|
|
110
|
+
--chart-axis: rgba(17,24,39,0.22);
|
|
111
|
+
--chart-surface: #ffffff;
|
|
112
|
+
color-scheme: light;
|
|
113
|
+
}
|
|
114
|
+
|
|
55
115
|
/* ── Base ────────────────────────────────────────────────── */
|
|
56
116
|
html {
|
|
57
117
|
font-family: var(--font-sans);
|
|
@@ -140,3 +200,55 @@ body::before {
|
|
|
140
200
|
.anim-delay-1 { animation-delay: 0.1s; }
|
|
141
201
|
.anim-delay-2 { animation-delay: 0.2s; }
|
|
142
202
|
.anim-delay-3 { animation-delay: 0.3s; }
|
|
203
|
+
|
|
204
|
+
/* ── Site header: keep every nav link on one line on tablets / small laptops ── */
|
|
205
|
+
@media (min-width: 769px) and (max-width: 1180px) {
|
|
206
|
+
#site-nav a { padding-inline: 0.55rem; font-size: 0.82rem; }
|
|
207
|
+
#site-nav .gh-link { font-size: 0; gap: 0; }
|
|
208
|
+
#site-nav .gh-link svg { width: 18px; height: 18px; }
|
|
209
|
+
}
|
|
210
|
+
@media (min-width: 769px) and (max-width: 960px) {
|
|
211
|
+
header .docs-header__brand .brand-logo { height: 46px; }
|
|
212
|
+
#site-nav { gap: 0; }
|
|
213
|
+
#site-nav a { padding-inline: 0.45rem; font-size: 0.78rem; }
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* ── Light theme adapters for shared components ──────────────
|
|
217
|
+
Scoped component styles assume a dark surface; these overrides
|
|
218
|
+
(:root[data-theme='light'] wins on specificity) keep them legible. */
|
|
219
|
+
:root[data-theme='light'] .badge--default { background: rgba(17,17,17,0.06); color: #3f3f3f; border-color: rgba(17,17,17,0.12); }
|
|
220
|
+
:root[data-theme='light'] .badge--success { background: rgba(4,120,87,0.1); color: #047857; border-color: rgba(4,120,87,0.25); }
|
|
221
|
+
:root[data-theme='light'] .badge--warning { background: rgba(146,64,14,0.1); color: #92400e; border-color: rgba(146,64,14,0.25); }
|
|
222
|
+
:root[data-theme='light'] .badge--danger { background: rgba(185,28,28,0.08); color: #b91c1c; border-color: rgba(185,28,28,0.22); }
|
|
223
|
+
:root[data-theme='light'] .badge--info { background: rgba(29,78,216,0.08); color: #1d4ed8; border-color: rgba(29,78,216,0.22); }
|
|
224
|
+
|
|
225
|
+
:root[data-theme='light'] .cns--glass .cns__box { background: #fff; border-color: rgba(17,17,17,0.08); box-shadow: 0 30px 60px -40px rgba(17,17,17,0.35); }
|
|
226
|
+
:root[data-theme='light'] .cns__icon { background: rgba(17,17,17,0.04); border-color: rgba(17,17,17,0.08); }
|
|
227
|
+
:root[data-theme='light'] .cns__input { background: #fff; border-color: rgba(17,17,17,0.18); }
|
|
228
|
+
:root[data-theme='light'] .cns__btn { background: #121212; color: #fff; }
|
|
229
|
+
:root[data-theme='light'] .cns__btn:hover { background: var(--c-primary); }
|
|
230
|
+
:root[data-theme='light'] .cns__perks svg { color: #047857; }
|
|
231
|
+
|
|
232
|
+
:root[data-theme='light'] .fms { background: var(--c-bg-1); border-top-color: rgba(17,17,17,0.08); }
|
|
233
|
+
:root[data-theme='light'] .fms__top { border-bottom-color: rgba(17,17,17,0.08); }
|
|
234
|
+
:root[data-theme='light'] .fms__news-field { background: #fff; border-color: rgba(17,17,17,0.16); }
|
|
235
|
+
:root[data-theme='light'] .fms__news-field button { background: rgba(17,17,17,0.05); }
|
|
236
|
+
:root[data-theme='light'] .fms__news-field button:hover { color: #fff; }
|
|
237
|
+
:root[data-theme='light'] .fms__status { border-color: rgba(17,17,17,0.1); }
|
|
238
|
+
|
|
239
|
+
:root[data-theme='light'] .logo-badge { background: #fff; border-color: rgba(17,17,17,0.08); }
|
|
240
|
+
:root[data-theme='light'] .step-nav__line { background: rgba(17,17,17,0.1); }
|
|
241
|
+
|
|
242
|
+
:root[data-theme='light'] .anim-input,
|
|
243
|
+
:root[data-theme='light'] .custom-select,
|
|
244
|
+
:root[data-theme='light'] .stepper { background: #fff; border-color: rgba(17,17,17,0.14); }
|
|
245
|
+
:root[data-theme='light'] .radio-circle { border-color: rgba(17,17,17,0.3); background: #fff; }
|
|
246
|
+
|
|
247
|
+
:root[data-theme='light'] .step-nav__circle { background: #fff; border-color: rgba(17,17,17,0.18); }
|
|
248
|
+
:root[data-theme='light'] .step-nav__item--complete .step-nav__circle { background: rgba(4,120,87,0.1); border-color: #047857; color: #047857; }
|
|
249
|
+
:root[data-theme='light'] .step-nav__item--active .step-nav__circle { color: #fff; background: var(--c-primary); border-color: var(--c-primary); box-shadow: none; }
|
|
250
|
+
:root[data-theme='light'] .status-feed__line { background: rgba(17,24,39,0.1); }
|
|
251
|
+
:root[data-theme='light'] .status-feed__bullet { background: var(--c-bg-1); border-color: rgba(17,24,39,0.16); }
|
|
252
|
+
:root[data-theme='light'] .status-feed__item--done .status-feed__bullet { background: rgba(4,120,87,0.1); border-color: #047857; color: #047857; }
|
|
253
|
+
:root[data-theme='light'] .status-feed__item--active .status-feed__bullet { background: var(--c-primary-glow); border-color: var(--c-primary-light); color: var(--c-primary-light); box-shadow: none; }
|
|
254
|
+
:root[data-theme='light'] .status-feed__content { background: var(--c-bg-1); border-color: rgba(17,24,39,0.08); }
|