]> git.proxmox.com Git - mirror_novnc.git/blame - app/styles/base.css
Move Ctrl+Alt+Del to extra keys menu
[mirror_novnc.git] / app / styles / base.css
CommitLineData
d58f8b51
JM
1/*
2 * noVNC base CSS
3 * Copyright (C) 2012 Joel Martin
682fd02b 4 * Copyright (C) 2016 Samuel Mannehed for Cendio AB
6cba147d 5 * Copyright (C) 2016 Pierre Ossman for Cendio AB
1d728ace 6 * noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
d58f8b51
JM
7 * This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
8 */
9
c327865b 10body {
01a9eee9
JM
11 margin:0;
12 padding:0;
13 font-family: Helvetica;
14 /*Background image with light grey curve.*/
15 background-color:#494949;
16 background-repeat:no-repeat;
17 background-position:right bottom;
18 height:100%;
c327865b
CG
19}
20
21html {
01a9eee9 22 height:100%;
c327865b
CG
23}
24
65e3d7d6
PO
25.noVNC_only_touch.noVNC_hidden {
26 display: none;
27}
28
79fd3b1f
PO
29/* ----------------------------------------
30 * Input Elements
31 * ----------------------------------------
32 */
33
34input[type=input], input[type=password], input:not([type]), textarea {
35 /* Disable default rendering */
36 -webkit-appearance: none;
37 -moz-appearance: none;
38 background: none;
39
40 margin: 2px;
41 padding: 2px;
42 border: 1px solid rgb(192, 192, 192);
43 border-radius: 5px;
44 color: black;
45 background: linear-gradient(to top, rgb(255, 255, 255) 80%, rgb(240, 240, 240));
46}
47
48input[type=button], select {
49 /* Disable default rendering */
50 -webkit-appearance: none;
51 -moz-appearance: none;
52 background: none;
53
54 margin: 2px;
55 padding: 2px;
56 border: 1px solid rgb(192, 192, 192);
57 border-bottom-width: 2px;
58 border-radius: 5px;
59 color: black;
60 background: linear-gradient(to top, rgb(255, 255, 255), rgb(240, 240, 240));
61
62 /* This avoids it jumping around when :active */
63 vertical-align: middle;
64}
65
66input[type=button] {
67 padding-left: 20px;
68 padding-right: 20px;
69}
70
71option {
72 color: black;
73 background: white;
74}
75
76input[type=input]:focus, input[type=password]:focus,
77input:not([type]):focus, input[type=button]:focus,
78textarea:focus, select:focus {
79 box-shadow: 0px 0px 3px rgba(74, 144, 217, 0.5);
80 border-color: rgb(74, 144, 217);
81 outline: none;
82}
83
84input[type=button]::-moz-focus-inner {
85 border: none;
86}
87
88input[type=input]:disabled, input[type=password]:disabled,
89input:not([type]):disabled, input[type=button]:disabled,
90textarea:disabled, select:disabled {
91 color: rgb(128, 128, 128);
92 background: rgb(240, 240, 240);
93}
94
95input[type=button]:active, select:active {
96 border-bottom-width: 1px;
97 margin-top: 3px;
98}
99
8a7ec6ea
SM
100/* ----------------------------------------
101 * WebKit centering hacks
102 * ----------------------------------------
103 */
104
105.noVNC_center {
106 /*
107 * This is a workaround because webkit misrenders transforms and
108 * uses non-integer coordinates, resulting in blurry content.
109 * Ideally we'd use "top: 50%; transform: translateY(-50%);" on
110 * the objects instead.
111 */
112 display: flex;
113 align-items: center;
114 justify-content: center;
115 position: fixed;
116 top: 0;
117 left: 0;
118 width: 100%;
119 height: 100%;
120 pointer-events: none;
121}
122.noVNC_center > * {
123 pointer-events: auto;
124}
fb7c3b3b
PO
125.noVNC_vcenter {
126 display: flex;
127 flex-direction: column;
128 justify-content: center;
129 position: fixed;
130 top: 0;
131 left: 0;
132 height: 100%;
133 pointer-events: none;
134}
135.noVNC_vcenter > * {
136 pointer-events: auto;
137}
8a7ec6ea 138
2869308c 139/* ----------------------------------------
140 * Control Bar
141 * ----------------------------------------
142 */
143
fb7c3b3b
PO
144#noVNC_control_bar_anchor {
145 /* The anchor is needed to get z-stacking to work */
2869308c 146 position: fixed;
fb7c3b3b 147 z-index: 2;
ca5c74ad 148
728b5d9e
PO
149 transition: 0.5s ease-in-out;
150
fb7c3b3b
PO
151 /* Edge misrenders animations wihthout this */
152 transform: translateX(0);
153}
728b5d9e
PO
154:root.noVNC_connected #noVNC_control_bar_anchor.noVNC_idle {
155 opacity: 0.8;
156}
fb7c3b3b
PO
157
158#noVNC_control_bar {
159 position: relative;
38323d4d
PO
160 /* left: calc(-35px - 10px - 5px - 30px), but IE doesn't animate calc */
161 left: -80px;
162
163 transition: 0.5s ease-in-out;
fb7c3b3b
PO
164
165 background-color: rgb(110, 132, 163);
166 border-radius: 0 10px 10px 0;
167
fb7c3b3b
PO
168 /* The extra border is to get a proper shadow */
169 border-color: rgb(110, 132, 163);
170 border-style: solid;
171 border-width: 0 0 0 30px;
172}
38323d4d
PO
173#noVNC_control_bar.noVNC_open {
174 box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
175 left: -30px;
176}
177
178#noVNC_control_bar_handle {
179 position: absolute;
180 right: -15px;
04b399e2
SM
181 top: 0;
182 transform: translateY(35px);
38323d4d
PO
183 width: 50px;
184 height: 50px;
185 z-index: -2;
186 cursor: pointer;
187 border-radius: 0 5px 5px 0;
188 background-color: rgb(83, 99, 122);
189 background-image: url("../images/handle_bg.svg");
190 background-repeat: no-repeat;
191 background-position: right;
192 box-shadow: 3px 3px 0px rgba(0, 0, 0, 0.5);
193}
194#noVNC_control_bar_handle:after {
195 content: "";
196 transition: 0.5s ease-in-out;
197 background: url("../images/handle.svg");
198 position: absolute;
199 top: 22px; /* (50px-6px)/2 */
200 right: 5px;
201 width: 5px;
202 height: 6px;
203}
204#noVNC_control_bar.noVNC_open #noVNC_control_bar_handle:after {
205 transform: translateX(1px) rotate(180deg);
206}
207:root:not(.noVNC_connected) #noVNC_control_bar_handle {
208 display: none;
209}
65e3d7d6
PO
210#noVNC_control_bar_handle div {
211 position: absolute;
212 right: -35px;
213 top: 0;
214 width: 50px;
215 height: 50px;
216}
217:root:not(.noVNC_touch) #noVNC_control_bar_handle div {
218 display: none;
219}
fb7c3b3b
PO
220
221#noVNC_control_bar .noVNC_scroll {
222 max-height: 100vh; /* Chrome is buggy with 100% */
223 overflow-x: hidden;
224 overflow-y: auto;
225 padding: 0 10px 0 5px;
c327865b
CG
226}
227
2869308c 228/* General button style */
a49d9298 229.noVNC_button {
fb7c3b3b 230 display: block;
2869308c 231 padding: 4px 4px;
fb7c3b3b 232 margin: 10px 0;
2869308c 233 vertical-align: middle;
fb7c3b3b 234 border:1px solid rgba(255, 255, 255, 0.2);
2869308c 235 -webkit-border-radius: 6px;
236 -moz-border-radius: 6px;
237 border-radius: 6px;
01a9eee9 238}
d9e86214 239.noVNC_button.noVNC_selected {
fb7c3b3b
PO
240 border-color: rgba(0, 0, 0, 0.8);
241 background: rgba(0, 0, 0, 0.5);
c327865b 242}
a49d9298 243.noVNC_button:disabled {
2869308c 244 opacity: 0.4;
c327865b 245}
f7c725ce
PO
246.noVNC_button:focus {
247 outline: none;
248}
249.noVNC_button:active {
250 padding-top: 5px;
251 padding-bottom: 3px;
252}
a49d9298 253.noVNC_button.noVNC_hidden {
e40978c7
PO
254 display: none;
255}
2869308c 256
257/* Panels */
286947cb 258.noVNC_panel {
fb7c3b3b 259 transform: translateX(25px);
24d8b311
PO
260
261 transition: 0.5s ease-in-out;
262
fb7c3b3b
PO
263 max-height: 100vh; /* Chrome is buggy with 100% */
264 overflow-x: hidden;
265 overflow-y: auto;
266
24d8b311
PO
267 visibility: hidden;
268 opacity: 0;
269
2869308c 270 padding: 15px;
24d8b311
PO
271
272 background: #fff;
2869308c 273 -webkit-border-radius: 10px;
274 -moz-border-radius: 10px;
275 border-radius: 10px;
276 color: #000;
277 border: 2px solid #E0E0E0;
24d8b311 278 box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
c327865b 279}
e40978c7 280.noVNC_panel.noVNC_open {
24d8b311
PO
281 visibility: visible;
282 opacity: 1;
fb7c3b3b 283 transform: translateX(75px);
a5df24b4 284}
2869308c 285
79fd3b1f
PO
286.noVNC_submit {
287 float: right;
288}
289
6244e383
PO
290:root:not(.noVNC_connected) #noVNC_view_drag_button {
291 display: none;
292}
293
2869308c 294/* noVNC Touch Device only buttons */
6244e383
PO
295:root:not(.noVNC_connected) #noVNC_mobile_buttons {
296 display: none;
297}
298:root:not(.noVNC_touch) #noVNC_mobile_buttons {
a6357e82 299 display: none;
300}
2869308c 301
302#noVNC_keyboardinput {
303 width: 1px;
304 height: 1px;
305 background-color: #fff;
306 color: #fff;
307 border: 0;
308 position: relative;
309 left: -40px;
310 z-index: -1;
311 ime-mode: disabled;
fb35d50f 312}
2869308c 313
fb7c3b3b 314/* Extra manual keys */
6244e383 315:root:not(.noVNC_connected) #noVNC_extra_keys {
608e0f52
JM
316 display: none;
317}
318
fb7c3b3b
PO
319#noVNC_modifiers {
320 background-color: rgb(92, 92, 92);
321 border: none;
322 padding: 0 10px;
323}
324
2869308c 325/* XVP Shutdown/Reboot */
6244e383
PO
326:root:not(.noVNC_connected) #noVNC_xvp_button {
327 display: none;
328}
2869308c 329#noVNC_xvp {
2869308c 330}
331#noVNC_xvp_buttons {
332 display: none;
f4bce783
JM
333}
334
2869308c 335/* Clipboard */
6244e383
PO
336:root:not(.noVNC_connected) #noVNC_clipboard_button {
337 display: none;
338}
2869308c 339#noVNC_clipboard {
fb7c3b3b
PO
340 /* Full screen, minus padding and left and right margins */
341 max-width: calc(100vw - 2*15px - 75px - 25px);
2869308c 342}
343#noVNC_clipboard_text {
344 width: 500px;
fb7c3b3b 345 max-width: 100%;
2869308c 346}
f4bce783 347
2869308c 348/* Settings */
349#noVNC_settings {
2869308c 350}
eeb395dc 351#noVNC_settings ul {
2869308c 352 list-style: none;
eeb395dc 353 margin: 3px;
2869308c 354 padding: 0px;
355}
356#noVNC_setting_path {
357 width: 100px;
358}
f4bce783 359
2869308c 360/* Connection Controls */
6244e383
PO
361:root.noVNC_connected #noVNC_connect_controls_button {
362 display: none;
363}
364:root:not(.noVNC_connected) #noVNC_disconnect_button {
365 display: none;
2869308c 366}
a49d9298 367#noVNC_connect_controls ul {
2869308c 368 list-style: none;
369 margin: 0px;
370 padding: 0px;
371}
a49d9298 372#noVNC_connect_controls li {
2869308c 373 padding-bottom:8px;
374}
375#noVNC_setting_host {
376 width:150px;
377}
378#noVNC_setting_port {
379 width: 80px;
380}
381#noVNC_setting_password {
382 width: 150px;
383}
c327865b 384
ca5c74ad 385/* ----------------------------------------
386 * Status Dialog
387 * ----------------------------------------
388 */
389
390#noVNC_status {
2869308c 391 position: fixed;
ca5c74ad 392 top: 0;
393 left: 0;
394 width: 100%;
395 z-index: 3;
24d8b311
PO
396 transform: translateY(-100%);
397
398 transition: 0.5s ease-in-out;
399
400 visibility: hidden;
401 opacity: 0;
2869308c 402
ca5c74ad 403 padding: 5px;
2869308c 404
24d8b311 405 display: flex;
ca5c74ad 406 flex-direction: row;
407 justify-content: center;
408 align-content: center;
409
410 line-height: 25px;
2869308c 411 word-wrap: break-word;
412 color: #fff;
2869308c 413
ca5c74ad 414 border-bottom: 1px solid rgba(0, 0, 0, 0.9);
c327865b 415}
ca5c74ad 416#noVNC_status.noVNC_open {
24d8b311
PO
417 transform: translateY(0);
418 visibility: visible;
419 opacity: 1;
ca5c74ad 420}
421
422#noVNC_status::before {
423 content: "";
424 display: inline-block;
425 width: 25px;
426 height: 25px;
427 margin-right: 5px;
428}
429
430#noVNC_status.noVNC_status_normal {
431 background: rgba(128,128,128,0.9);
432}
433#noVNC_status.noVNC_status_normal::before {
434 content: url("../images/info.svg") " ";
435}
436#noVNC_status.noVNC_status_error {
437 background: rgba(200,55,55,0.9);
438}
439#noVNC_status.noVNC_status_error::before {
440 content: url("../images/error.svg") " ";
441}
442#noVNC_status.noVNC_status_warn {
443 background: rgba(180,180,30,0.9);
444}
445#noVNC_status.noVNC_status_warn::before {
446 content: url("../images/warning.svg") " ";
e40978c7 447}
c327865b 448
8a7ec6ea
SM
449/* ----------------------------------------
450 * Password Dialog
451 * ----------------------------------------
452 */
453
454#noVNC_password_dlg {
455 transform: translateY(-50px);
456}
457#noVNC_password_dlg.noVNC_open {
458 transform: translateY(0);
459}
460#noVNC_password_dlg ul {
461 list-style: none;
462 margin: 0px;
463 padding: 0px;
464}
465#noVNC_password_dlg li {
466 padding-bottom:8px;
467}
468#noVNC_password_input {
469 width: 150px;
470}
471
2869308c 472/* ----------------------------------------
473 * Main Area
474 * ----------------------------------------
475 */
476
477#noVNC_container {
478 display: table;
479 width: 100%;
480 height: 100%;
481 background-color: #313131;
482 border-bottom-right-radius: 800px 600px;
483 /*border-top-left-radius: 800px 600px;*/
484}
485
486/* HTML5 Canvas */
487#noVNC_screen {
2869308c 488 position: absolute;
489 margin: 0px;
490 padding: 0px;
491 bottom: 0px;
fb7c3b3b 492 top: 0px;
2869308c 493 left: 0px;
494 right: 0px;
495 width: auto;
496 height: auto;
497}
6244e383 498:root:not(.noVNC_connected) #noVNC_screen {
e40978c7
PO
499 display: none;
500}
2869308c 501
502/* Do not set width/height for VNC_canvas or incorrect
503 * scaling will occur. Canvas size depends on remote VNC
504 * settings and noVNC settings. */
505#noVNC_canvas {
506 position: absolute;
507 left: 0;
508 right: 0;
509 margin-left: auto;
510 margin-right: auto;
c327865b
CG
511}
512
b70ce077 513/*Default noVNC logo.*/
479bfa99
JM
514/* From: http://fonts.googleapis.com/css?family=Orbitron:700 */
515@font-face {
516 font-family: 'Orbitron';
517 font-style: normal;
518 font-weight: 700;
519 src: local('?'), url('Orbitron700.woff') format('woff'),
520 url('Orbitron700.ttf') format('truetype');
521}
522
4d3aa0ef 523.noVNC_logo {
01a9eee9
JM
524 color:yellow;
525 text-align:left;
479bfa99 526 font-family: 'Orbitron', 'OrbitronTTF', sans-serif;
4d3aa0ef 527 font-size: 13px;
01a9eee9 528 line-height:90%;
4d3aa0ef
PO
529 text-shadow: 1px 1px 0 #000;
530}
531.noVNC_logo span{
532 color:green;
533}
534
535#noVNC_logo {
536 margin-top: 60px;
537 margin-left: 60px;
538 font-size: 180px;
01a9eee9 539 text-shadow:
c327865b
CG
540 5px 5px 0 #000,
541 -1px -1px 0 #000,
542 1px -1px 0 #000,
543 -1px 1px 0 #000,
544 1px 1px 0 #000;
545}
6244e383 546:root.noVNC_connected #noVNC_logo {
e40978c7
PO
547 display: none;
548}
a5df24b4 549
a5df24b4
JM
550/* ----------------------------------------
551 * Media sizing
552 * ----------------------------------------
553 */
554
35b29c98 555@media screen and (max-width: 640px){
9d04096e 556 #noVNC_logo {
557 font-size: 150px;
558 }
a5df24b4
JM
559}
560
561@media screen and (min-width: 321px) and (max-width: 480px) {
a5df24b4
JM
562 #noVNC_logo {
563 font-size: 110px;
564 }
565}
566
567@media screen and (max-width: 320px) {
a5df24b4
JM
568 #noVNC_logo {
569 font-size: 90px;
570 }
571}