anentrypoint-design 0.0.203 → 0.0.205
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 +35 -14
- package/dist/247420.css +35 -14
- package/dist/247420.js +13 -13
- package/package.json +1 -1
- package/src/components/content.js +2 -2
- package/src/kits/os/freddie/pages-tools.js +1 -1
- package/src/markdown-cache-perf-test.js +0 -173
package/app-shell.css
CHANGED
|
@@ -534,41 +534,56 @@ body.canvas-host { background: transparent !important; }
|
|
|
534
534
|
grid-template-columns: minmax(80px, 12ch) minmax(0, 1fr) auto;
|
|
535
535
|
gap: var(--space-3);
|
|
536
536
|
align-items: baseline;
|
|
537
|
-
padding:
|
|
537
|
+
padding: 16px 22px;
|
|
538
538
|
background: var(--bg);
|
|
539
539
|
border-radius: var(--r-2);
|
|
540
540
|
color: var(--fg);
|
|
541
541
|
position: relative;
|
|
542
|
-
|
|
542
|
+
/* Only background + the leading rail animate; padding/size never change on
|
|
543
|
+
interaction, so they are deliberately absent (a padding transition here was
|
|
544
|
+
dead and misleading). */
|
|
545
|
+
transition: background var(--dur-snap) var(--ease);
|
|
543
546
|
}
|
|
544
|
-
.row + .row { margin-top:
|
|
547
|
+
.row + .row { margin-top: 2px; }
|
|
545
548
|
.row::before {
|
|
546
549
|
content: '';
|
|
547
|
-
position: absolute; left:
|
|
548
|
-
|
|
549
|
-
|
|
550
|
+
position: absolute; left: 7px; top: 0; bottom: 0; width: 3px;
|
|
551
|
+
margin: auto 0;
|
|
552
|
+
height: 0; /* collapsed by default; reveals from centre */
|
|
553
|
+
background: var(--rule-strong);
|
|
554
|
+
border-radius: var(--r-pill);
|
|
555
|
+
opacity: 0;
|
|
556
|
+
transition: height var(--dur-base) var(--ease), opacity var(--dur-snap) var(--ease), background var(--dur-snap) var(--ease);
|
|
550
557
|
}
|
|
551
558
|
/* A clickable row (onClick -> role=button, or a link row) is interactive, so it
|
|
552
559
|
carries a pointer cursor; without this the click affordance is invisible. */
|
|
553
560
|
.row[role="button"], a.row { cursor: pointer; }
|
|
554
|
-
|
|
555
|
-
|
|
561
|
+
/* Hover reveals the rail (grows from centre) only on interactive rows — a static
|
|
562
|
+
row should not signal an affordance it does not have. */
|
|
563
|
+
.row[role="button"]:hover, a.row:hover { background: var(--bg-2); }
|
|
564
|
+
.row[role="button"]:hover::before, a.row:hover::before { height: 56%; opacity: 1; }
|
|
556
565
|
.row.active { background: color-mix(in oklab, var(--accent) 10%, var(--bg-2)); }
|
|
557
|
-
.row.active::before { background: var(--accent); }
|
|
566
|
+
.row.active::before { height: 64%; opacity: 1; background: var(--accent); }
|
|
567
|
+
.row.active .title { color: var(--accent); }
|
|
558
568
|
.row.row-state-disabled { opacity: 0.5; pointer-events: none; }
|
|
559
569
|
.row.row-state-error { background: color-mix(in oklab, var(--flame) 10%, var(--bg-2)); }
|
|
560
|
-
.row.row-state-error::before { background: var(--flame); }
|
|
570
|
+
.row.row-state-error::before { height: 64%; opacity: 1; background: var(--flame); }
|
|
561
571
|
/* rail tones — a persistent status colour on the leading rail (the ::before
|
|
562
|
-
bar).
|
|
572
|
+
bar). Always shown (a status indicator, not a hover affordance). Active/error
|
|
573
|
+
still win via their own rules below in source order. */
|
|
574
|
+
.row.rail-green::before,
|
|
575
|
+
.row.rail-purple::before,
|
|
576
|
+
.row.rail-flame::before { height: 56%; opacity: 1; }
|
|
563
577
|
.row.rail-green::before { background: var(--accent); }
|
|
564
578
|
.row.rail-purple::before { background: var(--purple-2, #7F18A4); }
|
|
565
579
|
.row.rail-flame::before { background: var(--flame); }
|
|
566
580
|
.row-grid { /* explicit grid-template-columns set inline */ }
|
|
567
581
|
|
|
568
|
-
.row .code { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
|
|
569
|
-
.row .title { font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-lg); display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
|
|
582
|
+
.row .code { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); font-variant-numeric: tabular-nums; letter-spacing: 0.01em; }
|
|
583
|
+
.row .title { font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-lg); line-height: var(--lh-snug, 1.3); display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; min-width: 0; }
|
|
584
|
+
.row .title .sub { font-family: var(--ff-body); font-weight: 400; font-size: var(--fs-sm); color: var(--fg-3); }
|
|
570
585
|
.row .sub { font-family: var(--ff-body); font-weight: 400; font-size: var(--fs-sm); color: var(--fg-3); }
|
|
571
|
-
.row .meta { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); text-align: right; }
|
|
586
|
+
.row .meta { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; align-self: center; }
|
|
572
587
|
|
|
573
588
|
a.row { text-decoration: none; }
|
|
574
589
|
|
|
@@ -2075,6 +2090,12 @@ button:disabled, [disabled] {
|
|
|
2075
2090
|
from { transform: rotate(0deg); }
|
|
2076
2091
|
to { transform: rotate(360deg); }
|
|
2077
2092
|
}
|
|
2093
|
+
/* Reusable spin utility: rotates the element (e.g. a refresh Icon used as a
|
|
2094
|
+
busy indicator) via the shared spinner-rotate keyframe. Respects reduced
|
|
2095
|
+
motion. Use instead of a decorative rotation glyph. */
|
|
2096
|
+
.ds-spin { animation: spinner-rotate 0.8s linear infinite; transform-origin: center; }
|
|
2097
|
+
@media (prefers-reduced-motion: reduce) { .ds-spin { animation: none; } }
|
|
2098
|
+
|
|
2078
2099
|
.loading { position: relative; }
|
|
2079
2100
|
.loading::after {
|
|
2080
2101
|
content: '';
|
package/dist/247420.css
CHANGED
|
@@ -935,41 +935,56 @@
|
|
|
935
935
|
grid-template-columns: minmax(80px, 12ch) minmax(0, 1fr) auto;
|
|
936
936
|
gap: var(--space-3);
|
|
937
937
|
align-items: baseline;
|
|
938
|
-
padding:
|
|
938
|
+
padding: 16px 22px;
|
|
939
939
|
background: var(--bg);
|
|
940
940
|
border-radius: var(--r-2);
|
|
941
941
|
color: var(--fg);
|
|
942
942
|
position: relative;
|
|
943
|
-
|
|
943
|
+
/* Only background + the leading rail animate; padding/size never change on
|
|
944
|
+
interaction, so they are deliberately absent (a padding transition here was
|
|
945
|
+
dead and misleading). */
|
|
946
|
+
transition: background var(--dur-snap) var(--ease);
|
|
944
947
|
}
|
|
945
|
-
.ds-247420 .row + .row { margin-top:
|
|
948
|
+
.ds-247420 .row + .row { margin-top: 2px; }
|
|
946
949
|
.ds-247420 .row::before {
|
|
947
950
|
content: '';
|
|
948
|
-
position: absolute; left:
|
|
949
|
-
|
|
950
|
-
|
|
951
|
+
position: absolute; left: 7px; top: 0; bottom: 0; width: 3px;
|
|
952
|
+
margin: auto 0;
|
|
953
|
+
height: 0; /* collapsed by default; reveals from centre */
|
|
954
|
+
background: var(--rule-strong);
|
|
955
|
+
border-radius: var(--r-pill);
|
|
956
|
+
opacity: 0;
|
|
957
|
+
transition: height var(--dur-base) var(--ease), opacity var(--dur-snap) var(--ease), background var(--dur-snap) var(--ease);
|
|
951
958
|
}
|
|
952
959
|
/* A clickable row (onClick -> role=button, or a link row) is interactive, so it
|
|
953
960
|
carries a pointer cursor; without this the click affordance is invisible. */
|
|
954
961
|
.ds-247420 .row[role="button"], .ds-247420 a.row { cursor: pointer; }
|
|
955
|
-
|
|
956
|
-
|
|
962
|
+
/* Hover reveals the rail (grows from centre) only on interactive rows — a static
|
|
963
|
+
row should not signal an affordance it does not have. */
|
|
964
|
+
.ds-247420 .row[role="button"]:hover, .ds-247420 a.row:hover { background: var(--bg-2); }
|
|
965
|
+
.ds-247420 .row[role="button"]:hover::before, .ds-247420 a.row:hover::before { height: 56%; opacity: 1; }
|
|
957
966
|
.ds-247420 .row.active { background: color-mix(in oklab, var(--accent) 10%, var(--bg-2)); }
|
|
958
|
-
.ds-247420 .row.active::before { background: var(--accent); }
|
|
967
|
+
.ds-247420 .row.active::before { height: 64%; opacity: 1; background: var(--accent); }
|
|
968
|
+
.ds-247420 .row.active .title { color: var(--accent); }
|
|
959
969
|
.ds-247420 .row.row-state-disabled { opacity: 0.5; pointer-events: none; }
|
|
960
970
|
.ds-247420 .row.row-state-error { background: color-mix(in oklab, var(--flame) 10%, var(--bg-2)); }
|
|
961
|
-
.ds-247420 .row.row-state-error::before { background: var(--flame); }
|
|
971
|
+
.ds-247420 .row.row-state-error::before { height: 64%; opacity: 1; background: var(--flame); }
|
|
962
972
|
/* rail tones — a persistent status colour on the leading rail (the ::before
|
|
963
|
-
bar).
|
|
973
|
+
bar). Always shown (a status indicator, not a hover affordance). Active/error
|
|
974
|
+
still win via their own rules below in source order. */
|
|
975
|
+
.ds-247420 .row.rail-green::before,
|
|
976
|
+
.ds-247420 .row.rail-purple::before,
|
|
977
|
+
.ds-247420 .row.rail-flame::before { height: 56%; opacity: 1; }
|
|
964
978
|
.ds-247420 .row.rail-green::before { background: var(--accent); }
|
|
965
979
|
.ds-247420 .row.rail-purple::before { background: var(--purple-2, #7F18A4); }
|
|
966
980
|
.ds-247420 .row.rail-flame::before { background: var(--flame); }
|
|
967
981
|
.ds-247420 .row-grid { /* explicit grid-template-columns set inline */ }
|
|
968
982
|
|
|
969
|
-
.ds-247420 .row .code { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
|
|
970
|
-
.ds-247420 .row .title { font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-lg); display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
|
|
983
|
+
.ds-247420 .row .code { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); font-variant-numeric: tabular-nums; letter-spacing: 0.01em; }
|
|
984
|
+
.ds-247420 .row .title { font-family: var(--ff-body); font-weight: 600; font-size: var(--fs-lg); line-height: var(--lh-snug, 1.3); display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; min-width: 0; }
|
|
985
|
+
.ds-247420 .row .title .sub { font-family: var(--ff-body); font-weight: 400; font-size: var(--fs-sm); color: var(--fg-3); }
|
|
971
986
|
.ds-247420 .row .sub { font-family: var(--ff-body); font-weight: 400; font-size: var(--fs-sm); color: var(--fg-3); }
|
|
972
|
-
.ds-247420 .row .meta { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); text-align: right; }
|
|
987
|
+
.ds-247420 .row .meta { font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; align-self: center; }
|
|
973
988
|
|
|
974
989
|
.ds-247420 a.row { text-decoration: none; }
|
|
975
990
|
|
|
@@ -2475,6 +2490,12 @@
|
|
|
2475
2490
|
from { transform: rotate(0deg); }
|
|
2476
2491
|
to { transform: rotate(360deg); }
|
|
2477
2492
|
}
|
|
2493
|
+
/* Reusable spin utility: rotates the element (e.g. a refresh Icon used as a
|
|
2494
|
+
busy indicator) via the shared spinner-rotate keyframe. Respects reduced
|
|
2495
|
+
motion. Use instead of a decorative rotation glyph. */
|
|
2496
|
+
.ds-247420 .ds-spin { animation: spinner-rotate 0.8s linear infinite; transform-origin: center; }
|
|
2497
|
+
@media (prefers-reduced-motion: reduce) { .ds-247420 .ds-spin { animation: none; } }
|
|
2498
|
+
|
|
2478
2499
|
.ds-247420 .loading { position: relative; }
|
|
2479
2500
|
.ds-247420 .loading::after {
|
|
2480
2501
|
content: '';
|