athlefi-ui 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +21 -10
  2. package/package.json +3 -1
  3. package/src/assets/Logo 1.png +0 -0
  4. package/src/assets/Logo 3.png +0 -0
  5. package/src/assets/android-chrome-192x192.png +0 -0
  6. package/src/assets/android-chrome-512x512.png +0 -0
  7. package/src/assets/apple-touch-icon.png +0 -0
  8. package/src/assets/favicon-16x16.png +0 -0
  9. package/src/assets/favicon-32x32.png +0 -0
  10. package/src/assets/favicon.ico +0 -0
  11. package/src/assets/icono.svg +1 -0
  12. package/src/assets/icono_name.svg +1 -0
  13. package/src/assets/profilepic.webp +0 -0
  14. package/src/assets/site.webmanifest +21 -0
  15. package/src/components/atoms/Button.astro +95 -30
  16. package/src/components/atoms/ContactIcon.astro +91 -0
  17. package/src/components/atoms/FooterLink.astro +50 -0
  18. package/src/components/atoms/FormInput.astro +102 -0
  19. package/src/components/atoms/IconCard.astro +99 -0
  20. package/src/components/atoms/Logo.astro +59 -0
  21. package/src/components/atoms/NavLink.astro +70 -0
  22. package/src/components/atoms/SocialIcon.astro +80 -0
  23. package/src/components/atoms/TabButton.astro +71 -0
  24. package/src/components/atoms/TextMono.astro +152 -0
  25. package/src/components/atoms/TimelineStep.astro +215 -0
  26. package/src/components/atoms/auxfile.astro +120 -0
  27. package/src/icons/american-football-outline.svg +16 -0
  28. package/src/icons/astro.svg +1 -0
  29. package/src/icons/background.svg +1 -0
  30. package/src/icons/bar-chart-outline.svg +13 -0
  31. package/src/icons/card-outline.svg +5 -0
  32. package/src/icons/cash-outline.svg +10 -0
  33. package/src/icons/diamond-outline.svg +8 -0
  34. package/src/icons/document-text-outline.svg +6 -0
  35. package/src/icons/eye-outline.svg +4 -0
  36. package/src/icons/laptop-outline.svg +4 -0
  37. package/src/icons/location-outline.svg +4 -0
  38. package/src/icons/mail-outline.svg +4 -0
  39. package/src/icons/person-outline.svg +4 -0
  40. package/src/icons/phone-portrait-outline.svg +4 -0
  41. package/src/icons/pie-chart-outline.svg +4 -0
  42. package/src/icons/rocket-outline.svg +4 -0
  43. package/src/icons/search-outline.svg +4 -0
  44. package/src/icons/shield-checkmark-outline.svg +4 -0
  45. package/src/icons/trophy-outline.svg +7 -0
  46. package/src/index.ts +10 -0
