/*
 * noVNC base CSS
 * Copyright (C) 2019 The noVNC Authors
 * noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
 * This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
 */

/*
 * Z index layers:
 *
 * 0: Main screen
 * 10: Control bar
 * 50: Transition blocker
 * 60: Connection popups
 * 100: Status bar
 * ...
 * 1000: JavaScript crash
 * ...
 * 10000: Max (used for polyfills)
 */

/*
 * State variables (set on :root):
 *
 * noVNC_loading: Page is still loading
 * noVNC_connecting: Connecting to server
 * noVNC_reconnecting: Re-establishing a connection
 * noVNC_connected: Connected to server (most common state)
 * noVNC_disconnecting: Disconnecting from server
 */

:root {
  font-family: sans-serif;
}

body {
  margin:0;
  padding:0;
  /*Background image with light grey curve.*/
  background-color:#494949;
  background-repeat:no-repeat;
  background-position:right bottom;
  height:100%;
  touch-action: none;
}

html {
  height:100%;
}

.noVNC_only_touch.noVNC_hidden {
  display: none;
}

.noVNC_disabled {
  color: rgb(128, 128, 128);
}

/* ----------------------------------------
 * Spinner
 * ----------------------------------------
 */

.noVNC_spinner {
  position: relative;
}
.noVNC_spinner, .noVNC_spinner::before, .noVNC_spinner::after {
  width: 10px;
  height: 10px;
  border-radius: 2px;
  box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
  animation: noVNC_spinner 1.0s linear infinite;
}
.noVNC_spinner::before {
  content: "";
  position: absolute;
  left: 0px;
  top: 0px;
  animation-delay: -0.1s;
}
.noVNC_spinner::after {
  content: "";
  position: absolute;
  top: 0px;
  left: 0px;
  animation-delay: 0.1s;
}
@keyframes noVNC_spinner {
  0% { box-shadow: -60px 10px 0 rgba(255, 255, 255, 0); width: 20px; }
  25% { box-shadow: 20px 10px 0 rgba(255, 255, 255, 1); width: 10px; }
  50% { box-shadow: 60px 10px 0 rgba(255, 255, 255, 0); width: 10px; }
}

/* ----------------------------------------
 * WebKit centering hacks
 * ----------------------------------------
 */

.noVNC_center {
  /*
   * This is a workaround because webkit misrenders transforms and
   * uses non-integer coordinates, resulting in blurry content.
   * Ideally we'd use "top: 50%; transform: translateY(-50%);" on
   * the objects instead.
   */
  display: flex;
  align-items: center;
  justify-content: center;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.noVNC_center > * {
  pointer-events: auto;
}
.noVNC_vcenter {
  display: flex !important;
  flex-direction: column;
  justify-content: center;
  position: fixed;
  top: 0;
  left: 0;
  height: 100%;
  margin: 0 !important;
  padding: 0 !important;
  pointer-events: none;
}
.noVNC_vcenter > * {
  pointer-events: auto;
}

/* ----------------------------------------
 * Layering
 * ----------------------------------------
 */

.noVNC_connect_layer {
  z-index: 60;
}

/* ----------------------------------------
 * Fallback error
 * ----------------------------------------
 */

#noVNC_fallback_error {
  z-index: 1000;
  visibility: hidden;
  /* Put a dark background in front of everything but the error,
     and don't let mouse events pass through */
  background: rgba(0, 0, 0, 0.8);
  pointer-events: all;
}
#noVNC_fallback_error.noVNC_open {
  visibility: visible;
}

#noVNC_fallback_error > div {
  max-width: calc(100vw - 30px - 30px);
  max-height: calc(100vh - 30px - 30px);
  overflow: auto;

  padding: 15px;

  transition: 0.5s ease-in-out;

  transform: translateY(-50px);
  opacity: 0;

  text-align: center;
  font-weight: bold;
  color: #fff;

  border-radius: 10px;
  box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
  background: rgba(200,55,55,0.8);
}
#noVNC_fallback_error.noVNC_open > div {
  transform: translateY(0);
  opacity: 1;
}

#noVNC_fallback_errormsg {
  font-weight: normal;
}

#noVNC_fallback_errormsg .noVNC_message {
  display: inline-block;
  text-align: left;
  font-family: monospace;
  white-space: pre-wrap;
}

#noVNC_fallback_error .noVNC_location {
  font-style: italic;
  font-size: 0.8em;
  color: rgba(255, 255, 255, 0.8);
}

