cursedbelt 5.62.0 → 5.63.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 +1 @@
1
- {"version":3,"file":"MasterDetail.d.ts","sourceRoot":"","sources":["../../../src/react/master-detail/MasterDetail.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,KAAK,EAAE,SAAS,CAAC;IACjB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;mCAC+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,wDAAwD;IACxD,MAAM,EAAE,SAAS,CAAC;IAClB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;8CAI0C;IAC1C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAiDD,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,UAAU,EACV,QAAQ,EACR,MAAM,EACN,OAAO,EACP,YAAmB,EACnB,cAAc,EACd,UAAkB,EAClB,iBAA6B,EAC7B,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,GACT,EAAE,iBAAiB,+BA+JnB"}
1
+ {"version":3,"file":"MasterDetail.d.ts","sourceRoot":"","sources":["../../../src/react/master-detail/MasterDetail.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,MAAM,WAAW,gBAAgB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,KAAK,EAAE,SAAS,CAAC;IACjB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;mCAC+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,wDAAwD;IACxD,MAAM,EAAE,SAAS,CAAC;IAClB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uDAAuD;IACvD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB;;;;8CAI0C;IAC1C,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAqDD,wBAAgB,YAAY,CAAC,EAC5B,KAAK,EACL,UAAU,EACV,QAAQ,EACR,MAAM,EACN,OAAO,EACP,YAAmB,EACnB,cAAc,EACd,UAAkB,EAClB,iBAA6B,EAC7B,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,GACT,EAAE,iBAAiB,+BA+JnB"}
@@ -50,7 +50,7 @@ function ItemRow({ item, selected, onSelect, }) {
50
50
  // guardrails-ignore no-raw-action-button: presentational master-list selection, no data mutation
51
51
  ref: ref, type: "button", onClick: onSelect, "aria-current": selected ? "true" : undefined, className: cn(RAW_BUTTON, `flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left transition-colors ${selected
52
52
  ? "bg-[var(--accent)]/12 text-[var(--foreground)] ring-1 ring-[var(--accent)]/40"
53
- : "hover:bg-[var(--muted)]"}`), children: [_jsx("span", { className: "min-w-0 flex-1", children: _jsxs("span", { className: "flex items-center gap-2", children: [_jsx("span", { className: "truncate text-sm font-medium", children: item.title }), item.subtitle ? (_jsx("span", { className: "truncate text-xs text-[var(--muted-foreground)]", children: item.subtitle })) : null] }) }), item.badges ? (_jsx("span", { className: "flex flex-none items-center gap-1", children: item.badges })) : null] }));
53
+ : "hover:bg-[var(--muted)]"}`), children: [_jsx("span", { className: "min-w-0 flex-1", children: _jsxs("span", { className: "flex min-w-0 items-center gap-2", children: [_jsx("span", { className: "min-w-0 truncate text-sm font-medium", children: item.title }), item.subtitle ? (_jsx("span", { "data-slot": "master-detail-subtitle", className: "min-w-0 shrink-[1000] truncate text-xs text-[var(--muted-foreground)]", children: item.subtitle })) : null] }) }), item.badges ? (_jsx("span", { className: "flex flex-none items-center gap-1", children: item.badges })) : null] }));
54
54
  }
55
55
  export function MasterDetail({ items, selectedId, onSelect, detail, filters, activeFilter = null, onFilterChange, searchable = false, searchPlaceholder = "Search…", emptyDetail, emptyList, emptyAll, storageKey, listHeader, className, }) {
56
56
  const [query, setQuery] = useState("");
@@ -1 +1 @@
1
- {"version":3,"file":"MasterDetail.js","sourceRoot":"","sources":["../../../src/react/master-detail/MasterDetail.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MasterDetail.js","sourceRoot":"","sources":["../../../src/react/master-detail/MasterDetail.tsx"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 24 candidate(s).
21
+ * 25 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -28,4 +28,4 @@
28
28
  @source inline("bg-accent/15 border-[var(--border)] flex-row focus-within:border-field-ring focus-within:ring-2");
29
29
  @source inline("focus-within:ring-field-ring/30 has-[[aria-invalid=true]]:border-field-error");
30
30
  @source inline("hover:bg-[var(--muted)] hover:bg-muted/80 mb-1.5 mb-4 min-h min-h-full pb-0.5 pr-1 ring-1");
31
- @source inline("ring-[var(--accent)]/40 ring-accent/30 ring-inset self-stretch");
31
+ @source inline("ring-[var(--accent)]/40 ring-accent/30 ring-inset self-stretch shrink-[1000]");
@@ -1178,6 +1178,9 @@
1178
1178
  .shrink-\[2\] {
1179
1179
  flex-shrink: 2;
1180
1180
  }
1181
+ .shrink-\[1000\] {
1182
+ flex-shrink: 1000;
1183
+ }
1181
1184
  .grow {
1182
1185
  flex-grow: 1;
1183
1186
  }
package/dist/theme.css CHANGED
@@ -785,26 +785,29 @@
785
785
 
786
786
  .cb-aurora.dark,
787
787
  .dark .cb-aurora {
788
- /* The elevation ladder the "premium dark SaaS" look runs on: never #000 (it
789
- destroys depth), always a hint of indigo, each step lighter than the last —
790
- canvas < panel < card < raised < overlay. Contrast against `--card` is
791
- measured, not guessed: `--muted-foreground` 6.98:1 (AA at metadata sizes),
792
- `--border-strong` 3.29:1 (the WCAG non-text floor for interactive edges),
793
- `--border` 1.59:1 (quiet but traceable — the default theme's is 1.60:1). */
794
- --background: #080b16; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
795
- --foreground: #eef2ff; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
796
- --surface: #0e1424; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
797
- --card: #111830; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
798
- --card-foreground: #eef2ff; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
799
- --card-raised: #161e38; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
800
- --card-overlay: #1d2647; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
801
- --popover: #161e38; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
802
- --popover-foreground: #eef2ff; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
803
- --muted: #1a2238; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
804
- --muted-foreground: #97a3c4; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
805
- --surface-sunken: #070b15; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
806
- --border: #2f3b5c; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
807
- --border-strong: #5f6b82; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
788
+ /* 🔴 NEUTRAL since 5.63.0 — the same ramp as `.dark` above, value for value. 5.58.0 moved
789
+ `.dark` to Linear's ramp so "the chrome recedes and the hues that mean something are the
790
+ only colour on the page", and its report said every app had changed — but ten of the
791
+ eleven apps put `cb-aurora` on <html>, and this block re-bound them straight back to an
792
+ indigo ladder (#080b16 / #111830 / #2f3b5c). Seen on vault-stage, dark, 2026-10-05 (forge
793
+ task 2849): the neutral ramp had reached desk and binary-server and nothing else. The
794
+ scope keeps what makes it aurora — the glass, the ambient field, the lifted shadows —
795
+ and its grounds are the belt's grounds. `themeDarkScopeAliases.spec.ts` holds the pair
796
+ equal, so the two cannot drift apart again. */
797
+ --background: #08090a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
798
+ --foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
799
+ --surface: #101113; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
800
+ --card: #101113; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
801
+ --card-foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
802
+ --card-raised: #16171a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
803
+ --card-overlay: #1d1e22; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
804
+ --popover: #17181b; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
805
+ --popover-foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
806
+ --muted: #202126; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
807
+ --muted-foreground: #9b9ea7; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
808
+ --surface-sunken: #0b0c0d; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
809
+ --border: #31333a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
810
+ --border-strong: #62666f; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
808
811
  --rule: color-mix(in srgb, var(--border) 55%, transparent);
809
812
  /* The "lift the panel off the page" shadow the dark look needs; a near-black
810
813
  canvas swallows the default 1px anchor entirely. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cursedbelt",
3
- "version": "5.62.0",
3
+ "version": "5.63.0",
4
4
  "license": "ISC",
5
5
  "type": "module",
6
6
  "description": "The React design system of the cursedbelt split — components, styles, theme. cursedbelt-core below it; server tier in cursedbelt-server.",
@@ -920,7 +920,7 @@
920
920
  "@vidstack/react": "1.15.6",
921
921
  "@vitejs/plugin-react": "^5.2.0",
922
922
  "cursedbelt-server": "^4.43.1",
923
- "cursedops": "^0.14.0",
923
+ "cursedops": "^0.15.0",
924
924
  "diff": "^9.0.0",
925
925
  "emoji-mart": "^5.6.0",
926
926
  "hls.js": "^1.5.0",
@@ -985,7 +985,7 @@
985
985
  },
986
986
  "repository": {
987
987
  "type": "git",
988
- "url": "git+https://github.com/curtwphillips/cursedbelt.git"
988
+ "url": "git+https://github.com/wizardmordamir/cursedforge-cursedbelt.git"
989
989
  },
990
990
  "gate": {
991
991
  "stages": [
@@ -59,3 +59,24 @@ describe('MasterDetail — DESIGN.md §2 empty states', () => {
59
59
  expect(getByText('Nothing matches.')).toBeTruthy();
60
60
  });
61
61
  });
62
+
63
+ describe('MasterDetail — a row keeps its title before its subtitle', () => {
64
+ test('the subtitle shrinks first, and the title can still truncate once it is gone', () => {
65
+ // 🔴 Seen on station's queue at 390 (forge task 2849): title and file name shrank equally,
66
+ // so every title read "A session t…" beside its whole file name. happy-dom draws no layout,
67
+ // so this pins the two classes that decide the split.
68
+ const { getByText } = render(
69
+ <MasterDetail
70
+ items={[{ id: 'q', title: 'A session task', subtitle: '102-a-session-task.md' }]}
71
+ selectedId={null}
72
+ onSelect={() => {}}
73
+ detail={<p>detail</p>}
74
+ />,
75
+ );
76
+ const subtitle = getByText('102-a-session-task.md');
77
+ expect(subtitle.getAttribute('data-slot')).toBe('master-detail-subtitle');
78
+ expect(subtitle.className).toContain('shrink-[1000]');
79
+ expect(subtitle.className).toContain('min-w-0');
80
+ expect(getByText('A session task').className).toContain('min-w-0');
81
+ });
82
+ });
@@ -122,10 +122,14 @@ function ItemRow({
122
122
  }`)}
