137 lines
3.4 KiB
CSS
137 lines
3.4 KiB
CSS
@layer components {
|
|
/* Centered title with space for two buttons on either side */
|
|
.header {
|
|
--header-gap: 0.5ch;
|
|
--btn-icon-size: 1rem;
|
|
--header-btn-size: 2rem;
|
|
--header-button-count: 0;
|
|
--header-actions-width: calc((var(--header-btn-size) + var(--header-gap)) * var(--header-button-count));
|
|
|
|
display: grid;
|
|
grid-template-columns: var(--header-actions-width) 1fr var(--header-actions-width);
|
|
grid-template-areas:
|
|
"menu menu menu"
|
|
"actions-start title actions-end";
|
|
max-inline-size: 100dvw;
|
|
padding-block: calc(var(--block-space-half) + var(--custom-safe-inset-top)) var(--block-space-half);
|
|
padding-inline: var(--main-padding);
|
|
position: relative;
|
|
z-index: var(--z-nav);
|
|
|
|
/* Change the grid size depending on how many buttons are present */
|
|
&:has(.header__actions > *:nth-child(1)) { --header-button-count: 1; }
|
|
&:has(.header__actions > *:nth-child(2)) { --header-button-count: 2; }
|
|
&:has(.header__actions > *:nth-child(3)) { --header-button-count: 3; }
|
|
|
|
&:has(nav) {
|
|
row-gap: 0;
|
|
}
|
|
|
|
&:has(dialog[open]) {
|
|
z-index: var(--z-nav-open);
|
|
}
|
|
|
|
&:has(~ #main .card-columns) {
|
|
inline-size: 100dvw;
|
|
margin-inline: auto;
|
|
max-inline-size: var(--main-width);
|
|
}
|
|
|
|
nav {
|
|
grid-area: menu;
|
|
margin-inline: auto;
|
|
}
|
|
}
|
|
|
|
.header__actions {
|
|
display: flex;
|
|
font-size: var(--text-x-small);
|
|
gap: var(--header-gap);
|
|
inline-size: var(--header-actions-width);
|
|
}
|
|
|
|
.header__actions--start {
|
|
grid-area: actions-start;
|
|
margin-inline-end: auto;
|
|
}
|
|
|
|
.header__actions--end {
|
|
grid-area: actions-end;
|
|
justify-content: flex-end;
|
|
margin-inline-start: auto;
|
|
}
|
|
|
|
.header__title {
|
|
color: inherit;
|
|
font-size: var(--text-large);
|
|
font-weight: 900;
|
|
grid-area: title;
|
|
margin: 0 auto;
|
|
min-inline-size: 0;
|
|
text-align: center;
|
|
}
|
|
|
|
.header__skip-navigation {
|
|
--left-offset: -999em;
|
|
|
|
inset-block-start: 4rem;
|
|
inset-inline-start: var(--left-offset);
|
|
position: absolute;
|
|
white-space: nowrap;
|
|
z-index: 11;
|
|
|
|
&:focus {
|
|
--left-offset: var(--inline-space);
|
|
}
|
|
}
|
|
|
|
.header__logo {
|
|
color: var(--color-ink);
|
|
font-size: 1.2rem;
|
|
inline-size: auto;
|
|
margin-block-start: 0.1em;
|
|
|
|
span {
|
|
background: var(--color-ink-lightest);
|
|
block-size: auto;
|
|
border-radius: 0.3125em;
|
|
box-shadow:
|
|
0 0 0 1px oklch(var(--lch-ink-darkest) / 0.1),
|
|
0 0.1em 0.2em -0.1em oklch(var(--lch-ink-darkest) / 0.05),
|
|
0 0.2em 0.4em -0.2em oklch(var(--lch-ink-darkest) / 0.05),
|
|
0 0.3em 0.6em -0.3em oklch(var(--lch-ink-darkest) / 0.05)
|
|
;
|
|
display: grid;
|
|
height: 1.5em;
|
|
inline-size: 1.5em;
|
|
padding: 0.325em 0.275em 0.225em 0.275em;
|
|
place-content: center;
|
|
width: 1.5em;
|
|
}
|
|
|
|
svg {
|
|
height: 100%;
|
|
margin-inline-start: 0.4125em;
|
|
margin-inline-end: 0.5375em;
|
|
max-height: 0.8625em;
|
|
overflow: visible;
|
|
width: auto;
|
|
}
|
|
}
|
|
|
|
/* Optional class to stack header actions on small screens
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
.header--mobile-actions-stack {
|
|
@media (max-width: 639px) {
|
|
grid-template-areas:
|
|
"actions-start menu actions-end"
|
|
"title title title";
|
|
|
|
.header__title {
|
|
margin-block-start: 0.25rem;
|
|
}
|
|
}
|
|
}
|
|
}
|