]> git.proxmox.com Git - mirror_novnc.git/blobdiff - app/styles/base.css
Merge pull request #699 from CendioOssman/double
[mirror_novnc.git] / app / styles / base.css
index a4d6708fd0607a8e4be804f5bdfa22635410ffe1..f4ee929dfbbcada668932d5c474bd992413bab96 100644 (file)
@@ -2,6 +2,7 @@
  * noVNC base CSS
  * Copyright (C) 2012 Joel Martin
  * Copyright (C) 2016 Samuel Mannehed for Cendio AB
+ * Copyright (C) 2016 Pierre Ossman for Cendio AB
  * noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
  * This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
  */
@@ -15,14 +16,214 @@ body {
   background-repeat:no-repeat;
   background-position:right bottom;
   height:100%;
+  touch-action: none;
 }
 
 html {
   height:100%;
 }
 
-#noVNC_buttons {
-  white-space: nowrap;
+.noVNC_only_touch.noVNC_hidden {
+  display: none;
+}
+
+/* ----------------------------------------
+ * Spinner
+ * ----------------------------------------
+ */
+
+.noVNC_spinner {
+  position: relative;
+}
+.noVNC_spinner, .noVNC_spinner::before, .noVNC_spinner::after {
+  width: 10px;
+  height: 10px;
+  border-radius: 50%;
+  animation: noVNC_spinner 1.0s ease-in-out alternate infinite;
+}
+.noVNC_spinner::before {
+  content: "";
+  position: absolute;
+  left: -20px;
+  animation-delay: -0.2s;
+}
+.noVNC_spinner::after {
+  content: "";
+  position: absolute;
+  left: 20px;
+  animation-delay: 0.2s;
+}
+@keyframes noVNC_spinner {
+  0% { box-shadow: 0 10px 0 white; }
+  100% { box-shadow: 0 30px 0 white; }
+}
+
+/* ----------------------------------------
+ * Input Elements
+ * ----------------------------------------
+ */
+
+input[type=input], input[type=password], input:not([type]), textarea {
+  /* Disable default rendering */
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  background: none;
+
+  margin: 2px;
+  padding: 2px;
+  border: 1px solid rgb(192, 192, 192);
+  border-radius: 5px;
+  color: black;
+  background: linear-gradient(to top, rgb(255, 255, 255) 80%, rgb(240, 240, 240));
+}
+
+input[type=button], select {
+  /* Disable default rendering */
+  -webkit-appearance: none;
+  -moz-appearance: none;
+  background: none;
+
+  margin: 2px;
+  padding: 2px;
+  border: 1px solid rgb(192, 192, 192);
+  border-bottom-width: 2px;
+  border-radius: 5px;
+  color: black;
+  background: linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240));
+
+  /* This avoids it jumping around when :active */
+  vertical-align: middle;
+}
+
+input[type=button] {
+  padding-left: 20px;
+  padding-right: 20px;
+}
+
+option {
+  color: black;
+  background: white;
+}
+
+input[type=input]:focus, input[type=password]:focus,
+input:not([type]):focus, input[type=button]:focus,
+textarea:focus, select:focus {
+  box-shadow: 0px 0px 3px rgba(74, 144, 217, 0.5);
+  border-color: rgb(74, 144, 217);
+  outline: none;
+}
+
+input[type=button]::-moz-focus-inner {
+  border: none;
+}
+
+input[type=input]:disabled, input[type=password]:disabled,
+input:not([type]):disabled, input[type=button]:disabled,
+textarea:disabled, select:disabled {
+  color: rgb(128, 128, 128);
+  background: rgb(240, 240, 240);
+}
+
+input[type=button]:active, select:active {
+  border-bottom-width: 1px;
+  margin-top: 3px;
+}
+
+:root:not(.noVNC_touch) input[type=button]:hover:not(:disabled), :root:not(.noVNC_touch) select:hover:not(:disabled) {
+  background: linear-gradient(to top, rgb(255, 255, 255), rgb(250, 250, 250));
+}
+
+/* ----------------------------------------
+ * 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;
+  flex-direction: column;
+  justify-content: center;
+  position: fixed;
+  top: 0;
+  left: 0;
+  height: 100%;
+  pointer-events: none;
+}
+.noVNC_vcenter > * {
+  pointer-events: auto;
+}
+
+/* ----------------------------------------
+ * Fallback error
+ * ----------------------------------------
+ */
+
+#noVNC_fallback_error {
+  position: fixed;
+  z-index: 3;
+  left: 50%;
+  transform: translate(-50%, -50px);
+  transition: 0.5s ease-in-out;
+
+  visibility: hidden;
+  opacity: 0;
+
+  top: 60px;
+  padding: 15px;
+  width: auto;
+
+  text-align: center;
+  font-weight: bold;
+  word-wrap: break-word;
+  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 {
+  transform: translate(-50%, 0);
+  visibility: visible;
+  opacity: 1;
+}
+
+#noVNC_fallback_errormsg {
+  font-weight: normal;
+}
+
+#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;
+  white-space: pre;
+  border: 1px solid rgba(0, 0, 0, 0.5);
+  background: rgba(0, 0, 0, 0.2);
 }
 
 /* ----------------------------------------
@@ -30,108 +231,242 @@ html {
  * ----------------------------------------
  */
 
