anentrypoint-design 0.0.464 → 0.0.465

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/dist/247420.css CHANGED
@@ -959,7 +959,12 @@
959
959
  .ds-247420 .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; }
960
960
 
961
961
  .ds-247420 .t-display { font-family: var(--ff-display); font-weight: 600; letter-spacing: var(--tr-tight); }
962
- .ds-247420 .t-mono { font-family: var(--ff-mono); }
962
+ /* Explicit weight, not relying on inherited normal: --ff-mono's stack (Menlo,
963
+ Consolas, ui-monospace) can resolve to a variable-font fallback on some
964
+ platforms whose default instance isn't the 400 weight, rendering "body ·
965
+ 16px regular" visibly bold despite its own label -- pin the weight so the
966
+ sample matches what it claims regardless of which font in the stack loads. */
967
+ .ds-247420 .t-mono { font-family: var(--ff-mono); font-weight: 400; }
963
968
  .ds-247420 .t-body { font-family: var(--ff-body); }
964
969
 
965
970
  /* House small-label voice, in two sizes. Every declaration here is sourced
@@ -1277,7 +1282,20 @@
1277
1282
  `minmax(0, 1fr)` — a real height the sidebar can overflow once bins +
1278
1283
  labels + more exceed it. Without this the extra rows were silently chopped
1279
1284
  at the viewport edge with no way to reach them. */
1280
- .ds-247420 .app-side-shell { background: var(--bg); overflow-y: auto; min-height: 0; }
1285
+ /* .app-side-shell and .app-main (below) are two INDEPENDENT scroll regions
1286
+ side by side -- correct by design (a sidebar nav and a main panel each own
1287
+ their own overflow), but with default invisible/overlay OS scrollbars a
1288
+ user hovering the boundary has no visual cue which region the wheel will
1289
+ scroll, or that there even are two scrollable zones rather than one page
1290
+ scroll. Thin always-visible scrollbar tracks make each region's own scroll
1291
+ ownership legible without changing the (correct) two-region architecture. */
1292
+ .ds-247420 .app-side-shell {
1293
+ background: var(--bg); overflow-y: auto; min-height: 0;
1294
+ scrollbar-width: thin; scrollbar-color: var(--rule-strong) transparent;
1295
+ }
1296
+ .ds-247420 .app-side-shell::-webkit-scrollbar { width: 8px; }
1297
+ .ds-247420 .app-side-shell::-webkit-scrollbar-thumb { background: var(--rule-strong); border-radius: var(--r-pill, 999px); }
1298
+ .ds-247420 .app-side-shell::-webkit-scrollbar-track { background: transparent; }
1281
1299
  .ds-247420 .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; }
1282
1300
  .ds-247420 .app-body.no-side { grid-template-columns: minmax(0, 1fr); }
1283
1301
  /* When there is no sidebar, the empty side-shell must not occupy a grid row,
@@ -1385,6 +1403,15 @@
1385
1403
  /* Reserve the scrollbar track so routes with/without overflow don't shift
1386
1404
  the layout horizontally when the bar appears. */
1387
1405
  .ds-247420 .app-main { scrollbar-gutter: stable; }
1406
+ /* Same visible-scroll-ownership rationale as .app-side-shell above -- makes
1407
+ this the visually distinct SECOND independent scroll region rather than
1408
+ an invisible-scrollbar mystery next to the sidebar. */
1409
+ .ds-247420 .app-main {
1410
+ scrollbar-width: thin; scrollbar-color: var(--rule-strong) transparent;
1411
+ }
1412
+ .ds-247420 .app-main::-webkit-scrollbar { width: 8px; }
1413
+ .ds-247420 .app-main::-webkit-scrollbar-thumb { background: var(--rule-strong); border-radius: var(--r-pill, 999px); }
1414
+ .ds-247420 .app-main::-webkit-scrollbar-track { background: transparent; }
1388
1415
  /* Jump-target anchors clear the inner-scroll top edge (no chrome overlap,
1389
1416
  but a little breathing room when deep-linked within .app-main). */
