@brandon_m_behring/book-scaffold-astro 4.27.0 → 4.28.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.
@@ -0,0 +1,207 @@
1
+ /* demo.css — opt-in shell, controls, metrics, and SVG theming for #143.
2
+ *
3
+ * Import this stylesheet only on pages that use the demo substrate. It relies
4
+ * exclusively on tokens.css and never mounts an island or chooses a domain
5
+ * model for the consumer.
6
+ */
7
+
8
+ .demo-frame {
9
+ --demo-accent: var(--color-link);
10
+ --demo-positive: var(--warm-green);
11
+ --demo-warning: var(--warm-rose);
12
+ --demo-surface: var(--color-bg-subtle);
13
+ --demo-ink: var(--color-text);
14
+ --demo-ink-muted: var(--color-text-muted);
15
+
16
+ display: grid;
17
+ gap: var(--space-5);
18
+ margin-block: var(--space-6);
19
+ margin-inline: 0;
20
+ padding: var(--space-5);
21
+ color: var(--demo-ink);
22
+ background: var(--color-bg);
23
+ border: 1px solid var(--color-border);
24
+ border-radius: var(--radius-md);
25
+ }
26
+
27
+ .demo-frame__header,
28
+ .demo-frame__body {
29
+ display: grid;
30
+ gap: var(--space-3);
31
+ }
32
+
33
+ .demo-frame__title,
34
+ .demo-frame__description,
35
+ .demo-frame__caption,
36
+ .demo-slider__description,
37
+ .demo-stat-card__label,
38
+ .demo-stat-card__value,
39
+ .demo-stat-card__detail {
40
+ margin: 0;
41
+ }
42
+
43
+ .demo-frame__title {
44
+ color: var(--color-heading);
45
+ font-size: var(--text-xl);
46
+ line-height: var(--leading-tight);
47
+ }
48
+
49
+ .demo-frame__description,
50
+ .demo-frame__caption,
51
+ .demo-slider__description,
52
+ .demo-stat-card__detail {
53
+ color: var(--demo-ink-muted);
54
+ font-size: var(--text-sm);
55
+ line-height: var(--leading-normal);
56
+ }
57
+
58
+ .demo-frame__caption {
59
+ padding-top: var(--space-3);
60
+ border-top: 1px solid var(--color-border);
61
+ }
62
+
63
+ .demo-frame__visual {
64
+ max-width: 100%;
65
+ overflow-x: auto;
66
+ }
67
+
68
+ .demo-frame__visual > svg,
69
+ .demo-frame svg[data-demo-visual] {
70
+ display: block;
71
+ width: 100%;
72
+ max-width: 100%;
73
+ height: auto;
74
+ }
75
+
76
+ /* Attribute helpers let inline SVGs follow semantic page tokens without a
77
+ * JS redraw. Canvas and JS-computed colors should use useThemeColors(). */
78
+ .demo-frame [data-demo-fill='accent'] { fill: var(--demo-accent); }
79
+ .demo-frame [data-demo-fill='positive'] { fill: var(--demo-positive); }
80
+ .demo-frame [data-demo-fill='warning'] { fill: var(--demo-warning); }
81
+ .demo-frame [data-demo-fill='ink'] { fill: var(--demo-ink); }
82
+ .demo-frame [data-demo-fill='muted'] { fill: var(--demo-ink-muted); }
83
+ .demo-frame [data-demo-fill='surface'] { fill: var(--demo-surface); }
84
+ .demo-frame [data-demo-stroke='accent'] { stroke: var(--demo-accent); }
85
+ .demo-frame [data-demo-stroke='positive'] { stroke: var(--demo-positive); }
86
+ .demo-frame [data-demo-stroke='warning'] { stroke: var(--demo-warning); }
87
+ .demo-frame [data-demo-stroke='ink'] { stroke: var(--demo-ink); }
88
+ .demo-frame [data-demo-stroke='muted'] { stroke: var(--demo-ink-muted); }
89
+
90
+ .demo-slider {
91
+ display: grid;
92
+ gap: var(--space-2);
93
+ min-width: 0;
94
+ }
95
+
96
+ .demo-slider[data-disabled='true'] {
97
+ opacity: 0.65;
98
+ }
99
+
100
+ .demo-slider__head {
101
+ display: flex;
102
+ flex-wrap: wrap;
103
+ align-items: baseline;
104
+ justify-content: space-between;
105
+ gap: var(--space-2) var(--space-4);
106
+ }
107
+
108
+ .demo-slider__label {
109
+ color: var(--demo-ink);
110
+ font-weight: 600;
111
+ }
112
+
113
+ .demo-slider__value {
114
+ color: var(--demo-accent);
115
+ font-family: var(--font-code);
116
+ font-variant-numeric: tabular-nums;
117
+ font-weight: 600;
118
+ }
119
+
120
+ .demo-slider__input {
121
+ box-sizing: border-box;
122
+ width: 100%;
123
+ min-height: 2.75rem;
124
+ margin: 0;
125
+ accent-color: var(--demo-accent);
126
+ cursor: pointer;
127
+ }
128
+
129
+ .demo-slider__input:disabled {
130
+ cursor: not-allowed;
131
+ }
132
+
133
+ .demo-slider__input:focus-visible {
134
+ outline: 2px solid var(--demo-accent);
135
+ outline-offset: 2px;
136
+ }
137
+
138
+ .demo-stat-cards {
139
+ display: grid;
140
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr));
141
+ gap: var(--space-3);
142
+ margin: 0;
143
+ }
144
+
145
+ .demo-stat-card {
146
+ --demo-card-accent: var(--color-border);
147
+
148
+ min-width: 0;
149
+ padding: var(--space-3) var(--space-4);
150
+ background: var(--demo-surface);
151
+ border: 1px solid var(--color-border);
152
+ border-left: var(--border-bar) solid var(--demo-card-accent);
153
+ border-radius: var(--radius-md);
154
+ }
155
+
156
+ .demo-stat-card[data-tone='accent'] { --demo-card-accent: var(--demo-accent); }
157
+ .demo-stat-card[data-tone='positive'] { --demo-card-accent: var(--demo-positive); }
158
+ .demo-stat-card[data-tone='warning'] { --demo-card-accent: var(--demo-warning); }
159
+
160
+ .demo-stat-card__label {
161
+ color: var(--demo-ink-muted);
162
+ font-size: var(--text-xs);
163
+ font-weight: 600;
164
+ letter-spacing: 0.04em;
165
+ line-height: var(--leading-normal);
166
+ text-transform: uppercase;
167
+ }
168
+
169
+ .demo-stat-card__value {
170
+ margin-top: var(--space-1);
171
+ color: var(--demo-ink);
172
+ font-size: var(--text-xl);
173
+ font-variant-numeric: tabular-nums;
174
+ font-weight: 650;
175
+ line-height: var(--leading-tight);
176
+ }
177
+
178
+ .demo-stat-card__unit {
179
+ margin-left: var(--space-1);
180
+ color: var(--demo-ink-muted);
181
+ font-size: var(--text-sm);
182
+ font-weight: 500;
183
+ }
184
+
185
+ .demo-stat-card__detail {
186
+ margin-top: var(--space-1);
187
+ }
188
+
189
+ @media (max-width: 36rem) {
190
+ .demo-frame {
191
+ padding: var(--space-4);
192
+ }
193
+ }
194
+
195
+ /* Consumer animation can live anywhere inside the shell. Honor the platform
196
+ * preference even when that consumer forgot to add a local guard. */
197
+ @media (prefers-reduced-motion: reduce) {
198
+ .demo-frame,
199
+ .demo-frame *,
200
+ .demo-frame *::before,
201
+ .demo-frame *::after {
202
+ scroll-behavior: auto !important;
203
+ animation-duration: 0.01ms !important;
204
+ animation-iteration-count: 1 !important;
205
+ transition-duration: 0.01ms !important;
206
+ }
207
+ }