shelving
Version:
Toolkit for using data in JavaScript.
69 lines (60 loc) • 2.4 kB
CSS
@import "../style/base.css";
@layer components {
.menu {
/* Box (list reset + layout) */
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: var(--menu-gap, var(--space-xxsmall));
/* Typography */
font-family: var(--menu-font, var(--font-body));
font-size: var(--menu-size, var(--size-normal));
line-height: var(--menu-leading, var(--leading-normal));
color: var(--menu-color-text, var(--color-black));
}
.item {
margin: 0;
}
.link {
/* Box */
display: block;
padding-block: var(--menu-link-padding, var(--space-xxsmall));
padding-inline: var(--menu-link-padding, var(--space-xsmall));
border-radius: var(--menu-link-radius, var(--radius-xxsmall));
/* Style */
color: inherit;
text-decoration: none;
transition: all 120ms ease-in-out;
/* Pseudo-classes */
&:hover,
&:focus:not(:focus-visible) {
background: var(--menu-link-color-hover-bg, color-mix(in oklch, var(--color-light) 60%, transparent));
color: var(--menu-link-color-hover-text, var(--color-black));
}
&:focus-visible {
outline: var(--menu-link-focus-border, var(--stroke-focus)) solid var(--menu-link-color-focus, var(--color-focus));
outline-offset: 1px;
}
&[aria-current="page"] {
background: var(--menu-link-color-active-bg, var(--color-white));
color: var(--menu-link-color-active-text, var(--color-black));
font-weight: var(--menu-link-active-weight, var(--weight-strong));
}
}
/* "Proud" item — an ancestor of the active page; emphasised with a strong weight, and reveals its nested children. */
/* The active page is excluded so its own `[aria-current]` styling wins instead of the proud styling. */
.proud > .link:not([aria-current="page"]) {
color: var(--menu-link-color-proud, var(--color-black));
font-weight: var(--menu-link-proud-weight, var(--weight-strong));
}
/* Submenu — Blockquote-style left border to signal hierarchy. */
.menu .menu {
margin-block: var(--menu-nested-spacing, var(--space-xxsmall));
/* Inset the border by the link's inline padding so it lines up with the parent item's label. */
margin-inline-start: var(--menu-link-padding, var(--space-xsmall));
border-inline-start: var(--menu-nested-border, var(--stroke-focus)) solid var(--menu-nested-color-border, var(--color-vivid));
padding-inline-start: var(--menu-nested-indent, var(--space-xsmall));
}
}