* 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).
*/
+/*
+ * 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;
background-repeat:no-repeat;
background-position:right bottom;
height:100%;
+ touch-action: none;
}
html {
height:100%;
}
-#noVNC_controls ul {
- list-style: none;
- margin: 0px;
- padding: 0px;
+.noVNC_only_touch.noVNC_hidden {
+ display: none;
}
-#noVNC_controls li {
- padding-bottom:8px;
+
+.noVNC_disabled {
+ color: rgb(128, 128, 128);
}
-#noVNC_setting_host {
- width:150px;
+/* ----------------------------------------
+ * Spinner
+ * ----------------------------------------
+ */
+
+.noVNC_spinner {
+ position: relative;
}
-#noVNC_setting_port {
- width: 80px;
+.noVNC_spinner, .noVNC_spinner::before, .noVNC_spinner::after {
+ width: 10px;
+ height: 10px;
+ border-radius: 2px;
+ animation: noVNC_spinner 1.0s linear infinite;
}
-#noVNC_setting_password {
- width: 150px;
+.noVNC_spinner::before {
+ content: "";
+ position: absolute;
+ left: 0px;
+ top: 0px;
+ animation-delay: -0.1s;
}
-#noVNC_setting_encrypt {
+.noVNC_spinner::after {
+ content: "";
+ position: absolute;
+ top: 0px;
+ left: 0px;
+ animation-delay: 0.1s;
}
-#noVNC_setting_path {
- width: 100px;
+@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; }
}
-#noVNC_connect_button {
- width: 110px;
- float:right;
+
+/* ----------------------------------------
+ * Input Elements
+ * ----------------------------------------
+ */
+
+input[type=input], input[type=password], input[type=number],
+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], input[type=submit], 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;
}
-#noVNC_buttons {
- white-space: nowrap;
+input[type=button], input[type=submit] {
+ padding-left: 20px;
+ padding-right: 20px;
}
-#noVNC_view_drag_button {
- display: none;
+option {
+ color: black;
+ background: white;
}
-#noVNC_sendCtrlAltDel_button {
- display: none;
+
+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;
}
-#noVNC_fullscreen_button {
- display: none;
+
+input[type=button]::-moz-focus-inner,
+input[type=submit]::-moz-focus-inner {
+ border: none;
}
-#noVNC_xvp_buttons {
- display: 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);
}
-#noVNC_mobile_buttons {
- display: none;
+
+input[type=button]:active, input[type=submit]:active,
+select:active {
+ border-bottom-width: 1px;
+ margin-top: 3px;
}
-#noVNC_extra_keys {
- display: inline;
- list-style-type: none;
- padding: 0px;
- margin: 0px;
- position: relative;
+: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));
}
-.noVNC_buttons_left {
- float: left;
- z-index: 1;
- position: relative;
+/* ----------------------------------------
+ * 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;
}
-.noVNC_buttons_right {
- float:right;
- right: 0px;
- z-index: 2;
- position: absolute;
+/* ----------------------------------------
+ * Layering
+ * ----------------------------------------
+ */
+
+.noVNC_connect_layer {
+ z-index: 60;
}
-#noVNC_status {
- font-size: 12px;
- padding-top: 4px;
- height:32px;
+/* ----------------------------------------
+ * Fallback error
+ * ----------------------------------------
+ */
+
+#noVNC_fallback_error {
+ position: fixed;
+ z-index: 1000;
+ 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_settings_menu {
- margin: 3px;
- text-align: left;
+#noVNC_fallback_errormsg {
+ font-weight: normal;
}
-#noVNC_settings_menu ul {
- list-style: none;
- margin: 0px;
- padding: 0px;
+
+#noVNC_fallback_error .noVNC_location {
+ font-style: italic;
+ font-size: 0.8em;
+ color: rgba(255, 255, 255, 0.8);
}
-#noVNC_settings_apply {
- float:right;
+#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);
}
-#noVNC_container {
- display: table;
- width:100%;
- height:100%;
- background-color:#313131;
- border-bottom-right-radius: 800px 600px;
- /*border-top-left-radius: 800px 600px;*/
+/* ----------------------------------------
+ * 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 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_screen {
- display: none;
+#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;
- margin: 0px;
- padding: 0px;
- bottom: 0px;
- top: 36px; /* the height of the control bar */
- left: 0px;
- right: 0px;
- width: auto;
- height: auto;
+ 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;
}
-/* 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_control_bar_handle {
position: absolute;
- left: 0;
+ 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.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;
- margin-left: auto;
- margin-right: auto;
+ 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;
}
-#VNC_clipboard_clear_button {
- float:right;
+#noVNC_control_bar .noVNC_scroll {
+ max-height: 100vh; /* Chrome is buggy with 100% */
+ overflow-x: hidden;
+ overflow-y: auto;
+ padding: 0 10px 0 5px;
}
-#VNC_clipboard_text {
- font-size: 11px;
+.noVNC_right #noVNC_control_bar .noVNC_scroll {
+ padding: 0 5px 0 10px;
}
-#noVNC_clipboard_clear_button {
- float:right;
+/* General button style */
+.noVNC_button {
+ display: block;
+ padding: 4px 4px;
+ margin: 10px 0;
+ vertical-align: middle;
+ border:1px solid rgba(255, 255, 255, 0.2);
+ border-radius: 6px;
+}
+.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;
}
-/*Bubble contents divs*/
-#noVNC_settings {
- display:none;
- margin-top:73px;
- right:20px;
- position:fixed;
+/* Panels */
+.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;
+
+ 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_controls {
- display:none;
- margin-top:73px;
- right:12px;
- position:fixed;
+.noVNC_panel hr {
+ border: none;
+ border-top: 1px solid rgb(192, 192, 192);
}
-#noVNC_controls.top:after {
- right:15px;
+
+.noVNC_panel label {
+ display: block;
+ white-space: nowrap;
}
-#noVNC_description {
- display:none;
- position:fixed;
+.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;
+}
- margin-top:73px;
- right:20px;
- left:20px;
- padding:15px;
- color:#000;
- background:#eee; /* default background for browsers without gradient support */
+.noVNC_submit {
+ float: right;
+}
- border:2px solid #E0E0E0;
- -webkit-border-radius:10px;
- -moz-border-radius:10px;
- border-radius:10px;
+/* Expanders */
+.noVNC_expander {
+ cursor: pointer;
+}
+.noVNC_expander::before {
+ content: url("../images/expander.svg");
+ 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;
}
-#noVNC_popup_status {
- display:none;
- position: fixed;
- z-index: 1;
+/* Control bar content */
+
+#noVNC_control_bar .noVNC_logo {
+ font-size: 13px;
+}
- margin:15px;
- margin-top:60px;
- padding:15px;
- width:auto;
+:root:not(.noVNC_connected) #noVNC_view_drag_button {
+ display: none;
+}
+
+/* noVNC Touch Device only buttons */
+:root:not(.noVNC_connected) #noVNC_mobile_buttons {
+ display: none;
+}
+:root:not(.noVNC_touch) #noVNC_mobile_buttons {
+ display: none;
+}
- text-align:center;
- font-weight:bold;
- word-wrap:break-word;
- color:#fff;
- background:rgba(0,0,0,0.65);
+/* Extra manual keys */
+:root:not(.noVNC_connected) #noVNC_extra_keys {
+ display: none;
+}
- -webkit-border-radius:10px;
- -moz-border-radius:10px;
- border-radius:10px;
+#noVNC_modifiers {
+ background-color: rgb(92, 92, 92);
+ border: none;
+ padding: 0 10px;
}
+/* XVP Shutdown/Reboot */
+:root:not(.noVNC_connected) #noVNC_xvp_button {
+ display: none;
+}
#noVNC_xvp {
- display:none;
- margin-top:73px;
- right:30px;
- position:fixed;
}
-#noVNC_xvp.top:after {
- right:125px;
+#noVNC_xvp_buttons {
+ display: none;
+}
+
+#noVNC_xvp input[type=button] {
+ width: 100%;
}
+/* Clipboard */
+:root:not(.noVNC_connected) #noVNC_clipboard_button {
+ display: none;
+}
#noVNC_clipboard {
- display:none;
- margin-top:73px;
- right:30px;
- position:fixed;
+ /* Full screen, minus padding and left and right margins */
+ max-width: calc(100vw - 2*15px - 75px - 25px);
}
-#noVNC_clipboard.top:after {
- right:85px;
+#noVNC_clipboard_text {
+ width: 500px;
+ max-width: 100%;
}
-#noVNC_keyboardinput {
- width:1px;
- height:1px;
- background-color:#fff;
- color:#fff;
- border:0;
- position: relative;
- left: -40px;
- z-index: -1;
- ime-mode: disabled;
+/* Settings */
+#noVNC_settings {
+}
+#noVNC_settings ul {
+ list-style: none;
+ margin: 0px;
+ padding: 0px;
+}
+#noVNC_setting_port {
+ width: 80px;
+}
+#noVNC_setting_path {
+ width: 100px;
}
-/*
- * Advanced Styling
+/* Connection Controls */
+:root:not(.noVNC_connected) #noVNC_disconnect_button {
+ display: none;
+}
+
+/* ----------------------------------------
+ * Status Dialog
+ * ----------------------------------------
*/
-.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 */
-}
-
-/* Control bar */
-#noVNC_control_bar {
- position:fixed;
+#noVNC_status {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 100;
+ transform: translateY(-100%);
+
+ cursor: pointer;
+
+ transition: 0.5s ease-in-out;
- display:block;
- height:36px;
- left:0;
- top:0;
- width:100%;
- z-index:200;
+ 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_button {
- padding: 4px 4px;
- vertical-align: middle;
- border:1px solid #869dbc;
- -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;*/
-}
-
-.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 {
- opacity: 0.4;
+#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") " ";
+}
-/*Settings Bubble*/
-.triangle-right {
- position:relative;
- padding:15px;
- margin:1em 0 3em;
- 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);*/
- -webkit-border-radius:10px;
- -moz-border-radius:10px;
- border-radius:10px;
- color:#000;
- border:2px solid #E0E0E0;
-}
-
-.triangle-right.top:after {
- border-color: transparent #E0E0E0;
- border-width: 20px 20px 0 0;
- bottom: auto;
- left: auto;
- right: 50px;
- top: -20px;
+/* ----------------------------------------
+ * 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;
-.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 */
- display:block;
- width:0;
+ 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_button {
+ cursor: pointer;
+
+ padding: 10px;
+
+ color: white;
+ background-color: rgb(110, 132, 163);
+ border-radius: 12px;
-.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;
+ text-align: center;
+ font-size: 20px;
+
+ box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
}
+#noVNC_connect_button div {
+ margin: 2px;
+ padding: 5px 30px;
+ border: 1px solid rgb(83, 99, 122);
+ border-bottom-width: 2px;
+ border-radius: 5px;
+ background: linear-gradient(to top, rgb(110, 132, 163), rgb(99, 119, 147));
-/*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');
+ /* This avoids it jumping around when :active */
+ vertical-align: middle;
+}
+#noVNC_connect_button div:active {
+ border-bottom-width: 1px;
+ margin-top: 3px;
+}
+:root:not(.noVNC_touch) #noVNC_connect_button div:hover {
+ background: linear-gradient(to top, rgb(110, 132, 163), rgb(105, 125, 155));
}
-#noVNC_logo {
- margin-top: 170px;
- margin-left: 10px;
- color:yellow;
- text-align:left;
- font-family: 'Orbitron', 'OrbitronTTF', sans-serif;
- line-height:90%;
- text-shadow:
- 5px 5px 0 #000,
- -1px -1px 0 #000,
- 1px -1px 0 #000,
- -1px 1px 0 #000,
- 1px 1px 0 #000;
+#noVNC_connect_button img {
+ vertical-align: bottom;
+ height: 1.3em;
}
+/* ----------------------------------------
+ * Password Dialog
+ * ----------------------------------------
+ */
-#noVNC_logo span{
- color:green;
+#noVNC_password_dlg {
+ position: relative;
+
+ transform: translateY(-50px);
+}
+#noVNC_password_dlg.noVNC_open {
+ transform: translateY(0);
+}
+#noVNC_password_dlg ul {
+ list-style: none;
+ margin: 0px;
+ padding: 0px;
}
/* ----------------------------------------
- * Media sizing
+ * Main Area
* ----------------------------------------
*/
+/* 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: 50;
-.noVNC_status_button {
- font-size: 12px;
+ /*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 {
+ display: flex;
+}
+:root:not(.noVNC_reconnecting) #noVNC_cancel_reconnect_button {
+ display: none;
+}
+#noVNC_transition_text {
+ font-size: 1.5em;
}
-#noVNC_clipboard_text {
- width: 500px;
+/* Main container */
+#noVNC_container {
+ width: 100%;
+ height: 100%;
+ background-color: #313131;
+ border-bottom-right-radius: 800px 600px;
+ /*border-top-left-radius: 800px 600px;*/
}
-#noVNC_logo {
- font-size: 180px;
+#noVNC_keyboardinput {
+ width: 1px;
+ height: 1px;
+ background-color: #fff;
+ color: #fff;
+ border: 0;
+ position: absolute;
+ left: -40px;
+ z-index: -1;
+ ime-mode: disabled;
}
-.noVNC_buttons_left {
- padding-left: 10px;
+/* HTML5 Canvas */
+#noVNC_screen {
+ display: flex;
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+ background-color: rgb(40, 40, 40);
+}
+:root:not(.noVNC_connected) #noVNC_screen {
+ display: none;
}
-.noVNC_buttons_right {
- padding-right: 10px;
+/* 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 {
+ margin: auto;
+ /* IE miscalculates width without this :( */
+ flex-shrink: 0;
}
-#noVNC_status {
- z-index: 0;
- position: absolute;
- width: 100%;
- margin-left: 0px;
-}
-
-#noVNC_toggleExtraKeys_button { display: none; }
-#noVNC_toggleCtrl_button { display: inline; }
-#noVNC_toggleAlt_button { display: inline; }
-#noVNC_sendTab_button { display: inline; }
-#noVNC_sendEsc_button { display: inline; }
-
-/* 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;
- }
+/*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_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;
}