@import '~app/components/ui/colors.scss';
@import '~app/components/ui/fonts.scss';

$popupPadding: 20px; // Default content padding
$popupMargin: 20px; // Outer popup margins

@mixin popupBounding($width, $padding: null) {
    @if ($padding == null) {
        $padding: $popupMargin;
    }

    @if ($padding != $popupMargin) {
        margin: $padding auto;
        padding: 0 $padding;
    }

    max-width: $width;
}

.overlay {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;

    z-index: 200;

    background: rgba(#fff, 0.8);

    text-align: center;
    white-space: nowrap;

    overflow-x: hidden;
    overflow-y: auto;

    perspective: 600px;

    &:before {
        content: '';
        display: inline-block;
        vertical-align: middle;
        height: 100%;
        width: 0;
    }
}

.popupWrapper {
    box-sizing: border-box;
    margin: 0 auto;
    padding: $popupMargin;

    display: inline-block;
    width: 100%;
    vertical-align: middle;

    transition: max-width 0.3s;
}

.popup {
    white-space: normal;
    text-align: start;

    background: #fff;
    box-shadow: 0 0 10px rgba(#000, 0.2);

    color: #666;

    :invalid {
        button {
            opacity: 0.3;
            pointer-events: none;
        }
    }
}

.header {
    position: relative;
    background: $white;
    padding: 15px $popupPadding;
    border-bottom: 1px solid #dedede;
}

.headerTitle {
    font-size: 20px;
    font-family: $font-family-title;
    text-align: center;
}

.body {

}

.close {
    composes: close from '~app/components/ui/icons.scss';

    position: absolute;
    inset-inline-end: 0;
    top: 0;
    padding: 15px;
    cursor: pointer;
    font-size: 20px;
    color: rgba(#000, 0.4);
    background: rgba(#000, 0);
    transition: 0.25s;
    transform: translateX(0);

    &:hover {
        color: rgba(#000, 0.6);
        background: rgba(#fff, 0.75);
    }

    @media (min-width: 655px) {
        position: fixed;
        padding: 35px;
    }

    .trEnter &,
    .trExit & {
        // don't show the close during transition, because transform forces "position: fixed"
        // to layout relative container, instead of body
        opacity: 0;
        transform: translate(100%);
        transition: 0s;

        html[dir='rtl'] & {
            transform: translate(-100%);
        }
    }
}

/**
 * Transition states
 */
$popupInitPosition: translateY(10%) rotateX(-8deg);

.trEnter {
    opacity: 0;

    .popup {
        opacity: 0;
        transform: $popupInitPosition;
    }

    &Active {
        opacity: 1;
        transition: opacity 0.2s ease-in;

        .popup {
            opacity: 1;
            transform: translateY(0) rotateX(0deg);
            transition: 0.3s cubic-bezier(0.23, 1, 0.32, 1); // easeOutQuint
        }
    }
}

.trExit {
    opacity: 1;
    overflow: hidden;

    .popup {
        opacity: 1;
        transform: translateY(0);
    }

    &Active {
        opacity: 0;
        transition: opacity 0.2s ease-in;

        .popup {
            opacity: 0;
            transform: $popupInitPosition;
            transition: 0.3s cubic-bezier(0.165, 0.84, 0.44, 1); // easeOutQuart
        }
    }
}
