base.css 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922
  1. /*
  2. * noVNC base CSS
  3. * Copyright (C) 2019 The noVNC Authors
  4. * noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
  5. * This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
  6. */
  7. /*
  8. * Z index layers:
  9. *
  10. * 0: Main screen
  11. * 10: Control bar
  12. * 50: Transition blocker
  13. * 60: Connection popups
  14. * 100: Status bar
  15. * ...
  16. * 1000: Javascript crash
  17. * ...
  18. * 10000: Max (used for polyfills)
  19. */
  20. /*
  21. * State variables (set on :root):
  22. *
  23. * noVNC_loading: Page is still loading
  24. * noVNC_connecting: Connecting to server
  25. * noVNC_reconnecting: Re-establishing a connection
  26. * noVNC_connected: Connected to server (most common state)
  27. * noVNC_disconnecting: Disconnecting from server
  28. */
  29. :root {
  30. font-family: sans-serif;
  31. }
  32. body {
  33. margin:0;
  34. padding:0;
  35. /*Background image with light grey curve.*/
  36. background-color:#494949;
  37. background-repeat:no-repeat;
  38. background-position:right bottom;
  39. height:100%;
  40. touch-action: none;
  41. }
  42. html {
  43. height:100%;
  44. }
  45. .noVNC_only_touch.noVNC_hidden {
  46. display: none;
  47. }
  48. .noVNC_disabled {
  49. color: rgb(128, 128, 128);
  50. }
  51. /* ----------------------------------------
  52. * Spinner
  53. * ----------------------------------------
  54. */
  55. .noVNC_spinner {
  56. position: relative;
  57. }
  58. .noVNC_spinner, .noVNC_spinner::before, .noVNC_spinner::after {
  59. width: 10px;
  60. height: 10px;
  61. border-radius: 2px;
  62. box-shadow: -60px 10px 0 rgba(255, 255, 255, 0);
  63. animation: noVNC_spinner 1.0s linear infinite;
  64. }
  65. .noVNC_spinner::before {
  66. content: "";
  67. position: absolute;
  68. left: 0px;
  69. top: 0px;
  70. animation-delay: -0.1s;
  71. }
  72. .noVNC_spinner::after {
  73. content: "";
  74. position: absolute;
  75. top: 0px;
  76. left: 0px;
  77. animation-delay: 0.1s;
  78. }
  79. @keyframes noVNC_spinner {
  80. 0% { box-shadow: -60px 10px 0 rgba(255, 255, 255, 0); width: 20px; }
  81. 25% { box-shadow: 20px 10px 0 rgba(255, 255, 255, 1); width: 10px; }
  82. 50% { box-shadow: 60px 10px 0 rgba(255, 255, 255, 0); width: 10px; }
  83. }
  84. /* ----------------------------------------
  85. * WebKit centering hacks
  86. * ----------------------------------------
  87. */
  88. .noVNC_center {
  89. /*
  90. * This is a workaround because webkit misrenders transforms and
  91. * uses non-integer coordinates, resulting in blurry content.
  92. * Ideally we'd use "top: 50%; transform: translateY(-50%);" on
  93. * the objects instead.
  94. */
  95. display: flex;
  96. align-items: center;
  97. justify-content: center;
  98. position: fixed;
  99. top: 0;
  100. left: 0;
  101. width: 100%;
  102. height: 100%;
  103. pointer-events: none;
  104. }
  105. .noVNC_center > * {
  106. pointer-events: auto;
  107. }
  108. .noVNC_vcenter {
  109. display: flex !important;
  110. flex-direction: column;
  111. justify-content: center;
  112. position: fixed;
  113. top: 0;
  114. left: 0;
  115. height: 100%;
  116. margin: 0 !important;
  117. padding: 0 !important;
  118. pointer-events: none;
  119. }
  120. .noVNC_vcenter > * {
  121. pointer-events: auto;
  122. }
  123. /* ----------------------------------------
  124. * Layering
  125. * ----------------------------------------
  126. */
  127. .noVNC_connect_layer {
  128. z-index: 60;
  129. }
  130. /* ----------------------------------------
  131. * Fallback error
  132. * ----------------------------------------
  133. */
  134. #noVNC_fallback_error {
  135. z-index: 1000;
  136. visibility: hidden;
  137. /* Put a dark background in front of everything but the error,
  138. and don't let mouse events pass through */
  139. background: rgba(0, 0, 0, 0.8);
  140. pointer-events: all;
  141. }
  142. #noVNC_fallback_error.noVNC_open {
  143. visibility: visible;
  144. }
  145. #noVNC_fallback_error > div {
  146. max-width: calc(100vw - 30px - 30px);
  147. max-height: calc(100vh - 30px - 30px);
  148. overflow: auto;
  149. padding: 15px;
  150. transition: 0.5s ease-in-out;
  151. transform: translateY(-50px);
  152. opacity: 0;
  153. text-align: center;
  154. font-weight: bold;
  155. color: #fff;
  156. border-radius: 10px;
  157. box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
  158. background: rgba(200,55,55,0.8);
  159. }
  160. #noVNC_fallback_error.noVNC_open > div {
  161. transform: translateY(0);
  162. opacity: 1;
  163. }
  164. #noVNC_fallback_errormsg {
  165. font-weight: normal;
  166. }
  167. #noVNC_fallback_errormsg .noVNC_message {
  168. display: inline-block;
  169. text-align: left;
  170. font-family: monospace;
  171. white-space: pre-wrap;
  172. }
  173. #noVNC_fallback_error .noVNC_location {
  174. font-style: italic;
  175. font-size: 0.8em;
  176. color: rgba(255, 255, 255, 0.8);
  177. }
  178. #noVNC_fallback_error .noVNC_stack {
  179. padding: 10px;
  180. margin: 10px;
  181. font-size: 0.8em;
  182. text-align: left;
  183. font-family: monospace;
  184. white-space: pre;
  185. border: 1px solid rgba(0, 0, 0, 0.5);
  186. background: rgba(0, 0, 0, 0.2);
  187. overflow: auto;
  188. }
  189. /* ----------------------------------------
  190. * Control Bar
  191. * ----------------------------------------
  192. */
  193. #noVNC_control_bar_anchor {
  194. /* The anchor is needed to get z-stacking to work */
  195. position: fixed;
  196. z-index: 10;
  197. transition: 0.5s ease-in-out;
  198. /* Edge misrenders animations wihthout this */
  199. transform: translateX(0);
  200. }
  201. :root.noVNC_connected #noVNC_control_bar_anchor.noVNC_idle {
  202. opacity: 0.8;
  203. }
  204. #noVNC_control_bar_anchor.noVNC_right {
  205. left: auto;
  206. right: 0;
  207. }
  208. #noVNC_control_bar {
  209. position: relative;
  210. left: -100%;
  211. transition: 0.5s ease-in-out;
  212. background-color: rgb(110, 132, 163);
  213. border-radius: 0 10px 10px 0;
  214. user-select: none;
  215. -webkit-user-select: none;
  216. -webkit-touch-callout: none; /* Disable iOS image long-press popup */
  217. }
  218. #noVNC_control_bar.noVNC_open {
  219. box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
  220. left: 0;
  221. }
  222. #noVNC_control_bar::before {
  223. /* This extra element is to get a proper shadow */
  224. content: "";
  225. position: absolute;
  226. z-index: -1;
  227. height: 100%;
  228. width: 30px;
  229. left: -30px;
  230. transition: box-shadow 0.5s ease-in-out;
  231. }
  232. #noVNC_control_bar.noVNC_open::before {
  233. box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
  234. }
  235. .noVNC_right #noVNC_control_bar {
  236. left: 100%;
  237. border-radius: 10px 0 0 10px;
  238. }
  239. .noVNC_right #noVNC_control_bar.noVNC_open {
  240. left: 0;
  241. }
  242. .noVNC_right #noVNC_control_bar::before {
  243. visibility: hidden;
  244. }
  245. #noVNC_control_bar_handle {
  246. position: absolute;
  247. left: -15px;
  248. top: 0;
  249. transform: translateY(35px);
  250. width: calc(100% + 30px);
  251. height: 50px;
  252. z-index: -1;
  253. cursor: pointer;
  254. border-radius: 5px;
  255. background-color: rgb(83, 99, 122);
  256. background-image: url("../images/handle_bg.svg");
  257. background-repeat: no-repeat;
  258. background-position: right;
  259. box-shadow: 3px 3px 0px rgba(0, 0, 0, 0.5);
  260. }
  261. #noVNC_control_bar_handle:after {
  262. content: "";
  263. transition: transform 0.5s ease-in-out;
  264. background: url("../images/handle.svg");
  265. position: absolute;
  266. top: 22px; /* (50px-6px)/2 */
  267. right: 5px;
  268. width: 5px;
  269. height: 6px;
  270. }
  271. #noVNC_control_bar.noVNC_open #noVNC_control_bar_handle:after {
  272. transform: translateX(1px) rotate(180deg);
  273. }
  274. :root:not(.noVNC_connected) #noVNC_control_bar_handle {
  275. display: none;
  276. }
  277. .noVNC_right #noVNC_control_bar_handle {
  278. background-position: left;
  279. }
  280. .noVNC_right #noVNC_control_bar_handle:after {
  281. left: 5px;
  282. right: 0;
  283. transform: translateX(1px) rotate(180deg);
  284. }
  285. .noVNC_right #noVNC_control_bar.noVNC_open #noVNC_control_bar_handle:after {
  286. transform: none;
  287. }
  288. /* Larger touch area for the handle, used when a touch screen is available */
  289. #noVNC_control_bar_handle div {
  290. position: absolute;
  291. right: -35px;
  292. top: 0;
  293. width: 50px;
  294. height: 100%;
  295. display: none;
  296. }
  297. @media (any-pointer: coarse) {
  298. #noVNC_control_bar_handle div {
  299. display: initial;
  300. }
  301. }
  302. .noVNC_right #noVNC_control_bar_handle div {
  303. left: -35px;
  304. right: auto;
  305. }
  306. #noVNC_control_bar > .noVNC_scroll {
  307. max-height: 100vh; /* Chrome is buggy with 100% */
  308. overflow-x: hidden;
  309. overflow-y: auto;
  310. padding: 0 10px;
  311. }
  312. #noVNC_control_bar > .noVNC_scroll > * {
  313. display: block;
  314. margin: 10px auto;
  315. }
  316. /* Control bar hint */
  317. #noVNC_hint_anchor {
  318. position: fixed;
  319. right: -50px;
  320. left: auto;
  321. }
  322. #noVNC_control_bar_anchor.noVNC_right + #noVNC_hint_anchor {
  323. left: -50px;
  324. right: auto;
  325. }
  326. #noVNC_control_bar_hint {
  327. position: relative;
  328. transform: scale(0);
  329. width: 100px;
  330. height: 50%;
  331. max-height: 600px;
  332. visibility: hidden;
  333. opacity: 0;
  334. transition: 0.2s ease-in-out;
  335. background: transparent;
  336. box-shadow: 0 0 10px black, inset 0 0 10px 10px rgba(110, 132, 163, 0.8);
  337. border-radius: 10px;
  338. transition-delay: 0s;
  339. }
  340. #noVNC_control_bar_hint.noVNC_active {
  341. visibility: visible;
  342. opacity: 1;
  343. transition-delay: 0.2s;
  344. transform: scale(1);
  345. }
  346. #noVNC_control_bar_hint.noVNC_notransition {
  347. transition: none !important;
  348. }
  349. /* Control bar buttons */
  350. #noVNC_control_bar .noVNC_button {
  351. padding: 4px 4px;
  352. vertical-align: middle;
  353. border:1px solid rgba(255, 255, 255, 0.2);
  354. border-radius: 6px;
  355. background-color: transparent;
  356. background-image: unset; /* we don't want the gradiant from input.css */
  357. }
  358. #noVNC_control_bar .noVNC_button.noVNC_selected {
  359. border-color: rgba(0, 0, 0, 0.8);
  360. background-color: rgba(0, 0, 0, 0.5);
  361. }
  362. #noVNC_control_bar .noVNC_button.noVNC_selected:not(:disabled):hover {
  363. border-color: rgba(0, 0, 0, 0.4);
  364. background-color: rgba(0, 0, 0, 0.2);
  365. }
  366. #noVNC_control_bar .noVNC_button:not(:disabled):hover {
  367. background-color: rgba(255, 255, 255, 0.2);
  368. }
  369. #noVNC_control_bar .noVNC_button:not(:disabled):active {
  370. padding-top: 5px;
  371. padding-bottom: 3px;
  372. }
  373. #noVNC_control_bar .noVNC_button.noVNC_hidden {
  374. display: none !important;
  375. }
  376. /* Android browsers don't properly update hover state if touch events are
  377. * intercepted, like they are when clicking on the remote screen. */
  378. @media (any-pointer: coarse) {
  379. #noVNC_control_bar .noVNC_button:not(:disabled):hover {
  380. background-color: transparent;
  381. }
  382. #noVNC_control_bar .noVNC_button.noVNC_selected:not(:disabled):hover {
  383. border-color: rgba(0, 0, 0, 0.8);
  384. background-color: rgba(0, 0, 0, 0.5);
  385. }
  386. }
  387. /* Panels */
  388. .noVNC_panel {
  389. transform: translateX(25px);
  390. transition: 0.5s ease-in-out;
  391. box-sizing: border-box; /* so max-width don't have to care about padding */
  392. max-width: calc(100vw - 75px - 25px); /* minus left and right margins */
  393. max-height: 100vh; /* Chrome is buggy with 100% */
  394. overflow-x: hidden;
  395. overflow-y: auto;
  396. visibility: hidden;
  397. opacity: 0;
  398. padding: 15px;
  399. background: #fff;
  400. border-radius: 10px;
  401. color: #000;
  402. border: 2px solid #E0E0E0;
  403. box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
  404. }
  405. .noVNC_panel.noVNC_open {
  406. visibility: visible;
  407. opacity: 1;
  408. transform: translateX(75px);
  409. }
  410. .noVNC_right .noVNC_vcenter {
  411. left: auto;
  412. right: 0;
  413. }
  414. .noVNC_right .noVNC_panel {
  415. transform: translateX(-25px);
  416. }
  417. .noVNC_right .noVNC_panel.noVNC_open {
  418. transform: translateX(-75px);
  419. }
  420. .noVNC_panel > * {
  421. display: block;
  422. margin: 10px auto;
  423. }
  424. .noVNC_panel > *:first-child {
  425. margin-top: 0 !important;
  426. }
  427. .noVNC_panel > *:last-child {
  428. margin-bottom: 0 !important;
  429. }
  430. .noVNC_panel hr {
  431. border: none;
  432. border-top: 1px solid rgb(192, 192, 192);
  433. }
  434. .noVNC_panel label {
  435. display: block;
  436. white-space: nowrap;
  437. margin: 5px;
  438. }
  439. .noVNC_panel li {
  440. margin: 5px;
  441. }
  442. .noVNC_panel .noVNC_heading {
  443. background-color: rgb(110, 132, 163);
  444. border-radius: 5px;
  445. padding: 5px;
  446. /* Compensate for padding in image */
  447. padding-right: 8px;
  448. color: white;
  449. font-size: 20px;
  450. white-space: nowrap;
  451. }
  452. .noVNC_panel .noVNC_heading img {
  453. vertical-align: bottom;
  454. }
  455. .noVNC_submit {
  456. float: right;
  457. }
  458. /* Expanders */
  459. .noVNC_expander {
  460. cursor: pointer;
  461. }
  462. .noVNC_expander::before {
  463. content: url("../images/expander.svg");
  464. display: inline-block;
  465. margin-right: 5px;
  466. transition: 0.2s ease-in-out;
  467. }
  468. .noVNC_expander.noVNC_open::before {
  469. transform: rotateZ(90deg);
  470. }
  471. .noVNC_expander ~ * {
  472. margin: 5px;
  473. margin-left: 10px;
  474. padding: 5px;
  475. background: rgba(0, 0, 0, 0.05);
  476. border-radius: 5px;
  477. }
  478. .noVNC_expander:not(.noVNC_open) ~ * {
  479. display: none;
  480. }
  481. /* Control bar content */
  482. #noVNC_control_bar .noVNC_logo {
  483. font-size: 13px;
  484. }
  485. .noVNC_logo + hr {
  486. /* Remove all but top border */
  487. border: none;
  488. border-top: 1px solid rgba(255, 255, 255, 0.2);
  489. }
  490. :root:not(.noVNC_connected) #noVNC_view_drag_button {
  491. display: none;
  492. }
  493. /* noVNC Touch Device only buttons */
  494. :root:not(.noVNC_connected) #noVNC_mobile_buttons {
  495. display: none;
  496. }
  497. @media not all and (any-pointer: coarse) {
  498. /* FIXME: The button for the virtual keyboard is the only button in this
  499. group of "mobile buttons". It is bad to assume that no touch
  500. devices have physical keyboards available. Hopefully we can get
  501. a media query for this:
  502. https://github.com/w3c/csswg-drafts/issues/3871 */
  503. :root.noVNC_connected #noVNC_mobile_buttons {
  504. display: none;
  505. }
  506. }
  507. /* Extra manual keys */
  508. :root:not(.noVNC_connected) #noVNC_toggle_extra_keys_button {
  509. display: none;
  510. }
  511. #noVNC_modifiers {
  512. background-color: rgb(92, 92, 92);
  513. border: none;
  514. padding: 10px;
  515. }
  516. /* Shutdown/Reboot */
  517. :root:not(.noVNC_connected) #noVNC_power_button {
  518. display: none;
  519. }
  520. #noVNC_power {
  521. }
  522. #noVNC_power_buttons {
  523. display: none;
  524. }
  525. #noVNC_power input[type=button] {
  526. width: 100%;
  527. }
  528. /* Clipboard */
  529. :root:not(.noVNC_connected) #noVNC_clipboard_button {
  530. display: none;
  531. }
  532. #noVNC_clipboard_text {
  533. width: 360px;
  534. min-width: 150px;
  535. height: 160px;
  536. min-height: 70px;
  537. box-sizing: border-box;
  538. max-width: 100%;
  539. /* minus approximate height of title, height of subtitle, and margin */
  540. max-height: calc(100vh - 10em - 25px);
  541. }
  542. /* Settings */
  543. #noVNC_settings {
  544. }
  545. #noVNC_settings ul {
  546. list-style: none;
  547. padding: 0px;
  548. }
  549. #noVNC_setting_port {
  550. width: 80px;
  551. }
  552. #noVNC_setting_path {
  553. width: 100px;
  554. }
  555. /* Version */
  556. .noVNC_version_wrapper {
  557. font-size: small;
  558. }
  559. .noVNC_version {
  560. margin-left: 1rem;
  561. }
  562. /* Connection Controls */
  563. :root:not(.noVNC_connected) #noVNC_disconnect_button {
  564. display: none;
  565. }
  566. /* ----------------------------------------
  567. * Status Dialog
  568. * ----------------------------------------
  569. */
  570. #noVNC_status {
  571. position: fixed;
  572. top: 0;
  573. left: 0;
  574. width: 100%;
  575. z-index: 100;
  576. transform: translateY(-100%);
  577. cursor: pointer;
  578. transition: 0.5s ease-in-out;
  579. visibility: hidden;
  580. opacity: 0;
  581. padding: 5px;
  582. display: flex;
  583. flex-direction: row;
  584. justify-content: center;
  585. align-content: center;
  586. line-height: 1.6;
  587. word-wrap: break-word;
  588. color: #fff;
  589. border-bottom: 1px solid rgba(0, 0, 0, 0.9);
  590. }
  591. #noVNC_status.noVNC_open {
  592. transform: translateY(0);
  593. visibility: visible;
  594. opacity: 1;
  595. }
  596. #noVNC_status::before {
  597. content: "";
  598. display: inline-block;
  599. width: 25px;
  600. height: 25px;
  601. margin-right: 5px;
  602. }
  603. #noVNC_status.noVNC_status_normal {
  604. background: rgba(128,128,128,0.9);
  605. }
  606. #noVNC_status.noVNC_status_normal::before {
  607. content: url("../images/info.svg") " ";
  608. }
  609. #noVNC_status.noVNC_status_error {
  610. background: rgba(200,55,55,0.9);
  611. }
  612. #noVNC_status.noVNC_status_error::before {
  613. content: url("../images/error.svg") " ";
  614. }
  615. #noVNC_status.noVNC_status_warn {
  616. background: rgba(180,180,30,0.9);
  617. }
  618. #noVNC_status.noVNC_status_warn::before {
  619. content: url("../images/warning.svg") " ";
  620. }
  621. /* ----------------------------------------
  622. * Connect Dialog
  623. * ----------------------------------------
  624. */
  625. #noVNC_connect_dlg {
  626. transition: 0.5s ease-in-out;
  627. transform: scale(0, 0);
  628. visibility: hidden;
  629. opacity: 0;
  630. }
  631. #noVNC_connect_dlg.noVNC_open {
  632. transform: scale(1, 1);
  633. visibility: visible;
  634. opacity: 1;
  635. }
  636. #noVNC_connect_dlg .noVNC_logo {
  637. transition: 0.5s ease-in-out;
  638. padding: 10px;
  639. margin-bottom: 10px;
  640. font-size: 80px;
  641. text-align: center;
  642. border-radius: 5px;
  643. }
  644. @media (max-width: 440px) {
  645. #noVNC_connect_dlg {
  646. max-width: calc(100vw - 100px);
  647. }
  648. #noVNC_connect_dlg .noVNC_logo {
  649. font-size: calc(25vw - 30px);
  650. }
  651. }
  652. #noVNC_connect_dlg div {
  653. padding: 12px;
  654. background-color: rgb(110, 132, 163);
  655. border-radius: 12px;
  656. text-align: center;
  657. font-size: 20px;
  658. box-shadow: 6px 6px 0px rgba(0, 0, 0, 0.5);
  659. }
  660. #noVNC_connect_button {
  661. width: 100%;
  662. padding: 5px 30px;
  663. cursor: pointer;
  664. border-color: rgb(83, 99, 122);
  665. border-radius: 5px;
  666. background: linear-gradient(to top, rgb(110, 132, 163), rgb(99, 119, 147));
  667. color: white;
  668. /* This avoids it jumping around when :active */
  669. vertical-align: middle;
  670. }
  671. #noVNC_connect_button:hover {
  672. background: linear-gradient(to top, rgb(110, 132, 163), rgb(105, 125, 155));
  673. }
  674. #noVNC_connect_button img {
  675. vertical-align: bottom;
  676. height: 1.3em;
  677. }
  678. /* ----------------------------------------
  679. * Server verification Dialog
  680. * ----------------------------------------
  681. */
  682. #noVNC_verify_server_dlg {
  683. position: relative;
  684. transform: translateY(-50px);
  685. }
  686. #noVNC_verify_server_dlg.noVNC_open {
  687. transform: translateY(0);
  688. }
  689. #noVNC_fingerprint_block {
  690. margin: 10px;
  691. }
  692. /* ----------------------------------------
  693. * Password Dialog
  694. * ----------------------------------------
  695. */
  696. #noVNC_credentials_dlg {
  697. position: relative;
  698. transform: translateY(-50px);
  699. }
  700. #noVNC_credentials_dlg.noVNC_open {
  701. transform: translateY(0);
  702. }
  703. #noVNC_username_block.noVNC_hidden,
  704. #noVNC_password_block.noVNC_hidden {
  705. display: none;
  706. }
  707. /* ----------------------------------------
  708. * Main Area
  709. * ----------------------------------------
  710. */
  711. /* Transition screen */
  712. #noVNC_transition {
  713. transition: 0.5s ease-in-out;
  714. display: flex;
  715. opacity: 0;
  716. visibility: hidden;
  717. position: fixed;
  718. top: 0;
  719. left: 0;
  720. bottom: 0;
  721. right: 0;
  722. color: white;
  723. background: rgba(0, 0, 0, 0.5);
  724. z-index: 50;
  725. /*display: flex;*/
  726. align-items: center;
  727. justify-content: center;
  728. flex-direction: column;
  729. }
  730. :root.noVNC_loading #noVNC_transition,
  731. :root.noVNC_connecting #noVNC_transition,
  732. :root.noVNC_disconnecting #noVNC_transition,
  733. :root.noVNC_reconnecting #noVNC_transition {
  734. opacity: 1;
  735. visibility: visible;
  736. }
  737. :root:not(.noVNC_reconnecting) #noVNC_cancel_reconnect_button {
  738. display: none;
  739. }
  740. #noVNC_transition_text {
  741. font-size: 1.5em;
  742. }
  743. /* Main container */
  744. #noVNC_container {
  745. width: 100%;
  746. height: 100%;
  747. background-color: #313131;
  748. border-bottom-right-radius: 800px 600px;
  749. /*border-top-left-radius: 800px 600px;*/
  750. /* If selection isn't disabled, long-pressing stuff in the sidebar
  751. can accidentally select the container or the canvas. This can
  752. happen when attempting to move the handle. */
  753. user-select: none;
  754. -webkit-user-select: none;
  755. }
  756. #noVNC_keyboardinput {
  757. width: 1px;
  758. height: 1px;
  759. background-color: #fff;
  760. color: #fff;
  761. border: 0;
  762. position: absolute;
  763. left: -40px;
  764. z-index: -1;
  765. ime-mode: disabled;
  766. }
  767. /*Default noVNC logo.*/
  768. /* From: http://fonts.googleapis.com/css?family=Orbitron:700 */
  769. @font-face {
  770. font-family: 'Orbitron';
  771. font-style: normal;
  772. font-weight: 700;
  773. src: local('?'), url('Orbitron700.woff') format('woff'),
  774. url('Orbitron700.ttf') format('truetype');
  775. }
  776. .noVNC_logo {
  777. color:yellow;
  778. font-family: 'Orbitron', 'OrbitronTTF', sans-serif;
  779. line-height: 0.9;
  780. text-shadow: 0.1em 0.1em 0 black;
  781. }
  782. .noVNC_logo span{
  783. color:green;
  784. }
  785. #noVNC_bell {
  786. display: none;
  787. }
  788. /* ----------------------------------------
  789. * Media sizing
  790. * ----------------------------------------
  791. */
  792. @media screen and (max-width: 640px){
  793. #noVNC_logo {
  794. font-size: 150px;
  795. }
  796. }
  797. @media screen and (min-width: 321px) and (max-width: 480px) {
  798. #noVNC_logo {
  799. font-size: 110px;
  800. }
  801. }
  802. @media screen and (max-width: 320px) {
  803. #noVNC_logo {
  804. font-size: 90px;
  805. }
  806. }