#noVNC_fallback_error .noVNC_stack {
  padding: 10px;
  margin: 10px;
  font-size: 0.8em;
  text-align: left;
  font-family: monospace;
  white-space: pre;
  border: 1px solid rgba(0, 0, 0, 0.5);
  background: rgba(0, 0, 0, 0.2);
  overflow: auto;
}

/* ----------------------------------------
 * Control Bar
 * ----------------------------------------
 */

#noVNC_control_bar_anchor {
  /* The anchor is needed to get z-stacking to work */
  position: fixed;
  z-index: 10;

  transition: 0.5s ease-in-out;

  /* Edge misrenders animations without this */
  transform: translateX(0);
}
:root.noVNC_connected #noVNC_control_bar_anchor.noVNC_idle {
  opacity: 0.8;
}
#noVNC_control_bar_anchor.noVNC_right {
  left: auto;
  right: 0;
}

#noVNC_control_bar {
  position: relative;
  left: -100%;

  transition: 0.5s ease-in-out;

  background-color: rgb(110, 132, 163);
  border-radius: 0 10px 10px 0;

  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none; /* Disable iOS image long-press popup */
}
#noVNC_control_bar.noVNC_open {
  box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
  left: 0;
}
#noVNC_control_bar::before {
  /* This extra element is to get a proper shadow */
  content: "";
  position: absolute;
  z-index: -1;
  height: 100%;
  width: 30px;
  left: -30px;
  transition: box-shadow 0.5s ease-in-out;
}
#noVNC_control_bar.noVNC_open::before {
  box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
}
.noVNC_right #noVNC_control_bar {
  left: 100%;
  border-radius: 10px 0 0 10px;
}
.noVNC_right #noVNC_control_bar.noVNC_open {
  left: 0;
}
.noVNC_right #noVNC_control_bar::before {
  visibility: hidden;
}

#noVNC_control_bar_handle {
  position: absolute;
  left: -15px;
  top: 0;
  transform: translateY(35px);
  width: calc(100% + 30px);
  height: 50px;
  z-index: -1;
  cursor: pointer;
  border-radius: 5px;
  background-color: rgb(83, 99, 122);
  background-image: url("../images/handle_bg.png");
  background-repeat: no-repeat;
  background-position: right;
  box-shadow: 3px 3px 0px rgba(0, 0, 0, 0.5);
}
#noVNC_control_bar_handle:after {
  content: "";
  transition: transform 0.5s ease-in-out;
  background: url("../images/handle.png");
  position: absolute;
  top: 22px; /* (50px-6px)/2 */
  right: 5px;
  width: 5px;
  height: 6px;
}
#noVNC_control_bar.noVNC_open #noVNC_control_bar_handle:after {
  transform: translateX(1px) rotate(180deg);
}
:root:not(.noVNC_connected) #noVNC_control_bar_handle {
  display: none;
}
.noVNC_right #noVNC_control_bar_handle {
  background-position: left;
}
.noVNC_right #noVNC_control_bar_handle:after {
  left: 5px;
  right: 0;
  transform: translateX(1px) rotate(180deg);
}
.noVNC_right #noVNC_control_bar.noVNC_open #noVNC_control_bar_handle:after {
  transform: none;
}
/* Larger touch area for the handle, used when a touch screen is available */
#noVNC_control_bar_handle div {
  position: absolute;
  right: -35px;
  top: 0;
  width: 50px;
  height: 100%;
  display: none;
}
@media (any-pointer: coarse) {
  #noVNC_control_bar_handle div {
    display: initial;
  }
}
.noVNC_right #noVNC_control_bar_handle div {
  left: -35px;
  right: auto;
}

#noVNC_control_bar > .noVNC_scroll {
  max-height: 100vh; /* Chrome is buggy with 100% */
  overflow-x: hidden;
  overflow-y: auto;
  padding: 0 10px;
}

#noVNC_control_bar > .noVNC_scroll > * {
  display: block;
  margin: 10px auto;
}

/* Control bar hint */
#noVNC_hint_anchor {
  position: fixed;
  right: -50px;
  left: auto;
}
#noVNC_control_bar_anchor.noVNC_right + #noVNC_hint_anchor {
  left: -50px;
  right: auto;
}
#noVNC_control_bar_hint {
  position: relative;
  transform: scale(0);
  width: 100px;
  height: 50%;
  max-height: 600px;

  visibility: hidden;
  opacity: 0;
  transition: 0.2s ease-in-out;
  background: transparent;
  box-shadow: 0 0 10px black, inset 0 0 10px 10px rgba(110, 132, 163, 0.8);
  border-radius: 10px;
  transition-delay: 0s;
}
#noVNC_control_bar_hint.noVNC_active {
  visibility: visible;
  opacity: 1;
  transition-delay: 0.2s;
  transform: scale(1);
}
#noVNC_control_bar_hint.noVNC_notransition {
  transition: none !important;
}

