@oalacea/chaosui 0.5.0 → 0.5.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/buttons/cta-brutal/css/cta-brutal.module.css +175 -0
- package/{components/buttons/cta-brutal → buttons/cta-brutal/css}/index.tsx +25 -3
- package/buttons/cta-brutal/tailwind/index.tsx +85 -0
- package/buttons/dead-button/css/dead-button.module.css +216 -0
- package/buttons/dead-button/tailwind/index.tsx +90 -0
- package/buttons/deeper-button/css/deeper-button.module.css +141 -0
- package/{components/buttons/deeper-button → buttons/deeper-button/css}/index.tsx +14 -3
- package/buttons/deeper-button/tailwind/index.tsx +78 -0
- package/buttons/dual-choice/css/dual-choice.module.css +176 -0
- package/{components/buttons/dual-choice → buttons/dual-choice/css}/index.tsx +2 -0
- package/buttons/dual-choice/tailwind/index.tsx +89 -0
- package/{components/buttons/tension-bar → buttons/tension-bar/css}/index.tsx +22 -5
- package/buttons/tension-bar/css/tension-bar.module.css +204 -0
- package/buttons/tension-bar/tailwind/index.tsx +122 -0
- package/decorative/inscription/css/index.tsx +66 -0
- package/decorative/inscription/css/inscription.module.css +160 -0
- package/decorative/inscription/tailwind/index.tsx +91 -0
- package/decorative/ornaments/css/index.tsx +136 -0
- package/decorative/ornaments/css/ornaments.module.css +144 -0
- package/decorative/ornaments/tailwind/index.tsx +122 -0
- package/decorative/rune-symbols/css/index.tsx +116 -0
- package/decorative/rune-symbols/css/rune-symbols.module.css +116 -0
- package/decorative/rune-symbols/tailwind/index.tsx +108 -0
- package/decorative/sheet-music/css/index.tsx +144 -0
- package/decorative/sheet-music/css/sheet-music.module.css +152 -0
- package/decorative/sheet-music/tailwind/index.tsx +111 -0
- package/layout/horizontal-scroll/css/horizontal-scroll.module.css +93 -0
- package/{components/layout/horizontal-scroll → layout/horizontal-scroll/css}/index.tsx +41 -5
- package/layout/horizontal-scroll/tailwind/index.tsx +108 -0
- package/layout/spec-grid/css/index.tsx +103 -0
- package/layout/spec-grid/css/spec-grid.module.css +125 -0
- package/layout/spec-grid/tailwind/index.tsx +91 -0
- package/{components/layout/tower-pricing → layout/tower-pricing/css}/index.tsx +43 -8
- package/layout/tower-pricing/css/tower-pricing.module.css +177 -0
- package/layout/tower-pricing/tailwind/index.tsx +106 -0
- package/layout/tracklist/css/index.tsx +96 -0
- package/layout/tracklist/css/tracklist.module.css +141 -0
- package/layout/tracklist/tailwind/index.tsx +92 -0
- package/{components/layout/void-frame → layout/void-frame/css}/index.tsx +31 -3
- package/layout/void-frame/css/void-frame.module.css +141 -0
- package/layout/void-frame/tailwind/index.tsx +64 -0
- package/navigation/brutal-nav/css/brutal-nav.module.css +178 -0
- package/{components/navigation/brutal-nav → navigation/brutal-nav/css}/index.tsx +12 -3
- package/navigation/brutal-nav/tailwind/index.tsx +95 -0
- package/{components/navigation/progress-dots → navigation/progress-dots/css}/index.tsx +7 -2
- package/{components/navigation/progress-dots → navigation/progress-dots/css}/progress-dots.module.css +74 -13
- package/navigation/progress-dots/tailwind/index.tsx +105 -0
- package/{components/navigation/scattered-nav → navigation/scattered-nav/css}/scattered-nav.module.css +9 -1
- package/navigation/scattered-nav/tailwind/index.tsx +77 -0
- package/{components/navigation/scroll-indicator → navigation/scroll-indicator/css}/index.tsx +18 -4
- package/{components/navigation/scroll-indicator → navigation/scroll-indicator/css}/scroll-indicator.module.css +57 -10
- package/navigation/scroll-indicator/tailwind/index.tsx +107 -0
- package/{components/navigation/vertical-nav → navigation/vertical-nav/css}/index.tsx +13 -3
- package/{components/navigation/vertical-nav → navigation/vertical-nav/css}/vertical-nav.module.css +24 -5
- package/navigation/vertical-nav/tailwind/index.tsx +91 -0
- package/package.json +8 -33
- package/bin/cli.js +0 -308
- package/components/backgrounds/light-beams/index.tsx +0 -80
- package/components/backgrounds/light-beams/light-beams.module.css +0 -27
- package/components/buttons/cta-brutal/cta-brutal.module.css +0 -81
- package/components/buttons/dead-button/dead-button.module.css +0 -111
- package/components/buttons/deeper-button/deeper-button.module.css +0 -76
- package/components/buttons/dual-choice/dual-choice.module.css +0 -90
- package/components/buttons/tension-bar/tension-bar.module.css +0 -105
- package/components/decorative/coffee-stain/coffee-stain.module.css +0 -24
- package/components/decorative/coffee-stain/index.tsx +0 -55
- package/components/decorative/ornaments/index.tsx +0 -51
- package/components/decorative/ornaments/ornaments.module.css +0 -33
- package/components/decorative/rune-symbols/index.tsx +0 -55
- package/components/decorative/rune-symbols/rune-symbols.module.css +0 -22
- package/components/layout/horizontal-scroll/horizontal-scroll.module.css +0 -30
- package/components/layout/spec-grid/index.tsx +0 -56
- package/components/layout/spec-grid/spec-grid.module.css +0 -21
- package/components/layout/tower-pricing/tower-pricing.module.css +0 -27
- package/components/layout/tracklist/index.tsx +0 -45
- package/components/layout/tracklist/tracklist.module.css +0 -24
- package/components/layout/void-frame/void-frame.module.css +0 -38
- package/components/navigation/brutal-nav/brutal-nav.module.css +0 -85
- package/components/navigation/hexagon-menu/css/hexagon-menu.module.css +0 -55
- package/components/navigation/hexagon-menu/css/index.tsx +0 -35
- package/components/navigation/hexagon-menu/tailwind/index.tsx +0 -53
- /package/{components/backgrounds → backgrounds}/glow-orbs/glow-orbs.module.css +0 -0
- /package/{components/backgrounds → backgrounds}/glow-orbs/index.tsx +0 -0
- /package/{components/backgrounds → backgrounds}/noise-canvas/index.tsx +0 -0
- /package/{components/backgrounds → backgrounds}/noise-canvas/noise-canvas.module.css +0 -0
- /package/{components/backgrounds → backgrounds}/particle-field/index.tsx +0 -0
- /package/{components/backgrounds → backgrounds}/particle-field/particle-field.module.css +0 -0
- /package/{components/buttons → buttons}/chaos-button/chaos-button.module.css +0 -0
- /package/{components/buttons → buttons}/chaos-button/index.tsx +0 -0
- /package/{components/buttons/dead-button → buttons/dead-button/css}/index.tsx +0 -0
- /package/{components/buttons → buttons}/glitch-button/glitch-button.module.css +0 -0
- /package/{components/buttons → buttons}/glitch-button/index.tsx +0 -0
- /package/{components/chaos-vars.css → chaos-vars.css} +0 -0
- /package/{components/cyber → cyber}/cyber-avatar/css/cyber-avatar.module.css +0 -0
- /package/{components/cyber → cyber}/cyber-avatar/css/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-avatar/tailwind/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-input/css/cyber-input.module.css +0 -0
- /package/{components/cyber → cyber}/cyber-input/css/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-input/tailwind/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-loader/css/cyber-loader.module.css +0 -0
- /package/{components/cyber → cyber}/cyber-loader/css/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-loader/tailwind/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-modal/css/cyber-modal.module.css +0 -0
- /package/{components/cyber → cyber}/cyber-modal/css/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-modal/tailwind/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-slider/css/cyber-slider.module.css +0 -0
- /package/{components/cyber → cyber}/cyber-slider/css/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-slider/tailwind/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-tooltip/css/cyber-tooltip.module.css +0 -0
- /package/{components/cyber → cyber}/cyber-tooltip/css/index.tsx +0 -0
- /package/{components/cyber → cyber}/cyber-tooltip/tailwind/index.tsx +0 -0
- /package/{components/effects → effects}/cursor-follower/cursor-follower.module.css +0 -0
- /package/{components/effects → effects}/cursor-follower/index.tsx +0 -0
- /package/{components/effects → effects}/glitch-image/css/glitch-image.module.css +0 -0
- /package/{components/effects → effects}/glitch-image/css/index.tsx +0 -0
- /package/{components/effects → effects}/glitch-image/tailwind/index.tsx +0 -0
- /package/{components/effects → effects}/glowing-border/css/glowing-border.module.css +0 -0
- /package/{components/effects → effects}/glowing-border/css/index.tsx +0 -0
- /package/{components/effects → effects}/glowing-border/tailwind/index.tsx +0 -0
- /package/{components/effects → effects}/screen-distortion/index.tsx +0 -0
- /package/{components/effects → effects}/screen-distortion/screen-distortion.module.css +0 -0
- /package/{components/effects → effects}/warning-tape/index.tsx +0 -0
- /package/{components/effects → effects}/warning-tape/warning-tape.module.css +0 -0
- /package/{components/layout → layout}/data-grid/css/data-grid.module.css +0 -0
- /package/{components/layout → layout}/data-grid/css/index.tsx +0 -0
- /package/{components/layout → layout}/data-grid/tailwind/index.tsx +0 -0
- /package/{components/layout → layout}/hologram-card/css/hologram-card.module.css +0 -0
- /package/{components/layout → layout}/hologram-card/css/index.tsx +0 -0
- /package/{components/layout → layout}/hologram-card/tailwind/index.tsx +0 -0
- /package/{components/navigation/scattered-nav → navigation/scattered-nav/css}/index.tsx +0 -0
- /package/{components/neon → neon}/neon-alert/css/index.tsx +0 -0
- /package/{components/neon → neon}/neon-alert/css/neon-alert.module.css +0 -0
- /package/{components/neon → neon}/neon-alert/tailwind/index.tsx +0 -0
- /package/{components/neon → neon}/neon-badge/css/index.tsx +0 -0
- /package/{components/neon → neon}/neon-badge/css/neon-badge.module.css +0 -0
- /package/{components/neon → neon}/neon-badge/tailwind/index.tsx +0 -0
- /package/{components/neon → neon}/neon-button/css/index.tsx +0 -0
- /package/{components/neon → neon}/neon-button/css/neon-button.module.css +0 -0
- /package/{components/neon → neon}/neon-button/tailwind/index.tsx +0 -0
- /package/{components/neon → neon}/neon-divider/css/index.tsx +0 -0
- /package/{components/neon → neon}/neon-divider/css/neon-divider.module.css +0 -0
- /package/{components/neon → neon}/neon-divider/tailwind/index.tsx +0 -0
- /package/{components/neon → neon}/neon-progress/css/index.tsx +0 -0
- /package/{components/neon → neon}/neon-progress/css/neon-progress.module.css +0 -0
- /package/{components/neon → neon}/neon-progress/tailwind/index.tsx +0 -0
- /package/{components/neon → neon}/neon-tabs/css/index.tsx +0 -0
- /package/{components/neon → neon}/neon-tabs/css/neon-tabs.module.css +0 -0
- /package/{components/neon → neon}/neon-tabs/tailwind/index.tsx +0 -0
- /package/{components/neon → neon}/neon-toggle/css/index.tsx +0 -0
- /package/{components/neon → neon}/neon-toggle/css/neon-toggle.module.css +0 -0
- /package/{components/neon → neon}/neon-toggle/tailwind/index.tsx +0 -0
- /package/{components/overlays → overlays}/noise-overlay/index.tsx +0 -0
- /package/{components/overlays → overlays}/noise-overlay/noise-overlay.module.css +0 -0
- /package/{components/overlays → overlays}/scanlines/index.tsx +0 -0
- /package/{components/overlays → overlays}/scanlines/scanlines.module.css +0 -0
- /package/{components/overlays → overlays}/static-flicker/index.tsx +0 -0
- /package/{components/overlays → overlays}/static-flicker/static-flicker.module.css +0 -0
- /package/{components/overlays → overlays}/vignette/index.tsx +0 -0
- /package/{components/overlays → overlays}/vignette/vignette.module.css +0 -0
- /package/{components/text → text}/ascii-art/css/ascii-art.module.css +0 -0
- /package/{components/text → text}/ascii-art/css/index.tsx +0 -0
- /package/{components/text → text}/ascii-art/tailwind/index.tsx +0 -0
- /package/{components/text → text}/blood-drip/css/blood-drip.module.css +0 -0
- /package/{components/text → text}/blood-drip/css/index.tsx +0 -0
- /package/{components/text → text}/blood-drip/tailwind/index.tsx +0 -0
- /package/{components/text → text}/char-glitch/css/char-glitch.module.css +0 -0
- /package/{components/text → text}/char-glitch/css/index.tsx +0 -0
- /package/{components/text → text}/char-glitch/tailwind/index.tsx +0 -0
- /package/{components/text → text}/countdown-display/css/countdown-display.module.css +0 -0
- /package/{components/text → text}/countdown-display/css/index.tsx +0 -0
- /package/{components/text → text}/countdown-display/tailwind/index.tsx +0 -0
- /package/{components/text → text}/distortion-text/distortion-text.module.css +0 -0
- /package/{components/text → text}/distortion-text/index.tsx +0 -0
- /package/{components/text → text}/falling-text/falling-text.module.css +0 -0
- /package/{components/text → text}/falling-text/index.tsx +0 -0
- /package/{components/text → text}/flicker-text/flicker-text.module.css +0 -0
- /package/{components/text → text}/flicker-text/index.tsx +0 -0
- /package/{components/text → text}/giant-layers/css/giant-layers.module.css +0 -0
- /package/{components/text → text}/giant-layers/css/index.tsx +0 -0
- /package/{components/text → text}/giant-layers/tailwind/index.tsx +0 -0
- /package/{components/text → text}/glitch-text/glitch-text.module.css +0 -0
- /package/{components/text → text}/glitch-text/index.tsx +0 -0
- /package/{components/text → text}/reveal-text/css/index.tsx +0 -0
- /package/{components/text → text}/reveal-text/css/reveal-text.module.css +0 -0
- /package/{components/text → text}/reveal-text/tailwind/index.tsx +0 -0
- /package/{components/text → text}/rotate-text/css/index.tsx +0 -0
- /package/{components/text → text}/rotate-text/css/rotate-text.module.css +0 -0
- /package/{components/text → text}/rotate-text/tailwind/index.tsx +0 -0
- /package/{components/text → text}/strike-reveal/css/index.tsx +0 -0
- /package/{components/text → text}/strike-reveal/css/strike-reveal.module.css +0 -0
- /package/{components/text → text}/strike-reveal/tailwind/index.tsx +0 -0
- /package/{components/text → text}/terminal-output/css/index.tsx +0 -0
- /package/{components/text → text}/terminal-output/css/terminal-output.module.css +0 -0
- /package/{components/text → text}/terminal-output/tailwind/index.tsx +0 -0
- /package/{components/text → text}/typing-text/css/index.tsx +0 -0
- /package/{components/text → text}/typing-text/css/typing-text.module.css +0 -0
- /package/{components/text → text}/typing-text/tailwind/index.tsx +0 -0
package/bin/cli.js
DELETED
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { Command } from 'commander';
|
|
4
|
-
import pc from 'picocolors';
|
|
5
|
-
import prompts from 'prompts';
|
|
6
|
-
import fs from 'fs-extra';
|
|
7
|
-
import path from 'path';
|
|
8
|
-
import { fileURLToPath } from 'url';
|
|
9
|
-
|
|
10
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
-
const __dirname = path.dirname(__filename);
|
|
12
|
-
const COMPONENTS_DIR = path.join(__dirname, '..', 'components');
|
|
13
|
-
|
|
14
|
-
// Component registry
|
|
15
|
-
const COMPONENTS = {
|
|
16
|
-
// Overlays
|
|
17
|
-
'noise-overlay': { category: 'overlays', description: 'SVG fractal noise texture overlay', status: 'ready' },
|
|
18
|
-
'scanlines': { category: 'overlays', description: 'CRT-style horizontal scanlines', status: 'ready' },
|
|
19
|
-
'vignette': { category: 'overlays', description: 'Dark edges radial gradient', status: 'ready' },
|
|
20
|
-
'static-flicker': { category: 'overlays', description: 'Animated noise with flicker effect', status: 'ready' },
|
|
21
|
-
|
|
22
|
-
// Text effects
|
|
23
|
-
'glitch-text': { category: 'text', description: 'RGB split glitch text effect', status: 'ready' },
|
|
24
|
-
'flicker-text': { category: 'text', description: 'Text that flickers randomly', status: 'ready' },
|
|
25
|
-
'distortion-text': { category: 'text', description: 'Wave/shake/skew/blur text effects', status: 'ready' },
|
|
26
|
-
'falling-text': { category: 'text', description: 'Letters falling in cascade', status: 'ready' },
|
|
27
|
-
'typing-text': { category: 'text', description: 'Terminal typing effect', status: 'ready' },
|
|
28
|
-
'char-glitch': { category: 'text', description: 'Per-character glitch effect', status: 'ready' },
|
|
29
|
-
'reveal-text': { category: 'text', description: 'Text reveal on scroll', status: 'ready' },
|
|
30
|
-
'strike-reveal': { category: 'text', description: 'Strikethrough then reveal', status: 'ready' },
|
|
31
|
-
'giant-layers': { category: 'text', description: 'Giant text with 3D shadow layers', status: 'ready' },
|
|
32
|
-
'blood-drip': { category: 'text', description: 'Dripping blood effect letters', status: 'ready' },
|
|
33
|
-
'rotate-text': { category: 'text', description: 'Vertical rotating text', status: 'ready' },
|
|
34
|
-
'ascii-art': { category: 'text', description: 'Styled ASCII art block', status: 'ready' },
|
|
35
|
-
'countdown-display': { category: 'text', description: 'Stylized countdown timer', status: 'ready' },
|
|
36
|
-
'terminal-output': { category: 'text', description: 'Terminal block with prompt', status: 'ready' },
|
|
37
|
-
|
|
38
|
-
// Buttons
|
|
39
|
-
'glitch-button': { category: 'buttons', description: 'Button with glitch hover effect', status: 'ready' },
|
|
40
|
-
'chaos-button': { category: 'buttons', description: 'Chaotic animated button with debris', status: 'ready' },
|
|
41
|
-
'dead-button': { category: 'buttons', description: 'Destroyed/glitched button with layers', status: 'ready' },
|
|
42
|
-
'deeper-button': { category: 'buttons', description: 'Go deeper style descent button', status: 'ready' },
|
|
43
|
-
'dual-choice': { category: 'buttons', description: 'Yes/No dual button choice', status: 'ready' },
|
|
44
|
-
'cta-brutal': { category: 'buttons', description: 'Brutalist CTA button', status: 'ready' },
|
|
45
|
-
'tension-bar': { category: 'buttons', description: 'Dramatic tension/progress bar', status: 'ready' },
|
|
46
|
-
|
|
47
|
-
// Backgrounds
|
|
48
|
-
'noise-canvas': { category: 'backgrounds', description: 'Animated noise canvas background', status: 'ready' },
|
|
49
|
-
'light-beams': { category: 'backgrounds', description: 'Vertical colored light beams', status: 'ready' },
|
|
50
|
-
'glow-orbs': { category: 'backgrounds', description: 'Floating blurred orbs', status: 'ready' },
|
|
51
|
-
'particle-field': { category: 'backgrounds', description: 'Drifting particle background', status: 'ready' },
|
|
52
|
-
|
|
53
|
-
// Effects
|
|
54
|
-
'warning-tape': { category: 'effects', description: 'Scrolling warning tape banner', status: 'ready' },
|
|
55
|
-
'cursor-follower': { category: 'effects', description: 'Custom cursor with trail', status: 'ready' },
|
|
56
|
-
'screen-distortion': { category: 'effects', description: 'Full screen distortion effect', status: 'ready' },
|
|
57
|
-
'glowing-border': { category: 'effects', description: 'Glowing border container with pulse', status: 'ready' },
|
|
58
|
-
'glitch-image': { category: 'effects', description: 'Image with RGB glitch on hover', status: 'ready' },
|
|
59
|
-
|
|
60
|
-
// Neon components
|
|
61
|
-
'neon-button': { category: 'neon', description: 'Button with neon glow effect', status: 'ready' },
|
|
62
|
-
'neon-badge': { category: 'neon', description: 'Luminous status badges', status: 'ready' },
|
|
63
|
-
'neon-progress': { category: 'neon', description: 'Glowing progress bar with shimmer', status: 'ready' },
|
|
64
|
-
'neon-toggle': { category: 'neon', description: 'On/off switch with neon glow', status: 'ready' },
|
|
65
|
-
'neon-alert': { category: 'neon', description: 'Alert notifications with neon style', status: 'ready' },
|
|
66
|
-
'neon-tabs': { category: 'neon', description: 'Tab navigation with glow effect', status: 'ready' },
|
|
67
|
-
'neon-divider': { category: 'neon', description: 'Luminous section dividers', status: 'ready' },
|
|
68
|
-
|
|
69
|
-
// Cyber components
|
|
70
|
-
'cyber-input': { category: 'cyber', description: 'Input with animated border glow', status: 'ready' },
|
|
71
|
-
'cyber-loader': { category: 'cyber', description: 'Futuristic spinners and loaders', status: 'ready' },
|
|
72
|
-
'cyber-modal': { category: 'cyber', description: 'Modal with scanlines and glow', status: 'ready' },
|
|
73
|
-
'cyber-avatar': { category: 'cyber', description: 'Avatar with neon border and status', status: 'ready' },
|
|
74
|
-
'cyber-slider': { category: 'cyber', description: 'Slider with neon track and thumb', status: 'ready' },
|
|
75
|
-
'cyber-tooltip': { category: 'cyber', description: 'Terminal-style tooltips', status: 'ready' },
|
|
76
|
-
|
|
77
|
-
// Layout components
|
|
78
|
-
'hologram-card': { category: 'layout', description: 'Holographic card with scanlines', status: 'ready' },
|
|
79
|
-
'data-grid': { category: 'layout', description: 'Terminal-style data table', status: 'ready' },
|
|
80
|
-
'horizontal-scroll': { category: 'layout', description: 'Horizontal scrolling panels', status: 'ready' },
|
|
81
|
-
'void-frame': { category: 'layout', description: 'Frame with decorative corners', status: 'ready' },
|
|
82
|
-
'tower-pricing': { category: 'layout', description: 'Vertical stacked pricing cards', status: 'ready' },
|
|
83
|
-
'spec-grid': { category: 'layout', description: 'Terminal-style specs grid', status: 'ready' },
|
|
84
|
-
'tracklist': { category: 'layout', description: 'Music tracklist component', status: 'ready' },
|
|
85
|
-
|
|
86
|
-
// Navigation
|
|
87
|
-
'hexagon-menu': { category: 'navigation', description: 'Honeycomb hexagon menu', status: 'ready' },
|
|
88
|
-
'scattered-nav': { category: 'navigation', description: 'Scattered fragment navigation', status: 'ready' },
|
|
89
|
-
'vertical-nav': { category: 'navigation', description: 'Vertical nav with glyphs', status: 'ready' },
|
|
90
|
-
'brutal-nav': { category: 'navigation', description: 'Brutalist chaotic navigation', status: 'ready' },
|
|
91
|
-
'progress-dots': { category: 'navigation', description: 'Section progress indicator', status: 'ready' },
|
|
92
|
-
'scroll-indicator': { category: 'navigation', description: 'Vertical scroll indicator', status: 'ready' },
|
|
93
|
-
|
|
94
|
-
// Decorative
|
|
95
|
-
'rune-symbols': { category: 'decorative', description: 'Animated runic symbols', status: 'ready' },
|
|
96
|
-
'ornaments': { category: 'decorative', description: 'Medieval ornaments', status: 'ready' },
|
|
97
|
-
'coffee-stain': { category: 'decorative', description: 'Coffee stain/aged paper effect', status: 'ready' },
|
|
98
|
-
'sheet-music': { category: 'decorative', description: 'Floating music notes', status: 'ready' },
|
|
99
|
-
'inscription': { category: 'decorative', description: 'Stone carved inscription', status: 'ready' },
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
const program = new Command();
|
|
103
|
-
|
|
104
|
-
program
|
|
105
|
-
.name('chaos-ui')
|
|
106
|
-
.description('Add glitch & noise components to your project')
|
|
107
|
-
.version('0.1.0');
|
|
108
|
-
|
|
109
|
-
// LIST command
|
|
110
|
-
program
|
|
111
|
-
.command('list')
|
|
112
|
-
.description('List all available components')
|
|
113
|
-
.action(() => {
|
|
114
|
-
console.log(pc.bold('\n🗡️ Chaos UI Components\n'));
|
|
115
|
-
|
|
116
|
-
const categories = {};
|
|
117
|
-
for (const [name, info] of Object.entries(COMPONENTS)) {
|
|
118
|
-
if (!categories[info.category]) categories[info.category] = [];
|
|
119
|
-
categories[info.category].push({ name, ...info });
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
for (const [category, components] of Object.entries(categories)) {
|
|
123
|
-
console.log(pc.cyan(` ${category}/`));
|
|
124
|
-
for (const comp of components) {
|
|
125
|
-
console.log(` ${pc.white(comp.name.padEnd(20))} ${pc.dim(comp.description)}`);
|
|
126
|
-
}
|
|
127
|
-
console.log();
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
// ADD command
|
|
132
|
-
program
|
|
133
|
-
.command('add [component]')
|
|
134
|
-
.description('Add a component to your project')
|
|
135
|
-
.option('-d, --dir <path>', 'Target directory', './components/chaos')
|
|
136
|
-
.option('-v, --variant <type>', 'Styling variant: css or tailwind', 'css')
|
|
137
|
-
.option('-y, --yes', 'Skip confirmation')
|
|
138
|
-
.action(async (componentName, options) => {
|
|
139
|
-
const variant = options.variant.toLowerCase();
|
|
140
|
-
if (!['css', 'tailwind'].includes(variant)) {
|
|
141
|
-
console.log(pc.red(`\n✗ Invalid variant "${variant}". Use 'css' or 'tailwind'.\n`));
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// If no component specified, show interactive picker
|
|
146
|
-
if (!componentName) {
|
|
147
|
-
const choices = Object.entries(COMPONENTS).map(([name, info]) => ({
|
|
148
|
-
title: name,
|
|
149
|
-
description: info.description,
|
|
150
|
-
value: name,
|
|
151
|
-
}));
|
|
152
|
-
|
|
153
|
-
const response = await prompts([
|
|
154
|
-
{
|
|
155
|
-
type: 'autocomplete',
|
|
156
|
-
name: 'component',
|
|
157
|
-
message: 'Which component?',
|
|
158
|
-
choices,
|
|
159
|
-
suggest: (input, choices) =>
|
|
160
|
-
choices.filter(c => c.title.includes(input) || c.description.toLowerCase().includes(input.toLowerCase()))
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
type: 'select',
|
|
164
|
-
name: 'variant',
|
|
165
|
-
message: 'Styling variant?',
|
|
166
|
-
choices: [
|
|
167
|
-
{ title: 'CSS Modules', value: 'css' },
|
|
168
|
-
{ title: 'Tailwind', value: 'tailwind' },
|
|
169
|
-
],
|
|
170
|
-
initial: variant === 'tailwind' ? 1 : 0,
|
|
171
|
-
}
|
|
172
|
-
]);
|
|
173
|
-
|
|
174
|
-
if (!response.component) {
|
|
175
|
-
console.log(pc.dim('Cancelled.'));
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
componentName = response.component;
|
|
179
|
-
options.variant = response.variant || variant;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Validate component exists
|
|
183
|
-
if (!COMPONENTS[componentName]) {
|
|
184
|
-
console.log(pc.red(`\n✗ Component "${componentName}" not found.`));
|
|
185
|
-
console.log(pc.dim(` Run ${pc.white('chaos-ui list')} to see available components.\n`));
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
const info = COMPONENTS[componentName];
|
|
190
|
-
const baseDir = path.join(COMPONENTS_DIR, info.category, componentName);
|
|
191
|
-
|
|
192
|
-
// Check if component has variant subdirs or is legacy (flat structure)
|
|
193
|
-
const variantDir = path.join(baseDir, options.variant);
|
|
194
|
-
const hasVariants = fs.existsSync(path.join(baseDir, 'css')) || fs.existsSync(path.join(baseDir, 'tailwind'));
|
|
195
|
-
const sourceDir = hasVariants ? variantDir : baseDir;
|
|
196
|
-
const targetDir = path.resolve(options.dir, info.category);
|
|
197
|
-
|
|
198
|
-
// Check source exists
|
|
199
|
-
if (!fs.existsSync(sourceDir)) {
|
|
200
|
-
if (hasVariants) {
|
|
201
|
-
console.log(pc.yellow(`\n⚠ Variant "${options.variant}" not available for "${componentName}".`));
|
|
202
|
-
const available = [];
|
|
203
|
-
if (fs.existsSync(path.join(baseDir, 'css'))) available.push('css');
|
|
204
|
-
if (fs.existsSync(path.join(baseDir, 'tailwind'))) available.push('tailwind');
|
|
205
|
-
console.log(pc.dim(` Available variants: ${available.join(', ')}\n`));
|
|
206
|
-
} else {
|
|
207
|
-
console.log(pc.yellow(`\n⚠ Component "${componentName}" is not yet implemented.`));
|
|
208
|
-
console.log(pc.dim(' Coming soon!\n'));
|
|
209
|
-
}
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Confirm
|
|
214
|
-
if (!options.yes) {
|
|
215
|
-
const variantLabel = hasVariants ? ` (${pc.magenta(options.variant)})` : '';
|
|
216
|
-
const confirm = await prompts({
|
|
217
|
-
type: 'confirm',
|
|
218
|
-
name: 'value',
|
|
219
|
-
message: `Add ${pc.cyan(componentName)}${variantLabel} to ${pc.dim(targetDir)}?`,
|
|
220
|
-
initial: true,
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
if (!confirm.value) {
|
|
224
|
-
console.log(pc.dim('Cancelled.'));
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
// Copy files
|
|
230
|
-
try {
|
|
231
|
-
await fs.ensureDir(targetDir);
|
|
232
|
-
await fs.copy(sourceDir, path.join(targetDir, componentName));
|
|
233
|
-
|
|
234
|
-
console.log(pc.green(`\n✓ Added ${componentName}`) + (hasVariants ? pc.magenta(` (${options.variant})`) : ''));
|
|
235
|
-
console.log(pc.dim(` → ${path.join(targetDir, componentName)}\n`));
|
|
236
|
-
|
|
237
|
-
// Show usage hint
|
|
238
|
-
const pascalName = componentName
|
|
239
|
-
.split('-')
|
|
240
|
-
.map(s => s.charAt(0).toUpperCase() + s.slice(1))
|
|
241
|
-
.join('');
|
|
242
|
-
|
|
243
|
-
console.log(pc.dim(' Import:'));
|
|
244
|
-
console.log(pc.white(` import { ${pascalName} } from './components/chaos/${info.category}/${componentName}';\n`));
|
|
245
|
-
|
|
246
|
-
} catch (err) {
|
|
247
|
-
console.log(pc.red(`\n✗ Failed to add component: ${err.message}\n`));
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
// INIT command
|
|
252
|
-
program
|
|
253
|
-
.command('init')
|
|
254
|
-
.description('Initialize chaos-ui in your project')
|
|
255
|
-
.action(async () => {
|
|
256
|
-
console.log(pc.bold('\n🗡️ Initializing Chaos UI...\n'));
|
|
257
|
-
|
|
258
|
-
const response = await prompts([
|
|
259
|
-
{
|
|
260
|
-
type: 'select',
|
|
261
|
-
name: 'framework',
|
|
262
|
-
message: 'Framework?',
|
|
263
|
-
choices: [
|
|
264
|
-
{ title: 'React', value: 'react' },
|
|
265
|
-
{ title: 'Vue', value: 'vue' },
|
|
266
|
-
{ title: 'Vanilla (HTML/CSS/JS)', value: 'vanilla' },
|
|
267
|
-
],
|
|
268
|
-
},
|
|
269
|
-
{
|
|
270
|
-
type: 'select',
|
|
271
|
-
name: 'styling',
|
|
272
|
-
message: 'Styling?',
|
|
273
|
-
choices: [
|
|
274
|
-
{ title: 'CSS Modules', value: 'css-modules' },
|
|
275
|
-
{ title: 'Plain CSS', value: 'css' },
|
|
276
|
-
{ title: 'Tailwind (with CSS vars)', value: 'tailwind' },
|
|
277
|
-
],
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
type: 'text',
|
|
281
|
-
name: 'dir',
|
|
282
|
-
message: 'Components directory?',
|
|
283
|
-
initial: './components/chaos',
|
|
284
|
-
},
|
|
285
|
-
]);
|
|
286
|
-
|
|
287
|
-
if (!response.framework) {
|
|
288
|
-
console.log(pc.dim('Cancelled.'));
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// Create config file
|
|
293
|
-
const config = {
|
|
294
|
-
framework: response.framework,
|
|
295
|
-
styling: response.styling,
|
|
296
|
-
componentsDir: response.dir,
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
await fs.writeJson('./chaos-ui.json', config, { spaces: 2 });
|
|
300
|
-
await fs.ensureDir(response.dir);
|
|
301
|
-
|
|
302
|
-
console.log(pc.green('\n✓ Initialized!'));
|
|
303
|
-
console.log(pc.dim(` Config: ${pc.white('./chaos-ui.json')}`));
|
|
304
|
-
console.log(pc.dim(` Components: ${pc.white(response.dir)}\n`));
|
|
305
|
-
console.log(pc.dim(` Run ${pc.white('chaos-ui add <component>')} to add components.\n`));
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
program.parse();
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { forwardRef, HTMLAttributes } from 'react';
|
|
4
|
-
import styles from './light-beams.module.css';
|
|
5
|
-
|
|
6
|
-
export interface LightBeamsProps extends HTMLAttributes<HTMLDivElement> {
|
|
7
|
-
/** Array of beam colors */
|
|
8
|
-
colors?: string[];
|
|
9
|
-
/** Number of beams */
|
|
10
|
-
count?: number;
|
|
11
|
-
/** Beam width in pixels */
|
|
12
|
-
beamWidth?: number;
|
|
13
|
-
/** Beam opacity (0-1) */
|
|
14
|
-
opacity?: number;
|
|
15
|
-
/** Animation duration range [min, max] in seconds */
|
|
16
|
-
durationRange?: [number, number];
|
|
17
|
-
/** Fixed or absolute positioning */
|
|
18
|
-
position?: 'fixed' | 'absolute';
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export const LightBeams = forwardRef<HTMLDivElement, LightBeamsProps>(
|
|
22
|
-
(
|
|
23
|
-
{
|
|
24
|
-
colors = ['#7c3aed', '#06b6d4', '#ec4899', '#10b981', '#f59e0b'],
|
|
25
|
-
count = 5,
|
|
26
|
-
beamWidth = 2,
|
|
27
|
-
opacity = 0.15,
|
|
28
|
-
durationRange = [15, 25],
|
|
29
|
-
position = 'fixed',
|
|
30
|
-
className,
|
|
31
|
-
style,
|
|
32
|
-
...props
|
|
33
|
-
},
|
|
34
|
-
ref
|
|
35
|
-
) => {
|
|
36
|
-
const beams = Array.from({ length: count }, (_, i) => {
|
|
37
|
-
const duration = durationRange[0] + Math.random() * (durationRange[1] - durationRange[0]);
|
|
38
|
-
const delay = Math.random() * -duration;
|
|
39
|
-
const color = colors[i % colors.length];
|
|
40
|
-
const positionX = ((i + 1) / (count + 1)) * 100;
|
|
41
|
-
|
|
42
|
-
return {
|
|
43
|
-
id: i,
|
|
44
|
-
duration,
|
|
45
|
-
delay,
|
|
46
|
-
color,
|
|
47
|
-
positionX,
|
|
48
|
-
};
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
return (
|
|
52
|
-
<div
|
|
53
|
-
ref={ref}
|
|
54
|
-
className={`${styles.container} ${className || ''}`}
|
|
55
|
-
style={{ position, ...style }}
|
|
56
|
-
aria-hidden="true"
|
|
57
|
-
{...props}
|
|
58
|
-
>
|
|
59
|
-
{beams.map((beam) => (
|
|
60
|
-
<div
|
|
61
|
-
key={beam.id}
|
|
62
|
-
className={styles.beam}
|
|
63
|
-
style={{
|
|
64
|
-
left: `${beam.positionX}%`,
|
|
65
|
-
width: beamWidth,
|
|
66
|
-
background: `linear-gradient(180deg, transparent, ${beam.color}, transparent)`,
|
|
67
|
-
opacity,
|
|
68
|
-
animationDuration: `${beam.duration}s`,
|
|
69
|
-
animationDelay: `${beam.delay}s`,
|
|
70
|
-
}}
|
|
71
|
-
/>
|
|
72
|
-
))}
|
|
73
|
-
</div>
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
LightBeams.displayName = 'LightBeams';
|
|
79
|
-
|
|
80
|
-
export default LightBeams;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
.container {
|
|
2
|
-
inset: 0;
|
|
3
|
-
width: 100%;
|
|
4
|
-
height: 100%;
|
|
5
|
-
overflow: hidden;
|
|
6
|
-
pointer-events: none;
|
|
7
|
-
z-index: 1;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.beam {
|
|
11
|
-
position: absolute;
|
|
12
|
-
top: 0;
|
|
13
|
-
height: 100%;
|
|
14
|
-
filter: blur(1px);
|
|
15
|
-
animation: beam-move 20s ease-in-out infinite;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@keyframes beam-move {
|
|
19
|
-
0%, 100% {
|
|
20
|
-
transform: translateX(-50px) skewX(-5deg);
|
|
21
|
-
opacity: 0.1;
|
|
22
|
-
}
|
|
23
|
-
50% {
|
|
24
|
-
transform: translateX(50px) skewX(5deg);
|
|
25
|
-
opacity: 0.2;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/* cta-brutal - CTA style brutaliste */
|
|
2
|
-
.button {
|
|
3
|
-
display: inline-flex;
|
|
4
|
-
align-items: center;
|
|
5
|
-
justify-content: center;
|
|
6
|
-
gap: 1rem;
|
|
7
|
-
padding: 1.5rem 3rem;
|
|
8
|
-
background: var(--chaos-blood, #ff0040);
|
|
9
|
-
color: var(--chaos-void, #0a0a0a);
|
|
10
|
-
font-family: var(--chaos-font-display, 'Bebas Neue', sans-serif);
|
|
11
|
-
font-size: 1.5rem;
|
|
12
|
-
letter-spacing: 0.1em;
|
|
13
|
-
text-transform: uppercase;
|
|
14
|
-
text-decoration: none;
|
|
15
|
-
border: none;
|
|
16
|
-
cursor: pointer;
|
|
17
|
-
position: relative;
|
|
18
|
-
transition: all 0.15s;
|
|
19
|
-
clip-path: polygon(0 0, 100% 0, 95% 100%, 0 100%);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.button:hover {
|
|
23
|
-
transform: translate(-2px, -2px);
|
|
24
|
-
box-shadow: 4px 4px 0 var(--chaos-bone, #e8e8e8);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.button:active {
|
|
28
|
-
transform: translate(0, 0);
|
|
29
|
-
box-shadow: none;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.icon { font-size: 1.2em; transition: transform 0.3s; }
|
|
33
|
-
.button:hover .icon { transform: translateX(5px); }
|
|
34
|
-
|
|
35
|
-
.variantOutline {
|
|
36
|
-
background: transparent;
|
|
37
|
-
border: 3px solid var(--chaos-blood, #ff0040);
|
|
38
|
-
color: var(--chaos-blood, #ff0040);
|
|
39
|
-
clip-path: none;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.variantOutline:hover {
|
|
43
|
-
background: var(--chaos-blood, #ff0040);
|
|
44
|
-
color: var(--chaos-void, #0a0a0a);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.variantGold { background: var(--chaos-gold, #c9a227); }
|
|
48
|
-
.variantGold:hover { box-shadow: 4px 4px 0 var(--chaos-gold-dark, #8b7017); }
|
|
49
|
-
|
|
50
|
-
.variantInverse { background: var(--chaos-bone, #e8e8e8); color: var(--chaos-void, #0a0a0a); }
|
|
51
|
-
.variantInverse:hover { box-shadow: 4px 4px 0 var(--chaos-blood, #ff0040); }
|
|
52
|
-
|
|
53
|
-
.sizeSm { padding: 0.8rem 1.5rem; font-size: 1rem; }
|
|
54
|
-
.sizeLg { padding: 2rem 4rem; font-size: 2rem; }
|
|
55
|
-
.sizeXl { padding: 2.5rem 5rem; font-size: 2.5rem; }
|
|
56
|
-
|
|
57
|
-
.fullWidth { width: 100%; clip-path: none; }
|
|
58
|
-
.disabled { opacity: 0.5; cursor: not-allowed; pointer-events: none; }
|
|
59
|
-
|
|
60
|
-
.loading { position: relative; color: transparent; }
|
|
61
|
-
.loading::after {
|
|
62
|
-
content: '';
|
|
63
|
-
position: absolute;
|
|
64
|
-
width: 1.5em;
|
|
65
|
-
height: 1.5em;
|
|
66
|
-
border: 2px solid currentColor;
|
|
67
|
-
border-top-color: transparent;
|
|
68
|
-
border-radius: 50%;
|
|
69
|
-
animation: spin 0.8s linear infinite;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
@keyframes spin { to { transform: rotate(360deg); } }
|
|
73
|
-
|
|
74
|
-
.shake:hover { animation: shake 0.1s infinite; }
|
|
75
|
-
|
|
76
|
-
@keyframes shake {
|
|
77
|
-
0%, 100% { transform: translate(-2px, -2px); }
|
|
78
|
-
25% { transform: translate(-1px, -3px); }
|
|
79
|
-
50% { transform: translate(-3px, -1px); }
|
|
80
|
-
75% { transform: translate(-2px, -2px); }
|
|
81
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/* dead-button - Bouton détruit/glitché avec layers */
|
|
2
|
-
.container {
|
|
3
|
-
position: relative;
|
|
4
|
-
width: 280px;
|
|
5
|
-
height: 60px;
|
|
6
|
-
animation: btnShake 0.1s infinite;
|
|
7
|
-
cursor: not-allowed;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.container:hover { animation: btnShakeHard 0.05s infinite; }
|
|
11
|
-
|
|
12
|
-
@keyframes btnShake {
|
|
13
|
-
0%, 100% { transform: translate(0); }
|
|
14
|
-
25% { transform: translate(0.5px, 0.5px); }
|
|
15
|
-
50% { transform: translate(-0.5px, -0.5px); }
|
|
16
|
-
75% { transform: translate(0.5px, -0.5px); }
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
@keyframes btnShakeHard {
|
|
20
|
-
0%, 100% { transform: translate(0) rotate(0); }
|
|
21
|
-
25% { transform: translate(2px, 1px) rotate(0.5deg); }
|
|
22
|
-
50% { transform: translate(-1px, -2px) rotate(-0.5deg); }
|
|
23
|
-
75% { transform: translate(1px, -1px) rotate(0.3deg); }
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.clean {
|
|
27
|
-
position: absolute;
|
|
28
|
-
inset: 0;
|
|
29
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
30
|
-
border-radius: 16px;
|
|
31
|
-
display: flex;
|
|
32
|
-
align-items: center;
|
|
33
|
-
justify-content: center;
|
|
34
|
-
gap: 0.8rem;
|
|
35
|
-
font-weight: 600;
|
|
36
|
-
font-size: 1rem;
|
|
37
|
-
color: white;
|
|
38
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
39
|
-
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
|
|
40
|
-
letter-spacing: 0.02em;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.gradient2 { background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); box-shadow: 0 4px 15px rgba(245, 87, 108, 0.4); }
|
|
44
|
-
.gradient3 { background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); box-shadow: 0 4px 15px rgba(79, 172, 254, 0.4); }
|
|
45
|
-
.gradient4 { background: linear-gradient(135deg, #fa709a 0%, #fee140 100%); box-shadow: 0 4px 15px rgba(250, 112, 154, 0.4); }
|
|
46
|
-
|
|
47
|
-
.icon { font-size: 1.1rem; }
|
|
48
|
-
|
|
49
|
-
.destroy {
|
|
50
|
-
position: absolute;
|
|
51
|
-
inset: 0;
|
|
52
|
-
background: repeating-linear-gradient(90deg, transparent, transparent 2px, rgba(255, 0, 64, 0.1) 2px, rgba(255, 0, 64, 0.1) 4px),
|
|
53
|
-
repeating-linear-gradient(0deg, transparent, transparent 3px, rgba(0, 0, 0, 0.3) 3px, rgba(0, 0, 0, 0.3) 4px);
|
|
54
|
-
border-radius: 16px;
|
|
55
|
-
mix-blend-mode: multiply;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.noise {
|
|
59
|
-
position: absolute;
|
|
60
|
-
inset: 0;
|
|
61
|
-
border-radius: 16px;
|
|
62
|
-
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
|
|
63
|
-
opacity: 0.15;
|
|
64
|
-
mix-blend-mode: overlay;
|
|
65
|
-
animation: noiseMove 0.2s steps(5) infinite;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
@keyframes noiseMove {
|
|
69
|
-
0% { transform: translate(0, 0); }
|
|
70
|
-
20% { transform: translate(-2px, 1px); }
|
|
71
|
-
40% { transform: translate(1px, -1px); }
|
|
72
|
-
60% { transform: translate(2px, 2px); }
|
|
73
|
-
80% { transform: translate(-1px, -2px); }
|
|
74
|
-
100% { transform: translate(0, 0); }
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.glitch1, .glitch2 { position: absolute; inset: 0; border-radius: 16px; pointer-events: none; }
|
|
78
|
-
.glitch1 { background: var(--chaos-blood, #ff0040); mix-blend-mode: color-dodge; opacity: 0; animation: glitchSlice1 3s infinite; }
|
|
79
|
-
.glitch2 { background: cyan; mix-blend-mode: color-dodge; opacity: 0; animation: glitchSlice2 3s infinite; }
|
|
80
|
-
|
|
81
|
-
@keyframes glitchSlice1 {
|
|
82
|
-
0%, 89%, 91%, 93%, 95%, 100% { opacity: 0; clip-path: inset(0 0 100% 0); }
|
|
83
|
-
90% { opacity: 0.8; clip-path: inset(20% 0 60% 0); transform: translateX(-5px); }
|
|
84
|
-
92% { opacity: 0.6; clip-path: inset(50% 0 30% 0); transform: translateX(3px); }
|
|
85
|
-
94% { opacity: 0.7; clip-path: inset(70% 0 10% 0); transform: translateX(-2px); }
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@keyframes glitchSlice2 {
|
|
89
|
-
0%, 89%, 91%, 93%, 95%, 100% { opacity: 0; clip-path: inset(0 0 100% 0); }
|
|
90
|
-
90% { opacity: 0.5; clip-path: inset(30% 0 50% 0); transform: translateX(4px); }
|
|
91
|
-
92% { opacity: 0.4; clip-path: inset(10% 0 70% 0); transform: translateX(-3px); }
|
|
92
|
-
94% { opacity: 0.6; clip-path: inset(60% 0 20% 0); transform: translateX(5px); }
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
.container::after {
|
|
96
|
-
content: '';
|
|
97
|
-
position: absolute;
|
|
98
|
-
top: 50%;
|
|
99
|
-
left: -10px;
|
|
100
|
-
right: -10px;
|
|
101
|
-
height: 3px;
|
|
102
|
-
background: var(--chaos-blood, #ff0040);
|
|
103
|
-
transform: rotate(-3deg);
|
|
104
|
-
box-shadow: 0 0 10px var(--chaos-blood, #ff0040);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.noStrike::after { display: none; }
|
|
108
|
-
.sizeSm { width: 200px; height: 45px; }
|
|
109
|
-
.sizeSm .clean { font-size: 0.85rem; border-radius: 12px; }
|
|
110
|
-
.sizeLg { width: 340px; height: 70px; }
|
|
111
|
-
.sizeLg .clean { font-size: 1.2rem; border-radius: 20px; }
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
/* deeper-button - Bouton "aller plus loin" style descent */
|
|
2
|
-
.button {
|
|
3
|
-
padding: 2rem 4rem;
|
|
4
|
-
background: transparent;
|
|
5
|
-
border: 2px solid var(--chaos-blood, #ff0040);
|
|
6
|
-
color: var(--chaos-blood, #ff0040);
|
|
7
|
-
font-family: var(--chaos-font-display, 'Bebas Neue', sans-serif);
|
|
8
|
-
font-size: 1.5rem;
|
|
9
|
-
text-decoration: none;
|
|
10
|
-
position: relative;
|
|
11
|
-
overflow: hidden;
|
|
12
|
-
transition: all 0.3s;
|
|
13
|
-
letter-spacing: 0.1em;
|
|
14
|
-
cursor: pointer;
|
|
15
|
-
display: inline-block;
|
|
16
|
-
text-transform: uppercase;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.button::before {
|
|
20
|
-
content: '';
|
|
21
|
-
position: absolute;
|
|
22
|
-
top: 0;
|
|
23
|
-
left: -100%;
|
|
24
|
-
width: 100%;
|
|
25
|
-
height: 100%;
|
|
26
|
-
background: var(--chaos-blood, #ff0040);
|
|
27
|
-
transition: left 0.3s;
|
|
28
|
-
z-index: -1;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.button:hover { color: var(--chaos-void, #0a0a0a); }
|
|
32
|
-
.button:hover::before { left: 0; }
|
|
33
|
-
|
|
34
|
-
.arrow {
|
|
35
|
-
display: inline-block;
|
|
36
|
-
margin-left: 1rem;
|
|
37
|
-
transition: transform 0.3s;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.button:hover .arrow { animation: arrowBounce 0.5s ease-in-out infinite; }
|
|
41
|
-
|
|
42
|
-
@keyframes arrowBounce {
|
|
43
|
-
0%, 100% { transform: translateY(0); }
|
|
44
|
-
50% { transform: translateY(5px); }
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.variantGold { border-color: var(--chaos-gold, #c9a227); color: var(--chaos-gold, #c9a227); }
|
|
48
|
-
.variantGold::before { background: var(--chaos-gold, #c9a227); }
|
|
49
|
-
.variantGold:hover { color: var(--chaos-void, #0a0a0a); }
|
|
50
|
-
|
|
51
|
-
.variantOutline { border-width: 1px; }
|
|
52
|
-
.variantOutline:hover { border-width: 2px; }
|
|
53
|
-
|
|
54
|
-
.variantGhost { border-color: transparent; border-bottom-color: var(--chaos-blood, #ff0040); }
|
|
55
|
-
.variantGhost::before { display: none; }
|
|
56
|
-
.variantGhost:hover { color: var(--chaos-blood, #ff0040); border-color: var(--chaos-blood, #ff0040); }
|
|
57
|
-
|
|
58
|
-
.sizeSm { padding: 1rem 2rem; font-size: 1rem; }
|
|
59
|
-
.sizeLg { padding: 2.5rem 5rem; font-size: 2rem; }
|
|
60
|
-
|
|
61
|
-
.pulsing { animation: pulse 2s ease-in-out infinite; }
|
|
62
|
-
|
|
63
|
-
@keyframes pulse {
|
|
64
|
-
0%, 100% { box-shadow: 0 0 0 0 rgba(255, 0, 64, 0.4); }
|
|
65
|
-
50% { box-shadow: 0 0 0 15px rgba(255, 0, 64, 0); }
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
.variantGold.pulsing { animation: pulseGold 2s ease-in-out infinite; }
|
|
69
|
-
|
|
70
|
-
@keyframes pulseGold {
|
|
71
|
-
0%, 100% { box-shadow: 0 0 0 0 rgba(201, 162, 39, 0.4); }
|
|
72
|
-
50% { box-shadow: 0 0 0 15px rgba(201, 162, 39, 0); }
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.iconLeft { margin-right: 1rem; }
|
|
76
|
-
.iconRight { margin-left: 1rem; }
|