// Copyright (C) 2019 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

@import "widgets/theme";

// The opacity changes are only transitional. Once the `modalFadeOut` animation
// reaches the end, the Mithril component that renders .modal-backdrop
// (and .modal-dialog) is fully destroyed and removed from the DOM.
// We use keyframes+animation, rather than transition, because the former allow
// hooking the onanimationend events to synchronize the Mithril removal with
// the end of the CSS animation.
@keyframes modalFadeOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}

@keyframes modalFadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.modal-backdrop {
  position: absolute;
  z-index: 99;
  background-color: rgba(0, 0, 0, 0.6);
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  backdrop-filter: blur(2px);
  animation: modalFadeIn 0.25s var(--anim-easing);
  animation-fill-mode: both;

  &.modal-fadeout {
    animation: modalFadeOut 0.25s var(--anim-easing);
    animation-fill-mode: both;
  }
}

.modal-dialog {
  position: absolute;
  z-index: 100;
  background-color: #fff;
  margin: auto;
  min-width: 25vw;
  min-height: 10vh;
  padding: 30px;
  max-width: 90vw;
  max-height: 90vh;
  border-radius: $pf-border-radius;
  overflow-y: auto;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-family: Roboto, sans-serif;
  font-weight: 300;

  &.modal-dialog-valign-top {
    top: 1rem;
    transform: translate(-50%, 0);
  }

  > header {
    display: flex;
    justify-content: space-between;
    align-items: center;

    h2 {
      margin-top: 0;
      margin-bottom: 0;
      font-family: "Roboto", sans-serif;
      font-weight: 600;
      font-size: 1.25rem;
      line-height: 1.25;
      color: #262f3c;
      box-sizing: border-box;
    }

    button {
      background: transparent;
      border: 0;
    }
  } // header

  main {
    font-size: 1rem;
    margin-top: 2rem;
    margin-bottom: 2rem;
    line-height: 1.5;
    color: rgba(0, 0, 0, 0.8);

    .small-font {
      font-size: 0.9rem;
    }
  }

  footer {
    display: flex;
    justify-content: space-around;
  } // footer

  .modal-btn {
    font-size: 0.875rem;
    padding-left: 1rem;
    padding-right: 1rem;
    padding-top: 0.5rem;
    padding-bottom: 0.5rem;
    background-color: #e6e6e6;
    color: rgba(0, 0, 0, 0.8);
    border: 2px solid transparent;
    border-radius: 4px;
    cursor: pointer;
    text-transform: none;
    overflow: visible;
    margin: 5px;
    transform: translateZ(0);
    transition: border-color 0.25s var(--anim-easing),
      background-color 0.25s var(--anim-easing);

    &:focus {
      border-color: #03a9f4;
    }
    &:hover {
      background-color: #ececec;
    }
  }

  .modal-btn-primary {
    background-color: hsl(215deg, 22%, 19%);
    color: #fff;
    &:hover {
      background-color: hsl(215deg, 22%, 35%);
    }
  }
}

.help {
  table {
    margin-bottom: 15px;
    td {
      min-width: 250px;
    }
    td:first-child {
      font-family: var(--monospace-font);
    }
  }
  h2 {
    font: inherit;
    font-weight: bold;
  }
}

.modal-pre {
  white-space: pre-line;
  font-size: 13px;
}

.modal-logs,
.modal-bash {
  white-space: pre-wrap;
  border: 1px solid #999;
  background: #eee;
  font-size: 10px;
  font-family: var(--monospace-font);
  margin-top: 10px;
  margin-bottom: 10px;
  min-height: 50px;
  max-height: 40vh;
  overflow: auto;
}

.modal-bash {
  margin: 0;
  padding: 5px 0;
  overflow: auto;
  min-height: 0;
}

.modal-textarea {
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
  width: 100%;
}

.modal-small {
  font-size: 0.75rem;
}
