193 lines
4.0 KiB
CSS
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;
|
|
}
|
|
}
|
|
}
|