anentrypoint-design 0.0.156 → 0.0.157
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 +141 -49
- package/colors_and_type.css +16 -7
- package/dist/247420.css +156 -54
- package/dist/247420.js +12 -12
- package/package.json +1 -1
- package/src/components/chat.js +10 -4
- package/src/components/content.js +2 -2
- package/src/components/shell.js +33 -20
- 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); }
|
|
@@ -1435,7 +1453,6 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1435
1453
|
.chat {
|
|
1436
1454
|
display: flex; flex-direction: column;
|
|
1437
1455
|
flex: 1; min-height: 0; gap: var(--space-3);
|
|
1438
|
-
padding-bottom: calc(var(--app-status-h, 42px) + var(--space-2));
|
|
1439
1456
|
}
|
|
1440
1457
|
.chat-head {
|
|
1441
1458
|
display: flex; align-items: baseline; gap: 8px;
|
|
@@ -1446,6 +1463,7 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1446
1463
|
margin-bottom: var(--space-2);
|
|
1447
1464
|
}
|
|
1448
1465
|
.chat-head .dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); flex-shrink: 0; }
|
|
1466
|
+
.chat-head .ds-chat-title,
|
|
1449
1467
|
.chat-head > span:nth-child(2) {
|
|
1450
1468
|
font-family: var(--ff-body); font-size: var(--fs-h4);
|
|
1451
1469
|
font-weight: 600; color: var(--fg);
|
|
@@ -1459,21 +1477,21 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1459
1477
|
flex: 1; min-height: 0; overflow-y: auto;
|
|
1460
1478
|
padding: var(--space-2) 0;
|
|
1461
1479
|
scrollbar-width: thin; scrollbar-color: var(--bg-3) transparent;
|
|
1462
|
-
|
|
1480
|
+
}
|
|
1481
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
1482
|
+
.chat-thread { scroll-behavior: smooth; }
|
|
1463
1483
|
}
|
|
1464
1484
|
.chat-thread::-webkit-scrollbar { width: 8px; }
|
|
1465
1485
|
.chat-thread::-webkit-scrollbar-thumb { background: var(--bg-3); border-radius: 4px; }
|
|
1466
|
-
.chat-
|
|
1467
|
-
|
|
1468
|
-
|
|
1486
|
+
.chat-empty {
|
|
1487
|
+
margin: auto;
|
|
1488
|
+
text-align: center;
|
|
1469
1489
|
color: var(--fg-3);
|
|
1470
1490
|
font-family: var(--ff-mono);
|
|
1471
|
-
font-size: var(--fs-sm);
|
|
1472
|
-
text-align: center;
|
|
1473
|
-
margin: auto;
|
|
1474
|
-
opacity: 0.6;
|
|
1475
1491
|
pointer-events: none;
|
|
1476
1492
|
}
|
|
1493
|
+
.chat-empty-title { font-size: var(--fs-sm); margin: 0 0 var(--space-1); }
|
|
1494
|
+
.chat-empty-sub { font-size: var(--fs-tiny); margin: 0; opacity: .7; }
|
|
1477
1495
|
|
|
1478
1496
|
.chat-msg { display: flex; gap: 12px; align-items: flex-start; padding: 6px 0; position: relative; min-width: 0; }
|
|
1479
1497
|
.chat-msg.you { flex-direction: row-reverse; }
|
|
@@ -1507,10 +1525,10 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1507
1525
|
|
|
1508
1526
|
.chat-bubble {
|
|
1509
1527
|
padding: 10px 14px; background: var(--bg-2); color: var(--fg);
|
|
1510
|
-
|
|
1528
|
+
max-width: 100%;
|
|
1529
|
+
border-radius: var(--r-2); line-height: 1.55;
|
|
1511
1530
|
word-wrap: break-word; overflow-wrap: anywhere;
|
|
1512
1531
|
font-size: var(--fs-sm);
|
|
1513
|
-
max-width: clamp(220px, min(75vw, 28em), 480px);
|
|
1514
1532
|
min-width: 0;
|
|
1515
1533
|
transition: transform 0.12s ease, box-shadow 0.12s ease;
|
|
1516
1534
|
}
|
|
@@ -1794,27 +1812,34 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
|
|
|
1794
1812
|
box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent) 20%, transparent);
|
|
1795
1813
|
outline: none;
|
|
1796
1814
|
}
|
|
1797
|
-
.chat-composer .send
|
|
1798
|
-
.chat-composer button {
|
|
1815
|
+
.chat-composer .send {
|
|
1799
1816
|
width: 44px; height: 44px; border-radius: 50%;
|
|
1800
1817
|
background: var(--accent); color: var(--accent-fg);
|
|
1801
|
-
border: 0; cursor: pointer;
|
|
1818
|
+
border: 0; cursor: pointer;
|
|
1802
1819
|
display: inline-flex; align-items: center; justify-content: center;
|
|
1803
|
-
flex-shrink: 0;
|
|
1820
|
+
flex-shrink: 0;
|
|
1804
1821
|
transition: background var(--dur-snap, .15s) var(--ease, ease), transform .1s ease;
|
|
1805
|
-
will-change: transform; contain: layout style paint;
|
|
1806
1822
|
}
|
|
1807
|
-
.chat-composer .send:
|
|
1808
|
-
|
|
1809
|
-
.
|
|
1810
|
-
.
|
|
1823
|
+
.chat-composer .send:disabled { opacity: .5; cursor: not-allowed; }
|
|
1824
|
+
/* Ghost icon buttons in the toolbar (attach / emoji / more) — NOT the round
|
|
1825
|
+
accent send button. */
|
|
1826
|
+
.composer-btn {
|
|
1827
|
+
width: 40px; height: 40px; border-radius: 50%;
|
|
1828
|
+
background: transparent; color: var(--fg-3);
|
|
1829
|
+
border: 0; cursor: pointer;
|
|
1830
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
1831
|
+
flex-shrink: 0;
|
|
1832
|
+
transition: background var(--dur-snap, .15s) var(--ease, ease), color var(--dur-snap, .15s) var(--ease, ease);
|
|
1833
|
+
}
|
|
1834
|
+
.composer-btn:hover { background: color-mix(in oklab, var(--fg) 8%, transparent); color: var(--fg); }
|
|
1835
|
+
.chat-composer .send:hover { transform: scale(1.04); }
|
|
1836
|
+
.chat-composer .send:active { transform: scale(0.96); }
|
|
1811
1837
|
.chat-composer .send:focus-visible,
|
|
1812
|
-
.
|
|
1838
|
+
.composer-btn:focus-visible {
|
|
1813
1839
|
outline: 2px solid var(--accent);
|
|
1814
1840
|
outline-offset: 2px;
|
|
1815
1841
|
}
|
|
1816
|
-
.chat-composer .send:disabled
|
|
1817
|
-
.chat-composer button:disabled {
|
|
1842
|
+
.chat-composer .send:disabled {
|
|
1818
1843
|
background: var(--bg-3); color: var(--fg-3); cursor: not-allowed; transform: none;
|
|
1819
1844
|
}
|
|
1820
1845
|
|
|
@@ -1959,13 +1984,17 @@ button:active:not(:disabled) {
|
|
|
1959
1984
|
transform: scale(0.98);
|
|
1960
1985
|
}
|
|
1961
1986
|
|
|
1962
|
-
/* Enhanced hover transitions
|
|
1987
|
+
/* Enhanced hover transitions — transition only the properties that actually
|
|
1988
|
+
change (not `all`, which animates layout and is a perf trap), and drop the
|
|
1989
|
+
blanket `will-change` (it forces a permanent compositor layer per element). */
|
|
1963
1990
|
.btn, .btn-primary, .btn-ghost,
|
|
1964
1991
|
button, a.row, .row,
|
|
1965
1992
|
.chip, [role="button"],
|
|
1966
1993
|
input[type="checkbox"], input[type="radio"] {
|
|
1967
|
-
transition:
|
|
1968
|
-
|
|
1994
|
+
transition: background-color var(--dur-snap) var(--ease),
|
|
1995
|
+
color var(--dur-snap) var(--ease),
|
|
1996
|
+
box-shadow var(--dur-snap) var(--ease),
|
|
1997
|
+
transform var(--dur-snap) var(--ease);
|
|
1969
1998
|
}
|
|
1970
1999
|
|
|
1971
2000
|
/* Prevent double-tap zoom on buttons (iOS) */
|
|
@@ -2106,6 +2135,9 @@ input[type="text"],
|
|
|
2106
2135
|
input[type="email"],
|
|
2107
2136
|
input[type="password"],
|
|
2108
2137
|
input[type="number"],
|
|
2138
|
+
input[type="search"],
|
|
2139
|
+
input[type="url"],
|
|
2140
|
+
input[type="tel"],
|
|
2109
2141
|
textarea,
|
|
2110
2142
|
select {
|
|
2111
2143
|
transition: background var(--dur-snap) var(--ease),
|
|
@@ -2117,10 +2149,74 @@ input[type="text"]::placeholder,
|
|
|
2117
2149
|
input[type="email"]::placeholder,
|
|
2118
2150
|
input[type="password"]::placeholder,
|
|
2119
2151
|
input[type="number"]::placeholder,
|
|
2152
|
+
input[type="search"]::placeholder,
|
|
2153
|
+
input[type="url"]::placeholder,
|
|
2120
2154
|
textarea::placeholder {
|
|
2121
2155
|
color: var(--fg-3);
|
|
2122
2156
|
}
|
|
2123
2157
|
|
|
2158
|
+
/* ── Field controls: themed base for TextField / Select / SearchInput ──
|
|
2159
|
+
Root fix: previously only `transition` was set, so themed apps got
|
|
2160
|
+
browser-default white boxes in dark mode and labels collided with inputs
|
|
2161
|
+
because `.ds-field` had no layout. */
|
|
2162
|
+
.ds-field {
|
|
2163
|
+
display: flex;
|
|
2164
|
+
flex-direction: column;
|
|
2165
|
+
gap: var(--space-1, 6px);
|
|
2166
|
+
align-items: stretch;
|
|
2167
|
+
width: 100%;
|
|
2168
|
+
}
|
|
2169
|
+
.ds-field-label {
|
|
2170
|
+
font-size: var(--fs-sm, 14px);
|
|
2171
|
+
color: var(--fg-2);
|
|
2172
|
+
line-height: 1.3;
|
|
2173
|
+
}
|
|
2174
|
+
.ds-field-hint {
|
|
2175
|
+
font-size: var(--fs-tiny, 13px);
|
|
2176
|
+
color: var(--fg-3);
|
|
2177
|
+
line-height: 1.35;
|
|
2178
|
+
}
|
|
2179
|
+
.ds-field-count {
|
|
2180
|
+
font-size: var(--fs-tiny, 13px);
|
|
2181
|
+
color: var(--fg-3);
|
|
2182
|
+
align-self: flex-end;
|
|
2183
|
+
}
|
|
2184
|
+
|
|
2185
|
+
.ds-field input,
|
|
2186
|
+
.ds-field textarea,
|
|
2187
|
+
.ds-field .ds-select,
|
|
2188
|
+
.ds-search-input {
|
|
2189
|
+
width: 100%;
|
|
2190
|
+
box-sizing: border-box;
|
|
2191
|
+
font: inherit;
|
|
2192
|
+
color: var(--fg);
|
|
2193
|
+
background: var(--bg-2);
|
|
2194
|
+
border: 0;
|
|
2195
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--rule);
|
|
2196
|
+
border-radius: var(--r-2, 10px);
|
|
2197
|
+
padding: 10px 14px;
|
|
2198
|
+
}
|
|
2199
|
+
.ds-field textarea { min-height: calc(4 * 1.5em); resize: vertical; }
|
|
2200
|
+
.ds-search-input::placeholder { color: var(--fg-3); }
|
|
2201
|
+
|
|
2202
|
+
.ds-field input:focus-visible,
|
|
2203
|
+
.ds-field textarea:focus-visible,
|
|
2204
|
+
.ds-field .ds-select:focus-visible,
|
|
2205
|
+
.ds-search-input:focus-visible {
|
|
2206
|
+
outline: none;
|
|
2207
|
+
box-shadow: inset 0 0 0 2px var(--accent);
|
|
2208
|
+
}
|
|
2209
|
+
.ds-field input:disabled,
|
|
2210
|
+
.ds-field textarea:disabled,
|
|
2211
|
+
.ds-field .ds-select:disabled {
|
|
2212
|
+
opacity: .55;
|
|
2213
|
+
cursor: not-allowed;
|
|
2214
|
+
}
|
|
2215
|
+
.ds-field input[aria-invalid="true"],
|
|
2216
|
+
.ds-field textarea[aria-invalid="true"] {
|
|
2217
|
+
box-shadow: inset 0 0 0 var(--bw-hair, 1px) var(--flame, #d64545);
|
|
2218
|
+
}
|
|
2219
|
+
|
|
2124
2220
|
/* Clear button for text inputs */
|
|
2125
2221
|
input[type="text"]:not(:placeholder-shown) + .input-clear,
|
|
2126
2222
|
input[type="email"]:not(:placeholder-shown) + .input-clear,
|
|
@@ -2169,9 +2265,10 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2169
2265
|
}
|
|
2170
2266
|
.skip-to-main:focus { top: 10px; }
|
|
2171
2267
|
|
|
2172
|
-
/* Reduced motion preferences
|
|
2268
|
+
/* Reduced motion preferences — scoped to the DS surface so it doesn't reach
|
|
2269
|
+
into and neutralize the host document's own motion. */
|
|
2173
2270
|
@media (prefers-reduced-motion: reduce) {
|
|
2174
|
-
* {
|
|
2271
|
+
.ds-247420 *, .app * {
|
|
2175
2272
|
animation-duration: 0.01ms !important;
|
|
2176
2273
|
animation-iteration-count: 1 !important;
|
|
2177
2274
|
transition-duration: 0.01ms !important;
|
|
@@ -2179,19 +2276,14 @@ input[type="password"]:not(:placeholder-shown) + .input-clear {
|
|
|
2179
2276
|
}
|
|
2180
2277
|
|
|
2181
2278
|
/* ────────────────────────────────────────────────────────────
|
|
2182
|
-
Performance
|
|
2279
|
+
Performance
|
|
2183
2280
|
────────────────────────────────────────────────────────────── */
|
|
2184
2281
|
|
|
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;
|
|
2282
|
+
/* Limit layout/style containment to self-contained components. `paint` is
|
|
2283
|
+
intentionally omitted — it clips focus rings, tooltips and dropdowns that
|
|
2284
|
+
emanate from a contained .row/.btn. */
|
|
2285
|
+
.panel, .row {
|
|
2286
|
+
contain: layout style;
|
|
2195
2287
|
}
|
|
2196
2288
|
|
|
2197
2289
|
/* ────────────────────────────────────────────────────────────
|
|
@@ -2201,11 +2293,14 @@ button:hover, [role="button"]:hover {
|
|
|
2201
2293
|
@media (hover: none) and (pointer: coarse) {
|
|
2202
2294
|
/* Mobile devices: larger touch targets, faster responses */
|
|
2203
2295
|
.btn, .btn-primary, .btn-ghost,
|
|
2204
|
-
button, a.row, [role="button"]
|
|
2296
|
+
button, a.row, [role="button"],
|
|
2297
|
+
.ds-icon-btn, .composer-btn {
|
|
2205
2298
|
min-height: 48px;
|
|
2206
2299
|
min-width: 48px;
|
|
2207
2300
|
padding: 12px 20px;
|
|
2208
2301
|
}
|
|
2302
|
+
/* Icon buttons stay square — the padding bump above would distort them. */
|
|
2303
|
+
.ds-icon-btn, .composer-btn { padding: 0; }
|
|
2209
2304
|
|
|
2210
2305
|
/* Remove hover effects on touch devices (use active instead) */
|
|
2211
2306
|
.btn:hover, .btn-primary:hover, .btn-ghost:hover {
|
|
@@ -2228,12 +2323,9 @@ button:hover, [role="button"]:hover {
|
|
|
2228
2323
|
Theme Transition Smoothness
|
|
2229
2324
|
────────────────────────────────────────────────────────────── */
|
|
2230
2325
|
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
}
|
|
2235
|
-
|
|
2236
|
-
body {
|
|
2326
|
+
/* Scoped to the DS wrapper so the design system never reaches out and
|
|
2327
|
+
animates the host document's html/body. */
|
|
2328
|
+
.ds-247420, .app {
|
|
2237
2329
|
transition: background-color var(--dur-base) var(--ease),
|
|
2238
2330
|
color var(--dur-base) var(--ease);
|
|
2239
2331
|
}
|
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 */
|
|
@@ -66,12 +66,11 @@
|
|
|
66
66
|
--panel-accent-2: var(--accent-bright, var(--accent));
|
|
67
67
|
--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
68
|
|
|
69
|
-
/* Type —
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
--ff-
|
|
73
|
-
--ff-
|
|
74
|
-
--ff-body: 'Space Grotesk', system-ui, sans-serif;
|
|
69
|
+
/* Type — Inter for everything non-mono. The display/narrow aliases stay so
|
|
70
|
+
consumers that reference them keep working; they resolve to the body font. */
|
|
71
|
+
--ff-display: 'Inter', system-ui, sans-serif;
|
|
72
|
+
--ff-narrow: 'Inter', system-ui, sans-serif;
|
|
73
|
+
--ff-body: 'Inter', system-ui, sans-serif;
|
|
75
74
|
--ff-mono: 'JetBrains Mono', ui-monospace, Menlo, Consolas, monospace;
|
|
76
75
|
|
|
77
76
|
--fs-micro: 12px;
|
|
@@ -88,6 +87,15 @@
|
|
|
88
87
|
--fs-hero: clamp(42px, 7cqi, 96px);
|
|
89
88
|
--fs-mega: clamp(56px, 11cqi, 168px);
|
|
90
89
|
|
|
90
|
+
/* App/chrome typescale: the default heading scale above is tuned for
|
|
91
|
+
marketing/hero layouts (h1 up to 64px). Application chrome — page titles,
|
|
92
|
+
panel headers — needs a compact ceiling so a PageHeader title doesn't
|
|
93
|
+
dwarf the content. Opt in with `data-typescale="app"` on a container. */
|
|
94
|
+
--fs-h1-app: clamp(22px, 2.4cqi, 30px);
|
|
95
|
+
--fs-h2-app: clamp(19px, 2cqi, 24px);
|
|
96
|
+
--fs-h3-app: clamp(17px, 1.8cqi, 20px);
|
|
97
|
+
--fs-h4-app: clamp(15px, 1.6cqi, 17px);
|
|
98
|
+
|
|
91
99
|
--lh-tight: 1.05;
|
|
92
100
|
--lh-snug: 1.2;
|
|
93
101
|
--lh-base: 1.55;
|
|
@@ -193,6 +201,7 @@ select:focus-visible {
|
|
|
193
201
|
|
|
194
202
|
[data-theme="ink"],
|
|
195
203
|
[data-theme="dark"] {
|
|
204
|
+
color-scheme: dark;
|
|
196
205
|
--bg: var(--ink);
|
|
197
206
|
--bg-2: var(--ink-2);
|
|
198
207
|
--bg-3: #464650;
|