]>
Commit | Line | Data |
---|---|---|
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 | 10 | body { |
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 | ||
21 | html { | |
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 | ||
34 | input[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 | ||
48 | input[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 | ||
66 | input[type=button] { | |
67 | padding-left: 20px; | |
68 | padding-right: 20px; | |
69 | } | |
70 | ||
71 | option { | |
72 | color: black; | |
73 | background: white; | |
74 | } | |
75 | ||
76 | input[type=input]:focus, input[type=password]:focus, | |
77 | input:not([type]):focus, input[type=button]:focus, | |
78 | textarea: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 | ||
84 | input[type=button]::-moz-focus-inner { | |
85 | border: none; | |
86 | } | |
87 | ||
88 | input[type=input]:disabled, input[type=password]:disabled, | |
89 | input:not([type]):disabled, input[type=button]:disabled, | |
90 | textarea:disabled, select:disabled { | |
91 | color: rgb(128, 128, 128); | |
92 | background: rgb(240, 240, 240); | |
93 | } | |
94 | ||
95 | input[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 | } |