@odla-ai/ui 0.1.0 → 0.1.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/css/components/chat.css +15 -5
- package/llms.txt +11 -1
- package/odla-ui.css +15 -5
- package/package.json +1 -1
- package/themes/chalk/tokens.css +99 -0
- package/themes/clay/styles.css +85 -82
- package/themes/clay/theme.json +1 -1
- package/themes/clay/tokens.css +101 -0
- package/themes/clay/ui.css +4 -14
- package/themes/juniper/tokens.css +84 -0
- package/themes/paper/styles.css +56 -55
- package/themes/paper/tokens.css +100 -0
- package/themes/salt/tokens.css +140 -0
package/css/components/chat.css
CHANGED
|
@@ -58,11 +58,11 @@
|
|
|
58
58
|
}
|
|
59
59
|
.chat-thinking[open] summary { margin-bottom: 6px; }
|
|
60
60
|
|
|
61
|
-
/* Tool-call card (ToolUseBlock): name + streamed args.
|
|
61
|
+
/* Tool-call card (ToolUseBlock): name + streamed args. The accent-colored
|
|
62
|
+
mono name is the card's signal — no stripe. */
|
|
62
63
|
.chat-tool {
|
|
63
64
|
align-self: stretch;
|
|
64
65
|
border: 1px solid var(--ui-border);
|
|
65
|
-
border-left: 3px solid var(--ui-chat-tool-accent);
|
|
66
66
|
border-radius: var(--ui-radius-md);
|
|
67
67
|
background: var(--ui-surface);
|
|
68
68
|
padding: 8px 12px;
|
|
@@ -85,21 +85,31 @@
|
|
|
85
85
|
white-space: pre-wrap;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
/* Tool-result card (ToolResultBlock); .error for isError results.
|
|
88
|
+
/* Tool-result card (ToolResultBlock); .error for isError results.
|
|
89
|
+
Status reads from a leading dot, not an edge stripe. */
|
|
89
90
|
.chat-result {
|
|
90
91
|
align-self: stretch;
|
|
91
92
|
border: 1px solid var(--ui-border);
|
|
92
|
-
border-left: 3px solid var(--ui-good);
|
|
93
93
|
border-radius: var(--ui-radius-md);
|
|
94
94
|
background: var(--ui-surface-2);
|
|
95
95
|
padding: 8px 12px;
|
|
96
96
|
font-size: var(--ui-text-md);
|
|
97
97
|
}
|
|
98
|
+
.chat-result::before {
|
|
99
|
+
content: "";
|
|
100
|
+
display: inline-block;
|
|
101
|
+
width: 6px;
|
|
102
|
+
height: 6px;
|
|
103
|
+
border-radius: var(--ui-radius-pill);
|
|
104
|
+
background: var(--ui-good);
|
|
105
|
+
margin-right: 8px;
|
|
106
|
+
vertical-align: 1px;
|
|
107
|
+
}
|
|
98
108
|
.chat-result.error {
|
|
99
|
-
border-left-color: var(--ui-danger);
|
|
100
109
|
background: var(--ui-danger-soft);
|
|
101
110
|
color: var(--ui-danger);
|
|
102
111
|
}
|
|
112
|
+
.chat-result.error::before { background: var(--ui-danger); }
|
|
103
113
|
|
|
104
114
|
/* Streaming caret appended during text/thinking deltas. */
|
|
105
115
|
.chat-cursor {
|
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
|
|
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/odla-ui.css
CHANGED
|
@@ -729,11 +729,11 @@
|
|
|
729
729
|
}
|
|
730
730
|
.chat-thinking[open] summary { margin-bottom: 6px; }
|
|
731
731
|
|
|
732
|
-
/* Tool-call card (ToolUseBlock): name + streamed args.
|
|
732
|
+
/* Tool-call card (ToolUseBlock): name + streamed args. The accent-colored
|
|
733
|
+
mono name is the card's signal — no stripe. */
|
|
733
734
|
.chat-tool {
|
|
734
735
|
align-self: stretch;
|
|
735
736
|
border: 1px solid var(--ui-border);
|
|
736
|
-
border-left: 3px solid var(--ui-chat-tool-accent);
|
|
737
737
|
border-radius: var(--ui-radius-md);
|
|
738
738
|
background: var(--ui-surface);
|
|
739
739
|
padding: 8px 12px;
|
|
@@ -756,21 +756,31 @@
|
|
|
756
756
|
white-space: pre-wrap;
|
|
757
757
|
}
|
|
758
758
|
|
|
759
|
-
/* Tool-result card (ToolResultBlock); .error for isError results.
|
|
759
|
+
/* Tool-result card (ToolResultBlock); .error for isError results.
|
|
760
|
+
Status reads from a leading dot, not an edge stripe. */
|
|
760
761
|
.chat-result {
|
|
761
762
|
align-self: stretch;
|
|
762
763
|
border: 1px solid var(--ui-border);
|
|
763
|
-
border-left: 3px solid var(--ui-good);
|
|
764
764
|
border-radius: var(--ui-radius-md);
|
|
765
765
|
background: var(--ui-surface-2);
|
|
766
766
|
padding: 8px 12px;
|
|
767
767
|
font-size: var(--ui-text-md);
|
|
768
768
|
}
|
|
769
|
+
.chat-result::before {
|
|
770
|
+
content: "";
|
|
771
|
+
display: inline-block;
|
|
772
|
+
width: 6px;
|
|
773
|
+
height: 6px;
|
|
774
|
+
border-radius: var(--ui-radius-pill);
|
|
775
|
+
background: var(--ui-good);
|
|
776
|
+
margin-right: 8px;
|
|
777
|
+
vertical-align: 1px;
|
|
778
|
+
}
|
|
769
779
|
.chat-result.error {
|
|
770
|
-
border-left-color: var(--ui-danger);
|
|
771
780
|
background: var(--ui-danger-soft);
|
|
772
781
|
color: var(--ui-danger);
|
|
773
782
|
}
|
|
783
|
+
.chat-result.error::before { background: var(--ui-danger); }
|
|
774
784
|
|
|
775
785
|
/* Streaming caret appended during text/thinking deltas. */
|
|
776
786
|
.chat-cursor {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@odla-ai/ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
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
|
+
}
|
package/themes/clay/styles.css
CHANGED
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
/* ══════════════════════════════════════════════════════════════
|
|
2
|
-
CLAY —
|
|
3
|
-
Iowan Old Style serif titles · system sans body ·
|
|
4
|
-
Light: sand
|
|
5
|
-
Dark:
|
|
2
|
+
CLAY — red-earth editorial shell
|
|
3
|
+
Iowan Old Style serif titles · system sans body · iron-oxide red
|
|
4
|
+
Light: rosy sand, warm cream panels, brick accent, ochre/olive.
|
|
5
|
+
Dark: kiln-fired umber, glowing ember accent — never pure black.
|
|
6
6
|
Zero external font requests: system stacks only.
|
|
7
7
|
══════════════════════════════════════════════════════════════ */
|
|
8
8
|
|
|
9
9
|
/* ─── Tokens ─── */
|
|
10
10
|
:root {
|
|
11
|
-
--bg: #
|
|
12
|
-
--panel: #
|
|
13
|
-
--panel-raised: #
|
|
14
|
-
--border: #
|
|
15
|
-
--text: #
|
|
16
|
-
--muted: #
|
|
17
|
-
--faint: #
|
|
18
|
-
--accent: #
|
|
19
|
-
--accent-deep: #
|
|
20
|
-
--accent-dim: rgba(
|
|
21
|
-
--good: #
|
|
22
|
-
--warn: #
|
|
23
|
-
--
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
--code-
|
|
27
|
-
--
|
|
28
|
-
--hl-
|
|
29
|
-
--hl-
|
|
30
|
-
--hl-
|
|
31
|
-
--hl-
|
|
32
|
-
--hl-
|
|
33
|
-
--hl-
|
|
34
|
-
--hl-
|
|
35
|
-
--hl-
|
|
36
|
-
--hl-
|
|
11
|
+
--bg: #f1e6db;
|
|
12
|
+
--panel: #fbf6ef;
|
|
13
|
+
--panel-raised: #eadccd;
|
|
14
|
+
--border: #ddcab7;
|
|
15
|
+
--text: #322620;
|
|
16
|
+
--muted: #71594a;
|
|
17
|
+
--faint: #a58a75;
|
|
18
|
+
--accent: #9c3b1f;
|
|
19
|
+
--accent-deep: #7f2f18;
|
|
20
|
+
--accent-dim: rgba(156, 59, 31, 0.1);
|
|
21
|
+
--good: #6a7d4d;
|
|
22
|
+
--warn: #a4722a;
|
|
23
|
+
--danger: #a52833;
|
|
24
|
+
--shadow: 0 1px 2px rgba(50, 38, 32, 0.04);
|
|
25
|
+
|
|
26
|
+
--code-bg: #eadccd;
|
|
27
|
+
--code-text: #3c2d23;
|
|
28
|
+
--hl-keyword: #9c3b1f;
|
|
29
|
+
--hl-string: #6a7d4d;
|
|
30
|
+
--hl-comment: #a58a75;
|
|
31
|
+
--hl-number: #a4722a;
|
|
32
|
+
--hl-title: #322620;
|
|
33
|
+
--hl-attr: #4e6b8e;
|
|
34
|
+
--hl-type: #7b568e;
|
|
35
|
+
--hl-meta: #8c6a80;
|
|
36
|
+
--hl-addition: #6a7d4d;
|
|
37
|
+
--hl-deletion: #a52833;
|
|
37
38
|
|
|
38
39
|
--sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
39
40
|
--serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;
|
|
@@ -43,62 +44,64 @@
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
[data-theme="dark"] {
|
|
46
|
-
--bg: #
|
|
47
|
-
--panel: #
|
|
48
|
-
--panel-raised: #
|
|
49
|
-
--border: #
|
|
50
|
-
--text: #
|
|
51
|
-
--muted: #
|
|
52
|
-
--faint: #
|
|
53
|
-
--accent: #
|
|
54
|
-
--accent-deep: #
|
|
55
|
-
--accent-dim: rgba(
|
|
56
|
-
--good: #
|
|
57
|
-
--warn: #
|
|
58
|
-
--
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
--code-
|
|
62
|
-
--
|
|
63
|
-
--hl-
|
|
64
|
-
--hl-
|
|
65
|
-
--hl-
|
|
66
|
-
--hl-
|
|
67
|
-
--hl-
|
|
68
|
-
--hl-
|
|
69
|
-
--hl-
|
|
70
|
-
--hl-
|
|
71
|
-
--hl-
|
|
47
|
+
--bg: #1d1310;
|
|
48
|
+
--panel: #291b15;
|
|
49
|
+
--panel-raised: #33221a;
|
|
50
|
+
--border: #4a3126;
|
|
51
|
+
--text: #f4e7dc;
|
|
52
|
+
--muted: #c2a48f;
|
|
53
|
+
--faint: #8f7261;
|
|
54
|
+
--accent: #e26a3f;
|
|
55
|
+
--accent-deep: #ef8560;
|
|
56
|
+
--accent-dim: rgba(226, 106, 63, 0.16);
|
|
57
|
+
--good: #93ad7b;
|
|
58
|
+
--warn: #d2a052;
|
|
59
|
+
--danger: #e25549;
|
|
60
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
61
|
+
|
|
62
|
+
--code-bg: #291b15;
|
|
63
|
+
--code-text: #e8d6c7;
|
|
64
|
+
--hl-keyword: #e26a3f;
|
|
65
|
+
--hl-string: #93ad7b;
|
|
66
|
+
--hl-comment: #8f7261;
|
|
67
|
+
--hl-number: #d2a052;
|
|
68
|
+
--hl-title: #f4e7dc;
|
|
69
|
+
--hl-attr: #93a9c9;
|
|
70
|
+
--hl-type: #b18fcd;
|
|
71
|
+
--hl-meta: #b092bb;
|
|
72
|
+
--hl-addition: #93ad7b;
|
|
73
|
+
--hl-deletion: #e25549;
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
@media (prefers-color-scheme: dark) {
|
|
75
77
|
:root:not([data-theme="light"]) {
|
|
76
|
-
--bg: #
|
|
77
|
-
--panel: #
|
|
78
|
-
--panel-raised: #
|
|
79
|
-
--border: #
|
|
80
|
-
--text: #
|
|
81
|
-
--muted: #
|
|
82
|
-
--faint: #
|
|
83
|
-
--accent: #
|
|
84
|
-
--accent-deep: #
|
|
85
|
-
--accent-dim: rgba(
|
|
86
|
-
--good: #
|
|
87
|
-
--warn: #
|
|
88
|
-
--
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
--code-
|
|
92
|
-
--
|
|
93
|
-
--hl-
|
|
94
|
-
--hl-
|
|
95
|
-
--hl-
|
|
96
|
-
--hl-
|
|
97
|
-
--hl-
|
|
98
|
-
--hl-
|
|
99
|
-
--hl-
|
|
100
|
-
--hl-
|
|
101
|
-
--hl-
|
|
78
|
+
--bg: #1d1310;
|
|
79
|
+
--panel: #291b15;
|
|
80
|
+
--panel-raised: #33221a;
|
|
81
|
+
--border: #4a3126;
|
|
82
|
+
--text: #f4e7dc;
|
|
83
|
+
--muted: #c2a48f;
|
|
84
|
+
--faint: #8f7261;
|
|
85
|
+
--accent: #e26a3f;
|
|
86
|
+
--accent-deep: #ef8560;
|
|
87
|
+
--accent-dim: rgba(226, 106, 63, 0.16);
|
|
88
|
+
--good: #93ad7b;
|
|
89
|
+
--warn: #d2a052;
|
|
90
|
+
--danger: #e25549;
|
|
91
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
92
|
+
|
|
93
|
+
--code-bg: #291b15;
|
|
94
|
+
--code-text: #e8d6c7;
|
|
95
|
+
--hl-keyword: #e26a3f;
|
|
96
|
+
--hl-string: #93ad7b;
|
|
97
|
+
--hl-comment: #8f7261;
|
|
98
|
+
--hl-number: #d2a052;
|
|
99
|
+
--hl-title: #f4e7dc;
|
|
100
|
+
--hl-attr: #93a9c9;
|
|
101
|
+
--hl-type: #b18fcd;
|
|
102
|
+
--hl-meta: #b092bb;
|
|
103
|
+
--hl-addition: #93ad7b;
|
|
104
|
+
--hl-deletion: #e25549;
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
107
|
|
package/themes/clay/theme.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clay",
|
|
3
3
|
"label": "Clay",
|
|
4
|
-
"description": "
|
|
4
|
+
"description": "Red-earth editorial shell. Rosy sand background, iron-oxide brick accent, Iowan Old Style serif titles over a system sans body, hairline borders, soft warm shadows. Zero external font requests. Kiln-fired umber dark mode with a glowing ember accent. Diverged from its agnacl roots to stand apart from paper.",
|
|
5
5
|
"fonts": "System stacks only (Iowan Old Style / Palatino serif, system sans, system mono)"
|
|
6
6
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
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: #f1e6db;
|
|
7
|
+
--panel: #fbf6ef;
|
|
8
|
+
--panel-raised: #eadccd;
|
|
9
|
+
--border: #ddcab7;
|
|
10
|
+
--text: #322620;
|
|
11
|
+
--muted: #71594a;
|
|
12
|
+
--faint: #a58a75;
|
|
13
|
+
--accent: #9c3b1f;
|
|
14
|
+
--accent-deep: #7f2f18;
|
|
15
|
+
--accent-dim: rgba(156, 59, 31, 0.1);
|
|
16
|
+
--good: #6a7d4d;
|
|
17
|
+
--warn: #a4722a;
|
|
18
|
+
--danger: #a52833;
|
|
19
|
+
--shadow: 0 1px 2px rgba(50, 38, 32, 0.04);
|
|
20
|
+
|
|
21
|
+
--code-bg: #eadccd;
|
|
22
|
+
--code-text: #3c2d23;
|
|
23
|
+
--hl-keyword: #9c3b1f;
|
|
24
|
+
--hl-string: #6a7d4d;
|
|
25
|
+
--hl-comment: #a58a75;
|
|
26
|
+
--hl-number: #a4722a;
|
|
27
|
+
--hl-title: #322620;
|
|
28
|
+
--hl-attr: #4e6b8e;
|
|
29
|
+
--hl-type: #7b568e;
|
|
30
|
+
--hl-meta: #8c6a80;
|
|
31
|
+
--hl-addition: #6a7d4d;
|
|
32
|
+
--hl-deletion: #a52833;
|
|
33
|
+
|
|
34
|
+
--sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
35
|
+
--serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, "Times New Roman", serif;
|
|
36
|
+
--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
|
|
37
|
+
|
|
38
|
+
--max-width: 44rem;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[data-theme="dark"] {
|
|
42
|
+
--bg: #1d1310;
|
|
43
|
+
--panel: #291b15;
|
|
44
|
+
--panel-raised: #33221a;
|
|
45
|
+
--border: #4a3126;
|
|
46
|
+
--text: #f4e7dc;
|
|
47
|
+
--muted: #c2a48f;
|
|
48
|
+
--faint: #8f7261;
|
|
49
|
+
--accent: #e26a3f;
|
|
50
|
+
--accent-deep: #ef8560;
|
|
51
|
+
--accent-dim: rgba(226, 106, 63, 0.16);
|
|
52
|
+
--good: #93ad7b;
|
|
53
|
+
--warn: #d2a052;
|
|
54
|
+
--danger: #e25549;
|
|
55
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
56
|
+
|
|
57
|
+
--code-bg: #291b15;
|
|
58
|
+
--code-text: #e8d6c7;
|
|
59
|
+
--hl-keyword: #e26a3f;
|
|
60
|
+
--hl-string: #93ad7b;
|
|
61
|
+
--hl-comment: #8f7261;
|
|
62
|
+
--hl-number: #d2a052;
|
|
63
|
+
--hl-title: #f4e7dc;
|
|
64
|
+
--hl-attr: #93a9c9;
|
|
65
|
+
--hl-type: #b18fcd;
|
|
66
|
+
--hl-meta: #b092bb;
|
|
67
|
+
--hl-addition: #93ad7b;
|
|
68
|
+
--hl-deletion: #e25549;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media (prefers-color-scheme: dark) {
|
|
72
|
+
:root:not([data-theme="light"]) {
|
|
73
|
+
--bg: #1d1310;
|
|
74
|
+
--panel: #291b15;
|
|
75
|
+
--panel-raised: #33221a;
|
|
76
|
+
--border: #4a3126;
|
|
77
|
+
--text: #f4e7dc;
|
|
78
|
+
--muted: #c2a48f;
|
|
79
|
+
--faint: #8f7261;
|
|
80
|
+
--accent: #e26a3f;
|
|
81
|
+
--accent-deep: #ef8560;
|
|
82
|
+
--accent-dim: rgba(226, 106, 63, 0.16);
|
|
83
|
+
--good: #93ad7b;
|
|
84
|
+
--warn: #d2a052;
|
|
85
|
+
--danger: #e25549;
|
|
86
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
87
|
+
|
|
88
|
+
--code-bg: #291b15;
|
|
89
|
+
--code-text: #e8d6c7;
|
|
90
|
+
--hl-keyword: #e26a3f;
|
|
91
|
+
--hl-string: #93ad7b;
|
|
92
|
+
--hl-comment: #8f7261;
|
|
93
|
+
--hl-number: #d2a052;
|
|
94
|
+
--hl-title: #f4e7dc;
|
|
95
|
+
--hl-attr: #93a9c9;
|
|
96
|
+
--hl-type: #b18fcd;
|
|
97
|
+
--hl-meta: #b092bb;
|
|
98
|
+
--hl-addition: #93ad7b;
|
|
99
|
+
--hl-deletion: #e25549;
|
|
100
|
+
}
|
|
101
|
+
}
|
package/themes/clay/ui.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* clay/ui.css — maps clay onto the @odla-ai/ui token contract.
|
|
2
|
-
Load alongside styles.css.
|
|
3
|
-
|
|
2
|
+
Load alongside styles.css. Every alias is var()-based (or constant),
|
|
3
|
+
so dark mode tracks automatically — no dark blocks needed here. */
|
|
4
4
|
:root {
|
|
5
5
|
--ui-bg: var(--bg);
|
|
6
6
|
--ui-surface: var(--panel);
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
--ui-good-soft: color-mix(in srgb, var(--good) 13%, transparent);
|
|
19
19
|
--ui-warn: var(--warn);
|
|
20
20
|
--ui-warn-soft: color-mix(in srgb, var(--warn) 13%, transparent);
|
|
21
|
-
--ui-danger:
|
|
22
|
-
--ui-danger-soft: color-mix(in srgb, var(--
|
|
21
|
+
--ui-danger: var(--danger);
|
|
22
|
+
--ui-danger-soft: color-mix(in srgb, var(--danger) 11%, transparent);
|
|
23
23
|
--ui-code-bg: var(--code-bg);
|
|
24
24
|
--ui-code-text: var(--code-text);
|
|
25
25
|
--ui-shadow: var(--shadow);
|
|
@@ -28,13 +28,3 @@
|
|
|
28
28
|
--ui-font-mono: var(--mono);
|
|
29
29
|
--ui-font-display: var(--serif);
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
[data-theme="dark"] {
|
|
33
|
-
--ui-danger: #d0684d;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
@media (prefers-color-scheme: dark) {
|
|
37
|
-
:root:not([data-theme="light"]) {
|
|
38
|
-
--ui-danger: #d0684d;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -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
|
+
}
|
package/themes/paper/styles.css
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
PAPER — warm paper dashboard shell
|
|
3
3
|
IBM Plex Sans UI · IBM Plex Mono data · terracotta accent
|
|
4
4
|
Light: white panels on parchment, clay accent (Atlas scheme).
|
|
5
|
-
Dark: warm charcoal
|
|
5
|
+
Dark: deep warm charcoal with clearly raised panels and a bright
|
|
6
|
+
ember accent — warm but crisp, never muddy, never pure black.
|
|
6
7
|
Fonts load separately via @odla-ai/ui/fonts/plex.css.
|
|
7
8
|
Unlike the blog themes, paper is tokens + base only: components
|
|
8
9
|
come from the ui class sheets, layout from the app.
|
|
@@ -43,66 +44,66 @@
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
[data-theme="dark"] {
|
|
46
|
-
--bg: #
|
|
47
|
-
--panel: #
|
|
48
|
-
--panel-2: #
|
|
49
|
-
--border: #
|
|
50
|
-
--text: #
|
|
51
|
-
--muted: #
|
|
52
|
-
--faint: #
|
|
53
|
-
--accent: #
|
|
54
|
-
--accent-deep: #
|
|
55
|
-
--accent-dim: rgba(
|
|
56
|
-
--good: #
|
|
57
|
-
--good-dim: rgba(
|
|
58
|
-
--warn: #
|
|
59
|
-
--danger: #
|
|
60
|
-
--shadow: 0 1px 2px rgba(0, 0, 0, 0.
|
|
47
|
+
--bg: #191613;
|
|
48
|
+
--panel: #242019;
|
|
49
|
+
--panel-2: #2e2820;
|
|
50
|
+
--border: #40372a;
|
|
51
|
+
--text: #f2ecdf;
|
|
52
|
+
--muted: #b9ad99;
|
|
53
|
+
--faint: #877c6a;
|
|
54
|
+
--accent: #e08547;
|
|
55
|
+
--accent-deep: #ec9c68;
|
|
56
|
+
--accent-dim: rgba(224, 133, 71, 0.16);
|
|
57
|
+
--good: #97b984;
|
|
58
|
+
--good-dim: rgba(151, 185, 132, 0.16);
|
|
59
|
+
--warn: #dcae57;
|
|
60
|
+
--danger: #e06a4a;
|
|
61
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.35), 0 8px 24px rgba(0, 0, 0, 0.4);
|
|
61
62
|
|
|
62
|
-
--code-bg: #
|
|
63
|
-
--code-text: #
|
|
64
|
-
--hl-keyword: #
|
|
65
|
-
--hl-string: #
|
|
66
|
-
--hl-comment: #
|
|
67
|
-
--hl-number: #
|
|
68
|
-
--hl-title: #
|
|
69
|
-
--hl-attr: #
|
|
70
|
-
--hl-type: #
|
|
71
|
-
--hl-meta: #
|
|
72
|
-
--hl-addition: #
|
|
73
|
-
--hl-deletion: #
|
|
63
|
+
--code-bg: #242019;
|
|
64
|
+
--code-text: #e4dbc9;
|
|
65
|
+
--hl-keyword: #e08547;
|
|
66
|
+
--hl-string: #97b984;
|
|
67
|
+
--hl-comment: #877c6a;
|
|
68
|
+
--hl-number: #dcae57;
|
|
69
|
+
--hl-title: #f2ecdf;
|
|
70
|
+
--hl-attr: #94adcf;
|
|
71
|
+
--hl-type: #b295d2;
|
|
72
|
+
--hl-meta: #b499c5;
|
|
73
|
+
--hl-addition: #97b984;
|
|
74
|
+
--hl-deletion: #e06a4a;
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
@media (prefers-color-scheme: dark) {
|
|
77
78
|
:root:not([data-theme="light"]) {
|
|
78
|
-
--bg: #
|
|
79
|
-
--panel: #
|
|
80
|
-
--panel-2: #
|
|
81
|
-
--border: #
|
|
82
|
-
--text: #
|
|
83
|
-
--muted: #
|
|
84
|
-
--faint: #
|
|
85
|
-
--accent: #
|
|
86
|
-
--accent-deep: #
|
|
87
|
-
--accent-dim: rgba(
|
|
88
|
-
--good: #
|
|
89
|
-
--good-dim: rgba(
|
|
90
|
-
--warn: #
|
|
91
|
-
--danger: #
|
|
92
|
-
--shadow: 0 1px 2px rgba(0, 0, 0, 0.
|
|
79
|
+
--bg: #191613;
|
|
80
|
+
--panel: #242019;
|
|
81
|
+
--panel-2: #2e2820;
|
|
82
|
+
--border: #40372a;
|
|
83
|
+
--text: #f2ecdf;
|
|
84
|
+
--muted: #b9ad99;
|
|
85
|
+
--faint: #877c6a;
|
|
86
|
+
--accent: #e08547;
|
|
87
|
+
--accent-deep: #ec9c68;
|
|
88
|
+
--accent-dim: rgba(224, 133, 71, 0.16);
|
|
89
|
+
--good: #97b984;
|
|
90
|
+
--good-dim: rgba(151, 185, 132, 0.16);
|
|
91
|
+
--warn: #dcae57;
|
|
92
|
+
--danger: #e06a4a;
|
|
93
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.35), 0 8px 24px rgba(0, 0, 0, 0.4);
|
|
93
94
|
|
|
94
|
-
--code-bg: #
|
|
95
|
-
--code-text: #
|
|
96
|
-
--hl-keyword: #
|
|
97
|
-
--hl-string: #
|
|
98
|
-
--hl-comment: #
|
|
99
|
-
--hl-number: #
|
|
100
|
-
--hl-title: #
|
|
101
|
-
--hl-attr: #
|
|
102
|
-
--hl-type: #
|
|
103
|
-
--hl-meta: #
|
|
104
|
-
--hl-addition: #
|
|
105
|
-
--hl-deletion: #
|
|
95
|
+
--code-bg: #242019;
|
|
96
|
+
--code-text: #e4dbc9;
|
|
97
|
+
--hl-keyword: #e08547;
|
|
98
|
+
--hl-string: #97b984;
|
|
99
|
+
--hl-comment: #877c6a;
|
|
100
|
+
--hl-number: #dcae57;
|
|
101
|
+
--hl-title: #f2ecdf;
|
|
102
|
+
--hl-attr: #94adcf;
|
|
103
|
+
--hl-type: #b295d2;
|
|
104
|
+
--hl-meta: #b499c5;
|
|
105
|
+
--hl-addition: #97b984;
|
|
106
|
+
--hl-deletion: #e06a4a;
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
109
|
|
|
@@ -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: #191613;
|
|
40
|
+
--panel: #242019;
|
|
41
|
+
--panel-2: #2e2820;
|
|
42
|
+
--border: #40372a;
|
|
43
|
+
--text: #f2ecdf;
|
|
44
|
+
--muted: #b9ad99;
|
|
45
|
+
--faint: #877c6a;
|
|
46
|
+
--accent: #e08547;
|
|
47
|
+
--accent-deep: #ec9c68;
|
|
48
|
+
--accent-dim: rgba(224, 133, 71, 0.16);
|
|
49
|
+
--good: #97b984;
|
|
50
|
+
--good-dim: rgba(151, 185, 132, 0.16);
|
|
51
|
+
--warn: #dcae57;
|
|
52
|
+
--danger: #e06a4a;
|
|
53
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.35), 0 8px 24px rgba(0, 0, 0, 0.4);
|
|
54
|
+
|
|
55
|
+
--code-bg: #242019;
|
|
56
|
+
--code-text: #e4dbc9;
|
|
57
|
+
--hl-keyword: #e08547;
|
|
58
|
+
--hl-string: #97b984;
|
|
59
|
+
--hl-comment: #877c6a;
|
|
60
|
+
--hl-number: #dcae57;
|
|
61
|
+
--hl-title: #f2ecdf;
|
|
62
|
+
--hl-attr: #94adcf;
|
|
63
|
+
--hl-type: #b295d2;
|
|
64
|
+
--hl-meta: #b499c5;
|
|
65
|
+
--hl-addition: #97b984;
|
|
66
|
+
--hl-deletion: #e06a4a;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@media (prefers-color-scheme: dark) {
|
|
70
|
+
:root:not([data-theme="light"]) {
|
|
71
|
+
--bg: #191613;
|
|
72
|
+
--panel: #242019;
|
|
73
|
+
--panel-2: #2e2820;
|
|
74
|
+
--border: #40372a;
|
|
75
|
+
--text: #f2ecdf;
|
|
76
|
+
--muted: #b9ad99;
|
|
77
|
+
--faint: #877c6a;
|
|
78
|
+
--accent: #e08547;
|
|
79
|
+
--accent-deep: #ec9c68;
|
|
80
|
+
--accent-dim: rgba(224, 133, 71, 0.16);
|
|
81
|
+
--good: #97b984;
|
|
82
|
+
--good-dim: rgba(151, 185, 132, 0.16);
|
|
83
|
+
--warn: #dcae57;
|
|
84
|
+
--danger: #e06a4a;
|
|
85
|
+
--shadow: 0 1px 2px rgba(0, 0, 0, 0.35), 0 8px 24px rgba(0, 0, 0, 0.4);
|
|
86
|
+
|
|
87
|
+
--code-bg: #242019;
|
|
88
|
+
--code-text: #e4dbc9;
|
|
89
|
+
--hl-keyword: #e08547;
|
|
90
|
+
--hl-string: #97b984;
|
|
91
|
+
--hl-comment: #877c6a;
|
|
92
|
+
--hl-number: #dcae57;
|
|
93
|
+
--hl-title: #f2ecdf;
|
|
94
|
+
--hl-attr: #94adcf;
|
|
95
|
+
--hl-type: #b295d2;
|
|
96
|
+
--hl-meta: #b499c5;
|
|
97
|
+
--hl-addition: #97b984;
|
|
98
|
+
--hl-deletion: #e06a4a;
|
|
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
|
+
}
|