WebUI: Use Map instead of Mootools Hash in Torrents table
[qBittorrent.git] / src / webui / www / private / css / style.css
blob9e6947f7ab37aadf703114bc10230f8d05bf3b23
1 @import url("palette.css");
3 /* Reset */
5 a img,
6 :link img,
7 :visited img {
8 border: none;
11 /* Forms */
13 input[type="text"],
14 input[type="number"],
15 input[type="password"],
16 input[type="button"],
17 button,
18 select {
19 border: 1px solid var(--color-border-default);
20 border-radius: 3px;
21 color: var(--color-text-default);
22 padding: 4px;
25 input[type="checkbox"],
26 input[type="radio"] {
27 accent-color: var(--color-accent-blue);
30 input[type="button"],
31 input[type="submit"],
32 button {
33 cursor: pointer;
34 padding: 4px 16px;
37 button:disabled {
38 cursor: initial;
41 /*table { border-collapse: collapse; border-spacing: 0; }*/
43 :focus {
44 outline: none;
47 /* Structure */
49 body {
50 color: var(--color-text-default);
51 font-family: Arial, Helvetica, sans-serif;
52 font-size: 12px;
53 line-height: 18px;
54 margin: 0;
55 text-align: left;
58 .aside {
59 width: 300px;
62 .invisible {
63 display: none;
66 /* Typography */
68 h2,
69 h3,
70 h4 {
71 font-size: 12px;
72 font-weight: bold;
73 margin: 0;
74 padding: 0 0 5px;
77 h2 {
78 color: var(--color-text-default);
79 font-size: 14px;
80 font-weight: bold;
83 #mochaPage h3 {
84 border-bottom: 1px solid var(--color-border-default);
85 display: block;
86 font-size: 12px;
87 margin: 0 0 8px;
88 padding: 6px 0;
91 #error_div,
92 #rename_error {
93 color: var(--color-text-red);
94 float: left;
95 font-size: 14px;
96 font-weight: bold;
99 h4 {
100 font-size: 11px;
104 color: var(--color-text-orange);
105 cursor: pointer;
106 text-decoration: none;
109 a:hover {
110 text-decoration: none;
114 margin: 0;
115 padding: 0 0 9px;
118 /* List Elements */
120 ul {
121 list-style: outside;
122 margin: 0 0 9px 16px;
125 dt {
126 font-weight: bold;
129 dd {
130 padding: 0 0 9px;
133 /* Forms */
135 fieldset {
136 border: 1px solid var(--color-border-default);
137 border-radius: 5px;
140 /* Code */
142 pre {
143 background-color: var(--color-background-default);
144 border: 1px solid var(--color-border-default);
145 color: var(--color-text-green);
146 display: block;
147 font-family: "Courier New", Courier, monospace;
148 font-size: 11px;
149 margin: 0 0 10px;
150 max-height: 250px;
151 overflow: auto;
152 padding: 10px;
155 /* Dividers */
157 hr {
158 background-color: var(--color-background-default);
159 border: 0px;
160 color: var(--color-text-default);
161 height: 1px;
164 .vcenter {
165 vertical-align: middle;
168 #urls {
169 height: 100%;
170 width: 90%;
173 #trackersUrls {
174 height: 100%;
175 width: 90%;
178 #Filters {
179 overflow-x: hidden !important; /* override for default mocha inline style */
182 #Filters ul {
183 list-style-type: none;
186 #Filters ul img {
187 height: 16px;
188 width: 16px;
191 #properties {
192 background-color: var(--color-background-default);
195 a.propButton {
196 border: 1px solid rgb(85 81 91);
197 margin-left: 3px;
198 margin-right: 3px;
199 /*border-radius: 3px;*/
200 padding: 2px;
203 a.propButton img {
204 margin-bottom: -4px;
207 .scrollableMenu {
208 overflow: hidden auto;
211 /* context menu specific */
213 .contextMenu {
214 background-color: var(--color-background-default);
215 border: 1px solid var(--color-border-default);
216 display: none;
217 list-style-type: none;
218 padding: 0;
221 .contextMenu .separator {
222 border-top: 1px solid var(--color-border-default);
225 .contextMenu li {
226 margin: 0;
227 padding: 0;
230 .contextMenu li a {
231 align-items: center;
232 color: var(--color-text-default);
233 display: flex;
234 font-family: Tahoma, Arial, sans-serif;
235 font-size: 12px;
236 gap: 7px;
237 padding: 5px 20px 5px 5px;
238 text-decoration: none;
239 white-space: nowrap;
242 .contextMenu li a:hover {
243 background-color: var(--color-background-hover);
244 color: var(--color-text-white);
247 .contextMenu li a:hover img:not(.highlightedCategoryIcon) {
248 filter: var(--color-icon-hover);
251 .contextMenu li a.disabled {
252 font-style: italic;
255 .contextMenu li a.disabled:hover {
256 color: var(--color-text-disabled);
259 .contextMenu li ul {
260 background: var(--color-background-default);
261 border: 1px solid var(--color-border-default);
262 left: -999em;
263 list-style-type: none;
264 margin: -29px 0 0 100%;
265 padding: 0;
266 position: absolute;
267 width: 164px;
268 z-index: 8000;
271 .contextMenu li ul li a {
272 position: relative;
275 .contextMenu li a.arrow-right,
276 .contextMenu li a:hover.arrow-right {
277 background-image: url("../images/arrow-right.gif");
278 background-position: right center;
279 background-repeat: no-repeat;
282 .contextMenu li:hover ul,
283 .contextMenu li.ieHover ul,
284 .contextMenu li li.ieHover ul,
285 .contextMenu li li li.ieHover ul,
286 .contextMenu li li:hover ul,
287 .contextMenu li li li:hover ul {
288 /* lists nested under hovered list items */
289 left: auto;
292 .contextMenu li img {
293 height: 16px;
294 width: 16px;
297 .contextMenu li input[type="checkbox"] {
298 position: relative;
299 top: 3px;
302 #contextCategoryList img {
303 border: 1px solid transparent;
304 padding: 1px;
307 #contextCategoryList img.highlightedCategoryIcon {
308 background-color: hsl(213deg 94% 86%);
311 /* Sliders */
313 .slider {
314 clear: both;
315 font-size: 12px;
316 font-weight: bold;
317 margin-bottom: 15px;
318 position: relative;
319 width: 400px;
322 .sliderWrapper {
323 font-size: 1px;
324 height: 9px;
325 line-height: 1px;
326 position: relative;
327 width: 422px;
330 .sliderarea {
331 background: #f2f2f2 url("../images/slider-area.gif") repeat-x;
332 border: 1px solid #a3a3a3;
333 border-bottom: 1px solid #ccc;
334 border-left: 1px solid #ccc;
335 font-size: 1px;
336 height: 7px;
337 left: 0;
338 line-height: 1px;
339 margin: 0;
340 overflow: hidden;
341 padding: 0;
342 position: absolute;
343 top: 0;
344 width: 420px;
347 .sliderknob {
348 background: url("../images/knob.gif") no-repeat;
349 cursor: pointer;
350 font-size: 1px;
351 height: 9px;
352 left: 0;
353 line-height: 1px;
354 overflow: hidden;
355 position: absolute;
356 top: 0;
357 width: 19px;
358 z-index: 2;
361 .update {
362 padding-bottom: 5px;
365 .mochaToolButton {
366 margin-right: 10px;
369 /* Mocha Customization */
371 #mochaToolbar {
372 height: auto !important;
373 margin-top: 5px;
374 overflow-y: hidden;
375 position: relative;
378 #mochaToolbar .divider {
379 background-image: url("../images/toolbox-divider.gif");
380 background-position: left center;
381 background-repeat: no-repeat;
382 padding-left: 14px;
383 padding-top: 15px;
386 .MyMenuIcon {
387 margin-bottom: -3px;
388 margin-left: -18px;
389 padding-right: 5px;
392 #mainWindowTabs {
393 float: right;
394 margin: 4px 5px 0 0;
397 #torrentsFilterToolbar {
398 display: inline-block;
399 vertical-align: top;
402 #torrentsFilterInput {
403 background-color: var(--color-background-default);
404 background-image: url("../images/edit-find.svg");
405 background-position: left;
406 background-repeat: no-repeat;
407 background-size: 1.5em;
408 border: 1px solid var(--color-border-default);
409 border-radius: 3px;
410 min-width: 160px;
411 padding: 4px 4px 4px 25px;
414 #torrentsFilterRegexBox {
415 display: none;
418 #torrentsFilterRegexBox + label {
419 background-image: url("../images/regex.svg");
420 background-position: center;
421 background-repeat: no-repeat;
422 background-size: 1.5em;
423 border: 1px solid var(--color-border-default);
424 border-radius: 4px;
425 display: inline-block;
426 height: 26px;
427 margin-bottom: -9px;
428 width: 26px;
431 #torrentsFilterRegexBox:checked + label {
432 background-color: var(--color-background-default);
433 background-image: url("../images/regex.svg");
434 background-position: center;
435 background-repeat: no-repeat;
436 background-size: 1.5em;
437 border: 1px solid var(--color-accent-blue);
438 border-radius: 4px;
439 display: inline-block;
440 height: 26px;
441 margin-bottom: -9px;
442 width: 26px;
445 #torrentsFilterSelect {
446 padding: 2px 4px;
449 #torrentFilesFilterToolbar {
450 float: right;
451 margin-right: 5px;
454 #torrentFilesFilterInput {
455 background-image: url("../images/edit-find.svg");
456 background-position: left;
457 background-repeat: no-repeat;
458 background-size: 1.5em;
459 padding-left: 2em;
460 width: 250px;
463 /* Tri-state checkbox */
465 label.tristate {
466 background: url("../images/3-state-checkbox.gif") 0 0 no-repeat;
467 display: block;
468 float: left;
469 height: 13px;
470 margin: 0.15em 8px 5px 0px;
471 overflow: hidden;
472 text-indent: -999em;
473 width: 13px;
476 label.checked {
477 background-position: 0 -13px;
480 label.partial {
481 background-position: 0 -26px;
484 fieldset.settings {
485 border: 1px solid var(--color-border-default);
486 border-radius: 8px;
487 padding: 4px 4px 4px 10px;
490 fieldset.settings legend {
491 font-weight: bold;
492 margin-left: 8px;
493 padding: 4px;
496 fieldset.settings label {
497 padding: 2px;
500 fieldset.settings + div.formRow {
501 margin-top: 10px;
504 div.formRow {
505 clear: left;
506 display: block;
509 .filterTitle {
510 box-sizing: border-box;
511 cursor: pointer;
512 display: flex;
513 font-weight: bold;
514 gap: 4px;
515 overflow: hidden;
516 padding: 4px 0 4px 6px;
517 text-overflow: ellipsis;
518 text-transform: uppercase;
519 white-space: nowrap;
522 .filterTitle img {
523 box-sizing: border-box;
524 height: 16px;
525 padding: 2px;
526 width: 16px;
529 .collapsedCategory > ul {
530 display: none;
533 .collapsedCategory .categoryToggle,
534 .filterTitle img.rotate {
535 transform: rotate(-90deg);
538 ul.filterList * {
539 box-sizing: border-box;
542 ul.filterList {
543 margin: 0;
544 padding-left: 0;
547 ul.filterList span.link:hover :is(img, button),
548 ul.filterList .selectedFilter > .link :is(img, button) {
549 filter: var(--color-icon-hover);
552 ul.filterList span.link {
553 cursor: pointer;
554 display: flex;
555 gap: 5px;
556 overflow: hidden;
557 padding: 4px 6px;
558 white-space: nowrap;
561 ul.filterList span.link:hover {
562 background-color: var(--color-background-hover);
563 color: var(--color-text-white);
566 span.link :last-child {
567 min-width: 0;
568 overflow: hidden;
569 text-overflow: ellipsis;
570 white-space: nowrap;
573 span.link :is(img, button) {
574 flex-shrink: 0;
577 .selectedFilter > span.link {
578 background-color: var(--color-background-blue);
579 color: var(--color-text-white);
582 .subcategories,
583 .subcategories ul {
584 margin: 0;
585 padding: 0;
588 .subcategories .categoryToggle {
589 display: inline-block;
590 visibility: hidden;
593 .categoryToggle {
594 background: url("../images/go-down.svg") center center / 10px no-repeat
595 transparent;
596 border: none;
597 display: none;
598 height: 16px;
599 margin-right: -2px;
600 padding: 2px;
601 transition: transform 0.3s;
602 width: 16px;
605 td.generalLabel {
606 text-align: right;
607 vertical-align: top;
608 white-space: nowrap;
609 width: 1px;
612 .filesTableCollapseIcon {
613 cursor: pointer;
614 height: 15px;
615 margin-bottom: -3px;
616 padding-right: 5px;
617 width: 15px;
620 .filesTableCollapseIcon.rotate {
621 margin-bottom: -1px;
622 transform: rotate(270deg);
625 .unselectable {
626 -webkit-touch-callout: none;
627 user-select: none;
630 #propGeneral {
631 padding: 2px;
634 .piecesbarWrapper {
635 position: relative;
636 width: 100%;
639 .piecesbarCanvas {
640 height: 100%;
641 image-rendering: pixelated;
642 inset: 0;
643 position: absolute;
644 width: 100%;
647 #watched_folders_tab {
648 border-collapse: collapse;
651 #watched_folders_tab td,
652 #watched_folders_tab th {
653 border: 1px solid black;
654 padding: 2px 4px;
657 .select-watched-folder-editable {
658 border: solid grey 1px;
659 height: 20px;
660 position: relative;
661 width: 160px;
664 .select-watched-folder-editable select {
665 border: none;
666 bottom: 0px;
667 left: 0px;
668 margin: 0;
669 position: absolute;
670 top: 0px;
671 width: 160px;
674 .select-watched-folder-editable input {
675 border: none;
676 left: 0px;
677 padding: 1px;
678 position: absolute;
679 top: 0px;
680 width: 140px;
683 .select-watched-folder-editable select:focus,
684 .select-editable input:focus {
685 outline: none;
689 * Workaround to prevent the transfer list from
690 * disappearing when zooming in the browser.
692 #filtersColumn_handle {
693 margin-left: -1px;
696 .combo_priority {
697 font-size: 1em;
700 td.statusBarSeparator {
701 background-image: url("../images/toolbox-divider.gif");
702 background-position: center 1px;
703 background-repeat: no-repeat;
704 background-size: 2px 18px;
705 width: 22px;
708 /* Statistics window */
709 .statisticsValue {
710 text-align: right;
713 /* Search tab */
715 #SearchPanel,
716 #SearchPanel_wrapper,
717 #SearchPanel_pad {
718 height: inherit;
721 #searchResults {
722 height: 100%;
723 padding: 0 20px;
726 #searchResultsTableContainer {
727 height: calc(100% - 177px);
728 overflow: auto;
731 #searchResultsTableDiv {
732 height: calc(100% - 26px) !important;
735 #searchResults .dynamicTable {
736 width: 100%;
739 #searchResults .numSearchResults {
740 font-style: italic;
743 .red {
744 color: var(--color-text-red);
747 .green {
748 color: var(--color-text-green);
751 .searchPluginsTableRow {
752 cursor: pointer;
755 #torrentFilesTableDiv .dynamicTable tr.nonAlt:hover {
756 background-color: var(--color-background-hover);
757 color: var(--color-text-white);
760 /* Confirm deletion dialog */
762 #confirmDeletionPage * {
763 box-sizing: border-box;
766 #confirmDeletionPage_content {
767 display: flex !important; /* override for default mocha inline style */
768 flex-direction: column;
769 height: 100%;
772 #confirmDeletionPage_content > :last-child {
773 align-self: flex-end;
776 #confirmDeletionDialog {
777 margin: auto 0;
780 #rememberBtn {
781 background: url("../images/object-locked.svg") center center / 24px
782 no-repeat var(--color-background-popup);
783 height: 38px;
784 padding: 4px 6px;
785 width: 38px;
788 #rememberBtn.disabled {
789 filter: grayscale(100%);
792 #deleteFromDiskCB {
793 margin: 0 2px 0 0;
794 vertical-align: -1px;
797 #deleteTorrentMessage {
798 overflow-wrap: anywhere;
801 .confirmDeletionGrid {
802 align-items: center;
803 display: grid;
804 gap: 3px 4px;
805 grid-template-columns: max-content 1fr;
806 margin-bottom: 10px;
809 .deletionGridItem {
810 padding: 3px;
813 .deletionGridItem:first-child {
814 justify-self: center;
817 .confirmDialogWarning {
818 background: url("../images/dialog-warning.svg") center center no-repeat;
819 height: 38px;
820 width: 38px;