pandorga 1.13.0 → 1.14.0
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 +11 -0
- data/_includes/page/timeline-section.html +228 -29
- data/_layouts/shell.html +1 -1
- data/assets/css/base.css +174 -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 +306 -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,107 @@ 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
|
+
--mk-angle: 104deg;
|
|
401
|
+
--mk-s0: 0.9%;
|
|
402
|
+
--mk-s1: 2.6%;
|
|
403
|
+
--mk-mid: 58%;
|
|
404
|
+
--mk-end: 98%;
|
|
405
|
+
--mk-h: 100%;
|
|
406
|
+
--mk-y: 50%;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
html[data-theme="dark"] {
|
|
410
|
+
--mark-a: 14%;
|
|
411
|
+
--mark-b: 10%;
|
|
412
|
+
--mark-c: 4%;
|
|
413
|
+
--mark-strong-a: 22%;
|
|
414
|
+
--mark-strong-b: 17%;
|
|
415
|
+
--mark-strong-c: 6%;
|
|
416
|
+
--mark-facet-a: 14%;
|
|
417
|
+
--mark-facet-b: 11%;
|
|
418
|
+
--mark-facet-c: 4%;
|
|
419
|
+
--mark-hover-a: 24%;
|
|
420
|
+
--mark-hover-b: 18%;
|
|
421
|
+
--mark-hover-c: 7%;
|
|
422
|
+
--mark-quiet-a: 10%;
|
|
423
|
+
--mark-quiet-b: 7%;
|
|
424
|
+
--mark-quiet-c: 3%;
|
|
425
|
+
/* Not 100%: the YouTube red facet was 4.24:1 on its own dark mark. */
|
|
426
|
+
--facet-ink-mix: 85%;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
/* Shared mark foundation */
|
|
430
|
+
.ledger-mark,
|
|
431
|
+
.ledger-chip,
|
|
432
|
+
.listing-filter-chip:is(:hover, .is-active),
|
|
433
|
+
.lang-pill,
|
|
434
|
+
.source-facet,
|
|
435
|
+
.bib-facet,
|
|
436
|
+
:is(.ledger-cta--emphasis, .ledger-cta--emphasis-alt),
|
|
437
|
+
:is(.detail-action, .detail-type-size-trigger, .article-related-section-pill, .listing-filter-trigger) {
|
|
438
|
+
--mark-ink: var(--color-primary);
|
|
439
|
+
--mark-1: var(--mark-a);
|
|
440
|
+
--mark-2: var(--mark-b);
|
|
441
|
+
--mark-3: var(--mark-c);
|
|
442
|
+
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;
|
|
443
|
+
-webkit-box-decoration-break: clone;
|
|
444
|
+
box-decoration-break: clone;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
:is(.ledger-chip, .site-rail-link, .listing-filter-chip):nth-child(3n+1) {
|
|
448
|
+
--mk-angle: 104deg;
|
|
449
|
+
--mk-s0: 0.9%;
|
|
450
|
+
--mk-s1: 2.6%;
|
|
451
|
+
--mk-mid: 58%;
|
|
452
|
+
--mk-end: 98%;
|
|
453
|
+
--mk-h: 100%;
|
|
454
|
+
--mk-y: 50%;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
:is(.ledger-chip, .site-rail-link, .listing-filter-chip):nth-child(3n+2) {
|
|
458
|
+
--mk-angle: 97deg;
|
|
459
|
+
--mk-s0: 1.8%;
|
|
460
|
+
--mk-s1: 4%;
|
|
461
|
+
--mk-mid: 66%;
|
|
462
|
+
--mk-end: 96%;
|
|
463
|
+
--mk-h: 88%;
|
|
464
|
+
--mk-y: 85%;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
:is(.ledger-chip, .site-rail-link, .listing-filter-chip):nth-child(3n) {
|
|
468
|
+
--mk-angle: 111deg;
|
|
469
|
+
--mk-s0: 0.4%;
|
|
470
|
+
--mk-s1: 1.8%;
|
|
471
|
+
--mk-mid: 48%;
|
|
472
|
+
--mk-end: 92%;
|
|
473
|
+
--mk-h: 90%;
|
|
474
|
+
--mk-y: 20%;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
:is(.ledger-chip, .listing-filter-chip, .ledger-cta, .detail-action, .detail-type-size-trigger, .site-rail-link, .listing-filter-trigger):focus-visible {
|
|
478
|
+
outline: 2px solid var(--color-primary);
|
|
479
|
+
outline-offset: 2px;
|
|
480
|
+
}
|
|
481
|
+
|
|
381
482
|
/* ── Page-level accent ────────────────────────────────────────────────
|
|
382
483
|
The shared triad (theme/theme-vars-block.liquid) declares one primary per
|
|
383
484
|
theme, but each section of the site reads in its own hue: Projects and
|
|
@@ -692,22 +793,31 @@ a.no-underline:active {
|
|
|
692
793
|
display: inline-flex;
|
|
693
794
|
align-items: center;
|
|
694
795
|
gap: 0.5rem;
|
|
695
|
-
|
|
696
|
-
|
|
796
|
+
margin: 1px;
|
|
797
|
+
/* +0.5px per side keeps the box of the removed 1.5px border (with the margin). */
|
|
798
|
+
padding: calc(0.35rem + 0.5px) calc(0.75rem + 0.5px);
|
|
799
|
+
border: 0;
|
|
697
800
|
border-radius: var(--radius-card);
|
|
698
|
-
|
|
801
|
+
--mark-ink: var(--color-on-surface-variant);
|
|
802
|
+
--mark-1: var(--mark-quiet-a);
|
|
803
|
+
--mark-2: var(--mark-quiet-b);
|
|
804
|
+
--mark-3: var(--mark-quiet-c);
|
|
699
805
|
color: var(--color-on-surface-variant);
|
|
700
806
|
cursor: pointer;
|
|
701
807
|
transition: color var(--motion-duration-fast) var(--motion-ease-default),
|
|
702
|
-
border-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
703
808
|
background-color var(--motion-duration-fast) var(--motion-ease-default);
|
|
704
809
|
}
|
|
705
810
|
|
|
811
|
+
/* Neutral control: a quiet gray mark at rest, a deeper one on hover and
|
|
812
|
+
while its panel is open. */
|
|
706
813
|
.listing-filter-trigger:hover,
|
|
707
814
|
.listing-filter-trigger[aria-expanded="true"] {
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
815
|
+
--mark-1: var(--mark-hover-a);
|
|
816
|
+
--mark-2: var(--mark-hover-b);
|
|
817
|
+
--mark-3: var(--mark-hover-c);
|
|
818
|
+
/* Darkened in light like the strong marks: plain secondary on the gray
|
|
819
|
+
hover mark was 3.65:1. */
|
|
820
|
+
color: color-mix(in srgb, var(--color-secondary) var(--facet-ink-mix), var(--color-on-surface));
|
|
711
821
|
}
|
|
712
822
|
|
|
713
823
|
.listing-filter-trigger .material-symbols-outlined {
|
|
@@ -816,9 +926,9 @@ a.no-underline:active {
|
|
|
816
926
|
align-items: center;
|
|
817
927
|
justify-content: center;
|
|
818
928
|
gap: 0.35rem;
|
|
819
|
-
padding: 0.35rem 0.55rem;
|
|
820
|
-
border:
|
|
821
|
-
border-radius:
|
|
929
|
+
padding: calc(0.35rem + 1.5px) calc(0.55rem + 1.5px);
|
|
930
|
+
border: 0;
|
|
931
|
+
border-radius: 0;
|
|
822
932
|
background: transparent;
|
|
823
933
|
color: var(--color-on-surface-variant);
|
|
824
934
|
font-family: var(--font-label);
|
|
@@ -827,19 +937,22 @@ a.no-underline:active {
|
|
|
827
937
|
letter-spacing: 0.02em;
|
|
828
938
|
line-height: 1.2;
|
|
829
939
|
cursor: pointer;
|
|
830
|
-
transition:
|
|
940
|
+
transition: color var(--motion-duration-fast) var(--motion-ease-default);
|
|
831
941
|
}
|
|
832
942
|
|
|
833
943
|
.listing-filter-chip:hover {
|
|
834
|
-
|
|
835
|
-
|
|
944
|
+
--mark-1: var(--mark-quiet-a);
|
|
945
|
+
--mark-2: var(--mark-quiet-b);
|
|
946
|
+
--mark-3: var(--mark-quiet-c);
|
|
947
|
+
color: var(--color-on-surface);
|
|
836
948
|
}
|
|
837
949
|
|
|
950
|
+
/* Active filter chip uses menu-strength mark and full-contrast text. */
|
|
838
951
|
.listing-filter-chip.is-active {
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
952
|
+
--mark-1: var(--mark-a);
|
|
953
|
+
--mark-2: var(--mark-b);
|
|
954
|
+
--mark-3: var(--mark-c);
|
|
955
|
+
color: var(--color-on-surface);
|
|
843
956
|
}
|
|
844
957
|
|
|
845
958
|
.listing-filter-swatch {
|
|
@@ -860,17 +973,23 @@ a.no-underline:active {
|
|
|
860
973
|
font-size: var(--type-label);
|
|
861
974
|
font-weight: var(--weight-label);
|
|
862
975
|
letter-spacing: 0.03em;
|
|
863
|
-
padding: 0.1rem 0.4rem;
|
|
864
|
-
border:
|
|
976
|
+
padding: calc(0.1rem + 1px) calc(0.4rem + 1px);
|
|
977
|
+
border: 0;
|
|
865
978
|
white-space: nowrap;
|
|
979
|
+
--facet-ink: currentColor;
|
|
980
|
+
color: color-mix(in srgb, var(--facet-ink) var(--facet-ink-mix), var(--color-on-surface));
|
|
981
|
+
--mark-ink: currentColor;
|
|
982
|
+
--mark-1: var(--mark-facet-a);
|
|
983
|
+
--mark-2: var(--mark-facet-b);
|
|
984
|
+
--mark-3: var(--mark-facet-c);
|
|
866
985
|
}
|
|
867
986
|
|
|
868
987
|
.lang-pill--enus {
|
|
869
|
-
|
|
988
|
+
--facet-ink: var(--color-primary);
|
|
870
989
|
}
|
|
871
990
|
|
|
872
991
|
.lang-pill--ptbr {
|
|
873
|
-
|
|
992
|
+
--facet-ink: var(--color-secondary);
|
|
874
993
|
}
|
|
875
994
|
|
|
876
995
|
.ledger-chip-row {
|
|
@@ -888,77 +1007,32 @@ a.no-underline:active {
|
|
|
888
1007
|
font-weight: var(--weight-label);
|
|
889
1008
|
letter-spacing: 0.03em;
|
|
890
1009
|
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));
|
|
1010
|
+
/* Tags use a borderless felt-pen mark in the page accent, rebound via
|
|
1011
|
+
--color-primary by .page-accent--*. No inset ring or border is applied. */
|
|
901
1012
|
color: color-mix(in srgb, var(--color-primary) 82%, var(--color-on-surface));
|
|
902
1013
|
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. */
|
|
1014
|
+
border: 0;
|
|
1015
|
+
border-radius: 0;
|
|
1016
|
+
transition: color var(--motion-duration-fast) var(--motion-ease-default);
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
a.ledger-chip {
|
|
1020
|
+
color: color-mix(in srgb, var(--color-primary) 82%, var(--color-on-surface));
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
/* Hover deepens the mark strength. */
|
|
938
1024
|
a.ledger-chip:hover {
|
|
1025
|
+
--mark-1: var(--mark-hover-a);
|
|
1026
|
+
--mark-2: var(--mark-hover-b);
|
|
1027
|
+
--mark-3: var(--mark-hover-c);
|
|
939
1028
|
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
1029
|
border-color: transparent;
|
|
950
1030
|
}
|
|
951
1031
|
|
|
952
1032
|
[data-theme="dark"] a.ledger-chip {
|
|
953
|
-
background: color-mix(in srgb, var(--color-primary) 10%, var(--color-surface-high));
|
|
954
1033
|
color: color-mix(in srgb, var(--color-primary) 78%, var(--color-on-surface));
|
|
955
1034
|
}
|
|
956
1035
|
|
|
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
1036
|
/* Dates live here. The chips and language pills inside the strip set their
|
|
963
1037
|
own uppercase, so the strip itself leaves case alone — running small caps
|
|
964
1038
|
over a date is heavier than the date deserves. */
|
|
@@ -998,8 +1072,8 @@ a.ledger-chip:hover {
|
|
|
998
1072
|
}
|
|
999
1073
|
|
|
1000
1074
|
/* 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
|
-
|
|
1075
|
+
same gesture as the marker wash on titles. Emphasis buttons carry a
|
|
1076
|
+
strong mark instead. */
|
|
1003
1077
|
.ledger-cta:not(.ledger-cta--emphasis):not(.ledger-cta--emphasis-alt)>span:not(.ledger-cta-arrow):not(.ledger-cta-icon) {
|
|
1004
1078
|
text-decoration: underline;
|
|
1005
1079
|
text-decoration-color: color-mix(in srgb, var(--color-primary) 50%, transparent);
|
|
@@ -1049,63 +1123,47 @@ a.ledger-chip:hover {
|
|
|
1049
1123
|
Those set real button padding (0.85rem vertical, --space-lg horizontal) and a
|
|
1050
1124
|
solid filled background for the primary case. `.ledger-cta--emphasis` is the
|
|
1051
1125
|
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
|
-
|
|
1126
|
+
Vitæ"): still a `.ledger-cta`, just with tight padding and a strong
|
|
1127
|
+
highlighter mark instead of a tinted box or a heavy solid block, so it
|
|
1128
|
+
reads as a real button without becoming a bulky box; hover fills solid. Reuse this instead of adding
|
|
1055
1129
|
another one-off CTA class. `--emphasis-alt` swaps the hue to secondary, for
|
|
1056
1130
|
a second hero-level action (e.g. "Contacts") that needs to read as a
|
|
1057
1131
|
distinct button next to the primary one rather than a duplicate of it. */
|
|
1058
1132
|
.ledger-cta--emphasis {
|
|
1133
|
+
margin: 1px;
|
|
1059
1134
|
padding: 0.35rem 0.85rem;
|
|
1060
|
-
border:
|
|
1135
|
+
border: 0;
|
|
1061
1136
|
border-radius: var(--radius-card);
|
|
1062
|
-
|
|
1137
|
+
--mark-ink: var(--color-primary);
|
|
1138
|
+
--mark-1: var(--mark-strong-a);
|
|
1139
|
+
--mark-2: var(--mark-strong-b);
|
|
1140
|
+
--mark-3: var(--mark-strong-c);
|
|
1141
|
+
color: color-mix(in srgb, var(--color-primary) var(--facet-ink-mix), var(--color-on-surface));
|
|
1063
1142
|
transition: color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1064
|
-
border-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1065
1143
|
background-color var(--motion-duration-fast) var(--motion-ease-default);
|
|
1066
1144
|
}
|
|
1067
1145
|
|
|
1068
1146
|
.ledger-cta--emphasis:hover {
|
|
1069
1147
|
color: var(--color-on-primary, var(--color-surface));
|
|
1070
|
-
border-color: var(--color-link-hover);
|
|
1071
1148
|
background: var(--color-primary);
|
|
1072
1149
|
}
|
|
1073
1150
|
|
|
1074
1151
|
.ledger-cta--emphasis-alt {
|
|
1152
|
+
margin: 1px;
|
|
1075
1153
|
padding: 0.35rem 0.85rem;
|
|
1076
|
-
border:
|
|
1154
|
+
border: 0;
|
|
1077
1155
|
border-radius: var(--radius-card);
|
|
1078
|
-
|
|
1079
|
-
|
|
1156
|
+
--mark-ink: var(--color-secondary);
|
|
1157
|
+
--mark-1: var(--mark-strong-a);
|
|
1158
|
+
--mark-2: var(--mark-strong-b);
|
|
1159
|
+
--mark-3: var(--mark-strong-c);
|
|
1160
|
+
color: color-mix(in srgb, var(--color-secondary) var(--facet-ink-mix), var(--color-on-surface));
|
|
1080
1161
|
transition: color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1081
|
-
border-color var(--motion-duration-fast) var(--motion-ease-default),
|
|
1082
1162
|
background-color var(--motion-duration-fast) var(--motion-ease-default);
|
|
1083
1163
|
}
|
|
1084
1164
|
|
|
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
1165
|
.ledger-cta--emphasis-alt:hover {
|
|
1107
1166
|
color: var(--color-on-secondary, var(--color-surface));
|
|
1108
|
-
border-color: var(--color-secondary);
|
|
1109
1167
|
background: var(--color-secondary);
|
|
1110
1168
|
}
|
|
1111
1169
|
|
|
@@ -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(--facet-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(--facet-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
|
}
|