d394192f5012388a37f61a0bfb3a6545ac2c4dd9
[project/luci.git] / themes / luci-theme-openwrt-2020 / htdocs / luci-static / openwrt2020 / cascade.css
1 :root {
2 --main-bright-color: #00A3E1;
3 --main-dark-color: #002B49;
4 --secondary-bright-color: #FFFFFF;
5 --secondary-dark-color: #212322;
6 --danger-color: #CC1111;
7 --warning-color: #CC8800;
8 --regular-font: "GalanoGrotesqueW00-Regular";
9 --base-font-size: 16px;
10 }
11
12 @font-face {
13 font-family: "GalanoGrotesqueW00-Regular";
14 src: url("GalanoGrotesqueW00-Regular.woff2") format("woff2");
15 }
16
17 /*
18 * resets and base style
19 */
20
21 * {
22 margin: 0;
23 padding: 0;
24 box-sizing: border-box;
25 text-decoration: none;
26 list-style: none;
27 color: inherit;
28 font-family: var(--regular-font), "sans-serif";
29 border: none;
30 font-size: 100%;
31 background: none;
32 outline: none;
33 -webkit-appearance: none;
34 -webkit-text-size-adjust: none;
35 }
36
37 html {
38 height: 100%;
39 width: 100%;
40 max-width: 1366px;
41 margin: 0 auto;
42 background: #fff linear-gradient(90deg, rgba(0, 0, 0, .8), rgba(0, 0, 0 ,.5), rgba(0, 0, 0, .8));
43 }
44
45 body {
46 background: var(--secondary-bright-color);
47 color: var(--secondary-dark-color);
48 font-size: var(--base-font-size);
49 cursor: default;
50 display: inline-flex;
51 flex-direction: column;
52 min-height: 100%;
53 min-width: 100%;
54 }
55
56 /*
57 * scaffholding
58 */
59
60 #menubar {
61 background-color: var(--main-bright-color);
62 background-image: url("logo.svg");
63 background-position: 10px center;
64 background-size: 50px 50px;
65 background-repeat: no-repeat;
66 padding: 0 1em 0 70px;
67 min-height: 70px;
68 display: flex;
69 align-items: center;
70 color: var(--secondary-bright-color);
71 flex: 0;
72 width: 100%;
73 box-shadow: inset 0 0 1px var(--main-dark-color);
74 }
75
76 #menubar > * {
77 flex: 1 1 auto;
78 }
79
80 #menubar .hostname {
81 font-weight: bold;
82 font-size: 2em;
83 white-space: nowrap;
84 overflow: hidden;
85 text-overflow: ellipsis;
86 }
87
88 #menubar .distversion {
89 flex: 3;
90 }
91
92 #indicators {
93 flex: 1 1 25%;
94 text-align: right;
95 }
96
97 #indicators > * {
98 background: var(--secondary-bright-color);
99 color: var(--main-bright-color);
100 display: inline-block;
101 font-size: .85em;
102 line-height: 1.5em;
103 padding: 0 .5em;
104 margin: .125em;
105 border-radius: 1em;
106 cursor: pointer;
107 white-space: nowrap;
108 }
109
110 #indicators > [data-style="inactive"],
111 #indicators > * > #xhr_poll_status_off {
112 background: var(--main-bright-color);
113 color: var(--secondary-bright-color);
114 border: 2px solid var(--secondary-bright-color);
115 line-height: calc(1.5em - 4px);
116 padding: 0 calc(.5em - 2px);
117 }
118
119 #indicators > * > #xhr_poll_status_off {
120 border-radius: 1em;
121 margin: 0 -.5em;
122 display: block;
123 }
124
125 #menubar h2,
126 .skiplink {
127 display: none;
128 }
129
130 #modemenu {
131 background: var(--main-bright-color);
132 padding: .5rem 1rem;
133 display: flex;
134 align-items: center;
135 color: var(--secondary-bright-color);
136 box-shadow: inset 0 0 1px var(--main-dark-color);
137 font-size: 1rem;
138 flex-wrap: wrap;
139 }
140
141 #modemenu > * {
142 margin: .125rem;
143 }
144
145 #modemenu > .active {
146 font-weight: bold;
147 border-bottom: 2px solid var(--secondary-bright-color);
148 }
149
150 #maincontainer {
151 flex-direction: row;
152 display: inline-flex;
153 flex: 1 0 auto;
154 }
155
156 #mainmenu {
157 flex: 1 1 200px;
158 background: var(--main-dark-color);
159 color: var(--main-bright-color);
160 padding: 1em;
161 }
162
163 #mainmenu > div {
164 position: sticky;
165 top: 1em;
166 }
167
168 #mainmenu ul {
169 padding: 0;
170 margin: 0 0 .5em .5em;
171 line-height: 1.5em;
172 }
173
174 #mainmenu ul > li {
175 list-style: none;
176 }
177
178 #mainmenu li > ul {
179 max-height: 0;
180 overflow: hidden;
181 transition: max-height .1s ease-in-out;
182 }
183
184 #mainmenu li.selected > a {
185 color: var(--secondary-bright-color);
186 }
187
188 #mainmenu ul:not(.active) > li.selected > ul,
189 #mainmenu li.active > ul {
190 max-height: 3000px;
191 transition: max-height 1s ease-in-out;
192 }
193
194 #mainmenu .l1 > li > a {
195 font-weight: bold;
196 font-size: 1.05em;
197 }
198
199 #maincontent {
200 flex: 10;
201 padding: 1em 1em 0 1em;
202 }
203
204 body > .luci {
205 flex: 0;
206 font-size: .7em;
207 padding: .25em;
208 text-align: right;
209 background: var(--main-bright-color);
210 color: var(--secondary-bright-color);
211 margin: 0;
212 }
213
214 /*
215 * modal
216 */
217
218 body.modal-overlay-active {
219 overflow: hidden;
220 }
221
222 body.modal-overlay-active #modal_overlay {
223 left: 0;
224 right: 0;
225 opacity: 1;
226 }
227
228 #modal_overlay {
229 position: fixed;
230 top: 0;
231 bottom: 0;
232 left: -10000px;
233 right: 10000px;
234 background: rgba(0, 0, 0, 0.7);
235 z-index: 10000;
236 overflow-y: scroll;
237 -webkit-overflow-scrolling: touch;
238 transition: opacity .125s ease-in;
239 opacity: 0;
240 }
241
242 #modal_overlay > .modal {
243 max-width: 1300px;
244 width: 80%;
245 margin: 10% auto 5rem auto;
246 background: var(--secondary-bright-color);
247 box-shadow: 0 0 3px 1px var(--main-bright-color);
248 padding: .5em;
249 border-radius: .25em;
250 display: flex;
251 flex-direction: column;
252 }
253
254 .modal > h4:first-child {
255 padding: .5rem;
256 margin: -.5rem -.5rem .5rem -.5rem;
257 background: var(--main-bright-color);
258 color: var(--secondary-bright-color);
259 border-radius: .25rem .25rem 0 0;
260 }
261
262 .modal > *:first-child:last-child {
263 margin: .5em 0 !important;
264 }
265
266 .modal .cbi-section > legend:first-child { font-size: 120%; }
267
268
269 /*
270 * table layout
271 */
272
273 .table {
274 display: table;
275 width: 100%;
276 margin: 0 0 1rem 0;
277 position: relative;
278 }
279
280 .tr {
281 display: table-row;
282 }
283
284 .tr.cbi-section-table-titles[data-title]::before {
285 font-weight: bold;
286 border-top: none;
287 }
288
289 .tr[data-title]::before {
290 content: attr(data-title);
291 display: table-cell;
292 border-top: 1px solid var(--main-dark-color);
293 padding: .5em;
294 }
295
296 .th {
297 font-weight: bold;
298 display: table-cell;
299 padding: .5em;
300 /* word-break: break-word; */
301 }
302
303 .cbi-section-table-descr .th {
304 opacity: .8;
305 font-size: 90%;
306 font-weight: normal;
307 }
308
309 .td {
310 display: table-cell;
311 border-top: 1px solid var(--main-dark-color);
312 padding: .5em;
313 vertical-align: middle;
314 }
315
316 .td input:not([type]),
317 .td input[type="text"],
318 .td input[type="password"],
319 .td select,
320 .td .cbi-dropdown:not(.btn):not(.cbi-button),
321 .td .cbi-dynlist {
322 min-width: auto;
323 width: 100%;
324 }
325
326 .tr.drag-over-above {
327 box-shadow: 0 -6px 6px var(--main-bright-color);
328 }
329
330 .tr.drag-over-below {
331 box-shadow: 0 6px 6px var(--main-bright-color);
332 }
333
334 .tr.placeholder {
335 height: 4em;
336 position: relative;
337 }
338
339 .tr.placeholder > .td {
340 position: absolute;
341 left: 0;
342 right: 0;
343 bottom: 0;
344 text-align: center;
345 line-height: 3em;
346 font-size: 90%;
347 opacity: .8;
348 }
349
350 /*
351 * view specific table invariants
352 */
353
354 #cbi-wireless-wifi-device .ifacebadge {
355 flex-direction: column;
356 justify-content: space-around;
357 }
358
359 .assoclist .td,
360 [data-page="admin-status-overview"] .td {
361 font-size: .9rem;
362 vertical-align: middle;
363 }
364
365 .assoclist .td:nth-of-type(3) > span {
366 display: block;
367 max-width: 270px;
368 font-size: .8rem;
369 }
370
371 .assoclist .td:nth-of-type(5) > span {
372 font-size: .8rem;
373 }
374
375 .assoclist .td > .ifacebadge {
376 flex-wrap: wrap;
377 justify-content: space-around;
378 max-width: 120px;
379 padding: .2em;
380 }
381
382 .assoclist .td > .ifacebadge::after {
383 overflow: hidden;
384 text-overflow: ellipsis;
385 }
386
387 .assoclist .td > .ifacebadge > img {
388 margin: 0 25px;
389 }
390
391 .assoclist .td > .ifacebadge[data-ssid][data-ifname] > span {
392 display: none;
393 }
394
395 .assoclist .td > .ifacebadge[data-ssid][data-ifname]::after {
396 content: attr(data-ssid) " (" attr(data-ifname) ")";
397 }
398
399 [data-page="admin-status-overview"] .td:nth-of-type(3) {
400 min-width: 100px;
401 }
402
403 [data-page="admin-network-firewall"] .table > .tr > *:nth-child(1) {
404 flex: 1 1 30%;
405 }
406
407 [data-page="admin-network-wireless"] .cbi-section-actions > div {
408 display: flex;
409 }
410
411 [data-page="admin-network-wireless"] .cbi-section-actions > div > * {
412 flex: 1;
413 }
414
415 [data-page="admin-status-processes"] .table .td:nth-of-type(3),
416 [data-tab="leases"] .table .td[data-name="duid"] {
417 word-break: break-word;
418 }
419
420 /*
421 * uci changelog
422 */
423
424 .uci-change-list {
425 font-size: 90%;
426 white-space: pre;
427 overflow: hidden;
428 }
429
430 .uci-change-list del,
431 .uci-change-list ins,
432 .uci-change-list var,
433 .uci-change-legend-label del,
434 .uci-change-legend-label ins,
435 .uci-change-legend-label var {
436 text-decoration: none;
437 font-family: monospace;
438 font-style: normal;
439 border: 1px solid #ccc;
440 background: #eee;
441 padding: 2px;
442 display: block;
443 line-height: 15px;
444 margin-bottom: 1px;
445 }
446
447 .uci-change-list h5 {
448 margin: .5em 0 .25em 0;
449 }
450
451 .uci-change-list ins,
452 .uci-change-legend-label ins {
453 border-color: #0f0;
454 background: #cfc;
455 }
456
457 .uci-change-list del,
458 .uci-change-legend-label del {
459 border-color: #f00;
460 background: #fcc;
461 }
462
463 .uci-change-list var,
464 .uci-change-legend-label var {
465 border-color: #ccc;
466 background: #eee;
467 }
468
469 .uci-change-list var ins,
470 .uci-change-list var del {
471 display: inline-block;
472 border: none;
473 width: 100%;
474 padding: 0;
475 }
476
477 .uci-change-legend {
478 margin: .5em 0 0 0;
479 display: flex;
480 flex-wrap: wrap;
481 }
482
483 .uci-change-legend-label {
484 flex: 1 1 10em;
485 white-space: nowrap;
486 }
487
488 .uci-change-legend-label > ins,
489 .uci-change-legend-label > del,
490 .uci-change-legend-label > var {
491 float: left;
492 margin-right: 4px;
493 width: 16px;
494 height: 16px;
495 display: block;
496 position: relative;
497 }
498
499 .uci-change-legend-label var ins,
500 .uci-change-legend-label var del {
501 border: none;
502 position: absolute;
503 top: 2px;
504 left: 2px;
505 right: 2px;
506 bottom: 2px;
507 }
508
509 /*
510 * alignment helpers
511 */
512
513 .left {
514 text-align: left !important;
515 }
516
517 .right {
518 text-align: right !important;
519 }
520
521 .center {
522 text-align: center !important;
523 }
524
525 .top {
526 vertical-align: top !important;
527 }
528
529 .bottom {
530 vertical-align: bottom !important;
531 }
532
533 .middle {
534 vertical-align: middle !important;
535 }
536
537 .nowrap {
538 white-space: nowrap !important;
539 }
540
541 .hidden {
542 display: none !important;
543 }
544
545 /*
546 * legacy hacks
547 */
548
549 [width="33%"] {
550 width: 33%;
551 max-width: 33%;
552 }
553
554 [width="50%"] {
555 width: 50%;
556 max-width: 50%;
557 }
558
559 [data-name="_freq"] select {
560 min-width: auto;
561 }
562
563 .cbi-value-field > div:first-child + br {
564 display: none;
565 }
566
567 /*
568 * typography
569 */
570
571 h1, h2, h3, h4, h5, h6,
572 .cbi-section > legend:first-child {
573 font-weight: bold;
574 margin: 0 0 1rem 0;
575 }
576
577 strong, b {
578 font-weight: bold;
579 }
580
581 h1 { font-size: 160%; }
582 h2 { font-size: 150%; }
583 h3 { font-size: 140%; }
584 h4 { font-size: 130%; }
585 h5 { font-size: 120%; }
586 h6 { font-size: 110%; }
587
588 .cbi-section > legend:first-child { font-size: 140%; }
589
590 p, ul, textarea {
591 margin: 0 0 1em 0;
592 }
593
594 p > textarea:last-child {
595 margin: 0;
596 }
597
598 var {
599 color: var(--main-dark-color);
600 font-weight: bold;
601 }
602
603 code {
604 font-family: monospace;
605 color: var(--main-dark-color);
606 }
607
608 pre {
609 font-family: monospace;
610 margin: 0 0 1em 0;
611 font-size: .9rem;
612 box-shadow: inset 0 0 2px var(--main-dark-color);
613 padding: .25rem;
614 overflow: auto;
615 }
616
617 big {
618 font-size: 110%;
619 }
620
621 small {
622 font-size: 95%;
623 }
624
625 ul {
626 padding: 0 0 0 1.5em;
627 }
628
629 ul > li {
630 list-style: disc;
631 }
632
633 /*
634 * widgets
635 */
636
637 .ifacebox, .ifacebadge, .zonebadge {
638 display: inline-flex;
639 line-height: 1.8em;
640 padding: 0 .25em;
641 margin: .25em;
642 box-shadow: 0px 0px 2px var(--main-dark-color);
643 font-size: .9em;
644 border-radius: .5em;
645 overflow: hidden;
646 font-size: .8rem;
647 vertical-align: text-top;
648 background: var(--secondary-bright-color);
649 align-items: center;
650 color: var(--secondary-dark-color);
651 vertical-align: middle;
652 }
653
654 .zonebadge > .ifacebadge {
655 margin: .125em -.125em .125em .35em;
656 }
657
658 .zonebadge > .ifacebadge > img
659 {
660 margin: .125em 0 .125em .25em;
661 }
662
663 .ifacebox {
664 display: inline-flex;
665 flex-direction: column;
666 padding: 0;
667 text-align: center;
668 width: 100%;
669 max-width: 100px;
670 }
671
672 .ifacebox-head {
673 background: var(--main-bright-color);
674 width: 100%;
675 }
676
677 .ifacebox-body {
678 text-align: center;
679 padding: .3em .25em .25em .25em;
680 white-space: nowrap;
681 }
682
683 .ifacebadge {
684 display: inline-flex;
685 align-items: center;
686 }
687
688 .ifacebadge.large {
689 line-height: 1.3em;
690 }
691
692 .ifacebadge > img {
693 vertical-align: text-bottom;
694 margin: .25em;
695 height: 16px;
696 }
697
698 .ifacebadge > * {
699 margin-left: .25em;
700 }
701
702 .network-status-table {
703 display: inline-flex;
704 flex-wrap: wrap;
705 width: 100%;
706 margin: 0 -.2em 1em -.2em;
707 }
708
709 .network-status-table > .ifacebox {
710 max-width: none;
711 flex: 1 1 45%;
712 margin: .25em;
713 min-width: 250px;
714 }
715
716 .network-status-table > .ifacebox .ifacebadge {
717 font-size: 100%;
718 max-width: none;
719 flex: 1 1 45%;
720 margin: .2em;
721 }
722
723 .network-status-table .ifacebox-body > div {
724 display: flex;
725 flex-wrap: wrap;
726 margin: .3em -.1em -.1em -.1em;
727 }
728
729 .cbi-tooltip-container {
730 cursor: help;
731 }
732
733 .cbi-tooltip {
734 position: absolute;
735 z-index: 10000;
736 left: -10000px;
737 box-shadow: 0 0 2px rgba(0, 0, 0, .7);
738 border-radius: 3px;
739 background: var(--secondary-bright-color);
740 white-space: pre;
741 padding: 2px 5px;
742 opacity: 0;
743 transition: opacity .25s ease-in;
744 font-size: .8rem;
745 }
746
747 .cbi-tooltip.error {
748 color: var(--danger-color);
749 }
750
751 .cbi-tooltip-container:hover .cbi-tooltip:not(:empty) {
752 left: auto;
753 opacity: 1;
754 transition: opacity .25s ease-in;
755 }
756
757 .zone-forwards {
758 display: flex;
759 align-items: center;
760 }
761
762 .cbi-progressbar {
763 border-radius: .25em;
764 position: relative;
765 min-width: 20rem;
766 height: 1.5em;
767 box-shadow: 0 0 2px var(--main-dark-color);
768 overflow: hidden;
769 margin: .125rem 0;
770 }
771
772 .cbi-progressbar > div {
773 background: var(--main-bright-color);
774 height: 100%;
775 transition: width .25s ease-in;
776 width: 0%;
777 }
778
779 .cbi-progressbar::after {
780 position: absolute;
781 bottom: 0;
782 top: 0;
783 right: 0;
784 left: 0;
785 text-align: center;
786 text-shadow: 0 0 2px var(--secondary-bright-color);
787 content: attr(title);
788 white-space: nowrap;
789 line-height: 1.5em;
790 }
791
792 .cbi-tabmenu {
793 padding: 0;
794 margin: 0 -.5em 1em -.5em;
795 font-weight: bold;
796 color: var(--main-dark-color);
797 }
798
799 .cbi-tabmenu > li {
800 display: inline-flex;
801 white-space: nowrap;
802 opacity: 1;
803 height: 1.8em;
804 max-height: none;
805 }
806
807 .cbi-tabmenu > li > a {
808 flex: 1;
809 margin: .1em .5em;
810 }
811
812 .cbi-tabmenu > .cbi-tab > a {
813 border-bottom: 2px solid var(--main-dark-color);
814 }
815
816 [data-tab] {
817 opacity: 0;
818 max-height: 0;
819 transition: opacity .25s ease-in-out;
820 overflow: hidden;
821 }
822
823 [data-tab-active="true"] {
824 opacity: 1;
825 height: auto;
826 max-height: none;
827 overflow: visible;
828 }
829
830 .alert-message:not(.modal) {
831 box-shadow: 0 0 3px var(--secondary-dark-color);
832 padding: .5em;
833 margin: 0 0 1em 0;
834 background: var(--warning-color);
835 color: var(--secondary-bright-color);
836 transition: opacity .4s ease;
837 }
838
839 .alert-message + .alert-message {
840 margin: -.5em 0 1em 0;
841 }
842
843 .alert-message.info {
844 background: var(--main-bright-color);
845 }
846
847 .alert-message.warning {
848 background: var(--warning-color);
849 }
850
851 .alert-message.danger {
852 background: var(--danger-color);
853 }
854
855 .alert-message .btn {
856 background: inherit;
857 box-shadow: 0 0 2px var(--secondary-bright-color);
858 }
859
860 .alert-message .btn:hover {
861 box-shadow: 0 0 4px 1px var(--secondary-bright-color);
862 }
863
864 @keyframes fade-in {
865 0% { opacity: 0; }
866 100% { opacity: 1; }
867 }
868
869 @keyframes fade-out {
870 0% { opacity: 1; }
871 100% { opacity: 0; }
872 }
873
874 .fade-in {
875 animation: fade-in .4s ease;
876 }
877
878 .fade-out {
879 animation: fade-out .4s ease;
880 opacity: 0;
881 }
882
883 /*
884 * forms
885 */
886
887 button, .btn {
888 background: var(--main-bright-color);
889 color: var(--secondary-bright-color);
890 line-height: 1.5em;
891 border-radius: .25em;
892 cursor: pointer;
893 box-shadow: 0 0 2px var(--main-dark-color);
894 padding: 0 .5em;
895 display: inline-block;
896 }
897
898 button:hover, .btn:hover {
899 box-shadow: 0 0 6px var(--main-bright-color);
900 }
901
902 button + button, .btn + .btn, button + .btn, .btn + button, select + button {
903 margin-left: .25em;
904 }
905
906 button.important {
907 background: var(--main-dark-color);
908 }
909
910 button[disabled], button.disabled, .btn[disabled], .btn.disabled {
911 pointer-events: none;
912 opacity: .5;
913 }
914
915 .cbi-button-apply, .cbi-button-positive {
916 background: var(--main-dark-color);
917 }
918
919 .cbi-button-negative, .cbi-button-remove {
920 background: var(--danger-color);
921 }
922
923 .cbi-checkbox input[type="checkbox"] {
924 display: none;
925 }
926
927 .cbi-checkbox input[type="checkbox"] + label {
928 position: relative;
929 display: inline-block;
930 width: 1.3em;
931 height: 1.3em;
932 vertical-align: text-top;
933 }
934
935 .cbi-checkbox input[type="checkbox"] + label::before {
936 content: "\0a";
937 height: 1em;
938 width: 1em;
939 box-shadow: 0 0 2px var(--main-dark-color);
940 display: inline-block;
941 border-radius: .25em;
942 margin: .15em 0;
943 position: absolute;
944 left: 0;
945 top: 0;
946 cursor: pointer;
947 }
948
949 .cbi-checkbox input[type="checkbox"]:checked + label::after {
950 content: "\0a";
951 position: absolute;
952 display: inline-block;
953 background: var(--main-dark-color);
954 top: .35em;
955 left: .2em;
956 width: .6em;
957 height: .6em;
958 border-radius: .15em;
959 cursor: pointer;
960 }
961
962 input:not([type]),
963 input[type="text"],
964 input[type="password"],
965 select,
966 .cbi-dropdown:not(.btn):not(.cbi-button) {
967 border-bottom: 2px solid transparent;
968 box-shadow: inset 0 0 1px var(--main-dark-color);
969 padding: 0 .2rem;
970 line-height: 1.5rem;
971 min-height: calc(1.5rem + 2px);
972 min-width: 20rem;
973 border-radius: .25em;
974 }
975
976 input:not([type]):focus,
977 input[type="text"]:focus,
978 input[type="password"]:focus,
979 select:focus,
980 .cbi-dropdown:not(.btn):not(.cbi-button):focus,
981 .cbi-dropdown[open]:not(.btn):not(.cbi-button) {
982 border-color: var(--main-dark-color);
983 }
984
985 input:not([type]) + .btn, input:not([type]) + button,
986 input[type="text"] + .btn, input[type="text"] + button,
987 input[type="password"] + .btn, input[type="password"] + button {
988 margin: 0 0 2px -1px;
989 background: var(--main-dark-color);
990 border-radius: 0 .25em .25em 0;
991 }
992
993 .control-group > select + .btn, .control-group > select + button, {
994 margin-left: .25em;
995 }
996
997 .control-group > input:not([type]) + .btn, .control-group > input:not([type]) + button,
998 .control-group > input[type="text"] + .btn, .control-group > input[type="text"] + button,
999 .control-group > input[type="password"] + .btn, .control-group > input[type="password"] + button {
1000 margin: .125em .125em calc(.125em + 2px) calc(-.125em - .25em) !important;
1001 }
1002
1003 input[type="checkbox"] {
1004 height: 1em;
1005 vertical-align: middle;
1006 -webkit-appearance: checkbox;
1007 }
1008
1009 select {
1010 padding: .1rem 0;
1011 -webkit-appearance: menulist;
1012 }
1013
1014 textarea {
1015 width: 100%;
1016 box-shadow: inset 0 0 2px var(--main-dark-color);
1017 font-family: monospace;
1018 font-size: .9rem;
1019 padding: .2rem;
1020 }
1021
1022 .cbi-input-invalid,
1023 .cbi-input-invalid:focus {
1024 color: var(--danger-color);
1025 border-color: var(--danger-color) !important;
1026 box-shadow: inset 0 0 2px var(--danger-color);
1027 }
1028
1029 .control-group {
1030 display: inline-flex;
1031 margin: 0 -.125rem;
1032 }
1033
1034 .control-group > *,
1035 .control-group > .cbi-dropdown > ul > li {
1036 justify-content: space-around;
1037 }
1038
1039 .control-group > * {
1040 margin: .125rem !important;
1041 min-width: auto;
1042 }
1043
1044 .control-group > select,
1045 .control-group > input:not([type]),
1046 .control-group > input[type="text"] {
1047 flex: 10;
1048 }
1049
1050 .cbi-value {
1051 display: flex;
1052 flex-wrap: wrap;
1053 margin: 0 0 1em 0;
1054 }
1055
1056 .cbi-value > label:first-child {
1057 flex: 1 1 40%;
1058 padding: 0 .5em 0 0;
1059 }
1060
1061 .cbi-value > .cbi-value-field {
1062 flex: 2 2 55%;
1063 }
1064
1065 .cbi-value > .cbi-section {
1066 flex: 1 1 100%;
1067 }
1068
1069 .cbi-map-descr,
1070 .cbi-tab-descr,
1071 .cbi-section-descr,
1072 .cbi-value-description,
1073 .cbi-value[data-widget="CBI.DummyValue"] > div:first-child {
1074 opacity: .8;
1075 font-size: .9rem;
1076 padding: .2em 0;
1077 }
1078
1079 .cbi-map-descr,
1080 .cbi-tab-descr,
1081 .cbi-section-descr,
1082 .cbi-section-table,
1083 .cbi-section-create {
1084 margin: 0 0 1em 0;
1085 }
1086
1087 .cbi-dynlist {
1088 display: inline-block;
1089 font-size: 90%;
1090 min-height: calc(1.5em + 2px);
1091 line-height: 1.5em;
1092 min-width: 20rem;
1093 flex-wrap: wrap;
1094 }
1095
1096 .cbi-dynlist > .item {
1097 box-shadow: 0 0 2px var(--main-dark-color);
1098 margin: .3em 0;
1099 padding: .15em .2em;
1100 border-radius: .25em;
1101 position: relative;
1102 overflow: hidden;
1103 transition: box-shadow .25s ease-in-out;
1104 pointer-events: none;
1105 flex: 1 1 100%;
1106 }
1107
1108 .cbi-dynlist > .item::after {
1109 content: "-";
1110 top: 0;
1111 right: 0;
1112 bottom: 0;
1113 width: 1.6rem;
1114 background: var(--main-bright-color);
1115 display: flex;
1116 align-items: center;
1117 justify-content: space-around;
1118 position: absolute;
1119 box-shadow: 0 0 2px var(--main-dark-color);
1120 text-align: center;
1121 color: var(--secondary-bright-color);
1122 cursor: pointer;
1123 pointer-events: all;
1124 }
1125
1126 .cbi-dynlist > .item:hover {
1127 box-shadow: 0 0 2px var(--main-bright-color);
1128 }
1129
1130 .cbi-dynlist > .add-item {
1131 flex: 1;
1132 display: flex;
1133 }
1134
1135 .cbi-dynlist > .add-item > input {
1136 flex: 1;
1137 min-width: 18.5rem;
1138 border-radius: .25rem 0 0 .25rem;
1139 }
1140
1141 .cbi-dynlist > .add-item > .btn {
1142 flex: 0 0 1.6rem;
1143 margin: 0 0 2px -1px;
1144 width: 1.6rem;
1145 text-align: center;
1146 }
1147
1148 .cbi-dropdown {
1149 display: inline-flex !important;
1150 cursor: pointer;
1151 height: auto;
1152 position: relative;
1153 padding: 0 !important;
1154 }
1155
1156 .cbi-dropdown:not(.btn):not(.cbi-button) {
1157 box-shadow: inset 0 0 1px var(--main-dark-color);
1158 }
1159
1160 .cbi-dropdown > ul {
1161 margin: 0 !important;
1162 padding: 0;
1163 list-style: none;
1164 overflow-x: hidden;
1165 overflow-y: auto;
1166 display: flex;
1167 width: 100%;
1168 }
1169
1170 .cbi-dropdown.btn > ul:not(.dropdown) {
1171 padding-left: .5em;
1172 }
1173
1174 .cbi-dropdown.btn.spinning > ul:not(.dropdown) {
1175 padding-left: 0;
1176 }
1177
1178 .cbi-dropdown.btn > ul.dropdown > li {
1179 color: var(--main-dark-color);
1180 }
1181
1182 .cbi-dropdown > ul.preview {
1183 display: none;
1184 }
1185
1186 .cbi-dropdown > .open,
1187 .cbi-dropdown > .more {
1188 flex-grow: 0;
1189 flex-shrink: 0;
1190 display: flex;
1191 flex-direction: column;
1192 justify-content: center;
1193 text-align: center;
1194 padding: 0 .25em;
1195 }
1196
1197 .cbi-dropdown.btn > .open,
1198 .cbi-dropdown.cbi-button > .open {
1199 padding: 0 .5em;
1200 margin-left: .5em;
1201 border-left: 1px solid;
1202 }
1203
1204 .cbi-dropdown > .more,
1205 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] {
1206 display: none;
1207 justify-content: center;
1208 color: rgba(0, 0, 0, .5);
1209 }
1210
1211 .cbi-dropdown > ul > li {
1212 display: none;
1213 white-space: nowrap;
1214 overflow: hidden;
1215 text-overflow: ellipsis;
1216 flex-shrink: 1;
1217 flex-grow: 1;
1218 align-items: center;
1219 align-self: center;
1220 color: inherit;
1221 }
1222
1223 .cbi-dropdown > ul.dropdown > li,
1224 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li {
1225 padding: 0 .25em;
1226 }
1227
1228 .cbi-dropdown > ul > li .hide-open { display: block; display: initial; }
1229 .cbi-dropdown > ul > li .hide-close { display: none; }
1230
1231 .cbi-dropdown > ul > li[display]:not([display="0"]) {
1232 border-left: 1px solid #ccc;
1233 }
1234
1235 .cbi-dropdown[empty] > ul {
1236 max-width: 1px;
1237 max-height: 1.5em;
1238 }
1239
1240 .cbi-dropdown > ul > li > form {
1241 display: none;
1242 margin: 0;
1243 padding: 0;
1244 pointer-events: none;
1245 }
1246
1247 .cbi-dropdown > ul > li img {
1248 align-self: center;
1249 margin-right: .25em;
1250 }
1251
1252 .cbi-dropdown > ul > li input[type="text"] {
1253 margin: .25em 0;
1254 border: none;
1255 background: var(--secondary-bright-color);
1256 }
1257
1258 .cbi-dropdown[open] {
1259 position: relative;
1260 }
1261
1262 .cbi-dropdown[open] > ul.dropdown {
1263 display: block;
1264 background: var(--secondary-bright-color);
1265 box-shadow: 0 0 1px var(--main-dark-color), 0 0 4px rgba(0, 0, 0, .7);
1266 position: absolute;
1267 z-index: 1100;
1268 max-width: none;
1269 min-width: 100%;
1270 width: auto;
1271 transition: max-height .125s ease-in;
1272 }
1273
1274 .cbi-dropdown > ul > li[display],
1275 .cbi-dropdown[open] > ul.preview,
1276 .cbi-dropdown[open] > ul.dropdown > li,
1277 .cbi-dropdown[multiple] > ul > li > label,
1278 .cbi-dropdown[multiple][open] > ul.dropdown > li,
1279 .cbi-dropdown[multiple][more] > .more,
1280 .cbi-dropdown[multiple][empty] > .more {
1281 flex-grow: 1;
1282 display: flex !important;
1283 }
1284
1285 .cbi-dropdown[empty] > ul > li,
1286 .cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
1287 .cbi-dropdown[multiple][open] > ul.dropdown > li > form {
1288 display: block !important;
1289 }
1290
1291 .cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; }
1292 .cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block; display: initial; }
1293
1294 .cbi-dropdown[open] > ul.dropdown > li {
1295 border-bottom: 1px solid #ccc;
1296 }
1297
1298 .cbi-dropdown[open] > ul.dropdown > li[selected] {
1299 background: var(--main-dark-color);
1300 color: var(--secondary-bright-color);
1301 }
1302
1303 .cbi-dropdown[open] > ul.dropdown > li.focus {
1304 background: var(--main-bright-color);
1305 }
1306
1307 .cbi-dropdown[open] > ul.dropdown > li:last-child {
1308 margin-bottom: 0;
1309 border-bottom: none;
1310 }
1311
1312 .cbi-dropdown[open] > ul.dropdown > li[unselectable] {
1313 opacity: 0.7;
1314 }
1315
1316 .cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child {
1317 width: 100%;
1318 }
1319
1320 .cbi-dropdown[disabled] {
1321 pointer-events: none;
1322 opacity: .6;
1323 }
1324
1325 .cbi-filebrowser {
1326 max-width: 100%;
1327 width: 1px;
1328 box-shadow: 0 0 2px var(--main-dark-color);
1329 border-radius: .25rem;
1330 display: flex;
1331 flex-direction: column;
1332 opacity: 0;
1333 height: 0;
1334 overflow: hidden;
1335 }
1336
1337 .cbi-filebrowser.open {
1338 min-width: 20rem;
1339 width: auto;
1340 opacity: 1;
1341 height: auto;
1342 overflow: visible;
1343 transition: opacity .25s ease-in;
1344 }
1345
1346 .cbi-filebrowser > * {
1347 max-width: 100%;
1348 overflow: hidden;
1349 text-overflow: ellipsis;
1350 padding: 0 0 .25em 0;
1351 margin: .25em .25em 0px .25em;
1352 white-space: nowrap;
1353 border-bottom: 1px solid var(--main-dark-color);
1354 }
1355
1356 .cbi-filebrowser .cbi-button-positive {
1357 margin-right: .25em;
1358 }
1359
1360 .cbi-filebrowser > div {
1361 border-bottom: none;
1362 }
1363
1364 .cbi-filebrowser > ul > li {
1365 display: flex;
1366 flex-direction: row;
1367 align-items: center;
1368 }
1369
1370 .cbi-filebrowser > ul > li a:hover {
1371 font-weight: bold;
1372 text-decoration: underline;
1373 }
1374
1375 .cbi-filebrowser > ul > li > div:first-child {
1376 flex: 10;
1377 overflow: hidden;
1378 text-overflow: ellipsis;
1379 }
1380
1381 .cbi-filebrowser > ul > li > div:last-child {
1382 flex: 3 3 10em;
1383 text-align: right;
1384 }
1385
1386 .cbi-filebrowser > ul > li > div:last-child > button {
1387 padding: .125em .25em;
1388 margin: 1px 0 1px .25em;
1389 }
1390
1391 .cbi-filebrowser .upload {
1392 display: flex;
1393 flex-direction: row;
1394 flex-wrap: wrap;
1395 margin: 0 -.125em .25em -.125em;
1396 padding: 0 0 .125em 0px;
1397 border-bottom: 1px solid var(--main-dark-color);
1398 }
1399
1400 .cbi-filebrowser .upload > * {
1401 margin: .125em;
1402 flex: 1;
1403 }
1404
1405 .cbi-filebrowser .upload > div > input {
1406 width: 100%;
1407 }
1408
1409 .cbi-section-actions {
1410 text-align: right;
1411 }
1412
1413 .cbi-page-actions {
1414 flex-wrap: wrap;
1415 width: 100%;
1416 justify-content: flex-end;
1417 margin-bottom: 1em;
1418 margin-top: 1em;
1419 border-top: 1px solid var(--main-dark-color);
1420 padding-top: 1em;
1421 text-align: right;
1422 }
1423
1424 div[id$=".ipaddr"] > input,
1425 .cbi-value-field > div > input[type="password"] {
1426 min-width: 18.5rem;
1427 border-radius: .25rem 0 0 .25rem;
1428 }
1429
1430 div[id$=".txpower"] {
1431 flex-wrap: wrap;
1432 align-items: center;
1433 }
1434
1435 div[id$=".txpower"] > span {
1436 white-space: nowrap;
1437 margin-left: .25em;
1438 }
1439
1440 div[id$=".editlist"] {
1441 flex: 1;
1442 }
1443
1444 [data-errors]::after {
1445 content: attr(data-errors);
1446 background: var(--danger-color);
1447 color: var(--secondary-bright-color);
1448 border-radius: .6rem;
1449 height: 1.1rem;
1450 padding: 0 .25rem;
1451 font-size: .9rem;
1452 display: inline-block;
1453 font-weight: bold;
1454 min-width: .6rem;
1455 line-height: 1rem;
1456 margin: -.1rem 0 0 -.2rem;
1457 text-align: center;
1458 }
1459
1460 @keyframes spin {
1461 100% { transform: rotate(360deg); }
1462 }
1463
1464 .spinning {
1465 position: relative;
1466 padding-left: 2.1em !important;
1467 }
1468
1469 .spinning::before {
1470 position: absolute;
1471 display: block;
1472 align-items: center;
1473 top: 0;
1474 bottom: 0;
1475 left: .4em;
1476 width: 1.3em;
1477 height: 1.3em;
1478 animation: spin 1s linear infinite;
1479 content: url("spinner.svg");
1480 margin: auto;
1481 }
1482
1483 button.spinning, .btn.spinning {
1484 padding-left: 1.6em !important;
1485 }
1486
1487 button.spinning::before, .btn.spinning::before {
1488 filter: invert(1);
1489 left: .2em;
1490 width: 1.2em;
1491 height: 1.2em;
1492 }
1493
1494 #view > div.spinning:first-child {
1495 padding: .5em 0;
1496 }
1497
1498 #view > *:last-child {
1499 margin: 0 0 1em 0;
1500 }
1501
1502 .label {
1503 background: var(--main-bright-color);
1504 color: var(--secondary-bright-color);
1505 font-size: .8rem;
1506 padding: 0 .4rem;
1507 border-radius: .5rem;
1508 }
1509
1510 .label.warning {
1511 background: var(--danger-color);
1512 }
1513
1514 ul.deps {
1515 margin: 0;
1516 padding: 0;
1517 font-size: .9rem;
1518 }
1519
1520 ul.errors {
1521 margin: 0 0 1em 0;
1522 padding: 0;
1523 }
1524
1525 @media only screen and (max-width: 800px) {
1526 body {
1527 padding-top: 70px;
1528 }
1529
1530 #maincontent {
1531 padding: .25em;
1532 max-width: 100vw;
1533 }
1534
1535 #menubar {
1536 background: var(--main-bright-color);
1537 padding: 0 .5em;
1538 position: fixed;
1539 top: 0;
1540 z-index: 1000;
1541 }
1542
1543 #menubar > h2 {
1544 flex: 0 0 2em;
1545 display: block;
1546 border: 2px solid var(--secondary-bright-color);
1547 color: var(--secondary-bright-color);
1548 border-radius: .5em;
1549 cursor: pointer;
1550 font-size: 100%;
1551 margin: 0 1em 0 0;
1552 }
1553
1554 #menubar > h2:hover {
1555 border-color: var(--secondary-bright-color);
1556 color: var(--secondary-bright-color);
1557 }
1558
1559 #menubar > h2 > * {
1560 display: none;
1561 }
1562
1563 #menubar > h2::before {
1564 content: "☰";
1565 width: 35px;
1566 line-height: 35px;
1567 text-align: center;
1568 display: inline-block;
1569 color: inherit;
1570 font-weight: bold;
1571 }
1572
1573 #menubar > h2.active::before {
1574 content: "×";
1575 font-size: 200%;
1576 }
1577
1578 #menubar .hostname {
1579 font-size: 1.6em;
1580 }
1581
1582 .distversion {
1583 display: none;
1584 }
1585
1586 #modemenu {
1587 padding: .125em .25em;
1588 }
1589
1590 #mainmenu {
1591 overflow-x: hidden;
1592 overflow-y: auto;
1593 max-width: 0;
1594 padding: 1em 0;
1595 transition: max-width .25s ease-in-out, padding .25s ease-in-out;
1596 position: fixed;
1597 z-index: 900;
1598 height: 100%;
1599 }
1600
1601 #mainmenu.active {
1602 max-width: 200px;
1603 padding: 1em 1em calc(1em + 70px) 1em;
1604 overflow-x: visible;
1605 }
1606
1607 #mainmenu > div {
1608 position: static;
1609 }
1610
1611 #mainmenu ul > li {
1612 padding: .25em 0;
1613 }
1614
1615 .hide-xs {
1616 display: none !important;
1617 }
1618
1619 .table {
1620 display: flex;
1621 flex-direction: column;
1622 }
1623
1624 .tr {
1625 display: block;
1626 border-bottom: 1px solid var(--main-dark-color);
1627 margin-bottom: .5em;
1628 padding-bottom: .5em;
1629 }
1630
1631 .tr.cbi-section-table-titles[data-title]::before,
1632 .tr.cbi-section-table-titles,
1633 .tr.cbi-section-table-descr {
1634 display: none;
1635 }
1636
1637 .tr[data-title]::before {
1638 display: block;
1639 font-weight: bold;
1640 border-top: none;
1641 padding: .4em 0;
1642 font-size: 110%;
1643 }
1644
1645 .td {
1646 display: block;
1647 border-top: none;
1648 text-align: left !important;
1649 padding: .2em 0;
1650 }
1651
1652 .th, .table-titles {
1653 display: none;
1654 }
1655
1656 .td[data-title] {
1657 position: relative;
1658 padding: .2em 0 .2em 40%;
1659 }
1660
1661 .td[data-title]::before {
1662 content: attr(data-title) ": ";
1663 white-space: nowrap;
1664 font-weight: bold;
1665 width: 40%;
1666 overflow: hidden;
1667 text-overflow: ellipsis;
1668 position: absolute;
1669 left: 0;
1670 top: 0;
1671 bottom: 0;
1672 padding: .2em 0;
1673 text-align: left;
1674 display: inline-flex;
1675 align-items: center;
1676 }
1677
1678 .td[data-title]::after {
1679 content: "";
1680 width: 2em;
1681 position: absolute;
1682 left: calc(40% - 2em);
1683 top: 0;
1684 bottom: 0;
1685 display: block;
1686 background: linear-gradient(90deg, rgba(255, 255, 255, 0), var(--secondary-bright-color) 90%);
1687 }
1688
1689 [data-page="admin-status-overview"] .cbi-section:nth-of-type(1) .td:first-of-type,
1690 [data-page="admin-status-overview"] .cbi-section:nth-of-type(2) .td:first-of-type {
1691 font-weight: bold;
1692 max-width: none;
1693 width: 100%;
1694 }
1695
1696 [data-page="admin-status-overview"] .td > span > span { font-size: .9rem; }
1697
1698 [data-page="admin-status-routes"] .table:nth-of-type(3) .td:nth-of-type(1) { word-break: break-all; }
1699
1700 [data-page="admin-network-firewall-zones"] .td[data-name="_info"] {
1701 padding: .2em 0;
1702 line-height: 2.2rem;
1703 }
1704
1705 [data-page="admin-network-firewall-zones"] .td[data-name="_info"]::before,
1706 [data-page="admin-network-firewall-zones"] .td[data-name="_info"]::after {
1707 display: none;
1708 }
1709
1710 [data-page="admin-network-firewall-zones"] .td[data-name="_info"] label {
1711 font-size: 1rem;
1712 }
1713
1714 #cbi-wireless-wifi-device .tr { display: flex; flex-wrap: wrap; }
1715 #cbi-wireless-wifi-device .tr > *:nth-child(1) { flex: 1 1 20%; align-self: center; }
1716 #cbi-wireless-wifi-device .tr > *:nth-child(2) { flex: 2 2 75%; }
1717 #cbi-wireless-wifi-device .tr > *:nth-child(3) { flex: 3 3 100%; }
1718
1719 #cbi-network-interface .tr { display: flex; flex-wrap: wrap; }
1720 #cbi-network-interface .tr > *:nth-child(1) { flex: 1 1 33%; align-self: center; }
1721 #cbi-network-interface .tr > *:nth-child(2) { flex: 2 2 60%; align-self: center; font-size: .9rem; overflow: hidden; }
1722 #cbi-network-interface .tr > *:nth-child(3) { flex: 3 3 100%; }
1723 #cbi-network-interface .tr > *:nth-child(2) > div { overflow: hidden; text-overflow: ellipsis; }
1724
1725 .assoclist .tr {
1726 display: flex;
1727 flex-wrap: wrap;
1728 }
1729
1730 .assoclist .td > .ifacebadge {
1731 max-width: 90px;
1732 }
1733
1734 .assoclist .td > .ifacebadge > img {
1735 margin: 0 35px;
1736 }
1737
1738 .assoclist .td > .ifacebadge > span {
1739 display: none;
1740 }
1741
1742 .assoclist .td > .ifacebadge[data-ifname]::after {
1743 content: attr(data-ifname);
1744 }
1745
1746 .assoclist .td > .ifacebadge[data-signal]::after {
1747 content: attr(data-signal) " dBm";
1748 }
1749
1750 .assoclist .td:nth-of-type(3) {
1751 font-weight: bold;
1752 font-size: 1rem;
1753 }
1754
1755 .assoclist .td:nth-of-type(1), .assoclist .td:nth-of-type(4) {
1756 flex: 1 1 100px;
1757 margin-right: .5em;
1758 }
1759
1760 .assoclist .td:nth-of-type(3), .assoclist .td:nth-of-type(5) {
1761 flex: 2 2 calc(100% - 110px);
1762 overflow: hidden;
1763 text-overflow: ellipsis;
1764 align-self: center;
1765 }
1766
1767 .assoclist .td:nth-of-type(6) { flex: 1; text-align: right !important; }
1768 .assoclist .td[data-title] { padding: .2em 0; }
1769 .assoclist .td[data-title]::before,
1770 .assoclist .td[data-title]::after { display: none; }
1771
1772 .leases6 .td:nth-of-type(3) { word-wrap: break-word; }
1773
1774 .td.cbi-section-actions > div { display: flex; }
1775 .td.cbi-section-actions > div > * { flex: 1; }
1776
1777 body.modal-overlay-active #modal_overlay > .modal {
1778 width: 95%;
1779 margin: 5% auto;
1780 }
1781
1782 input:not([type]),
1783 input[type="text"],
1784 input[type="password"],
1785 select,
1786 .cbi-dropdown:not(.btn):not(.cbi-button),
1787 .cbi-dynlist {
1788 min-height: calc(2.2rem + 2px);
1789 line-height: 2.2rem;
1790 font-size: 1.2rem;
1791 min-width: 10rem;
1792 }
1793
1794 button, .btn {
1795 line-height: 1.8rem;
1796 font-size: 1.2rem;
1797 }
1798
1799 select {
1800 padding: .4em 0;
1801 }
1802
1803 .cbi-value > .cbi-value-field {
1804 flex: 1 0 100%;
1805 display: flex;
1806 flex-direction: column;
1807 max-width: 100%;
1808 }
1809
1810 .cbi-value > .cbi-value-field > div[id] {
1811 display: flex;
1812 flex-direction: row;
1813 }
1814
1815 .cbi-value > .cbi-value-field > div[id] > input,
1816 .cbi-value > .cbi-value-field > div[id] > select,
1817 .cbi-value > .cbi-value-field > div[id] > .cbi-filebrowser.open {
1818 flex: 1;
1819 width: 100%;
1820 }
1821
1822 .cbi-dynlist .item::after,
1823 .cbi-dynlist .add-item > .btn {
1824 line-height: 2em;
1825 flex-basis: 2rem;
1826 width: 2rem;
1827 }
1828
1829 .ifacebadge.large {
1830 font-size: .9rem;
1831 }
1832
1833 .control-group > *,
1834 .control-group > .cbi-dropdown > ul > li {
1835 flex: 1;
1836 white-space: normal;
1837 word-wrap: break-word;
1838 }
1839
1840 .cbi-page-actions .cbi-dropdown,
1841 .cbi-page-actions .cbi-button-apply:first-child {
1842 flex-basis: 100%;
1843 }
1844
1845 .cbi-checkbox {
1846 margin: .25rem;
1847 }
1848
1849 .cbi-tabmenu {
1850 margin: 0 -.25em 1em -.25em;
1851 }
1852
1853 .cbi-tooltip {
1854 font-size: 1rem;
1855 box-shadow: 0 0 4px rgba(0, 0, 0, .7);
1856 }
1857
1858 .cbi-value > label:first-child {
1859 padding: 0 0 .5em 0;
1860 }
1861
1862 [data-page="admin-system-admin-sshkeys"] .cbi-dynlist > .item {
1863 font-size: .9rem;
1864 line-height: 1rem;
1865 }
1866
1867 [data-page="admin-system-opkg"] .control-group {
1868 flex-wrap: wrap;
1869 }
1870
1871 [data-page="admin-status-iptables"] h2 + div.right {
1872 margin: 0 0 1em 0 !important;
1873 display: flex;
1874 }
1875 }
1876
1877 @media only screen and (min-width: 800px) and (max-width: 1200px) {
1878 .assoclist .tr > *:nth-of-type(2) {
1879 display: none;
1880 }
1881 }