1390
1417
  .ds-247420 .app-main [id] { scroll-margin-top: var(--space-4); }
@@ -1475,7 +1502,18 @@
1475
1502
  color: var(--fg-3);
1476
1503
  }
1477
1504
  .ds-247420 .dateline span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
1478
- .ds-247420 .dateline .spread { flex: 1 1 auto; min-width: var(--space-3); }
1505
+ /* The spreader itself only ever set flex-basis -- an empty div with no
1506
+ background renders as blank space, not the "dotted spreader" the preview
1507
+ page's own caption describes. border-bottom (not background-image) keeps
1508
+ the dots crisp at 1px without a repeating-gradient banding artifact. */
1509
+ .ds-247420 .dateline .spread {
1510
+ flex: 1 1 auto; min-width: var(--space-3); align-self: stretch;
1511
+ display: flex; align-items: center;
1512
+ }
1513
+ .ds-247420 .dateline .spread::after {
1514
+ content: ''; flex: 1 1 auto;
1515
+ border-bottom: var(--bw-hair, 1px) dotted var(--rule-strong);
1516
+ }
1479
1517
 
1480
1518
  /* ============================================================
1481
1519
  Primitives
@@ -1509,13 +1547,19 @@
1509
1547
  }
1510
1548
  .ds-247420 .btn { background: var(--bg-2); color: var(--fg); border-color: var(--rule); }
1511
1549
  .ds-247420 .btn:hover { background: var(--bg-3); color: var(--fg); transform: translateY(-1px); box-shadow: var(--shadow-1); }
1512
- /* Primary CTA — the electric lead as a solid editorial block; hover inverts to
1513
- an ink block with the lead as text, a confident two-tone flip. */
1550
+ /* Primary CTA — the brand green as a solid editorial block; hover inverts to
1551
+ an ink block with green text, a confident two-tone flip. Uses --green
1552
+ (the site's own #247420 identity color, dark-mode-retuned to --green's
1553
+ ink-safe #5CBF52 rather than --accent/--acid, which a prior contrast-driven
1554
+ restyle deliberately flattened to a neutral gray for --accent's OTHER
1555
+ consumers (nav active state, focus rings, etc) -- .btn-primary needed the
1556
+ brand color back for click-hierarchy without undoing that restyle
1557
+ elsewhere. --on-color (#fff) clears AA on both light and dark --green. */
1514
1558
  .ds-247420 .btn-primary {
1515
- background: var(--accent); color: var(--accent-fg);
1559
+ background: var(--green); color: var(--on-color);
1516
1560
  font-weight: 700;
1517
1561
  }
1518
- .ds-247420 .btn-primary:hover { background: var(--fg); color: var(--accent-ink); transform: translateY(-1px); box-shadow: var(--shadow-2); }
1562
+ .ds-247420 .btn-primary:hover { background: var(--fg); color: var(--green); transform: translateY(-1px); box-shadow: var(--shadow-2); }
1519
1563
  .ds-247420 .btn-ghost { background: transparent; color: var(--fg); box-shadow: inset 0 0 0 2px var(--fg); }
1520
1564
  .ds-247420 .btn-ghost:hover { background: var(--fg); color: var(--bg); transform: translateY(-1px); }
1521
1565
  .ds-247420 .btn:active, .ds-247420 .btn-primary:active, .ds-247420 .btn-ghost:active { transform: translateY(1px); box-shadow: none; }
@@ -2081,7 +2125,12 @@
2081
2125
  still fits a narrow column, and a 116px ceiling between the two tiers.
2082
2126
  Snapping to either changes the hero's whole optical weight. */
2083
2127
  font-size: clamp(40px, 9cqi, 116px);