-#noVNC_control_bar {
+#noVNC_control_bar_anchor {
+  /* The anchor is needed to get z-stacking to work */
   position: fixed;
-  display: block;
-  height: 36px;
+  z-index: 2;
+
+  transition: 0.5s ease-in-out;
+
+  /* Edge misrenders animations wihthout 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;
+
+}
+#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;
-  width: 100%;
-  z-index: 200;
+  transform: translateY(35px);
+  width: calc(100% + 30px);
+  height: 50px;
+  z-index: -2;
+  cursor: pointer;
+  border-radius: 5px;
+  background-color: rgb(83, 99, 122);
+  background-image: url("../images/handle_bg.svg");
+  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.svg");
+  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;
+}
+#noVNC_control_bar_handle div {
+  position: absolute;
+  right: -35px;
+  top: 0;
+  width: 50px;
+  height: 50px;
+}
+:root:not(.noVNC_touch) #noVNC_control_bar_handle div {
+  display: none;
+}
+.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 0 5px;
+}
+.noVNC_right #noVNC_control_bar .noVNC_scroll {
+  padding: 0 5px 0 10px;
 }
 
 /* General button style */
-.noVNC_status_button {
+.noVNC_button {
+  display: block;
   padding: 4px 4px;
+  margin: 10px 0;
   vertical-align: middle;
-  border:1px solid #869dbc;
+  border:1px solid rgba(255, 255, 255, 0.2);
   -webkit-border-radius: 6px;
   -moz-border-radius: 6px;
   border-radius: 6px;
-  background: #b2bdcd; /* Old browsers */
-  background: -moz-linear-gradient(top, #b2bdcd 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b2bdcd), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
-  background: -o-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
-  background: -ms-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b2bdcd', endColorstr='#6e84a3',GradientType=0 ); /* IE6-9 */
-  background: linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
-  /*box-shadow:inset 0.4px 0.4px 0.4px #000000;*/
-  font-size: 12px;
-}
-.noVNC_status_button_selected {
-  padding: 4px 4px;
-  vertical-align: middle;
-  border:1px solid #4366a9;
-  -webkit-border-radius: 6px;
-  -moz-border-radius: 6px;
-  background: #779ced; /* Old browsers */
-  background: -moz-linear-gradient(top, #779ced 0%, #3970e0 49%, #2160dd 51%, #2463df 100%); /* FF3.6+ */
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#779ced), color-stop(49%,#3970e0), color-stop(51%,#2160dd), color-stop(100%,#2463df)); /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* Chrome10+,Safari5.1+ */
-  background: -o-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* Opera11.10+ */
-  background: -ms-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* IE10+ */
-  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#779ced', endColorstr='#2463df',GradientType=0 ); /* IE6-9 */
-  background: linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* W3C */
- /*box-shadow:inset 0.4px 0.4px 0.4px #000000;*/
-}
-.noVNC_status_button:disabled {
+}
+.noVNC_button.noVNC_selected {
+  border-color: rgba(0, 0, 0, 0.8);
+  background: rgba(0, 0, 0, 0.5);
+}
+.noVNC_button:disabled {
   opacity: 0.4;
 }
+.noVNC_button:focus {
+  outline: none;
+}
+.noVNC_button:active {
+  padding-top: 5px;
+  padding-bottom: 3px;
+}
+:root:not(.noVNC_touch) .noVNC_button.noVNC_selected:hover {
+  border-color: rgba(0, 0, 0, 0.4);
+  background: rgba(0, 0, 0, 0.2);
+}
+:root:not(.noVNC_touch) .noVNC_button:hover {
+  background: rgba(255, 255, 255, 0.2);
+}
+.noVNC_button.noVNC_hidden {
+  display: none;
+}
 
 /* Panels */
-.triangle-right {
-  position: relative;
+.noVNC_panel {
+  transform: translateX(25px);
+
+  transition: 0.5s ease-in-out;
+
+  max-height: 100vh; /* Chrome is buggy with 100% */
+  overflow-x: hidden;
+  overflow-y: auto;
+
+  visibility: hidden;
+  opacity: 0;
+
   padding: 15px;
-  color: #fff;
-  background: #fff; /* default background for browsers without gradient support */
-  /* css3 */
-  /*background: -webkit-gradient(linear, 0 0, 0 100%, from(#2e88c4), to(#075698));
-  background: -moz-linear-gradient(#2e88c4, #075698);
-  background: -o-linear-gradient(#2e88c4, #075698);
-  background: linear-gradient(#2e88c4, #075698);*/
+
+  background: #fff;
   -webkit-border-radius: 10px;
   -moz-border-radius: 10px;
   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);
 }
-.triangle-right.top:after {
-  border-color: transparent #E0E0E0;
-  border-width: 20px 20px 0 0;
-  bottom: auto;
+.noVNC_right .noVNC_vcenter {
   left: auto;
-  right: 50px;
-  top: -20px;
+  right: 0;
 }
-.triangle-right:after {
-  content: "";
-  position: absolute;
-  bottom: -20px; /* value = - border-top-width - border-bottom-width */
-  left: 50px; /* controls horizontal position */
-  border-width: 20px 0 0 20px; /* vary these values to change the angle of the vertex */
-  border-style: solid;
-  border-color: #E0E0E0 transparent;
-  /* reduce the damage in FF3.0 */
+.noVNC_right .noVNC_panel {
+  transform: translateX(-25px);
+}
+.noVNC_right .noVNC_panel.noVNC_open {
+  transform: translateX(-75px);
+}
+
+.noVNC_panel hr {
+  border: none;
+  border-top: 1px solid rgb(192, 192, 192);
+}
+
+.noVNC_panel label {
   display: block;
-  width: 0;
 }
-.triangle-right.top:after {
-  top: -40px; /* value = - border-top-width - border-bottom-width */
-  right: 50px; /* controls horizontal position */
-  bottom: auto;
-  left: auto;
-  border-width: 40px 40px 0 0; /* vary these values to change the angle of the vertex */
-  border-color: transparent #E0E0E0;
+
+.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;
+  margin-bottom: 10px;
+  white-space: nowrap;
+}
+.noVNC_panel .noVNC_heading img {
+  vertical-align: bottom;
+}
+
+.noVNC_submit {
+  float: right;
 }
 
-/* Drag/Pan button */
-#noVNC_view_drag_button {
+:root:not(.noVNC_connected) #noVNC_view_drag_button {
   display: none;
 }
 
 /* noVNC Touch Device only buttons */
-#noVNC_mobile_buttons {
+:root:not(.noVNC_connected) #noVNC_mobile_buttons {
+  display: none;
+}
+:root:not(.noVNC_touch) #noVNC_mobile_buttons {
   display: none;
 }
 
@@ -147,141 +482,48 @@ html {
   ime-mode: disabled;
 }
 
-#noVNC_toggleExtraKeys_button {
+/* Extra manual keys */
+:root:not(.noVNC_connected) #noVNC_extra_keys {
   display: none;
 }
 
-#noVNC_extra_keys {
-  display: inline;
-  list-style-type: none;
-  padding: 0px;
-  margin: 0px;
-  position: relative;
-}
-#noVNC_toggleCtrl_button {
-  display: inline;
-}
-#noVNC_toggleAlt_button {
-  display: inline;
-}
-#noVNC_sendTab_button {
-  display: inline;
-}
-#noVNC_sendEsc_button {
-  display: inline;
-}
-
-/* Left side buttons */
-.noVNC_buttons_left {
-  float: left;
-  z-index: 1;
-  position: relative;
-  padding-left: 10px;
-}
-
-/* Center status display */
-#noVNC_status {
-  font-size: 12px;
-  padding-top: 4px;
-  height:32px;
-  text-align: center;
-  font-weight: bold;
-  color: #fff;
-  z-index: 0;
-  position: absolute;
-  width: 100%;
-  margin-left: 0px;
-}
-.noVNC_status_normal {
-  background: #b2bdcd; /* Old browsers */
-  background: -moz-linear-gradient(top, #b2bdcd 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b2bdcd), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
-  background: -o-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
-  background: -ms-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
-  background: linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
-}
-.noVNC_status_error {
-  background: #f04040; /* Old browsers */
-  background: -moz-linear-gradient(top, #f04040 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f04040), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #f04040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
-  background: -o-linear-gradient(top, #f04040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
-  background: -ms-linear-gradient(top, #f04040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
-  background: linear-gradient(top, #f04040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
-}
-.noVNC_status_warn {
-  background: #f0f040; /* Old browsers */
-  background: -moz-linear-gradient(top, #f0f040 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
-  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f0f040), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
-  background: -webkit-linear-gradient(top, #f0f040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
-  background: -o-linear-gradient(top, #f0f040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
-  background: -ms-linear-gradient(top, #f0f040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
-  background: linear-gradient(top, #f0f040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
-}
-
-/* Right side buttons */
-.noVNC_buttons_right {
-  float: right;
-  right: 0px;
-  z-index: 2;
-  position: absolute;
-  padding-right: 10px;
-}
-
-/* Send Ctrl+Alt+Delete */
-#noVNC_sendCtrlAltDel_button {
-  display: none;
+#noVNC_modifiers {
+  background-color: rgb(92, 92, 92);
+  border: none;
+  padding: 0 10px;
 }
 
 /* XVP Shutdown/Reboot */
-#noVNC_xvp {
+:root:not(.noVNC_connected) #noVNC_xvp_button {
   display: none;
-  top: 73px;
-  right: 30px;
-  position: fixed;
 }
-#noVNC_xvp.top:after {
-  right: 125px;
+#noVNC_xvp {
 }
 #noVNC_xvp_buttons {
   display: none;
 }
 
+#noVNC_xvp input[type=button] {
+  width: 100%;
+}
+
 /* Clipboard */
-#noVNC_clipboard {
+:root:not(.noVNC_connected) #noVNC_clipboard_button {
   display: none;
-  top: 73px;
-  right: 30px;
-  position: fixed;
 }
-#noVNC_clipboard.top:after {
-  right: 85px;
+#noVNC_clipboard {
+  /* Full screen, minus padding and left and right margins */
+  max-width: calc(100vw - 2*15px - 75px - 25px);
 }
 #noVNC_clipboard_text {
   width: 500px;
-}
-#noVNC_clipboard_clear_button {
-  float: right;
-}
-
-/* Toggle fullscreen */
-#noVNC_fullscreen_button {
-  display: none;
+  max-width: 100%;
 }
 
 /* Settings */
 #noVNC_settings {