/* Control bar buttons */
#noVNC_control_bar .noVNC_button {
  padding: 4px 4px;
  vertical-align: middle;
  border:1px solid rgba(255, 255, 255, 0.2);
  border-radius: 6px;
  background-color: transparent;
  background-image: unset; /* we don't want the gradiant from input.css */
}
#noVNC_control_bar .noVNC_button.noVNC_selected {
  border-color: rgba(0, 0, 0, 0.8);
  background-color: rgba(0, 0, 0, 0.5);
}
#noVNC_control_bar .noVNC_button.noVNC_selected:not(:disabled):hover {
  border-color: rgba(0, 0, 0, 0.4);
  background-color: rgba(0, 0, 0, 0.2);
}
#noVNC_control_bar .noVNC_button:not(:disabled):hover {
  background-color: rgba(255, 255, 255, 0.2);
}
#noVNC_control_bar .noVNC_button:not(:disabled):active {
  padding-top: 5px;
  padding-bottom: 3px;
}
#noVNC_control_bar .noVNC_button.noVNC_hidden {
  display: none !important;
}

/* Android browsers don't properly update hover state if touch events are
 * intercepted, like they are when clicking on the remote screen. */
@media (any-pointer: coarse) {
  #noVNC_control_bar .noVNC_button:not(:disabled):hover {
    background-color: transparent;
  }
  #noVNC_control_bar .noVNC_button.noVNC_selected:not(:disabled):hover {
    border-color: rgba(0, 0, 0, 0.8);
    background-color: rgba(0, 0, 0, 0.5);
  }
}


/* Panels */
.noVNC_panel {
  transform: translateX(25px);

  transition: 0.5s ease-in-out;

  box-sizing: border-box; /* so max-width don't have to care about padding */
  max-width: calc(100vw - 75px - 25px); /* minus left and right margins */
  max-height: 100vh; /* Chrome is buggy with 100% */
  overflow-x: hidden;
  overflow-y: auto;

  visibility: hidden;
  opacity: 0;

  padding: 15px;

  background: #fff;
  border-radius: 10px;
  color: #000;
  border: 2px solid #E0E0E0;
  box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
}
.noVNC_panel.noVNC_open {
  visibility: visible;
  opacity: 1;
  transform: translateX(75px);
}
.noVNC_right .noVNC_vcenter {
  left: auto;
  right: 0;
}
.noVNC_right .noVNC_panel {
  transform: translateX(-25px);
}
.noVNC_right .noVNC_panel.noVNC_open {
  transform: translateX(-75px);
}

.noVNC_panel > * {
  display: block;
  margin: 10px auto;
}
.noVNC_panel > *:first-child {
  margin-top: 0 !important;
}
.noVNC_panel > *:last-child {
  margin-bottom: 0 !important;
}

.noVNC_panel hr {
  border: none;
  border-top: 1px solid rgb(192, 192, 192);
}

.noVNC_panel label {
  display: block;
  white-space: nowrap;
  margin: 5px;
}

.noVNC_panel li {
  margin: 5px;
}

.noVNC_panel .noVNC_heading {
  background-color: rgb(110, 132, 163);
  border-radius: 5px;
  padding: 5px;
  /* Compensate for padding in image */
  padding-right: 8px;
  color: white;
  font-size: 20px;
  white-space: nowrap;
}
.noVNC_panel .noVNC_heading img {
  vertical-align: bottom;
}

.noVNC_submit {
  float: right;
}

/* Expanders */
.noVNC_expander {
  cursor: pointer;
}
.noVNC_expander::before {
  content: url("../images/expander.png");
  display: inline-block;
  margin-right: 5px;
  transition: 0.2s ease-in-out;
}
.noVNC_expander.noVNC_open::before {
  transform: rotateZ(90deg);
}
.noVNC_expander ~ * {
  margin: 5px;
  margin-left: 10px;
  padding: 5px;
  background: rgba(0, 0, 0, 0.05);
  border-radius: 5px;
}
.noVNC_expander:not(.noVNC_open) ~ * {
  display: none;
}

