@telepath-computer/television 0.1.205 → 0.1.208
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/dist/THIRD-PARTY-NOTICES.txt +46 -12
- package/dist/canonical/v1/components.js +1 -258
- package/dist/canonical/v1/styles.css +372 -312
- package/dist/cli.cjs +11311 -10219
- package/dist/onboarding/README.md +19 -14
- package/dist/onboarding/business-ops/about.html +4 -8
- package/dist/onboarding/business-ops/retention-vs-releases.html +0 -9
- package/dist/onboarding/business-ops/revenue-vs-goals.html +0 -11
- package/dist/onboarding/onboarding-channels.json +114 -0
- package/dist/onboarding/productivity/about.html +4 -8
- package/dist/onboarding/productivity/company-todos/index.html +0 -3
- package/dist/onboarding/productivity/company-todos/task.css +3 -3
- package/dist/onboarding/productivity/company-todos/task.js +1 -4
- package/dist/onboarding/productivity/meeting-prep.html +0 -7
- package/dist/onboarding/productivity/priorities-today.html +0 -7
- package/dist/onboarding/productivity/todays-calendar/calendar.js +327 -643
- package/dist/onboarding/productivity/todays-calendar/index.html +0 -4
- package/dist/onboarding/research/about.html +5 -9
- package/dist/onboarding/research/open-model-research.html +0 -9
- package/dist/onboarding/research/todays-news.html +3 -10
- package/dist/onboarding/tv-guide/welcome/index.html +5 -5
- package/dist/skills/television/SKILL.md +180 -136
- package/dist/skills/tv-calendar/calendar.js +327 -643
- package/dist/skills/tv-tasks/SKILL.md +10 -9
- package/dist/skills/tv-tasks/task.css +5 -6
- package/dist/skills/tv-tasks/task.js +2 -5
- package/dist/skills/tv-theme/SKILL.md +293 -193
- package/dist/views/artifact-missing/index.html +125 -60
- package/dist/views/markdown/THIRD-PARTY-NOTICES.txt +7 -7
- package/dist/views/markdown/index.html +23 -46
- package/dist/web/THIRD-PARTY-NOTICES.txt +4 -4
- package/dist/web/assets/artifact-bridge-BXDhGuL-.js +1 -0
- package/dist/web/assets/{artifactMissing-DY3nzD0p.js → artifactMissing-9rcTXhkH.js} +1 -1
- package/dist/web/assets/main-Blg8fuaV.css +1 -0
- package/dist/web/assets/main-C15ixkrL.js +593 -0
- package/dist/web/assets/{urlUnsupported-B2K6eB7H.js → urlUnsupported-kgq7Zh2V.js} +1 -1
- package/dist/web/index.html +4 -3
- package/dist/web/views/artifact-missing/index.html +125 -60
- package/dist/web/views/url-unsupported/index.html +127 -74
- package/package.json +4 -1
- package/dist/onboarding/onboarding-screens.json +0 -167
- package/dist/skills/tv-calendar/THIRD-PARTY-NOTICES.txt +0 -36
- package/dist/web/assets/artifact-bridge-BhiFDvPj.js +0 -1
- package/dist/web/assets/main-5017mprd.css +0 -1
- package/dist/web/assets/main-C6W2LLUt.js +0 -865
- /package/dist/canonical/v1/fonts/{Hind-Variable.woff2 → Hind-Variable.933e9900.woff2} +0 -0
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Canonical artifact stylesheet — the curated subset of the design system
|
|
3
|
-
* artifacts inherit at /canonical/v1/styles.css.
|
|
4
|
-
*
|
|
5
|
-
* Includes the design-system primitives artifacts should inherit by default:
|
|
6
|
-
* reset, fonts, tokens, theme defaults, and conservative document typography for plain
|
|
7
|
-
* semantic HTML. Artifact-specific structure and rhythm should still be
|
|
8
|
-
* authored explicitly in the artifact HTML so agents can see and control the
|
|
9
|
-
* result, but basic prose should not fall back to browser defaults.
|
|
10
|
-
*
|
|
11
|
-
* Source of truth for what's in v1. Edits here change what artifacts inherit.
|
|
12
|
-
*/
|
|
13
1
|
*,
|
|
14
2
|
*::before,
|
|
15
3
|
*::after {
|
|
@@ -22,6 +10,14 @@ body {
|
|
|
22
10
|
padding: 0;
|
|
23
11
|
}
|
|
24
12
|
|
|
13
|
+
/* The document's base typography, stated once at the root: surfaces inherit
|
|
14
|
+
rather than restate, and the form controls below inherit it in turn. */
|
|
15
|
+
body {
|
|
16
|
+
font-family: var(--font-sans);
|
|
17
|
+
font-size: var(--text-md);
|
|
18
|
+
color: var(--color-text);
|
|
19
|
+
}
|
|
20
|
+
|
|
25
21
|
h1,
|
|
26
22
|
h2,
|
|
27
23
|
h3,
|
|
@@ -39,109 +35,41 @@ hr {
|
|
|
39
35
|
|
|
40
36
|
button,
|
|
41
37
|
input,
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
select,
|
|
39
|
+
textarea {
|
|
44
40
|
font: inherit;
|
|
45
41
|
color: inherit;
|
|
46
42
|
}
|
|
47
43
|
|
|
44
|
+
/* Hind — the committed variable cut, weights 300–700. */
|
|
48
45
|
@font-face {
|
|
49
46
|
font-family: "Hind";
|
|
50
|
-
src: url(/canonical/v1/fonts/Hind-Variable.woff2) format("woff2-variations");
|
|
47
|
+
src: url(/canonical/v1/fonts/Hind-Variable.933e9900.woff2) format("woff2-variations");
|
|
51
48
|
font-weight: 300 700;
|
|
52
|
-
font-
|
|
53
|
-
font-display: swap;
|
|
49
|
+
font-display: block;
|
|
54
50
|
}
|
|
55
51
|
|
|
56
|
-
|
|
57
52
|
:root {
|
|
58
|
-
/*
|
|
59
|
-
--
|
|
60
|
-
|
|
61
|
-
sans-serif;
|
|
62
|
-
--font-brand: var(--font-sans);
|
|
63
|
-
--font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace;
|
|
64
|
-
--font-weight-body: 500;
|
|
65
|
-
|
|
66
|
-
/* Type scale */
|
|
67
|
-
--text-base: 13.5px;
|
|
68
|
-
--text-scale: 1.125;
|
|
69
|
-
--text-sm: round(calc(var(--text-base) / var(--text-scale)), 1px);
|
|
70
|
-
--text-lg: round(calc(var(--text-base) * var(--text-scale)), 1px);
|
|
71
|
-
--text-xl: round(calc(var(--text-lg) * var(--text-scale)), 1px);
|
|
72
|
-
--leading-base: 1.5;
|
|
73
|
-
|
|
74
|
-
/* Control height — single source of truth for buttons, segmented-controls,
|
|
75
|
-
inputs and any future control whose shape includes "horizontal pill".
|
|
76
|
-
Suffix names a size (md = default); add `--control-height-sm`,
|
|
77
|
-
`--control-height-lg` if/when those sizes appear. Setting the height
|
|
78
|
-
directly (vs. computing from padding + line-height) is what lets a
|
|
79
|
-
mixed row of text + icon-only chrome line up exactly. */
|
|
80
|
-
/* xs is for affordances that live *inside* another control (close on a
|
|
81
|
-
tab, dismiss on a chip, clear-input). Smaller than the floor a row of
|
|
82
|
-
siblings would line up with. */
|
|
83
|
-
--control-height-xs: 18px;
|
|
84
|
-
--control-height-sm: 24px;
|
|
85
|
-
--control-height-md: 28px;
|
|
86
|
-
--control-height-lg: 32px;
|
|
87
|
-
|
|
88
|
-
/* Spacing */
|
|
89
|
-
--space-2: 2px;
|
|
90
|
-
--space-4: 4px;
|
|
91
|
-
--space-6: 6px;
|
|
92
|
-
--space-8: 8px;
|
|
93
|
-
--space-10: 10px;
|
|
94
|
-
--space-12: 12px;
|
|
95
|
-
--space-16: 16px;
|
|
96
|
-
--space-20: 20px;
|
|
97
|
-
--space-24: 24px;
|
|
98
|
-
--space-32: 32px;
|
|
99
|
-
--space-48: 48px;
|
|
100
|
-
--space-64: 64px;
|
|
101
|
-
|
|
102
|
-
/* Radius — pixel-named tokens. Token name = the rounded-rect value
|
|
103
|
-
(what you'd intuitively dial in). Squircle-supporting browsers bump
|
|
104
|
-
each step ~25% to keep corner roundness perceptually equivalent
|
|
105
|
-
(squircles look "tighter" than rounded rects at the same numeric
|
|
106
|
-
radius). The `corner-shape: squircle` flip lives in elements.css —
|
|
107
|
-
applied via `*` so any element with a radius gets squircled corners
|
|
108
|
-
automatically. The `--radius-4` and `--radius-full` ends don't bump:
|
|
109
|
-
too small to perceive a difference, too large for it to matter. */
|
|
110
|
-
--radius-4: 4px;
|
|
111
|
-
--radius-8: 8px;
|
|
112
|
-
--radius-12: 12px;
|
|
113
|
-
--radius-16: 16px;
|
|
114
|
-
--radius-24: 24px;
|
|
115
|
-
--radius-full: 9999px;
|
|
116
|
-
|
|
117
|
-
/* Z-index ladder — semantic tiers for stacking. Components set
|
|
118
|
-
`z-index: var(--layer-*)` directly when they need a specific tier
|
|
119
|
-
(the `level` attribute in materials.css only controls shadow). */
|
|
120
|
-
--layer-chrome: 100;
|
|
121
|
-
--layer-panel: 500;
|
|
122
|
-
--layer-overlay: 2000;
|
|
123
|
-
|
|
124
|
-
/* Shadows */
|
|
125
|
-
--shadow-hairline: 0 0 0 0.5px var(--color-border);
|
|
126
|
-
/* Soft 2-layer drop shadow shared by buttons, dropdown triggers, and
|
|
127
|
-
other controls that aren't surfaces. Surface elevation lives on
|
|
128
|
-
[level=...] in materials.css. */
|
|
129
|
-
--shadow-control:
|
|
130
|
-
0 1px 1px rgb(0 0 0 / 0.04),
|
|
131
|
-
0 2px 6px rgb(0 0 0 / 0.06);
|
|
53
|
+
/* Colors */
|
|
54
|
+
--black: #000000;
|
|
55
|
+
--white: #ffffff;
|
|
132
56
|
|
|
133
|
-
/*
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
--
|
|
57
|
+
/* Neutral */
|
|
58
|
+
--neutral-50: oklch(98.5% 0 none);
|
|
59
|
+
--neutral-100: oklch(97% 0 none);
|
|
60
|
+
--neutral-200: oklch(92.2% 0 none);
|
|
61
|
+
--neutral-300: oklch(87% 0 none);
|
|
62
|
+
--neutral-400: oklch(70.8% 0 none);
|
|
63
|
+
--neutral-500: oklch(55.6% 0 none);
|
|
64
|
+
--neutral-600: oklch(43.9% 0 none);
|
|
65
|
+
--neutral-700: oklch(37.1% 0 none);
|
|
66
|
+
--neutral-800: oklch(26.9% 0 none);
|
|
67
|
+
--neutral-900: oklch(20.5% 0 none);
|
|
68
|
+
--neutral-950: oklch(14.5% 0 none);
|
|
69
|
+
|
|
70
|
+
/* Alpha */
|
|
71
|
+
--alpha-50: 4%;
|
|
140
72
|
--alpha-100: 8%;
|
|
141
|
-
/* Half-step between 100 and 200 — for surfaces that need a touch
|
|
142
|
-
more presence than tint-100 without the heft of tint-200 (e.g.
|
|
143
|
-
a footer button attached to a tint-100 panel). */
|
|
144
|
-
--alpha-150: 11%;
|
|
145
73
|
--alpha-200: 15%;
|
|
146
74
|
--alpha-300: 22%;
|
|
147
75
|
--alpha-400: 30%;
|
|
@@ -152,62 +80,58 @@ select {
|
|
|
152
80
|
--alpha-900: 90%;
|
|
153
81
|
--alpha-950: 95%;
|
|
154
82
|
|
|
155
|
-
/*
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
--
|
|
160
|
-
--
|
|
161
|
-
--
|
|
162
|
-
--
|
|
163
|
-
--
|
|
164
|
-
--
|
|
165
|
-
--
|
|
166
|
-
--tint-600: color-mix(in srgb, currentColor var(--alpha-600), transparent);
|
|
167
|
-
--tint-700: color-mix(in srgb, currentColor var(--alpha-700), transparent);
|
|
168
|
-
--tint-800: color-mix(in srgb, currentColor var(--alpha-800), transparent);
|
|
169
|
-
--tint-900: color-mix(in srgb, currentColor var(--alpha-900), transparent);
|
|
170
|
-
--tint-950: color-mix(in srgb, currentColor var(--alpha-950), transparent);
|
|
171
|
-
|
|
172
|
-
/* Semantic overlay tokens — chromeless overlay hover/active fills
|
|
173
|
-
(ghost button, dropdown item, screen pill). Defaults to a black-base
|
|
174
|
-
mix for light surfaces; `[tone="dark"]` in materials.css repoints
|
|
175
|
-
these to white-base mixes at one step deeper (8% black ≈ 15% white
|
|
176
|
-
in perceived intensity). */
|
|
177
|
-
--color-overlay-hover: color-mix(in srgb, var(--black) var(--alpha-100), transparent);
|
|
178
|
-
--color-overlay-active: color-mix(in srgb, var(--black) var(--alpha-300), transparent);
|
|
179
|
-
|
|
180
|
-
/* Frosted-glass backdrop filter, shared across translucent surfaces. */
|
|
181
|
-
--backdrop-blur-glass: blur(20px) saturate(1.4);
|
|
83
|
+
/* Blue */
|
|
84
|
+
--blue-50: oklch(0.97 0.014 254.604);
|
|
85
|
+
--blue-100: oklch(0.932 0.032 255.585);
|
|
86
|
+
--blue-200: oklch(0.882 0.059 254.128);
|
|
87
|
+
--blue-300: oklch(0.809 0.105 251.813);
|
|
88
|
+
--blue-400: oklch(0.707 0.165 254.624);
|
|
89
|
+
--blue-500: oklch(0.623 0.214 259.815);
|
|
90
|
+
--blue-600: oklch(0.546 0.245 262.881);
|
|
91
|
+
--blue-700: oklch(0.488 0.243 264.376);
|
|
92
|
+
--blue-800: oklch(0.424 0.199 265.638);
|
|
93
|
+
--blue-900: oklch(0.379 0.146 265.522);
|
|
182
94
|
|
|
183
|
-
/*
|
|
184
|
-
|
|
185
|
-
--
|
|
95
|
+
/* Red — the destructive and error hue: a press that destroys, a rejected
|
|
96
|
+
token, a failure line. Tailwind's red, like the blue. */
|
|
97
|
+
--red-50: oklch(0.971 0.013 17.38);
|
|
98
|
+
--red-100: oklch(0.936 0.032 17.717);
|
|
99
|
+
--red-200: oklch(0.885 0.062 18.334);
|
|
100
|
+
--red-300: oklch(0.808 0.114 19.571);
|
|
101
|
+
--red-400: oklch(0.704 0.191 22.216);
|
|
102
|
+
--red-500: oklch(0.637 0.237 25.331);
|
|
103
|
+
--red-600: oklch(0.577 0.245 27.325);
|
|
104
|
+
--red-700: oklch(0.505 0.213 27.518);
|
|
105
|
+
--red-800: oklch(0.444 0.177 26.899);
|
|
106
|
+
--red-900: oklch(0.396 0.141 25.723);
|
|
107
|
+
|
|
108
|
+
/* Yellow — the attention color: worn by things that need noticing exactly
|
|
109
|
+
while they apply (the update bell), never for emphasis, which is the key
|
|
110
|
+
color's job. */
|
|
111
|
+
--yellow-50: oklch(0.987 0.026 102.212);
|
|
112
|
+
--yellow-100: oklch(0.973 0.071 103.193);
|
|
113
|
+
--yellow-200: oklch(0.945 0.129 101.54);
|
|
114
|
+
--yellow-300: oklch(0.905 0.182 98.111);
|
|
115
|
+
--yellow-400: oklch(0.852 0.199 91.936);
|
|
116
|
+
--yellow-500: oklch(0.795 0.184 86.047);
|
|
117
|
+
--yellow-600: oklch(0.681 0.162 75.834);
|
|
118
|
+
--yellow-700: oklch(0.554 0.135 66.442);
|
|
119
|
+
--yellow-800: oklch(0.476 0.114 61.907);
|
|
120
|
+
--yellow-900: oklch(0.421 0.095 57.708);
|
|
121
|
+
--yellow-950: oklch(0.286 0.066 53.813);
|
|
186
122
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
--
|
|
190
|
-
--
|
|
191
|
-
--
|
|
192
|
-
--
|
|
193
|
-
--
|
|
194
|
-
--
|
|
195
|
-
--
|
|
196
|
-
--
|
|
197
|
-
--
|
|
198
|
-
--
|
|
199
|
-
|
|
200
|
-
--red-50: oklch(0.969 0.015 12.422);
|
|
201
|
-
--red-100: oklch(0.941 0.03 12.58);
|
|
202
|
-
--red-200: oklch(0.892 0.058 10.001);
|
|
203
|
-
--red-300: oklch(0.81 0.117 11.638);
|
|
204
|
-
--red-400: oklch(0.712 0.194 13.428);
|
|
205
|
-
--red-500: oklch(0.645 0.246 16.439);
|
|
206
|
-
--red-600: oklch(0.586 0.253 17.585);
|
|
207
|
-
--red-700: oklch(0.514 0.222 16.935);
|
|
208
|
-
--red-800: oklch(0.455 0.188 13.697);
|
|
209
|
-
--red-900: oklch(0.41 0.159 10.272);
|
|
210
|
-
--red-950: oklch(0.271 0.105 12.094);
|
|
123
|
+
/* Green, orange, purple — accent ramps. Tailwind's values, like the
|
|
124
|
+
blue. */
|
|
125
|
+
--green-50: oklch(0.982 0.018 155.826);
|
|
126
|
+
--green-100: oklch(0.962 0.044 156.743);
|
|
127
|
+
--green-200: oklch(0.925 0.084 155.995);
|
|
128
|
+
--green-300: oklch(0.871 0.15 154.449);
|
|
129
|
+
--green-400: oklch(0.792 0.209 151.711);
|
|
130
|
+
--green-500: oklch(0.723 0.219 149.579);
|
|
131
|
+
--green-600: oklch(0.627 0.194 149.214);
|
|
132
|
+
--green-700: oklch(0.527 0.154 150.069);
|
|
133
|
+
--green-800: oklch(0.448 0.119 151.328);
|
|
134
|
+
--green-900: oklch(0.393 0.095 152.535);
|
|
211
135
|
|
|
212
136
|
--orange-50: oklch(0.98 0.016 73.684);
|
|
213
137
|
--orange-100: oklch(0.954 0.038 75.164);
|
|
@@ -219,238 +143,374 @@ select {
|
|
|
219
143
|
--orange-700: oklch(0.553 0.195 38.402);
|
|
220
144
|
--orange-800: oklch(0.47 0.157 37.304);
|
|
221
145
|
--orange-900: oklch(0.408 0.123 38.172);
|
|
222
|
-
--orange-950: oklch(0.266 0.079 36.259);
|
|
223
|
-
|
|
224
|
-
--yellow-50: oklch(0.987 0.026 102.212);
|
|
225
|
-
--yellow-100: oklch(0.973 0.071 103.193);
|
|
226
|
-
--yellow-200: oklch(0.945 0.129 101.54);
|
|
227
|
-
--yellow-300: oklch(0.905 0.182 98.111);
|
|
228
|
-
--yellow-400: oklch(0.852 0.199 91.936);
|
|
229
|
-
--yellow-500: oklch(0.795 0.184 86.047);
|
|
230
|
-
--yellow-600: oklch(0.681 0.162 75.834);
|
|
231
|
-
--yellow-700: oklch(0.554 0.135 66.442);
|
|
232
|
-
--yellow-800: oklch(0.476 0.114 61.907);
|
|
233
|
-
--yellow-900: oklch(0.421 0.095 57.708);
|
|
234
|
-
--yellow-950: oklch(0.286 0.066 53.813);
|
|
235
146
|
|
|
236
|
-
--
|
|
237
|
-
--
|
|
238
|
-
--
|
|
239
|
-
--
|
|
240
|
-
--
|
|
241
|
-
--
|
|
242
|
-
--
|
|
243
|
-
--
|
|
244
|
-
--
|
|
245
|
-
--
|
|
246
|
-
|
|
147
|
+
--purple-50: oklch(0.977 0.014 308.299);
|
|
148
|
+
--purple-100: oklch(0.946 0.033 307.174);
|
|
149
|
+
--purple-200: oklch(0.902 0.063 306.703);
|
|
150
|
+
--purple-300: oklch(0.827 0.119 306.383);
|
|
151
|
+
--purple-400: oklch(0.714 0.203 305.504);
|
|
152
|
+
--purple-500: oklch(0.627 0.265 303.9);
|
|
153
|
+
--purple-600: oklch(0.558 0.288 302.321);
|
|
154
|
+
--purple-700: oklch(0.496 0.265 301.924);
|
|
155
|
+
--purple-800: oklch(0.438 0.218 303.724);
|
|
156
|
+
--purple-900: oklch(0.381 0.176 304.987);
|
|
157
|
+
|
|
158
|
+
/* Tint */
|
|
159
|
+
--tint-50: color-mix(in srgb, currentColor var(--alpha-50), transparent);
|
|
160
|
+
--tint-100: color-mix(in srgb, currentColor var(--alpha-100), transparent);
|
|
161
|
+
--tint-200: color-mix(in srgb, currentColor var(--alpha-200), transparent);
|
|
162
|
+
--tint-300: color-mix(in srgb, currentColor var(--alpha-300), transparent);
|
|
163
|
+
--tint-400: color-mix(in srgb, currentColor var(--alpha-400), transparent);
|
|
164
|
+
--tint-500: color-mix(in srgb, currentColor var(--alpha-500), transparent);
|
|
165
|
+
--tint-600: color-mix(in srgb, currentColor var(--alpha-600), transparent);
|
|
166
|
+
--tint-700: color-mix(in srgb, currentColor var(--alpha-700), transparent);
|
|
167
|
+
--tint-800: color-mix(in srgb, currentColor var(--alpha-800), transparent);
|
|
168
|
+
--tint-900: color-mix(in srgb, currentColor var(--alpha-900), transparent);
|
|
169
|
+
--tint-950: color-mix(in srgb, currentColor var(--alpha-950), transparent);
|
|
247
170
|
|
|
248
|
-
|
|
249
|
-
--
|
|
250
|
-
--
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
--
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
--
|
|
171
|
+
/* Color roles — what a color is for, resolved onto the ramps above. */
|
|
172
|
+
--color-text: var(--neutral-900);
|
|
173
|
+
--color-text-muted: var(--neutral-500);
|
|
174
|
+
/* The interface's key color — what carries emphasis and marks the thing
|
|
175
|
+
you are on. Selection reads as this rather than as a heavier grey, so
|
|
176
|
+
"hovered" and "selected" differ in hue, not just in weight. */
|
|
177
|
+
--color-primary: var(--blue-600);
|
|
178
|
+
/* A fill and the text that survives on it are a pair. Naming the foreground
|
|
179
|
+
keeps the contrast a stated decision rather than something each use site
|
|
180
|
+
guesses at — white on blue-500 measures 3.76:1 and fails AA at body size. */
|
|
181
|
+
--color-on-primary: var(--white);
|
|
182
|
+
--color-selected: var(--color-primary);
|
|
183
|
+
/* What the app's own content sits on, behind the surfaces it holds. Darker
|
|
184
|
+
than those surfaces rather than lighter, so a white one reads as lifted
|
|
185
|
+
off it — a gap of background is how the app shows where its own chrome
|
|
186
|
+
ends and something it is holding begins. */
|
|
187
|
+
--color-background: var(--neutral-200);
|
|
188
|
+
/* The ground of a document or artifact the app holds. Surface vocabulary
|
|
189
|
+
belongs to that held content; the chrome's own ground stays
|
|
190
|
+
--color-background. */
|
|
191
|
+
--color-surface: var(--white);
|
|
192
|
+
/* A quiet region within a held surface: distinct without reading as a
|
|
193
|
+
second layer of app chrome. */
|
|
194
|
+
--color-surface-muted: var(--neutral-100);
|
|
195
|
+
/* The ordinary seam between surface regions. Ten percent is deliberate:
|
|
196
|
+
the alpha ramp's neighbouring steps are too faint and too strong. */
|
|
197
|
+
--color-border: rgb(0 0 0 / 10%);
|
|
198
|
+
/* A repeated or subordinate seam should organize without boxing things in;
|
|
199
|
+
six percent stays below the ordinary border without disappearing. */
|
|
200
|
+
--color-border-muted: rgb(0 0 0 / 6%);
|
|
201
|
+
/* A link follows its surrounding text unless a theme gives it an accent. */
|
|
202
|
+
--color-link: inherit;
|
|
203
|
+
/* The destructive and error role. */
|
|
204
|
+
--color-danger: var(--red-600);
|
|
205
|
+
/* The affirmative and completed-state role. */
|
|
206
|
+
--color-success: var(--green-600);
|
|
207
|
+
/* The caution and warning role. */
|
|
208
|
+
--color-warning: var(--orange-600);
|
|
259
209
|
|
|
260
|
-
|
|
261
|
-
--purple-100: oklch(0.943 0.029 294.588);
|
|
262
|
-
--purple-200: oklch(0.894 0.057 293.283);
|
|
263
|
-
--purple-300: oklch(0.811 0.111 293.571);
|
|
264
|
-
--purple-400: oklch(0.702 0.183 293.541);
|
|
265
|
-
--purple-500: oklch(0.606 0.25 292.717);
|
|
266
|
-
--purple-600: oklch(0.541 0.281 293.009);
|
|
267
|
-
--purple-700: oklch(0.491 0.27 292.581);
|
|
268
|
-
--purple-800: oklch(0.432 0.232 292.759);
|
|
269
|
-
--purple-900: oklch(0.38 0.189 293.745);
|
|
270
|
-
--purple-950: oklch(0.283 0.141 291.089);
|
|
210
|
+
color-scheme: light;
|
|
271
211
|
}
|
|
272
212
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
:
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
213
|
+
:root {
|
|
214
|
+
/* Type */
|
|
215
|
+
/* The base the steps below compute from. */
|
|
216
|
+
--text-base: 14px;
|
|
217
|
+
--text-sm: round(calc(var(--text-md) / var(--text-scale)), 1px);
|
|
218
|
+
--text-md: var(--text-base);
|
|
219
|
+
--text-lg: round(calc(var(--text-md) * var(--text-scale)), 1px);
|
|
220
|
+
--text-xl: round(calc(var(--text-lg) * var(--text-scale)), 1px);
|
|
221
|
+
--text-2xl: round(calc(var(--text-xl) * var(--text-scale)), 1px);
|
|
222
|
+
--text-3xl: 24px;
|
|
223
|
+
--text-4xl: 30px;
|
|
224
|
+
--text-scale: 1.125;
|
|
225
|
+
--leading-base: 1.5;
|
|
226
|
+
|
|
227
|
+
/* Fonts */
|
|
228
|
+
--font-sans: "Hind", -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
|
|
229
|
+
--font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, monospace;
|
|
230
|
+
--font-weight-normal: 400;
|
|
231
|
+
--font-weight-medium: 500;
|
|
232
|
+
--font-weight-body: var(--font-weight-medium);
|
|
233
|
+
--font-weight-semibold: 600;
|
|
284
234
|
}
|
|
285
235
|
|
|
286
|
-
|
|
236
|
+
:root {
|
|
237
|
+
/* Spacing */
|
|
238
|
+
--space-2: 2px;
|
|
239
|
+
--space-4: 4px;
|
|
240
|
+
--space-6: 6px;
|
|
241
|
+
--space-8: 8px;
|
|
242
|
+
--space-10: 10px;
|
|
243
|
+
--space-12: 12px;
|
|
244
|
+
--space-16: 16px;
|
|
245
|
+
--space-20: 20px;
|
|
246
|
+
--space-24: 24px;
|
|
247
|
+
--space-32: 32px;
|
|
248
|
+
--space-48: 48px;
|
|
249
|
+
--space-64: 64px;
|
|
287
250
|
|
|
288
|
-
|
|
289
|
-
--
|
|
290
|
-
|
|
251
|
+
/* Radius */
|
|
252
|
+
--radius-4: 4px;
|
|
253
|
+
--radius-6: 6px;
|
|
254
|
+
--radius-8: 8px;
|
|
255
|
+
--radius-12: 12px;
|
|
256
|
+
--radius-16: 16px;
|
|
257
|
+
--radius-24: 24px;
|
|
258
|
+
--radius-full: 9999px; /* pill — fully rounded ends at any element size */
|
|
291
259
|
}
|
|
292
260
|
|
|
261
|
+
:root {
|
|
262
|
+
/* The elevation a floating panel lifts off the page with: a broad soft
|
|
263
|
+
throw and a tight contact shadow. A role, not a ramp — there is one
|
|
264
|
+
elevation in the system; a scale grows if more appear. */
|
|
265
|
+
--shadow-panel:
|
|
266
|
+
0 8px 24px rgba(0, 0, 0, 0.12),
|
|
267
|
+
0 2px 8px rgba(0, 0, 0, 0.06);
|
|
268
|
+
}
|
|
293
269
|
|
|
294
|
-
|
|
270
|
+
/* Canonical v1 compatibility ([[arch/canonical.md#compatibility]]): retired
|
|
271
|
+
names only, preserved at shipped values or same-meaning successors. */
|
|
295
272
|
:root {
|
|
296
273
|
--color-bg: var(--neutral-50);
|
|
297
|
-
--color-bg-muted: var(--
|
|
298
|
-
--color-surface: var(--white);
|
|
299
|
-
--color-surface-muted: var(--neutral-100);
|
|
274
|
+
--color-bg-muted: var(--color-surface-muted);
|
|
300
275
|
--color-interactive: var(--neutral-200);
|
|
301
276
|
--color-interactive-hover: var(--neutral-300);
|
|
302
|
-
|
|
303
|
-
/* Borders use alpha so the same hairline reads on light, dark, or
|
|
304
|
-
image bgs without needing a tone-aware swap. */
|
|
305
|
-
--color-border: rgba(0, 0, 0, 0.10);
|
|
306
|
-
--color-border-muted: rgba(0, 0, 0, 0.06);
|
|
307
|
-
|
|
308
|
-
--color-text: var(--neutral-900);
|
|
309
|
-
--color-text-muted: var(--neutral-500);
|
|
310
|
-
--color-link: inherit;
|
|
311
|
-
--color-focus-ring: var(--neutral-500);
|
|
277
|
+
--color-focus-ring: var(--color-primary);
|
|
312
278
|
--color-overlay-backdrop: rgb(0 0 0 / 0.5);
|
|
279
|
+
--color-overlay-hover: color-mix(in srgb, var(--black) var(--alpha-100), transparent);
|
|
280
|
+
--color-overlay-active: color-mix(in srgb, var(--black) var(--alpha-300), transparent);
|
|
313
281
|
--color-highlight: rgb(255 255 255 / 0.5);
|
|
314
|
-
--color-primary: var(--blue-500);
|
|
315
|
-
--color-danger: var(--red-600);
|
|
316
282
|
|
|
317
|
-
|
|
318
|
-
}
|
|
283
|
+
--font-brand: var(--font-sans);
|
|
319
284
|
|
|
285
|
+
--shadow-hairline: 0 0 0 0.5px var(--color-border);
|
|
286
|
+
--shadow-control:
|
|
287
|
+
0 1px 1px rgb(0 0 0 / 0.04),
|
|
288
|
+
0 2px 6px rgb(0 0 0 / 0.06);
|
|
320
289
|
|
|
290
|
+
--control-height-xs: 18px;
|
|
291
|
+
--control-height-sm: 24px;
|
|
292
|
+
--control-height-md: 28px;
|
|
293
|
+
--control-height-lg: 32px;
|
|
321
294
|
|
|
295
|
+
--layer-chrome: 100;
|
|
296
|
+
--layer-panel: 500;
|
|
297
|
+
--layer-overlay: 2000;
|
|
298
|
+
|
|
299
|
+
--backdrop-blur-glass: blur(20px) saturate(1.4);
|
|
300
|
+
|
|
301
|
+
--neutral-350: oklch(0.79 0 0);
|
|
302
|
+
--alpha-150: 11%;
|
|
303
|
+
--tint-150: color-mix(in srgb, currentColor var(--alpha-150), transparent);
|
|
304
|
+
--blue-950: oklch(0.282 0.091 267.935);
|
|
305
|
+
--orange-950: oklch(0.266 0.079 36.259);
|
|
306
|
+
--red-950: oklch(0.271 0.105 12.094);
|
|
307
|
+
--green-950: oklch(0.262 0.051 172.552);
|
|
308
|
+
--purple-950: oklch(0.283 0.141 291.089);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* The prose treatment ([[ui/foundation/index.md]], Prose): document
|
|
312
|
+
typography for plain semantic HTML, written for a document that is the
|
|
313
|
+
sheet's own — an artifact's page. Selectors are bare elements at the
|
|
314
|
+
reset's own specificity, loading after it; a document's own styling,
|
|
315
|
+
arriving later still, outranks both. */
|
|
316
|
+
|
|
317
|
+
/* The document's base, set at the root so the scale's steps follow. */
|
|
318
|
+
:root {
|
|
319
|
+
--text-base: 14.5px;
|
|
320
|
+
}
|
|
322
321
|
|
|
323
322
|
body {
|
|
324
|
-
|
|
325
|
-
font-size:
|
|
323
|
+
margin: 0;
|
|
324
|
+
font-size: var(--text-md);
|
|
326
325
|
font-weight: var(--font-weight-body);
|
|
327
326
|
line-height: var(--leading-base);
|
|
328
|
-
|
|
329
|
-
color: var(--color-text);
|
|
330
|
-
/* The artifact page is the card surface — Television's artifact-view frames
|
|
331
|
-
the whole document as a card, so the default page background is the
|
|
332
|
-
surface color. A muted backdrop (--color-bg) is something an artifact
|
|
333
|
-
opts into, not the default. */
|
|
327
|
+
/* The reset supplies the paired text colour. */
|
|
334
328
|
background: var(--color-surface);
|
|
335
329
|
-webkit-font-smoothing: antialiased;
|
|
336
|
-
-moz-osx-font-smoothing: grayscale;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
a {
|
|
340
|
-
color: var(--color-link);
|
|
341
|
-
text-underline-offset: 0.15em;
|
|
342
|
-
text-decoration-thickness: 0.08em;
|
|
343
330
|
}
|
|
344
331
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
h5,
|
|
350
|
-
h6 {
|
|
351
|
-
font-weight: 600;
|
|
332
|
+
/* The heading scale. */
|
|
333
|
+
h1 {
|
|
334
|
+
font-size: var(--text-3xl);
|
|
335
|
+
font-weight: var(--font-weight-semibold);
|
|
352
336
|
line-height: 1.25;
|
|
353
|
-
|
|
337
|
+
margin: 0 0 var(--space-12);
|
|
354
338
|
}
|
|
355
339
|
|
|
356
|
-
|
|
357
|
-
font-size:
|
|
340
|
+
h2 {
|
|
341
|
+
font-size: var(--text-xl);
|
|
342
|
+
font-weight: var(--font-weight-semibold);
|
|
343
|
+
line-height: 1.3;
|
|
344
|
+
margin: var(--space-24) 0 var(--space-8);
|
|
358
345
|
}
|
|
359
346
|
|
|
360
|
-
|
|
361
|
-
font-size:
|
|
347
|
+
h3, h4, h5, h6 {
|
|
348
|
+
font-size: var(--text-lg);
|
|
349
|
+
font-weight: var(--font-weight-semibold);
|
|
350
|
+
margin: var(--space-16) 0 var(--space-4);
|
|
362
351
|
}
|
|
363
352
|
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
h6 {
|
|
368
|
-
font-size: 1em;
|
|
353
|
+
/* Block rhythm. */
|
|
354
|
+
p, ul, ol, blockquote, pre, hr, table, figure {
|
|
355
|
+
margin: 0 0 var(--space-12);
|
|
369
356
|
}
|
|
370
357
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
ol,
|
|
374
|
-
blockquote,
|
|
375
|
-
pre,
|
|
376
|
-
hr,
|
|
377
|
-
table {
|
|
378
|
-
margin: var(--space-12) 0;
|
|
358
|
+
body > :last-child {
|
|
359
|
+
margin-bottom: 0;
|
|
379
360
|
}
|
|
380
361
|
|
|
381
|
-
|
|
382
|
-
|
|
362
|
+
a {
|
|
363
|
+
color: var(--color-link);
|
|
364
|
+
text-decoration: underline;
|
|
365
|
+
text-underline-offset: 2px;
|
|
383
366
|
}
|
|
384
367
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
subtitle: slightly smaller than body prose, at body weight, hugging its
|
|
388
|
-
heading — proximity and the heading above do the differentiating. */
|
|
389
|
-
header p {
|
|
390
|
-
font-size: var(--text-base);
|
|
391
|
-
font-weight: var(--font-weight-body);
|
|
368
|
+
ul, ol {
|
|
369
|
+
padding-left: var(--space-24);
|
|
392
370
|
}
|
|
393
|
-
|
|
394
|
-
|
|
371
|
+
|
|
372
|
+
li + li {
|
|
373
|
+
margin-top: var(--space-4);
|
|
395
374
|
}
|
|
396
375
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
padding-left: var(--space-
|
|
376
|
+
blockquote {
|
|
377
|
+
border-left: 2px solid var(--color-border);
|
|
378
|
+
padding-left: var(--space-12);
|
|
379
|
+
color: var(--color-text-muted);
|
|
400
380
|
}
|
|
401
381
|
|
|
402
|
-
code {
|
|
382
|
+
code, kbd, samp {
|
|
403
383
|
font-family: var(--font-mono);
|
|
404
|
-
font-size:
|
|
405
|
-
background: var(--color-
|
|
406
|
-
padding: var(--space-2) var(--space-4);
|
|
384
|
+
font-size: var(--text-sm);
|
|
385
|
+
background: var(--color-surface-muted);
|
|
407
386
|
border-radius: var(--radius-4);
|
|
387
|
+
padding: 1px var(--space-4);
|
|
408
388
|
}
|
|
409
389
|
|
|
410
390
|
pre {
|
|
411
391
|
font-family: var(--font-mono);
|
|
412
392
|
font-size: var(--text-sm);
|
|
413
|
-
background: var(--color-
|
|
414
|
-
padding: var(--space-12);
|
|
393
|
+
background: var(--color-surface-muted);
|
|
415
394
|
border: 1px solid var(--color-border-muted);
|
|
416
|
-
border-radius: var(--radius-
|
|
395
|
+
border-radius: var(--radius-6);
|
|
396
|
+
padding: var(--space-12);
|
|
417
397
|
overflow-x: auto;
|
|
418
398
|
}
|
|
419
399
|
|
|
400
|
+
/* A block's code cell. */
|
|
420
401
|
pre code {
|
|
421
402
|
background: none;
|
|
403
|
+
border-radius: 0;
|
|
422
404
|
padding: 0;
|
|
423
405
|
}
|
|
424
406
|
|
|
425
|
-
blockquote {
|
|
426
|
-
padding-left: var(--space-16);
|
|
427
|
-
border-left: 3px solid var(--color-border);
|
|
428
|
-
color: var(--color-text-muted);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
407
|
hr {
|
|
432
|
-
border:
|
|
408
|
+
border: 0;
|
|
433
409
|
border-top: 1px solid var(--color-border);
|
|
434
410
|
}
|
|
435
411
|
|
|
436
412
|
table {
|
|
437
|
-
width: 100%;
|
|
438
413
|
border-collapse: collapse;
|
|
414
|
+
width: 100%;
|
|
439
415
|
}
|
|
440
416
|
|
|
441
|
-
th
|
|
442
|
-
td {
|
|
443
|
-
padding: var(--space-8) var(--space-12);
|
|
444
|
-
border: 1px solid var(--color-border);
|
|
417
|
+
th {
|
|
445
418
|
text-align: left;
|
|
419
|
+
font-weight: var(--font-weight-semibold);
|
|
420
|
+
background: var(--color-surface-muted);
|
|
446
421
|
}
|
|
447
422
|
|
|
448
|
-
th {
|
|
449
|
-
|
|
450
|
-
|
|
423
|
+
th, td {
|
|
424
|
+
padding: var(--space-4) var(--space-12) var(--space-4) 0;
|
|
425
|
+
border-bottom: 1px solid var(--color-border);
|
|
451
426
|
}
|
|
452
427
|
|
|
453
428
|
img {
|
|
454
429
|
max-width: 100%;
|
|
455
430
|
height: auto;
|
|
456
431
|
}
|
|
432
|
+
|
|
433
|
+
/* The header idiom. */
|
|
434
|
+
header p {
|
|
435
|
+
color: var(--color-text-muted);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
/* The heading's own bottom margin would collapse with the subtitle's; the
|
|
439
|
+
pair states its gap once. */
|
|
440
|
+
header :is(h1, h2, h3, h4, h5, h6):has(+ p) {
|
|
441
|
+
margin-bottom: 0;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
header :is(h1, h2, h3, h4, h5, h6) + p {
|
|
445
|
+
margin-top: var(--space-4);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
tv-icon:not(:defined) {
|
|
449
|
+
display: inline-flex;
|
|
450
|
+
flex: none;
|
|
451
|
+
width: 1em;
|
|
452
|
+
height: 1em;
|
|
453
|
+
vertical-align: -0.125em;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
tv-icon:not(:defined)[size="sm"] { font-size: 16px; }
|
|
457
|
+
|
|
458
|
+
tv-icon:not(:defined)[size="md"] { font-size: 20px; }
|
|
459
|
+
|
|
460
|
+
tv-icon:not(:defined)[size="lg"] { font-size: 24px; }
|
|
461
|
+
|
|
462
|
+
tv-icon:not(:defined)[size="xl"] { font-size: 32px; }
|
|
463
|
+
|
|
464
|
+
/* The checklist's looks ([[ui/elements/checkbox-list/index.md]]): the list's
|
|
465
|
+
stack, the row's marker-and-content grid, and the done treatment.
|
|
466
|
+
`--checkbox-color` is the styling API ([[arch/ui/elements.md]]). */
|
|
467
|
+
checkbox-list {
|
|
468
|
+
display: grid;
|
|
469
|
+
gap: var(--space-6);
|
|
470
|
+
margin: var(--space-12) 0;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
checkbox-item {
|
|
474
|
+
position: relative;
|
|
475
|
+
display: grid;
|
|
476
|
+
grid-template-columns: 1em minmax(0, 1fr);
|
|
477
|
+
gap: var(--space-8);
|
|
478
|
+
align-items: baseline;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/* The marker box, seated on the first line's text. */
|
|
482
|
+
checkbox-item::before {
|
|
483
|
+
content: "";
|
|
484
|
+
width: 1em;
|
|
485
|
+
height: 1em;
|
|
486
|
+
align-self: start;
|
|
487
|
+
translate: 0 0.12em;
|
|
488
|
+
background: transparent;
|
|
489
|
+
border: 1px solid var(--tint-300);
|
|
490
|
+
border-radius: var(--radius-4);
|
|
491
|
+
box-sizing: border-box;
|
|
492
|
+
cursor: not-allowed;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
checkbox-item[checked]::before {
|
|
496
|
+
background: var(--checkbox-color, var(--color-primary));
|
|
497
|
+
border-color: var(--checkbox-color, var(--color-primary));
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/* The check, drawn as a mask over the marker's cell. */
|
|
501
|
+
checkbox-item[checked]::after {
|
|
502
|
+
content: "";
|
|
503
|
+
position: absolute;
|
|
504
|
+
left: 0;
|
|
505
|
+
top: 0.12em;
|
|
506
|
+
width: 1em;
|
|
507
|
+
height: 1em;
|
|
508
|
+
background: var(--color-surface);
|
|
509
|
+
mask: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 12"><path d="M10.2 3.1 5.1 8.2 2.4 5.5" fill="none" stroke="black" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>') center / 80% no-repeat;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
checkbox-item[checked] {
|
|
513
|
+
color: var(--color-text-muted);
|
|
514
|
+
text-decoration: line-through;
|
|
515
|
+
text-decoration-thickness: 0.08em;
|
|
516
|
+
}
|