mirror of
https://github.com/pocketbase/pocketbase.git
synced 2026-09-09 16:10:47 +02:00
309 lines
7.7 KiB
CSS
309 lines
7.7 KiB
CSS
.modal {
|
|
position: fixed;
|
|
z-index: 1000;
|
|
display: none;
|
|
flex-direction: column;
|
|
width: 620px;
|
|
max-width: 100%;
|
|
height: 100%;
|
|
border: 0;
|
|
outline: 0;
|
|
margin: 0;
|
|
top: 0;
|
|
right: 0;
|
|
opacity: 0;
|
|
word-break: break-word;
|
|
color: var(--surfaceTxtColor);
|
|
background: var(--surfaceColor);
|
|
transform: translateX(30px);
|
|
backface-visibility: hidden;
|
|
transition-property: opacity, transform, width, display;
|
|
transition-duration: var(--modalAnimationSpeed);
|
|
transition-behavior: allow-discrete;
|
|
box-shadow: var(--leftBoxShadow);
|
|
overscroll-behavior: none;
|
|
|
|
&[data-modal-state="open"] {
|
|
display: flex;
|
|
opacity: 1;
|
|
transform: translateX(0);
|
|
@starting-style {
|
|
opacity: 0;
|
|
transform: translateX(30px);
|
|
}
|
|
}
|
|
|
|
/* overlays */
|
|
&::before {
|
|
content: "";
|
|
display: block;
|
|
position: fixed;
|
|
z-index: -2;
|
|
left: -100vw;
|
|
top: -100vh;
|
|
width: 200vw;
|
|
height: 200vh;
|
|
background: var(--modalOverlayColor);
|
|
}
|
|
&::after {
|
|
content: "";
|
|
display: block;
|
|
position: absolute;
|
|
z-index: -1;
|
|
left: 0;
|
|
top: 0;
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: inherit;
|
|
background: inherit;
|
|
}
|
|
|
|
.modal-header,
|
|
.modal-content,
|
|
.modal-footer {
|
|
outline: 0;
|
|
padding: var(--spacing);
|
|
}
|
|
.modal-header,
|
|
.modal-footer {
|
|
display: flex;
|
|
align-items: center;
|
|
width: 100%;
|
|
gap: var(--smSpacing);
|
|
padding-top: calc(var(--spacing) - 10px);
|
|
padding-bottom: calc(var(--spacing) - 10px);
|
|
}
|
|
.modal-footer {
|
|
margin-top: auto;
|
|
border-top: 1px solid var(--surfaceAlt2Color);
|
|
}
|
|
.modal-content {
|
|
position: relative;
|
|
flex-grow: 1;
|
|
overflow: auto;
|
|
scrollbar-width: thin;
|
|
> :first-child {
|
|
margin-top: 0;
|
|
}
|
|
> :last-child {
|
|
margin-bottom: 0;
|
|
}
|
|
}
|
|
.modal-header .modal-close-btn.transparent {
|
|
margin-right: -10px; /* visually align */
|
|
}
|
|
.modal-header:not(.isolated) ~ .modal-content {
|
|
padding-top: 5px;
|
|
}
|
|
.modal-header.isolated {
|
|
background: var(--surfaceAlt1Color);
|
|
border-bottom: 1px solid var(--surfaceAlt2Color);
|
|
border-top-left-radius: inherit;
|
|
border-top-right-radius: inherit;
|
|
}
|
|
.modal-title {
|
|
align-content: center;
|
|
}
|
|
|
|
/* sizes */
|
|
&.sm {
|
|
width: 480px;
|
|
}
|
|
&.lg {
|
|
width: 880px;
|
|
}
|
|
&.full {
|
|
width: 100%;
|
|
}
|
|
|
|
&.preview,
|
|
&.popup {
|
|
left: 0;
|
|
right: 0;
|
|
top: 0;
|
|
bottom: 0;
|
|
margin: auto;
|
|
height: min-content;
|
|
max-width: 95%;
|
|
max-height: 95%;
|
|
box-shadow: var(--boxShadow);
|
|
border-radius: var(--lgBorderRadius);
|
|
transform: scale(0.98);
|
|
|
|
&.full {
|
|
width: 95%;
|
|
}
|
|
|
|
.modal-header,
|
|
.modal-content,
|
|
.modal-footer {
|
|
border-radius: inherit;
|
|
}
|
|
.modal-header,
|
|
.modal-footer {
|
|
padding-top: calc(var(--spacing) - 5px);
|
|
padding-bottom: calc(var(--spacing) - 5px);
|
|
}
|
|
.modal-header:has(~ .modal-content),
|
|
.modal-header:has(~ .modal-footer),
|
|
.modal-content:has(~ .modal-footer) {
|
|
border-bottom-left-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
}
|
|
.modal-header ~ .modal-content,
|
|
.modal-content ~ .modal-footer,
|
|
.modal-header ~ .modal-footer {
|
|
border-top-left-radius: 0;
|
|
border-top-right-radius: 0;
|
|
}
|
|
.modal-footer {
|
|
background: var(--surfaceAlt1Color);
|
|
}
|
|
|
|
&[data-modal-state="open"] {
|
|
transform: scale(1);
|
|
@starting-style {
|
|
transform: scale(0.98);
|
|
}
|
|
}
|
|
}
|
|
&.preview {
|
|
width: min-content;
|
|
min-width: 400px;
|
|
min-height: 300px;
|
|
.modal-footer {
|
|
padding: var(--smSpacing);
|
|
}
|
|
.modal-content {
|
|
display: flex;
|
|
text-align: center;
|
|
align-items: flex-start;
|
|
justify-content: center;
|
|
padding: 0;
|
|
margin: auto;
|
|
width: 100%;
|
|
max-width: 100%;
|
|
&:has(img) {
|
|
width: max-content;
|
|
}
|
|
&::before,
|
|
&::after {
|
|
content: none;
|
|
}
|
|
img {
|
|
width: 100%;
|
|
margin: auto;
|
|
}
|
|
object {
|
|
width: 100%;
|
|
height: 100%;
|
|
margin: auto;
|
|
}
|
|
}
|
|
|
|
/* non-image preview */
|
|
&:has(object) {
|
|
width: 75%;
|
|
height: 85%;
|
|
@media (max-width: 900px) {
|
|
width: 90%;
|
|
height: 90%;
|
|
}
|
|
}
|
|
&.preview-audio {
|
|
width: 500px;
|
|
height: 400px;
|
|
}
|
|
}
|
|
}
|
|
|
|
/* tinymce fullscreen preview */
|
|
.tox-fullscreen .modal {
|
|
width: 100% !important;
|
|
transition: none;
|
|
}
|
|
|
|
/* content scroll shadows */
|
|
.modal-content {
|
|
--topShadowOffset: calc(var(--spacing) + 1px);
|
|
--bottomShadowOffset: calc(var(--spacing) + 1px);
|
|
min-height: 92px; /* ensure that the content is large enough for the negative shadow margins */
|
|
container-type: scroll-state;
|
|
&::before,
|
|
&::after {
|
|
content: "";
|
|
position: sticky;
|
|
display: block;
|
|
left: 0;
|
|
z-index: 9;
|
|
width: auto;
|
|
height: 1px;
|
|
margin-left: calc(-1 * var(--spacing));
|
|
margin-right: calc(-1 * var(--spacing));
|
|
pointer-events: none;
|
|
opacity: 0;
|
|
}
|
|
&::before {
|
|
top: calc(100% + var(--bottomShadowOffset));
|
|
margin-bottom: calc(-1 * var(--bottomShadowOffset));
|
|
margin-top: var(--bottomShadowOffset);
|
|
box-shadow: var(--bottomScrollShadow);
|
|
@container scroll-state(scrollable: bottom) {
|
|
opacity: 1;
|
|
transition: opacity var(--animationSpeed);
|
|
}
|
|
}
|
|
&::after {
|
|
top: auto;
|
|
bottom: calc(100% + var(--topShadowOffset));
|
|
margin-top: calc(-1 * var(--topShadowOffset));
|
|
margin-bottom: var(--topShadowOffset);
|
|
box-shadow: var(--topScrollShadow);
|
|
@container scroll-state(scrollable: top) {
|
|
opacity: 1;
|
|
transition: opacity var(--animationSpeed);
|
|
}
|
|
}
|
|
.modal-header:not(.isolated) ~ &::after {
|
|
--topShadowOffset: 6px;
|
|
}
|
|
}
|
|
|
|
.modal-header .tabs-header {
|
|
width: auto;
|
|
flex-grow: 1;
|
|
|
|
.tab-item {
|
|
font-size: var(--lgFontSize);
|
|
}
|
|
|
|
/* "merge" with the header bottom */
|
|
.modal-header.isolated &:last-child {
|
|
padding: 0 var(--spacing);
|
|
border-bottom: 0;
|
|
margin-left: calc(-1 * var(--spacing));
|
|
margin-right: calc(-1 * var(--spacing));
|
|
margin-bottom: calc(-1 * var(--spacing) + 9px);
|
|
.tab-item {
|
|
border: 1px solid transparent;
|
|
border-bottom: 0;
|
|
border-bottom-left-radius: 0;
|
|
border-bottom-right-radius: 0;
|
|
&:hover,
|
|
&:focus-visible {
|
|
background: var(--surfaceAlt2Color);
|
|
}
|
|
&:active {
|
|
background: var(--surfaceAlt3Color);
|
|
}
|
|
&.active {
|
|
background: var(--surfaceColor);
|
|
border-color: var(--surfaceAlt2Color);
|
|
}
|
|
}
|
|
}
|
|
.popup .modal-header.isolated &:last-child {
|
|
margin-bottom: calc(-1 * var(--spacing) + 4px);
|
|
}
|
|
}
|