anentrypoint-design 0.0.481 → 0.0.482

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anentrypoint-design",
3
- "version": "0.0.481",
3
+ "version": "0.0.482",
4
4
  "description": "247420 design system SDK — webjsx + modified ripple-ui, single-file ESM bundle for reproducible use of the AnEntrypoint design.",
5
5
  "type": "module",
6
6
  "main": "./dist/247420.js",
@@ -387,7 +387,7 @@
387
387
 
388
388
  .chat-typing { display: inline-flex; gap: var(--space-1); align-items: center; }
389
389
  .chat-typing span {
390
- width: 6px; height: 6px; border-radius: 50%; background: var(--fg-3);
390
+ width: 8px; height: 8px; border-radius: 50%; background: var(--fg-3);
391
391
  }
392
392
 
393
393
  @media (prefers-reduced-motion: no-preference) {
@@ -14,10 +14,6 @@
14
14
 
15
15
  /* PhaseWalk */
16
16
  .ds-phasewalk { display: inline-flex; gap: var(--space-hair); vertical-align: middle; }
17
- /* NOTE: a second toggle-switch-shaped implementation exists in
18
- plugins-config.css:91 (.ds-plugins-toggle) at a different scale (40x22 vs
19
- this 18x10) — consider consolidating into a shared .ds-switch primitive
20
- with a size modifier. */
21
17
  .ds-phasewalk-seg {
22
18
  width: 18px; height: 10px; border-radius: var(--r-hair);
23
19
  background: var(--bg-3); position: relative;
@@ -455,7 +455,7 @@
455
455
  padding: var(--space-4) var(--space-3); text-align: center;
456
456
  }
457
457
  /* Icon size, not type — see .ds-file-cell-media .ds-file-icon above. */
458
- .ds-dropzone-glyph { font-size: 22px; color: var(--fg-3); }
458
+ .ds-dropzone-glyph { font-size: var(--icon-lg, 24px); color: var(--fg-3); }
459
459
  .ds-dropzone-label { font-size: var(--fs-sm); color: var(--fg-3); }
460
460
  .ds-dropzone.dragover {
461
461
  border-color: var(--accent);
@@ -484,13 +484,12 @@ table tr.clickable:focus-visible td { background: var(--bg-2); }
484
484
  /* ============================================================
485
485
  Empty state
486
486
  ============================================================ */
487
+ /* Shares its base declarations with .ds-empty-state (primitives.css) via the
488
+ combined selector there -- .empty only adds its own font-size/background/
489
+ radius modifiers on top. Was --space-8 (96px) padding; --space-6 (48px)
490
+ still centres a message with air without the empty state dominating the
491
+ fold. */
487
492
  .empty {
488
- /* Was --space-8 (96px) — an empty list spent 192px of vertical space on
489
- nothing. --space-6 (48px) still centres a message with air, without the
490
- empty state dominating the fold. Mobile drops it further (below). */
491
- padding: var(--space-6);
492
- text-align: center;
493
- color: var(--fg-3);
494
493
  background: var(--bg-2);
495
494
  border-radius: var(--r-1);
496
495
  font-size: var(--fs-sm);
@@ -25,13 +25,13 @@
25
25
  .ds-spinner-lg { height: 24px; gap: var(--space-1-75); }
26
26
  .ds-spinner-lg span { width: var(--space-1-75); height: var(--space-1-75); }
27
27
 
28
- .ds-spinner-sm { height: 12px; gap: var(--space-hair); }
28
+ .ds-spinner-sm { height: var(--space-2-5); gap: var(--space-hair); }
29
29
  .ds-spinner-sm span { width: var(--space-hair); height: var(--space-hair); }
30
30
 
31
- .ds-spinner-xs { height: 8px; gap: 1px; }
31
+ .ds-spinner-xs { height: var(--space-2); gap: 1px; }
32
32
  .ds-spinner-xs span { width: 1.5px; height: 1.5px; }
33
33
 
34
- .ds-spinner-xl { height: 32px; gap: var(--space-2); }
34
+ .ds-spinner-xl { height: var(--space-5); gap: var(--space-2); }
35
35
  .ds-spinner-xl span { width: var(--space-2); height: var(--space-2); }
36
36
 
37
37
  @keyframes ds-bounce {
@@ -39,6 +39,11 @@
39
39
  40% { transform: translateY(-8px); }
40
40
  }
41
41
 
42
+ /* Two spinner visual languages coexist intentionally: dots (.ds-spinner*)
43
+ are for small inline/compact loading states (buttons, chips, list rows),
44
+ the ring (.loading::after in states-interactions.css) is for larger
45
+ blocking/full-region loading states (panels, full views). */
46
+
42
47
  /* ============================================================
43
48
  Skeleton — animated loading placeholder
44
49
  ============================================================ */
@@ -82,7 +87,7 @@
82
87
  flex-shrink: 0;
83
88
  color: var(--alert-tone);
84
89
  font-weight: 600;
85
- min-width: var(--space-3-5);
90
+ min-width: var(--icon-md);
86
91
  text-align: center;
87
92
  }
88
93
 
@@ -113,7 +118,7 @@
113
118
  padding: 0;
114
119
  font-size: var(--fs-xs);
115
120
  line-height: 1;
116
- min-width: var(--space-3-5);
121
+ min-width: var(--icon-md);
117
122
  text-align: center;
118
123
  transition: color var(--dur-snap) var(--ease);
119
124
  }
@@ -87,15 +87,16 @@
87
87
  }
