pandorga 1.3.11 → 1.4.2

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.
@@ -31,12 +31,18 @@
31
31
  * chrome sits one step under it; micro chrome stays legible but quiet.
32
32
  */
33
33
  --studio-font-size: 18px;
34
- --studio-type-display: 1.55rem; /* page / collection title */
35
- --studio-type-title: 1.15rem; /* brand, map section heads */
36
- --studio-type-body: 1rem; /* entry titles, form values, nav entries */
37
- --studio-type-ui: 0.9rem; /* control text */
38
- --studio-type-meta: 0.8rem; /* meta lines, crumbs, counts */
39
- --studio-type-micro: 0.72rem; /* pills, tags, captions */
34
+ --studio-type-display: 1.55rem;
35
+ /* page / collection title */
36
+ --studio-type-title: 1.15rem;
37
+ /* brand, map section heads */
38
+ --studio-type-body: 1rem;
39
+ /* entry titles, form values, nav entries */
40
+ --studio-type-ui: 0.9rem;
41
+ /* control text */
42
+ --studio-type-meta: 0.8rem;
43
+ /* meta lines, crumbs, counts */
44
+ --studio-type-micro: 0.72rem;
45
+ /* pills, tags, captions */
40
46
  --studio-brand-title: calc(var(--studio-type-title) + 3pt);
41
47
  --studio-nav-label: calc(var(--studio-type-body) - 0.5pt);
42
48
  --studio-nav-item: var(--studio-type-body);
