luci-theme-openwrt-2020: fix truncated error badges in tabs
[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 overflow: visible;
806 }
807
808 .cbi-tabmenu > li > a {
809 flex: 1;
810 margin: .1em .5em;
811 }
812
813 .cbi-tabmenu > .cbi-tab > a {
814 border-bottom: 2px solid var(--main-dark-color);
815 }
816
817 [data-tab] {
818 opacity: 0;
819 max-height: 0;
820 transition: opacity .25s ease-in-out;
821 overflow: hidden;
822 }
823
824 [data-tab-active="true"] {
825 opacity: 1;
826 height: auto;
827 max-height: none;
828 overflow: visible;
829 }
830
831 .alert-message:not(.modal) {
832 box-shadow: 0 0 3px var(--secondary-dark-color);
833 padding: .5em;
834 margin: 0 0 1em 0;
835 background: var(--warning-color);
836 color: var(--secondary-bright-color);
837 transition: opacity .4s ease;
838 }
839
840 .alert-message + .alert-message {
841 margin: -.5em 0 1em 0;
842 }
843
844 .alert-message.info {
845 background: var(--main-bright-color);
846 }
847
848 .alert-message.warning {
849 background: var(--warning-color);
850 }
851
852 .alert-message.danger {
853 background: var(--danger-color);
854 }
855
856 .alert-message .btn {
857 background: inherit;
858 box-shadow: 0 0 2px var(--secondary-bright-color);
859 }
860
861 .alert-message .btn:hover {
862 box-shadow: 0 0 4px 1px var(--secondary-bright-color);
863 }
864
865 @keyframes fade-in {
866 0% { opacity: 0; }
867 100% { opacity: 1; }
868 }
869
870 @keyframes fade-out {
871 0% { opacity: 1; }
872 100% { opacity: 0; }
873 }
874
875 .fade-in {
876 animation: fade-in .4s ease;
877 }
878
879 .fade-out {
880 animation: fade-out .4s ease;
881 opacity: 0;
882 }
883
884 /*
885 * forms
886 */
887
888 button, .btn {
889 background: var(--main-bright-color);
890 color: var(--secondary-bright-color);
891 line-height: 1.5em;
892 border-radius: .25em;
893 cursor: pointer;
894 box-shadow: 0 0 2px var(--main-dark-color);
895 padding: 0 .5em;
896 display: inline-block;
897 }
898
899 button:hover, .btn:hover {
900 box-shadow: 0 0 6px var(--main-bright-color);
901 }
902
903 button + button, .btn + .btn, button + .btn, .btn + button, select + button {
904 margin-left: .25em;
905 }
906
907 button.important {
908 background: var(--main-dark-color);
909 }
910
911 button[disabled], button.disabled, .btn[disabled], .btn.disabled {
912 pointer-events: none;
913 opacity: .5;
914 }
915
916 .cbi-button-apply, .cbi-button-positive {
917 background: var(--main-dark-color);
918 }
919
920 .cbi-button-negative, .cbi-button-remove {
921 background: var(--danger-color);
922 }
923
924 .cbi-checkbox input[type="checkbox"] {
925 display: none;
926 }
927
928 .cbi-checkbox input[type="checkbox"] + label {
929 position: relative;
930 display: inline-block;
931 width: 1.3em;
932 height: 1.3em;
933 vertical-align: text-top;
934 }
935
936 .cbi-checkbox input[type="checkbox"] + label::before {
937 content: "\0a";
938 height: 1em;
939 width: 1em;
940 box-shadow: 0 0 2px var(--main-dark-color);
941 display: inline-block;
942 border-radius: .25em;
943 margin: .15em 0;
944 position: absolute;
945 left: 0;
946 top: 0;
947 cursor: pointer;
948 }
949
950 .cbi-checkbox input[type="checkbox"]:checked + label::after {
951 content: "\0a";
952 position: absolute;
953 display: inline-block;
954 background: var(--main-dark-color);
955 top: .35em;
956 left: .2em;
957 width: .6em;
958 height: .6em;
959 border-radius: .15em;
960 cursor: pointer;
961 }
962
963 input:not([type]),
964 input[type="text"],
965 input[type="password"],
966 select,
967 .cbi-dropdown:not(.btn):not(.cbi-button) {
968 border-bottom: 2px solid transparent;
969 box-shadow: inset 0 0 1px var(--main-dark-color);
970 padding: 0 .2rem;
971 line-height: 1.5rem;
972 min-height: calc(1.5rem + 2px);
973 min-width: 20rem;
974 border-radius: .25em;
975 }
976
977 input:not([type]):focus,
978 input[type="text"]:focus,
979 input[type="password"]:focus,
980 select:focus,
981 .cbi-dropdown:not(.btn):not(.cbi-button):focus,
982 .cbi-dropdown[open]:not(.btn):not(.cbi-button) {
983 border-color: var(--main-dark-color);
984 }
985
986 input:not([type]) + .btn, input:not([type]) + button,
987 input[type="text"] + .btn, input[type="text"] + button,
988 input[type="password"] + .btn, input[type="password"] + button {
989 margin: 0 0 2px -1px;
990 background: var(--main-dark-color);
991 border-radius: 0 .25em .25em 0;
992 }
993
994 .control-group > select + .btn, .control-group > select + button {
995 margin-left: .25em;
996 }
997
998 .control-group > input:not([type]) + .btn, .control-group > input:not([type]) + button,
999 .control-group > input[type="text"] + .btn, .control-group > input[type="text"] + button,
1000 .control-group > input[type="password"] + .btn, .control-group > input[type="password"] + button {
1001 margin: .125em .125em calc(.125em + 2px) calc(-.125em - .25em) !important;
1002 }
1003
1004 input[type="checkbox"] {
1005 height: 1em;
1006 vertical-align: middle;
1007 -webkit-appearance: checkbox;
1008 }
1009
1010 select {
1011 padding: .1rem 0;
1012 -webkit-appearance: menulist;
1013 }
1014
1015 textarea {
1016 width: 100%;
1017 box-shadow: inset 0 0 2px var(--main-dark-color);
1018 font-family: monospace;
1019 font-size: .9rem;
1020 padding: .2rem;
1021 }
1022
1023 .cbi-input-invalid,
1024 .cbi-input-invalid:focus {
1025 color: var(--danger-color);
1026 border-color: var(--danger-color) !important;
1027 box-shadow: inset 0 0 2px var(--danger-color);
1028 }
1029
1030 .control-group {
1031 display: inline-flex;
1032 margin: 0 -.125rem;
1033 }
1034
1035 .control-group > *,
1036 .control-group > .cbi-dropdown > ul > li {
1037 justify-content: space-around;
1038 }
1039
1040 .control-group > * {
1041 margin: .125rem !important;
1042 min-width: auto;
1043 }
1044
1045 .control-group > select,
1046 .control-group > input:not([type]),
1047 .control-group > input[type="text"] {
1048 flex: 10;
1049 }
1050
1051 .cbi-value {
1052 display: flex;
1053 flex-wrap: wrap;
1054 margin: 0 0 1em 0;
1055 }
1056
1057 .cbi-value > label:first-child {
1058 flex: 1 1 40%;
1059 padding: 0 .5em 0 0;
1060 }
1061
1062 .cbi-value > .cbi-value-field {
1063 flex: 2 2 55%;
1064 }
1065
1066 .cbi-value > .cbi-section {
1067 flex: 1 1 100%;
1068 }
1069
1070 .cbi-map-descr,
1071 .cbi-tab-descr,
1072 .cbi-section-descr,
1073 .cbi-value-description,
1074 .cbi-value[data-widget="CBI.DummyValue"] > div:first-child {
1075 opacity: .8;
1076 font-size: .9rem;
1077 padding: .2em 0;
1078 }
1079
1080 .cbi-map-descr,
1081 .cbi-tab-descr,
1082 .cbi-section-descr,
1083 .cbi-section-table,
1084 .cbi-section-create {
1085 margin: 0 0 1em 0;
1086 }
1087
1088 .cbi-dynlist {
1089 display: inline-block;
1090 font-size: 90%;
1091 min-height: calc(1.5em + 2px);
1092 line-height: 1.5em;
1093 min-width: 20rem;
1094 flex-wrap: wrap;
1095 }
1096
1097 .cbi-dynlist > .item {
1098 box-shadow: 0 0 2px var(--main-dark-color);
1099 margin: .3em 0;
1100 padding: .15em .2em;
1101 border-radius: .25em;
1102 position: relative;
1103 overflow: hidden;
1104 transition: box-shadow .25s ease-in-out;
1105 pointer-events: none;
1106 flex: 1 1 100%;
1107 }
1108
1109 .cbi-dynlist > .item::after {
1110 content: "-";
1111 top: 0;
1112 right: 0;
1113 bottom: 0;
1114 width: 1.6rem;
1115 background: var(--main-bright-color);
1116 display: flex;
1117 align-items: center;
1118 justify-content: space-around;
1119 position: absolute;
1120 box-shadow: 0 0 2px var(--main-dark-color);
1121 text-align: center;
1122 color: var(--secondary-bright-color);
1123 cursor: pointer;
1124 pointer-events: all;
1125 }
1126
1127 .cbi-dynlist > .item:hover {
1128 box-shadow: 0 0 2px var(--main-bright-color);
1129 }
1130
1131 .cbi-dynlist > .add-item {
1132 flex: 1;
1133 display: flex;
1134 }
1135
1136 .cbi-dynlist > .add-item > input {
1137 flex: 1;
1138 min-width: 18.5rem;
1139 border-radius: .25rem 0 0 .25rem;
1140 }
1141
1142 .cbi-dynlist > .add-item > .btn {
1143 flex: 0 0 1.6rem;
1144 margin: 0 0 2px -1px;
1145 width: 1.6rem;
1146 text-align: center;
1147 }
1148
1149 .cbi-dropdown {
1150 display: inline-flex !important;
1151 cursor: pointer;
1152 height: auto;
1153 position: relative;
1154 padding: 0 !important;
1155 }
1156
1157 .cbi-dropdown:not(.btn):not(.cbi-button) {
1158 box-shadow: inset 0 0 1px var(--main-dark-color);
1159 }
1160
1161 .cbi-dropdown > ul {
1162 margin: 0 !important;
1163 padding: 0;
1164 list-style: none;
1165 overflow-x: hidden;
1166 overflow-y: auto;
1167 display: flex;
1168 width: 100%;
1169 }
1170
1171 .cbi-dropdown.btn > ul:not(.dropdown) {
1172 padding-left: .5em;
1173 }
1174
1175 .cbi-dropdown.btn.spinning > ul:not(.dropdown) {
1176 padding-left: 0;
1177 }
1178
1179 .cbi-dropdown.btn > ul.dropdown > li {
1180 color: var(--main-dark-color);
1181 }
1182
1183 .cbi-dropdown > ul.preview {
1184 display: none;
1185 }
1186
1187 .cbi-dropdown > .open,
1188 .cbi-dropdown > .more {
1189 flex-grow: 0;
1190 flex-shrink: 0;
1191 display: flex;
1192 flex-direction: column;
1193 justify-content: center;
1194 text-align: center;
1195 padding: 0 .25em;
1196 }
1197
1198 .cbi-dropdown.btn > .open,
1199 .cbi-dropdown.cbi-button > .open {
1200 padding: 0 .5em;
1201 margin-left: .5em;
1202 border-left: 1px solid;
1203 }
1204
1205 .cbi-dropdown > .more,
1206 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] {
1207 display: none;
1208 justify-content: center;
1209 color: rgba(0, 0, 0, .5);
1210 }
1211
1212 .cbi-dropdown > ul > li {
1213 display: none;
1214 white-space: nowrap;
1215 overflow: hidden;
1216 text-overflow: ellipsis;
1217 flex-shrink: 1;
1218 flex-grow: 1;
1219 align-items: center;
1220 align-self: center;
1221 color: inherit;
1222 }
1223
1224 .cbi-dropdown > ul.dropdown > li,
1225 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li {
1226 padding: 0 .25em;
1227 }
1228
1229 .cbi-dropdown > ul > li .hide-open { display: block; display: initial; }
1230 .cbi-dropdown > ul > li .hide-close { display: none; }
1231
1232 .cbi-dropdown > ul > li[display]:not([display="0"]) {
1233 border-left: 1px solid #ccc;
1234 }
1235
1236 .cbi-dropdown[empty] > ul {
1237 max-width: 1px;
1238 max-height: 1.5em;
1239 }
1240
1241 .cbi-dropdown > ul > li > form {
1242 display: none;
1243 margin: 0;
1244 padding: 0;
1245 pointer-events: none;
1246 }
1247
1248 .cbi-dropdown > ul > li img {
1249 align-self: center;
1250 margin-right: .25em;
1251 }
1252
1253 .cbi-dropdown > ul > li input[type="text"] {
1254 margin: .25em 0;
1255 border: none;
1256 background: var(--secondary-bright-color);
1257 }
1258
1259 .cbi-dropdown[open] {
1260 position: relative;
1261 }
1262
1263 .cbi-dropdown[open] > ul.dropdown {
1264 display: block;
1265 background: var(--secondary-bright-color);
1266 box-shadow: 0 0 1px var(--main-dark-color), 0 0 4px rgba(0, 0, 0, .7);
1267 position: absolute;
1268 z-index: 1100;
1269 max-width: none;
1270 min-width: 100%;
1271 width: auto;
1272 transition: max-height .125s ease-in;
1273 }
1274
1275 .cbi-dropdown > ul > li[display],
1276 .cbi-dropdown[open] > ul.preview,
1277 .cbi-dropdown[open] > ul.dropdown > li,
1278 .cbi-dropdown[multiple] > ul > li > label,
1279 .cbi-dropdown[multiple][open] > ul.dropdown > li,
1280 .cbi-dropdown[multiple][more] > .more,
1281 .cbi-dropdown[multiple][empty] > .more {
1282 flex-grow: 1;
1283 display: flex !important;
1284 }
1285
1286 .cbi-dropdown[empty] > ul > li,
1287 .cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
1288 .cbi-dropdown[multiple][open] > ul.dropdown > li > form {
1289 display: block !important;
1290 }
1291
1292 .cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none; }
1293 .cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block; display: initial; }
1294
1295 .cbi-dropdown[open] > ul.dropdown > li {
1296 border-bottom: 1px solid #ccc;
1297 }
1298
1299 .cbi-dropdown[open] > ul.dropdown > li[selected] {
1300 background: var(--main-dark-color);
1301 color: var(--secondary-bright-color);
1302 }
1303
1304 .cbi-dropdown[open] > ul.dropdown > li.focus {
1305 background: var(--main-bright-color);
1306 }
1307
1308 .cbi-dropdown[open] > ul.dropdown > li:last-child {
1309 margin-bottom: 0;
1310 border-bottom: none;
1311 }
1312
1313 .cbi-dropdown[open] > ul.dropdown > li[unselectable] {
1314 opacity: 0.7;
1315 }
1316
1317 .cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child {
1318 width: 100%;
1319 }
1320
1321 .cbi-dropdown[disabled] {
1322 pointer-events: none;
1323 opacity: .6;
1324 }
1325
1326 .cbi-filebrowser {
1327 max-width: 100%;
1328 width: 1px;
1329 box-shadow: 0 0 2px var(--main-dark-color);
1330 border-radius: .25rem;
1331 display: flex;
1332 flex-direction: column;
1333 opacity: 0;
1334 height: 0;
1335 overflow: hidden;
1336 }
1337
1338 .cbi-filebrowser.open {
1339 min-width: 20rem;
1340 width: auto;
1341 opacity: 1;
1342 height: auto;
1343 overflow: visible;
1344 transition: opacity .25s ease-in;
1345 }
1346
1347 .cbi-filebrowser > * {
1348 max-width: 100%;
1349 overflow: hidden;
1350 text-overflow: ellipsis;
1351 padding: 0 0 .25em 0;
1352 margin: .25em .25em 0px .25em;
1353 white-space: nowrap;
1354 border-bottom: 1px solid var(--main-dark-color);
1355 }
1356
1357 .cbi-filebrowser .cbi-button-positive {
1358 margin-right: .25em;
1359 }
1360
1361 .cbi-filebrowser > div {
1362 border-bottom: none;
1363 }
1364
1365 .cbi-filebrowser > ul > li {
1366 display: flex;
1367 flex-direction: row;
1368 align-items: center;
1369 }
1370
1371 .cbi-filebrowser > ul > li a:hover {
1372 font-weight: bold;
1373 text-decoration: underline;
1374 }
1375
1376 .cbi-filebrowser > ul > li > div:first-child {
1377 flex: 10;
1378 overflow: hidden;
1379 text-overflow: ellipsis;
1380 }
1381
1382 .cbi-filebrowser > ul > li > div:last-child {
1383 flex: 3 3 10em;
1384 text-align: right;
1385 }
1386
1387 .cbi-filebrowser > ul > li > div:last-child > button {
1388 padding: .125em .25em;
1389 margin: 1px 0 1px .25em;
1390 }
1391
1392 .cbi-filebrowser .upload {
1393 display: flex;
1394 flex-direction: row;
1395 flex-wrap: wrap;
1396 margin: 0 -.125em .25em -.125em;
1397 padding: 0 0 .125em 0px;
1398 border-bottom: 1px solid var(--main-dark-color);
1399 }
1400
1401 .cbi-filebrowser .upload > * {
1402 margin: .125em;
1403 flex: 1;
1404 }
1405
1406 .cbi-filebrowser .upload > div > input {
1407 width: 100%;
1408 }
1409
1410 .cbi-section-actions {
1411 text-align: right;
1412 }
1413
1414 .cbi-page-actions {
1415 flex-wrap: wrap;
1416 width: 100%;
1417 justify-content: flex-end;
1418 margin-bottom: 1em;
1419 margin-top: 1em;
1420 border-top: 1px solid var(--main-dark-color);
1421 padding-top: 1em;
1422 text-align: right;
1423 }
1424
1425 div[id$=".ipaddr"] > input,
1426 .cbi-value-field > div > input[type="password"] {
1427 min-width: 18.5rem;
1428 border-radius: .25rem 0 0 .25rem;
1429 }
1430
1431 div[id$=".txpower"] {
1432 flex-wrap: wrap;
1433 align-items: center;
1434 }
1435
1436 div[id$=".txpower"] > span {
1437 white-space: nowrap;
1438 margin-left: .25em;
1439 }
1440
1441 div[id$=".editlist"] {
1442 flex: 1;
1443 }
1444
1445 [data-errors]::after {
1446 content: attr(data-errors);
1447 background: var(--danger-color);
1448 color: var(--secondary-bright-color);
1449 border-radius: .6rem;
1450 height: 1.1rem;
1451 padding: 0 .25rem;
1452 font-size: .9rem;
1453 display: inline-block;
1454 font-weight: bold;
1455 min-width: .6rem;
1456 line-height: 1rem;
1457 margin: -.1rem 0 0 -.2rem;
1458 text-align: center;
1459 }
1460
1461 @keyframes spin {
1462 100% { transform: rotate(360deg); }
1463 }
1464
1465 .spinning {
1466 position: relative;
1467 padding-left: 2.1em !important;
1468 }
1469
1470 .spinning::before {
1471 position: absolute;
1472 display: block;
1473 align-items: center;
1474 top: 0;
1475 bottom: 0;
1476 left: .4em;
1477 width: 1.3em;
1478 height: 1.3em;
1479 animation: spin 1s linear infinite;
1480 content: url("spinner.svg");
1481 margin: auto;
1482 }
1483
1484 button.spinning, .btn.spinning {
1485 padding-left: 1.6em !important;
1486 }
1487
1488 button.spinning::before, .btn.spinning::before {
1489 filter: invert(1);
1490 left: .2em;
1491 width: 1.2em;
1492 height: 1.2em;
1493 }
1494
1495 #view > div.spinning:first-child {
1496 padding: .5em 0;
1497 }
1498
1499 #view > *:last-child {
1500 margin: 0 0 1em 0;
1501 }
1502
1503 .label {
1504 background: var(--main-bright-color);
1505 color: var(--secondary-bright-color);
1506 font-size: .8rem;
1507 padding: 0 .4rem;
1508 border-radius: .5rem;
1509 }
1510
1511 .label.warning {
1512 background: var(--danger-color);
1513 }
1514
1515 ul.deps {
1516 margin: 0;
1517 padding: 0;
1518 font-size: .9rem;
1519 }
1520
1521 ul.errors {
1522 margin: 0 0 1em 0;
1523 padding: 0;
1524 }
1525
1526 @media only screen and (max-width: 800px) {
1527 body {
1528 padding-top: 70px;
1529 }
1530
1531 #maincontent {
1532 padding: .25em;
1533 max-width: 100vw;
1534 }
1535
1536 #menubar {
1537 background: var(--main-bright-color);
1538 padding: 0 .5em;
1539 position: fixed;
1540 top: 0;
1541 z-index: 1000;
1542 }
1543
1544 #menubar > h2 {
1545 flex: 0 0 2em;
1546 display: block;
1547 border: 2px solid var(--secondary-bright-color);
1548 color: var(--secondary-bright-color);
1549 border-radius: .5em;
1550 cursor: pointer;
1551 font-size: 100%;
1552 margin: 0 1em 0 0;
1553 }
1554
1555 #menubar > h2:hover {
1556 border-color: var(--secondary-bright-color);
1557 color: var(--secondary-bright-color);
1558 }
1559
1560 #menubar > h2 > * {
1561 display: none;
1562 }
1563
1564 #menubar > h2::before {
1565 content: "☰";
1566 width: 35px;
1567 line-height: 35px;
1568 text-align: center;
1569 display: inline-block;
1570 color: inherit;
1571 font-weight: bold;
1572 }
1573
1574 #menubar > h2.active::before {
1575 content: "×";
1576 font-size: 200%;
1577 }
1578
1579 #menubar .hostname {
1580 font-size: 1.6em;
1581 }
1582
1583 .distversion {
1584 display: none;
1585 }
1586
1587 #modemenu {
1588 padding: .125em .25em;
1589 }
1590
1591 #mainmenu {
1592 overflow-x: hidden;
1593 overflow-y: auto;
1594 max-width: 0;
1595 padding: 1em 0;
1596 transition: max-width .25s ease-in-out, padding .25s ease-in-out;
1597 position: fixed;
1598 z-index: 900;
1599 height: 100%;
1600 }
1601
1602 #mainmenu.active {
1603 max-width: 200px;
1604 padding: 1em 1em calc(1em + 70px) 1em;
1605 overflow-x: visible;
1606 }
1607
1608 #mainmenu > div {
1609 position: static;
1610 }
1611
1612 #mainmenu ul > li {
1613 padding: .25em 0;
1614 }
1615
1616 .hide-xs {
1617 display: none !important;
1618 }
1619
1620 .table {
1621 display: flex;
1622 flex-direction: column;
1623 }
1624
1625 .tr {
1626 display: block;
1627 border-bottom: 1px solid var(--main-dark-color);
1628 margin-bottom: .5em;
1629 padding-bottom: .5em;
1630 }
1631
1632 .tr.cbi-section-table-titles[data-title]::before,
1633 .tr.cbi-section-table-titles,
1634 .tr.cbi-section-table-descr {
1635 display: none;
1636 }
1637
1638 .tr[data-title]::before {
1639 display: block;
1640 font-weight: bold;
1641 border-top: none;
1642 padding: .4em 0;
1643 font-size: 110%;
1644 }
1645
1646 .td {
1647 display: block;
1648 border-top: none;
1649 text-align: left !important;
1650 padding: .2em 0;
1651 }
1652
1653 .th, .table-titles {
1654 display: none;
1655 }
1656
1657 .td[data-title] {
1658 position: relative;
1659 padding: .2em 0 .2em 40%;
1660 }
1661
1662 .td[data-title]::before {
1663 content: attr(data-title) ": ";
1664 white-space: nowrap;
1665 font-weight: bold;
1666 width: 40%;
1667 overflow: hidden;
1668 text-overflow: ellipsis;
1669 position: absolute;
1670 left: 0;
1671 top: 0;
1672 bottom: 0;
1673 padding: .2em 0;
1674 text-align: left;
1675 display: inline-flex;
1676 align-items: center;
1677 }
1678
1679 .td[data-title]::after {
1680 content: "";
1681 width: 2em;
1682 position: absolute;
1683 left: calc(40% - 2em);
1684 top: 0;
1685 bottom: 0;
1686 display: block;
1687 background: linear-gradient(90deg, rgba(255, 255, 255, 0), var(--secondary-bright-color) 90%);
1688 }
1689
1690 [data-page="admin-status-overview"] .cbi-section:nth-of-type(1) .td:first-of-type,
1691 [data-page="admin-status-overview"] .cbi-section:nth-of-type(2) .td:first-of-type {
1692 font-weight: bold;
1693 max-width: none;
1694 width: 100%;
1695 }
1696
1697 [data-page="admin-status-overview"] .td > span > span { font-size: .9rem; }
1698
1699 [data-page="admin-status-routes"] .table:nth-of-type(3) .td:nth-of-type(1) { word-break: break-all; }
1700
1701 [data-page="admin-network-firewall-zones"] .td[data-name="_info"] {
1702 padding: .2em 0;
1703 line-height: 2.2rem;
1704 }
1705
1706 [data-page="admin-network-firewall-zones"] .td[data-name="_info"]::before,
1707 [data-page="admin-network-firewall-zones"] .td[data-name="_info"]::after {
1708 display: none;
1709 }
1710
1711 [data-page="admin-network-firewall-zones"] .td[data-name="_info"] label {
1712 font-size: 1rem;
1713 }
1714
1715 #cbi-wireless-wifi-device .tr { display: flex; flex-wrap: wrap; }
1716 #cbi-wireless-wifi-device .tr > *:nth-child(1) { flex: 1 1 20%; align-self: center; }
1717 #cbi-wireless-wifi-device .tr > *:nth-child(2) { flex: 2 2 75%; }
1718 #cbi-wireless-wifi-device .tr > *:nth-child(3) { flex: 3 3 100%; }
1719
1720 #cbi-network-interface .tr { display: flex; flex-wrap: wrap; }
1721 #cbi-network-interface .tr > *:nth-child(1) { flex: 1 1 33%; align-self: center; }
1722 #cbi-network-interface .tr > *:nth-child(2) { flex: 2 2 60%; align-self: center; font-size: .9rem; overflow: hidden; }
1723 #cbi-network-interface .tr > *:nth-child(3) { flex: 3 3 100%; }
1724 #cbi-network-interface .tr > *:nth-child(2) > div { overflow: hidden; text-overflow: ellipsis; }
1725
1726 .assoclist .tr {
1727 display: flex;
1728 flex-wrap: wrap;
1729 }
1730
1731 .assoclist .td > .ifacebadge {
1732 max-width: 90px;
1733 }
1734
1735 .assoclist .td > .ifacebadge > img {
1736 margin: 0 35px;
1737 }
1738
1739 .assoclist .td > .ifacebadge > span {
1740 display: none;
1741 }
1742
1743 .assoclist .td > .ifacebadge[data-ifname]::after {
1744 content: attr(data-ifname);
1745 }
1746
1747 .assoclist .td > .ifacebadge[data-signal]::after {
1748 content: attr(data-signal) " dBm";
1749 }
1750
1751 .assoclist .td:nth-of-type(3) {
1752 font-weight: bold;
1753 font-size: 1rem;
1754 }
1755
1756 .assoclist .td:nth-of-type(1), .assoclist .td:nth-of-type(4) {
1757 flex: 1 1 100px;
1758 margin-right: .5em;
1759 }
1760
1761 .assoclist .td:nth-of-type(3), .assoclist .td:nth-of-type(5) {
1762 flex: 2 2 calc(100% - 110px);
1763 overflow: hidden;
1764 text-overflow: ellipsis;
1765 align-self: center;
1766 }
1767
1768 .assoclist .td:nth-of-type(6) { flex: 1; text-align: right !important; }
1769 .assoclist .td[data-title] { padding: .2em 0; }
1770 .assoclist .td[data-title]::before,
1771 .assoclist .td[data-title]::after { display: none; }
1772
1773 .leases6 .td:nth-of-type(3) { word-wrap: break-word; }
1774
1775 .td.cbi-section-actions > div { display: flex; }
1776 .td.cbi-section-actions > div > * { flex: 1; }
1777
1778 body.modal-overlay-active #modal_overlay > .modal {
1779 width: 95%;
1780 margin: 5% auto;
1781 }
1782
1783 input:not([type]),
1784 input[type="text"],
1785 input[type="password"],
1786 select,
1787 .cbi-dropdown:not(.btn):not(.cbi-button),
1788 .cbi-dynlist {
1789 min-height: calc(2.2rem + 2px);
1790 line-height: 2.2rem;
1791 font-size: 1.2rem;
1792 min-width: 10rem;
1793 }
1794
1795 button, .btn {
1796 line-height: 1.8rem;
1797 font-size: 1.2rem;
1798 }
1799
1800 select {
1801 padding: .4em 0;
1802 }
1803
1804 .cbi-value > .cbi-value-field {
1805 flex: 1 0 100%;
1806 display: flex;
1807 flex-direction: column;
1808 max-width: 100%;
1809 }
1810
1811 .cbi-value > .cbi-value-field > div[id] {
1812 display: flex;
1813 flex-direction: row;
1814 }
1815
1816 .cbi-value > .cbi-value-field > div[id] > input,
1817 .cbi-value > .cbi-value-field > div[id] > select,
1818 .cbi-value > .cbi-value-field > div[id] > .cbi-filebrowser.open {
1819 flex: 1;
1820 width: 100%;
1821 }
1822
1823 .cbi-dynlist .item::after,
1824 .cbi-dynlist .add-item > .btn {
1825 line-height: 2em;
1826 flex-basis: 2rem;
1827 width: 2rem;
1828 }
1829
1830 .ifacebadge.large {
1831 font-size: .9rem;
1832 }
1833
1834 .control-group > *,
1835 .control-group > .cbi-dropdown > ul > li {
1836 flex: 1;
1837 white-space: normal;
1838 word-wrap: break-word;
1839 }
1840
1841 .cbi-page-actions .cbi-dropdown,
1842 .cbi-page-actions .cbi-button-apply:first-child {
1843 flex-basis: 100%;
1844 }
1845
1846 .cbi-checkbox {
1847 margin: .25rem;
1848 }
1849
1850 .cbi-tabmenu {
1851 margin: 0 -.25em 1em -.25em;
1852 }
1853
1854 .cbi-tooltip {
1855 font-size: 1rem;
1856 box-shadow: 0 0 4px rgba(0, 0, 0, .7);
1857 }
1858
1859 .cbi-value > label:first-child {
1860 padding: 0 0 .5em 0;
1861 }
1862
1863 [data-page="admin-system-admin-sshkeys"] .cbi-dynlist > .item {
1864 font-size: .9rem;
1865 line-height: 1rem;
1866 }
1867
1868 [data-page="admin-system-opkg"] .control-group {
1869 flex-wrap: wrap;
1870 }
1871
1872 [data-page="admin-status-iptables"] h2 + div.right {
1873 margin: 0 0 1em 0 !important;
1874 display: flex;
1875 }
1876 }
1877
1878 @media only screen and (min-width: 800px) and (max-width: 1200px) {
1879 .assoclist .tr > *:nth-of-type(2) {
1880 display: none;
1881 }
1882 }