anentrypoint-design 0.0.237 → 0.0.239
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 +587 -47
- package/chat.css +3 -0
- package/colors_and_type.css +17 -15
- package/community.css +81 -20
- package/dist/247420.css +752 -89
- package/dist/247420.js +15 -15
- package/package.json +1 -1
- package/src/community-app.js +6 -5
- package/src/components/chat.js +15 -4
- package/src/components/content.js +7 -2
- package/src/components/data-density.js +7 -1
- package/src/components/editor-primitives.js +27 -4
- package/src/components/files-modals.js +33 -6
- package/src/components/overlay-primitives.js +5 -1
- package/src/components/shell.js +107 -39
- package/src/kits/os/launcher.css +9 -2
- package/src/kits/os/shell.js +0 -0
- package/src/kits/os/theme.css +37 -11
- package/src/kits/os/wm.css +21 -1
- package/src/kits/os/wm.js +32 -8
- package/src/kits/spoint/game-hud.css +5 -4
- package/src/kits/spoint/host-join-lobby.css +5 -0
package/chat.css
CHANGED
|
@@ -869,6 +869,9 @@ button.chat-composer-context:focus-visible { outline: var(--focus-w) solid var(-
|
|
|
869
869
|
neutral pill and from the accent-toned running pill (--success = green-2). */
|
|
870
870
|
.chat-msg .chat-tool.tool-done .chat-tool-status { color: var(--success); background: color-mix(in oklab, var(--success) 12%, transparent); }
|
|
871
871
|
.chat-tool-body { border-top: var(--bw-hair) solid var(--rule); padding: var(--space-2) var(--space-3); display: flex; flex-direction: column; gap: var(--space-2); }
|
|
872
|
+
/* details' intrinsic min-content sizing: an unbroken token in the pre must not
|
|
873
|
+
widen the tool card past the bubble column. */
|
|
874
|
+
.chat-msg .chat-tool, .chat-tool-body, .chat-tool-section { min-width: 0; max-width: 100%; }
|
|
872
875
|
.chat-tool-section { display: flex; flex-direction: column; gap: var(--space-1); }
|
|
873
876
|
.chat-tool-section-label { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2); font-size: var(--fs-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-3); }
|
|
874
877
|
.chat-tool-copy { position: static; opacity: 0; }
|
package/colors_and_type.css
CHANGED
|
@@ -5,17 +5,18 @@
|
|
|
5
5
|
Source-of-truth tokens. Component sheet lives in app-shell.css.
|
|
6
6
|
============================================================ */
|
|
7
7
|
|
|
8
|
-
@import url('https://fonts.googleapis.com/css2?family=
|
|
8
|
+
@import url('https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,200..800&family=Hanken+Grotesk:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&family=JetBrains+Mono:ital,wght@0,400;0,500;0,600;0,700;1,400;1,700&display=swap');
|
|
9
9
|
|
|
10
|
-
/* Metric-matched fallback for the display face. While
|
|
11
|
-
text falls back to Arial with size-adjust tuned to its cap-height so
|
|
12
|
-
oversized hero does not reflow on swap. Referenced first in --ff-display
|
|
13
|
-
the '
|
|
10
|
+
/* Metric-matched fallback for the display face. While Bricolage Grotesque
|
|
11
|
+
loads, text falls back to Arial with size-adjust tuned to its cap-height so
|
|
12
|
+
the oversized hero does not reflow on swap. Referenced first in --ff-display
|
|
13
|
+
via the 'Bricolage Grotesque' family; this only kicks in for the fallback
|
|
14
|
+
glyphs. */
|
|
14
15
|
@font-face {
|
|
15
|
-
font-family: '
|
|
16
|
+
font-family: 'Bricolage Grotesque Fallback';
|
|
16
17
|
src: local('Arial');
|
|
17
|
-
size-adjust:
|
|
18
|
-
ascent-override:
|
|
18
|
+
size-adjust: 99%;
|
|
19
|
+
ascent-override: 94%;
|
|
19
20
|
descent-override: 24%;
|
|
20
21
|
}
|
|
21
22
|
|
|
@@ -129,13 +130,14 @@
|
|
|
129
130
|
--panel-accent-2: var(--accent-bright, var(--accent));
|
|
130
131
|
--panel-shadow: 0 1px 0 color-mix(in oklab, var(--fg) 6%, transparent), 0 4px 14px color-mix(in oklab, var(--fg) 8%, transparent);
|
|
131
132
|
|
|
132
|
-
/* Type —
|
|
133
|
-
character),
|
|
134
|
-
alias tracks the display face.
|
|
135
|
-
oversized hero from shifting while
|
|
136
|
-
|
|
137
|
-
--ff-
|
|
138
|
-
--ff-
|
|
133
|
+
/* Type — Bricolage Grotesque carries display/headings (variable editorial
|
|
134
|
+
grotesque with real character), Hanken Grotesk carries body and UI,
|
|
135
|
+
JetBrains carries code. The narrow alias tracks the display face.
|
|
136
|
+
size-adjust on the fallback keeps the oversized hero from shifting while
|
|
137
|
+
Bricolage Grotesque loads. */
|
|
138
|
+
--ff-display: 'Bricolage Grotesque', 'Bricolage Grotesque Fallback', 'Hanken Grotesk', system-ui, sans-serif;
|
|
139
|
+
--ff-narrow: 'Bricolage Grotesque', 'Bricolage Grotesque Fallback', 'Hanken Grotesk', system-ui, sans-serif;
|
|
140
|
+
--ff-body: 'Hanken Grotesk', system-ui, sans-serif;
|
|
139
141
|
--ff-mono: 'JetBrains Mono', ui-monospace, Menlo, Consolas, monospace;
|
|
140
142
|
|
|
141
143
|
--fs-micro: 12px;
|
package/community.css
CHANGED
|
@@ -10,8 +10,13 @@
|
|
|
10
10
|
.cm-shell {
|
|
11
11
|
display: flex;
|
|
12
12
|
height: 100vh;
|
|
13
|
+
height: 100dvh;
|
|
13
14
|
width: 100%;
|
|
14
15
|
overflow: hidden;
|
|
16
|
+
/* Notched devices: keep the rail and bottom chrome out of the unsafe zones. */
|
|
17
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
18
|
+
padding-left: env(safe-area-inset-left);
|
|
19
|
+
padding-right: env(safe-area-inset-right);
|
|
15
20
|
background: var(--bg);
|
|
16
21
|
color: var(--fg);
|
|
17
22
|
font-family: var(--ff-body);
|
|
@@ -798,7 +803,7 @@
|
|
|
798
803
|
scrollbar-width: thin;
|
|
799
804
|
scrollbar-color: color-mix(in oklab, var(--fg) 18%, transparent) transparent;
|
|
800
805
|
transition: width var(--dur-base) var(--ease), flex-basis var(--dur-base) var(--ease);
|
|
801
|
-
|
|
806
|
+
contain: layout style;
|
|
802
807
|
}
|
|
803
808
|
.cm-member-list:not(.open) {
|
|
804
809
|
width: 0;
|
|
@@ -943,7 +948,7 @@
|
|
|
943
948
|
/* ============================================================
|
|
944
949
|
Responsive — collapse sidebars on narrow viewports
|
|
945
950
|
============================================================ */
|
|
946
|
-
@media (max-width:
|
|
951
|
+
@media (max-width: 900px) {
|
|
947
952
|
.cm-channel-sidebar {
|
|
948
953
|
position: absolute;
|
|
949
954
|
z-index: 20;
|
|
@@ -970,6 +975,21 @@
|
|
|
970
975
|
.cm-chat-header-topic { display: none; }
|
|
971
976
|
}
|
|
972
977
|
|
|
978
|
+
/* Drawer scrim — dims the chat while a drawer overlays it on narrow screens.
|
|
979
|
+
Visual affordance only (pointer-events: none): tap-to-close needs a real
|
|
980
|
+
element + handler in CommunityShell, which lives outside this stylesheet. */
|
|
981
|
+
@media (max-width: 900px) {
|
|
982
|
+
.cm-shell:has(.cm-channel-sidebar.open) .cm-main::before,
|
|
983
|
+
.cm-shell:has(.cm-member-list.open) .cm-main::before {
|
|
984
|
+
content: '';
|
|
985
|
+
position: absolute;
|
|
986
|
+
inset: 0;
|
|
987
|
+
z-index: 15;
|
|
988
|
+
background: color-mix(in oklab, var(--ink) 40%, transparent);
|
|
989
|
+
pointer-events: none;
|
|
990
|
+
}
|
|
991
|
+
}
|
|
992
|
+
|
|
973
993
|
@media (max-width: 480px) {
|
|
974
994
|
.cm-server-rail {
|
|
975
995
|
flex: 0 0 56px;
|
|
@@ -982,22 +1002,12 @@
|
|
|
982
1002
|
height: 44px;
|
|
983
1003
|
padding: 4px;
|
|
984
1004
|
}
|
|
985
|
-
.cm-channel-sidebar
|
|
986
|
-
left: 56px;
|
|
987
|
-
width: 80vw;
|
|
988
|
-
max-width: 200px;
|
|
989
|
-
}
|
|
1005
|
+
.cm-channel-sidebar,
|
|
990
1006
|
.cm-channel-sidebar.open {
|
|
1007
|
+
left: 56px;
|
|
991
1008
|
width: 80vw;
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
/* Mobile touch target fixes for icon buttons */
|
|
996
|
-
.cm-cat-add,
|
|
997
|
-
.cm-ch-action-btn {
|
|
998
|
-
width: 44px;
|
|
999
|
-
height: 44px;
|
|
1000
|
-
padding: 8px;
|
|
1009
|
+
/* Use the width beside the 56px rail, not a 200px sliver. */
|
|
1010
|
+
max-width: min(320px, calc(100vw - 56px));
|
|
1001
1011
|
}
|
|
1002
1012
|
.cm-ch-icon {
|
|
1003
1013
|
flex: 0 0 24px;
|
|
@@ -1006,6 +1016,44 @@
|
|
|
1006
1016
|
}
|
|
1007
1017
|
}
|
|
1008
1018
|
|
|
1019
|
+
/* Touch target floors — applies on any coarse-pointer device (phones AND
|
|
1020
|
+
touch tablets/laptops), not just narrow viewports. */
|
|
1021
|
+
@media (pointer: coarse) {
|
|
1022
|
+
.cm-channel-item,
|
|
1023
|
+
.cm-member-item { min-height: 44px; }
|
|
1024
|
+
.cm-cat-add,
|
|
1025
|
+
.cm-ch-action-btn,
|
|
1026
|
+
.cm-user-btn,
|
|
1027
|
+
.cm-vs-btn,
|
|
1028
|
+
.cm-tp-new,
|
|
1029
|
+
.cm-tp-close,
|
|
1030
|
+
.cm-rb-cancel,
|
|
1031
|
+
.cm-mh-btn {
|
|
1032
|
+
min-width: 44px;
|
|
1033
|
+
min-height: 44px;
|
|
1034
|
+
}
|
|
1035
|
+
.cm-forum-search,
|
|
1036
|
+
.cm-forum-sort,
|
|
1037
|
+
.cm-forum-new { min-height: 44px; }
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
/* Ultrawide: clamp the message/forum/page column to a readable measure. */
|
|
1041
|
+
@media (min-width: 1600px) {
|
|
1042
|
+
.cm-main > .chat,
|
|
1043
|
+
.cm-forum-list,
|
|
1044
|
+
.cm-page-body {
|
|
1045
|
+
max-width: 110ch;
|
|
1046
|
+
margin-inline: auto;
|
|
1047
|
+
width: 100%;
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
/* No hover on touch: hover-revealed channel actions must stay reachable. */
|
|
1052
|
+
@media (hover: none) {
|
|
1053
|
+
.cm-channel-item .cm-ch-actions { opacity: 0.6; }
|
|
1054
|
+
.cm-category-header .cm-cat-add { opacity: 0.6; }
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1009
1057
|
/* ---------- a11y polish: focus-visible coverage on community interactive elements ---------- */
|
|
1010
1058
|
/* Every interactive surface with a :hover state must also have a :focus-visible state so
|
|
1011
1059
|
keyboard users get equivalent feedback. The selectors here mirror the existing :hover rules. */
|
|
@@ -1058,8 +1106,8 @@
|
|
|
1058
1106
|
display: flex;
|
|
1059
1107
|
align-items: center;
|
|
1060
1108
|
gap: var(--space-2);
|
|
1061
|
-
height: 48px;
|
|
1062
|
-
padding: 0 var(--space-2);
|
|
1109
|
+
height: calc(48px + env(safe-area-inset-top));
|
|
1110
|
+
padding: env(safe-area-inset-top) max(var(--space-2), env(safe-area-inset-right)) 0 max(var(--space-2), env(safe-area-inset-left));
|
|
1063
1111
|
background: var(--bg-2);
|
|
1064
1112
|
border-bottom: 1px solid var(--panel-3);
|
|
1065
1113
|
}
|
|
@@ -1334,6 +1382,7 @@
|
|
|
1334
1382
|
.vx-modal {
|
|
1335
1383
|
width: 100%; max-width: 440px;
|
|
1336
1384
|
max-height: 90vh;
|
|
1385
|
+
max-height: 90dvh;
|
|
1337
1386
|
display: flex; flex-direction: column;
|
|
1338
1387
|
border-radius: var(--r-3);
|
|
1339
1388
|
background: var(--bg);
|
|
@@ -1459,10 +1508,21 @@
|
|
|
1459
1508
|
/* ThreadPanel — cm-thread-panel / cm-tp-* */
|
|
1460
1509
|
.cm-thread-panel {
|
|
1461
1510
|
display: flex; flex-direction: column;
|
|
1511
|
+
flex: 0 0 300px; width: 300px; min-width: 0;
|
|
1462
1512
|
height: 100%; min-height: 0;
|
|
1463
1513
|
background: var(--bg-2); color: var(--fg);
|
|
1464
1514
|
border-left: var(--bw-hair) solid var(--rule);
|
|
1465
1515
|
}
|
|
1516
|
+
@media (max-width: 900px) {
|
|
1517
|
+
.cm-thread-panel {
|
|
1518
|
+
position: absolute;
|
|
1519
|
+
z-index: 20;
|
|
1520
|
+
top: 0; right: 0; bottom: 0;
|
|
1521
|
+
height: auto;
|
|
1522
|
+
width: min(320px, 90vw);
|
|
1523
|
+
box-shadow: -2px 0 16px color-mix(in oklab, var(--ink) 30%, transparent);
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1466
1526
|
.cm-tp-head {
|
|
1467
1527
|
display: flex; align-items: center; justify-content: space-between;
|
|
1468
1528
|
padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule);
|
|
@@ -1476,6 +1536,7 @@
|
|
|
1476
1536
|
.cm-tp-new:hover, .cm-tp-close:hover { background: var(--bg-3); color: var(--fg); }
|
|
1477
1537
|
.cm-tp-list { flex: 1; min-height: 0; overflow-y: auto; }
|
|
1478
1538
|
.cm-tp-item {
|
|
1539
|
+
position: relative; /* anchors .cm-tp-dot to the row, not the panel */
|
|
1479
1540
|
display: flex; flex-direction: column; gap: 2px;
|
|
1480
1541
|
width: 100%; text-align: left; cursor: pointer;
|
|
1481
1542
|
padding: var(--space-2); border: none; background: transparent;
|
|
@@ -1485,7 +1546,7 @@
|
|
|
1485
1546
|
.cm-tp-item:hover { background: var(--bg-3); }
|
|
1486
1547
|
.cm-tp-item.is-active { background: var(--bg-3); box-shadow: inset 3px 0 0 var(--accent); }
|
|
1487
1548
|
.cm-tp-item.is-unread .cm-tp-item-title { font-weight: 700; }
|
|
1488
|
-
.cm-tp-dot { position: absolute; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
|
|
1549
|
+
.cm-tp-dot { position: absolute; left: 4px; top: 50%; transform: translateY(-50%); width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
|
|
1489
1550
|
.cm-tp-item-title { font-size: var(--fs-1, 14px); }
|
|
1490
1551
|
.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; }
|
|
1491
1552
|
.cm-tp-item-meta { display: flex; gap: var(--space-2); font-size: var(--fs-micro, 11px); color: var(--fg-2, var(--fg)); opacity: .7; }
|
|
@@ -1493,7 +1554,7 @@
|
|
|
1493
1554
|
|
|
1494
1555
|
/* ForumView — cm-forum / cm-forum-* */
|
|
1495
1556
|
.cm-forum { display: flex; flex-direction: column; height: 100%; min-height: 0; background: var(--bg-1, var(--bg-2)); color: var(--fg); }
|
|
1496
|
-
.cm-forum-toolbar { display: flex; gap: var(--space-2); align-items: center; padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule); }
|
|
1557
|
+
.cm-forum-toolbar { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; padding: var(--space-2); border-bottom: var(--bw-hair) solid var(--rule); }
|
|
1497
1558
|
.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); }
|
|
1498
1559
|
.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); }
|
|
1499
1560
|
.cm-forum-new { padding: var(--space-1) var(--space-2); border: none; border-radius: var(--r-1); background: var(--accent); color: var(--accent-fg); cursor: pointer; }
|