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
);
523 font-family: "Helvetica Neue", Helvetica
, Arial
, sans-serif
;
540 .cbi-value label.cbi-value-title {
546 color: var
(--text-color-high
);
549 .cbi-value > .cbi-tblsection {
553 label
> input
[type
="checkbox"],
554 label
> input
[type
="radio"] {
555 vertical-align: text-top
;
567 .cbi-dropdown:not(.btn):not(.cbi-button) {
568 display: inline-block
;
571 background: var
(--background-color-high
);
572 color: var
(--text-color-high
);
575 border: 1px solid var
(--border-color-high
);
582 .cbi-dropdown:not(.btn):not(.cbi-button) {
586 .cbi-dropdown:not
(.btn
):not
(.cbi-button
),
596 display: inline-flex
;
597 flex-direction: column
;
600 .cbi-dynlist > .item {
602 box-shadow: 0 0 2px var
(--border-color-high
);
603 background: var
(--background-color-high
);
604 padding: 2px 2em 2px 4px;
605 border: 1px solid var
(--border-color-high
);
607 color: var
(--text-color-high
);
609 pointer-events: none
;
611 word-break: break-all
;
614 .cbi-dynlist > .item::after {
617 display: inline-flex
;
623 border: 1px solid var
(--border-color-high
);
624 border-radius: 0 3px 3px 0;
627 pointer-events: auto
;
630 .cbi-dynlist > .add-item {
634 .cbi-dynlist
> .add-item
> input
,
635 .cbi-dynlist > .add-item > button {
638 text-overflow: ellipsis
;
642 .cbi-value-field > .cbi-checkbox {
651 background: linear-gradient
(var
(--background-color-high
), var
(--border-color-low
));
655 .cbi-select select:focus {
656 -webkit-appearance: none
;
660 background: transparent
;
668 .cbi-select::before {
675 background: linear-gradient
(var
(--background-color-high
), var
(--border-color-low
));
676 pointer-events: none
;
679 flex-direction: column
;
680 justify-content: center
;
683 .cbi-select select option {
684 background: var
(--background-color-low
);
685 color: var
(--text-color-high
);
688 .cbi-select select option:hover {
689 background: var
(--primary-color-low
);
690 color: var
(--on-primary-color
);
693 .cbi-select select option:checked {
694 background: var
(--primary-color-medium
);
695 color: var
(--on-primary-color
);
699 background-color: #fff;
702 line-height: initial
;
704 width: auto
!important
;
707 input
[type
=button
], input
[type
=reset
], input
[type
=submit
] {
714 background-color: #fff;
717 input
[type
="checkbox"],
718 input
[type
="radio"] {
719 --bd-color: var
(--border-color-high
);
720 --fg-color: var
(--text-color-high
);
723 -webkit-appearance: none
;
726 color: var
(--fg-color
);
728 display: inline-block
;
734 input
[type
="checkbox"]::before
,
735 input
[type
="checkbox"]::after
,
736 input
[type
="radio"]::before
,
737 input
[type
="radio"]::after
{
742 input
[type
="checkbox"]::before
,
743 input
[type
="radio"]::before
{
748 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-low
));
749 border: 1px solid var
(--bd-color
);
754 input
[type
="radio"]::before
{
758 input
[type
="checkbox"]::after
,
759 input
[type
="radio"]::after
{
766 input
[type
="checkbox"]:checked::after
,
767 input
[type
="radio"]:checked::after
{
768 --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>");
769 -webkit-mask: var
(--checkmark-icon
) center
/cover no-repeat
;
770 mask: var
(--checkmark-icon
) center
/cover no-repeat
;
771 background: var
(--fg-color
);
774 input
[type
="radio"]:checked:after
{
775 --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>");
778 input
[type
="checkbox"].cbi-input-invalid
,
779 input
[type
="radio"].cbi-input-invalid
{
780 --bd-color: var
(--error-color-medium
);
781 --fg-color: var
(--error-color-high
);
784 .td
> input
[type
=text
],
785 .td
> input
[type
=password
],
787 .td
> .cbi-dropdown:not
(.btn
):not
(.cbi-button
),
788 .cbi-dynlist > .add-item > .cbi-dropdown {
793 color: var
(--text-color-medium
);
801 .cbi-dynlist
> .item
,
802 input
[type
="checkbox"]::before
,
803 input
[type
="radio"]::before
,
804 input
, button
, textarea
{
805 transition: border linear
0.2s, box-shadow linear
0.2s;
806 box-shadow: inset
0 1px 3px hsla
(var
(--border-color-low-hsl
), .01);
810 .btn:hover
, .btn:focus
,
811 .cbi-button:hover
, .cbi-button:focus
,
813 .cbi-dropdown:focus
, .cbi-dropdown
[open
],
814 .cbi-dynlist
> .item:focus
,
815 input
[type
="checkbox"]:focus::before
,
816 input
[type
="radio"]:focus::before
,
817 input:focus
, button:hover
, textarea:focus
{
818 --focus-color-rgb: 82, 168, 236;
821 border-color: rgba
(var
(--focus-color-rgb
), 0.8) !important
;
822 box-shadow: inset
0 1px 3px hsla
(var
(--border-color-low-hsl
), .01), 0 0 8px rgba
(var
(--focus-color-rgb
), 0.6);
823 text-decoration: none
;
826 .cbi-input-invalid:focus
,
827 .cbi-select
.cbi-input-invalid
,
828 input
[type
="checkbox"].cbi-input-invalid:focus::before
,
829 input
[type
="radio"].cbi-input-invalid:focus::before
{
830 --focus-color-rgb: var
(--error-color-high-rgb
);
837 .cbi-select
[disabled
]::before
,
838 .cbi-dropdown
[disabled
]:not
(.btn
):not
(.cbi-button
),
839 input
[type
="checkbox"][disabled
]::before
,
840 input
[type
="checkbox"][disabled
]::after
,
841 input
[type
="radio"][disabled
]::before
,
842 input
[type
="radio"][disabled
]::after
{
843 opacity: var
(--disabled-opacity
);
844 pointer-events: none
;
851 border-color: hsla
(var
(--border-color-high-hsl
), var
(--disabled-opacity
));
852 pointer-events: auto
;
857 .cbi-section-create {
858 padding: 0 0 10px 10px;
861 .cbi-section-create {
863 display: inline-flex
;
867 .cbi-section-create > * {
872 .cbi-section-create > * > input {
878 background: var
(--background-color-low
);
880 padding: 17px 20px 18px 17px;
881 border-top: 1px solid var
(--border-color-medium
);
882 border-radius: 0 0 3px 3px;
886 .actions
.secondary-action
,
887 .cbi-page-actions .secondary-action{
891 .actions
.secondary-action a
,
892 .cbi-page-actions .secondary-action a {
896 .actions
.secondary-action
a:hover
,
897 .cbi-page-actions .secondary-action a:hover {
898 text-decoration: underline
;
901 .cbi-page-actions > form {
908 * Tables for, you guessed it, tabular data
909 * ---------------------------------------- */
910 .tr { display: table-row
; }
911 .table[width="33%"], .th[width="33%"], .td[width="33%"] { width: 33%; }
912 .table[width="100%"], .th[width="100%"], .td[width="100%"] { width: 100%; }
920 border-collapse: collapse
;
924 .table .th, .table .td {
926 vertical-align: middle
; /* Fixme */
927 padding: 10px 10px 9px;
932 .table .tr:first-child .th {
938 .table .td, .table .th {
939 border-top: 1px solid var
(--border-color-medium
);
943 height: calc
(3em + 20px);
946 .tr.placeholder > .td {
956 .tr.drag-over-below {
957 border: 2px solid
#0069d6;
958 border-width: 2px 0 0 0;
961 .tr.drag-over-below {
962 border-width: 0 0 2px 0;
966 * Repeatable UI elements outside the base styles provided from the scaffolding
967 * ---------------------------------------------------------------------------- */
974 margin: -5px -5px 15px -5px;
980 text-shadow: 0 -1px 0 hsla
(var
(--border-color-low-hsl
), .25);
983 header
.brand:hover
, header ul
.active
> a
{
984 background-color: #333;
985 background-color: rgba
(255, 255, 255, 0.05);
987 text-decoration: none
;
993 padding: 8px 20px 12px;
1001 header
.pull-right
{
1013 background: linear-gradient
(#333333, #222222);
1014 box-shadow: 0 1px 3px hsla
(var
(--border-color-low-hsl
), .25), inset
0 -1px 0 hsla
(var
(--border-color-low-hsl
), .01);
1016 /* the redundant properties below work around a csstidy bug */
1017 padding-left: calc
((100% - 940px) / 2);
1018 padding-right: calc
((100% - 940px) / 2);
1037 padding: 10px 10px 11px;
1039 text-decoration: none
;
1044 text-decoration: none
;
1048 background-color: #222;
1049 background-color: rgba
(0, 0, 0, 0.5);
1054 background: rgba
(255, 255, 255, 0.05);
1057 .nav .dropdown-menu {
1058 background-color: #333;
1061 .nav .dropdown-menu a.menu {
1065 .nav .dropdown-menu li a {
1067 text-shadow: 0 1px 0 rgba
(0, 0, 0, 0.5);
1070 .nav .dropdown-menu li a:hover {
1071 background-color: #191919;
1072 background-repeat: repeat-x
;
1073 background-image: linear-gradient
(to bottom
, #292929, #191919);
1077 .nav .dropdown-menu .active a {
1081 .nav .dropdown-menu li a {
1085 li
.menu
, .dropdown
{
1092 display: inline-block
;
1094 text-indent: -99999px;
1095 vertical-align: top
;
1098 border-left: 4px solid transparent
;
1099 border-right: 4px solid transparent
;
1100 border-top: 4px solid
#fff;
1105 background-color: #fff;
1118 border-color: rgba
(0, 0, 0, 0.2);
1119 border-style: solid
;
1120 border-width: 0 1px 1px;
1121 border-radius: 0 0 6px 6px;
1122 box-shadow: 0 2px 4px rgba
(0, 0, 0, 0.2);
1123 background-clip: padding-box
;
1129 background-color: transparent
;
1136 font-weight: normal
;
1139 text-shadow: 0 1px 0 #fff;
1142 .dropdown-menu a:hover {
1143 background-color: #ddd;
1144 background-repeat: repeat-x
;
1145 background-image: linear-gradient
(to bottom
, #eee, #ddd);
1147 text-decoration: none
;
1148 box-shadow: inset
0 1px 0 rgba
(0, 0, 0, 0.025), inset
0 -1px rgba
(0, 0, 0, 0.025);
1151 .dropdown:hover ul.dropdown-menu {
1155 .dropdown-menu .dropdown-menu {
1164 .tabs, .cbi-tabmenu {
1165 --tab-bar-background-color: var
(--background-color-high
);
1166 --tab-inactive-background-color-h: var
(--border-color-low-h
);
1167 --tab-inactive-background-color-s: var
(--border-color-low-s
);
1168 --tab-inactive-background-color-l: var
(--border-color-low-l
);
1169 --tab-inactive-background-color: var
(--border-color-low
);
1170 --tab-inactive-border-color: var
(--border-color-medium
);
1171 --tab-inactive-text-color-delta-l: calc
(85 / 255 * 100%);
1172 --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
));
1173 --tab-inactive-text-color: hsl
(var
(--tab-inactive-background-color-hsl
));
1174 --tab-inactive-hover-background-color: var
(--background-color-high
);
1175 --tab-active-background-color: var
(--background-color-high
);
1176 --tab-active-text-color: #0069d6;
1177 --tab-active-border-color: var
(--border-color-medium
);
1179 margin: 0 -5px 18px;
1184 background: linear-gradient
(var
(--tab-bar-background-color
) 28px, var
(--tab-inactive-border-color
) 28px);
1185 background-size: 1px 29px;
1186 background-position: left bottom
;
1189 .tabs > li, .cbi-tabmenu > li {
1192 align-items: center
;
1195 margin: 4px 2px 0 2px;
1196 background: var
(--tab-active-background-color
);
1197 border: 1px solid var
(--tab-active-border-color
);
1198 border-bottom: none
;
1199 border-radius: 4px 4px 0 0;
1200 color: var
(--primary-color-high
);
1203 .tabs > li > a, .cbi-tabmenu > li > a {
1205 white-space: nowrap
;
1207 text-overflow: ellipsis
;
1209 text-decoration: none
;
1210 border-radius: 4px 4px 0 0;
1215 .tabs > li:not(.active):hover, .cbi-tabmenu > .cbi-tab-disabled:hover {
1216 background: linear-gradient
(var
(--tab-inactive-hover-background-color
) 90%, var
(--tab-inactive-border-color
) 100%);
1219 .tabs > li:not(.active), .cbi-tabmenu > .cbi-tab-disabled {
1220 color: var
(--tab-inactive-text-color
);
1221 background: linear-gradient
(var
(--tab-inactive-background-color
) 90%, var
(--tab-inactive-border-color
) 100%);
1224 .cbi-tab-disabled[data-errors]::after {
1225 content: attr
(data-errors
);
1226 background: #c43c35;
1240 .cbi-tabmenu.map > li {
1246 margin: -9px 0 18px 0;
1249 .tabs .menu-dropdown, .tabs .dropdown-menu {
1252 border-radius: 0 6px 6px 6px;
1255 .tabs a.menu:after, .tabs .dropdown-toggle:after {
1256 border-top-color: #999;
1261 .tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle {
1265 .tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after {
1266 border-top-color: #555;
1269 .tab-content
> .tab-pane
,
1270 .tab-content > div {
1274 .tab-content > .active {
1281 background: linear-gradient
(to bottom
, var
(--background-color-high
), var
(--background-color-low
));
1282 border: 1px solid var
(--border-color-medium
);
1292 .breadcrumb li:not(:last-child)::after {
1297 .breadcrumb .active a {
1298 color: var
(--text-color-medium
);
1304 border-top: 1px solid var
(--border-color-low
);
1307 align-items: baseline
;
1308 justify-content: space-between
;
1310 color: var
(--text-color-low
);
1311 /* the redundant properties below work around a csstidy bug */
1312 padding-left: calc
((100% - 940px) / 2);
1313 padding-right: calc
((100% - 940px) / 2);
1317 color: var
(--primary-color-low
);
1324 footer ul
.breadcrumb
{
1332 background: rgba
(0, 0, 0, 0.7);
1335 transition: opacity
.125s ease-in
;
1346 background: var
(--background-color-high
);
1347 border: 1px solid var
(--border-color-low
);
1348 box-shadow: 0 0 3px var
(--background-color-low
);
1349 padding: 1em 1em .5em 1em;
1354 line-height: normal
;
1355 margin-bottom: .5em;
1361 white-space: pre-wrap
;
1366 body
.modal-overlay-active
{
1371 body
.modal-overlay-active #modal_overlay
{
1375 visibility: visible
;
1378 .btn .close, .alert-message .close {
1379 font-family: Arial
, sans-serif
;
1384 .alert-message
.danger
,
1386 .alert-message
.error
,
1387 .cbi-tooltip.error {
1388 background: linear-gradient
(var
(--error-color-low
), var
(--error-color-medium
));
1389 color: var
(--on-error-color
);
1390 border-color: var
(--error-color-high
) var
(--error-color-high
) var
(--error-color-low
);
1393 .btn.success, .alert-message.success, .cbi-tooltip.success {
1394 background: linear-gradient
(var
(--success-color-low
), var
(--success-color-medium
));
1395 color: var
(--on-error-color
);
1396 border-color: var
(--success-color-high
) var
(--success-color-high
) var
(--success-color-low
);
1399 .btn.info, .alert-message.info, .cbi-tooltip.info {
1400 background: linear-gradient
(var
(--primary-color-low
), var
(--primary-color-medium
));
1401 color: var
(--on-primary-color
);
1402 border-color: var
(--primary-color-high
) var
(--primary-color-high
) var
(--primary-color-low
);
1405 .alert-message.notice, .cbi-tooltip.notice {
1406 background: linear-gradient
(var
(--background-color-low
), var
(--background-color-medium
));
1407 border-color: var
(--background-color-high
) var
(--background-color-high
) var
(--background-color-low
);
1408 color: var
(--text-color-high
);
1411 .alert-message.warning {
1412 background: linear-gradient
(var
(--warn-color-low
), var
(--warn-color-medium
));
1413 border-color: var
(--warn-color-high
) var
(--warn-color-high
) var
(--warn-color-low
);
1414 color: var
(--on-warn-color
);
1417 .modal.alert-message {
1418 color: var
(--text-color-high
);
1424 --default-btn-background: linear-gradient
(var
(--background-color-high
), var
(--background-color-high
) 25%, var
(--background-color-low
));
1425 --on-color: var
(--text-color-high
);
1428 display: inline-block
;
1429 background: var
(--default-btn-background
);
1431 color: var
(--on-color
);
1434 border: 1px solid var
(--border-color-high
);
1440 .cbi-input-invalid
.cbi-dropdown:not
(.btn
):not
(.cbi-button
),
1441 .cbi-input-invalid
.cbi-dropdown:not
([open
]) > ul
> li
,
1442 .cbi-value-error input {
1443 color: var
(--error-color-high
);
1444 border-color: var
(--error-color-medium
);
1447 .cbi-button-positive
,
1448 .cbi-button-fieldadd
,
1451 --on-color: var
(--success-color-high
);
1452 border-color: var
(--on-color
);
1455 .cbi-button-neutral
,
1456 .cbi-button-download
,
1461 color: var
(--text-color-high
);
1469 --on-color: var
(--primary-color-high
);
1470 border-color: var
(--on-color
);
1473 .cbi-button-negative
,
1474 .cbi-section-remove
.cbi-button
,
1476 .cbi-button-remove {
1477 --on-color: var
(--error-color-high
);
1478 border-color: var
(--on-color
);
1481 .cbi-page-actions::after {
1487 .cbi-page-actions > * {
1488 vertical-align: middle
;
1491 .cbi-page-actions > :not([method="post"]):not(.cbi-button-apply):not(.cbi-button-negative):not(.cbi-button-save):not(.cbi-button-reset) {
1497 .cbi-button-action
.important
,
1498 .cbi-page-actions
.cbi-button-apply
,
1499 .cbi-section-actions .cbi-button-edit {
1500 --on-color: var
(--on-primary-color
);
1501 background: linear-gradient
(var
(--primary-color-medium
), var
(--primary-color-low
));
1502 border-color: var
(--primary-color-high
);
1505 .cbi-button-positive
.important
,
1506 .cbi-page-actions .cbi-button-save {
1507 --on-color: var
(--on-success-color
);
1508 background: linear-gradient
(var
(--success-color-medium
), var
(--success-color-low
));
1509 border-color: var
(--success-color-high
);
1512 .cbi-button-negative.important {
1513 --on-color: var
(--on-error-color
);
1514 background: linear-gradient
(var
(--error-color-medium
), var
(--error-color-low
));
1515 border-color: var
(--error-color-high
);
1518 .cbi-page-actions
.cbi-button-apply
+ .cbi-button-save
,
1519 .cbi-page-actions .cbi-button-negative + .cbi-button-save {
1520 --on-color: var
(--success-color-high
);
1521 border-color: var
(--on-color
);
1522 background: var
(--default-btn-background
);
1526 display: inline-flex
!important
;
1530 padding: 0 !important
;
1533 .cbi-dropdown:not(.btn):not(.cbi-button) {
1534 background: linear-gradient
(var
(--background-color-high
) 0%, var
(--border-color-low
) 100%);
1535 border: 1px solid var
(--border-color-high
);
1537 color: var
(--text-color-high
);
1540 .cbi-dropdown > ul {
1541 margin: 0 !important
;
1550 .cbi-dropdown
.btn
> ul:not
(.dropdown
),
1551 .cbi-dropdown.cbi-button > ul:not(.dropdown) {
1552 margin: 0 0 0 13px !important
;
1555 .cbi-dropdown
.btn
.spinning
> ul:not
(.dropdown
),
1556 .cbi-dropdown.cbi-button.spinning > ul:not(.dropdown) {
1557 margin: 0 !important
;
1560 .cbi-dropdown > ul.preview {
1564 .cbi-dropdown
> .open
,
1565 .cbi-dropdown > .more {
1569 flex-direction: column
;
1570 justify-content: center
;
1576 .cbi-dropdown
.btn
> .open
,
1577 .cbi-dropdown.cbi-button > .open {
1580 border-left: 1px solid
;
1583 .cbi-dropdown
> .more
,
1584 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li[placeholder] {
1585 color: var
(--text-color-medium
);
1589 .cbi-dropdown > ul > li {
1591 white-space: nowrap
;
1593 text-overflow: ellipsis
;
1596 align-items: center
;
1601 .cbi-dropdown
> ul
.dropdown
> li
,
1602 .cbi-dropdown:not(.btn):not(.cbi-button) > ul > li {
1605 color: var
(--text-color-high
);
1608 .cbi-dropdown > ul > li .hide-open { display: block
; display: initial
; }
1609 .cbi-dropdown > ul > li .hide-close { display: none
; }
1611 .cbi-dropdown > ul > li[display]:not([display="0"]) {
1612 border-left: 1px solid var
(--border-color-high
);
1615 .cbi-dropdown[empty] > ul {
1619 .cbi-dropdown > ul > li > form {
1623 pointer-events: none
;
1626 .cbi-dropdown > ul > li img {
1627 vertical-align: middle
;
1628 margin-right: .25em;
1631 .cbi-dropdown > ul > li > form > input[type="checkbox"] {
1632 margin: 0 .25em 0 0;
1635 .cbi-dropdown > ul > li input[type="text"] {
1639 .cbi-dropdown[open] {
1643 .cbi-dropdown[open] > ul.dropdown {
1645 background: var
(--background-color-low
);
1646 border: 1px solid
#918e8c;
1647 box-shadow: 0 0 4px #918e8c;
1653 transition: max-height
.125s ease-in
;
1657 .cbi-dropdown
> ul
> li
[display
],
1658 .cbi-dropdown
[open
] > ul
.preview
,
1659 .cbi-dropdown
[open
] > ul
.dropdown
> li
,
1660 .cbi-dropdown
[multiple
] > ul
> li
> label
,
1661 .cbi-dropdown
[multiple
][open
] > ul
.dropdown
> li
,
1662 .cbi-dropdown
[multiple
][more
] > .more
,
1663 .cbi-dropdown[multiple][empty] > .more {
1665 display: flex
!important
;
1668 .cbi-dropdown
[empty
] > ul
> li
,
1669 .cbi-dropdown[optional][open] > ul.dropdown > li[placeholder] {
1670 display: block
!important
;
1673 .cbi-dropdown[multiple][open] > ul.dropdown > li > form {
1674 display: flex
!important
;
1677 .cbi-dropdown[open] > ul.dropdown > li .hide-open { display: none
; }
1678 .cbi-dropdown[open] > ul.dropdown > li .hide-close { display: block
; display: initial
; }
1680 .cbi-dropdown[open] > ul.dropdown > li {
1681 border-bottom: 1px solid var
(--border-color-high
);
1684 .cbi-dropdown[open] > ul.dropdown > li[selected] {
1685 background: var
(--primary-color-medium
);
1686 color: var
(--on-primary-color
);
1689 .cbi-dropdown[open] > ul.dropdown > li.focus {
1690 background: var
(--primary-color-low
);
1691 color: var
(--on-primary-color
);
1694 .cbi-dropdown[open] > ul.dropdown > li[selected].focus {
1695 background: linear-gradient
(90deg, var
(--primary-color-medium
) 50%, var
(--primary-color-low
));
1698 .cbi-dropdown[open] > ul.dropdown > li:last-child {
1700 border-bottom: none
;
1703 .cbi-dropdown[open] > ul.dropdown > li[unselectable] {
1707 .cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child {
1711 input
[type
="text"] + .cbi-button
,
1712 input
[type
="password"] + .cbi-button
,
1713 select
+ .cbi-button
,
1714 .cbi-select + .cbi-button {
1715 border-radius: 0 3px 3px 0;
1716 border-color: var
(--border-color-high
);
1719 vertical-align: top
;
1725 select
+ .cbi-button
,
1726 .cbi-select + .cbi-button {
1734 .cbi-title-ref::after {
1738 .cbi-tooltip-container {
1746 box-shadow: 0 0 2px var
(--border-color-high
);
1748 background: var
(--background-color-high
);
1752 transition: opacity
.25s ease-in
;
1755 .cbi-tooltip-container:hover .cbi-tooltip:not(:empty) {
1758 transition: opacity
.25s ease-in
;
1762 border: 1px solid var
(--border-color-high
);
1767 margin: 1.4em 0 4px 0;
1768 background: var
(--background-color-medium
);
1771 .cbi-progressbar > div {
1772 background: var
(--primary-color-medium
);
1774 transition: width
.25s ease-in
;
1779 .cbi-progressbar::before {
1783 content: attr
(title
);
1786 text-overflow: ellipsis
;
1789 .zonebadge .cbi-tooltip {
1791 background: inherit
;
1792 margin: -1.6em 0 0 -5px;
1794 pointer-events: none
;
1795 box-shadow: 0 0 3px #444;
1798 .zonebadge .cbi-tooltip > * {
1809 .zone-forwards > * {
1814 .zone-forwards > span {
1819 .zone-forwards
.zone-src
,
1820 .zone-forwards .zone-dest {
1822 flex-direction: column
;
1825 .btn.active, .btn:active {
1826 box-shadow: inset
0 2px 4px hsla
(var
(--border-color-low-hsl
), .25), 0 1px 2px rgba
(0, 0, 0, 0.05);
1832 opacity: var
(--disabled-opacity
);
1838 line-height: normal
;
1839 padding: 9px 14px 9px;
1844 padding: 7px 9px 7px;
1848 button
.btn::-moz-focus-inner
, input
[type
=submit
].btn::-moz-focus-inner
{
1858 line-height: 13.5px;
1859 text-shadow: 0 1px 0 #fff;
1865 text-decoration: none
;
1871 padding: .5em .5em .25em .5em;
1872 margin-bottom: .5em;
1873 color: var
(--on-warn-color
);
1874 background: linear-gradient
(#fceec1, #eedc94);
1875 border: 1px solid var
(--border-color-low
);
1876 border-color: var
(--border-color-high
) var
(--border-color-high
) var
(--border-color-low
);
1878 box-shadow: 1px 1px 1px var
(--border-color-low
);
1882 .alert-message .close {
1894 line-height: inherit
;
1895 background: transparent
;
1900 .alert-message button {
1905 header
[data-indicator
] {
1906 padding: 3px 3px 2px;
1909 color: var
(--text-color-high
);
1910 text-transform: uppercase
;
1911 white-space: nowrap
;
1912 background-color: var
(--background-color-low
);
1915 margin: .125em 0 .125em .4em;
1918 header
[data-indicator
][data-clickable
] {
1928 text-decoration: none
;
1932 background-color: var
(--primary-color-high
);
1933 color: var
(--on-primary-color
);
1937 background-color: var
(--warn-color-high
);
1938 color: var
(--on-warn-color
);
1942 background-color: var
(--success-color-high
);
1943 color: var
(--on-success-color
);
1947 header
[data-indicator
][data-style
="active"] {
1948 color: var
(--on-primary-color
);
1949 background-color: var
(--primary-color-high
);
1952 /* LuCI specific items */
1953 .hidden { display: none
}
1955 form
.inline
{ display: inline
; margin-bottom: 0; }
1957 #modemenu li:last-child span
.divider
{ display: none
}
1961 color: var
(--text-color-highest
);
1962 margin-bottom: 18px;
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
;
2029 .td.cbi-section-actions > * {
2033 .td
.cbi-section-actions
> :not
(.cbi-dropdown
) > *,
2034 .td.cbi-section-actions > * > form > * {
2039 .td.cbi-section-actions > * > form {
2040 display: inline-flex
;
2044 .table.valign-middle .td {
2045 vertical-align: middle
;
2050 .tr.cbi-section-table-titles {
2051 background: var
(--background-color-medium
);
2054 .cbi-value-description {
2055 margin: .25em 0 0 1.25em;
2059 .cbi-value-description:not(:empty)::before {
2060 --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>");
2065 display: inline-block
;
2068 margin-right: .25em;
2069 background: var
(--primary-color-high
);
2070 mask-image: var
(--help-icon
);
2072 -webkit-mask-image: var
(--help-icon
);
2073 -webkit-mask-size: cover
;
2076 .cbi-section-error {
2077 border: 1px solid
#f00;
2079 background-color: #fce6e6;
2081 margin-bottom: 18px;
2084 .cbi-section-error ul { margin: 0 0 0 20px; }
2086 .cbi-section-error ul li {
2092 border: 1px solid var
(--border-color-high
);
2095 white-space: nowrap
;
2096 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-medium
));
2098 box-shadow: inset
0 1px 0 hsla
(var
(--text-color-low-hsl
), 0.05);
2099 display: inline-flex
;
2100 flex-direction: column
;
2105 .ifacebox .ifacebox-head {
2106 border-bottom: 1px solid var
(--border-color-high
);
2107 border-radius: 3px 3px 0 0;
2110 color: var
(--text-color-high
);
2113 .ifacebox .ifacebox-head[style] {
2114 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2117 .ifacebox .ifacebox-head.active {
2118 background: var
(--primary-color-high
);
2119 color: var
(--on-primary-color
);
2122 [data-darkmode
="true"] .zonebadge
[style
],
2123 [data-darkmode
="true"] .ifacebox-head
[style
] {
2124 background: linear-gradient
(rgba
(var
(--zone-color-rgb
), .4), rgba
(var
(--zone-color-rgb
), .3)) !important
;
2127 .ifacebox .ifacebox-body {
2132 display: inline-block
;
2133 flex-direction: row
;
2134 white-space: nowrap
;
2135 border: 1px solid var
(--border-color-high
);
2137 background: linear-gradient
(var
(--background-color-high
), var
(--background-color-high
) 25%, var
(--background-color-medium
));
2138 color: var
(--text-color-high
);
2139 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2141 box-shadow: inset
0 1px 0 hsla
(var
(--background-color-high-hsl
), 0.05);
2149 vertical-align: middle
;
2152 .ifacebadge-active {
2157 .network-status-table {
2162 .network-status-table .ifacebox {
2167 .network-status-table .ifacebox-body {
2169 flex-direction: column
;
2174 .network-status-table .ifacebox-body > * {
2178 .network-status-table .ifacebox-body > span {
2183 .network-status-table .ifacebox-body > div {
2189 #dsl_status_table .ifacebox-body span
> strong
{
2190 display: inline-block
;
2195 .network-status-table .ifacebox-body .ifacebadge {
2204 display: inline-flex
;
2207 .network-status-table .ifacebox-body .ifacebadge > span {
2209 text-overflow: ellipsis
;
2213 .ifacebadge.large > * {
2220 display: inline-block
;
2221 white-space: nowrap
;
2222 color: var
(--text-color-high
);
2223 text-shadow: 0 1px 1px hsla
(var
(--background-color-high-hsl
), 0.75);
2227 .zonebadge > strong {
2229 display: inline-block
;
2236 .zonebadge > .ifacebadge {
2241 border: 1px dashed
#aaa;
2248 .td.cbi-value-field var {
2253 div
.cbi-value var
[data-tooltip
],
2254 .td
.cbi-value-field var
[data-tooltip
],
2255 div
.cbi-value var
.cbi-tooltip-container
,
2256 .td.cbi-value-field var.cbi-tooltip-container {
2258 border-bottom: 1px dotted
#0069d6;
2261 div
.cbi-value var
.cbi-tooltip-container
,
2262 .td.cbi-value-field var.cbi-tooltip-container .cbi-tooltip {
2264 white-space: normal
;
2265 color: var
(--text-color-high
);
2268 #modal_overlay > .modal
.uci-dialog
,
2269 #modal_overlay > .modal
.cbi-modal
{
2273 #modal_overlay > .modal
.login
> button
.important
{
2274 font-size: 120% !important
;
2284 .uci-dialog div
> del
,
2285 .uci-dialog div
> ins
,
2286 .uci-dialog div > var {
2288 border: 1px solid var
(--border-color-high
);
2291 text-overflow: ellipsis
;
2294 background-color: var
(--background-color-low
);
2297 .uci-dialog div > ins {
2298 background-color: rgba
(var
(--success-color-high-rgb
), .3);
2299 border-color: rgba
(var
(--success-color-high-rgb
), .6);
2302 .uci-dialog div > del {
2303 background-color: rgba
(var
(--error-color-high-rgb
), .3);
2304 border-color: rgba
(var
(--error-color-high-rgb
), .6);
2307 .uci-dialog var > ins {
2308 background-color: rgba
(var
(--success-color-high-rgb
), .3);
2311 .uci-dialog var > del {
2312 background-color: rgba
(var
(--error-color-high-rgb
), .3);
2315 .uci-change-list > var > * {
2317 text-overflow: ellipsis
;
2323 text-decoration: none
;
2324 font-family: monospace
;
2326 color: var
(--text-color-high
);
2330 .uci-change-legend {
2335 .uci-change-legend-label {
2339 align-items: center
;
2342 .uci-change-legend-label
> ins
,
2343 .uci-change-legend-label
> del
,
2344 .uci-change-legend-label > var {
2351 .uci-change-legend-label > * > * {
2356 #applyreboot-section {
2362 50% { opacity: .5; }
2363 100% { opacity: 1; }
2367 animation: flash
.35s;
2370 #view > div
.spinning:first-child
{
2377 padding-left: 32px !important
;
2381 --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>");
2384 top: calc
(50% - 10px);
2389 background: var
(--on-color
, #000);
2390 mask: var
(--spinner-icon
) center
/cover no-repeat
;
2391 -webkit-mask: var
(--spinner-icon
) center
/cover no-repeat
;
2394 [data-darkmode
="true"] .spinning::before
{
2395 background: var
(--on-color
, #fff);
2404 [data-tab-active
="true"] {
2408 transition: opacity
.25s ease-in
;
2414 border: 1px solid
#ccc;
2417 flex-direction: column
;
2423 .cbi-filebrowser.open {
2427 transition: opacity
.25s ease-in
;
2430 .cbi-filebrowser > * {
2433 text-overflow: ellipsis
;
2434 padding: 0 0 .25em 0;
2435 margin: .25em .25em 0px .25em;
2436 white-space: nowrap
;
2437 border-bottom: 1px solid
#ccc;
2440 .cbi-filebrowser .cbi-button-positive {
2441 margin-right: .25em;
2444 .cbi-filebrowser > div {
2445 border-bottom: none
;
2448 .cbi-filebrowser > ul > li {
2450 flex-direction: row
;
2453 .cbi-filebrowser > ul > li:hover {
2454 background: #f5f5f5;
2457 .cbi-filebrowser > ul > li > div:first-child {
2460 text-overflow: ellipsis
;
2463 .cbi-filebrowser > ul > li > div:last-child {
2468 .cbi-filebrowser > ul > li > div:last-child > button {
2469 padding: .125em .25em;
2470 margin: 1px 0 1px .25em;
2473 .cbi-filebrowser .upload {
2475 flex-direction: row
;
2477 margin: 0 -.125em .25em -.125em;
2478 padding: 0 0 .125em 0px;
2479 border-bottom: 1px solid
#ccc;
2482 .cbi-filebrowser .upload > * {
2487 .cbi-filebrowser .upload > .btn {
2491 .cbi-filebrowser .upload > div {
2496 .cbi-filebrowser .upload > div > input {
2500 @keyframes fade-in
{
2502 100% { opacity: 1; }
2505 @keyframes fade-out
{
2507 100% { opacity: 0; }
2511 animation: fade-in
.4s ease
;
2515 animation: fade-out
.4s ease
;
2518 .assoclist .ifacebadge {
2520 flex-direction: column
;
2521 align-items: center
;
2522 white-space: normal
;
2526 .assoclist .ifacebadge > img {
2530 .assoclist
.td:nth-of-type
(3),
2531 .assoclist .td:nth-of-type(5) {
2535 .assoclist .td:nth-of-type(6) button {
2539 [data-darkmode
="true"] [data-page
="admin-statistics-graphs"] [data-plugin
] img
{
2540 filter: invert
(100%) hue-rotate
(150deg);