-  display: none;
-  top: 73px;
-  right: 20px;
-  position: fixed;
-}
-#noVNC_settings_menu {
-  margin: 3px;
-  text-align: left;
 }
-#noVNC_settings_menu ul {
+#noVNC_settings ul {
   list-style: none;
   margin: 0px;
   padding: 0px;
@@ -289,80 +531,102 @@ html {
 #noVNC_setting_path {
   width: 100px;
 }
-#noVNC_settings_apply {
-  float: right;
-}
 
 /* Connection Controls */
-#noVNC_controls {
+:root.noVNC_connected #noVNC_connect_controls_button {
   display: none;
-  top: 73px;
-  right: 12px;
-  position: fixed;
 }
-#noVNC_controls.top:after  {
-  right:15px;
+:root:not(.noVNC_connected) #noVNC_disconnect_button {
+  display: none;
 }
-#noVNC_controls ul {
+#noVNC_connect_controls ul {
   list-style: none;
   margin: 0px;
   padding: 0px;
 }
-#noVNC_controls li {
-  padding-bottom:8px;
-}
-#noVNC_setting_host {
-  width:150px;
-}
 #noVNC_setting_port {
   width: 80px;
 }
-#noVNC_setting_password {
-  width: 150px;
-}
-#noVNC_connect_button {
-  width: 110px;
-  float: right;
-}
 