2084
- line-height: 0.96; letter-spacing: var(--tr-tighter);
2128
+ /* 0.96 let ascenders/descenders visibly touch between wrapped lines at the
2129
+ upper end of this clamp (measured on "the creative department of the
2130
+ internet" at the 116px ceiling) -- 1.02 keeps the tight, no-air display
2131
+ feel this title wants while clearing enough vertical room that letters
2132
+ stop colliding. */
2133
+ line-height: 1.02; letter-spacing: var(--tr-tighter);
2085
2134
  margin: 0; max-width: 20ch; text-wrap: balance;
2086
2135
  }
2087
2136
  .ds-247420 .ds-hero-body {
@@ -2304,11 +2353,18 @@
2304
2353
  (was 12/14 x 16 => ~43px rows). Density scales the vertical padding. */
2305
2354
  border-radius: var(--r-0); overflow: hidden;
2306
2355
  }
2356
+ /* Panel heads / KPI labels / table headers were all identical uppercase-
2357
+ tracked-mono weight (600), so a page with several of these side by side
2358
+ (a dashboard) reads as one flat volume with no anchor -- the most
2359
+ repetitive, least-singular label (a column header, one of many per
2360
+ table) drops to a lighter 500 with slightly tighter tracking, keeping the
2361
+ system's uppercase-mono voice but giving panel titles (still 600) a real
2362
+ step up as the "read this first" tier. */
2307
2363
  .ds-247420 table th {
2308
2364
  text-align: left;
2309
2365
  padding: calc(var(--space-2) * var(--density)) var(--space-2-75);
2310
- font-size: var(--fs-tiny); font-weight: 600;
2311
- color: var(--fg-3); text-transform: uppercase; letter-spacing: var(--tr-caps);
2366
+ font-size: var(--fs-tiny); font-weight: 500;
2367
+ color: var(--fg-3); text-transform: uppercase; letter-spacing: calc(var(--tr-caps) * 0.7);
2312
2368
  background: var(--bg-2);
2313
2369
  }
2314
2370
  /* letter-spacing adds trailing space AFTER the last glyph too, but the table's
@@ -2924,7 +2980,12 @@
2924
2980
  border-color: var(--rule);
2925
2981
  }
2926
2982
  .ds-247420 .ds-file-row:active { transform: translateY(1px); }
2927
- .ds-247420 .ds-file-row.active { background: var(--accent-tint); border-color: var(--accent); }
2983
+ /* file-grid's own header/caption both claim NEVER A BORDER -- border-color
2984
+ here silently broke that promise for exactly the row it's meant to call
2985
+ out (the row a screenshot/manual test would actually look at). Selected
2986
+ state stays legible via the tint alone; border-color stays transparent so
2987
+ the base rule's promise holds for every row, active or not. */
2988
+ .ds-247420 .ds-file-row.active { background: var(--accent-tint); }
2928
2989
  .ds-247420 .ds-file-row[data-file-type="dir"] { border-left-width: 3px; border-left-color: var(--accent); }
2929
2990
  .ds-247420 .ds-file-row[data-file-type="image"],
2930
2991
  .ds-247420 .ds-file-row[data-file-type="video"],
@@ -3259,9 +3320,14 @@
3259
3320
  }
3260
3321
  .ds-247420 .ds-error-banner:hover { background: color-mix(in oklab, var(--warn) 20%, var(--bg)); }
3261
3322
 
3262
- /* Dropzone */
3323
+ /* Dropzone — a tonal target, not a dashed-border affordance (preview/
3324
+ dropzone.html's own header/caption both describe this: "NO DASHED
3325
+ BORDERS" / "tonal panel that swaps to --panel-select on dragover"). A
3326
+ solid hairline plus the idle->dragover background swap is the actual
3327
+ design; dashed was this system's OTHER "drop target" vocabulary
3328
+ (.panel-docs, kits-appended.css) leaking in here by copy-paste. */
3263
3329
  .ds-247420 .ds-dropzone {
3264
- border: var(--bw-rule) dashed var(--rule);
3330
+ border: var(--bw-rule) solid var(--rule);
3265
3331
  border-radius: var(--r-3); background: var(--bg);
3266
3332
  transition: border-color var(--dur-base) var(--ease), background var(--dur-base) var(--ease);
3267
3333
  }