123
123
  >
124
124
  <span className="min-w-0 flex-1">
125
- <span className="flex items-center gap-2">
126
- <span className="truncate text-sm font-medium">{item.title}</span>
125
+ <span className="flex min-w-0 items-center gap-2">
126
+ {/* The subtitle gives way FIRST: shrinking both equally cut a queue's titles to
127
+ "A session t…" at 390 beside the full file name (station, forge task 2849). */}
128
+ <span className="min-w-0 truncate text-sm font-medium">{item.title}</span>
127
129
  {item.subtitle ? (
128
- <span className="truncate text-xs text-[var(--muted-foreground)]">{item.subtitle}</span>
130
+ <span data-slot="master-detail-subtitle" className="min-w-0 shrink-[1000] truncate text-xs text-[var(--muted-foreground)]">
131
+ {item.subtitle}
132
+ </span>
129
133
  ) : null}
130
134
  </span>
131
135
  </span>
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 24 candidate(s).
21
+ * 25 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -28,4 +28,4 @@
28
28
  @source inline("bg-accent/15 border-[var(--border)] flex-row focus-within:border-field-ring focus-within:ring-2");
29
29
  @source inline("focus-within:ring-field-ring/30 has-[[aria-invalid=true]]:border-field-error");
30
30
  @source inline("hover:bg-[var(--muted)] hover:bg-muted/80 mb-1.5 mb-4 min-h min-h-full pb-0.5 pr-1 ring-1");
