@oslokommune/punkt-css
Version:
CSS-rammeverket til Punkt, et designsystem laget av Oslo Origo
298 lines (287 loc) • 7.03 kB
CSS
/*
* Modal component
*/
.pkt-modal {
border: none;
padding: 0;
background-color: transparent;
opacity: 0;
display: none;
transition: translate 0.2s ease-in-out, opacity 0.2s ease-in-out, overlay 0.2s ease-in-out allow-discrete, display 0.2s ease-in-out allow-discrete;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
position: fixed;
}
.pkt-modal:focus {
outline: none;
}
.pkt-modal[open] {
display: block;
opacity: 1;
}
@starting-style {
.pkt-modal[open] {
opacity: 0;
}
}
.pkt-modal__wrapper {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: auto 1fr;
}
.pkt-modal__dialog {
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
translate: 0 10%;
}
.pkt-modal__dialog[open] {
translate: 0 0;
}
@starting-style {
.pkt-modal__dialog[open] {
translate: 0 -10%;
}
}
.pkt-modal__dialog .pkt-modal__wrapper {
max-height: 90vh;
max-height: 90svh;
}
@supports not (selector(::backdrop)) {
.pkt-modal__dialog {
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
.pkt-modal__drawer {
top: 0;
height: 100vh;
height: 100dvh;
max-height: 100vh;
max-height: 100dvh;
margin: 0;
overflow-y: auto;
}
.pkt-modal__drawer .pkt-modal__wrapper {
min-height: 100vh;
min-height: 100dvh;
}
.pkt-modal__drawer[open] {
translate: 0 0;
}
.pkt-modal__drawer--right {
left: auto;
right: 0;
margin-right: 0;
translate: 100% 0;
}
@starting-style {
.pkt-modal__drawer--right[open] {
translate: 100% 0;
}
}
.pkt-modal__drawer--left {
left: 0;
right: auto;
margin-left: 0;
translate: -100% 0;
}
@starting-style {
.pkt-modal__drawer--left[open] {
translate: -100% 0;
}
}
.pkt-modal::backdrop {
opacity: 0;
background-color: rgba(0, 0, 0, 0.55);
transition: opacity 0.2s ease-out, overlay 0.2s ease-out allow-discrete, display 0.2s allow-discrete;
}
.pkt-modal[open]::backdrop {
opacity: 1;
}
@starting-style {
.pkt-modal[open]::backdrop {
opacity: 0;
}
}
@supports not (selector(::backdrop)) {
.pkt-modal {
position: fixed;
}
.pkt-modal + .backdrop {
background-color: rgba(0, 0, 0, 0.55);
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
}
}
.pkt-modal .pkt-modal__container {
padding-top: 2rem;
background: var(--pkt-color-background-default);
overflow-y: auto;
}
.pkt-modal .pkt-modal__header {
display: grid;
grid-template-columns: 1fr 4rem;
grid-template-rows: 4rem 1fr;
grid-template-areas: "header close" "header empty";
justify-content: flex-start;
width: 100%;
}
.pkt-modal .pkt-modal__header-background {
background: var(--pkt-color-background-default);
grid-area: empty;
}
.pkt-modal .pkt-modal__headingText {
background: var(--pkt-color-background-default);
grid-area: header;
padding: 2rem 0 0 2.5rem;
margin: 0;
color: var(--pkt-color-text-body-default);
}
.pkt-modal .pkt-modal__closeButton {
grid-area: close;
display: flex;
flex-direction: row-reverse;
align-self: flex-start;
}
.pkt-modal .pkt-modal__noCloseButton {
background: var(--pkt-color-background-default);
grid-area: close;
}
.pkt-modal .pkt-modal__closeButton--blue {
height: 100%;
background: var(--pkt-color-background-default);
}
.pkt-modal .pkt-modal__closeButton--blue .pkt-btn {
margin: 0.25rem;
}
.pkt-modal .pkt-modal__closeButton--yellow-filled .pkt-btn {
height: 4rem;
width: 4rem;
justify-content: center;
align-items: center;
border: none;
border-radius: 50%;
color: var(--pkt-color-surface-strong-dark-blue);
background-color: var(--pkt-color-brand-yellow-1000);
border: 4px solid var(--pkt-color-brand-yellow-1000);
outline: 0;
}
.pkt-modal .pkt-modal__closeButton--yellow-filled .pkt-btn:hover, .pkt-modal .pkt-modal__closeButton--yellow-filled .pkt-btn:focus {
background-color: var(--pkt-color-brand-warm-blue-1000);
border-color: var(--pkt-color-brand-warm-blue-1000);
color: var(--pkt-color-background-default);
}
.pkt-modal .pkt-modal__closeButton--yellow-filled .pkt-btn:hover .pkt-icon, .pkt-modal .pkt-modal__closeButton--yellow-filled .pkt-btn:focus .pkt-icon {
color: var(--pkt-color-background-default);
}
.pkt-modal .pkt-modal__closeButton--yellow-filled .pkt-btn:focus-visible {
outline: 0;
border-color: var(--pkt-color-border-states-focus);
}
.pkt-modal .pkt-modal__closeButton--yellow-filled .pkt-btn .pkt-btn__icon {
width: 2rem;
height: 2rem;
}
.pkt-modal .pkt-modal__content {
display: flex;
flex-direction: column;
flex-grow: 1;
gap: 1rem;
overflow-y: auto;
padding: 2rem 2.5rem;
padding-top: 0;
position: relative;
color: var(--pkt-color-text-body-default);
background: linear-gradient(var(--pkt-color-white) 30%, transparent) top, linear-gradient(transparent, var(--pkt-color-border-subtle) 60%) bottom, radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.3), transparent) top, radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.3), transparent) bottom;
background-attachment: local, local, scroll, scroll;
background-repeat: no-repeat;
background-size: 100% 40px, 100% 50px, 100% 16px, 100% 16px;
}
body.pkt-modal--open {
overflow: hidden;
scrollbar-gutter: stable;
}
.pkt-modal--small {
width: 480px;
}
.pkt-modal--medium {
width: 36rem;
}
.pkt-modal--large {
width: 640px;
}
.pkt-modal__btn-wrapper {
padding-top: 1.5rem;
display: flex;
justify-content: flex-start;
gap: 1rem;
flex-wrap: wrap;
width: 100%;
}
@media screen and (max-width: 640px) {
.pkt-modal[open] {
line-height: 1.5rem;
}
.pkt-modal[open] .pkt-modal__headingText {
font-size: 1.375rem;
}
.pkt-modal[open] .pkt-modal__content {
letter-spacing: -0.2px;
font-size: 1rem;
}
.pkt-modal--large {
width: 100vw;
}
}
@media screen and (max-width: 480px) {
.pkt-modal--small {
width: 100vw;
}
}
@media screen and (max-width: 36rem) {
.pkt-modal--medium {
width: 100vw;
}
}
@media screen and (max-width: 480px) {
.pkt-modal__btn-wrapper {
display: grid;
grid-template-columns: 1fr;
justify-content: center;
align-items: center;
}
.pkt-modal__btn-wrapper .pkt-btn {
justify-content: center;
}
}
.pkt-modal--noShadow {
box-shadow: none;
}
.pkt-modal--transparentBackdrop::backdrop, .pkt-modal--transparentBackdrop[open]::backdrop {
background-color: transparent;
}
@supports not (selector(::backdrop)) {
.pkt-modal--transparentBackdrop + .backdrop {
background-color: transparent;
}
}
.pkt-modal.pkt-modal--removePadding .pkt-modal__headingText,
.pkt-modal.pkt-modal--removePadding .pkt-modal__content,
.pkt-modal.pkt-modal--removePadding .pkt-modal__container {
padding: 0;
}
.pkt-modal.pkt-modal--noHeadingText .pkt-modal__container {
padding-top: 1rem;
}
.pkt-modal .pkt-modal__container .pkt-modal__btn-wrapper button.pkt-btn:not(.pkt-inputwrapper__helptext-expandable > .pkt-btn):not(.pkt-header__user-btn):not(.pkt-searchinput__button) {
margin: 0;
}
._dialog_overlay {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
}