@@ -4362,8 +4428,14 @@
4362
4428
  :disabled pseudo-class, so a disabled link-styled button relies entirely
4363
4429
  on this class selector for its visual treatment (aria-disabled + tabindex
4364
4430
  are set in JS; this is the paired CSS half). */
4431
+ /* opacity:0.6 alone barely separated from an active .btn-primary against a
4432
+ busy background -- close enough in dark mode that users clicked disabled
4433
+ buttons expecting them to work. grayscale flattens any color signal (no
4434
+ more "still looks clickable-green") and the steeper opacity drop reads as
4435
+ unmistakably inert at a glance, not just slightly dimmed. */
4365
4436
  .ds-247420 .btn:disabled, .ds-247420 .btn-primary:disabled, .ds-247420 .btn-ghost:disabled, .ds-247420 .btn.is-disabled, .ds-247420 .btn-primary.is-disabled, .ds-247420 .btn-ghost.is-disabled, .ds-247420 button:disabled, .ds-247420[disabled] {
4366
- opacity: 0.6;
4437
+ opacity: 0.45;
4438
+ filter: grayscale(60%);
4367
4439
  cursor: not-allowed;
4368
4440
  pointer-events: none;
4369
4441
  }
@@ -4678,7 +4750,13 @@
4678
4750
  transform: rotate(-2deg);
4679
4751
  white-space: nowrap;
4680
4752
  }
4681
- .ds-247420 .stamp.ink { background: var(--ink); border-color: var(--ink); color: var(--paper); }
4753
+ /* border-color previously matched background exactly (var(--ink) on both) --
4754
+ same class of bug as the colors-core "paper" swatch: a border drawn in the
4755
+ identical color as its own fill is invisible, so the ink-toned stamp was
4756
+ the one variant on the page missing its box outline. --paper reads as a
4757
+ visible ring against the ink fill (paper-on-ink is this token pair's
4758
+ whole reason to exist), matching every other .stamp variant's contrast. */
4759
+ .ds-247420 .stamp.ink { background: var(--ink); border-color: var(--paper); color: var(--paper); }
4682
4760
  .ds-247420 .stamp.acid { background: var(--accent); border-color: var(--accent-ink); color: var(--accent-ink); }
4683
4761
  .ds-247420 .stamp.purple { border-color: var(--purple-2); color: var(--purple-2); }
4684
4762
  .ds-247420 .stamp.mascot { border-color: var(--mascot); color: var(--mascot-deep); }
@@ -4693,6 +4771,11 @@
4693
4771
  border: 2px solid var(--fg);
4694
4772
  border-radius: var(--r-hair);
4695
4773
  background: transparent; color: var(--fg);
4774
+ /* .stamp's own caption claims the rubber-stamp motif is "always rotated
4775
+ slightly" -- .btn-stamp is the same visual face as an interactive
4776
+ <button> (preview/stamps-lore.html's second row) and had no rotation at
4777
+ all, breaking that claim for every stamp in that row. */
4778
+ transform: rotate(-2deg);
4696
4779
  transition: background var(--dur-snap) var(--ease), color var(--dur-snap) var(--ease);
4697
4780
  }
4698
4781
  .ds-247420 .btn-stamp:hover { background: var(--panel-hover); }
@@ -4710,11 +4793,20 @@
4710
4793
  }
4711
4794
  .ds-247420 hr.rule { border-top: 1px solid var(--rule); }
4712
4795
  .ds-247420 hr.rule-double { border-top: 4px double var(--rule-strong); }
