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/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; }
@@ -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=Space+Grotesk:wght@400;500;600;700&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
+ @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 Space Grotesk loads,
11
- text falls back to Arial with size-adjust tuned to its cap-height so the
12
- oversized hero does not reflow on swap. Referenced first in --ff-display via
13
- the 'Space Grotesk' family; this only kicks in for the fallback glyphs. */
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: 'Space Grotesk Fallback';
16
+ font-family: 'Bricolage Grotesque Fallback';
16
17
  src: local('Arial');
17
- size-adjust: 96%;
18
- ascent-override: 95%;
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 — Space Grotesk carries display/headings (editorial grotesk with real
133
- character), Inter carries body and UI, JetBrains carries code. The narrow
134
- alias tracks the display face. size-adjust on the fallback keeps the
135
- oversized hero from shifting while Space Grotesk loads. */
136
- --ff-display: 'Space Grotesk', 'Space Grotesk Fallback', 'Inter', system-ui, sans-serif;
137
- --ff-narrow: 'Space Grotesk', 'Space Grotesk Fallback', 'Inter', system-ui, sans-serif;
138
- --ff-body: 'Inter', system-ui, sans-serif;
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
- will-change: width, flex-basis, opacity, transform; contain: layout style;
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: 768px) {
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
- max-width: 200px;
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; }