# give/4.18.0/src/Campaigns/Blocks/shared/components/ModalForm/styles.scss

GiveWP – Donation Plugin and Fundraising Platform, version 4.18.0. 143 lines.

- Page: https://pluginprobe.com/plugins/give/4.18.0/code/src/Campaigns/Blocks/shared/components/ModalForm/styles.scss
- Raw: https://pluginprobe.com/plugins/give/4.18.0/raw/src/Campaigns/Blocks/shared/components/ModalForm/styles.scss
- Modified: 2026-09-23T17:56:52+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/give/4.18.0/code/src/Campaigns/Blocks/shared/components/ModalForm/styles.scss#L10-L20`.

```scss
.givewp-donation-form-modal {
    outline: none;
    width: 100%;
    padding: 1rem;
    overflow-y: scroll;

    /*
     * The zoom runs on the content, not on this element: the close button
     * inside is position: fixed, and a transformed ancestor would pin it to
     * the dialog for the length of the animation, then let it jump to the
     * viewport corner.
     */
    &[data-entering='true'] {
        animation: modal-fade 300ms;

        .givewp-donation-form-modal__dialog__content {
            animation: modal-zoom 600ms;
        }
    }

    @keyframes modal-fade {
        from {
            opacity: 0;
        }

        to {
            opacity: 1;
        }
    }

    @keyframes modal-zoom {
        from {
            transform: scale(0.8);
        }

        to {
            transform: scale(1);
        }
    }

    &__overlay {
        position: fixed;
        top: 0;
        left: 0;
        width: 100vw;
        height: 100dvh;
        background: rgba(0 0 0 / 0.7);
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        z-index: 100;

        &[data-loading='true'] {
            display: none;
        }

        &[data-entering='true'] {
            animation: modal-fade 300ms;
        }

        &[data-exiting='true'] {
            animation: modal-fade 150ms reverse ease-in;
        }
    }

    /*
     * While the form loads the launcher keeps its size and swaps the label
     * for a spinner. Drawn in CSS so the external embed, which has no
     * @wordpress/components, renders the same thing. `data-pending` is what
     * react-aria's Button sets from isPending; the embed sets it by hand.
     */
    &__open {
        position: relative;

        &[data-pending] &__label {
            visibility: hidden;
        }
    }

    &__open__spinner {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 100;
        line-height: 1;
        width: 16px;
        height: 16px;
        border-radius: 50%;
        border: 1.5px solid currentColor;
        border-right-color: transparent;
        animation: modal-spin 1.4s linear infinite;
    }

    @keyframes modal-spin {
        from {
            transform: translate(-50%, -50%) rotate(0deg);
        }

        to {
            transform: translate(-50%, -50%) rotate(360deg);
        }
    }

    &__close {
        display: flex;
        position: fixed;
        top: 25px;
        right: 25px;
        padding: 0.75rem;
        width: fit-content;
        background: #e7e8ed;
        cursor: pointer;
        border: 1px solid transparent;
        border-radius: 50%;
        z-index: 999;
        transition: 0.2s;

        svg {
            height: 1rem;
            width: 1rem;
        }

        &:hover,
        &:focus,
        &:active {
            border: 1px solid darken(#e7e8ed, 10%);
            background-color: darken(#e7e8ed, 10%);
        }
    }
}

// Account for admin bar
.admin-bar {
    .givewp-donation-form-modal {
        margin-top: 32px;
        &__close {
            top: calc(32px + 25px);
        }
    }
}

```