4713
- .ds-247420 hr.rule-dotted { border-top: 1px dotted var(--rule-strong); }
4714
-
4715
- /* Hairline-only text input no box, no fill. A single bottom rule that
4716
- thickens to 2px on focus, matching the row/rule zero-border aesthetic
4717
- instead of a browser-default boxed field. */
4796
+ /* 1px was indistinguishable from .rule -- border-style:dotted needs enough
4797
+ width to actually draw a gap between dots; below ~2px (esp. at DPRs where
4798
+ 1px resolves to a sub-pixel value like 0.8px) Chrome collapses it to a
4799
+ solid line, which is exactly what preview/rules.html's report caught live. */
4800
+ .ds-247420 hr.rule-dotted { border-top: 2px dotted var(--rule-strong); }
4801
+
4802
+ /* Hairline-only text input — no full box, no permanent fill. A single bottom
4803
+ rule that thickens to 2px on focus, matching the row/rule zero-border
4804
+ aesthetic instead of a browser-default boxed field. A completely flat,
4805
+ static hairline reads as a static label rather than an editable control
4806
+ at a glance (no cue at rest, nothing on hover) -- the very faint permanent
4807
+ wash plus a stronger hover tint below signal "this is a field" without
4808
+ reverting to the boxed/filled chrome the hairline design deliberately
4809
+ moved away from. */
4718
4810
  .ds-247420 .input {
4719
4811
  display: block; width: 100%; box-sizing: border-box;
4720
4812
  /* appearance:none alone is not enough: with color-scheme:dark set on the
@@ -4728,11 +4820,13 @@
4728
4820
  color-scheme: normal;
4729
4821
  border: 0; border-bottom: 1px solid var(--rule-strong);
4730
4822
  border-radius: var(--r-0);
4731
- background: transparent;
4823
+ background: color-mix(in oklab, var(--fg) 2.5%, transparent);
4732
4824
  box-shadow: none;
4733
4825
  padding: var(--space-2) var(--space-1);
4734
4826
  font: inherit; color: var(--fg);
4827
+ transition: background var(--dur-snap) var(--ease), border-color var(--dur-snap) var(--ease);
4735
4828
  }
4829
+ .ds-247420 .input:hover { background: color-mix(in oklab, var(--fg) 5%, transparent); }
4736
4830
  /* Touch floor for the BASE input. Several specific inputs already carried this
4737
4831
  (ds-file-filter-input, ds-modal-input, ds-term-input) but the primitive every
4738
4832
  form actually uses did not, so a plain field measured 34px under a coarse
@@ -6387,12 +6481,21 @@
6387
6481
  gap: var(--space-1-75, 6px);
6388
6482
  }
6389
6483
  /* Table() scroll containment — wide tables scroll inside their own box,
6390
- never the page body. */
6484
+ never the page body. overflow-x:auto alone works but gives no visible cue
6485
+ that a table is wider than its box (macOS overlay scrollbars stay hidden
6486
+ until an active hover/scroll gesture) -- columns beyond the fold read as
6487
+ simply missing rather than reachable. An always-visible thin scrollbar
6488
+ track makes the overflow legible without a gesture first. */
6391
6489
  .ds-247420 .ds-table-wrap {
6392
6490
  overflow-x: auto;
6393
6491
  -webkit-overflow-scrolling: touch;
6394
6492
  max-width: 100%;
6493
+ scrollbar-width: thin;
6494
+ scrollbar-color: var(--rule-strong) transparent;
6395
6495
  }
6496
+ .ds-247420 .ds-table-wrap::-webkit-scrollbar { height: 8px; }
6497
+ .ds-247420 .ds-table-wrap::-webkit-scrollbar-thumb { background: var(--rule-strong); border-radius: var(--r-pill, 999px); }
6498
+ .ds-247420 .ds-table-wrap::-webkit-scrollbar-track { background: transparent; }
6396
6499
  .ds-247420 .ds-table-wrap > table { min-width: 100%; }
6397
6500
  /* Sortable column headers (Table's opt-in sortable prop) — a docstudio-cue
6398
6501
  addition: color stays neutral at rest (this is a structural control, not a