Display External IP Address in status bar
[qBittorrent.git] / src / webui / www / private / css / style.css
blob6872d6766fd86d72bafaae8baf36bba160f1effe
1 /* Adaptive color palette */
3 /* Default rules */
4 :root {
5 --color-accent-blue: hsl(210deg 65% 55%);
6 --color-text-blue: hsl(210deg 100% 55%);
7 --color-text-orange: hsl(26deg 100% 45%);
8 --color-text-red: hsl(0deg 100% 65%);
9 --color-text-green: hsl(110deg 94% 27%);
10 --color-text-white: hsl(0deg 0% 100%);
11 --color-text-disabled: hsl(0deg 0% 60%);
12 --color-text-default: hsl(0deg 0% 33%);
13 --color-background-blue: hsl(210deg 65% 55%);
14 --color-background-popup: hsl(0deg 0% 100%);
15 --color-background-default: hsl(0deg 0% 94%);
16 --color-background-hover: hsl(26deg 80% 60%);
17 --color-border-blue: hsl(210deg 42% 48%);
18 --color-border-default: hsl(0deg 0% 85%);
19 --color-icon-hover: brightness(0) invert(100%) sepia(100%) saturate(0%)
20 hue-rotate(108deg) brightness(104%) contrast(104%);
22 &:not(.dark) {
23 color-scheme: light;
26 &.dark {
27 --color-accent-blue: hsl(210deg 42% 48%);
28 --color-text-blue: hsl(210deg 88.1% 73.5%);
29 --color-text-orange: hsl(26deg 65% 70%);
30 --color-text-default: hsl(0deg 0% 90%);
31 --color-background-blue: hsl(210deg 42% 48%);
32 --color-background-popup: hsl(0deg 0% 20%);
33 --color-background-default: hsl(0deg 0% 25%);
34 --color-background-hover: hsl(26deg 50% 55%);
35 --color-border-default: hsl(0deg 0% 33%);
37 color-scheme: dark;
39 #rssButtonBar img,
40 #startSearchButton img,
41 #manageSearchPlugins img {
42 filter: brightness(0) saturate(100%) invert(100%) sepia(0%)
43 saturate(1%) hue-rotate(156deg) brightness(106%) contrast(101%);
48 /* Reset */
51 *::before,
52 *::after {
53 box-sizing: border-box;
56 * {
57 margin: 0;
60 input,
61 button,
62 textarea,
63 select {
64 font: inherit;
67 a img,
68 :link img,
69 :visited img {
70 border: none;
73 ul,
74 ol {
75 list-style: none;
78 /* Forms */
80 input[type="text"],
81 input[type="number"],
82 input[type="password"],
83 input[type="button"],
84 button,
85 select {
86 border: 1px solid var(--color-border-default);
87 border-radius: 3px;
88 color: var(--color-text-default);
89 padding: 3px;
92 select {
93 padding: 4px;
96 input[type="checkbox"],
97 input[type="radio"] {
98 accent-color: var(--color-accent-blue);
99 margin: 3px 3px 3px 4px;
102 input[type="button"],
103 input[type="submit"],
104 button {
105 cursor: pointer;
106 padding-left: 10px;
107 padding-right: 10px;
110 button:disabled {
111 cursor: initial;
114 :focus {
115 outline: none;
118 /* Structure */
120 body {
121 color: var(--color-text-default);
122 font-family: Arial, Helvetica, sans-serif;
123 font-size: 12px;
124 line-height: 1.5;
125 text-align: left;
128 .aside {
129 width: 300px;
132 .invisible {
133 display: none;
136 /* Typography */
140 h4 {
141 font-size: 12px;
142 font-weight: bold;
143 padding: 0 0 5px;
146 h2 {
147 color: var(--color-text-default);
148 font-size: 14px;
149 font-weight: bold;
152 #mochaPage h3 {
153 border-bottom: 1px solid var(--color-border-default);
154 display: block;
155 font-size: 12px;
156 margin: 0 0 8px;
157 padding: 6px 0;
160 #error_div,
161 #rename_error {
162 color: var(--color-text-red);
163 float: left;
164 font-size: 14px;
165 font-weight: bold;
168 h4 {
169 font-size: 11px;
173 color: var(--color-text-orange);
174 cursor: pointer;
175 text-decoration: none;
178 a:hover {
179 text-decoration: none;
183 padding: 0 0 9px;
186 /* List Elements */
188 dt {
189 font-weight: bold;
192 dd {
193 padding: 0 0 9px;
196 /* Forms */
198 fieldset {
199 border: 1px solid var(--color-border-default);
200 border-radius: 1px;
201 margin: 0 2px;
204 /* Code */
206 pre {
207 background-color: var(--color-background-default);
208 border: 1px solid var(--color-border-default);
209 color: var(--color-text-green);
210 display: block;
211 font-family: "Courier New", Courier, monospace;
212 font-size: 11px;
213 margin: 0 0 10px;
214 max-height: 250px;
215 overflow: auto;
216 padding: 10px;
219 /* Dividers */
221 hr {
222 background-color: var(--color-background-default);
223 border: 0px;
224 color: var(--color-text-default);
225 height: 1px;
226 margin-bottom: 6px;
229 .vcenter {
230 vertical-align: middle;
233 #urls {
234 height: 100%;
235 width: 90%;
238 #trackersUrls {
239 display: block;
240 height: 100%;
241 margin: 0 auto 10px;
242 width: 90%;
245 #Filters {
246 overflow-x: hidden !important; /* override for default mocha inline style */
249 #Filters ul img {
250 height: 16px;
251 width: 16px;
254 #properties {
255 background-color: var(--color-background-default);
258 a.propButton {
259 border: 1px solid rgb(85 81 91);
260 margin-left: 3px;
261 margin-right: 3px;
262 padding: 2px;
265 a.propButton img {
266 margin-bottom: -4px;
269 .scrollableMenu {
270 overflow: hidden auto;
273 .propertiesTabContent {
274 height: 100%;
276 > div {
277 height: 100%;
281 /* context menu specific */
283 .contextMenu {
284 background-color: var(--color-background-default);
285 border: 1px solid var(--color-border-default);
286 display: none;
287 padding: 0;
290 .contextMenu .separator {
291 border-top: 1px solid var(--color-border-default);
294 .contextMenu .separatorBottom {
295 border-bottom: 1px solid var(--color-border-default);
298 .contextMenu li {
299 padding: 0;
300 user-select: none;
303 .contextMenu li.disabled {
304 background-color: transparent;
305 cursor: default;
306 opacity: 0.5;
309 .contextMenu li.disabled a {
310 pointer-events: none;
313 .contextMenu li a {
314 align-items: center;
315 color: var(--color-text-default);
316 display: flex;
317 gap: 2px;
318 padding: 5px 20px 5px 5px;
319 text-decoration: none;
320 white-space: nowrap;
323 .contextMenu li a:hover {
324 background-color: var(--color-background-hover);
325 color: var(--color-text-white);
328 .contextMenu li a:hover img:not(.highlightedCategoryIcon) {
329 filter: var(--color-icon-hover);
332 .contextMenu li ul {
333 background: var(--color-background-default);
334 border: 1px solid var(--color-border-default);
335 left: -999em;
336 margin: -29px 0 0 100%;
337 padding: 0;
338 position: absolute;
339 width: max-content;
340 z-index: 8000;
343 .contextMenu li ul li a {
344 position: relative;
347 .contextMenu li:not(.disabled) .arrow-right {
348 background-image: url("../images/arrow-right.gif");
349 background-position: right center;
350 background-repeat: no-repeat;
353 .contextMenu li:not(.disabled):hover > ul {
354 /* lists nested under hovered list items */
355 left: auto;
358 .contextMenu li img {
359 height: 16px;
360 margin-right: 0.5em;
361 width: 16px;
364 .contextMenu li input[type="checkbox"] {
365 margin: 0 0.5em 0 0;
366 width: 16px;
369 #contextCategoryList img {
370 border: 1px solid transparent;
371 box-sizing: content-box;
372 padding: 1px;
375 #contextCategoryList img.highlightedCategoryIcon {
376 background-color: hsl(213deg 94% 86%);
379 /* Sliders */
381 .slider {
382 clear: both;
383 font-size: 12px;
384 font-weight: bold;
385 margin-bottom: 15px;
386 position: relative;
387 width: 400px;
390 .sliderWrapper {
391 font-size: 1px;
392 height: 9px;
393 line-height: 1px;
394 position: relative;
395 width: 422px;
398 .sliderarea {
399 background: #f2f2f2 url("../images/slider-area.gif") repeat-x;
400 border: 1px solid #a3a3a3;
401 border-bottom: 1px solid #ccc;
402 border-left: 1px solid #ccc;
403 font-size: 1px;
404 height: 7px;
405 left: 0;
406 line-height: 1px;
407 overflow: hidden;
408 padding: 0;
409 position: absolute;
410 top: 0;
411 width: 420px;
414 .sliderknob {
415 background: url("../images/knob.gif") no-repeat;
416 cursor: pointer;
417 font-size: 1px;
418 height: 9px;
419 left: 0;
420 line-height: 1px;
421 overflow: hidden;
422 position: absolute;
423 top: 0;
424 width: 19px;
425 z-index: 2;
428 .update {
429 padding-bottom: 5px;
432 .mochaToolButton {
433 margin-right: 10px;
436 /* Mocha Customization */
438 #mochaToolbar {
439 height: auto !important;
440 margin-top: 5px;
441 overflow-y: hidden;
442 position: relative;
445 #mochaToolbar .divider {
446 background-image: url("../images/toolbox-divider.gif");
447 background-position: left center;
448 background-repeat: no-repeat;
449 padding-left: 14px;
450 padding-top: 15px;
453 .MyMenuIcon {
454 margin: 0 6px -3px -18px;
457 #mainWindowTabs {
458 float: right;
459 margin: 4px 5px 0 0;
462 #torrentsFilterToolbar {
463 display: inline-block;
464 vertical-align: top;
467 #torrentsFilterInput {
468 background-color: var(--color-background-default);
469 background-image: url("../images/edit-find.svg");
470 background-position: left;
471 background-repeat: no-repeat;
472 background-size: 1.5em;
473 border: 1px solid var(--color-border-default);
474 border-radius: 3px;
475 min-width: 160px;
476 padding: 2px 12px 2px 25px;
479 #torrentsFilterRegexBox {
480 display: none;
483 #torrentsFilterRegexBox + label {
484 background-image: url("../images/regex.svg");
485 background-position: center;
486 background-repeat: no-repeat;
487 background-size: 1.5em;
488 border: 1px solid var(--color-border-default);
489 border-radius: 4px;
490 cursor: pointer;
491 display: inline-block;
492 height: 26px;
493 margin-bottom: -9px;
494 width: 26px;
497 #torrentsFilterRegexBox:checked + label {
498 background-color: var(--color-background-default);
499 background-image: url("../images/regex.svg");
500 background-position: center;
501 background-repeat: no-repeat;
502 background-size: 1.5em;
503 border: 1px solid var(--color-accent-blue);
504 border-radius: 4px;
505 display: inline-block;
506 height: 26px;
507 margin-bottom: -9px;
508 width: 26px;
511 #torrentsFilterSelect {
512 padding: 2px 4px;
515 #torrentFilesFilterToolbar {
516 float: right;
517 margin-right: 5px;
520 #torrentFilesFilterInput {
521 background-image: url("../images/edit-find.svg");
522 background-position: left;
523 background-repeat: no-repeat;
524 background-size: 1.5em;
525 margin-top: -1px;
526 padding-bottom: 1px;
527 padding-left: 2em;
528 padding-top: 1px;
529 width: 190px;
532 /* Tri-state checkbox */
534 label.tristate {
535 background: url("../images/3-state-checkbox.gif") 0 0 no-repeat;
536 display: block;
537 float: left;
538 height: 13px;
539 margin: 0.15em 8px 5px 0px;
540 overflow: hidden;
541 text-indent: -999em;
542 width: 13px;
545 label.checked {
546 background-position: 0 -13px;
549 label.partial {
550 background-position: 0 -26px;
553 fieldset.settings {
554 border: 1px solid var(--color-border-default);
555 padding: 4px 4px 6px 6px;
558 fieldset.settings legend {
559 font-weight: bold;
560 margin-left: 8px;
561 padding: 4px;
564 fieldset.settings label {
565 padding: 2px;
568 fieldset.settings + div.formRow {
569 margin-top: 10px;
572 div.formRow {
573 clear: left;
574 display: block;
577 .filterTitle {
578 cursor: pointer;
579 display: flex;
580 font-weight: bold;
581 gap: 4px;
582 overflow: hidden;
583 padding: 4px 0 4px 6px;
584 text-overflow: ellipsis;
585 text-transform: uppercase;
586 user-select: none;
587 white-space: nowrap;
590 .filterTitle img {
591 height: 16px;
592 padding: 2px;
593 width: 16px;
596 .collapsedCategory > ul {
597 display: none;
600 .collapsedCategory .categoryToggle,
601 .filterTitle img.rotate {
602 transform: rotate(-90deg);
605 ul.filterList {
606 margin: 0;
607 padding-left: 0;
610 ul.filterList span.link:hover :is(img, button),
611 ul.filterList .selectedFilter > .link :is(img, button) {
612 filter: var(--color-icon-hover);
615 ul.filterList span.link {
616 align-items: center;
617 cursor: pointer;
618 display: flex;
619 gap: 5px;
620 overflow: hidden;
621 padding: 4px 6px;
622 white-space: nowrap;
625 ul.filterList span.link:hover {
626 background-color: var(--color-background-hover);
627 color: var(--color-text-white);
630 span.link :last-child {
631 min-width: 0;
632 overflow: hidden;
633 text-overflow: ellipsis;
634 white-space: nowrap;
637 span.link :is(img, button) {
638 flex-shrink: 0;
641 .selectedFilter > span.link {
642 background-color: var(--color-background-blue);
643 color: var(--color-text-white);
646 .subcategories,
647 .subcategories ul {
648 margin: 0;
649 padding: 0;
652 .subcategories .categoryToggle {
653 display: inline-block;
654 visibility: hidden;
657 .categoryToggle {
658 background: url("../images/go-down.svg") center center / 10px no-repeat
659 transparent;
660 border: none;
661 display: none;
662 height: 16px;
663 margin-right: -2px;
664 padding: 2px;
665 transition: transform 0.3s;
666 width: 16px;
669 td.generalLabel {
670 text-align: right;
671 vertical-align: top;
672 white-space: nowrap;
673 width: 1px;
676 #tristate_cb {
677 margin-bottom: 0;
678 margin-top: 0;
681 .filesTableCollapseIcon {
682 cursor: pointer;
683 height: 15px;
684 margin-bottom: -3px;
685 padding-right: 5px;
686 width: 15px;
689 .filesTableCollapseIcon.rotate {
690 margin-bottom: -1px;
691 transform: rotate(270deg);
694 .unselectable {
695 -webkit-touch-callout: none;
696 user-select: none;
699 #propGeneral {
700 padding: 2px;
703 .piecesbarWrapper {
704 position: relative;
705 width: 100%;
708 .piecesbarCanvas {
709 height: 100%;
710 image-rendering: pixelated;
711 inset: 0;
712 position: absolute;
713 width: 100%;
716 #watched_folders_tab {
717 border-collapse: collapse;
720 #watched_folders_tab td,
721 #watched_folders_tab th {
722 border: 1px solid black;
723 padding: 2px 4px;
726 .select-watched-folder-editable {
727 border: 1px solid var(--color-border-default);
728 height: 22px;
729 position: relative;
730 width: 160px;
733 .select-watched-folder-editable select {
734 border: none;
735 bottom: 0px;
736 left: 0px;
737 padding: 0;
738 position: absolute;
739 top: 0px;
740 width: 158px;
743 .select-watched-folder-editable input {
744 border: none;
745 left: 0px;
746 padding: 0;
747 position: absolute;
748 top: 0px;
749 width: 140px;
752 .select-watched-folder-editable select:focus,
753 .select-editable input:focus {
754 outline: none;
758 * Workaround to prevent the transfer list from
759 * disappearing when zooming in the browser.
761 #filtersColumn_handle {
762 margin-left: -1px;
765 .combo_priority {
766 font-size: 1em;
767 padding: 2px 6px;
770 td.statusBarSeparator {
771 background-image: url("../images/toolbox-divider.gif");
772 background-position: center 1px;
773 background-repeat: no-repeat;
774 background-size: 2px 18px;
775 width: 24px;
778 /* Statistics window */
779 #statisticsContent {
780 & table {
781 background-color: var(--color-background-default);
782 border-radius: 6px;
783 margin-bottom: 6px;
784 padding: 6px 10px;
786 & .statisticsValue {
787 text-align: right;
791 & h3 {
792 color: var(--color-text-default);
793 margin-bottom: 1px;
794 padding: 2px;
798 /* Search tab */
800 #SearchPanel,
801 #SearchPanel_wrapper,
802 #SearchPanel_pad {
803 height: inherit;
806 #searchResults {
807 height: 100%;
808 padding: 0 20px;
811 #searchResultsTableContainer {
812 height: calc(100% - 177px);
813 overflow: auto;
816 #searchResultsTableDiv {
817 height: calc(100% - 26px) !important;
820 #searchResults .dynamicTable {
821 width: 100%;
824 #searchResults .numSearchResults {
825 font-style: italic;
828 .red {
829 color: var(--color-text-red);
832 .green {
833 color: var(--color-text-green);
836 .searchPluginsTableRow {
837 cursor: pointer;
840 #torrentFilesTableDiv .dynamicTable tr.nonAlt:hover {
841 background-color: var(--color-background-hover);
842 color: var(--color-text-white);
845 /* Modals */
846 .modalDialog .mochaContent.pad {
847 display: flex !important; /* override for default mocha inline style */
848 flex-direction: column;
849 height: 100%;
852 .modalDialog .mochaContent.pad > :last-child {
853 align-self: flex-end;
856 .modalDialog .mochaContent.pad > :first-child {
857 margin: auto 0;
860 #rememberBtn {
861 background: url("../images/object-locked.svg") center center / 24px
862 no-repeat var(--color-background-popup);
863 height: 38px;
864 padding: 4px 6px;
865 width: 38px;
868 #rememberBtn.disabled {
869 filter: grayscale(100%);
872 #deleteFromDiskCB {
873 margin: 0 2px 0 0;
874 vertical-align: -1px;
877 .dialogMessage {
878 overflow-wrap: anywhere;
881 .genericConfirmGrid,
882 .confirmDeletionGrid {
883 align-items: center;
884 display: grid;
885 gap: 3px 4px;
886 grid-template-columns: max-content 1fr;
887 margin-bottom: 10px;
890 .confirmGridItem,
891 .deletionGridItem {
892 padding: 3px;
895 .deletionGridItem:first-child {
896 justify-self: center;
899 .confirmWarning,
900 .confirmDialogWarning {
901 background: url("../images/dialog-warning.svg") center center no-repeat;
902 height: 38px;
903 width: 38px;
906 .confirmWarning {
907 background-image: url("../images/help-about.svg");