31
- @source inline("ring-[var(--accent)]/40 ring-accent/30 ring-inset self-stretch");
31
+ @source inline("ring-[var(--accent)]/40 ring-accent/30 ring-inset self-stretch shrink-[1000]");
@@ -1178,6 +1178,9 @@
1178
1178
  .shrink-\[2\] {
1179
1179
  flex-shrink: 2;
1180
1180
  }
1181
+ .shrink-\[1000\] {
1182
+ flex-shrink: 1000;
1183
+ }
1181
1184
  .grow {
1182
1185
  flex-grow: 1;
1183
1186
  }
package/src/theme.css CHANGED
@@ -785,26 +785,29 @@
785
785
 
786
786
  .cb-aurora.dark,
787
787
  .dark .cb-aurora {
788
- /* The elevation ladder the "premium dark SaaS" look runs on: never #000 (it
789
- destroys depth), always a hint of indigo, each step lighter than the last —
790
- canvas < panel < card < raised < overlay. Contrast against `--card` is
791
- measured, not guessed: `--muted-foreground` 6.98:1 (AA at metadata sizes),
792
- `--border-strong` 3.29:1 (the WCAG non-text floor for interactive edges),
793
- `--border` 1.59:1 (quiet but traceable — the default theme's is 1.60:1). */
794
- --background: #080b16; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
795
- --foreground: #eef2ff; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
796
- --surface: #0e1424; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
797
- --card: #111830; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
798
- --card-foreground: #eef2ff; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
799
- --card-raised: #161e38; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
800
- --card-overlay: #1d2647; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
801
- --popover: #161e38; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
802
- --popover-foreground: #eef2ff; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
803
- --muted: #1a2238; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
804
- --muted-foreground: #97a3c4; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
805
- --surface-sunken: #070b15; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
806
- --border: #2f3b5c; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
807
- --border-strong: #5f6b82; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
788
+ /* 🔴 NEUTRAL since 5.63.0 — the same ramp as `.dark` above, value for value. 5.58.0 moved
789
+ `.dark` to Linear's ramp so "the chrome recedes and the hues that mean something are the
790
+ only colour on the page", and its report said every app had changed — but ten of the
791
+ eleven apps put `cb-aurora` on <html>, and this block re-bound them straight back to an
792
+ indigo ladder (#080b16 / #111830 / #2f3b5c). Seen on vault-stage, dark, 2026-10-05 (forge
793
+ task 2849): the neutral ramp had reached desk and binary-server and nothing else. The
794
+ scope keeps what makes it aurora — the glass, the ambient field, the lifted shadows —
795
+ and its grounds are the belt's grounds. `themeDarkScopeAliases.spec.ts` holds the pair
796
+ equal, so the two cannot drift apart again. */
797
+ --background: #08090a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
798
+ --foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
799
+ --surface: #101113; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
800
+ --card: #101113; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
801
+ --card-foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
802
+ --card-raised: #16171a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
803
+ --card-overlay: #1d1e22; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
804
+ --popover: #17181b; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
805
+ --popover-foreground: #f7f8f8; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
806
+ --muted: #202126; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
807
+ --muted-foreground: #9b9ea7; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
808
+ --surface-sunken: #0b0c0d; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
809
+ --border: #31333a; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
810
+ --border-strong: #62666f; /* guardrails-ignore no-hardcoded-colors: this file IS the theme token source of truth — every value here is necessarily a literal color definition */
808
811
  --rule: color-mix(in srgb, var(--border) 55%, transparent);
809
812
  /* The "lift the panel off the page" shadow the dark look needs; a near-black
810
813
  canvas swallows the default 1px anchor entirely. */
@@ -63,3 +63,33 @@ describe('a nested .dark scope re-resolves every alias of a token it re-binds',
63
63
  expect(staleInNestedDark(readFileSync(join(import.meta.dir, 'theme.css'), 'utf8'))).toEqual([]);
64
64
  });
