minispace commited on
Commit
8dfbe50
·
1 Parent(s): 18ba91b

Publish static link hub with embedded images

Browse files
Files changed (3) hide show
  1. index.html +0 -0
  2. script.js +48 -0
  3. styles.css +378 -0
index.html CHANGED
The diff for this file is too large to render. See raw diff
 
script.js ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // Interactive Behavior for Mauro Ferreyra Links Hub
2
+
3
+ document.addEventListener('DOMContentLoaded', () => {
4
+ setupCopyShortUrl();
5
+ });
6
+
7
+ let toastTimeout = null;
8
+
9
+ // Copy Short URL function
10
+ function setupCopyShortUrl() {
11
+ const shortUrlCard = document.getElementById('shortUrlCard');
12
+ if (!shortUrlCard) return;
13
+
14
+ shortUrlCard.addEventListener('click', () => {
15
+ const urlToCopy = 'https://huggingface.co/spaces/mauro/pi';
16
+
17
+ navigator.clipboard.writeText(urlToCopy).then(() => {
18
+ showToast('¡Enlace copiado al portapapeles!');
19
+ }).catch(() => {
20
+ showToast('huggingface.co/spaces/mauro/pi');
21
+ });
22
+ });
23
+ }
24
+
25
+ // Banner link click handler
26
+ function handleLinkClick(event, brandName) {
27
+ event.preventDefault();
28
+ showToast(`¡Sección ${brandName} en preparación! Próximamente disponible.`);
29
+ }
30
+
31
+ // Show Toast Notification
32
+ function showToast(message) {
33
+ const toast = document.getElementById('toast');
34
+ const toastMessage = document.getElementById('toastMessage');
35
+
36
+ if (!toast || !toastMessage) return;
37
+
38
+ toastMessage.textContent = message;
39
+ toast.classList.remove('hidden');
40
+
41
+ if (toastTimeout) {
42
+ clearTimeout(toastTimeout);
43
+ }
44
+
45
+ toastTimeout = setTimeout(() => {
46
+ toast.classList.add('hidden');
47
+ }, 3500);
48
+ }
styles.css ADDED
@@ -0,0 +1,378 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Reset & Core Setup */
2
+ *, *::before, *::after {
3
+ box-sizing: border-box;
4
+ margin: 0;
5
+ padding: 0;
6
+ }
7
+
8
+ :root {
9
+ --bg-dark: #0b0f19;
10
+ --card-bg: rgba(22, 29, 45, 0.7);
11
+ --border-color: rgba(255, 255, 255, 0.12);
12
+ --text-primary: #ffffff;
13
+ --text-secondary: #94a3b8;
14
+ --font-heading: 'Outfit', -apple-system, sans-serif;
15
+ --font-body: 'Plus Jakarta Sans', -apple-system, sans-serif;
16
+
17
+ /* Specific Brand Color Accents */
18
+ --color-pi: #f97316;
19
+ --color-stand: #06b6d4;
20
+ --color-bafles: #10b981;
21
+ --color-interactive: #a855f7;
22
+ }
23
+
24
+ body {
25
+ font-family: var(--font-body);
26
+ background-color: var(--bg-dark);
27
+ color: var(--text-primary);
28
+ min-height: 100vh;
29
+ display: flex;
30
+ justify-content: center;
31
+ align-items: center;
32
+ padding: clamp(1.5rem, 5vh, 4rem) clamp(1rem, 4vw, 3rem);
33
+ position: relative;
34
+ overflow-x: hidden;
35
+ -webkit-font-smoothing: antialiased;
36
+ }
37
+
38
+ /* Background Ambient Lighting */
39
+ .bg-radial {
40
+ position: fixed;
41
+ border-radius: 50%;
42
+ filter: blur(140px);
43
+ z-index: -2;
44
+ pointer-events: none;
45
+ opacity: 0.4;
46
+ }
47
+
48
+ .bg-radial-1 {
49
+ width: clamp(300px, 45vw, 700px);
50
+ height: clamp(300px, 45vw, 700px);
51
+ background: radial-gradient(circle, #3b82f6 0%, #1e1b4b 100%);
52
+ top: -150px;
53
+ left: -150px;
54
+ }
55
+
56
+ .bg-radial-2 {
57
+ width: clamp(350px, 50vw, 800px);
58
+ height: clamp(350px, 50vw, 800px);
59
+ background: radial-gradient(circle, #8b5cf6 0%, #064e3b 100%);
60
+ bottom: -200px;
61
+ right: -200px;
62
+ }
63
+
64
+ .bg-grid {
65
+ position: fixed;
66
+ inset: 0;
67
+ background-image: radial-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px);
68
+ background-size: clamp(24px, 3vw, 40px) clamp(24px, 3vw, 40px);
69
+ z-index: -1;
70
+ pointer-events: none;
71
+ }
72
+
73
+ /* Layout Container */
74
+ .container {
75
+ width: 100%;
76
+ max-width: min(680px, 92vw);
77
+ display: flex;
78
+ flex-direction: column;
79
+ align-items: center;
80
+ gap: clamp(1.5rem, 3vh, 2.5rem);
81
+ animation: fadeIn 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
82
+ }
83
+
84
+ /* Links Wrapper (Vertical Stack) */
85
+ .links-wrapper {
86
+ width: 100%;
87
+ display: flex;
88
+ flex-direction: column;
89
+ gap: clamp(1rem, 2.5vh, 1.5rem);
90
+ }
91
+
92
+ /* Banner Card Base */
93
+ .banner-card {
94
+ position: relative;
95
+ width: 100%;
96
+ height: clamp(100px, 12vh, 150px);
97
+ border-radius: clamp(16px, 2vw, 24px);
98
+ text-decoration: none;
99
+ overflow: hidden;
100
+ display: flex;
101
+ align-items: center;
102
+ padding: 0 clamp(1.25rem, 3vw, 2.5rem);
103
+ border: 1px solid rgba(255, 255, 255, 0.14);
104
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4);
105
+ transition: all 0.35s cubic-bezier(0.16, 1, 0.3, 1);
106
+ cursor: pointer;
107
+ outline: none;
108
+ -webkit-tap-highlight-color: transparent;
109
+ }
110
+
111
+ .banner-bg {
112
+ position: absolute;
113
+ inset: 0;
114
+ background-size: cover;
115
+ background-position: center;
116
+ transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
117
+ z-index: 1;
118
+ }
119
+
120
+ .banner-overlay {
121
+ position: absolute;
122
+ inset: 0;
123
+ z-index: 2;
124
+ transition: opacity 0.35s ease;
125
+ }
126
+
127
+ /* Specific Banner Gradient Color Tints */
128
+ /* 1. Pi Juguetes: Cálido / Ámbar Coral */
129
+ .banner-pi .banner-overlay {
130
+ background: linear-gradient(135deg, rgba(234, 88, 12, 0.92) 0%, rgba(180, 83, 9, 0.88) 60%, rgba(15, 23, 42, 0.92) 100%);
131
+ }
132
+
133
+ /* 2. Mundo Stand: Azul Arquitectónico Cyan */
134
+ .banner-stand .banner-overlay {
135
+ background: linear-gradient(135deg, rgba(14, 116, 144, 0.92) 0%, rgba(3, 105, 161, 0.88) 60%, rgba(15, 23, 42, 0.92) 100%);
136
+ }
137
+
138
+ /* 3. Bafles Xongo: Verde Esmeralda Acústico */
139
+ .banner-bafles .banner-overlay {
140
+ background: linear-gradient(135deg, rgba(16, 185, 129, 0.92) 0%, rgba(4, 120, 87, 0.88) 60%, rgba(15, 23, 42, 0.92) 100%);
141
+ }
142
+
143
+ /* 4. Interactive: Violeta Neón Digital */
144
+ .banner-interactive .banner-overlay {
145
+ background: linear-gradient(135deg, rgba(147, 51, 234, 0.92) 0%, rgba(109, 40, 217, 0.88) 60%, rgba(15, 23, 42, 0.92) 100%);
146
+ }
147
+
148
+ /* Banner Inner Content */
149
+ .banner-content {
150
+ position: relative;
151
+ z-index: 3;
152
+ width: 100%;
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: space-between;
156
+ }
157
+
158
+ .banner-info {
159
+ display: flex;
160
+ flex-direction: column;
161
+ gap: clamp(0.2rem, 0.5vh, 0.4rem);
162
+ }
163
+
164
+ .banner-tag {
165
+ font-size: clamp(0.68rem, 1vw, 0.85rem);
166
+ font-weight: 700;
167
+ text-transform: uppercase;
168
+ letter-spacing: 0.8px;
169
+ color: rgba(255, 255, 255, 0.95);
170
+ background: rgba(255, 255, 255, 0.18);
171
+ padding: clamp(0.2rem, 0.4vh, 0.35rem) clamp(0.55rem, 1vw, 0.85rem);
172
+ border-radius: 100px;
173
+ align-self: flex-start;
174
+ backdrop-filter: blur(6px);
175
+ border: 1px solid rgba(255, 255, 255, 0.2);
176
+ }
177
+
178
+ .banner-title {
179
+ font-family: var(--font-heading);
180
+ font-size: clamp(1.2rem, 2.2vw, 1.75rem);
181
+ font-weight: 700;
182
+ color: #ffffff;
183
+ letter-spacing: -0.2px;
184
+ text-shadow: 0 2px 6px rgba(0, 0, 0, 0.4);
185
+ }
186
+
187
+ /* Arrow Circle Icon */
188
+ .banner-arrow {
189
+ width: clamp(38px, 4.5vw, 54px);
190
+ height: clamp(38px, 4.5vw, 54px);
191
+ border-radius: 50%;
192
+ background: rgba(255, 255, 255, 0.2);
193
+ border: 1px solid rgba(255, 255, 255, 0.3);
194
+ display: flex;
195
+ align-items: center;
196
+ justify-content: center;
197
+ color: #ffffff;
198
+ backdrop-filter: blur(8px);
199
+ transition: all 0.35s cubic-bezier(0.16, 1, 0.3, 1);
200
+ flex-shrink: 0;
201
+ }
202
+
203
+ .banner-arrow svg {
204
+ width: clamp(18px, 2vw, 24px);
205
+ height: clamp(18px, 2vw, 24px);
206
+ transition: transform 0.3s ease;
207
+ }
208
+
209
+ /* Hover & Focus Micro-interactions */
210
+ .banner-card:hover {
211
+ transform: translateY(-4px) scale(1.01);
212
+ border-color: rgba(255, 255, 255, 0.4);
213
+ }
214
+
215
+ /* Smart TV & Remote D-Pad Keyboard Accessibility Focus Ring */
216
+ .banner-card:focus-visible {
217
+ outline: 4px solid #ffffff;
218
+ outline-offset: 4px;
219
+ box-shadow: 0 0 30px rgba(255, 255, 255, 0.8);
220
+ transform: translateY(-4px) scale(1.02);
221
+ }
222
+
223
+ .banner-pi:hover, .banner-pi:focus-visible {
224
+ box-shadow: 0 16px 35px rgba(234, 88, 12, 0.45);
225
+ }
226
+
227
+ .banner-stand:hover, .banner-stand:focus-visible {
228
+ box-shadow: 0 16px 35px rgba(14, 116, 144, 0.45);
229
+ }
230
+
231
+ .banner-bafles:hover, .banner-bafles:focus-visible {
232
+ box-shadow: 0 16px 35px rgba(16, 185, 129, 0.45);
233
+ }
234
+
235
+ .banner-interactive:hover, .banner-interactive:focus-visible {
236
+ box-shadow: 0 16px 35px rgba(147, 51, 234, 0.45);
237
+ }
238
+
239
+ .banner-card:hover .banner-bg, .banner-card:focus-visible .banner-bg {
240
+ transform: scale(1.08);
241
+ }
242
+
243
+ .banner-card:hover .banner-arrow, .banner-card:focus-visible .banner-arrow {
244
+ background: #ffffff;
245
+ color: #0f172a;
246
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);
247
+ }
248
+
249
+ .banner-card:hover .banner-arrow svg, .banner-card:focus-visible .banner-arrow svg {
250
+ transform: translateX(4px);
251
+ }
252
+
253
+ .banner-card:active {
254
+ transform: scale(0.98);
255
+ }
256
+
257
+ /* Footer Section */
258
+ .site-footer {
259
+ text-align: center;
260
+ margin-top: clamp(1rem, 2vh, 2rem);
261
+ }
262
+
263
+ .copyright {
264
+ font-size: clamp(0.85rem, 1.2vw, 1.05rem);
265
+ color: #94a3b8;
266
+ font-weight: 600;
267
+ letter-spacing: 0.5px;
268
+ opacity: 0.85;
269
+ }
270
+
271
+ /* Notification Toast */
272
+ .toast-notification {
273
+ position: fixed;
274
+ bottom: clamp(1.5rem, 4vh, 3rem);
275
+ left: 50%;
276
+ transform: translateX(-50%) translateY(0);
277
+ background: rgba(15, 23, 42, 0.94);
278
+ border: 1px solid rgba(255, 255, 255, 0.25);
279
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.7);
280
+ backdrop-filter: blur(16px);
281
+ padding: clamp(0.75rem, 1.5vh, 1rem) clamp(1.2rem, 2.5vw, 2rem);
282
+ border-radius: 100px;
283
+ display: flex;
284
+ align-items: center;
285
+ gap: 0.75rem;
286
+ z-index: 100;
287
+ transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
288
+ max-width: 90vw;
289
+ }
290
+
291
+ .toast-notification.hidden {
292
+ opacity: 0;
293
+ pointer-events: none;
294
+ transform: translateX(-50%) translateY(20px);
295
+ }
296
+
297
+ .toast-icon {
298
+ width: clamp(20px, 2.2vw, 26px);
299
+ height: clamp(20px, 2.2vw, 26px);
300
+ color: #38bdf8;
301
+ flex-shrink: 0;
302
+ display: flex;
303
+ align-items: center;
304
+ }
305
+
306
+ .toast-icon svg {
307
+ width: 100%;
308
+ height: 100%;
309
+ }
310
+
311
+ .toast-message {
312
+ font-size: clamp(0.82rem, 1.1vw, 1rem);
313
+ font-weight: 600;
314
+ color: #f8fafc;
315
+ }
316
+
317
+ /* Animations */
318
+ @keyframes fadeIn {
319
+ from {
320
+ opacity: 0;
321
+ transform: translateY(20px);
322
+ }
323
+ to {
324
+ opacity: 1;
325
+ transform: translateY(0);
326
+ }
327
+ }
328
+
329
+ /* Specific Device Formats Optimization */
330
+
331
+ /* 📱 Celulares / Smartphones (< 480px) */
332
+ @media (max-width: 480px) {
333
+ .container {
334
+ max-width: 100%;
335
+ }
336
+ .banner-card {
337
+ height: 95px;
338
+ padding: 0 1.1rem;
339
+ }
340
+ }
341
+
342
+ /* 📱 Celulares Grandes & Phablets (481px - 767px) */
343
+ @media (min-width: 481px) and (max-width: 767px) {
344
+ .banner-card {
345
+ height: 108px;
346
+ }
347
+ }
348
+
349
+ /* 📱 Tablets & iPads (768px - 1024px) */
350
+ @media (min-width: 768px) and (max-width: 1024px) {
351
+ .container {
352
+ max-width: 620px;
353
+ }
354
+ .banner-card {
355
+ height: 122px;
356
+ }
357
+ }
358
+
359
+ /* 🖥️ Pantallas Grandes, Laptops & Smart TVs (1025px+) */
360
+ @media (min-width: 1025px) {
361
+ .container {
362
+ max-width: 720px;
363
+ }
364
+ .banner-card {
365
+ height: 135px;
366
+ }
367
+ }
368
+
369
+ /* 📺 Smart TVs & Pantallas 4K (1920px+) */
370
+ @media (min-width: 1920px) {
371
+ .container {
372
+ max-width: 860px;
373
+ }
374
+ .banner-card {
375
+ height: 155px;
376
+ border-radius: 28px;
377
+ }
378
+ }