pandorga 1.13.0 → 1.14.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/_includes/page/timeline-section.html +228 -29
- data/_layouts/shell.html +1 -1
- data/assets/css/base.css +177 -116
- data/assets/css/ledger/bibliography.css +15 -10
- data/assets/css/ledger/chrome.css +3 -12
- data/assets/css/ledger/cv.css +21 -0
- data/assets/css/ledger/detail.css +29 -15
- data/assets/css/ledger/home.css +6 -2
- data/assets/css/ledger/sources.css +27 -12
- data/assets/css/ledger/writing.css +10 -15
- data/lib/pandorga/commands/new.rb +1 -1
- data/lib/pandorga/version.rb +1 -1
- data/scripts/test/test-highlighter-pills.rb +316 -0
- data/scripts/test/test-shell-a11y.rb +38 -0
- data/scripts/test/test-theme-contrast.rb +91 -0
- data/scripts/test/test-timeline-pan.mjs +147 -0
- data/scripts/test/test-timeline-pan.rb +116 -0
- data/scripts/validate.sh +7 -0
- metadata +4 -1
data/assets/css/base.css
CHANGED
|
@@ -378,6 +378,110 @@ html body {
|
|
|
378
378
|
color-mix(in srgb, var(--color-tertiary) 2%, transparent) 98%);
|
|
379
379
|
}
|
|
380
380
|
|
|
381
|
+
/* Highlighter mark tokens */
|
|
382
|
+
html:root,
|
|
383
|
+
html[data-theme="light"] {
|
|
384
|
+
--mark-a: 18%;
|
|
385
|
+
--mark-b: 14%;
|
|
386
|
+
--mark-c: 5%;
|
|
387
|
+
--mark-strong-a: 28%;
|
|
388
|
+
--mark-strong-b: 22%;
|
|
389
|
+
--mark-strong-c: 8%;
|
|
390
|
+
--mark-facet-a: 14%;
|
|
391
|
+
--mark-facet-b: 11%;
|
|
392
|
+
--mark-facet-c: 4%;
|
|
393
|
+
--mark-hover-a: 30%;
|
|
394
|
+
--mark-hover-b: 24%;
|
|
395
|
+
--mark-hover-c: 9%;
|
|
396
|
+
--mark-quiet-a: 12%;
|
|
397
|
+
--mark-quiet-b: 9%;
|
|
398
|
+
--mark-quiet-c: 3%;
|
|
399
|
+
--facet-ink-mix: 82%;
|
|
400
|
+
/* Detail actions: green section primary on the gray hover mark was 4.48:1 at 82%. */
|
|
401
|
+
--action-ink-mix: 74%;
|
|
402
|
+
--mk-angle: 104deg;
|
|
403
|
+
--mk-s0: 0.9%;
|
|
404
|
+
--mk-s1: 2.6%;
|
|
405
|
+
--mk-mid: 58%;
|
|
406
|
+
--mk-end: 98%;
|
|
407
|
+
--mk-h: 100%;
|
|
408
|
+
--mk-y: 50%;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
html[data-theme="dark"] {
|
|
412
|
+
--mark-a: 14%;
|
|
413
|
+
--mark-b: 10%;
|
|
414
|
+
--mark-c: 4%;
|
|
415
|
+
--mark-strong-a: 22%;
|
|
416
|
+
--mark-strong-b: 17%;
|
|
417
|
+
--mark-strong-c: 6%;
|
|
418
|
+
--mark-facet-a: 14%;
|
|
419
|
+
--mark-facet-b: 11%;
|
|
420
|
+
--mark-facet-c: 4%;
|
|
421
|
+
--mark-hover-a: 24%;
|
|
422
|
+
--mark-hover-b: 18%;
|
|
423
|
+
--mark-hover-c: 7%;
|
|
424
|
+
--mark-quiet-a: 10%;
|
|
425
|
+
--mark-quiet-b: 7%;
|
|
426
|
+
--mark-quiet-c: 3%;
|
|
427
|
+
/* Not 100%: the YouTube red facet was 4.24:1 on its own dark mark. */
|
|
428
|
+
--facet-ink-mix: 85%;
|
|
429
|
+
--action-ink-mix: 85%;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/* Shared mark foundation */
|
|
433
|
+
.ledger-mark,
|
|
434
|
+
.ledger-chip,
|
|
435
|
+
.listing-filter-chip:is(:hover, .is-active),
|
|
436
|
+
.lang-pill,
|
|
437
|
+
.source-facet,
|
|
438
|
+
.bib-facet,
|
|
439
|
+
:is(.ledger-cta--emphasis, .ledger-cta--emphasis-alt),
|
|
440
|
+
:is(.detail-action, .detail-type-size-trigger, .article-related-section-pill, .listing-filter-trigger) {
|
|
441
|
+
--mark-ink: var(--color-primary);
|
|
442
|
+
--mark-1: var(--mark-a);
|
|
443
|
+
--mark-2: var(--mark-b);
|
|
444
|
+
--mark-3: var(--mark-c);
|
|
445
|
+
background: linear-gradient(var(--mk-angle), transparent var(--mk-s0), color-mix(in srgb, var(--mark-ink) var(--mark-1), transparent) var(--mk-s1), color-mix(in srgb, var(--mark-ink) var(--mark-2), transparent) var(--mk-mid), color-mix(in srgb, var(--mark-ink) var(--mark-3), transparent) var(--mk-end), transparent 100%) 0 var(--mk-y) / 100% var(--mk-h) no-repeat;
|
|
446
|
+
-webkit-box-decoration-break: clone;
|
|
447
|
+
box-decoration-break: clone;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
:is(.ledger-chip, .site-rail-link, .listing-filter-chip):nth-child(3n+1) {
|
|
451
|
+
--mk-angle: 104deg;
|
|
452
|
+
--mk-s0: 0.9%;
|
|
453
|
+
--mk-s1: 2.6%;
|
|
454
|
+
--mk-mid: 58%;
|
|
455
|
+
--mk-end: 98%;
|
|
456
|
+
--mk-h: 100%;
|
|
457
|
+
--mk-y: 50%;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
:is(.ledger-chip, .site-rail-link, .listing-filter-chip):nth-child(3n+2) {
|
|
461
|
+
--mk-angle: 97deg;
|
|
462
|
+
--mk-s0: 1.8%;
|
|
463
|
+
--mk-s1: 4%;
|
|
464
|
+
--mk-mid: 66%;
|
|
465
|
+
--mk-end: 96%;
|
|
466
|
+
--mk-h: 88%;
|
|
467
|
+
--mk-y: 85%;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
:is(.ledger-chip, .site-rail-link, .listing-filter-chip):nth-child(3n) {
|
|
471
|
+
--mk-angle: 111deg;
|
|
472
|
+
--mk-s0: 0.4%;
|
|
473
|
+
--mk-s1: 1.8%;
|
|
474
|
+
--mk-mid: 48%;
|
|
475
|
+
--mk-end: 92%;
|
|
476
|
+
--mk-h: 90%;
|
|
477
|
+
--mk-y: 20%;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
:is(.ledger-chip, .listing-filter-chip, .ledger-cta, .detail-action, .detail-type-size-trigger, .site-rail-link, .listing-filter-trigger):focus-visible {
|
|
481
|
+
outline: 2px solid var(--color-primary);
|
|
482
|
+
outline-offset: 2px;
|
|
483
|
+
}
|
|
484
|
+
|
|
381
485
|
/* ── Page-level accent ────────────────────────────────────────────────
|
|
382
486
|
The shared triad (theme/theme-vars-block.liquid) declares one primary per
|
|
383
487
|
theme, but each section of the site reads in its own hue: Projects and
|
|
@@ -692,22 +796,31 @@ a.no-underline:active {
|
|
|
692
796
|
display: inline-flex;
|
|
693
797
|
align-items: center;
|
|
694
798
|
gap: 0.5rem;
|
|
695
|
-
|
|
696
|
-
|
|
799
|
+
margin: 1px;
|
|
800
|
+
/* +0.5px per side keeps the box of the removed 1.5px border (with the margin). */
|
|
801
|
+
padding: calc(0.35rem + 0.5px) calc(0.75rem + 0.5px);
|
|
802
|
+
border: 0;
|
|
697
803
|
border-radius: var(--radius-card);
|
|
698
|
-
|
|
804
|
+
--mark-ink: var(--color-on-surface-variant);
|
|
805
|
+
--mark-1: var(--mark-quiet-a);
|
|
806
|
+
--mark-2: var(--mark-quiet-b);
|
|
807
|
+
--mark-3: var(--mark-quiet-c);
|
|
699
808
|
color: var(--color-on-surface-variant);
|
|
700
809
|
cursor: pointer;
|
|
701
810
|
transition: color var(--motion-duration-fast) var(--motion-ease-default),
|
|
702
|
-
border-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
703
811
|
background-color var(--motion-duration-fast) var(--motion-ease-default);
|
|
704
812
|
}
|
|
705
813
|
|
|
814
|
+
/* Neutral control: a quiet gray mark at rest, a deeper one on hover and
|
|
815
|
+
while its panel is open. */
|
|
706
816
|
.listing-filter-trigger:hover,
|
|
707
817
|
.listing-filter-trigger[aria-expanded="true"] {
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
818
|
+
--mark-1: var(--mark-hover-a);
|
|
819
|
+
--mark-2: var(--mark-hover-b);
|
|
820
|
+
--mark-3: var(--mark-hover-c);
|
|
821
|
+
/* Darkened in light like the strong marks: plain secondary on the gray
|
|
822
|
+
hover mark was 3.65:1. */
|
|
823
|
+
color: color-mix(in srgb, var(--color-secondary) var(--facet-ink-mix), var(--color-on-surface));
|
|
711
824
|
}
|
|
712
825
|
|
|
713
826
|
.listing-filter-trigger .material-symbols-outlined {
|
|
@@ -816,9 +929,9 @@ a.no-underline:active {
|
|
|
816
929
|
align-items: center;
|
|
817
930
|
justify-content: center;
|
|
818
931
|
gap: 0.35rem;
|
|
819
|
-
padding: 0.35rem 0.55rem;
|
|
820
|
-
border:
|
|
821
|
-
border-radius:
|
|
932
|
+
padding: calc(0.35rem + 1.5px) calc(0.55rem + 1.5px);
|
|
933
|
+
border: 0;
|
|
934
|
+
border-radius: 0;
|
|
822
935
|
background: transparent;
|
|
823
936
|
color: var(--color-on-surface-variant);
|
|
824
937
|
font-family: var(--font-label);
|
|
@@ -827,19 +940,22 @@ a.no-underline:active {
|
|
|
827
940
|
letter-spacing: 0.02em;
|
|
828
941
|
line-height: 1.2;
|
|
829
942
|
cursor: pointer;
|
|
830
|
-
transition:
|
|
943
|
+
transition: color var(--motion-duration-fast) var(--motion-ease-default);
|
|
831
944
|
}
|
|
832
945
|
|
|
833
946
|
.listing-filter-chip:hover {
|
|
834
|
-
|
|
835
|
-
|
|
947
|
+
--mark-1: var(--mark-quiet-a);
|
|
948
|
+
--mark-2: var(--mark-quiet-b);
|
|
949
|
+
--mark-3: var(--mark-quiet-c);
|
|
950
|
+
color: var(--color-on-surface);
|
|
836
951
|
}
|
|
837
952
|
|
|
953
|
+
/* Active filter chip uses menu-strength mark and full-contrast text. */
|
|
838
954
|
.listing-filter-chip.is-active {
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
955
|
+
--mark-1: var(--mark-a);
|
|
956
|
+
--mark-2: var(--mark-b);
|
|
957
|
+
--mark-3: var(--mark-c);
|
|
958
|
+
color: var(--color-on-surface);
|
|
843
959
|
}
|
|
844
960
|
|
|
845
961
|
.listing-filter-swatch {
|
|
@@ -860,17 +976,23 @@ a.no-underline:active {
|
|
|
860
976
|
font-size: var(--type-label);
|
|
861
977
|
font-weight: var(--weight-label);
|
|
862
978
|
letter-spacing: 0.03em;
|
|
863
|
-
padding: 0.1rem 0.4rem;
|
|
864
|
-
border:
|
|
979
|
+
padding: calc(0.1rem + 1px) calc(0.4rem + 1px);
|
|
980
|
+
border: 0;
|
|
865
981
|
white-space: nowrap;
|
|
982
|
+
--facet-ink: currentColor;
|
|
983
|
+
color: color-mix(in srgb, var(--facet-ink) var(--facet-ink-mix), var(--color-on-surface));
|
|
984
|
+
--mark-ink: currentColor;
|
|
985
|
+
--mark-1: var(--mark-facet-a);
|
|
986
|
+
--mark-2: var(--mark-facet-b);
|
|
987
|
+
--mark-3: var(--mark-facet-c);
|
|
866
988
|
}
|
|
867
989
|
|
|
868
990
|
.lang-pill--enus {
|
|
869
|
-
|
|
991
|
+
--facet-ink: var(--color-primary);
|
|
870
992
|
}
|
|
871
993
|
|
|
872
994
|
.lang-pill--ptbr {
|
|
873
|
-
|
|
995
|
+
--facet-ink: var(--color-secondary);
|
|
874
996
|
}
|
|
875
997
|
|
|
876
998
|
.ledger-chip-row {
|
|
@@ -888,77 +1010,32 @@ a.no-underline:active {
|
|
|
888
1010
|
font-weight: var(--weight-label);
|
|
889
1011
|
letter-spacing: 0.03em;
|
|
890
1012
|
padding: 0.15rem 0.45rem;
|
|
891
|
-
/* Tags
|
|
892
|
-
|
|
893
|
-
blue on Projects, green on Articles and the CV, ochre on Rascunhos with
|
|
894
|
-
no per-page rule anywhere. The fill stays mostly surface so a row of
|
|
895
|
-
chips reads as metadata and not as a row of buttons; the ink carries
|
|
896
|
-
most of the hue, which is what makes the tag legible as a tag.
|
|
897
|
-
Note this is `.ledger-chip` only: the page-header tag line (the CV's
|
|
898
|
-
"Engineering Leadership. Team Building…") is a separate
|
|
899
|
-
`data-content-header-tags` span and is deliberately left alone. */
|
|
900
|
-
background: color-mix(in srgb, var(--color-primary) 16%, var(--color-surface-high));
|
|
1013
|
+
/* Tags use a borderless felt-pen mark in the page accent, rebound via
|
|
1014
|
+
--color-primary by .page-accent--*. No inset ring or border is applied. */
|
|
901
1015
|
color: color-mix(in srgb, var(--color-primary) 82%, var(--color-on-surface));
|
|
902
1016
|
text-decoration: none;
|
|
903
|
-
border
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
any ratio, so the resting chip keeps its size, its fill and its square
|
|
914
|
-
corners. */
|
|
915
|
-
box-shadow: inset 0 0 0 1px transparent;
|
|
916
|
-
transition: color var(--motion-duration-fast) var(--motion-ease-default), background-color var(--motion-duration-fast) var(--motion-ease-default), box-shadow var(--motion-duration-fast) var(--motion-ease-default), border-color var(--motion-duration-fast) var(--motion-ease-default);
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
/* Hover reads `.ledger-card:hover` — one tonal step plus an accent-warmed
|
|
920
|
-
hairline — at chip scale.
|
|
921
|
-
|
|
922
|
-
The step cannot be a ladder rung: the chip's resting fill is already the
|
|
923
|
-
ladder's top one. What it used to do instead was borrow a rung from the
|
|
924
|
-
other surface family (`surfaceHigh` → `surfaceContainerHigh`), which is
|
|
925
|
-
the defect DESIGN.md records under *Two surface families name the same
|
|
926
|
-
colours* — in dark the two are the same value to the byte, so the hover
|
|
927
|
-
measured 1.000 : 1 and only the text changed, and in light they are close
|
|
928
|
-
enough to have read the same way. Tinting the resting fill with the page
|
|
929
|
-
accent instead is a real step in both palettes — down on paper, up on the
|
|
930
|
-
dark canvas — and stays right whichever way the light ladder is pointed,
|
|
931
|
-
which the borrowed rung did not. 8% is the value
|
|
932
|
-
`.listing-filter-chip.is-active` already uses for an accent-tinted fill.
|
|
933
|
-
|
|
934
|
-
The hairline carries the rest, at 35% accent over plain `--border-gentle`
|
|
935
|
-
rather than the card's 40% over `--border-gentle-hover`. A line drawn
|
|
936
|
-
around something this small is a far larger share of its ink than the same
|
|
937
|
-
line around a card, so the quieter mix is the proportionate one. */
|
|
1017
|
+
border: 0;
|
|
1018
|
+
border-radius: 0;
|
|
1019
|
+
transition: color var(--motion-duration-fast) var(--motion-ease-default);
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
a.ledger-chip {
|
|
1023
|
+
color: color-mix(in srgb, var(--color-primary) 82%, var(--color-on-surface));
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
/* Hover deepens the mark strength. */
|
|
938
1027
|
a.ledger-chip:hover {
|
|
1028
|
+
--mark-1: var(--mark-hover-a);
|
|
1029
|
+
--mark-2: var(--mark-hover-b);
|
|
1030
|
+
--mark-3: var(--mark-hover-c);
|
|
939
1031
|
color: var(--color-on-surface);
|
|
940
|
-
/* Resting fill is 16% accent in light; hover must clear that. */
|
|
941
|
-
background: color-mix(in srgb, var(--color-primary) 28%, var(--color-surface-high));
|
|
942
|
-
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--color-primary) 45%, var(--border-gentle));
|
|
943
|
-
/* No-op for the filled chip, which has no border. It matters on the sources
|
|
944
|
-
facets, the one place that outlines the chip instead of filling it: the
|
|
945
|
-
ring would otherwise be drawn just inside that outline and the two
|
|
946
|
-
hairlines would read as one 2px line. Handing the edge to the ring keeps
|
|
947
|
-
the hover at a single line there too, and the fill that page expects on
|
|
948
|
-
hover still arrives. */
|
|
949
1032
|
border-color: transparent;
|
|
950
1033
|
}
|
|
951
1034
|
|
|
952
1035
|
[data-theme="dark"] a.ledger-chip {
|
|
953
|
-
background: color-mix(in srgb, var(--color-primary) 10%, var(--color-surface-high));
|
|
954
1036
|
color: color-mix(in srgb, var(--color-primary) 78%, var(--color-on-surface));
|
|
955
1037
|
}
|
|
956
1038
|
|
|
957
|
-
[data-theme="dark"] a.ledger-chip:hover {
|
|
958
|
-
background: color-mix(in srgb, var(--color-primary) 22%, var(--color-surface-high));
|
|
959
|
-
box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--color-primary) 35%, var(--border-gentle));
|
|
960
|
-
}
|
|
961
|
-
|
|
962
1039
|
/* Dates live here. The chips and language pills inside the strip set their
|
|
963
1040
|
own uppercase, so the strip itself leaves case alone — running small caps
|
|
964
1041
|
over a date is heavier than the date deserves. */
|
|
@@ -998,8 +1075,8 @@ a.ledger-chip:hover {
|
|
|
998
1075
|
}
|
|
999
1076
|
|
|
1000
1077
|
/* Text CTAs carry a gentle accent underline so the clickable cue is not the
|
|
1001
|
-
same gesture as the marker wash on titles. Emphasis buttons
|
|
1002
|
-
|
|
1078
|
+
same gesture as the marker wash on titles. Emphasis buttons carry a
|
|
1079
|
+
strong mark instead. */
|
|
1003
1080
|
.ledger-cta:not(.ledger-cta--emphasis):not(.ledger-cta--emphasis-alt)>span:not(.ledger-cta-arrow):not(.ledger-cta-icon) {
|
|
1004
1081
|
text-decoration: underline;
|
|
1005
1082
|
text-decoration-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
|
|
@@ -1049,63 +1126,47 @@ a.ledger-chip:hover {
|
|
|
1049
1126
|
Those set real button padding (0.85rem vertical, --space-lg horizontal) and a
|
|
1050
1127
|
solid filled background for the primary case. `.ledger-cta--emphasis` is the
|
|
1051
1128
|
one or two truly primary actions per page (e.g. hero "Full Curriculum
|
|
1052
|
-
Vitæ"): still a `.ledger-cta`, just with tight padding and a
|
|
1053
|
-
instead of a heavy solid block, so it
|
|
1054
|
-
|
|
1129
|
+
Vitæ"): still a `.ledger-cta`, just with tight padding and a strong
|
|
1130
|
+
highlighter mark instead of a tinted box or a heavy solid block, so it
|
|
1131
|
+
reads as a real button without becoming a bulky box; hover fills solid. Reuse this instead of adding
|
|
1055
1132
|
another one-off CTA class. `--emphasis-alt` swaps the hue to secondary, for
|
|
1056
1133
|
a second hero-level action (e.g. "Contacts") that needs to read as a
|
|
1057
1134
|
distinct button next to the primary one rather than a duplicate of it. */
|
|
1058
1135
|
.ledger-cta--emphasis {
|
|
1136
|
+
margin: 1px;
|
|
1059
1137
|
padding: 0.35rem 0.85rem;
|
|
1060
|
-
border:
|
|
1138
|
+
border: 0;
|
|
1061
1139
|
border-radius: var(--radius-card);
|
|
1062
|
-
|
|
1140
|
+
--mark-ink: var(--color-primary);
|
|
1141
|
+
--mark-1: var(--mark-strong-a);
|
|
1142
|
+
--mark-2: var(--mark-strong-b);
|
|
1143
|
+
--mark-3: var(--mark-strong-c);
|
|
1144
|
+
color: color-mix(in srgb, var(--color-primary) var(--facet-ink-mix), var(--color-on-surface));
|
|
1063
1145
|
transition: color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1064
|
-
border-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1065
1146
|
background-color var(--motion-duration-fast) var(--motion-ease-default);
|
|
1066
1147
|
}
|
|
1067
1148
|
|
|
1068
1149
|
.ledger-cta--emphasis:hover {
|
|
1069
1150
|
color: var(--color-on-primary, var(--color-surface));
|
|
1070
|
-
border-color: var(--color-link-hover);
|
|
1071
1151
|
background: var(--color-primary);
|
|
1072
1152
|
}
|
|
1073
1153
|
|
|
1074
1154
|
.ledger-cta--emphasis-alt {
|
|
1155
|
+
margin: 1px;
|
|
1075
1156
|
padding: 0.35rem 0.85rem;
|
|
1076
|
-
border:
|
|
1157
|
+
border: 0;
|
|
1077
1158
|
border-radius: var(--radius-card);
|
|
1078
|
-
|
|
1079
|
-
|
|
1159
|
+
--mark-ink: var(--color-secondary);
|
|
1160
|
+
--mark-1: var(--mark-strong-a);
|
|
1161
|
+
--mark-2: var(--mark-strong-b);
|
|
1162
|
+
--mark-3: var(--mark-strong-c);
|
|
1163
|
+
color: color-mix(in srgb, var(--color-secondary) var(--facet-ink-mix), var(--color-on-surface));
|
|
1080
1164
|
transition: color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1081
|
-
border-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1082
1165
|
background-color var(--motion-duration-fast) var(--motion-ease-default);
|
|
1083
1166
|
}
|
|
1084
1167
|
|
|
1085
|
-
[data-theme="dark"] .ledger-cta--emphasis {
|
|
1086
|
-
background: color-mix(in srgb, var(--color-primary) 18%, var(--color-background));
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
[data-theme="dark"] .ledger-cta--emphasis-alt {
|
|
1090
|
-
background: color-mix(in srgb, var(--color-secondary) 18%, var(--color-background));
|
|
1091
|
-
}
|
|
1092
|
-
|
|
1093
|
-
/* Dark resting mixes sit after the shared :hover fill and match its
|
|
1094
|
-
specificity (attr + class vs class + :hover), so without these the
|
|
1095
|
-
primary button kept the 14% wash under the pointer while the ink
|
|
1096
|
-
stepped to on-primary — dark text on a near-black hero. Alt escaped
|
|
1097
|
-
because its :hover rule already follows the dark rest. */
|
|
1098
|
-
[data-theme="dark"] .ledger-cta--emphasis:hover {
|
|
1099
|
-
background: var(--color-primary);
|
|
1100
|
-
}
|
|
1101
|
-
|
|
1102
|
-
[data-theme="dark"] .ledger-cta--emphasis-alt:hover {
|
|
1103
|
-
background: var(--color-secondary);
|
|
1104
|
-
}
|
|
1105
|
-
|
|
1106
1168
|
.ledger-cta--emphasis-alt:hover {
|
|
1107
1169
|
color: var(--color-on-secondary, var(--color-surface));
|
|
1108
|
-
border-color: var(--color-secondary);
|
|
1109
1170
|
background: var(--color-secondary);
|
|
1110
1171
|
}
|
|
1111
1172
|
|
|
@@ -122,38 +122,43 @@
|
|
|
122
122
|
display: inline-flex;
|
|
123
123
|
align-items: center;
|
|
124
124
|
height: var(--bib-facet-height);
|
|
125
|
-
padding: 0 var(--space-sm);
|
|
126
|
-
border:
|
|
125
|
+
padding: 0 calc(var(--space-sm) + 1.5px);
|
|
126
|
+
border: 0;
|
|
127
127
|
border-radius: var(--radius-card);
|
|
128
|
-
background: transparent;
|
|
129
128
|
white-space: nowrap;
|
|
130
129
|
font-family: var(--font-label);
|
|
131
130
|
font-size: var(--type-label);
|
|
132
131
|
font-weight: var(--weight-label);
|
|
133
132
|
letter-spacing: 0.03em;
|
|
134
133
|
line-height: 1;
|
|
135
|
-
|
|
134
|
+
--facet-ink: var(--color-on-surface-variant);
|
|
135
|
+
color: color-mix(in srgb, var(--facet-ink) var(--facet-ink-mix), var(--color-on-surface));
|
|
136
|
+
--mark-ink: currentColor;
|
|
137
|
+
--mark-1: var(--mark-facet-a);
|
|
138
|
+
--mark-2: var(--mark-facet-b);
|
|
139
|
+
--mark-3: var(--mark-facet-c);
|
|
136
140
|
}
|
|
137
141
|
|
|
138
142
|
.bib-facet--article {
|
|
139
|
-
|
|
143
|
+
--facet-ink: var(--color-primary);
|
|
140
144
|
}
|
|
141
145
|
|
|
142
146
|
.bib-facet--book {
|
|
143
|
-
|
|
147
|
+
--facet-ink: var(--color-secondary);
|
|
144
148
|
}
|
|
145
149
|
|
|
146
150
|
.bib-facet--report {
|
|
147
|
-
|
|
151
|
+
--facet-ink: var(--color-tertiary);
|
|
148
152
|
}
|
|
149
153
|
|
|
150
154
|
.bib-facet--techreport {
|
|
151
|
-
|
|
155
|
+
--facet-ink: var(--color-tertiary);
|
|
152
156
|
}
|
|
153
157
|
|
|
154
158
|
.bib-facet--news {
|
|
155
|
-
/* Hardcoded salmon colors for now, since punctual
|
|
156
|
-
|
|
159
|
+
/* Hardcoded salmon colors for now, since punctual. Pre-mixed toward the
|
|
160
|
+
text color: plain salmon stayed under 4.5:1 on its mark in light. */
|
|
161
|
+
--facet-ink: color-mix(in srgb, #b7756e 85%, var(--color-on-surface));
|
|
157
162
|
}
|
|
158
163
|
|
|
159
164
|
.bib-key {
|
|
@@ -91,22 +91,13 @@
|
|
|
91
91
|
box-shadow: none;
|
|
92
92
|
background: linear-gradient(104deg,
|
|
93
93
|
transparent 0.9%,
|
|
94
|
-
color-mix(in srgb, var(--color-primary)
|
|
95
|
-
color-mix(in srgb, var(--color-primary)
|
|
96
|
-
color-mix(in srgb, var(--color-primary)
|
|
94
|
+
color-mix(in srgb, var(--color-primary) var(--mark-a), transparent) 2.4%,
|
|
95
|
+
color-mix(in srgb, var(--color-primary) var(--mark-b), transparent) 58%,
|
|
96
|
+
color-mix(in srgb, var(--color-primary) var(--mark-c), transparent) 98%);
|
|
97
97
|
box-decoration-break: clone;
|
|
98
98
|
-webkit-box-decoration-break: clone;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
[data-theme="dark"] .site-rail-link.is-active {
|
|
102
|
-
background: linear-gradient(104deg,
|
|
103
|
-
transparent 0.9%,
|
|
104
|
-
color-mix(in srgb, var(--color-primary) 14%, transparent) 2.4%,
|
|
105
|
-
color-mix(in srgb, var(--color-primary) 10%, transparent) 58%,
|
|
106
|
-
color-mix(in srgb, var(--color-primary) 4%, transparent) 98%);
|
|
107
|
-
box-shadow: none;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
101
|
/* The rail needs room for six labels before it earns its place; below that
|
|
111
102
|
the Explore menu carries the same links. */
|
|
112
103
|
@media (min-width: 1024px) {
|
data/assets/css/ledger/cv.css
CHANGED
|
@@ -802,6 +802,27 @@ html[data-theme="light"] .cv-product {
|
|
|
802
802
|
border: 1.5px solid var(--border-ink);
|
|
803
803
|
border-radius: var(--radius-card);
|
|
804
804
|
overflow: hidden;
|
|
805
|
+
touch-action: pan-x pan-y;
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
#timeline-chart-wrapper:focus-visible {
|
|
809
|
+
outline: 2px solid var(--color-primary);
|
|
810
|
+
outline-offset: -2px;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
#timeline-chart {
|
|
814
|
+
cursor: grab;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
#timeline-chart.is-dragging,
|
|
818
|
+
#timeline-chart-wrapper.is-dragging {
|
|
819
|
+
cursor: grabbing;
|
|
820
|
+
user-select: none;
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
.cv-timeline-hint {
|
|
824
|
+
margin: 0;
|
|
825
|
+
color: var(--color-on-surface-variant);
|
|
805
826
|
}
|
|
806
827
|
|
|
807
828
|
/* ── Dossier note and contact call to action ──
|
|
@@ -115,14 +115,21 @@ a.back-link .material-symbols-outlined {
|
|
|
115
115
|
border-top: 1px solid var(--border-gentle-faint);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
/* Back, Share, Cite, PDF and the reading-size step are neutral controls: a
|
|
119
|
+
quiet gray highlighter mark at rest, a deeper one on hover (or while the
|
|
120
|
+
size menu is open), with the margin standing in for the removed border. */
|
|
118
121
|
.detail-action {
|
|
119
122
|
display: inline-flex;
|
|
120
123
|
align-items: center;
|
|
121
124
|
gap: 0.35rem;
|
|
125
|
+
margin: 1px;
|
|
122
126
|
padding: 0.35rem 0.85rem;
|
|
123
|
-
|
|
124
|
-
border: 1px solid var(--border-ink);
|
|
127
|
+
border: 0;
|
|
125
128
|
border-radius: var(--radius-pill);
|
|
129
|
+
--mark-ink: var(--color-on-surface-variant);
|
|
130
|
+
--mark-1: var(--mark-quiet-a);
|
|
131
|
+
--mark-2: var(--mark-quiet-b);
|
|
132
|
+
--mark-3: var(--mark-quiet-c);
|
|
126
133
|
font-family: var(--font-label);
|
|
127
134
|
font-size: var(--type-label-lg);
|
|
128
135
|
font-weight: var(--weight-label);
|
|
@@ -131,14 +138,14 @@ a.back-link .material-symbols-outlined {
|
|
|
131
138
|
text-decoration: none !important;
|
|
132
139
|
cursor: pointer;
|
|
133
140
|
transition: background-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
134
|
-
border-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
135
141
|
color var(--motion-duration-fast) var(--motion-ease-default);
|
|
136
142
|
}
|
|
137
143
|
|
|
138
144
|
.detail-action:hover {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
145
|
+
--mark-1: var(--mark-hover-a);
|
|
146
|
+
--mark-2: var(--mark-hover-b);
|
|
147
|
+
--mark-3: var(--mark-hover-c);
|
|
148
|
+
color: color-mix(in srgb, var(--color-primary) var(--action-ink-mix), var(--color-on-surface));
|
|
142
149
|
}
|
|
143
150
|
|
|
144
151
|
.detail-action .material-symbols-outlined {
|
|
@@ -165,10 +172,14 @@ a.back-link .material-symbols-outlined {
|
|
|
165
172
|
display: inline-flex;
|
|
166
173
|
align-items: center;
|
|
167
174
|
gap: 0.2rem;
|
|
175
|
+
margin: 1px;
|
|
168
176
|
padding: 0.35rem 0.55rem 0.35rem 0.7rem;
|
|
169
|
-
|
|
170
|
-
border: 1px solid var(--border-ink);
|
|
177
|
+
border: 0;
|
|
171
178
|
border-radius: var(--radius-pill);
|
|
179
|
+
--mark-ink: var(--color-on-surface-variant);
|
|
180
|
+
--mark-1: var(--mark-quiet-a);
|
|
181
|
+
--mark-2: var(--mark-quiet-b);
|
|
182
|
+
--mark-3: var(--mark-quiet-c);
|
|
172
183
|
font-family: var(--font-label);
|
|
173
184
|
font-size: var(--type-label-lg);
|
|
174
185
|
font-weight: var(--weight-label);
|
|
@@ -177,20 +188,20 @@ a.back-link .material-symbols-outlined {
|
|
|
177
188
|
color: var(--color-on-surface);
|
|
178
189
|
cursor: pointer;
|
|
179
190
|
transition: background-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
180
|
-
border-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
181
191
|
color var(--motion-duration-fast) var(--motion-ease-default);
|
|
182
192
|
}
|
|
183
193
|
|
|
184
194
|
.detail-type-size-trigger:hover,
|
|
185
195
|
.detail-type-size-trigger[aria-expanded="true"] {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
196
|
+
--mark-1: var(--mark-hover-a);
|
|
197
|
+
--mark-2: var(--mark-hover-b);
|
|
198
|
+
--mark-3: var(--mark-hover-c);
|
|
199
|
+
color: color-mix(in srgb, var(--color-primary) var(--action-ink-mix), var(--color-on-surface));
|
|
189
200
|
}
|
|
190
201
|
|
|
191
202
|
.detail-type-size-trigger:focus-visible {
|
|
192
|
-
outline:
|
|
193
|
-
outline-offset:
|
|
203
|
+
outline: 2px solid var(--color-primary);
|
|
204
|
+
outline-offset: 2px;
|
|
194
205
|
}
|
|
195
206
|
|
|
196
207
|
.detail-type-size-trigger .material-symbols-outlined {
|
|
@@ -1279,7 +1290,10 @@ nav.text-page-nav:not(:has(a)) {
|
|
|
1279
1290
|
padding: 0.2rem 0.7rem;
|
|
1280
1291
|
min-height: 1.65rem;
|
|
1281
1292
|
border-radius: 0;
|
|
1282
|
-
|
|
1293
|
+
--mark-ink: var(--color-on-surface-variant);
|
|
1294
|
+
--mark-1: var(--mark-quiet-a);
|
|
1295
|
+
--mark-2: var(--mark-quiet-b);
|
|
1296
|
+
--mark-3: var(--mark-quiet-c);
|
|
1283
1297
|
color: var(--color-on-surface-variant);
|
|
1284
1298
|
font-family: var(--font-label);
|
|
1285
1299
|
font-size: var(--type-label);
|
data/assets/css/ledger/home.css
CHANGED
|
@@ -813,16 +813,20 @@ html[data-theme="light"] .home-hero-plate {
|
|
|
813
813
|
border-top: 1px solid var(--border-gentle-divider);
|
|
814
814
|
}
|
|
815
815
|
|
|
816
|
+
/* Solid mark: opaque under the label, fades only in the trailing padding;
|
|
817
|
+
hover fills solid. */
|
|
816
818
|
.home-featured-foot .home-featured-cta {
|
|
817
819
|
margin-left: auto;
|
|
818
820
|
padding: 0.35rem var(--space-md);
|
|
819
|
-
background: var(--color-primary);
|
|
821
|
+
background: linear-gradient(104deg, transparent 0.9%, var(--color-primary) 2.4%, var(--color-primary) calc(100% - 0.8rem), color-mix(in srgb, var(--color-primary) 40%, transparent) 100%);
|
|
822
|
+
-webkit-box-decoration-break: clone;
|
|
823
|
+
box-decoration-break: clone;
|
|
820
824
|
color: var(--color-on-primary);
|
|
821
825
|
font-weight: var(--weight-label);
|
|
822
826
|
}
|
|
823
827
|
|
|
824
828
|
.home-featured-foot .home-featured-cta:hover {
|
|
825
|
-
background:
|
|
829
|
+
background: var(--color-primary);
|
|
826
830
|
color: var(--color-on-primary);
|
|
827
831
|
text-decoration: none;
|
|
828
832
|
}
|