@layer components { /* Trigger /* ------------------------------------------------------------------------ */ .nav__trigger { --input-background: var(--color-canvas); --input-border-color: transparent; --input-padding: 0.3em 2em 0.3em 0.75em; font-weight: 600; inline-size: auto; margin-block-start: 0.1em; ::-webkit-search-cancel-button { -webkit-appearance: none; } @media (any-hover: hover) { &:hover { filter: brightness(0.9); span { background: var(--color-ink-lighter); } @media (prefers-color-scheme: dark) { --input-background: var(--color-ink-lighter); } } } 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; } } /* Dialog /* ------------------------------------------------------------------------ */ .nav__menu.popup { --panel-border-color: var(--color-selected-dark); --panel-border-radius: 1.4em; --panel-padding: var(--block-space); --panel-size: 45ch; --popup-display: grid; --nav-section-gap: 2px; block-size: auto; box-shadow: 0 0 0 1px oklch(var(--lch-blue-medium) / 5%), 0 0.2em 0.2em oklch(var(--lch-blue-medium) / 5%), 0 0.4em 0.4em oklch(var(--lch-blue-medium) / 5%), 0 0.8em 0.8em oklch(var(--lch-blue-medium) / 5%); grid-template-rows: auto 1fr auto; gap: var(--nav-section-gap); max-block-size: calc(100vh - var(--block-space) - var(--footer-height)); overflow: hidden; padding-block-end: 0; scrollbar-gutter: stable both-edges; z-index: var(--z-nav); @media (max-height: 668px) { max-block-size: calc(100vh - var(--block-space)); } } .nav__scroll-container { display: flex; flex-direction: column; gap: var(--nav-section-gap); margin-inline: calc(-1 * var(--block-space)); /* space for scrollbar */ overflow: auto; padding-block-end: var(--nav-section-gap); padding-inline: var(--block-space); } .nav__close { @media (any-hover: hover) { display: none !important; } } .nav__header { --actions-width: 2rem; display: grid; grid-template-columns: var(--actions-width) 1fr var(--actions-width); grid-template-areas: "actions-start title actions-end"; justify-items: center; } .nav__header-actions { display: flex; font-size: var(--text-x-small); gap: var(--inline-space); inline-size: var(--actions-width); min-inline-size: fit-content; } .nav__header-actions--end { grid-area: actions-end; justify-content: flex-end; margin-inline-start: auto; } .nav__header-actions--start { grid-area: actions-start; margin-inline-end: auto; } .nav__header-title { color: inherit; grid-area: title; justify-content: center; margin: auto; min-inline-size: 0; text-align: center; } .nav__hotkeys { --gap: 8px; align-items: center; display: flex; flex-wrap: wrap; gap: var(--gap); inline-size: 100%; list-style: none; justify-content: center; margin: var(--block-space) auto calc(var(--block-space-half) / 2); max-inline-size: 100%; /* When all its children are hidden, hide this as well so it doesn't take up space */ &:has(.popup__item[hidden]):not(:has(.popup__item:not([hidden]))) { display: none; } .btn { --btn-border-radius: 0.4em; align-content: end; aspect-ratio: 5/3; background-color: var(--color-ink-lightest); border-radius: 0.5em; flex-basis: calc((100% - var(--gap) * 2) / 3); flex-direction: column; font-size: var(--text-small); line-height: 1; justify-content: center; overflow: hidden; position: relative; row-gap: 0.3lh; text-align: center; kbd { border: none; box-shadow: none; inset: 0.66em 0.33em auto auto; opacity: 0.5; position: absolute; @media (any-hover: none) { /* This is a reasonable way to assert touch devices. any-pointer would seem */ /* to be a better fit but it is incorrectly reported on many devices */ display: none; } } .icon { --icon-size: 2em !important; } span { display: flex; text-wrap: nowrap; } @media (max-width: 639px) { font-size: var(--text-x-small); font-weight: 500; } } } .nav__footer { background-color: var(--color-canvas); border-block-start: 1px solid var(--color-ink-lighter); font-size: var(--text-small); line-height: 1.6; margin-block-start: calc(-1 * var(--nav-section-gap)); padding: 1.5ch; text-align: center; z-index: 1; @media (max-height: 668px) { font-size: var(--text-x-small); } } }