anentrypoint-design 0.0.464 → 0.0.466

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.464",
3
+ "version": "0.0.466",
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",
@@ -152,7 +152,12 @@ h4, .t-h4 { font-family: var(--ff-display); font-size: var(--fs-h4); line-height
152
152
  .t-mega { font-family: var(--ff-display); font-size: var(--fs-mega); line-height: 0.92; letter-spacing: var(--tr-tighter); font-weight: 700; margin: 0; }
153
153
 
154
154
  .t-display { font-family: var(--ff-display); font-weight: 600; letter-spacing: var(--tr-tight); }
155
- .t-mono { font-family: var(--ff-mono); }
155
+ /* Explicit weight, not relying on inherited normal: --ff-mono's stack (Menlo,
156
+ Consolas, ui-monospace) can resolve to a variable-font fallback on some
157
+ platforms whose default instance isn't the 400 weight, rendering "body ·
158
+ 16px regular" visibly bold despite its own label -- pin the weight so the
159
+ sample matches what it claims regardless of which font in the stack loads. */
160
+ .t-mono { font-family: var(--ff-mono); font-weight: 400; }
156
161
  .t-body { font-family: var(--ff-body); }
157
162
 
158
163
  /* House small-label voice, in two sizes. Every declaration here is sourced
@@ -92,7 +92,12 @@
92
92
  border-color: var(--rule);
93
93
  }
94
94
  .ds-file-row:active { transform: translateY(1px); }
95
- .ds-file-row.active { background: var(--accent-tint); border-color: var(--accent); }
95
+ /* file-grid's own header/caption both claim NEVER A BORDER -- border-color
96
+ here silently broke that promise for exactly the row it's meant to call
97
+ out (the row a screenshot/manual test would actually look at). Selected
98
+ state stays legible via the tint alone; border-color stays transparent so
99
+ the base rule's promise holds for every row, active or not. */
100
+ .ds-file-row.active { background: var(--accent-tint); }
96
101
  .ds-file-row[data-file-type="dir"] { border-left-width: 3px; border-left-color: var(--accent); }
97
102
  .ds-file-row[data-file-type="image"],
98
103
  .ds-file-row[data-file-type="video"],
@@ -427,9 +432,14 @@
427
432
  }
428
433
  .ds-error-banner:hover { background: color-mix(in oklab, var(--warn) 20%, var(--bg)); }
429
434
 
430
- /* Dropzone */
435
+ /* Dropzone — a tonal target, not a dashed-border affordance (preview/
436
+ dropzone.html's own header/caption both describe this: "NO DASHED
437
+ BORDERS" / "tonal panel that swaps to --panel-select on dragover"). A
438
+ solid hairline plus the idle->dragover background swap is the actual
439
+ design; dashed was this system's OTHER "drop target" vocabulary
440
+ (.panel-docs, kits-appended.css) leaking in here by copy-paste. */
431
441
  .ds-dropzone {
432
- border: var(--bw-rule) dashed var(--rule);
442
+ border: var(--bw-rule) solid var(--rule);
433
443
  border-radius: var(--r-3); background: var(--bg);
434
444
  transition: border-color var(--dur-base) var(--ease), background var(--dur-base) var(--ease);
435
445
  }
@@ -69,7 +69,12 @@
69
69
  still fits a narrow column, and a 116px ceiling between the two tiers.
70
70
  Snapping to either changes the hero's whole optical weight. */
71
71
  font-size: clamp(40px, 9cqi, 116px);
72
- line-height: 0.96; letter-spacing: var(--tr-tighter);
72
+ /* 0.96 let ascenders/descenders visibly touch between wrapped lines at the
73
+ upper end of this clamp (measured on "the creative department of the
74
+ internet" at the 116px ceiling) -- 1.02 keeps the tight, no-air display
75
+ feel this title wants while clearing enough vertical room that letters
76
+ stop colliding. */
77
+ line-height: 1.02; letter-spacing: var(--tr-tighter);
73
78
  margin: 0; max-width: 20ch; text-wrap: balance;
74
79
  }