88
88
  .ds-plugins-version { font-size: var(--fs-micro); color: var(--fg-3); }
89
89
 
90
- /* NOTE: a second toggle-switch implementation exists in data-density.css:18
91
- (.ds-phasewalk-seg) at a different scale (18x10 vs this 40x22) — consider
92
- consolidating into a shared .ds-switch primitive with a size modifier. */
90
+ /* Same track/knob proportions as the shared .ds-toggle primitive
91
+ (states-interactions.css) -- kept as its own class since ds-plugins-toggle
92
+ is a plain <button>+.on instead of .ds-toggle's [aria-checked] contract,
93
+ but sized and colored to match it exactly rather than drifting. */
93
94
  .ds-plugins-toggle {
94
- flex: 0 0 auto; width: 40px; height: 22px; border-radius: 11px; border: none; padding: 0;
95
+ flex: 0 0 auto; width: 40px; height: 22px; border-radius: var(--r-pill, 999px); border: none; padding: 0;
95
96
  background: var(--rule); position: relative; cursor: pointer;
96
97
  transition: background var(--dur-snap) var(--ease);
97
98
  }
98
- .ds-plugins-toggle.on { background: var(--accent); }
99
+ .ds-plugins-toggle.on { background: var(--accent-ink); }
99
100
  .ds-plugins-toggle[disabled] { cursor: wait; opacity: 0.65; }
100
101
  .ds-plugins-toggle-knob {
101
102
  position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; border-radius: 50%;
@@ -38,6 +38,9 @@
38
38
  padding: 0 var(--space-4); font-size: var(--fs-body); gap: var(--space-2);
39
39
  }
40
40
 
41
+ /* App chrome is compact/dense (see --fs-h1-app etc in colors_and_type.css) --
42
+ the marketing-scale hover lift/shadow reads as an oversized flourish at
43
+ this density, so app-typescale buttons opt out of it deliberately. */
41
44
  [data-typescale="app"] .btn:hover,
42
45
  [data-typescale="app"] .btn-primary:hover,
43
46
  [data-typescale="app"] .btn-ghost:hover { transform: none; box-shadow: none; }
@@ -51,7 +54,7 @@
51
54
  .ds-icon-btn {
52
55
  display: inline-flex; align-items: center; justify-content: center;
53
56
  padding: 0; border: none; cursor: pointer;
54
- border-radius: var(--r-1, 6px);
57
+ border-radius: var(--r-1, 8px);
55
58
  background: transparent; color: var(--fg);
56
59
  width: 32px; height: 32px;
57
60
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
@@ -83,7 +86,7 @@
83
86
  border-radius: var(--r-pill);
84
87
  background: var(--bg-3); color: var(--fg-2);
85
88
  }
86
- .ds-badge.ds-badge--sm { min-width: 14px; height: 14px; padding: 0 var(--space-1); font-size: var(--fs-pico); }
89
+ .ds-badge.ds-badge--sm { min-width: var(--icon-xs); height: var(--icon-xs); padding: 0 var(--space-1); font-size: var(--fs-pico); }
87
90
  .ds-badge.ds-badge--lg { min-width: 22px; height: 22px; padding: 0 var(--space-2); font-size: var(--fs-tiny); }
88
91
  .ds-badge.tone-green, .ds-badge.tone-live, .ds-badge.tone-success {
89
92
  background: var(--green-tint); color: var(--green-deep);
@@ -100,7 +103,7 @@
100
103
  background: var(--sun); color: var(--ink);
101
104
  }
102
105
  .ds-badge.tone-blue { background: var(--accent-tint); color: var(--accent-ink); }
