/*
 * 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.
 */

body {
  background-color:black;
  margin: 0;
  touch-action: none;
  overscroll-behavior: none;
}

#device-connection {
  display: none;
  max-height: 100vh;
}

@keyframes spin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

#loader {
  border-left: 12px solid #4285F4;
  border-top: 12px solid #34A853;
  border-right: 12px solid #FBBC05;
  border-bottom: 12px solid #EA4335;
  border-radius: 50%;
  width: 70px;
  height: 70px;
  animation: spin 1.2s linear infinite;
  margin: 100px;
}

/* Top header row. */

#header {
  height: 64px;
  /* Items inside this use a row Flexbox.*/
  display: flex;
  align-items: center;
}

#camera-control {
  display: none !important;
}
#record-video-control {
  display: none !important;
}

#app-controls {
  margin-left: 10px;
}
#app-controls > div {
  display: inline-block;
  position: relative;
  margin-right: 6px;
}
#device-audio {
  height: 44px;
}

#error-message-div {
  flex-grow: 1;
}
#error-message {
  color: white;
  font-family: 'Open Sans', sans-serif;
  padding: 10px;
  margin: 10px;
  border-radius: 10px;
}
#error-message .close-btn {
  float: right;
  cursor: pointer;
}
#error-message.hidden {
  display: none;
}
#error-message.warning {
  /* dark red */
  background-color: #927836;
}
#error-message.error {
  /* dark red */
  background-color: #900000;
}
#status-div {
  flex-grow: 1;
}
#status-message {
  color: white;
  font-family: 'Open Sans', sans-serif;
  padding: 10px;
  margin: 10px;
}
#status-message.connecting {
  /* dark yellow */
  background-color: #927836;
}
#status-message.error {
  /* dark red */
  background-color: #900000;
}
#status-message.connected {
  /* dark green */
  background-color: #007000;
}

/* Control panel buttons and device screen(s). */

#controls-and-displays {
  height: calc(100% - 84px);

  /* Items inside this use a row Flexbox.*/
  display: flex;
}

#controls-and-displays > div {
  margin-left: 5px;
  margin-right: 5px;
}

.modal {
  /* Start out hidden, and use absolute positioning. */
  display: none;
  position: absolute;

  border-radius: 10px;
  padding: 20px;
  padding-top: 1px;

  background-color: #5f6368ea; /* Semi-transparent Google grey 500 */
  color: white;
  font-family: 'Open Sans', sans-serif;
}
.modal-header {
  cursor: move;
  /* Items inside this use a row Flexbox.*/
  display: flex;
  justify-content: space-between;
}
.modal-close {
  color: white;
  border: none;
  outline: none;
  background-color: transparent;
}
.modal-button, .modal-button-highlight {
  background:    #e8eaed; /* Google grey 200 */
  border-radius: 10px;
  box-shadow:    1px 1px #444444;
  padding:       10px 20px;
  color:         #000000;
  display:       inline-block;
  font:          normal bold 14px/1 "Open Sans", sans-serif;
  text-align:    center;
}
#bluetooth-wizard-mac:valid {
  border: 2px solid black;
}
#bluetooth-wizard-mac:invalid {
  border: 2px solid red;
}
#bluetooth-wizard-mac:invalid + span::before {
  font-weight: bold;
  content: 'X';
  color: red;
}
#bluetooth-wizard-mac:valid + span::before {
  font-weight: bold;
  content: 'OK';
  color: green;
}
.modal-button {
  background:    #e8eaed; /* Google grey 200 */
}
.modal-button-highlight {
  background:    #f4cccc;
}
#device-details-modal span {
  white-space: pre;
}
#bluetooth-console-input {
  width: 100%;
}
#bluetooth-console-cmd-label {
  color: white;
}
.bluetooth-text, .bluetooth-text-bold, .bluetooth-text-field input {
  font: normal 18px/1 "Open Sans", sans-serif;
}
.bluetooth-text, .bluetooth-text-bold {
  color: white;
}
.bluetooth-text-bold {
  font: bold;
}
.bluetooth-button {
  text-align: center;
}
.bluetooth-drop-down select {
  font: normal 18px/1 "Open Sans", sans-serif;
  color: black;
  width: 500px;
  margin: 5px;
  rows: 10;
  columns: 60;
}
.bluetooth-text-field input {
  color: black;
  width: 500px;
  margin: 5px;
  rows: 10;
  columns: 60;
}
.bluetooth-list-trash {
  background:    #00000000;
  border:        0px;
  color:         #ffffff;
}

.control-panel-column {
  width: 50px;
  /* Items inside this use a column Flexbox.*/
  display: flex;
  flex-direction: column;
}
#control-panel-custom-buttons {
  display: none;
  /* Give the custom buttons column a blue background. */
  background-color: #1c4587ff;
  height: fit-content;
  border-radius: 10px;
}

.control-panel-column button {
  margin: 0px 0px 5px 0px;
  height: 50px;
  font-size: 32px;

  color: #e8eaed; /* Google grey 200 */
  border: none;
  outline: none;
  background-color: transparent;
}
.control-panel-column button:disabled {
  color: #9aa0a6; /* Google grey 500 */
}
.control-panel-column button.modal-button-opened {
  border-radius: 10px;
  background-color: #5f6368; /* Google grey 700 */
}

#device-displays {
  /* Take up the remaining width of the window.*/
  flex-grow: 1;
  /* Don't grow taller than the window.*/
  max-height: 100vh;
  /* Allows child elements to be positioned relative to this element. */
  position: relative;
}

/*
 * Container <div> used to wrap each display's <video> element which is used for
 * maintaining each display's width and height while the display is potentially
 * rotating.
 */
.device-display {
  /* Prevents #device-displays from using this element when computing flex size. */
  position: absolute;
}

/* Container <div> to show info about the individual display. */
.device-display-info {
  color: white;
  /* dark green */
  background-color: #007000;
  font-family: 'Open Sans', sans-serif;
  text-indent: 0px;
  border-radius: 10px;
  padding: 10px;
  margin-bottom: 10px;
}

/* The actual <video> element for each display. */
.device-display-video {
  position: absolute;
  left:  0px;
  touch-action: none;
  object-fit: cover;
}
