@starlove/orbit 1.2.1 → 1.3.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.
package/public/styles.css CHANGED
@@ -4,6 +4,7 @@
4
4
  @import "@starlove/ui/components/input";
5
5
  @import "@starlove/ui/components/topbar-btn";
6
6
  @import "@starlove/ui/components/topbar-search";
7
+ @import "@starlove/ui/components/topbar-notes";
7
8
  @import "@starlove/ui/components/topbar-chip";
8
9
  @import "@starlove/ui/components/menu-flyout";
9
10
  @import "@starlove/ui/components/create-flyout";
@@ -16,6 +17,8 @@
16
17
  @import "@starlove/ui/components/dot";
17
18
  @import "@starlove/ui/components/search-results";
18
19
  @import "@starlove/ui/components/lightbox";
20
+ @import "@starlove/ui/components/section";
21
+ @import "@starlove/ui/components/separator";
19
22
 
20
23
  html, body {
21
24
  cursor: url('cursors/live_arrow.cur'), default;
@@ -307,13 +310,6 @@ textarea {
307
310
  padding: var(--field-padding-y) var(--field-padding-x);
308
311
  }
309
312
 
310
- input:focus,
311
- select:focus,
312
- textarea:focus {
313
- border-color: var(--accent-focus-border);
314
- box-shadow: var(--accent-ring);
315
- }
316
-
317
313
  .topbar {
318
314
  position: sticky;
319
315
  top: 0;
@@ -358,11 +354,41 @@ textarea:focus {
358
354
  }
359
355
 
360
356
  .brand {
357
+ position: relative;
361
358
  display: flex;
362
359
  flex-shrink: 0;
363
360
  align-items: center;
364
361
  }
365
362
 
363
+ .brand-focus-btn {
364
+ display: inline-flex;
365
+ align-items: center;
366
+ justify-content: center;
367
+ width: 2.75rem;
368
+ height: 2.75rem;
369
+ padding: 0;
370
+ border: 1px solid transparent;
371
+ border-radius: 999px;
372
+ background: transparent;
373
+ color: inherit;
374
+ box-shadow: none;
375
+ transition:
376
+ border-color 160ms ease,
377
+ background 160ms ease,
378
+ transform 160ms ease;
379
+ }
380
+
381
+ .brand-focus-btn:is(:hover, :focus-visible, [aria-expanded="true"]) {
382
+ border-color: rgba(var(--accent-rgb),0.28);
383
+ background: rgba(var(--accent-rgb),0.08);
384
+ transform: translateY(-1px);
385
+ outline: none;
386
+ }
387
+
388
+ .brand-focus-btn:focus-visible {
389
+ box-shadow: var(--accent-ring);
390
+ }
391
+
366
392
  .mark {
367
393
  display: block;
368
394
  width: 2.55rem;
@@ -370,6 +396,63 @@ textarea:focus {
370
396
  object-fit: contain;
371
397
  }
372
398
 
399
+ .brand-focus-popover {
400
+ position: absolute;
401
+ top: calc(100% + 0.55rem);
402
+ left: 0;
403
+ z-index: 20;
404
+ display: flex;
405
+ width: min(58rem, calc(100vw - 2rem));
406
+ max-height: min(calc(100vh - 5rem), 42rem);
407
+ flex-direction: column;
408
+ overflow: hidden;
409
+ padding: 1rem;
410
+ border: 1px solid rgba(var(--accent-rgb),0.24);
411
+ border-radius: var(--radius-surface);
412
+ background: rgba(var(--paper-rgb),0.97);
413
+ box-shadow: var(--flyout-shadow);
414
+ color: var(--ink);
415
+ }
416
+
417
+ .brand-focus-popover[hidden] {
418
+ display: none;
419
+ }
420
+
421
+ .brand-focus-popover__eyebrow {
422
+ margin-bottom: 0.65rem;
423
+ color: var(--muted);
424
+ font-size: 0.72rem;
425
+ font-weight: 800;
426
+ letter-spacing: 0.12em;
427
+ text-transform: uppercase;
428
+ }
429
+
430
+ .brand-focus-notes-body {
431
+ max-height: min(calc(100vh - 11rem), 34rem);
432
+ overflow-x: hidden;
433
+ overflow-y: auto;
434
+ }
435
+
436
+ .brand-focus-notes-edit {
437
+ min-height: 7rem;
438
+ overflow-x: hidden;
439
+ overflow-wrap: anywhere;
440
+ }
441
+
442
+ [data-theme="dark"] .brand-focus-popover {
443
+ background: rgba(var(--cosmos-rgb),0.96);
444
+ border-color: rgba(var(--starlight-rgb),0.22);
445
+ color: #edf3ff;
446
+ }
447
+
448
+ .brand-notes-strip {
449
+ --topbar-notes-max-width: min(600px, 42vw);
450
+ }
451
+
452
+ [data-theme="dark"] .brand-notes-strip {
453
+ --topbar-notes-active-color: #edf3ff;
454
+ }
455
+
373
456
  h1,
374
457
  h2,
375
458
  h3,
@@ -382,17 +465,6 @@ h1 {
382
465
  letter-spacing: -0.03em;
383
466
  }
384
467
 
385
- /* One row: [flex gap after brand] → fixed-width search → New Card → Board → Settings */
386
- .controls {
387
- display: flex;
388
- flex: 1;
389
- flex-wrap: nowrap;
390
- gap: 0.45rem;
391
- align-items: center;
392
- justify-content: flex-start;
393
- min-width: 0;
394
- }
395
-
396
468
  /* Pulls the search + actions away from the Orbit brand without stretching the search full-width. */
397
469
  .topbar-controls-gap {
398
470
  flex: 1 1 auto;
@@ -400,10 +472,6 @@ h1 {
400
472
  max-width: none;
401
473
  }
402
474
 
403
- .topbar-ctl-shrink {
404
- flex-shrink: 0;
405
- }
406
-
407
475
  /* Bottom "frame" signature: in document flow below the board, inside the viewport shell. */
408
476
  .frame-footer {
409
477
  flex-shrink: 0;
@@ -431,18 +499,7 @@ h1 {
431
499
  font-style: italic;
432
500
  }
433
501
 
434
- .topbar-icon {
435
- display: block;
436
- flex-shrink: 0;
437
- width: 1.1rem;
438
- height: 1.1rem;
439
- }
440
-
441
502
  /* @starlove/ui topbar control rail: every top-right control shares one height. */
442
- .controls {
443
- --topbar-ctl-h: 2.35rem;
444
- }
445
-
446
503
  .controls .topbar-search input,
447
504
  .controls .btn-sun,
448
505
  .controls .topbar-chip,
@@ -463,22 +520,7 @@ h1 {
463
520
  padding-bottom: 0;
464
521
  }
465
522
 
466
- .controls .topbar-btn[data-variant="theme"] {
467
- padding-inline: 0.85rem;
468
- }
469
-
470
- .topbar-chip-label {
471
- overflow: hidden;
472
- text-overflow: ellipsis;
473
- white-space: nowrap;
474
- }
475
-
476
523
  /* Topbar chips: anchored flyouts */
477
- .topbar-menu {
478
- position: relative;
479
- flex-shrink: 0;
480
- }
481
-
482
524
  /* ---- Teal-chip chrome — shared by .topbar-chip and .menu-flyout-item ----
483
525
  One rule set governs the bezel, tint wash, and inner-glow pattern so the
484
526
  two surfaces are visually consistent. Structural properties (padding, radius,
@@ -693,62 +735,6 @@ h1 {
693
735
  box-shadow 160ms ease;
694
736
  }
695
737
 
696
- .menu-flyout-item.is-current {
697
- border-color: rgba(var(--accent-rgb),0.65);
698
- background:
699
- linear-gradient(135deg, rgba(var(--accent-rgb),0.18), rgba(var(--accent-rgb),0.04) 70%),
700
- rgba(var(--paper-rgb),0.98);
701
- box-shadow:
702
- inset 0 0 0 1px rgba(var(--paper-rgb),0.9),
703
- inset 0 0 0 2px rgba(var(--accent-rgb),0.3),
704
- 0 6px 14px rgba(var(--accent-rgb),0.18),
705
- 0 1px 4px rgba(var(--warmth-rgb),0.07);
706
- }
707
-
708
- .menu-flyout-item-title {
709
- font-size: 0.88rem;
710
- font-weight: 700;
711
- letter-spacing: -0.005em;
712
- }
713
-
714
- .menu-flyout-item-meta {
715
- font-size: 0.72rem;
716
- color: var(--muted);
717
- }
718
-
719
- [data-theme="dark"] .menu-flyout-item.is-current {
720
- border-color: rgba(var(--starlight-rgb),0.6);
721
- background:
722
- linear-gradient(135deg, rgba(var(--starlight-rgb),0.16), rgba(var(--starlight-rgb),0.04) 70%),
723
- rgba(var(--cosmos-rgb),0.94);
724
- box-shadow:
725
- inset 0 0 0 1px rgba(var(--cosmos-rgb),0.85),
726
- inset 0 0 0 2px rgba(var(--starlight-rgb),0.32),
727
- 0 6px 14px rgba(var(--void-rgb),0.34),
728
- 0 1px 4px rgba(0, 0, 0, 0.24);
729
- }
730
-
731
- .menu-flyout-section {
732
- padding: 0.55rem 0.75rem 0.75rem;
733
- border-top: 1px solid var(--line);
734
- background: var(--subtle-bg-2);
735
- }
736
-
737
- .menu-flyout-heading {
738
- margin: 0 0 0.4rem;
739
- font-size: 0.72rem;
740
- font-weight: 800;
741
- letter-spacing: 0.05em;
742
- text-transform: uppercase;
743
- color: var(--muted);
744
- }
745
-
746
- .menu-flyout-form {
747
- display: flex;
748
- flex-direction: column;
749
- gap: var(--row-gap);
750
- }
751
-
752
738
  .menu-flyout-form input {
753
739
  width: 100%;
754
740
  padding: var(--field-padding-y) var(--field-padding-x);
@@ -758,12 +744,6 @@ h1 {
758
744
  font-size: 0.82rem;
759
745
  }
760
746
 
761
- .folder-picker-field {
762
- display: grid;
763
- grid-template-columns: minmax(0, 1fr) auto;
764
- gap: 0.4rem;
765
- }
766
-
767
747
  .folder-picker-field input[readonly] {
768
748
  cursor: default;
769
749
  background: var(--surface-input);
@@ -787,6 +767,26 @@ h1 {
787
767
  opacity: 0.7;
788
768
  }
789
769
 
770
+ .helper-files-folder {
771
+ margin: 0.5rem 0 0.75rem;
772
+ }
773
+
774
+ .menu-flyout-check {
775
+ display: flex;
776
+ align-items: flex-start;
777
+ gap: 0.5rem;
778
+ font-size: 0.8rem;
779
+ line-height: 1.35;
780
+ cursor: pointer;
781
+ }
782
+
783
+ .menu-flyout-check input[type="checkbox"] {
784
+ width: auto;
785
+ margin: 0.1rem 0 0;
786
+ flex: none;
787
+ cursor: pointer;
788
+ }
789
+
790
790
  .menu-flyout-form button[type="submit"] {
791
791
  padding: 0.42rem 0.65rem;
792
792
  border-radius: calc(var(--radius-control) - 2px);
@@ -835,25 +835,6 @@ h1 {
835
835
  box-shadow: 0 2px 8px var(--accent-hover);
836
836
  }
837
837
 
838
- .topbar-btn.ghost {
839
- color: var(--ink);
840
- background: var(--surface-dim);
841
- border: 1px solid var(--line);
842
- box-shadow: none;
843
- font-weight: 600;
844
- }
845
-
846
- .topbar-btn:hover {
847
- filter: brightness(1.05);
848
- transform: translateY(-1px);
849
- box-shadow: var(--btn-hover-shadow);
850
- }
851
-
852
- .topbar-btn:focus-visible {
853
- outline: none;
854
- box-shadow: var(--accent-ring);
855
- }
856
-
857
838
  .topbar-btn.ghost:hover {
858
839
  filter: none;
859
840
  transform: none;
@@ -974,7 +955,7 @@ button[data-variant="cta"] .btn-plus {
974
955
  box-shadow: none;
975
956
  color: currentColor;
976
957
  line-height: 0.95;
977
- transform: translateY(-3px);
958
+ transform: translateY(-1px);
978
959
  }
979
960
 
980
961
  .btn-sun .btn-sun-label {
@@ -1005,15 +986,6 @@ button[data-variant="cta"] .btn-plus {
1005
986
  pointer-events: none;
1006
987
  }
1007
988
 
1008
- .create-flyout-backdrop.is-visible {
1009
- opacity: 1;
1010
- pointer-events: auto;
1011
- }
1012
-
1013
- [data-theme="dark"] .create-flyout-backdrop {
1014
- background: rgba(0, 0, 0, 0.35);
1015
- }
1016
-
1017
989
  .create-flyout {
1018
990
  position: fixed;
1019
991
  top: 2.85rem;
@@ -1037,29 +1009,6 @@ button[data-variant="cta"] .btn-plus {
1037
1009
  pointer-events: none;
1038
1010
  }
1039
1011
 
1040
- .create-flyout.is-open {
1041
- opacity: 1;
1042
- transform: translateY(0) scale(1);
1043
- pointer-events: auto;
1044
- }
1045
-
1046
- .create-flyout-inner {
1047
- overflow-y: auto;
1048
- padding: 0.75rem 0.9rem 0.95rem;
1049
- scrollbar-width: thin;
1050
- scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
1051
- }
1052
-
1053
- .create-flyout-head {
1054
- display: flex;
1055
- align-items: center;
1056
- justify-content: space-between;
1057
- gap: 0.5rem;
1058
- margin-bottom: 0.65rem;
1059
- padding-bottom: 0.5rem;
1060
- border-bottom: 1px solid var(--line);
1061
- }
1062
-
1063
1012
  .create-flyout-head h2 {
1064
1013
  font-size: 1.05rem;
1065
1014
  letter-spacing: -0.03em;
@@ -1084,26 +1033,6 @@ button.create-flyout-close {
1084
1033
  line-height: 1;
1085
1034
  }
1086
1035
 
1087
- .create-flyout-close:hover,
1088
- button.create-flyout-close:hover {
1089
- transform: none;
1090
- filter: none;
1091
- background: var(--accent-hover);
1092
- border-color: var(--accent-border);
1093
- box-shadow: none;
1094
- }
1095
-
1096
- button.create-flyout-close::after {
1097
- content: none;
1098
- display: none;
1099
- }
1100
-
1101
- .create-flyout-form {
1102
- display: flex;
1103
- flex-direction: column;
1104
- gap: 0.55rem;
1105
- }
1106
-
1107
1036
  .create-flyout-form input[type="text"],
1108
1037
  .create-flyout-form textarea {
1109
1038
  width: 100%;
@@ -1127,17 +1056,6 @@ button.create-flyout-close::after {
1127
1056
  background-color: var(--surface-input);
1128
1057
  }
1129
1058
 
1130
- .create-flyout-form textarea {
1131
- min-height: 4rem;
1132
- resize: vertical;
1133
- }
1134
-
1135
- .create-flyout-grid {
1136
- display: grid;
1137
- grid-template-columns: 1fr 1fr 1fr;
1138
- gap: 0.45rem;
1139
- }
1140
-
1141
1059
  .create-flyout-grid label,
1142
1060
  .create-flyout-form > label {
1143
1061
  display: flex;
@@ -1186,15 +1104,6 @@ button.create-flyout-close::after {
1186
1104
  padding: 0 clamp(0.75rem, 2vw, 1.25rem);
1187
1105
  }
1188
1106
 
1189
- /* Search: modest fixed width — flex gap before it leaves breathing room after the brand. */
1190
- .topbar-search {
1191
- position: relative;
1192
- flex: 0 0 auto;
1193
- width: min(16.5rem, 36vw);
1194
- max-width: 16.5rem;
1195
- min-width: 9rem;
1196
- }
1197
-
1198
1107
  .topbar-search input {
1199
1108
  width: 100%;
1200
1109
  padding: var(--field-padding-y) var(--field-padding-x);
@@ -1256,10 +1165,6 @@ button.create-flyout-close::after {
1256
1165
  box-shadow: var(--flyout-shadow);
1257
1166
  }
1258
1167
 
1259
- .search-results[hidden] {
1260
- display: none;
1261
- }
1262
-
1263
1168
  .search-hit {
1264
1169
  display: flex;
1265
1170
  align-items: center;
@@ -1275,26 +1180,6 @@ button.create-flyout-close::after {
1275
1180
  cursor: url('cursors/live_link.cur'), pointer;
1276
1181
  }
1277
1182
 
1278
- .search-hit:last-child {
1279
- border-bottom: 0;
1280
- }
1281
-
1282
- .search-hit-main {
1283
- display: flex;
1284
- flex: 1 1 auto;
1285
- min-width: 0;
1286
- gap: 0.35rem;
1287
- align-items: baseline;
1288
- }
1289
-
1290
- .search-hit-title {
1291
- flex: 1 1 auto;
1292
- min-width: 0;
1293
- overflow: hidden;
1294
- text-overflow: ellipsis;
1295
- white-space: nowrap;
1296
- }
1297
-
1298
1183
  .search-hit-state {
1299
1184
  flex: 0 0 auto;
1300
1185
  margin-left: auto;
@@ -1310,10 +1195,6 @@ button.create-flyout-close::after {
1310
1195
  white-space: nowrap;
1311
1196
  }
1312
1197
 
1313
- .search-hit:hover {
1314
- background: var(--accent-hover);
1315
- }
1316
-
1317
1198
  [data-theme="dark"] .menu-flyout,
1318
1199
  [data-theme="dark"] .create-flyout,
1319
1200
  [data-theme="dark"] .search-results {
@@ -1820,55 +1701,13 @@ button.add-card-phantom::after,
1820
1701
  rgba(var(--paper-rgb), 0.96);
1821
1702
  }
1822
1703
 
1823
- /* Epic: purple bezel, dual-color gradient wash. */
1824
- .card.type-epic,
1825
- .card[data-variant="epic"] { --type-rgb: var(--purple-rgb); }
1826
-
1704
+ /* Epic cards get a little more title weight than task/feature cards. */
1827
1705
  .card.type-epic h3 {
1828
1706
  font-size: 0.92rem;
1829
1707
  font-weight: 600;
1830
1708
  letter-spacing: -0.01em;
1831
1709
  }
1832
1710
 
1833
- /* Feature: teal bezel — confident, second-in-command. */
1834
- .card.type-feature,
1835
- .card[data-variant="feature"] { --type-rgb: var(--accent-rgb); }
1836
-
1837
- /* Task: slate bezel, thinnest ring, shallowest shadow. */
1838
- .card.type-task,
1839
- .card[data-variant="task"] {
1840
- --type-rgb: var(--blue-rgb);
1841
- --type-border-a: 0.28;
1842
- --type-ring-w: 1.5px;
1843
- --type-ring-a: 0.12;
1844
- --type-bg-a: 0.04;
1845
- --type-bg-stop: 70%;
1846
- box-shadow:
1847
- inset 0 0 0 1px rgba(var(--paper-rgb), 0.92),
1848
- inset 0 0 0 1.5px rgba(var(--blue-rgb), 0.12),
1849
- 0 6px 16px rgba(var(--blue-rgb), 0.06),
1850
- 0 2px 6px rgba(var(--warmth-rgb), 0.07);
1851
- background:
1852
- linear-gradient(135deg, rgba(var(--blue-rgb), 0.04), rgba(var(--paper-rgb), 0) 70%),
1853
- rgba(var(--paper-rgb), 0.95);
1854
- }
1855
-
1856
- /* Bug: red bezel, punchier ring — defects feel urgent. */
1857
- .card.type-bug,
1858
- .card[data-variant="bug"] {
1859
- --type-rgb: var(--red-rgb);
1860
- --type-border-a: 0.45;
1861
- --type-ring-a: 0.22;
1862
- --type-bg-a: 0.06;
1863
- }
1864
-
1865
- /* Hover: lift via translate + filter only, so the per-type bezel insets stay
1866
- intact. Drop-shadow filter floats above whatever box-shadow the type has. */
1867
- .card:hover {
1868
- transform: translateY(-2px);
1869
- filter: brightness(1.02) drop-shadow(0 6px 12px rgba(0, 0, 0, 0.06));
1870
- }
1871
-
1872
1711
  @keyframes cardSettle {
1873
1712
  from {
1874
1713
  transform: translateY(6px);
@@ -2010,78 +1849,6 @@ button.add-card-phantom::after,
2010
1849
  color: #fca5a5;
2011
1850
  }
2012
1851
 
2013
- /* Dark card glass — starscape palette. Hover uses filter+drop-shadow only
2014
- so per-type bezels survive. Selected uses outline so bezel box-shadow stays intact. */
2015
- [data-theme="dark"] .card {
2016
- border-color: rgba(var(--starlight-rgb),0.12);
2017
- box-shadow: 0 8px 20px rgba(0, 0, 0, 0.25);
2018
- /* No backdrop-filter: --card is 85% opaque so the blur showed through ~15%
2019
- (near-invisible) yet forced every card to re-blur the animated starfield
2020
- behind it on every frame — the page's biggest GPU cost. The opaque fill
2021
- carries the surface; the starfield still animates in the gaps. */
2022
- }
2023
-
2024
- [data-theme="dark"] .card.type-epic,
2025
- [data-theme="dark"] .card[data-variant="epic"] {
2026
- border: 1.5px solid rgba(var(--starlight-rgb),0.4);
2027
- box-shadow:
2028
- inset 0 0 0 1px rgba(var(--cosmos-rgb),0.85),
2029
- inset 0 0 0 2.5px rgba(var(--violet-rgb),0.32),
2030
- 0 12px 26px rgba(var(--void-rgb),0.35),
2031
- 0 4px 10px rgba(0, 0, 0, 0.3);
2032
- background:
2033
- linear-gradient(135deg, rgba(var(--cyan-rgb),0.1), rgba(var(--indigo-rgb),0.09) 55%, rgba(var(--cosmos-rgb),0) 100%),
2034
- rgba(var(--cosmos-rgb),0.92);
2035
- }
2036
-
2037
- [data-theme="dark"] .card.type-feature,
2038
- [data-theme="dark"] .card[data-variant="feature"] {
2039
- border: 1.5px solid rgba(var(--starlight-rgb),0.32);
2040
- box-shadow:
2041
- inset 0 0 0 1px rgba(var(--cosmos-rgb),0.85),
2042
- inset 0 0 0 2px rgba(var(--starlight-rgb),0.18),
2043
- 0 8px 20px rgba(var(--void-rgb),0.3),
2044
- 0 3px 8px rgba(0, 0, 0, 0.25);
2045
- background:
2046
- linear-gradient(135deg, rgba(var(--starlight-rgb),0.06), rgba(var(--cosmos-rgb),0) 65%),
2047
- rgba(var(--cosmos-rgb),0.92);
2048
- }
2049
-
2050
- [data-theme="dark"] .card.type-task,
2051
- [data-theme="dark"] .card[data-variant="task"] {
2052
- border: 1.5px solid rgba(var(--starlight-rgb),0.18);
2053
- box-shadow:
2054
- inset 0 0 0 1px rgba(var(--cosmos-rgb),0.85),
2055
- inset 0 0 0 1.5px rgba(var(--starlight-rgb),0.1),
2056
- 0 6px 16px rgba(0, 0, 0, 0.25),
2057
- 0 2px 6px rgba(0, 0, 0, 0.2);
2058
- background:
2059
- linear-gradient(135deg, rgba(var(--starlight-rgb),0.035), rgba(var(--cosmos-rgb),0) 70%),
2060
- rgba(var(--cosmos-rgb),0.9);
2061
- }
2062
-
2063
- [data-theme="dark"] .card.type-bug,
2064
- [data-theme="dark"] .card[data-variant="bug"] {
2065
- border: 1.5px solid rgba(var(--coral-rgb),0.4);
2066
- box-shadow:
2067
- inset 0 0 0 1px rgba(var(--cosmos-rgb),0.85),
2068
- inset 0 0 0 2px rgba(var(--coral-rgb),0.22),
2069
- 0 8px 20px rgba(0, 0, 0, 0.3),
2070
- 0 4px 12px rgba(var(--coral-rgb),0.1);
2071
- background:
2072
- linear-gradient(135deg, rgba(var(--coral-rgb),0.07), rgba(var(--cosmos-rgb),0) 65%),
2073
- rgba(var(--cosmos-rgb),0.92);
2074
- }
2075
-
2076
- [data-theme="dark"] .card:hover {
2077
- filter: brightness(1.06) drop-shadow(0 6px 14px rgba(var(--starlight-rgb),0.08));
2078
- }
2079
-
2080
- [data-theme="dark"] .card.selected,
2081
- [data-theme="dark"] .card[data-selected] {
2082
- outline-color: rgba(var(--starlight-rgb),0.3);
2083
- }
2084
-
2085
1852
  /* Epic-aware grouping inside a column.
2086
1853
  `.epic-children` is a flex item nested in `.column` (which is itself flex-column,
2087
1854
  gap 0.7rem). Right-aligning + narrowing it makes its cards read as indented
@@ -2239,11 +2006,6 @@ button.add-card-phantom::after,
2239
2006
  cursor: url('cursors/live_link.cur'), pointer;
2240
2007
  }
2241
2008
 
2242
- .drawer-backdrop.is-visible {
2243
- opacity: 1;
2244
- pointer-events: auto;
2245
- }
2246
-
2247
2009
  .drawer {
2248
2010
  position: fixed;
2249
2011
  top: clamp(0.75rem, 2vh, 1.5rem);
@@ -2265,26 +2027,6 @@ button.add-card-phantom::after,
2265
2027
  width 180ms ease;
2266
2028
  }
2267
2029
 
2268
- .drawer.is-wide {
2269
- width: min(58rem, calc(100vw - 1rem));
2270
- }
2271
-
2272
- .drawer.is-open {
2273
- transform: translateX(0);
2274
- }
2275
-
2276
- @media (prefers-reduced-motion: reduce) {
2277
- :root:not([data-motion="full"]) .drawer,
2278
- :root:not([data-motion="full"]) .drawer-backdrop {
2279
- transition: none;
2280
- }
2281
- }
2282
-
2283
- [data-theme="dark"] .drawer {
2284
- background: rgba(16, 24, 48, 0.96);
2285
- box-shadow: -10px 0 48px rgba(0, 0, 0, 0.4);
2286
- }
2287
-
2288
2030
  .drawer-header {
2289
2031
  display: grid;
2290
2032
  flex-shrink: 0;
@@ -2311,14 +2053,6 @@ button.add-card-phantom::after,
2311
2053
  padding-top: 0.1rem;
2312
2054
  }
2313
2055
 
2314
- .drawer-eyebrow {
2315
- color: var(--muted);
2316
- font-size: 0.7rem;
2317
- font-weight: 800;
2318
- letter-spacing: 0.1em;
2319
- text-transform: uppercase;
2320
- }
2321
-
2322
2056
  .drawer-eyebrow[hidden] {
2323
2057
  display: none;
2324
2058
  }
@@ -2650,10 +2384,6 @@ select.detail-meta-badge::-ms-expand {
2650
2384
  display: none;
2651
2385
  }
2652
2386
 
2653
- .drawer-tabs::-webkit-scrollbar {
2654
- display: none;
2655
- }
2656
-
2657
2387
  .drawer-tab,
2658
2388
  button.drawer-tab {
2659
2389
  flex-shrink: 0;
@@ -2675,30 +2405,6 @@ button.drawer-tab {
2675
2405
  border-color 140ms ease;
2676
2406
  }
2677
2407
 
2678
- .drawer-tab:hover,
2679
- button.drawer-tab:hover {
2680
- transform: none;
2681
- filter: none;
2682
- color: var(--ink);
2683
- background: var(--accent-hover);
2684
- box-shadow: none;
2685
- }
2686
-
2687
- .drawer-tab.is-active,
2688
- .drawer-tab[aria-selected="true"],
2689
- button.drawer-tab.is-active,
2690
- button.drawer-tab[aria-selected="true"] {
2691
- color: var(--ink);
2692
- background: var(--accent-active);
2693
- border-color: var(--accent-border);
2694
- box-shadow: none;
2695
- }
2696
-
2697
- button.drawer-tab::after {
2698
- content: none;
2699
- display: none;
2700
- }
2701
-
2702
2408
  .drawer-close,
2703
2409
  .drawer-archive,
2704
2410
  button.drawer-close,
@@ -2725,15 +2431,6 @@ button.drawer-archive {
2725
2431
  line-height: 1;
2726
2432
  }
2727
2433
 
2728
- .drawer-close:hover,
2729
- button.drawer-close:hover {
2730
- transform: none;
2731
- filter: none;
2732
- background: var(--accent-hover);
2733
- border-color: var(--accent-border);
2734
- box-shadow: none;
2735
- }
2736
-
2737
2434
  .drawer-archive {
2738
2435
  grid-area: archive;
2739
2436
  }
@@ -3258,11 +2955,6 @@ select.meta-inline::-ms-expand {
3258
2955
  box-shadow: 0 0 0 3px rgba(var(--starlight-rgb),0.15);
3259
2956
  }
3260
2957
 
3261
- [data-theme="dark"] option {
3262
- background: #16213e;
3263
- color: #e8efff;
3264
- }
3265
-
3266
2958
  [data-theme="dark"] option:checked,
3267
2959
  [data-theme="dark"] option:hover {
3268
2960
  background: #1f3a6b;
@@ -3468,17 +3160,6 @@ button.label-pill-remove::after {
3468
3160
  margin-top: 1.6rem;
3469
3161
  }
3470
3162
 
3471
- .section h3 {
3472
- margin-bottom: 0.7rem;
3473
- color: var(--ink);
3474
- font-size: 0.86rem;
3475
- font-weight: 800;
3476
- letter-spacing: 0.07em;
3477
- line-height: 1.25;
3478
- opacity: 0.9;
3479
- text-transform: uppercase;
3480
- }
3481
-
3482
3163
  details.section > summary {
3483
3164
  list-style: none;
3484
3165
  cursor: url('cursors/live_link.cur'), pointer;
@@ -3487,35 +3168,6 @@ details.section > summary {
3487
3168
  gap: 0.4rem;
3488
3169
  }
3489
3170
 
3490
- details.section > summary::-webkit-details-marker {
3491
- display: none;
3492
- }
3493
-
3494
- /* ── Accordion chevron (global) ──────────────────────────────────────── */
3495
- details.section > summary::before {
3496
- content: "›";
3497
- color: var(--muted);
3498
- font-size: 1.15rem;
3499
- line-height: 1;
3500
- transition: transform 150ms ease;
3501
- }
3502
-
3503
- details.section[open] > summary::before {
3504
- transform: rotate(90deg);
3505
- }
3506
-
3507
- details.section > summary h3 {
3508
- display: inline;
3509
- margin: 0;
3510
- }
3511
-
3512
- /* Match the .section h3 { margin-bottom: 0.7rem } rhythm — the inner h3 is
3513
- contained inside <summary>, so the gap has to live on the first child
3514
- that follows the summary instead. */
3515
- details.section[open] > summary + * {
3516
- margin-top: 0.7rem;
3517
- }
3518
-
3519
3171
  /* The MCP setup section is itself display:grid with gap — the generic
3520
3172
  margin-top above would double-space after summary. Reset it and let the
3521
3173
  grid gap own the rhythm. Also neutralise the title-row's own bottom margin
@@ -3646,7 +3298,7 @@ details.section > summary .mcp-title-row {
3646
3298
  .inline-md-field-body {
3647
3299
  min-height: 2.4rem;
3648
3300
  padding: 0.45rem 0.6rem;
3649
- margin-inline: -0.35rem;
3301
+ margin-inline: 1px;
3650
3302
  }
3651
3303
 
3652
3304
  .inline-md-field-body.is-placeholder {
@@ -4019,12 +3671,6 @@ details.section > summary .mcp-title-row {
4019
3671
  margin-bottom: 0.6rem;
4020
3672
  }
4021
3673
 
4022
- .ai-section-divider {
4023
- height: 1px;
4024
- margin: 0.8rem 0;
4025
- background: linear-gradient(90deg, transparent, var(--line) 14%, var(--line) 86%, transparent);
4026
- }
4027
-
4028
3674
  /* ---- Orbit checkbox ----
4029
3675
  Hides the native input and renders a custom box that follows the starscape
4030
3676
  palette in dark mode and the paper/teal palette in light mode. The label is
@@ -4187,23 +3833,6 @@ details.section > summary .mcp-title-row {
4187
3833
  margin: 0;
4188
3834
  }
4189
3835
 
4190
- .mcp-inline-mark,
4191
- .ai-context-inline-mark {
4192
- display: inline-grid;
4193
- place-items: center;
4194
- min-width: 2.2rem;
4195
- height: 1.3rem;
4196
- padding: 0 0.45rem;
4197
- border-radius: 999px;
4198
- background: linear-gradient(135deg, rgba(var(--accent-rgb),0.95), rgba(var(--blue-rgb),0.9));
4199
- color: #fff;
4200
- font-size: 0.62rem;
4201
- font-weight: 900;
4202
- letter-spacing: 0.08em;
4203
- text-transform: uppercase;
4204
- box-shadow: 0 6px 14px rgba(var(--accent-rgb),0.22);
4205
- }
4206
-
4207
3836
  .mcp-hero {
4208
3837
  display: grid;
4209
3838
  grid-template-columns: auto minmax(0, 1fr);
@@ -5255,7 +4884,8 @@ button.toast-close::after {
5255
4884
  justify-content: flex-start;
5256
4885
  }
5257
4886
 
5258
- .topbar-controls-gap {
4887
+ .topbar-controls-gap,
4888
+ .brand-notes-strip {
5259
4889
  display: none;
5260
4890
  }
5261
4891
 
@@ -5480,7 +5110,7 @@ button.toast-close::after {
5480
5110
  justify-content: center;
5481
5111
  }
5482
5112
 
5483
- .welcome-dialog-cta {
5113
+ button.welcome-dialog-cta {
5484
5114
  padding: 0.65rem 2.25rem;
5485
5115
  border-radius: 12px;
5486
5116
  border: 1px solid var(--btn-border);
@@ -5496,12 +5126,119 @@ button.toast-close::after {
5496
5126
  box-shadow 150ms ease;
5497
5127
  }
5498
5128
 
5499
- .welcome-dialog-cta:hover {
5129
+ button.welcome-dialog-cta:hover {
5500
5130
  filter: brightness(1.06);
5501
5131
  transform: translateY(-1px);
5502
5132
  box-shadow: var(--btn-hover-shadow);
5503
5133
  }
5504
5134
 
5135
+ /* Help & About dialog — reuses the welcome-dialog shell, adds the
5136
+ getting-started steps + links specific to the Help button. */
5137
+ .help-dialog-inner {
5138
+ max-width: 30rem;
5139
+ }
5140
+
5141
+ button.help-dialog-close {
5142
+ margin-left: auto;
5143
+ width: 1.9rem;
5144
+ height: 1.9rem;
5145
+ min-height: 0;
5146
+ display: inline-flex;
5147
+ align-items: center;
5148
+ justify-content: center;
5149
+ padding: 0 0 0.12rem;
5150
+ border: 1px solid var(--line);
5151
+ border-radius: 999px;
5152
+ background: transparent;
5153
+ color: var(--muted);
5154
+ font-size: 1.1rem;
5155
+ line-height: 1;
5156
+ cursor: url('cursors/live_link.cur'), pointer;
5157
+ box-shadow: none;
5158
+ transition: color 150ms ease, border-color 150ms ease, background 150ms ease;
5159
+ }
5160
+
5161
+ button.help-dialog-close:hover {
5162
+ color: var(--ink);
5163
+ border-color: var(--accent);
5164
+ background: rgba(var(--accent-rgb), 0.08);
5165
+ filter: none;
5166
+ transform: none;
5167
+ box-shadow: none;
5168
+ }
5169
+
5170
+ button.help-dialog-close::after {
5171
+ content: none;
5172
+ display: none;
5173
+ }
5174
+
5175
+ .help-dialog-section {
5176
+ display: flex;
5177
+ flex-direction: column;
5178
+ gap: 0.6rem;
5179
+ /* The body is a plain block, so without this the section heading hugs the
5180
+ element above it (lede / previous section). Give each section breathing
5181
+ room above its uppercase label. */
5182
+ margin-top: 1.25rem;
5183
+ }
5184
+
5185
+ .help-dialog-heading {
5186
+ margin: 0;
5187
+ font-size: 0.7rem;
5188
+ font-weight: 800;
5189
+ letter-spacing: 0.1em;
5190
+ text-transform: uppercase;
5191
+ color: var(--muted);
5192
+ }
5193
+
5194
+ .help-dialog-steps {
5195
+ list-style: none;
5196
+ margin: 0;
5197
+ padding: 0;
5198
+ display: flex;
5199
+ flex-direction: column;
5200
+ gap: 0.85rem;
5201
+ }
5202
+
5203
+ .help-dialog-step {
5204
+ display: grid;
5205
+ grid-template-columns: auto minmax(0, 1fr);
5206
+ gap: 0.75rem;
5207
+ align-items: start;
5208
+ }
5209
+
5210
+ .help-dialog-step__index {
5211
+ font-size: 0.78rem;
5212
+ font-weight: 800;
5213
+ color: var(--accent);
5214
+ font-variant-numeric: tabular-nums;
5215
+ padding-top: 0.05rem;
5216
+ }
5217
+
5218
+ .help-dialog-step h4 {
5219
+ margin: 0;
5220
+ font-size: 0.9rem;
5221
+ font-weight: 700;
5222
+ color: var(--ink);
5223
+ }
5224
+
5225
+ .help-dialog-step p {
5226
+ margin: 0.2rem 0 0;
5227
+ font-size: 0.84rem;
5228
+ line-height: 1.45;
5229
+ color: var(--muted);
5230
+ }
5231
+
5232
+ .help-dialog-links {
5233
+ list-style: none;
5234
+ margin: 0;
5235
+ padding: 0;
5236
+ display: flex;
5237
+ flex-wrap: wrap;
5238
+ gap: 0.35rem 1.25rem;
5239
+ font-size: 0.88rem;
5240
+ }
5241
+
5505
5242
  /* =====================================================================
5506
5243
  DARK THEME — Starscape
5507
5244
  ===================================================================== */