@telepath-computer/television 0.1.216 → 1.3.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.
Files changed (81) hide show
  1. package/dist/THIRD-PARTY-NOTICES.txt +336 -0
  2. package/dist/canonical/v1/frozen.json +6 -0
  3. package/dist/canonical/v1/styles.css +7 -2
  4. package/dist/canonical/v2/components.js +1 -0
  5. package/dist/canonical/v2/fonts/Hind-Variable.933e9900.woff2 +0 -0
  6. package/dist/canonical/v2/styles.css +1153 -0
  7. package/dist/cli.cjs +1763 -761
  8. package/dist/onboarding/README.md +16 -14
  9. package/dist/onboarding/business-ops/about.html +4 -3
  10. package/dist/onboarding/business-ops/retention-vs-releases.html +25 -32
  11. package/dist/onboarding/business-ops/revenue-vs-goals.html +26 -31
  12. package/dist/onboarding/productivity/about.html +4 -3
  13. package/dist/onboarding/productivity/company-todos/THIRD-PARTY-NOTICES.txt +29 -0
  14. package/dist/onboarding/productivity/company-todos/index.html +20 -20
  15. package/dist/onboarding/productivity/company-todos/task.css +4 -5
  16. package/dist/onboarding/productivity/company-todos/task.js +1 -1
  17. package/dist/onboarding/productivity/meeting-prep.html +12 -12
  18. package/dist/onboarding/productivity/priorities-today.html +10 -10
  19. package/dist/onboarding/productivity/todays-calendar/calendar.css +1 -1
  20. package/dist/onboarding/productivity/todays-calendar/index.html +12 -14
  21. package/dist/onboarding/research/about.html +4 -3
  22. package/dist/onboarding/research/open-model-research.html +35 -35
  23. package/dist/onboarding/research/todays-news.html +72 -72
  24. package/dist/onboarding/tv-guide/welcome.html +178 -0
  25. package/dist/skills/television/SKILL.md +122 -67
  26. package/dist/skills/television/theming.md +1087 -0
  27. package/dist/skills/tv-calendar/SKILL.md +3 -1
  28. package/dist/skills/tv-calendar/calendar.css +1 -1
  29. package/dist/skills/tv-table/SKILL.md +5 -2
  30. package/dist/skills/tv-tasks/SKILL.md +19 -15
  31. package/dist/skills/tv-tasks/task.css +4 -26
  32. package/dist/skills/tv-tasks/task.js +1 -1
  33. package/dist/themes/README.md +5 -0
  34. package/dist/themes/aquarium/README.md +48 -0
  35. package/dist/themes/aquarium/iframe-background.js +137 -0
  36. package/dist/themes/aquarium/manifest.json +7 -0
  37. package/dist/themes/aquarium/theme.css +46 -0
  38. package/dist/themes/blueprint/README.md +31 -0
  39. package/dist/themes/blueprint/manifest.json +6 -0
  40. package/dist/themes/blueprint/theme.css +115 -0
  41. package/dist/themes/clouds/README.md +15 -0
  42. package/dist/themes/clouds/THIRD-PARTY-NOTICES.txt +81 -0
  43. package/dist/themes/clouds/manifest.json +6 -0
  44. package/dist/themes/clouds/theme.css +62 -0
  45. package/dist/themes/clouds/wallpaper-dark.webp +0 -0
  46. package/dist/themes/clouds/wallpaper.webp +0 -0
  47. package/dist/themes/crt-phosphor/README.md +31 -0
  48. package/dist/themes/crt-phosphor/manifest.json +6 -0
  49. package/dist/themes/crt-phosphor/theme.css +105 -0
  50. package/dist/themes/nord/README.md +9 -0
  51. package/dist/themes/nord/THIRD-PARTY-NOTICES.txt +29 -0
  52. package/dist/themes/nord/manifest.json +5 -0
  53. package/dist/themes/nord/theme.css +28 -0
  54. package/dist/themes/swiss/README.md +5 -0
  55. package/dist/themes/swiss/manifest.json +5 -0
  56. package/dist/themes/swiss/theme.css +34 -0
  57. package/dist/themes/tokyo-night/README.md +17 -0
  58. package/dist/themes/tokyo-night/THIRD-PARTY-NOTICES.txt +235 -0
  59. package/dist/themes/tokyo-night/manifest.json +5 -0
  60. package/dist/themes/tokyo-night/theme.css +31 -0
  61. package/dist/themes/tokyo-night/wallpaper.webp +0 -0
  62. package/dist/views/artifact-missing/index.html +40 -68
  63. package/dist/views/markdown/THIRD-PARTY-NOTICES.txt +26 -0
  64. package/dist/views/markdown/index.html +49 -23
  65. package/dist/web/THIRD-PARTY-NOTICES.txt +26 -0
  66. package/dist/web/assets/artifact-bridge-BEUWXKq7.js +1 -0
  67. package/dist/web/assets/{artifactMissing-BiK_l3Ts.js → artifactMissing-CUs1ZwDx.js} +1 -1
  68. package/dist/web/assets/main-3UimTRLK.css +1 -0
  69. package/dist/web/assets/main-CSSzbG7q.js +704 -0
  70. package/dist/web/assets/{urlUnsupported-RGIrhMDe.js → urlUnsupported-powR79PT.js} +1 -1
  71. package/dist/web/index.html +40 -5
  72. package/dist/web/views/artifact-missing/index.html +40 -68
  73. package/dist/web/views/url-unsupported/index.html +40 -68
  74. package/package.json +1 -1
  75. package/dist/onboarding/tv-guide/welcome/assets/television.svg +0 -71
  76. package/dist/onboarding/tv-guide/welcome/index.html +0 -203
  77. package/dist/skills/tv-theme/SKILL.md +0 -449
  78. package/dist/web/assets/artifact-bridge-3Trk-B2L.js +0 -1
  79. package/dist/web/assets/clouds-CAYIArXj.jpg +0 -0
  80. package/dist/web/assets/main-Blg8fuaV.css +0 -1
  81. package/dist/web/assets/main-V14r9Psb.js +0 -596
