Files
fizzy/app/assets/stylesheets/popup.css
T
2025-06-26 16:56:27 -05:00

193 lines
4.0 KiB
CSS

@layer components {
.popup {
--panel-border-radius: 0.5em;
--panel-padding: var(--block-space);
--panel-size: auto;
inset: 0 auto auto 50%;
max-block-size: 80vh;
min-inline-size: min(25ch, calc(100dvw - var(--block-space-double)));
max-inline-size: min(55ch, calc(100dvw - var(--block-space-double)));
overflow: auto;
position: absolute;
transform: translateX(-50%);
z-index: var(--z-popup);
&[open] {
display: flex;
}
&:has(.popup__footer) {
--panel-padding: var(--block-space) var(--block-space) 0 var(--block-space)
}
#header:has(&) {
max-inline-size: 100vw;
position: relative;
z-index: 5;
}
.card & {
min-inline-size: 25ch;
max-inline-size: 25ch;
}
}
.popup__footer {
background-color: var(--color-canvas);
border-block-start: 1px solid var(--color-ink-lighter);
font-size: var(--text-small);
inset: auto 0 0;
margin-inline: calc(var(--block-space) * -1);
padding: var(--block-space-half) var(--inline-space) var(--block-space);
position: sticky;
text-align: center;
z-index: 1;
}
.popup__group {
background: transparent;
border-radius: 0.3em;
max-inline-size: 100%;
padding-inline: var(--inline-space);
.btn {
--btn-background: transparent;
}
@media (any-hover: hover) {
&:hover {
--hover-size: 0;
background: var(--color-selected);
}
}
&[aria-selected] {
box-shadow: 0 0 0 var(--hover-size) var(--color-selected-dark) inset;
}
}
.popup__item {
--btn-background: transparent;
--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);
}
}
&[aria-selected] {
border-radius: 0.3em;
box-shadow: 0 0 0 var(--hover-size) var(--color-selected-dark) inset;
}
&:has(input:checked) {
--btn-background: transparent;
--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) {
--hover-size: 0;
--btn-background: var(--color-selected);
}
}
}
}
.popup__list {
display: flex;
flex-direction: column;
inline-size: 100%;
margin: 0;
max-inline-size: 100%;
padding: 0;
row-gap: 2px;
}
.popup__new {
--btn-icon-size: 1em;
padding-inline-start: var(--inline-space-half);
.icon {
margin-inline-end: 0.5em;
}
}
.popup__title {
font-weight: 800;
}
.popup__group-title {
font-size: var(--text-small);
margin-block: var(--block-space-half);
padding-inline: var(--inline-space);
text-transform: uppercase;
}
}
.popup--animated {
--backdrop-speed: 150ms;
--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;
}
}
}