@jjlmoya/utils-nautical 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,5 +1,4 @@
1
1
  ---
2
- import './style.css';
3
2
  import type { TideCalculatorUI } from './index';
4
3
 
5
4
  interface Props {
@@ -312,3 +311,316 @@ const { ui } = Astro.props;
312
311
 
313
312
  new TideCalculator();
314
313
  </script>
314
+
315
+ <style>
316
+ .tide-calculator {
317
+ --n-bg: #fff;
318
+ --n-bg-muted: #f1f5f9;
319
+ --n-text: #0f172a;
320
+ --n-text-muted: #475569;
321
+ --n-text-dim: #64748b;
322
+ --n-border: #e2e8f0;
323
+ --n-shadow: rgba(0, 0, 0, 0.05);
324
+ --n-primary: #3b82f6;
325
+ --n-primary-on: #fff;
326
+ --n-accent: #6366f1;
327
+ --n-cyan: #0891b2;
328
+ --n-success: #10b981;
329
+ --n-warning: #f59e0b;
330
+ --n-error: #f43f5e;
331
+
332
+ display: flex;
333
+ flex-direction: column;
334
+ gap: 1.5rem;
335
+ max-width: 1000px;
336
+ margin: 0 auto;
337
+ }
338
+
339
+ :global(.theme-dark) .tide-calculator {
340
+ --n-bg: #0f172a;
341
+ --n-bg-muted: #1e293b;
342
+ --n-text: #f8fafc;
343
+ --n-text-muted: #94a3b8;
344
+ --n-text-dim: #64748b;
345
+ --n-border: #334155;
346
+ --n-shadow: rgba(0, 0, 0, 0.3);
347
+ --n-primary: #60a5fa;
348
+ --n-primary-on: #fff;
349
+ --n-accent: #818cf8;
350
+ --n-cyan: #22d3ee;
351
+ --n-success: #34d399;
352
+ --n-warning: #fbbf24;
353
+ --n-error: #fb7185;
354
+ }
355
+
356
+ .tc-main-card {
357
+ background: var(--n-bg);
358
+ border: 1px solid var(--n-border);
359
+ border-radius: 2rem;
360
+ display: grid;
361
+ grid-template-columns: 320px 1fr;
362
+ overflow: hidden;
363
+ box-shadow: 0 20px 40px var(--n-shadow);
364
+ }
365
+
366
+ @media (max-width: 850px) {
367
+ .tc-main-card {
368
+ grid-template-columns: 1fr;
369
+ }
370
+ }
371
+
372
+ .tc-calc-sidebar {
373
+ background: var(--n-primary);
374
+ color: var(--n-primary-on);
375
+ padding: 2rem;
376
+ display: flex;
377
+ flex-direction: column;
378
+ gap: 2rem;
379
+ }
380
+
381
+ .tc-sidebar-header {
382
+ display: flex;
383
+ justify-content: space-between;
384
+ align-items: center;
385
+ }
386
+
387
+ .tc-sidebar-header h3 {
388
+ font-size: 1.1rem;
389
+ margin: 0;
390
+ font-weight: 700;
391
+ text-transform: uppercase;
392
+ letter-spacing: 0.05em;
393
+ opacity: 0.9;
394
+ }
395
+
396
+ :global(#invert-btn) {
397
+ background: rgba(255, 255, 255, 0.1);
398
+ border: none;
399
+ color: var(--n-primary-on);
400
+ width: 36px;
401
+ height: 36px;
402
+ border-radius: 50%;
403
+ cursor: pointer;
404
+ display: flex;
405
+ align-items: center;
406
+ justify-content: center;
407
+ transition: background 0.2s;
408
+ }
409
+
410
+ :global(#invert-btn:hover) {
411
+ background: rgba(255, 255, 255, 0.2);
412
+ }
413
+
414
+ .tc-input-set {
415
+ display: flex;
416
+ flex-direction: column;
417
+ gap: 1.5rem;
418
+ }
419
+
420
+ .tc-input-block {
421
+ display: flex;
422
+ flex-direction: column;
423
+ gap: 0.5rem;
424
+ }
425
+
426
+ .tc-input-block label {
427
+ font-size: 0.85rem;
428
+ font-weight: 700;
429
+ color: var(--n-primary-on);
430
+ opacity: 0.85;
431
+ }
432
+
433
+ .tc-input-block .row {
434
+ display: flex;
435
+ gap: 0.5rem;
436
+ }
437
+
438
+ .tide-calculator input[type='time'],
439
+ .tide-calculator input[type='number'] {
440
+ background: rgba(255, 255, 255, 0.1);
441
+ border: 1px solid rgba(255, 255, 255, 0.2);
442
+ border-radius: 0.8rem;
443
+ padding: 0.8rem;
444
+ color: var(--n-primary-on);
445
+ font-size: 1rem;
446
+ outline: none;
447
+ }
448
+
449
+ .tc-unit-input {
450
+ position: relative;
451
+ display: flex;
452
+ align-items: center;
453
+ }
454
+
455
+ .tc-unit-input input {
456
+ width: 80px;
457
+ padding-right: 25px;
458
+ }
459
+
460
+ .tc-unit-input span {
461
+ position: absolute;
462
+ right: 10px;
463
+ font-size: 0.8rem;
464
+ opacity: 0.5;
465
+ }
466
+
467
+ .tc-featured label {
468
+ color: var(--n-primary-on);
469
+ opacity: 1;
470
+ font-size: 0.95rem;
471
+ }
472
+
473
+ .tide-calculator input[type='time'].large-time {
474
+ background: var(--n-primary-on);
475
+ color: var(--n-primary);
476
+ font-size: 1.8rem;
477
+ font-weight: 800;
478
+ text-align: center;
479
+ }
480
+
481
+ .tc-calc-content {
482
+ padding: 2.5rem;
483
+ display: flex;
484
+ flex-direction: column;
485
+ gap: 2rem;
486
+ background: var(--n-bg-muted);
487
+ }
488
+
489
+ .tc-top-row {
490
+ display: flex;
491
+ justify-content: space-between;
492
+ align-items: flex-start;
493
+ }
494
+
495
+ .tc-result-display {
496
+ display: flex;
497
+ flex-direction: column;
498
+ }
499
+
500
+ .tc-result-display .label {
501
+ font-size: 0.85rem;
502
+ font-weight: 600;
503
+ color: var(--n-text-muted);
504
+ text-transform: uppercase;
505
+ letter-spacing: 0.05em;
506
+ }
507
+
508
+ .tc-value-box {
509
+ display: flex;
510
+ align-items: baseline;
511
+ gap: 0.5rem;
512
+ margin: 0.5rem 0;
513
+ }
514
+
515
+ :global(#target-value) {
516
+ font-size: 4rem;
517
+ font-weight: 800;
518
+ color: var(--n-accent);
519
+ line-height: 1;
520
+ }
521
+
522
+ .tc-value-box small {
523
+ font-size: 1.2rem;
524
+ font-weight: 600;
525
+ color: var(--n-text-dim);
526
+ }
527
+
528
+ .tc-status-indicator {
529
+ padding: 0.4rem 1rem;
530
+ border-radius: 2rem;
531
+ font-size: 0.85rem;
532
+ font-weight: 700;
533
+ display: inline-block;
534
+ width: fit-content;
535
+ background: var(--n-bg-muted);
536
+ color: var(--n-text-dim);
537
+ }
538
+
539
+ .tc-status-indicator.up {
540
+ background: color-mix(in srgb, var(--n-success), transparent 80%);
541
+ color: var(--n-success);
542
+ }
543
+
544
+ .tc-status-indicator.down {
545
+ background: color-mix(in srgb, var(--n-error), transparent 80%);
546
+ color: var(--n-error);
547
+ }
548
+
549
+ .tc-summary-info {
550
+ display: flex;
551
+ gap: 1.5rem;
552
+ }
553
+
554
+ .tc-stat {
555
+ display: flex;
556
+ flex-direction: column;
557
+ text-align: right;
558
+ }
559
+
560
+ .tc-s-label {
561
+ font-size: 0.75rem;
562
+ font-weight: 600;
563
+ color: var(--n-text-muted);
564
+ text-transform: uppercase;
565
+ }
566
+
567
+ .tc-stat span:last-child {
568
+ font-size: 1.1rem;
569
+ font-weight: 700;
570
+ color: var(--n-text);
571
+ }
572
+
573
+ .tc-chart-area {
574
+ background: var(--n-bg);
575
+ border: 1px solid var(--n-border);
576
+ border-radius: 1.5rem;
577
+ padding: 1.5rem;
578
+ height: 250px;
579
+ position: relative;
580
+ }
581
+
582
+ .tc-table-card {
583
+ background: var(--n-bg);
584
+ border: 1px solid var(--n-border);
585
+ border-radius: 1.5rem;
586
+ padding: 1.5rem;
587
+ }
588
+
589
+ .tc-table-card h4 {
590
+ margin: 0 0 1rem;
591
+ font-size: 1rem;
592
+ color: var(--n-text-muted);
593
+ }
594
+
595
+ .tc-table-wrapper {
596
+ overflow-x: auto;
597
+ }
598
+
599
+ .tide-calculator table {
600
+ width: 100%;
601
+ border-collapse: collapse;
602
+ }
603
+
604
+ .tide-calculator th {
605
+ text-align: left;
606
+ padding: 1rem;
607
+ font-size: 0.8rem;
608
+ color: var(--n-text-muted);
609
+ text-transform: uppercase;
610
+ border-bottom: 2px solid var(--n-bg-muted);
611
+ }
612
+
613
+ .tide-calculator td {
614
+ padding: 1rem;
615
+ font-size: 0.95rem;
616
+ color: var(--n-text-muted);
617
+ border-bottom: 1px solid var(--n-bg-muted);
618
+ }
619
+
620
+ @media (max-width: 640px) {
621
+ .tc-top-row {
622
+ flex-direction: column;
623
+ gap: 1.5rem;
624
+ }
625
+ }
626
+ </style>
@@ -1,5 +1,4 @@
1
1
  ---
2
- import './style.css';
3
2
  import type { UnderKeelUI } from './index';
4
3
 
5
4
  interface Props {
@@ -238,3 +237,324 @@ const { ui } = Astro.props;
238
237
 
239
238
  new UnderKeelCalculator();
240
239
  </script>
240
+
241
+ <style>
242
+ .under-keel-calculator {
243
+ --n-bg: #fff;
244
+ --n-bg-muted: #f1f5f9;
245
+ --n-text: #0f172a;
246
+ --n-text-muted: #475569;
247
+ --n-text-dim: #64748b;
248
+ --n-border: #e2e8f0;
249
+ --n-shadow: rgba(0, 0, 0, 0.05);
250
+ --n-primary: #3b82f6;
251
+ --n-primary-on: #fff;
252
+ --n-accent: #6366f1;
253
+ --n-cyan: #0891b2;
254
+ --n-success: #10b981;
255
+ --n-warning: #f59e0b;
256
+ --n-error: #f43f5e;
257
+ --ukc-label-size: 0.75rem;
258
+ --ukc-label-weight: 800;
259
+ --ukc-label-spacing: 0.06em;
260
+
261
+ display: flex;
262
+ flex-direction: column;
263
+ gap: 1.5rem;
264
+ max-width: 1000px;
265
+ margin: 0 auto;
266
+ }
267
+
268
+ :global(.theme-dark) .under-keel-calculator {
269
+ --n-bg: #0f172a;
270
+ --n-bg-muted: #1e293b;
271
+ --n-text: #f8fafc;
272
+ --n-text-muted: #94a3b8;
273
+ --n-text-dim: #64748b;
274
+ --n-border: #334155;
275
+ --n-shadow: rgba(0, 0, 0, 0.3);
276
+ --n-primary: #60a5fa;
277
+ --n-primary-on: #fff;
278
+ --n-accent: #818cf8;
279
+ --n-cyan: #22d3ee;
280
+ --n-success: #34d399;
281
+ --n-warning: #fbbf24;
282
+ --n-error: #fb7185;
283
+ }
284
+
285
+ .ukc-main-card {
286
+ background: var(--n-bg);
287
+ border: 1px solid var(--n-border);
288
+ border-radius: 2rem;
289
+ display: grid;
290
+ grid-template-columns: 320px 1fr;
291
+ overflow: hidden;
292
+ box-shadow: 0 20px 40px var(--n-shadow);
293
+ }
294
+
295
+ @media (max-width: 850px) {
296
+ .ukc-main-card {
297
+ grid-template-columns: 1fr;
298
+ }
299
+ }
300
+
301
+ .ukc-calc-sidebar {
302
+ background: var(--n-primary);
303
+ color: var(--n-primary-on);
304
+ padding: 2rem;
305
+ display: flex;
306
+ flex-direction: column;
307
+ gap: 2rem;
308
+ }
309
+
310
+ .ukc-sidebar-header h3 {
311
+ font-size: 1.1rem;
312
+ margin: 0;
313
+ font-weight: 700;
314
+ text-transform: uppercase;
315
+ letter-spacing: 0.05em;
316
+ opacity: 0.9;
317
+ }
318
+
319
+ .ukc-input-set {
320
+ display: flex;
321
+ flex-direction: column;
322
+ gap: 1.2rem;
323
+ }
324
+
325
+ .ukc-input-block {
326
+ display: flex;
327
+ flex-direction: column;
328
+ gap: 0.4rem;
329
+ }
330
+
331
+ .ukc-input-block label {
332
+ font-size: var(--ukc-label-size);
333
+ font-weight: var(--ukc-label-weight);
334
+ color: var(--n-primary-on);
335
+ opacity: 0.9;
336
+ text-transform: uppercase;
337
+ letter-spacing: var(--ukc-label-spacing);
338
+ }
339
+
340
+ .ukc-unit-input {
341
+ position: relative;
342
+ display: flex;
343
+ align-items: center;
344
+ }
345
+
346
+ .ukc-unit-input input {
347
+ width: 100%;
348
+ background: rgba(255, 255, 255, 0.1);
349
+ border: 1px solid rgba(255, 255, 255, 0.2);
350
+ border-radius: 0.8rem;
351
+ padding: 0.7rem 2.5rem 0.7rem 1rem;
352
+ color: var(--n-primary-on);
353
+ font-size: 1rem;
354
+ outline: none;
355
+ }
356
+
357
+ .ukc-unit-input span {
358
+ position: absolute;
359
+ right: 12px;
360
+ font-size: 0.85rem;
361
+ font-weight: 700;
362
+ opacity: 0.6;
363
+ }
364
+
365
+ .ukc-hr-divider {
366
+ height: 1px;
367
+ background: rgba(255, 255, 255, 0.1);
368
+ margin: 0.5rem 0;
369
+ }
370
+
371
+ .ukc-row {
372
+ display: flex;
373
+ gap: 0.5rem;
374
+ }
375
+
376
+ .under-keel-calculator input[type='time'],
377
+ .under-keel-calculator input[type='number'] {
378
+ background: rgba(255, 255, 255, 0.1);
379
+ border: 1px solid rgba(255, 255, 255, 0.2);
380
+ border-radius: 0.8rem;
381
+ padding: 0.7rem;
382
+ color: var(--n-primary-on);
383
+ font-size: 1rem;
384
+ outline: none;
385
+ }
386
+
387
+ .ukc-mini-num {
388
+ width: 80px;
389
+ }
390
+
391
+ .ukc-calc-content {
392
+ padding: 2.5rem;
393
+ display: flex;
394
+ flex-direction: column;
395
+ gap: 2rem;
396
+ background: var(--n-bg-muted);
397
+ }
398
+
399
+ .ukc-top-row {
400
+ display: flex;
401
+ justify-content: space-between;
402
+ align-items: flex-start;
403
+ }
404
+
405
+ .ukc-result-display {
406
+ display: flex;
407
+ flex-direction: column;
408
+ gap: 0.5rem;
409
+ }
410
+
411
+ .ukc-result-display .label {
412
+ font-size: 0.85rem;
413
+ font-weight: 600;
414
+ color: var(--n-text-muted);
415
+ text-transform: uppercase;
416
+ letter-spacing: 0.05em;
417
+ }
418
+
419
+ .ukc-time-range {
420
+ display: flex;
421
+ align-items: center;
422
+ gap: 1.5rem;
423
+ font-size: 3.5rem;
424
+ font-weight: 800;
425
+ color: var(--n-text);
426
+ line-height: 1;
427
+ }
428
+
429
+ .ukc-arrow-sep {
430
+ color: var(--n-cyan);
431
+ opacity: 0.4;
432
+ }
433
+
434
+ .ukc-status-indicator {
435
+ padding: 0.4rem 1.2rem;
436
+ border-radius: 2rem;
437
+ font-size: 0.9rem;
438
+ font-weight: 700;
439
+ width: fit-content;
440
+ background: var(--n-bg-muted);
441
+ color: var(--n-text-dim);
442
+ }
443
+
444
+ .ukc-status-indicator.success {
445
+ background: color-mix(in srgb, var(--n-success), transparent 80%);
446
+ color: var(--n-success);
447
+ }
448
+
449
+ .ukc-status-indicator.warning {
450
+ background: color-mix(in srgb, var(--n-warning), transparent 80%);
451
+ color: var(--n-warning);
452
+ }
453
+
454
+ .ukc-status-indicator.danger {
455
+ background: color-mix(in srgb, var(--n-error), transparent 80%);
456
+ color: var(--n-error);
457
+ }
458
+
459
+ .ukc-data-group {
460
+ display: flex;
461
+ flex-direction: column;
462
+ gap: 0.8rem;
463
+ }
464
+
465
+ .ukc-stat-pill {
466
+ background: var(--n-bg);
467
+ padding: 0.5rem 1rem;
468
+ border-radius: 0.8rem;
469
+ border: 1px solid var(--n-border);
470
+ display: flex;
471
+ justify-content: space-between;
472
+ gap: 2rem;
473
+ font-size: 0.9rem;
474
+ }
475
+
476
+ .ukc-stat-pill span {
477
+ color: var(--n-text-muted);
478
+ font-weight: 500;
479
+ }
480
+
481
+ .ukc-stat-pill strong {
482
+ color: var(--n-text);
483
+ font-weight: 700;
484
+ }
485
+
486
+ .ukc-visual-container {
487
+ background: var(--n-bg);
488
+ border: 1px solid var(--n-border);
489
+ border-radius: 1.5rem;
490
+ padding: 2rem;
491
+ height: 300px;
492
+ display: flex;
493
+ justify-content: center;
494
+ position: relative;
495
+ }
496
+
497
+ .ukc-ocean-frame {
498
+ width: 200px;
499
+ height: 100%;
500
+ background: var(--n-bg-muted);
501
+ border: 4px solid var(--n-border);
502
+ border-radius: 1rem;
503
+ position: relative;
504
+ overflow: hidden;
505
+ }
506
+
507
+ .ukc-water-volume {
508
+ position: absolute;
509
+ bottom: 0;
510
+ width: 100%;
511
+ background: linear-gradient(to top, var(--n-primary), var(--n-cyan));
512
+ opacity: 0.6;
513
+ transition: height 0.6s ease;
514
+ }
515
+
516
+ .ukc-surface-line {
517
+ position: absolute;
518
+ top: 0;
519
+ width: 100%;
520
+ height: 3px;
521
+ background: var(--n-cyan);
522
+ }
523
+
524
+ .ukc-ship-silhouette {
525
+ position: absolute;
526
+ left: 20px;
527
+ right: 20px;
528
+ height: 30px;
529
+ color: var(--n-text);
530
+ z-index: 10;
531
+ transition: bottom 0.6s ease;
532
+ }
533
+
534
+ .ukc-sand-bottom {
535
+ position: absolute;
536
+ bottom: 0;
537
+ width: 100%;
538
+ height: 40px;
539
+ background: color-mix(in srgb, var(--n-warning), transparent 40%);
540
+ display: flex;
541
+ align-items: center;
542
+ justify-content: center;
543
+ font-size: 0.7rem;
544
+ font-weight: 800;
545
+ color: var(--n-text);
546
+ letter-spacing: 0.2em;
547
+ z-index: 5;
548
+ }
549
+
550
+ @media (max-width: 640px) {
551
+ .ukc-time-range {
552
+ font-size: 2.2rem;
553
+ }
554
+
555
+ .ukc-top-row {
556
+ flex-direction: column;
557
+ gap: 2rem;
558
+ }
559
+ }
560
+ </style>