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 * ------------------------------------------------------------- */
514 color: var
(--text-color-high
);
518 form
.cbi-tab-descr
{
528 font-family: "Helvetica Neue", Helvetica
, Arial
, sans-serif
;
543 .cbi-value label.cbi-value-title {
549 color: var
(--text-color-high
);
552 label
> input
[type
="checkbox"],
553 label
> input
[type
="radio"] {
554 vertical-align: text-top
;
566 .cbi-dropdown:not(.btn):not(.cbi-button) {
567 display: inline-block
;
570 background: var
(--background-color-high
);
571 color: var
(--text-color-high
);
574 border: 1px solid var
(--border-color-high
);
581 .cbi-dropdown:not(.btn):not(.cbi-button) {
585 .cbi-dropdown:not
(.btn
):not
(.cbi-button
),
595 display: inline-flex
;
596 flex-direction: column
;
599 .cbi-dynlist > .item {
601 box-shadow: 0 0 2px var
(--border-color-high
);
602 background: var
(--background-color-high
);
603 padding: 2px 2em 2px 4px;
604 border: 1px solid var
(--border-color-high
);
606 color: var
(--text-color-high
);
608 pointer-events: none
;
610 word-break: break-all
;
613 .cbi-dynlist > .item::after {
616 display: inline-flex
;
622 border: 1px solid var
(--border-color-high
);
623 border-radius: 0 3px 3px 0;
626 pointer-events: auto
;
629 .cbi-dynlist > .add-item {
633 .cbi-dynlist
> .add-item
> input
,
634 .cbi-dynlist > .add-item > button {
637 text-overflow: ellipsis
;
641 .cbi-value-field > .cbi-checkbox {
650 background: linear-gradient
(var
(--background-color-high
), var
(--border-color-low
));
654 .cbi-select select:focus {
655 -webkit-appearance: none
;
659 background: transparent
;
667 .cbi-select::before {
674 background: linear-gradient
(var
(--background-color-high
), var
(--border-color-low
));
675 pointer-events: none
;
678 flex-direction: column
;
679 justify-content: center
;
682 .cbi-select select option {
683 background: var
(--background-color-low
);
684 color: var
(--text-color-high
);
687 .cbi-select select option:hover {
688 background: var
(--primary-color-low
);
689 color: var
(--on-primary-color
);
692 .cbi-select select option:checked {
693 background: var
(--primary-color-medium
);
694 color: var
(--on-primary-color
);
698 background-color: #fff;
701 line-height: initial
;
703 width: auto
!important
;
706 input
[type
=button
], input
[type
=reset
], input
[type
=submit
] {
713 background-color: #fff;
716 input
[type
="checkbox"],
717 input
[type
="radio"] {
718 --bd-color: var
(--border-color-high
);
719 --fg-color: var
(--text-color-high
);
722 -webkit-appearance: none
;
725 color: var
(--fg-color
);
727 display: inline-block
;
733 input
[type
="checkbox"]::before
,
734 input
[type
="checkbox"]::after
,
735 input
[type
="radio"]::before
,
736 input
[type
="radio"]::after
{
741 input
[type
="checkbox"]::before
,
742 input
[type
="radio"]::before
{
747 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-low
));
748 border: 1px solid var
(--bd-color
);
753 input
[type
="radio"]::before
{
757 input
[type
="checkbox"]::after
,
758 input
[type
="radio"]::after
{
765 input
[type
="checkbox"]:checked::after
,
766 input
[type
="radio"]:checked::after
{
767 --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>");
768 -webkit-mask: var
(--checkmark-icon
) center
/cover no-repeat
;
769 mask: var
(--checkmark-icon
) center
/cover no-repeat
;
770 background: var
(--fg-color
);
773 input
[type
="radio"]:checked:after
{
774 --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>");
777 input
[type
="checkbox"].cbi-input-invalid
,
778 input
[type
="radio"].cbi-input-invalid
{
779 --bd-color: var
(--error-color-medium
);
780 --fg-color: var
(--error-color-high
);
783 .td
> input
[type
=text
],
784 .td
> input
[type
=password
],
786 .td
> .cbi-dropdown:not
(.btn
):not
(.cbi-button
),
787 .cbi-dynlist > .add-item > .cbi-dropdown {
792 color: var
(--text-color-medium
);
800 .cbi-dynlist
> .item
,
801 input
[type
="checkbox"]::before
,
802 input
[type
="radio"]::before
,
803 input
, button
, textarea
{
804 transition: border linear
0.2s, box-shadow linear
0.2s;
805 box-shadow: inset
0 1px 3px hsla
(var
(--border-color-low-hsl
), .01);
809 .btn:hover
, .btn:focus
,
810 .cbi-button:hover
, .cbi-button:focus
,
812 .cbi-dropdown:focus
, .cbi-dropdown
[open
],
813 .cbi-dynlist
> .item:focus
,
814 input
[type
="checkbox"]:focus::before
,
815 input
[type
="radio"]:focus::before
,
816 input:focus
, button:hover
, textarea:focus
{
817 --focus-color-rgb: 82, 168, 236;
820 border-color: rgba
(var
(--focus-color-rgb
), 0.8) !important
;
821 box-shadow: inset
0 1px 3px hsla
(var
(--border-color-low-hsl
), .01), 0 0 8px rgba
(var
(--focus-color-rgb
), 0.6);
822 text-decoration: none
;
825 .cbi-input-invalid:focus
,
826 .cbi-select
.cbi-input-invalid
,
827 input
[type
="checkbox"].cbi-input-invalid:focus::before
,
828 input
[type
="radio"].cbi-input-invalid:focus::before
{
829 --focus-color-rgb: var
(--error-color-high-rgb
);
836 .cbi-select
[disabled
]::before
,
837 .cbi-dropdown
[disabled
]:not
(.btn
):not
(.cbi-button
),
838 input
[type
="checkbox"][disabled
]::before
,
839 input
[type
="checkbox"][disabled
]::after
,
840 input
[type
="radio"][disabled
]::before
,
841 input
[type
="radio"][disabled
]::after
{
842 opacity: var
(--disabled-opacity
);
843 pointer-events: none
;
850 border-color: hsla
(var
(--border-color-high-hsl
), var
(--disabled-opacity
));
851 pointer-events: auto
;
856 .cbi-section-create {
857 padding: 0 0 10px 10px;
860 .cbi-section-create {
862 display: inline-flex
;
866 .cbi-section-create > * {
871 .cbi-section-create > * > input {
877 background: var
(--background-color-low
);
879 padding: 17px 20px 18px 17px;
880 border-top: 1px solid var
(--border-color-medium
);
881 border-radius: 0 0 3px 3px;
885 .actions
.secondary-action
,
886 .cbi-page-actions .secondary-action{
890 .actions
.secondary-action a
,
891 .cbi-page-actions .secondary-action a {
895 .actions
.secondary-action
a:hover
,
896 .cbi-page-actions .secondary-action a:hover {
897 text-decoration: underline
;
900 .cbi-page-actions > form {
907 * Tables for, you guessed it, tabular data
908 * ---------------------------------------- */
909 .tr { display: table-row
; }
910 .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; }
911 .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; }
919 border-collapse: collapse
;
923 .table .th, .table .td {
925 vertical-align: middle
; /* Fixme */
926 padding: 10px 10px 9px;
931 .table .tr:first-child .th {
937 .table .td, .table .th {
938 border-top: 1px solid var
(--border-color-medium
);
942 height: calc
(3em + 20px);
945 .tr.placeholder > .td {
955 .tr.drag-over-below {
956 border: 2px solid
#0069d6;
957 border-width: 2px 0 0 0;
960 .tr.drag-over-below {
961 border-width: 0 0 2px 0;
965 * Repeatable UI elements outside the base styles provided from the scaffolding
966 * ---------------------------------------------------------------------------- */
973 margin: -5px -5px 15px -5px;
979 text-shadow: 0 -1px 0 hsla
(var
(--border-color-low-hsl
), .25);
982 header
.brand:hover
, header ul
.active
> a
{
983 background-color: #333;
984 background-color: rgba
(255, 255, 255, 0.05);
986 text-decoration: none
;
992 padding: 8px 20px 12px;
1000 header
.pull-right
{
1012 background: linear-gradient
(#333333, #222222);
1013 box-shadow: 0 1px 3px hsla
(var
(--border-color-low-hsl
), .25), inset
0 -1px 0 hsla
(var
(--border-color-low-hsl
), .01);
1015 /* the redundant properties below work around a csstidy bug */
1016 padding-left: calc
((100% - 940px) / 2);
1017 padding-right: calc
((100% - 940px) / 2);
1036 padding: 10px 10px 11px;
1038 text-decoration: none
;
1043 text-decoration: none
;
1047 background-color: #222;
1048 background-color: rgba
(0, 0, 0, 0.5);
1053 background: rgba
(255, 255, 255, 0.05);
1056 .nav .dropdown-menu {
1057 background-color: #333;
1060 .nav .dropdown-menu a.menu {
1064 .nav .dropdown-menu li a {
1066 text-shadow: 0 1px 0 rgba
(0, 0, 0, 0.5);
1069 .nav .dropdown-menu li a:hover {
1070 background-color: #191919;
1071 background-repeat: repeat-x
;
1072 background-image: linear-gradient
(to bottom
, #292929, #191919);
1076 .nav .dropdown-menu .active a {
1080 .nav .dropdown-menu li a {
1084 li
.menu
, .dropdown
{
1091 display: inline-block
;
1093 text-indent: -99999px;
1094 vertical-align: top
;
1097 border-left: 4px solid transparent
;
1098 border-right: 4px solid transparent
;
1099 border-top: 4px solid
#fff;
1104 background-color: #fff;
1117 border-color: rgba
(0, 0, 0, 0.2);
1118 border-style: solid
;
1119 border-width: 0 1px 1px;
1120 border-radius: 0 0 6px 6px;
1121 box-shadow: 0 2px 4px rgba
(0, 0, 0, 0.2);
1122 background-clip: padding-box
;
1128 background-color: transparent
;
1135 font-weight: normal
;
1138 text-shadow: 0 1px 0 #fff;
1141 .dropdown-menu a:hover {
1142 background-color: #ddd;
1143 background-repeat: repeat-x
;
1144 background-image: linear-gradient
(to bottom
, #eee, #ddd);
1146 text-decoration: none
;
1147 box-shadow: inset
0 1px 0 rgba
(0, 0, 0, 0.025), inset
0 -1px rgba
(0, 0, 0, 0.025);
1150 .dropdown:hover ul.dropdown-menu {
1154 .dropdown-menu .dropdown-menu {
1163 .tabs, .cbi-tabmenu {
1164 --tab-bar-background-color: var
(--background-color-high
);
1165 --tab-inactive-background-color-h: var
(--border-color-low-h
);
1166 --tab-inactive-background-color-s: var
(--border-color-low-s
);
1167 --tab-inactive-background-color-l: var
(--border-color-low-l
);
1168 --tab-inactive-background-color: var
(--border-color-low
);
1169 --tab-inactive-border-color: var
(--border-color-medium
);
1170 --tab-inactive-text-color-delta-l: calc
(85 / 255 * 100%);
1171 --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
));
1172 --tab-inactive-text-color: hsl
(var
(--tab-inactive-background-color-hsl
));
1173 --tab-inactive-hover-background-color: var
(--background-color-high
);
1174 --tab-active-background-color: var
(--background-color-high
);
1175 --tab-active-text-color: #0069d6;
1176 --tab-active-border-color: var
(--border-color-medium
);
1178 margin: 0 -5px 18px;
1183 background: linear-gradient
(var
(--tab-bar-background-color
) 28px, var
(--tab-inactive-border-color
) 28px);
1184 background-size: 1px 29px;
1185 background-position: left bottom
;
1188 .tabs > li, .cbi-tabmenu > li {
1191 align-items: center
;
1194 margin: 4px 2px 0 2px;
1195 background: var
(--tab-active-background-color
);
1196 border: 1px solid var
(--tab-active-border-color
);
1197 border-bottom: none
;
1198 border-radius: 4px 4px 0 0;
1199 color: var
(--primary-color-high
);
1202 .tabs > li > a, .cbi-tabmenu > li > a {
1204 white-space: nowrap
;
1206 text-overflow: ellipsis
;
1208 text-decoration: none
;
1209 border-radius: 4px 4px 0 0;
1214 .tabs > li:not(.active):hover, .cbi-tabmenu > .cbi-tab-disabled:hover {
1215 background: linear-gradient
(var
(--tab-inactive-hover-background-color
) 90%, var
(--tab-inactive-border-color
) 100%);
1218 .tabs > li:not(.active), .cbi-tabmenu > .cbi-tab-disabled {
1219 color: var
(--tab-inactive-text-color
);
1220 background: linear-gradient
(var
(--tab-inactive-background-color
) 90%, var
(--tab-inactive-border-color
) 100%);
1223 .cbi-tab-disabled[data-errors]::after {
1224 content: attr
(data-errors
);
1225 background: #c43c35;
1239 .cbi-tabmenu.map > li {
1244 .cbi-tabcontainer > fieldset.cbi-section[id] > legend {
1248 .tabs .menu-dropdown, .tabs .dropdown-menu {
1251 border-radius: 0 6px 6px 6px;
1254 .tabs a.menu:after, .tabs .dropdown-toggle:after {
1255 border-top-color: #999;
1260 .tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle {
1264 .tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after {
1265 border-top-color: #555;
1268 .tab-content
> .tab-pane
,
1269 .tab-content > div {
1273 .tab-content > .active {
1280 background: linear-gradient
(to bottom
, var
(--background-color-high
), var
(--background-color-low
));
1281 border: 1px solid var
(--border-color-medium
);
1291 .breadcrumb li:not(:last-child)::after {
1296 .breadcrumb .active a {
1297 color: var
(--text-color-medium
);
1303 border-top: 1px solid var
(--border-color-low
);
1306 align-items: baseline
;
1307 justify-content: space-between
;
1309 color: var
(--text-color-low
);
1310 /* the redundant properties below work around a csstidy bug */
1311 padding-left: calc
((100% - 940px) / 2);
1312 padding-right: calc
((100% - 940px) / 2);
1316 color: var
(--primary-color-low
);
1323 footer ul
.breadcrumb
{
1331 background: rgba
(0, 0, 0, 0.7);
1334 transition: opacity
.125s ease-in
;
1345 background: var
(--background-color-high
);
1346 border: 1px solid var
(--border-color-low
);
1347 box-shadow: 0 0 3px var
(--background-color-low
);
1348 padding: 1em 1em .5em 1em;
1353 line-height: normal
;
1354 margin-bottom: .5em;
1360 white-space: pre-wrap
;
1365 body
.modal-overlay-active
{
1370 body
.modal-overlay-active #modal_overlay
{
1374 visibility: visible
;
1377 .btn .close, .alert-message .close {
1378 font-family: Arial
, sans-serif
;
1383 .alert-message
.danger
,
1385 .alert-message
.error
,
1386 .cbi-tooltip.error {
1387 background: linear-gradient
(var
(--error-color-low
), var
(--error-color-medium
));
1388 color: var
(--on-error-color
);
1389 border-color: var
(--error-color-high
) var
(--error-color-high
) var
(--error-color-low
);
1392 .btn.success, .alert-message.success, .cbi-tooltip.success {
1393 background: linear-gradient
(var
(--success-color-low
), var
(--success-color-medium
));
1394 color: var
(--on-error-color
);
1395 border-color: var
(--success-color-high
) var
(--success-color-high
) var
(--success-color-low
);
1398 .btn.info, .alert-message.info, .cbi-tooltip.info {
1399 background: linear-gradient
(var
(--primary-color-low
), var
(--primary-color-medium
));
1400 color: var
(--on-primary-color
);
1401 border-color: var
(--primary-color-high
) var
(--primary-color-high
) var
(--primary-color-low
);
1404 .alert-message.notice, .cbi-tooltip.notice {
1405 background: linear-gradient
(var
(--background-color-low
), var
(--background-color-medium
));
1406 border-color: var
(--background-color-high
) var
(--background-color-high
) var
(--background-color-low
);
1407 color: var
(--text-color-high
);
1410 .alert-message.warning {
1411 background: linear-gradient
(var
(--warn-color-low
), var
(--warn-color-medium
));
1412 border-color: var
(--warn-color-high
) var
(--warn-color-high
) var
(--warn-color-low
);
1413 color: var
(--on-warn-color
);
1416 .modal.alert-message {
1417 color: var
(--text-color-high
);
1423 --default-btn-background: linear-gradient
(var
(--background-color-high
), var
(--background-color-high
) 25%, var
(--background-color-low
));
1424 --on-color: var
(--text-color-high
);
1427 display: inline-block
;
1428 background: var
(--default-btn-background
);
1430 color: var
(--on-color
);
1433 border: 1px solid var
(--border-color-high
);
1439 .cbi-input-invalid
.cbi-dropdown:not
(.btn
):not
(.cbi-button
),
1440 .cbi-input-invalid
.cbi-dropdown:not
([open
]) > ul
> li
,
1441 .cbi-value-error input {
1442 color: var
(--error-color-high
);
1443 border-color: var
(--error-color-medium
);
1446 .cbi-button-positive
,
1447 .cbi-button-fieldadd
,
1450 --on-color: var
(--success-color-high
);
1451 border-color: var
(--on-color
);
1454 .cbi-button-neutral
,
1455 .cbi-button-download
,
1460 color: var
(--text-color-high
);
1468 --on-color: var
(--primary-color-high
);
1469 border-color: var
(--on-color
);
1472 .cbi-button-negative
,
1473 .cbi-section-remove
.cbi-button
,
1475 .cbi-button-remove {
1476 --on-color: var
(--error-color-high
);
1477 border-color: var
(--on-color
);
1480 .cbi-page-actions::after {
1486 .cbi-page-actions > * {
1487 vertical-align: middle
;
1490 .cbi-page-actions > :not([method="post"]):not(.cbi-button-apply):not(.cbi-button-negative):not(.cbi-button-save):not(.cbi-button-reset) {
1496 .cbi-button-action
.important
,
1497 .cbi-page-actions
.cbi-button-apply
,
1498 .cbi-section-actions .cbi-button-edit {
1499 --on-color: var
(--on-primary-color
);
1500 background: linear-gradient
(var
(--primary-color-medium
), var
(--primary-color-low
));
1501 border-color: var
(--primary-color-high
);
1504 .cbi-button-positive
.important
,
1505 .cbi-page-actions .cbi-button-save {
1506 --on-color: var
(--on-success-color
);
1507 background: linear-gradient
(var
(--success-color-medium
), var
(--success-color-low
));
1508 border-color: var
(--success-color-high
);
1511 .cbi-button-negative.important {
1512 --on-color: var
(--on-error-color
);
1513 background: linear-gradient
(var
(--error-color-medium
), var
(--error-color-low
));
1514 border-color: var
(--error-color-high
);
1517 .cbi-page-actions
.cbi-button-apply
+ .cbi-button-save
,
1518 .cbi-page-actions .cbi-button-negative + .cbi-button-save {
1519 --on-color: var
(--success-color-high
);
1520 border-color: var
(--on-color
);
1521 background: var
(--default-btn-background
);
1525 display: inline-flex
!important
;
1529 padding: 0 !important
;
1532 .cbi-dropdown:not(.btn):not(.cbi-button) {
1533 background: linear-gradient
(var
(--background-color-high
) 0%, var
(--border-color-low
) 100%);
1534 border: 1px solid var
(--border-color-high
);
1536 color: var
(--text-color-high
);
1539 .cbi-dropdown > ul {
1540 margin: 0 !important
;
1549 .cbi-dropdown
.btn
> ul:not
(.dropdown
),
1550 .cbi-dropdown.cbi-button > ul:not(.dropdown) {
1551 margin: 0 0 0 13px !important
;
1554 .cbi-dropdown
.btn
.spinning
> ul:not
(.dropdown
),
1555 .cbi-dropdown.cbi-button.spinning > ul:not(.dropdown) {
1556 margin: 0 !important
;
1559 .cbi-dropdown > ul.preview {
1563 .cbi-dropdown
> .open
,
1564 .cbi-dropdown > .more {
1568 flex-direction: column
;
1569 justify-content: center
;
1575 .cbi-dropdown
.btn
> .open
,
1576 .cbi-dropdown.cbi-button > .open {
1579 border-left: 1px solid
;
1582 .cbi-dropdown
> .more
,
1583 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] {
1584 color: var
(--text-color-medium
);
1588 .cbi-dropdown > ul > li {
1590 white-space: nowrap
;
1592 text-overflow: ellipsis
;
1595 align-items: center
;
1600 .cbi-dropdown
> ul
.dropdown
> li
,
1601 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li {
1604 color: var
(--text-color-high
);
1607 .cbi-dropdown > ul > li .hide-open { display: block
; display: initial
; }
1608 .cbi-dropdown > ul > li .hide-close { display: none
; }
1610 .cbi-dropdown > ul > li[display]:not([display="0"]) {
1611 border-left: 1px solid var
(--border-color-high
);
1614 .cbi-dropdown[empty] > ul {
1618 .cbi-dropdown > ul > li > form {
1622 pointer-events: none
;
1625 .cbi-dropdown > ul > li img {
1626 vertical-align: middle
;
1627 margin-right: .25em;
1630 .cbi-dropdown > ul > li > form > input[type="checkbox"] {
1631 margin: 0 .25em 0 0;
1634 .cbi-dropdown > ul > li input[type="text"] {
1638 .cbi-dropdown[open] {
1642 .cbi-dropdown[open] > ul.dropdown {
1644 background: var
(--background-color-low
);
1645 border: 1px solid
#918e8c;
1646 box-shadow: 0 0 4px #918e8c;
1652 transition: max-height
.125s ease-in
;
1656 .cbi-dropdown
> ul
> li
[display
],
1657 .cbi-dropdown
[open
] > ul
.preview
,
1658 .cbi-dropdown
[open
] > ul
.dropdown
> li
,
1659 .cbi-dropdown
[multiple
] > ul
> li
> label
,
1660 .cbi-dropdown
[multiple
][open
] > ul
.dropdown
> li
,
1661 .cbi-dropdown
[multiple
][more
] > .more
,
1662 .cbi-dropdown[multiple][empty] > .more {
1664 display: flex
!important
;
1667 .cbi-dropdown
[empty
] > ul
> li
,
1668 .cbi-dropdown[optional][open] > ul.dropdown > li[placeholder] {
1669 display: block
!important
;
1672 .cbi-dropdown[multiple][open] > ul.dropdown > li > form {
1673 display: flex
!important
;
1676 .cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none
; }
1677 .cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block
; display: initial
; }
1679 .cbi-dropdown[open] > ul.dropdown > li {
1680 border-bottom: 1px solid var
(--border-color-high
);
1683 .cbi-dropdown[open] > ul.dropdown > li[selected] {
1684 background: var
(--primary-color-medium
);
1685 color: var
(--on-primary-color
);
1688 .cbi-dropdown[open] > ul.dropdown > li.focus {
1689 background: var
(--primary-color-low
);
1690 color: var
(--on-primary-color
);
1693 .cbi-dropdown[open] > ul.dropdown > li[selected].focus {
1694 background: linear-gradient
(90deg, var
(--primary-color-medium
) 50%, var
(--primary-color-low
));
1697 .cbi-dropdown[open] > ul.dropdown > li:last-child {
1699 border-bottom: none
;
1702 .cbi-dropdown[open] > ul.dropdown > li[unselectable] {
1706 .cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child {
1710 input
[type
="text"] + .cbi-button
,
1711 input
[type
="password"] + .cbi-button
,
1712 select
+ .cbi-button
,
1713 .cbi-select + .cbi-button {
1714 border-radius: 0 3px 3px 0;
1715 border-color: var
(--border-color-high
);
1718 vertical-align: top
;
1724 select
+ .cbi-button
,
1725 .cbi-select + .cbi-button {
1733 .cbi-title-ref::after {
1737 .cbi-tooltip-container {
1745 box-shadow: 0 0 2px var
(--border-color-high
);
1747 background: var
(--background-color-high
);
1751 transition: opacity
.25s ease-in
;
1754 .cbi-tooltip-container:hover .cbi-tooltip:not(:empty) {
1757 transition: opacity
.25s ease-in
;
1761 border: 1px solid var
(--border-color-high
);
1766 margin: 1.4em 0 4px 0;
1767 background: var
(--background-color-medium
);
1770 .cbi-progressbar > div {
1771 background: var
(--primary-color-medium
);
1773 transition: width
.25s ease-in
;
1778 .cbi-progressbar::before {
1782 content: attr
(title
);
1785 text-overflow: ellipsis
;
1788 .zonebadge .cbi-tooltip {
1790 background: inherit
;
1791 margin: -1.6em 0 0 -5px;
1793 pointer-events: none
;
1794 box-shadow: 0 0 3px #444;
1797 .zonebadge .cbi-tooltip > * {
1808 .zone-forwards > * {
1813 .zone-forwards > span {
1818 .zone-forwards
.zone-src
,
1819 .zone-forwards .zone-dest {
1821 flex-direction: column
;
1824 .btn.active, .btn:active {
1825 box-shadow: inset
0 2px 4px hsla
(var
(--border-color-low-hsl
), .25), 0 1px 2px rgba
(0, 0, 0, 0.05);
1831 opacity: var
(--disabled-opacity
);
1837 line-height: normal
;
1838 padding: 9px 14px 9px;
1843 padding: 7px 9px 7px;
1847 button
.btn::-moz-focus-inner
, input
[type
=submit
].btn::-moz-focus-inner
{
1857 line-height: 13.5px;
1858 text-shadow: 0 1px 0 #fff;
1864 text-decoration: none
;
1870 padding: .5em .5em .25em .5em;
1871 margin-bottom: .5em;
1872 color: var
(--on-warn-color
);
1873 background: linear-gradient
(#fceec1, #eedc94);
1874 border: 1px solid var
(--border-color-low
);
1875 border-color: var
(--border-color-high
) var
(--border-color-high
) var
(--border-color-low
);
1877 box-shadow: 1px 1px 1px var
(--border-color-low
);
1881 .alert-message .close {
1893 line-height: inherit
;
1894 background: transparent
;
1899 .alert-message button {
1904 header
[data-indicator
] {
1905 padding: 3px 3px 2px;
1908 color: var
(--text-color-high
);
1909 text-transform: uppercase
;
1910 white-space: nowrap
;
1911 background-color: var
(--background-color-low
);
1914 margin: .125em 0 .125em .4em;
1917 header
[data-indicator
][data-clickable
] {
1927 text-decoration: none
;
1931 background-color: var
(--primary-color-high
);
1932 color: var
(--on-primary-color
);
1936 background-color: var
(--warn-color-high
);
1937 color: var
(--on-warn-color
);
1941 background-color: var
(--success-color-high
);
1942 color: var
(--on-success-color
);
1946 header
[data-indicator
][data-style
="active"] {
1947 color: var
(--on-primary-color
);
1948 background-color: var
(--primary-color-high
);
1951 /* LuCI specific items */
1952 .hidden { display: none
}
1954 form
.inline
{ display: inline
; margin-bottom: 0; }
1956 #modemenu li:last-child span
.divider
{ display: none
}
1960 color: var
(--text-color-highest
);
1963 .cbi-section-table
.tr:hover
.td
,
1964 .cbi-section-table
.tr:hover
.th
,
1965 .cbi-section-table .tr:hover::before {
1966 background-color: var
(--background-color-low
);
1969 .cbi-section-table .tr.cbi-section-table-descr .th {
1970 font-weight: normal
;
1973 .cbi-section-table-titles
.named::before
,
1974 .cbi-section-table-descr
.named::before
,
1975 .cbi-section-table-row[data-title]::before {
1976 content: attr
(data-title
) " ";
1977 display: table-cell
;
1978 padding: 10px 10px 9px;
1981 vertical-align: middle
;
1984 .cbi-section-table-titles
.named::before
,
1985 .cbi-section-table-descr
.named::before
,
1986 .cbi-section-table-row[data-title]::before {
1987 border-top: 1px solid var
(--border-color-medium
);
1990 .left { text-align: left
!important
; }
1991 .right { text-align: right
!important
; }
1992 .center { text-align: center
!important
; }
1993 .top { vertical-align: top
!important
; }
1994 .middle { vertical-align: middle
!important
; }
1995 .bottom { vertical-align: bottom
!important
; }
1998 .cbi-value-field table td {
2002 .table
.cbi-section-table input
[type
="password"],
2003 .table
.cbi-section-table input
[type
="text"],
2004 .table
.cbi-section-table textarea
,
2005 .table
.cbi-section-table select
,
2006 .table.cbi-section-table .cbi-select {
2011 .table.cbi-section-table .td.cbi-section-table-cell {
2012 white-space: nowrap
;
2016 .table
.cbi-section-table
.td
.cbi-section-table-cell select
,
2017 .table.cbi-section-table .td.cbi-section-table-cell .cbi-select {
2021 .td.cbi-section-actions {
2023 vertical-align: middle
;
2026 .td.cbi-section-actions > * {
2030 .td
.cbi-section-actions
> * > *,
2031 .td.cbi-section-actions > * > form > * {
2036 .td.cbi-section-actions > * > form {
2037 display: inline-flex
;
2041 .table.valign-middle .td {
2042 vertical-align: middle
;
2047 .tr.cbi-section-table-titles {
2048 background: var
(--background-color-medium
);
2051 .cbi-value-description {
2052 margin: .25em 0 0 1.25em;
2056 .cbi-value-description:not(:empty)::before {
2057 --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>");
2062 display: inline-block
;
2065 margin-right: .25em;
2066 background: var
(--primary-color-high
);
2067 mask-image: var
(--help-icon
);
2069 -webkit-mask-image: var
(--help-icon
);
2070 -webkit-mask-size: cover
;
2073 .cbi-section-error {
2074 border: 1px solid
#f00;
2076 background-color: #fce6e6;
2078 margin-bottom: 18px;
2081 .cbi-section-error ul { margin: 0 0 0 20px; }
2083 .cbi-section-error ul li {
2089 border: 1px solid var
(--border-color-high
);
2092 white-space: nowrap
;
2093 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-medium
));
2095 box-shadow: inset
0 1px 0 hsla
(var
(--text-color-low-hsl
), 0.05);
2096 display: inline-flex
;
2097 flex-direction: column
;
2102 .ifacebox .ifacebox-head {
2103 border-bottom: 1px solid var
(--border-color-high
);
2104 border-radius: 3px 3px 0 0;
2107 color: var
(--text-color-high
);
2110 .ifacebox .ifacebox-head[style] {
2111 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2114 .ifacebox .ifacebox-head.active {
2115 background: var
(--primary-color-high
);
2116 color: var
(--on-primary-color
);
2119 [data-darkmode
="true"] .zonebadge
[style
],
2120 [data-darkmode
="true"] .ifacebox-head
[style
] {
2121 background: linear-gradient
(rgba
(var
(--zone-color-rgb
), .4), rgba
(var
(--zone-color-rgb
), .3)) !important
;
2124 .ifacebox .ifacebox-body {
2129 display: inline-block
;
2130 flex-direction: row
;
2131 white-space: nowrap
;
2132 border: 1px solid var
(--border-color-high
);
2134 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-high
) 25%, var
(--background-color-medium
));
2135 color: var
(--text-color-high
);
2136 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2138 box-shadow: inset
0 1px 0 hsla
(var
(--background-color-high-hsl
), 0.05);
2146 vertical-align: middle
;
2149 .ifacebadge-active {
2154 .network-status-table {
2159 .network-status-table .ifacebox {
2164 .network-status-table .ifacebox-body {
2166 flex-direction: column
;
2171 .network-status-table .ifacebox-body > * {
2175 .network-status-table .ifacebox-body > span {
2180 .network-status-table .ifacebox-body > div {
2186 #dsl_status_table .ifacebox-body span
> strong
{
2187 display: inline-block
;
2192 .network-status-table .ifacebox-body .ifacebadge {
2201 display: inline-flex
;
2204 .network-status-table .ifacebox-body .ifacebadge > span {
2206 text-overflow: ellipsis
;
2210 .ifacebadge.large > * {
2217 display: inline-block
;
2218 white-space: nowrap
;
2219 color: var
(--text-color-high
);
2220 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2224 .zonebadge > strong {
2226 display: inline-block
;
2233 .zonebadge > .ifacebadge {
2238 border: 1px dashed
#aaa;
2245 .td.cbi-value-field var {
2250 div
.cbi-value var
[data-tooltip
],
2251 .td
.cbi-value-field var
[data-tooltip
],
2252 div
.cbi-value var
.cbi-tooltip-container
,
2253 .td.cbi-value-field var.cbi-tooltip-container {
2255 border-bottom: 1px dotted
#0069d6;
2258 div
.cbi-value var
.cbi-tooltip-container
,
2259 .td.cbi-value-field var.cbi-tooltip-container .cbi-tooltip {
2261 white-space: normal
;
2262 color: var
(--text-color-high
);
2265 #modal_overlay > .modal
.uci-dialog
,
2266 #modal_overlay > .modal
.cbi-modal
{
2270 #modal_overlay > .modal
.login
> button
.important
{
2271 font-size: 120% !important
;
2281 .uci-dialog div
> del
,
2282 .uci-dialog div
> ins
,
2283 .uci-dialog div > var {
2285 border: 1px solid var
(--border-color-high
);
2288 text-overflow: ellipsis
;
2291 background-color: var
(--background-color-low
);
2294 .uci-dialog div > ins {
2295 background-color: rgba
(var
(--success-color-high-rgb
), .3);
2296 border-color: rgba
(var
(--success-color-high-rgb
), .6);
2299 .uci-dialog div > del {
2300 background-color: rgba
(var
(--error-color-high-rgb
), .3);
2301 border-color: rgba
(var
(--error-color-high-rgb
), .6);
2304 .uci-dialog var > ins {
2305 background-color: rgba
(var
(--success-color-high-rgb
), .3);
2308 .uci-dialog var > del {
2309 background-color: rgba
(var
(--error-color-high-rgb
), .3);
2312 .uci-change-list > var > * {
2314 text-overflow: ellipsis
;
2320 text-decoration: none
;
2321 font-family: monospace
;
2323 color: var
(--text-color-high
);
2327 .uci-change-legend {
2332 .uci-change-legend-label {
2336 align-items: center
;
2339 .uci-change-legend-label
> ins
,
2340 .uci-change-legend-label
> del
,
2341 .uci-change-legend-label > var {
2348 .uci-change-legend-label > * > * {
2353 #applyreboot-section {
2357 [data-page
="admin-network-dhcp"] [data-name
="ip"] {
2363 50% { opacity: .5; }
2364 100% { opacity: 1; }
2368 animation: flash
.35s;
2371 #view > div
.spinning:first-child
{
2378 padding-left: 32px !important
;
2382 --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>");
2385 top: calc
(50% - 10px);
2390 background: var
(--on-color
, #000);
2391 mask: var
(--spinner-icon
) center
/cover no-repeat
;
2392 -webkit-mask: var
(--spinner-icon
) center
/cover no-repeat
;
2395 [data-darkmode
="true"] .spinning::before
{
2396 background: var
(--on-color
, #fff);
2405 [data-tab-active
="true"] {
2409 transition: opacity
.25s ease-in
;
2415 border: 1px solid
#ccc;
2418 flex-direction: column
;
2424 .cbi-filebrowser.open {
2428 transition: opacity
.25s ease-in
;
2431 .cbi-filebrowser > * {
2434 text-overflow: ellipsis
;
2435 padding: 0 0 .25em 0;
2436 margin: .25em .25em 0px .25em;
2437 white-space: nowrap
;
2438 border-bottom: 1px solid
#ccc;
2441 .cbi-filebrowser .cbi-button-positive {
2442 margin-right: .25em;
2445 .cbi-filebrowser > div {
2446 border-bottom: none
;
2449 .cbi-filebrowser > ul > li {
2451 flex-direction: row
;
2454 .cbi-filebrowser > ul > li:hover {
2455 background: #f5f5f5;
2458 .cbi-filebrowser > ul > li > div:first-child {
2461 text-overflow: ellipsis
;
2464 .cbi-filebrowser > ul > li > div:last-child {
2469 .cbi-filebrowser > ul > li > div:last-child > button {
2470 padding: .125em .25em;
2471 margin: 1px 0 1px .25em;
2474 .cbi-filebrowser .upload {
2476 flex-direction: row
;
2478 margin: 0 -.125em .25em -.125em;
2479 padding: 0 0 .125em 0px;
2480 border-bottom: 1px solid
#ccc;
2483 .cbi-filebrowser .upload > * {
2488 .cbi-filebrowser .upload > .btn {
2492 .cbi-filebrowser .upload > div {
2497 .cbi-filebrowser .upload > div > input {
2501 @keyframes fade-in
{
2503 100% { opacity: 1; }
2506 @keyframes fade-out
{
2508 100% { opacity: 0; }
2512 animation: fade-in
.4s ease
;
2516 animation: fade-out
.4s ease
;
2519 .assoclist .ifacebadge {
2521 flex-direction: column
;
2522 align-items: center
;
2523 white-space: normal
;
2527 .assoclist .ifacebadge > img {
2531 .assoclist
.td:nth-of-type
(3),
2532 .assoclist .td:nth-of-type(5) {
2536 .assoclist .td:nth-of-type(6) button {
2540 [data-darkmode
="true"] [data-page
="admin-statistics-graphs"] [data-plugin
] img
{
2541 filter: invert
(100%) hue-rotate
(150deg);