anentrypoint-design 0.0.381 → 0.0.382
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.
- package/dist/247420.css +228 -162
- package/dist/247420.js +24 -24
- package/package.json +1 -1
- package/src/components/content/avatar.js +31 -0
- package/src/components/content/charts.js +50 -0
- package/src/components/content/cli.js +46 -0
- package/src/components/content/feedback.js +77 -0
- package/src/components/content/fields.js +136 -0
- package/src/components/content/hero.js +146 -0
- package/src/components/content/lists.js +85 -0
- package/src/components/content/panel.js +79 -0
- package/src/components/content/row.js +115 -0
- package/src/components/content/table.js +97 -0
- package/src/components/content/views.js +81 -0
- package/src/components/content.js +29 -861
- package/src/components/editor-primitives/batch.js +60 -0
- package/src/components/editor-primitives/chrome.js +146 -0
- package/src/components/editor-primitives/collapse.js +46 -0
- package/src/components/editor-primitives/context-menu.js +127 -0
- package/src/components/editor-primitives/diagnostics.js +44 -0
- package/src/components/editor-primitives/focus-trap.js +26 -0
- package/src/components/editor-primitives/json-viewer.js +123 -0
- package/src/components/editor-primitives/layout.js +89 -0
- package/src/components/editor-primitives/modals.js +89 -0
- package/src/components/editor-primitives/pager.js +74 -0
- package/src/components/editor-primitives/property-grid.js +57 -0
- package/src/components/editor-primitives/shared.js +18 -0
- package/src/components/editor-primitives/split-panel.js +101 -0
- package/src/components/editor-primitives/toast.js +59 -0
- package/src/components/editor-primitives/tree.js +75 -0
- package/src/components/editor-primitives.js +35 -1048
- package/src/components/overlay-primitives/approval-prompt.js +38 -0
- package/src/components/overlay-primitives/auth-modal.js +89 -0
- package/src/components/overlay-primitives/command-palette.js +101 -0
- package/src/components/overlay-primitives/emoji-picker.js +103 -0
- package/src/components/overlay-primitives/floating.js +146 -0
- package/src/components/overlay-primitives/full-screen.js +45 -0
- package/src/components/overlay-primitives/menus.js +131 -0
- package/src/components/overlay-primitives/popover.js +51 -0
- package/src/components/overlay-primitives/roving-menu.js +73 -0
- package/src/components/overlay-primitives/settings-popover.js +85 -0
- package/src/components/overlay-primitives/tooltip.js +55 -0
- package/src/components/overlay-primitives.js +33 -855
- package/src/css/app-shell/chat-polish.css +39 -32
- package/src/css/app-shell/data-density.css +25 -21
- package/src/css/app-shell/files.css +37 -29
- package/src/css/app-shell/kits-appended.css +73 -50
- package/src/css/app-shell/responsive.css +47 -29
- package/src/kits/os/freddie-dashboard.css +2 -2
|
@@ -30,9 +30,15 @@
|
|
|
30
30
|
app scale (--fs-h1-app, 22-30px) is what these tokens exist for. Applied
|
|
31
31
|
here rather than as a data-attribute on each kit shell so any surface using
|
|
32
32
|
this root gets the app voice without a per-kit opt-in that kits forget. */
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
/* Descendant, not direct-child: a kit that wraps its title in a head row (an
|
|
34
|
+
h1 beside a theme toggle, say) still gets the app voice. The direct-child
|
|
35
|
+
form silently missed exactly that shape and left those titles at the 64px
|
|
36
|
+
display ceiling -- the surface opted in but the rule did not reach the
|
|
37
|
+
heading. Nested .ds-section content is unaffected because nothing re-raises
|
|
38
|
+
the size below this point. */
|
|
39
|
+
.ds-app-surface h1, .ds-app-surface .t-h1 { font-size: var(--fs-h1-app); line-height: 1.15; }
|
|
40
|
+
.ds-app-surface h2, .ds-app-surface .t-h2 { font-size: var(--fs-h2-app); }
|
|
41
|
+
.ds-app-surface h3, .ds-app-surface .t-h3 { font-size: var(--fs-h3-app); }
|
|
36
42
|
/* The lede is supporting chrome under an app title, not a marketing stand-first:
|
|
37
43
|
it drops to body size and keeps a readable measure instead of --fs-xl. */
|
|
38
44
|
.ds-app-surface > .lede, .ds-app-surface > .t-lede { font-size: var(--fs-body); max-width: 60ch; }
|
|
@@ -138,7 +144,7 @@
|
|
|
138
144
|
margin: var(--space-3) auto;
|
|
139
145
|
background: var(--bg-2);
|
|
140
146
|
border-radius: var(--r-2);
|
|
141
|
-
padding: clamp(
|
|
147
|
+
padding: clamp(var(--space-3), 5vw, var(--space-7));
|
|
142
148
|
box-sizing: border-box;
|
|
143
149
|
display: flex;
|
|
144
150
|
overflow: hidden;
|
|
@@ -153,8 +159,10 @@
|
|
|
153
159
|
}
|
|
154
160
|
.ds-deck-slide { flex: 1; display: flex; min-width: 0; }
|
|
155
161
|
.ds-deck-controls {
|
|
162
|
+
/* 14px sits between --space-2-75 (12) and --space-3 (16) with no tier; it is
|
|
163
|
+
the deck control spacing tuned against the mono glyph run. */
|
|
156
164
|
display: flex; align-items: center; justify-content: center; gap: 14px;
|
|
157
|
-
padding:
|
|
165
|
+
padding: var(--space-2); font-family: var(--ff-mono); font-size: var(--fs-sm);
|
|
158
166
|
}
|
|
159
167
|
.ds-deck-count { color: var(--fg-3); }
|
|
160
168
|
@media (pointer: coarse) {
|
|
@@ -181,9 +189,9 @@
|
|
|
181
189
|
full-bleed slide chrome, not panel chrome) and owns its own bottom gutter. */
|
|
182
190
|
.ds-slide-eyebrow {
|
|
183
191
|
color: var(--fg-3);
|
|
184
|
-
margin-bottom: clamp(
|
|
192
|
+
margin-bottom: clamp(var(--space-2-75), 2.5cqw, var(--space-4));
|
|
185
193
|
}
|
|
186
|
-
.ds-slide-col { display: flex; flex-direction: column; justify-content: center; gap: clamp(
|
|
194
|
+
.ds-slide-col { display: flex; flex-direction: column; justify-content: center; gap: clamp(var(--space-2-75), 2.5cqw, var(--space-4)); min-width: 0; }
|
|
187
195
|
.ds-slide-col--start { align-items: flex-start; }
|
|
188
196
|
.ds-slide-col--narrow { max-width: 38ch; }
|
|
189
197
|
.ds-slide-col--quote { max-width: 42ch; }
|
|
@@ -197,15 +205,17 @@
|
|
|
197
205
|
font-size: clamp(var(--fs-h3), 4.5cqw, var(--fs-h1));
|
|
198
206
|
line-height: var(--lh-snug); color: var(--fg); font-weight: 500; min-width: 0;
|
|
199
207
|
}
|
|
200
|
-
.ds-slide-h1--lead { margin-bottom:
|
|
208
|
+
.ds-slide-h1--lead { margin-bottom: var(--space-2-75); }
|
|
201
209
|
.ds-slide-quote-body {
|
|
202
210
|
font-size: clamp(var(--fs-lg), 3.5cqw, var(--fs-h2));
|
|
203
211
|
line-height: var(--lh-snug); color: var(--fg); font-weight: 400; font-style: italic;
|
|
204
212
|
}
|
|
205
213
|
.ds-slide-cite { font-family: var(--ff-mono); font-size: var(--fs-sm); color: var(--fg-3); }
|
|
206
214
|
.ds-slide-bullet {
|
|
207
|
-
|
|
208
|
-
|
|
215
|
+
/* 18px ceiling has no tier (--space-3 is 16, --space-3-5 is 20); it is the
|
|
216
|
+
bullet key/value split tuned against the clamp(56px,18%,100px) key column. */
|
|
217
|
+
display: flex; gap: clamp(var(--space-2), 2vw, 18px); align-items: baseline;
|
|
218
|
+
border-bottom: 1px solid var(--rule); padding: var(--space-2-75) 0; flex-wrap: wrap;
|
|
209
219
|
}
|
|
210
220
|
.ds-slide-bullet-key {
|
|
211
221
|
flex: 0 1 clamp(56px, 18%, 100px); min-width: 0;
|
|
@@ -213,7 +223,7 @@
|
|
|
213
223
|
color: var(--slide-accent, var(--accent-ink));
|
|
214
224
|
}
|
|
215
225
|
.ds-slide-bullet-val { color: var(--fg-2); font-size: var(--fs-lg); min-width: 0; }
|
|
216
|
-
.ds-slide-split { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(
|
|
226
|
+
.ds-slide-split { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(var(--space-2-75), 3vw, var(--space-5)); margin-top: var(--space-2-75); }
|
|
217
227
|
@media (max-width: 760px) {
|
|
218
228
|
.ds-slide-split { grid-template-columns: 1fr; }
|
|
219
229
|
}
|
|
@@ -239,7 +249,10 @@
|
|
|
239
249
|
|
|
240
250
|
/* --- error 404 --------------------------------------------- */
|
|
241
251
|
.ds-err-hero {
|
|
242
|
-
|
|
252
|
+
/* 36px/22px clamp ceilings and the 14px gap are off-scale on purpose: this
|
|
253
|
+
hero is centred around a clamp(56px,20vw,120px) numeral and the insets are
|
|
254
|
+
tuned to it, not to the panel rhythm the --space-* scale encodes. */
|
|
255
|
+
padding: clamp(var(--space-3), 5vw, 36px) clamp(var(--space-2-75), 4vw, 22px);
|
|
243
256
|
text-align: center; display: flex; flex-direction: column; gap: 14px; align-items: center;
|
|
244
257
|
}
|
|
245
258
|
.ds-err-numeral {
|
|
@@ -247,25 +260,25 @@
|
|
|
247
260
|
line-height: 1; color: var(--panel-text-3); letter-spacing: -0.03em;
|
|
248
261
|
}
|
|
249
262
|
.ds-err-path {
|
|
250
|
-
display: inline-flex; gap:
|
|
263
|
+
display: inline-flex; gap: var(--space-1-75); align-items: baseline; flex-wrap: wrap; max-width: 100%;
|
|
251
264
|
font-family: var(--ff-mono); font-size: 13px; color: var(--panel-text-2);
|
|
252
|
-
background: var(--panel-1); padding:
|
|
265
|
+
background: var(--panel-1); padding: var(--space-1-75) var(--space-2-75); border-radius: var(--r-0);
|
|
253
266
|
overflow-wrap: anywhere; word-break: break-all;
|
|
254
267
|
}
|
|
255
268
|
|
|
256
269
|
/* --- gallery ------------------------------------------------ */
|
|
257
270
|
.ds-tile-grid {
|
|
258
|
-
padding: clamp(
|
|
259
|
-
display: grid; grid-template-columns: repeat(auto-fill, minmax(min(180px, 100%), 1fr)); gap:
|
|
271
|
+
padding: clamp(var(--space-2), 2.5vw, var(--space-3));
|
|
272
|
+
display: grid; grid-template-columns: repeat(auto-fill, minmax(min(180px, 100%), 1fr)); gap: var(--space-2);
|
|
260
273
|
}
|
|
261
274
|
.ds-tile-grid--tight { grid-template-columns: repeat(auto-fill, minmax(min(140px, 100%), 1fr)); }
|
|
262
275
|
.ds-swatch-grid {
|
|
263
|
-
padding: clamp(
|
|
264
|
-
display: grid; grid-template-columns: repeat(auto-fill, minmax(min(160px, 100%), 1fr)); gap:
|
|
276
|
+
padding: clamp(var(--space-2), 2.5vw, var(--space-3));
|
|
277
|
+
display: grid; grid-template-columns: repeat(auto-fill, minmax(min(160px, 100%), 1fr)); gap: var(--space-2-75);
|
|
265
278
|
}
|
|
266
279
|
.ds-gallery-tile {
|
|
267
|
-
cursor: pointer; display: flex; flex-direction: column; gap:
|
|
268
|
-
padding:
|
|
280
|
+
cursor: pointer; display: flex; flex-direction: column; gap: var(--space-1-75);
|
|
281
|
+
padding: var(--space-2-75); border-radius: var(--r-1); min-height: clamp(120px, 18vw, 160px);
|
|
269
282
|
border: 0; text-align: left; font: inherit; color: inherit;
|
|
270
283
|
background: var(--tile-tone, var(--panel-1));
|
|
271
284
|
transition: transform var(--dur-base) var(--ease), box-shadow var(--dur-base) var(--ease);
|
|
@@ -279,20 +292,23 @@
|
|
|
279
292
|
.ds-lightbox {
|
|
280
293
|
position: fixed; inset: 0; background: var(--scrim);
|
|
281
294
|
display: flex; align-items: center; justify-content: center;
|
|
282
|
-
padding: clamp(
|
|
283
|
-
padding-bottom: max(clamp(
|
|
295
|
+
padding: clamp(var(--space-2-75), 4vw, var(--space-5));
|
|
296
|
+
padding-bottom: max(clamp(var(--space-2-75), 4vw, var(--space-5)), env(safe-area-inset-bottom));
|
|
284
297
|
z-index: var(--z-modal);
|
|
285
298
|
}
|
|
286
299
|
.ds-lightbox-card {
|
|
287
|
-
|
|
300
|
+
/* 28px ceiling has no tier (--space-4 is 24, --space-5 is 32); it is the
|
|
301
|
+
lightbox card inset tuned against the min(520px,100%) card width. */
|
|
302
|
+
background: var(--panel-0); border-radius: var(--r-2); padding: clamp(var(--space-3), 4vw, 28px);
|
|
288
303
|
width: min(520px, 100%); min-width: 0;
|
|
289
304
|
max-height: calc(100vh - 24px);
|
|
290
305
|
max-height: calc(100dvh - 24px);
|
|
291
306
|
overflow: auto;
|
|
292
|
-
display: flex; flex-direction: column; gap: 14px;
|
|
307
|
+
display: flex; flex-direction: column; gap: 14px; /* off-scale, matches the card inset above */
|
|
293
308
|
}
|
|
294
309
|
.ds-lightbox-preview {
|
|
295
|
-
|
|
310
|
+
/* 36px ceiling has no tier (--space-5 is 32, --space-6 is 48). */
|
|
311
|
+
padding: clamp(var(--space-3), 6vw, 36px); border-radius: var(--r-1); text-align: center;
|
|
296
312
|
font-family: var(--ff-mono); white-space: pre-line; font-size: clamp(16px, 5vw, 24px);
|
|
297
313
|
background: var(--tile-tone, var(--panel-1));
|
|
298
314
|
}
|
|
@@ -302,25 +318,31 @@
|
|
|
302
318
|
@media (max-width: 480px) {
|
|
303
319
|
.ds-topbar-search { flex-basis: 100%; }
|
|
304
320
|
}
|
|
305
|
-
.ds-empty-state { padding: clamp(
|
|
321
|
+
.ds-empty-state { padding: clamp(var(--space-3), 5vw, var(--space-4)); text-align: center; color: var(--panel-text-3); }
|
|
306
322
|
.ds-empty-state-glyph { font-size: clamp(24px, 6vw, 32px); }
|
|
307
|
-
.ds-empty-state-msg { margin:
|
|
323
|
+
.ds-empty-state-msg { margin: var(--space-1-75) 0; }
|
|
308
324
|
.ds-empty-state-hint { margin: 0; font-size: var(--fs-sm); }
|
|
309
325
|
|
|
310
326
|
/* --- system primer ------------------------------------------ */
|
|
327
|
+
/* The three primer panels below share one fluid inset,
|
|
328
|
+
clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px), and a 14/18px gap. None of
|
|
329
|
+
10/14/18 is a --space-* tier (the scale jumps 8 -> 10 -> 12 -> 16 -> 20) and
|
|
330
|
+
the three values are tuned as a set against the 64px label columns, so the
|
|
331
|
+
panels stay optically identical to each other. Snapping any one of them
|
|
332
|
+
desyncs the family; they are deliberate literals, not un-migrated drift. */
|
|
311
333
|
.ds-swatch-grid-sm {
|
|
312
334
|
display: grid; grid-template-columns: repeat(auto-fill, minmax(min(110px, 100%), 1fr));
|
|
313
|
-
gap:
|
|
335
|
+
gap: var(--space-2-75); padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px);
|
|
314
336
|
}
|
|
315
337
|
.ds-swatch-grid-lg { grid-template-columns: repeat(auto-fill, minmax(min(150px, 100%), 1fr)); }
|
|
316
|
-
.ds-swatch-col { display: flex; flex-direction: column; gap:
|
|
338
|
+
.ds-swatch-col { display: flex; flex-direction: column; gap: var(--space-1-75); }
|
|
317
339
|
.ds-swatch-chip { height: 48px; border-radius: var(--r-1); border: 1px solid var(--rule); background: var(--swatch, var(--panel-1)); }
|
|
318
340
|
.ds-swatch-chip--big { height: 64px; }
|
|
319
341
|
.ds-swatch-name { font-family: var(--ff-mono); font-size: 11px; color: var(--fg-3); }
|
|
320
342
|
.ds-type-panel { padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px); display: flex; flex-direction: column; gap: 14px; }
|
|
321
343
|
.ds-type-row {
|
|
322
344
|
display: flex; align-items: baseline; gap: 14px;
|
|
323
|
-
border-bottom: 1px solid var(--rule); padding-bottom:
|
|
345
|
+
border-bottom: 1px solid var(--rule); padding-bottom: var(--space-2); flex-wrap: wrap;
|
|
324
346
|
}
|
|
325
347
|
.ds-type-row-label { flex: 0 0 64px; font-family: var(--ff-mono); font-size: 11px; color: var(--fg-3); }
|
|
326
348
|
.ds-type-sample {
|
|
@@ -328,7 +350,7 @@
|
|
|
328
350
|
font-size: var(--sample-size, var(--fs-body));
|
|
329
351
|
}
|
|
330
352
|
.ds-prim-panel { padding: clamp(10px, 2.5vw, 14px) clamp(10px, 3vw, 18px); display: flex; flex-direction: column; gap: 18px; }
|
|
331
|
-
.ds-prim-row { display: flex; gap:
|
|
353
|
+
.ds-prim-row { display: flex; gap: var(--space-2-5); flex-wrap: wrap; align-items: center; }
|
|
332
354
|
.ds-prim-label { flex: 0 0 64px; font-family: var(--ff-mono); font-size: 11px; color: var(--fg-3); }
|
|
333
355
|
|
|
334
356
|
/* == appended: content-site == */
|
|
@@ -384,7 +406,7 @@
|
|
|
384
406
|
matching the "color reserved for meaning, not decoration" pattern seen in
|
|
385
407
|
docstudio's admin table. */
|
|
386
408
|
.ds-table-sort-btn {
|
|
387
|
-
display: inline-flex; align-items: center; gap:
|
|
409
|
+
display: inline-flex; align-items: center; gap: var(--space-1);
|
|
388
410
|
background: none; border: none; padding: 0; margin: 0;
|
|
389
411
|
font: inherit; font-weight: inherit; color: inherit; cursor: pointer;
|
|
390
412
|
}
|
|
@@ -457,55 +479,56 @@
|
|
|
457
479
|
/* == appended: signin kit cleanup == */
|
|
458
480
|
/* -- signin kit (ui_kits/signin) -- */
|
|
459
481
|
.ds-auth-wrap { padding: var(--space-2, 8px); display: flex; flex-direction: column; align-items: center; }
|
|
460
|
-
.ds-auth-col { width: 100%; max-width: 440px; display: flex; flex-direction: column; gap:
|
|
461
|
-
|
|
482
|
+
.ds-auth-col { width: 100%; max-width: 440px; display: flex; flex-direction: column; gap: var(--space-2); margin: clamp(var(--space-2-75), 4vw, var(--space-4)) 0; min-width: 0; }
|
|
483
|
+
/* 18px ceiling: no tier between --space-3 (16) and --space-3-5 (20). */
|
|
484
|
+
.ds-auth-form { padding: clamp(var(--space-2-75), 3vw, 18px); display: flex; flex-direction: column; gap: var(--space-2-5); }
|
|
462
485
|
.ds-auth-sent { align-items: center; text-align: center; }
|
|
463
486
|
.ds-auth-sent-glyph { font-size: 32px; color: var(--panel-accent); }
|
|
464
487
|
.ds-auth-sent-title { margin: 0; font-weight: 600; }
|
|
465
488
|
.ds-auth-sent-sub { margin: 0; color: var(--panel-text-2); overflow-wrap: anywhere; }
|
|
466
|
-
.ds-auth-field { display: flex; flex-direction: column; gap:
|
|
489
|
+
.ds-auth-field { display: flex; flex-direction: column; gap: var(--space-1); }
|
|
467
490
|
/* .ds-auth-field-label joins the kit small-label voice above, no overrides. */
|
|
468
|
-
.ds-auth-row-between { display: flex; align-items: center; justify-content: space-between; gap:
|
|
469
|
-
.ds-auth-remember { display: flex; align-items: center; gap:
|
|
491
|
+
.ds-auth-row-between { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); flex-wrap: wrap; }
|
|
492
|
+
.ds-auth-remember { display: flex; align-items: center; gap: var(--space-1-75); cursor: pointer; }
|
|
470
493
|
.ds-auth-remember-text { color: var(--panel-text-2); font-size: 13px; }
|
|
471
494
|
.ds-auth-forgot { font-size: 13px; }
|
|
472
|
-
.ds-auth-error { padding:
|
|
473
|
-
.ds-auth-providers { display: flex; gap:
|
|
474
|
-
.ds-auth-provider-btn { flex: 1 1 100px; min-width: 0; display: flex; align-items: center; justify-content: center; gap:
|
|
495
|
+
.ds-auth-error { padding: var(--space-2) var(--space-2-5); background: var(--panel-1); border-radius: var(--r-0); color: var(--danger); font-size: 13px; overflow-wrap: anywhere; }
|
|
496
|
+
.ds-auth-providers { display: flex; gap: var(--space-2); flex-wrap: wrap; }
|
|
497
|
+
.ds-auth-provider-btn { flex: 1 1 100px; min-width: 0; display: flex; align-items: center; justify-content: center; gap: var(--space-2); padding: var(--space-2-5); }
|
|
475
498
|
.ds-auth-provider-btn--loading { opacity: 0.7; pointer-events: none; }
|
|
476
499
|
.ds-auth-provider-glyph { font-family: var(--ff-mono); color: var(--panel-text-3); display: inline-flex; }
|
|
477
|
-
.ds-auth-modes { display: flex; justify-content: center; gap: 14px; margin-top:
|
|
500
|
+
.ds-auth-modes { display: flex; justify-content: center; gap: 14px; /* off-scale, matches the auth form inset */ margin-top: var(--space-2); font-size: 13px; flex-wrap: wrap; }
|
|
478
501
|
.ds-auth-mode-link { color: var(--panel-text-3); text-decoration: none; }
|
|
479
502
|
.ds-auth-mode-link--active { color: var(--panel-text); text-decoration: underline; }
|
|
480
|
-
.ds-auth-fineprint { text-align: center; font-size: 12px; color: var(--panel-text-3); margin:
|
|
503
|
+
.ds-auth-fineprint { text-align: center; font-size: 12px; color: var(--panel-text-3); margin: var(--space-1-75) 0; }
|
|
481
504
|
|
|
482
505
|
/* == appended: gallery-misc kit cleanup == */
|
|
483
506
|
/* --- shared helpers (converted from inline styles) --- */
|
|
484
507
|
.ds-m0 { margin: 0; }
|
|
485
508
|
.ds-text-2 { color: var(--panel-text-2); }
|
|
486
509
|
.ds-text-3 { color: var(--panel-text-3); }
|
|
487
|
-
.ds-kit-head { display: flex; align-items: center; justify-content: space-between; gap: clamp(
|
|
510
|
+
.ds-kit-head { display: flex; align-items: center; justify-content: space-between; gap: clamp(var(--space-2), 2vw, var(--space-3)); flex-wrap: wrap; }
|
|
488
511
|
|
|
489
512
|
/* --- gallery kit --- */
|
|
490
513
|
.ds-tile-cap { flex: 1; display: flex; align-items: center; justify-content: center; font-family: var(--ff-mono); white-space: pre-line; color: var(--panel-text-2); font-size: 18px; min-width: 0; text-align: center; }
|
|
491
|
-
.ds-tile-meta { display: flex; align-items: center; justify-content: space-between; gap:
|
|
514
|
+
.ds-tile-meta { display: flex; align-items: center; justify-content: space-between; gap: var(--space-1-75); font-size: 12px; flex-wrap: wrap; min-width: 0; }
|
|
492
515
|
.ds-tile-glyph { font-family: var(--ff-mono); color: var(--panel-text-3); }
|
|
493
516
|
.ds-tile-label { color: var(--panel-text); overflow-wrap: anywhere; }
|
|
494
517
|
.ds-gal-swatch { height: 64px; border-radius: var(--r-0); background: var(--swatch, var(--panel-1)); }
|
|
495
|
-
.ds-gal-swatch-meta { display: flex; justify-content: space-between; gap:
|
|
518
|
+
.ds-gal-swatch-meta { display: flex; justify-content: space-between; gap: var(--space-1-75); flex-wrap: wrap; font-family: var(--ff-mono); font-size: 11px; min-width: 0; }
|
|
496
519
|
.ds-gal-swatch-name { color: var(--panel-text); }
|
|
497
520
|
.ds-gal-swatch-hint { color: var(--panel-text-3); overflow-wrap: anywhere; }
|
|
498
|
-
.ds-lightbox-head { display: flex; justify-content: space-between; align-items: center; gap:
|
|
521
|
+
.ds-lightbox-head { display: flex; justify-content: space-between; align-items: center; gap: var(--space-2); flex-wrap: wrap; }
|
|
499
522
|
/* .ds-lightbox-tag joins the kit small-label voice above, no overrides. */
|
|
500
523
|
|
|
501
524
|
/* --- error_404 kit --- */
|
|
502
|
-
.ds-err-actions { display: flex; gap:
|
|
503
|
-
.ds-err-chips { display: flex; gap:
|
|
525
|
+
.ds-err-actions { display: flex; gap: var(--space-2); flex-wrap: wrap; justify-content: center; margin-top: var(--space-1-75); }
|
|
526
|
+
.ds-err-chips { display: flex; gap: var(--space-1-75); flex-wrap: wrap; justify-content: center; margin-top: var(--space-1); }
|
|
504
527
|
|
|
505
528
|
/* == appended: terminal-capp kit cleanup == */
|
|
506
529
|
/* --- terminal kit ------------------------------------------ */
|
|
507
|
-
.ds-section-pad-sm { padding:
|
|
508
|
-
.ds-kit-head-row { display: flex; align-items: center; justify-content: space-between; gap:
|
|
530
|
+
.ds-section-pad-sm { padding: var(--space-2); }
|
|
531
|
+
.ds-kit-head-row { display: flex; align-items: center; justify-content: space-between; gap: var(--space-3); flex-wrap: wrap; }
|
|
509
532
|
.ds-cli-cmt .cmd { color: var(--fg-3); }
|
|
510
533
|
.ds-cli-out .cmd { color: var(--fg-2); }
|
|
511
534
|
.ds-cli-ok .prompt, .ds-cli-ok .cmd { color: var(--accent-ink); }
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
brand and let it scroll horizontally. The brand stays on the first row;
|
|
15
15
|
nav wraps to a second row at 100% width (flex-wrap on .app-topbar). */
|
|
16
16
|
.app-topbar {
|
|
17
|
-
gap: var(--space-2); padding:
|
|
17
|
+
gap: var(--space-2); padding: var(--space-2-75) var(--space-3);
|
|
18
18
|
}
|
|
19
19
|
/* When the topbar is folded into .app-chrome it is a flex:0 0 auto child, so
|
|
20
20
|
it sizes to its nav's content and overflows the viewport instead of letting
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
.app-chrome > .app-topbar { max-width: 100%; min-width: 0; flex-basis: 100%; }
|
|
24
24
|
.app-topbar > nav {
|
|
25
25
|
flex: 1 1 100%; margin-left: 0; order: 3; min-width: 0; max-width: 100%;
|
|
26
|
-
display: flex; gap:
|
|
26
|
+
display: flex; gap: var(--space-hair); flex-wrap: nowrap;
|
|
27
27
|
overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch;
|
|
28
28
|
/* Fade the trailing edge so a clipped last item (e.g. "source ->" cut to
|
|
29
29
|
"sour") reads as scrollable content, not a broken/truncated label. */
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
}
|
|
33
33
|
.app-topbar nav::-webkit-scrollbar { display: none; }
|
|
34
34
|
.app-topbar nav a {
|
|
35
|
-
flex: 0 0 auto; padding:
|
|
35
|
+
flex: 0 0 auto; padding: var(--space-2-5) var(--space-2-75); min-height: 44px; white-space: nowrap;
|
|
36
36
|
}
|
|
37
37
|
.brand { font-size: var(--fs-tiny); font-weight: 600; }
|
|
38
38
|
|
|
@@ -55,8 +55,8 @@
|
|
|
55
55
|
|
|
56
56
|
.row {
|
|
57
57
|
grid-template-columns: minmax(0, 1fr) auto !important;
|
|
58
|
-
gap: var(--space-2); padding:
|
|
59
|
-
row-gap:
|
|
58
|
+
gap: var(--space-2); padding: var(--space-2-75) var(--space-3);
|
|
59
|
+
row-gap: var(--space-1) !important;
|
|
60
60
|
}
|
|
61
61
|
.row .sub { grid-column: 1 / -1; order: 3; }
|
|
62
62
|
.row .title { font-size: var(--fs-sm); }
|
|
@@ -67,7 +67,10 @@
|
|
|
67
67
|
|
|
68
68
|
/* Buttons */
|
|
69
69
|
.btn, .btn-primary, .btn-ghost {
|
|
70
|
-
|
|
70
|
+
/* 11px vertical is optical, not scale drift: --space-2-75 (12) would tip
|
|
71
|
+
the intrinsic box past the 44px min-height floor below and make the
|
|
72
|
+
floor dead, changing the mobile button rhythm. */
|
|
73
|
+
padding: 11px var(--space-3); font-size: var(--fs-tiny);
|
|
71
74
|
min-height: 44px; /* Touch target minimum */
|
|
72
75
|
}
|
|
73
76
|
|
|
@@ -75,13 +78,13 @@
|
|
|
75
78
|
.ds-file-grid {
|
|
76
79
|
display: flex;
|
|
77
80
|
flex-direction: column;
|
|
78
|
-
gap:
|
|
81
|
+
gap: var(--space-half);
|
|
79
82
|
}
|
|
80
83
|
.ds-file-row {
|
|
81
|
-
gap:
|
|
84
|
+
gap: var(--space-2); padding: var(--space-2-5) var(--space-2-75);
|
|
82
85
|
font-size: var(--fs-xs);
|
|
83
86
|
}
|
|
84
|
-
.ds-file-open { gap:
|
|
87
|
+
.ds-file-open { gap: var(--space-2-5); }
|
|
85
88
|
/* At mobile row widths, a fixed-size meta column (date/size) plus the
|
|
86
89
|
always-visible action buttons leave the flexible title only a few px —
|
|
87
90
|
not enough for even one legible character before the two collide. Drop
|
|
@@ -98,12 +101,12 @@
|
|
|
98
101
|
/* Chat */
|
|
99
102
|
.chat-stack { max-width: 100%; min-width: 0; }
|
|
100
103
|
.chat-bubble {
|
|
101
|
-
padding:
|
|
104
|
+
padding: var(--space-2-5) var(--space-2-75); font-size: var(--fs-sm);
|
|
102
105
|
}
|
|
103
106
|
.chat-avatar { width: 28px; height: 28px; font-size: 11px; }
|
|
104
|
-
.chat-msg:hover { padding:
|
|
105
|
-
.chat-composer { padding:
|
|
106
|
-
.chat-composer textarea { padding:
|
|
107
|
+
.chat-msg:hover { padding: var(--space-1) 0; margin: 0; background: transparent; }
|
|
108
|
+
.chat-composer { padding: var(--space-2); gap: var(--space-1-75); }
|
|
109
|
+
.chat-composer textarea { padding: var(--space-2-5) var(--space-2-75); font-size: var(--fs-sm); }
|
|
107
110
|
|
|
108
111
|
/* KPI Cards */
|
|
109
112
|
.kpi {
|
|
@@ -119,9 +122,11 @@
|
|
|
119
122
|
.empty { padding: var(--space-5); font-size: var(--fs-xs); }
|
|
120
123
|
|
|
121
124
|
/* Form */
|
|
122
|
-
.row-form { gap:
|
|
125
|
+
.row-form { gap: var(--space-2-5); padding: var(--space-3); }
|
|
123
126
|
.row-form input,
|
|
124
|
-
|
|
127
|
+
/* 11px block is the tuned inset that lines the textarea baseline up with the
|
|
128
|
+
sibling input; --space-2-75 (12) would offset the two by 1px each side. */
|
|
129
|
+
.row-form textarea { padding: 11px var(--space-2-75); font-size: var(--fs-sm); }
|
|
125
130
|
|
|
126
131
|
/* Hero Section — keep fluid base font-size, just unconstrain width on mobile. */
|
|
127
132
|
.ds-hero { padding: var(--space-6) 0 var(--space-5); }
|
|
@@ -131,14 +136,14 @@
|
|
|
131
136
|
/* Table Responsiveness */
|
|
132
137
|
table { font-size: var(--fs-xs); }
|
|
133
138
|
table th,
|
|
134
|
-
table td { padding:
|
|
139
|
+
table td { padding: var(--space-2-5) var(--space-2-75); }
|
|
135
140
|
|
|
136
141
|
/* CLI Block */
|
|
137
142
|
.cli {
|
|
138
|
-
flex-direction: column; align-items: flex-start; gap:
|
|
139
|
-
padding:
|
|
143
|
+
flex-direction: column; align-items: flex-start; gap: var(--space-2-5);
|
|
144
|
+
padding: var(--space-3) var(--space-2-75); font-size: var(--fs-xs);
|
|
140
145
|
}
|
|
141
|
-
.cli .copy { padding:
|
|
146
|
+
.cli .copy { padding: var(--space-1-75) var(--space-2-75); font-size: var(--fs-micro); }
|
|
142
147
|
}
|
|
143
148
|
|
|
144
149
|
/* --------------------------------------------------------------------
|
|
@@ -147,8 +152,8 @@
|
|
|
147
152
|
@container (max-width: 760px) {
|
|
148
153
|
.app-body { grid-template-columns: 1fr !important; }
|
|
149
154
|
.app-side-shell { border-right: 0; border-bottom: 1px solid var(--rule); }
|
|
150
|
-
.app-topbar nav { font-size: var(--fs-xs); gap:
|
|
151
|
-
.row { grid-template-columns: minmax(0, 1fr) auto !important; row-gap:
|
|
155
|
+
.app-topbar nav { font-size: var(--fs-xs); gap: var(--space-2-75); }
|
|
156
|
+
.row { grid-template-columns: minmax(0, 1fr) auto !important; row-gap: var(--space-1) !important; }
|
|
152
157
|
.row .sub { grid-column: 1 / -1; order: 3; }
|
|
153
158
|
.ds-changelog-row { grid-template-columns: minmax(70px, 10ch) minmax(0, 1fr) !important; }
|
|
154
159
|
.ds-changelog-row .title { grid-column: 1 / -1; }
|
|
@@ -160,7 +165,7 @@
|
|
|
160
165
|
@media (min-width: 481px) and (max-width: 1024px) {
|
|
161
166
|
/* App Layout — side handled by 900px drawer block; restore for 901-1024 */
|
|
162
167
|
.app-side a {
|
|
163
|
-
padding:
|
|
168
|
+
padding: var(--space-2-75) var(--space-2-75); gap: var(--space-2);
|
|
164
169
|
grid-template-columns: 16px 1fr auto;
|
|
165
170
|
font-size: var(--fs-xs);
|
|
166
171
|
min-height: 44px;
|
|
@@ -168,14 +173,14 @@
|
|
|
168
173
|
|
|
169
174
|
/* Topbar Navigation (flex container — no grid-template here) */
|
|
170
175
|
.app-topbar {
|
|
171
|
-
gap: var(--space-3); padding:
|
|
176
|
+
gap: var(--space-3); padding: var(--space-2-75) var(--space-4);
|
|
172
177
|
}
|
|
173
178
|
.app-topbar nav {
|
|
174
|
-
display: flex; gap:
|
|
179
|
+
display: flex; gap: var(--space-2); font-size: var(--fs-xs);
|
|
175
180
|
flex-wrap: wrap;
|
|
176
181
|
}
|
|
177
182
|
.app-topbar nav a {
|
|
178
|
-
padding:
|
|
183
|
+
padding: var(--space-2-75) var(--space-2-75); font-size: var(--fs-xs);
|
|
179
184
|
min-height: 44px;
|
|
180
185
|
}
|
|
181
186
|
.brand { font-size: var(--fs-sm); }
|
|
@@ -184,7 +189,10 @@
|
|
|
184
189
|
.app-search {
|
|
185
190
|
display: inline-flex;
|
|
186
191
|
max-width: 280px; font-size: var(--fs-xs);
|
|
187
|
-
|
|
192
|
+
/* 14px inline is between --space-2-75 (12) and --space-3 (16) with no tier;
|
|
193
|
+
it is the width that centers the search glyph against the 280px max-width
|
|
194
|
+
field. Snapping either way reads as a mis-centered control. */
|
|
195
|
+
padding: var(--space-2) 14px;
|
|
188
196
|
}
|
|
189
197
|
|
|
190
198
|
/* Main Content */
|
|
@@ -196,12 +204,17 @@
|
|
|
196
204
|
/* File list — single column rows on tablet (cards only via data-columns) */
|
|
197
205
|
.ds-file-row {
|
|
198
206
|
grid-template-columns: 24px minmax(0, 1fr) auto auto;
|
|
199
|
-
|
|
207
|
+
/* 14px inline (no tier between 12 and 16) is the tablet row inset that
|
|
208
|
+
keeps the 24px icon column optically flush with the panel edge. */
|
|
209
|
+
gap: var(--space-2-75); padding: var(--space-2-75) 14px;
|
|
200
210
|
}
|
|
201
211
|
|
|
202
212
|
/* Chat Bubbles */
|
|
203
213
|
.chat-stack { max-width: min(75%, 420px); }
|
|
204
214
|
.chat-bubble {
|
|
215
|
+
/* 11px/14px are the tuned tablet bubble insets; neither is on the scale
|
|
216
|
+
(11 sits between --space-2-5 and --space-2-75, 14 between --space-2-75
|
|
217
|
+
and --space-3) and snapping visibly re-pitches every bubble in a thread. */
|
|
205
218
|
padding: 11px 14px; font-size: var(--fs-sm);
|
|
206
219
|
}
|
|
207
220
|
.chat-avatar { width: 32px; height: 32px; font-size: 12px; }
|
|
@@ -214,7 +227,10 @@
|
|
|
214
227
|
|
|
215
228
|
/* Buttons */
|
|
216
229
|
.btn, .btn-primary, .btn-ghost {
|
|
217
|
-
|
|
230
|
+
/* 18px inline has no tier (--space-3 is 16, --space-3-5 is 20); it is the
|
|
231
|
+
tablet CTA width tuned against the 12px vertical, so snapping changes
|
|
232
|
+
the button aspect on the most visible control in the kit. */
|
|
233
|
+
padding: var(--space-2-75) 18px; font-size: var(--fs-sm);
|
|
218
234
|
}
|
|
219
235
|
|
|
220
236
|
/* Panel - keep the head on the body's left axis at laptop widths too. */
|
|
@@ -228,7 +244,9 @@
|
|
|
228
244
|
/* Row */
|
|
229
245
|
.row {
|
|
230
246
|
grid-template-columns: minmax(90px, 12ch) minmax(0, 1fr) auto;
|
|
231
|
-
|
|
247
|
+
/* 14px block (no tier between 12 and 16) is the tablet row height tuned
|
|
248
|
+
against the 12ch code column; snapping re-pitches the whole list. */
|
|
249
|
+
gap: var(--space-2); padding: 14px var(--space-3);
|
|
232
250
|
}
|
|
233
251
|
}
|
|
234
252
|
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
.fd-chat-config .fd-chat-field { display: flex; flex-direction: column; gap: var(--space-1, 4px); min-width: 120px; }
|
|
60
60
|
.fd-chat-config .fd-chat-field > label { font-family: var(--os-mono, monospace); font-size: 10px; opacity: 0.6; letter-spacing: 0.05em; text-transform: uppercase; }
|
|
61
61
|
.fd-chat-config .fd-chat-field > input,
|
|
62
|
-
.fd-chat-config .fd-chat-field > select { width: 100%; box-sizing: border-box; padding:
|
|
62
|
+
.fd-chat-config .fd-chat-field > select { width: 100%; box-sizing: border-box; padding: var(--space-1-75) var(--space-2); background: var(--panel-1, transparent); color: var(--fg, inherit); border: 1px solid color-mix(in oklab, var(--fg) 14%, transparent); border-radius: var(--r-0); font: inherit; font-size: 12px; }
|
|
63
63
|
.fd-chat-config .fd-chat-field > input:focus-visible,
|
|
64
64
|
.fd-chat-config .fd-chat-field > select:focus-visible { outline: 2px solid var(--os-accent, #247420); outline-offset: 0; border-color: color-mix(in oklab, var(--os-accent, #247420) 60%, transparent); }
|
|
65
65
|
.fd-chat-config .fd-chat-row { display: flex; gap: var(--space-2, 8px); flex-wrap: wrap; }
|
|
@@ -68,5 +68,5 @@
|
|
|
68
68
|
.app-fd ds-chat.fd-dashboard-chat { flex: 1 1 auto; min-height: 280px; display: flex; flex-direction: column; overflow: hidden; }
|
|
69
69
|
|
|
70
70
|
.fd-chat-actions { display: inline-flex; gap: var(--space-1, 4px); align-items: center; }
|
|
71
|
-
.fd-chat-actions .btn-secondary { background: transparent; color: var(--danger, #c0392b); border: 1px solid color-mix(in oklab, var(--danger, #c0392b) 40%, transparent); cursor: pointer; padding:
|
|
71
|
+
.fd-chat-actions .btn-secondary { background: transparent; color: var(--danger, #c0392b); border: 1px solid color-mix(in oklab, var(--danger, #c0392b) 40%, transparent); cursor: pointer; padding: var(--space-hair) var(--space-2); border-radius: var(--r-0); font: inherit; font-size: 12px; }
|
|
72
72
|
.fd-chat-actions .btn-secondary:hover { background: color-mix(in oklab, var(--danger, #c0392b) 10%, transparent); }
|