65
65
  });
66
+
67
+ /**
68
+ * The grounds `cb-aurora` paints in dark ARE `.dark`'s grounds (5.63.0, forge task 2849). Ten of
69
+ * the eleven apps wear `cb-aurora` on <html>, so when 5.58.0 moved `.dark` to the neutral ramp and
70
+ * this scope kept its indigo ladder, the ramp reached desk and binary-server only. The scope may
71
+ * add glass and ambient light; it may not hand the fleet a second set of grounds.
72
+ */
73
+ const GROUNDS = [
74
+ '--background', '--foreground', '--surface', '--card', '--card-foreground', '--card-raised', '--card-overlay',
75
+ '--popover', '--popover-foreground', '--muted', '--muted-foreground', '--surface-sunken', '--border', '--border-strong',
76
+ ] as const;
77
+
78
+ function groundsDiffering(css: string): string[] {
79
+ const flat = css.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\s*,\s*/g, ', ');
80
+ const dark = declarationsOf(flat, '.dark');
81
+ const aurora = declarationsOf(flat, '.cb-aurora.dark, .dark .cb-aurora');
82
+ if (aurora.size === 0) return ['(no `.cb-aurora.dark, .dark .cb-aurora` rule)'];
83
+ return GROUNDS.filter((g) => aurora.has(g) && aurora.get(g) !== dark.get(g)).map((g) => `${g}: aurora ${aurora.get(g)} ≠ .dark ${dark.get(g)}`);
84
+ }
85
+
86
+ describe('the aurora scope in dark paints the belt’s own grounds', () => {
87
+ test('the check sees a scope that keeps its own ground', () => {
88
+ const css = '.dark { --background: #08090a; --card: #101113; }\n.cb-aurora.dark,\n.dark .cb-aurora { --background: #080b16; --card: #101113; }';
89
+ expect(groundsDiffering(css)).toEqual(['--background: aurora #080b16 ≠ .dark #08090a']);
90
+ });
91
+
92
+ test('theme.css: every ground the aurora scope declares in dark equals `.dark`’s', () => {
93
+ expect(groundsDiffering(readFileSync(join(import.meta.dir, 'theme.css'), 'utf8'))).toEqual([]);
94
+ });
95
+ });