@layer components { .popup { --panel-border-radius: 0.5em; --panel-padding: var(--block-space); --panel-size: auto; inline-size: auto; inset: 0 auto auto 50%; min-inline-size: min(25ch, 90vw); max-inline-size: min(50ch, 90vw); position: absolute; transform: translateX(-50%); z-index: 2; &[open] { display: flex; } #header:has(&) { max-inline-size: 100%; position: relative; z-index: 5; .popup { min-inline-size: 40ch; max-inline-size: 40ch; } } } .popup__group { background: var(--color-ink-lightest); max-inline-size: 100%; padding-inline: var(--inline-space); .btn { --btn-background: transparent; } @media (any-hover: hover) { &:hover { background: var(--color-selected); } } &:has(:focus-visible) { background: var(--color-selected-dark); .popup__item { --outline-size: 0; } } } .popup__item { --btn-background: var(--color-ink-lightest); --btn-border-radius: 0.3em; --btn-border-size: 0; --btn-font-weight: 500; --btn-padding: var(--inline-space-half) 0 var(--inline-space-half) var(--inline-space); --hover-size: 0; --outline-color: transparent; flex: 1 1 auto; justify-content: start; max-inline-size: 100%; text-align: start; @media (any-hover: hover) { &:where(:not(:active):hover) { --btn-background: var(--color-selected); } } &:has(input:checked) { --btn-background: var(--color-selected); --btn-color: var(--color-ink); img { filter: invert(0); &.checked { display: block; } } @media (prefers-color-scheme: dark) { img { filter: invert(1); } } @media (any-hover: hover) { &:where(:not(:active):hover) { --btn-background: var(--color-selected); } } } img.checked { block-size: 1em; inline-size: 1em; } } .popup__list { max-block-size: 40dvh; overflow: auto; row-gap: 2px; } .popup__new { --btn-icon-size: 1em; .icon { margin-inline-end: 0.5em; } padding-inline-start: var(--inline-space-half); } .popup__title { font-weight: 800; } } .popup--animated { --backdrop-speed: 150ms; --panel-size: max-content; --speed: 150ms; opacity: 0; transform: scale(0.2) translateX(-50%); transform-origin: top left; transition: display var(--speed) allow-discrete, opacity var(--speed), overlay var(--speed) allow-discrete, transform var(--speed); &::backdrop { background-color: var(--color-always-black); opacity: 0; transform: scale(1); transition: display var(--backdrop-speed) allow-discrete, opacity var(--backdrop-speed), overlay var(--backdrop-speed) allow-discrete; } &[open] { opacity: 1; transform: scale(1) translateX(-50%); &::backdrop { opacity: 0.5; } } @starting-style { &[open] { opacity: 0; transform: scale(0.2) translateX(-50%); } &[open]::backdrop { opacity: 0; } } }