/* Control bar content */

#noVNC_control_bar .noVNC_logo {
  font-size: 13px;
}

.noVNC_logo + hr {
    /* Remove all but top border */
    border: none;
    border-top: 1px solid rgba(255, 255, 255, 0.2);
}

:root:not(.noVNC_connected) #noVNC_view_drag_button {
  display: none;
}

/* noVNC Touch Device only buttons */
:root:not(.noVNC_connected) #noVNC_mobile_buttons {
  display: none;
}
@media not all and (any-pointer: coarse) {
  /* FIXME: The button for the virtual keyboard is the only button in this
            group of "mobile buttons". It is bad to assume that no touch
            devices have physical keyboards available. Hopefully we can get
            a media query for this:
            https://github.com/w3c/csswg-drafts/issues/3871 */
  :root.noVNC_connected #noVNC_mobile_buttons {
    display: none;
  }
}

/* Extra manual keys */
:root:not(.noVNC_connected) #noVNC_toggle_extra_keys_button {
  display: none;
}

#noVNC_modifiers {
  background-color: rgb(92, 92, 92);
  border: none;
  padding: 10px;
}

/* Shutdown/Reboot */
:root:not(.noVNC_connected) #noVNC_power_button {
  display: none;
}
#noVNC_power {
}
#noVNC_power_buttons {
  display: none;
}

#noVNC_power input[type=button] {
  width: 100%;
}

/* Clipboard */
:root:not(.noVNC_connected) #noVNC_clipboard_button {
  display: none;
}
#noVNC_clipboard_text {
  width: 360px;
  min-width: 150px;
  height: 160px;
  min-height: 70px;

  box-sizing: border-box;
  max-width: 100%;
  /* minus approximate height of title, height of subtitle, and margin */
  max-height: calc(100vh - 10em - 25px);
}

:root:not(.noVNC_connected) #noVNC_fullscreen_button {
  display: none;
}

/* Settings */
#noVNC_settings {
}
#noVNC_settings ul {
  list-style: none;
  padding: 0px;
}
#noVNC_setting_port {
  width: 80px;
}
#noVNC_setting_path {
  width: 100px;
}

/* Version */

.noVNC_version_wrapper {
  font-size: small;
}

.noVNC_version {
  margin-left: 1rem;
}

/* Connection Controls */
:root:not(.noVNC_connected) #noVNC_disconnect_button {
  display: none;
}

/* ----------------------------------------
 * Status Dialog
 * ----------------------------------------
 */

#noVNC_status {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 100;
  transform: translateY(-100%);

  cursor: pointer;

  transition: 0.5s ease-in-out;

  visibility: hidden;
  opacity: 0;

  padding: 5px;

  display: flex;
  flex-direction: row;
  justify-content: center;
  align-content: center;

  line-height: 25px;
  word-wrap: break-word;
  color: #fff;

  border-bottom: 1px solid rgba(0, 0, 0, 0.9);
}
#noVNC_status.noVNC_open {
  transform: translateY(0);
  visibility: visible;
  opacity: 1;
}

#noVNC_status::before {
  content: "";
  display: inline-block;
  width: 25px;
  height: 25px;
  margin-right: 5px;
}

#noVNC_status.noVNC_status_normal {
  background: rgba(128,128,128,0.9);
}
#noVNC_status.noVNC_status_normal::before {
  content: url("../images/info.png") " ";
}
#noVNC_status.noVNC_status_error {
  background: rgba(200,55,55,0.9);
}
#noVNC_status.noVNC_status_error::before {
  content: url("../images/error.png") " ";
}
#noVNC_status.noVNC_status_warn {
  background: rgba(180,180,30,0.9);
}
#noVNC_status.noVNC_status_warn::before {
  content: url("../images/warning.png") " ";
}
#noVNC_status.noVNC_status_tls_success {
  background: rgba(6, 199, 38, 0.9);
}
#noVNC_status.noVNC_status_tls_success::before {
  content: url("../images/connect.png") " ";
}

/* ----------------------------------------
 * Connect Dialog
 * ----------------------------------------
 */

