@nano133/nanoterra 0.6.1 → 0.7.1

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.
@@ -4,32 +4,106 @@
4
4
  orders as a table from 760 px.
5
5
  To theme it, set the --n133-* custom properties on the element that holds the panel (or on any parent): --n133-ink, --n133-ink-soft, --n133-paper, --n133-line,
6
6
  --n133-gem, --n133-gem-dark, --n133-sea, --n133-radius and --n133-font; and, with the tabbed layout, --n133-ground (the wells inside a card), --n133-warn and
7
- --n133-bad (the amber and red of a warning and a problem) and --n133-shadow (the cards' shadow). */
7
+ --n133-bad (the amber and red of a warning and a problem) and --n133-shadow (the cards' shadow). Every other colour has a hook too (the list below, e.g.
8
+ --n133-ok-bg). Those set the LIGHT theme. The DARK theme reads the twins with "dark-" in the name: --n133-dark-ink, --n133-dark-paper, --n133-dark-shadow and so
9
+ on. The panel's theme key (theme.ts) sets data-theme="light" or "dark" on the panel. */
8
10
 
9
11
  .n133-admin {
10
12
  --font: var(--n133-font, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);
11
- --gem: var(--n133-gem, #20c9a6);
12
- --gem-dark: var(--n133-gem-dark, #0e8a72);
13
+ --radius: var(--n133-radius, 18px);
13
14
  --ink: var(--n133-ink, #16202e);
14
15
  --ink-soft: var(--n133-ink-soft, #4a5568);
15
- --line: var(--n133-line, #dbe4ee);
16
16
  --paper: var(--n133-paper, #ffffff);
17
- --radius: var(--n133-radius, 18px);
18
- --sea: var(--n133-sea, #1f8fc4);
19
17
  --ground: var(--n133-ground, #f4f7fb);
18
+ --line: var(--n133-line, #dbe4ee);
19
+ --gem: var(--n133-gem, #20c9a6);
20
+ --gem-dark: var(--n133-gem-dark, #0e8a72);
21
+ --on-gem: var(--n133-on-gem, #062b23);
22
+ --sea: var(--n133-sea, #1f8fc4);
20
23
  --warn: var(--n133-warn, #8a4b00);
21
24
  --bad: var(--n133-bad, #b4142f);
22
- --shadow: var(--n133-shadow, 0 1px 2px rgb(16 24 40 / 0.05), 0 6px 18px -6px rgb(16 24 40 / 0.1));
25
+ --ok-bg: var(--n133-ok-bg, #dcf6ec);
26
+ --ok-ink: var(--n133-ok-ink, #0b6a52);
27
+ --info: var(--n133-info, #1d5fa8);
28
+ --info-bg: var(--n133-info-bg, #e3f0ff);
29
+ --info-ink: var(--n133-info-ink, #134e86);
30
+ --warn-bg: var(--n133-warn-bg, #fff1d6);
31
+ --bad-bg: var(--n133-bad-bg, #ffe3e8);
32
+ --bad-ink: var(--n133-bad-ink, #9e1029);
33
+ --neutral-bg: var(--n133-neutral-bg, #eef1f4);
34
+ --neutral-ink: var(--n133-neutral-ink, #3f4a5a);
35
+ --note-bg: var(--n133-note-bg, #fff7e8);
36
+ --note-line: var(--n133-note-line, #f3c27a);
37
+ --note-ink: var(--n133-note-ink, #4a2d00);
38
+ --alarm-bg: var(--n133-alarm-bg, #fff1f3);
39
+ --alarm-ink: var(--n133-alarm-ink, #5c0716);
40
+ --quiet: var(--n133-quiet, #6b7686);
41
+ --violet: var(--n133-violet, #6d3fc0);
42
+ --changed: var(--n133-changed, #c47a00);
43
+ --stage: var(--n133-stage, #ffffff);
44
+ --tint-empty: var(--n133-tint-empty, #9fb3c8);
45
+ --swatch-empty: var(--n133-swatch-empty, #c9d3df);
46
+ --swatch-edge: var(--n133-swatch-edge, rgb(0 0 0 / 0.18));
47
+ --code-bg: var(--n133-code-bg, #0f172a);
48
+ --code-ink: var(--n133-code-ink, #e6edf6);
49
+ /* The colour of every shadow (r g b), and the shadow of a card. */
50
+ --shade: 16 24 40;
51
+ --shadow: var(--n133-shadow, 0 1px 2px rgb(var(--shade) / 0.05), 0 6px 18px -6px rgb(var(--shade) / 0.1));
52
+ --gem-hover: color-mix(in srgb, var(--gem) 85%, #ffffff);
23
53
  --gap: 12px;
24
54
  container: n133 / inline-size;
25
55
  box-sizing: border-box;
26
56
  max-width: 1200px;
27
57
  margin: 0 auto;
28
58
  color: var(--ink);
59
+ color-scheme: light;
29
60
  font: 15px/1.45 var(--font);
30
61
  -webkit-text-size-adjust: 100%;
31
62
  }
32
63
 
64
+ /* Dark: mountAdmin sets data-theme="dark" on the panel (the owner's choice, or the device's setting). Each colour has a --n133-dark-* twin; the shadows go
65
+ black and faint, so the cards stand on their borders. */
66
+ .n133-admin[data-theme="dark"] {
67
+ --ink: var(--n133-dark-ink, #e7edf5);
68
+ --ink-soft: var(--n133-dark-ink-soft, #a9b5c5);
69
+ --paper: var(--n133-dark-paper, #171f2b);
70
+ --ground: var(--n133-dark-ground, #0f151e);
71
+ --line: var(--n133-dark-line, #303c4e);
72
+ --gem: var(--n133-dark-gem, #20c9a6);
73
+ --gem-dark: var(--n133-dark-gem-dark, #3fd8b6);
74
+ --on-gem: var(--n133-dark-on-gem, #062b23);
75
+ --sea: var(--n133-dark-sea, #62bcec);
76
+ --warn: var(--n133-dark-warn, #f2b45c);
77
+ --bad: var(--n133-dark-bad, #ff8293);
78
+ --ok-bg: var(--n133-dark-ok-bg, #14392f);
79
+ --ok-ink: var(--n133-dark-ok-ink, #7fe4c4);
80
+ --info: var(--n133-dark-info, #6eaaf0);
81
+ --info-bg: var(--n133-dark-info-bg, #172f4c);
82
+ --info-ink: var(--n133-dark-info-ink, #a3ccf6);
83
+ --warn-bg: var(--n133-dark-warn-bg, #3a2a12);
84
+ --bad-bg: var(--n133-dark-bad-bg, #45171f);
85
+ --bad-ink: var(--n133-dark-bad-ink, #ffa7b4);
86
+ --neutral-bg: var(--n133-dark-neutral-bg, #263040);
87
+ --neutral-ink: var(--n133-dark-neutral-ink, #c8d1dc);
88
+ --note-bg: var(--n133-dark-note-bg, #2a2113);
89
+ --note-line: var(--n133-dark-note-line, #7a5a22);
90
+ --note-ink: var(--n133-dark-note-ink, #f6dfb8);
91
+ --alarm-bg: var(--n133-dark-alarm-bg, #3a161d);
92
+ --alarm-ink: var(--n133-dark-alarm-ink, #ffcad2);
93
+ --quiet: var(--n133-dark-quiet, #98a5b7);
94
+ --violet: var(--n133-dark-violet, #bba3f6);
95
+ --changed: var(--n133-dark-changed, #e3a440);
96
+ --stage: var(--n133-dark-stage, #2a3546);
97
+ --tint-empty: var(--n133-dark-tint-empty, #6f86a0);
98
+ --swatch-empty: var(--n133-dark-swatch-empty, #66748a);
99
+ --swatch-edge: var(--n133-dark-swatch-edge, rgb(255 255 255 / 0.4));
100
+ --code-bg: var(--n133-dark-code-bg, #0a0f17);
101
+ --code-ink: var(--n133-dark-code-ink, #e6edf6);
102
+ --shade: 0 0 0;
103
+ --shadow: var(--n133-dark-shadow, 0 1px 2px rgb(0 0 0 / 0.3));
104
+ color-scheme: dark;
105
+ }
106
+
33
107
  .n133-admin *,
34
108
  .n133-admin *::before,
35
109
  .n133-admin *::after {
@@ -93,7 +167,7 @@
93
167
  @media (hover: hover) {
94
168
  .n133-admin .btn:not(:disabled):hover {
95
169
  border-color: color-mix(in srgb, var(--ink) 30%, var(--line));
96
- box-shadow: 0 1px 3px rgb(16 24 40 / 0.1);
170
+ box-shadow: 0 1px 3px rgb(var(--shade) / 0.1);
97
171
  }
98
172
  }
99
173
 
@@ -105,13 +179,13 @@
105
179
  .n133-admin .btn-primary {
106
180
  border-color: var(--gem-dark);
107
181
  background: var(--gem);
108
- color: #062b23;
182
+ color: var(--on-gem);
109
183
  }
110
184
 
111
185
  @media (hover: hover) {
112
186
  .n133-admin .btn-primary:not(:disabled):hover {
113
187
  border-color: var(--gem-dark);
114
- background: color-mix(in srgb, var(--gem) 85%, #ffffff);
188
+ background: var(--gem-hover);
115
189
  }
116
190
  }
117
191
 
@@ -386,30 +460,116 @@
386
460
  }
387
461
 
388
462
  .n133-admin .chip-ok {
389
- background: #dcf6ec;
390
- color: #0b6a52;
463
+ background: var(--ok-bg);
464
+ color: var(--ok-ink);
391
465
  }
392
466
 
393
467
  .n133-admin .chip-warn {
394
- background: #fff1d6;
468
+ background: var(--warn-bg);
395
469
  color: var(--warn);
396
470
  }
397
471
 
398
472
  .n133-admin .topbar-keys {
399
473
  display: flex;
474
+ align-items: center;
475
+ gap: 6px;
400
476
  margin-left: auto;
401
477
  }
402
478
 
479
+ /* ---- The theme key (theme.ts): a 44 px round key that opens a menu of Device, Light and Dark ---- */
480
+
481
+ .n133-admin .theme-key {
482
+ position: relative;
483
+ }
484
+
485
+ .n133-admin .gate {
486
+ position: relative;
487
+ }
488
+
489
+ .n133-admin .gate > .theme-key {
490
+ position: absolute;
491
+ top: 8px;
492
+ right: 8px;
493
+ }
494
+
495
+ .n133-admin .theme-summary {
496
+ width: 44px;
497
+ padding: 0;
498
+ color: var(--ink-soft);
499
+ list-style: none;
500
+ }
501
+
502
+ .n133-admin .theme-summary::-webkit-details-marker {
503
+ display: none;
504
+ }
505
+
506
+ .n133-admin .theme-key[open] > .theme-summary {
507
+ border-color: var(--line);
508
+ background: var(--ground);
509
+ color: var(--ink);
510
+ }
511
+
512
+ .n133-admin .theme-menu {
513
+ position: absolute;
514
+ top: calc(100% + 6px);
515
+ right: 0;
516
+ z-index: 20;
517
+ display: grid;
518
+ gap: 2px;
519
+ min-width: 156px;
520
+ padding: 6px;
521
+ border: 1px solid var(--line);
522
+ border-radius: 14px;
523
+ background: var(--paper);
524
+ box-shadow: 0 10px 30px -10px rgb(var(--shade) / 0.35);
525
+ text-align: left;
526
+ }
527
+
528
+ .n133-admin .theme-choice {
529
+ display: flex;
530
+ align-items: center;
531
+ gap: 10px;
532
+ min-height: 44px;
533
+ padding: 0 12px;
534
+ border: 0;
535
+ border-radius: 10px;
536
+ background: transparent;
537
+ color: var(--ink);
538
+ font: 650 15px/1 var(--font);
539
+ cursor: pointer;
540
+ touch-action: manipulation;
541
+ }
542
+
543
+ @media (hover: hover) {
544
+ .n133-admin .theme-choice:hover {
545
+ background: var(--ground);
546
+ }
547
+ }
548
+
549
+ .n133-admin .theme-choice[aria-pressed="true"] {
550
+ background: color-mix(in srgb, var(--gem) 16%, var(--paper));
551
+ color: var(--ink);
552
+ }
553
+
554
+ .n133-admin .theme-choice[aria-pressed="true"] .icon {
555
+ color: var(--gem-dark);
556
+ }
557
+
558
+ .n133-admin .theme-choice:focus-visible {
559
+ outline: 3px solid var(--sea);
560
+ outline-offset: -3px;
561
+ }
562
+
403
563
  /* ---- What is still off: one banner ---- */
404
564
 
405
565
  .n133-admin .banner {
406
566
  display: flex;
407
567
  gap: 12px;
408
568
  padding: 14px 16px;
409
- border: 1px solid #f3c27a;
569
+ border: 1px solid var(--note-line);
410
570
  border-radius: var(--radius);
411
- background: #fff7e8;
412
- color: #4a2d00;
571
+ background: var(--note-bg);
572
+ color: var(--note-ink);
413
573
  }
414
574
 
415
575
  .n133-admin .banner h2 {
@@ -461,11 +621,11 @@
461
621
  }
462
622
 
463
623
  .n133-admin .kpi-open {
464
- --accent: #1d5fa8;
624
+ --accent: var(--info);
465
625
  }
466
626
 
467
627
  .n133-admin .kpi-late {
468
- --accent: #6b7686;
628
+ --accent: var(--quiet);
469
629
  }
470
630
 
471
631
  .n133-admin .kpi-late.is-alert {
@@ -475,7 +635,7 @@
475
635
  }
476
636
 
477
637
  .n133-admin .kpi-players {
478
- --accent: #6d3fc0;
638
+ --accent: var(--violet);
479
639
  }
480
640
 
481
641
  .n133-admin .kpi-top {
@@ -627,7 +787,7 @@
627
787
  .n133-admin .seg-btn.is-on {
628
788
  background: var(--paper);
629
789
  color: var(--ink);
630
- box-shadow: 0 1px 3px rgb(16 24 40 / 0.14);
790
+ box-shadow: 0 1px 3px rgb(var(--shade) / 0.14);
631
791
  }
632
792
 
633
793
  .n133-admin .seg-btn.is-alert:not(.is-on) {
@@ -661,51 +821,51 @@
661
821
  align-items: center;
662
822
  padding: 3px 10px;
663
823
  border-radius: 999px;
664
- background: #eef1f4;
665
- color: #3f4a5a;
824
+ background: var(--neutral-bg);
825
+ color: var(--neutral-ink);
666
826
  font-size: 13px;
667
827
  font-weight: 700;
668
828
  white-space: nowrap;
669
829
  }
670
830
 
671
831
  .n133-admin .badge-paid {
672
- background: #dcf6ec;
673
- color: #0b6a52;
832
+ background: var(--ok-bg);
833
+ color: var(--ok-ink);
674
834
  }
675
835
 
676
836
  .n133-admin .badge-open {
677
- background: #e3f0ff;
678
- color: #134e86;
837
+ background: var(--info-bg);
838
+ color: var(--info-ink);
679
839
  }
680
840
 
681
841
  .n133-admin .badge-paid_late {
682
- background: #ffe3e8;
683
- color: #9e1029;
842
+ background: var(--bad-bg);
843
+ color: var(--bad-ink);
684
844
  }
685
845
 
686
846
  .n133-admin .pill {
687
847
  flex: none;
688
848
  padding: 3px 10px;
689
849
  border-radius: 999px;
690
- background: #eef1f4;
691
- color: #3f4a5a;
850
+ background: var(--neutral-bg);
851
+ color: var(--neutral-ink);
692
852
  font-size: 13px;
693
853
  font-weight: 700;
694
854
  }
695
855
 
696
856
  .n133-admin .pill-on {
697
- background: #dcf6ec;
698
- color: #0b6a52;
857
+ background: var(--ok-bg);
858
+ color: var(--ok-ink);
699
859
  }
700
860
 
701
861
  .n133-admin .look-dot,
702
862
  .n133-admin .swatch {
703
- --swatch: #c9d3df;
863
+ --swatch: var(--swatch-empty);
704
864
  display: inline-block;
705
865
  flex: none;
706
866
  width: 12px;
707
867
  height: 12px;
708
- border: 1px solid rgb(0 0 0 / 0.18);
868
+ border: 1px solid var(--swatch-edge);
709
869
  border-radius: 50%;
710
870
  background: var(--swatch);
711
871
  }
@@ -726,31 +886,31 @@
726
886
  gap: 4px;
727
887
  padding: 2px 8px;
728
888
  border-radius: 999px;
729
- background: #eef1f4;
730
- color: #3f4a5a;
889
+ background: var(--neutral-bg);
890
+ color: var(--neutral-ink);
731
891
  font-size: 12px;
732
892
  font-weight: 700;
733
893
  white-space: nowrap;
734
894
  }
735
895
 
736
896
  .n133-admin .mark-new {
737
- background: #e3f0ff;
738
- color: #134e86;
897
+ background: var(--info-bg);
898
+ color: var(--info-ink);
739
899
  }
740
900
 
741
901
  .n133-admin .mark-changed {
742
- background: #fff1d6;
902
+ background: var(--warn-bg);
743
903
  color: var(--warn);
744
904
  }
745
905
 
746
906
  .n133-admin .mark-bad {
747
- background: #ffe3e8;
907
+ background: var(--bad-bg);
748
908
  color: var(--bad);
749
909
  }
750
910
 
751
911
  .n133-admin .mark-ok {
752
- background: #dcf6ec;
753
- color: #0b6a52;
912
+ background: var(--ok-bg);
913
+ color: var(--ok-ink);
754
914
  }
755
915
 
756
916
  .n133-admin .share {
@@ -785,8 +945,8 @@
785
945
  gap: 6px 8px;
786
946
  padding: 10px 12px;
787
947
  border-radius: 12px;
788
- background: #fff1f3;
789
- color: #5c0716;
948
+ background: var(--alarm-bg);
949
+ color: var(--alarm-ink);
790
950
  font-size: 14px;
791
951
  }
792
952
 
@@ -1163,10 +1323,10 @@
1163
1323
  align-items: center;
1164
1324
  gap: 8px 10px;
1165
1325
  padding: 10px 12px;
1166
- border: 1px solid #f3c27a;
1326
+ border: 1px solid var(--note-line);
1167
1327
  border-radius: 14px;
1168
- background: #fff7e8;
1169
- color: #4a2d00;
1328
+ background: var(--note-bg);
1329
+ color: var(--note-ink);
1170
1330
  font-size: 14px;
1171
1331
  }
1172
1332
 
@@ -1201,12 +1361,12 @@
1201
1361
 
1202
1362
  /* The stage: the picture on a soft tint of the look's own body colour. */
1203
1363
  .n133-admin .shelf-stage {
1204
- --tint: #9fb3c8;
1364
+ --tint: var(--tint-empty);
1205
1365
  position: relative;
1206
1366
  display: grid;
1207
1367
  place-items: center;
1208
1368
  min-height: 128px;
1209
- background: radial-gradient(circle at 50% 70%, color-mix(in srgb, var(--tint) 30%, var(--paper)), color-mix(in srgb, var(--tint) 10%, var(--paper)) 70%);
1369
+ background: radial-gradient(circle at 50% 70%, color-mix(in srgb, var(--tint) 30%, var(--stage)), color-mix(in srgb, var(--tint) 10%, var(--stage)) 70%);
1210
1370
  }
1211
1371
 
1212
1372
  .n133-admin .shelf-pic {
@@ -1244,7 +1404,7 @@
1244
1404
  padding: 4px 10px;
1245
1405
  border-radius: 999px;
1246
1406
  background: var(--paper);
1247
- box-shadow: 0 1px 3px rgb(16 24 40 / 0.15);
1407
+ box-shadow: 0 1px 3px rgb(var(--shade) / 0.15);
1248
1408
  font-size: 13px;
1249
1409
  font-weight: 800;
1250
1410
  font-variant-numeric: tabular-nums;
@@ -1315,11 +1475,11 @@
1315
1475
  }
1316
1476
 
1317
1477
  .n133-admin .shelf-card.is-new {
1318
- border-color: color-mix(in srgb, #1d5fa8 45%, var(--line));
1478
+ border-color: color-mix(in srgb, var(--info) 45%, var(--line));
1319
1479
  }
1320
1480
 
1321
1481
  .n133-admin .shelf-card.is-changed {
1322
- border-color: color-mix(in srgb, #c47a00 50%, var(--line));
1482
+ border-color: color-mix(in srgb, var(--changed) 50%, var(--line));
1323
1483
  }
1324
1484
 
1325
1485
  .n133-admin .shelf-card.has-problem {
@@ -1331,7 +1491,7 @@
1331
1491
  gap: 0;
1332
1492
  border-width: 2px;
1333
1493
  border-color: var(--ink);
1334
- box-shadow: 0 10px 30px -10px rgb(16 24 40 / 0.25);
1494
+ box-shadow: 0 10px 30px -10px rgb(var(--shade) / 0.25);
1335
1495
  }
1336
1496
 
1337
1497
  .n133-admin .shelf-editing:focus {
@@ -1379,8 +1539,8 @@
1379
1539
  margin: 12px 14px 0;
1380
1540
  padding: 10px 12px 10px 30px;
1381
1541
  border-radius: 12px;
1382
- background: #fff1f3;
1383
- color: #5c0716;
1542
+ background: var(--alarm-bg);
1543
+ color: var(--alarm-ink);
1384
1544
  font-size: 14px;
1385
1545
  }
1386
1546
 
@@ -1616,7 +1776,7 @@
1616
1776
  border-top: 1px solid var(--line);
1617
1777
  border-bottom: 1px solid var(--line);
1618
1778
  background: color-mix(in srgb, var(--paper) 96%, transparent);
1619
- box-shadow: 0 -8px 24px -12px rgb(16 24 40 / 0.25);
1779
+ box-shadow: 0 -8px 24px -12px rgb(var(--shade) / 0.25);
1620
1780
  -webkit-backdrop-filter: blur(8px);
1621
1781
  backdrop-filter: blur(8px);
1622
1782
  }
@@ -1674,8 +1834,8 @@
1674
1834
  padding: 12px;
1675
1835
  overflow: auto;
1676
1836
  border-radius: 12px;
1677
- background: #0f172a;
1678
- color: #e6edf6;
1837
+ background: var(--code-bg);
1838
+ color: var(--code-ink);
1679
1839
  font-size: 12px;
1680
1840
  }
1681
1841
 
@@ -1753,7 +1913,7 @@
1753
1913
  height: 30px;
1754
1914
  border-radius: 50%;
1755
1915
  background: var(--paper);
1756
- box-shadow: 0 1px 3px rgb(16 24 40 / 0.25);
1916
+ box-shadow: 0 1px 3px rgb(var(--shade) / 0.25);
1757
1917
  }
1758
1918
 
1759
1919
  .n133-admin .switch.switch-on {
@@ -1761,7 +1921,7 @@
1761
1921
  padding: 0 6px 0 14px;
1762
1922
  border-color: var(--gem-dark);
1763
1923
  background: var(--gem);
1764
- color: #052b23;
1924
+ color: var(--on-gem);
1765
1925
  }
1766
1926
 
1767
1927
  .n133-admin .switch:disabled {
@@ -1801,7 +1961,7 @@
1801
1961
  gap: 8px;
1802
1962
  padding: 12px;
1803
1963
  border-radius: 12px;
1804
- background: #fff1f3;
1964
+ background: var(--alarm-bg);
1805
1965
  }
1806
1966
 
1807
1967
  .n133-admin .signout-confirm p {
@@ -2044,7 +2204,7 @@
2044
2204
 
2045
2205
  .n133-admin .tabbar-tab.is-on .tab-count {
2046
2206
  background: var(--gem);
2047
- color: #062b23;
2207
+ color: var(--on-gem);
2048
2208
  }
2049
2209
  }
2050
2210