Files
fizzy/app/assets/stylesheets/popup.css
T
2025-05-13 15:48:11 -05:00

166 lines
3.2 KiB
CSS

@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: var(--z-popup);
&[open] {
display: flex;
}
#header:has(&) {
max-inline-size: 100vw;
position: relative;
z-index: 5;
.popup {
min-inline-size: 40ch;
max-inline-size: 40ch;
}
}
.card & {
min-inline-size: 25ch;
max-inline-size: 25ch;
}
}
.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-ink-lightest);
--btn-color: var(--color-ink);
.icon {
&.checked {
block-size: 1em;
display: block;
inline-size: 1em;
margin-inline-end: var(--inline-space);
}
}
@media (any-hover: hover) {
&:where(:not(:active):hover) {
--btn-background: var(--color-selected);
}
}
}
}
.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;
}
}
}