#noVNC_connect_dlg {
  transition: 0.5s ease-in-out;

  transform: scale(0, 0);
  visibility: hidden;
  opacity: 0;
}
#noVNC_connect_dlg.noVNC_open {
  transform: scale(1, 1);
  visibility: visible;
  opacity: 1;
}
#noVNC_connect_dlg .noVNC_logo {
  transition: 0.5s ease-in-out;
  padding: 10px;
  margin-bottom: 10px;

  font-size: 80px;
  text-align: center;

  border-radius: 5px;
}
@media (max-width: 440px) {
  #noVNC_connect_dlg {
    max-width: calc(100vw - 100px);
  }
  #noVNC_connect_dlg .noVNC_logo {
    font-size: calc(25vw - 30px);
  }
}
#noVNC_connect_dlg div {
  padding: 12px;

  background-color: rgb(110, 132, 163);
  border-radius: 12px;
  text-align: center;
  font-size: 20px;

  box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
}
#noVNC_connect_button {
  width: 100%;
  padding: 5px 30px;

  cursor: pointer;

  border-color: rgb(83, 99, 122);
  border-radius: 5px;

  background: linear-gradient(to top, rgb(110, 132, 163), rgb(99, 119, 147));
  color: white;

  /* This avoids it jumping around when :active */
  vertical-align: middle;
}
#noVNC_connect_button:hover {
  background: linear-gradient(to top, rgb(110, 132, 163), rgb(105, 125, 155));
}

#noVNC_connect_button img {
  vertical-align: bottom;
  height: 1.3em;
}

/* ----------------------------------------
 * Server verification Dialog
 * ----------------------------------------
 */

#noVNC_verify_server_dlg {
  position: relative;

  transform: translateY(-50px);
}
#noVNC_verify_server_dlg.noVNC_open {
  transform: translateY(0);
}
#noVNC_fingerprint_block {
  margin: 10px;
}

/* ----------------------------------------
 * Password Dialog
 * ----------------------------------------
 */

#noVNC_credentials_dlg {
  position: relative;

  transform: translateY(-50px);
}
#noVNC_credentials_dlg.noVNC_open {
  transform: translateY(0);
}
#noVNC_username_block.noVNC_hidden,
#noVNC_password_block.noVNC_hidden {
  display: none;
}


/* ----------------------------------------
 * Main Area
 * ----------------------------------------
 */

/* Transition screen */
#noVNC_transition {
  transition: 0.5s ease-in-out;

  display: flex;
  opacity: 0;
  visibility: hidden;

  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;

  color: white;
  background: rgba(0, 0, 0, 0.5);
  z-index: 50;

  /*display: flex;*/
  align-items: center;
  justify-content: center;
  flex-direction: column;
}
:root.noVNC_loading #noVNC_transition,
:root.noVNC_connecting #noVNC_transition,
:root.noVNC_disconnecting #noVNC_transition,
:root.noVNC_reconnecting #noVNC_transition {
  opacity: 1;
  visibility: visible;
}
:root:not(.noVNC_reconnecting) #noVNC_cancel_reconnect_button {
  display: none;
}
#noVNC_transition_text {
  font-size: 1.5em;
}

/* Main container */
#noVNC_container {
  width: 100%;
  height: 100%;
  background-color: #313131;
  border-bottom-right-radius: 800px 600px;
  /*border-top-left-radius: 800px 600px;*/

  /* If selection isn't disabled, long-pressing stuff in the sidebar
     can accidentally select the container or the canvas. This can
     happen when attempting to move the handle. */
  user-select: none;
  -webkit-user-select: none;
}

#noVNC_keyboardinput {
  width: 1px;
  height: 1px;
  background-color: #fff;
  color: #fff;
  border: 0;
  position: absolute;
  left: -40px;
  z-index: -1;
  ime-mode: disabled;
}

/*Default noVNC logo.*/
/* From: http://fonts.googleapis.com/css?family=Orbitron:700 */
@font-face {
  font-family: 'Orbitron';
  font-style: normal;
  font-weight: 700;
  src: local('?'), url('Orbitron700.woff') format('woff'),
                   url('Orbitron700.ttf') format('truetype');
}

.noVNC_logo {
  color:yellow;
  font-family: 'Orbitron', 'OrbitronTTF', sans-serif;
  line-height:90%;
  text-shadow: 0.1em 0.1em 0 black;
}
.noVNC_logo span{
  color:green;
}

#noVNC_bell {
  display: none;
}

/* ----------------------------------------
 * Media sizing
 * ----------------------------------------
 */

@media screen and (max-width: 640px){
  #noVNC_logo {
    font-size: 150px;
  }
}

@media screen and (min-width: 321px) and (max-width: 480px) {
  #noVNC_logo {
    font-size: 110px;
  }
}

@media screen and (max-width: 320px) {
  #noVNC_logo {
    font-size: 90px;
  }
}
