@require "../../stylus/index.styl";

:root {
  --modal-radius: px(8);
  --modal-separator: transparent;
  --modal-bg: var(--dialog-bg, var(--s2-bg));
  --modal-speed: 400ms;
  --modal-blur: 2px;
  --modal-backdrop: rgba(0, 0, 0, 0.5);
}

/* .oui-modal-active {
  &, body {
    touch-action: none;
    overscroll-behavior: none;
    -webkit-overflow-scrolling: auto;
    overflow: hidden;
  }
} */
.oui-modal {
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  position: fixed;
  left: 0;
  right: 0;
  top: 0;
  height: var(--visible-height, 100%);
  z-index: -z-index-overlay;
  background: var(--modal-backdrop);
  cursor: default;
  will-change: transform;
  isolation: isolate;
  backdrop-filter: blur(var(--modal-blur));
  -webkit-backdrop-filter: blur(var(--modal-blur));

  // clip-path: rect(0 0 100% 100%);

  // Background overlay
  ._modal_overlay {
    display: flex;
    overflow: hidden;
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    top: 0;
  }

  ._modal_container {
    width: Min(52ch, 90vw);
  }

  &._modal_size_small ._modal_container {
    width: Min(36ch, 90vw);
  }

  &._modal_size_large ._modal_container {
    width: Min(80ch, 90vw);
    height: Min(px(800), 90vh);
  }

  ._modal_container {
    z-index: -z-index-modal;
    will-change: transform;
    opacity: 1;
    overflow: hidden;
    use: stack-y;
    position: relative;
    box-shadow: lg;
    background: var(--modal-bg);
    border: 1px solid var(--modal-separator);
    border-radius: var(--modal-radius);
    max-height: 75vh;
    transform: translate3d(0, 0, 0);

    modalSheet() {
      border: inherit;
      border-radius: inherit;
      position: absolute;
      top: 0;
      bottom: 0;
      max-height: inherit;
      width: 100%;
      height: initial;
      margin-top: 44;
      border-top-left-radius: var(--modal-radius);
      border-top-right-radius: var(--modal-radius);
      padding-bottom: -safe-bottom;

      .virtual-keyboard & {
        padding-bottom: 0;

        ._modal_footer {
          transition: border var(--modal-speed);
          --modal-separator: var(--t3-bg);
        }
      }
    }

    @media -media-mobile {
      :has(._modal_sheet) & {
        modalSheet();
      }
    }

    :has(._modal_force_sheet) & {
      modalSheet();
    }
  }

  ._modal_title {
    use: stack-y;
    font-weight: 600;
    padding-right: 40;
    padding-bottom: 16;
  }

  ._modal_header {
    use: stack-y;
    border-bottom: 1px solid var(--modal-separator, -gray-200);
    padding: 16;
    padding-bottom: 0;
    min-height: 48;
  }

  ._modal_close {
    position: absolute;
    top: 2;
    right: 2;
    background: transparent;
    border-radius: var(--modal-radius);
    // z-index: 99999;
    font-size: 16;
    cursor: unquote("pointer");
    color: inherit;
    padding: 12;
    border: none;
    appearance: none;

    &:hover {
      color: var(--primary-color);
    }
  }

  ._modal_footer {
    border-top: 1px solid var(--modal-separator, -gray-200);
    text-align: right;
    // white-space: nowrap;
    padding: 16;
  }

  ._modal_body {
    use: stack-item-grow;
    use: stack-item-scroll;
    margin: 0;
    min-height: 32;
    padding-y: 16;
    padding-x: 16;
    position: relative;
    display: block;
  }

  ._modal_header + ._modal_body {
    padding-top: 0;
  }

  &._modal_has_footer ._modal_body {
    // todo: 4px to allow focus ring to show up correctly
    padding-bottom: 4;
  }

  &-transition {
    &-enter-active, &-leave-active {
      transition-property: all;
      transition-duration: var(--modal-speed);
      transition-timing-function: ease;

      ._modal_container {
        transition-property: opacity transform;
        transition-duration: var(--modal-speed);
        transition-timing-function: ease;
      }
    }

    &-enter-active {
      animation: oui-blur-in var(--modal-speed);
    }

    &-leave-active {
      animation: oui-blur-out var(--modal-speed);
    }

    &-enter-from, &-leave-to {
      background-color: rgba(0, 0, 0, 0);

      ._modal_container {
        opacity: 0;
        transform: translate3d(0, 50%, 0);
      }
    }
  }
}

.oui-dialog {
  input {
    width: 100%;
  }
}

/* Let's define an animation: */
@keyframes oui-blur-in {
  from {
    backdrop-filter: blur(0px);
    -webkit-backdrop-filter: blur(0px);
    background-color: rgba(0, 0, 0, 0);
  }

  to {
    backdrop-filter: blur(var(--modal-blur));
    -webkit-backdrop-filter: blur(var(--modal-blur));
    background: var(--modal-backdrop);
  }
}

@keyframes oui-blur-out {
  from {
    backdrop-filter: blur(var(--modal-blur));
    -webkit-backdrop-filter: blur(var(--modal-blur));
    background: var(--modal-backdrop);
  }

  to {
    backdrop-filter: blur(0px);
    -webkit-backdrop-filter: blur(0px);
    background-color: rgba(0, 0, 0, 0);
  }
}