decklight 0.1.0

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 (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +257 -0
  3. package/SPEC.md +372 -0
  4. package/cli/bundle.mjs +388 -0
  5. package/cli/decklight.mjs +95 -0
  6. package/cli/edit.mjs +142 -0
  7. package/cli/init.mjs +215 -0
  8. package/cli/rec.mjs +538 -0
  9. package/dist/decklight.css +1068 -0
  10. package/dist/decklight.js +239 -0
  11. package/dist/decklight.js.map +7 -0
  12. package/docs/architecture.svg +94 -0
  13. package/docs/demo.svg +124 -0
  14. package/package.json +54 -0
  15. package/themes/README.md +61 -0
  16. package/themes/aliens.css +84 -0
  17. package/themes/apple2.css +126 -0
  18. package/themes/aurora.css +84 -0
  19. package/themes/berry.css +80 -0
  20. package/themes/blade-runner.css +83 -0
  21. package/themes/c64.css +85 -0
  22. package/themes/carbon.css +82 -0
  23. package/themes/citrus.css +80 -0
  24. package/themes/coastal.css +80 -0
  25. package/themes/cosmos.css +86 -0
  26. package/themes/dune.css +80 -0
  27. package/themes/eclipse.css +82 -0
  28. package/themes/ember.css +80 -0
  29. package/themes/fjord.css +80 -0
  30. package/themes/friends.css +82 -0
  31. package/themes/gallery.html +203 -0
  32. package/themes/gameboy.css +118 -0
  33. package/themes/genesis.css +84 -0
  34. package/themes/glacier.css +82 -0
  35. package/themes/godfather.css +82 -0
  36. package/themes/graphite.css +80 -0
  37. package/themes/harvest.css +80 -0
  38. package/themes/ibm-modern.css +83 -0
  39. package/themes/ibm-oldschool.css +84 -0
  40. package/themes/ink.css +82 -0
  41. package/themes/latte.css +80 -0
  42. package/themes/linen.css +80 -0
  43. package/themes/meadow.css +80 -0
  44. package/themes/metropolis.css +85 -0
  45. package/themes/miami-vice.css +84 -0
  46. package/themes/midnight.css +80 -0
  47. package/themes/mint.css +82 -0
  48. package/themes/moss.css +82 -0
  49. package/themes/obsidian.css +82 -0
  50. package/themes/orchid.css +82 -0
  51. package/themes/packs.json +89 -0
  52. package/themes/paper.css +83 -0
  53. package/themes/peony.css +84 -0
  54. package/themes/porcelain.css +82 -0
  55. package/themes/pulp-fiction.css +84 -0
  56. package/themes/reveal-beige.css +87 -0
  57. package/themes/reveal-black.css +83 -0
  58. package/themes/reveal-blood.css +84 -0
  59. package/themes/reveal-dracula.css +83 -0
  60. package/themes/reveal-league.css +88 -0
  61. package/themes/reveal-moon.css +83 -0
  62. package/themes/reveal-night.css +86 -0
  63. package/themes/reveal-serif.css +82 -0
  64. package/themes/reveal-simple.css +84 -0
  65. package/themes/reveal-sky.css +85 -0
  66. package/themes/reveal-solarized.css +83 -0
  67. package/themes/reveal-white.css +82 -0
  68. package/themes/sepia.css +81 -0
  69. package/themes/seriph.css +82 -0
  70. package/themes/severance.css +82 -0
  71. package/themes/slate.css +80 -0
  72. package/themes/snes.css +82 -0
  73. package/themes/star-wars.css +85 -0
  74. package/themes/storm.css +80 -0
  75. package/themes/stranger-things.css +84 -0
  76. package/themes/synthwave.css +90 -0
  77. package/themes/terminator.css +84 -0
  78. package/themes/velvet.css +80 -0
  79. package/tools/gemini-tts.mjs +140 -0
  80. package/tools/publish-site-voices.mjs +71 -0
  81. package/tools/voiceover-server.mjs +0 -0
  82. package/tools/voiceover.mjs +155 -0
@@ -0,0 +1,84 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ Decklight theme · genesis
3
+ dark · console black, Sega blue, one red stripe, a bar of gold
4
+ Inspired by the Sega Genesis — black shell, red stripe, 16-BIT gold — palette kept canonical where possible,
5
+ every gated pair fitted to the WCAG contract.
6
+ Token contract: SPEC.md §5 — validated by test/contrast.mjs
7
+ ═══════════════════════════════════════════════════════════════ */
8
+
9
+ .decklight {
10
+ /* ── canvas ─────────────────────────────── */
11
+ --bg: #101013;
12
+ --bg-accent: none;
13
+ --fg: #e6e6ea;
14
+ --muted: #9a9aa4;
15
+
16
+ /* ── type ───────────────────────────────── */
17
+ --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
18
+ --font-heading: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
19
+ --font-mono: "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
20
+ --heading-color: #4f8fe8;
21
+ --heading-weight: 800;
22
+ --link: #6aa8f0;
23
+
24
+ /* ── accent ─────────────────────────────── */
25
+ --accent: #2b6cd7;
26
+ --accent-contrast: #fbfbfa;
27
+
28
+ /* ── blocks ─────────────────────────────── */
29
+ --block-bg: #18181f;
30
+ --block-border: 1px solid #2a2a36;
31
+ --block-radius: 6px;
32
+ --shadow: 0 8px 26px rgba(0, 0, 0, 0.5);
33
+
34
+ /* ── code ───────────────────────────────── */
35
+ --code-bg: #16161b;
36
+ --code-fg: #e8e8ec;
37
+ --hl-keyword: #6aa8f0;
38
+ --hl-string: #caa544;
39
+ --hl-number: #e07a68;
40
+ --hl-comment: #70707c;
41
+ --hl-function: #8fc0f8;
42
+ --hl-type: #d8b868;
43
+ --hl-punct: #b0b0bc;
44
+
45
+ /* ── diagram ────────────────────────────── */
46
+ --d-stroke: #9a9aa4;
47
+ --d-text: #e6e6ea;
48
+ --d-muted: #9a9aa4;
49
+ --d-accent: #e05a48;
50
+ --d-fill-1: #1c1f26;
51
+ --d-fill-2: #2e291e;
52
+ --d-fill-3: #37211f;
53
+ --d-fill-4: #1c1c26;
54
+ --d-fill-5: #2e251e;
55
+ --d-fill-6: #1f2f37;
56
+
57
+ /* ── terminal ───────────────────────────── */
58
+ --term-bg: #0c0c10;
59
+ --term-fg: #e6e6e2;
60
+ --term-prompt: #2b6cd7;
61
+ --term-cursor: #2b6cd7;
62
+ --term-selection: rgba(43, 108, 215, 0.28);
63
+ --ansi-black: #89919f;
64
+ --ansi-red: #d0726c;
65
+ --ansi-green: #6cd06d;
66
+ --ansi-yellow: #d0b46c;
67
+ --ansi-blue: #6c9dd0;
68
+ --ansi-magenta: #b86cd0;
69
+ --ansi-cyan: #6cd0c0;
70
+ --ansi-white: #dee0e3;
71
+ --ansi-bright-black: #a7acb4;
72
+ --ansi-bright-red: #e49a95;
73
+ --ansi-bright-green: #95e496;
74
+ --ansi-bright-yellow: #e4ce95;
75
+ --ansi-bright-blue: #95bce4;
76
+ --ansi-bright-magenta: #d195e4;
77
+ --ansi-bright-cyan: #95e4d7;
78
+ --ansi-bright-white: #f2f2f3;
79
+
80
+ /* ── builds ─────────────────────────────── */
81
+ --dim-opacity: 0.3;
82
+ }
83
+
84
+ .decklight h1, .decklight h2 { text-transform: uppercase; letter-spacing: 0.06em; font-style: italic; }
@@ -0,0 +1,82 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ Decklight theme · glacier
3
+ light · Arctic daylight — ice blue, crisp thin lines
4
+ Token contract: SPEC.md §5 — all values validated by test/contrast.mjs
5
+ ═══════════════════════════════════════════════════════════════ */
6
+
7
+ .decklight {
8
+ /* ── canvas ─────────────────────────────── */
9
+ --bg: #f3f7fb;
10
+ --bg-accent: #e7eef6;
11
+ --fg: #233140;
12
+ --muted: #5d6b7c;
13
+
14
+ /* ── type ───────────────────────────────── */
15
+ --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
16
+ --font-heading: "Avenir Next", Avenir, Futura, "Century Gothic", "Segoe UI", sans-serif;
17
+ --font-mono: "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
18
+ --heading-color: #1c4d7c;
19
+ --heading-weight: 500;
20
+ --link: #1e62a8;
21
+
22
+ /* ── accent ─────────────────────────────── */
23
+ --accent: #2a6ea8;
24
+ --accent-contrast: #f4faff;
25
+
26
+ /* ── blocks ─────────────────────────────── */
27
+ --block-bg: #fafafa;
28
+ --block-border: 1px solid #d5e0ec;
29
+ --block-radius: 8px;
30
+ --shadow: 0 4px 16px rgba(30, 60, 100, 0.08);
31
+
32
+ /* ── code ───────────────────────────────── */
33
+ --code-bg: #e7eef6;
34
+ --code-fg: #27343f;
35
+ --hl-keyword: #1e62a8;
36
+ --hl-string: #276b46;
37
+ --hl-number: #8a4a10;
38
+ --hl-comment: #61708a;
39
+ --hl-function: #7a3f92;
40
+ --hl-type: #0f6e73;
41
+ --hl-punct: #48566a;
42
+
43
+ /* ── diagram ────────────────────────────── */
44
+ --d-stroke: #54718c;
45
+ --d-text: #233140;
46
+ --d-muted: #6a7889;
47
+ --d-accent: #2f7fc4;
48
+ --d-fill-1: #dce9f5;
49
+ --d-fill-2: #d2e5f2;
50
+ --d-fill-3: #e2eef8;
51
+ --d-fill-4: #c9e2f0;
52
+ --d-fill-5: #d8ecf5;
53
+ --d-fill-6: #e5f0fa;
54
+
55
+ /* ── terminal ───────────────────────────── */
56
+ --term-bg: #16222e;
57
+ --term-fg: #dce5ee;
58
+ --term-prompt: #7cc2e8;
59
+ --term-cursor: #7cc2e8;
60
+ --term-selection: rgba(124, 194, 232, 0.26);
61
+ --ansi-black: #8494a5;
62
+ --ansi-red: #ee8a92;
63
+ --ansi-green: #8fd0a0;
64
+ --ansi-yellow: #e0c478;
65
+ --ansi-blue: #7cb5e5;
66
+ --ansi-magenta: #bda2d8;
67
+ --ansi-cyan: #7ed0d0;
68
+ --ansi-white: #e0e7ee;
69
+ --ansi-bright-black: #9caab9;
70
+ --ansi-bright-red: #f5acb2;
71
+ --ansi-bright-green: #aee2bc;
72
+ --ansi-bright-yellow: #ecd69e;
73
+ --ansi-bright-blue: #a3ccf0;
74
+ --ansi-bright-magenta: #d3bee8;
75
+ --ansi-bright-cyan: #a3e2e2;
76
+ --ansi-bright-white: #f8fbfd;
77
+
78
+ /* ── builds ─────────────────────────────── */
79
+ --dim-opacity: 0.35;
80
+ }
81
+
82
+ .decklight h1, .decklight h2 { letter-spacing: 0.01em; }
@@ -0,0 +1,82 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ Decklight theme · godfather
3
+ dark · undertaker black, serif ivory, one dark red rose
4
+ Inspired by The Godfather — black suits, a rose, old gold — palette kept canonical where possible,
5
+ every gated pair fitted to the WCAG contract.
6
+ Token contract: SPEC.md §5 — validated by test/contrast.mjs
7
+ ═══════════════════════════════════════════════════════════════ */
8
+
9
+ .decklight {
10
+ /* ── canvas ─────────────────────────────── */
11
+ --bg: #131110;
12
+ --bg-accent: none;
13
+ --fg: #e8e0cc;
14
+ --muted: #9a9081;
15
+
16
+ /* ── type ───────────────────────────────── */
17
+ --font-body: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
18
+ --font-heading: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
19
+ --font-mono: "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
20
+ --heading-color: #efe6ce;
21
+ --heading-weight: 600;
22
+ --link: #c8a05f;
23
+
24
+ /* ── accent ─────────────────────────────── */
25
+ --accent: #8e2f35;
26
+ --accent-contrast: #fbfbfa;
27
+
28
+ /* ── blocks ─────────────────────────────── */
29
+ --block-bg: #1f1b18;
30
+ --block-border: 1px solid #362e2a;
31
+ --block-radius: 4px;
32
+ --shadow: 0 8px 26px rgba(0, 0, 0, 0.5);
33
+
34
+ /* ── code ───────────────────────────────── */
35
+ --code-bg: #1a1715;
36
+ --code-fg: #e8e2d2;
37
+ --hl-keyword: #d8b878;
38
+ --hl-string: #b0c090;
39
+ --hl-number: #d09080;
40
+ --hl-comment: #7a7266;
41
+ --hl-function: #a8b8c8;
42
+ --hl-type: #c8b898;
43
+ --hl-punct: #aaa294;
44
+
45
+ /* ── diagram ────────────────────────────── */
46
+ --d-stroke: #9a9081;
47
+ --d-text: #e8e0cc;
48
+ --d-muted: #9a9081;
49
+ --d-accent: #b08c4a;
50
+ --d-fill-1: #26231c;
51
+ --d-fill-2: #2e1e1f;
52
+ --d-fill-3: #37291f;
53
+ --d-fill-4: #26261c;
54
+ --d-fill-5: #1e262e;
55
+ --d-fill-6: #371f27;
56
+
57
+ /* ── terminal ───────────────────────────── */
58
+ --term-bg: #0f0d0c;
59
+ --term-fg: #e6e6e2;
60
+ --term-prompt: #b03a42;
61
+ --term-cursor: #b03a42;
62
+ --term-selection: rgba(142, 47, 53, 0.28);
63
+ --ansi-black: #9f898b;
64
+ --ansi-red: #c38b79;
65
+ --ansi-green: #79c388;
66
+ --ansi-yellow: #c3bc79;
67
+ --ansi-blue: #7990c3;
68
+ --ansi-magenta: #bf79c3;
69
+ --ansi-cyan: #79c1c3;
70
+ --ansi-white: #e3dede;
71
+ --ansi-bright-black: #b4a7a8;
72
+ --ansi-bright-red: #dbad9e;
73
+ --ansi-bright-green: #9edbaa;
74
+ --ansi-bright-yellow: #dbd69e;
75
+ --ansi-bright-blue: #9eb1db;
76
+ --ansi-bright-magenta: #d89edb;
77
+ --ansi-bright-cyan: #9ed9db;
78
+ --ansi-bright-white: #f3f2f2;
79
+
80
+ /* ── builds ─────────────────────────────── */
81
+ --dim-opacity: 0.25;
82
+ }
@@ -0,0 +1,80 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ Decklight theme · graphite
3
+ dark · Matte charcoal with a machined orange accent — engineering clean
4
+ Token contract: SPEC.md §5 — all values validated by test/contrast.mjs
5
+ ═══════════════════════════════════════════════════════════════ */
6
+
7
+ .decklight {
8
+ /* ── canvas ─────────────────────────────── */
9
+ --bg: #17191c;
10
+ --bg-accent: #1f2226;
11
+ --fg: #e7e9ec;
12
+ --muted: #a2a8b0;
13
+
14
+ /* ── type ───────────────────────────────── */
15
+ --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
16
+ --font-heading: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
17
+ --font-mono: "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
18
+ --heading-color: #f5f6f8;
19
+ --heading-weight: 700;
20
+ --link: #7fb2f0;
21
+
22
+ /* ── accent ─────────────────────────────── */
23
+ --accent: #e49058;
24
+ --accent-contrast: #241000;
25
+
26
+ /* ── blocks ─────────────────────────────── */
27
+ --block-bg: #1e2126;
28
+ --block-border: 1px solid #2c3036;
29
+ --block-radius: 10px;
30
+ --shadow: 0 8px 24px rgba(0, 0, 0, 0.45);
31
+
32
+ /* ── code ───────────────────────────────── */
33
+ --code-bg: #101214;
34
+ --code-fg: #e2e5e9;
35
+ --hl-keyword: #f0955f;
36
+ --hl-string: #9ecf83;
37
+ --hl-number: #e8c268;
38
+ --hl-comment: #828a94;
39
+ --hl-function: #84b8f5;
40
+ --hl-type: #d3a6e8;
41
+ --hl-punct: #aab2bc;
42
+
43
+ /* ── diagram ────────────────────────────── */
44
+ --d-stroke: #8b929c;
45
+ --d-text: #e7e9ec;
46
+ --d-muted: #9aa1aa;
47
+ --d-accent: #ff8a3d;
48
+ --d-fill-1: #26292e;
49
+ --d-fill-2: #2d3138;
50
+ --d-fill-3: #33302a;
51
+ --d-fill-4: #2a2e35;
52
+ --d-fill-5: #30343b;
53
+ --d-fill-6: #282b31;
54
+
55
+ /* ── terminal ───────────────────────────── */
56
+ --term-bg: #0e1012;
57
+ --term-fg: #dcdfe3;
58
+ --term-prompt: #ff8a3d;
59
+ --term-cursor: #ff8a3d;
60
+ --term-selection: rgba(255, 138, 61, 0.30);
61
+ --ansi-black: #8b8f98;
62
+ --ansi-red: #ff8f73;
63
+ --ansi-green: #a3d977;
64
+ --ansi-yellow: #ffc857;
65
+ --ansi-blue: #7fb2f0;
66
+ --ansi-magenta: #d8a2e8;
67
+ --ansi-cyan: #7fdbd2;
68
+ --ansi-white: #e5e7ea;
69
+ --ansi-bright-black: #a5aab3;
70
+ --ansi-bright-red: #ffb09c;
71
+ --ansi-bright-green: #bde79a;
72
+ --ansi-bright-yellow: #ffd98a;
73
+ --ansi-bright-blue: #a5cbf7;
74
+ --ansi-bright-magenta: #e7c2f2;
75
+ --ansi-bright-cyan: #a5e9e2;
76
+ --ansi-bright-white: #fafafa;
77
+
78
+ /* ── builds ─────────────────────────────── */
79
+ --dim-opacity: 0.3;
80
+ }
@@ -0,0 +1,80 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ Decklight theme · harvest
3
+ light · October ivory — pumpkin, ochre, sturdy slab headings
4
+ Token contract: SPEC.md §5 — all values validated by test/contrast.mjs
5
+ ═══════════════════════════════════════════════════════════════ */
6
+
7
+ .decklight {
8
+ /* ── canvas ─────────────────────────────── */
9
+ --bg: #fbf5ea;
10
+ --bg-accent: #f5ead6;
11
+ --fg: #3f3120;
12
+ --muted: #71624c;
13
+
14
+ /* ── type ───────────────────────────────── */
15
+ --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
16
+ --font-heading: Rockwell, "Roboto Slab", "Bookman Old Style", Georgia, serif;
17
+ --font-mono: "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
18
+ --heading-color: #9a4a00;
19
+ --heading-weight: 700;
20
+ --link: #a04d10;
21
+
22
+ /* ── accent ─────────────────────────────── */
23
+ --accent: #8e5517;
24
+ --accent-contrast: #fff7ec;
25
+
26
+ /* ── blocks ─────────────────────────────── */
27
+ --block-bg: #fffaf0;
28
+ --block-border: 1px solid #e8d9be;
29
+ --block-radius: 8px;
30
+ --shadow: 0 5px 16px rgba(140, 90, 20, 0.09);
31
+
32
+ /* ── code ───────────────────────────────── */
33
+ --code-bg: #f5ead6;
34
+ --code-fg: #3d3122;
35
+ --hl-keyword: #a04d10;
36
+ --hl-string: #33691e;
37
+ --hl-number: #8a2e42;
38
+ --hl-comment: #6d604b;
39
+ --hl-function: #1d558a;
40
+ --hl-type: #7a3f92;
41
+ --hl-punct: #5a4c38;
42
+
43
+ /* ── diagram ────────────────────────────── */
44
+ --d-stroke: #8a734f;
45
+ --d-text: #3f3120;
46
+ --d-muted: #7c6c54;
47
+ --d-accent: #c26a00;
48
+ --d-fill-1: #f6e4c4;
49
+ --d-fill-2: #efe0ba;
50
+ --d-fill-3: #fae9cd;
51
+ --d-fill-4: #ecd7ac;
52
+ --d-fill-5: #f2e2c9;
53
+ --d-fill-6: #f8ecd2;
54
+
55
+ /* ── terminal ───────────────────────────── */
56
+ --term-bg: #2b2113;
57
+ --term-fg: #efe5d2;
58
+ --term-prompt: #f5b860;
59
+ --term-cursor: #f5b860;
60
+ --term-selection: rgba(245, 184, 96, 0.26);
61
+ --ansi-black: #9c8c72;
62
+ --ansi-red: #f28a70;
63
+ --ansi-green: #adc876;
64
+ --ansi-yellow: #f2c052;
65
+ --ansi-blue: #98b5d8;
66
+ --ansi-magenta: #cfa2c5;
67
+ --ansi-cyan: #95cdb0;
68
+ --ansi-white: #ede2cc;
69
+ --ansi-bright-black: #ad9e84;
70
+ --ansi-bright-red: #f7ab92;
71
+ --ansi-bright-green: #c5da98;
72
+ --ansi-bright-yellow: #f8d47e;
73
+ --ansi-bright-blue: #b5cae5;
74
+ --ansi-bright-magenta: #dfbcd8;
75
+ --ansi-bright-cyan: #b2e0c6;
76
+ --ansi-bright-white: #fdf6e9;
77
+
78
+ /* ── builds ─────────────────────────────── */
79
+ --dim-opacity: 0.35;
80
+ }
@@ -0,0 +1,83 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ Decklight theme · ibm-modern
3
+ dark · Carbon-design g100: Plex type, IBM Blue 60, engineered calm
4
+ Token contract: SPEC.md §5 — all values validated by test/contrast.mjs
5
+ rule-exception: R3 official IBM Blue 60 (#0f62fe) is the identity
6
+ ═══════════════════════════════════════════════════════════════ */
7
+
8
+ .decklight {
9
+ /* ── canvas ─────────────────────────────── */
10
+ --bg: #151619;
11
+ --bg-accent: none;
12
+ --fg: #f2f4f8;
13
+ --muted: #a6a9b3;
14
+
15
+ /* ── type ───────────────────────────────── */
16
+ --font-body: "IBM Plex Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
17
+ --font-heading: "IBM Plex Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
18
+ --font-mono: "IBM Plex Mono", "SF Mono", ui-monospace, Menlo, Consolas, monospace;
19
+ --heading-color: #f2f4f8;
20
+ --heading-weight: 600;
21
+ --link: #78a9ff;
22
+
23
+ /* ── accent ─────────────────────────────── */
24
+ --accent: #0f62fe;
25
+ --accent-contrast: #f6f8ff;
26
+
27
+ /* ── blocks ─────────────────────────────── */
28
+ --block-bg: #24262b;
29
+ --block-border: 1px solid #383b42;
30
+ --block-radius: 8px;
31
+ --shadow: 0 8px 28px rgba(0, 0, 0, 0.55);
32
+
33
+ /* ── code ───────────────────────────────── */
34
+ --code-bg: #1a1c20;
35
+ --code-fg: #f2f4f8;
36
+ --hl-keyword: #78a9ff;
37
+ --hl-string: #6fdc8c;
38
+ --hl-number: #f1c21b;
39
+ --hl-comment: #9298a3;
40
+ --hl-function: #be95ff;
41
+ --hl-type: #3ddbd9;
42
+ --hl-punct: #c1c7cd;
43
+
44
+ /* ── diagram ────────────────────────────── */
45
+ --d-stroke: #6f7683;
46
+ --d-text: #f2f4f8;
47
+ --d-muted: #a6a9b3;
48
+ --d-accent: #78a9ff;
49
+ --d-fill-1: #1f2732;
50
+ --d-fill-2: #21272a;
51
+ --d-fill-3: #262630;
52
+ --d-fill-4: #1c2a24;
53
+ --d-fill-5: #2a2431;
54
+ --d-fill-6: #252017;
55
+
56
+ /* ── terminal ───────────────────────────── */
57
+ --term-bg: #101114;
58
+ --term-fg: #f2f4f8;
59
+ --term-prompt: #42be65;
60
+ --term-cursor: #f2f4f8;
61
+ --term-selection: rgba(15, 98, 254, 0.35);
62
+ --ansi-black: #878d96;
63
+ --ansi-red: #fa4d56;
64
+ --ansi-green: #42be65;
65
+ --ansi-yellow: #f1c21b;
66
+ --ansi-blue: #78a9ff;
67
+ --ansi-magenta: #be95ff;
68
+ --ansi-cyan: #3ddbd9;
69
+ --ansi-white: #dde1e6;
70
+ --ansi-bright-black: #a2a9b0;
71
+ --ansi-bright-red: #ff8389;
72
+ --ansi-bright-green: #6fdc8c;
73
+ --ansi-bright-yellow: #fddc69;
74
+ --ansi-bright-blue: #a6c8ff;
75
+ --ansi-bright-magenta: #d4bbff;
76
+ --ansi-bright-cyan: #9ef0f0;
77
+ --ansi-bright-white: #f6f8ff;
78
+
79
+ /* ── builds ─────────────────────────────── */
80
+ --dim-opacity: 0.3;
81
+ }
82
+
83
+ .decklight h1, .decklight h2 { letter-spacing: -0.01em; }
@@ -0,0 +1,84 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ Decklight theme · ibm-oldschool
3
+ dark · 3270 green-phosphor mainframe: one green, many brightnesses
4
+ Token contract: SPEC.md §5 — all values validated by test/contrast.mjs
5
+ rule-exception: R1 green phosphor plus an amber caution lamp is the identity
6
+ rule-exception: R5 phosphor CRT — one green at many brightnesses is the identity
7
+ ═══════════════════════════════════════════════════════════════ */
8
+
9
+ .decklight {
10
+ /* ── canvas ─────────────────────────────── */
11
+ --bg: #0a0f0b;
12
+ --bg-accent: radial-gradient(ellipse at 50% 38%, #0d1710 0%, #0a0f0b 72%);
13
+ --fg: #4ce063;
14
+ --muted: #35a04b;
15
+
16
+ /* ── type ───────────────────────────────── */
17
+ --font-body: "IBM Plex Mono", "Courier New", Courier, monospace;
18
+ --font-heading: "IBM Plex Mono", "Courier New", Courier, monospace;
19
+ --font-mono: "IBM Plex Mono", "Courier New", Courier, monospace;
20
+ --heading-color: #5ff277;
21
+ --heading-weight: 700;
22
+ --link: #8df2a3;
23
+
24
+ /* ── accent ─────────────────────────────── */
25
+ --accent: #e2b263;
26
+ --accent-contrast: #1d1500;
27
+
28
+ /* ── blocks ─────────────────────────────── */
29
+ --block-bg: #0e1810;
30
+ --block-border: 1px solid #1e3b26;
31
+ --block-radius: 2px;
32
+ --shadow: 0 0 26px rgba(76, 224, 99, 0.14);
33
+
34
+ /* ── code ───────────────────────────────── */
35
+ --code-bg: #0c130d;
36
+ --code-fg: #4ce063;
37
+ --hl-keyword: #8df2a3;
38
+ --hl-string: #bdf2c8;
39
+ --hl-number: #e2b263;
40
+ --hl-comment: #2f8f43;
41
+ --hl-function: #a3f2b4;
42
+ --hl-type: #d6f2a3;
43
+ --hl-punct: #57c973;
44
+
45
+ /* ── diagram ────────────────────────────── */
46
+ --d-stroke: #2f7a43;
47
+ --d-text: #5ce873;
48
+ --d-muted: #39ab50;
49
+ --d-accent: #e2b263;
50
+ --d-fill-1: #0d1a10;
51
+ --d-fill-2: #0f2013;
52
+ --d-fill-3: #101b12;
53
+ --d-fill-4: #12240f;
54
+ --d-fill-5: #0e1d15;
55
+ --d-fill-6: #132612;
56
+
57
+ /* ── terminal ───────────────────────────── */
58
+ --term-bg: #081008;
59
+ --term-fg: #4ce063;
60
+ --term-prompt: #e2b263;
61
+ --term-cursor: #4ce063;
62
+ --term-selection: rgba(76, 224, 99, 0.3);
63
+ --ansi-black: #2f7a43;
64
+ --ansi-red: #e07a63;
65
+ --ansi-green: #4ce063;
66
+ --ansi-yellow: #e2b263;
67
+ --ansi-blue: #63b8d9;
68
+ --ansi-magenta: #c98fd1;
69
+ --ansi-cyan: #5fd9c2;
70
+ --ansi-white: #c9eecf;
71
+ --ansi-bright-black: #3f9e56;
72
+ --ansi-bright-red: #f2a08c;
73
+ --ansi-bright-green: #7ef29a;
74
+ --ansi-bright-yellow: #f8d178;
75
+ --ansi-bright-blue: #8fd1ec;
76
+ --ansi-bright-magenta: #ddb0e3;
77
+ --ansi-bright-cyan: #8ceada;
78
+ --ansi-bright-white: #e7f8ea;
79
+
80
+ /* ── builds ─────────────────────────────── */
81
+ --dim-opacity: 0.3;
82
+ }
83
+
84
+ .decklight h1, .decklight h2 { text-transform: uppercase; letter-spacing: 0.06em; }
package/themes/ink.css ADDED
@@ -0,0 +1,82 @@
1
+ /* ═══════════════════════════════════════════════════════════════
2
+ Decklight theme · ink
3
+ dark · Sumi-e minimal — warm black, unbleached paper text, one vermillion stroke
4
+ Token contract: SPEC.md §5 — all values validated by test/contrast.mjs
5
+ ═══════════════════════════════════════════════════════════════ */
6
+
7
+ .decklight {
8
+ /* ── canvas ─────────────────────────────── */
9
+ --bg: #191714;
10
+ --bg-accent: #211e1a;
11
+ --fg: #f2ead9;
12
+ --muted: #b5ab97;
13
+
14
+ /* ── type ───────────────────────────────── */
15
+ --font-body: Seravek, "Gill Sans", "Segoe UI", Verdana, sans-serif;
16
+ --font-heading: Seravek, "Gill Sans", "Segoe UI", Verdana, sans-serif;
17
+ --font-mono: "SF Mono", SFMono-Regular, ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
18
+ --heading-color: #f8f2e4;
19
+ --heading-weight: 500;
20
+ --link: #f0a08a;
21
+
22
+ /* ── accent ─────────────────────────────── */
23
+ --accent: #e36356;
24
+ --accent-contrast: #2b0703;
25
+
26
+ /* ── blocks ─────────────────────────────── */
27
+ --block-bg: #1f1c18;
28
+ --block-border: 1px solid #35302a;
29
+ --block-radius: 2px;
30
+ --shadow: none;
31
+
32
+ /* ── code ───────────────────────────────── */
33
+ --code-bg: #14120f;
34
+ --code-fg: #ece4d2;
35
+ --hl-keyword: #eea18c;
36
+ --hl-string: #c5c58d;
37
+ --hl-number: #e0b880;
38
+ --hl-comment: #918876;
39
+ --hl-function: #a6bcd2;
40
+ --hl-type: #cdb89e;
41
+ --hl-punct: #b0a795;
42
+
43
+ /* ── diagram ────────────────────────────── */
44
+ --d-stroke: #8a8272;
45
+ --d-text: #f2ead9;
46
+ --d-muted: #a59c88;
47
+ --d-accent: #ff4d3a;
48
+ --d-fill-1: #242018;
49
+ --d-fill-2: #2a251c;
50
+ --d-fill-3: #211f1d;
51
+ --d-fill-4: #2e2820;
52
+ --d-fill-5: #262320;
53
+ --d-fill-6: #2b2419;
54
+
55
+ /* ── terminal ───────────────────────────── */
56
+ --term-bg: #12100d;
57
+ --term-fg: #e8e0cf;
58
+ --term-prompt: #ff4d3a;
59
+ --term-cursor: #f2ead9;
60
+ --term-selection: rgba(242, 234, 217, 0.2);
61
+ --term-chrome: none;
62
+ --ansi-black: #948b7a;
63
+ --ansi-red: #f0796a;
64
+ --ansi-green: #a8bc7f;
65
+ --ansi-yellow: #dcbc72;
66
+ --ansi-blue: #93accc;
67
+ --ansi-magenta: #c8a0b8;
68
+ --ansi-cyan: #95c2b5;
69
+ --ansi-white: #ece4d4;
70
+ --ansi-bright-black: #a89f8d;
71
+ --ansi-bright-red: #f59f93;
72
+ --ansi-bright-green: #c0d29c;
73
+ --ansi-bright-yellow: #e8cf98;
74
+ --ansi-bright-blue: #b0c5e0;
75
+ --ansi-bright-magenta: #dabbcd;
76
+ --ansi-bright-cyan: #b3d8cc;
77
+ --ansi-bright-white: #fbf6ea;
78
+
79
+ /* ── builds ─────────────────────────────── */
80
+ --dim-opacity: 0.35;
81
+ --build-duration: 220ms;
82
+ }