@jjlmoya/utils-audiovisual 1.4.0 → 1.6.0

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.
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  import type { TvDistanceUI } from './index';
3
- import './style.css';
4
3
 
5
4
  interface Props {
6
5
  ui: TvDistanceUI;
@@ -176,3 +175,441 @@ const { ui } = Astro.props;
176
175
  init();
177
176
  document.addEventListener('astro:page-load', init);
178
177
  </script>
178
+
179
+ <style>
180
+ :global(.tvd-root) {
181
+ --tvd-bg: #fff;
182
+ --tvd-bg-muted: #f8fafc;
183
+ --tvd-bg-sim: #f1f5f9;
184
+ --tvd-border: #e2e8f0;
185
+ --tvd-text: #0f172a;
186
+ --tvd-text-muted: #94a3b8;
187
+ --tvd-primary: #2563eb;
188
+ --tvd-primary-light: rgba(59,130,246,0.06);
189
+ --tvd-primary-border: rgba(59,130,246,0.12);
190
+ --tvd-shadow: rgba(0,0,0,0.06);
191
+ --tvd-radius: 1.5rem;
192
+
193
+ max-width: 1000px;
194
+ margin: 0 auto;
195
+ padding: 1rem;
196
+ }
197
+
198
+ :global(.theme-dark .tvd-root) {
199
+ --tvd-bg: #09090b;
200
+ --tvd-bg-muted: #18181b;
201
+ --tvd-bg-sim: #09090b;
202
+ --tvd-border: #27272a;
203
+ --tvd-text: #fafafa;
204
+ --tvd-text-muted: #71717a;
205
+ --tvd-primary: #60a5fa;
206
+ --tvd-primary-light: rgba(96,165,250,0.08);
207
+ --tvd-primary-border: rgba(96,165,250,0.15);
208
+ --tvd-shadow: rgba(0,0,0,0.4);
209
+ }
210
+
211
+ :global(.tvd-card) {
212
+ background: var(--tvd-bg);
213
+ border: 1px solid var(--tvd-border);
214
+ border-radius: var(--tvd-radius);
215
+ box-shadow: 0 4px 32px var(--tvd-shadow);
216
+ overflow: hidden;
217
+ }
218
+
219
+ :global(.tvd-body) {
220
+ display: grid;
221
+ grid-template-columns: 320px 1fr;
222
+ }
223
+
224
+ @media (max-width: 720px) {
225
+ :global(.tvd-body) {
226
+ grid-template-columns: 1fr;
227
+ }
228
+ }
229
+
230
+ :global(.tvd-left) {
231
+ padding: 1.75rem;
232
+ border-right: 1px solid var(--tvd-border);
233
+ display: flex;
234
+ flex-direction: column;
235
+ gap: 1.25rem;
236
+ }
237
+
238
+ @media (max-width: 720px) {
239
+ :global(.tvd-left) {
240
+ border-right: none;
241
+ border-bottom: 1px solid var(--tvd-border);
242
+ }
243
+ }
244
+
245
+ :global(.tvd-specs-block) {
246
+ background: var(--tvd-bg);
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 1.5rem;
250
+ }
251
+
252
+ :global(.tvd-specs-title) {
253
+ display: flex;
254
+ align-items: center;
255
+ gap: 0.5rem;
256
+ font-size: 1.05rem;
257
+ font-weight: 800;
258
+ color: var(--tvd-text);
259
+ margin: 0 0 0.25rem;
260
+ }
261
+
262
+ :global(.tvd-tv-icon) {
263
+ width: 1.25rem;
264
+ height: 1.25rem;
265
+ fill: var(--tvd-primary);
266
+ flex-shrink: 0;
267
+ }
268
+
269
+ :global(.tvd-label) {
270
+ font-size: 0.65rem;
271
+ font-weight: 800;
272
+ text-transform: uppercase;
273
+ letter-spacing: 0.12em;
274
+ color: var(--tvd-text-muted);
275
+ }
276
+
277
+ :global(.tvd-field) {
278
+ display: flex;
279
+ flex-direction: column;
280
+ gap: 0.625rem;
281
+ }
282
+
283
+ :global(.tvd-field-row) {
284
+ display: flex;
285
+ justify-content: space-between;
286
+ align-items: center;
287
+ }
288
+
289
+ :global(.tvd-diagonal-val) {
290
+ font-size: 0.85rem;
291
+ font-weight: 800;
292
+ color: var(--tvd-primary);
293
+ }
294
+
295
+ :global(.tvd-slider) {
296
+ width: 100%;
297
+ height: 6px;
298
+ accent-color: var(--tvd-primary);
299
+ cursor: pointer;
300
+ border-radius: 9999px;
301
+ }
302
+
303
+ :global(.tvd-res-grid) {
304
+ display: grid;
305
+ grid-template-columns: repeat(3, 1fr);
306
+ gap: 0.5rem;
307
+ }
308
+
309
+ :global(.tvd-res-btn) {
310
+ padding: 0.625rem 0.25rem;
311
+ border-radius: 0.75rem;
312
+ border: 1px solid var(--tvd-border);
313
+ background: var(--tvd-bg);
314
+ color: var(--tvd-text-muted);
315
+ font-size: 0.75rem;
316
+ font-weight: 700;
317
+ cursor: pointer;
318
+ transition: all 0.2s;
319
+ }
320
+
321
+ :global(.tvd-res-btn:hover:not(.tvd-res-btn-active)) {
322
+ border-color: var(--tvd-primary);
323
+ opacity: 0.7;
324
+ }
325
+
326
+ :global(.tvd-res-btn-active) {
327
+ background: var(--tvd-primary);
328
+ color: #fff;
329
+ border-color: var(--tvd-primary);
330
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.25);
331
+ }
332
+
333
+ :global(.tvd-thx-block) {
334
+ background: var(--tvd-primary-light);
335
+ border: 1px solid var(--tvd-primary-border);
336
+ border-radius: 1rem;
337
+ padding: 1rem;
338
+ display: flex;
339
+ flex-direction: column;
340
+ gap: 0.625rem;
341
+ }
342
+
343
+ :global(.tvd-thx-header) {
344
+ display: flex;
345
+ align-items: center;
346
+ gap: 0.5rem;
347
+ }
348
+
349
+ :global(.tvd-thx-icon) {
350
+ width: 1.125rem;
351
+ height: 1.125rem;
352
+ fill: var(--tvd-primary);
353
+ flex-shrink: 0;
354
+ }
355
+
356
+ :global(.tvd-thx-title) {
357
+ font-size: 0.8rem;
358
+ font-weight: 800;
359
+ color: var(--tvd-primary);
360
+ }
361
+
362
+ :global(.tvd-thx-desc) {
363
+ font-size: 0.75rem;
364
+ line-height: 1.6;
365
+ color: var(--tvd-primary);
366
+ opacity: 0.8;
367
+ margin: 0;
368
+ }
369
+
370
+ :global(.tvd-right) {
371
+ display: flex;
372
+ flex-direction: column;
373
+ background: var(--tvd-bg);
374
+ }
375
+
376
+ :global(.tvd-sim-badge) {
377
+ display: flex;
378
+ align-items: center;
379
+ gap: 0.5rem;
380
+ padding: 1.25rem 1.5rem 0;
381
+ }
382
+
383
+ :global(.tvd-sim-dot) {
384
+ width: 8px;
385
+ height: 8px;
386
+ border-radius: 50%;
387
+ background: var(--tvd-primary);
388
+ animation: tvd-pulse 2s infinite;
389
+ }
390
+
391
+ @keyframes tvd-pulse {
392
+ 0%, 100% { opacity: 1; }
393
+ 50% { opacity: 0.4; }
394
+ }
395
+
396
+ :global(.tvd-sim-badge-text) {
397
+ font-size: 0.6rem;
398
+ font-weight: 900;
399
+ text-transform: uppercase;
400
+ letter-spacing: 0.18em;
401
+ color: var(--tvd-text-muted);
402
+ }
403
+
404
+ :global(.tvd-sim-area) {
405
+ flex: 1;
406
+ background: var(--tvd-bg-sim);
407
+ display: flex;
408
+ flex-direction: column;
409
+ align-items: center;
410
+ justify-content: flex-start;
411
+ padding: 2rem 1rem 1.5rem;
412
+ position: relative;
413
+ min-height: 400px;
414
+ }
415
+
416
+ :global(.tvd-tv-visual) {
417
+ position: relative;
418
+ display: flex;
419
+ flex-direction: column;
420
+ align-items: center;
421
+ transition: width 0.5s ease;
422
+ }
423
+
424
+ :global(.tvd-tv-screen) {
425
+ background: #0a0a0f;
426
+ border: 3px solid #27272a;
427
+ border-radius: 0.5rem;
428
+ width: 100%;
429
+ aspect-ratio: 16/9;
430
+ display: flex;
431
+ align-items: center;
432
+ justify-content: center;
433
+ position: relative;
434
+ overflow: hidden;
435
+ box-shadow: 0 20px 50px rgba(0,0,0,0.3);
436
+ }
437
+
438
+ :global(.tvd-screen-gradient) {
439
+ position: absolute;
440
+ inset: 0;
441
+ background: linear-gradient(135deg, rgba(59,130,246,0.1) 0%, transparent 60%);
442
+ }
443
+
444
+ :global(.tvd-screen-ghost) {
445
+ width: 30%;
446
+ height: 30%;
447
+ fill: rgba(96,165,250,0.2);
448
+ position: relative;
449
+ z-index: 1;
450
+ }
451
+
452
+ :global(.tvd-screen-inset) {
453
+ position: absolute;
454
+ inset: 0;
455
+ box-shadow: inset 0 0 40px rgba(59,130,246,0.08);
456
+ }
457
+
458
+ :global(.tvd-stand-neck) {
459
+ width: 16px;
460
+ height: 16px;
461
+ background: #27272a;
462
+ margin-top: -1px;
463
+ }
464
+
465
+ :global(.tvd-stand-base) {
466
+ width: 70px;
467
+ height: 6px;
468
+ background: #27272a;
469
+ border-radius: 3px;
470
+ }
471
+
472
+ :global(.tvd-tv-tooltip) {
473
+ position: absolute;
474
+ top: -2.25rem;
475
+ left: 50%;
476
+ transform: translateX(-50%);
477
+ background: var(--tvd-text);
478
+ color: var(--tvd-bg);
479
+ font-size: 0.65rem;
480
+ font-weight: 800;
481
+ padding: 0.3rem 0.75rem;
482
+ border-radius: 9999px;
483
+ white-space: nowrap;
484
+ opacity: 0;
485
+ transition: opacity 0.25s;
486
+ pointer-events: none;
487
+ }
488
+
489
+ :global(.tvd-tv-visual:hover .tvd-tv-tooltip) {
490
+ opacity: 1;
491
+ }
492
+
493
+ :global(.tvd-distance-line) {
494
+ width: 1px;
495
+ position: relative;
496
+ transition: height 0.5s ease;
497
+ margin: 0.25rem 0;
498
+ }
499
+
500
+ :global(.tvd-line-dashed) {
501
+ width: 100%;
502
+ height: 100%;
503
+ border-left: 1px dashed rgba(59,130,246,0.4);
504
+ }
505
+
506
+ :global(.tvd-person) {
507
+ display: flex;
508
+ flex-direction: column;
509
+ align-items: center;
510
+ gap: 1rem;
511
+ }
512
+
513
+ :global(.tvd-person-inner) {
514
+ display: flex;
515
+ flex-direction: column;
516
+ align-items: center;
517
+ }
518
+
519
+ :global(.tvd-person-head) {
520
+ width: 2.5rem;
521
+ height: 2.5rem;
522
+ border-radius: 50%;
523
+ background: var(--tvd-border);
524
+ border: 2px solid var(--tvd-text-muted);
525
+ opacity: 0.7;
526
+ margin-bottom: 0.25rem;
527
+ }
528
+
529
+ :global(.tvd-person-body) {
530
+ width: 4rem;
531
+ height: 2rem;
532
+ background: var(--tvd-primary);
533
+ border-radius: 1.5rem 1.5rem 0 0;
534
+ box-shadow: 0 4px 16px rgba(37,99,235,0.3);
535
+ }
536
+
537
+ :global(.tvd-location-card) {
538
+ background: var(--tvd-bg);
539
+ border: 1px solid var(--tvd-border);
540
+ border-radius: 1rem;
541
+ padding: 0.625rem 1.25rem;
542
+ display: flex;
543
+ flex-direction: column;
544
+ align-items: center;
545
+ gap: 0.2rem;
546
+ box-shadow: 0 4px 16px var(--tvd-shadow);
547
+ }
548
+
549
+ :global(.tvd-location-label) {
550
+ font-size: 0.6rem;
551
+ font-weight: 900;
552
+ text-transform: uppercase;
553
+ letter-spacing: 0.16em;
554
+ color: var(--tvd-text-muted);
555
+ }
556
+
557
+ :global(.tvd-location-val) {
558
+ font-size: 1.25rem;
559
+ font-weight: 900;
560
+ color: var(--tvd-primary);
561
+ line-height: 1;
562
+ }
563
+
564
+ :global(.tvd-stats) {
565
+ display: grid;
566
+ grid-template-columns: 1fr 1fr 1fr;
567
+ gap: 0.5rem;
568
+ padding: 0.75rem 1rem;
569
+ background: var(--tvd-bg-muted);
570
+ border-top: 1px solid var(--tvd-border);
571
+ }
572
+
573
+ :global(.tvd-stat) {
574
+ display: flex;
575
+ flex-direction: column;
576
+ align-items: center;
577
+ gap: 0.375rem;
578
+ padding: 1rem 0.5rem;
579
+ border-radius: 1rem;
580
+ transition: background 0.2s;
581
+ }
582
+
583
+ :global(.tvd-stat:hover) {
584
+ background: var(--tvd-bg);
585
+ }
586
+
587
+ :global(.tvd-stat-opt) {
588
+ background: var(--tvd-bg);
589
+ border: 1px solid var(--tvd-border);
590
+ box-shadow: 0 2px 8px var(--tvd-shadow);
591
+ }
592
+
593
+ :global(.tvd-stat-label) {
594
+ font-size: 0.6rem;
595
+ font-weight: 900;
596
+ text-transform: uppercase;
597
+ letter-spacing: 0.12em;
598
+ color: var(--tvd-text-muted);
599
+ }
600
+
601
+ :global(.tvd-stat-opt .tvd-stat-label) {
602
+ color: var(--tvd-primary);
603
+ }
604
+
605
+ :global(.tvd-stat-val) {
606
+ font-size: 1.2rem;
607
+ font-weight: 900;
608
+ color: var(--tvd-text);
609
+ }
610
+
611
+ :global(.tvd-stat-opt .tvd-stat-val) {
612
+ font-size: 1.75rem;
613
+ color: var(--tvd-primary);
614
+ }
615
+ </style>