stagecraft 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 (133) hide show
  1. package/AGENT.md +792 -0
  2. package/LICENSE +21 -0
  3. package/README.md +210 -0
  4. package/bin/cli.js +51 -0
  5. package/bin/export.js +137 -0
  6. package/bin/init.js +52 -0
  7. package/bin/lib/edit-ops.js +405 -0
  8. package/bin/serve.js +278 -0
  9. package/dist/stagecraft.bundle.css +4443 -0
  10. package/dist/stagecraft.bundle.js +7621 -0
  11. package/dist/themes/brand.bundle.css +5262 -0
  12. package/dist/themes/neon.bundle.css +5289 -0
  13. package/dist/themes/paper.bundle.css +5276 -0
  14. package/dist/themes/phosphor.bundle.css +4443 -0
  15. package/dist/themes/shopware.bundle.css +5850 -0
  16. package/examples/closing-card.js +74 -0
  17. package/examples/orchestration-graph.js +156 -0
  18. package/examples/terminal-log.js +109 -0
  19. package/examples/token-stream.js +96 -0
  20. package/examples/whoami.js +90 -0
  21. package/package.json +41 -0
  22. package/src/components/activity-list.js +75 -0
  23. package/src/components/agenda.js +79 -0
  24. package/src/components/bar-chart.js +162 -0
  25. package/src/components/before-after.js +135 -0
  26. package/src/components/bento.js +73 -0
  27. package/src/components/big-number.js +87 -0
  28. package/src/components/callout.js +75 -0
  29. package/src/components/checklist.js +81 -0
  30. package/src/components/code-block.js +141 -0
  31. package/src/components/code-diff.js +98 -0
  32. package/src/components/compare.js +85 -0
  33. package/src/components/counter.js +80 -0
  34. package/src/components/cta.js +69 -0
  35. package/src/components/cycle.js +146 -0
  36. package/src/components/definition.js +96 -0
  37. package/src/components/donut-chart.js +179 -0
  38. package/src/components/full-image.js +82 -0
  39. package/src/components/funnel.js +111 -0
  40. package/src/components/gauge.js +147 -0
  41. package/src/components/heatmap.js +141 -0
  42. package/src/components/image-grid.js +80 -0
  43. package/src/components/image-text.js +96 -0
  44. package/src/components/kinetic-text.js +72 -0
  45. package/src/components/kpi.js +106 -0
  46. package/src/components/line-chart.js +215 -0
  47. package/src/components/manifesto.js +104 -0
  48. package/src/components/marquee.js +63 -0
  49. package/src/components/matrix2x2.js +151 -0
  50. package/src/components/pillars.js +80 -0
  51. package/src/components/pricing.js +90 -0
  52. package/src/components/process-flow.js +133 -0
  53. package/src/components/progress.js +136 -0
  54. package/src/components/punchline.js +82 -0
  55. package/src/components/pyramid.js +107 -0
  56. package/src/components/qanda.js +60 -0
  57. package/src/components/quote.js +70 -0
  58. package/src/components/roadmap.js +130 -0
  59. package/src/components/section-card.js +45 -0
  60. package/src/components/shift-arrow.js +41 -0
  61. package/src/components/spark-line.js +147 -0
  62. package/src/components/spotlight.js +85 -0
  63. package/src/components/statement.js +106 -0
  64. package/src/components/stats.js +91 -0
  65. package/src/components/steps.js +83 -0
  66. package/src/components/swot.js +110 -0
  67. package/src/components/team-grid.js +87 -0
  68. package/src/components/testimonial.js +99 -0
  69. package/src/components/timeline.js +91 -0
  70. package/src/components/tip.js +63 -0
  71. package/src/components/venn.js +198 -0
  72. package/src/edit-mode.js +1256 -0
  73. package/src/engine.js +823 -0
  74. package/src/helpers.js +169 -0
  75. package/src/transitions.js +101 -0
  76. package/starter/index.html +40 -0
  77. package/starter/slides/00-title.js +12 -0
  78. package/starter/stagecraft.config.js +8 -0
  79. package/themes/brand/base.css +4 -0
  80. package/themes/brand/components-business.css +173 -0
  81. package/themes/brand/components-chart.css +65 -0
  82. package/themes/brand/components-content.css +126 -0
  83. package/themes/brand/components-data.css +162 -0
  84. package/themes/brand/components-diagram.css +115 -0
  85. package/themes/brand/components-layout.css +112 -0
  86. package/themes/brand/components.css +46 -0
  87. package/themes/brand/manifest.json +20 -0
  88. package/themes/brand/tokens.css +20 -0
  89. package/themes/brand/transitions.css +4 -0
  90. package/themes/neon/base.css +10 -0
  91. package/themes/neon/components-business.css +189 -0
  92. package/themes/neon/components-chart.css +70 -0
  93. package/themes/neon/components-content.css +112 -0
  94. package/themes/neon/components-data.css +160 -0
  95. package/themes/neon/components-diagram.css +109 -0
  96. package/themes/neon/components-layout.css +87 -0
  97. package/themes/neon/components.css +87 -0
  98. package/themes/neon/manifest.json +21 -0
  99. package/themes/neon/tokens.css +17 -0
  100. package/themes/neon/transitions.css +13 -0
  101. package/themes/paper/base.css +9 -0
  102. package/themes/paper/components-business.css +196 -0
  103. package/themes/paper/components-chart.css +74 -0
  104. package/themes/paper/components-content.css +108 -0
  105. package/themes/paper/components-data.css +168 -0
  106. package/themes/paper/components-diagram.css +89 -0
  107. package/themes/paper/components-layout.css +105 -0
  108. package/themes/paper/components.css +60 -0
  109. package/themes/paper/manifest.json +10 -0
  110. package/themes/paper/tokens.css +21 -0
  111. package/themes/paper/transitions.css +11 -0
  112. package/themes/phosphor/base.css +511 -0
  113. package/themes/phosphor/components-business.css +818 -0
  114. package/themes/phosphor/components-chart.css +415 -0
  115. package/themes/phosphor/components-content.css +530 -0
  116. package/themes/phosphor/components-data.css +824 -0
  117. package/themes/phosphor/components-diagram.css +427 -0
  118. package/themes/phosphor/components-layout.css +450 -0
  119. package/themes/phosphor/components.css +223 -0
  120. package/themes/phosphor/manifest.json +11 -0
  121. package/themes/phosphor/tokens.css +17 -0
  122. package/themes/phosphor/transitions.css +213 -0
  123. package/themes/shopware/base.css +94 -0
  124. package/themes/shopware/components-business.css +344 -0
  125. package/themes/shopware/components-chart.css +121 -0
  126. package/themes/shopware/components-content.css +169 -0
  127. package/themes/shopware/components-data.css +219 -0
  128. package/themes/shopware/components-diagram.css +129 -0
  129. package/themes/shopware/components-layout.css +166 -0
  130. package/themes/shopware/components.css +83 -0
  131. package/themes/shopware/manifest.json +21 -0
  132. package/themes/shopware/tokens.css +68 -0
  133. package/themes/shopware/transitions.css +22 -0
