3 * Copyright 2012 Nut & Bolt
4 * By David Menting <david@nut-bolt.nl>
5 * Based on Bootstrap v1.4.0
7 * Copyright 2011 Twitter, Inc
8 * Licensed under the Apache License v2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Designed and built with all the love in the world @twitter by @mdo and @fat.
18 --background-color-delta-l-sign: -1;
19 --background-color-h: 0;
20 --background-color-s: 0%;
21 --background-color-l: 100%;
23 --background-color-high-hsl:
24 var
(--background-color-h
),
25 var
(--background-color-s
),
26 var
(--background-color-l
);
27 --background-color-high: hsl
(var
(--background-color-high-hsl
));
29 --background-color-medium-hsl:
30 var
(--background-color-h
),
31 var
(--background-color-s
),
32 calc
(var
(--background-color-l
) + var
(--background-color-delta-l-sign
) * calc
(6 / 255 * 100%));
33 --background-color-medium: hsl
(var
(--background-color-medium-hsl
));
35 --background-color-low-hsl:
36 var
(--background-color-h
),
37 var
(--background-color-s
),
38 calc
(var
(--background-color-l
) + var
(--background-color-delta-l-sign
) * calc
(10 / 255 * 100%));
39 --background-color-low: hsl
(var
(--background-color-low-hsl
));
41 --text-color-delta-l-sign: 1;
46 --text-color-highest-hsl:
50 --text-color-highest: hsl
(var
(--text-color-highest-hsl
));
52 --text-color-high-hsl:
55 calc
(var
(--text-color-l
) + var
(--text-color-delta-l-sign
) * calc
(64 / 255 * 100%));
56 --text-color-high: hsl
(var
(--text-color-high-hsl
));
58 --text-color-medium-hsl:
61 calc
(var
(--text-color-l
) + var
(--text-color-delta-l-sign
) * calc
(128 / 255 * 100%));
62 --text-color-medium: hsl
(var
(--text-color-medium-hsl
));
67 calc
(var
(--text-color-l
) + var
(--text-color-delta-l-sign
) * calc
(191 / 255 * 100%));
68 --text-color-low: hsl
(var
(--text-color-low-hsl
));
70 --border-color-delta-l-sign: -1;
71 --border-color-h: var
(--background-color-h
);
72 --border-color-s: var
(--background-color-s
);
73 --border-color-l: var
(--background-color-l
);
75 --border-color-high-hsl:
76 var
(--border-color-h
),
77 var
(--border-color-s
),
78 calc
(var
(--border-color-l
) + var
(--border-color-delta-l-sign
) * calc
(51 / 255 * 100%));
79 --border-color-high: hsl
(var
(--border-color-high-hsl
));
81 --border-color-medium-hsl:
82 var
(--border-color-h
),
83 var
(--border-color-s
),
84 calc
(var
(--border-color-l
) + var
(--border-color-delta-l-sign
) * calc
(34 / 255 * 100%));
85 --border-color-medium: hsl
(var
(--border-color-medium-hsl
));
87 --border-color-low-hsl:
88 var
(--border-color-h
),
89 var
(--border-color-s
),
90 calc
(var
(--border-color-l
) + var
(--border-color-delta-l-sign
) * calc
(17 / 255 * 100%));
91 --border-color-low: hsl
(var
(--border-color-low-hsl
));
93 --primary-color-high: #1976d2;
94 --primary-color-medium: #1564c0;
95 --primary-color-low: #0d46a1;
96 --on-primary-color: var
(--background-color-high
);
98 --error-color-high-rgb: 246, 43, 18;
99 --error-color-high: rgb
(var
(--error-color-high-rgb
));
100 --error-color-medium: #e8210d;
101 --error-color-low: #d00000;
102 --on-error-color: var
(--background-color-high
);
104 --success-color-high-rgb: 0, 172, 89;
105 --success-color-high: rgb
(var
(--success-color-high-rgb
));
106 --success-color-medium: #009a4c;
107 --success-color-low: #007936;
108 --on-success-color: var
(--background-color-high
);
110 --warn-color-high: #efbd0b;
111 --warn-color-medium: #f0c629;
112 --warn-color-low: #f2d24f;
113 --on-warn-color: var
(--text-color-highest
);
115 --disabled-opacity: .7;
120 :root
[data-darkmode
="true"] {
121 --background-color-delta-l-sign: 1;
122 --background-color-h: 0;
123 --background-color-s: 0%;
124 --background-color-l: calc
(34 / 255 * 100%);
125 --text-color-delta-l-sign: -1;
128 --text-color-l: 100%;
129 --border-color-delta-l-sign: 1;
131 --primary-color-high: #4da1c0;
132 --primary-color-medium: #448da6;
133 --primary-color-low: #3c7a8d;
135 --error-color-high-rgb: 209, 86, 83;
136 --error-color-medium: #bf4e4c;
137 --error-color-low: #b14946;
139 --success-color-high-rgb: 0, 166, 108;
140 --success-color-medium: #00945e;
141 --success-color-low: #008252;
143 --warn-color-high: #a69461;
144 --warn-color-medium: #a68d45;
145 --warn-color-low: #a68732;
146 --on-warn-color: var
(--background-color-high
);
148 --disabled-opacity: .4;
154 * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc).
155 * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
161 box-sizing: border-box
;
164 abbr
[title
], acronym
[title
] {
165 border-bottom: 1px dotted
;
166 font-weight: inherit
;
171 border-collapse: collapse
;
181 -webkit-text-size-adjust: 100%;
182 -ms-text-size-adjust: 100%;
187 outline: thin dotted
;
198 vertical-align: baseline
;
210 -ms-interpolation-mode: bicubic
;
220 box-sizing: border-box
;
221 vertical-align: baseline
;
225 button::-moz-focus-inner
, input::-moz-focus-inner
{
231 input
[type
="button"],
233 input
[type
="submit"] {
235 -webkit-appearance: button
;
236 word-break: break-all
;
240 input
[type
="button"][disabled
],
241 input
[type
="reset"][disabled
],
242 input
[type
="submit"][disabled
] {
243 opacity: var
(--disabled-opacity
);
246 input
[type
="search"] {
247 -webkit-appearance: textfield
;
248 box-sizing: content-box
;
251 input
[type
="search"]::-webkit-search-decoration
{
252 -webkit-appearance: none
;
262 * Basic and global styles for generating a grid system, structural layout, and page templates
263 * ------------------------------------------------------------------------------------------- */
265 background-color: var
(--background-color-high
);
266 font-family: "Helvetica Neue", Helvetica
, Arial
, sans-serif
;
270 color: var
(--text-color-high
);
274 flex-direction: column
;
286 color: var
(--primary-color-high
);
287 text-decoration: none
;
288 line-height: inherit
;
289 font-weight: inherit
;
293 color: var
(--primary-color-low
);
294 text-decoration: underline
;
310 * Headings, body text, lists, code, and more for a versatile and durable typography system
311 * ---------------------------------------------------------------------------------------- */
315 .table .tr.cbi-section-table-descr .th {
324 color: var
(--text-color-low
);
334 color: var
(--text-color-high
);
343 color: var
(--text-color-low
);
394 color: var
(--text-color-low
);
395 text-transform: uppercase
;
399 margin: 0 0 18px 25px;
419 color: var
(--text-color-medium
);
446 border-bottom: 1px solid var
(--border-color-low
);
456 font-weight: inherit
;
457 line-height: inherit
;
460 small
{ font-size: 0.9em }
470 font-family: Monaco
, Andale Mono
, Courier New
, monospace
;
476 background-color: var
(--border-color-low
);
477 color: var
(--text-color-high
);
482 --border-color-h: var
(--background-color-h
);
483 --border-color-s: var
(--background-color-s
);
484 --border-color-delta-l: 100%;
485 --border-color-l: calc
(var
(--background-color-l
) + var
(--background-color-delta-l-sign
) * var
(--border-color-delta-l
));
486 --border-color-a: 0.15;
487 --border-color: hsla
(var
(--border-color-hsl
), var
(--border-color-a
));
489 background-color: var
(--background-color-low
);
495 border: 1px solid var
(--border-color
);
498 white-space: pre-wrap
;
499 word-wrap: break-word
;
503 * Base styles for various input types, form layouts, and states
504 * ------------------------------------------------------------- */
519 color: var
(--text-color-high
);
523 form
.cbi-tab-descr
{
533 font-family: "Helvetica Neue", Helvetica
, Arial
, sans-serif
;
544 .cbi-value label.cbi-value-title {
551 color: var
(--text-color-high
);
554 label
> input
[type
="checkbox"],
555 label
> input
[type
="radio"] {
556 vertical-align: text-top
;
568 .cbi-dropdown:not(.btn):not(.cbi-button) {
569 display: inline-block
;
572 background: var
(--background-color-high
);
573 color: var
(--text-color-high
);
576 border: 1px solid var
(--border-color-high
);
583 .cbi-dropdown:not(.btn):not(.cbi-button) {
587 .cbi-dropdown:not
(.btn
):not
(.cbi-button
),
597 display: inline-flex
;
598 flex-direction: column
;
601 .cbi-dynlist > .item {
603 box-shadow: 0 0 2px var
(--border-color-high
);
604 background: var
(--background-color-high
);
605 padding: 2px 2em 2px 4px;
606 border: 1px solid var
(--border-color-high
);
608 color: var
(--text-color-high
);
610 pointer-events: none
;
612 word-break: break-all
;
615 .cbi-dynlist > .item::after {
618 display: inline-flex
;
624 border: 1px solid var
(--border-color-high
);
625 border-radius: 0 3px 3px 0;
628 pointer-events: auto
;
631 .cbi-dynlist > .add-item {
635 .cbi-dynlist
> .add-item
> input
,
636 .cbi-dynlist > .add-item > button {
639 text-overflow: ellipsis
;
643 .cbi-value-field > .cbi-checkbox {
652 background: linear-gradient
(var
(--background-color-high
), var
(--border-color-low
));
656 .cbi-select select:focus {
657 -webkit-appearance: none
;
661 background: transparent
;
669 .cbi-select::before {
676 background: linear-gradient
(var
(--background-color-high
), var
(--border-color-low
));
677 pointer-events: none
;
680 flex-direction: column
;
681 justify-content: center
;
684 .cbi-select select option {
685 background: var
(--background-color-low
);
686 color: var
(--text-color-high
);
689 .cbi-select select option:hover {
690 background: var
(--primary-color-low
);
691 color: var
(--on-primary-color
);
694 .cbi-select select option:checked {
695 background: var
(--primary-color-medium
);
696 color: var
(--on-primary-color
);
700 background-color: #fff;
703 line-height: initial
;
705 width: auto
!important
;
708 input
[type
=button
], input
[type
=reset
], input
[type
=submit
] {
715 background-color: #fff;
718 input
[type
="checkbox"],
719 input
[type
="radio"] {
720 --bd-color: var
(--border-color-high
);
721 --fg-color: var
(--text-color-high
);
724 -webkit-appearance: none
;
727 color: var
(--fg-color
);
729 display: inline-block
;
735 input
[type
="checkbox"]::before
,
736 input
[type
="checkbox"]::after
,
737 input
[type
="radio"]::before
,
738 input
[type
="radio"]::after
{
743 input
[type
="checkbox"]::before
,
744 input
[type
="radio"]::before
{
749 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-low
));
750 border: 1px solid var
(--bd-color
);
755 input
[type
="radio"]::before
{
759 input
[type
="checkbox"]::after
,
760 input
[type
="radio"]::after
{
767 input
[type
="checkbox"]:checked::after
,
768 input
[type
="radio"]:checked::after
{
769 --checkmark-icon: url
("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20'><path d='m2.5 7.4 7.5 7.5-2.5 2.4L0 10Zm15-5L20 4.9 7.5 17.3 5 15Z'/></svg>");
770 -webkit-mask: var
(--checkmark-icon
) center
/cover no-repeat
;
771 mask: var
(--checkmark-icon
) center
/cover no-repeat
;
772 background: var
(--fg-color
);
775 input
[type
="radio"]:checked:after
{
776 --checkmark-icon: url
("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20'><circle cx='10' cy='10' r='8'/></svg>");
779 input
[type
="checkbox"].cbi-input-invalid
,
780 input
[type
="radio"].cbi-input-invalid
{
781 --bd-color: var
(--error-color-medium
);
782 --fg-color: var
(--error-color-high
);
785 .td
> input
[type
=text
],
786 .td
> input
[type
=password
],
788 .td
> .cbi-dropdown:not
(.btn
):not
(.cbi-button
),
789 .cbi-dynlist > .add-item > .cbi-dropdown {
794 color: var
(--text-color-medium
);
802 .cbi-dynlist
> .item
,
803 input
[type
="checkbox"]::before
,
804 input
[type
="radio"]::before
,
805 input
, button
, textarea
{
806 transition: border linear
0.2s, box-shadow linear
0.2s;
807 box-shadow: inset
0 1px 3px hsla
(var
(--border-color-low-hsl
), .01);
811 .btn:hover
, .btn:focus
,
812 .cbi-button:hover
, .cbi-button:focus
,
814 .cbi-dropdown:focus
, .cbi-dropdown
[open
],
815 .cbi-dynlist
> .item:focus
,
816 input
[type
="checkbox"]:focus::before
,
817 input
[type
="radio"]:focus::before
,
818 input:focus
, button:hover
, textarea:focus
{
819 --focus-color-rgb: 82, 168, 236;
822 border-color: rgba
(var
(--focus-color-rgb
), 0.8) !important
;
823 box-shadow: inset
0 1px 3px hsla
(var
(--border-color-low-hsl
), .01), 0 0 8px rgba
(var
(--focus-color-rgb
), 0.6);
824 text-decoration: none
;
827 .cbi-input-invalid:focus
,
828 .cbi-select
.cbi-input-invalid
,
829 input
[type
="checkbox"].cbi-input-invalid:focus::before
,
830 input
[type
="radio"].cbi-input-invalid:focus::before
{
831 --focus-color-rgb: var
(--error-color-high-rgb
);
838 .cbi-select
[disabled
]::before
,
839 .cbi-dropdown
[disabled
]:not
(.btn
):not
(.cbi-button
),
840 input
[type
="checkbox"][disabled
]::before
,
841 input
[type
="checkbox"][disabled
]::after
,
842 input
[type
="radio"][disabled
]::before
,
843 input
[type
="radio"][disabled
]::after
{
844 opacity: var
(--disabled-opacity
);
845 pointer-events: none
;
852 border-color: hsla
(var
(--border-color-high-hsl
), var
(--disabled-opacity
));
853 pointer-events: auto
;
858 .cbi-section-create {
859 padding: 0 0 10px 10px;
862 .cbi-section-create {
864 display: inline-flex
;
868 .cbi-section-create > * {
873 .cbi-section-create > * > input {
879 background: var
(--background-color-low
);
881 padding: 17px 20px 18px 17px;
882 border-top: 1px solid var
(--border-color-medium
);
883 border-radius: 0 0 3px 3px;
887 .actions
.secondary-action
,
888 .cbi-page-actions .secondary-action{
892 .actions
.secondary-action a
,
893 .cbi-page-actions .secondary-action a {
897 .actions
.secondary-action
a:hover
,
898 .cbi-page-actions .secondary-action a:hover {
899 text-decoration: underline
;
902 .cbi-page-actions > form {
909 * Tables for, you guessed it, tabular data
910 * ---------------------------------------- */
911 .tr { display: table-row
; }
912 .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; }
913 .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; }
921 border-collapse: collapse
;
925 .table .th, .table .td {
927 vertical-align: middle
; /* Fixme */
928 padding: 10px 10px 9px;
933 .table .tr:first-child .th {
939 .table .td, .table .th {
940 border-top: 1px solid var
(--border-color-medium
);
944 height: calc
(3em + 20px);
947 .tr.placeholder > .td {
957 .tr.drag-over-below {
958 border: 2px solid
#0069d6;
959 border-width: 2px 0 0 0;
962 .tr.drag-over-below {
963 border-width: 0 0 2px 0;
967 * Repeatable UI elements outside the base styles provided from the scaffolding
968 * ---------------------------------------------------------------------------- */
975 margin: -5px -5px 15px -5px;
981 text-shadow: 0 -1px 0 hsla
(var
(--border-color-low-hsl
), .25);
984 header
.brand:hover
, header ul
.active
> a
{
985 background-color: #333;
986 background-color: rgba
(255, 255, 255, 0.05);
988 text-decoration: none
;
994 padding: 8px 20px 12px;
1002 header
.pull-right
{
1014 background: linear-gradient
(#333333, #222222);
1015 box-shadow: 0 1px 3px hsla
(var
(--border-color-low-hsl
), .25), inset
0 -1px 0 hsla
(var
(--border-color-low-hsl
), .01);
1017 /* the redundant properties below work around a csstidy bug */
1018 padding-left: calc
((100% - 940px) / 2);
1019 padding-right: calc
((100% - 940px) / 2);
1038 padding: 10px 10px 11px;
1040 text-decoration: none
;
1045 text-decoration: none
;
1049 background-color: #222;
1050 background-color: rgba
(0, 0, 0, 0.5);
1055 background: rgba
(255, 255, 255, 0.05);
1058 .nav .dropdown-menu {
1059 background-color: #333;
1062 .nav .dropdown-menu a.menu {
1066 .nav .dropdown-menu li a {
1068 text-shadow: 0 1px 0 rgba
(0, 0, 0, 0.5);
1071 .nav .dropdown-menu li a:hover {
1072 background-color: #191919;
1073 background-repeat: repeat-x
;
1074 background-image: linear-gradient
(to bottom
, #292929, #191919);
1078 .nav .dropdown-menu .active a {
1082 .nav .dropdown-menu li a {
1086 li
.menu
, .dropdown
{
1093 display: inline-block
;
1095 text-indent: -99999px;
1096 vertical-align: top
;
1099 border-left: 4px solid transparent
;
1100 border-right: 4px solid transparent
;
1101 border-top: 4px solid
#fff;
1106 background-color: #fff;
1119 border-color: rgba
(0, 0, 0, 0.2);
1120 border-style: solid
;
1121 border-width: 0 1px 1px;
1122 border-radius: 0 0 6px 6px;
1123 box-shadow: 0 2px 4px rgba
(0, 0, 0, 0.2);
1124 background-clip: padding-box
;
1130 background-color: transparent
;
1137 font-weight: normal
;
1140 text-shadow: 0 1px 0 #fff;
1143 .dropdown-menu a:hover {
1144 background-color: #ddd;
1145 background-repeat: repeat-x
;
1146 background-image: linear-gradient
(to bottom
, #eee, #ddd);
1148 text-decoration: none
;
1149 box-shadow: inset
0 1px 0 rgba
(0, 0, 0, 0.025), inset
0 -1px rgba
(0, 0, 0, 0.025);
1152 .dropdown:hover ul.dropdown-menu {
1156 .dropdown-menu .dropdown-menu {
1165 .tabs, .cbi-tabmenu {
1166 --tab-bar-background-color: var
(--background-color-high
);
1167 --tab-inactive-background-color-h: var
(--border-color-low-h
);
1168 --tab-inactive-background-color-s: var
(--border-color-low-s
);
1169 --tab-inactive-background-color-l: var
(--border-color-low-l
);
1170 --tab-inactive-background-color: var
(--border-color-low
);
1171 --tab-inactive-border-color: var
(--border-color-medium
);
1172 --tab-inactive-text-color-delta-l: calc
(85 / 255 * 100%);
1173 --tab-inactive-text-color-l: calc
(var
(--tab-inactive-background-color-l
) + var
(--background-color-delta-l-sign
) * var
(--tab-inactive-text-color-delta-l
));
1174 --tab-inactive-text-color: hsl
(var
(--tab-inactive-background-color-hsl
));
1175 --tab-inactive-hover-background-color: var
(--background-color-high
);
1176 --tab-active-background-color: var
(--background-color-high
);
1177 --tab-active-text-color: #0069d6;
1178 --tab-active-border-color: var
(--border-color-medium
);
1180 margin: 0 -5px 18px;
1185 background: linear-gradient
(var
(--tab-bar-background-color
) 28px, var
(--tab-inactive-border-color
) 28px);
1186 background-size: 1px 29px;
1187 background-position: left bottom
;
1190 .tabs > li, .cbi-tabmenu > li {
1193 align-items: center
;
1196 margin: 4px 2px 0 2px;
1197 background: var
(--tab-active-background-color
);
1198 border: 1px solid var
(--tab-active-border-color
);
1199 border-bottom: none
;
1200 border-radius: 4px 4px 0 0;
1201 color: var
(--primary-color-high
);
1204 .tabs > li > a, .cbi-tabmenu > li > a {
1206 white-space: nowrap
;
1208 text-overflow: ellipsis
;
1210 text-decoration: none
;
1211 border-radius: 4px 4px 0 0;
1216 .tabs > li:not(.active):hover, .cbi-tabmenu > .cbi-tab-disabled:hover {
1217 background: linear-gradient
(var
(--tab-inactive-hover-background-color
) 90%, var
(--tab-inactive-border-color
) 100%);
1220 .tabs > li:not(.active), .cbi-tabmenu > .cbi-tab-disabled {
1221 color: var
(--tab-inactive-text-color
);
1222 background: linear-gradient
(var
(--tab-inactive-background-color
) 90%, var
(--tab-inactive-border-color
) 100%);
1225 .cbi-tab-disabled[data-errors]::after {
1226 content: attr
(data-errors
);
1227 background: #c43c35;
1241 .cbi-tabmenu.map > li {
1246 .cbi-tabcontainer > fieldset.cbi-section[id] > legend {
1250 .tabs .menu-dropdown, .tabs .dropdown-menu {
1253 border-radius: 0 6px 6px 6px;
1256 .tabs a.menu:after, .tabs .dropdown-toggle:after {
1257 border-top-color: #999;
1262 .tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle {
1266 .tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after {
1267 border-top-color: #555;
1270 .tab-content
> .tab-pane
,
1271 .tab-content > div {
1275 .tab-content > .active {
1282 background: linear-gradient
(to bottom
, var
(--background-color-high
), var
(--background-color-low
));
1283 border: 1px solid var
(--border-color-medium
);
1293 .breadcrumb li:not(:last-child)::after {
1298 .breadcrumb .active a {
1299 color: var
(--text-color-medium
);
1305 border-top: 1px solid var
(--border-color-low
);
1308 align-items: baseline
;
1309 justify-content: space-between
;
1311 color: var
(--text-color-low
);
1312 /* the redundant properties below work around a csstidy bug */
1313 padding-left: calc
((100% - 940px) / 2);
1314 padding-right: calc
((100% - 940px) / 2);
1318 color: var
(--primary-color-low
);
1325 footer ul
.breadcrumb
{
1333 background: rgba
(0, 0, 0, 0.7);
1336 transition: opacity
.125s ease-in
;
1347 background: var
(--background-color-high
);
1348 border: 1px solid var
(--border-color-low
);
1349 box-shadow: 0 0 3px var
(--background-color-low
);
1350 padding: 1em 1em .5em 1em;
1355 line-height: normal
;
1356 margin-bottom: .5em;
1362 white-space: pre-wrap
;
1367 body
.modal-overlay-active
{
1372 body
.modal-overlay-active #modal_overlay
{
1376 visibility: visible
;
1379 .btn .close, .alert-message .close {
1380 font-family: Arial
, sans-serif
;
1385 .alert-message
.danger
,
1387 .alert-message
.error
,
1388 .cbi-tooltip.error {
1389 background: linear-gradient
(var
(--error-color-low
), var
(--error-color-medium
));
1390 color: var
(--on-error-color
);
1391 border-color: var
(--error-color-high
) var
(--error-color-high
) var
(--error-color-low
);
1394 .btn.success, .alert-message.success, .cbi-tooltip.success {
1395 background: linear-gradient
(var
(--success-color-low
), var
(--success-color-medium
));
1396 color: var
(--on-error-color
);
1397 border-color: var
(--success-color-high
) var
(--success-color-high
) var
(--success-color-low
);
1400 .btn.info, .alert-message.info, .cbi-tooltip.info {
1401 background: linear-gradient
(var
(--primary-color-low
), var
(--primary-color-medium
));
1402 color: var
(--on-primary-color
);
1403 border-color: var
(--primary-color-high
) var
(--primary-color-high
) var
(--primary-color-low
);
1406 .alert-message.notice, .cbi-tooltip.notice {
1407 background: linear-gradient
(var
(--background-color-low
), var
(--background-color-medium
));
1408 border-color: var
(--background-color-high
) var
(--background-color-high
) var
(--background-color-low
);
1409 color: var
(--text-color-high
);
1412 .alert-message.warning {
1413 background: linear-gradient
(var
(--warn-color-low
), var
(--warn-color-medium
));
1414 border-color: var
(--warn-color-high
) var
(--warn-color-high
) var
(--warn-color-low
);
1415 color: var
(--on-warn-color
);
1418 .modal.alert-message {
1419 color: var
(--text-color-high
);
1425 --default-btn-background: linear-gradient
(var
(--background-color-high
), var
(--background-color-high
) 25%, var
(--background-color-low
));
1426 --on-color: var
(--text-color-high
);
1429 display: inline-block
;
1430 background: var
(--default-btn-background
);
1432 color: var
(--on-color
);
1435 border: 1px solid var
(--border-color-high
);
1441 .cbi-input-invalid
.cbi-dropdown:not
(.btn
):not
(.cbi-button
),
1442 .cbi-input-invalid
.cbi-dropdown:not
([open
]) > ul
> li
,
1443 .cbi-value-error input {
1444 color: var
(--error-color-high
);
1445 border-color: var
(--error-color-medium
);
1448 .cbi-button-positive
,
1449 .cbi-button-fieldadd
,
1452 --on-color: var
(--success-color-high
);
1453 border-color: var
(--on-color
);
1456 .cbi-button-neutral
,
1457 .cbi-button-download
,
1462 color: var
(--text-color-high
);
1470 --on-color: var
(--primary-color-high
);
1471 border-color: var
(--on-color
);
1474 .cbi-button-negative
,
1475 .cbi-section-remove
.cbi-button
,
1477 .cbi-button-remove {
1478 --on-color: var
(--error-color-high
);
1479 border-color: var
(--on-color
);
1482 .cbi-page-actions::after {
1488 .cbi-page-actions > * {
1489 vertical-align: middle
;
1492 .cbi-page-actions > :not([method="post"]):not(.cbi-button-apply):not(.cbi-button-negative):not(.cbi-button-save):not(.cbi-button-reset) {
1498 .cbi-button-action
.important
,
1499 .cbi-page-actions
.cbi-button-apply
,
1500 .cbi-section-actions .cbi-button-edit {
1501 --on-color: var
(--on-primary-color
);
1502 background: linear-gradient
(var
(--primary-color-medium
), var
(--primary-color-low
));
1503 border-color: var
(--primary-color-high
);
1506 .cbi-button-positive
.important
,
1507 .cbi-page-actions .cbi-button-save {
1508 --on-color: var
(--on-success-color
);
1509 background: linear-gradient
(var
(--success-color-medium
), var
(--success-color-low
));
1510 border-color: var
(--success-color-high
);
1513 .cbi-button-negative.important {
1514 --on-color: var
(--on-error-color
);
1515 background: linear-gradient
(var
(--error-color-medium
), var
(--error-color-low
));
1516 border-color: var
(--error-color-high
);
1519 .cbi-page-actions
.cbi-button-apply
+ .cbi-button-save
,
1520 .cbi-page-actions .cbi-button-negative + .cbi-button-save {
1521 --on-color: var
(--success-color-high
);
1522 border-color: var
(--on-color
);
1523 background: var
(--default-btn-background
);
1527 display: inline-flex
!important
;
1531 padding: 0 !important
;
1534 .cbi-dropdown:not(.btn):not(.cbi-button) {
1535 background: linear-gradient
(var
(--background-color-high
) 0%, var
(--border-color-low
) 100%);
1536 border: 1px solid var
(--border-color-high
);
1538 color: var
(--text-color-high
);
1541 .cbi-dropdown > ul {
1542 margin: 0 !important
;
1551 .cbi-dropdown
.btn
> ul:not
(.dropdown
),
1552 .cbi-dropdown.cbi-button > ul:not(.dropdown) {
1553 margin: 0 0 0 13px !important
;
1556 .cbi-dropdown
.btn
.spinning
> ul:not
(.dropdown
),
1557 .cbi-dropdown.cbi-button.spinning > ul:not(.dropdown) {
1558 margin: 0 !important
;
1561 .cbi-dropdown > ul.preview {
1565 .cbi-dropdown
> .open
,
1566 .cbi-dropdown > .more {
1570 flex-direction: column
;
1571 justify-content: center
;
1577 .cbi-dropdown
.btn
> .open
,
1578 .cbi-dropdown.cbi-button > .open {
1581 border-left: 1px solid
;
1584 .cbi-dropdown
> .more
,
1585 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] {
1586 color: var
(--text-color-medium
);
1590 .cbi-dropdown > ul > li {
1592 white-space: nowrap
;
1594 text-overflow: ellipsis
;
1597 align-items: center
;
1602 .cbi-dropdown
> ul
.dropdown
> li
,
1603 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li {
1606 color: var
(--text-color-high
);
1609 .cbi-dropdown > ul > li .hide-open { display: block
; display: initial
; }
1610 .cbi-dropdown > ul > li .hide-close { display: none
; }
1612 .cbi-dropdown > ul > li[display]:not([display="0"]) {
1613 border-left: 1px solid var
(--border-color-high
);
1616 .cbi-dropdown[empty] > ul {
1620 .cbi-dropdown > ul > li > form {
1624 pointer-events: none
;
1627 .cbi-dropdown > ul > li img {
1628 vertical-align: middle
;
1629 margin-right: .25em;
1632 .cbi-dropdown > ul > li > form > input[type="checkbox"] {
1633 margin: 0 .25em 0 0;
1636 .cbi-dropdown > ul > li input[type="text"] {
1640 .cbi-dropdown[open] {
1644 .cbi-dropdown[open] > ul.dropdown {
1646 background: var
(--background-color-low
);
1647 border: 1px solid
#918e8c;
1648 box-shadow: 0 0 4px #918e8c;
1654 transition: max-height
.125s ease-in
;
1658 .cbi-dropdown
> ul
> li
[display
],
1659 .cbi-dropdown
[open
] > ul
.preview
,
1660 .cbi-dropdown
[open
] > ul
.dropdown
> li
,
1661 .cbi-dropdown
[multiple
] > ul
> li
> label
,
1662 .cbi-dropdown
[multiple
][open
] > ul
.dropdown
> li
,
1663 .cbi-dropdown
[multiple
][more
] > .more
,
1664 .cbi-dropdown[multiple][empty] > .more {
1666 display: flex
!important
;
1669 .cbi-dropdown
[empty
] > ul
> li
,
1670 .cbi-dropdown[optional][open] > ul.dropdown > li[placeholder] {
1671 display: block
!important
;
1674 .cbi-dropdown[multiple][open] > ul.dropdown > li > form {
1675 display: flex
!important
;
1678 .cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none
; }
1679 .cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block
; display: initial
; }
1681 .cbi-dropdown[open] > ul.dropdown > li {
1682 border-bottom: 1px solid var
(--border-color-high
);
1685 .cbi-dropdown[open] > ul.dropdown > li[selected] {
1686 background: var
(--primary-color-medium
);
1687 color: var
(--on-primary-color
);
1690 .cbi-dropdown[open] > ul.dropdown > li.focus {
1691 background: var
(--primary-color-low
);
1692 color: var
(--on-primary-color
);
1695 .cbi-dropdown[open] > ul.dropdown > li[selected].focus {
1696 background: linear-gradient
(90deg, var
(--primary-color-medium
) 50%, var
(--primary-color-low
));
1699 .cbi-dropdown[open] > ul.dropdown > li:last-child {
1701 border-bottom: none
;
1704 .cbi-dropdown[open] > ul.dropdown > li[unselectable] {
1708 .cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child {
1712 input
[type
="text"] + .cbi-button
,
1713 input
[type
="password"] + .cbi-button
,
1714 select
+ .cbi-button
,
1715 .cbi-select + .cbi-button {
1716 border-radius: 0 3px 3px 0;
1717 border-color: var
(--border-color-high
);
1720 vertical-align: top
;
1726 select
+ .cbi-button
,
1727 .cbi-select + .cbi-button {
1735 .cbi-title-ref::after {
1739 .cbi-tooltip-container {
1747 box-shadow: 0 0 2px var
(--border-color-high
);
1749 background: var
(--background-color-high
);
1753 transition: opacity
.25s ease-in
;
1756 .cbi-tooltip-container:hover .cbi-tooltip:not(:empty) {
1759 transition: opacity
.25s ease-in
;
1763 border: 1px solid var
(--border-color-high
);
1768 margin: 1.4em 0 4px 0;
1769 background: var
(--background-color-medium
);
1772 .cbi-progressbar > div {
1773 background: var
(--primary-color-medium
);
1775 transition: width
.25s ease-in
;
1780 .cbi-progressbar::before {
1784 content: attr
(title
);
1787 text-overflow: ellipsis
;
1790 .zonebadge .cbi-tooltip {
1792 background: inherit
;
1793 margin: -1.6em 0 0 -5px;
1795 pointer-events: none
;
1796 box-shadow: 0 0 3px #444;
1799 .zonebadge .cbi-tooltip > * {
1810 .zone-forwards > * {
1815 .zone-forwards > span {
1820 .zone-forwards
.zone-src
,
1821 .zone-forwards .zone-dest {
1823 flex-direction: column
;
1826 .btn.active, .btn:active {
1827 box-shadow: inset
0 2px 4px hsla
(var
(--border-color-low-hsl
), .25), 0 1px 2px rgba
(0, 0, 0, 0.05);
1833 opacity: var
(--disabled-opacity
);
1839 line-height: normal
;
1840 padding: 9px 14px 9px;
1845 padding: 7px 9px 7px;
1849 button
.btn::-moz-focus-inner
, input
[type
=submit
].btn::-moz-focus-inner
{
1859 line-height: 13.5px;
1860 text-shadow: 0 1px 0 #fff;
1866 text-decoration: none
;
1872 padding: .5em .5em .25em .5em;
1873 margin-bottom: .5em;
1874 color: var
(--on-warn-color
);
1875 background: linear-gradient
(#fceec1, #eedc94);
1876 border: 1px solid var
(--border-color-low
);
1877 border-color: var
(--border-color-high
) var
(--border-color-high
) var
(--border-color-low
);
1879 box-shadow: 1px 1px 1px var
(--border-color-low
);
1883 .alert-message .close {
1895 line-height: inherit
;
1896 background: transparent
;
1901 .alert-message button {
1906 header
[data-indicator
] {
1907 padding: 3px 3px 2px;
1910 color: var
(--text-color-high
);
1911 text-transform: uppercase
;
1912 white-space: nowrap
;
1913 background-color: var
(--background-color-low
);
1916 margin: .125em 0 .125em .4em;
1919 header
[data-indicator
][data-clickable
] {
1929 text-decoration: none
;
1933 background-color: var
(--primary-color-high
);
1934 color: var
(--on-primary-color
);
1938 background-color: var
(--warn-color-high
);
1939 color: var
(--on-warn-color
);
1943 background-color: var
(--success-color-high
);
1944 color: var
(--on-success-color
);
1948 header
[data-indicator
][data-style
="active"] {
1949 color: var
(--on-primary-color
);
1950 background-color: var
(--primary-color-high
);
1953 /* LuCI specific items */
1954 .hidden { display: none
}
1956 form
.inline
{ display: inline
; margin-bottom: 0; }
1958 #modemenu li:last-child span
.divider
{ display: none
}
1962 color: var
(--text-color-highest
);
1965 .cbi-section-table
.tr:hover
.td
,
1966 .cbi-section-table
.tr:hover
.th
,
1967 .cbi-section-table .tr:hover::before {
1968 background-color: var
(--background-color-low
);
1971 .cbi-section-table .tr.cbi-section-table-descr .th {
1972 font-weight: normal
;
1975 .cbi-section-table-titles
.named::before
,
1976 .cbi-section-table-descr
.named::before
,
1977 .cbi-section-table-row[data-title]::before {
1978 content: attr
(data-title
) " ";
1979 display: table-cell
;
1980 padding: 10px 10px 9px;
1983 vertical-align: middle
;
1986 .cbi-section-table-titles
.named::before
,
1987 .cbi-section-table-descr
.named::before
,
1988 .cbi-section-table-row[data-title]::before {
1989 border-top: 1px solid var
(--border-color-medium
);
1992 .left { text-align: left
!important
; }
1993 .right { text-align: right
!important
; }
1994 .center { text-align: center
!important
; }
1995 .top { vertical-align: top
!important
; }
1996 .middle { vertical-align: middle
!important
; }
1997 .bottom { vertical-align: bottom
!important
; }
2000 .cbi-value-field table td {
2004 .table
.cbi-section-table input
[type
="password"],
2005 .table
.cbi-section-table input
[type
="text"],
2006 .table
.cbi-section-table textarea
,
2007 .table
.cbi-section-table select
,
2008 .table.cbi-section-table .cbi-select {
2013 .table.cbi-section-table .td.cbi-section-table-cell {
2014 white-space: nowrap
;
2018 .table
.cbi-section-table
.td
.cbi-section-table-cell select
,
2019 .table.cbi-section-table .td.cbi-section-table-cell .cbi-select {
2023 .td.cbi-section-actions {
2025 vertical-align: middle
;
2028 .td.cbi-section-actions > * {
2032 .td
.cbi-section-actions
> * > *,
2033 .td.cbi-section-actions > * > form > * {
2038 .td.cbi-section-actions > * > form {
2039 display: inline-flex
;
2043 .table.valign-middle .td {
2044 vertical-align: middle
;
2049 .tr.cbi-section-table-titles {
2050 background: var
(--background-color-medium
);
2053 .cbi-value-description {
2054 margin: .25em 0 0 1.25em;
2058 .cbi-value-description:not(:empty)::before {
2059 --help-icon: url
("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20'><path d='M10 0A10 10 0 000 10a10 10 0 0010 10 10 10 0 0010-10A10 10 0 0010 0zm1 17H9v-2h2v2zm2.1-7.7l-.9.9c-.8.7-1.2 1.3-1.2 2.8H9v-.5c0-1.1.4-2.1 1.2-2.8l1.2-1.3c.4-.3.6-.8.6-1.4a2 2 0 00-2-2 2 2 0 00-2 2H6a4 4 0 014-4 4 4 0 014 4c0 .9-.4 1.7-.9 2.3z'/></svg>");
2064 display: inline-block
;
2067 margin-right: .25em;
2068 background: var
(--primary-color-high
);
2069 mask-image: var
(--help-icon
);
2071 -webkit-mask-image: var
(--help-icon
);
2072 -webkit-mask-size: cover
;
2075 .cbi-section-error {
2076 border: 1px solid
#f00;
2078 background-color: #fce6e6;
2080 margin-bottom: 18px;
2083 .cbi-section-error ul { margin: 0 0 0 20px; }
2085 .cbi-section-error ul li {
2091 border: 1px solid var
(--border-color-high
);
2094 white-space: nowrap
;
2095 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-medium
));
2097 box-shadow: inset
0 1px 0 hsla
(var
(--text-color-low-hsl
), 0.05);
2098 display: inline-flex
;
2099 flex-direction: column
;
2104 .ifacebox .ifacebox-head {
2105 border-bottom: 1px solid var
(--border-color-high
);
2106 border-radius: 3px 3px 0 0;
2109 color: var
(--text-color-high
);
2112 .ifacebox .ifacebox-head[style] {
2113 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2116 .ifacebox .ifacebox-head.active {
2117 background: var
(--primary-color-high
);
2118 color: var
(--on-primary-color
);
2121 [data-darkmode
="true"] .zonebadge
[style
],
2122 [data-darkmode
="true"] .ifacebox-head
[style
] {
2123 background: linear-gradient
(rgba
(var
(--zone-color-rgb
), .4), rgba
(var
(--zone-color-rgb
), .3)) !important
;
2126 .ifacebox .ifacebox-body {
2131 display: inline-block
;
2132 flex-direction: row
;
2133 white-space: nowrap
;
2134 border: 1px solid var
(--border-color-high
);
2136 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-high
) 25%, var
(--background-color-medium
));
2137 color: var
(--text-color-high
);
2138 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2140 box-shadow: inset
0 1px 0 hsla
(var
(--background-color-high-hsl
), 0.05);
2148 vertical-align: middle
;
2151 .ifacebadge-active {
2156 .network-status-table {
2161 .network-status-table .ifacebox {
2166 .network-status-table .ifacebox-body {
2168 flex-direction: column
;
2173 .network-status-table .ifacebox-body > * {
2177 .network-status-table .ifacebox-body > span {
2182 .network-status-table .ifacebox-body > div {
2188 #dsl_status_table .ifacebox-body span
> strong
{
2189 display: inline-block
;
2194 .network-status-table .ifacebox-body .ifacebadge {
2203 display: inline-flex
;
2206 .network-status-table .ifacebox-body .ifacebadge > span {
2208 text-overflow: ellipsis
;
2212 .ifacebadge.large > * {
2219 display: inline-block
;
2220 white-space: nowrap
;
2221 color: var
(--text-color-high
);
2222 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2226 .zonebadge > strong {
2228 display: inline-block
;
2235 .zonebadge > .ifacebadge {
2240 border: 1px dashed
#aaa;
2247 .td.cbi-value-field var {
2252 div
.cbi-value var
[data-tooltip
],
2253 .td
.cbi-value-field var
[data-tooltip
],
2254 div
.cbi-value var
.cbi-tooltip-container
,
2255 .td.cbi-value-field var.cbi-tooltip-container {
2257 border-bottom: 1px dotted
#0069d6;
2260 div
.cbi-value var
.cbi-tooltip-container
,
2261 .td.cbi-value-field var.cbi-tooltip-container .cbi-tooltip {
2263 white-space: normal
;
2264 color: var
(--text-color-high
);
2267 #modal_overlay > .modal
.uci-dialog
,
2268 #modal_overlay > .modal
.cbi-modal
{
2272 #modal_overlay > .modal
.login
> button
.important
{
2273 font-size: 120% !important
;
2283 .uci-dialog div
> del
,
2284 .uci-dialog div
> ins
,
2285 .uci-dialog div > var {
2287 border: 1px solid var
(--border-color-high
);
2290 text-overflow: ellipsis
;
2293 background-color: var
(--background-color-low
);
2296 .uci-dialog div > ins {
2297 background-color: rgba
(var
(--success-color-high-rgb
), .3);
2298 border-color: rgba
(var
(--success-color-high-rgb
), .6);
2301 .uci-dialog div > del {
2302 background-color: rgba
(var
(--error-color-high-rgb
), .3);
2303 border-color: rgba
(var
(--error-color-high-rgb
), .6);
2306 .uci-dialog var > ins {
2307 background-color: rgba
(var
(--success-color-high-rgb
), .3);
2310 .uci-dialog var > del {
2311 background-color: rgba
(var
(--error-color-high-rgb
), .3);
2314 .uci-change-list > var > * {
2316 text-overflow: ellipsis
;
2322 text-decoration: none
;
2323 font-family: monospace
;
2325 color: var
(--text-color-high
);
2329 .uci-change-legend {
2334 .uci-change-legend-label {
2338 align-items: center
;
2341 .uci-change-legend-label
> ins
,
2342 .uci-change-legend-label
> del
,
2343 .uci-change-legend-label > var {
2350 .uci-change-legend-label > * > * {
2355 #applyreboot-section {
2359 [data-page
="admin-network-dhcp"] [data-name
="ip"] {
2365 50% { opacity: .5; }
2366 100% { opacity: 1; }
2370 animation: flash
.35s;
2373 #view > div
.spinning:first-child
{
2380 padding-left: 32px !important
;
2384 --spinner-icon: url
("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' stroke='%23000' stroke-width='3' fill='none'><circle cx='10' cy='10' r='8' stroke-opacity='.5'/><path d='M10 2c4 0 8 4 8 8'><animateTransform attributeName='transform' type='rotate' dur='1s' from='0 10 10' to='360 10 10' repeatCount='indefinite'/></path></svg>");
2387 top: calc
(50% - 10px);
2392 background: var
(--on-color
, #000);
2393 mask: var
(--spinner-icon
) center
/cover no-repeat
;
2394 -webkit-mask: var
(--spinner-icon
) center
/cover no-repeat
;
2397 [data-darkmode
="true"] .spinning::before
{
2398 background: var
(--on-color
, #fff);
2407 [data-tab-active
="true"] {
2411 transition: opacity
.25s ease-in
;
2417 border: 1px solid
#ccc;
2420 flex-direction: column
;
2426 .cbi-filebrowser.open {
2430 transition: opacity
.25s ease-in
;
2433 .cbi-filebrowser > * {
2436 text-overflow: ellipsis
;
2437 padding: 0 0 .25em 0;
2438 margin: .25em .25em 0px .25em;
2439 white-space: nowrap
;
2440 border-bottom: 1px solid
#ccc;
2443 .cbi-filebrowser .cbi-button-positive {
2444 margin-right: .25em;
2447 .cbi-filebrowser > div {
2448 border-bottom: none
;
2451 .cbi-filebrowser > ul > li {
2453 flex-direction: row
;
2456 .cbi-filebrowser > ul > li:hover {
2457 background: #f5f5f5;
2460 .cbi-filebrowser > ul > li > div:first-child {
2463 text-overflow: ellipsis
;
2466 .cbi-filebrowser > ul > li > div:last-child {
2471 .cbi-filebrowser > ul > li > div:last-child > button {
2472 padding: .125em .25em;
2473 margin: 1px 0 1px .25em;
2476 .cbi-filebrowser .upload {
2478 flex-direction: row
;
2480 margin: 0 -.125em .25em -.125em;
2481 padding: 0 0 .125em 0px;
2482 border-bottom: 1px solid
#ccc;
2485 .cbi-filebrowser .upload > * {
2490 .cbi-filebrowser .upload > .btn {
2494 .cbi-filebrowser .upload > div {
2499 .cbi-filebrowser .upload > div > input {
2503 @keyframes fade-in
{
2505 100% { opacity: 1; }
2508 @keyframes fade-out
{
2510 100% { opacity: 0; }
2514 animation: fade-in
.4s ease
;
2518 animation: fade-out
.4s ease
;
2521 .assoclist .ifacebadge {
2523 flex-direction: column
;
2524 align-items: center
;
2525 white-space: normal
;
2529 .assoclist .ifacebadge > img {
2533 .assoclist
.td:nth-of-type
(3),
2534 .assoclist .td:nth-of-type(5) {
2538 .assoclist .td:nth-of-type(6) button {
2542 [data-darkmode
="true"] [data-page
="admin-statistics-graphs"] [data-plugin
] img
{
2543 filter: invert
(100%) hue-rotate
(150deg);