anentrypoint-design 0.0.156 → 0.0.158
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 +159 -55
- package/colors_and_type.css +18 -8
- package/dist/247420.css +176 -61
- package/dist/247420.js +12 -12
- package/package.json +1 -1
- package/src/components/chat.js +10 -4
- package/src/components/content.js +6 -3
- package/src/components/shell.js +57 -39
- package/src/kits/os/theme.css +13 -13
package/app-shell.css
CHANGED
|
@@ -59,6 +59,12 @@ h2, .t-h2 { font-family: var(--ff-body); font-size: var(--fs-h2); line-height: v
|
|
|
59
59
|
h3, .t-h3 { font-family: var(--ff-body); font-size: var(--fs-h3); line-height: var(--lh-snug); letter-spacing: -0.01em; font-weight: 600; margin: 0; }
|
|
60
60
|
h4, .t-h4 { font-family: var(--ff-body); font-size: var(--fs-h4); line-height: var(--lh-snug); font-weight: 600; margin: 0; }
|
|
61
61
|
|
|
62
|
+
/* App/chrome typescale opt-in: compact heading ceiling for application UIs. */
|
|
63
|
+
[data-typescale="app"] h1, [data-typescale="app"] .t-h1 { font-size: var(--fs-h1-app); line-height: 1.15; }
|
|
64
|
+
[data-typescale="app"] h2, [data-typescale="app"] .t-h2 { font-size: var(--fs-h2-app); }
|
|
65
|
+
[data-typescale="app"] h3, [data-typescale="app"] .t-h3 { font-size: var(--fs-h3-app); }
|
|
66
|
+
[data-typescale="app"] h4, [data-typescale="app"] .t-h4 { font-size: var(--fs-h4-app); }
|
|
67
|
+
|
|
62
68
|
.t-hero { font-family: var(--ff-body); font-size: var(--fs-hero); line-height: var(--lh-tight); letter-spacing: var(--tr-tighter); font-weight: 600; margin: 0; }
|
|
63
69
|
.t-mega { font-family: var(--ff-body); font-size: var(--fs-mega); line-height: 0.95; letter-spacing: var(--tr-tighter); font-weight: 600; margin: 0; }
|
|
64
70
|
|
|
@@ -149,6 +155,11 @@ pre .n { color: var(--green-2); }
|
|
|
149
155
|
.app {
|
|
150
156
|
display: flex; flex-direction: column;
|
|
151
157
|
min-height: 100vh;
|
|
158
|
+
/* Definite height so the flex column resolves height:100% for descendants
|
|
159
|
+
(e.g. a full-height chat) at every breakpoint, not just where a desktop
|
|
160
|
+
media override happened to set explicit heights. dvh tracks mobile chrome. */
|
|
161
|
+
min-height: 100dvh;
|
|
162
|
+
height: 100dvh;
|
|
152
163
|
background: var(--bg);
|
|
153
164
|
color: var(--fg);
|
|
154
165
|
/* Notched-device safe area padding (no-op on devices without notches) */
|
|
@@ -290,17 +301,22 @@ pre .n { color: var(--green-2); }
|
|
|
290
301
|
align-self: stretch;
|
|
291
302
|
height: 100%;
|
|
292
303
|
}
|
|
293
|
-
.app-main > * { min-height: 0;
|
|
304
|
+
.app-main > * { min-height: 0; }
|
|
305
|
+
/* The main region scrolls its own overflow at every breakpoint (previously
|
|
306
|
+
only ≥901px), so a fixed-height .app never clips route content and inner
|
|
307
|
+
panels don't fight the page scroll. */
|
|
308
|
+
.app-main { overflow-y: auto; }
|
|
294
309
|
/* Reserve the scrollbar track so routes with/without overflow don't shift
|
|
295
310
|
the layout horizontally when the bar appears. */
|
|
296
311
|
.app-main { scrollbar-gutter: stable; }
|
|
297
312
|
/* Jump-target anchors clear the inner-scroll top edge (no chrome overlap,
|
|
298
313
|
but a little breathing room when deep-linked within .app-main). */
|
|
299
314
|
.app-main [id] { scroll-margin-top: var(--space-4); }
|
|
315
|
+
/* Full-height route children fill the region instead of scrolling the page. */
|
|
300
316
|
.app-main > .chat,
|
|
301
317
|
.app-main > .chat-area,
|
|
302
318
|
.app-main > .ds-file-stage,
|
|
303
|
-
.app-main > .grow { flex
|
|
319
|
+
.app-main > .grow { flex: 1 1 auto; min-height: 0; }
|
|
304
320
|
.app-main.narrow { max-width: var(--measure-narrow); margin: 0 auto; }
|
|
305
321
|
|
|
306
322
|
@media (min-width: 1400px) {
|
|
@@ -434,9 +450,11 @@ pre .n { color: var(--green-2); }
|
|
|
434
450
|
Panel — soft tonal container, no border decoration
|
|
435
451
|
============================================================ */
|
|
436
452
|
.panel {
|
|
437
|
-
background: var(--bg);
|
|
453
|
+
background: var(--panel-1, var(--bg-2));
|
|
438
454
|
border-radius: var(--r-3);
|
|
439
455
|
margin: 0 0 var(--space-5);
|
|
456
|
+
padding: var(--space-3);
|
|
457
|
+
box-shadow: var(--panel-shadow);
|
|
440
458
|
position: relative;
|
|
441
459
|
}
|
|
442
460
|
.panel.panel-inline { background: var(--bg-2); padding: var(--space-3) var(--space-3); }
|
|
@@ -730,9 +748,8 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
730
748
|
Mobile Portrait Breakpoint (480px and below)
|
|
731
749
|
────────────────────────────────────────────────────────────────────── */
|
|
732
750
|
@media (max-width: 480px) {
|
|
733
|
-
/* App Layout
|
|
734
|
-
|
|
735
|
-
.app-body.no-side { grid-template-columns: 1fr; }
|
|
751
|
+
/* App Layout: single-column + drawer is handled once in the ≤900px block;
|
|
752
|
+
no need to re-declare grid-template-columns here (was a redundant !important). */
|
|
736
753
|
|
|
737
754
|
/* Topbar Navigation */
|
|
738
755
|
.app-topbar {
|
|
@@ -743,9 +760,16 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
743
760
|
padding: 12px 10px;
|
|
744
761
|
min-height: 44px;
|
|
745
762
|
}
|
|
763
|
+
/* Keep primary nav reachable on small screens (apps without a sidebar have
|
|
764
|
+
no other entry point). Compact it and let it scroll horizontally rather
|
|
765
|
+
than hiding it entirely. */
|
|
746
766
|
.app-topbar nav {
|
|
747
|
-
display:
|
|
767
|
+
display: flex; gap: 2px;
|
|
768
|
+
overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch;
|
|
769
|
+
max-width: 60vw;
|
|
748
770
|
}
|
|
771
|
+
.app-topbar nav::-webkit-scrollbar { display: none; }
|
|
772
|
+
.app-topbar nav a { padding: 10px 8px; white-space: nowrap; }
|
|
749
773
|
.brand { font-size: var(--fs-tiny); font-weight: 600; }
|
|
750
774
|
|
|
751
775
|
/* Search */
|
|
@@ -1435,7 +1459,6 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1435
1459
|
.chat {
|
|
1436
1460
|
display: flex; flex-direction: column;
|
|
1437
1461
|
flex: 1; min-height: 0; gap: var(--space-3);
|
|
1438
|
-
padding-bottom: calc(var(--app-status-h, 42px) + var(--space-2));
|
|
1439
1462
|
}
|
|
1440
1463
|
.chat-head {
|
|
1441
1464
|
display: flex; align-items: baseline; gap: 8px;
|
|
@@ -1446,6 +1469,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1446
1469
|
margin-bottom: var(--space-2);
|
|
1447
1470
|
}
|
|
1448
1471
|
.chat-head .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); flex-shrink: 0; }
|
|
1472
|
+
.chat-head .ds-chat-title,
|
|
1449
1473
|
.chat-head > span:nth-child(2) {
|
|
1450
1474
|
font-family: var(--ff-body); font-size: var(--fs-h4);
|
|
1451
1475
|
font-weight: 600; color: var(--fg);
|
|
@@ -1459,21 +1483,21 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1459
1483
|
flex: 1; min-height: 0; overflow-y: auto;
|
|
1460
1484
|
padding: var(--space-2) 0;
|
|
1461
1485
|
scrollbar-width: thin; scrollbar-color: var(--bg-3) transparent;
|
|
1462
|
-
|
|
1486
|
+
}
|
|
1487
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
1488
|
+
.chat-thread { scroll-behavior: smooth; }
|
|
1463
1489
|
}
|
|
1464
1490
|
.chat-thread::-webkit-scrollbar { width: 8px; }
|
|
1465
1491
|
.chat-thread::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: 4px; }
|
|
1466
|
-
.chat-
|
|
1467
|
-
|
|
1468
|
-
|
|
1492
|
+
.chat-empty {
|
|
1493
|
+
margin: auto;
|
|
1494
|
+
text-align: center;
|
|
1469
1495
|
color: var(--fg-3);
|
|
1470
1496
|
font-family: var(--ff-mono);
|
|
1471
|
-
font-size: var(--fs-sm);
|
|
1472
|
-
text-align: center;
|
|
1473
|
-
margin: auto;
|
|
1474
|
-
opacity: 0.6;
|
|
1475
1497
|
pointer-events: none;
|
|
1476
1498
|
}
|
|
1499
|
+
.chat-empty-title { font-size: var(--fs-sm); margin: 0 0 var(--space-1); }
|
|
1500
|
+
.chat-empty-sub { font-size: var(--fs-tiny); margin: 0; opacity: .7; }
|
|
1477
1501
|
|
|
1478
1502
|
.chat-msg { display: flex; gap: 12px; align-items: flex-start; padding: 6px 0; position: relative; min-width: 0; }
|
|
1479
1503
|
.chat-msg.you { flex-direction: row-reverse; }
|
|
@@ -1507,10 +1531,10 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1507
1531
|
|
|
1508
1532
|
.chat-bubble {
|
|
1509
1533
|
padding: 10px 14px; background: var(--bg-2); color: var(--fg);
|
|
1510
|
-
|
|
1534
|
+
max-width: 100%;
|
|
1535
|
+
border-radius: var(--r-2); line-height: 1.55;
|
|
1511
1536
|
word-wrap: break-word; overflow-wrap: anywhere;
|
|
1512
1537
|
font-size: var(--fs-sm);
|
|
1513
|
-
max-width: clamp(220px, min(75vw, 28em), 480px);
|
|
1514
1538
|
min-width: 0;
|
|
1515
1539
|
transition: transform 0.12s ease, box-shadow 0.12s ease;
|
|
1516
1540
|
}
|
|
@@ -1794,27 +1818,34 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1794
1818
|
box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 20%, transparent);
|
|
1795
1819
|
outline: none;
|
|
1796
1820
|
}
|
|
1797
|
-
.chat-composer .send
|
|
1798
|
-
.chat-composer button {
|
|
1821
|
+
.chat-composer .send {
|
|
1799
1822
|
width: 44px; height: 44px; border-radius: 50%;
|
|
1800
1823
|
background: var(--accent); color: var(--accent-fg);
|
|
1801
|
-
border: 0; cursor: pointer;
|
|
1824
|
+
border: 0; cursor: pointer;
|
|
1802
1825
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1803
|
-
flex-shrink: 0;
|
|
1826
|
+
flex-shrink: 0;
|
|
1804
1827
|
transition: background var(--dur-snap, .15s) var(--ease, ease), transform .1s ease;
|
|
1805
|
-
will-change: transform; contain: layout style paint;
|
|
1806
1828
|
}
|
|
1807
|
-
.chat-composer .send:
|
|
1808
|
-
|
|
1809
|
-
.
|
|
1810
|
-
.
|
|
1829
|
+
.chat-composer .send:disabled { opacity: .5; cursor: not-allowed; }
|
|
1830
|
+
/* Ghost icon buttons in the toolbar (attach / emoji / more) — NOT the round
|
|
1831
|
+
accent send button. */
|
|
1832
|
+
.composer-btn {
|
|
1833
|
+
width: 40px; height: 40px; border-radius: 50%;
|
|
1834
|
+
background: transparent; color: var(--fg-3);
|
|
1835
|
+
border: 0; cursor: pointer;
|
|
1836
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
1837
|
+
flex-shrink: 0;
|
|
1838
|
+
transition: background var(--dur-snap, .15s) var(--ease, ease), color var(--dur-snap, .15s) var(--ease, ease);
|
|
1839
|
+
}
|
|
1840
|
+
.composer-btn:hover { background: color-mix(in oklab, var(--fg) 8%, transparent); color: var(--fg); }
|
|
1841
|
+
.chat-composer .send:hover { transform: scale(1.04); }
|
|
1842
|
+
.chat-composer .send:active { transform: scale(0.96); }
|
|
1811
1843
|
.chat-composer .send:focus-visible,
|
|
1812
|
-
.
|
|
1844
|
+
.composer-btn:focus-visible {
|
|
1813
1845
|
outline: 2px solid var(--accent);
|
|
1814
1846
|
outline-offset: 2px;
|
|
1815
1847
|
}
|
|
1816
|
-
.chat-composer .send:disabled
|
|
1817
|
-
.chat-composer button:disabled {
|
|
1848
|
+
.chat-composer .send:disabled {
|
|
1818
1849
|
background: var(--bg-3); color: var(--fg-3); cursor: not-allowed; transform: none;
|
|
1819
1850
|
}
|
|
1820
1851
|
|
|
@@ -1826,7 +1857,8 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1826
1857
|
border-radius: 50%; flex-shrink: 0;
|
|
1827
1858
|
}
|
|
1828
1859
|
.aicat-meta { display: flex; flex-direction: column; font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
|
|
1829
|
-
.aicat-meta .name { color: var(--mascot); font-weight: 600; }
|
|
1860
|
+
.aicat-meta .name { color: var(--mascot-deep, var(--mascot)); font-weight: 600; }
|
|
1861
|
+
[data-theme="dark"] .aicat-meta .name, [data-theme="ink"] .aicat-meta .name { color: var(--mascot); }
|
|
1830
1862
|
|
|
1831
1863
|
/* ============================================================
|
|
1832
1864
|
Sidebar polish: hide zero-count badges; tonal active state;
|
|
@@ -1959,13 +1991,17 @@ button:active:not(:disabled) {
|
|
|
1959
1991
|
transform: scale(0.98);
|
|
1960
1992
|
}
|
|
1961
1993
|
|
|
1962
|
-
/* Enhanced hover transitions
|
|
1994
|
+
/* Enhanced hover transitions — transition only the properties that actually
|
|
1995
|
+
change (not `all`, which animates layout and is a perf trap), and drop the
|
|
1996
|
+
blanket `will-change` (it forces a permanent compositor layer per element). */
|
|
1963
1997
|
.btn, .btn-primary, .btn-ghost,
|
|
1964
1998
|
button, a.row, .row,
|
|
1965
1999
|
.chip, [role="button"],
|
|
1966
2000
|
input[type="checkbox"], input[type="radio"] {
|
|
1967
|
-
transition:
|
|
1968
|
-
|
|
2001
|
+
transition: background-color var(--dur-snap) var(--ease),
|
|
2002
|
+
color var(--dur-snap) var(--ease),
|
|
2003
|
+
box-shadow var(--dur-snap) var(--ease),
|
|
2004
|
+
transform var(--dur-snap) var(--ease);
|
|
1969
2005
|
}
|
|
1970
2006
|
|
|
1971
2007
|
/* Prevent double-tap zoom on buttons (iOS) */
|
|
@@ -2106,6 +2142,9 @@ input[type="text"],
|
|
|
2106
2142
|
input[type="email"],
|
|
2107
2143
|
input[type="password"],
|
|
2108
2144
|
input[type="number"],
|
|
2145
|
+
input[type="search"],
|
|
2146
|
+
input[type="url"],
|
|
2147
|
+
input[type="tel"],
|
|
2109
2148
|
textarea,
|
|
2110
2149
|
select {
|
|
2111
2150
|
transition: background var(--dur-snap) var(--ease),
|
|
@@ -2117,10 +2156,74 @@ input[type="text"]::placeholder,
|
|
|
2117
2156
|
input[type="email"]::placeholder,
|
|
2118
2157
|
input[type="password"]::placeholder,
|
|
2119
2158
|
input[type="number"]::placeholder,
|
|
2159
|
+
input[type="search"]::placeholder,
|
|
2160
|
+
input[type="url"]::placeholder,
|
|
2120
2161
|
textarea::placeholder {
|
|
2121
2162
|
color: var(--fg-3);
|
|
2122
2163
|
}
|
|
2123
2164
|
|
|
2165
|
+
/* ── Field controls: themed base for TextField / Select / SearchInput ──
|
|
2166
|
+
Root fix: previously only `transition` was set, so themed apps got
|
|
2167
|
+
browser-default white boxes in dark mode and labels collided with inputs
|
|
2168
|
+
because `.ds-field` had no layout. */
|
|
2169
|
+
.ds-field {
|
|
2170
|
+
display: flex;
|
|
2171
|
+
flex-direction: column;
|
|
2172
|
+
gap: var(--space-1, 6px);
|
|
2173
|
+
align-items: stretch;
|
|
2174
|
+
width: 100%;
|
|
2175
|
+
}
|
|
2176
|
+
.ds-field-label {
|
|
2177
|
+
font-size: var(--fs-sm, 14px);
|
|
2178
|
+
color: var(--fg-2);
|
|
2179
|
+
line-height: 1.3;
|
|
2180
|
+
}
|
|
2181
|
+
.ds-field-hint {
|
|
2182
|
+
font-size: var(--fs-tiny, 13px);
|
|
2183
|
+
color: var(--fg-3);
|
|
2184
|
+
line-height: 1.35;
|
|
2185
|
+
}
|
|
2186
|
+
.ds-field-count {
|
|
2187
|
+
font-size: var(--fs-tiny, 13px);
|
|
2188
|
+
color: var(--fg-3);
|
|
2189
|
+
align-self: flex-end;
|
|
2190
|
+
}
|
|
2191
|
+
|
|
2192
|
+
.ds-field input,
|
|
2193
|
+
.ds-field textarea,
|
|
2194
|
+
.ds-field .ds-select,
|
|
2195
|
+
.ds-search-input {
|
|
2196
|
+
width: 100%;
|
|
2197
|
+
box-sizing: border-box;
|
|
2198
|
+
font: inherit;
|
|
2199
|
+
color: var(--fg);
|
|
2200
|
+
background: var(--bg-2);
|
|
2201
|
+
border: 0;
|
|
2202
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule);
|
|
2203
|
+
border-radius: var(--r-2, 10px);
|
|
2204
|
+
padding: 10px 14px;
|
|
2205
|
+
}
|
|
2206
|
+
.ds-field textarea { min-height: calc(4 * 1.5em); resize: vertical; }
|
|
2207
|
+
.ds-search-input::placeholder { color: var(--fg-3); }
|
|
2208
|
+
|
|
2209
|
+
.ds-field input:focus-visible,
|
|
2210
|
+
.ds-field textarea:focus-visible,
|
|
2211
|
+
.ds-field .ds-select:focus-visible,
|
|
2212
|
+
.ds-search-input:focus-visible {
|
|
2213
|
+
outline: none;
|
|
2214
|
+
box-shadow: inset 0 0 0 2px var(--accent);
|
|
2215
|
+
}
|
|
2216
|
+
.ds-field input:disabled,
|
|
2217
|
+
.ds-field textarea:disabled,
|
|
2218
|
+
.ds-field .ds-select:disabled {
|
|
2219
|
+
opacity: .55;
|
|
2220
|
+
cursor: not-allowed;
|
|
2221
|
+
}
|
|
2222
|
+
.ds-field input[aria-invalid="true"],
|
|
2223
|
+
.ds-field textarea[aria-invalid="true"] {
|
|
2224
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--flame, #d64545);
|
|
2225
|
+
}
|
|
2226
|
+
|
|
2124
2227
|
/* Clear button for text inputs */
|
|
2125
2228
|
input[type="text"]:not(:placeholder-shown) + .input-clear,
|
|
2126
2229
|
input[type="email"]:not(:placeholder-shown) + .input-clear,
|
|
@@ -2169,9 +2272,10 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2169
2272
|
}
|
|
2170
2273
|
.skip-to-main:focus { top: 10px; }
|
|
2171
2274
|
|
|
2172
|
-
/* Reduced motion preferences
|
|
2275
|
+
/* Reduced motion preferences — scoped to the DS surface so it doesn't reach
|
|
2276
|
+
into and neutralize the host document's own motion. */
|
|
2173
2277
|
@media (prefers-reduced-motion: reduce) {
|
|
2174
|
-
* {
|
|
2278
|
+
.ds-247420 *, .app * {
|
|
2175
2279
|
animation-duration: 0.01ms !important;
|
|
2176
2280
|
animation-iteration-count: 1 !important;
|
|
2177
2281
|
transition-duration: 0.01ms !important;
|
|
@@ -2179,19 +2283,14 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2179
2283
|
}
|
|
2180
2284
|
|
|
2181
2285
|
/* ────────────────────────────────────────────────────────────
|
|
2182
|
-
Performance
|
|
2286
|
+
Performance
|
|
2183
2287
|
────────────────────────────────────────────────────────────── */
|
|
2184
2288
|
|
|
2185
|
-
/*
|
|
2186
|
-
|
|
2187
|
-
a
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
}
|
|
2191
|
-
|
|
2192
|
-
/* Contain layout repaints on self-contained components */
|
|
2193
|
-
.panel, .row, .chip, .btn, button {
|
|
2194
|
-
contain: layout style paint;
|
|
2289
|
+
/* Limit layout/style containment to self-contained components. `paint` is
|
|
2290
|
+
intentionally omitted — it clips focus rings, tooltips and dropdowns that
|
|
2291
|
+
emanate from a contained .row/.btn. */
|
|
2292
|
+
.panel, .row {
|
|
2293
|
+
contain: layout style;
|
|
2195
2294
|
}
|
|
2196
2295
|
|
|
2197
2296
|
/* ────────────────────────────────────────────────────────────
|
|
@@ -2201,11 +2300,14 @@ button:hover, [role="button"]:hover {
|
|
|
2201
2300
|
@media (hover: none) and (pointer: coarse) {
|
|
2202
2301
|
/* Mobile devices: larger touch targets, faster responses */
|
|
2203
2302
|
.btn, .btn-primary, .btn-ghost,
|
|
2204
|
-
button, a.row, [role="button"]
|
|
2303
|
+
button, a.row, [role="button"],
|
|
2304
|
+
.ds-icon-btn, .composer-btn {
|
|
2205
2305
|
min-height: 48px;
|
|
2206
2306
|
min-width: 48px;
|
|
2207
2307
|
padding: 12px 20px;
|
|
2208
2308
|
}
|
|
2309
|
+
/* Icon buttons stay square — the padding bump above would distort them. */
|
|
2310
|
+
.ds-icon-btn, .composer-btn { padding: 0; }
|
|
2209
2311
|
|
|
2210
2312
|
/* Remove hover effects on touch devices (use active instead) */
|
|
2211
2313
|
.btn:hover, .btn-primary:hover, .btn-ghost:hover {
|
|
@@ -2228,12 +2330,9 @@ button:hover, [role="button"]:hover {
|
|
|
2228
2330
|
Theme Transition Smoothness
|
|
2229
2331
|
────────────────────────────────────────────────────────────── */
|
|
2230
2332
|
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
}
|
|
2235
|
-
|
|
2236
|
-
body {
|
|
2333
|
+
/* Scoped to the DS wrapper so the design system never reaches out and
|
|
2334
|
+
animates the host document's html/body. */
|
|
2335
|
+
.ds-247420, .app {
|
|
2237
2336
|
transition: background-color var(--dur-base) var(--ease),
|
|
2238
2337
|
color var(--dur-base) var(--ease);
|
|
2239
2338
|
}
|
|
@@ -2469,7 +2568,12 @@ body {
|
|
|
2469
2568
|
padding: 10px 12px;
|
|
2470
2569
|
}
|
|
2471
2570
|
.app-side .group { width: 100%; }
|
|
2472
|
-
|
|
2571
|
+
/* Keep the crumb on mobile — apps mount contextual controls (model picker,
|
|
2572
|
+
actions, live status) in crumb-right, so hiding it strands them. Collapse
|
|
2573
|
+
the breadcrumb trail/leaf instead and let the right cluster wrap. */
|
|
2574
|
+
.app-crumb { display: flex; flex-wrap: wrap; gap: var(--space-2); padding: 8px 12px; }
|
|
2575
|
+
.app-crumb > .sep, .app-crumb > span:not(.crumb-right):not(.leaf) { display: none; }
|
|
2576
|
+
.app-crumb .crumb-right { margin-left: 0; }
|
|
2473
2577
|
.chat-head { padding: var(--space-2) var(--space-3) var(--space-2); margin-bottom: var(--space-2); }
|
|
2474
2578
|
.app-main { padding-left: var(--space-3); padding-right: var(--space-3); }
|
|
2475
2579
|
}
|
package/colors_and_type.css
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
Source-of-truth tokens. Component sheet lives in app-shell.css.
|
|
5
5
|
============================================================ */
|
|
6
6
|
|
|
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&
|
|
7
|
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,700&display=swap');
|
|
8
8
|
|
|
9
9
|
:root {
|
|
10
10
|
/* Tree view indentation tokens */
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
--mascot: #E84B8A;
|
|
32
32
|
--mascot-2: #FF3CA7;
|
|
33
33
|
--mascot-tint: #F5D2DF;
|
|
34
|
+
--mascot-deep: #B81F63;
|
|
34
35
|
|
|
35
36
|
/* Signals */
|
|
36
37
|
--sun: #F5C344;
|
|
@@ -51,7 +52,7 @@
|
|
|
51
52
|
|
|
52
53
|
--accent: var(--green);
|
|
53
54
|
--accent-fg: var(--paper);
|
|
54
|
-
--accent-tint: color-mix(in oklab, var(--accent)
|
|
55
|
+
--accent-tint: color-mix(in oklab, var(--accent) 26%, var(--bg));
|
|
55
56
|
|
|
56
57
|
--panel-bg: var(--bg);
|
|
57
58
|
--panel-bg-2: var(--bg-2);
|
|
@@ -66,12 +67,11 @@
|
|
|
66
67
|
--panel-accent-2: var(--accent-bright, var(--accent));
|
|
67
68
|
--panel-shadow: 0 1px 0 color-mix(in oklab, var(--fg) 6%, transparent), 0 4px 14px color-mix(in oklab, var(--fg) 8%, transparent);
|
|
68
69
|
|
|
69
|
-
/* Type —
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
--ff-
|
|
73
|
-
--ff-
|
|
74
|
-
--ff-body: 'Space Grotesk', system-ui, sans-serif;
|
|
70
|
+
/* Type — Inter for everything non-mono. The display/narrow aliases stay so
|
|
71
|
+
consumers that reference them keep working; they resolve to the body font. */
|
|
72
|
+
--ff-display: 'Inter', system-ui, sans-serif;
|
|
73
|
+
--ff-narrow: 'Inter', system-ui, sans-serif;
|
|
74
|
+
--ff-body: 'Inter', system-ui, sans-serif;
|
|
75
75
|
--ff-mono: 'JetBrains Mono', ui-monospace, Menlo, Consolas, monospace;
|
|
76
76
|
|
|
77
77
|
--fs-micro: 12px;
|
|
@@ -88,6 +88,15 @@
|
|
|
88
88
|
--fs-hero: clamp(42px, 7cqi, 96px);
|
|
89
89
|
--fs-mega: clamp(56px, 11cqi, 168px);
|
|
90
90
|
|
|
91
|
+
/* App/chrome typescale: the default heading scale above is tuned for
|
|
92
|
+
marketing/hero layouts (h1 up to 64px). Application chrome — page titles,
|
|
93
|
+
panel headers — needs a compact ceiling so a PageHeader title doesn't
|
|
94
|
+
dwarf the content. Opt in with `data-typescale="app"` on a container. */
|
|
95
|
+
--fs-h1-app: clamp(22px, 2.4cqi, 30px);
|
|
96
|
+
--fs-h2-app: clamp(19px, 2cqi, 24px);
|
|
97
|
+
--fs-h3-app: clamp(17px, 1.8cqi, 20px);
|
|
98
|
+
--fs-h4-app: clamp(15px, 1.6cqi, 17px);
|
|
99
|
+
|
|
91
100
|
--lh-tight: 1.05;
|
|
92
101
|
--lh-snug: 1.2;
|
|
93
102
|
--lh-base: 1.55;
|
|
@@ -193,6 +202,7 @@ select:focus-visible {
|
|
|
193
202
|
|
|
194
203
|
[data-theme="ink"],
|
|
195
204
|
[data-theme="dark"] {
|
|
205
|
+
color-scheme: dark;
|
|
196
206
|
--bg: var(--ink);
|
|
197
207
|
--bg-2: var(--ink-2);
|
|
198
208
|
--bg-3: #464650;
|