-/* Description Panel */
-#noVNC_description {
-  display: none;
+/* ----------------------------------------
+ * Status Dialog
+ * ----------------------------------------
+ */
+
+#noVNC_status {
   position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  z-index: 3;
+  transform: translateY(-100%);
 
-  top: 73px;
-  right: 20px;
-  left: 20px;
-  padding: 15px;
-  color: #000;
-  background: #eee; /* default background for browsers without gradient support */
+  transition: 0.5s ease-in-out;
 
-  border: 2px solid #E0E0E0;
-  -webkit-border-radius: 10px;
-  -moz-border-radius: 10px;
-  border-radius: 10px;
-}
+  visibility: hidden;
+  opacity: 0;
 
-/* Popup Status */
-#noVNC_popup_status {
-  display: none;
-  position: fixed;
-  z-index: 1;
+  padding: 5px;
 
-  margin: 15px;
-  top: 60px;
-  padding: 15px;
-  width: auto;
+  display: flex;
+  flex-direction: row;
+  justify-content: center;
+  align-content: center;
 
-  text-align: center;
-  font-weight: bold;
+  line-height: 25px;
   word-wrap: break-word;
   color: #fff;
-  background: rgba(0,0,0,0.65);
 
-  -webkit-border-radius: 10px;
-  -moz-border-radius: 10px;
-  border-radius: 10px;
+  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.svg") " ";
+}
+#noVNC_status.noVNC_status_error {
+  background: rgba(200,55,55,0.9);
+}
+#noVNC_status.noVNC_status_error::before {
+  content: url("../images/error.svg") " ";
+}
+#noVNC_status.noVNC_status_warn {
+  background: rgba(180,180,30,0.9);
+}
+#noVNC_status.noVNC_status_warn::before {
+  content: url("../images/warning.svg") " ";
+}
+
+/* ----------------------------------------
+ * Password Dialog
+ * ----------------------------------------
+ */
+
+#noVNC_password_dlg {
+  transform: translateY(-50px);
+}
+#noVNC_password_dlg.noVNC_open {
+  transform: translateY(0);
+}
+#noVNC_password_dlg ul {
+  list-style: none;
+  margin: 0px;
+  padding: 0px;
 }
 
 /* ----------------------------------------
@@ -370,6 +634,34 @@ html {
  * ----------------------------------------
  */
 