75
80
  .ds-hero-body {
@@ -292,11 +297,18 @@ table {
292
297
  (was 12/14 x 16 => ~43px rows). Density scales the vertical padding. */
293
298
  border-radius: var(--r-0); overflow: hidden;
294
299
  }
300
+ /* Panel heads / KPI labels / table headers were all identical uppercase-
301
+ tracked-mono weight (600), so a page with several of these side by side
302
+ (a dashboard) reads as one flat volume with no anchor -- the most
303
+ repetitive, least-singular label (a column header, one of many per
304
+ table) drops to a lighter 500 with slightly tighter tracking, keeping the
305
+ system's uppercase-mono voice but giving panel titles (still 600) a real
306
+ step up as the "read this first" tier. */
295
307
  table th {
296
308
  text-align: left;
297
309
  padding: calc(var(--space-2) * var(--density)) var(--space-2-75);
298
- font-size: var(--fs-tiny); font-weight: 600;
299
- color: var(--fg-3); text-transform: uppercase; letter-spacing: var(--tr-caps);
310
+ font-size: var(--fs-tiny); font-weight: 500;
311
+ color: var(--fg-3); text-transform: uppercase; letter-spacing: calc(var(--tr-caps) * 0.7);
300
312
  background: var(--bg-2);
301
313
  }
302
314
  /* letter-spacing adds trailing space AFTER the last glyph too, but the table's
@@ -390,12 +390,21 @@
390
390
  gap: var(--space-1-75, 6px);
391
391
  }
392
392
  /* Table() scroll containment — wide tables scroll inside their own box,
393
- never the page body. */
393
+ never the page body. overflow-x:auto alone works but gives no visible cue
394
+ that a table is wider than its box (macOS overlay scrollbars stay hidden
395
+ until an active hover/scroll gesture) -- columns beyond the fold read as
396
+ simply missing rather than reachable. An always-visible thin scrollbar
397
+ track makes the overflow legible without a gesture first. */
394
398
  .ds-table-wrap {
395
399
  overflow-x: auto;
396
400
  -webkit-overflow-scrolling: touch;
397
401
  max-width: 100%;
402
+ scrollbar-width: thin;
403
+ scrollbar-color: var(--rule-strong) transparent;
398
404
  }
405
+ .ds-table-wrap::-webkit-scrollbar { height: 8px; }
406
+ .ds-table-wrap::-webkit-scrollbar-thumb { background: var(--rule-strong); border-radius: var(--r-pill, 999px); }
407
+ .ds-table-wrap::-webkit-scrollbar-track { background: transparent; }
399
408
  .ds-table-wrap > table { min-width: 100%; }
400
409
  /* Sortable column headers (Table's opt-in sortable prop) — a docstudio-cue
401
410
  addition: color stays neutral at rest (this is a structural control, not a
@@ -30,13 +30,19 @@
30
30
  }
31
31
  .btn { background: var(--bg-2); color: var(--fg); border-color: var(--rule); }
32
32
  .btn:hover { background: var(--bg-3); color: var(--fg); transform: translateY(-1px); box-shadow: var(--shadow-1); }
33
- /* Primary CTA — the electric lead as a solid editorial block; hover inverts to
34
- an ink block with the lead as text, a confident two-tone flip. */
33
+ /* Primary CTA — the brand green as a solid editorial block; hover inverts to
34
+ an ink block with green text, a confident two-tone flip. Uses --green
35
+ (the site's own #247420 identity color, dark-mode-retuned to --green's
36
+ ink-safe #5CBF52 rather than --accent/--acid, which a prior contrast-driven
37
+ restyle deliberately flattened to a neutral gray for --accent's OTHER
38
+ consumers (nav active state, focus rings, etc) -- .btn-primary needed the
39
+ brand color back for click-hierarchy without undoing that restyle
40
+ elsewhere. --on-color (#fff) clears AA on both light and dark --green. */
35
41
  .btn-primary {
36
- background: var(--accent); color: var(--accent-fg);
42
+ background: var(--green); color: var(--on-color);
37
43
  font-weight: 700;
38
44
  }
39
- .btn-primary:hover { background: var(--fg); color: var(--accent-ink); transform: translateY(-1px); box-shadow: var(--shadow-2); }
45
+ .btn-primary:hover { background: var(--fg); color: var(--green); transform: translateY(-1px); box-shadow: var(--shadow-2); }
40
46
  .btn-ghost { background: transparent; color: var(--fg); box-shadow: inset 0 0 0 2px var(--fg); }
41
47
  .btn-ghost:hover { background: var(--fg); color: var(--bg); transform: translateY(-1px); }
42
48
  .btn:active, .btn-primary:active, .btn-ghost:active { transform: translateY(1px); box-shadow: none; }
@@ -26,10 +26,16 @@ tr.clickable:focus-visible {
26
26
  :disabled pseudo-class, so a disabled link-styled button relies entirely
27
27
  on this class selector for its visual treatment (aria-disabled + tabindex
28
28
  are set in JS; this is the paired CSS half). */
29
+ /* opacity:0.6 alone barely separated from an active .btn-primary against a
30
+ busy background -- close enough in dark mode that users clicked disabled
31
+ buttons expecting them to work. grayscale flattens any color signal (no
32
+ more "still looks clickable-green") and the steeper opacity drop reads as
33
+ unmistakably inert at a glance, not just slightly dimmed. */
29
34
  .btn:disabled, .btn-primary:disabled, .btn-ghost:disabled,
30
35
  .btn.is-disabled, .btn-primary.is-disabled, .btn-ghost.is-disabled,
31
36
  button:disabled, [disabled] {
32
- opacity: 0.6;
37
+ opacity: 0.45;
38
+ filter: grayscale(60%);
33
39
  cursor: not-allowed;
34
40
  pointer-events: none;
35
41
  }
@@ -350,7 +356,13 @@ textarea::placeholder {
350
356
  transform: rotate(-2deg);
351
357
  white-space: nowrap;
352
358
  }
353
- .stamp.ink { background: var(--ink); border-color: var(--ink); color: var(--paper); }
359
+ /* border-color previously matched background exactly (var(--ink) on both) --
360
+ same class of bug as the colors-core "paper" swatch: a border drawn in the
361
+ identical color as its own fill is invisible, so the ink-toned stamp was
362
+ the one variant on the page missing its box outline. --paper reads as a
363
+ visible ring against the ink fill (paper-on-ink is this token pair's
364
+ whole reason to exist), matching every other .stamp variant's contrast. */
365
+ .stamp.ink { background: var(--ink); border-color: var(--paper); color: var(--paper); }
354
366
  .stamp.acid { background: var(--accent); border-color: var(--accent-ink); color: var(--accent-ink); }
355
367
  .stamp.purple { border-color: var(--purple-2); color: var(--purple-2); }
356
368
  .stamp.mascot { border-color: var(--mascot); color: var(--mascot-deep); }
@@ -365,6 +377,11 @@ textarea::placeholder {
365
377
  border: 2px solid var(--fg);
366
378
  border-radius: var(--r-hair);
367
379
  background: transparent; color: var(--fg);
380
+ /* .stamp's own caption claims the rubber-stamp motif is "always rotated
381
+ slightly" -- .btn-stamp is the same visual face as an interactive
382
+ <button> (preview/stamps-lore.html's second row) and had no rotation at
383
+ all, breaking that claim for every stamp in that row. */
384
+ transform: rotate(-2deg);
368
385
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
369
386
  }
370
387
  .btn-stamp:hover { background: var(--panel-hover); }
@@ -382,11 +399,20 @@ hr.rule, hr.rule-double, hr.rule-dotted {
382
399
  }
383
400
  hr.rule { border-top: 1px solid var(--rule); }
384
401
  hr.rule-double { border-top: 4px double var(--rule-strong); }
385
- hr.rule-dotted { border-top: 1px dotted var(--rule-strong); }
386
-
387
- /* Hairline-only text input — no box, no fill. A single bottom rule that
388
- thickens to 2px on focus, matching the row/rule zero-border aesthetic
389
- instead of a browser-default boxed field. */
402
+ /* 1px was indistinguishable from .rule -- border-style:dotted needs enough
403
+ width to actually draw a gap between dots; below ~2px (esp. at DPRs where
404
+ 1px resolves to a sub-pixel value like 0.8px) Chrome collapses it to a
405
+ solid line, which is exactly what preview/rules.html's report caught live. */
406
+ hr.rule-dotted { border-top: 2px dotted var(--rule-strong); }
407
+
408
+ /* Hairline-only text input — no full box, no permanent fill. A single bottom
409
+ rule that thickens to 2px on focus, matching the row/rule zero-border
410
+ aesthetic instead of a browser-default boxed field. A completely flat,
411
+ static hairline reads as a static label rather than an editable control
412
+ at a glance (no cue at rest, nothing on hover) -- the very faint permanent
413
+ wash plus a stronger hover tint below signal "this is a field" without
414
+ reverting to the boxed/filled chrome the hairline design deliberately
415
+ moved away from. */
390
416
  .input {
391
417
  display: block; width: 100%; box-sizing: border-box;
392
418
  /* appearance:none alone is not enough: with color-scheme:dark set on the
@@ -400,11 +426,13 @@ hr.rule-dotted { border-top: 1px dotted var(--rule-strong); }
400
426
  color-scheme: normal;
401
427
  border: 0; border-bottom: 1px solid var(--rule-strong);
402
428
  border-radius: var(--r-0);
403
- background: transparent;
429
+ background: color-mix(in oklab, var(--fg) 2.5%, transparent);
404
430
  box-shadow: none;
405
431
  padding: var(--space-2) var(--space-1);
406
432
  font: inherit; color: var(--fg);
433
+ transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
407
434
  }
435
+ .input:hover { background: color-mix(in oklab, var(--fg) 5%, transparent); }
408
436
  /* Touch floor for the BASE input. Several specific inputs already carried this
409
437
  (ds-file-filter-input, ds-modal-input, ds-term-input) but the primitive every
410
438
  form actually uses did not, so a plain field measured 34px under a coarse
@@ -160,7 +160,20 @@ body.canvas-host { background: transparent !important; }
160
160
  `minmax(0, 1fr)` — a real height the sidebar can overflow once bins +
161
161
  labels + more exceed it. Without this the extra rows were silently chopped
162
162
  at the viewport edge with no way to reach them. */
163
- .app-side-shell { background: var(--bg); overflow-y: auto; min-height: 0; }
163
+ /* .app-side-shell and .app-main (below) are two INDEPENDENT scroll regions
164
+ side by side -- correct by design (a sidebar nav and a main panel each own
165
+ their own overflow), but with default invisible/overlay OS scrollbars a
166
+ user hovering the boundary has no visual cue which region the wheel will
167
+ scroll, or that there even are two scrollable zones rather than one page
168
+ scroll. Thin always-visible scrollbar tracks make each region's own scroll
169
+ ownership legible without changing the (correct) two-region architecture. */
170
+ .app-side-shell {
171
+ background: var(--bg); overflow-y: auto; min-height: 0;
172
+ scrollbar-width: thin; scrollbar-color: var(--rule-strong) transparent;
173
+ }
174
+ .app-side-shell::-webkit-scrollbar { width: 8px; }
175
+ .app-side-shell::-webkit-scrollbar-thumb { background: var(--rule-strong); border-radius: var(--r-pill, 999px); }
176
+ .app-side-shell::-webkit-scrollbar-track { background: transparent; }
164
177
  .app-body { display: grid; grid-template-columns: var(--sidebar-width) minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); align-items: stretch; align-content: stretch; flex: 1; min-height: 0; }
165
178
  .app-body.no-side { grid-template-columns: minmax(0, 1fr); }
166
179
  /* When there is no sidebar, the empty side-shell must not occupy a grid row,
@@ -268,6 +281,15 @@ body.canvas-host { background: transparent !important; }
268
281
  /* Reserve the scrollbar track so routes with/without overflow don't shift
269
282
  the layout horizontally when the bar appears. */
270
283
  .app-main { scrollbar-gutter: stable; }
284
+ /* Same visible-scroll-ownership rationale as .app-side-shell above -- makes
285
+ this the visually distinct SECOND independent scroll region rather than
286
+ an invisible-scrollbar mystery next to the sidebar. */
287
+ .app-main {
288
+ scrollbar-width: thin; scrollbar-color: var(--rule-strong) transparent;
289
+ }
290
+ .app-main::-webkit-scrollbar { width: 8px; }
291
+ .app-main::-webkit-scrollbar-thumb { background: var(--rule-strong); border-radius: var(--r-pill, 999px); }
292
+ .app-main::-webkit-scrollbar-track { background: transparent; }
271
293
  /* Jump-target anchors clear the inner-scroll top edge (no chrome overlap,
272
294
  but a little breathing room when deep-linked within .app-main). */
273
295
  .app-main [id] { scroll-margin-top: var(--space-4); }
@@ -358,5 +380,16 @@ body.canvas-host { background: transparent !important; }
358
380
  color: var(--fg-3);
359
381
  }
360
382
  .dateline span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
361
- .dateline .spread { flex: 1 1 auto; min-width: var(--space-3); }
383
+ /* The spreader itself only ever set flex-basis -- an empty div with no
384
+ background renders as blank space, not the "dotted spreader" the preview
385
+ page's own caption describes. border-bottom (not background-image) keeps
386
+ the dots crisp at 1px without a repeating-gradient banding artifact. */
387
+ .dateline .spread {
388
+ flex: 1 1 auto; min-width: var(--space-3); align-self: stretch;
389
+ display: flex; align-items: center;
390
+ }
391
+ .dateline .spread::after {
392
+ content: ''; flex: 1 1 auto;
393
+ border-bottom: var(--bw-hair, 1px) dotted var(--rule-strong);
394
+ }
362
395
 
@@ -829,6 +829,7 @@ html.ds-247420 { touch-action: pan-x pan-y; overscroll-behavior: none; -webkit-t
829
829
  display: flex; align-items: center; justify-content: center;
830
830
  pointer-events: none;
831
831
  }
832
+ .tb-sess-empty[hidden] { display: none; }
832
833
  .tb-sess-empty-card {
833
834
  pointer-events: auto;
834
835
  background: var(--bg);
@@ -134,6 +134,8 @@
134
134
  .wm-win.wm-min .wm-body,
135
135
  .wm-win.wm-min .wm-resize { display: none; }
136
136
 
137
+ .wm-win.wm-min { display: none; }
138
+
137
139
  .wm-win.wm-max {
138
140
  left: 0 !important;
139
141
  top: 0 !important;