@bismawy/pi-arnative 0.4.0 → 0.5.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.
package/lib/ansi.ts CHANGED
@@ -38,16 +38,73 @@ export function setActiveTheme<T>(th: T | null): void {
38
38
  else delete (globalThis as Record<symbol, T>)[THEME_PROXY_KEY];
39
39
  }
40
40
 
41
- /** Painter for the `accentSoft` token, which only arnative themes define; other themes fall back to accent (probed once). */
42
- export function accentSoftOf(th: { fg?(c: string, t: string): string } | null): (s: string) => string {
41
+ /**
42
+ * Soft tier of a resolved theme color: clone at L 0.82 with a fifth of its chroma and
43
+ * the hue kept. The generator's `soften()` (themes/gen-themes.mjs) applies the identical
44
+ * recipe, so a declared `vars.*Soft` and this derived value agree. `chroma * 0.18` is
45
+ * the single tuning constant for how far a soft tone leans toward grey.
46
+ */
47
+ const SOFT_L = 0.82;
48
+ const SOFT_CHROMA_SCALE = 0.18;
49
+ function softenColor(c: { c?: number; h?: number }): { kind: "oklch"; l: number; c: number; h: number } {
50
+ return { kind: "oklch", l: SOFT_L, c: (c.c ?? 0) * SOFT_CHROMA_SCALE, h: c.h ?? 0 };
51
+ }
52
+
53
+ /**
54
+ * Painter for arnative's soft accent (`accentSoft`).
55
+ *
56
+ * Pi <=1.1.0 let a theme declare extra tokens in `colors`, so `accentSoft` was
57
+ * addressable directly. 1.2.0 validates `colors` with `additionalProperties: false`
58
+ * and rejects the whole theme if it carries one, so the token now lives only in
59
+ * `vars` and `fg("accentSoft")` throws. The soft accent stays available through the
60
+ * resolved `accent` color (both 1.1.0 and 1.2.0 expose `theme.colors`): its hue and
61
+ * chroma are softened to the generator's `*Soft` recipe, which keeps the two-tone look
62
+ * instead of collapsing to grey. Falls back to `muted`, then `accent`, on older themes.
63
+ */
64
+ export function softOf(th: {
65
+ fg?(c: string, t: string): string;
66
+ style?(t: string, o: { fg: unknown }): string;
67
+ colors?: Record<string, { kind?: string; c?: number; h?: number }>;
68
+ } | null): (s: string) => string {
43
69
  const fg = th?.fg?.bind(th);
44
70
  if (!fg) return (s) => s;
45
71
  try {
46
72
  fg("accentSoft", "");
47
73
  return (s) => fg("accentSoft", s);
48
74
  } catch {
49
- return (s) => fg("accent", s);
75
+ // 1.2.0+ rejects `accentSoft`: derive the soft tint from the resolved accent.
76
+ }
77
+ const accent = th?.colors?.accent;
78
+ const style = th?.style?.bind(th);
79
+ if (accent?.kind === "oklch" && style) {
80
+ const soft = softenColor(accent);
81
+ return (s) => style(s, { fg: soft });
50
82
  }
83
+ return (s) => fg("muted", s);
84
+ }
85
+
86
+ /**
87
+ * Painter for the soft *label* tier (`secondarySoft`): the footer's cwd, branch, clock
88
+ * and status text.
89
+ *
90
+ * The two-tone footer puts icons on `accent` and their text on the border-accent tier.
91
+ * `secondarySoft` is declared only in `vars`, so it cannot be read back with `fg()`;
92
+ * it is derived instead from `borderAccent`, the official token that tier maps to. The
93
+ * generator softens that same value, so declared and derived agree. Falls back to
94
+ * `softOf` (the accent tier) when the theme exposes no resolvable `borderAccent`.
95
+ */
96
+ export function softSecondaryOf(th: {
97
+ fg?(c: string, t: string): string;
98
+ style?(t: string, o: { fg: unknown }): string;
99
+ colors?: Record<string, { kind?: string; c?: number; h?: number }>;
100
+ } | null): (s: string) => string {
101
+ const border = th?.colors?.borderAccent;
102
+ const style = th?.style?.bind(th);
103
+ if (border?.kind === "oklch" && style) {
104
+ const soft = softenColor(border);
105
+ return (s) => style(s, { fg: soft });
106
+ }
107
+ return softOf(th);
51
108
  }
52
109
 
53
110
  /** pi defines one theme slot per thinking level (`thinkingOff`…`thinkingMax`), so a box
@@ -98,15 +155,35 @@ if (isMain(import.meta.url)) {
98
155
  assert(getActiveTheme<object>() === null, "clearing the active theme leaves no stale slot");
99
156
 
100
157
  const tag = { fg: (c: string, t: string) => `<${c}>${t}</${c}>` };
101
- assert(accentSoftOf(tag)("x") === "<accentSoft>x</accentSoft>", "accentSoftOf uses accentSoft when the theme defines it");
158
+ assert(softOf(tag)("x") === "<accentSoft>x</accentSoft>", "softOf uses accentSoft when the theme defines it");
102
159
  const noSoft = {
103
160
  fg: (c: string, t: string) => {
104
161
  if (c === "accentSoft") throw new Error("Unknown theme color: accentSoft");
105
162
  return `<${c}>${t}</${c}>`;
106
163
  },
107
164
  };
108
- assert(accentSoftOf(noSoft)("x") === "<accent>x</accent>", "accentSoftOf falls back to accent without the token");
109
- assert(accentSoftOf(null)("x") === "x", "accentSoftOf without a theme is identity");
165
+ assert(softOf(noSoft)("x") === "<muted>x</muted>", "softOf falls back to muted without the token or colors");
166
+ assert(softOf(null)("x") === "x", "softOf without a theme is identity");
167
+ // Pi 1.2.0: accentSoft is rejected, so the soft tint is derived from `colors.accent`.
168
+ const modern = {
169
+ fg: (c: string, t: string) => {
170
+ throw new Error(`Unknown theme color: ${c}`);
171
+ },
172
+ style: (t: string, o: { fg: unknown }) => `<soft:${JSON.stringify(o.fg)}>${t}</soft>`,
173
+ colors: { accent: { kind: "oklch", c: 0.2, h: 355 }, borderAccent: { kind: "oklch", c: 0.1, h: 200 } },
174
+ };
175
+ const modernOut = softOf(modern)("x");
176
+ assert(modernOut.includes('"l":0.82') && modernOut.includes('"c":0.036'), "softOf derives the soft tint from accent (l=0.82, c=accent*0.18)");
177
+ assert(modernOut.includes("x"), "softOf keeps the text");
178
+ // The label tier softens `borderAccent`, NOT `accent`: that is what keeps footer text
179
+ // on the blue tier instead of inheriting the pink accent hue.
180
+ const labelOut = softSecondaryOf(modern)("x");
181
+ assert(
182
+ labelOut.includes('"l":0.82') && labelOut.includes('"c":0.018') && labelOut.includes('"h":200'),
183
+ "softSecondaryOf softens borderAccent (l=0.82, c=borderAccent*0.18, same hue)",
184
+ );
185
+ assert(labelOut !== modernOut, "the soft label tier differs from the soft accent tier");
186
+ assert(softSecondaryOf({ fg: () => "", style: (t) => `<x>${t}</x>`, colors: {} })("x") === softOf({ fg: () => "", style: (t) => `<x>${t}</x>`, colors: {} })("x"), "softSecondaryOf falls back to softOf without a borderAccent");
110
187
 
111
188
  assert(thinkingColorSlot("off") === "thinkingOff", "thinking off maps to thinkingOff");
112
189
  assert(thinkingColorSlot(undefined) === "thinkingOff", "missing level falls back to thinkingOff");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bismawy/pi-arnative",
3
- "version": "0.4.0",
3
+ "version": "0.5.2",
4
4
  "description": "Refined aesthetics. Cohesive tools. Built for Pi. Warm themes, rounded tool boxes, tabbed header, compact footer and a /usage dashboard.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
2
+ "$schema": "https://pi.dev/schemas/theme.schema.json",
3
3
  "name": "arnative-cyberpunk",
4
4
  "appearance": "dark",
5
5
  "vars": {
@@ -7,19 +7,21 @@
7
7
  "fgMuted": "oklch(72% 0.02 275)",
8
8
  "fgDim": "oklch(61% 0.02 275)",
9
9
  "fgFaint": "oklch(49% 0.02 275)",
10
- "accent": "oklch(78% 0.144 357)",
11
- "accentSoft": "oklch(82% 0.036 357)",
12
- "accentBorder": "oklch(82% 0.113 357)",
10
+ "primary": "oklch(88% 0.18 95)",
11
+ "secondary": "oklch(82% 0.139 200)",
12
+ "secondarySoft": "oklch(82% 0.02502 200)",
13
+ "accent": "oklch(78% 0.146 355)",
14
+ "accentSoft": "oklch(82% 0.02628 355)",
15
+ "accentBorder": "oklch(82% 0.114 355)",
13
16
  "success": "oklch(78% 0.15 145)",
14
17
  "error": "oklch(76% 0.143 25)",
15
18
  "warning": "oklch(86% 0.14 85)",
16
- "surfaceMsg": "oklch(16% 0.01 275)"
19
+ "surfaceMsg": "oklch(24% 0.035 200)"
17
20
  },
18
21
  "colors": {
19
22
  "accent": "accent",
20
- "accentSoft": "accentSoft",
21
- "border": "oklch(55% 0.07 357)",
22
- "borderAccent": "accentBorder",
23
+ "border": "oklch(55% 0.07 200)",
24
+ "borderAccent": "secondary",
23
25
  "borderMuted": "fgFaint",
24
26
  "success": "success",
25
27
  "error": "error",
@@ -29,58 +31,58 @@
29
31
  "text": "fg",
30
32
 
31
33
  "thinkingText": "fgMuted",
32
- "selectedBg": "oklch(23% 0.05 357)",
34
+ "selectedBg": "oklch(31% 0.05 200)",
33
35
  "scrollbarTrack": "fgFaint",
34
36
  "scrollbarThumb": "accentSoft",
35
- "searchMatchBg": "oklch(30% 0.09 357)",
37
+ "searchMatchBg": "oklch(38% 0.078 95)",
36
38
  "searchMatchText": "fg",
37
39
  "userMessageBg": "surfaceMsg",
38
40
  "userMessageText": "fg",
39
- "customMessageBg": "oklch(17% 0.03 190)",
41
+ "customMessageBg": "oklch(25% 0.043 200)",
40
42
  "customMessageText": "fg",
41
- "customMessageLabel": "oklch(78% 0.135 190)",
42
- "toolPendingBg": "oklch(14% 0.059 357)",
43
- "toolSuccessBg": "oklch(13% 0.043 145)",
44
- "toolErrorBg": "oklch(13% 0.055 25)",
43
+ "customMessageLabel": "oklch(78% 0.133 200)",
44
+ "toolPendingBg": "oklch(22% 0.05 355)",
45
+ "toolSuccessBg": "oklch(21% 0.06 145)",
46
+ "toolErrorBg": "oklch(21% 0.06 25)",
45
47
  "toolTitle": "fg",
46
48
 
47
49
  "toolOutput": "fgMuted",
48
- "mdHeading": "oklch(88% 0.079 60)",
49
- "mdLink": "oklch(80% 0.138 190)",
50
+ "mdHeading": "primary",
51
+ "mdLink": "oklch(80% 0.136 200)",
50
52
  "mdLinkUrl": "fgDim",
51
- "mdCode": "oklch(80% 0.128 357)",
53
+ "mdCode": "secondary",
52
54
  "mdCodeBlock": "success",
53
55
  "mdCodeBlockBorder": "fgMuted",
54
56
  "mdQuote": "fgMuted",
55
57
  "mdQuoteBorder": "fgMuted",
56
58
  "mdHr": "fgFaint",
57
59
 
58
- "mdListBullet": "oklch(80% 0.128 357)",
60
+ "mdListBullet": "primary",
59
61
  "toolDiffAdded": "success",
60
62
  "toolDiffRemoved": "error",
61
63
  "toolDiffContext": "fgMuted",
62
64
  "syntaxComment": "fgDim",
63
- "syntaxKeyword": "oklch(80% 0.128 357)",
64
- "syntaxFunction": "oklch(86% 0.094 60)",
65
- "syntaxVariable": "oklch(84% 0.11 320)",
66
- "syntaxString": "oklch(82% 0.14 320)",
67
- "syntaxNumber": "oklch(80% 0.115 30)",
68
- "syntaxType": "oklch(80% 0.16 150)",
65
+ "syntaxKeyword": "secondary",
66
+ "syntaxFunction": "oklch(86% 0.16 95)",
67
+ "syntaxVariable": "oklch(84% 0.1 355)",
68
+ "syntaxString": "oklch(82% 0.14 140)",
69
+ "syntaxNumber": "oklch(80% 0.122 45)",
70
+ "syntaxType": "oklch(80% 0.136 200)",
69
71
  "syntaxOperator": "fg",
70
72
 
71
73
  "syntaxPunctuation": "fgMuted",
72
74
  "thinkingOff": "oklch(40% 0.02 275)",
73
- "thinkingMinimal": "oklch(47% 0.05 357)",
74
- "thinkingLow": "oklch(55% 0.08 357)",
75
- "thinkingMedium": "oklch(63% 0.12 357)",
76
- "thinkingHigh": "oklch(71% 0.16 357)",
77
- "thinkingXhigh": "oklch(79% 0.136 357)",
75
+ "thinkingMinimal": "oklch(47% 0.05 355)",
76
+ "thinkingLow": "oklch(55% 0.08 355)",
77
+ "thinkingMedium": "oklch(63% 0.12 355)",
78
+ "thinkingHigh": "oklch(71% 0.16 355)",
79
+ "thinkingXhigh": "oklch(79% 0.138 355)",
78
80
  "thinkingMax": "accent",
79
81
  "bashMode": "success"
80
82
  },
81
83
  "export": {
82
- "pageBg": "oklch(10% 0.02 275)",
83
- "cardBg": "oklch(13% 0.02 275)",
84
- "infoBg": "oklch(21% 0.05 357)"
84
+ "pageBg": "oklch(18% 0.02 275)",
85
+ "cardBg": "oklch(21% 0.02 275)",
86
+ "infoBg": "oklch(29% 0.05 355)"
85
87
  }
86
88
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
2
+ "$schema": "https://pi.dev/schemas/theme.schema.json",
3
3
  "name": "arnative-dracula",
4
4
  "appearance": "dark",
5
5
  "vars": {
@@ -7,9 +7,12 @@
7
7
  "fgMuted": "oklch(72% 0.012 285)",
8
8
  "fgDim": "oklch(61% 0.012 285)",
9
9
  "fgFaint": "oklch(49% 0.012 285)",
10
- "accent": "oklch(78% 0.135 302)",
11
- "accentSoft": "oklch(82% 0.025 302)",
12
- "accentBorder": "oklch(82% 0.084 302)",
10
+ "primary": "oklch(78% 0.125 295)",
11
+ "secondary": "oklch(82% 0.13 190)",
12
+ "secondarySoft": "oklch(82% 0.0234 190)",
13
+ "accent": "oklch(78% 0.14 330)",
14
+ "accentSoft": "oklch(82% 0.0252 330)",
15
+ "accentBorder": "oklch(82% 0.084 330)",
13
16
  "success": "oklch(78% 0.14 145)",
14
17
  "error": "oklch(76% 0.14 25)",
15
18
  "warning": "oklch(86% 0.14 85)",
@@ -17,9 +20,8 @@
17
20
  },
18
21
  "colors": {
19
22
  "accent": "accent",
20
- "accentSoft": "accentSoft",
21
- "border": "oklch(55% 0.049 302)",
22
- "borderAccent": "accentBorder",
23
+ "border": "oklch(55% 0.049 295)",
24
+ "borderAccent": "secondary",
23
25
  "borderMuted": "fgFaint",
24
26
  "success": "success",
25
27
  "error": "error",
@@ -29,58 +31,58 @@
29
31
  "text": "fg",
30
32
 
31
33
  "thinkingText": "fgMuted",
32
- "selectedBg": "oklch(36% 0.035 302)",
34
+ "selectedBg": "oklch(36% 0.035 295)",
33
35
  "scrollbarTrack": "fgFaint",
34
36
  "scrollbarThumb": "accentSoft",
35
- "searchMatchBg": "oklch(43% 0.063 302)",
37
+ "searchMatchBg": "oklch(43% 0.063 85)",
36
38
  "searchMatchText": "fg",
37
39
  "userMessageBg": "surfaceMsg",
38
40
  "userMessageText": "fg",
39
- "customMessageBg": "oklch(30% 0.056 330)",
41
+ "customMessageBg": "oklch(30% 0.05 190)",
40
42
  "customMessageText": "fg",
41
- "customMessageLabel": "oklch(78% 0.098 330)",
42
- "toolPendingBg": "oklch(27% 0.042 302)",
43
+ "customMessageLabel": "oklch(78% 0.098 190)",
44
+ "toolPendingBg": "oklch(27% 0.042 330)",
43
45
  "toolSuccessBg": "oklch(26% 0.056 145)",
44
46
  "toolErrorBg": "oklch(26% 0.056 25)",
45
47
  "toolTitle": "fg",
46
48
 
47
49
  "toolOutput": "fgMuted",
48
- "mdHeading": "oklch(88% 0.079 60)",
50
+ "mdHeading": "oklch(88% 0.084 85)",
49
51
  "mdLink": "oklch(80% 0.098 190)",
50
52
  "mdLinkUrl": "fgDim",
51
- "mdCode": "oklch(80% 0.098 302)",
53
+ "mdCode": "secondary",
52
54
  "mdCodeBlock": "success",
53
55
  "mdCodeBlockBorder": "fgMuted",
54
56
  "mdQuote": "fgMuted",
55
57
  "mdQuoteBorder": "fgMuted",
56
58
  "mdHr": "fgFaint",
57
59
 
58
- "mdListBullet": "oklch(80% 0.098 302)",
60
+ "mdListBullet": "accent",
59
61
  "toolDiffAdded": "success",
60
62
  "toolDiffRemoved": "error",
61
63
  "toolDiffContext": "fgMuted",
62
64
  "syntaxComment": "fgDim",
63
- "syntaxKeyword": "oklch(80% 0.098 302)",
64
- "syntaxFunction": "oklch(86% 0.112 135)",
65
+ "syntaxKeyword": "oklch(80% 0.098 330)",
66
+ "syntaxFunction": "oklch(86% 0.112 140)",
65
67
  "syntaxVariable": "oklch(84% 0.077 190)",
66
- "syntaxString": "oklch(82% 0.098 60)",
67
- "syntaxNumber": "oklch(80% 0.098 265)",
68
+ "syntaxString": "oklch(82% 0.098 85)",
69
+ "syntaxNumber": "oklch(80% 0.098 295)",
68
70
  "syntaxType": "oklch(80% 0.112 190)",
69
71
  "syntaxOperator": "fg",
70
72
 
71
73
  "syntaxPunctuation": "fgMuted",
72
74
  "thinkingOff": "oklch(40% 0.012 285)",
73
- "thinkingMinimal": "oklch(47% 0.035 302)",
74
- "thinkingLow": "oklch(55% 0.056 302)",
75
- "thinkingMedium": "oklch(63% 0.084 302)",
76
- "thinkingHigh": "oklch(71% 0.112 302)",
77
- "thinkingXhigh": "oklch(79% 0.128 302)",
75
+ "thinkingMinimal": "oklch(47% 0.035 330)",
76
+ "thinkingLow": "oklch(55% 0.056 330)",
77
+ "thinkingMedium": "oklch(63% 0.084 330)",
78
+ "thinkingHigh": "oklch(71% 0.112 330)",
79
+ "thinkingXhigh": "oklch(79% 0.14 330)",
78
80
  "thinkingMax": "accent",
79
81
  "bashMode": "success"
80
82
  },
81
83
  "export": {
82
84
  "pageBg": "oklch(23% 0.012 285)",
83
85
  "cardBg": "oklch(26% 0.012 285)",
84
- "infoBg": "oklch(34% 0.035 302)"
86
+ "infoBg": "oklch(34% 0.035 330)"
85
87
  }
86
88
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
2
+ "$schema": "https://pi.dev/schemas/theme.schema.json",
3
3
  "name": "arnative-emerald",
4
4
  "appearance": "dark",
5
5
  "vars": {
@@ -7,8 +7,11 @@
7
7
  "fgMuted": "oklch(72% 0.012 165)",
8
8
  "fgDim": "oklch(61% 0.012 165)",
9
9
  "fgFaint": "oklch(49% 0.012 165)",
10
+ "primary": "oklch(84% 0.13 165)",
11
+ "secondary": "oklch(78% 0.1 195)",
12
+ "secondarySoft": "oklch(82% 0.01296 165)",
10
13
  "accent": "oklch(78% 0.12 165)",
11
- "accentSoft": "oklch(82% 0.022 165)",
14
+ "accentSoft": "oklch(82% 0.0216 165)",
12
15
  "accentBorder": "oklch(82% 0.072 165)",
13
16
  "success": "oklch(78% 0.12 145)",
14
17
  "error": "oklch(76% 0.12 25)",
@@ -17,8 +20,7 @@
17
20
  },
18
21
  "colors": {
19
22
  "accent": "accent",
20
- "accentSoft": "accentSoft",
21
- "border": "oklch(55% 0.042 165)",
23
+ "border": "oklch(55% 0.042 0)",
22
24
  "borderAccent": "accentBorder",
23
25
  "borderMuted": "fgFaint",
24
26
  "success": "success",
@@ -29,10 +31,10 @@
29
31
  "text": "fg",
30
32
 
31
33
  "thinkingText": "fgMuted",
32
- "selectedBg": "oklch(34% 0.03 165)",
34
+ "selectedBg": "oklch(34% 0.03 0)",
33
35
  "scrollbarTrack": "fgFaint",
34
36
  "scrollbarThumb": "accentSoft",
35
- "searchMatchBg": "oklch(41% 0.054 165)",
37
+ "searchMatchBg": "oklch(41% 0.054 0)",
36
38
  "searchMatchText": "fg",
37
39
  "userMessageBg": "surfaceMsg",
38
40
  "userMessageText": "fg",
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
2
+ "$schema": "https://pi.dev/schemas/theme.schema.json",
3
3
  "name": "arnative-gruvbox",
4
4
  "appearance": "dark",
5
5
  "vars": {
@@ -7,9 +7,12 @@
7
7
  "fgMuted": "oklch(72% 0.015 70)",
8
8
  "fgDim": "oklch(61% 0.015 70)",
9
9
  "fgFaint": "oklch(49% 0.015 70)",
10
- "accent": "oklch(78% 0.14 83)",
11
- "accentSoft": "oklch(82% 0.025 83)",
12
- "accentBorder": "oklch(82% 0.084 83)",
10
+ "primary": "oklch(84% 0.14 83)",
11
+ "secondary": "oklch(78% 0.1 175)",
12
+ "secondarySoft": "oklch(82% 0.018 175)",
13
+ "accent": "oklch(78% 0.137 45)",
14
+ "accentSoft": "oklch(82% 0.02466 45)",
15
+ "accentBorder": "oklch(82% 0.084 45)",
13
16
  "success": "oklch(78% 0.14 145)",
14
17
  "error": "oklch(76% 0.14 25)",
15
18
  "warning": "oklch(86% 0.14 85)",
@@ -17,9 +20,8 @@
17
20
  },
18
21
  "colors": {
19
22
  "accent": "accent",
20
- "accentSoft": "accentSoft",
21
23
  "border": "oklch(55% 0.049 83)",
22
- "borderAccent": "accentBorder",
24
+ "borderAccent": "secondary",
23
25
  "borderMuted": "fgFaint",
24
26
  "success": "success",
25
27
  "error": "error",
@@ -36,51 +38,51 @@
36
38
  "searchMatchText": "fg",
37
39
  "userMessageBg": "surfaceMsg",
38
40
  "userMessageText": "fg",
39
- "customMessageBg": "oklch(25% 0.056 330)",
41
+ "customMessageBg": "oklch(25% 0.047 175)",
40
42
  "customMessageText": "fg",
41
- "customMessageLabel": "oklch(78% 0.098 330)",
42
- "toolPendingBg": "oklch(22% 0.042 83)",
43
+ "customMessageLabel": "oklch(78% 0.098 175)",
44
+ "toolPendingBg": "oklch(22% 0.042 45)",
43
45
  "toolSuccessBg": "oklch(21% 0.056 145)",
44
46
  "toolErrorBg": "oklch(21% 0.056 25)",
45
47
  "toolTitle": "fg",
46
48
 
47
49
  "toolOutput": "fgMuted",
48
- "mdHeading": "oklch(88% 0.068 45)",
49
- "mdLink": "oklch(80% 0.098 200)",
50
+ "mdHeading": "primary",
51
+ "mdLink": "oklch(80% 0.098 175)",
50
52
  "mdLinkUrl": "fgDim",
51
- "mdCode": "oklch(80% 0.098 83)",
53
+ "mdCode": "secondary",
52
54
  "mdCodeBlock": "success",
53
55
  "mdCodeBlockBorder": "fgMuted",
54
56
  "mdQuote": "fgMuted",
55
57
  "mdQuoteBorder": "fgMuted",
56
58
  "mdHr": "fgFaint",
57
59
 
58
- "mdListBullet": "oklch(80% 0.098 83)",
60
+ "mdListBullet": "accent",
59
61
  "toolDiffAdded": "success",
60
62
  "toolDiffRemoved": "error",
61
63
  "toolDiffContext": "fgMuted",
62
64
  "syntaxComment": "fgDim",
63
- "syntaxKeyword": "oklch(80% 0.098 83)",
64
- "syntaxFunction": "oklch(86% 0.109 70)",
65
- "syntaxVariable": "oklch(84% 0.077 200)",
66
- "syntaxString": "oklch(82% 0.098 70)",
67
- "syntaxNumber": "oklch(80% 0.098 330)",
68
- "syntaxType": "oklch(80% 0.112 45)",
65
+ "syntaxKeyword": "oklch(80% 0.098 45)",
66
+ "syntaxFunction": "oklch(86% 0.112 83)",
67
+ "syntaxVariable": "oklch(84% 0.077 175)",
68
+ "syntaxString": "oklch(82% 0.098 145)",
69
+ "syntaxNumber": "oklch(80% 0.098 45)",
70
+ "syntaxType": "oklch(80% 0.112 83)",
69
71
  "syntaxOperator": "fg",
70
72
 
71
73
  "syntaxPunctuation": "fgMuted",
72
74
  "thinkingOff": "oklch(40% 0.015 70)",
73
- "thinkingMinimal": "oklch(47% 0.035 83)",
74
- "thinkingLow": "oklch(55% 0.056 83)",
75
- "thinkingMedium": "oklch(63% 0.084 83)",
76
- "thinkingHigh": "oklch(71% 0.112 83)",
77
- "thinkingXhigh": "oklch(79% 0.14 83)",
75
+ "thinkingMinimal": "oklch(47% 0.035 45)",
76
+ "thinkingLow": "oklch(55% 0.056 45)",
77
+ "thinkingMedium": "oklch(63% 0.084 45)",
78
+ "thinkingHigh": "oklch(71% 0.112 45)",
79
+ "thinkingXhigh": "oklch(79% 0.13 45)",
78
80
  "thinkingMax": "accent",
79
81
  "bashMode": "success"
80
82
  },
81
83
  "export": {
82
84
  "pageBg": "oklch(18% 0.015 70)",
83
85
  "cardBg": "oklch(21% 0.015 70)",
84
- "infoBg": "oklch(29% 0.035 83)"
86
+ "infoBg": "oklch(29% 0.035 45)"
85
87
  }
86
88
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
2
+ "$schema": "https://pi.dev/schemas/theme.schema.json",
3
3
  "name": "arnative-matrix",
4
4
  "appearance": "dark",
5
5
  "vars": {
@@ -7,18 +7,20 @@
7
7
  "fgMuted": "oklch(72% 0.02 145)",
8
8
  "fgDim": "oklch(61% 0.02 145)",
9
9
  "fgFaint": "oklch(49% 0.02 145)",
10
+ "primary": "oklch(88% 0.24 145)",
11
+ "secondary": "oklch(76% 0.16 165)",
12
+ "secondarySoft": "oklch(82% 0.02376 144)",
10
13
  "accent": "oklch(78% 0.22 144)",
11
- "accentSoft": "oklch(82% 0.04 144)",
14
+ "accentSoft": "oklch(82% 0.0396 144)",
12
15
  "accentBorder": "oklch(82% 0.132 144)",
13
16
  "success": "oklch(78% 0.15 145)",
14
17
  "error": "oklch(76% 0.143 25)",
15
18
  "warning": "oklch(86% 0.14 85)",
16
- "surfaceMsg": "oklch(15% 0.01 145)"
19
+ "surfaceMsg": "oklch(24% 0.035 145)"
17
20
  },
18
21
  "colors": {
19
22
  "accent": "accent",
20
- "accentSoft": "accentSoft",
21
- "border": "oklch(55% 0.077 144)",
23
+ "border": "oklch(55% 0.077 0)",
22
24
  "borderAccent": "accentBorder",
23
25
  "borderMuted": "fgFaint",
24
26
  "success": "success",
@@ -29,43 +31,43 @@
29
31
  "text": "fg",
30
32
 
31
33
  "thinkingText": "fgMuted",
32
- "selectedBg": "oklch(22% 0.055 144)",
34
+ "selectedBg": "oklch(31% 0.055 0)",
33
35
  "scrollbarTrack": "fgFaint",
34
36
  "scrollbarThumb": "accentSoft",
35
- "searchMatchBg": "oklch(29% 0.093 144)",
37
+ "searchMatchBg": "oklch(38% 0.099 0)",
36
38
  "searchMatchText": "fg",
37
39
  "userMessageBg": "surfaceMsg",
38
40
  "userMessageText": "fg",
39
- "customMessageBg": "oklch(16% 0.052 145)",
41
+ "customMessageBg": "oklch(25% 0.05 145)",
40
42
  "customMessageText": "fg",
41
- "customMessageLabel": "oklch(78% 0.154 145)",
42
- "toolPendingBg": "oklch(13% 0.044 144)",
43
- "toolSuccessBg": "oklch(12% 0.04 145)",
44
- "toolErrorBg": "oklch(12% 0.051 25)",
43
+ "customMessageLabel": "oklch(78% 0.14 145)",
44
+ "toolPendingBg": "oklch(22% 0.05 144)",
45
+ "toolSuccessBg": "oklch(21% 0.06 145)",
46
+ "toolErrorBg": "oklch(21% 0.06 25)",
45
47
  "toolTitle": "fg",
46
48
 
47
49
  "toolOutput": "fgMuted",
48
50
  "mdHeading": "oklch(88% 0.132 145)",
49
- "mdLink": "oklch(80% 0.154 145)",
51
+ "mdLink": "oklch(80% 0.14 145)",
50
52
  "mdLinkUrl": "fgDim",
51
- "mdCode": "oklch(80% 0.154 144)",
53
+ "mdCode": "oklch(80% 0.14 144)",
52
54
  "mdCodeBlock": "success",
53
55
  "mdCodeBlockBorder": "fgMuted",
54
56
  "mdQuote": "fgMuted",
55
57
  "mdQuoteBorder": "fgMuted",
56
58
  "mdHr": "fgFaint",
57
59
 
58
- "mdListBullet": "oklch(80% 0.154 144)",
60
+ "mdListBullet": "oklch(80% 0.14 144)",
59
61
  "toolDiffAdded": "success",
60
62
  "toolDiffRemoved": "error",
61
63
  "toolDiffContext": "fgMuted",
62
64
  "syntaxComment": "fgDim",
63
- "syntaxKeyword": "oklch(80% 0.154 144)",
64
- "syntaxFunction": "oklch(86% 0.176 145)",
65
+ "syntaxKeyword": "oklch(80% 0.14 144)",
66
+ "syntaxFunction": "oklch(86% 0.16 145)",
65
67
  "syntaxVariable": "oklch(84% 0.121 145)",
66
68
  "syntaxString": "oklch(82% 0.154 145)",
67
- "syntaxNumber": "oklch(80% 0.154 145)",
68
- "syntaxType": "oklch(80% 0.176 145)",
69
+ "syntaxNumber": "oklch(80% 0.15 145)",
70
+ "syntaxType": "oklch(80% 0.16 145)",
69
71
  "syntaxOperator": "fg",
70
72
 
71
73
  "syntaxPunctuation": "fgMuted",
@@ -79,8 +81,8 @@
79
81
  "bashMode": "success"
80
82
  },
81
83
  "export": {
82
- "pageBg": "oklch(9% 0.02 145)",
83
- "cardBg": "oklch(12% 0.02 145)",
84
- "infoBg": "oklch(20% 0.055 144)"
84
+ "pageBg": "oklch(18% 0.02 145)",
85
+ "cardBg": "oklch(21% 0.02 145)",
86
+ "infoBg": "oklch(29% 0.055 144)"
85
87
  }
86
88
  }