+/* Transition screen */
+#noVNC_transition {
+  display: none;
+
+  position: fixed;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+
+  color: white;
+  background: rgba(0, 0, 0, 0.5);
+  z-index: 1000;
+
+  /*display: flex;*/
+  align-items: center;
+  justify-content: center;
+  flex-direction: column;
+}
+:root.noVNC_connecting #noVNC_transition,
+:root.noVNC_disconnecting #noVNC_transition {
+  display: flex;
+}
+#noVNC_transition_text {
+  font-size: 1.5em;
+}
+
+/* Main container */
 #noVNC_container {
   display: table;
   width: 100%;
@@ -381,17 +673,19 @@ html {
 
 /* HTML5 Canvas */
 #noVNC_screen {
-  display: none;
   position: absolute;
   margin: 0px;
   padding: 0px;
   bottom: 0px;
-  top: 36px; /* the height of the control bar */
+  top: 0px;
   left: 0px;
   right: 0px;
   width: auto;
   height: auto;
 }
+:root:not(.noVNC_connected) #noVNC_screen {
+  display: none;
+}
 
 /* Do not set width/height for VNC_canvas or incorrect
  * scaling will occur. Canvas size depends on remote VNC
@@ -414,14 +708,22 @@ html {
                    url('Orbitron700.ttf') format('truetype');
 }
 
-#noVNC_logo {
-  margin-top: 170px;
-  margin-left: 10px;
+.noVNC_logo {
   color:yellow;
   text-align:left;
   font-family: 'Orbitron', 'OrbitronTTF', sans-serif;
-  font-size: 180px;
+  font-size: 13px;
   line-height:90%;
+  text-shadow: 1px 1px 0 #000;
+}
+.noVNC_logo span{
+  color:green;
+}
+
+#noVNC_logo {
+  margin-top: 60px;
+  margin-left: 60px;
+  font-size: 180px;
   text-shadow:
        5px 5px 0 #000,
       -1px -1px 0 #000,
@@ -429,10 +731,12 @@ html {
       -1px 1px 0 #000,
        1px 1px 0 #000;
 }
+:root.noVNC_connected #noVNC_logo {
+  display: none;
+}
 
-
-#noVNC_logo span{
-  color:green;
+#noVNC_bell {
+  display: none;
 }
 
 /* ----------------------------------------
@@ -440,79 +744,19 @@ html {
  * ----------------------------------------
  */
 