103
- .ds-badge.tone-orange { background: color-mix(in oklab, var(--flame) 22%, var(--bg)); color: color-mix(in oklab, var(--flame) 65%, black); }
106
+ .ds-badge.tone-orange { background: color-mix(in oklab, var(--flame) 22%, var(--bg)); color: var(--flame); }
104
107
 
105
108
  .chip {
106
109
  display: inline-flex; align-items: center; gap: var(--space-1-75);
@@ -151,10 +154,10 @@
151
154
  cursor: pointer;
152
155
  }
153
156
  .ds-chip-remove-btn:hover, .ds-chip-remove-btn:focus-visible { opacity: 1; background: color-mix(in oklab, currentColor 16%, transparent); }
154
- .ds-chip-remove-btn svg { width: 10px; height: 10px; }
157
+ .ds-chip-remove-btn svg { width: var(--icon-xs); height: var(--icon-xs); }
155
158
  @media (pointer: coarse) {
156
159
  .ds-chip-remove-btn { width: 24px; height: 24px; margin-left: 0; }
157
- .ds-chip-remove-btn svg { width: 12px; height: 12px; }
160
+ .ds-chip-remove-btn svg { width: var(--icon-xs); height: var(--icon-xs); }
158
161
  }
159
162
 
160
163
  .ds-pill {
@@ -179,6 +182,22 @@
179
182
  opacity: 0.8;
180
183
  }
181
184
  .glyph { --glyph-size-sm: var(--fs-nano); --glyph-size-base: var(--fs-tiny); --glyph-size-lg: var(--fs-body); }
182
- .glyph-sm { width: 14px; height: 14px; }
185
+ .glyph-sm { width: var(--icon-xs); height: var(--icon-xs); }
183
186
  .glyph-lg { width: 22px; height: 22px; }
184
187
 
188
+ /* Shared empty-state base -- hero-content.css's .empty and community.css's
189
+ .fd-empty previously duplicated this full rule set; both are joined into
190
+ this selector list so the shared declarations live in one place, with
191
+ each keeping its own file-local rule for context-specific extras
192
+ (background/radius/font-size for .empty; padding for .fd-empty). New
193
+ consumers can add .ds-empty-state directly instead of a fresh copy. */
194
+ .ds-empty-state, .empty, .fd-empty {
195
+ display: flex; flex-direction: column; align-items: center; justify-content: center;
196
+ gap: var(--space-2);
197
+ padding: var(--space-6) var(--space-3);
198
+ text-align: center;
199
+ color: var(--fg-3);
200
+ }
201
+ .ds-empty-state--panel { background: var(--bg-2); border-radius: var(--r-1); }
202
+ .ds-empty-state--compact { padding: var(--space-5) var(--space-3); }
203
+
@@ -11,9 +11,9 @@
11
11
  of this value, worth aligning to 768px when touched.
12
12
  - Tablet/desktop boundary: 900px (max-width) / 901px (min-width) — used for
13
13
  main layout reflow (hero-content.css, responsive2-workspace.css)
14
- - Legacy tablet band: 481px–1024px (min-width 481px / max-width 1025px) —
15
- used in this file (responsive.css) for a specific tablet treatment,
16
- consider migrating to the 768/900 pair
14
+ - Tablet landscape band: 768px–1024px (min-width 768px / max-width 1024px) —
15
+ used in this file (responsive.css) for a specific tablet treatment;
16
+ aligned to the 768px mobile/tablet boundary above (was 481px, a near-miss).
17
17
  */
18
18
 
19
19
  /* --------------------------------------------------------------------
@@ -194,7 +194,7 @@
194
194
  /* --------------------------------------------------------------------
195
195
  Tablet Landscape Breakpoint (768px to 1024px)
196
196
  ---------------------------------------------------------------------- */
