anentrypoint-design 0.0.146 → 0.0.148
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/app-shell.css +166 -22
- package/colors_and_type.css +21 -1
- package/community.css +25 -4
- package/dist/247420.css +227 -30
- package/dist/247420.js +13 -12
- package/package.json +1 -1
- package/src/components/chat.js +2 -2
- package/src/components/community.js +4 -4
- package/src/components/content.js +17 -8
- package/src/components/editor-primitives.js +2 -2
- package/src/components/form-primitives.js +25 -12
- package/src/components/freddie/runtime.js +101 -0
- package/src/components/freddie.js +614 -27
- package/src/components/overlay-primitives.js +3 -2
- package/src/components/shell.js +40 -5
- package/src/components.js +2 -2
- package/src/kits/os/freddie/pages-chat.js +1 -1
- package/src/kits/os/freddie/pages-core.js +1 -1
- package/src/kits/os/freddie-dashboard.js +3 -3
- package/src/kits/os/shell.js +2 -0
package/app-shell.css
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
============================================================ */
|
|
10
10
|
* { box-sizing: border-box; }
|
|
11
11
|
html, body { margin: 0; padding: 0; }
|
|
12
|
+
button, input, select, textarea { font: inherit; }
|
|
12
13
|
|
|
13
14
|
/* ============================================================
|
|
14
15
|
Accessibility — Skip Link
|
|
@@ -28,7 +29,7 @@ html, body { margin: 0; padding: 0; }
|
|
|
28
29
|
}
|
|
29
30
|
.skip-link:focus {
|
|
30
31
|
top: 10px;
|
|
31
|
-
outline: 2px solid var(--
|
|
32
|
+
outline: 2px solid var(--accent);
|
|
32
33
|
outline-offset: 2px;
|
|
33
34
|
}
|
|
34
35
|
body {
|
|
@@ -71,7 +72,7 @@ h4, .t-h4 { font-family: var(--ff-body); font-size: var(--fs-h4); line-height: v
|
|
|
71
72
|
|
|
72
73
|
.lede, .t-lede {
|
|
73
74
|
font-family: var(--ff-body); font-size: var(--fs-xl);
|
|
74
|
-
line-height:
|
|
75
|
+
line-height: var(--lh-tall); max-width: 38ch; font-weight: 400; color: var(--fg-2);
|
|
75
76
|
margin: 0;
|
|
76
77
|
}
|
|
77
78
|
|
|
@@ -127,8 +128,8 @@ code {
|
|
|
127
128
|
|
|
128
129
|
pre {
|
|
129
130
|
font-family: var(--ff-mono);
|
|
130
|
-
background: var(--
|
|
131
|
-
color: var(--
|
|
131
|
+
background: var(--panel-bg, #15151a);
|
|
132
|
+
color: var(--panel-text, inherit);
|
|
132
133
|
padding: var(--space-5);
|
|
133
134
|
overflow-x: auto;
|
|
134
135
|
line-height: 1.55;
|
|
@@ -157,10 +158,19 @@ pre .n { color: var(--green-2); }
|
|
|
157
158
|
padding-right: env(safe-area-inset-right);
|
|
158
159
|
}
|
|
159
160
|
|
|
161
|
+
/* When the app shell is embedded inside a windowed surface (e.g. the freddie
|
|
162
|
+
dashboard mounted in a WM window via .fd-root) it is NOT a full-page app:
|
|
163
|
+
`min-height:100vh` and the absence of an explicit width make it collapse to
|
|
164
|
+
0 width at desktop, where the responsive single-column @media rules don't
|
|
165
|
+
apply. Inside .fd-root it must fill its container instead. (At <=767px the
|
|
166
|
+
grid already linearizes, which is why the bug only showed at desktop width.) */
|
|
167
|
+
.fd-root .app { width: 100%; height: 100%; min-height: 0; flex: 1 1 auto; }
|
|
168
|
+
.fd-root .app-body { min-width: 0; }
|
|
169
|
+
|
|
160
170
|
:root {
|
|
161
|
-
--app-status-h:
|
|
162
|
-
--app-topbar-h:
|
|
163
|
-
--app-crumb-h:
|
|
171
|
+
--app-status-h: var(--size-base);
|
|
172
|
+
--app-topbar-h: var(--size-lg);
|
|
173
|
+
--app-crumb-h: var(--size-sm);
|
|
164
174
|
}
|
|
165
175
|
|
|
166
176
|
.app-topbar {
|
|
@@ -229,8 +239,11 @@ pre .n { color: var(--green-2); }
|
|
|
229
239
|
.app-crumb .crumb-right { margin-left: auto; color: var(--fg-3); }
|
|
230
240
|
|
|
231
241
|
.app-side-shell { background: var(--bg); }
|
|
232
|
-
.app-body { display: grid; grid-template-columns:
|
|
242
|
+
.app-body { display: grid; grid-template-columns: var(--sidebar-width) minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); align-items: stretch; align-content: stretch; flex: 1; min-height: 0; }
|
|
233
243
|
.app-body.no-side { grid-template-columns: minmax(0, 1fr); }
|
|
244
|
+
/* When there is no sidebar, the empty side-shell must not occupy a grid row,
|
|
245
|
+
otherwise main wraps to a second (collapsed) row. Remove it from layout. */
|
|
246
|
+
.app-body.no-side .app-side-shell { display: none; }
|
|
234
247
|
|
|
235
248
|
.app-side {
|
|
236
249
|
display: flex; flex-direction: column; gap: var(--space-4);
|
|
@@ -270,23 +283,34 @@ pre .n { color: var(--green-2); }
|
|
|
270
283
|
.app-main {
|
|
271
284
|
padding: var(--space-5) var(--pad-x) 0;
|
|
272
285
|
min-width: 0;
|
|
286
|
+
/* Full-height flex column so a single flex:1 child (e.g. .chat) fills the
|
|
287
|
+
region between crumb and status instead of floating at content height. */
|
|
288
|
+
display: flex; flex-direction: column;
|
|
289
|
+
min-height: 0;
|
|
290
|
+
align-self: stretch;
|
|
291
|
+
height: 100%;
|
|
273
292
|
}
|
|
274
|
-
.app-main
|
|
293
|
+
.app-main > * { min-height: 0; }
|
|
294
|
+
.app-main.narrow { max-width: var(--measure-narrow); margin: 0 auto; }
|
|
275
295
|
|
|
276
296
|
@media (min-width: 1400px) {
|
|
277
297
|
.app { max-width: 1400px; margin-left: auto; margin-right: auto; }
|
|
278
298
|
.app-main .chat,
|
|
279
299
|
.app-main > .chat-area,
|
|
280
300
|
.app-main > .main-content { max-width: none; margin: 0; width: 100%; }
|
|
281
|
-
|
|
301
|
+
/* Status bar inherits the .app max-width cap above and stretches edge-to-edge
|
|
302
|
+
within it; no separate width constraint (which previously narrowed it). */
|
|
303
|
+
.app-status { width: 100%; }
|
|
282
304
|
}
|
|
283
305
|
|
|
284
306
|
.app-status {
|
|
285
307
|
display: flex; align-items: center; gap: var(--space-3);
|
|
308
|
+
width: 100%;
|
|
286
309
|
min-height: var(--app-status-h);
|
|
287
310
|
padding: 10px var(--pad-x);
|
|
288
311
|
font-family: var(--ff-mono); font-size: var(--fs-xs);
|
|
289
312
|
color: var(--fg-3);
|
|
313
|
+
border-top: 1px solid var(--rule);
|
|
290
314
|
}
|
|
291
315
|
.app-status .item { color: inherit; }
|
|
292
316
|
.app-status .item:first-of-type { color: var(--accent); }
|
|
@@ -318,6 +342,54 @@ pre .n { color: var(--green-2); }
|
|
|
318
342
|
outline-offset: 2px;
|
|
319
343
|
}
|
|
320
344
|
|
|
345
|
+
/* ============================================================
|
|
346
|
+
IconButton — square icon-only button
|
|
347
|
+
============================================================ */
|
|
348
|
+
.ds-icon-btn {
|
|
349
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
350
|
+
padding: 0; border: none; cursor: pointer;
|
|
351
|
+
border-radius: var(--r-1, 6px);
|
|
352
|
+
background: transparent; color: var(--fg);
|
|
353
|
+
width: 32px; height: 32px;
|
|
354
|
+
}
|
|
355
|
+
.ds-icon-btn-xs { width: 22px; height: 22px; }
|
|
356
|
+
.ds-icon-btn-sm { width: 26px; height: 26px; }
|
|
357
|
+
.ds-icon-btn-base { width: 32px; height: 32px; }
|
|
358
|
+
.ds-icon-btn-lg { width: 40px; height: 40px; }
|
|
359
|
+
.ds-icon-btn-xl { width: 48px; height: 48px; }
|
|
360
|
+
.ds-icon-btn-ghost { background: transparent; }
|
|
361
|
+
.ds-icon-btn-ghost:hover { background: var(--bg-2); }
|
|
362
|
+
.ds-icon-btn-primary { background: var(--accent); color: var(--accent-fg); }
|
|
363
|
+
.ds-icon-btn-primary:hover { background: var(--fg); color: var(--bg); }
|
|
364
|
+
.ds-icon-btn-danger { background: var(--flame); color: var(--paper); }
|
|
365
|
+
.ds-icon-btn-danger:hover { filter: brightness(1.1); }
|
|
366
|
+
.ds-icon-btn:active { transform: translateY(1px); }
|
|
367
|
+
.ds-icon-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
368
|
+
.ds-icon-btn:disabled, .ds-icon-btn.is-disabled {
|
|
369
|
+
opacity: 0.5; cursor: not-allowed; pointer-events: none;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/* ============================================================
|
|
373
|
+
Badge — small inline count/status pill
|
|
374
|
+
============================================================ */
|
|
375
|
+
.ds-badge {
|
|
376
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
377
|
+
min-width: 18px; height: 18px; padding: 0 6px;
|
|
378
|
+
font-size: 11px; font-weight: 600; line-height: 1;
|
|
379
|
+
border-radius: 999px;
|
|
380
|
+
background: var(--bg-3); color: var(--fg-2);
|
|
381
|
+
}
|
|
382
|
+
.ds-badge.tone-green { background: var(--green-tint); color: var(--green-deep); }
|
|
383
|
+
.ds-badge.tone-purple { background: var(--purple-tint); color: var(--purple-deep); }
|
|
384
|
+
.ds-badge.tone-mascot { background: var(--mascot-tint); color: var(--ink); }
|
|
385
|
+
.ds-badge.tone-sun { background: var(--sun); color: var(--ink); }
|
|
386
|
+
.ds-badge.tone-flame { background: var(--flame); color: var(--paper); }
|
|
387
|
+
.ds-badge.tone-live { background: var(--green-tint); color: var(--green-deep); }
|
|
388
|
+
.ds-badge.tone-wip { background: var(--bg-3); color: var(--fg-2); }
|
|
389
|
+
.ds-badge.tone-error { background: var(--flame); color: var(--paper); }
|
|
390
|
+
.ds-badge.tone-success { background: var(--green-tint); color: var(--green-deep); }
|
|
391
|
+
.ds-badge.tone-neutral { background: var(--bg-3); color: var(--fg-2); }
|
|
392
|
+
|
|
321
393
|
.chip {
|
|
322
394
|
display: inline-flex; align-items: center; gap: 6px;
|
|
323
395
|
padding: 3px 10px;
|
|
@@ -334,6 +406,12 @@ pre .n { color: var(--green-2); }
|
|
|
334
406
|
.chip.tone-flame { background: var(--flame); color: var(--paper); }
|
|
335
407
|
.chip.tone-live { background: var(--green-tint); color: var(--green-deep); }
|
|
336
408
|
.chip.tone-wip { background: var(--bg-3); color: var(--fg-2); }
|
|
409
|
+
.chip.tone-error { background: var(--flame); color: var(--paper); }
|
|
410
|
+
.chip.tone-success { background: var(--green-tint); color: var(--green-deep); }
|
|
411
|
+
.chip.tone-disabled { background: var(--bg-3); color: var(--fg-3); }
|
|
412
|
+
.chip.tone-ok { background: var(--green-tint); color: var(--green-deep); }
|
|
413
|
+
.chip.tone-miss { background: var(--flame); color: var(--paper); }
|
|
414
|
+
.chip.tone-neutral { background: var(--bg-3); color: var(--fg-2); }
|
|
337
415
|
|
|
338
416
|
.glyph {
|
|
339
417
|
display: inline-flex; align-items: center; justify-content: center;
|
|
@@ -394,6 +472,9 @@ pre .n { color: var(--green-2); }
|
|
|
394
472
|
.row:hover::before { background: var(--rule-strong); }
|
|
395
473
|
.row.active { background: color-mix(in oklab, var(--accent) 10%, var(--bg-2)); }
|
|
396
474
|
.row.active::before { background: var(--accent); }
|
|
475
|
+
.row.row-state-disabled { opacity: 0.5; pointer-events: none; }
|
|
476
|
+
.row.row-state-error { background: color-mix(in oklab, var(--flame) 10%, var(--bg-2)); }
|
|
477
|
+
.row.row-state-error::before { background: var(--flame); }
|
|
397
478
|
.row-grid { /* explicit grid-template-columns set inline */ }
|
|
398
479
|
|
|
399
480
|
.row .code { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
|
|
@@ -409,7 +490,7 @@ a.row { text-decoration: none; }
|
|
|
409
490
|
.ds-hero {
|
|
410
491
|
padding: var(--space-9) 0 var(--space-8);
|
|
411
492
|
display: grid; gap: var(--space-5);
|
|
412
|
-
max-width:
|
|
493
|
+
max-width: var(--measure-wide);
|
|
413
494
|
}
|
|
414
495
|
.ds-hero-title {
|
|
415
496
|
font-family: var(--ff-body); font-weight: 600;
|
|
@@ -423,6 +504,8 @@ a.row { text-decoration: none; }
|
|
|
423
504
|
color: var(--fg-2);
|
|
424
505
|
}
|
|
425
506
|
.ds-hero-accent { color: var(--accent); font-weight: 500; }
|
|
507
|
+
.ds-hero-actions { display: flex; gap: var(--space-2, 10px); flex-wrap: wrap; margin-top: var(--space-2, 8px); }
|
|
508
|
+
.ds-chat-title { margin: 0; font-size: inherit; }
|
|
426
509
|
|
|
427
510
|
/* ============================================================
|
|
428
511
|
Section grouping
|
|
@@ -588,6 +671,21 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
588
671
|
.row-form input:focus,
|
|
589
672
|
.row-form textarea:focus { box-shadow: inset 0 0 0 2px var(--accent); }
|
|
590
673
|
|
|
674
|
+
/* Field char counter (TextField maxLength) */
|
|
675
|
+
.ds-field-count {
|
|
676
|
+
font-size: var(--fs-tiny, 12px);
|
|
677
|
+
color: var(--fg-3, var(--fg-2));
|
|
678
|
+
text-align: right;
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
/* Multi-column form layout (Form columns prop) */
|
|
682
|
+
.row-form[data-columns="2"] { grid-template-columns: repeat(2, 1fr); }
|
|
683
|
+
.row-form[data-columns="3"] { grid-template-columns: repeat(3, 1fr); }
|
|
684
|
+
@media (max-width: 600px) {
|
|
685
|
+
.row-form[data-columns="2"],
|
|
686
|
+
.row-form[data-columns="3"] { grid-template-columns: 1fr; }
|
|
687
|
+
}
|
|
688
|
+
|
|
591
689
|
/* ============================================================
|
|
592
690
|
Responsive Design — Mobile (480px), Tablet (1024px), Desktop (1440px+)
|
|
593
691
|
============================================================ */
|
|
@@ -668,7 +766,6 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
668
766
|
/* Chat */
|
|
669
767
|
.chat-stack { max-width: 100%; min-width: 0; }
|
|
670
768
|
.chat-bubble {
|
|
671
|
-
max-width: clamp(200px, 85vw, 320px);
|
|
672
769
|
padding: 10px 12px; font-size: var(--fs-sm);
|
|
673
770
|
}
|
|
674
771
|
.chat-avatar { width: 28px; height: 28px; font-size: 11px; }
|
|
@@ -778,7 +875,6 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
778
875
|
/* Chat Bubbles */
|
|
779
876
|
.chat-stack { max-width: min(75%, 420px); }
|
|
780
877
|
.chat-bubble {
|
|
781
|
-
max-width: clamp(220px, 75vw, 420px);
|
|
782
878
|
padding: 11px 14px; font-size: var(--fs-sm);
|
|
783
879
|
}
|
|
784
880
|
.chat-avatar { width: 32px; height: 32px; font-size: 12px; }
|
|
@@ -809,15 +905,29 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
809
905
|
}
|
|
810
906
|
}
|
|
811
907
|
|
|
908
|
+
/* ────────────────────────────────────────────────────────────────────
|
|
909
|
+
Mid Breakpoint (768px and below) — collapse sidebar + simplify row grid
|
|
910
|
+
────────────────────────────────────────────────────────────────────── */
|
|
911
|
+
@media (max-width: 768px) {
|
|
912
|
+
/* Sidebar stacks above main rather than sitting beside it */
|
|
913
|
+
.app-body { grid-template-columns: 1fr; }
|
|
914
|
+
.app-side { width: 100%; max-width: none; }
|
|
915
|
+
|
|
916
|
+
/* Row drops the leading code column; title + meta share the line */
|
|
917
|
+
.row {
|
|
918
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
919
|
+
gap: var(--space-2);
|
|
920
|
+
}
|
|
921
|
+
.row .code { display: none; }
|
|
922
|
+
.row .sub { grid-column: 1 / -1; }
|
|
923
|
+
}
|
|
924
|
+
|
|
812
925
|
/* ────────────────────────────────────────────────────────────────────
|
|
813
926
|
Desktop Breakpoint Enhancements (1025px and up)
|
|
814
927
|
────────────────────────────────────────────────────────────────────── */
|
|
815
928
|
@media (min-width: 1025px) {
|
|
816
929
|
/* Chat Bubbles */
|
|
817
930
|
.chat-stack { max-width: min(70%, 480px); }
|
|
818
|
-
.chat-bubble {
|
|
819
|
-
max-width: clamp(240px, 70vw, 480px);
|
|
820
|
-
}
|
|
821
931
|
|
|
822
932
|
/* KPI Cards */
|
|
823
933
|
.kpi {
|
|
@@ -1096,7 +1206,7 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
1096
1206
|
border-radius: var(--r-2); color: var(--fg);
|
|
1097
1207
|
font-family: inherit; font-size: var(--fs-sm);
|
|
1098
1208
|
}
|
|
1099
|
-
.ds-modal-input:focus { outline: 2px solid var(--accent); outline-offset:
|
|
1209
|
+
.ds-modal-input:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1100
1210
|
.btn-primary.danger {
|
|
1101
1211
|
background: var(--warn);
|
|
1102
1212
|
border-color: var(--warn);
|
|
@@ -1185,7 +1295,7 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
1185
1295
|
border-radius: var(--r-pill); color: var(--fg);
|
|
1186
1296
|
font-family: inherit; font-size: var(--fs-xs);
|
|
1187
1297
|
}
|
|
1188
|
-
.ds-filter-input:focus { outline: 2px solid var(--accent); outline-offset:
|
|
1298
|
+
.ds-filter-input:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1189
1299
|
|
|
1190
1300
|
/* Loading skeleton — placeholder rows while a directory loads. */
|
|
1191
1301
|
.ds-file-grid-loading { display: flex; flex-direction: column; gap: 4px; }
|
|
@@ -1374,7 +1484,7 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
1374
1484
|
border-radius: 14px; line-height: 1.55;
|
|
1375
1485
|
word-wrap: break-word; overflow-wrap: anywhere;
|
|
1376
1486
|
font-size: var(--fs-sm);
|
|
1377
|
-
max-width:
|
|
1487
|
+
max-width: clamp(220px, min(75vw, 28em), 480px);
|
|
1378
1488
|
min-width: 0;
|
|
1379
1489
|
transition: transform 0.12s ease, box-shadow 0.12s ease;
|
|
1380
1490
|
}
|
|
@@ -1648,6 +1758,8 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
1648
1758
|
font-family: inherit; font-size: var(--fs-sm);
|
|
1649
1759
|
line-height: 1.4; resize: none;
|
|
1650
1760
|
min-height: 44px; max-height: 200px;
|
|
1761
|
+
box-sizing: border-box; overflow-y: auto;
|
|
1762
|
+
scrollbar-width: thin;
|
|
1651
1763
|
}
|
|
1652
1764
|
.chat-composer textarea::placeholder { color: var(--fg-3); }
|
|
1653
1765
|
.chat-composer textarea:focus {
|
|
@@ -2205,6 +2317,12 @@ body {
|
|
|
2205
2317
|
.ds-spinner-sm { height: 12px; gap: 2px; }
|
|
2206
2318
|
.ds-spinner-sm span { width: 2px; height: 2px; }
|
|
2207
2319
|
|
|
2320
|
+
.ds-spinner-xs { height: 8px; gap: 1px; }
|
|
2321
|
+
.ds-spinner-xs span { width: 1.5px; height: 1.5px; }
|
|
2322
|
+
|
|
2323
|
+
.ds-spinner-xl { height: 32px; gap: 8px; }
|
|
2324
|
+
.ds-spinner-xl span { width: 8px; height: 8px; }
|
|
2325
|
+
|
|
2208
2326
|
@keyframes ds-bounce {
|
|
2209
2327
|
0%, 80%, 100% { transform: translateY(0); }
|
|
2210
2328
|
40% { transform: translateY(-8px); }
|
|
@@ -2330,7 +2448,7 @@ body {
|
|
|
2330
2448
|
.app-main { padding-left: var(--space-3); padding-right: var(--space-3); }
|
|
2331
2449
|
}
|
|
2332
2450
|
|
|
2333
|
-
/* Drawer scrim */
|
|
2451
|
+
/* Drawer scrim — lives inside .app-body, shown when drawer open ≤900px */
|
|
2334
2452
|
.app-side-scrim {
|
|
2335
2453
|
display: none;
|
|
2336
2454
|
position: fixed; inset: 0;
|
|
@@ -2338,8 +2456,34 @@ body {
|
|
|
2338
2456
|
z-index: 49;
|
|
2339
2457
|
}
|
|
2340
2458
|
@media (max-width: 900px) {
|
|
2341
|
-
.app-body.side-open
|
|
2342
|
-
|
|
2459
|
+
.app-body.side-open .app-side-scrim { display: block; }
|
|
2460
|
+
}
|
|
2461
|
+
|
|
2462
|
+
/* Mobile nav toggle (hamburger) — hidden on desktop, shown ≤900px */
|
|
2463
|
+
.app-side-toggle {
|
|
2464
|
+
display: none;
|
|
2465
|
+
position: fixed; top: calc((var(--app-topbar-h) - 32px) / 2); left: 10px;
|
|
2466
|
+
z-index: 51;
|
|
2467
|
+
width: 36px; height: 36px;
|
|
2468
|
+
align-items: center; justify-content: center;
|
|
2469
|
+
font-size: 18px; line-height: 1;
|
|
2470
|
+
background: var(--bg-2); color: var(--fg);
|
|
2471
|
+
border: 1px solid var(--rule, color-mix(in oklab, var(--fg) 12%, transparent));
|
|
2472
|
+
border-radius: var(--r-1, 6px);
|
|
2473
|
+
cursor: pointer;
|
|
2474
|
+
}
|
|
2475
|
+
.app-side-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
2476
|
+
@media (max-width: 900px) {
|
|
2477
|
+
.app-side-toggle { display: inline-flex; }
|
|
2478
|
+
.app-topbar .brand { margin-left: 44px; }
|
|
2479
|
+
}
|
|
2480
|
+
|
|
2481
|
+
/* Desktop: independent scroll for side rail and main, so a short viewport
|
|
2482
|
+
keeps the bottom nav items reachable and main scrolls on its own. */
|
|
2483
|
+
@media (min-width: 901px) {
|
|
2484
|
+
.app-body { min-height: 0; max-height: calc(100vh - var(--app-topbar-h) - var(--app-crumb-h, 0px) - var(--app-status-h, 0px)); }
|
|
2485
|
+
.app-side-shell { overflow-y: auto; max-height: 100%; }
|
|
2486
|
+
.app-main { overflow-y: auto; max-height: 100%; }
|
|
2343
2487
|
}
|
|
2344
2488
|
|
|
2345
2489
|
/* Mobile (≤480) status bar compact; hide tail item */
|
package/colors_and_type.css
CHANGED
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,700&family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
|
8
8
|
|
|
9
9
|
:root {
|
|
10
|
+
/* Tree view indentation tokens */
|
|
11
|
+
--tree-indent: 12px;
|
|
12
|
+
--tree-base-indent: 6px;
|
|
13
|
+
|
|
10
14
|
/* Paper / Ink — cool stone scale; lets lore palette pop. */
|
|
11
15
|
--paper: #F6F5F1;
|
|
12
16
|
--paper-2: #ECEBE6;
|
|
@@ -136,6 +140,18 @@
|
|
|
136
140
|
--z-overlay: 1000;
|
|
137
141
|
|
|
138
142
|
--measure: 68ch;
|
|
143
|
+
--measure-wide: 940px;
|
|
144
|
+
--measure-narrow: 760px;
|
|
145
|
+
|
|
146
|
+
--sidebar-width: 220px;
|
|
147
|
+
--sidebar-width-collapsed: 64px;
|
|
148
|
+
|
|
149
|
+
--lh-tall: 1.4;
|
|
150
|
+
|
|
151
|
+
/* Control size scale — heights for status/topbar/crumb + controls. */
|
|
152
|
+
--size-sm: 32px;
|
|
153
|
+
--size-base: 42px;
|
|
154
|
+
--size-lg: 56px;
|
|
139
155
|
}
|
|
140
156
|
|
|
141
157
|
/* ============================================================
|
|
@@ -166,7 +182,7 @@ input:focus-visible,
|
|
|
166
182
|
textarea:focus-visible,
|
|
167
183
|
select:focus-visible {
|
|
168
184
|
outline: 2px solid var(--accent);
|
|
169
|
-
outline-offset:
|
|
185
|
+
outline-offset: 2px;
|
|
170
186
|
}
|
|
171
187
|
|
|
172
188
|
/* Interactive element focus-visible */
|
|
@@ -198,6 +214,10 @@ select:focus-visible {
|
|
|
198
214
|
--danger: oklch(0.68 0.19 25);
|
|
199
215
|
}
|
|
200
216
|
|
|
217
|
+
/* NOTE: the [data-theme="auto"] block below intentionally duplicates the
|
|
218
|
+
[data-theme="ink"/"dark"] block above. They are NOT literally identical —
|
|
219
|
+
the explicit-dark block also overrides --danger for contrast — so they are
|
|
220
|
+
kept separate rather than consolidated to avoid a behavior change. */
|
|
201
221
|
@media (prefers-color-scheme: dark) {
|
|
202
222
|
[data-theme="auto"] {
|
|
203
223
|
--bg: var(--ink);
|
package/community.css
CHANGED
|
@@ -512,7 +512,7 @@
|
|
|
512
512
|
width: 20px;
|
|
513
513
|
height: 20px;
|
|
514
514
|
border-radius: 50%;
|
|
515
|
-
background: var(--bg-3);
|
|
515
|
+
background: var(--avatar-bg, var(--bg-3));
|
|
516
516
|
color: var(--fg-2);
|
|
517
517
|
display: inline-flex;
|
|
518
518
|
align-items: center;
|
|
@@ -645,7 +645,7 @@
|
|
|
645
645
|
width: 32px;
|
|
646
646
|
height: 32px;
|
|
647
647
|
border-radius: 50%;
|
|
648
|
-
background: var(--bg-3);
|
|
648
|
+
background: var(--avatar-bg, var(--bg-3));
|
|
649
649
|
color: var(--fg-2);
|
|
650
650
|
display: inline-flex;
|
|
651
651
|
align-items: center;
|
|
@@ -849,7 +849,7 @@
|
|
|
849
849
|
width: 28px;
|
|
850
850
|
height: 28px;
|
|
851
851
|
border-radius: 50%;
|
|
852
|
-
background: var(--bg-3);
|
|
852
|
+
background: var(--avatar-bg, var(--bg-3));
|
|
853
853
|
color: var(--fg-2);
|
|
854
854
|
display: inline-flex;
|
|
855
855
|
align-items: center;
|
|
@@ -910,7 +910,7 @@
|
|
|
910
910
|
width: 56px;
|
|
911
911
|
height: 56px;
|
|
912
912
|
border-radius: 50%;
|
|
913
|
-
background: var(--bg-3);
|
|
913
|
+
background: var(--avatar-bg, var(--bg-3));
|
|
914
914
|
color: var(--fg-2);
|
|
915
915
|
display: inline-flex;
|
|
916
916
|
align-items: center;
|
|
@@ -1501,3 +1501,24 @@
|
|
|
1501
1501
|
.cm-page-edit { padding: var(--space-1) var(--space-2); border: var(--bw-hair) solid var(--rule-strong); border-radius: var(--r-1); background: var(--bg-3); color: var(--fg); cursor: pointer; }
|
|
1502
1502
|
.cm-page-body { padding: var(--space-3); line-height: 1.6; }
|
|
1503
1503
|
.cm-page-empty { color: var(--fg-2, var(--fg)); opacity: .7; }
|
|
1504
|
+
|
|
1505
|
+
/* ============================================================
|
|
1506
|
+
freddie pages — layout for FREDDIE_PAGES renderers.
|
|
1507
|
+
Scoped under .ds-247420 by the build prefixer. Tokens only.
|
|
1508
|
+
============================================================ */
|
|
1509
|
+
.fd-page-root { display: block; height: 100%; }
|
|
1510
|
+
.fd-page-inner { display: flex; flex-direction: column; gap: var(--space-3, 16px); padding: var(--space-3, 16px); max-width: 1100px; }
|
|
1511
|
+
.fd-page-inner > * { min-width: 0; }
|
|
1512
|
+
.fd-loading { display: flex; align-items: center; gap: var(--space-2, 10px); padding: var(--space-4, 24px); color: var(--fg-2, var(--fg)); }
|
|
1513
|
+
.fd-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-2, 10px); padding: var(--space-5, 32px) var(--space-3, 16px); color: var(--fg-2, var(--fg)); text-align: center; }
|
|
1514
|
+
.fd-empty-glyph { font-size: 28px; opacity: .55; line-height: 1; }
|
|
1515
|
+
.fd-pre { margin: 0; padding: var(--space-2, 10px); background: var(--bg-3, var(--panel-bg-2)); border: var(--bw-hair, 1px) solid var(--rule, var(--panel-accent)); border-radius: var(--r-1, 6px); overflow: auto; max-height: 460px; white-space: pre-wrap; overflow-wrap: anywhere; word-break: break-word; font-family: var(--font-mono, ui-monospace, monospace); font-size: 12px; line-height: 1.5; }
|
|
1516
|
+
.fd-skill-body { max-height: 320px; }
|
|
1517
|
+
.fd-row-actions { display: inline-flex; gap: var(--space-1, 6px); align-items: center; }
|
|
1518
|
+
.fd-chat { display: flex; flex-direction: column; gap: var(--space-2, 10px); height: 100%; min-height: 0; }
|
|
1519
|
+
.fd-chat-thread { flex: 1 1 auto; min-height: 240px; overflow-y: auto; display: flex; flex-direction: column; gap: var(--space-2, 10px); padding: var(--space-2, 10px); }
|
|
1520
|
+
.fd-page-error { white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
1521
|
+
/* page-level responsive: tighten padding on narrow viewports */
|
|
1522
|
+
@media (max-width: 640px) {
|
|
1523
|
+
.fd-page-inner { padding: var(--space-2, 10px); gap: var(--space-2, 10px); }
|
|
1524
|
+
}
|