-/* left-align the status text on lower resolutions */
-@media screen and (max-width: 800px){
-  #noVNC_status {
-    z-index: 1;
-    position: relative;
-    width: auto;
-    float: left;
-    margin-left: 4px;
-  }
-}
-
 @media screen and (max-width: 640px){
-  #noVNC_clipboard_text {
-    width: 410px;
-  }
   #noVNC_logo {
     font-size: 150px;
   }
-  .noVNC_status_button {
-    font-size: 10px;
-  }
-  .noVNC_buttons_left {
-    padding-left: 0px;
-  }
-  .noVNC_buttons_right {
-    padding-right: 0px;
-  }
-  /* collapse the extra keys on lower resolutions */
-  #noVNC_toggleExtraKeys_button {
-    display: inline;
-  }
-  #noVNC_toggleCtrl_button {
-    display: none;
-    position: absolute;
-    top: 30px;
-    left: 0px;
-  }
-  #noVNC_toggleAlt_button {
-    display: none;
-    position: absolute;
-    top: 65px;
-    left: 0px;
-  }
-  #noVNC_sendTab_button {
-    display: none;
-    position: absolute;
-    top: 100px;
-    left: 0px;
-  }
-  #noVNC_sendEsc_button {
-    display: none;
-    position: absolute;
-    top: 135px;
-    left: 0px;
-  }
 }
 
 @media screen and (min-width: 321px) and (max-width: 480px) {
-  #noVNC_clipboard_text {
-    width: 250px;
-  }
   #noVNC_logo {
     font-size: 110px;
   }
 }
 
 @media screen and (max-width: 320px) {
-  .noVNC_status_button {
-    font-size: 9px;
-  }
-  #noVNC_clipboard_text {
-    width: 220px;
-  }
   #noVNC_logo {
     font-size: 90px;
   }