@@ -0,0 +1,80 @@
1
+ ---
2
+ export interface Props {
3
+ platform: "youtube" | "facebook" | "twitter" | "instagram";
4
+ href: string;
5
+ class?: string;
6
+ }
7
+
8
+ const { platform, href, class: className = "" } = Astro.props;
9
+
10
+ const icons = {
11
+ youtube: {
12
+ viewBox: "0 0 24 24",
13
+ path: "M23.498 6.186a3.016 3.016 0 0 0-2.122-2.136C19.505 3.545 12 3.545 12 3.545s-7.505 0-9.377.505A3.017 3.017 0 0 0 .502 6.186C0 8.07 0 12 0 12s0 3.93.502 5.814a3.016 3.016 0 0 0 2.122 2.136c1.871.505 9.376.505 9.376.505s7.505 0 9.377-.505a3.015 3.015 0 0 0 2.122-2.136C24 15.93 24 12 24 12s0-3.93-.502-5.814zM9.545 15.568V8.432L15.818 12l-6.273 3.568z",
14
+ label: "YouTube",
15
+ },
16
+ facebook: {
17
+ viewBox: "0 0 24 24",
18
+ path: "M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z",
19
+ label: "Facebook",
20
+ },
21
+ twitter: {
22
+ viewBox: "0 0 24 24",
23
+ path: "M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z",
24
+ label: "X (Twitter)",
25
+ },
26
+ instagram: {
27
+ viewBox: "0 0 24 24",
28
+ path: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z",
29
+ label: "Instagram",
30
+ },
31
+ };
32
+
33
+ const icon = icons[platform];
34
+ ---
35
+
36
+ <a
37
+ href={href}
38
+ target="_blank"
39
+ rel="noopener noreferrer"
40
+ class={`social-icon ${className}`}
41
+ aria-label={`Síguenos en ${icon.label}`}
42
+ >
43
+ <svg
44
+ class="social-icon__svg"
45
+ fill="currentColor"
46
+ viewBox={icon.viewBox}
47
+ aria-hidden="true"
48
+ >
49
+ <path d={icon.path}></path>
50
+ </svg>
51
+ </a>
52
+
53
+ <style>
54
+ .social-icon {
55
+ display: inline-flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ width: 24px;
59
+ height: 24px;
60
+ color: var(--color-white);
61
+ text-decoration: none;
62
+ border-radius: 2px;
63
+ transition: color 0.2s ease-in-out;
64
+ }
65
+
66
+ .social-icon:hover {
67
+ color: var(--color-primary-60);
68
+ }
69
+
70
+ .social-icon:focus-visible {
71
+ outline: 2px solid var(--color-primary-60);
72
+ outline-offset: 2px;
73
+ }
74
+
75
+ .social-icon__svg {
76
+ width: 20px;
77
+ height: 20px;
78
+ }
79
+ </style>
80
+
@@ -0,0 +1,71 @@
1
+ ---
2
+ /**
3
+ * Copyright (c) 2025 Grupo DedSec S.A. de C.V.
4
+ * Este código fuente es propiedad exclusiva de Grupo DedSec S.A. de C.V.
5
+ * Se prohíbe su uso, reproducción, distribución o modificación, total o parcial, sin autorización expresa por escrito.
6
+ * No se permite el uso comercial ni la redistribución pública del mismo.
7
+ * Para licenciamiento, contactar a: admin@dedsec.com.mx
8
+ */
9
+
10
+ /**
11
+ * Átomo: TabButton
12
+ * @description Botón individual para tabs con estados activo/inactivo
13
+ */
14
+
15
+ export interface Props {
16
+ label: string;
17
+ tabId: string;
18
+ isActive?: boolean;
19
+ class?: string;
20
+ }
21
+
22
+ const {
23
+ label,
24
+ tabId,
25
+ isActive = false,
26
+ class: className = ""
27
+ } = Astro.props;
28
+ ---
29
+
30
+ <button
31
+ id={`tab-${tabId}`}
32
+ class={`tab-button ${isActive ? 'tab-button--active' : ''} ${className}`}
33
+ data-tab={tabId}
34
+ role="tab"
35
+ aria-selected={isActive}
36
+ aria-controls={`panel-${tabId}`}
37
+ >
38
+ {label}
39
+ </button>
40
+
41
+ <style>
42
+ .tab-button {
43
+ padding: 12px 24px;
44
+ background-color: transparent;
45
+ color: rgb(209, 213, 219);
46
+ border: none;
47
+ border-radius: 9999px;
48
+ cursor: pointer;
49
+ transition: all 0.3s ease;
50
+ font-family: var(--font-family-manrope);
51
+ font-size: var(--font-size-button-m);
52
+ font-weight: var(--font-weight-medium);
53
+ line-height: var(--line-height-button-m);
54
+ letter-spacing: var(--letter-spacing-button-m);
55
+ }
56
+
57
+ .tab-button--active {
58
+ background-color: var(--color-primary-60);
59
+ color: var(--color-primary-90);
60
+ }
61
+
62
+ .tab-button:hover:not(.tab-button--active) {
63
+ background-color: rgba(1, 234, 199, 0.1);
64
+ }
65
+
66
+ .tab-button:focus-visible {
67
+ outline: 2px solid var(--color-primary-60);
68
+ outline-offset: 2px;
69
+ }
70
+ </style>
71
+
@@ -0,0 +1,152 @@
1
+ ---
2
+ /**
3
+ * Componente átomo para texto con fuente monoespaciada
4
+ * @description Texto optimizado para mostrar datos técnicos, códigos o información estructurada
5
+ */
6
+
7
+ export interface Props {
8
+ /** Contenido de texto a mostrar */
9
+ text?: string;
10
+ /** Tamaño del texto */
11
+ size?: 'xs' | 'sm' | 'base' | 'lg' | 'xl';
12
+ /** Color del texto */
13
+ color?: 'primary' | 'secondary' | 'accent' | 'muted' | 'white' | 'inherit';
14
+ /** Peso de la fuente */
15
+ weight?: 'normal' | 'medium' | 'semibold' | 'bold';
16
+ /** Si el texto debe estar en mayúsculas */
17
+ uppercase?: boolean;
18
+ /** Si el texto debe tener espaciado entre letras */
19
+ tracking?: boolean;
20
+ /** Clases CSS adicionales */
21
+ class?: string;
22
+ /** ID único para el elemento */
23
+ id?: string;
24
+ /** Título para accesibilidad */
25
+ title?: string;
26
+ }
27
+
28
+ const {
29
+ text = '',
30
+ size = 'base',
31
+ color = 'inherit',
32
+ weight = 'normal',
33
+ uppercase = false,
34
+ tracking = false,
35
+ class: className = '',
36
+ id,
37
+ title,
38
+ ...rest
39
+ } = Astro.props;
40
+
41
+ // Procesamiento del contenido
42
+ const hasSlotContent = Astro.slots.has('default');
43
+ const content = hasSlotContent ? null : text;
44
+ ---
45
+
46
+ <span
47
+ class={`
48
+ text-mono
49
+ text-mono--${size}
50
+ text-mono--${color}
51
+ text-mono--${weight}
52
+ ${uppercase ? 'text-mono--uppercase' : ''}
53
+ ${tracking ? 'text-mono--tracking' : ''}
54
+ ${className}
55
+ `}
56
+ id={id}
57
+ title={title}
58
+ {...rest}
59
+ >
60
+ {hasSlotContent ? (
61
+ <slot />
62
+ ) : (
63
+ content
64
+ )}
65
+ </span>
66
+
67
+ <style>
68
+ /* Base monospace styling */
69
+ .text-mono {
70
+ font-family: 'Fira Code', 'JetBrains Mono', 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
71
+ font-variant-numeric: tabular-nums;
72
+ letter-spacing: 0.025em;
73
+ transition: color 0.2s ease-in-out;
74
+ user-select: text;
75
+ -webkit-user-select: text;
76
+ -moz-user-select: text;
77
+ -ms-user-select: text;
78
+ }
79
+
80
+ /* Tamaños */
81
+ .text-mono--xs {
82
+ font-size: var(--font-size-body-xxs); /* 10px */
83
+ }
84
+
85
+ .text-mono--sm {
86
+ font-size: var(--font-size-body-xs); /* 12px */
87
+ }
88
+
89
+ .text-mono--base {
90
+ font-size: var(--font-size-body-s); /* 14px */
91
+ }
92
+
93
+ .text-mono--lg {
94
+ font-size: var(--font-size-body-m); /* 16px */
95
+ }
96
+
97
+ .text-mono--xl {
98
+ font-size: var(--font-size-body-l); /* 18px */
99
+ }
100
+
101
+ /* Colores */
102
+ .text-mono--primary {
103
+ color: var(--color-primary-60);
104
+ }
105
+
106
+ .text-mono--secondary {
107
+ color: rgb(209, 213, 219);
108
+ }
109
+
110
+ .text-mono--accent {
111
+ color: rgb(103, 232, 249);
112
+ }
113
+
114
+ .text-mono--muted {
115
+ color: rgb(156, 163, 175);
116
+ }
117
+
118
+ .text-mono--white {
119
+ color: var(--color-white);
120
+ }
121
+
122
+ .text-mono--inherit {
123
+ color: inherit;
124
+ }
125
+
126
+ /* Pesos */
127
+ .text-mono--normal {
128
+ font-weight: var(--font-weight-regular);
129
+ }
130
+
131
+ .text-mono--medium {
132
+ font-weight: var(--font-weight-medium);
133
+ }
134
+
135
+ .text-mono--semibold {
136
+ font-weight: 600;
137
+ }
138
+
139
+ .text-mono--bold {
140
+ font-weight: var(--font-weight-bold);
141
+ }
142
+
143
+ /* Modificadores */
144
+ .text-mono--uppercase {
145
+ text-transform: uppercase;
146
+ }
147
+
148
+ .text-mono--tracking {
149
+ letter-spacing: 0.05em;
150
+ }
151
+ </style>
152
+
@@ -0,0 +1,215 @@
1
+ ---
2
+ /**
3
+ * Copyright (c) 2025 Grupo DedSec S.A. de C.V.
4
+ * Este código fuente es propiedad exclusiva de Grupo DedSec S.A. de C.V.
5
+ * Se prohíbe su uso, reproducción, distribución o modificación, total o parcial, sin autorización expresa por escrito.
6
+ * No se permite el uso comercial ni la redistribución pública del mismo.
7
+ * Para licenciamiento, contactar a: admin@dedsec.com.mx
8
+ */
9
+
10
+ /**
11
+ * Átomo: TimelineStep
12
+ * @description Paso individual de una línea de tiempo con ícono, título y descripción
13
+ */
14
+
15
+ import shieldIcon from '../../icons/shield-checkmark-outline.svg?raw';
16
+ import searchIcon from '../../icons/search-outline.svg?raw';
17
+ import cardIcon from '../../icons/card-outline.svg?raw';
18
+ import chartIcon from '../../icons/bar-chart-outline.svg?raw';
19
+ import trophyIcon from '../../icons/trophy-outline.svg?raw';
20
+ import userIcon from '../../icons/person-outline.svg?raw';
21
+ import documentIcon from '../../icons/document-text-outline.svg?raw';
22
+ import laptopIcon from '../../icons/laptop-outline.svg?raw';
23
+ import cashIcon from '../../icons/cash-outline.svg?raw';
24
+ import pieIcon from '../../icons/pie-chart-outline.svg?raw';
25
+
26
+ export interface Props {
27
+ icon: string;
28
+ title: string;
29
+ description: string;
30
+ stepNumber: number;
31
+ isVertical?: boolean;
32
+ animationDelay?: number;
33
+ class?: string;
34
+ }
35
+
36
+ const {
37
+ icon,
38
+ title,
39
+ description,
40
+ stepNumber,
41
+ isVertical = false,
42
+ animationDelay = 0,
43
+ class: className = ""
44
+ } = Astro.props;
45
+
46
+ // Mapeo de iconos disponibles
47
+ const iconMap: Record<string, string> = {
48
+ shield: shieldIcon,
49
+ search: searchIcon,
50
+ card: cardIcon,
51
+ chart: chartIcon,
52
+ trophy: trophyIcon,
53
+ user: userIcon,
54
+ 'document-text': documentIcon,
55
+ laptop: laptopIcon,
56
+ cash: cashIcon,
57
+ pie: pieIcon
58
+ };
59
+
60
+ const iconSvg = iconMap[icon] || iconMap.shield;
61
+ const iconSize = isVertical ? '20' : '24';
62
+ ---
63
+
64
+ <div class={`timeline-step ${isVertical ? 'timeline-step--vertical' : 'timeline-step--horizontal'} ${className}`}>
65
+ <div class="timeline-step__icon-container">
66
+ <!-- Ícono principal -->
67
+ <div class="timeline-step__icon">
68
+ <Fragment set:html={iconSvg.replace('<svg', `<svg width="${iconSize}" height="${iconSize}" class="timeline-step__svg"`)} />
69
+ </div>
70
+
71
+ <!-- Efecto pulse animado -->
72
+ <div
73
+ class="timeline-step__pulse"
74
+ style={`animation-delay: ${animationDelay}s;`}
75
+ ></div>
76
+
77
+ <!-- Conector vertical (solo para timeline vertical) -->
78
+ {isVertical && stepNumber < 5 && (
79
+ <div class="timeline-step__connector"></div>
80
+ )}
81
+ </div>
82
+
83
+ <!-- Contenido del paso -->
84
+ <div class={`timeline-step__content ${isVertical ? 'timeline-step__content--vertical' : 'timeline-step__content--horizontal'}`}>
85
+ <h3 class={`timeline-step__title ${isVertical ? '' : 'timeline-step__title--horizontal'}`}>
86
+ {stepNumber}. {title}
87
+ </h3>
88
+ <p class={`timeline-step__description ${!isVertical ? 'timeline-step__description--horizontal' : ''}`}>
89
+ {description}
90
+ </p>
91
+ </div>
92
+ </div>
93
+
94
+ <style>
95
+ /* Base styles */
96
+ .timeline-step {
97
+ position: relative;
98
+ }
99
+
100
+ /* Horizontal layout */
101
+ .timeline-step--horizontal {
102
+ display: flex;
103
+ flex-direction: column;
104
+ align-items: center;
105
+ width: 20%;
106
+ }
107
+
108
+ /* Vertical layout */
109
+ .timeline-step--vertical {
110
+ display: flex;
111
+ align-items: flex-start;
112
+ }
113
+
114
+ /* Icon container */
115
+ .timeline-step__icon-container {
116
+ position: relative;
117
+ }
118
+
119
+ .timeline-step--vertical .timeline-step__icon-container {
120
+ flex-shrink: 0;
121
+ }
122
+
123
+ /* Icon */
124
+ .timeline-step__icon {
125
+ position: relative;
126
+ z-index: 10;
127
+ width: 48px;
128
+ height: 48px;
129
+ background-color: var(--color-primary-60);
130
+ border-radius: 50%;
131
+ display: flex;
132
+ align-items: center;
133
+ justify-content: center;
134
+ margin-bottom: 16px;
135
+ }
136
+
137
+ .timeline-step__icon :global(.timeline-step__svg) {
138
+ color: var(--color-primary-90);
139
+ fill: var(--color-primary-90);
140
+ }
141
+
142
+ /* Pulse effect */
143
+ .timeline-step__pulse {
144
+ position: absolute;
145
+ top: -8px;
146
+ left: -8px;
147
+ width: 64px;
148
+ height: 64px;
149
+ border: 2px solid rgba(1, 234, 199, 0.3);
150
+ border-radius: 50%;
151
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
152
+ }
153
+
154
+ @keyframes pulse {
155
+ 0%, 100% {
156
+ opacity: 0.3;
157
+ transform: scale(1);
158
+ }
159
+ 50% {
160
+ opacity: 0.1;
161
+ transform: scale(1.05);
162
+ }
163
+ }
164
+
165
+ /* Connector for vertical timeline */
166
+ .timeline-step__connector {
167
+ position: absolute;
168
+ top: 48px;
169
+ left: 50%;
170
+ transform: translateX(-50%);
171
+ width: 2px;
172
+ height: 64px;
173
+ background-color: rgba(1, 234, 199, 0.3);
174
+ }
175
+
176
+ /* Content */
177
+ .timeline-step__content--horizontal {
178
+ text-align: center;
179
+ }
180
+
181
+ .timeline-step__content--vertical {
182
+ flex: 1;
183
+ margin-left: 16px;
184
+ }
185
+
186
+ /* Title */
187
+ .timeline-step__title {
188
+ font-family: var(--font-family-manrope);
189
+ font-size: var(--font-size-subtitle-m);
190
+ font-weight: var(--font-weight-subtitle-m);
191
+ line-height: var(--line-height-subtitle-m);
192
+ letter-spacing: var(--letter-spacing-subtitle-m);
193
+ color: var(--color-white);
194
+ }
195
+
196
+ .timeline-step__title--horizontal {
197
+ margin-top: 16px;
198
+ margin-bottom: 8px;
199
+ }
200
+
201
+ /* Description */
202
+ .timeline-step__description {
203
+ font-family: var(--font-family-manrope);
204
+ font-size: var(--font-size-body-s);
205
+ font-weight: var(--font-weight-body-s);
206
+ line-height: var(--line-height-body-s);
207
+ letter-spacing: var(--letter-spacing-body-s);
208
+ color: rgb(209, 213, 219);
209
+ }
210
+
211
+ .timeline-step__description--horizontal {
212
+ max-width: 192px;
213
+ }
214
+ </style>
215
+
@@ -0,0 +1,120 @@
1
+ ---
2
+ /**
3
+ * Copyright (c) 2025 Grupo DedSec S.A. de C.V.
4
+ * Este código fuente es propiedad exclusiva de Grupo DedSec S.A. de C.V.
5
+ * Se prohíbe su uso, reproducción, distribución o modificación, total o parcial, sin autorización expresa por escrito.
6
+ * No se permite el uso comercial ni la redistribución pública del mismo.
7
+ * Para licenciamiento, contactar a: admin@dedsec.com.mx
8
+ */
9
+
10
+ /**
11
+ * Átomo: TimelineStep
12
+ * @description Paso individual de una línea de tiempo con ícono, título y descripción
13
+ */
14
+
15
+ export interface Props {
16
+ icon: string;
17
+ title: string;
18
+ description: string;
19
+ stepNumber: number;
20
+ isVertical?: boolean;
21
+ animationDelay?: number;
22
+ class?: string;
23
+ }
24
+
25
+ const {
26
+ icon,
27
+ title,
28
+ description,
29
+ stepNumber,
30
+ isVertical = false,
31
+ animationDelay = 0,
32
+ class: className = ""
33
+ } = Astro.props;
34
+
35
+ // Importar los iconos SVG desde assets
36
+ import shieldIcon from '@assets/shield-checkmark-outline.svg?raw';
37
+ import searchIcon from '@assets/search-outline.svg?raw';
38
+ import cardIcon from '@assets/card-outline.svg?raw';
39
+ import chartIcon from '@assets/bar-chart-outline.svg?raw';
40
+ import trophyIcon from '@assets/trophy-outline.svg?raw';
41
+ import userIcon from '@assets/person-outline.svg?raw';
42
+ import documentIcon from '@assets/document-text-outline.svg?raw';
43
+ import laptopIcon from '@assets/laptop-outline.svg?raw';
44
+ import cashIcon from '@assets/cash-outline.svg?raw';
45
+ import pieIcon from '@assets/pie-chart-outline.svg?raw';
46
+
47
+ // Mapeo de iconos disponibles
48
+ const iconMap: Record<string, string> = {
49
+ shield: shieldIcon,
50
+ search: searchIcon,
51
+ card: cardIcon,
52
+ chart: chartIcon,
53
+ trophy: trophyIcon,
54
+ user: userIcon,
55
+ 'document-text': documentIcon,
56
+ laptop: laptopIcon,
57
+ cash: cashIcon,
58
+ pie: pieIcon
59
+ };
60
+
61
+ const iconSvg = iconMap[icon] || iconMap.shield;
62
+ ---
63
+
64
+ <div class={`timeline-step ${isVertical ? 'vertical' : 'horizontal'} ${className}`}>
65
+ <div class="timeline-icon-container relative">
66
+ <!-- Ícono principal -->
67
+ <div
68
+ class="w-12 h-12 bg-primary-60 rounded-full flex items-center justify-center relative z-10 mb-4"
69
+ set:html={iconSvg.replace('<svg', `<svg width="${isVertical ? '20' : '24'}" height="${isVertical ? '20' : '24'}" class="text-primary-90"`)}
70
+ ></div>
71
+
72
+ <!-- Efecto pulse animado -->
73
+ <div
74
+ class="absolute -top-2 -left-2 w-16 h-16 border-2 border-primary-60/30 rounded-full animate-pulse"
75
+ style={`animation-delay: ${animationDelay}s;`}
76
+ ></div>
77
+
78
+ <!-- Conector vertical (solo para timeline vertical) -->
79
+ {isVertical && stepNumber < 5 && (
80
+ <div class="absolute top-12 left-1/2 transform -translate-x-1/2 w-0.5 h-16 bg-primary-60/30"></div>
81
+ )}
82
+ </div>
83
+
84
+ <!-- Contenido del paso -->
85
+ <div class={`timeline-content ${isVertical ? 'flex-1 ml-4' : 'text-center'}`}>
86
+ <h3 class={`subtitle-m-style text-white ${isVertical ? ' ' : 'mb-2 mt-4'}`}>
87
+ {stepNumber}. {title}
88
+ </h3>
89
+ <p class={`body-s-style text-gray-300 ${!isVertical ? 'max-w-48' : ''}`}>
90
+ {description}
91
+ </p>
92
+ </div>
93
+ </div>
94
+
95
+ <style>
96
+ .timeline-step.horizontal {
97
+ @apply flex flex-col items-center w-1/5 relative;
98
+ }
99
+
100
+ .timeline-step.vertical {
101
+ @apply flex items-start;
102
+ }
103
+
104
+ .timeline-step.vertical .timeline-icon-container {
105
+ @apply flex-shrink-0 relative;
106
+ }
107
+
108
+ .timeline-step.horizontal .timeline-icon-container {
109
+ @apply relative;
110
+ }
111
+
112
+ @keyframes pulse {
113
+ 0%, 100% { opacity: 0.3; }
114
+ 50% { opacity: 0.1; }
115
+ }
116
+
117
+ .animate-pulse {
118
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
119
+ }
120
+ </style>
@@ -0,0 +1,16 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
2
+ <g clip-path="url(#clip0_16_5443)">
3
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M2.3973 14.3628C1.86528 16.8554 2.31359 18.9906 3.66155 20.3386C5.0095 21.6865 7.14472 22.1348 9.63727 21.6028C12.1213 21.0726 14.8566 19.5805 17.2184 17.2186C19.5803 14.8567 21.0725 12.1214 21.6027 9.63739C22.1347 7.14485 21.6864 5.00963 20.3384 3.66167C18.9905 2.31372 16.8553 1.86541 14.3627 2.39743C11.8787 2.92761 9.14343 4.41978 6.78154 6.78167C4.41965 9.14356 2.92749 11.8788 2.3973 14.3628ZM0.930342 14.0497C1.52937 11.2432 3.18468 8.25721 5.72088 5.72101C8.25708 3.18481 11.2431 1.5295 14.0496 0.930469C16.8476 0.333266 19.5721 0.774005 21.3991 2.60101C23.2261 4.42802 23.6668 7.15254 23.0696 9.9505C22.4706 12.757 20.8153 15.743 18.2791 18.2792C15.7429 20.8154 12.7569 22.4707 9.95038 23.0698C7.15241 23.667 4.42789 23.2262 2.60089 21.3992C0.773878 19.5722 0.333139 16.8477 0.930342 14.0497Z" fill="currentColor"/>
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M16.1884 7.81147C16.4813 8.10436 16.4813 8.57923 16.1884 8.87213L8.87213 16.1884C8.57923 16.4813 8.10436 16.4813 7.81147 16.1884C7.51857 15.8955 7.51857 15.4206 7.81147 15.1277L15.1277 7.81147C15.4206 7.51857 15.8955 7.51857 16.1884 7.81147Z" fill="currentColor"/>
5
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M10.4243 10.4243C10.7172 10.1314 11.192 10.1314 11.4849 10.4243L13.5755 12.5149C13.8684 12.8078 13.8684 13.2827 13.5755 13.5755C13.2827 13.8684 12.8078 13.8684 12.5149 13.5755L10.4243 11.4849C10.1314 11.192 10.1314 10.7172 10.4243 10.4243Z" fill="currentColor"/>
6
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M12.5151 8.33442C12.808 8.04152 13.2828 8.04152 13.5757 8.33442L15.6659 10.4246C15.9588 10.7175 15.9588 11.1923 15.6659 11.4852C15.373 11.7781 14.8981 11.7781 14.6052 11.4852L12.5151 9.39508C12.2222 9.10218 12.2222 8.62731 12.5151 8.33442Z" fill="currentColor"/>
7
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M13.5605 2.06293C13.8534 1.77004 14.3283 1.77004 14.6212 2.06293L21.9374 9.37918C22.2303 9.67207 22.2303 10.1469 21.9374 10.4398C21.6445 10.7327 21.1696 10.7327 20.8767 10.4398L13.5605 3.12359C13.2676 2.8307 13.2676 2.35582 13.5605 2.06293Z" fill="currentColor"/>
8
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M2.06293 13.5605C2.35582 13.2676 2.8307 13.2676 3.12359 13.5605L10.4398 20.8767C10.7327 21.1696 10.7327 21.6445 10.4398 21.9374C10.1469 22.2303 9.67207 22.2303 9.37918 21.9374L2.06293 14.6212C1.77004 14.3283 1.77004 13.8534 2.06293 13.5605Z" fill="currentColor"/>
9
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M8.33442 12.5151C8.62731 12.2222 9.10218 12.2222 9.39508 12.5151L11.4852 14.6052C11.7781 14.8981 11.7781 15.373 11.4852 15.6659C11.1923 15.9588 10.7175 15.9588 10.4246 15.6659L8.33442 13.5757C8.04152 13.2828 8.04152 12.808 8.33442 12.5151Z" fill="currentColor"/>
10
+ </g>
11
+ <defs>
12
+ <clipPath id="clip0_16_5443">
13
+ <rect width="24" height="24" fill="white"/>
14
+ </clipPath>
15
+ </defs>
16
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" width="115" height="48"><path fill="#17191E" d="M7.77 36.35C6.4 35.11 6 32.51 6.57 30.62c.99 1.2 2.35 1.57 3.75 1.78 2.18.33 4.31.2 6.33-.78.23-.12.44-.27.7-.42.18.55.23 1.1.17 1.67a4.56 4.56 0 0 1-1.94 3.23c-.43.32-.9.61-1.34.91-1.38.94-1.76 2.03-1.24 3.62l.05.17a3.63 3.63 0 0 1-1.6-1.38 3.87 3.87 0 0 1-.63-2.1c0-.37 0-.74-.05-1.1-.13-.9-.55-1.3-1.33-1.32a1.56 1.56 0 0 0-1.63 1.26c0 .06-.03.12-.05.2Z"/><path fill="url(#a)" d="M7.77 36.35C6.4 35.11 6 32.51 6.57 30.62c.99 1.2 2.35 1.57 3.75 1.78 2.18.33 4.31.2 6.33-.78.23-.12.44-.27.7-.42.18.55.23 1.1.17 1.67a4.56 4.56 0 0 1-1.94 3.23c-.43.32-.9.61-1.34.91-1.38.94-1.76 2.03-1.24 3.62l.05.17a3.63 3.63 0 0 1-1.6-1.38 3.87 3.87 0 0 1-.63-2.1c0-.37 0-.74-.05-1.1-.13-.9-.55-1.3-1.33-1.32a1.56 1.56 0 0 0-1.63 1.26c0 .06-.03.12-.05.2Z"/><path fill="#17191E" d="M.02 30.31s4.02-1.95 8.05-1.95l3.04-9.4c.11-.45.44-.76.82-.76.37 0 .7.31.82.76l3.04 9.4c4.77 0 8.05 1.95 8.05 1.95L17 11.71c-.2-.56-.53-.91-.98-.91H7.83c-.44 0-.76.35-.97.9L.02 30.31Zm42.37-5.97c0 1.64-2.05 2.62-4.88 2.62-1.85 0-2.5-.45-2.5-1.41 0-1 .8-1.49 2.65-1.49 1.67 0 3.09.03 4.73.23v.05Zm.03-2.04a21.37 21.37 0 0 0-4.37-.36c-5.32 0-7.82 1.25-7.82 4.18 0 3.04 1.71 4.2 5.68 4.2 3.35 0 5.63-.84 6.46-2.92h.14c-.03.5-.05 1-.05 1.4 0 1.07.18 1.16 1.06 1.16h4.15a16.9 16.9 0 0 1-.36-4c0-1.67.06-2.93.06-4.62 0-3.45-2.07-5.64-8.56-5.64-2.8 0-5.9.48-8.26 1.19.22.93.54 2.83.7 4.06 2.04-.96 4.95-1.37 7.2-1.37 3.11 0 3.97.71 3.97 2.15v.57Zm11.37 3c-.56.07-1.33.07-2.12.07-.83 0-1.6-.03-2.12-.1l-.02.58c0 2.85 1.87 4.52 8.45 4.52 6.2 0 8.2-1.64 8.2-4.55 0-2.74-1.33-4.09-7.2-4.39-4.58-.2-4.99-.7-4.99-1.28 0-.66.59-1 3.65-1 3.18 0 4.03.43 4.03 1.35v.2a46.13 46.13 0 0 1 4.24.03l.02-.55c0-3.36-2.8-4.46-8.2-4.46-6.08 0-8.13 1.49-8.13 4.39 0 2.6 1.64 4.23 7.48 4.48 4.3.14 4.77.62 4.77 1.28 0 .7-.7 1.03-3.71 1.03-3.47 0-4.35-.48-4.35-1.47v-.13Zm19.82-12.05a17.5 17.5 0 0 1-6.24 3.48c.03.84.03 2.4.03 3.24l1.5.02c-.02 1.63-.04 3.6-.04 4.9 0 3.04 1.6 5.32 6.58 5.32 2.1 0 3.5-.23 5.23-.6a43.77 43.77 0 0 1-.46-4.13c-1.03.34-2.34.53-3.78.53-2 0-2.82-.55-2.82-2.13 0-1.37 0-2.65.03-3.84 2.57.02 5.13.07 6.64.11-.02-1.18.03-2.9.1-4.04-2.2.04-4.65.07-6.68.07l.07-2.93h-.16Zm13.46 6.04a767.33 767.33 0 0 1 .07-3.18H82.6c.07 1.96.07 3.98.07 6.92 0 2.95-.03 4.99-.07 6.93h5.18c-.09-1.37-.11-3.68-.11-5.65 0-3.1 1.26-4 4.12-4 1.33 0 2.28.16 3.1.46.03-1.16.26-3.43.4-4.43-.86-.25-1.81-.41-2.96-.41-2.46-.03-4.26.98-5.1 3.38l-.17-.02Zm22.55 3.65c0 2.5-1.8 3.66-4.64 3.66-2.81 0-4.61-1.1-4.61-3.66s1.82-3.52 4.61-3.52c2.82 0 4.64 1.03 4.64 3.52Zm4.71-.11c0-4.96-3.87-7.18-9.35-7.18-5.5 0-9.23 2.22-9.23 7.18 0 4.94 3.49 7.59 9.21 7.59 5.77 0 9.37-2.65 9.37-7.6Z"/><defs><linearGradient id="a" x1="6.33" x2="19.43" y1="40.8" y2="34.6" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"/><stop offset="1" stop-color="#F041FF"/></linearGradient></defs></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1440" height="1024" fill="none"><path fill="url(#a)" fill-rule="evenodd" d="M-217.58 475.75c91.82-72.02 225.52-29.38 341.2-44.74C240 415.56 372.33 315.14 466.77 384.9c102.9 76.02 44.74 246.76 90.31 366.31 29.83 78.24 90.48 136.14 129.48 210.23 57.92 109.99 169.67 208.23 155.9 331.77-13.52 121.26-103.42 264.33-224.23 281.37-141.96 20.03-232.72-220.96-374.06-196.99-151.7 25.73-172.68 330.24-325.85 315.72-128.6-12.2-110.9-230.73-128.15-358.76-12.16-90.14 65.87-176.25 44.1-264.57-26.42-107.2-167.12-163.46-176.72-273.45-10.15-116.29 33.01-248.75 124.87-320.79Z" clip-rule="evenodd" style="opacity:.154"/><path fill="url(#b)" fill-rule="evenodd" d="M1103.43 115.43c146.42-19.45 275.33-155.84 413.5-103.59 188.09 71.13 409 212.64 407.06 413.88-1.94 201.25-259.28 278.6-414.96 405.96-130 106.35-240.24 294.39-405.6 265.3-163.7-28.8-161.93-274.12-284.34-386.66-134.95-124.06-436-101.46-445.82-284.6-9.68-180.38 247.41-246.3 413.54-316.9 101.01-42.93 207.83 21.06 316.62 6.61Z" clip-rule="evenodd" style="opacity:.154"/><defs><linearGradient id="b" x1="373" x2="1995.44" y1="1100" y2="118.03" gradientUnits="userSpaceOnUse"><stop stop-color="#D83333"/><stop offset="1" stop-color="#F041FF"/></linearGradient><linearGradient id="a" x1="107.37" x2="1130.66" y1="1993.35" y2="1026.31" gradientUnits="userSpaceOnUse"><stop stop-color="#3245FF"/><stop offset="1" stop-color="#BC52EE"/></linearGradient></defs></svg>
@@ -0,0 +1,13 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_16_5577)">
3
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 0.75C1.91421 0.75 2.25 1.08579 2.25 1.5V21.75H22.5C22.9142 21.75 23.25 22.0858 23.25 22.5C23.25 22.9142 22.9142 23.25 22.5 23.25H2.25C1.85218 23.25 1.47065 23.092 1.18934 22.8107C0.908035 22.5294 0.75 22.1478 0.75 21.75V1.5C0.75 1.08579 1.08579 0.75 1.5 0.75Z" fill="#21272A"/>
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M5.4375 11.25C5.33395 11.25 5.25 11.3339 5.25 11.4375V18.5625C5.25 18.6661 5.33395 18.75 5.4375 18.75H7.3125C7.41605 18.75 7.5 18.6661 7.5 18.5625V11.4375C7.5 11.3339 7.41605 11.25 7.3125 11.25H5.4375ZM3.75 11.4375C3.75 10.5055 4.50552 9.75 5.4375 9.75H7.3125C8.24448 9.75 9 10.5055 9 11.4375V18.5625C9 19.4945 8.24448 20.25 7.3125 20.25H5.4375C4.50552 20.25 3.75 19.4945 3.75 18.5625V11.4375Z" fill="#21272A"/>
5
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M12.1875 9C12.0839 9 12 9.08395 12 9.1875V18.5625C12 18.6661 12.0839 18.75 12.1875 18.75H14.0625C14.1661 18.75 14.25 18.6661 14.25 18.5625V9.1875C14.25 9.08395 14.1661 9 14.0625 9H12.1875ZM10.5 9.1875C10.5 8.25552 11.2555 7.5 12.1875 7.5H14.0625C14.9945 7.5 15.75 8.25552 15.75 9.1875V18.5625C15.75 19.4945 14.9945 20.25 14.0625 20.25H12.1875C11.2555 20.25 10.5 19.4945 10.5 18.5625V9.1875Z" fill="#21272A"/>
6
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M18.9204 6C18.8169 6 18.7329 6.08395 18.7329 6.1875V18.5625C18.7329 18.6661 18.8169 18.75 18.9204 18.75H20.7954C20.899 18.75 20.9829 18.6661 20.9829 18.5625V6.1875C20.9829 6.08395 20.899 6 20.7954 6H18.9204ZM17.2329 6.1875C17.2329 5.25552 17.9884 4.5 18.9204 4.5H20.7954C21.7274 4.5 22.4829 5.25552 22.4829 6.1875V18.5625C22.4829 19.4945 21.7274 20.25 20.7954 20.25H18.9204C17.9884 20.25 17.2329 19.4945 17.2329 18.5625V6.1875Z" fill="#21272A"/>
7
+ </g>
8
+ <defs>
9
+ <clipPath id="clip0_16_5577">
10
+ <rect width="24" height="24" fill="white"/>
11
+ </clipPath>
12
+ </defs>
13
+ </svg>