@@ -150,11 +156,16 @@ a {
150
156
  .studio-shell {
151
157
  display: grid;
152
158
  grid-template-columns: 16.5rem minmax(0, 1fr);
159
+ grid-template-rows: auto minmax(0, 1fr);
153
160
  min-height: 100vh;
154
161
  height: 100%;
155
162
  background: transparent;
156
163
  }
157
164
 
165
+ .studio-shell>.studio-toolbar {
166
+ grid-column: 1 / -1;
167
+ }
168
+
158
169
  .studio-nav {
159
170
  background: var(--panel);
160
171
  border-right: 1px solid color-mix(in srgb, var(--outline-variant) 55%, transparent);
@@ -233,7 +244,7 @@ a {
233
244
 
234
245
  .studio-brand {
235
246
  display: grid;
236
- grid-template-columns: 2.5rem minmax(0, 1fr);
247
+ grid-template-columns: 1.35rem minmax(0, 1fr);
237
248
  align-items: center;
238
249
  column-gap: var(--studio-space-sm);
239
250
  padding: var(--studio-space-sm) var(--studio-space-xs) var(--studio-space-md);
@@ -241,6 +252,38 @@ a {
241
252
  border-bottom: 1px solid var(--outline-variant);
242
253
  }
243
254
 
255
+ .studio-brand-toolbar {
256
+ flex: 0 0 auto;
257
+ width: auto;
258
+ height: var(--studio-toolbar-control-h, 2.35rem);
259
+ min-height: 0;
260
+ padding: 0 0.55rem;
261
+ margin: 0;
262
+ border-bottom: 0;
263
+ column-gap: 0.55rem;
264
+ --studio-brand-mark: 1.35rem;
265
+ grid-template-columns: var(--studio-brand-mark) auto;
266
+ box-sizing: border-box;
267
+ align-items: center;
268
+ }
269
+
270
+ .studio-brand-toolbar .studio-mark {
271
+ width: var(--studio-brand-mark);
272
+ height: var(--studio-brand-mark);
273
+ }
274
+
275
+ .studio-brand-toolbar .studio-brand-name {
276
+ font-family: var(--font-title);
277
+ /* Cinzel Decorative cap height is ~0.83em; size so the first S matches the mark. */
278
+ font-size: calc(var(--studio-brand-mark) / 0.83);
279
+ font-weight: 400;
280
+ font-synthesis: none;
281
+ line-height: 1;
282
+ letter-spacing: 0.02em;
283
+ text-transform: none;
284
+ color: var(--on-surface);
285
+ }
286
+
244
287
  .studio-brand-copy {
245
288
  display: flex;
246
289
  flex-direction: column;
@@ -250,12 +293,12 @@ a {
250
293
  }
251
294
 
252
295
  .studio-brand-name {
253
- font-family: var(--font-title);
254
- font-size: var(--studio-brand-title);
296
+ font-family: var(--font-label);
297
+ font-size: var(--studio-type-ui);
255
298
  font-weight: 400;
256
299
  font-synthesis: none;
257
300
  line-height: 1.15;
258
- letter-spacing: 0.02em;
301
+ letter-spacing: 0.04em;
259
302
  }
260
303
 
261
304
  .studio-brand strong {
@@ -279,15 +322,26 @@ button.studio-brand-home {
279
322
  font: inherit;
280
323
  }
281
324
 
325
+ button.studio-brand-home.studio-brand-toolbar {
326
+ width: auto;
327
+ flex: 0 0 auto;
328
+ }
329
+
282
330
  button.studio-brand-home:hover,
283
331
  button.studio-brand-home[aria-current="page"] {
284
332
  background: var(--surface-high);
285
333
  }
286
334
 
335
+ /* Toolbar brand stays flush — no filled plate. */
336
+ button.studio-brand-home.studio-brand-toolbar:hover,
337
+ button.studio-brand-home.studio-brand-toolbar[aria-current="page"] {
338
+ background: transparent;
339
+ }
340
+
287
341
  .studio-brand .studio-mark {
288
342
  display: block;
289
- width: 2.5rem;
290
- height: 2.5rem;
343
+ width: 1.35rem;
344
+ height: 1.35rem;
291
345
  justify-self: center;
292
346
  /* Optical nudge: logo glyph sits a hair high in its viewBox. */
293
347
  transform: translateY(0.5px);
@@ -438,7 +492,7 @@ button.studio-brand-home[aria-current="page"] {
438
492
 
439
493
  .studio-main {
440
494
  display: grid;
441
- grid-template-rows: auto auto minmax(0, 1fr);
495
+ grid-template-rows: auto minmax(0, 1fr);
442
496
  min-width: 0;
443
497
  min-height: 0;
444
498
  height: 100%;
@@ -472,26 +526,61 @@ button.studio-brand-home[aria-current="page"] {
472
526
  }
473
527
 
474
528
  .studio-toolbar {
529
+ --studio-toolbar-control-h: 2.35rem;
475
530
  display: flex;
476
531
  align-items: center;
477
532
  gap: var(--studio-space-sm);
478
- padding: var(--studio-space-xs) var(--studio-space-md);
479
- border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 55%, transparent);
480
- background: var(--background);
533
+ min-height: 3.25rem;
534
+ padding: 0.55rem 1rem;
535
+ border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 60%, transparent);
536
+ background: var(--panel);
537
+ box-shadow: inset 0 -1px 0 color-mix(in srgb, var(--outline) 8%, transparent);
481
538
  min-width: 0;
539
+ font-family: var(--font-label);
540
+ position: relative;
541
+ z-index: 30;
542
+ flex-wrap: nowrap;
482
543
  }
483
544
 
484
- .studio-toolbar .status-pill {
485
- flex: 1 1 auto;
545
+ .studio-toolbar-brand {
546
+ display: flex;
547
+ align-items: center;
548
+ gap: var(--studio-space-sm);
486
549
  min-width: 0;
550
+ flex: 0 1 auto;
551
+ }
552
+
553
+ .studio-toolbar-status {
554
+ display: none;
555
+ max-width: 18rem;
556
+ padding: 0.2rem 0.55rem;
557
+ border: 1px solid color-mix(in srgb, var(--outline-variant) 55%, transparent);
558
+ background: var(--background);
559
+ color: var(--on-surface-variant);
560
+ font-family: var(--font-mono);
561
+ font-size: var(--studio-type-micro);
562
+ letter-spacing: 0.03em;
563
+ text-transform: uppercase;
487
564
  overflow: hidden;
488
565
  text-overflow: ellipsis;
489
566
  white-space: nowrap;
490
567
  }
491
568
 
569
+ .studio-toolbar-status.error {
570
+ color: var(--error);
571
+ border-color: color-mix(in srgb, var(--error) 40%, var(--outline-variant));
572
+ background: color-mix(in srgb, var(--error) 8%, var(--background));
573
+ }
574
+
575
+ @media (min-width: 720px) {
576
+ .studio-toolbar-status {
577
+ display: inline-block;
578
+ }
579
+ }
580
+
492
581
  .studio-toolbar .spacer {
493
582
  flex: 1 1 auto;
494
- min-width: 0;
583
+ min-width: 0.75rem;
495
584
  }
496
585
 
497
586
  .studio-toolbar .btn {
@@ -500,6 +589,136 @@ button.studio-brand-home[aria-current="page"] {
500
589
  z-index: 1;
501
590
  }
502
591
 
592
+ /* Equal desktop tools — one locked box for Theme + Revert + Save + Export.
593
+ Theme lives in a wrapper; its button must use the same fixed height as
594
+ siblings (not height:100%), or filled vs outline buttons look uneven. */
595
+ .studio-toolbar>.studio-theme-menu,
596
+ .studio-toolbar>.btn-tool {
597
+ flex: 0 0 6rem;
598
+ width: 6rem;
599
+ height: var(--studio-toolbar-control-h);
600
+ min-height: var(--studio-toolbar-control-h);
601
+ max-height: var(--studio-toolbar-control-h);
602
+ box-sizing: border-box;
603
+ align-self: center;
604
+ }
605
+
606
+ .studio-toolbar>.studio-theme-menu {
607
+ display: flex;
608
+ align-items: stretch;
609
+ position: relative;
610
+ }
611
+
612
+ .studio-toolbar>.studio-theme-menu .btn-tool,
613
+ .studio-toolbar>.btn-tool {
614
+ box-sizing: border-box;
615
+ width: 100%;
616
+ height: var(--studio-toolbar-control-h);
617
+ min-height: var(--studio-toolbar-control-h);
618
+ max-height: var(--studio-toolbar-control-h);
619
+ margin: 0;
620
+ padding: 0 0.45rem;
621
+ border-width: 1px;
622
+ border-style: solid;
623
+ line-height: 1;
624
+ overflow: hidden;
625
+ display: inline-flex;
626
+ justify-content: center;
627
+ align-items: center;
628
+ gap: 0.35rem;
629
+ }
630
+
631
+ .studio-toolbar .studio-nav-menu-toggle {
632
+ display: none;
633
+ flex: 0 0 auto;
634
+ width: auto;
635
+ min-width: 2.5rem;
636
+ min-height: 2.5rem;
637
+ margin-left: 0.15rem;
638
+ padding: 0.35rem 0.45rem;
639
+ gap: 0.35rem;
640
+ border: 1px solid color-mix(in srgb, var(--outline-variant) 70%, transparent);
641
+ background: var(--background);
642
+ }
643
+
644
+ .studio-toolbar .studio-nav-menu-toggle .studio-mark {
645
+ display: block;
646
+ width: 1.25rem;
647
+ height: 1.25rem;
648
+ flex-shrink: 0;
649
+ }
650
+
651
+ .btn-tool {
652
+ gap: 0.35rem;
653
+ min-height: var(--studio-toolbar-control-h, 2.35rem);
654
+ padding: 0 0.55rem;
655
+ font-family: var(--font-label);
656
+ border: 1px solid color-mix(in srgb, var(--outline-variant) 70%, transparent);
657
+ background: var(--background);
658
+ box-sizing: border-box;
659
+ line-height: 1;
660
+ }
661
+
662
+ .btn-tool:hover:not(:disabled) {
663
+ background: var(--surface-high);
664
+ }
665
+
666
+ .btn-tool .btn-label {
667
+ font-family: var(--font-label);
668
+ font-size: var(--studio-type-ui);
669
+ letter-spacing: 0.05em;
670
+ line-height: 1;
671
+ }
672
+
673
+ .btn-tool .material-symbols-outlined {
674
+ font-size: 1.2rem;
675
+ line-height: 1;
676
+ font-variation-settings: "FILL" 0, "wght" 500, "GRAD" 0, "opsz" 24;
677
+ }
678
+
679
+ .studio-toolbar>.btn-primary,
680
+ .studio-toolbar .btn-primary {
681
+ background: var(--primary);
682
+ color: #fff;
683
+ border-color: var(--primary);
684
+ }
685
+
686
+ [data-theme="dark"] .studio-toolbar>.btn-primary,
687
+ [data-theme="dark"] .studio-toolbar .btn-primary {
688
+ color: #0f1a22;
689
+ }
690
+
691
+ .studio-toolbar>.btn-primary:hover:not(:disabled),
692
+ .studio-toolbar .btn-primary:hover:not(:disabled) {
693
+ filter: brightness(1.06);
694
+ background: var(--primary);
695
+ }
696
+
697
+ .btn-danger {
698
+ color: var(--error);
699
+ border-color: color-mix(in srgb, var(--error) 45%, var(--outline-variant));
700
+ }
701
+
702
+ .btn-danger:hover {
703
+ background: color-mix(in srgb, var(--error) 12%, var(--background));
704
+ }
705
+
706
+ .btn-reexport {
707
+ color: #5c4b00;
708
+ border-color: color-mix(in srgb, #c9a227 55%, var(--outline-variant));
709
+ background: color-mix(in srgb, #f5d76e 55%, var(--background));
710
+ }
711
+
712
+ .btn-reexport:hover {
713
+ background: color-mix(in srgb, #f5d76e 75%, var(--background));
714
+ }
715
+
716
+ [data-theme="dark"] .btn-reexport {
717
+ color: #f5e6a3;
718
+ border-color: color-mix(in srgb, #c9a227 50%, var(--outline-variant));
719
+ background: color-mix(in srgb, #746f30 45%, var(--panel));
720
+ }
721
+
503
722
  .studio-icon-bar .btn-icon {
504
723
  width: var(--studio-list-control-height);
505
724
  min-width: var(--studio-list-control-height);
@@ -640,6 +859,27 @@ button.studio-brand-home[aria-current="page"] {
640
859
  cursor: not-allowed;
641
860
  }
642
861
 
862
+ /* Toolbar tools keep full opacity when disabled — fading the whole control
863
+ makes Revert look shorter than Theme/Save/Export even at equal box height. */
864
+ .studio-toolbar>.btn-tool:disabled,
865
+ .studio-toolbar>.studio-theme-menu .btn-tool:disabled {
866
+ opacity: 1;
867
+ color: color-mix(in srgb, var(--on-surface-variant) 70%, transparent);
868
+ border-color: color-mix(in srgb, var(--outline-variant) 45%, transparent);
869
+ background: var(--background);
870
+ cursor: not-allowed;
871
+ }
872
+
873
+ .studio-toolbar>.btn-tool.btn-primary:disabled {
874
+ color: color-mix(in srgb, #fff 55%, var(--primary));
875
+ background: color-mix(in srgb, var(--primary) 45%, var(--background));
876
+ border-color: color-mix(in srgb, var(--primary) 45%, var(--outline-variant));
877
+ }
878
+
879
+ [data-theme="dark"] .studio-toolbar>.btn-tool.btn-primary:disabled {
880
+ color: color-mix(in srgb, #0f1a22 55%, var(--primary));
881
+ }
882
+
643
883
  .studio-body {
644
884
  display: grid;
645
885
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
@@ -705,7 +945,8 @@ button.studio-brand-home[aria-current="page"] {
705
945
  }
706
946
 
707
947
  .ledger-row--writing {
708
- grid-template-columns: var(--studio-ledger-thumb-w) minmax(0, 1fr);
948
+ grid-template-columns: var(--studio-ledger-thumb-w) minmax(0, 1fr) auto;
949
+ align-items: center;
709
950
  }
710
951
 
711
952
  .ledger-row:hover {
@@ -771,51 +1012,57 @@ button.studio-brand-home[aria-current="page"] {
771
1012
  line-height: 1.2;
772
1013
  }
773
1014
 
774
- .ledger-taxonomy {
775
- display: none;
776
- flex-wrap: wrap;
777
- gap: 0.25rem;
778
- align-content: flex-start;
779
- min-width: 0;
780
- }
781
-
782
- .ledger-tag {
783
- display: inline-flex;
784
- align-items: center;
785
- padding: 0.08rem 0.35rem;
786
- border: 1px solid color-mix(in srgb, var(--outline-variant) 65%, transparent);
787
- background: var(--background);
788
- font-family: var(--font-mono);
789
- font-size: var(--studio-type-micro);
790
- color: var(--on-surface-variant);
791
- line-height: 1.25;
792
- }
793
-
794
1015
  .ledger-ops {
795
- display: none;
1016
+ display: inline-flex;
796
1017
  align-items: center;
797
1018
  justify-content: flex-end;
798
- gap: 0.2rem;
799
- font-family: var(--font-mono);
800
- font-size: var(--studio-type-meta);
801
- color: var(--on-surface-variant);
1019
+ gap: 0.35rem;
802
1020
  white-space: nowrap;
803
1021
  padding-top: 0.1rem;
804
1022
  }
805
1023
 
806
- .ledger-ops-icon {
807
- font-size: 0.95rem !important;
1024
+ .ledger-op-btn {
1025
+ width: 2.35rem;
1026
+ min-width: 2.35rem;
1027
+ min-height: 2.35rem;
1028
+ padding: 0.3rem;
1029
+ border: 1px solid color-mix(in srgb, var(--outline-variant) 70%, transparent);
1030
+ background: var(--background);
1031
+ color: var(--on-surface);
1032
+ }
1033
+
1034
+ .ledger-op-btn .material-symbols-outlined {
1035
+ font-size: 1.15rem;
808
1036
  line-height: 1;
1037
+ font-variation-settings: "FILL" 0, "wght" 500, "GRAD" 0, "opsz" 24;
809
1038
  }
810
1039
 
811
- .ledger-row--writing:hover .ledger-ops {
812
- color: var(--on-surface);
1040
+ .ledger-edit-btn:hover {
1041
+ background: var(--surface-high);
1042
+ border-color: color-mix(in srgb, var(--primary) 40%, var(--outline-variant));
1043
+ color: var(--primary);
1044
+ }
1045
+
1046
+ .ledger-delete-btn {
1047
+ color: var(--error);
1048
+ border-color: color-mix(in srgb, var(--error) 45%, var(--outline-variant));
1049
+ background: color-mix(in srgb, var(--error) 6%, var(--background));
1050
+ }
1051
+
1052
+ .ledger-delete-btn:hover {
1053
+ background: color-mix(in srgb, var(--error) 14%, var(--background));
1054
+ border-color: color-mix(in srgb, var(--error) 60%, var(--outline-variant));
1055
+ }
1056
+
1057
+ .ledger-row--plain {
1058
+ grid-template-columns: var(--studio-ledger-thumb-w) minmax(0, 1fr) auto;
1059
+ align-items: center;
813
1060
  }
814
1061
 
815
1062
  @media (min-width: 720px) {
816
1063
  .ledger-columns {
817
1064
  display: grid;
818
- grid-template-columns: var(--studio-ledger-thumb-w) minmax(0, 1fr) minmax(6.5rem, 10rem) 4.75rem;
1065
+ grid-template-columns: var(--studio-ledger-thumb-w) minmax(0, 1fr) 6.25rem;
819
1066
  gap: var(--studio-space-sm);
820
1067
  align-items: end;
821
1068
  padding: var(--studio-space-xs) var(--studio-space-md);
@@ -835,17 +1082,9 @@ button.studio-brand-home[aria-current="page"] {
835
1082
  }
836
1083
 
837
1084
  .ledger-row--writing {
838
- grid-template-columns: var(--studio-ledger-thumb-w) minmax(0, 1fr) minmax(6.5rem, 10rem) 4.75rem;
1085
+ grid-template-columns: var(--studio-ledger-thumb-w) minmax(0, 1fr) auto;
839
1086
  align-items: center;
840
1087
  }
841
-
842
- .ledger-row--writing .ledger-taxonomy {
843
- display: flex;
844
- }
845
-
846
- .ledger-row--writing .ledger-ops {
847
- display: inline-flex;
848
- }
849
1088
  }
850
1089
 
851
1090
  .ledger-status--published {
@@ -987,7 +1226,7 @@ button.studio-brand-home[aria-current="page"] {
987
1226
  text-align: center;
988
1227
  }
989
1228
 
990
- .pane-editor > .btn {
1229
+ .pane-editor>.btn {
991
1230
  flex-shrink: 0;
992
1231
  align-self: flex-start;
993
1232
  margin-bottom: var(--studio-space-sm);
@@ -1042,11 +1281,15 @@ button.studio-brand-home[aria-current="page"] {
1042
1281
  .list-register-title-row {
1043
1282
  display: flex;
1044
1283
  flex-wrap: wrap;
1045
- align-items: baseline;
1284
+ align-items: center;
1046
1285
  gap: var(--studio-space-xs) var(--studio-space-md);
1047
1286
  margin-top: var(--studio-space-2xs);
1048
1287
  }
1049
1288
 
1289
+ .list-new-btn {
1290
+ margin-left: auto;
1291
+ }
1292
+
1050
1293
  .list-pane-count {
1051
1294
  font-family: var(--font-mono);
1052
1295
  font-size: var(--studio-type-meta);
@@ -1054,40 +1297,6 @@ button.studio-brand-home[aria-current="page"] {
1054
1297
  letter-spacing: 0.02em;
1055
1298
  }
1056
1299
 
1057
- .list-tag-filters {
1058
- display: flex;
1059
- flex-wrap: wrap;
1060
- gap: var(--studio-space-2xs) var(--studio-space-xs);
1061
- margin: 0 0 var(--studio-space-sm);
1062
- padding: var(--studio-space-sm) var(--studio-space-md);
1063
- background: var(--background);
1064
- border: 1px solid color-mix(in srgb, var(--outline-variant) 45%, transparent);
1065
- }
1066
-
1067
- .list-tag-chip {
1068
- margin: 0;
1069
- padding: 0.15rem 0.45rem;
1070
- border: 1px solid color-mix(in srgb, var(--outline-variant) 70%, transparent);
1071
- background: var(--background);
1072
- font-family: var(--font-mono);
1073
- font-size: var(--studio-type-micro);
1074
- letter-spacing: 0.03em;
1075
- text-transform: uppercase;
1076
- color: var(--on-surface-variant);
1077
- cursor: pointer;
1078
- }
1079
-
1080
- .list-tag-chip:hover {
1081
- background: var(--surface-high);
1082
- color: var(--on-surface);
1083
- }
1084
-
1085
- .list-tag-chip.is-active {
1086
- border-color: color-mix(in srgb, var(--primary) 55%, var(--outline-variant));
1087
- background: color-mix(in srgb, var(--primary) 12%, transparent);
1088
- color: var(--on-surface);
1089
- }
1090
-
1091
1300
  .front-matter {
1092
1301
  flex: 0 0 auto;
1093
1302
  margin: 0 0 var(--studio-space-sm);
@@ -1124,11 +1333,11 @@ button.studio-brand-home[aria-current="page"] {
1124
1333
  color: var(--outline-variant);
1125
1334
  }
1126
1335
 
1127
- .front-matter[open] > .front-matter-summary::before {
1336
+ .front-matter[open]>.front-matter-summary::before {
1128
1337
  content: "▾";
1129
1338
  }
1130
1339
 
1131
- .front-matter[open] > .front-matter-summary {
1340
+ .front-matter[open]>.front-matter-summary {
1132
1341
  border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 55%, transparent);
1133
1342
  }
1134
1343
 
@@ -1142,7 +1351,7 @@ button.studio-brand-home[aria-current="page"] {
1142
1351
  letter-spacing: 0.04em;
1143
1352
  }
1144
1353
 
1145
- .front-matter > .form-grid {
1354
+ .front-matter>.form-grid {
1146
1355
  padding: 0.15rem 0.65rem 0.75rem;
1147
1356
  max-width: none;
1148
1357
  }
@@ -1174,21 +1383,21 @@ button.studio-brand-home[aria-current="page"] {
1174
1383
  gap: 0.35rem;
1175
1384
  }
1176
1385
 
1177
- .editor-mast > .btn,
1178
- .editor-mast-lead > .btn {
1386
+ .editor-mast>.btn,
1387
+ .editor-mast-lead>.btn {
1179
1388
  flex: 0 0 auto;
1180
1389
  align-self: center;
1181
1390
  margin-bottom: 0;
1182
1391
  }
1183
1392
 
1184
- .editor-mast-lead > .btn-back {
1393
+ .editor-mast-lead>.btn-back {
1185
1394
  min-width: 2.25rem;
1186
1395
  padding-left: 0.4rem;
1187
1396
  padding-right: 0.4rem;
1188
1397
  gap: 0;
1189
1398
  }
1190
1399
 
1191
- .editor-mast-lead > .btn-back .btn-nav-icon {
1400
+ .editor-mast-lead>.btn-back .btn-nav-icon {
1192
1401
  font-size: 1.35rem !important;
1193
1402
  }
1194
1403
 
@@ -1249,7 +1458,7 @@ button.studio-brand-home[aria-current="page"] {
1249
1458
  border: 1px solid color-mix(in srgb, var(--outline-variant) 55%, transparent);
1250
1459
  }
1251
1460
 
1252
- .preview-folio > .preview-frame {
1461
+ .preview-folio>.preview-frame {
1253
1462
  flex: 1 1 auto;
1254
1463
  min-height: 12rem;
1255
1464
  border-color: color-mix(in srgb, var(--outline-variant) 40%, transparent);
@@ -1309,7 +1518,7 @@ button.studio-brand-home[aria-current="page"] {
1309
1518
 
1310
1519
  .studio-map {
1311
1520
  gap: var(--studio-space-lg);
1312
- max-width: 72rem;
1521
+ max-width: none;
1313
1522
  position: relative;
1314
1523
  }
1315
1524
 
@@ -1330,14 +1539,14 @@ button.studio-brand-home[aria-current="page"] {
1330
1539
  opacity: var(--cubist-shard-opacity-strong);
1331
1540
  }
1332
1541
 
1333
- .studio-map > .studio-shard--lead {
1542
+ .studio-map>.studio-shard--lead {
1334
1543
  width: min(18rem, 42vw);
1335
1544
  height: min(14rem, 32vw);
1336
1545
  top: -1rem;
1337
1546
  right: 4%;
1338
1547
  }
1339
1548
 
1340
- .studio-map > .studio-shard--trail {
1549
+ .studio-map>.studio-shard--trail {
1341
1550
  width: min(12rem, 28vw);
1342
1551
  height: min(10rem, 22vw);
1343
1552
  bottom: 8%;
@@ -1350,56 +1559,28 @@ button.studio-brand-home[aria-current="page"] {
1350
1559
  }
1351
1560
  }
1352
1561
 
1353
- .studio-map-header {
1354
- display: flex;
1355
- flex-direction: column;
1356
- gap: var(--studio-space-xs);
1357
- max-width: 28rem;
1358
- padding: var(--studio-space-md);
1359
- background: var(--background);
1360
- border: 1px solid color-mix(in srgb, var(--outline-variant) 45%, transparent);
1361
- position: relative;
1362
- z-index: 1;
1363
- }
1364
-
1365
1562
  .studio-map-board {
1366
- display: flex;
1367
- flex-direction: column;
1368
- gap: var(--studio-space-lg);
1563
+ display: grid;
1564
+ grid-template-columns: minmax(0, 1fr);
1565
+ gap: var(--studio-space-lg) var(--studio-space-md);
1566
+ align-items: start;
1369
1567
  min-width: 0;
1370
1568
  position: relative;
1371
1569
  z-index: 1;
1372
1570
  }
1373
1571
 
1374
- .studio-map-kicker {
1375
- margin: 0;
1376
- font-family: var(--font-label);
1377
- font-size: var(--studio-type-meta);
1378
- letter-spacing: 0.04em;
1379
- color: var(--on-surface-variant);
1380
- }
1381
-
1382
- .studio-map-header h1 {
1383
- font-family: var(--font-display);
1384
- font-weight: 600;
1385
- font-size: var(--studio-type-display);
1386
- margin: 0;
1387
- line-height: 1.15;
1388
- }
1389
-
1390
- .studio-map-lede,
1391
- .studio-map-header p {
1392
- margin: 0;
1393
- color: var(--on-surface-variant);
1394
- font-size: var(--studio-type-body);
1395
- line-height: 1.45;
1572
+ /* Two group columns on medium screens. */
1573
+ @media (min-width: 48rem) {
1574
+ .studio-map-board {
1575
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1576
+ }
1396
1577
  }
1397
1578
 
1398
- .studio-map-col {
1399
- display: flex;
1400
- flex-direction: column;
1401
- gap: var(--studio-space-lg);
1402
- min-width: 0;
1579
+ /* Three group columns on wide screens (max). */
1580
+ @media (min-width: 72rem) {
1581
+ .studio-map-board {
1582
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1583
+ }
1403
1584
  }
1404
1585
 
1405
1586
  .studio-map-group {
@@ -1409,6 +1590,7 @@ button.studio-brand-home[aria-current="page"] {
1409
1590
  padding: var(--studio-space-md);
1410
1591
  background: var(--background);
1411
1592
  border: 1px solid color-mix(in srgb, var(--outline-variant) 45%, transparent);
1593
+ min-width: 0;
1412
1594
  }
1413
1595
 
1414
1596
  .studio-map-group-head {
@@ -1489,40 +1671,6 @@ button.studio-brand-home[aria-current="page"] {
1489
1671
  word-break: break-word;
1490
1672
  }
1491
1673
 
1492
- /* Medium+: two collection columns fill the board. */
1493
- @media (min-width: 56rem) {
1494
- .studio-map-board {
1495
- display: grid;
1496
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1497
- gap: var(--studio-space-lg) var(--studio-space-md);
1498
- align-items: start;
1499
- }
1500
- }
1501
-
1502
- /* Wide: intro rail + board, so the home is a composition, not a thin stack. */
1503
- @media (min-width: 72rem) {
1504
- .studio-map {
1505
- display: grid;
1506
- grid-template-columns: minmax(14rem, 18rem) minmax(0, 1fr);
1507
- column-gap: clamp(1.5rem, 3vw, 2.75rem);
1508
- row-gap: var(--studio-space-lg);
1509
- align-items: start;
1510
- max-width: none;
1511
- }
1512
-
1513
- .studio-map-header {
1514
- position: sticky;
1515
- top: var(--studio-space-md);
1516
- max-width: none;
1517
- padding-right: var(--studio-space-sm);
1518
- }
1519
-
1520
- .studio-map-board {
1521
- padding-left: var(--studio-space-md);
1522
- border-left: 1px solid color-mix(in srgb, var(--outline-variant) 45%, transparent);
1523
- }
1524
- }
1525
-
1526
1674
  .form-grid {
1527
1675
  display: flex;
1528
1676
  flex-direction: column;
@@ -1684,7 +1832,7 @@ button.studio-brand-home[aria-current="page"] {
1684
1832
  font-size: 0.92rem;
1685
1833
  }
1686
1834
 
1687
- .editor-mode-tab + .editor-mode-tab {
1835
+ .editor-mode-tab+.editor-mode-tab {
1688
1836
  border-left: 1px solid color-mix(in srgb, var(--outline-variant) 70%, transparent);
1689
1837
  }
1690
1838
 
@@ -1970,7 +2118,7 @@ textarea.body-source.editor-surface {
1970
2118
  /* Side-preview code only: −2pt vs inherited preview body size. */
1971
2119
  .preview-frame pre,
1972
2120
  .preview-frame pre code,
1973
- .preview-frame :not(pre) > code {
2121
+ .preview-frame :not(pre)>code {
1974
2122
  font-size: 0.8019rem;
1975
2123
  }
1976
2124
 
@@ -1988,7 +2136,7 @@ textarea.body-source.editor-surface {
1988
2136
  padding: 0;
1989
2137
  }
1990
2138
 
1991
- .preview-frame :not(pre) > code {
2139
+ .preview-frame :not(pre)>code {
1992
2140
  font-family: var(--font-mono);
1993
2141
  padding: 0.05em 0.3em;
1994
2142
  background: color-mix(in srgb, var(--surface-high) 90%, transparent);
@@ -2052,11 +2200,11 @@ textarea.body-source.editor-surface {
2052
2200
  font-size: 0.9em;
2053
2201
  }
2054
2202
 
2055
- .preview-frame .article-note > :first-child {
2203
+ .preview-frame .article-note> :first-child {
2056
2204
  margin-top: 0;
2057
2205
  }
2058
2206
 
2059
- .preview-frame .article-note > :last-child {
2207
+ .preview-frame .article-note> :last-child {
2060
2208
  margin-bottom: 0;
2061
2209
  }
2062
2210
 
@@ -2337,6 +2485,7 @@ textarea.body-source.editor-surface {
2337
2485
  }
2338
2486
 
2339
2487
  @media (max-width: 719px) {
2488
+
2340
2489
  /* Writing lists: status | title | meta as three stacked lines. */
2341
2490
  .ledger-row--writing .ledger-title-row {
2342
2491
  flex-direction: column;
@@ -2349,11 +2498,6 @@ textarea.body-source.editor-surface {
2349
2498
  flex: 0 0 auto;
2350
2499
  }
2351
2500
 
2352
- .ledger-row--writing .ledger-taxonomy {
2353
- display: flex;
2354
- grid-column: 2 / -1;
2355
- }
2356
-
2357
2501
  .ledger-row--writing .ledger-ops {
2358
2502
  display: inline-flex;
2359
2503
  grid-column: 1 / -1;
@@ -2367,50 +2511,100 @@ textarea.body-source.editor-surface {
2367
2511
  @media (max-width: 960px) {
2368
2512
  .studio-shell {
2369
2513
  grid-template-columns: 1fr;
2514
+ grid-template-rows: auto auto minmax(0, 1fr);
2370
2515
  height: auto;
2371
2516
  min-height: 100vh;
2517
+ padding-top: 3.25rem;
2372
2518
  }
2373
2519
 
2374
2520
  .ledger-row {
2375
2521
  align-items: start;
2376
2522
  }
2377
2523
 
2378
- .studio-nav {
2379
- border-right: 0;
2524
+ .studio-shell>.studio-toolbar {
2525
+ position: fixed;
2526
+ top: 0;
2527
+ left: 0;
2528
+ right: 0;
2529
+ z-index: 40;
2530
+ min-height: 3.25rem;
2531
+ padding: 0.45rem 0.7rem;
2532
+ gap: 0.45rem;
2380
2533
  border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 55%, transparent);
2381
- overflow: visible;
2382
- gap: 0.35rem;
2383
- padding: 0.65rem 0.75rem;
2534
+ background: color-mix(in srgb, var(--panel) 94%, transparent);
2535
+ backdrop-filter: blur(10px);
2384
2536
  }
2385
2537
 
2386
- .studio-nav-bar {
2387
- flex-direction: row;
2388
- align-items: center;
2389
- gap: 0.5rem;
2538
+ .studio-toolbar .spacer::before {
2539
+ display: none;
2390
2540
  }
2391
2541
 
2392
- .studio-nav-bar .studio-brand {
2393
- flex: 0 0 auto;
2394
- width: auto;
2395
- padding: 0.2rem 0.35rem;
2396
- border-bottom: 0;
2542
+ .studio-toolbar>.studio-theme-menu,
2543
+ .studio-toolbar>.btn-tool {
2544
+ flex: 0 0 var(--studio-toolbar-control-h);
2545
+ width: var(--studio-toolbar-control-h);
2546
+ height: var(--studio-toolbar-control-h);
2547
+ min-height: var(--studio-toolbar-control-h);
2548
+ max-height: var(--studio-toolbar-control-h);
2397
2549
  }
2398
2550
 
2399
- button.studio-brand-home {
2400
- width: auto;
2551
+ .studio-toolbar .btn-tool .btn-label {
2552
+ display: none;
2401
2553
  }
2402
2554
 
2403
- .studio-nav-menu-toggle {
2404
- display: inline-flex;
2405
- flex: 1 1 auto;
2555
+ .studio-toolbar>.studio-theme-menu .btn-tool,
2556
+ .studio-toolbar>.btn-tool {
2557
+ width: 100%;
2406
2558
  min-width: 0;
2559
+ padding: 0;
2560
+ }
2561
+
2562
+ .studio-toolbar-status {
2563
+ display: none;
2564
+ }
2565
+
2566
+ .studio-toolbar .studio-nav-menu-toggle {
2567
+ display: inline-flex;
2568
+ align-items: center;
2569
+ justify-content: center;
2570
+ }
2571
+
2572
+ /* Mobile top bar: mark only — wordmark is desktop. */
2573
+ .studio-toolbar .studio-brand-toolbar {
2574
+ width: var(--studio-toolbar-control-h);
2575
+ min-width: var(--studio-toolbar-control-h);
2576
+ padding: 0;
2577
+ column-gap: 0;
2578
+ grid-template-columns: var(--studio-brand-mark);
2579
+ justify-items: center;
2580
+ }
2581
+
2582
+ .studio-toolbar .studio-brand-toolbar .studio-brand-copy,
2583
+ .studio-toolbar .studio-brand-toolbar .studio-brand-name {
2584
+ display: none;
2585
+ }
2586
+
2587
+ .studio-nav {
2588
+ border-right: 0;
2589
+ border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 55%, transparent);
2590
+ overflow: visible;
2591
+ gap: 0.35rem;
2592
+ padding: 0.65rem 0.75rem;
2593
+ }
2594
+
2595
+ .studio-nav:not(.is-open) {
2596
+ display: none;
2597
+ }
2598
+
2599
+ .studio-nav-bar {
2600
+ display: none;
2407
2601
  }
2408
2602
 
2409
2603
  .studio-nav-panel {
2410
2604
  display: none;
2411
- margin-top: 0.35rem;
2605
+ margin-top: 0;
2412
2606
  padding-top: 0.35rem;
2413
- border-top: 1px solid color-mix(in srgb, var(--outline-variant) 55%, transparent);
2607
+ border-top: 0;
2414
2608
  max-height: min(70vh, 28rem);
2415
2609
  overflow: auto;
2416
2610
  }
@@ -2435,14 +2629,14 @@ textarea.body-source.editor-surface {
2435
2629
  display: inline-flex;
2436
2630
  }
2437
2631
 
2438
- .studio-body.view-preview .pane-editor > .btn,
2632
+ .studio-body.view-preview .pane-editor>.btn,
2439
2633
  .studio-body.view-preview .pane-editor .editor-mast,
2440
2634
  .studio-body.view-preview .pane-editor .front-matter,
2441
2635
  .studio-body.view-preview .pane-editor .form-grid,
2442
2636
  .studio-body.view-preview .pane-editor .editor-pane-fill,
2443
2637
  .studio-body.view-preview .pane-editor .editor-format-toolbar,
2444
- .studio-body.view-preview .pane-editor .editor-chrome-row > :not(.editor-mode-tabs),
2445
- .studio-body.view-preview .pane-editor .body-editor-stack > label {
2638
+ .studio-body.view-preview .pane-editor .editor-chrome-row> :not(.editor-mode-tabs),
2639
+ .studio-body.view-preview .pane-editor .body-editor-stack>label {
2446
2640
  display: none;
2447
2641
  }
2448
2642
 
@@ -2659,13 +2853,6 @@ textarea.yaml-source.editor-surface {
2659
2853
  font-weight: 600;
2660
2854
  }
2661
2855
 
2662
- .media-hint {
2663
- margin: 0.55rem 0 0;
2664
- color: var(--on-surface-variant);
2665
- font-size: 0.9rem;
2666
- max-width: 42rem;
2667
- }
2668
-
2669
2856
  .media-toolbar {
2670
2857
  display: flex;
2671
2858
  flex-wrap: wrap;
@@ -2696,35 +2883,46 @@ textarea.yaml-source.editor-surface {
2696
2883
 
2697
2884
  .media-row {
2698
2885
  display: grid;
2699
- grid-template-columns: minmax(0, 1fr) auto;
2700
- gap: 0.5rem;
2886
+ grid-template-columns: auto minmax(0, 1fr) auto;
2887
+ gap: var(--studio-space-md);
2701
2888
  align-items: center;
2702
- padding: 0.25rem 0;
2703
- border-bottom: 1px solid color-mix(in srgb, var(--outline-variant) 35%, transparent);
2889
+ padding: var(--studio-space-md) var(--studio-space-md);
2890
+ margin: 0 0 var(--studio-space-xs);
2891
+ border: 1px solid color-mix(in srgb, var(--outline-variant) 60%, transparent);
2892
+ border-radius: 0;
2893
+ cursor: pointer;
2894
+ background: var(--surface-card);
2895
+ text-align: left;
2896
+ width: 100%;
2897
+ font: inherit;
2898
+ color: inherit;
2899
+ box-sizing: border-box;
2704
2900
  }
2705
2901
 
2706
2902
  .media-row:last-child {
2707
- border-bottom: none;
2903
+ margin-bottom: 0;
2708
2904
  }
2709
2905
 
2710
- .media-row-main {
2711
- display: flex;
2712
- align-items: center;
2713
- gap: 0.75rem;
2714
- min-width: 0;
2715
- margin: 0;
2716
- padding: 0.35rem 0.4rem;
2717
- border: 0;
2718
- border-radius: 0;
2719
- background: var(--surface-card);
2720
- color: inherit;
2721
- font: inherit;
2722
- text-align: left;
2723
- cursor: pointer;
2906
+ .media-row:hover {
2907
+ background: var(--surface-high);
2724
2908
  }
2725
2909
 
2726
- .media-row-main:hover {
2727
- background: var(--surface-high);
2910
+ .media-row[aria-disabled="true"] {
2911
+ opacity: 0.55;
2912
+ cursor: not-allowed;
2913
+ }
2914
+
2915
+ .media-row--dir {
2916
+ grid-template-columns: auto minmax(0, 1fr);
2917
+ }
2918
+
2919
+ .media-row--preview {
2920
+ cursor: zoom-in;
2921
+ }
2922
+
2923
+ .media-row--preview:focus-visible {
2924
+ outline: 2px solid var(--primary);
2925
+ outline-offset: 3px;
2728
2926
  }
2729
2927
 
2730
2928
  .media-thumb {
@@ -2777,18 +2975,47 @@ textarea.yaml-source.editor-surface {
2777
2975
  white-space: nowrap;
2778
2976
  }
2779
2977
 
2780
- .media-copy-btn {
2978
+ .media-ops {
2979
+ display: inline-flex;
2980
+ align-items: center;
2981
+ justify-content: flex-end;
2982
+ gap: 0.35rem;
2781
2983
  flex-shrink: 0;
2782
2984
  white-space: nowrap;
2985
+ padding-top: 0.1rem;
2783
2986
  }
2784
2987
 
2785
- .media-row-main--preview {
2786
- cursor: zoom-in;
2988
+ .media-op-btn {
2989
+ width: 2.35rem;
2990
+ min-width: 2.35rem;
2991
+ min-height: 2.35rem;
2992
+ padding: 0.3rem;
2993
+ border: 1px solid color-mix(in srgb, var(--outline-variant) 70%, transparent);
2994
+ background: var(--background);
2995
+ color: var(--on-surface);
2787
2996
  }
2788
2997
 
2789
- .media-row-main--preview:focus-visible {
2790
- outline: 2px solid var(--primary);
2791
- outline-offset: 3px;
2998
+ .media-op-btn .material-symbols-outlined {
2999
+ font-size: 1.15rem;
3000
+ line-height: 1;
3001
+ font-variation-settings: "FILL" 0, "wght" 500, "GRAD" 0, "opsz" 24;
3002
+ }
3003
+
3004
+ .media-copy-btn:hover {
3005
+ background: var(--surface-high);
3006
+ border-color: color-mix(in srgb, var(--primary) 40%, var(--outline-variant));
3007
+ color: var(--primary);
3008
+ }
3009
+
3010
+ .media-delete-btn {
3011
+ color: var(--error);
3012
+ border-color: color-mix(in srgb, var(--error) 45%, var(--outline-variant));
3013
+ background: color-mix(in srgb, var(--error) 6%, var(--background));
3014
+ }
3015
+
3016
+ .media-delete-btn:hover {
3017
+ background: color-mix(in srgb, var(--error) 14%, var(--background));
3018
+ border-color: color-mix(in srgb, var(--error) 60%, var(--outline-variant));
2792
3019
  }
2793
3020
 
2794
3021
  /* Same overlay as the public figure lightbox (`assets/css/article.css`).
@@ -2936,9 +3163,9 @@ body.figure-lightbox-open {
2936
3163
  }
2937
3164
 
2938
3165
  @media (prefers-reduced-motion: reduce) {
3166
+
2939
3167
  .figure-lightbox-backdrop,
2940
3168
  .figure-lightbox-panel {
2941
3169
  animation: none;
2942
3170
  }
2943
3171
  }
2944
-