@@ -1,11 +1,10 @@
1
1
  # Onboarding content — replacement contract
2
2
 
3
- This tree deliberately mixes provenance: baked channels and hand-authored
4
- channels are full runtime peers, indistinguishable to the config, validation,
5
- and installer (specs/arch/onboarding/bake.md). This README is where each
6
- channel's provenance is recorded.
3
+ This tree contains the reviewed release content installed into new Television
4
+ data directories. The design sources live under
5
+ [`specs/ui/onboarding-artifacts/`](../../../../specs/ui/onboarding-artifacts/index.md).
7
6
 
8
- **`business-ops`, `productivity`, and `research` are baked content**:
7
+ **All four channels are baked content**:
9
8
  generated from the design sources under `specs/ui/onboarding-artifacts/` by
10
9
  `scripts/bake-onboarding.mjs` (specs/arch/onboarding/bake.md; requires the
11
10
  repository's Node 24 toolchain). Do not edit
@@ -16,19 +15,22 @@ Their display `name` values, channel order, and `focusChannel` in
16
15
  `onboarding-channels.json` are hand-edits the bake preserves. An artifact
17
16
  entry may also carry optional initial-page `size` and `geometry`; for baked
18
17
  channels author those fields in the design channel's `layout.yml` so a
19
- re-bake carries them into the config. Hand-authored channels such as
20
- `tv-guide` may author the same fields directly in the config. Missing fields
21
- use the shared page defaults.
18
+ re-bake carries them into the config. Missing fields use the shared page
19
+ defaults. The bake renders flat `.frame` sources into complete HTML documents
20
+ and copies flat `.md` sources unchanged. Declared skill assets are copied beside
21
+ the task and calendar entry documents; the welcome is a single HTML file with
22
+ an inline logo.
22
23
 
23
24
  **All non-tv-guide content is swap-free**: tests derive their expectations
24
- from this config and these files at runtime, so content edits (baked or
25
- hand-authored) need zero test changes.
25
+ from this config and these files at runtime, so content edits need zero test
26
+ changes.
26
27
 
27
28
  **`tv-guide` content is deliberately test-pinned** (it is released copy) and
28
- is hand-authored, not baked: `packages/server/test/onboarding-content.test.ts`
29
- pins its artifact order, and `test/node/fresh-install-onboarding.test.ts` pins
30
- its welcome copy and asset.
31
- Changing TV Guide content means updating those pins on purpose.
29
+ is covered by `packages/server/test/onboarding-content.test.ts`, which pins
30
+ its artifact configuration, single-file source, canonical dependencies, and
31
+ public styling vocabulary. Fresh-install acceptance derives served content
32
+ from the package, including the welcome document. Changes to a pinned contract
33
+ require updating that assertion deliberately.
32
34
 
33
35
  **The channel SET (folder names = slugs) is pinned in exactly one place**:
34
36
  `test/helpers/shipped-onboarding.ts`. Adding, removing, or renaming a channel
@@ -4,8 +4,8 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>About this channel</title>
7
- <link rel="stylesheet" href="/canonical/v1/styles.css">
8
- <script type="module" src="/canonical/v1/components.js"></script>
7
+ <link rel="stylesheet" href="/canonical/v2/styles.css">
8
+ <script type="module" src="/canonical/v2/components.js"></script>
9
9
  <style>
10
10
  /* Shared base for onboarding artifacts ([[../index.md]]): document padding
11
11
  and the centered content shell. Typography, text color, and background
@@ -64,6 +64,7 @@ header > .summary-deck {
64
64
  light and vanish on the yellow in a dark theme ([[../index.md#^about-cards]]). */
65
65
  body {
66
66
  background: var(--yellow-100);
67
+ color: var(--neutral-900);
67
68
  }
68
69
 
69
70
  .lede {
@@ -94,7 +95,7 @@ body {
94
95
  position: absolute;
95
96
  inset: 0 auto 0 0;
96
97
  width: 3px;
97
- border-radius: var(--radius-full, 9999px);
98
+ border-radius: var(--radius-pill, 9999px);
98
99
  background: var(--yellow-700);
99
100
  }
100
101
 
@@ -4,8 +4,8 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>Retention vs. recent releases</title>
7
- <link rel="stylesheet" href="/canonical/v1/styles.css">
8
- <script type="module" src="/canonical/v1/components.js"></script>
7
+ <link rel="stylesheet" href="/canonical/v2/styles.css">
8
+ <script type="module" src="/canonical/v2/components.js"></script>
9
9
  <style>
10
10
  /* Shared base for onboarding artifacts ([[../index.md]]): document padding
11
11
  and the centered content shell. Typography, text color, and background
@@ -96,7 +96,7 @@ header.hero h1 {
96
96
  .panel {
97
97
  padding: var(--space-20, 20px);
98
98
  border: 1px solid var(--color-border);
99
- border-radius: var(--radius-12, 12px);
99
+ border-radius: 12px;
100
100
  background: var(--color-surface);
101
101
  }
102
102
 
@@ -114,8 +114,8 @@ header.hero h1 {
114
114
 
115
115
  .summary-box {
116
116
  padding: var(--space-16, 16px) var(--space-20, 20px);
117
- border: 1px solid var(--color-border-muted);
118
- border-radius: var(--radius-12, 12px);
117
+ border: 1px solid var(--color-border);
118
+ border-radius: 12px;
119
119
  background: var(--color-surface-muted);
120
120
  }
121
121
 
@@ -166,7 +166,7 @@ header.hero h1 {
166
166
  min-width: 120px;
167
167
  padding: var(--space-12, 12px) var(--space-16, 16px);
168
168
  border: 1px solid var(--color-border);
169
- border-radius: var(--radius-12, 12px);
169
+ border-radius: 12px;
170
170
  background: var(--color-surface);
171
171
  }
172
172
 
@@ -195,12 +195,7 @@ header.hero h1 {
195
195
  .delta.down { color: var(--red-600); }
196
196
 
197
197
 
198
- /* Shared chart scaffold for the dashboard artifacts ([[../index.md]]): the
199
- wide dashboard shell, the responsive inline-SVG plumbing and common
200
- axis/grid chrome, the legend row, and the narrow-viewport padding. Each
201
- dashboard's own styles.css keeps only its series colors, swatch shape, and
202
- any chart-specific chrome — SVG presentation attributes can't take var(),
203
- so fills and strokes live in CSS. */
198
+ /* Chart layout for responsive inline SVGs and the surrounding dashboard. */
204
199
 
205
200
  /* Dashboards run wider than the set's default shell. */
206
201
  .shell {
@@ -226,7 +221,7 @@ svg.chart text {
226
221
  }
227
222
 
228
223
  /* Common axis/grid chrome. */
229
- svg.chart .grid { stroke: var(--color-border-muted); }
224
+ svg.chart .grid { stroke: var(--color-border); }
230
225
  svg.chart .axis-line { stroke: var(--color-border); }
231
226
  svg.chart .axis-y { fill: var(--color-text-muted); }
232
227
 
@@ -246,7 +241,7 @@ svg.chart .axis-y { fill: var(--color-text-muted); }
246
241
  gap: var(--space-6, 6px);
247
242
  }
248
243
 
249
- /* Narrow viewport (the default 528px card): tighten document padding so the
244
+ /* Narrow viewport: tighten document padding so the
250
245
  scaled-down chart keeps as much width as possible. */
251
246
  @media (max-width: 600px) {
252
247
  body {
@@ -255,11 +250,10 @@ svg.chart .axis-y { fill: var(--color-text-muted); }
255
250
  }
256
251
 
257
252
 
258
- /* Retention vs. recent releases ([[index.md]]): artifact-specific styling only
253
+ /* Retention vs. recent releases ([[../index.md]]): artifact-specific styling only
259
254
  — the KPI accent sequence, this chart's retention series and release-marker
260
255
  colors, its legend swatches, and the release-impact list. The dashboard
261
- shell, chart plumbing, common chrome, and legend row come from the shared
262
- chart scaffold ([shared/chart.css](../../shared/chart.css)). */
256
+ shell, chart plumbing, common chrome, and legend row are defined above. */
263
257
 
264
258
  /* KPI value accents are a positional sequence (green/orange/blue), owned
265
259
  here rather than carried as ramp tokens in data. Each card sets the
@@ -317,7 +311,7 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
317
311
  align-items: center;
318
312
  gap: var(--space-12, 12px);
319
313
  padding: var(--space-10, 10px) var(--space-16, 16px);
320
- border-radius: var(--radius-12, 12px);
314
+ border-radius: 12px;
321
315
  border: 1px solid var(--color-border);
322
316
  background: var(--color-surface-muted);
323
317
  }
@@ -359,8 +353,7 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
359
353
  .release-impact.partial { color: var(--orange-600); }
360
354
  .release-impact.up { color: var(--green-600); }
361
355
 
362
- /* Narrow viewport: let the release rows wrap (the shared scaffold handles the
363
- body padding). */
356
+ /* Narrow viewport: let the release rows wrap. */
364
357
  @media (max-width: 600px) {
365
358
  .release-item {
366
359
  flex-wrap: wrap;
@@ -381,25 +374,25 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
381
374
  </header>
382
375
 
383
376
  <div class="kpi-row">
384
-
377
+
385
378
  <div class="kpi">
386
379
  <div class="label">Current W1 Retention</div>
387
380
  <div class="value">78%</div>
388
381
  <div class="delta up">+10 pts since May</div>
389
382
  </div>
390
-
383
+
391
384
  <div class="kpi">
392
385
  <div class="label">Pre-v0.4.0 Baseline</div>
393
386
  <div class="value">68%</div>
394
387
  <div class="delta down">−2 pts after v0.3.0</div>
395
388
  </div>
396
-
389
+
397
390
  <div class="kpi">
398
391
  <div class="label">Post-v0.4.0 Peak</div>
399
392
  <div class="value">81%</div>
400
393
  <div class="delta up">+13 pts recovery</div>
401
394
  </div>
402
-
395
+
403
396
  </div>
404
397
 
405
398
  <section class="panel">
@@ -505,22 +498,22 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
505
498
  <div class="legend-swatch retention"></div>
506
499
  W1 Retention
507
500
  </div>
508
-
501
+
509
502
  <div class="legend-item">
510
503
  <div class="legend-swatch v030"></div>
511
504
  v0.3.0 release
512
505
  </div>
513
-
506
+
514
507
  <div class="legend-item">
515
508
  <div class="legend-swatch v035"></div>
516
509
  v0.3.5 release
517
510
  </div>
518
-
511
+
519
512
  <div class="legend-item">
520
513
  <div class="legend-swatch v040"></div>
521
514
  v0.4.0 release
522
515
  </div>
523
-
516
+
524
517
  </div>
525
518
  </section>
526
519
 
@@ -528,7 +521,7 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
528
521
  <h2>Release impact</h2>
529
522
  <p class="note">How each release affected weekly retention</p>
530
523
  <div class="release-list">
531
-
524
+
532
525
  <div class="release-item">
533
526
  <div class="release-dot v030"></div>
534
527
  <div class="release-info">
@@ -537,7 +530,7 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
537
530
  </div>
538
531
  <div class="release-impact down">−5 pts (68% → 63%)</div>
539
532
  </div>
540
-
533
+
541
534
  <div class="release-item">
542
535
  <div class="release-dot v035"></div>
543
536
  <div class="release-info">
@@ -546,7 +539,7 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
546
539
  </div>
547
540
  <div class="release-impact partial">+6 pts (63% → 69%)</div>
548
541
  </div>
549
-
542
+
550
543
  <div class="release-item">
551
544
  <div class="release-dot v040"></div>
552
545
  <div class="release-info">
@@ -555,7 +548,7 @@ svg.chart .point-labels .peak { fill: var(--green-500); }
555
548
  </div>
556
549
  <div class="release-impact up">+9 pts (69% → 78%)</div>
557
550
  </div>
558
-
551
+
559
552
  </div>
560
553
  </section>
561
554
  </main>
@@ -4,8 +4,8 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>Revenue vs. goals</title>
7
- <link rel="stylesheet" href="/canonical/v1/styles.css">
8
- <script type="module" src="/canonical/v1/components.js"></script>
7
+ <link rel="stylesheet" href="/canonical/v2/styles.css">
8
+ <script type="module" src="/canonical/v2/components.js"></script>
9
9
  <style>
10
10
  /* Shared base for onboarding artifacts ([[../index.md]]): document padding
11
11
  and the centered content shell. Typography, text color, and background
@@ -96,7 +96,7 @@ header.hero h1 {
96
96
  .panel {
97
97
  padding: var(--space-20, 20px);
98
98
  border: 1px solid var(--color-border);
99
- border-radius: var(--radius-12, 12px);
99
+ border-radius: 12px;
100
100
  background: var(--color-surface);
101
101
  }
102
102
 
@@ -114,8 +114,8 @@ header.hero h1 {
114
114
 
115
115
  .summary-box {
116
116
  padding: var(--space-16, 16px) var(--space-20, 20px);
117
- border: 1px solid var(--color-border-muted);
118
- border-radius: var(--radius-12, 12px);
117
+ border: 1px solid var(--color-border);
118
+ border-radius: 12px;
119
119
  background: var(--color-surface-muted);
120
120
  }
121
121
 
@@ -166,7 +166,7 @@ header.hero h1 {
166
166
  min-width: 120px;
167
167
  padding: var(--space-12, 12px) var(--space-16, 16px);
168
168
  border: 1px solid var(--color-border);
169
- border-radius: var(--radius-12, 12px);
169
+ border-radius: 12px;
170
170
  background: var(--color-surface);
171
171
  }
172
172
 
@@ -205,7 +205,7 @@ header.hero h1 {
205
205
  gap: var(--space-4, 4px);
206
206
  padding: 2px var(--space-10, 10px);
207
207
  border: 1px solid var(--color-border);
208
- border-radius: var(--radius-full, 9999px);
208
+ border-radius: var(--radius-pill, 9999px);
209
209
  background: var(--color-surface);
210
210
  color: var(--color-text-muted);
211
211
  font-size: var(--text-sm, 12px);
@@ -262,7 +262,7 @@ header.hero h1 {
262
262
 
263
263
  .table-wrap tbody td {
264
264
  padding: var(--space-10, 10px) var(--space-12, 12px);
265
- border-bottom: 1px solid var(--color-border-muted);
265
+ border-bottom: 1px solid var(--color-border);
266
266
  white-space: nowrap;
267
267
  }
268
268
 
@@ -280,12 +280,7 @@ header.hero h1 {
280
280
  }
281
281
 
282
282
 
283
- /* Shared chart scaffold for the dashboard artifacts ([[../index.md]]): the
284
- wide dashboard shell, the responsive inline-SVG plumbing and common
285
- axis/grid chrome, the legend row, and the narrow-viewport padding. Each
286
- dashboard's own styles.css keeps only its series colors, swatch shape, and
287
- any chart-specific chrome — SVG presentation attributes can't take var(),
288
- so fills and strokes live in CSS. */
283
+ /* Chart layout for responsive inline SVGs and the surrounding dashboard. */
289
284
 
290
285
  /* Dashboards run wider than the set's default shell. */
291
286
  .shell {
@@ -311,7 +306,7 @@ svg.chart text {
311
306
  }
312
307
 
313
308
  /* Common axis/grid chrome. */
314
- svg.chart .grid { stroke: var(--color-border-muted); }
309
+ svg.chart .grid { stroke: var(--color-border); }
315
310
  svg.chart .axis-line { stroke: var(--color-border); }
316
311
  svg.chart .axis-y { fill: var(--color-text-muted); }
317
312
 
@@ -331,7 +326,7 @@ svg.chart .axis-y { fill: var(--color-text-muted); }
331
326
  gap: var(--space-6, 6px);
332
327
  }
333
328
 
334
- /* Narrow viewport (the default 528px card): tighten document padding so the
329
+ /* Narrow viewport: tighten document padding so the
335
330
  scaled-down chart keeps as much width as possible. */
336
331
  @media (max-width: 600px) {
337
332
  body {
@@ -340,10 +335,10 @@ svg.chart .axis-y { fill: var(--color-text-muted); }
340
335
  }
341
336
 
342
337
 
343
- /* Revenue vs. goals ([[index.md]]): artifact-specific styling only — the KPI
338
+ /* Revenue vs. goals ([[../index.md]]): artifact-specific styling only — the KPI
344
339
  accent sequence, this chart's series/label colors, and its legend swatches.
345
340
  The dashboard shell, chart plumbing, common chrome, and legend row come from
346
- the shared chart scaffold ([shared/chart.css](../../shared/chart.css)). */
341
+ the chart scaffold defined above. */
347
342
 
348
343
  /* KPI value accents are a positional sequence (green/blue/purple/orange),
349
344
  owned here rather than carried as ramp tokens in data. Each card sets
@@ -370,7 +365,7 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
370
365
  .legend-swatch {
371
366
  width: 14px;
372
367
  height: 14px;
373
- border-radius: var(--radius-4, 4px);
368
+ border-radius: 4px;
374
369
  }
375
370
 
376
371
  .legend-swatch.actual {
@@ -398,31 +393,31 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
398
393
  </header>
399
394
 
400
395
  <div class="kpi-row">
401
-
396
+
402
397
  <div class="kpi">
403
398
  <div class="label">Q2 2026 Revenue</div>
404
399
  <div class="value">$2.84M</div>
405
400
  <div class="delta up">+49% QoQ</div>
406
401
  </div>
407
-
402
+
408
403
  <div class="kpi">
409
404
  <div class="label">Q2 2026 Goal</div>
410
405
  <div class="value">$2.6M</div>
411
406
  <div class="delta up">Goal exceeded by $240K</div>
412
407
  </div>
413
-
408
+
414
409
  <div class="kpi">
415
410
  <div class="label">TTM Revenue</div>
416
411
  <div class="value">$7.64M</div>
417
412
  <div class="delta up">+410% YoY</div>
418
413
  </div>
419
-
414
+
420
415
  <div class="kpi">
421
416
  <div class="label">Expansion pipeline</div>
422
417
  <div class="value">$9.6M</div>
423
418
  <div class="delta up">Acme expansion path</div>
424
419
  </div>
425
-
420
+
426
421
  </div>
427
422
 
428
423
  <section class="panel">
@@ -541,7 +536,7 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
541
536
  </tr>
542
537
  </thead>
543
538
  <tbody>
544
-
539
+
545
540
  <tr>
546
541
  <td>Q1 2025</td>
547
542
  <td class="num">$240K</td>
@@ -550,7 +545,7 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
550
545
  <td><span class="pill red">Missed</span></td>
551
546
  <td>Pre-launch, design partner pilots only</td>
552
547
  </tr>
553
-
548
+
554
549
  <tr>
555
550
  <td>Q2 2025</td>
556
551
  <td class="num">$560K</td>
@@ -559,7 +554,7 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
559
554
  <td><span class="pill orange">Close</span></td>
560
555
  <td>v0.2 launch, first paying pilot conversions</td>
561
556
  </tr>
562
-
557
+
563
558
  <tr>
564
559
  <td>Q3 2025</td>
565
560
  <td class="num">$900K</td>
@@ -568,7 +563,7 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
568
563
  <td><span class="pill orange">Close</span></td>
569
564
  <td>NeonBank pilot signed, expansion conversations started</td>
570
565
  </tr>
571
-
566
+
572
567
  <tr>
573
568
  <td>Q4 2025</td>
574
569
  <td class="num">$1.44M</td>
@@ -577,7 +572,7 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
577
572
  <td><span class="pill orange">Close</span></td>
578
573
  <td>Mallory Health onboarded, multi-seat deals began</td>
579
574
  </tr>
580
-
575
+
581
576
  <tr>
582
577
  <td>Q1 2026</td>
583
578
  <td class="num">$1.9M</td>
@@ -586,7 +581,7 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
586
581
  <td><span class="pill orange">Close</span></td>
587
582
  <td>Acme AI pilot started, v0.3.0 shipped mid-quarter</td>
588
583
  </tr>
589
-
584
+
590
585
  <tr>
591
586
  <td>Q2 2026</td>
592
587
  <td class="num">$2.84M</td>
@@ -595,7 +590,7 @@ svg.chart .bar-labels .accent { fill: var(--green-500); }
595
590
  <td><span class="pill green">Exceeded</span></td>
596
591
  <td>v0.4.0 shipped, Acme expansion path opened ($9.6M ARR)</td>
597
592
  </tr>
598
-
593
+
599
594
  </tbody>
600
595
  </table>
601
596
  </div>
@@ -4,8 +4,8 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>About this channel</title>
7
- <link rel="stylesheet" href="/canonical/v1/styles.css">
8
- <script type="module" src="/canonical/v1/components.js"></script>
7
+ <link rel="stylesheet" href="/canonical/v2/styles.css">
8
+ <script type="module" src="/canonical/v2/components.js"></script>
9
9
  <style>
10
10
  /* Shared base for onboarding artifacts ([[../index.md]]): document padding
11
11
  and the centered content shell. Typography, text color, and background
@@ -64,6 +64,7 @@ header > .summary-deck {
64
64
  light and vanish on the yellow in a dark theme ([[../index.md#^about-cards]]). */
65
65
  body {
66
66
  background: var(--yellow-100);
67
+ color: var(--neutral-900);
67
68
  }
68
69
 
69
70
  .lede {
@@ -94,7 +95,7 @@ body {
94
95
  position: absolute;
95
96
  inset: 0 auto 0 0;
96
97
  width: 3px;
97
- border-radius: var(--radius-full, 9999px);
98
+ border-radius: var(--radius-pill, 9999px);
98
99
  background: var(--yellow-700);
99
100
  }
100
101
 
@@ -0,0 +1,29 @@
1
+ TELEVISION THIRD-PARTY LICENSING NOTICES
2
+
3
+ This file contains the license terms and attribution notices for third-party software and materials included in Television.
4
+ ================================================================================
5
+ @rupertsworld/event-target@0.1.2
6
+ Licensed under MIT.
7
+ --------------------------------------------------------------------------------
8
+ MIT License
9
+
10
+ Copyright (c) 2026 Rupert Manfredi
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+
@@ -4,8 +4,8 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>Company To-dos</title>
7
- <link rel="stylesheet" href="/canonical/v1/styles.css">
8
- <script type="module" src="/canonical/v1/components.js"></script>
7
+ <link rel="stylesheet" href="/canonical/v2/styles.css">
8
+ <script type="module" src="/canonical/v2/components.js"></script>
9
9
  <link rel="stylesheet" href="./task.css">
10
10
  <script type="module" src="./task.js"></script>
11
11
  <style>
@@ -19,10 +19,10 @@
19
19
  </header>
20
20
 
21
21
  <tv-task-list>
22
-
22
+
23
23
  <tv-task-section>
24
24
  <header><h2>Overdue</h2></header>
25
-
25
+
26
26
  <tv-task>
27
27
  <tv-task-checkbox></tv-task-checkbox>
28
28
  <tv-task-body>
@@ -35,12 +35,12 @@
35
35
  </tv-task-meta>
36
36
  </tv-task-body>
37
37
  </tv-task>
38
-
38
+
39
39
  </tv-task-section>
40
-
40
+
41
41
  <tv-task-section>
42
42
  <header><h2>Today</h2></header>
43
-
43
+
44
44
  <tv-task>
45
45
  <tv-task-checkbox></tv-task-checkbox>
46
46
  <tv-task-body>
@@ -49,11 +49,11 @@
49
49
  <tv-task-meta>
50
50
  <tv-task-meta-due date="2026-07-08"></tv-task-meta-due>
51
51
  <tv-task-meta-item><tv-icon name="hash"></tv-icon>Seed Deck</tv-task-meta-item>
52
-
52
+
53
53
  </tv-task-meta>
54
54
  </tv-task-body>
55
55
  </tv-task>
56
-
56
+
57
57
  <tv-task>
58
58
  <tv-task-checkbox></tv-task-checkbox>
59
59
  <tv-task-body>
@@ -62,11 +62,11 @@
62
62
  <tv-task-meta>
63
63
  <tv-task-meta-due date="2026-07-08"></tv-task-meta-due>
64
64
  <tv-task-meta-item><tv-icon name="hash"></tv-icon>Investor Update</tv-task-meta-item>
65
-
65
+
66
66
  </tv-task-meta>
67
67
  </tv-task-body>
68
68
  </tv-task>
69
-
69
+
70
70
  <tv-task>
71
71
  <tv-task-checkbox></tv-task-checkbox>
72
72
  <tv-task-body>
@@ -75,16 +75,16 @@
75
75
  <tv-task-meta>
76
76
  <tv-task-meta-due date="2026-07-08"></tv-task-meta-due>
77
77
  <tv-task-meta-item><tv-icon name="hash"></tv-icon>Platform Reliability</tv-task-meta-item>
78
-
78
+
79
79
  </tv-task-meta>
80
80
  </tv-task-body>
81
81
  </tv-task>
82
-
82
+
83
83
  </tv-task-section>
84
-
84
+
85
85
  <tv-task-section>
86
86
  <header><h2>Upcoming</h2></header>
87
-
87
+
88
88
  <tv-task>
89
89
  <tv-task-checkbox></tv-task-checkbox>
90
90
  <tv-task-body>
@@ -93,11 +93,11 @@
93
93
  <tv-task-meta>
94
94
  <tv-task-meta-due date="2026-07-10"></tv-task-meta-due>
95
95
  <tv-task-meta-item><tv-icon name="hash"></tv-icon>Acme Pilot</tv-task-meta-item>
96
-
96
+
97
97
  </tv-task-meta>
98
98
  </tv-task-body>
99
99
  </tv-task>
100
-
100
+
101
101
  <tv-task>
102
102
  <tv-task-checkbox></tv-task-checkbox>
103
103
  <tv-task-body>
@@ -106,13 +106,13 @@
106
106
  <tv-task-meta>
107
107
  <tv-task-meta-due date="2026-07-14"></tv-task-meta-due>
108
108
  <tv-task-meta-item><tv-icon name="hash"></tv-icon>Seed Deck</tv-task-meta-item>
109
-
109
+
110
110
  </tv-task-meta>
111
111
  </tv-task-body>
112
112
  </tv-task>
113
-
113
+
114
114
  </tv-task-section>
115
-
115
+
116
116
  </tv-task-list>
117
117
  </body>
118
118
  </html>