/*
* noVNC base CSS
- * Copyright (C) 2012 Joel Martin
- * Copyright (C) 2016 Samuel Mannehed for Cendio AB
- * Copyright (C) 2016 Pierre Ossman for Cendio AB
+ * 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)
+ */
+
body {
margin:0;
padding:0;
display: none;
}
+.noVNC_disabled {
+ color: rgb(128, 128, 128);
+}
+
/* ----------------------------------------
* Spinner
* ----------------------------------------
.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;
+ 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: -20px;
- animation-delay: -0.2s;
+ left: 0px;
+ top: 0px;
+ animation-delay: -0.1s;
}
.noVNC_spinner::after {
content: "";
position: absolute;
- left: 20px;
- animation-delay: 0.2s;
+ top: 0px;
+ left: 0px;
+ animation-delay: 0.1s;
}
@keyframes noVNC_spinner {
- 0% { box-shadow: 0 10px 0 white; }
- 100% { box-shadow: 0 30px 0 white; }
+ 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; }
}
/* ----------------------------------------
* ----------------------------------------
*/
-input[type=input], input[type=password], input:not([type]), textarea {
+input[type=input], input[type=password], input[type=number],
+input:not([type]), textarea {
/* Disable default rendering */
-webkit-appearance: none;
-moz-appearance: none;
background: linear-gradient(to top, rgb(255, 255, 255) 80%, rgb(240, 240, 240));
}
-input[type=button], select {
+input[type=button], input[type=submit], select {
/* Disable default rendering */
-webkit-appearance: none;
-moz-appearance: none;
vertical-align: middle;
}
-input[type=button] {
+input[type=button], input[type=submit] {
padding-left: 20px;
padding-right: 20px;
}
input[type=input]:focus, input[type=password]:focus,
input:not([type]):focus, input[type=button]:focus,
+input[type=submit]: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 {
+input[type=button]::-moz-focus-inner,
+input[type=submit]::-moz-focus-inner {
border: none;
}
input[type=input]:disabled, input[type=password]:disabled,
input:not([type]):disabled, input[type=button]:disabled,
+input[type=submit]:disabled, input[type=number]:disabled,
textarea:disabled, select:disabled {
color: rgb(128, 128, 128);
background: rgb(240, 240, 240);
}
-input[type=button]:active, select:active {
+input[type=button]:active, input[type=submit]: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) {
+:root:not(.noVNC_touch) input[type=button]:hover:not(:disabled),
+:root:not(.noVNC_touch) input[type=submit]:hover:not(:disabled),
+:root:not(.noVNC_touch) select:hover:not(:disabled) {
background: linear-gradient(to top, rgb(255, 255, 255), rgb(250, 250, 250));
}
pointer-events: auto;
}
+/* ----------------------------------------
+ * Layering
+ * ----------------------------------------
+ */
+
+.noVNC_connect_layer {
+ z-index: 60;
+}
+
/* ----------------------------------------
* Fallback error
* ----------------------------------------
*/
#noVNC_fallback_error {
- position: fixed;
- z-index: 3;
- left: 50%;
- transform: translate(-50%, -50px);
- transition: 0.5s ease-in-out;
-
+ z-index: 1000;
visibility: hidden;
- opacity: 0;
+}
+#noVNC_fallback_error.noVNC_open {
+ visibility: visible;
+}
- top: 60px;
+#noVNC_fallback_error > div {
+ max-width: 90%;
padding: 15px;
- width: auto;
+
+ transition: 0.5s ease-in-out;
+
+ transform: translateY(-50px);
+ opacity: 0;
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;
+#noVNC_fallback_error.noVNC_open > div {
+ transform: translateY(0);
opacity: 1;
}
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;
}
#noVNC_fallback_error .noVNC_stack {
+ max-height: 50vh;
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;
}
/* ----------------------------------------
#noVNC_control_bar_anchor {
/* The anchor is needed to get z-stacking to work */
position: fixed;
- z-index: 2;
+ z-index: 10;
transition: 0.5s ease-in-out;
transform: translateY(35px);
width: calc(100% + 30px);
height: 50px;
- z-index: -2;
+ z-index: -1;
cursor: pointer;
border-radius: 5px;
background-color: rgb(83, 99, 122);
padding: 0 5px 0 10px;
}
+/* Control bar hint */
+#noVNC_control_bar_hint {
+ position: fixed;
+ left: calc(100vw - 50px);
+ right: auto;
+ top: 50%;
+ transform: translateY(-50%) 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_anchor.noVNC_right #noVNC_control_bar_hint{
+ left: auto;
+ right: calc(100vw - 50px);
+}
+#noVNC_control_bar_hint.noVNC_active {
+ visibility: visible;
+ opacity: 1;
+ transition-delay: 0.2s;
+ transform: translateY(-50%) scale(1);
+}
+
/* General button style */
.noVNC_button {
display: block;
padding-top: 5px;
padding-bottom: 3px;
}
-:root:not(.noVNC_touch) .noVNC_button.noVNC_selected:hover {
+/* Android browsers don't properly update hover state if touch events
+ * are intercepted, but focus should be safe to display */
+:root:not(.noVNC_touch) .noVNC_button.noVNC_selected:hover,
+.noVNC_button.noVNC_selected:focus {
border-color: rgba(0, 0, 0, 0.4);
background: rgba(0, 0, 0, 0.2);
}
-:root:not(.noVNC_touch) .noVNC_button:hover {
+:root:not(.noVNC_touch) .noVNC_button:hover,
+.noVNC_button:focus {
background: rgba(255, 255, 255, 0.2);
}
.noVNC_button.noVNC_hidden {
.noVNC_panel label {
display: block;
+ white-space: nowrap;
}
.noVNC_panel .noVNC_heading {
display: none;
}
-#noVNC_keyboardinput {
- width: 1px;
- height: 1px;
- background-color: #fff;
- color: #fff;
- border: 0;
- position: relative;
- left: -40px;
- z-index: -1;
- ime-mode: disabled;
-}
-
/* Extra manual keys */
:root:not(.noVNC_connected) #noVNC_extra_keys {
display: none;
padding: 0 10px;
}
-/* XVP Shutdown/Reboot */
-:root:not(.noVNC_connected) #noVNC_xvp_button {
+/* Shutdown/Reboot */
+:root:not(.noVNC_connected) #noVNC_power_button {
display: none;
}
-#noVNC_xvp {
+#noVNC_power {
}
-#noVNC_xvp_buttons {
+#noVNC_power_buttons {
display: none;
}
-#noVNC_xvp input[type=button] {
+#noVNC_power input[type=button] {
width: 100%;
}
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;
top: 0;
left: 0;
width: 100%;
- z-index: 3;
+ z-index: 100;
transform: translateY(-100%);
+ cursor: pointer;
+
transition: 0.5s ease-in-out;
visibility: hidden;
* ----------------------------------------
*/
-#noVNC_password_dlg {
+#noVNC_credentials_dlg {
+ position: relative;
+
transform: translateY(-50px);
}
-#noVNC_password_dlg.noVNC_open {
+#noVNC_credentials_dlg.noVNC_open {
transform: translateY(0);
}
-#noVNC_password_dlg ul {
+#noVNC_credentials_dlg ul {
list-style: none;
margin: 0px;
padding: 0px;
}
+.noVNC_hidden {
+ display: none;
+}
+
/* ----------------------------------------
* Main Area
color: white;
background: rgba(0, 0, 0, 0.5);
- z-index: 1000;
+ 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_disconnecting #noVNC_transition,
+:root.noVNC_reconnecting #noVNC_transition {
display: flex;
}
+:root:not(.noVNC_reconnecting) #noVNC_cancel_reconnect_button {
+ display: none;
+}
#noVNC_transition_text {
font-size: 1.5em;
}
/* Main container */
#noVNC_container {
- display: table;
width: 100%;
height: 100%;
background-color: #313131;
border-bottom-right-radius: 800px 600px;
/*border-top-left-radius: 800px 600px;*/
}
-:root.noVNC_connected #noVNC_container {
- background-color: rgb(40, 40, 40);
- border-radius: 0;
-}
-
-/* HTML5 Canvas */
-#noVNC_screen {
- position: absolute;
- margin: 0px;
- padding: 0px;
- bottom: 0px;
- 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
- * settings and noVNC settings. */
-#noVNC_canvas {
+#noVNC_keyboardinput {
+ width: 1px;
+ height: 1px;
+ background-color: #fff;
+ color: #fff;
+ border: 0;
position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- margin: auto;
+ left: -40px;
+ z-index: -1;
+ ime-mode: disabled;
}
/*Default noVNC logo.*/