@odla-ai/ui 0.1.0 → 0.1.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/llms.txt CHANGED
@@ -15,6 +15,7 @@ alone. Everything except `dist/` ships as source — read it when in doubt.
15
15
  ├── themes/<name>/ # paper, juniper, salt, chalk, clay
16
16
  │ ├── theme.json # { name, label, description, fonts }
17
17
  │ ├── styles.css # the theme's own tokens (+ page styling for blog themes)
18
+ │ ├── tokens.css # GENERATED tokens-only layer (fonts + custom props, no page styling)
18
19
  │ └── ui.css # maps the theme's palette onto the --ui-* contract
19
20
  ├── fonts/*.css # remote-@import font stacks (plex, editorial, satoshi, lora, fira-code, system)
20
21
  ├── js/ # buildless ESM: tokens data, theme toggle, palette reader, canvas helpers
@@ -67,9 +68,18 @@ Five bundled themes; metadata in each `theme.json`:
67
68
 
68
69
  Anatomy: `styles.css` carries the theme's OWN token names (e.g. salt's
69
70
  `--accent`, paper's `--panel`); `ui.css` maps them onto `--ui-*`. **Always
70
- load `ui.css` alongside `styles.css`** or component classes fall back to the
71
+ load `ui.css` alongside the theme** or component classes fall back to the
71
72
  neutral defaults instead of the theme's palette.
72
73
 
74
+ Which theme file to load:
75
+ - Blog/content sites: `styles.css` (full page styling; blog does this).
76
+ - Apps (dashboards, tools): `tokens.css` (generated fonts+tokens extract —
77
+ no `html`/`body`/blog-selector styling to fight your layout) + `ui.css`.
78
+ Runtime theme switching = swap the `tokens.css` + `ui.css` pair, e.g. two
79
+ managed `<link>` elements (Vite: `import url from
80
+ "@odla-ai/ui/themes/salt/tokens.css?url"`). paper's `styles.css` is
81
+ app-safe too (tokens + minimal base) — fine as a static default.
82
+
73
83
  Dark-mode invariant (tested; keep it when editing any theme): dark tokens are
74
84
  duplicated on BOTH `[data-theme="dark"]` and
75
85
  `@media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) }`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@odla-ai/ui",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "The odla design system: semantic CSS design tokens, five themes (paper, juniper, salt, chalk, clay), class-scoped component styles, canvas chart helpers, and optional React/Preact form components. CSS and JS helpers ship as source; only /components is compiled.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -0,0 +1,99 @@
1
+ /* chalk/tokens.css — GENERATED from styles.css by scripts/gen-css.mjs; do not edit.
2
+ The theme's tokens-only layer (fonts + custom properties, no page styling)
3
+ for app consumers — pair with ui.css. Blog sites use styles.css instead. */
4
+
5
+ @import url("https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Instrument+Sans:wght@500;700&family=JetBrains+Mono:wght@300;400;500&family=Spectral:ital,wght@0,300;0,400;0,500;1,300;1,400&display=swap");
6
+
7
+ :root {
8
+ --bg: #f4f1ea;
9
+ --grid-line: rgba(70, 90, 120, 0.07);
10
+ --grid-major: rgba(70, 90, 120, 0.13);
11
+ --vignette: transparent;
12
+ --text: #23252b;
13
+ --text-dim: rgba(35, 37, 43, 0.62);
14
+ --text-faint: rgba(35, 37, 43, 0.4);
15
+ --accent: #a55f28;
16
+ --accent-border: rgba(165, 95, 40, 0.35);
17
+ --accent-glow: rgba(165, 95, 40, 0.08);
18
+ --accent-2: #0a7d99;
19
+ --border: rgba(35, 37, 43, 0.14);
20
+
21
+ --code-bg: rgba(35, 37, 43, 0.045);
22
+ --code-text: #2b2d33;
23
+ --hl-keyword: #a55f28;
24
+ --hl-string: #0a7d99;
25
+ --hl-comment: #8b8677;
26
+ --hl-number: #a3790f;
27
+ --hl-title: #23252b;
28
+ --hl-attr: #3d6f8e;
29
+ --hl-type: #0d6e86;
30
+ --hl-meta: #8c6a3f;
31
+ --hl-addition: #15803d;
32
+ --hl-deletion: #b91c1c;
33
+
34
+ --font-display: "Cormorant Garamond", serif;
35
+ --font-body: "Spectral", Georgia, serif;
36
+ --font-mono: "JetBrains Mono", ui-monospace, monospace;
37
+ --font-wordmark: "Instrument Sans", sans-serif;
38
+
39
+ --max-width: 760px;
40
+ --header-width: var(--max-width);
41
+ }
42
+
43
+ [data-theme="dark"] {
44
+ --bg: #0f1014;
45
+ --grid-line: rgba(255, 255, 255, 0.025);
46
+ --grid-major: rgba(255, 255, 255, 0.045);
47
+ --vignette: rgba(0, 0, 0, 0.6);
48
+ --text: rgba(235, 230, 220, 0.92);
49
+ --text-dim: rgba(235, 230, 220, 0.55);
50
+ --text-faint: rgba(235, 230, 220, 0.4);
51
+ --accent: #c47a3a;
52
+ --accent-border: rgba(196, 122, 58, 0.35);
53
+ --accent-glow: rgba(196, 122, 58, 0.08);
54
+ --accent-2: #0ea5c9;
55
+ --border: rgba(235, 230, 220, 0.12);
56
+
57
+ --code-bg: rgba(235, 230, 220, 0.04);
58
+ --code-text: rgba(235, 230, 220, 0.88);
59
+ --hl-keyword: #c47a3a;
60
+ --hl-string: #6cc9e0;
61
+ --hl-comment: rgba(235, 230, 220, 0.42);
62
+ --hl-number: #d4a017;
63
+ --hl-title: #ebe6dc;
64
+ --hl-attr: #8cd2eb;
65
+ --hl-type: #45b8d4;
66
+ --hl-meta: rgba(220, 180, 145, 0.8);
67
+ --hl-addition: #22c55e;
68
+ --hl-deletion: #ef4444;
69
+ }
70
+
71
+ @media (prefers-color-scheme: dark) {
72
+ :root:not([data-theme="light"]) {
73
+ --bg: #0f1014;
74
+ --grid-line: rgba(255, 255, 255, 0.025);
75
+ --grid-major: rgba(255, 255, 255, 0.045);
76
+ --vignette: rgba(0, 0, 0, 0.6);
77
+ --text: rgba(235, 230, 220, 0.92);
78
+ --text-dim: rgba(235, 230, 220, 0.55);
79
+ --text-faint: rgba(235, 230, 220, 0.4);
80
+ --accent: #c47a3a;
81
+ --accent-border: rgba(196, 122, 58, 0.35);
82
+ --accent-glow: rgba(196, 122, 58, 0.08);
83
+ --accent-2: #0ea5c9;
84
+ --border: rgba(235, 230, 220, 0.12);
85
+
86
+ --code-bg: rgba(235, 230, 220, 0.04);
87
+ --code-text: rgba(235, 230, 220, 0.88);
88
+ --hl-keyword: #c47a3a;
89
+ --hl-string: #6cc9e0;
90
+ --hl-comment: rgba(235, 230, 220, 0.42);
91
+ --hl-number: #d4a017;
92
+ --hl-title: #ebe6dc;
93
+ --hl-attr: #8cd2eb;
94
+ --hl-type: #45b8d4;
95
+ --hl-meta: rgba(220, 180, 145, 0.8);
96
+ --hl-addition: #22c55e;
97
+ --hl-deletion: #ef4444;
98
+ }
99
+ }
@@ -0,0 +1,98 @@
1
+ /* clay/tokens.css — GENERATED from styles.css by scripts/gen-css.mjs; do not edit.
2
+ The theme's tokens-only layer (fonts + custom properties, no page styling)
3
+ for app consumers — pair with ui.css. Blog sites use styles.css instead. */
4
+
5
+ :root {
6
+ --bg: #f6f1e9;
7
+ --panel: #ffffff;
8
+ --panel-raised: #f1ebe0;
9
+ --border: #e4dac9;
10
+ --text: #2c2722;
11
+ --muted: #6f655a;
12
+ --faint: #a99d8c;
13
+ --accent: #a8572e;
14
+ --accent-deep: #8c4623;
15
+ --accent-dim: rgba(168, 87, 46, 0.1);
16
+ --good: #5f7d52;
17
+ --warn: #b08433;
18
+ --shadow: 0 1px 2px rgba(44, 39, 34, 0.03);
19
+
20
+ --code-bg: #f1ebe0;
21
+ --code-text: #3a332b;
22
+ --hl-keyword: #a8572e;
23
+ --hl-string: #5f7d52;
24
+ --hl-comment: #a99d8c;
25
+ --hl-number: #b08433;
26
+ --hl-title: #2c2722;
27
+ --hl-attr: #5f7da8;
28
+ --hl-type: #7d5fa8;
29
+ --hl-meta: #8a6d9e;
30
+ --hl-addition: #5f7d52;
31
+ --hl-deletion: #a8402e;
32
+
33
+ --sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
34
+ --serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;
35
+ --mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
36
+
37
+ --max-width: 44rem;
38
+ }
39
+
40
+ [data-theme="dark"] {
41
+ --bg: #211d19;
42
+ --panel: #2a251f;
43
+ --panel-raised: #332d26;
44
+ --border: #3e362c;
45
+ --text: #ece5da;
46
+ --muted: #b3a794;
47
+ --faint: #857a6a;
48
+ --accent: #d07a4d;
49
+ --accent-deep: #de8f66;
50
+ --accent-dim: rgba(208, 122, 77, 0.14);
51
+ --good: #8aa87c;
52
+ --warn: #c9a25a;
53
+ --shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
54
+
55
+ --code-bg: #2a251f;
56
+ --code-text: #ddd5c8;
57
+ --hl-keyword: #d07a4d;
58
+ --hl-string: #8aa87c;
59
+ --hl-comment: #857a6a;
60
+ --hl-number: #c9a25a;
61
+ --hl-title: #ece5da;
62
+ --hl-attr: #8ba3c7;
63
+ --hl-type: #a78bc9;
64
+ --hl-meta: #ab8fbd;
65
+ --hl-addition: #8aa87c;
66
+ --hl-deletion: #d0684d;
67
+ }
68
+
69
+ @media (prefers-color-scheme: dark) {
70
+ :root:not([data-theme="light"]) {
71
+ --bg: #211d19;
72
+ --panel: #2a251f;
73
+ --panel-raised: #332d26;
74
+ --border: #3e362c;
75
+ --text: #ece5da;
76
+ --muted: #b3a794;
77
+ --faint: #857a6a;
78
+ --accent: #d07a4d;
79
+ --accent-deep: #de8f66;
80
+ --accent-dim: rgba(208, 122, 77, 0.14);
81
+ --good: #8aa87c;
82
+ --warn: #c9a25a;
83
+ --shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
84
+
85
+ --code-bg: #2a251f;
86
+ --code-text: #ddd5c8;
87
+ --hl-keyword: #d07a4d;
88
+ --hl-string: #8aa87c;
89
+ --hl-comment: #857a6a;
90
+ --hl-number: #c9a25a;
91
+ --hl-title: #ece5da;
92
+ --hl-attr: #8ba3c7;
93
+ --hl-type: #a78bc9;
94
+ --hl-meta: #ab8fbd;
95
+ --hl-addition: #8aa87c;
96
+ --hl-deletion: #d0684d;
97
+ }
98
+ }
@@ -0,0 +1,84 @@
1
+ /* juniper/tokens.css — GENERATED from styles.css by scripts/gen-css.mjs; do not edit.
2
+ The theme's tokens-only layer (fonts + custom properties, no page styling)
3
+ for app consumers — pair with ui.css. Blog sites use styles.css instead. */
4
+
5
+ @import url("https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400;1,700&display=swap");
6
+
7
+ :root {
8
+ --bg: #eaeaea;
9
+ --surface: #f5f5f5;
10
+ --text: #0a0a0a;
11
+ --text-secondary: #666666;
12
+ --accent: #250653;
13
+ --accent-2: #324444;
14
+ --border: #d9d9d9;
15
+
16
+ --code-bg: #f5f5f5;
17
+ --code-text: #24292e;
18
+ --hl-keyword: #581c87;
19
+ --hl-string: #1a7f4b;
20
+ --hl-comment: #6e6e6e;
21
+ --hl-number: #0f5132;
22
+ --hl-title: #250653;
23
+ --hl-attr: #92400e;
24
+ --hl-type: #324444;
25
+ --hl-meta: #92400e;
26
+ --hl-addition: #15803d;
27
+ --hl-deletion: #b91c1c;
28
+
29
+ --font-sans: Helvetica, "Helvetica Neue", -apple-system, BlinkMacSystemFont, Arial, sans-serif;
30
+ --font-body: "Lora", Georgia, serif;
31
+ --font-titles: "Gill Sans", "Gill Sans MT", Calibri, "Trebuchet MS", sans-serif;
32
+ --font-mono: "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, monospace;
33
+
34
+ --max-width: 42rem;
35
+ --header-width: var(--max-width);
36
+ }
37
+
38
+ [data-theme="dark"] {
39
+ --bg: #0a1a0a;
40
+ --surface: #1a1a1a;
41
+ --text: #e5e5e5;
42
+ --text-secondary: #a3a3a3;
43
+ --accent: #d3c5fc;
44
+ --accent-2: #581c87;
45
+ --border: #262626;
46
+
47
+ --code-bg: #1a1a1a;
48
+ --code-text: #d6d6d6;
49
+ --hl-keyword: #d3c5fc;
50
+ --hl-string: #9ae6b4;
51
+ --hl-comment: #8a8a8a;
52
+ --hl-number: #86d7b6;
53
+ --hl-title: #ede9fe;
54
+ --hl-attr: #a78bfa;
55
+ --hl-type: #99d6c0;
56
+ --hl-meta: #d8b48a;
57
+ --hl-addition: #7bc98a;
58
+ --hl-deletion: #ef8783;
59
+ }
60
+
61
+ @media (prefers-color-scheme: dark) {
62
+ :root:not([data-theme="light"]) {
63
+ --bg: #0a1a0a;
64
+ --surface: #1a1a1a;
65
+ --text: #e5e5e5;
66
+ --text-secondary: #a3a3a3;
67
+ --accent: #d3c5fc;
68
+ --accent-2: #581c87;
69
+ --border: #262626;
70
+
71
+ --code-bg: #1a1a1a;
72
+ --code-text: #d6d6d6;
73
+ --hl-keyword: #d3c5fc;
74
+ --hl-string: #9ae6b4;
75
+ --hl-comment: #8a8a8a;
76
+ --hl-number: #86d7b6;
77
+ --hl-title: #ede9fe;
78
+ --hl-attr: #a78bfa;
79
+ --hl-type: #99d6c0;
80
+ --hl-meta: #d8b48a;
81
+ --hl-addition: #7bc98a;
82
+ --hl-deletion: #ef8783;
83
+ }
84
+ }
@@ -0,0 +1,100 @@
1
+ /* paper/tokens.css — GENERATED from styles.css by scripts/gen-css.mjs; do not edit.
2
+ The theme's tokens-only layer (fonts + custom properties, no page styling)
3
+ for app consumers — pair with ui.css. Blog sites use styles.css instead. */
4
+
5
+ :root {
6
+ --bg: #f6f1e9;
7
+ --panel: #ffffff;
8
+ --panel-2: #f1ebe0;
9
+ --border: #e4dac9;
10
+ --text: #2c2722;
11
+ --muted: #6f655a;
12
+ --faint: #a99d8c;
13
+ --accent: #a8572e;
14
+ --accent-deep: #8c4623;
15
+ --accent-dim: rgba(168, 87, 46, 0.1);
16
+ --good: #5f7d52;
17
+ --good-dim: rgba(95, 125, 82, 0.12);
18
+ --warn: #b08433;
19
+ --danger: #b3402e;
20
+ --mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
21
+ --sans: "IBM Plex Sans", system-ui, -apple-system, Segoe UI, Roboto, sans-serif;
22
+ --shadow: 0 1px 2px rgba(44, 39, 34, 0.04), 0 8px 24px rgba(44, 39, 34, 0.06);
23
+
24
+ --code-bg: #f1ebe0;
25
+ --code-text: #3a332b;
26
+ --hl-keyword: #a8572e;
27
+ --hl-string: #5f7d52;
28
+ --hl-comment: #a99d8c;
29
+ --hl-number: #b08433;
30
+ --hl-title: #2c2722;
31
+ --hl-attr: #5f7da8;
32
+ --hl-type: #7d5fa8;
33
+ --hl-meta: #8a6d9e;
34
+ --hl-addition: #5f7d52;
35
+ --hl-deletion: #a8402e;
36
+ }
37
+
38
+ [data-theme="dark"] {
39
+ --bg: #211d19;
40
+ --panel: #2a251f;
41
+ --panel-2: #332d26;
42
+ --border: #3e362c;
43
+ --text: #ece5da;
44
+ --muted: #b3a794;
45
+ --faint: #857a6a;
46
+ --accent: #d07a4d;
47
+ --accent-deep: #de8f66;
48
+ --accent-dim: rgba(208, 122, 77, 0.14);
49
+ --good: #8aa87c;
50
+ --good-dim: rgba(138, 168, 124, 0.16);
51
+ --warn: #c9a25a;
52
+ --danger: #d0684d;
53
+ --shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 8px 24px rgba(0, 0, 0, 0.3);
54
+
55
+ --code-bg: #2a251f;
56
+ --code-text: #ddd5c8;
57
+ --hl-keyword: #d07a4d;
58
+ --hl-string: #8aa87c;
59
+ --hl-comment: #857a6a;
60
+ --hl-number: #c9a25a;
61
+ --hl-title: #ece5da;
62
+ --hl-attr: #8ba3c7;
63
+ --hl-type: #a78bc9;
64
+ --hl-meta: #ab8fbd;
65
+ --hl-addition: #8aa87c;
66
+ --hl-deletion: #d0684d;
67
+ }
68
+
69
+ @media (prefers-color-scheme: dark) {
70
+ :root:not([data-theme="light"]) {
71
+ --bg: #211d19;
72
+ --panel: #2a251f;
73
+ --panel-2: #332d26;
74
+ --border: #3e362c;
75
+ --text: #ece5da;
76
+ --muted: #b3a794;
77
+ --faint: #857a6a;
78
+ --accent: #d07a4d;
79
+ --accent-deep: #de8f66;
80
+ --accent-dim: rgba(208, 122, 77, 0.14);
81
+ --good: #8aa87c;
82
+ --good-dim: rgba(138, 168, 124, 0.16);
83
+ --warn: #c9a25a;
84
+ --danger: #d0684d;
85
+ --shadow: 0 1px 2px rgba(0, 0, 0, 0.25), 0 8px 24px rgba(0, 0, 0, 0.3);
86
+
87
+ --code-bg: #2a251f;
88
+ --code-text: #ddd5c8;
89
+ --hl-keyword: #d07a4d;
90
+ --hl-string: #8aa87c;
91
+ --hl-comment: #857a6a;
92
+ --hl-number: #c9a25a;
93
+ --hl-title: #ece5da;
94
+ --hl-attr: #8ba3c7;
95
+ --hl-type: #a78bc9;
96
+ --hl-meta: #ab8fbd;
97
+ --hl-addition: #8aa87c;
98
+ --hl-deletion: #d0684d;
99
+ }
100
+ }
@@ -0,0 +1,140 @@
1
+ /* salt/tokens.css — GENERATED from styles.css by scripts/gen-css.mjs; do not edit.
2
+ The theme's tokens-only layer (fonts + custom properties, no page styling)
3
+ for app consumers — pair with ui.css. Blog sites use styles.css instead. */
4
+
5
+ @import url("https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400;1,600&display=swap");
6
+
7
+ @import url("https://api.fontshare.com/v2/css?f[]=satoshi@400,500,700&display=swap");
8
+
9
+ @font-face {
10
+ font-family: "Cormorant Garamond";
11
+ font-style: normal;
12
+ font-weight: 300;
13
+ font-display: swap;
14
+ src: url(https://fonts.gstatic.com/s/cormorantinfant/v22/HhyPU44g9vKiM1sORYSiWeAsLN997_cV2RkDTq8.woff2) format("woff2");
15
+ unicode-range: U+0030-0039;
16
+ }
17
+
18
+ @font-face {
19
+ font-family: "Cormorant Garamond";
20
+ font-style: normal;
21
+ font-weight: 400;
22
+ font-display: swap;
23
+ src: url(https://fonts.gstatic.com/s/cormorantinfant/v22/HhyPU44g9vKiM1sORYSiWeAsLN997_cV2RkDTq8.woff2) format("woff2");
24
+ unicode-range: U+0030-0039;
25
+ }
26
+
27
+ @font-face {
28
+ font-family: "Cormorant Garamond";
29
+ font-style: normal;
30
+ font-weight: 600;
31
+ font-display: swap;
32
+ src: url(https://fonts.gstatic.com/s/cormorantinfant/v22/HhyPU44g9vKiM1sORYSiWeAsLN997_cV2RkDTq8.woff2) format("woff2");
33
+ unicode-range: U+0030-0039;
34
+ }
35
+
36
+ @font-face {
37
+ font-family: "Cormorant Garamond";
38
+ font-style: normal;
39
+ font-weight: 700;
40
+ font-display: swap;
41
+ src: url(https://fonts.gstatic.com/s/cormorantinfant/v22/HhyPU44g9vKiM1sORYSiWeAsLN997_cV2RkDTq8.woff2) format("woff2");
42
+ unicode-range: U+0030-0039;
43
+ }
44
+
45
+ @font-face {
46
+ font-family: "Cormorant Garamond";
47
+ font-style: italic;
48
+ font-weight: 400;
49
+ font-display: swap;
50
+ src: url(https://fonts.gstatic.com/s/cormorantinfant/v22/HhyJU44g9vKiM1sORYSiWeAsLN997_Il2xMEbK0UPg.woff2) format("woff2");
51
+ unicode-range: U+0030-0039;
52
+ }
53
+
54
+ :root {
55
+ --bg: #FBF8F2;
56
+ --surface: #F4EFE6;
57
+ --text: #2F3E34;
58
+ --text-body: #4A5E50;
59
+ --text-secondary: #7E8E84;
60
+ --accent: #D16B4F;
61
+ --accent-hover: #E07A5E;
62
+ --accent-2: #1A8F7D;
63
+ --warm: #C4A47E;
64
+ --border: rgba(47, 62, 52, 0.12);
65
+
66
+ --code-bg: #F4EFE6;
67
+ --code-text: #3A4A40;
68
+ --hl-keyword: #C15A40;
69
+ --hl-string: #177E6E;
70
+ --hl-comment: #8A9A8F;
71
+ --hl-number: #C87F5A;
72
+ --hl-title: #2F3E34;
73
+ --hl-attr: #3D5A99;
74
+ --hl-type: #14675B;
75
+ --hl-meta: #A08050;
76
+ --hl-addition: #5F7D52;
77
+ --hl-deletion: #B0492F;
78
+
79
+ --font-sans: "Satoshi", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
80
+ --font-serif: "Cormorant Garamond", Garamond, Georgia, serif;
81
+ --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
82
+
83
+ --tracking-widest: 0.14em;
84
+ --max-width: 44rem;
85
+ --header-width: var(--max-width);
86
+ }
87
+
88
+ [data-theme="dark"] {
89
+ --bg: #1F2823;
90
+ --surface: #2A362F;
91
+ --text: #F0EDE7;
92
+ --text-body: #B8C4BB;
93
+ --text-secondary: #8A9E90;
94
+ --accent: #E07A5E;
95
+ --accent-hover: #EE8D72;
96
+ --accent-2: #2FAE99;
97
+ --warm: #C4A47E;
98
+ --border: rgba(240, 237, 231, 0.12);
99
+
100
+ --code-bg: #26312B;
101
+ --code-text: #D8DFD8;
102
+ --hl-keyword: #E07A5E;
103
+ --hl-string: #4FC3AE;
104
+ --hl-comment: #7E8E84;
105
+ --hl-number: #D9A87E;
106
+ --hl-title: #F0EDE7;
107
+ --hl-attr: #9FB4E0;
108
+ --hl-type: #7CCFC0;
109
+ --hl-meta: #C4A47E;
110
+ --hl-addition: #8FB07F;
111
+ --hl-deletion: #E8907B;
112
+ }
113
+
114
+ @media (prefers-color-scheme: dark) {
115
+ :root:not([data-theme="light"]) {
116
+ --bg: #1F2823;
117
+ --surface: #2A362F;
118
+ --text: #F0EDE7;
119
+ --text-body: #B8C4BB;
120
+ --text-secondary: #8A9E90;
121
+ --accent: #E07A5E;
122
+ --accent-hover: #EE8D72;
123
+ --accent-2: #2FAE99;
124
+ --warm: #C4A47E;
125
+ --border: rgba(240, 237, 231, 0.12);
126
+
127
+ --code-bg: #26312B;
128
+ --code-text: #D8DFD8;
129
+ --hl-keyword: #E07A5E;
130
+ --hl-string: #4FC3AE;
131
+ --hl-comment: #7E8E84;
132
+ --hl-number: #D9A87E;
133
+ --hl-title: #F0EDE7;
134
+ --hl-attr: #9FB4E0;
135
+ --hl-type: #7CCFC0;
136
+ --hl-meta: #C4A47E;
137
+ --hl-addition: #8FB07F;
138
+ --hl-deletion: #E8907B;
139
+ }
140
+ }