anentrypoint-design 0.0.145 → 0.0.147
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 +157 -22
- package/colors_and_type.css +21 -1
- package/community.css +106 -4
- package/dist/247420.css +339 -30
- package/dist/247420.js +12 -11
- package/package.json +1 -1
- package/src/components/chat.js +2 -2
- package/src/components/community.js +104 -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 +91 -2
- package/src/components/shell.js +40 -5
- package/src/components/voice.js +25 -0
- package/src/components.js +7 -5
- 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;
|
|
@@ -158,9 +159,9 @@ pre .n { color: var(--green-2); }
|
|
|
158
159
|
}
|
|
159
160
|
|
|
160
161
|
:root {
|
|
161
|
-
--app-status-h:
|
|
162
|
-
--app-topbar-h:
|
|
163
|
-
--app-crumb-h:
|
|
162
|
+
--app-status-h: var(--size-base);
|
|
163
|
+
--app-topbar-h: var(--size-lg);
|
|
164
|
+
--app-crumb-h: var(--size-sm);
|
|
164
165
|
}
|
|
165
166
|
|
|
166
167
|
.app-topbar {
|
|
@@ -229,8 +230,11 @@ pre .n { color: var(--green-2); }
|
|
|
229
230
|
.app-crumb .crumb-right { margin-left: auto; color: var(--fg-3); }
|
|
230
231
|
|
|
231
232
|
.app-side-shell { background: var(--bg); }
|
|
232
|
-
.app-body { display: grid; grid-template-columns:
|
|
233
|
+
.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
234
|
.app-body.no-side { grid-template-columns: minmax(0, 1fr); }
|
|
235
|
+
/* When there is no sidebar, the empty side-shell must not occupy a grid row,
|
|
236
|
+
otherwise main wraps to a second (collapsed) row. Remove it from layout. */
|
|
237
|
+
.app-body.no-side .app-side-shell { display: none; }
|
|
234
238
|
|
|
235
239
|
.app-side {
|
|
236
240
|
display: flex; flex-direction: column; gap: var(--space-4);
|
|
@@ -270,23 +274,34 @@ pre .n { color: var(--green-2); }
|
|
|
270
274
|
.app-main {
|
|
271
275
|
padding: var(--space-5) var(--pad-x) 0;
|
|
272
276
|
min-width: 0;
|
|
277
|
+
/* Full-height flex column so a single flex:1 child (e.g. .chat) fills the
|
|
278
|
+
region between crumb and status instead of floating at content height. */
|
|
279
|
+
display: flex; flex-direction: column;
|
|
280
|
+
min-height: 0;
|
|
281
|
+
align-self: stretch;
|
|
282
|
+
height: 100%;
|
|
273
283
|
}
|
|
274
|
-
.app-main
|
|
284
|
+
.app-main > * { min-height: 0; }
|
|
285
|
+
.app-main.narrow { max-width: var(--measure-narrow); margin: 0 auto; }
|
|
275
286
|
|
|
276
287
|
@media (min-width: 1400px) {
|
|
277
288
|
.app { max-width: 1400px; margin-left: auto; margin-right: auto; }
|
|
278
289
|
.app-main .chat,
|
|
279
290
|
.app-main > .chat-area,
|
|
280
291
|
.app-main > .main-content { max-width: none; margin: 0; width: 100%; }
|
|
281
|
-
|
|
292
|
+
/* Status bar inherits the .app max-width cap above and stretches edge-to-edge
|
|
293
|
+
within it; no separate width constraint (which previously narrowed it). */
|
|
294
|
+
.app-status { width: 100%; }
|
|
282
295
|
}
|
|
283
296
|
|
|
284
297
|
.app-status {
|
|
285
298
|
display: flex; align-items: center; gap: var(--space-3);
|
|
299
|
+
width: 100%;
|
|
286
300
|
min-height: var(--app-status-h);
|
|
287
301
|
padding: 10px var(--pad-x);
|
|
288
302
|
font-family: var(--ff-mono); font-size: var(--fs-xs);
|
|
289
303
|
color: var(--fg-3);
|
|
304
|
+
border-top: 1px solid var(--rule);
|
|
290
305
|
}
|
|
291
306
|
.app-status .item { color: inherit; }
|
|
292
307
|
.app-status .item:first-of-type { color: var(--accent); }
|
|
@@ -318,6 +333,54 @@ pre .n { color: var(--green-2); }
|
|
|
318
333
|
outline-offset: 2px;
|
|
319
334
|
}
|
|
320
335
|
|
|
336
|
+
/* ============================================================
|
|
337
|
+
IconButton — square icon-only button
|
|
338
|
+
============================================================ */
|
|
339
|
+
.ds-icon-btn {
|
|
340
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
341
|
+
padding: 0; border: none; cursor: pointer;
|
|
342
|
+
border-radius: var(--r-1, 6px);
|
|
343
|
+
background: transparent; color: var(--fg);
|
|
344
|
+
width: 32px; height: 32px;
|
|
345
|
+
}
|
|
346
|
+
.ds-icon-btn-xs { width: 22px; height: 22px; }
|
|
347
|
+
.ds-icon-btn-sm { width: 26px; height: 26px; }
|
|
348
|
+
.ds-icon-btn-base { width: 32px; height: 32px; }
|
|
349
|
+
.ds-icon-btn-lg { width: 40px; height: 40px; }
|
|
350
|
+
.ds-icon-btn-xl { width: 48px; height: 48px; }
|
|
351
|
+
.ds-icon-btn-ghost { background: transparent; }
|
|
352
|
+
.ds-icon-btn-ghost:hover { background: var(--bg-2); }
|
|
353
|
+
.ds-icon-btn-primary { background: var(--accent); color: var(--accent-fg); }
|
|
354
|
+
.ds-icon-btn-primary:hover { background: var(--fg); color: var(--bg); }
|
|
355
|
+
.ds-icon-btn-danger { background: var(--flame); color: var(--paper); }
|
|
356
|
+
.ds-icon-btn-danger:hover { filter: brightness(1.1); }
|
|
357
|
+
.ds-icon-btn:active { transform: translateY(1px); }
|
|
358
|
+
.ds-icon-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
359
|
+
.ds-icon-btn:disabled, .ds-icon-btn.is-disabled {
|
|
360
|
+
opacity: 0.5; cursor: not-allowed; pointer-events: none;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/* ============================================================
|
|
364
|
+
Badge — small inline count/status pill
|
|
365
|
+
============================================================ */
|
|
366
|
+
.ds-badge {
|
|
367
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
368
|
+
min-width: 18px; height: 18px; padding: 0 6px;
|
|
369
|
+
font-size: 11px; font-weight: 600; line-height: 1;
|
|
370
|
+
border-radius: 999px;
|
|
371
|
+
background: var(--bg-3); color: var(--fg-2);
|
|
372
|
+
}
|
|
373
|
+
.ds-badge.tone-green { background: var(--green-tint); color: var(--green-deep); }
|
|
374
|
+
.ds-badge.tone-purple { background: var(--purple-tint); color: var(--purple-deep); }
|
|
375
|
+
.ds-badge.tone-mascot { background: var(--mascot-tint); color: var(--ink); }
|
|
376
|
+
.ds-badge.tone-sun { background: var(--sun); color: var(--ink); }
|
|
377
|
+
.ds-badge.tone-flame { background: var(--flame); color: var(--paper); }
|
|
378
|
+
.ds-badge.tone-live { background: var(--green-tint); color: var(--green-deep); }
|
|
379
|
+
.ds-badge.tone-wip { background: var(--bg-3); color: var(--fg-2); }
|
|
380
|
+
.ds-badge.tone-error { background: var(--flame); color: var(--paper); }
|
|
381
|
+
.ds-badge.tone-success { background: var(--green-tint); color: var(--green-deep); }
|
|
382
|
+
.ds-badge.tone-neutral { background: var(--bg-3); color: var(--fg-2); }
|
|
383
|
+
|
|
321
384
|
.chip {
|
|
322
385
|
display: inline-flex; align-items: center; gap: 6px;
|
|
323
386
|
padding: 3px 10px;
|
|
@@ -334,6 +397,12 @@ pre .n { color: var(--green-2); }
|
|
|
334
397
|
.chip.tone-flame { background: var(--flame); color: var(--paper); }
|
|
335
398
|
.chip.tone-live { background: var(--green-tint); color: var(--green-deep); }
|
|
336
399
|
.chip.tone-wip { background: var(--bg-3); color: var(--fg-2); }
|
|
400
|
+
.chip.tone-error { background: var(--flame); color: var(--paper); }
|
|
401
|
+
.chip.tone-success { background: var(--green-tint); color: var(--green-deep); }
|
|
402
|
+
.chip.tone-disabled { background: var(--bg-3); color: var(--fg-3); }
|
|
403
|
+
.chip.tone-ok { background: var(--green-tint); color: var(--green-deep); }
|
|
404
|
+
.chip.tone-miss { background: var(--flame); color: var(--paper); }
|
|
405
|
+
.chip.tone-neutral { background: var(--bg-3); color: var(--fg-2); }
|
|
337
406
|
|
|
338
407
|
.glyph {
|
|
339
408
|
display: inline-flex; align-items: center; justify-content: center;
|
|
@@ -394,6 +463,9 @@ pre .n { color: var(--green-2); }
|
|
|
394
463
|
.row:hover::before { background: var(--rule-strong); }
|
|
395
464
|
.row.active { background: color-mix(in oklab, var(--accent) 10%, var(--bg-2)); }
|
|
396
465
|
.row.active::before { background: var(--accent); }
|
|
466
|
+
.row.row-state-disabled { opacity: 0.5; pointer-events: none; }
|
|
467
|
+
.row.row-state-error { background: color-mix(in oklab, var(--flame) 10%, var(--bg-2)); }
|
|
468
|
+
.row.row-state-error::before { background: var(--flame); }
|
|
397
469
|
.row-grid { /* explicit grid-template-columns set inline */ }
|
|
398
470
|
|
|
399
471
|
.row .code { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
|
|
@@ -409,7 +481,7 @@ a.row { text-decoration: none; }
|
|
|
409
481
|
.ds-hero {
|
|
410
482
|
padding: var(--space-9) 0 var(--space-8);
|
|
411
483
|
display: grid; gap: var(--space-5);
|
|
412
|
-
max-width:
|
|
484
|
+
max-width: var(--measure-wide);
|
|
413
485
|
}
|
|
414
486
|
.ds-hero-title {
|
|
415
487
|
font-family: var(--ff-body); font-weight: 600;
|
|
@@ -423,6 +495,8 @@ a.row { text-decoration: none; }
|
|
|
423
495
|
color: var(--fg-2);
|
|
424
496
|
}
|
|
425
497
|
.ds-hero-accent { color: var(--accent); font-weight: 500; }
|
|
498
|
+
.ds-hero-actions { display: flex; gap: var(--space-2, 10px); flex-wrap: wrap; margin-top: var(--space-2, 8px); }
|
|
499
|
+
.ds-chat-title { margin: 0; font-size: inherit; }
|
|
426
500
|
|
|
427
501
|
/* ============================================================
|
|
428
502
|
Section grouping
|
|
@@ -588,6 +662,21 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
588
662
|
.row-form input:focus,
|
|
589
663
|
.row-form textarea:focus { box-shadow: inset 0 0 0 2px var(--accent); }
|
|
590
664
|
|
|
665
|
+
/* Field char counter (TextField maxLength) */
|
|
666
|
+
.ds-field-count {
|
|
667
|
+
font-size: var(--fs-tiny, 12px);
|
|
668
|
+
color: var(--fg-3, var(--fg-2));
|
|
669
|
+
text-align: right;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
/* Multi-column form layout (Form columns prop) */
|
|
673
|
+
.row-form[data-columns="2"] { grid-template-columns: repeat(2, 1fr); }
|
|
674
|
+
.row-form[data-columns="3"] { grid-template-columns: repeat(3, 1fr); }
|
|
675
|
+
@media (max-width: 600px) {
|
|
676
|
+
.row-form[data-columns="2"],
|
|
677
|
+
.row-form[data-columns="3"] { grid-template-columns: 1fr; }
|
|
678
|
+
}
|
|
679
|
+
|
|
591
680
|
/* ============================================================
|
|
592
681
|
Responsive Design — Mobile (480px), Tablet (1024px), Desktop (1440px+)
|
|
593
682
|
============================================================ */
|
|
@@ -668,7 +757,6 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
668
757
|
/* Chat */
|
|
669
758
|
.chat-stack { max-width: 100%; min-width: 0; }
|
|
670
759
|
.chat-bubble {
|
|
671
|
-
max-width: clamp(200px, 85vw, 320px);
|
|
672
760
|
padding: 10px 12px; font-size: var(--fs-sm);
|
|
673
761
|
}
|
|
674
762
|
.chat-avatar { width: 28px; height: 28px; font-size: 11px; }
|
|
@@ -778,7 +866,6 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
778
866
|
/* Chat Bubbles */
|
|
779
867
|
.chat-stack { max-width: min(75%, 420px); }
|
|
780
868
|
.chat-bubble {
|
|
781
|
-
max-width: clamp(220px, 75vw, 420px);
|
|
782
869
|
padding: 11px 14px; font-size: var(--fs-sm);
|
|
783
870
|
}
|
|
784
871
|
.chat-avatar { width: 32px; height: 32px; font-size: 12px; }
|
|
@@ -809,15 +896,29 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
809
896
|
}
|
|
810
897
|
}
|
|
811
898
|
|
|
899
|
+
/* ────────────────────────────────────────────────────────────────────
|
|
900
|
+
Mid Breakpoint (768px and below) — collapse sidebar + simplify row grid
|
|
901
|
+
────────────────────────────────────────────────────────────────────── */
|
|
902
|
+
@media (max-width: 768px) {
|
|
903
|
+
/* Sidebar stacks above main rather than sitting beside it */
|
|
904
|
+
.app-body { grid-template-columns: 1fr; }
|
|
905
|
+
.app-side { width: 100%; max-width: none; }
|
|
906
|
+
|
|
907
|
+
/* Row drops the leading code column; title + meta share the line */
|
|
908
|
+
.row {
|
|
909
|
+
grid-template-columns: minmax(0, 1fr) auto;
|
|
910
|
+
gap: var(--space-2);
|
|
911
|
+
}
|
|
912
|
+
.row .code { display: none; }
|
|
913
|
+
.row .sub { grid-column: 1 / -1; }
|
|
914
|
+
}
|
|
915
|
+
|
|
812
916
|
/* ────────────────────────────────────────────────────────────────────
|
|
813
917
|
Desktop Breakpoint Enhancements (1025px and up)
|
|
814
918
|
────────────────────────────────────────────────────────────────────── */
|
|
815
919
|
@media (min-width: 1025px) {
|
|
816
920
|
/* Chat Bubbles */
|
|
817
921
|
.chat-stack { max-width: min(70%, 480px); }
|
|
818
|
-
.chat-bubble {
|
|
819
|
-
max-width: clamp(240px, 70vw, 480px);
|
|
820
|
-
}
|
|
821
922
|
|
|
822
923
|
/* KPI Cards */
|
|
823
924
|
.kpi {
|
|
@@ -1096,7 +1197,7 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
1096
1197
|
border-radius: var(--r-2); color: var(--fg);
|
|
1097
1198
|
font-family: inherit; font-size: var(--fs-sm);
|
|
1098
1199
|
}
|
|
1099
|
-
.ds-modal-input:focus { outline: 2px solid var(--accent); outline-offset:
|
|
1200
|
+
.ds-modal-input:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1100
1201
|
.btn-primary.danger {
|
|
1101
1202
|
background: var(--warn);
|
|
1102
1203
|
border-color: var(--warn);
|
|
@@ -1185,7 +1286,7 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
1185
1286
|
border-radius: var(--r-pill); color: var(--fg);
|
|
1186
1287
|
font-family: inherit; font-size: var(--fs-xs);
|
|
1187
1288
|
}
|
|
1188
|
-
.ds-filter-input:focus { outline: 2px solid var(--accent); outline-offset:
|
|
1289
|
+
.ds-filter-input:focus { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
1189
1290
|
|
|
1190
1291
|
/* Loading skeleton — placeholder rows while a directory loads. */
|
|
1191
1292
|
.ds-file-grid-loading { display: flex; flex-direction: column; gap: 4px; }
|
|
@@ -1374,7 +1475,7 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
1374
1475
|
border-radius: 14px; line-height: 1.55;
|
|
1375
1476
|
word-wrap: break-word; overflow-wrap: anywhere;
|
|
1376
1477
|
font-size: var(--fs-sm);
|
|
1377
|
-
max-width:
|
|
1478
|
+
max-width: clamp(220px, min(75vw, 28em), 480px);
|
|
1378
1479
|
min-width: 0;
|
|
1379
1480
|
transition: transform 0.12s ease, box-shadow 0.12s ease;
|
|
1380
1481
|
}
|
|
@@ -1648,6 +1749,8 @@ table tr.clickable:hover td { background: var(--bg-2); }
|
|
|
1648
1749
|
font-family: inherit; font-size: var(--fs-sm);
|
|
1649
1750
|
line-height: 1.4; resize: none;
|
|
1650
1751
|
min-height: 44px; max-height: 200px;
|
|
1752
|
+
box-sizing: border-box; overflow-y: auto;
|
|
1753
|
+
scrollbar-width: thin;
|
|
1651
1754
|
}
|
|
1652
1755
|
.chat-composer textarea::placeholder { color: var(--fg-3); }
|
|
1653
1756
|
.chat-composer textarea:focus {
|
|
@@ -2205,6 +2308,12 @@ body {
|
|
|
2205
2308
|
.ds-spinner-sm { height: 12px; gap: 2px; }
|
|
2206
2309
|
.ds-spinner-sm span { width: 2px; height: 2px; }
|
|
2207
2310
|
|
|
2311
|
+
.ds-spinner-xs { height: 8px; gap: 1px; }
|
|
2312
|
+
.ds-spinner-xs span { width: 1.5px; height: 1.5px; }
|
|
2313
|
+
|
|
2314
|
+
.ds-spinner-xl { height: 32px; gap: 8px; }
|
|
2315
|
+
.ds-spinner-xl span { width: 8px; height: 8px; }
|
|
2316
|
+
|
|
2208
2317
|
@keyframes ds-bounce {
|
|
2209
2318
|
0%, 80%, 100% { transform: translateY(0); }
|
|
2210
2319
|
40% { transform: translateY(-8px); }
|
|
@@ -2330,7 +2439,7 @@ body {
|
|
|
2330
2439
|
.app-main { padding-left: var(--space-3); padding-right: var(--space-3); }
|
|
2331
2440
|
}
|
|
2332
2441
|
|
|
2333
|
-
/* Drawer scrim */
|
|
2442
|
+
/* Drawer scrim — lives inside .app-body, shown when drawer open ≤900px */
|
|
2334
2443
|
.app-side-scrim {
|
|
2335
2444
|
display: none;
|
|
2336
2445
|
position: fixed; inset: 0;
|
|
@@ -2338,8 +2447,34 @@ body {
|
|
|
2338
2447
|
z-index: 49;
|
|
2339
2448
|
}
|
|
2340
2449
|
@media (max-width: 900px) {
|
|
2341
|
-
.app-body.side-open
|
|
2342
|
-
|
|
2450
|
+
.app-body.side-open .app-side-scrim { display: block; }
|
|
2451
|
+
}
|
|
2452
|
+
|
|
2453
|
+
/* Mobile nav toggle (hamburger) — hidden on desktop, shown ≤900px */
|
|
2454
|
+
.app-side-toggle {
|
|
2455
|
+
display: none;
|
|
2456
|
+
position: fixed; top: calc((var(--app-topbar-h) - 32px) / 2); left: 10px;
|
|
2457
|
+
z-index: 51;
|
|
2458
|
+
width: 36px; height: 36px;
|
|
2459
|
+
align-items: center; justify-content: center;
|
|
2460
|
+
font-size: 18px; line-height: 1;
|
|
2461
|
+
background: var(--bg-2); color: var(--fg);
|
|
2462
|
+
border: 1px solid var(--rule, color-mix(in oklab, var(--fg) 12%, transparent));
|
|
2463
|
+
border-radius: var(--r-1, 6px);
|
|
2464
|
+
cursor: pointer;
|
|
2465
|
+
}
|
|
2466
|
+
.app-side-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
2467
|
+
@media (max-width: 900px) {
|
|
2468
|
+
.app-side-toggle { display: inline-flex; }
|
|
2469
|
+
.app-topbar .brand { margin-left: 44px; }
|
|
2470
|
+
}
|
|
2471
|
+
|
|
2472
|
+
/* Desktop: independent scroll for side rail and main, so a short viewport
|
|
2473
|
+
keeps the bottom nav items reachable and main scrolls on its own. */
|
|
2474
|
+
@media (min-width: 901px) {
|
|
2475
|
+
.app-body { min-height: 0; max-height: calc(100vh - var(--app-topbar-h) - var(--app-crumb-h, 0px) - var(--app-status-h, 0px)); }
|
|
2476
|
+
.app-side-shell { overflow-y: auto; max-height: 100%; }
|
|
2477
|
+
.app-main { overflow-y: auto; max-height: 100%; }
|
|
2343
2478
|
}
|
|
2344
2479
|
|
|
2345
2480
|
/* 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;
|
|
@@ -1420,3 +1420,105 @@
|
|
|
1420
1420
|
font-family: var(--ff-mono); font-size: var(--fs-micro);
|
|
1421
1421
|
color: var(--green); font-weight: 700; letter-spacing: var(--tr-caps);
|
|
1422
1422
|
}
|
|
1423
|
+
|
|
1424
|
+
/* VoiceControls — vx-vc-* */
|
|
1425
|
+
.vx-vc {
|
|
1426
|
+
display: flex; align-items: center; gap: var(--space-1);
|
|
1427
|
+
padding: var(--space-1) var(--space-2);
|
|
1428
|
+
background: var(--bg-2);
|
|
1429
|
+
border-top: var(--bw-hair) solid var(--rule);
|
|
1430
|
+
}
|
|
1431
|
+
.vx-vc-btn {
|
|
1432
|
+
width: 36px; height: 36px;
|
|
1433
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
1434
|
+
border: var(--bw-hair) solid var(--rule-strong);
|
|
1435
|
+
border-radius: var(--r-1);
|
|
1436
|
+
background: var(--bg-3); color: var(--fg);
|
|
1437
|
+
cursor: pointer; font-size: 16px; line-height: 1;
|
|
1438
|
+
}
|
|
1439
|
+
.vx-vc-btn:hover { background: var(--bg-4, var(--bg-3)); }
|
|
1440
|
+
.vx-vc-on { background: var(--accent); color: var(--accent-fg, #fff); border-color: var(--accent); }
|
|
1441
|
+
.vx-vc-disabled, .vx-vc-btn:disabled { opacity: .4; cursor: not-allowed; }
|
|
1442
|
+
.vx-vc-leave { margin-left: auto; background: var(--danger, #d04545); color: #fff; border-color: var(--danger, #d04545); }
|
|
1443
|
+
.vx-vc-glyph { pointer-events: none; }
|
|
1444
|
+
|
|
1445
|
+
/* ThreadPanel — cm-thread-panel / cm-tp-* */
|
|
1446
|
+
.cm-thread-panel {
|
|
1447
|
+
display: flex; flex-direction: column;
|
|
1448
|
+
height: 100%; min-height: 0;
|
|
1449
|
+
background: var(--bg-2); color: var(--fg);
|
|
1450
|
+
border-left: var(--bw-hair) solid var(--rule);
|
|
1451
|
+
}
|
|
1452
|
+
.cm-tp-head {
|
|
1453
|
+
display: flex; align-items: center; justify-content: space-between;
|
|
1454
|
+
padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule);
|
|
1455
|
+
}
|
|
1456
|
+
.cm-tp-title { font-weight: 700; font-size: var(--fs-1, 14px); }
|
|
1457
|
+
.cm-tp-head-actions { display: flex; gap: var(--space-1); }
|
|
1458
|
+
.cm-tp-new, .cm-tp-close {
|
|
1459
|
+
border: none; background: transparent; color: var(--fg-2, var(--fg));
|
|
1460
|
+
cursor: pointer; font-size: 16px; width: 24px; height: 24px; border-radius: var(--r-1);
|
|
1461
|
+
}
|
|
1462
|
+
.cm-tp-new:hover, .cm-tp-close:hover { background: var(--bg-3); color: var(--fg); }
|
|
1463
|
+
.cm-tp-list { flex: 1; min-height: 0; overflow-y: auto; }
|
|
1464
|
+
.cm-tp-item {
|
|
1465
|
+
display: flex; flex-direction: column; gap: 2px;
|
|
1466
|
+
width: 100%; text-align: left; cursor: pointer;
|
|
1467
|
+
padding: var(--space-2); border: none; background: transparent;
|
|
1468
|
+
border-bottom: var(--bw-hair) solid var(--rule);
|
|
1469
|
+
color: var(--fg);
|
|
1470
|
+
}
|
|
1471
|
+
.cm-tp-item:hover { background: var(--bg-3); }
|
|
1472
|
+
.cm-tp-item.is-active { background: var(--bg-3); box-shadow: inset 3px 0 0 var(--accent); }
|
|
1473
|
+
.cm-tp-item.is-unread .cm-tp-item-title { font-weight: 700; }
|
|
1474
|
+
.cm-tp-dot { position: absolute; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
|
|
1475
|
+
.cm-tp-item-title { font-size: var(--fs-1, 14px); }
|
|
1476
|
+
.cm-tp-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1477
|
+
.cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
|
|
1478
|
+
.cm-tp-empty, .cm-forum-empty { padding: var(--space-3); text-align: center; color: var(--fg-2, var(--fg)); opacity: .7; }
|
|
1479
|
+
|
|
1480
|
+
/* ForumView — cm-forum / cm-forum-* */
|
|
1481
|
+
.cm-forum { display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
|
|
1482
|
+
.cm-forum-toolbar { display: flex; gap: var(--space-2); align-items: center; padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule); }
|
|
1483
|
+
.cm-forum-search { flex: 1; 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); }
|
|
1484
|
+
.cm-forum-sort { padding: var(--space-1); border: var(--bw-hair) solid var(--rule-strong); border-radius: var(--r-1); background: var(--bg-3); color: var(--fg); }
|
|
1485
|
+
.cm-forum-new { padding: var(--space-1) var(--space-2); border: none; border-radius: var(--r-1); background: var(--accent); color: var(--accent-fg, #fff); cursor: pointer; }
|
|
1486
|
+
.cm-forum-list { flex: 1; min-height: 0; overflow-y: auto; }
|
|
1487
|
+
.cm-forum-item { display: flex; flex-direction: column; gap: var(--space-1); width: 100%; text-align: left; cursor: pointer; padding: var(--space-2) var(--space-3); border: none; background: transparent; border-bottom: var(--bw-hair) solid var(--rule); color: var(--fg); }
|
|
1488
|
+
.cm-forum-item:hover { background: var(--bg-3); }
|
|
1489
|
+
.cm-forum-item-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); }
|
|
1490
|
+
.cm-forum-item-title { font-weight: 700; font-size: var(--fs-1, 14px); }
|
|
1491
|
+
.cm-forum-item-replies { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .8; white-space: nowrap; }
|
|
1492
|
+
.cm-forum-item-snippet { font-size: var(--fs-0, 12px); color: var(--fg-2, var(--fg)); opacity: .85; }
|
|
1493
|
+
.cm-forum-item-meta { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
|
|
1494
|
+
.cm-forum-item-tags { display: inline-flex; gap: 4px; }
|
|
1495
|
+
.cm-forum-tag { padding: 1px 6px; border-radius: var(--r-1); background: var(--bg-3); border: var(--bw-hair) solid var(--rule); }
|
|
1496
|
+
|
|
1497
|
+
/* PageView — cm-page / cm-page-* */
|
|
1498
|
+
.cm-page { display: flex; flex-direction: column; height: 100%; min-height: 0; overflow-y: auto; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
|
|
1499
|
+
.cm-page-head { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); padding: var(--space-3); border-bottom: var(--bw-hair) solid var(--rule); }
|
|
1500
|
+
.cm-page-title { margin: 0; font-size: var(--fs-3, 20px); font-weight: 700; }
|
|
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
|
+
.cm-page-body { padding: var(--space-3); line-height: 1.6; }
|
|
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
|
+
}
|