/* Animations */
@keyframes scale {
from {
transform: scale(0.95);
}
to {
transform: scale(1);
}
}
@keyframes floatUp {
from {
transform: translateY(15%);
}
to {
transform: translateY(0%);
}
}
@keyframes floatDown {
from {
transform: translateY(-15%);
}
to {
transform: translateY(0%);
}
}
@keyframes fade {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* Modal */
.dialog.modal {
margin: auto;
margin-top: 4rem;
&[open] {
animation: /* easeOutQuint */
scale 100ms cubic-bezier(0.22, 1, 0.36, 1),
fade 100ms cubic-bezier(0.22, 1, 0.36, 1);
&::backdrop {
animation: fade 150ms cubic-bezier(0.22, 1, 0.36, 1);
}
}
}
/* Anchored */
.dialog.anchored {
position: absolute;
margin: 0;
&[open] {
animation: /* easeOutQuint */
scale 100ms cubic-bezier(0.22, 1, 0.36, 1),
fade 100ms cubic-bezier(0.22, 1, 0.36, 1);
}
&.top-start {
transform-origin: bottom left;
}
&.top-end {
transform-origin: bottom right;
}
&.right-start {
transform-origin: left top;
}
&.right-end {
transform-origin: left bottom;
}
&.bottom-start {
transform-origin: top left;
}
&.bottom-end {
transform-origin: top right;
}
&.left-start {
transform-origin: right top;
}
&.left-end {
transform-origin: right bottom;
}
}
/* Unanchored */
.dialog[open].unanchored {
&.unanchored-bottom-left,
&.unanchored-bottom-right {
animation: /* easeOutQuint */
floatUp 300ms cubic-bezier(0.22, 1, 0.36, 1),
fade 300ms cubic-bezier(0.22, 1, 0.36, 1);
}
&.unanchored-top-left,
&.unanchored-top-right {
animation: /* easeOutQuint */
floatDown 300ms cubic-bezier(0.22, 1, 0.36, 1),
fade 300ms cubic-bezier(0.22, 1, 0.36, 1);
}
}
.dialog .arrow {
position: absolute;
width: 8px;
height: 8px;
transform: rotate(45deg);
}
.dialog-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 1px;
border-bottom: 1px solid var(--border-color);
padding: 3px 12px;
}
.dialog-content {
position: relative;
padding: 7px 12px;
}