197
- @media (min-width: 481px) and (max-width: 1024px) {
197
+ @media (min-width: 768px) and (max-width: 1024px) {
198
198
  /* App Layout — side handled by 900px drawer block; restore for 901-1024 */
199
199
  .app-side a {
200
200
  padding: var(--space-2-75) var(--space-2-75); gap: var(--space-2);
@@ -326,8 +326,14 @@
326
326
  because the chat thread carries its own --measure gutter. */
327
327
  .ws-main { flex: 1; min-height: 0; overflow: auto; display: flex; flex-direction: column; padding: var(--space-4) var(--space-5); }
328
328
  .ws-main.ws-main--flush { padding: 0; }
329
- /* Non-interactive scroll region (content column), not a focusable control — outline intentionally suppressed. */
329
+ /* Skip-link target (workspace-shell.js's "#ws-main" skip-link, tabindex="-1")
330
+ — it does receive real keyboard-driven focus when the skip link is
331
+ activated, so it needs a visible ring rather than a bare outline:none. */
330
332
  .ws-main:focus { outline: none; }
333
+ .ws-main:focus-visible {
334
+ outline: var(--focus-w) solid var(--focus-color);
335
+ outline-offset: calc(-1 * var(--focus-offset));
336
+ }
331
337
 
332
338
  /* Right context pane */
333
339
  .ws-pane {
@@ -37,7 +37,7 @@
37
37
  }
38
38
 
39
39
  /* Disabled file actions (read-only row / in-flight mutation) stay visible but inert. */
40
- .ds-file-act:disabled { opacity: .45; cursor: default; }
40
+ .ds-file-act:disabled { opacity: .5; cursor: default; }
41
41
  .ds-file-act:disabled:hover { background: transparent; color: var(--fg-3); }
42
42
  .ds-file-act:focus-visible { outline: var(--focus-w) solid var(--focus-color); outline-offset: var(--focus-offset); }
43
43
 
@@ -300,13 +300,26 @@ body.canvas-host { background: transparent !important; }
300
300
  .app-main > .ds-file-stage,
301
301
  .app-main > .ds-files-stack,
302
302
  .app-main > .grow { flex: 1 1 auto; min-height: 0; }
303
- .app-main.narrow { max-width: var(--measure-narrow); margin: 0 auto; }
303
+ /* width:100% is load-bearing, not redundant with max-width: .app-body is a
304
+ CSS grid, and margin:auto on a grid item overrides the default stretch,
305
+ shrinking the item to its max-content width instead of filling the track
306
+ and then clamping -- confirmed live at 2560px viewport where mainWidth
307
+ measured 688px against a correctly-resolved 1400px max-width. Explicit
308
+ width:100% restores fill-then-cap for every .narrow page, not just wide
309
+ viewports (the shrink-to-fit bug undersized even the base 760px case). */
310
+ .app-main.narrow { width: 100%; max-width: var(--measure-narrow); margin: 0 auto; }
304
311
  /* A shell with no sidebar has no competing column, so the prose clamp there was
305
312
  leaving the whole sidebar's worth of width empty -- 760px of content inside a
306
313
  1413px shell on a real page. Widen the clamp by the space the absent sidebar
307
- would have taken so the measure still reads as prose, just not starved. */
314
+ would have taken so the measure still reads as prose, just not starved.
315
+ The floor stays a fixed 980px (no-side is still readable narrow); the
316
+ ceiling grows with viewport instead of staying pinned at 980px forever --
317
+ on a 2560px ultrawide the old fixed value left over half the shell as dead
318
+ side margin. 1400px ceiling keeps prose measure sane (nobody wants a
319
+ 2400px-wide paragraph) while letting non-prose content (index rows, meta)
320
+ actually use the extra room. */
308
321
  .app-body.no-side .app-main.narrow {
309
- max-width: calc(var(--measure-narrow) + var(--sidebar-width));
322
+ max-width: clamp(calc(var(--measure-narrow) + var(--sidebar-width)), 60vw, 1400px);
310
323
  }
311
324
  /* Article-body heading rhythm and lede spacing, consumed by flatspace-rendered
312
325
  long-form pages (docs, papers) that drop headings/panels directly into .app-main. */
@@ -15,8 +15,8 @@
15
15
  width: min(360px, 88vw);
16
16
  display: flex;
17
17
  flex-direction: column;
18
- gap: 12px;
19
- padding: 24px;
18
+ gap: var(--space-2-75);
19
+ padding: var(--space-4);
20
20
  background: var(--bg-2);
21
21
  border: 1px solid var(--bw-rule, var(--rule));
22
22
  border-radius: var(--r-2, 10px);
@@ -45,7 +45,7 @@
45
45
  font-family: var(--ff-mono);
46
46
  font-size: var(--fs-body);
47
47
  padding: 10px 14px;
48
- border-radius: var(--r-1, 6px);
48
+ border-radius: var(--r-1, 8px);
49
49
  cursor: pointer;
50
50
  }
51
51
  .sp-lobby-btn:hover { background: var(--bg-2); }
@@ -77,7 +77,7 @@
77
77
  color: var(--accent);
78
78
  padding: 8px;
79
79
  background: var(--bg);
80
- border-radius: var(--r-1, 6px);
80
+ border-radius: var(--r-1, 8px);
81
81
  }
82
82
  .sp-lobby-err { min-height: 16px; color: var(--danger); font-size: var(--fs-small, 11px); }
83
83
  .sp-lobby-close {