@kolkrabbi/kol-theme 0.10.0 → 0.11.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.
@@ -47,3 +47,308 @@
47
47
  -webkit-text-stroke-width: 3px;
48
48
  -webkit-text-stroke-color: var(--kol-text-pressure-stroke, var(--kol-accent-primary));
49
49
  }
50
+
51
+ /* =============================================================================
52
+ * FONTVIEWER ENGINE CHROME — the variable-font viewer instrument (canvas stage,
53
+ * metrics overlay, axis controls). Lobbied verbatim from the elder
54
+ * @kol/fontviewer package 2026-07-16 alongside the engine (kol-foundry ./engine).
55
+ * ponytail: carries its own --fv-* token set + system-ui stack from the source —
56
+ * kol-token conformance is a follow-up pass, not done blind in the lobby.
57
+ * ============================================================================= */
58
+
59
+ :root {
60
+ --system-ui: system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
61
+ --fv-white: rgb(255, 255, 255);
62
+ --fv-black: rgb(0, 0, 0);
63
+ --fv-metrics-color: rgba(0, 0, 0, 0.4);
64
+ --fv-border-color: var(--fv-black);
65
+ --fv-surface: rgba(255, 255, 255, 0.1);
66
+ --fv-panel-bg: rgba(255, 255, 255, 0.1);
67
+ --fv-panel-border: var(--fv-black);
68
+ --fv-panel-shadow: 0 10px 24px rgba(0, 0, 0, 0.18);
69
+ }
70
+
71
+ .fontviewer-section,
72
+ .fontviewer-container {
73
+ width: 100%;
74
+ height: 100%;
75
+ }
76
+
77
+ .fontviewer-section {
78
+ margin: 0;
79
+ padding: 0;
80
+ }
81
+
82
+ .fontviewer-container {
83
+ position: relative;
84
+ overflow: hidden;
85
+ }
86
+
87
+ .font-viewer-wrapper {
88
+ position: relative;
89
+ width: 100%;
90
+ height: 100%;
91
+ font-family: var(--system-ui);
92
+ font-size: 0.7rem;
93
+ background: var(--fv-white);
94
+ color: var(--fv-black);
95
+ }
96
+
97
+ .font-viewer-display-container {
98
+ position: absolute;
99
+ top: 0;
100
+ left: 0;
101
+ right: 0;
102
+ bottom: 0;
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: center;
106
+ background: var(--fv-white);
107
+ }
108
+
109
+ .font-viewer-glyph-buffer {
110
+ color: var(--fv-black);
111
+ text-align: center;
112
+ position: relative;
113
+ }
114
+
115
+ .font-viewer-metrics-overlay {
116
+ position: absolute;
117
+ inset: 0;
118
+ pointer-events: none;
119
+ }
120
+
121
+ .font-viewer-wrapper {
122
+ --fv-controls-background: rgba(255, 255, 255, 0.2);
123
+ }
124
+
125
+ .font-viewer-wrapper[data-color-scheme='dark'] {
126
+ --fv-controls-background: rgba(0, 0, 0, 0.2);
127
+ }
128
+
129
+ .font-viewer-controls {
130
+ position: fixed;
131
+ left: 0;
132
+ right: 0;
133
+ bottom: 0;
134
+ background: var(--fv-controls-background);
135
+ backdrop-filter: blur(2px);
136
+ padding: 7px 14px;
137
+ border-top: 1px solid var(--fv-border-color);
138
+ z-index: 99999;
139
+ color: var(--fv-black);
140
+ opacity: 0;
141
+ pointer-events: none;
142
+ transition: opacity 400ms ease;
143
+ }
144
+
145
+ .font-viewer-controls.is-visible {
146
+ opacity: 1;
147
+ pointer-events: auto !important;
148
+ }
149
+
150
+ .font-viewer-buttons {
151
+ display: flex;
152
+ flex-wrap: wrap;
153
+ gap: 6px;
154
+ margin-bottom: 6px;
155
+ pointer-events: auto !important;
156
+ }
157
+
158
+ .font-viewer-btn {
159
+ font-size: 0.7rem;
160
+ cursor: pointer;
161
+ height: 23px;
162
+ padding: 0 8px;
163
+ margin-right: 5px;
164
+ margin-bottom: 7px;
165
+ background: transparent;
166
+ color: var(--fv-black);
167
+ border: 1px solid var(--fv-border-color);
168
+ border-radius: 5px;
169
+ transition: 0.2s;
170
+ pointer-events: auto !important;
171
+ }
172
+
173
+ .font-viewer-btn:last-child {
174
+ margin-right: 0;
175
+ }
176
+
177
+ .font-viewer-btn.active {
178
+ background-color: var(--fv-black);
179
+ color: var(--fv-white);
180
+ }
181
+
182
+ .font-viewer-btn.disabled,
183
+ .font-viewer-btn:disabled {
184
+ opacity: 0.4;
185
+ cursor: not-allowed;
186
+ }
187
+
188
+ .font-viewer-sliders {
189
+ display: flex;
190
+ flex-direction: column;
191
+ gap: 8px;
192
+ padding: 0 14px;
193
+ }
194
+
195
+ .font-viewer-slider-group {
196
+ display: flex;
197
+ align-items: center;
198
+ gap: 10px;
199
+ margin-bottom: 6px;
200
+ }
201
+
202
+ .font-viewer-slider-group label {
203
+ min-width: 120px;
204
+ font-size: 0.7rem;
205
+ font-weight: 500;
206
+ }
207
+
208
+ .font-viewer-slider-group span {
209
+ min-width: 60px;
210
+ text-align: right;
211
+ font-size: 0.7rem;
212
+ }
213
+
214
+ .font-viewer-slider-group input[type='range'] {
215
+ flex: 1;
216
+ height: 15px;
217
+ padding: 7px 0;
218
+ cursor: pointer;
219
+ background: linear-gradient(var(--fv-black), var(--fv-black)) center/100% 1px no-repeat;
220
+ -webkit-appearance: none;
221
+ appearance: none;
222
+ }
223
+
224
+ .font-viewer-slider-group input[type='range']::-webkit-slider-runnable-track,
225
+ .font-viewer-slider-group input[type='range']::-moz-range-track {
226
+ width: 100%;
227
+ height: 1px;
228
+ background: transparent;
229
+ }
230
+
231
+ .font-viewer-slider-group input[type='range']::-webkit-slider-runnable-track {
232
+ border-radius: 9999px;
233
+ }
234
+
235
+ .font-viewer-slider-group input[type='range']::-webkit-slider-thumb {
236
+ -webkit-appearance: none;
237
+ appearance: none;
238
+ height: 15px;
239
+ width: 15px;
240
+ border-radius: 50%;
241
+ background: var(--fv-black);
242
+ cursor: pointer;
243
+ margin-top: 0;
244
+ }
245
+
246
+ .font-viewer-slider-group input[type='range']::-moz-range-thumb {
247
+ height: 15px;
248
+ width: 15px;
249
+ border-radius: 50%;
250
+ background: var(--fv-black);
251
+ cursor: pointer;
252
+ }
253
+
254
+ .font-viewer-slider-group input[type='range']::-moz-range-track {
255
+ border-radius: 9999px;
256
+ }
257
+
258
+ .font-viewer-slider-group input[type='range']::-ms-track {
259
+ width: 100%;
260
+ height: 1px;
261
+ background: transparent;
262
+ border-color: transparent;
263
+ color: transparent;
264
+ }
265
+
266
+ .font-viewer-slider-group input[type='range']::-ms-fill-lower,
267
+ .font-viewer-slider-group input[type='range']::-ms-fill-upper {
268
+ background: var(--fv-black);
269
+ }
270
+
271
+ .font-viewer-slider-group input[type='range']::-ms-thumb {
272
+ height: 15px;
273
+ width: 15px;
274
+ border-radius: 50%;
275
+ background: var(--fv-black);
276
+ cursor: pointer;
277
+ }
278
+
279
+ .font-viewer-slider-group input[type='range']::-webkit-slider-thumb,
280
+ .font-viewer-slider-group input[type='range']::-moz-range-thumb {
281
+ height: 15px;
282
+ width: 15px;
283
+ border-radius: 50%;
284
+ background: var(--fv-black);
285
+ cursor: pointer;
286
+ }
287
+
288
+ .font-viewer-variable-axes {
289
+ margin-top: 12px;
290
+ display: flex;
291
+ flex-direction: column;
292
+ gap: 6px;
293
+ }
294
+
295
+ .font-viewer-info-panel {
296
+ position: absolute;
297
+ z-index: 10001;
298
+ padding: 14px;
299
+ border-radius: 8px;
300
+ color: var(--fv-black);
301
+ }
302
+
303
+ .font-viewer-font-info {
304
+ width: 300px;
305
+ top: 8px;
306
+ left: 8px;
307
+ }
308
+
309
+ .font-viewer-glyph-info {
310
+ width: 150px;
311
+ top: 8px;
312
+ right: 8px;
313
+ }
314
+
315
+ .font-viewer-metrics-overlay .metric-line {
316
+ position: absolute;
317
+ width: 100%;
318
+ height: 1px;
319
+ background: var(--fv-metrics-color);
320
+ }
321
+
322
+ .font-viewer-metrics-overlay .side-bearing-line {
323
+ position: absolute;
324
+ width: 1px;
325
+ height: 100%;
326
+ background: var(--fv-metrics-color);
327
+ top: 0;
328
+ }
329
+
330
+ .font-viewer-metrics-overlay .legend {
331
+ position: absolute;
332
+ padding-left: 14px;
333
+ color: var(--fv-black);
334
+ }
335
+
336
+ .axis-controls {
337
+ margin-top: 12px;
338
+ display: flex;
339
+ flex-direction: column;
340
+ gap: 6px;
341
+ }
342
+
343
+ .glyph-info-container {
344
+ display: flex;
345
+ gap: 16px;
346
+ }
347
+
348
+ .glyph-info-container .info-column {
349
+ min-width: 120px;
350
+ }
351
+
352
+ .font-viewer-wrapper .monospaced {
353
+ font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
354
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-theme",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "KOL (Kolkrabbi) design-system tokens + base CSS — brand-neutral. The canonical token/cascade layer every other KOL package and consumer builds on.",
5
5
  "license": "MIT",
6
6
  "type": "module",