@@ -0,0 +1,168 @@
1
+ /* Stagecraft — Paper theme: data-visualization component overrides. */
2
+ @import url('../phosphor/components-data.css');
3
+
4
+ /* ============================================================
5
+ * KPI — white card, thin border, no glow
6
+ * ============================================================ */
7
+ :root[data-theme="paper"] .kpi {
8
+ background: #FFFFFF;
9
+ border: 1px solid var(--dim-2);
10
+ }
11
+ :root[data-theme="paper"] .kpi.in {
12
+ border-color: color-mix(in srgb, var(--data-color) 50%, var(--dim-2));
13
+ box-shadow: none;
14
+ }
15
+ :root[data-theme="paper"] .kpi-num {
16
+ text-shadow: none;
17
+ }
18
+
19
+ /* ============================================================
20
+ * DonutChart
21
+ * ============================================================ */
22
+ :root[data-theme="paper"] .donut-arc {
23
+ filter: none;
24
+ }
25
+ :root[data-theme="paper"] .donut-dot {
26
+ box-shadow: none;
27
+ }
28
+
29
+ /* ============================================================
30
+ * LineChart
31
+ * ============================================================ */
32
+ :root[data-theme="paper"] .lc-grid {
33
+ stroke: var(--dim-2);
34
+ opacity: 0.9;
35
+ }
36
+ :root[data-theme="paper"] .lc-y-label,
37
+ :root[data-theme="paper"] .lc-x-label {
38
+ font-family: var(--display);
39
+ }
40
+ :root[data-theme="paper"] .lc-line {
41
+ filter: none;
42
+ }
43
+ :root[data-theme="paper"] .lc-dot-leg {
44
+ box-shadow: none;
45
+ }
46
+
47
+ /* ============================================================
48
+ * Gauge
49
+ * ============================================================ */
50
+ :root[data-theme="paper"] .g-fill {
51
+ filter: none;
52
+ }
53
+ :root[data-theme="paper"] .g-tick {
54
+ stroke: var(--dim);
55
+ opacity: 0.6;
56
+ }
57
+ :root[data-theme="paper"] .g-num {
58
+ text-shadow: none;
59
+ }
60
+
61
+ /* ============================================================
62
+ * SparkLine — white card
63
+ * ============================================================ */
64
+ :root[data-theme="paper"] .sparkline {
65
+ background: #FFFFFF;
66
+ border: 1px solid var(--dim-2);
67
+ }
68
+ :root[data-theme="paper"] .sl-num {
69
+ text-shadow: none;
70
+ }
71
+ :root[data-theme="paper"] .sl-line {
72
+ filter: none;
73
+ }
74
+
75
+ /* ============================================================
76
+ * Heatmap — accent shades on light bg
77
+ * ============================================================ */
78
+ :root[data-theme="paper"] .hm-cell {
79
+ /* base track is dim-2; intensity layers --hm-base over it */
80
+ background: color-mix(in srgb, var(--hm-base) calc(var(--hm-intensity) * 90%), #ECECE8);
81
+ border: 1px solid color-mix(in srgb, var(--hm-base) calc(var(--hm-intensity) * 35%), var(--dim-2));
82
+ }
83
+ :root[data-theme="paper"] .hm-scale-step {
84
+ background: color-mix(in srgb, var(--hm-base) calc(var(--hm-intensity) * 90%), #ECECE8);
85
+ border: 1px solid color-mix(in srgb, var(--hm-base) calc(var(--hm-intensity) * 35%), var(--dim-2));
86
+ }
87
+
88
+ /* ============================================================
89
+ * Roadmap
90
+ * ============================================================ */
91
+ :root[data-theme="paper"] .rm-lane-track {
92
+ background:
93
+ repeating-linear-gradient(
94
+ to right,
95
+ transparent 0,
96
+ transparent calc((100% / var(--rm-cols, 12)) - 1px),
97
+ var(--dim-2) calc((100% / var(--rm-cols, 12)) - 1px),
98
+ var(--dim-2) calc(100% / var(--rm-cols, 12))
99
+ ),
100
+ #FFFFFF;
101
+ border: 1px solid var(--dim-2);
102
+ }
103
+ :root[data-theme="paper"] .rm-bar {
104
+ background: color-mix(in srgb, var(--rm-bar-color) 14%, #FFFFFF);
105
+ border: 1px solid color-mix(in srgb, var(--rm-bar-color) 65%, var(--dim-2));
106
+ /* no glow shadow */
107
+ box-shadow: inset 3px 0 0 var(--rm-bar-color);
108
+ }
109
+
110
+ /* ============================================================
111
+ * SWOT — light fills, no glow letters
112
+ * ============================================================ */
113
+ :root[data-theme="paper"] .swot {
114
+ background: var(--dim-2);
115
+ border: 1px solid var(--dim-2);
116
+ }
117
+ :root[data-theme="paper"] .swot-cell {
118
+ background: #FFFFFF;
119
+ }
120
+ :root[data-theme="paper"] .swot-cell.in {
121
+ background: color-mix(in srgb, var(--swot-color) 6%, #FFFFFF);
122
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--swot-color) 50%, var(--dim-2));
123
+ }
124
+ :root[data-theme="paper"] .swot-letter {
125
+ text-shadow: none;
126
+ font-family: var(--mono); /* serif for swot letter accent */
127
+ }
128
+
129
+ /* ============================================================
130
+ * CodeBlock — terminal look on light background.
131
+ * CodeBlock stays monospaced because it's code.
132
+ * ============================================================ */
133
+ :root[data-theme="paper"] .codeblock {
134
+ background: #FFFFFF;
135
+ border: 1px solid var(--dim-2);
136
+ }
137
+ :root[data-theme="paper"] .cb-head {
138
+ background: #F4F4EF;
139
+ border-bottom: 1px solid var(--dim-2);
140
+ }
141
+ :root[data-theme="paper"] .cb-line--highlight {
142
+ background: color-mix(in srgb, var(--accent) 10%, transparent);
143
+ box-shadow: inset 2px 0 0 var(--accent);
144
+ }
145
+
146
+ /* ============================================================
147
+ * CodeDiff — same, monospaced
148
+ * ============================================================ */
149
+ :root[data-theme="paper"] .codediff {
150
+ background: #FFFFFF;
151
+ border: 1px solid var(--dim-2);
152
+ }
153
+ :root[data-theme="paper"] .cd-head {
154
+ background: #F4F4EF;
155
+ border-bottom: 1px solid var(--dim-2);
156
+ }
157
+ :root[data-theme="paper"] .cd-line--add {
158
+ background: color-mix(in srgb, var(--accent) 9%, transparent);
159
+ }
160
+ :root[data-theme="paper"] .cd-line--add .cd-text {
161
+ color: color-mix(in srgb, var(--accent) 35%, var(--fg));
162
+ }
163
+ :root[data-theme="paper"] .cd-line--remove {
164
+ background: color-mix(in srgb, var(--red) 8%, transparent);
165
+ }
166
+ :root[data-theme="paper"] .cd-line--remove .cd-text {
167
+ color: color-mix(in srgb, var(--red) 35%, var(--fg));
168
+ }
@@ -0,0 +1,89 @@
1
+ /* Stagecraft — Paper theme: diagram component overrides. */
2
+ @import url('../phosphor/components-diagram.css');
3
+
4
+ /* Local card vars for paper look */
5
+ :root[data-theme="paper"] {
6
+ --diag-card-bg: #FFFFFF;
7
+ --diag-card-border: var(--dim-2);
8
+ }
9
+
10
+ /* ===========================================================================
11
+ * Pillars
12
+ * ===========================================================================*/
13
+ :root[data-theme="paper"] .pillar:hover .pillar-icon {
14
+ /* drop drop-shadow glow */
15
+ animation: none;
16
+ }
17
+ :root[data-theme="paper"] .pillar-icon {
18
+ color: var(--accent);
19
+ }
20
+ :root[data-theme="paper"] .pillars-intro {
21
+ font-family: var(--mono); /* serif emphasis */
22
+ }
23
+
24
+ /* ===========================================================================
25
+ * Timeline
26
+ * ===========================================================================*/
27
+ :root[data-theme="paper"] .tl-dot {
28
+ background: #FFFFFF;
29
+ border: 1px solid var(--dim);
30
+ }
31
+ :root[data-theme="paper"] .tl-event.active .tl-dot {
32
+ background: var(--accent);
33
+ border-color: var(--accent);
34
+ box-shadow: 0 0 0 4px var(--accent-soft);
35
+ }
36
+ :root[data-theme="paper"] .tl-icon {
37
+ color: #FFFFFF;
38
+ }
39
+ :root[data-theme="paper"] .tl-event:not(.active) .tl-icon { color: var(--dim); }
40
+
41
+ /* ===========================================================================
42
+ * Pyramid
43
+ * ===========================================================================*/
44
+ :root[data-theme="paper"] .pyr-shape {
45
+ background: #FFFFFF;
46
+ border: 1px solid var(--dim-2);
47
+ }
48
+ :root[data-theme="paper"] .pyr-layer.pyc-accent .pyr-shape {
49
+ background: var(--accent-soft);
50
+ border-color: var(--accent);
51
+ }
52
+ :root[data-theme="paper"] .pyr-layer.pyc-blue .pyr-shape { background: rgba(31, 79, 135, 0.08); border-color: var(--blue); }
53
+ :root[data-theme="paper"] .pyr-layer.pyc-amber .pyr-shape { background: rgba(181, 127, 44, 0.10); border-color: var(--amber); }
54
+ :root[data-theme="paper"] .pyr-layer.pyc-red .pyr-shape { background: rgba(155, 44, 44, 0.08); border-color: var(--red); }
55
+
56
+ /* ===========================================================================
57
+ * Cycle
58
+ * ===========================================================================*/
59
+ :root[data-theme="paper"] .cyc-ring {
60
+ stroke: var(--dim-2);
61
+ opacity: 0.8;
62
+ }
63
+ :root[data-theme="paper"] .cyc-arc {
64
+ stroke: var(--accent);
65
+ opacity: 0;
66
+ }
67
+ :root[data-theme="paper"] .cyc-arc.in { opacity: 0.8; }
68
+ :root[data-theme="paper"] .cyc-item {
69
+ background: #FFFFFF;
70
+ border: 1px solid var(--dim-2);
71
+ }
72
+ :root[data-theme="paper"] .cyc-item.cyc-accent { border-color: var(--accent); }
73
+ :root[data-theme="paper"] .cyc-item.cyc-blue { border-color: var(--blue); }
74
+ :root[data-theme="paper"] .cyc-item.cyc-amber { border-color: var(--amber); }
75
+ :root[data-theme="paper"] .cyc-item.cyc-red { border-color: var(--red); }
76
+
77
+ /* ===========================================================================
78
+ * Funnel
79
+ * ===========================================================================*/
80
+ :root[data-theme="paper"] .fn-shape {
81
+ background: #FFFFFF;
82
+ border-top: 1px solid var(--dim-2);
83
+ border-bottom: 1px solid var(--dim-2);
84
+ }
85
+ :root[data-theme="paper"] .fn-stage.fnc-accent .fn-shape { background: var(--accent-soft); border-color: var(--accent); }
86
+ :root[data-theme="paper"] .fn-stage.fnc-blue .fn-shape { background: rgba(31, 79, 135, 0.08); border-color: var(--blue); }
87
+ :root[data-theme="paper"] .fn-stage.fnc-amber .fn-shape { background: rgba(181, 127, 44, 0.10); border-color: var(--amber); }
88
+ :root[data-theme="paper"] .fn-stage.fnc-red .fn-shape { background: rgba(155, 44, 44, 0.08); border-color: var(--red); }
89
+ :root[data-theme="paper"] .fn-stage.fnc-dim .fn-shape { background: rgba(0,0,0,0.02); border-color: var(--dim-2); }
@@ -0,0 +1,105 @@
1
+ /* Stagecraft — Paper theme: layout component overrides. */
2
+ @import url('../phosphor/components-layout.css');
3
+
4
+ /* ---------------------------------------------------------------------------
5
+ * ImageText
6
+ * ------------------------------------------------------------------------- */
7
+ :root[data-theme="paper"] .it-figure {
8
+ background: #FFFFFF;
9
+ }
10
+ :root[data-theme="paper"] .it-img {
11
+ /* warmer print-like rendering */
12
+ filter: saturate(0.85) contrast(1.02);
13
+ }
14
+ :root[data-theme="paper"] .it-img-frame {
15
+ /* drop the green accent glow + heavy dark dropshadow; use thin grey rule */
16
+ box-shadow:
17
+ inset 0 0 0 1px var(--dim-2),
18
+ 0 0 0 1px var(--dim-2),
19
+ 0 12px 28px -16px rgba(31, 79, 135, 0.18);
20
+ }
21
+
22
+ /* ---------------------------------------------------------------------------
23
+ * FullImage — scrims need to come from light not dark
24
+ * ------------------------------------------------------------------------- */
25
+ :root[data-theme="paper"] .fi-scrim--center { background: radial-gradient(ellipse at center, rgba(250,250,247,0.55) 0%, rgba(250,250,247,0.05) 70%); }
26
+ :root[data-theme="paper"] .fi-scrim--top { background: linear-gradient(180deg, rgba(250,250,247,0.85), transparent 55%); }
27
+ :root[data-theme="paper"] .fi-scrim--bottom-left { background: linear-gradient(45deg, rgba(250,250,247,0.92), transparent 65%); }
28
+ :root[data-theme="paper"] .fi-scrim--bottom-right { background: linear-gradient(315deg, rgba(250,250,247,0.92), transparent 65%); }
29
+
30
+ :root[data-theme="paper"] .fi-headline {
31
+ color: var(--fg);
32
+ text-shadow: 0 1px 14px rgba(255,255,255,0.55);
33
+ }
34
+ :root[data-theme="paper"] .fi-body {
35
+ color: var(--fg);
36
+ }
37
+
38
+ /* ---------------------------------------------------------------------------
39
+ * Quote
40
+ * ------------------------------------------------------------------------- */
41
+ :root[data-theme="paper"] .q-mark {
42
+ color: var(--accent);
43
+ text-shadow: none;
44
+ font-family: var(--mono); /* Source Serif quote marks */
45
+ }
46
+ :root[data-theme="paper"] .q-text {
47
+ font-family: var(--mono); /* serif for editorial italic */
48
+ }
49
+
50
+ /* ---------------------------------------------------------------------------
51
+ * BigNumber
52
+ * ------------------------------------------------------------------------- */
53
+ :root[data-theme="paper"] .bn-num {
54
+ color: var(--accent);
55
+ text-shadow: none;
56
+ }
57
+
58
+ /* ---------------------------------------------------------------------------
59
+ * Stats
60
+ * ------------------------------------------------------------------------- */
61
+ :root[data-theme="paper"] .stat {
62
+ background: #FFFFFF;
63
+ border: 1px solid var(--dim-2);
64
+ }
65
+ :root[data-theme="paper"] .stat::before {
66
+ height: 2px;
67
+ }
68
+ :root[data-theme="paper"] .stat--accent::before {
69
+ background: var(--accent);
70
+ box-shadow: none;
71
+ }
72
+ :root[data-theme="paper"] .stat--accent .stat-num {
73
+ color: var(--accent);
74
+ text-shadow: none;
75
+ }
76
+
77
+ /* ---------------------------------------------------------------------------
78
+ * Bento
79
+ * ------------------------------------------------------------------------- */
80
+ :root[data-theme="paper"] .bento-cell {
81
+ background: #FFFFFF;
82
+ border: 1px solid var(--dim-2);
83
+ }
84
+ :root[data-theme="paper"] .bento-cell--accent {
85
+ border-color: var(--accent);
86
+ box-shadow: none;
87
+ background: var(--accent-soft);
88
+ }
89
+ :root[data-theme="paper"] .bento-cell--accent .bento-heading { color: var(--accent); }
90
+ :root[data-theme="paper"] .bento-cell--amber {
91
+ border-color: rgba(181, 127, 44, 0.45);
92
+ background: rgba(181, 127, 44, 0.06);
93
+ }
94
+ :root[data-theme="paper"] .bento-cell--blue {
95
+ border-color: rgba(31, 79, 135, 0.4);
96
+ background: rgba(31, 79, 135, 0.05);
97
+ }
98
+ :root[data-theme="paper"] .bento-cell--image .bento-heading {
99
+ color: #FFFFFF;
100
+ text-shadow: 0 1px 12px rgba(0,0,0,0.55);
101
+ }
102
+ :root[data-theme="paper"] .bento-cell--image .bento-body {
103
+ color: #FFFFFF;
104
+ opacity: 0.9;
105
+ }
@@ -0,0 +1,60 @@
1
+ /* Stagecraft — Paper theme: Layer-2 component styles.
2
+ * Imports phosphor base layer + paper-specific family sub-files. */
3
+
4
+ @import url('../phosphor/components.css');
5
+ @import url('./components-layout.css');
6
+ @import url('./components-diagram.css');
7
+ @import url('./components-chart.css');
8
+ @import url('./components-data.css');
9
+ @import url('./components-business.css');
10
+ @import url('./components-content.css');
11
+
12
+ /* --- Generic paper softening of phosphor-base components --- */
13
+
14
+ /* Pre-label dot: no pulse animation, calm static accent block */
15
+ :root[data-theme="paper"] .pre-label .dot { animation: none; }
16
+
17
+ /* Storyboard dots: no glow */
18
+ :root[data-theme="paper"] .ui-dots .dot.active { box-shadow: none; }
19
+
20
+ /* Caret: no blink, no glow */
21
+ :root[data-theme="paper"] .caret { animation: none; background: var(--accent); box-shadow: none; }
22
+
23
+ /* Storyboard overview header — light backdrop */
24
+ :root[data-theme="paper"] .overview-header {
25
+ background: rgba(250, 250, 247, 0.92);
26
+ border-bottom: 1px solid var(--dim-2);
27
+ }
28
+ :root[data-theme="paper"] .tile {
29
+ background: #FFFFFF;
30
+ border: 1px solid var(--dim-2);
31
+ }
32
+ :root[data-theme="paper"] .tile.current {
33
+ border-color: var(--accent);
34
+ box-shadow: 0 0 0 1px var(--accent);
35
+ }
36
+ :root[data-theme="paper"] .tile-num {
37
+ background: rgba(255, 255, 255, 0.85);
38
+ font-family: var(--display);
39
+ }
40
+ :root[data-theme="paper"] .tile-label {
41
+ background: linear-gradient(to top, rgba(255, 255, 255, 0.95) 40%, rgba(255, 255, 255, 0));
42
+ color: var(--fg);
43
+ font-family: var(--display);
44
+ }
45
+
46
+ /* Edit-mode ring — subtle navy */
47
+ :root[data-theme="paper"] body.edit-mode #stage::after {
48
+ box-shadow: inset 0 0 30px var(--accent-soft);
49
+ }
50
+
51
+ /* UI chrome family — Inter, no monospace */
52
+ :root[data-theme="paper"] .ui { font-family: var(--display); }
53
+
54
+ /* ShiftArrow — strikethrough darker since light bg */
55
+ :root[data-theme="paper"] .shift-from { text-decoration-color: var(--dim); }
56
+
57
+ /* Compare divider gradient: works on light bg already */
58
+ :root[data-theme="paper"] .compare-divider {
59
+ background: linear-gradient(to bottom, transparent, var(--dim-2) 20%, var(--dim-2) 80%, transparent);
60
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "paper",
3
+ "displayName": "Paper",
4
+ "description": "Light, minimal, academic. Inter sans + serif accents.",
5
+ "fonts": [
6
+ "https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;700&family=Source+Serif+4:ital,wght@0,400;0,500;1,400&display=swap"
7
+ ],
8
+ "stylesheets": ["tokens.css", "base.css", "components.css", "components-layout.css", "components-diagram.css", "components-chart.css", "components-data.css", "components-business.css", "components-content.css", "transitions.css"],
9
+ "effects": null
10
+ }
@@ -0,0 +1,21 @@
1
+ /* Stagecraft — Paper theme tokens */
2
+ :root[data-theme="paper"] {
3
+ --bg: #FAFAF7;
4
+ --bg-elevated: #FFFFFF;
5
+ --fg: #1F1F1F;
6
+ --dim: #888888;
7
+ --dim-2: #DCDCD8;
8
+ --accent: #1F4F87; /* navy */
9
+ --accent-soft: rgba(31, 79, 135, 0.08);
10
+ --accent-glow: rgba(31, 79, 135, 0.18);
11
+ --blue: #1F4F87;
12
+ --amber: #B57F2C;
13
+ --red: #9B2C2C;
14
+ --mono: 'Source Serif 4', 'IBM Plex Serif', Georgia, serif;
15
+ --display: 'Inter', system-ui, sans-serif;
16
+ --body: 'Inter', system-ui, sans-serif;
17
+ }
18
+
19
+ /* Paper theme has no film grain, no ambient gradient */
20
+ :root[data-theme="paper"] body::before,
21
+ :root[data-theme="paper"] body::after { display: none; }
@@ -0,0 +1,11 @@
1
+ @import url('../phosphor/transitions.css');
2
+
3
+ /* Paper-specific: subtler glitch (no green scanlines) */
4
+ :root[data-theme="paper"] .tx-glitch-overlay { display: none; }
5
+ :root[data-theme="paper"] .tx-glitch-enter {
6
+ animation: tx-paper-glitch 400ms steps(4, end) both;
7
+ }
8
+ @keyframes tx-paper-glitch {
9
+ 0% { opacity: 0; }
10
+ 100% { opacity: 1; }
11
+ }