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 * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */
158 scroll-margin-top: 40px;
161 *, *::before
, *::after
{
165 box-sizing: border-box
;
168 abbr
[title
], acronym
[title
] {
169 border-bottom: 1px dotted
;
170 font-weight: inherit
;
175 border-collapse: collapse
;
185 -webkit-text-size-adjust: 100%;
186 -ms-text-size-adjust: 100%;
191 outline: thin dotted
;
202 vertical-align: baseline
;
214 -ms-interpolation-mode: bicubic
;
224 box-sizing: border-box
;
225 vertical-align: baseline
;
229 button::-moz-focus-inner
, input::-moz-focus-inner
{
235 input
[type
="button"],
237 input
[type
="submit"] {
239 -webkit-appearance: button
;
240 word-break: break-all
;
244 input
[type
="button"][disabled
],
245 input
[type
="reset"][disabled
],
246 input
[type
="submit"][disabled
] {
247 opacity: var
(--disabled-opacity
);
250 input
[type
="search"] {
251 -webkit-appearance: textfield
;
252 box-sizing: content-box
;
255 input
[type
="search"]::-webkit-search-decoration
{
256 -webkit-appearance: none
;
265 display: inline-flex
;
269 .control-group
> input
+ :not
(input
):not
(select
),
270 .control-group > select + :not(input):not(select) {
271 margin-left: calc
(-.2em + -2px);
272 border-radius: 0 3px 3px 0;
278 * Basic and global styles for generating a grid system, structural layout, and page templates
279 * ------------------------------------------------------------------------------------------- */
281 background-color: var
(--background-color-high
);
282 font-family: "Helvetica Neue", Helvetica
, Arial
, sans-serif
;
286 color: var
(--text-color-high
);
290 flex-direction: column
;
302 color: var
(--primary-color-high
);
303 text-decoration: none
;
304 line-height: inherit
;
305 font-weight: inherit
;
309 color: var
(--primary-color-low
);
310 text-decoration: underline
;
326 * Headings, body text, lists, code, and more for a versatile and durable typography system
327 * ---------------------------------------------------------------------------------------- */
331 .table .tr.cbi-section-table-descr .th {
340 color: var
(--text-color-low
);
350 color: var
(--text-color-high
);
359 color: var
(--text-color-low
);
410 color: var
(--text-color-low
);
411 text-transform: uppercase
;
415 margin: 0 0 18px 25px;
435 color: var
(--text-color-medium
);
462 border-bottom: 1px solid var
(--border-color-low
);
472 font-weight: inherit
;
473 line-height: inherit
;
476 small
{ font-size: 0.9em }
486 font-family: Monaco
, Andale Mono
, Courier New
, monospace
;
492 background-color: var
(--border-color-low
);
493 color: var
(--text-color-high
);
498 --border-color-h: var
(--background-color-h
);
499 --border-color-s: var
(--background-color-s
);
500 --border-color-delta-l: 100%;
501 --border-color-l: calc
(var
(--background-color-l
) + var
(--background-color-delta-l-sign
) * var
(--border-color-delta-l
));
502 --border-color-a: 0.15;
503 --border-color: hsla
(var
(--border-color-hsl
), var
(--border-color-a
));
505 background-color: var
(--background-color-low
);
511 border: 1px solid var
(--border-color
);
514 white-space: pre-wrap
;
515 word-wrap: break-word
;
519 * Base styles for various input types, form layouts, and states
520 * ------------------------------------------------------------- */
530 color: var
(--text-color-high
);
539 font-family: "Helvetica Neue", Helvetica
, Arial
, sans-serif
;
556 .cbi-value label.cbi-value-title {
562 color: var
(--text-color-high
);
565 .cbi-value
> .cbi-section
,
566 .cbi-value > .cbi-tblsection {
570 label
> input
[type
="checkbox"],
571 label
> input
[type
="radio"] {
572 vertical-align: text-top
;
584 .cbi-dropdown:not(.btn):not(.cbi-button) {
585 display: inline-block
;
588 background: var
(--background-color-high
);
589 color: var
(--text-color-high
);
592 border: 1px solid var
(--border-color-high
);
599 .cbi-dropdown:not(.btn):not(.cbi-button) {
603 .cbi-dropdown:not
(.btn
):not
(.cbi-button
),
613 display: inline-flex
;
614 flex-direction: column
;
617 .cbi-dynlist > .item {
619 box-shadow: 0 0 2px var
(--border-color-high
);
620 background: var
(--background-color-high
);
621 padding: 6px 2em 6px 4px;
622 border: 1px solid var
(--border-color-high
);
624 color: var
(--text-color-high
);
626 pointer-events: none
;
628 word-break: break-all
;
631 .cbi-dynlist > .item::after {
634 display: inline-flex
;
640 border: 1px solid var
(--border-color-high
);
641 border-radius: 0 3px 3px 0;
644 pointer-events: auto
;
647 .cbi-dynlist > .add-item {
651 .cbi-dynlist
> .add-item
> input
,
652 .cbi-dynlist > .add-item > button {
655 text-overflow: ellipsis
;
659 .cbi-value-field
> .cbi-checkbox
,
660 .cbi-value-field > div > .cbi-radio {
662 display: inline-flex
;
674 background: linear-gradient
(var
(--background-color-high
), var
(--border-color-low
));
678 .cbi-select select:focus {
679 -webkit-appearance: none
;
683 background: transparent
;
691 .cbi-select::before {
698 background: linear-gradient
(var
(--background-color-high
), var
(--border-color-low
));
699 pointer-events: none
;
702 flex-direction: column
;
703 justify-content: center
;
706 .cbi-select select option {
707 background: var
(--background-color-low
);
708 color: var
(--text-color-high
);
711 .cbi-select select option:hover {
712 background: var
(--primary-color-low
);
713 color: var
(--on-primary-color
);
716 .cbi-select select option:checked {
717 background: var
(--primary-color-medium
);
718 color: var
(--on-primary-color
);
724 line-height: initial
;
726 width: auto
!important
;
729 input
[type
=button
], input
[type
=reset
], input
[type
=submit
] {
736 background-color: #fff;
739 input
[type
="checkbox"],
740 input
[type
="radio"] {
741 --bd-color: var
(--border-color-high
);
742 --fg-color: var
(--text-color-high
);
745 -webkit-appearance: none
;
748 color: var
(--fg-color
);
750 display: inline-block
;
756 input
[type
="checkbox"]::before
,
757 input
[type
="checkbox"]::after
,
758 input
[type
="radio"]::before
,
759 input
[type
="radio"]::after
{
764 input
[type
="checkbox"]::before
,
765 input
[type
="radio"]::before
{
770 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-low
));
771 border: 1px solid var
(--bd-color
);
776 input
[type
="radio"]::before
{
780 input
[type
="checkbox"]::after
,
781 input
[type
="radio"]::after
{
788 input
[type
="checkbox"]:checked::after
,
789 input
[type
="radio"]:checked::after
{
790 --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>");
791 -webkit-mask: var
(--checkmark-icon
) center
/cover no-repeat
;
792 mask: var
(--checkmark-icon
) center
/cover no-repeat
;
793 background: var
(--fg-color
);
796 input
[type
="radio"]:checked:after
{
797 --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='7'/></svg>");
800 input
[type
="checkbox"].cbi-input-invalid
,
801 input
[type
="radio"].cbi-input-invalid
{
802 --bd-color: var
(--error-color-medium
);
803 --fg-color: var
(--error-color-high
);
806 .td
> input
[type
=text
],
807 .td
> input
[type
=password
],
809 .td
> .cbi-dropdown:not
(.btn
):not
(.cbi-button
),
810 .cbi-dynlist > .add-item > .cbi-dropdown {
815 color: var
(--text-color-medium
);
823 .cbi-dynlist
> .item
,
824 input
[type
="checkbox"]::before
,
825 input
[type
="radio"]::before
,
826 input
, button
, textarea
, select
{
827 transition: border linear
0.2s, box-shadow linear
0.2s;
828 box-shadow: inset
0 1px 3px hsla
(var
(--border-color-low-hsl
), .01);
832 .btn:hover
, .btn:focus
,
833 .cbi-button:hover
, .cbi-button:focus
,
835 .cbi-dropdown:focus
, .cbi-dropdown
[open
],
836 .cbi-dynlist
> .item:focus
,
837 input
[type
="checkbox"]:focus::before
,
838 input
[type
="radio"]:focus::before
,
839 input:focus
, button:hover
, textarea:focus
, select:focus
{
840 --focus-color-rgb: 82, 168, 236;
843 border-color: rgba
(var
(--focus-color-rgb
), 0.8) !important
;
844 box-shadow: inset
0 1px 3px hsla
(var
(--border-color-low-hsl
), .01), 0 0 8px rgba
(var
(--focus-color-rgb
), 0.6);
845 text-decoration: none
;
848 .cbi-input-invalid:focus
,
849 .cbi-select
.cbi-input-invalid
,
850 input
[type
="checkbox"].cbi-input-invalid:focus::before
,
851 input
[type
="radio"].cbi-input-invalid:focus::before
{
852 --focus-color-rgb: var
(--error-color-high-rgb
);
859 .cbi-select
[disabled
]::before
,
860 .cbi-dropdown
[disabled
]:not
(.btn
):not
(.cbi-button
),
861 input
[type
="checkbox"][disabled
]::before
,
862 input
[type
="checkbox"][disabled
]::after
,
863 input
[type
="radio"][disabled
]::before
,
864 input
[type
="radio"][disabled
]::after
{
865 opacity: var
(--disabled-opacity
);
866 pointer-events: none
;
873 border-color: hsla
(var
(--border-color-high-hsl
), var
(--disabled-opacity
));
874 pointer-events: auto
;
879 .cbi-section-create {
880 padding: 0 0 10px 10px;
883 .cbi-section-create {
885 display: inline-flex
;
889 .cbi-section-create > * {
894 .cbi-section-create > * > input {
900 background: var
(--background-color-low
);
902 padding: 17px 20px 18px 17px;
903 border-top: 1px solid var
(--border-color-medium
);
904 border-radius: 0 0 3px 3px;
908 .actions
.secondary-action
,
909 .cbi-page-actions .secondary-action{
913 .actions
.secondary-action a
,
914 .cbi-page-actions .secondary-action a {
918 .actions
.secondary-action
a:hover
,
919 .cbi-page-actions .secondary-action a:hover {
920 text-decoration: underline
;
923 .cbi-page-actions > form {
930 * Tables for, you guessed it, tabular data
931 * ---------------------------------------- */
932 .tr { display: table-row
; }
933 .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; }
934 .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; }
942 border-collapse: collapse
;
946 .table .th, .table .td {
948 vertical-align: middle
; /* Fixme */
949 padding: 10px 10px 9px;
954 .table .tr:first-child .th {
960 .table .td, .table .th {
961 border-top: 1px solid var
(--border-color-medium
);
965 height: calc
(3em + 20px);
968 .tr.placeholder > .td {
978 .tr.drag-over-below {
979 border: 2px solid
#0069d6;
980 border-width: 2px 0 0 0;
983 .tr.drag-over-below {
984 border-width: 0 0 2px 0;
988 * Repeatable UI elements outside the base styles provided from the scaffolding
989 * ---------------------------------------------------------------------------- */
996 margin: -5px -5px 15px -5px;
1002 text-shadow: 0 -1px 0 hsla
(var
(--border-color-low-hsl
), .25);
1005 header
.brand:hover
, header ul
.active
> a
{
1006 background-color: #333;
1007 background-color: rgba
(255, 255, 255, 0.05);
1009 text-decoration: none
;
1015 padding: 8px 20px 12px;
1023 header
.pull-right
{
1035 background: linear-gradient
(#333333, #222222);
1036 box-shadow: 0 1px 3px hsla
(var
(--border-color-low-hsl
), .25), inset
0 -1px 0 hsla
(var
(--border-color-low-hsl
), .01);
1038 /* the redundant properties below work around a csstidy bug */
1039 padding-left: calc
((100% - 940px) / 2);
1040 padding-right: calc
((100% - 940px) / 2);
1059 padding: 10px 10px 11px;
1061 text-decoration: none
;
1066 text-decoration: none
;
1070 background-color: #222;
1071 background-color: rgba
(0, 0, 0, 0.5);
1076 background: rgba
(255, 255, 255, 0.05);
1079 .nav .dropdown-menu {
1080 background-color: #333;
1083 .nav .dropdown-menu a.menu {
1087 .nav .dropdown-menu li a {
1089 text-shadow: 0 1px 0 rgba
(0, 0, 0, 0.5);
1092 .nav .dropdown-menu li a:hover {
1093 background-color: #191919;
1094 background-repeat: repeat-x
;
1095 background-image: linear-gradient
(to bottom
, #292929, #191919);
1099 .nav .dropdown-menu .active a {
1103 .nav .dropdown-menu li a {
1107 li
.menu
, .dropdown
{
1114 display: inline-block
;
1116 text-indent: -99999px;
1117 vertical-align: top
;
1120 border-left: 4px solid transparent
;
1121 border-right: 4px solid transparent
;
1122 border-top: 4px solid
#fff;
1127 background-color: #fff;
1140 border-color: rgba
(0, 0, 0, 0.2);
1141 border-style: solid
;
1142 border-width: 0 1px 1px;
1143 border-radius: 0 0 6px 6px;
1144 box-shadow: 0 2px 4px rgba
(0, 0, 0, 0.2);
1145 background-clip: padding-box
;
1151 background-color: transparent
;
1158 font-weight: normal
;
1161 text-shadow: 0 1px 0 #fff;
1164 .dropdown-menu a:hover {
1165 background-color: #ddd;
1166 background-repeat: repeat-x
;
1167 background-image: linear-gradient
(to bottom
, #eee, #ddd);
1169 text-decoration: none
;
1170 box-shadow: inset
0 1px 0 rgba
(0, 0, 0, 0.025), inset
0 -1px rgba
(0, 0, 0, 0.025);
1173 .dropdown:hover ul.dropdown-menu {
1177 .dropdown-menu .dropdown-menu {
1186 .tabs, .cbi-tabmenu {
1187 --tab-bar-background-color: var
(--background-color-high
);
1188 --tab-inactive-background-color-h: var
(--border-color-low-h
);
1189 --tab-inactive-background-color-s: var
(--border-color-low-s
);
1190 --tab-inactive-background-color-l: var
(--border-color-low-l
);
1191 --tab-inactive-background-color: var
(--border-color-low
);
1192 --tab-inactive-border-color: var
(--border-color-medium
);
1193 --tab-inactive-text-color-delta-l: calc
(85 / 255 * 100%);
1194 --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
));
1195 --tab-inactive-text-color: hsl
(var
(--tab-inactive-background-color-hsl
));
1196 --tab-inactive-hover-background-color: var
(--background-color-high
);
1197 --tab-active-background-color: var
(--background-color-high
);
1198 --tab-active-text-color: #0069d6;
1199 --tab-active-border-color: var
(--border-color-medium
);
1201 margin: 0 -5px 18px;
1206 background: linear-gradient
(var
(--tab-bar-background-color
) 28px, var
(--tab-inactive-border-color
) 28px);
1207 background-size: 1px 29px;
1208 background-position: left bottom
;
1211 .tabs > li, .cbi-tabmenu > li {
1214 align-items: center
;
1217 margin: 4px 2px 0 2px;
1218 background: var
(--tab-active-background-color
);
1219 border: 1px solid var
(--tab-active-border-color
);
1220 border-bottom: none
;
1221 border-radius: 4px 4px 0 0;
1222 color: var
(--primary-color-high
);
1225 .tabs > li > a, .cbi-tabmenu > li > a {
1227 white-space: nowrap
;
1229 text-overflow: ellipsis
;
1231 text-decoration: none
;
1232 border-radius: 4px 4px 0 0;
1237 .tabs > li > a:focus-visible, .cbi-tabmenu > li > a:focus-visible {
1238 text-decoration: underline
;
1241 .tabs > li:not(.active):hover, .cbi-tabmenu > .cbi-tab-disabled:hover {
1242 background: linear-gradient
(var
(--tab-inactive-hover-background-color
) 90%, var
(--tab-inactive-border-color
) 100%);
1245 .tabs > li:not(.active), .cbi-tabmenu > .cbi-tab-disabled {
1246 color: var
(--tab-inactive-text-color
);
1247 background: linear-gradient
(var
(--tab-inactive-background-color
) 90%, var
(--tab-inactive-border-color
) 100%);
1250 .cbi-tab-disabled[data-errors]::after {
1251 content: attr
(data-errors
);
1252 background: #c43c35;
1259 padding: 3px 2px 1px 2px;
1260 display: inline-flex
;
1261 flex-direction: column
;
1262 justify-content: center
;
1270 .cbi-tabmenu.map > li {
1276 margin: -9px 0 18px 0;
1279 .tabs .menu-dropdown, .tabs .dropdown-menu {
1282 border-radius: 0 6px 6px 6px;
1285 .tabs a.menu:after, .tabs .dropdown-toggle:after {
1286 border-top-color: #999;
1291 .tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle {
1295 .tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after {
1296 border-top-color: #555;
1299 .tab-content
> .tab-pane
,
1300 .tab-content > div {
1304 .tab-content > .active {
1311 background: linear-gradient
(to bottom
, var
(--background-color-high
), var
(--background-color-low
));
1312 border: 1px solid var
(--border-color-medium
);
1322 .breadcrumb li:not(:last-child)::after {
1327 .breadcrumb .active a {
1328 color: var
(--text-color-medium
);
1334 border-top: 1px solid var
(--border-color-low
);
1337 align-items: baseline
;
1338 justify-content: space-between
;
1340 color: var
(--text-color-medium
);
1341 /* the redundant properties below work around a csstidy bug */
1342 padding-left: calc
((100% - 940px) / 2);
1343 padding-right: calc
((100% - 940px) / 2);
1347 color: var
(--primary-color-low
);
1354 footer ul
.breadcrumb
{
1362 background: rgba
(0, 0, 0, 0.7);
1365 transition: opacity
.125s ease-in
;
1376 background: var
(--background-color-high
);
1377 border: 1px solid var
(--border-color-low
);
1378 box-shadow: 0 0 3px var
(--background-color-low
);
1379 padding: 1em 1em .5em 1em;
1384 line-height: normal
;
1385 margin-bottom: .5em;
1391 white-space: pre-wrap
;
1396 body
.modal-overlay-active
{
1401 body
.modal-overlay-active #modal_overlay
{
1405 visibility: visible
;
1408 .btn .close, .alert-message .close {
1409 font-family: Arial
, sans-serif
;
1414 .alert-message
.danger
,
1416 .alert-message
.error
,
1417 .cbi-tooltip.error {
1418 background: linear-gradient
(var
(--error-color-low
), var
(--error-color-medium
));
1419 color: var
(--on-error-color
);
1420 border-color: var
(--error-color-high
) var
(--error-color-high
) var
(--error-color-low
);
1423 .btn.success, .alert-message.success, .cbi-tooltip.success {
1424 background: linear-gradient
(var
(--success-color-low
), var
(--success-color-medium
));
1425 color: var
(--on-error-color
);
1426 border-color: var
(--success-color-high
) var
(--success-color-high
) var
(--success-color-low
);
1429 .btn.info, .alert-message.info, .cbi-tooltip.info {
1430 background: linear-gradient
(var
(--primary-color-low
), var
(--primary-color-medium
));
1431 color: var
(--on-primary-color
);
1432 border-color: var
(--primary-color-high
) var
(--primary-color-high
) var
(--primary-color-low
);
1435 .alert-message.notice, .cbi-tooltip.notice {
1436 background: linear-gradient
(var
(--background-color-low
), var
(--background-color-medium
));
1437 border-color: var
(--background-color-high
) var
(--background-color-high
) var
(--background-color-low
);
1438 color: var
(--text-color-high
);
1441 .alert-message.warning {
1442 background: linear-gradient
(var
(--warn-color-low
), var
(--warn-color-medium
));
1443 border-color: var
(--warn-color-high
) var
(--warn-color-high
) var
(--warn-color-low
);
1444 color: var
(--on-warn-color
);
1447 .modal.alert-message {
1448 color: var
(--text-color-high
);
1454 --default-btn-background: linear-gradient
(var
(--background-color-high
), var
(--background-color-high
) 25%, var
(--background-color-low
));
1455 --on-color: var
(--text-color-high
);
1458 display: inline-block
;
1459 background: var
(--default-btn-background
);
1461 color: var
(--on-color
);
1464 border: 1px solid var
(--border-color-high
);
1470 .cbi-input-invalid
.cbi-dropdown:not
(.btn
):not
(.cbi-button
),
1471 .cbi-input-invalid
.cbi-dropdown:not
([open
]) > ul
> li
,
1472 .cbi-value-error input {
1473 color: var
(--error-color-high
);
1474 border-color: var
(--error-color-medium
);
1477 .cbi-button-positive
,
1478 .cbi-button-fieldadd
,
1481 --on-color: var
(--success-color-high
);
1482 border-color: var
(--on-color
);
1485 .cbi-button-neutral
,
1486 .cbi-button-download
,
1491 color: var
(--text-color-high
);
1499 --on-color: var
(--primary-color-high
);
1500 border-color: var
(--on-color
);
1503 .cbi-button-negative
,
1504 .cbi-section-remove
.cbi-button
,
1506 .cbi-button-remove {
1507 --on-color: var
(--error-color-high
);
1508 border-color: var
(--on-color
);
1511 .cbi-page-actions::after {
1517 .cbi-page-actions > * {
1518 vertical-align: middle
;
1521 .cbi-page-actions > :not([method="post"]):not(.cbi-button-apply):not(.cbi-button-negative):not(.cbi-button-save):not(.cbi-button-reset) {
1527 .cbi-button-action
.important
,
1528 .cbi-page-actions
.cbi-button-apply
,
1529 .cbi-section-actions .cbi-button-edit {
1530 --on-color: var
(--on-primary-color
);
1531 background: linear-gradient
(var
(--primary-color-medium
), var
(--primary-color-low
));
1532 border-color: var
(--primary-color-high
);
1535 .cbi-button-positive
.important
,
1536 .cbi-page-actions .cbi-button-save {
1537 --on-color: var
(--on-success-color
);
1538 background: linear-gradient
(var
(--success-color-medium
), var
(--success-color-low
));
1539 border-color: var
(--success-color-high
);
1542 .cbi-button-negative.important {
1543 --on-color: var
(--on-error-color
);
1544 background: linear-gradient
(var
(--error-color-medium
), var
(--error-color-low
));
1545 border-color: var
(--error-color-high
);
1548 .cbi-page-actions
.cbi-button-apply
+ .cbi-button-save
,
1549 .cbi-page-actions .cbi-button-negative + .cbi-button-save {
1550 --on-color: var
(--success-color-high
);
1551 border-color: var
(--on-color
);
1552 background: var
(--default-btn-background
);
1556 display: inline-flex
!important
;
1560 padding: 0 !important
;
1563 .cbi-dropdown:not(.btn):not(.cbi-button) {
1564 background: linear-gradient
(var
(--background-color-high
) 0%, var
(--border-color-low
) 100%);
1565 border: 1px solid var
(--border-color-high
);
1567 color: var
(--text-color-high
);
1570 .cbi-dropdown > ul {
1571 margin: 0 !important
;
1580 .cbi-dropdown
.btn
> ul:not
(.dropdown
),
1581 .cbi-dropdown.cbi-button > ul:not(.dropdown) {
1582 margin: 0 0 0 13px !important
;
1585 .cbi-dropdown
.btn
.spinning
> ul:not
(.dropdown
),
1586 .cbi-dropdown.cbi-button.spinning > ul:not(.dropdown) {
1587 margin: 0 !important
;
1590 .cbi-dropdown > ul.preview {
1594 .cbi-dropdown
> .open
,
1595 .cbi-dropdown > .more {
1599 flex-direction: column
;
1600 justify-content: center
;
1606 .cbi-dropdown
.btn
> .open
,
1607 .cbi-dropdown.cbi-button > .open {
1610 border-left: 1px solid
;
1613 .cbi-dropdown
> .more
,
1614 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] {
1615 color: var
(--text-color-medium
);
1619 .cbi-dropdown > ul > li {
1621 white-space: nowrap
;
1623 text-overflow: ellipsis
;
1626 align-items: center
;
1631 .cbi-dropdown
> ul
.dropdown
> li
,
1632 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li {
1635 color: var
(--text-color-high
);
1638 .cbi-dropdown > ul > li .hide-open { display: block
; display: initial
; }
1639 .cbi-dropdown > ul > li .hide-close { display: none
; }
1641 .cbi-dropdown > ul > li[display]:not([display="0"]) {
1642 border-left: 1px solid var
(--border-color-high
);
1645 .cbi-dropdown[empty] > ul {
1649 .cbi-dropdown > ul > li > form {
1653 pointer-events: none
;
1656 .cbi-dropdown > ul > li img {
1657 vertical-align: middle
;
1658 margin-right: .25em;
1661 .cbi-dropdown > ul > li > form > input[type="checkbox"] {
1662 margin: 0 .25em 0 0;
1665 .cbi-dropdown > ul > li input[type="text"] {
1669 .cbi-dropdown[open] {
1673 .cbi-dropdown[open] > ul.dropdown {
1675 background: var
(--background-color-low
);
1676 border: 1px solid
#918e8c;
1677 box-shadow: 0 0 4px #918e8c;
1683 transition: max-height
.125s ease-in
;
1687 .cbi-dropdown
> ul
> li
[display
],
1688 .cbi-dropdown
[open
] > ul
.preview
,
1689 .cbi-dropdown
[open
] > ul
.dropdown
> li
,
1690 .cbi-dropdown
[multiple
] > ul
> li
> label
,
1691 .cbi-dropdown
[multiple
][open
] > ul
.dropdown
> li
,
1692 .cbi-dropdown
[multiple
][more
] > .more
,
1693 .cbi-dropdown[multiple][empty] > .more {
1695 display: flex
!important
;
1698 .cbi-dropdown
[empty
] > ul
> li
,
1699 .cbi-dropdown[optional][open] > ul.dropdown > li[placeholder] {
1700 display: block
!important
;
1703 .cbi-dropdown[multiple][open] > ul.dropdown > li > form {
1704 display: flex
!important
;
1707 .cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none
; }
1708 .cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block
; display: initial
; }
1710 .cbi-dropdown[open] > ul.dropdown > li {
1711 border-bottom: 1px solid var
(--border-color-high
);
1714 .cbi-dropdown[open] > ul.dropdown > li[selected] {
1715 background: var
(--primary-color-medium
);
1716 color: var
(--on-primary-color
);
1719 .cbi-dropdown
[open
] > ul
.dropdown
> li
.focus
,
1720 .cbi-dropdown[open] > ul.dropdown > li:hover {
1721 background: var
(--primary-color-low
);
1722 color: var
(--on-primary-color
);
1725 .cbi-dropdown
[open
] > ul
.dropdown
> li
[selected
].focus
,
1726 .cbi-dropdown[open] > ul.dropdown > li[selected]:hover {
1727 background: linear-gradient
(90deg, var
(--primary-color-medium
) 50%, var
(--primary-color-low
));
1730 .cbi-dropdown[open] > ul.dropdown > li:last-child {
1732 border-bottom: none
;
1735 .cbi-dropdown[open] > ul.dropdown > li[unselectable] {
1739 .cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child {
1747 .cbi-title-ref::after {
1751 .cbi-tooltip-container {
1759 box-shadow: 0 0 2px var
(--border-color-high
);
1761 background: var
(--background-color-high
);
1765 transition: opacity
.25s ease-in
;
1768 .cbi-tooltip-container:hover .cbi-tooltip:not(:empty) {
1771 transition: opacity
.25s ease-in
;
1775 border: 1px solid var
(--border-color-high
);
1780 margin: 1.4em 0 4px 0;
1781 background: var
(--background-color-medium
);
1784 .cbi-progressbar > div {
1785 background: var
(--primary-color-medium
);
1787 transition: width
.25s ease-in
;
1792 .cbi-progressbar::before {
1796 content: attr
(title
);
1799 text-overflow: ellipsis
;
1802 .zonebadge .cbi-tooltip {
1804 background: inherit
;
1805 margin: -1.6em 0 0 -5px;
1807 pointer-events: none
;
1808 box-shadow: 0 0 3px #444;
1811 .zonebadge .cbi-tooltip > * {
1822 .zone-forwards > * {
1827 .zone-forwards > span {
1832 .zone-forwards
.zone-src
,
1833 .zone-forwards .zone-dest {
1835 flex-direction: column
;
1838 .btn.active, .btn:active {
1839 box-shadow: inset
0 2px 4px hsla
(var
(--border-color-low-hsl
), .25), 0 1px 2px rgba
(0, 0, 0, 0.05);
1845 opacity: var
(--disabled-opacity
);
1851 line-height: normal
;
1852 padding: 9px 14px 9px;
1857 padding: 7px 9px 7px;
1861 button
.btn::-moz-focus-inner
, input
[type
=submit
].btn::-moz-focus-inner
{
1871 line-height: 13.5px;
1872 text-shadow: 0 1px 0 #fff;
1878 text-decoration: none
;
1884 padding: .5em .5em .25em .5em;
1885 margin-bottom: .5em;
1886 color: var
(--on-warn-color
);
1887 background: linear-gradient
(#fceec1, #eedc94);
1888 border: 1px solid var
(--border-color-low
);
1889 border-color: var
(--border-color-high
) var
(--border-color-high
) var
(--border-color-low
);
1891 box-shadow: 1px 1px 1px var
(--border-color-low
);
1895 .alert-message .close {
1907 line-height: inherit
;
1908 background: transparent
;
1913 .alert-message button {
1918 header
[data-indicator
] {
1919 padding: 3px 3px 2px;
1922 color: var
(--text-color-high
);
1923 text-transform: uppercase
;
1924 white-space: nowrap
;
1925 background-color: var
(--background-color-low
);
1928 margin: .125em 0 .125em .4em;
1931 header
[data-indicator
][data-clickable
] {
1941 text-decoration: none
;
1945 background-color: var
(--primary-color-high
);
1946 color: var
(--on-primary-color
);
1950 background-color: var
(--warn-color-high
);
1951 color: var
(--on-warn-color
);
1955 background-color: var
(--success-color-high
);
1956 color: var
(--on-success-color
);
1960 header
[data-indicator
][data-style
="active"] {
1961 color: var
(--on-primary-color
);
1962 background-color: var
(--primary-color-high
);
1965 /* LuCI specific items */
1966 .hidden { display: none
}
1968 form
.inline
{ display: inline
; margin-bottom: 0; }
1970 #modemenu li:last-child span
.divider
{ display: none
}
1974 color: var
(--text-color-highest
);
1975 margin-bottom: 18px;
1978 .cbi-section-table
.tr:hover
.td
,
1979 .cbi-section-table
.tr:hover
.th
,
1980 .cbi-section-table .tr:hover::before {
1981 background-color: var
(--background-color-low
);
1984 .cbi-section-table .tr.cbi-section-table-descr .th {
1985 font-weight: normal
;
1988 .cbi-section-table-titles
.named::before
,
1989 .cbi-section-table-descr
.named::before
,
1990 .cbi-section-table-row[data-title]::before {
1991 content: attr
(data-title
) " ";
1992 display: table-cell
;
1993 padding: 10px 10px 9px;
1996 vertical-align: middle
;
1999 .cbi-section-table-titles
.named::before
,
2000 .cbi-section-table-descr
.named::before
,
2001 .cbi-section-table-row[data-title]::before {
2002 border-top: 1px solid var
(--border-color-medium
);
2005 .left { text-align: left
!important
; }
2006 .right { text-align: right
!important
; }
2007 .center { text-align: center
!important
; }
2008 .top { vertical-align: top
!important
; }
2009 .middle { vertical-align: middle
!important
; }
2010 .bottom { vertical-align: bottom
!important
; }
2013 .cbi-value-field table td {
2017 .table
.cbi-section-table input
[type
="password"],
2018 .table
.cbi-section-table input
[type
="text"],
2019 .table
.cbi-section-table textarea
,
2020 .table
.cbi-section-table select
,
2021 .table.cbi-section-table .cbi-select {
2026 .table.cbi-section-table .td.cbi-section-table-cell {
2027 white-space: nowrap
;
2031 .table
.cbi-section-table
.td
.cbi-section-table-cell select
,
2032 .table.cbi-section-table .td.cbi-section-table-cell .cbi-select {
2036 .td.cbi-section-actions {
2038 vertical-align: middle
;
2042 .td.cbi-section-actions > * {
2046 .td
.cbi-section-actions
> :not
(.cbi-dropdown
) > *,
2047 .td.cbi-section-actions > * > form > * {
2052 .td.cbi-section-actions > * > form {
2053 display: inline-flex
;
2057 .table.valign-middle .td {
2058 vertical-align: middle
;
2063 .tr.cbi-section-table-titles {
2064 background: var
(--background-color-medium
);
2067 th
[data-sortable-row
] { cursor: pointer
; }
2068 th
[data-sort-direction
="asc"]::after
{ content: "\a0\25b2"; }
2069 th
[data-sort-direction
="desc"]::after
{ content: "\a0\25bc"; }
2071 .cbi-value-description {
2072 margin: .25em 0 0 1.25em;
2076 .cbi-value-description:not(:empty)::before {
2077 --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>");
2082 display: inline-block
;
2085 margin-right: .25em;
2086 background: var
(--primary-color-high
);
2087 mask-image: var
(--help-icon
);
2089 -webkit-mask-image: var
(--help-icon
);
2090 -webkit-mask-size: cover
;
2093 .cbi-section-error {
2094 border: 1px solid
#f00;
2096 background-color: #fce6e6;
2098 margin-bottom: 18px;
2101 .cbi-section-error ul { margin: 0 0 0 20px; }
2103 .cbi-section-error ul li {
2109 border: 1px solid var
(--border-color-high
);
2112 white-space: nowrap
;
2113 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-medium
));
2115 box-shadow: inset
0 1px 0 hsla
(var
(--text-color-low-hsl
), 0.05);
2116 display: inline-flex
;
2117 flex-direction: column
;
2122 .ifacebox .ifacebox-head {
2123 border-bottom: 1px solid var
(--border-color-high
);
2124 border-radius: 3px 3px 0 0;
2127 color: var
(--text-color-high
);
2130 .ifacebox .ifacebox-head[style] {
2131 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2134 .ifacebox .ifacebox-head.active {
2135 background: var
(--primary-color-high
);
2136 color: var
(--on-primary-color
);
2139 [data-darkmode
="true"] .zonebadge
[style
],
2140 [data-darkmode
="true"] .ifacebox-head
[style
] {
2141 background: linear-gradient
(rgba
(var
(--zone-color-rgb
), .4), rgba
(var
(--zone-color-rgb
), .3)) !important
;
2144 .ifacebox .ifacebox-body {
2149 display: inline-block
;
2150 flex-direction: row
;
2151 white-space: nowrap
;
2152 border: 1px solid var
(--border-color-high
);
2154 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-high
) 25%, var
(--background-color-medium
));
2155 color: var
(--text-color-high
);
2156 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2158 box-shadow: inset
0 1px 0 hsla
(var
(--background-color-high-hsl
), 0.05);
2166 vertical-align: middle
;
2169 .ifacebadge-active {
2174 .network-status-table {
2179 .network-status-table .ifacebox {
2184 .network-status-table .ifacebox-body {
2186 flex-direction: column
;
2191 .network-status-table .ifacebox-body > * {
2195 .network-status-table .ifacebox-body > span {
2200 .network-status-table .ifacebox-body > div {
2206 #dsl_status_table .ifacebox-body span
> strong
{
2207 display: inline-block
;
2212 .network-status-table .ifacebox-body .ifacebadge {
2221 display: inline-flex
;
2224 .network-status-table .ifacebox-body .ifacebadge > span {
2226 text-overflow: ellipsis
;
2230 .ifacebadge.large > * {
2237 display: inline-block
;
2238 white-space: nowrap
;
2239 color: var
(--text-color-high
);
2240 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2244 .zonebadge > strong {
2246 display: inline-block
;
2253 .zonebadge > .ifacebadge {
2258 border: 1px dashed
#aaa;
2265 .td.cbi-value-field var {
2270 div
.cbi-value var
[data-tooltip
],
2271 .td
.cbi-value-field var
[data-tooltip
],
2272 div
.cbi-value var
.cbi-tooltip-container
,
2273 .td.cbi-value-field var.cbi-tooltip-container {
2275 border-bottom: 1px dotted
#0069d6;
2278 div
.cbi-value var
.cbi-tooltip-container
,
2279 .td.cbi-value-field var.cbi-tooltip-container .cbi-tooltip {
2281 white-space: normal
;
2282 color: var
(--text-color-high
);
2285 #modal_overlay > .modal
.uci-dialog
,
2286 #modal_overlay > .modal
.cbi-modal
{
2290 #modal_overlay > .modal
.login
> button
.important
{
2291 font-size: 120% !important
;
2301 .uci-dialog div
> del
,
2302 .uci-dialog div
> ins
,
2303 .uci-dialog div > var {
2305 border: 1px solid var
(--border-color-high
);
2308 text-overflow: ellipsis
;
2311 background-color: var
(--background-color-low
);
2314 .uci-dialog div > ins {
2315 background-color: rgba
(var
(--success-color-high-rgb
), .3);
2316 border-color: rgba
(var
(--success-color-high-rgb
), .6);
2319 .uci-dialog div > del {
2320 background-color: rgba
(var
(--error-color-high-rgb
), .3);
2321 border-color: rgba
(var
(--error-color-high-rgb
), .6);
2324 .uci-dialog var > ins {
2325 background-color: rgba
(var
(--success-color-high-rgb
), .3);
2328 .uci-dialog var > del {
2329 background-color: rgba
(var
(--error-color-high-rgb
), .3);
2332 .uci-change-list > var > * {
2334 text-overflow: ellipsis
;
2340 text-decoration: none
;
2341 font-family: monospace
;
2343 color: var
(--text-color-high
);
2347 .uci-change-legend {
2352 .uci-change-legend-label {
2356 align-items: center
;
2359 .uci-change-legend-label
> ins
,
2360 .uci-change-legend-label
> del
,
2361 .uci-change-legend-label > var {
2368 .uci-change-legend-label > * > * {
2373 #applyreboot-section {
2379 50% { opacity: .5; }
2380 100% { opacity: 1; }
2384 animation: flash
.35s;
2387 #view > div
.spinning:first-child
{
2394 padding-left: 32px !important
;
2398 --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>");
2401 top: calc
(50% - 10px);
2406 background: var
(--on-color
, #000);
2407 mask: var
(--spinner-icon
) center
/cover no-repeat
;
2408 -webkit-mask: var
(--spinner-icon
) center
/cover no-repeat
;
2411 [data-darkmode
="true"] .spinning::before
{
2412 background: var
(--on-color
, #fff);
2421 [data-tab-active
="true"] {
2425 transition: opacity
.25s ease-in
;
2431 border: 1px solid
#ccc;
2434 flex-direction: column
;
2440 .cbi-filebrowser.open {
2444 transition: opacity
.25s ease-in
;
2447 .cbi-filebrowser > * {
2450 text-overflow: ellipsis
;
2451 padding: 0 0 .25em 0;
2452 margin: .25em .25em 0px .25em;
2453 white-space: nowrap
;
2454 border-bottom: 1px solid
#ccc;
2457 .cbi-filebrowser .cbi-button-positive {
2458 margin-right: .25em;
2461 .cbi-filebrowser > div {
2462 border-bottom: none
;
2465 .cbi-filebrowser > ul > li {
2467 flex-direction: row
;
2470 .cbi-filebrowser > ul > li:hover {
2471 background: #f5f5f5;
2474 .cbi-filebrowser > ul > li > div:first-child {
2477 text-overflow: ellipsis
;
2480 .cbi-filebrowser > ul > li > div:last-child {
2485 .cbi-filebrowser > ul > li > div:last-child > button {
2486 padding: .125em .25em;
2487 margin: 1px 0 1px .25em;
2490 .cbi-filebrowser .upload {
2492 flex-direction: row
;
2494 margin: 0 -.125em .25em -.125em;
2495 padding: 0 0 .125em 0px;
2496 border-bottom: 1px solid
#ccc;
2499 .cbi-filebrowser .upload > * {
2504 .cbi-filebrowser .upload > .btn {
2508 .cbi-filebrowser .upload > div {
2513 .cbi-filebrowser .upload > div > input {
2517 @keyframes fade-in
{
2519 100% { opacity: 1; }
2522 @keyframes fade-out
{
2524 100% { opacity: 0; }
2528 animation: fade-in
.4s ease
;
2532 animation: fade-out
.4s ease
;
2535 .assoclist .ifacebadge {
2537 flex-direction: column
;
2538 align-items: center
;
2539 white-space: normal
;
2543 .assoclist .ifacebadge > img {
2547 .assoclist
.td:nth-of-type
(3),
2548 .assoclist .td:nth-of-type(5) {
2552 .assoclist .td:nth-of-type(6) button {
2556 [data-darkmode
="true"] [data-page
="admin-statistics-graphs"] [data-plugin
] img
{
2557 filter: invert
(100%) hue-rotate
(150deg);
2560 [data-page
="admin-system-admin-sshkeys"] .cbi-dynlist
{