@jjlmoya/utils-audiovisual 1.4.0 → 1.5.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,7 +1,6 @@
1
1
  ---
2
2
  import { Icon } from 'astro-icon/components';
3
3
  import type { TimelapseUI } from './index';
4
- import './style.css';
5
4
 
6
5
  interface Props {
7
6
  ui: TimelapseUI;
@@ -146,3 +145,289 @@ const { ui } = Astro.props;
146
145
 
147
146
  recalculate();
148
147
  </script>
148
+
149
+ <style>
150
+ .tlc-root {
151
+ width: 100%;
152
+ max-width: 64rem;
153
+ margin: 0 auto;
154
+ }
155
+
156
+ .tlc-grid {
157
+ display: grid;
158
+ grid-template-columns: 1fr 1fr;
159
+ border-radius: 1.5rem;
160
+ overflow: hidden;
161
+ border: 1px solid #e2e8f0;
162
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
163
+ }
164
+
165
+ :global(.theme-dark) .tlc-grid {
166
+ border-color: #334155;
167
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
168
+ }
169
+
170
+ @media (max-width: 768px) {
171
+ .tlc-grid {
172
+ grid-template-columns: 1fr;
173
+ }
174
+ }
175
+
176
+ .tlc-inputs-panel {
177
+ padding: 2rem 3rem;
178
+ background: #f8fafc;
179
+ display: flex;
180
+ flex-direction: column;
181
+ gap: 2rem;
182
+ }
183
+
184
+ :global(.theme-dark) .tlc-inputs-panel {
185
+ background: rgba(15, 23, 42, 0.5);
186
+ }
187
+
188
+ @media (max-width: 768px) {
189
+ .tlc-inputs-panel {
190
+ padding: 2rem;
191
+ }
192
+ }
193
+
194
+ .tlc-panel-title {
195
+ display: flex;
196
+ align-items: center;
197
+ gap: 0.5rem;
198
+ font-size: 1.25rem;
199
+ font-weight: 900;
200
+ color: #1e293b;
201
+ margin: 0;
202
+ }
203
+
204
+ :global(.theme-dark) .tlc-panel-title {
205
+ color: #f8fafc;
206
+ }
207
+
208
+ .tlc-panel-icon {
209
+ width: 1.25rem;
210
+ height: 1.25rem;
211
+ color: #6366f1;
212
+ }
213
+
214
+ .tlc-fields {
215
+ display: flex;
216
+ flex-direction: column;
217
+ gap: 1.5rem;
218
+ }
219
+
220
+ .tlc-field-group {
221
+ display: flex;
222
+ flex-direction: column;
223
+ gap: 0.75rem;
224
+ }
225
+
226
+ .tlc-group-label {
227
+ font-size: 0.7rem;
228
+ font-weight: 700;
229
+ text-transform: uppercase;
230
+ letter-spacing: 0.08em;
231
+ color: #64748b;
232
+ }
233
+
234
+ .tlc-row {
235
+ display: flex;
236
+ gap: 1rem;
237
+ }
238
+
239
+ .tlc-field {
240
+ flex: 1;
241
+ display: flex;
242
+ flex-direction: column;
243
+ gap: 0.25rem;
244
+ }
245
+
246
+ .tlc-sub-label {
247
+ font-size: 0.7rem;
248
+ color: #94a3b8;
249
+ margin-left: 0.25rem;
250
+ }
251
+
252
+ .tlc-input {
253
+ width: 100%;
254
+ background: #fff;
255
+ border: 2px solid #e2e8f0;
256
+ border-radius: 0.75rem;
257
+ padding: 0.75rem 1rem;
258
+ font-size: 1.5rem;
259
+ font-weight: 700;
260
+ color: #334155;
261
+ outline: none;
262
+ transition: border-color 0.15s, box-shadow 0.15s;
263
+ box-sizing: border-box;
264
+ }
265
+
266
+ :global(.theme-dark) .tlc-input {
267
+ background: #1e293b;
268
+ border-color: #334155;
269
+ color: #f8fafc;
270
+ }
271
+
272
+ .tlc-input-indigo:focus {
273
+ border-color: #6366f1;
274
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
275
+ }
276
+
277
+ :global(.theme-dark) .tlc-input-indigo:focus {
278
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.25);
279
+ }
280
+
281
+ .tlc-input-pink:focus {
282
+ border-color: #ec4899;
283
+ box-shadow: 0 0 0 3px rgba(236, 72, 153, 0.15);
284
+ }
285
+
286
+ :global(.theme-dark) .tlc-input-pink:focus {
287
+ box-shadow: 0 0 0 3px rgba(236, 72, 153, 0.25);
288
+ }
289
+
290
+ .tlc-select-wrapper {
291
+ position: relative;
292
+ }
293
+
294
+ .tlc-select {
295
+ appearance: none;
296
+ cursor: pointer;
297
+ width: 100%;
298
+ }
299
+
300
+ .tlc-select-arrow {
301
+ position: absolute;
302
+ right: 1rem;
303
+ top: 50%;
304
+ transform: translateY(-50%);
305
+ width: 1.25rem;
306
+ height: 1.25rem;
307
+ color: #94a3b8;
308
+ pointer-events: none;
309
+ }
310
+
311
+ .tlc-results-panel {
312
+ padding: 2rem 3rem;
313
+ background: linear-gradient(135deg, #4f46e5, #7c3aed);
314
+ color: #fff;
315
+ display: flex;
316
+ flex-direction: column;
317
+ justify-content: space-between;
318
+ gap: 2rem;
319
+ }
320
+
321
+ @media (max-width: 768px) {
322
+ .tlc-results-panel {
323
+ padding: 2rem;
324
+ }
325
+ }
326
+
327
+ .tlc-results-title {
328
+ display: flex;
329
+ align-items: center;
330
+ gap: 0.5rem;
331
+ font-size: 1.25rem;
332
+ font-weight: 900;
333
+ color: #c7d2fe;
334
+ margin: 0;
335
+ }
336
+
337
+ .tlc-results-icon {
338
+ width: 1.25rem;
339
+ height: 1.25rem;
340
+ color: #a5b4fc;
341
+ }
342
+
343
+ .tlc-interval-section {
344
+ display: flex;
345
+ flex-direction: column;
346
+ gap: 0.5rem;
347
+ }
348
+
349
+ .tlc-interval-label {
350
+ font-size: 0.7rem;
351
+ font-weight: 700;
352
+ text-transform: uppercase;
353
+ letter-spacing: 0.1em;
354
+ color: #c7d2fe;
355
+ margin: 0;
356
+ }
357
+
358
+ .tlc-interval-value {
359
+ display: flex;
360
+ align-items: baseline;
361
+ gap: 0.5rem;
362
+ }
363
+
364
+ .tlc-big-number {
365
+ font-size: clamp(3.5rem, 8vw, 5rem);
366
+ font-weight: 900;
367
+ letter-spacing: -0.03em;
368
+ line-height: 1;
369
+ }
370
+
371
+ .tlc-big-unit {
372
+ font-size: 1.5rem;
373
+ font-weight: 700;
374
+ color: #a5b4fc;
375
+ }
376
+
377
+ .tlc-stats-grid {
378
+ display: grid;
379
+ grid-template-columns: 1fr 1fr;
380
+ gap: 1.5rem 2rem;
381
+ }
382
+
383
+ .tlc-stat {
384
+ display: flex;
385
+ flex-direction: column;
386
+ gap: 0.25rem;
387
+ }
388
+
389
+ .tlc-stat-label {
390
+ font-size: 0.65rem;
391
+ font-weight: 700;
392
+ text-transform: uppercase;
393
+ letter-spacing: 0.1em;
394
+ color: #c7d2fe;
395
+ margin: 0;
396
+ }
397
+
398
+ .tlc-stat-value {
399
+ font-size: 1.875rem;
400
+ font-weight: 700;
401
+ font-variant-numeric: tabular-nums;
402
+ margin: 0;
403
+ line-height: 1.1;
404
+ }
405
+
406
+ .tlc-stat-value-sm {
407
+ font-size: 1.25rem;
408
+ color: #e0e7ff;
409
+ }
410
+
411
+ .tlc-rule-info {
412
+ display: flex;
413
+ align-items: flex-start;
414
+ gap: 1rem;
415
+ padding-top: 1.5rem;
416
+ border-top: 1px solid rgba(165, 180, 252, 0.3);
417
+ }
418
+
419
+ .tlc-info-icon {
420
+ width: 1.5rem;
421
+ height: 1.5rem;
422
+ color: #a5b4fc;
423
+ flex-shrink: 0;
424
+ margin-top: 0.1rem;
425
+ }
426
+
427
+ .tlc-info-text {
428
+ font-size: 0.8rem;
429
+ line-height: 1.5;
430
+ color: #c7d2fe;
431
+ margin: 0;
432
+ }
433
+ </style>
@@ -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
+ .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
+ .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
+ .tvd-body {
220
+ display: grid;
221
+ grid-template-columns: 320px 1fr;
222
+ }
223
+
224
+ @media (max-width: 720px) {
225
+ .tvd-body {
226
+ grid-template-columns: 1fr;
227
+ }
228
+ }
229
+
230
+ .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
+ .tvd-left {
240
+ border-right: none;
241
+ border-bottom: 1px solid var(--tvd-border);
242
+ }
243
+ }
244
+
245
+ .tvd-specs-block {
246
+ background: var(--tvd-bg);
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 1.5rem;
250
+ }
251
+
252
+ .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
+ .tvd-tv-icon {
263
+ width: 1.25rem;
264
+ height: 1.25rem;
265
+ fill: var(--tvd-primary);
266
+ flex-shrink: 0;
267
+ }
268
+
269
+ .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
+ .tvd-field {
278
+ display: flex;
279
+ flex-direction: column;
280
+ gap: 0.625rem;
281
+ }
282
+
283
+ .tvd-field-row {
284
+ display: flex;
285
+ justify-content: space-between;
286
+ align-items: center;
287
+ }
288
+
289
+ .tvd-diagonal-val {
290
+ font-size: 0.85rem;
291
+ font-weight: 800;
292
+ color: var(--tvd-primary);
293
+ }
294
+
295
+ .tvd-slider {
296
+ width: 100%;
297
+ height: 6px;
298
+ accent-color: var(--tvd-primary);
299
+ cursor: pointer;
300
+ border-radius: 9999px;
301
+ }
302
+
303
+ .tvd-res-grid {
304
+ display: grid;
305
+ grid-template-columns: repeat(3, 1fr);
306
+ gap: 0.5rem;
307
+ }
308
+
309
+ .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
+ .tvd-res-btn:hover:not(.tvd-res-btn-active) {
322
+ border-color: var(--tvd-primary);
323
+ opacity: 0.7;
324
+ }
325
+
326
+ .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
+ .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
+ .tvd-thx-header {
344
+ display: flex;
345
+ align-items: center;
346
+ gap: 0.5rem;
347
+ }
348
+
349
+ .tvd-thx-icon {
350
+ width: 1.125rem;
351
+ height: 1.125rem;
352
+ fill: var(--tvd-primary);
353
+ flex-shrink: 0;
354
+ }
355
+
356
+ .tvd-thx-title {
357
+ font-size: 0.8rem;
358
+ font-weight: 800;
359
+ color: var(--tvd-primary);
360
+ }
361
+
362
+ .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
+ .tvd-right {
371
+ display: flex;
372
+ flex-direction: column;
373
+ background: var(--tvd-bg);
374
+ }
375
+
376
+ .tvd-sim-badge {
377
+ display: flex;
378
+ align-items: center;
379
+ gap: 0.5rem;
380
+ padding: 1.25rem 1.5rem 0;
381
+ }
382
+
383
+ .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
+ .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
+ .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
+ .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
+ .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
+ .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
+ .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
+ .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
+ .tvd-stand-neck {
459
+ width: 16px;
460
+ height: 16px;
461
+ background: #27272a;
462
+ margin-top: -1px;
463
+ }
464
+
465
+ .tvd-stand-base {
466
+ width: 70px;
467
+ height: 6px;
468
+ background: #27272a;
469
+ border-radius: 3px;
470
+ }
471
+
472
+ .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
+ .tvd-tv-visual:hover .tvd-tv-tooltip {
490
+ opacity: 1;
491
+ }
492
+
493
+ .tvd-distance-line {
494
+ width: 1px;
495
+ position: relative;
496
+ transition: height 0.5s ease;
497
+ margin: 0.25rem 0;
498
+ }
499
+
500
+ .tvd-line-dashed {
501
+ width: 100%;
502
+ height: 100%;
503
+ border-left: 1px dashed rgba(59,130,246,0.4);
504
+ }
505
+
506
+ .tvd-person {
507
+ display: flex;
508
+ flex-direction: column;
509
+ align-items: center;
510
+ gap: 1rem;
511
+ }
512
+
513
+ .tvd-person-inner {
514
+ display: flex;
515
+ flex-direction: column;
516
+ align-items: center;
517
+ }
518
+
519
+ .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
+ .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
+ .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
+ .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
+ .tvd-location-val {
558
+ font-size: 1.25rem;
559
+ font-weight: 900;
560
+ color: var(--tvd-primary);
561
+ line-height: 1;
562
+ }
563
+
564
+ .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
+ .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
+ .tvd-stat:hover {
584
+ background: var(--tvd-bg);
585
+ }
586
+
587
+ .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
+ .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
+ .tvd-stat-opt .tvd-stat-label {
602
+ color: var(--tvd-primary);
603
+ }
604
+
605
+ .tvd-stat-val {
606
+ font-size: 1.2rem;
607
+ font-weight: 900;
608
+ color: var(--tvd-text);
609
+ }
610
+
611
+ .tvd-stat-opt .tvd-stat-val {
612
+ font-size: 1.75rem;
613
+ color: var(--tvd-primary);
614
+ }
615
+ </style>