@morphemecms/cms 0.7.0 → 0.8.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.
- package/CHANGELOG.md +18 -0
- package/defaults/collections.ts +56 -0
- package/defaults/company.ts +13 -4
- package/defaults/texts.ts +17 -0
- package/icons/lucide/LICENSE-phosphor +21 -0
- package/icons/lucide/facebook-logo.svg +1 -0
- package/icons/lucide/linkedin-logo.svg +1 -0
- package/icons/lucide/pack.json +16 -1
- package/icons/lucide/pinterest-logo.svg +1 -0
- package/icons/lucide/x-logo.svg +1 -0
- package/icons/material-symbols/LICENSE-phosphor +21 -0
- package/icons/material-symbols/facebook-logo.svg +1 -0
- package/icons/material-symbols/linkedin-logo.svg +1 -0
- package/icons/material-symbols/pack.json +15 -0
- package/icons/material-symbols/pinterest-logo.svg +1 -0
- package/icons/material-symbols/x-logo.svg +1 -0
- package/icons/phosphor/facebook-logo.svg +1 -0
- package/icons/phosphor/linkedin-logo.svg +1 -0
- package/icons/phosphor/pinterest-logo.svg +1 -0
- package/icons/phosphor/x-logo.svg +1 -0
- package/lib/lead.d.mts +5 -0
- package/lib/lead.mjs +10 -0
- package/lib/lead.test.mjs +65 -0
- package/lib/licenses.mjs +1 -1
- package/package.json +2 -1
- package/scripts/icon-packs.mjs +51 -13
- package/scripts/material-fallback.test.mjs +49 -0
- package/site/icons.d.mts +13 -0
- package/site/icons.mjs +25 -3
- package/site/materialSymbols.d.mts +8 -2
- package/site/materialSymbols.mjs +27 -11
- package/site/materialSymbols.test.mjs +44 -0
- package/site/schema.ts +2 -0
- package/site/site.ts +9 -2
- package/site/social.d.mts +37 -0
- package/site/social.mjs +92 -0
- package/site/social.test.mjs +80 -0
- package/site/theme.d.mts +2 -0
- package/site/theme.mjs +28 -11
- package/site/themeImport.test.mjs +40 -0
- package/src/EntryForm.tsx +21 -58
- package/src/FormFrame.tsx +5 -5
- package/src/Parts.tsx +8 -30
- package/src/Screen.tsx +12 -5
- package/src/editor.css +70 -5
- package/src/i18n/da-DK/parts.ts +1 -1
- package/src/i18n/da-DK/theme.ts +4 -0
- package/src/i18n/en-US/parts.ts +1 -1
- package/src/i18n/en-US/theme.ts +4 -0
- package/src/icon.tsx +1 -1
- package/src/materialIcons.ts +5 -7
- package/src/pagePreview.tsx +21 -1
- package/src/postLead.d.mts +7 -0
- package/src/postLead.mjs +9 -0
- package/src/postLead.test.mjs +28 -0
- package/src/ui.tsx +41 -96
- package/src/virtual.d.ts +5 -0
- package/starter/package.json +1 -1
- package/starter/src/data/social.json +14 -0
- package/theme/components/PostAuthor.astro +20 -0
- package/theme/components/PostCard.tsx +26 -0
- package/theme/components/PostHeader.astro +36 -0
- package/theme/components/PostMeta.tsx +27 -2
- package/theme/components/RelatedPosts.astro +29 -0
- package/theme/components/ShareRow.astro +48 -0
- package/theme/layouts/PostLayout.astro +28 -54
- package/theme/styles/base.css +164 -127
- package/theme/styles/blocks.css +160 -155
- package/theme/styles/components.css +43 -34
- package/theme/styles/global.css +316 -303
- package/theme/styles/ui.css +43 -34
- package/theme/ui/copyLink.script.ts +17 -0
package/theme/styles/global.css
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
@import '@fontsource-variable/roboto';
|
|
4
4
|
|
|
5
5
|
/*
|
|
6
|
+
Material is every theme's fallback: its rules that set more than custom properties sit in @layer fallback (declared last in
|
|
7
|
+
base.css), so a theme's own unlayered rules win over them, whatever the specificity. Custom properties stay unlayered.
|
|
8
|
+
|
|
6
9
|
The standard theme's look, Material: the site in Material Design 3 (m3.material.io). Roboto and the M3 type scale (regular headlines,
|
|
7
10
|
medium titles and labels), the M3 shapes (below), tonal surfaces instead of lines, the M3 elevation levels and its emphasized easing; buttons
|
|
8
11
|
as wide as their label (filled and tonal) and lists in segments. The theme's own parts (the top app bar, the
|
|
@@ -971,134 +974,136 @@
|
|
|
971
974
|
}
|
|
972
975
|
}
|
|
973
976
|
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
.
|
|
977
|
-
.
|
|
978
|
-
|
|
979
|
-
|
|
977
|
+
@layer fallback {
|
|
978
|
+
/* Long text: pictures with large corners. */
|
|
979
|
+
.prose :where(img):not(:where(.not-prose img)),
|
|
980
|
+
.picture-crop,
|
|
981
|
+
.prose :where(iframe) {
|
|
982
|
+
border-radius: var(--md-shape-large);
|
|
983
|
+
}
|
|
980
984
|
|
|
981
|
-
/* The mark before the name on a testimonial without a picture: an avatar, a circle in the highest surface container
|
|
985
|
+
/* The mark before the name on a testimonial without a picture: an avatar, a circle in the highest surface container
|
|
982
986
|
(it stands on a container) with the name's first letter (data-initial, Testimonial.tsx), as Material's avatars
|
|
983
987
|
without a picture, not the standard theme's dot. */
|
|
984
|
-
.block-testimonial-mark {
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
}
|
|
997
|
-
.block-testimonial-mark::before {
|
|
998
|
-
|
|
999
|
-
}
|
|
988
|
+
.block-testimonial-mark {
|
|
989
|
+
display: grid;
|
|
990
|
+
width: 2.5rem;
|
|
991
|
+
height: 2.5rem;
|
|
992
|
+
place-items: center;
|
|
993
|
+
border-radius: var(--md-shape-full);
|
|
994
|
+
background: var(--md-surface-container-highest);
|
|
995
|
+
color: var(--ink);
|
|
996
|
+
font-size: var(--type-title-medium-size);
|
|
997
|
+
font-weight: var(--type-title-medium-weight);
|
|
998
|
+
letter-spacing: var(--type-title-medium-tracking);
|
|
999
|
+
line-height: 1;
|
|
1000
|
+
}
|
|
1001
|
+
.block-testimonial-mark::before {
|
|
1002
|
+
content: attr(data-initial);
|
|
1003
|
+
}
|
|
1000
1004
|
|
|
1001
|
-
/* The Material theme's own parts (components/Header.astro, MobileMenu.tsx, Footer.astro). */
|
|
1005
|
+
/* The Material theme's own parts (components/Header.astro, MobileMenu.tsx, Footer.astro). */
|
|
1002
1006
|
|
|
1003
|
-
/* The top app bar (its variables above, Header.astro): 64px high, above the cookie banner, so its menus are too. */
|
|
1004
|
-
/* The menu's items: a label in medium weight, a state layer, the open page in an active indicator (the secondary
|
|
1007
|
+
/* The top app bar (its variables above, Header.astro): 64px high, above the cookie banner, so its menus are too. */
|
|
1008
|
+
/* The menu's items: a label in medium weight, a state layer, the open page in an active indicator (the secondary
|
|
1005
1009
|
container). 40px high, and 48px to touch. */
|
|
1006
|
-
.md-nav-item,
|
|
1007
|
-
.md-nav-toggle {
|
|
1008
|
-
|
|
1009
|
-
}
|
|
1010
|
-
.md-nav-item::after {
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
}
|
|
1015
|
-
.md-nav-toggle::after {
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
}
|
|
1020
|
-
.md-nav-item {
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
}
|
|
1037
|
-
.md-nav-item:hover {
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
}
|
|
1041
|
-
.md-nav-item:focus-visible,
|
|
1042
|
-
.md-nav-item:active {
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
}
|
|
1046
|
-
/* An item with sub-pages: its label, then the button that opens them. */
|
|
1047
|
-
.md-nav-item-parent {
|
|
1048
|
-
|
|
1049
|
-
}
|
|
1050
|
-
.md-nav-toggle {
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
}
|
|
1061
|
-
.md-nav-toggle:hover {
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
}
|
|
1065
|
-
.md-nav-toggle:focus-visible,
|
|
1066
|
-
.md-nav-toggle:active {
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
}
|
|
1070
|
-
.md-nav-toggle > svg {
|
|
1071
|
-
|
|
1072
|
-
}
|
|
1073
|
-
.md-nav-toggle[aria-expanded='true'] > svg {
|
|
1074
|
-
|
|
1075
|
-
}
|
|
1076
|
-
.md-nav-item[aria-current='page'],
|
|
1077
|
-
li:has(.menu-item[aria-current='page']) > .md-nav-item {
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
}
|
|
1081
|
-
/* A menu (its variables above): a state layer with focus from the keyboard (the ripple when pressed), and the open page
|
|
1010
|
+
.md-nav-item,
|
|
1011
|
+
.md-nav-toggle {
|
|
1012
|
+
position: relative;
|
|
1013
|
+
}
|
|
1014
|
+
.md-nav-item::after {
|
|
1015
|
+
content: '';
|
|
1016
|
+
position: absolute;
|
|
1017
|
+
inset: -0.25rem 0;
|
|
1018
|
+
}
|
|
1019
|
+
.md-nav-toggle::after {
|
|
1020
|
+
content: '';
|
|
1021
|
+
position: absolute;
|
|
1022
|
+
inset: -0.25rem -0.125rem -0.25rem -0.5rem;
|
|
1023
|
+
}
|
|
1024
|
+
.md-nav-item {
|
|
1025
|
+
display: inline-flex;
|
|
1026
|
+
min-height: 2.5rem;
|
|
1027
|
+
align-items: center;
|
|
1028
|
+
gap: 0.25rem;
|
|
1029
|
+
border-radius: var(--md-shape-full);
|
|
1030
|
+
padding: 0 1rem;
|
|
1031
|
+
white-space: nowrap;
|
|
1032
|
+
color: var(--muted);
|
|
1033
|
+
font-size: var(--type-label-large-size);
|
|
1034
|
+
line-height: var(--type-label-large-line-height);
|
|
1035
|
+
font-weight: var(--type-label-large-weight);
|
|
1036
|
+
letter-spacing: var(--type-label-large-tracking);
|
|
1037
|
+
transition:
|
|
1038
|
+
background-color var(--motion-effects),
|
|
1039
|
+
color var(--motion-effects);
|
|
1040
|
+
}
|
|
1041
|
+
.md-nav-item:hover {
|
|
1042
|
+
background: var(--md-hover);
|
|
1043
|
+
color: var(--ink);
|
|
1044
|
+
}
|
|
1045
|
+
.md-nav-item:focus-visible,
|
|
1046
|
+
.md-nav-item:active {
|
|
1047
|
+
background: var(--md-pressed);
|
|
1048
|
+
color: var(--ink);
|
|
1049
|
+
}
|
|
1050
|
+
/* An item with sub-pages: its label, then the button that opens them. */
|
|
1051
|
+
.md-nav-item-parent {
|
|
1052
|
+
padding-right: 0.25rem;
|
|
1053
|
+
}
|
|
1054
|
+
.md-nav-toggle {
|
|
1055
|
+
display: grid;
|
|
1056
|
+
width: 2rem;
|
|
1057
|
+
height: 2.5rem;
|
|
1058
|
+
place-items: center;
|
|
1059
|
+
border-radius: var(--md-shape-full);
|
|
1060
|
+
color: var(--muted);
|
|
1061
|
+
transition:
|
|
1062
|
+
background-color var(--motion-effects),
|
|
1063
|
+
color var(--motion-effects);
|
|
1064
|
+
}
|
|
1065
|
+
.md-nav-toggle:hover {
|
|
1066
|
+
background: var(--md-hover);
|
|
1067
|
+
color: var(--ink);
|
|
1068
|
+
}
|
|
1069
|
+
.md-nav-toggle:focus-visible,
|
|
1070
|
+
.md-nav-toggle:active {
|
|
1071
|
+
background: var(--md-pressed);
|
|
1072
|
+
color: var(--ink);
|
|
1073
|
+
}
|
|
1074
|
+
.md-nav-toggle > svg {
|
|
1075
|
+
transition: transform var(--motion-spatial-fast);
|
|
1076
|
+
}
|
|
1077
|
+
.md-nav-toggle[aria-expanded='true'] > svg {
|
|
1078
|
+
transform: rotate(180deg);
|
|
1079
|
+
}
|
|
1080
|
+
.md-nav-item[aria-current='page'],
|
|
1081
|
+
li:has(.menu-item[aria-current='page']) > .md-nav-item {
|
|
1082
|
+
background: var(--tint);
|
|
1083
|
+
color: var(--ink);
|
|
1084
|
+
}
|
|
1085
|
+
/* A menu (its variables above): a state layer with focus from the keyboard (the ripple when pressed), and the open page
|
|
1082
1086
|
in the secondary container also when pointed at. */
|
|
1083
|
-
.menu-item:focus-visible {
|
|
1084
|
-
|
|
1085
|
-
}
|
|
1086
|
-
.menu-item[aria-current='page']:hover {
|
|
1087
|
-
|
|
1088
|
-
}
|
|
1087
|
+
.menu-item:focus-visible {
|
|
1088
|
+
background: var(--md-pressed);
|
|
1089
|
+
}
|
|
1090
|
+
.menu-item[aria-current='page']:hover {
|
|
1091
|
+
background: var(--tint);
|
|
1092
|
+
}
|
|
1089
1093
|
|
|
1090
|
-
/* The extended FAB (its variables above, Header.astro): at the bottom right of the screen, with the ripple when pressed. It
|
|
1094
|
+
/* The extended FAB (its variables above, Header.astro): at the bottom right of the screen, with the ripple when pressed. It
|
|
1091
1095
|
shows only its icon while the page scrolls down (data-collapsed). */
|
|
1092
|
-
[data-fab] {
|
|
1093
|
-
position: fixed;
|
|
1094
|
-
right: max(1rem, env(safe-area-inset-right));
|
|
1095
|
-
bottom: max(1rem, env(safe-area-inset-bottom));
|
|
1096
|
-
z-index: 30;
|
|
1097
|
-
}
|
|
1098
|
-
@media (width >= theme(--breakpoint-medium)) {
|
|
1099
1096
|
[data-fab] {
|
|
1100
|
-
|
|
1101
|
-
|
|
1097
|
+
position: fixed;
|
|
1098
|
+
right: max(1rem, env(safe-area-inset-right));
|
|
1099
|
+
bottom: max(1rem, env(safe-area-inset-bottom));
|
|
1100
|
+
z-index: 30;
|
|
1101
|
+
}
|
|
1102
|
+
@media (width >= theme(--breakpoint-medium)) {
|
|
1103
|
+
[data-fab] {
|
|
1104
|
+
right: 1.5rem;
|
|
1105
|
+
bottom: 1.5rem;
|
|
1106
|
+
}
|
|
1102
1107
|
}
|
|
1103
1108
|
}
|
|
1104
1109
|
/* In the navigation drawer: at the top, in the secondary container, lowered (as in a Google app): M3's lowered FAB, at
|
|
@@ -1106,203 +1111,211 @@ li:has(.menu-item[aria-current='page']) > .md-nav-item {
|
|
|
1106
1111
|
.navigation-drawer > .extended-fab {
|
|
1107
1112
|
--fab-shadow: var(--elevation-1);
|
|
1108
1113
|
--fab-hover-shadow: var(--elevation-2);
|
|
1109
|
-
margin: 0.25rem 0 0.75rem 0.5rem;
|
|
1110
|
-
align-self: flex-start;
|
|
1111
1114
|
}
|
|
1112
|
-
|
|
1115
|
+
@layer fallback {
|
|
1116
|
+
.navigation-drawer > .extended-fab {
|
|
1117
|
+
margin: 0.25rem 0 0.75rem 0.5rem;
|
|
1118
|
+
align-self: flex-start;
|
|
1119
|
+
}
|
|
1120
|
+
/* On a phone with a bar at the bottom of the screen (a docked toolbar, components.css), the page's FAB is not shown; the
|
|
1113
1121
|
bar's buttons are the common buttons, round and as everywhere else (only pressed a little squarer), the filled one to
|
|
1114
1122
|
the right, after the outlined one or the text. */
|
|
1115
|
-
@media (width < theme(--breakpoint-medium)) {
|
|
1116
|
-
|
|
1117
|
-
|
|
1123
|
+
@media (width < theme(--breakpoint-medium)) {
|
|
1124
|
+
body:has(.theme-action-bar) [data-fab] {
|
|
1125
|
+
display: none;
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
:is(.theme-action-bar, .theme-action-bar-drawn) > .button-filled {
|
|
1129
|
+
order: 2;
|
|
1118
1130
|
}
|
|
1119
|
-
}
|
|
1120
|
-
:is(.theme-action-bar, .theme-action-bar-drawn) > .button-filled {
|
|
1121
|
-
order: 2;
|
|
1122
|
-
}
|
|
1123
1131
|
|
|
1124
|
-
/* The site's menu in the navigation drawer (its values are ui.css's, MobileMenu.tsx): its head. */
|
|
1125
|
-
.md-drawer-head {
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
}
|
|
1131
|
-
.md-drawer-name {
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
}
|
|
1137
|
-
.md-drawer-role {
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
}
|
|
1144
|
-
/* An item with sub-pages: its link and the caret in one row, the active indicator around both. */
|
|
1145
|
-
.navigation-drawer-row {
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
}
|
|
1149
|
-
.navigation-drawer-row > .navigation-drawer-item,
|
|
1150
|
-
.navigation-drawer-row > .navigation-drawer-item:hover,
|
|
1151
|
-
.navigation-drawer-row > .navigation-drawer-item:focus-visible,
|
|
1152
|
-
.navigation-drawer-row > .navigation-drawer-item:active {
|
|
1153
|
-
|
|
1154
|
-
}
|
|
1155
|
-
.navigation-drawer-row:has(> .navigation-drawer-item:hover) {
|
|
1156
|
-
|
|
1157
|
-
}
|
|
1158
|
-
.navigation-drawer-row:has(> .navigation-drawer-item:focus-visible) {
|
|
1159
|
-
|
|
1160
|
-
}
|
|
1161
|
-
.navigation-drawer-row[data-active] {
|
|
1162
|
-
|
|
1163
|
-
}
|
|
1164
|
-
.navigation-drawer-row[data-active] > .navigation-drawer-item {
|
|
1165
|
-
|
|
1166
|
-
}
|
|
1167
|
-
.navigation-drawer-row[data-active]:has(> .navigation-drawer-item:hover) {
|
|
1168
|
-
|
|
1169
|
-
}
|
|
1170
|
-
.navigation-drawer-row[data-active]:has(> .navigation-drawer-item:focus-visible) {
|
|
1171
|
-
|
|
1172
|
-
}
|
|
1173
|
-
.navigation-drawer-toggle {
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
}
|
|
1177
|
-
.navigation-drawer-toggle:focus-visible {
|
|
1178
|
-
|
|
1179
|
-
}
|
|
1180
|
-
/* Directly in the drawer ("Ring"), not in a row with a caret: as high as its content. */
|
|
1181
|
-
.navigation-drawer > .navigation-drawer-item {
|
|
1182
|
-
|
|
1183
|
-
}
|
|
1184
|
-
/* A sub-page: an item further in, its label in regular weight. */
|
|
1185
|
-
.navigation-drawer-subitem {
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
}
|
|
1195
|
-
.navigation-drawer-subitem:hover {
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
}
|
|
1199
|
-
.navigation-drawer-subitem:focus-visible {
|
|
1200
|
-
|
|
1201
|
-
}
|
|
1202
|
-
.navigation-drawer-subitem[data-active] {
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
}
|
|
1132
|
+
/* The site's menu in the navigation drawer (its values are ui.css's, MobileMenu.tsx): its head. */
|
|
1133
|
+
.md-drawer-head {
|
|
1134
|
+
display: flex;
|
|
1135
|
+
align-items: center;
|
|
1136
|
+
gap: 0.75rem;
|
|
1137
|
+
padding: 0.25rem 0 1rem 1rem;
|
|
1138
|
+
}
|
|
1139
|
+
.md-drawer-name {
|
|
1140
|
+
font-size: var(--type-title-medium-size);
|
|
1141
|
+
line-height: var(--type-title-medium-line-height);
|
|
1142
|
+
font-weight: var(--type-title-medium-weight);
|
|
1143
|
+
letter-spacing: var(--type-title-medium-tracking);
|
|
1144
|
+
}
|
|
1145
|
+
.md-drawer-role {
|
|
1146
|
+
color: var(--muted);
|
|
1147
|
+
font-size: var(--type-body-medium-size);
|
|
1148
|
+
line-height: var(--type-body-medium-line-height);
|
|
1149
|
+
font-weight: var(--type-body-medium-weight);
|
|
1150
|
+
letter-spacing: var(--type-body-medium-tracking);
|
|
1151
|
+
}
|
|
1152
|
+
/* An item with sub-pages: its link and the caret in one row, the active indicator around both. */
|
|
1153
|
+
.navigation-drawer-row {
|
|
1154
|
+
border-radius: var(--md-shape-full);
|
|
1155
|
+
transition: background-color var(--motion-effects);
|
|
1156
|
+
}
|
|
1157
|
+
.navigation-drawer-row > .navigation-drawer-item,
|
|
1158
|
+
.navigation-drawer-row > .navigation-drawer-item:hover,
|
|
1159
|
+
.navigation-drawer-row > .navigation-drawer-item:focus-visible,
|
|
1160
|
+
.navigation-drawer-row > .navigation-drawer-item:active {
|
|
1161
|
+
background: none;
|
|
1162
|
+
}
|
|
1163
|
+
.navigation-drawer-row:has(> .navigation-drawer-item:hover) {
|
|
1164
|
+
background: var(--md-hover);
|
|
1165
|
+
}
|
|
1166
|
+
.navigation-drawer-row:has(> .navigation-drawer-item:focus-visible) {
|
|
1167
|
+
background: var(--md-pressed);
|
|
1168
|
+
}
|
|
1169
|
+
.navigation-drawer-row[data-active] {
|
|
1170
|
+
background: var(--secondary-container);
|
|
1171
|
+
}
|
|
1172
|
+
.navigation-drawer-row[data-active] > .navigation-drawer-item {
|
|
1173
|
+
color: var(--on-secondary-container);
|
|
1174
|
+
}
|
|
1175
|
+
.navigation-drawer-row[data-active]:has(> .navigation-drawer-item:hover) {
|
|
1176
|
+
background: color-mix(in srgb, var(--on-secondary-container) 8%, var(--secondary-container));
|
|
1177
|
+
}
|
|
1178
|
+
.navigation-drawer-row[data-active]:has(> .navigation-drawer-item:focus-visible) {
|
|
1179
|
+
background: color-mix(in srgb, var(--on-secondary-container) 10%, var(--secondary-container));
|
|
1180
|
+
}
|
|
1181
|
+
.navigation-drawer-toggle {
|
|
1182
|
+
margin-right: 0.25rem;
|
|
1183
|
+
color: var(--muted);
|
|
1184
|
+
}
|
|
1185
|
+
.navigation-drawer-toggle:focus-visible {
|
|
1186
|
+
background: var(--md-pressed);
|
|
1187
|
+
}
|
|
1188
|
+
/* Directly in the drawer ("Ring"), not in a row with a caret: as high as its content. */
|
|
1189
|
+
.navigation-drawer > .navigation-drawer-item {
|
|
1190
|
+
flex: none;
|
|
1191
|
+
}
|
|
1192
|
+
/* A sub-page: an item further in, its label in regular weight. */
|
|
1193
|
+
.navigation-drawer-subitem {
|
|
1194
|
+
min-height: 3.5rem;
|
|
1195
|
+
gap: 0.75rem;
|
|
1196
|
+
margin-left: 0;
|
|
1197
|
+
border-left: 0;
|
|
1198
|
+
border-radius: var(--md-shape-full);
|
|
1199
|
+
padding: 0 1.5rem 0 2.25rem;
|
|
1200
|
+
color: var(--muted);
|
|
1201
|
+
transition: background-color var(--motion-effects);
|
|
1202
|
+
}
|
|
1203
|
+
.navigation-drawer-subitem:hover {
|
|
1204
|
+
background: var(--md-hover);
|
|
1205
|
+
color: var(--muted);
|
|
1206
|
+
}
|
|
1207
|
+
.navigation-drawer-subitem:focus-visible {
|
|
1208
|
+
background: var(--md-pressed);
|
|
1209
|
+
}
|
|
1210
|
+
.navigation-drawer-subitem[data-active] {
|
|
1211
|
+
background: var(--secondary-container);
|
|
1212
|
+
color: var(--on-secondary-container);
|
|
1213
|
+
font-weight: 400;
|
|
1214
|
+
}
|
|
1207
1215
|
|
|
1208
|
-
/* The footer: a surface container with extra-large corners at the top, a headline, lists with leading icons and a
|
|
1216
|
+
/* The footer: a surface container with extra-large corners at the top, a headline, lists with leading icons and a
|
|
1209
1217
|
state layer, and text buttons at the bottom. */
|
|
1210
|
-
.md-footer {
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
}
|
|
1215
|
-
.md-footer-name {
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
}
|
|
1222
|
-
.md-footer-text {
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
}
|
|
1231
|
-
.md-footer-heading,
|
|
1232
|
-
.md-footer-column > p {
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
}
|
|
1239
|
-
.md-footer-list,
|
|
1240
|
-
.md-footer-column > ul {
|
|
1241
|
-
|
|
1242
|
-
}
|
|
1243
|
-
.md-footer-item,
|
|
1244
|
-
.md-footer-column > ul a {
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
}
|
|
1258
|
-
.md-footer-item:hover,
|
|
1259
|
-
.md-footer-column > ul a:hover {
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
}
|
|
1263
|
-
.md-footer-item:focus-visible,
|
|
1264
|
-
.md-footer-item:active,
|
|
1265
|
-
.md-footer-column > ul a:focus-visible,
|
|
1266
|
-
.md-footer-column > ul a:active {
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
}
|
|
1270
|
-
.md-footer-column > ul > li {
|
|
1271
|
-
|
|
1272
|
-
}
|
|
1273
|
-
.md-footer-item > svg {
|
|
1274
|
-
|
|
1275
|
-
}
|
|
1276
|
-
.md-footer-column > a {
|
|
1277
|
-
|
|
1278
|
-
|
|
1218
|
+
.md-footer {
|
|
1219
|
+
margin-top: 6rem;
|
|
1220
|
+
border-radius: var(--md-shape-extra-large) var(--md-shape-extra-large) var(--md-shape-none) var(--md-shape-none);
|
|
1221
|
+
background: var(--md-surface-container);
|
|
1222
|
+
}
|
|
1223
|
+
.md-footer-name {
|
|
1224
|
+
margin-top: 0.75rem;
|
|
1225
|
+
font-size: var(--type-headline-small-size);
|
|
1226
|
+
line-height: var(--type-headline-small-line-height);
|
|
1227
|
+
font-weight: var(--type-headline-small-weight);
|
|
1228
|
+
letter-spacing: var(--type-headline-small-tracking);
|
|
1229
|
+
}
|
|
1230
|
+
.md-footer-text {
|
|
1231
|
+
margin-top: 0.5rem;
|
|
1232
|
+
max-width: 38ch;
|
|
1233
|
+
color: var(--muted);
|
|
1234
|
+
font-size: var(--type-body-medium-size);
|
|
1235
|
+
line-height: var(--type-body-medium-line-height);
|
|
1236
|
+
font-weight: var(--type-body-medium-weight);
|
|
1237
|
+
letter-spacing: var(--type-body-medium-tracking);
|
|
1238
|
+
}
|
|
1239
|
+
.md-footer-heading,
|
|
1240
|
+
.md-footer-column > p {
|
|
1241
|
+
color: var(--ink);
|
|
1242
|
+
font-size: var(--type-label-large-size);
|
|
1243
|
+
line-height: var(--type-label-large-line-height);
|
|
1244
|
+
font-weight: var(--type-label-large-weight);
|
|
1245
|
+
letter-spacing: var(--type-label-large-tracking);
|
|
1246
|
+
}
|
|
1247
|
+
.md-footer-list,
|
|
1248
|
+
.md-footer-column > ul {
|
|
1249
|
+
margin: 0.5rem -1rem 0;
|
|
1250
|
+
}
|
|
1251
|
+
.md-footer-item,
|
|
1252
|
+
.md-footer-column > ul a {
|
|
1253
|
+
display: flex;
|
|
1254
|
+
min-height: 3rem;
|
|
1255
|
+
align-items: center;
|
|
1256
|
+
gap: 1rem;
|
|
1257
|
+
border-radius: var(--md-shape-full);
|
|
1258
|
+
padding: 0.5rem 1rem;
|
|
1259
|
+
color: var(--muted);
|
|
1260
|
+
font-size: var(--type-body-medium-size);
|
|
1261
|
+
line-height: var(--type-body-medium-line-height);
|
|
1262
|
+
font-weight: var(--type-body-medium-weight);
|
|
1263
|
+
letter-spacing: var(--type-body-medium-tracking);
|
|
1264
|
+
transition: background-color var(--motion-effects);
|
|
1265
|
+
}
|
|
1266
|
+
.md-footer-item:hover,
|
|
1267
|
+
.md-footer-column > ul a:hover {
|
|
1268
|
+
background: var(--md-hover);
|
|
1269
|
+
color: var(--ink);
|
|
1270
|
+
}
|
|
1271
|
+
.md-footer-item:focus-visible,
|
|
1272
|
+
.md-footer-item:active,
|
|
1273
|
+
.md-footer-column > ul a:focus-visible,
|
|
1274
|
+
.md-footer-column > ul a:active {
|
|
1275
|
+
background: var(--md-pressed);
|
|
1276
|
+
color: var(--ink);
|
|
1277
|
+
}
|
|
1278
|
+
.md-footer-column > ul > li {
|
|
1279
|
+
margin-block: 0;
|
|
1280
|
+
}
|
|
1281
|
+
.md-footer-item > svg {
|
|
1282
|
+
flex-shrink: 0;
|
|
1283
|
+
}
|
|
1284
|
+
.md-footer-column > a {
|
|
1285
|
+
margin-top: 0.5rem;
|
|
1286
|
+
font-weight: 500;
|
|
1287
|
+
}
|
|
1279
1288
|
}
|
|
1280
1289
|
.md-footer-bottom {
|
|
1281
|
-
display: flex;
|
|
1282
|
-
flex-wrap: wrap;
|
|
1283
|
-
align-items: center;
|
|
1284
|
-
justify-content: space-between;
|
|
1285
|
-
gap: 0.5rem 1rem;
|
|
1286
|
-
border-top: 1px solid var(--line);
|
|
1287
|
-
padding-top: 1rem;
|
|
1288
|
-
color: var(--muted);
|
|
1289
|
-
font-size: var(--type-body-medium-size);
|
|
1290
|
-
line-height: var(--type-body-medium-line-height);
|
|
1291
|
-
font-weight: var(--type-body-medium-weight);
|
|
1292
|
-
letter-spacing: var(--type-body-medium-tracking);
|
|
1293
1290
|
/* Its text buttons (the cookie settings, light or dark) with an 18px icon. */
|
|
1294
1291
|
--button-icon-size: 1.125rem;
|
|
1295
1292
|
}
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1293
|
+
@layer fallback {
|
|
1294
|
+
.md-footer-bottom {
|
|
1295
|
+
display: flex;
|
|
1296
|
+
flex-wrap: wrap;
|
|
1297
|
+
align-items: center;
|
|
1298
|
+
justify-content: space-between;
|
|
1299
|
+
gap: 0.5rem 1rem;
|
|
1300
|
+
border-top: 1px solid var(--line);
|
|
1301
|
+
padding-top: 1rem;
|
|
1302
|
+
color: var(--muted);
|
|
1303
|
+
font-size: var(--type-body-medium-size);
|
|
1304
|
+
line-height: var(--type-body-medium-line-height);
|
|
1305
|
+
font-weight: var(--type-body-medium-weight);
|
|
1306
|
+
letter-spacing: var(--type-body-medium-tracking);
|
|
1304
1307
|
}
|
|
1305
|
-
|
|
1306
|
-
|
|
1308
|
+
.md-footer-bottom > div {
|
|
1309
|
+
margin-inline: -0.75rem;
|
|
1310
|
+
}
|
|
1311
|
+
/* Room under the footer's last line for the FAB, or for the bar at the bottom of the screen: in the footer instead of
|
|
1312
|
+
under the page (components.css), so the footer reaches the bar. */
|
|
1313
|
+
@media (width < theme(--breakpoint-medium)) {
|
|
1314
|
+
body:has(.theme-action-bar):has(.md-footer) {
|
|
1315
|
+
padding-bottom: 0;
|
|
1316
|
+
}
|
|
1317
|
+
body:has(.theme-action-bar, [data-fab]) .md-footer {
|
|
1318
|
+
padding-bottom: 5rem;
|
|
1319
|
+
}
|
|
1307
1320
|
}
|
|
1308
1321
|
}
|