diff --git a/CONTRIBUTED.md b/CONTRIBUTED.md
index 2a629f00a3..4b3ea3d128 100644
--- a/CONTRIBUTED.md
+++ b/CONTRIBUTED.md
@@ -41,7 +41,8 @@ node-request source: [jerrykuku/node-request](https://github.com/jerrykuku/node-
luci-app-jd-dailybonus source: [jerrykuku/luci-app-jd-dailybonus](https://github.com/jerrykuku/luci-app-jd-dailybonus).
luci-app-oled source: [NateLol/luci-app-oled](https://github.com/NateLol/luci-app-oled).
luci-app-beardropper source: [NateLol/natelol](https://github.com/NateLol/natelol).
-luci-app-vssr source: [jerrykuku/luci-app-vssr](https://github.com/jerrykuku/luci-app-vssr).
+luci-app-vssr source: [jerrykuku/luci-app-vssr](https://github.com/jerrykuku/luci-app-vssr).
+luci-theme-edge source: [garypang13/luci-theme-edge](https://github.com/garypang13/luci-theme-edge).
## License
### Depend on their own License.
diff --git a/package/ctcgfw/luci-theme-edge/Makefile b/package/ctcgfw/luci-theme-edge/Makefile
new file mode 100644
index 0000000000..99b0065eca
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/Makefile
@@ -0,0 +1,16 @@
+#
+# Copyright (C) 2008-2019 GaryPang
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=Edge Theme
+LUCI_DEPENDS:=
+
+PKG_LICENSE:=Apache-2.0
+
+include $(TOPDIR)/feeds/luci/luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/1.jpg b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/1.jpg
new file mode 100644
index 0000000000..5f7ce31545
Binary files /dev/null and b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/1.jpg differ
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/2.jpg b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/2.jpg
new file mode 100644
index 0000000000..81462887fc
Binary files /dev/null and b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/2.jpg differ
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/3.jpg b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/3.jpg
new file mode 100644
index 0000000000..53b7fc5f38
Binary files /dev/null and b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/background/3.jpg differ
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/cascade.css b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/cascade.css
new file mode 100644
index 0000000000..b0b72f9822
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/cascade.css
@@ -0,0 +1,4120 @@
+/**
+ * Edge is a clean HTML5 theme for LuCI. It is based on luci-theme-Argon
+ *
+ * luci-theme-edge
+ * Copyright 2020 Garypang
+ *
+ * Have a bug? Please create an issue here on GitHub!
+ * https://github.com/garypang13/luci-theme-edge/issues
+ *
+ * luci-theme-material: header
+ * Copyright 2015 Lutty Yang
+ * https://github.com/LuttyYang/luci-theme-material/
+ *
+ * Agron Theme
+ * https://demos.creative-tim.com/argon-dashboard/index.html
+ *
+ * Login background
+ * https://unsplash.com/
+ * Font generate by Icomoon
+ *
+ * Licensed to the public under the Apache License 2.0
+ */
+/*
+ * Include base and custom css
+ */
+@import url("custom.css?v=1");
+/*
+ * Icon Css and Fonts
+ */
+@font-face {
+ font-family: 'Google Sans';
+ src:
+ url('data:application/font-woff;charset=utf-8;base64,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') format('woff');
+ font-weight: normal;
+ font-style: normal;
+}
+
+@font-face {
+ font-family: 'argon';
+ src: url('fonts/argon.woff?vncylf') format('woff');
+ font-weight: normal;
+ font-style: normal;
+ font-display: block;
+}
+
+[class^="icon-"],
+[class*=" icon-"] {
+ /* use !important to prevent issues with browser extensions that change fonts */
+ font-family: 'argon' !important;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+a {
+ color: #5A8DEE;
+ text-decoration: none;
+ background-color: transparent;
+}
+
+*::-webkit-scrollbar:hover {
+ background-color: rgba(100, 100, 100, .09);
+}
+
+*::-webkit-scrollbar-thumb:vertical {
+ background: rgba(100, 100, 100, .5);
+ -webkit-border-radius: 100px;
+}
+
+*::-webkit-scrollbar-thumb:vertical:active {
+ background: rgba(100, 100, 100, .61);
+ -webkit-border-radius: 100px;
+}
+
+*::-webkit-scrollbar {
+ width: 0.5em !important;
+ overflow: visible;
+ border-radius: 4px;
+ -webkit-border-radius: 4px;
+}
+
+*::-webkit-scrollbar-track {
+ opacity: 0;
+ -webkit-transition: all .5s;
+}
+
+*::-webkit-scrollbar-thumb {
+ overflow: visible;
+ border-radius: 4px;
+ background: rgba(100, 100, 100, .2);
+}
+
+.icon-hello-world:before {
+ content: "\e90e";
+}
+
+.icon-expand_more:before {
+ content: "\e20b";
+}
+
+.icon-menu:before {
+ content: "\e20e";
+}
+
+.icon-favorite:before {
+ content: "\e291";
+}
+
+.icon-spinner:before {
+ content: "\e603";
+}
+
+.icon-delete:before {
+ content: "\e900";
+}
+
+.icon-edit:before {
+ content: "\e901";
+}
+
+.icon-use:before {
+ content: "\e902";
+}
+
+.icon-loading:before {
+ content: "\e903";
+}
+
+.icon-switch:before {
+ content: "\e904";
+}
+
+.icon-error:before {
+ content: "\e905";
+}
+
+.icon-dashboard:before {
+ content: "\e906";
+}
+
+.icon-logout:before {
+ content: "\e907";
+}
+
+.icon-Network:before {
+ content: "\e908";
+}
+
+.icon-services:before {
+ content: "\e909";
+}
+
+.icon-system:before {
+ content: "\e90a";
+}
+
+.icon-vpn:before {
+ content: "\e90b";
+}
+
+.icon-storage:before {
+ content: "\e90c";
+}
+
+.icon-statistics:before {
+ content: "\e90d";
+}
+
+.icon-angle-right:before {
+ content: "\e90f";
+}
+
+.icon-password:before {
+ content: "\e910";
+}
+
+.icon-user:before {
+ content: "\e971";
+}
+
+.icon-question:before {
+ content: "\f059";
+}
+
+.sk-folding-cube {
+ position: absolute;
+ width: 40px;
+ height: 40px;
+ left: 50%;
+ top: 50%;
+ margin: -20px 0 0 -20px;
+ -webkit-transform: rotateZ(45deg);
+ transform: rotateZ(45deg);
+}
+
+.sk-folding-cube .sk-cube {
+ float: left;
+ width: 50%;
+ height: 50%;
+ position: relative;
+ -webkit-transform: scale(1.1);
+ -ms-transform: scale(1.1);
+ transform: scale(1.1);
+}
+
+.sk-folding-cube .sk-cube:before {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background-color: #5A8DEE;
+ -webkit-animation: sk-foldCubeAngle 2.4s infinite linear both;
+ animation: sk-foldCubeAngle 2.4s infinite linear both;
+ -webkit-transform-origin: 100% 100%;
+ -ms-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+}
+
+.sk-folding-cube .sk-cube2 {
+ -webkit-transform: scale(1.1) rotateZ(90deg);
+ transform: scale(1.1) rotateZ(90deg);
+}
+
+.sk-folding-cube .sk-cube3 {
+ -webkit-transform: scale(1.1) rotateZ(180deg);
+ transform: scale(1.1) rotateZ(180deg);
+}
+
+.sk-folding-cube .sk-cube4 {
+ -webkit-transform: scale(1.1) rotateZ(270deg);
+ transform: scale(1.1) rotateZ(270deg);
+}
+
+.sk-folding-cube .sk-cube2:before {
+ -webkit-animation-delay: 0.3s;
+ animation-delay: 0.3s;
+}
+
+.sk-folding-cube .sk-cube3:before {
+ -webkit-animation-delay: 0.6s;
+ animation-delay: 0.6s;
+}
+
+.sk-folding-cube .sk-cube4:before {
+ -webkit-animation-delay: 0.9s;
+ animation-delay: 0.9s;
+}
+
+@-webkit-keyframes sk-foldCubeAngle {
+ 0%,
+ 10% {
+ -webkit-transform: perspective(140px) rotateX(-180deg);
+ transform: perspective(140px) rotateX(-180deg);
+ opacity: 0;
+ }
+
+ 25%,
+ 75% {
+ -webkit-transform: perspective(140px) rotateX(0deg);
+ transform: perspective(140px) rotateX(0deg);
+ opacity: 1;
+ }
+
+ 90%,
+ 100% {
+ -webkit-transform: perspective(140px) rotateY(180deg);
+ transform: perspective(140px) rotateY(180deg);
+ opacity: 0;
+ }
+}
+
+@keyframes sk-foldCubeAngle {
+ 0%,
+ 10% {
+ -webkit-transform: perspective(140px) rotateX(-180deg);
+ transform: perspective(140px) rotateX(-180deg);
+ opacity: 0;
+ }
+
+ 25%,
+ 75% {
+ -webkit-transform: perspective(140px) rotateX(0deg);
+ transform: perspective(140px) rotateX(0deg);
+ opacity: 1;
+ }
+
+ 90%,
+ 100% {
+ -webkit-transform: perspective(140px) rotateY(180deg);
+ transform: perspective(140px) rotateY(180deg);
+ opacity: 0;
+ }
+}
+
+.table {
+ position: relative;
+ display: table;
+}
+
+.tr {
+ display: table-row;
+}
+
+.thead {
+ display: table-header-group;
+}
+
+.tbody {
+ display: table-row-group;
+}
+
+.tfoot {
+ display: table-footer-group;
+}
+
+.td,
+.th {
+ line-height: normal;
+ display: table-cell;
+ padding: 0.5em;
+ text-align: center;
+ vertical-align: middle;
+}
+
+.th {
+ font-weight: bold;
+}
+
+.tr.placeholder {
+ height: 4em;
+}
+
+.tr.placeholder > .td {
+ line-height: 3;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 0.4rem 0 !important;
+ text-align: center !important;
+ background: inherit;
+}
+
+.td[width="33%"] {
+ padding: 1.1em 2rem;
+}
+
+.table[width="33%"],
+.th[width="33%"],
+.td[width="33%"] {
+ width: 33%;
+}
+
+.table[width="100%"],
+.th[width="100%"],
+.td[width="100%"] {
+ width: 100%;
+}
+
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: inherit;
+ font-weight: normal;
+ line-height: 1.1 !important;
+ color: inherit;
+}
+
+html {
+ overflow-y: hidden;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+
+body {
+ font-family: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB";
+ font-size: 0.82rem;
+ color: #4d5156
+}
+
+html,
+body {
+ height: 100%;
+ margin: 0;
+ padding: 0;
+ overflow-x: hidden;
+}
+
+select {
+ padding: 0.36rem 0.8rem;
+ color: #555;
+ border: thin solid #ccc;
+ background-color: #fff;
+ background-image: none;
+}
+
+div {
+ position: relative;
+}
+
+.btn,
+button,
+select,
+input,
+.cbi-button,
+.cbi-dropdown {
+ color: #4d5156;
+ border: none;
+ border-bottom: 1px solid #9e9e9e;
+ outline: 0;
+ background-image: none;
+ box-shadow: none;
+ transition: box-shadow 0.15s ease;
+}
+
+input:not([type]), input[type=text]:not(.browser-default), input[type=password]:not(.browser-default), input[type=email]:not(.browser-default), input[type=url]:not(.browser-default), input[type=time]:not(.browser-default), input[type=date]:not(.browser-default), input[type=datetime]:not(.browser-default), input[type=datetime-local]:not(.browser-default), input[type=tel]:not(.browser-default), input[type=number]:not(.browser-default), input[type=search]:not(.browser-default), textarea.materialize-textarea {
+ background-color: transparent;
+ border: none;
+ border-bottom: 1px solid #9e9e9e;
+ border-radius: 0;
+ outline: none;
+ margin: 0;
+ padding: 0 0.5rem;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box;
+ transition: box-shadow .3s, border .3s;
+}
+
+.cbi-value-field>div {
+ position: relative;
+}
+
+.focus-input {
+ position: absolute;
+ display: block;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ pointer-events: none;
+}
+
+.focus-input::before {
+ content: "";
+ display: block;
+ position: absolute;
+ top: 2.2rem;
+ left: 0;
+ width: 0;
+ height: 2px;
+ -webkit-transition: all 0.4s;
+ -o-transition: all 0.4s;
+ -moz-transition: all 0.4s;
+ transition: all 0.4s;
+ background: #5A8DEE;
+}
+
+select+.focus-input::before {
+ top: 2.12rem;
+}
+
+.node-main-login .focus-input::before {
+ top: 2.73rem;
+}
+
+input:focus + .focus-input::before,select:focus + .focus-input::before {
+ width: 100%;
+}
+
+select,
+.cbi-dropdown {
+ width: inherit;
+ cursor: default;
+}
+
+select:not([multiple="multiple"]):focus,
+input:not(.cbi-button):focus,
+.cbi-dropdown:focus {
+}
+
+.cbi-dropdown,
+select[multiple="multiple"] {
+}
+
+pre {
+ overflow: auto;
+}
+
+code {
+ font-size: 1rem;
+ font-size-adjust: 0.35;
+ padding: 1px 3px;
+ color: #101010;
+ border-radius: 2px;
+ background: #ddd;
+}
+
+abbr {
+ cursor: help;
+ text-decoration: underline;
+ color: #797474;
+}
+
+hr {
+ margin: 1rem 0;
+ opacity: 0.1;
+ border-color: #eee;
+}
+
+header,
+.main {
+ width: 100%;
+}
+
+footer {
+ font-size: 0.8rem;
+ overflow: hidden;
+ padding: 1rem;
+ text-align: right;
+ white-space: nowrap;
+ color: #aaa;
+ text-shadow: 0 0 2px #bbb;
+}
+
+footer > a {
+ text-decoration: none;
+ color: #aaa;
+}
+
+small {
+ font-size: 90%;
+ line-height: 1.42857143;
+ white-space: normal;
+}
+
+.main {
+ position: relative;
+ top: 0;
+ bottom: 0;
+ overflow-y: auto;
+ height: 100%;
+}
+
+.main > .loading {
+ position: fixed;
+ z-index: 1000;
+ top: 0;
+ display: block;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ background-color: #f0f0f0;
+}
+
+.main > .loading > span {
+ font-family: monospace;
+ font-size: 2rem;
+ font-size-adjust: 0.35;
+ position: relative;
+ top: 12.5%;
+ display: block;
+ text-align: center;
+ color: #888;
+}
+
+.main > .loading > span > .loading-img {
+ position: relative;
+ top: 0.1rem;
+ left: 0.05rem;
+ display: inline-block;
+ width: 1.25rem;
+ height: 1.25rem;
+ margin-right: 1rem;
+ animation: anim-rotate 2s infinite linear;
+ background: url(icons/spinner.svg) no-repeat center;
+}
+
+@keyframes anim-rotate {
+ 0% {
+ -webkit-transform: rotate(0);
+ -ms-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ -ms-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+p {
+ line-height: 1.8rem;
+}
+
+.main-left {
+ top: 0;
+ float: left;
+ width: 15%;
+ width: calc(0% + 15rem);
+ height: 100%;
+ background-color: #fff;
+ background-color: var(--menu-bg-color);
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
+ transition: box-shadow .25s, -webkit-box-shadow .25s;
+ overflow-x: auto;
+ position: fixed;
+ z-index: 100;
+}
+
+.main-left .sidenav-header {
+ padding: 1.5rem 0 0.6rem;
+ text-align: center;
+ width: calc(0% + 13rem);
+}
+
+.main-left .sidenav-header .brand {
+ font-size: 1.8rem;
+ color: #5A8DEE;
+ font-family: "TypoGraphica";
+ text-decoration: none;
+ text-align: center;
+ cursor: default;
+ vertical-align: text-bottom;
+ white-space: nowrap;
+}
+
+.brand img {
+ width: 180px;
+}
+
+.main-right {
+ float: right;
+ width: 85%;
+ width: calc(100% - 15rem);
+ height: 100%;
+ transition: all 0.2s;
+ overflow-x: hidden;
+}
+
+.main-right > #maincontent {
+ position: relative;
+ z-index: 50;
+ margin-top: 2rem;
+}
+
+.pull-right {
+ float: right;
+}
+
+.pull-left {
+ float: left;
+}
+
+.nowrap:not(.td) {
+ white-space: nowrap;
+}
+[disabled="disabled"] {
+ pointer-events: none;
+}
+
+header {
+ color: #fff;
+ color: var(--header-color);
+ display: none;
+}
+
+header .fill {
+ padding: 0.8rem 0;
+}
+
+header .container {
+ height: 2rem;
+ padding: 0 1rem;
+}
+
+header .container .showSide {
+ display: none;
+ font-size: 1.4rem;
+}
+
+header .container .brand {
+ font-size: 1.5rem;
+ color: #fff;
+ font-family: "TypoGraphica";
+ text-decoration: none;
+ padding-left: 1rem;
+ cursor: default;
+ vertical-align: text-bottom;
+ display: none;
+}
+
+header .container .pull-right {
+ float: right;
+ margin-top: 0rem;
+ display: flex;
+}
+
+header .fill .status {
+ position: absolute;
+ top: 25%;
+ right: 1em;
+ float: right;
+}
+
+header .fill .status * {
+ position: relative;
+ top: 0.2rem;
+ float: left;
+ margin-left: 0.3rem;
+ cursor: pointer;
+}
+
+#xhr_poll_status {
+ display: flex;
+ margin-left: 0.5rem;
+}
+
+#xhr_poll_status * {
+ color: #fff;
+}
+
+.modal.alert-message {
+ background-color: #5A8DEE;
+ color: #fff;
+}
+
+.modal.alert-message p {
+ font-weight: bold;
+ font-size: 0.9rem;
+ text-align: center;
+}
+
+.modal .label.warning {
+ background-color: #FDAC41 !important;
+ color: #fff !important;
+}
+
+.danger,.error {
+ background-color: rgba(255, 91, 92, 0.2) !important;
+ color: #FF5B5C !important;
+}
+
+.danger a,.error a {
+ color: #FF5B5C !important;
+}
+
+.warning {
+ background-color: rgba(253, 172, 65, 0.2) !important;
+ color: #FDAC41 !important;
+}
+
+.warning a {
+ color: #FDAC41 !important;
+}
+
+.modal.warning {
+ color: #fff !important;
+ background-color: #FDAC41 !important;
+}
+
+.success {
+ background-color: rgba(57, 218, 138, 0.2) !important;
+ color: #39DA8A !important;
+}
+
+.success a {
+ color: #39DA8A !important;
+}
+
+.alert,
+.alert-message {
+ font-weight: bold;
+ margin-bottom: 1em;
+ padding: 0.7rem 1rem;
+ background: rgba(90, 141, 238, 0.2);
+ color: #5A8DEE;
+ border: 0;
+}
+
+.alert a,
+.alert-message a {
+ color: #5A8DEE;
+}
+
+.alert h4,
+.alert-message h4 {
+ padding: 0rem 1.5rem 0.75rem 0rem;
+}
+
+.alert .btn,
+.alert-message .btn {
+ height: auto;
+}
+
+.alert-message > h4 {
+ font-size: 110%;
+ font-weight: bold;
+}
+
+.alert-message .btn {
+ padding: 0.3rem 0.6rem;
+}
+
+.container .alert,
+.container .alert-message {
+ margin-top: 1rem;
+}
+/*
+ * Main Menu
+ */
+.main .main-left {
+ transition: all 0.2s;
+}
+
+.main .main-left .nav {
+ margin-top: 0rem;
+}
+
+.main .main-left .nav li {
+ padding: 0.5rem 1rem;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.main .main-left .nav li a {
+ display: block;
+ color: #5f6368;
+ color: var(--menu-color);
+}
+
+.main .main-left .nav li {
+ padding: 0;
+}
+
+.main .main-left .nav li ul {
+ display: none;
+}
+
+.main .main-left .nav>li>a {
+ display: block;
+ margin: 0.4rem 0.5rem !important;
+ padding: 0.5rem 0 0.5rem 2.5rem !important;
+ transition: box-shadow .25s, -webkit-box-shadow .25s;
+ border-radius: 2px;
+ text-decoration: none;
+ cursor: default;
+ transition: all 0.2s;
+ position: relative;
+ font-size: 0.93rem;
+}
+
+.main .main-left .nav li .menu.active {
+ color: #fff;
+ background: #5A8DEE;
+}
+
+.main .main-left .nav li .menu.active::before {
+ color: #fff !important;
+}
+
+.main .main-left .nav li .menu.active::after {
+ transform: rotate(90deg);
+ color: #fff !important;
+}
+
+.main .main-left .nav>li>a:first-child:hover {
+ cursor: pointer;
+ color: #fff;
+ background: #5A8DEE;
+}
+
+.main .main-left .nav>li>a:first-child:hover::before {
+ color: #fff !important;
+}
+
+.main .main-left .nav>li>a:first-child::before {
+ font-family: 'argon' !important;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ position: absolute;
+ left: 0.8rem;
+ padding-top: 3px;
+ transition: all 0.3s;
+}
+
+.main .main-left .nav li .menu::after {
+ position: absolute;
+ right: 0.5rem;
+ top: 0.8rem;
+ font-family: 'argon' !important;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ /* Better Font Rendering =========== */
+ -moz-osx-font-smoothing: grayscale;
+ content: '\e90f';
+ transition: all 0.15s ease;
+ color: #ced4da;
+ text-rendering: auto;
+ -webkit-font-smoothing: antialiased;
+ transition: all 0.3s;
+}
+
+.main .main-left .nav li .menu[data-title=Status]:before {
+ content: "\e906";
+ color: #5e72e4;
+}
+
+.main .main-left .nav li .menu[data-title=System]:before {
+ content: "\e90a";
+ color: #fb6340;
+}
+
+.main .main-left .nav li .menu[data-title=Services]:before {
+ content: "\e909";
+ color: #11cdef;
+}
+
+.main .main-left .nav li .menu[data-title=NAS]:before {
+ content: "\e90c";
+ color: #f3a4b5;
+}
+
+.main .main-left .nav li .menu[data-title=VPN]:before {
+ content: "\e90b";
+ color: #8965e0;
+}
+
+.main .main-left .nav li .menu[data-title=Network]:before {
+ content: "\e908";
+ color: #8965e0;
+}
+
+.main .main-left .nav li .menu[data-title=Bandwidth_Monitor]:before {
+ content: "\e90d";
+ color: #2dce89;
+}
+
+.main .main-left .nav li .menu[data-title=Docker]:before {
+ content: "\e911";
+ color: #6699ff;
+}
+
+.main .main-left .nav li .menu[data-title=Statistics]:before {
+ content: "\e913";
+ color: #8965e0;
+}
+
+.main .main-left .nav li .menu[data-title=Control]:before {
+ content: "\e912";
+ color: #5e72e4;
+}
+
+.main .main-left .nav li .menu[data-title=Asterisk]:before {
+ content: "\e914";
+ color: #fb6340;
+}
+
+.main .main-left .nav li a[data-title=Logout]:before {
+ content: "\e907";
+ color: #adb5bd;
+}
+
+.main .main-left .nav li:hover {
+ background: none;
+}
+
+.main .main-left .nav li .slide-menu {
+ margin: 0 0.5rem 0 2.5rem;
+ padding: 0rem 0.5rem;
+}
+
+.main .main-left .nav li .slide-menu li {
+ position: relative;
+ border-radius: 2px;
+ margin: 0.2rem 0;
+ padding: 0.5rem 0rem;
+ background: none;
+}
+
+.main .main-left .nav li .slide-menu li a {
+ white-space: nowrap;
+ text-decoration: none;
+}
+
+.main .main-left .nav li .slide-menu li::after {
+ content: "";
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 0;
+ height: 2px;
+ background-color: #5A8DEE;
+ transition: all 0.2s;
+}
+
+.main .main-left .nav li .slide-menu li:hover {
+ background: none;
+}
+
+.main .main-left .nav li .slide-menu li:hover::after {
+ width: 100%;
+}
+
+.main .main-left .nav li .slide-menu .active {
+ background: none;
+ color: var(--menu-color);
+}
+
+.main .main-left .nav li .slide-menu .active a {
+ color: var(--menu-color);
+}
+
+.main .main-left .nav li .slide-menu .active::after {
+ content: "";
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 100%;
+ height: 2px;
+ background-color: #5A8DEE;
+ transition: all 0.2s;
+}
+
+.main .main-left .nav li .slide-menu .active:hover {
+ background: none;
+}
+
+.main .main-left .nav li .slide-menu .active:hover::after {
+ width: 100%;
+}
+
+body[class*="node-"] > .main > .main-left > .nav > .slide > .menu::before {
+ transition: transform 0.1s ease-in-out;
+}
+
+body[class*="node-"] > .main > .main-left > .nav > .slide > .menu.active::before {
+ transition: transform 0.2s ease-in-out;
+}
+
+.main > .main-left[style*="overflow: hidden"] > .nav > .slide > .menu::before {
+ display: none;
+}
+
+#maincontent > .container {
+ padding:0 2%;
+}
+
+.Overview.node-admin-status #maincontent > .container {
+ padding:0;
+}
+
+.Overview.node-admin-status #maincontent > .container h2{
+ padding-left:2rem;
+}
+ul {
+ line-height: normal;
+}
+
+li {
+ list-style-type: none;
+}
+
+h1 {
+ font-size: 2rem;
+ padding-bottom: 10px;
+ border-bottom: thin solid #eee;
+}
+
+h2 {
+ font-size: 1.8rem;
+ padding: 1rem 2rem;
+}
+
+h3 {
+ font-size: 1.4rem;
+ margin: 0rem 0 0 0;
+ padding: 2rem 2rem 1.25rem 2rem;
+}
+
+h4 {
+ font-size: 1.2rem;
+ margin: 1.2rem 0 0 0;
+ padding: 0rem 2rem 0.75rem 2rem;
+}
+
+h5 {
+ font-size: 1rem;
+ margin: 2rem 0 0 0;
+ padding-bottom: 10px;
+}
+
+.container .cbi-section{
+ margin-bottom:1rem;
+
+}
+
+.cbi-modal .cbi-section,
+.cbi-section .cbi-section {
+ padding: 0;
+ box-shadow: none;
+}
+
+.cbi-modal .cbi-tabmenu {
+ margin-left: 0;
+}
+
+.cbi-map-descr,
+.cbi-section-descr {
+ font-size: small;
+ line-height: 2rem;
+ padding: 0 0 0.5rem 0;
+}
+
+.cbi-section-node {
+ padding-left: 2rem;
+}
+
+.cbi-section .cbi-section-node {
+ padding-left: 0;
+}
+
+.cbi-section-descr {
+ color: #404040;
+}
+
+.cbi-map-descr + fieldset {
+ margin-top: 1rem;
+}
+
+.cbi-map-descr > abbr {
+ cursor: help;
+ text-decoration: underline;
+}
+
+.cbi-section > legend {
+ display: none !important;
+}
+
+fieldset.cbi-section{
+border:none;
+}
+
+fieldset > fieldset,
+.cbi-section > .cbi-section {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ box-shadow: none;
+}
+
+.cbi-section > h3:first-child,
+.panel-title {
+ font-size: 1.4rem;
+ line-height: 1;
+ display: block;
+ width: 100%;
+ margin: 0;
+ margin-bottom: 0;
+ padding: 1.25rem 2rem;
+ color: #32325d;
+ color: var(--gray-dark);
+}
+
+.cbi-section > h3:first-child,
+.cbi-section > h4:first-child,
+.cbi-section > p:first-child,
+[data-tab-title] > h3:first-child,
+[data-tab-title] > h4:first-child,
+[data-tab-title] > p:first-child {
+ padding: 0.5rem;
+}
+
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+
+table,
+.table {
+ overflow-y: hidden;
+ width: 100%;
+}
+
+table > tbody > tr > td,
+table > tbody > tr > th,
+table > tfoot > tr > td,
+table > tfoot > tr > th,
+table > thead > tr > td,
+table > thead > tr > th,
+.table > .tbody > .tr > .td,
+.table > .tbody > .tr > .th,
+.table > .tfoot > .tr > .td,
+.table > .tfoot > .tr > .th,
+.table > .thead > .tr > .td,
+.table > .thead > .tr > .th,
+.table > .tr > .td.cbi-value-field,
+.table > .tr > .th.cbi-section-table-cell {
+ padding: 0.5rem;
+}
+
+.container > .cbi-section:first-of-type > .table[width="100%"] > .tr > .td {
+ padding: 0.6rem;
+}
+
+.cbi-section-table-cell {
+ line-height: 1.1;
+ align-self: flex-end;
+ flex: 1 1 auto;
+}
+
+tr > td,
+tr > th,
+.tr > .td,
+.tr > .th,
+.cbi-section-table-row::before,
+#cbi-wireless > #wifi_assoclist_table > .tr:nth-child(2) {
+ padding: 1rem 1rem 1rem 1rem;
+}
+
+#cbi-wireless .td,
+#cbi-network .tr:first-child > .td,
+.table[width="100%"] > .tr:first-child > .td,
+[data-page="admin-network-diagnostics"] .tr > .td,
+.tr.table-titles > .th,
+.tr.cbi-section-table-titles > .th {
+ border-top: 0 !important;
+ padding: 1.1em 1rem;
+ line-height: 1.3rem;
+}
+
+.cbi-tab-descr {
+ padding: 1rem;
+}
+
+.table[width="100%"] > .tr:first-child > .td {
+ margin: auto 0;
+}
+
+.cbi-section-table-row {
+ margin-bottom: 1rem;
+ text-align: center !important;
+ background: #f4f4f4;
+}
+
+.cbi-section-table-row:last-child {
+ margin-bottom: 0;
+}
+
+.cbi-section-table-row > .cbi-value-field .cbi-dropdown,
+.cbi-section-table-row > .cbi-value-field .cbi-input-select,
+.cbi-section-table-row > .cbi-value-field .cbi-input-text,
+.cbi-section-table-row > .cbi-value-field .cbi-input-password {
+ width: 100%;
+ min-width: 0 !important;
+}
+
+.cbi-section-table-row > .cbi-value-field [data-dynlist] > input,
+.cbi-section-table-row > .cbi-value-field input.cbi-input-password {
+ width: calc(100% - 1.5rem);
+}
+
+.cbi-section-table-row .td {
+ text-align: center !important;
+}
+
+table > tbody > tr,
+div > .table > .tr,.cbi-map >.cbi-section .cbi-value {
+ background-color: #fff;
+ transition: background-color .25s
+}
+
+table > tbody > tr:nth-of-type(4n+2),
+div > .table > .tr:nth-of-type(4n+2),.cbi-map >.cbi-section .cbi-value:nth-of-type(2n) {
+ background-color: #e5effd;
+}
+
+table > tbody > tr:nth-of-type(4n+2):hover,
+div > .table > .tr:nth-of-type(4n+2):hover {
+ background-color: #d9e9ff;
+}
+
+table > tbody > tr:nth-of-type(4n),
+div > .table > .tr:nth-of-type(4n) {
+ background-color: rgba(223, 56, 18, 0.04);
+}
+
+table > tbody > tr:nth-of-type(4n):hover,
+div > .table > .tr:nth-of-type(4n):hover {
+ background-color: rgba(223, 56, 18, 0.09);
+}
+
+.cbi-map >.cbi-section .cbi-value:nth-of-type(2n) {
+ background-color: #e5effdb8;
+}
+
+.cbi-map >.cbi-section .cbi-value:nth-of-type(2n):hover {
+ background-color: #e5effd;
+}
+
+/* fix multiple table */
+table table,
+.table .table,
+.cbi-value-field table,
+.cbi-value-field .table,
+td > table > tbody > tr > td,
+.td > .table > .tbody > .tr > .td,
+.cbi-value-field > table > tbody > tr > td,
+.cbi-value-field > .table > .tbody > .tr > .td {
+ border: 0;
+}
+/* button style */
+.btn,
+.cbi-button,
+.item::after {
+ font-size: 0.8rem;
+ display: inline-block;
+ width: auto !important;
+ padding: 0 0.8rem;
+ cursor: pointer;
+ white-space: nowrap;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ transition: all 0.2s ease-in-out;
+ text-align: center;
+ vertical-align: middle;
+ text-decoration: none;
+ color: #fff;
+ border: 0;
+ border-radius: 0.2rem;
+ background-image: none;
+ -webkit-appearance: none;
+ -ms-touch-action: manipulation;
+ touch-action: manipulation;
+}
+
+.cbi-button-up,
+.cbi-button-down {
+ font-size: 1.2rem;
+ display: inline-block;
+ min-width: 0;
+ padding: 0.2rem 0.3rem;
+ color: transparent !important;
+ background: url(icons/arrow.svg) no-repeat center !important;
+ background-size: 12px 20px !important;
+}
+
+.cbi-button-up {
+ transform: scaleY(-1);
+}
+
+.cbi-button:not(select) {
+ -webkit-appearance: none !important;
+}
+
+button:hover,
+.waves-input-wrapper:hover,
+.btn:hover,
+.cbi-button:hover,
+.item:hover::after {
+ opacity: 0.7;
+ top: 0.1rem;
+}
+
+.cbi-button-up:hover,
+.cbi-button-up:focus {
+ opacity: 0.7;
+}
+
+.btn:disabled,
+.cbi-button:disabled {
+ cursor: not-allowed;
+ pointer-events: none;
+ opacity: 0.5;
+ box-shadow: none;
+}
+/* gray */
+.alert-message [class="btn"],
+.modal div[class="btn"],
+.cbi-button-find,
+.cbi-button-link,
+.cbi-button-up,
+.cbi-button-down,
+.cbi-button-neutral,
+.cbi-button[name="zero"],
+.cbi-button[name="restart"],
+.cbi-button[onclick="hide_empty(this)"] {
+ color: #fff;
+ background-color: #A3AFBD !important;
+}
+/* dark blue */
+.btn.primary,
+.cbi-page-actions .cbi-button-save,
+.cbi-page-actions .cbi-button-apply + .cbi-button-save,
+.cbi-button-add,
+.cbi-button-save,
+.cbi-button-positive,
+.cbi-button-link,
+.cbi-button[value="Enable"],
+.cbi-button[value="Scan"],
+.cbi-button[value^="Back"],
+.cbi-button-neutral[onclick="handleConfig(event)"] {
+ font-weight: normal;
+ color: #fff;
+ border: none;
+ background-color: #23bd70 !important;
+}
+/* light blue */
+.cbi-page-actions .cbi-button-apply,
+.cbi-section-actions .cbi-button-edit,
+.cbi-button-edit,
+.cbi-button-apply,
+.cbi-button-reload,
+.cbi-button-action,
+.cbi-button[value="Submit"],
+.cbi-button[value="Upload"],
+.cbi-button[value$="Apply"],
+.cbi-button[onclick="addKey(event)"] {
+ font-weight: normal;
+ color: #fff;
+ background-color: #5A8DEE !important;
+}
+/* red */
+.btn.danger,
+.cbi-section-remove > .cbi-button,
+.cbi-button-remove,
+.btn[onclick="handleOpkg(event)"],
+.cbi-button-reset,
+.cbi-button-negative,
+.cbi-button[value="Stop"],
+.cbi-button[value="Kill"],
+.cbi-button[onclick="reboot(this)"],
+.cbi-button-neutral[value="Restart"] {
+ font-weight: normal;
+ color: #fff;
+ border: none;
+ background-color: #fdb75a !important;
+}
+/* yellow */
+.btn[value="Dismiss"],
+.cbi-button[value="Terminate"],
+.cbi-button[value="Reset"],
+.cbi-button[value="Disabled"],
+.cbi-button[onclick^="iface_reconnect"],
+.cbi-button[onclick="handleReset(event)"],
+.cbi-button-neutral[value="Disable"] {
+ font-weight: normal;
+ color: #fff;
+ border: none;
+ background-color: #00CFDD !important;
+}
+/* green */
+.cbi-button-success,
+.cbi-button-download,
+.cbi-button[name="backup"],
+.cbi-button[value="Download"],
+.cbi-button[value="Save mtdblock"] {
+ font-weight: normal;
+ color: #fff;
+ background-color: #5cb85c !important;
+}
+
+.cbi-page-actions .cbi-button-link:first-child {
+ float: left;
+}
+
+.a-to-btn {
+ text-decoration: none;
+}
+
+.cbi-value-field .cbi-button-add {
+ font-weight: bold;
+ margin: 9px 0 4px 3px;
+ padding: 1px 6px;
+}
+
+.tabs > li,
+.cbi-tabmenu > li {
+ display: inline-block;
+ padding: 0;
+ margin: 0;
+ cursor: pointer;
+}
+
+.tabs > li,.cbi-tabmenu > li {
+ border-bottom: 0.2rem solid transparent;
+ background-color: #fff;
+}
+
+.tabs > li[class~="active"],
+.tabs > li:hover {
+ border-bottom-color: #5A8DEE;
+ background-color: #669bff36;
+}
+
+.tabs > li:hover {
+ cursor: pointer;
+}
+
+.tabs > li > a,
+.cbi-tabmenu > li > a {
+ padding: 0.8rem 1.9rem;
+ text-decoration: none;
+ color: #404040;
+ display: inline-block;
+}
+
+.tabs > li[class~="active"] > a {
+ color: #5A8DEE;
+ color: #5A8DEE;
+}
+
+ul.tabs,.tabmenu .tabs,#tabmenu .tabs,ul.cbi-tabmenu {
+ padding-left: 2.5%;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12);
+ transition: box-shadow .25s, -webkit-box-shadow .25s;
+ border-radius: 2px;
+ border-bottom: 0;
+ margin-bottom: 10px;
+ background-color: #fff;
+ padding-top: 1rem;
+}
+
+#packages{
+ margin-left: -2%;
+ width: 105%;
+}
+
+.cbi-tabmenu > li:hover {
+ background-color: rgba(246,178,181,0.2);
+}
+
+.cbi-tabmenu > li[class~="cbi-tab"] {
+ background-color: rgba(246,178,181,0.2);
+ border-bottom-color: #ff9b84;
+}
+
+.cbi-tabmenu > li[class~="cbi-tab"] a {
+ color: #ee6e73;
+}
+
+.cbi-section .cbi-section-remove:nth-of-type(2n),
+.container > .cbi-section .cbi-section-node:nth-of-type(2n) {
+ background-color: #f9f9f9;
+}
+[data-tab-title] {
+ overflow: hidden;
+ height: 0;
+ opacity: 0;
+ margin: 0;
+ padding: 0rem 0rem !important;
+}
+[data-tab-title] p {
+ margin-left: 1rem;
+ margin-bottom: 1rem;
+}
+[data-tab-active="true"] {
+ overflow: visible;
+ height: auto;
+ opacity: 1;
+ transition: opacity 0.25s ease-in;
+ margin: inherit !important;
+}
+
+.cbi-section-node-tabbed {
+ margin-top: 0;
+ padding: 0;
+ transition: box-shadow .25s, -webkit-box-shadow .25s;
+ border-radius: 2px;
+}
+
+.cbi-value-field,
+.cbi-value-description {
+ display: table-cell;
+ position: relative;
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+}
+
+.cbi-value-field abbr,
+.cbi-value-description abbr {
+ color: #32325d;
+ color: var(--gray-dark);
+}
+
+.cbi-value-description {
+ line-height: inherit !important;
+}
+
+.cbi-value-title {
+ display: table-cell;
+ float: left;
+ width: 15rem;
+ padding-right: 2rem;
+ text-align: right;
+ word-wrap: break-word;
+}
+
+.cbi-value {
+ display: inline-block;
+ width: 100%;
+ padding: 0.5rem 1rem;
+ line-height: 2.4rem;
+}
+
+.cbi-value-field >* {
+ line-height: 1.3rem;
+}
+
+.cbi-value ul {
+ line-height: 1.25;
+}
+
+.cbi-value-field .cbi-dropdown,
+.cbi-value-field .cbi-input-select,
+.cbi-value input[type="text"],
+.cbi-value input[type="password"] {
+ min-width: 18rem;
+}
+
+#cbi-firewall-zone .cbi-input-select,
+#cbi-network-switch_vlan .cbi-input-select {
+ min-width: 11rem;
+}
+
+#cbi-network-switch_vlan .cbi-input-text {
+ max-width: 3rem;
+}
+
+.cbi-input-invalid {
+ color: #f5365c;
+ border-bottom-color: #f5365c;
+}
+
+.cbi-section-error {
+ font-weight: bold;
+ line-height: 1.42857143;
+ margin: 18px;
+ padding: 6px;
+ border: thin solid #f5365c;
+ border-radius: 3px;
+ background-color: #fce6e6;
+}
+
+.cbi-section-error ul {
+ margin: 0 0 0 20px;
+}
+
+.cbi-section-error ul li {
+ font-weight: bold;
+ color: #f5365c;
+}
+
+.td[data-title]::before {
+ font-weight: bold;
+ display: none;
+ padding: 0.25rem 0;
+ content: attr(data-title) ":\20";
+ text-align: left;
+ white-space: nowrap;
+}
+
+.tr.placeholder .td[data-title]::before {
+ display: none;
+}
+
+.tr[data-title]::before,
+.tr.cbi-section-table-titles.named::before {
+ font-weight: bold;
+ display: table-cell;
+ align-self: center;
+ flex: 1 1 5%;
+ padding: 0.25rem;
+ content: attr(data-title) "\20";
+ text-align: center;
+ vertical-align: middle;
+ white-space: normal;
+ word-wrap: break-word;
+}
+
+.cbi-rowstyle-1 {
+ background-color: #f9f9f9;
+}
+
+.cbi-rowstyle-2 {
+}
+
+.cbi-rowstyle-2 .cbi-button-up,
+.cbi-rowstyle-2 .cbi-button-down,
+body:not(.Interfaces) .cbi-rowstyle-2:first-child {
+ background-color: #fff !important;
+}
+
+.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell {
+ width: auto !important;
+}
+
+.td.cbi-section-actions {
+ text-align: right !important;
+ vertical-align: middle;
+}
+
+.td.cbi-section-actions > * {
+ display: inline-flex;
+}
+
+.td.cbi-section-actions > * > *,
+.td.cbi-section-actions > * > form > * {
+ margin: 0 5px;
+ display: flex;
+ align-items: center;
+}
+
+.td.cbi-section-actions > * > form {
+ display: inline-flex;
+ margin: 0;
+}
+/* lists */
+.cbi-dynlist {
+ line-height: 1.3;
+ flex-direction: column;
+ min-height: 30px;
+ cursor: text;
+}
+
+.cbi-dynlist > .item {
+ position: relative;
+ max-width: 25rem;
+ margin-right: 2em;
+ margin-bottom: 0.3rem;
+ padding: 1em 0.25em 0.25em 0;
+ pointer-events: none;
+ color: #8898aa;
+ border-bottom: 2px solid #5A8DEE;
+ border-bottom: 2px solid #5A8DEE;
+ outline: 0;
+}
+
+.cbi-dynlist[name="sshkeys"] > .item {
+ max-width: none;
+}
+
+.cbi-dynlist > .item::after {
+ font-weight: bold;
+ position: absolute;
+ right: -2em;
+ bottom: 0;
+ display: inline-flex;
+ min-height: 17px;
+ padding: 0 6px;
+ content: "\00D7";
+ pointer-events: auto;
+ color: #fff;
+ border: thin solid #f5365c;
+ border: thin solid var(--red);
+ background-color: #f5365c;
+ background-color: var(--red);
+}
+
+.cbi-dynlist > .item > span {
+ white-space: normal;
+ word-break: break-word;
+}
+
+.cbi-dynlist > .add-item {
+ display: inline-flex;
+ align-items: center;
+ width: 100%;
+ min-width: 16rem;
+}
+
+.cbi-dynlist > .add-item:not([ondrop]) > input {
+ overflow: hidden;
+ width: 100%;
+ min-width: 15rem;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.cbi-dynlist > .add-item[ondrop] > input {
+ min-width: 13rem;
+}
+
+.cbi-dynlist,
+.cbi-dropdown {
+ position: relative;
+ display: inline-flex;
+ padding: 0.2rem;
+}
+
+.cbi-dropdown[placeholder*="select"] {
+ max-width: 25rem;
+ margin-top: -3px;
+}
+
+.cbi-dropdown > ul {
+ display: flex;
+ overflow-x: hidden;
+ overflow-y: auto;
+ width: 100%;
+ margin: 0 !important;
+ padding: 0;
+ list-style: none;
+ outline: 0;
+}
+
+#cbi-adblock-global-adb_sources .cbi-dropdown > ul.preview {
+ display: none;
+}
+
+.cbi-button-apply > ul.preview {
+ display: none;
+}
+
+.cbi-button-apply > ul.preview li {
+ color: #fff;
+}
+
+.cbi-button-apply > ul:first-child li {
+ color: #fff;
+}
+
+.cbi-dropdown > .open {
+ flex-basis: 15px;
+}
+
+.cbi-dropdown > .open,
+.cbi-dropdown > .more {
+ font-size: 1rem;
+ font-weight: 900;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 0;
+ flex-shrink: 0;
+ justify-content: center;
+ padding: 0 0.25em;
+ cursor: default;
+ text-align: center;
+ outline: 0;
+ line-height: 1rem;
+}
+
+.cbi-dropdown > .more,
+.cbi-dropdown > ul > li[placeholder] {
+ font-weight: bold;
+ display: none;
+ color: #777;
+ text-shadow: 1px 1px 0 #fff;
+}
+
+.cbi-dropdown > ul > li {
+ display: none;
+ overflow: hidden;
+ align-items: center;
+ align-self: center;
+ flex-grow: 1;
+ flex-shrink: 1;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.cbi-dropdown > ul > li .hide-open {
+ display: initial;
+}
+
+.cbi-dropdown > ul > li .hide-close {
+ display: none;
+}
+
+.cbi-dropdown > ul > li[display]:not([display="0"]) {
+ border-left: thin solid #ccc;
+}
+
+.cbi-dropdown[empty] > ul {
+ max-width: 1px;
+}
+
+.cbi-dropdown > ul > li > form {
+ display: none;
+ margin: 0;
+ padding: 0;
+ pointer-events: none;
+}
+
+.cbi-dropdown > ul > li img {
+ margin-right: 0.25em;
+ vertical-align: middle;
+}
+
+.cbi-dropdown > ul > li > form > input[type="checkbox"] {
+ height: auto;
+ margin: 0;
+ display:inline-block;
+}
+
+.cbi-dropdown > ul > li input[type="text"] {
+ height: 20px;
+}
+
+.cbi-dropdown[open] > ul.dropdown {
+ position: absolute;
+ z-index: 1100;
+ display: block;
+ width: auto;
+ min-width: 100%;
+ max-width: none;
+ max-height: 200px;
+ border: thin solid #918e8c;
+ background: #f6f6f6;
+ box-shadow: 0 0 4px #918e8c;
+ color: var(--main-menu-color);
+ left: 0;
+}
+
+.cbi-dropdown[open] > ul.dropdown li {
+ color: #000;
+}
+
+.cbi-dropdown > ul > li[display],
+.cbi-dropdown[open] > ul.preview,
+.cbi-dropdown[open] > ul.dropdown > li,
+.cbi-dropdown[multiple] > ul > li > label,
+.cbi-dropdown[multiple][open] > ul.dropdown > li,
+.cbi-dropdown[multiple][more] > .more,
+.cbi-dropdown[multiple][empty] > .more {
+ display: flex;
+ align-items: center;
+ flex-grow: 1;
+}
+
+.cbi-dropdown[empty] > ul > li,
+.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
+.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
+ display: block;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li .hide-open {
+ display: none;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li .hide-close {
+ display: initial;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li {
+ border-bottom: thin solid #ccc;
+ padding: 0.5rem 0.8rem;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li[selected] {
+ background: #b0d0f0;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li.focus {
+ background: linear-gradient(90deg, #a3c2e8 0%, #84aad9 100%);
+}
+
+.cbi-dropdown[open] > ul.dropdown > li:last-child {
+ margin-bottom: 0;
+ border-bottom: 0;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li[unselectable] {
+ opacity: 0.7;
+}
+
+.cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child {
+ width: 100%;
+}
+
+.cbi-dropdown[disabled] {
+ pointer-events: none;
+ opacity: 0.6;
+}
+
+.cbi-dropdown .zonebadge {
+ width: 100%;
+}
+
+.cbi-dropdown[open] .zonebadge {
+ width: auto;
+}
+/* progressbar */
+.cbi-progressbar {
+ position: relative;
+ min-width: 170px;
+ height: 20px;
+ margin: 6px 0;
+ border: thin solid #999;
+ border-radius: 0.2rem;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
+}
+
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 0.357rem 0;
+ }
+
+ to {
+ background-position: 0 0;
+ }
+}
+
+.cbi-progressbar > div {
+ width: 0;
+ height: 100%;
+ transition: width 0.25s ease-in;
+ background-color: #5A8DEE;
+ background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);
+ background-size: auto auto;
+ animation: progress-bar-stripes 1s linear infinite;
+}
+
+.cbi-progressbar::after {
+ font-family: monospace;
+ font-size: 1em;
+ font-weight: bold;
+ font-size-adjust: 0.38;
+ line-height: normal;
+ position: absolute;
+ top: 2px;
+ right: 0;
+ bottom: 2px;
+ left: 0;
+ overflow: hidden;
+ content: attr(title);
+ text-align: center;
+ white-space: pre;
+ text-overflow: ellipsis;
+ color: #ff4500d1;
+}
+
+#modal_overlay {
+ position: fixed;
+ z-index: 900;
+ top: 0;
+ right: 10000px;
+ bottom: 0;
+ left: -10000px;
+ overflow-y: scroll;
+ transition: opacity 0.125s ease-in;
+ opacity: 0;
+ background: rgba(0, 0, 0, 0.7);
+ -webkit-overflow-scrolling: touch;
+}
+
+.modal {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ width: 90%;
+ min-width: 270px;
+ max-width: 695px;
+ min-height: 32px;
+ margin: 25vh auto;
+ padding: 1em;
+ border-radius: 3px !important;
+ background: #fff;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12);
+}
+
+.modal > * {
+ line-height: normal;
+ flex-basis: 100%;
+ max-width: 100%;
+}
+
+.modal > pre,
+.modal > textarea {
+ font-size: 1rem;
+ font-size-adjust: 0.35;
+ overflow: auto;
+ margin-bottom: 0.5em;
+ padding: 8.5px;
+ cursor: auto;
+ white-space: pre-wrap;
+ color: #eee;
+ outline: 0;
+ background-color: #101010;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12);
+}
+
+.modal > h4 {
+ margin: 0.5em 0;
+}
+
+.modal ul {
+ margin-left: 2.2em;
+}
+
+.modal li {
+ list-style-type: square;
+ color: #808080;
+}
+
+.modal p {
+ word-break: break-word;
+ margin: 1rem 0;
+}
+
+h3+p,h4+p {
+ margin-top: 0 !important;
+}
+
+.modal .label {
+ font-size: 0.6rem;
+ font-weight: normal;
+ padding: 0.1rem 0.3rem;
+ cursor: default;
+ border-radius: 0;
+ background: #9b9b9b;
+ color: #fff;
+}
+
+.modal .label.notice {
+ color: #fff;
+ background: #5A8DEE;
+}
+
+body.modal-overlay-active {
+ overflow: hidden;
+ height: 100vh;
+}
+
+body.modal-overlay-active #modal_overlay {
+ right: 0;
+ left: 0;
+ opacity: 1;
+}
+
+.spinning {
+ position: relative;
+ padding-left: 32px !important;
+}
+
+.spinning::before {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0.2em;
+ width: 32px;
+ content: "";
+ background: url(../resources/icons/loading.gif) no-repeat center;
+ background-size: 16px;
+}
+/* luci */
+.hidden {
+ display: none;
+}
+
+.left,
+.left::before {
+ text-align: left !important;
+}
+
+.right,
+.right::before {
+ text-align: right !important;
+}
+
+.center,
+.center::before {
+ text-align: center !important;
+}
+
+.top {
+ align-self: flex-start !important;
+ vertical-align: top !important;
+}
+
+.bottom {
+ align-self: flex-end !important;
+ vertical-align: bottom !important;
+}
+
+.inline {
+ display: inline;
+}
+
+.cbi-page-actions {
+ padding-top: 1rem;
+ text-align: right;
+}
+
+.node-main-login .cbi-page-actions {
+ padding-right: 0;
+}
+
+.cbi-page-actions > form[method="post"] {
+ display: inline-block;
+}
+
+.th[data-type="button"],
+.td[data-type="button"],
+.th[data-type="fvalue"],
+.td[data-type="fvalue"] {
+ flex: 1 1 2em;
+ text-align: center;
+}
+
+.ifacebadge {
+ display: inline-flex;
+ padding: 0.5rem 0.8rem;
+ border-bottom: thin solid #ccc;
+ background: #eee;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+td > .ifacebadge,
+.td > .ifacebadge {
+ font-size: 0.8rem;
+ background-color: #f0f0f0;
+}
+
+.ifacebadge > em,
+.ifacebadge > img {
+ display: inline-block;
+ align-self: flex-start;
+ margin: 0 0.2rem;
+}
+
+.ifacebadge > img + img {
+ margin: 0 0.2rem 0 0;
+}
+
+.network-status-table {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.network-status-table .ifacebox {
+ flex-grow: 1;
+}
+
+.network-status-table .ifacebox-body {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+}
+
+.network-status-table .ifacebox-body > span {
+ flex: 10 10 auto;
+ height: 100%;
+}
+
+.network-status-table .ifacebox-body > div {
+ display: flex;
+ flex-wrap: wrap;
+}
+
+.network-status-table .ifacebox-body .ifacebadge {
+ align-items: center;
+ flex: 1 1 auto;
+ min-width: 220px;
+ margin: 0.5em 0em 0 0em;
+ padding: 0.5em;
+ background-color: #fff;
+}
+/* textarea */
+textarea {
+ font-family: monospace;
+ width: 95%;
+ min-width: 28rem;
+ padding: 0.8rem;
+ line-height: 1.6rem !important;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
+ transition: box-shadow .25s, -webkit-box-shadow .25s;
+ border-radius: 2px;
+ border: 0 !important;
+}
+
+textarea:focus{
+ outline: none;
+ border: 1px solid #5A8DEE !important;
+ box-shadow: 0 0px 5px 0 #5A8DEE;
+}
+
+.cbi-section textarea {
+ margin: 0rem;
+}
+
+#syslog {
+ font-size: small;
+ line-height: 1.25;
+ width: 100%;
+ padding: 1rem;
+ resize: none;
+ color: #eee;
+ border: 0;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
+ transition: box-shadow .25s, -webkit-box-shadow .25s;
+ border-radius: 2px;
+ background-color: #242424;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12);
+ max-height: 100% !important;
+}
+
+#syslog:focus {
+ outline: 0;
+}
+/* config changes */
+.uci-change-list {
+ font-family: monospace;
+}
+
+.uci-change-list ins,
+.uci-change-legend-label ins {
+ display: block;
+ padding: 2px;
+ text-decoration: none;
+ border: thin solid #0f0;
+ background-color: #cfc;
+}
+
+.uci-change-list del,
+.uci-change-legend-label del {
+ font-style: normal;
+ display: block;
+ padding: 2px;
+ text-decoration: none;
+ border: thin solid #f00;
+ background-color: #fcc;
+}
+
+.uci-change-list var,
+.uci-change-legend-label var {
+ font-style: normal;
+ display: block;
+ padding: 2px;
+ text-decoration: none;
+ border: thin solid #ccc;
+ background-color: #eee;
+}
+
+.uci-change-list var ins,
+.uci-change-list var del {
+ font-style: normal;
+ padding: 0;
+ white-space: pre;
+ border: 0;
+}
+
+.uci-change-legend {
+ padding: 5px;
+}
+
+.uci-change-legend-label {
+ float: left;
+ width: 150px;
+}
+
+.uci-change-legend-label > ins,
+.uci-change-legend-label > del,
+.uci-change-legend-label > var {
+ display: block;
+ float: left;
+ width: 10px;
+ height: 10px;
+ margin-right: 4px;
+}
+
+.uci-change-legend-label var ins,
+.uci-change-legend-label var del {
+ line-height: 0.4;
+ border: 0;
+}
+
+.uci-change-list var,
+.uci-change-list del,
+.uci-change-list ins {
+ padding: 0.5rem;
+}
+/* other fix */
+#iwsvg,
+#iwsvg2,
+#bwsvg {
+ border: thin solid #d4d4d4 !important;
+}
+
+#iwsvg,
+[data-page="admin-status-realtime-bandwidth"] #bwsvg {
+ border-top: 0 !important;
+}
+
+.ifacebox {
+ line-height: 1.25;
+ display: inline-flex;
+ flex-direction: column;
+ min-width: 100px;
+}
+
+.ifacebox-head {
+ padding: 0.25em;
+ background: #eee;
+}
+
+.ifacebox-head.active {
+ background: #5A8DEE;
+}
+
+.ifacebox-head.active * {
+ color: #fff;
+ color: var(--white);
+}
+
+.ifacebox-body {
+ padding: 0.5em 2rem;
+ line-height: 1.6em;
+}
+
+.cbi-image-button {
+ margin-left: 0.5rem;
+}
+
+.zonebadge {
+ display: inline-block;
+ padding: 0.2rem 0.5rem;
+}
+
+.zonebadge .ifacebadge {
+ margin: 0.1rem 0.2rem;
+ padding: 0.2rem 0.3rem;
+ border: thin solid #6c6c6c;
+}
+
+.zonebadge > input[type="text"] {
+ min-width: 10rem;
+ margin-top: 0.3rem;
+ padding: 0.16rem 1rem;
+}
+
+.zonebadge > em,
+.zonebadge > strong {
+ display: inline-block;
+ margin: 0 0.2rem;
+}
+
+.cbi-value-field .cbi-input-checkbox,
+.cbi-value-field .cbi-input-radio {
+ margin-right: 5px;
+}
+
+.cbi-value-field > ul > li {
+ display: flex;
+}
+
+.cbi-value-field > ul > li > label {
+ margin-top: 0.5rem;
+}
+
+.cbi-value-field > ul > li .ifacebadge {
+ margin-top: -0.5rem;
+ margin-left: 0.4rem;
+ background-color: #eee;
+}
+
+.cbi-section-table-row > .cbi-value-field .cbi-dropdown {
+ min-width: 7rem;
+}
+
+.cbi-section-create {
+ display: inline-flex;
+ align-items: center;
+ margin: 0.25rem 0 0.25rem 1rem;
+}
+
+.cbi-section-create > * {
+ margin: 0.5rem;
+}
+
+.cbi-section-remove {
+ padding: 0.5rem;
+}
+
+div.cbi-value var,
+td.cbi-value-field var,
+.td.cbi-value-field var {
+ font-style: italic;
+ color: #0069d6;
+}
+
+.cbi-optionals {
+ padding: 1rem 1rem 0 1rem;
+ border-top: thin solid #ccc;
+}
+
+.cbi-dropdown-container {
+ position: relative;
+}
+
+.cbi-tooltip-container,
+span[data-tooltip],
+span[data-tooltip] .label {
+ cursor: help !important;
+}
+
+.cbi-tooltip {
+ position: absolute;
+ z-index: 1000;
+ left: -1000px;
+ padding: 2px 5px;
+ transition: opacity 0.25s ease-out;
+ white-space: pre;
+ pointer-events: none;
+ opacity: 0;
+ border-radius: 3px;
+ background: #fff;
+ box-shadow: 0 0 2px #444;
+}
+
+.cbi-tooltip-container:hover .cbi-tooltip {
+ left: auto;
+ transition: opacity 0.25s ease-in;
+ opacity: 1;
+}
+
+.zonebadge .cbi-tooltip {
+ margin: -1.5rem 0 0 -0.5rem;
+ padding: 0.25rem;
+ background: inherit;
+}
+
+.zonebadge-empty {
+ color: #404040;
+ background: repeating-linear-gradient(45deg, rgba(204, 204, 204, 0.5), rgba(204, 204, 204, 0.5) 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);
+}
+
+.zone-forwards {
+ display: flex;
+ min-width: 10rem;
+}
+
+.zone-forwards > * {
+ flex: 1 1 45%;
+}
+
+.zone-forwards > span {
+ flex-basis: 10%;
+ padding: 0 0.25rem;
+ text-align: center;
+}
+
+.zone-forwards .zone-src,
+.zone-forwards .zone-dest {
+ display: flex;
+ flex-direction: column;
+}
+
+.label,#indicators span {
+ font-size: 0.8rem;
+ padding: 0.3rem 0.8rem;
+ white-space: nowrap;
+ text-decoration: none;
+ text-transform: uppercase;
+ border-radius: 3px;
+ text-shadow: none;
+ margin: 0 0.5rem;
+ color: #fff;
+ background: #5A8DEE;
+}
+
+#indicators span[data-indicator="poll-status"] {
+ color: #FDAC41 !important;
+ background-color: #FFEED9;
+}
+
+#indicators span[data-indicator="uci-changes"] {
+ color: #39DA8A !important;
+ background-color: #D2FFE8;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ position: relative;
+ right: 0.2rem;
+ margin: 0;
+ vertical-align: bottom;
+}
+
+label[data-index][data-depends] {
+ padding-right: 2em;
+}
+
+.showSide {
+ display: none;
+}
+
+.darkMask {
+ position: fixed;
+ z-index: 99;
+ display: none;
+ width: 100%;
+ height: 100%;
+ content: "";
+ top: 0;
+ background-color: rgba(0, 0, 0, 0.56);
+}
+/* diagnostics */
+#diag-rc-output > pre,
+#command-rc-output > pre,
+[data-page="admin-services-wol"] .notice code {
+ font-size: 1.2rem;
+ font-size-adjust: 0.35;
+ line-height: normal;
+ display: block;
+ overflow-y: hidden;
+ width: 100%;
+ padding: 8.5px;
+ white-space: pre;
+ color: #eee;
+ background-color: #101010;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12);
+}
+[data-page="admin-network-diagnostics"] .table {
+ box-shadow: none;
+}
+
+input[name="ping"],
+input[name="traceroute"],
+input[name="nslookup"] {
+ width: 80%;
+}
+/* fix Main Login */
+.node-main-login .main {
+ top: 0;
+ height: 100% !important;
+}
+
+.node-main-login .main .main-left {
+ display: none;
+}
+
+.node-main-login .main .main-right {
+ width: 100%;
+ text-align: center;
+ overflow: hidden;
+}
+
+.node-main-login .main .main-right header {
+ background: none !important;
+ box-shadow: none !important;
+ display: none !important;
+}
+
+.node-main-login .main .main-right .login-bg {
+ display: block;
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ left: 0px;
+ top: 0px;
+ background-size: cover;
+ background-color: #000;
+ background-position: top center;
+ transition: all 0.5s;
+}
+
+.node-main-login .main .main-right .login-bg.blur {
+ transform: scale(1.05);
+ -webkit-filter: blur(5px);
+ /* Chrome, Safari, Opera */
+ filter: blur(5px);
+}
+
+.node-main-login .main .main-right #maincontent {
+ height: 100%;
+ padding-top: 23vh;
+ margin-top: 0rem;
+ background-color: transparent !important;
+ text-align: center;
+ display: inline-block;
+ z-index: 999;
+}
+
+.node-main-login .main .main-right #maincontent .container {
+ display: inline-block;
+ padding: 1rem 1.2rem;
+ position: relative;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
+ transition: box-shadow .25s, -webkit-box-shadow .25s;
+ border-radius: 2px;
+ text-align: left;
+ background: rgba(255, 255, 255, 0.75);
+ margin: 0;
+}
+
+.node-main-login .main .main-right #maincontent .alert-message.warning {
+ position: absolute;
+ color: #fff;
+ width: calc(100%);
+ box-sizing: border-box;
+ margin-top: -3.5rem;
+ border-radius: 5px !important;
+ padding: 0.5rem 1rem;
+ text-align: center;
+ background-color: #eea236 !important;
+}
+
+.node-main-login .main .main-right #maincontent .alert-message p {
+ color: #fff;
+ font-weight: normal;
+ font-size: 0.83rem;
+}
+
+.node-main-login .main .main-right #maincontent .alert-message.error {
+ position: absolute;
+ color: #fff;
+ width: calc(100%);
+ background-color: #f0ad4e;
+ border-color: #eea236;
+ box-sizing: border-box;
+ margin-top: -7.5rem;
+ border-radius: 5px !important;
+ padding: 1rem 1rem 0.5rem 1rem;
+ text-align: center;
+}
+
+.node-main-login .main .main-right #maincontent .alert-message.error p {
+ color: #fff;
+}
+
+.alert-message p {
+ text-align: center;
+}
+
+.node-main-login .main .main-right #maincontent .alert-message.error h4 {
+ font-size: 1rem;
+}
+
+.node-main-login .main .main-right #maincontent .alert-message.error .btn {
+ height: auto;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map h2 {
+ display: block;
+ margin: 10px auto 10px auto;
+ padding: 0;
+ text-align: center;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-map-descr {
+ text-align: center;
+ padding: 1rem;
+ color: #8898aa;
+ font-size: 1.2rem;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section {
+ padding: 0.5rem;
+ margin-top: 0 !important;
+ background: none !important;
+ box-shadow: none !important;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node {
+ padding: 0;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value {
+ display: block;
+ padding: 0;
+ background: none;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value * {
+ display: inline-block !important;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-title {
+ display: none !important;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field {
+ position: relative;
+ width: 18rem;
+ margin-bottom: 1em;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field input {
+ font-size: 1rem;
+ line-height: 1.5;
+ display: block;
+ width: 100%;
+ height: calc(2.75rem + 2px);
+ padding: 0.625rem 0.75rem;
+ transition: all 0.15s cubic-bezier(0.68, -0.55, 0.265, 1.55);
+ color: #8898aa;
+ background-clip: padding-box;
+ box-sizing: border-box;
+ padding-left: 3em !important;
+ margin: 0;
+ text-align: center;
+ text-indent: -3rem;
+ background: transparent content-box !important;
+ box-sizing: border-box;
+ height: 0 !important;
+ padding: 1.38rem 0;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field input:focus {
+ color: #8898aa;
+ outline: 0;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field:before {
+ font-family: 'argon' !important;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\e971";
+ color: #adb5bd;
+ font-size: 1.5rem;
+ position: absolute;
+ z-index: 100;
+ left: 10px;
+ top: 10px;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value.cbi-value-last .cbi-value-field:before {
+ content: "\e910";
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-page-actions {
+ text-align: center;
+ padding-top: 0;
+ margin-bottom: 20px;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-page-actions input {
+ padding: 0.7rem 5.5rem
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-page-actions .cbi-button {
+ background-color: #5a8deec7;
+}
+
+.node-main-login .main .main-right #maincontent .container .cbi-page-actions .cbi-button.cbi-button-reset {
+ display: none !important;
+}
+
+.node-main-login .main .main-right #maincontent footer {
+ bottom: 0;
+ position: absolute;
+ width: 100%;
+ color: #fff;
+}
+
+.node-main-login .main .main-right #maincontent footer a {
+ color: #fff;
+}
+
+@media screen and (min-height: 585px) {
+ .node-main-login footer {
+ display: none;
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ }
+}
+/* fix status */
+.node-status-overview > .main fieldset:nth-child(4) .td:nth-child(2),
+.node-status-processes > .main .table .tr .td:nth-child(3) {
+ white-space: normal;
+}
+/* fix system reboot */
+[data-page="admin-system-reboot"] p {
+ padding-left: 0rem;
+ color: #fff;
+}
+[data-page="admin-system-reboot"] .cbi-button {
+ background: #fb6340 !important;
+}
+[data-page="admin-system-reboot"] p > span {
+ position: relative;
+ top: 0.1rem;
+ left: 1rem;
+}
+/* samba */
+#cbi-samba [data-tab="template"] .cbi-value-field {
+ display: block;
+}
+
+#cbi-samba [data-tab="template"] .cbi-value-title {
+ width: auto;
+ padding-bottom: 0.6rem;
+}
+/* admin-system-admin-password */
+[data-page="admin-system-admin"] .cbi-map h2,
+[data-page="admin-system-admin-password"] .cbi-map h2,
+[data-page="admin-system-admin"] .cbi-map .cbi-map-descr,
+[data-page="admin-system-admin-password"] .cbi-map .cbi-map-descr {
+ margin-left: 1.5rem;
+ color: #32325d;
+ color: var(--gray-dark);
+}
+/* software */
+
+
+.controls {
+ margin: 0.5em 0 1em 0 !important;
+}
+
+.controls > * > .btn:not([aria-label$="page"]) {
+ flex-grow: initial !important;
+ margin-top: 0.25rem;
+}
+
+.controls > #pager > .btn[aria-label$="page"] {
+ font-size: 1.4rem;
+ font-weight: bold;
+}
+
+.controls > * > label {
+ margin-bottom: 0.2rem;
+}
+[data-page="admin-system-opkg"] div.btn {
+ line-height: 3;
+ display: inline;
+}
+[data-page^="admin-system-admin"]:not(.node-main-login) .cbi-map:not(#cbi-dropbear) {
+ margin-top: 2rem;
+ padding-top: 0.1rem;
+}
+
+
+.cbi-tabmenu + .cbi-section {
+ margin-top: 0;
+}
+/* admin-system-crontab*/
+[data-page="admin-system-crontab"] #view p {
+ color: #fff;
+ margin-bottom: 1rem;
+}
+/*admin-system-flash*/
+[data-page="admin-system-flash"] .cbi-value {
+ padding: 0;
+}
+[data-page="admin-system-flash"] .cbi-section .cbi-section {
+ margin-top: 0;
+}
+[data-page="admin-system-flash"] legend {
+ display: block !important;
+ font-size: 1.2rem;
+ width: 100%;
+ display: block;
+ margin-bottom: 0;
+ padding: 1rem 0 1rem 1.5rem;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.05);
+ line-height: 1.5;
+ margin-bottom: 0rem;
+ letter-spacing: 0.1rem;
+ color: #32325d;
+ font-weight: bold;
+}
+[data-page="admin-system-flash"] .cbi-section-descr {
+ font-weight: 600;
+ padding: 1rem 0 1rem 1.5rem;
+ color: #525f7f;
+}
+/* wireless overview */
+#cbi-wireless > #wifi_assoclist_table > .tr {
+ box-shadow: inset 1px -1px 0 #ddd, inset -1px -1px 0 #ddd;
+}
+
+#cbi-wireless > #wifi_assoclist_table > .tr.placeholder > .td {
+ right: 33px;
+ bottom: 33px;
+ left: 33px;
+ border-top: thin solid #ddd !important;
+}
+
+#cbi-wireless > #wifi_assoclist_table > .tr.table-titles {
+ box-shadow: inset 1px 0 0 #ddd, inset -1px 0 0 #ddd;
+}
+
+#cbi-wireless > #wifi_assoclist_table > .tr.table-titles > .th {
+ border-bottom: thin solid #ddd;
+ box-shadow: 0 -1px 0 0 #ddd;
+}
+
+#wifi_assoclist_table > .tr > .td[data-title="RX Rate / TX Rate"] {
+ width: 23rem;
+}
+[data-page="admin-network-dhcp"] .cbi-value {
+ padding: 0;
+}
+[data-page="admin-network-dhcp"] [data-tab-active="true"] {
+ padding: 1rem 0 !important;
+}
+/* firewall */
+#iptables {
+ margin: 0;
+}
+
+.Firewall form {
+ margin: 2rem 2rem 0 0;
+ padding: 0;
+ box-shadow: none;
+}
+
+#cbi-firewall-redirect table *,
+#cbi-network-switch_vlan table *,
+#cbi-firewall-zone table * {
+ font-size: small;
+}
+
+#cbi-firewall-redirect table input[type="text"],
+#cbi-network-switch_vlan table input[type="text"],
+#cbi-firewall-zone table input[type="text"] {
+ width: 5rem;
+}
+
+#cbi-firewall-redirect table select,
+#cbi-network-switch_vlan table select,
+#cbi-firewall-zone table select {
+ min-width: 3.5rem;
+}
+
+#cbi-network-switch_vlan .th,
+#cbi-network-switch_vlan .td {
+ flex-basis: 12%;
+}
+
+#cbi-firewall-zone .table,
+#cbi-network-switch_vlan .table {
+ display: block;
+}
+
+#cbi-firewall-zone .td,
+#cbi-network-switch_vlan .td {
+ width: 100%;
+}
+[data-page="admin-network-firewall-custom"] #view p {
+ color: #fff;
+ margin-bottom: 1rem;
+}
+[data-page="admin-network-firewall-custom"] #view p textarea {
+ margin: 1.5rem;
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
+ transition: box-shadow .25s, -webkit-box-shadow .25s;
+ border-radius: 2px;
+ width: 95% !important;
+}
+/* applyreboot fix */
+#applyreboot-container {
+ margin: 2rem;
+}
+
+#applyreboot-section {
+ line-height: 300%;
+ margin: 2rem;
+}
+/* openvpn bug fix */
+.OpenVPN a {
+ line-height: initial !important;
+}
+/* custom commands */
+.commandbox {
+ width: 24% !important;
+ margin: 10px 0 0 10px !important;
+ padding: 0.5rem 1rem;
+ border-bottom: thin solid #ccc;
+ background: #eee;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+
+.commandbox h3 {
+ line-height: normal !important;
+ overflow: hidden;
+ margin: 6px 0 !important;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.commandbox div {
+ left: auto !important;
+}
+
+.commandbox code {
+ position: absolute;
+ overflow: hidden;
+ max-width: 60%;
+ margin-left: 4px;
+ padding: 2px 3px;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.commandbox code:hover {
+ overflow-y: auto;
+ max-height: 50px;
+ white-space: normal;
+}
+
+.commandbox p:first-of-type {
+ margin-top: -6px;
+}
+
+.commandbox p:nth-of-type(2) {
+ margin-top: 2px;
+}
+[data-page^="admin-system-commands"] .panel-title,
+[data-page^="command-cfg"] .mobile-hide,
+[data-page^="command-cfg"] .showSide {
+ display: none;
+}
+
+#command-rc-output .alert-message {
+ line-height: 1.42857143;
+ position: absolute;
+ top: 40px;
+ right: 32px;
+ max-width: 40%;
+ margin: 0;
+ animation: anim-fade-in 1.5s forwards;
+ word-break: break-word;
+ opacity: 0;
+}
+
+@keyframes anim-fade-in {
+ 100% {
+ opacity: 1;
+ }
+}
+/* other fix */
+input[type="checkbox"] {
+ appearance: none !important;
+ -webkit-appearance: none !important;
+ border: 1px solid #dee2e6;
+ width: 16px !important;
+ height: 16px !important;
+ padding: 0;
+ cursor: pointer;
+ transition: all 0.2s;
+ display:none;
+}
+
+.cbi-dropdown[open]>ul.dropdown>li label {
+ margin-left: .5rem;
+}
+
+#cbi-adblock-global-adb_sources .cbi-dropdown-open .cbi-dropdown[open] > ul.dropdown{
+ position:relative !important;
+ bottom:0 !important;
+}
+
+#cbi-adblock-global-adb_sources .cbi-dropdown-open #cbi-adblock-global-adb_sources .preview,.cbi-dropdown-open .more,.cbi-dropdown-open .open{
+display:none !important;
+}
+
+input[type="checkbox"]:checked {
+ border: 1px solid #5A8DEE;
+ background-image: url('data:image/svg+xml,%3csvg xmlns=\'http://www.w3.org/2000/svg\' viewBox=\'0 0 8 8\'%3e%3cpath fill=\'%23fff\' d=\'M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z\'/%3e%3c/svg%3e') !important;
+ background-color: #5A8DEE;
+ background-size: 70%;
+ background-repeat: no-repeat;
+ background-position: center;
+}
+
+@media screen and (max-width: 1600px) {
+ header > .fill > .container > #logo {
+ margin: 0 2.5rem 0 0.5rem;
+ }
+
+ .main-left {
+ width: calc(0% + 13rem);
+ }
+
+ .main-right {
+ width: calc(100% - 13rem);
+ }
+
+ .label {
+ padding: 0.2rem 0.6rem;
+ }
+
+ .cbi-value-title {
+ width: 15rem;
+ padding-right: 1.5rem;
+ }
+
+ .cbi-value-field .cbi-dropdown,
+ .cbi-value-field .cbi-input-select,
+ .cbi-value input[type="text"],
+ .cbi-value input[type="password"] {
+ min-width: 15rem;
+ }
+
+ #cbi-firewall-zone .cbi-input-select {
+ min-width: 9rem;
+ }
+
+ .cbi-input-textarea {
+ font-size: small;
+ }
+
+ .node-admin-status > .main fieldset li > a {
+ padding: 0.3rem 0.6rem;
+ }
+}
+
+@media screen and (max-width: 1366px) {
+ header > .fill > .container {
+ cursor: default;
+ }
+
+ .main-left {
+ width: calc(0% + 13rem);
+ }
+
+ .main-right {
+ width: calc(100% - 13rem);
+ }
+
+ .panel-title {
+ font-size: 1.1rem;
+ padding-bottom: 1rem;
+ }
+
+ table {
+ font-size: 0.7rem !important;
+ width: 100% !important;
+ }
+
+ .table .cbi-input-text {
+ width: 100%;
+ }
+
+ .cbi-value-field .cbi-dropdown,
+ .cbi-value-field .cbi-input-select,
+ .cbi-value input[type="text"],
+ .cbi-value input[type="password"] {
+ min-width: 16rem;
+ }
+
+ #cbi-firewall-zone .cbi-input-select {
+ min-width: 4rem;
+ }
+
+ .main > .main-left > .nav > .slide > .slide-menu > li > a {
+ font-size: 0.8rem;
+ }
+
+ #modal_overlay {
+ top: 0rem;
+ }
+ [ data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table) {
+ display: block;
+ }
+ [ data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table),
+ [data-page="admin-network-firewall-rules"] .table:not(.cbi-section-table),
+ [data-page="admin-network-hosts"] .table,
+ [data-page="admin-network-routes"] .table {
+ overflow-y: visible;
+ }
+
+ .commandbox {
+ width: 32% !important;
+ }
+}
+
+@media screen and (max-width: 1152px) {
+ header > .fill > .container > #logo {
+ display: none;
+ }
+
+ header > .fill > .container > .brand {
+ position: relative;
+ }
+
+ html,
+ .main {
+ overflow-y: visible;
+ }
+
+ .main > .loading > span {
+ top: 25%;
+ }
+
+ .main-left {
+ width: calc(0% + 13rem);
+ }
+
+ .main-right {
+ width: calc(100% - 13rem);
+ }
+
+ body:not(.logged-in) .showSide {
+ visibility: hidden;
+ width: 0;
+ margin: 0;
+ }
+
+ .node-main-login > .main .cbi-value-title {
+ text-align: left;
+ }
+
+ .cbi-value-title {
+ width: 10rem;
+ padding-right: 1rem;
+ }
+
+ .cbi-value-field .cbi-dropdown,
+ .cbi-value-field .cbi-input-select,
+ .cbi-value input[type="text"] {
+ width: 16rem;
+ min-width: 16rem;
+ }
+ /*.cbi-value input[type="password"],*/
+ .cbi-value input[name^="pw"],
+ .cbi-value input[data-update="change"]:nth-child(2) {
+ width: 13rem !important;
+ min-width: 13rem;
+ }
+
+ #diag-rc-output > pre,
+ #command-rc-output > pre,
+ [data-page="admin-services-wol"] .notice code {
+ font-size: 1rem;
+ }
+
+ .Interfaces .table {
+ overflow-x: hidden;
+ }
+
+ #packages.table {
+ display: grid;
+ }
+
+ .Overview .table[width="100%"] > .tr {
+ flex-wrap: nowrap;
+ }
+
+ .tr.placeholder {
+ border-bottom: thin solid #ddd;
+ }
+
+ .tr.placeholder > .td,
+ #cbi-firewall .tr > .td,
+ #cbi-network .tr:nth-child(2) > .td,
+ .cbi-section #wifi_assoclist_table .tr > .td {
+ border-top: 0;
+ }
+
+.node-admin-status.Overview .tr {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+
+ .th,
+ .td {
+ display: inline-block;
+ align-self: flex-start;
+ flex: 2 2 25%;
+ text-overflow: ellipsis;
+ word-wrap: break-word;
+ }
+
+ .td select,
+ .td input[type="text"] {
+ width: 100%;
+ word-wrap: normal;
+ }
+
+ .td [data-dynlist] > input,
+ .td input.cbi-input-password {
+ width: calc(100% - 1.5rem);
+ }
+
+ .td[data-type="button"],
+ .td[data-type="fvalue"] {
+ flex: 1 1 12.5%;
+ text-align: left;
+ }
+
+ .th.cbi-value-field,
+ .td.cbi-value-field,
+ .th.cbi-section-table-cell,
+ .td.cbi-section-table-cell {
+ flex-basis: auto;
+ padding-top: 1rem;
+ }
+
+ .td.cbi-value-field,
+ .cbi-section-table-cell {
+ display: inline-block;
+ flex: 10 10 auto;
+ flex-basis: 50%;
+ text-align: center;
+ }
+
+ .td.cbi-section-actions {
+ vertical-align: bottom;
+ }
+
+ .tr.table-titles,
+ .tr.cbi-section-table-titles,
+ .tr.cbi-section-table-descr {
+ display: none;
+ }
+
+ .tr[data-title]::before,
+ .tr.cbi-section-table-titles.named::before {
+ font-size: 0.9rem;
+ display: block;
+ flex: 1 1 100%;
+ border-bottom: thin solid rgba(0, 0, 0, 0.26);
+ background: #e9ecef;
+ }
+
+ .td[data-title],
+ [data-page^="admin-status-realtime"] .td[id] {
+ text-align: left;
+ }
+
+ .td[data-title]::before {
+ display: block;
+ }
+
+ .cbi-button + .cbi-button {
+ margin-left: 0;
+ }
+
+ .td.cbi-section-actions > * > *,
+ .td.cbi-section-actions > * > form > * {
+ margin: 2.1px 3px;
+ }
+
+ .Firewall form {
+ position: static !important;
+ margin: 0 0 2rem 0;
+ padding: 2rem;
+ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.16), 0 0 2px 0 rgba(0, 0, 0, 0.12);
+ }
+
+ .Firewall form input {
+ width: 100% !important;
+ margin: 0;
+ margin-top: 1rem;
+ }
+
+ .Firewall .center,
+ .Firewall .center::before {
+ text-align: left !important;
+ }
+
+ .commandbox {
+ width: 100% !important;
+ margin-left: 0 !important;
+ }
+#packages .tr {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+#packages .td {
+ padding: 1em 2rem;
+}
+}
+
+@media screen and (max-width: 768px) {
+ header {
+ display: block;
+ }
+
+ body {
+ font-size: 0.8rem;
+ }
+
+ .tabs > li > a, .cbi-tabmenu > li > a {
+ padding: 0.7rem 1.2rem;
+ }
+
+ .btn, button, .cbi-button, input[type=button], input[type=submit], input[type=reset] {
+ padding: 0.5rem 1.2rem !important;
+ }
+
+ .cbi-progressbar::after {
+ font-size: 0.95em;
+ line-height: 1.5;
+ }
+
+ .main-left {
+ position: fixed;
+ z-index: 100;
+ width: 0;
+ }
+
+ .main-right {
+ width: 100%;
+ }
+
+ .main-right > #maincontent {
+ margin-top: 0.5rem;
+ }
+
+ .showSide {
+ padding: 0.1rem;
+ position: relative;
+ z-index: 99;
+ top: -0.7rem;
+ display: inline-block !important;
+ }
+
+ .showSide::before {
+ font-family: 'argon' !important;
+ font-style: normal !important;
+ font-weight: normal !important;
+ font-variant: normal !important;
+ text-transform: none !important;
+ line-height: 1;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ content: "\e20e";
+ font-size: 1.7rem;
+ }
+
+ header > .fill > .container > .brand {
+ display: inline-block;
+ }
+
+ .cbi-section > div {
+ overflow-x: auto;
+ }
+}
+
+@media screen and (max-width: 600px) {
+ .mobile-hide {
+ display: none;
+ }
+
+ #maincontent > .container {
+ margin: 1rem 0 1rem 0;
+ }
+
+ .cbi-value-title {
+ text-align: left;
+ }
+ [ data-page="admin-system-flash"] legend {
+ padding: 1rem 0 1rem 1rem;
+ }
+ [ data-page="admin-system-flash"] .cbi-section-descr {
+ padding: 1rem 0 1rem 1rem;
+ }
+ [ data-page="admin-system-flash"] .cbi-value {
+ padding: 0 1rem;
+ }
+ [ data-page="admin-network-dhcp"] [data-tab-active="true"] {
+ padding: 1rem 1rem !important;
+ }
+
+ body {
+ overflow-x: hidden;
+ }
+
+ .node-main-login .main .main-right #maincontent .container .cbi-map .cbi-section .cbi-section-node .cbi-value .cbi-value-field {
+ width: 16rem;
+ }
+
+ .node-main-login footer {
+ display: none;
+ }
+}
+
+@media screen and (min-width: 600px) {
+ ::-webkit-scrollbar {
+ width: 10px;
+ height: 10px;
+ }
+
+ ::-webkit-scrollbar,
+ ::-webkit-scrollbar-corner {
+ background: transparent;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background: #9e9e9e;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background: #757575;
+ }
+
+ ::-webkit-scrollbar-thumb:active {
+ background: #424242;
+ }
+}
+
+.waves-input-wrapper {
+ background-color: #475F7B;
+}
+
+.cbi-button,.btn {
+ background-color: #00CFDD;
+}
+
+.cbi-button.reconnect {
+ background-color: #00CFDD !important;
+}
+
+.cpu .cbi-progressbar > div {
+ background-color: #5A8DEE !important;
+}
+
+.memory .cbi-progressbar > div {
+ background-color: #FDAC41 !important;
+}
+
+.cbi-map style+fieldset.cbi-section:first-of-type {
+ box-shadow: none !important;
+ display: block;
+ text-align: center;
+ overflow: hidden;
+ margin: 0.5rem 0;
+ background: none;
+ padding: 0;
+ border:none;
+}
+
+.cbi-map style+fieldset.cbi-section:first-of-type p font {
+ position: relative;
+ display: inline-block;
+ padding: 0 1rem;
+}
+
+.cbi-map style+fieldset.cbi-section:first-of-type p font:before, .cbi-map style+fieldset.cbi-section:first-of-type p font:after {
+ border-color: #FDAC41 !important;
+ content: "";
+ position: absolute;
+ top: 50%;
+ width: 9999px;
+ border-top: 2px solid #DFE3E7;
+}
+
+.cbi-map style+fieldset.cbi-section:first-of-type p font:before {
+ right: 100%;
+}
+
+.cbi-map style+fieldset.cbi-section:first-of-type p font:after {
+ left: 100%;
+}
+
+.cbi-map style+fieldset.cbi-section:first-of-type p em {
+ display: block;
+}
+
+.cbi-section .cbi-section {
+ box-shadow: none !important;
+}
+/* Checkboxes
+ ========================================================================== */
+/* Remove default checkbox */
+
+[type="checkbox"] + label:not(.lever) {
+ position: relative;
+ padding-left: 35px;
+ cursor: pointer;
+ display: inline-block;
+ height: 25px;
+ line-height: 25px;
+ font-size: 1rem;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+[type="checkbox"] + label:not(.lever):before,
+[type="checkbox"]:not(.filled-in) + label:not(.lever):after {
+ content: '';
+ position: absolute;
+ top: 0.4rem;
+ left: 0;
+ width: 15px;
+ height: 15px;
+ z-index: 0;
+ border: 2px solid #5a5a5a;
+ border-radius: 1px;
+ margin-top: 3px;
+ -webkit-transition: .2s;
+ transition: .2s;
+}
+
+[type="checkbox"]:not(.filled-in) + label:not(.lever):after {
+ border: 0;
+ -webkit-transform: scale(0);
+ transform: scale(0);
+}
+
+[type="checkbox"]:not(:checked):disabled + label:not(.lever):before {
+ border: none;
+ background-color: rgba(0, 0, 0, 0.42);
+}
+
+[type="checkbox"].tabbed:focus + label:not(.lever):after {
+ -webkit-transform: scale(1);
+ transform: scale(1);
+ border: 0;
+ border-radius: 50%;
+ -webkit-box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);
+ box-shadow: 0 0 0 10px rgba(0, 0, 0, 0.1);
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+[type="checkbox"]:checked + label:not(.lever):before {
+ top: 0.1rem;
+ left: -5px;
+ width: 9px;
+ height: 18px;
+ border-top: 2px solid transparent;
+ border-left: 2px solid transparent;
+ border-right: 2px solid orangered;
+ border-bottom: 2px solid orangered;
+ -webkit-transform: rotate(40deg);
+ transform: rotate(40deg);
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+}
+
+[type="checkbox"]:checked:disabled + label:before {
+ border-right: 2px solid rgba(0, 0, 0, 0.42);
+ border-bottom: 2px solid rgba(0, 0, 0, 0.42);
+}
+
+/* Indeterminate checkbox */
+[type="checkbox"]:indeterminate + label:not(.lever):before {
+ top: -11px;
+ left: -12px;
+ width: 10px;
+ height: 22px;
+ border-top: none;
+ border-left: none;
+ border-right: 2px solid orangered;
+ border-bottom: none;
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+ -webkit-backface-visibility: hidden;
+ backface-visibility: hidden;
+ -webkit-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+}
+
+[type="checkbox"]:indeterminate:disabled + label:not(.lever):before {
+ border-right: 2px solid rgba(0, 0, 0, 0.42);
+ background-color: transparent;
+}
+
+[type="checkbox"].filled-in + label:not(.lever):after {
+ border-radius: 2px;
+}
+
+[type="checkbox"].filled-in + label:not(.lever):before,
+[type="checkbox"].filled-in + label:not(.lever):after {
+ content: '';
+ left: 0;
+ position: absolute;
+ /* .1s delay is for check animation */
+ -webkit-transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;
+ transition: border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;
+ z-index: 1;
+}
+
+[type="checkbox"].filled-in:not(:checked) + label:not(.lever):before {
+ width: 0;
+ height: 0;
+ border: 3px solid transparent;
+ left: 6px;
+ top: 10px;
+ -webkit-transform: rotateZ(37deg);
+ transform: rotateZ(37deg);
+ -webkit-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+}
+
+[type="checkbox"].filled-in:not(:checked) + label:not(.lever):after {
+ height: 20px;
+ width: 20px;
+ background-color: transparent;
+ border: 2px solid #5a5a5a;
+ top: 0px;
+ z-index: 0;
+}
+
+[type="checkbox"].filled-in:checked + label:not(.lever):before {
+ top: 0;
+ left: 1px;
+ width: 8px;
+ height: 13px;
+ border-top: 2px solid transparent;
+ border-left: 2px solid transparent;
+ border-right: 2px solid #fff;
+ border-bottom: 2px solid #fff;
+ -webkit-transform: rotateZ(37deg);
+ transform: rotateZ(37deg);
+ -webkit-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+}
+
+[type="checkbox"].filled-in:checked + label:not(.lever):after {
+ top: 0;
+ width: 20px;
+ height: 20px;
+ border: 2px solid orangered;
+ background-color: orangered;
+ z-index: 0;
+}
+
+[type="checkbox"].filled-in.tabbed:focus + label:not(.lever):after {
+ border-radius: 2px;
+ border-color: #5a5a5a;
+ background-color: rgba(0, 0, 0, 0.1);
+}
+
+[type="checkbox"].filled-in.tabbed:checked:focus + label:not(.lever):after {
+ border-radius: 2px;
+ background-color: orangered;
+ border-color: orangered;
+}
+
+[type="checkbox"].filled-in:disabled:not(:checked) + label:not(.lever):before {
+ background-color: transparent;
+ border: 2px solid transparent;
+}
+
+[type="checkbox"].filled-in:disabled:not(:checked) + label:not(.lever):after {
+ border-color: transparent;
+ background-color: #949494;
+}
+
+[type="checkbox"].filled-in:disabled:checked + label:not(.lever):before {
+ background-color: transparent;
+}
+
+[type="checkbox"].filled-in:disabled:checked + label:not(.lever):after {
+ background-color: #949494;
+ border-color: #949494;
+}
+
+.controls > *:nth-child(2), .controls > *:nth-child(3) {
+ position: relative;
+}
+
+.controls>div .focus-input {
+ top: 1.53rem;
+}
+
+#indicators {
+ cursor: pointer;
+ position: absolute;
+ top: 1.5rem;
+ right: 1.5rem;
+ z-index: 99;
+}
+
+.cbi-section > h3:first-child, .panel-title {
+ font-size: 1.1rem !important;
+}
+
+h2 {
+ font-size: 1.4rem !important;
+}
+
+.main .main-left .nav li .slide-menu li {
+ padding: 0.4rem 0rem !important;
+}
+
+h3 {
+ font-size: 1.1rem !important;
+ padding: 1rem 2rem !important;
+}
+
+code,.cbi-progressbar::after {
+ font-size-adjust: none !important;
+ font-family: inherit !important;
+ font-size: 0.9em !important;
+}
+[data-page="admin-system-flash"] legend {
+ font-size: 1.1rem !important;
+ padding-bottom: 0.6rem !important;
+}
+
+.main .main-left .nav>li>a:first-child::before {
+ font-size: 1.1rem !important;
+}
+
+.td.version {
+ word-break: normal !important;
+}
+
+.node-main-login .main .main-right .login-bg {
+ background-color: white !important;
+}
+
+.cbi-map >.cbi-section .cbi-value {
+ padding-left: 1rem;
+ padding-right: 1rem;
+}
+
+.cbi-section ~ .cbi-section> .panel-title {
+ padding-top: 0;
+}
+
+#cbi-openclash .cbi-map-descr {
+ color: #404040
+}
+
+input,select {
+ height: 2.2rem;
+ background: none;
+}
+
+.btn,button,
+ .cbi-button,input[type=button],input[type=submit],input[type=reset],.waves-input-wrapper {
+ height: auto !important;
+ width: auto !important;
+ padding: 0.6rem 1.6rem;
+ line-height: 1rem;
+ webkit-box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
+ box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
+ border-radius: 2px;
+ transition: all .20s linear;
+ top: 0;
+ margin-left: 0.5rem;
+}
+
+.btn:first-child,button:first-child,
+ .cbi-button:first-child,input[type=button]:first-child,input[type=submit]:first-child,input[type=reset]:first-child,.waves-input-wrapper:first-child {
+ margin-left: 0;
+}
+
+i.waves-input-wrapper {
+ padding: 0 !important;
+}
+
+i input {
+ margin: 0 !important
+}
+
+.controls > * > .btn {
+ flex-basis: auto !important;
+}
+
+
+.cbi-map >.cbi-section .cbi-section-table,.container .cbi-tabmenu,.container #tabmenu,.cbi-map >.cbi-section .table {
+ margin-left: -2%;
+ width: 105%;
+}
+
+.admin-status-overview h2.content {
+ display: none;
+}
+
+#view>.cbi-section:first-child {
+ padding-top: 0;
+}
+
+.node-admin-status div {
+ border: none !important;
+}
+
+.cbi-section-table .tr .td:first-child,.cbi-section-table .tr .th:first-child,
+.table .tr .td:first-child,.table .tr .th:first-child,
+.table .tr:before {
+ padding-left: 2rem !important;
+}
+
+.node-admin-status .table .tr .td:first-child {
+ padding-left: 3rem !important;
+}
+
+ul.errors li {
+ margin-bottom: 1rem;
+}
+
+.Wireless .cbi-section {
+ padding: 0 2rem;
+}
+
+.cbi-section-table-row > .cbi-value-field .cbi-input-select {
+ min-width: 5rem !important;
+}
+
+#cbi-passwall .status .red, #cbi-passwall .status .green {
+ font-size: 0.83rem !important;
+ line-height: 2rem;
+}
+
+.waves-input-wrapper .waves-button-input {
+ line-height: 1rem;
+}
+
+.cbi-dropdown.waves-effect {
+ display: inline-flex;
+}
+
+#cbi-AdGuardHome-AdGuardHome .waves-input-wrapper>input {
+ color: #fff !important;
+}
+
+input[type=password]+.cbi-button.cbi-button-neutral {
+ padding: 0 0.4rem;
+ color: #fff !important;
+}
+
+.cbi-input-password[type=text]+.cbi-button.cbi-button-neutral {
+ padding: 0.2rem 0.5rem;
+}
+
+.main-right>hr {
+ height: 6px;
+ background-color: rgba(255, 0, 27, 0.95);
+ background: linear-gradient(90deg,#e75239 0%,#e75239 12.5%,#ff961c 12.5%,#ff961c 25%,#ffcc27 25%,#ffcc27 37.5%,#fce62f 37.5%,#fce62f 50%,#cde35b 50%,#cde35b 62.5%,#82cc33 62.5%,#82cc33 75%,#41bece 75%,#41bece 87.5%,#049cdb 87.5%,#049cdb 100%);
+ background-position: 50% 0;
+ box-shadow: 0 1px 2px rgba(0,0,0,.0625) inset;
+ margin: 0 0 10px;
+ border: none;
+ opacity: 0.9;
+}
+
+div[id^="cbi-unblockmusic"] .cbi-button {
+ top: -1.2rem;
+}
+[data-page^="admin-network-wifi"] form {
+ padding-left: 1.5rem;
+}
+[data-page^="admin-network-wifi"] form td {
+ padding-left: 1.5rem;
+}
+
+.cbi-section-table .tr>.td:last-child,#packages .tr>.td:last-child{
+ padding-right:3%;
+}
+
+.command-output {
+ padding: 0 2rem;
+}
+
+.chromeframe {
+ padding: 2rem 3rem;
+ margin: 0 auto;
+ font-size: 16px;
+ font-weight: bold;
+ color: #fff;
+ position: absolute;
+ top: 10rem;
+ width: 100%;
+ z-index: 9999;
+ text-align: center;
+ background: #5A8DEE;
+}
+
+.chromeframe {
+ display: none;
+}
+
+.chromeframe a {
+ color: orangered;
+}
+
+.landscape {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+}
+
+[data-page="admin-network-wifi"] tr > td .cbi-button{
+ margin-left: 0 !important;
+}
+[data-page="admin-network-wifi"] tr > td input[type="button"]{
+ padding: 0.5rem 1rem !important;
+}
+table.interfaces .th{
+ padding:1.1em 0.5rem !important;
+}
\ No newline at end of file
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/custom.css b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/custom.css
new file mode 100644
index 0000000000..c03f8db61e
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/custom.css
@@ -0,0 +1,46 @@
+:root {
+ --main-color: #09c;
+ --header-bg: #09c;
+ --header-color: #fff;
+ --bar-bg: #5e72e4;
+ --menu-bg-color: #fff;
+ --menu-color: #5f6368;
+ --menu-color-hover: #202124;
+ --main-menu-color: #202124;
+ --submenu-bg-hover: #d4d4d4;
+ --submenu-bg-hover-active: #09c;
+
+ --blue: #5e72e4;
+ --indigo: #5603ad;
+ --purple: #8965e0;
+ --pink: #f3a4b5;
+ --red: #f5365c;
+ --orange: #fb6340;
+ --yellow: #ffd600;
+ --green: #2dce89;
+ --teal: #11cdef;
+ --cyan: #2bffc6;
+ --white: #fff;
+ --gray: #8898aa;
+ --gray-dark: #32325d;
+ --light: #96999c;
+ --lighter: #e9ecef;
+ --primary: #5e72e4;
+ --secondary: #f7fafc;
+ --success: #2dce89;
+ --info: #11cdef;
+ --warning: #fb6340;
+ --danger: #f5365c;
+ --dark: #212529;
+ --default: #172b4d;
+ --white: #fff;
+ --neutral: #fff;
+ --darker: black;
+ --breakpoint-xs: 0;
+ --breakpoint-sm: 576px;
+ --breakpoint-md: 768px;
+ --breakpoint-lg: 992px;
+ --breakpoint-xl: 1200px;
+
+ --font-body: "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB";
+}
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/favicon.ico b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/favicon.ico
new file mode 100644
index 0000000000..4611336803
Binary files /dev/null and b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/favicon.ico differ
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/fonts/argon.woff b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/fonts/argon.woff
new file mode 100644
index 0000000000..ef1e9c2c43
Binary files /dev/null and b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/fonts/argon.woff differ
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/glare.svg b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/glare.svg
new file mode 100644
index 0000000000..6274ac9914
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/glare.svg
@@ -0,0 +1,29 @@
+
+
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/icons/arrow.svg b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/icons/arrow.svg
new file mode 100644
index 0000000000..be864c5ac9
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/icons/arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/icons/spinner.svg b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/icons/spinner.svg
new file mode 100644
index 0000000000..6ddd3b3ed8
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/icons/spinner.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/js/jquery.min.js b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/js/jquery.min.js
new file mode 100644
index 0000000000..d467083b62
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/js/jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,""],col:[2,""],tr:[2,""],td:[3,""],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0
+ *
+ * Have a bug? Please create an issue here on GitHub!
+ * https://github.com/garypang13/luci-theme-edge/issues
+ *
+ * luci-theme-material:
+ * Copyright 2015 Lutty Yang
+ * https://github.com/LuttyYang/luci-theme-material/
+ *
+ * Agron Theme
+ * https://demos.creative-tim.com/argon-dashboard/index.html
+ *
+ * Login background
+ * https://unsplash.com/
+ * Font generate by Icomoon
+ *
+ * Licensed to the public under the Apache License 2.0
+ */
+
+document.addEventListener('luci-loaded', function(ev) {
+(function ($) {
+ $(".main > .loading").fadeOut();
+
+ /**
+ * trim text, Remove spaces, wrap
+ * @param text
+ * @returns {string}
+ */
+ function trimText(text) {
+ return text.replace(/[ \t\n\r]+/g, " ");
+ }
+
+ var lastNode = undefined;
+ var mainNodeName = undefined;
+
+ var nodeUrl = "";
+ (function(node){
+ var luciLocation;
+ if (node[0] == "admin"){
+ luciLocation = [node[1], node[2]];
+ }else{
+ luciLocation = node;
+ }
+
+ for(var i in luciLocation){
+ nodeUrl += luciLocation[i];
+ if (i != luciLocation.length - 1){
+ nodeUrl += "/";
+ }
+ }
+ })(luciLocation);
+
+ /**
+ * get the current node by Burl (primary)
+ * @returns {boolean} success?
+ */
+ function getCurrentNodeByUrl() {
+ var ret = false;
+ if (!$('body').hasClass('logged-in')) {
+ luciLocation = ["Main", "Login"];
+ return true;
+ }
+
+ $(".main > .main-left > .nav > .slide > .menu").each(function () {
+ var ulNode = $(this);
+ ulNode.next().find("a").each(function () {
+ var that = $(this);
+ var href = that.attr("href");
+
+ if (href.indexOf(nodeUrl) != -1) {
+ ulNode.click();
+ ulNode.next(".slide-menu").stop(true, true);
+ lastNode = that.parent();
+ lastNode.addClass("active");
+ ret = true;
+ return true;
+ }
+ });
+ });
+ return ret;
+ }
+
+ /**
+ * menu click
+ */
+ /**
+ * menu click
+ */
+ $(".main > .main-left > .nav > .slide > .menu").click(function () {
+ var ul = $(this).next(".slide-menu");
+ var menu = $(this);
+ $(".main > .main-left > .nav > .slide > .menu").each(function () {
+ var ulNode = $(this);
+ ulNode.removeClass("active");
+ ulNode.next(".slide-menu").stop(true).slideUp("fast")
+ });
+ if (!ul.is(":visible")) {
+ menu.addClass("active");
+ ul.addClass("active");
+ ul.stop(true).slideDown("fast");
+ } else {
+ ul.stop(true).slideUp("fast", function () {
+ menu.removeClass("active");
+ ul.removeClass("active");
+ });
+ }
+ return false;
+ });
+
+ /**
+ * hook menu click and add the hash
+ */
+ $(".main > .main-left > .nav > .slide > .slide-menu > li > a").click(function () {
+ if (lastNode != undefined) lastNode.removeClass("active");
+ $(this).parent().addClass("active");
+ $(".main > .loading").fadeIn("fast");
+ return true;
+ });
+
+ /**
+ * fix menu click
+ */
+ $(".main > .main-left > .nav > .slide > .slide-menu > li").click(function () {
+ if (lastNode != undefined) lastNode.removeClass("active");
+ $(this).addClass("active");
+ $(".main > .loading").fadeIn("fast");
+ window.location = $($(this).find("a")[0]).attr("href");
+ return false;
+ });
+
+ /**
+ * get current node and open it
+ */
+ if (getCurrentNodeByUrl()) {
+ mainNodeName = "node-" + luciLocation[0] + "-" + luciLocation[1];
+ mainNodeName = mainNodeName.replace(/[ \t\n\r\/]+/g, "_").toLowerCase();
+ $("body").addClass(mainNodeName);
+ }
+
+ /**
+ * Sidebar expand
+ */
+ var showSide = false;
+ $(".showSide").click(function () {
+ if (showSide) {
+ $(".darkMask").stop(true).fadeOut("fast");
+ $(".main-left").stop(true).animate({
+ width: "0"
+ }, "200");
+ $(".main-right").css("overflow-y", "visible");
+ showSide = false;
+ } else {
+ $(".darkMask").stop(true).fadeIn("fast");
+ $(".main-left").stop(true).animate({
+ width: "13rem"
+ }, "200");
+ $(".main-right").css("overflow-y", "hidden");
+ showSide = true;
+ }
+ });
+
+ $(".darkMask").click(function () {
+ if (showSide) {
+ showSide = false;
+ $(".darkMask").stop(true).fadeOut("fast");
+ $(".main-left").stop(true).animate({
+ width: "0"
+ }, "fast");
+ $(".main-right").css("overflow-y", "visible");
+ }
+ });
+
+ $(window).resize(function () {
+ if ($(window).width() > 921) {
+ $(".main-left").css("width", "");
+ $(".darkMask").stop(true);
+ $(".darkMask").css("display", "none");
+ showSide = false;
+ }
+ });
+
+ /**
+ * fix legend position
+ */
+ $("legend").each(function () {
+ var that = $(this);
+ that.after("" + that.text() + "");
+ });
+
+ $(".cbi-section-table-titles, .cbi-section-table-descr, .cbi-section-descr").each(function () {
+ var that = $(this);
+ if (that.text().trim() == ""){
+ that.css("display", "none");
+ }
+ });
+
+ $(".main-right").focus();
+ $(".main-right").blur();
+ $("input").attr("size", "0");
+ $(".cbi-button-up").val("__");
+ $(".cbi-button-down").val("__");
+ $(".slide > a").removeAttr("href");
+
+ if (mainNodeName != undefined) {
+ console.log(mainNodeName);
+ switch (mainNodeName) {
+ case "node-status-system_log":
+ case "node-status-kernel_log":
+ $("#syslog").focus(function () {
+ $("#syslog").blur();
+ $(".main-right").focus();
+ $(".main-right").blur();
+ });
+ break;
+ case "node-status-firewall":
+ var button = $(".node-status-firewall > .main fieldset li > a");
+ button.addClass("cbi-button cbi-button-reset a-to-btn");
+ break;
+ case "node-system-reboot":
+ var button = $(".node-system-reboot > .main > .main-right p > a");
+ button.addClass("cbi-button cbi-input-reset a-to-btn");
+ break;
+ }
+ }
+
+ var getaudio = $('#player')[0];
+ /* Get the audio from the player (using the player's ID), the [0] is necessary */
+ var audiostatus = 'off';
+ /* Global variable for the audio's status (off or on). It's a bit crude but it works for determining the status. */
+
+
+ $(document).on('click touchend', '.speaker', function() {
+ /* Touchend is necessary for mobile devices, click alone won't work */
+ if (!$('.speaker').hasClass("speakerplay")) {
+ if (audiostatus == 'off') {
+ $('.speaker').addClass('speakerplay');
+ getaudio.load();
+ getaudio.play();
+ audiostatus = 'on';
+ return false;
+ } else if (audiostatus == 'on') {
+ $('.speaker').addClass('speakerplay');
+ getaudio.play()
+ }
+ } else if ($('.speaker').hasClass("speakerplay")) {
+ getaudio.pause();
+ $('.speaker').removeClass('speakerplay');
+ audiostatus = 'on';
+ }
+ });
+
+ $('#player').on('ended', function() {
+ $('.speaker').removeClass('speakerplay');
+ /*When the audio has finished playing, remove the class speakerplay*/
+ audiostatus = 'off';
+ /*Set the status back to off*/
+ });
+ setTimeout(function(){
+var config = {
+ // How long Waves effect duration
+ // when it's clicked (in milliseconds)
+ duration: 600
+};
+ Waves.attach("button,input[type='button'],input[type='reset'],input[type='submit']", ['waves-light']);
+ // Ripple on hover
+$("button,input[type='button'],input[type='reset'],input[type='submit']").mouseenter(function() {
+ Waves.ripple(this, {wait: null});
+}).mouseleave(function() {
+ Waves.calm(this);
+});
+ Waves.init(config);
+$(".waves-input-wrapper").filter(function () {
+ if($(this).children().css("display")=="none"){
+ return true;
+ }else{
+ return false;
+ }
+}).hide();
+
+$("div>select:first-child,div>input[type='text']:first-child").filter(function () {
+return (!$(this).parents(".cbi-dynlist").length&&!$("body.Diagnostics").length&&!$(this).hasClass("cbi-input-password"))
+}).after("");
+
+$("input[type='checkbox']").filter(function () {
+ return (!$(this).next("label").length)
+}).show();
+
+$("select,input").filter(function () {
+ return ($(this).next(".focus-input").length)
+}).focus(function(){
+ $(this).css("border-bottom","1px solid #fff");
+}).blur(function(){
+ $(this).css("border-bottom","1px solid #9e9e9e");
+});
+ }, 0);
+
+var options = { attributes: true};
+function callback() {
+$("div>select:first-child,div>input[type='text']:first-child").filter(function () {
+return (!$(this).parents(".cbi-dynlist").length&&!$(this).hasClass("cbi-input-password"))
+}).after("");
+$("select,input").filter(function () {
+ return ($(this).next(".focus-input").length)
+}).focus(function(){
+ $(this).css("border-bottom","1px solid #fff");
+}).blur(function(){
+ $(this).css("border-bottom","1px solid #9e9e9e");
+});
+$("input[type='checkbox']").filter(function () {
+ return (!$(this).next("label").length)
+}).show();
+}
+var mutationObserver = new MutationObserver(callback);
+ mutationObserver.observe($("body")[0], options);
+ $(".cbi-value").has("textarea").css("background","none");
+})(jQuery);
+});
\ No newline at end of file
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/js/waves.js b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/js/waves.js
new file mode 100644
index 0000000000..96d83260b5
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/js/waves.js
@@ -0,0 +1,41 @@
+;(function(window,factory){'use strict';if(typeof define==='function'&&define.amd){define([],function(){window.Waves=factory.call(window);return window.Waves;});}
+else if(typeof exports==='object'){module.exports=factory.call(window);}
+else{window.Waves=factory.call(window);}})(typeof global==='object'?global:this,function(){'use strict';var Waves=Waves||{};var $$=document.querySelectorAll.bind(document);var toString=Object.prototype.toString;var isTouchAvailable='ontouchstart'in window;function isWindow(obj){return obj!==null&&obj===obj.window;}
+function getWindow(elem){return isWindow(elem)?elem:elem.nodeType===9&&elem.defaultView;}
+function isObject(value){var type=typeof value;return type==='function'||type==='object'&&!!value;}
+function isDOMNode(obj){return isObject(obj)&&obj.nodeType>0;}
+function getWavesElements(nodes){var stringRepr=toString.call(nodes);if(stringRepr==='[object String]'){return $$(nodes);}else if(isObject(nodes)&&/^\[object (Array|HTMLCollection|NodeList|Object)\]$/.test(stringRepr)&&nodes.hasOwnProperty('length')){return nodes;}else if(isDOMNode(nodes)){return[nodes];}
+return[];}
+function offset(elem){var docElem,win,box={top:0,left:0},doc=elem&&elem.ownerDocument;docElem=doc.documentElement;if(typeof elem.getBoundingClientRect!==typeof undefined){box=elem.getBoundingClientRect();}
+win=getWindow(doc);return{top:box.top+win.pageYOffset-docElem.clientTop,left:box.left+win.pageXOffset-docElem.clientLeft};}
+function convertStyle(styleObj){var style='';for(var prop in styleObj){if(styleObj.hasOwnProperty(prop)){style+=(prop+':'+styleObj[prop]+';');}}
+return style;}
+var Effect={duration:750,delay:200,show:function(e,element,velocity){if(e.button===2){return false;}
+element=element||this;var ripple=document.createElement('div');ripple.className='waves-ripple waves-rippling';element.appendChild(ripple);var pos=offset(element);var relativeY=0;var relativeX=0;if('touches'in e&&e.touches.length){relativeY=(e.touches[0].pageY-pos.top);relativeX=(e.touches[0].pageX-pos.left);}
+else{relativeY=(e.pageY-pos.top);relativeX=(e.pageX-pos.left);}
+relativeX=relativeX>=0?relativeX:0;relativeY=relativeY>=0?relativeY:0;var scale='scale('+((element.clientWidth/100)*3)+')';var translate='translate(0,0)';if(velocity){translate='translate('+(velocity.x)+'px, '+(velocity.y)+'px)';}
+ripple.setAttribute('data-hold',Date.now());ripple.setAttribute('data-x',relativeX);ripple.setAttribute('data-y',relativeY);ripple.setAttribute('data-scale',scale);ripple.setAttribute('data-translate',translate);var rippleStyle={top:relativeY+'px',left:relativeX+'px'};ripple.classList.add('waves-notransition');ripple.setAttribute('style',convertStyle(rippleStyle));ripple.classList.remove('waves-notransition');rippleStyle['-webkit-transform']=scale+' '+translate;rippleStyle['-moz-transform']=scale+' '+translate;rippleStyle['-ms-transform']=scale+' '+translate;rippleStyle['-o-transform']=scale+' '+translate;rippleStyle.transform=scale+' '+translate;rippleStyle.opacity='1';var duration=e.type==='mousemove'?2500:Effect.duration;rippleStyle['-webkit-transition-duration']=duration+'ms';rippleStyle['-moz-transition-duration']=duration+'ms';rippleStyle['-o-transition-duration']=duration+'ms';rippleStyle['transition-duration']=duration+'ms';ripple.setAttribute('style',convertStyle(rippleStyle));},hide:function(e,element){element=element||this;var ripples=element.getElementsByClassName('waves-rippling');for(var i=0,len=ripples.length;i=0&&options.wait!==null){var mouseup={type:'mouseup',button:1};setTimeout(hideRipple(mouseup,element),options.wait);}}}};Waves.calm=function(elements){elements=getWavesElements(elements);var mouseup={type:'mouseup',button:1};for(var i=0,len=elements.length;i
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/waves.css b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/waves.css
new file mode 100644
index 0000000000..5572ae0fc3
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/htdocs/luci-static/edge/waves.css
@@ -0,0 +1,135 @@
+/*!
+ * Waves v0.7.6
+ * http://fian.my.id/Waves
+ *
+ * Copyright 2014-2018 Alfiana E. Sibuea and other contributors
+ * Released under the MIT license
+ * https://github.com/fians/Waves/blob/master/LICENSE */
+.waves-effect {
+ position: relative;
+ cursor: pointer;
+ display: inline-block;
+ overflow: hidden;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ -webkit-tap-highlight-color: transparent;
+}
+.waves-effect .waves-ripple {
+ position: absolute;
+ border-radius: 50%;
+ width: 100px;
+ height: 100px;
+ margin-top: -50px;
+ margin-left: -50px;
+ opacity: 0;
+ background: rgba(0, 0, 0, 0.2);
+ background: -webkit-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+ background: -o-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+ background: -moz-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+ background: radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+ -webkit-transition: all 0.5s ease-out;
+ -moz-transition: all 0.5s ease-out;
+ -o-transition: all 0.5s ease-out;
+ transition: all 0.5s ease-out;
+ -webkit-transition-property: -webkit-transform, opacity;
+ -moz-transition-property: -moz-transform, opacity;
+ -o-transition-property: -o-transform, opacity;
+ transition-property: transform, opacity;
+ -webkit-transform: scale(0) translate(0, 0);
+ -moz-transform: scale(0) translate(0, 0);
+ -ms-transform: scale(0) translate(0, 0);
+ -o-transform: scale(0) translate(0, 0);
+ transform: scale(0) translate(0, 0);
+ pointer-events: none;
+}
+.waves-effect.waves-light .waves-ripple {
+ background: rgba(255, 255, 255, 0.4);
+ background: -webkit-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+ background: -o-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+ background: -moz-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+ background: radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
+}
+.waves-effect.waves-classic .waves-ripple {
+ background: rgba(0, 0, 0, 0.2);
+}
+.waves-effect.waves-classic.waves-light .waves-ripple {
+ background: rgba(255, 255, 255, 0.4);
+}
+.waves-notransition {
+ -webkit-transition: none !important;
+ -moz-transition: none !important;
+ -o-transition: none !important;
+ transition: none !important;
+}
+.waves-button,
+.waves-circle {
+ -webkit-transform: translateZ(0);
+ -moz-transform: translateZ(0);
+ -ms-transform: translateZ(0);
+ -o-transform: translateZ(0);
+ transform: translateZ(0);
+ -webkit-mask-image: -webkit-radial-gradient(circle, white 100%, black 100%);
+}
+.waves-button,
+.waves-button:hover,
+.waves-button:visited,
+.waves-button-input {
+ white-space: nowrap;
+ vertical-align: middle;
+ cursor: pointer;
+ border: none;
+ outline: none;
+ color: inherit;
+ background-color: rgba(0, 0, 0, 0);
+ font-size: 1em;
+ line-height: 1em;
+ text-align: center;
+ text-decoration: none;
+ z-index: 1;
+}
+.waves-button {
+ padding: 0.85em 1.1em;
+ border-radius: 0.2em;
+}
+.waves-button-input {
+ margin: 0;
+ padding: 0.85em 1.1em;
+}
+.waves-input-wrapper {
+ border-radius: 0.2em;
+ vertical-align: bottom;
+}
+.waves-input-wrapper.waves-button {
+ padding: 0;
+}
+.waves-input-wrapper .waves-button-input {
+ position: relative;
+ top: 0;
+ left: 0;
+ z-index: 1;
+}
+.waves-circle {
+ text-align: center;
+ width: 2.5em;
+ height: 2.5em;
+ line-height: 2.5em;
+ border-radius: 50%;
+}
+.waves-float {
+ -webkit-mask-image: none;
+ -webkit-box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12);
+ box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12);
+ -webkit-transition: all 300ms;
+ -moz-transition: all 300ms;
+ -o-transition: all 300ms;
+ transition: all 300ms;
+}
+.waves-float:active {
+ -webkit-box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3);
+ box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3);
+}
+.waves-block {
+ display: block;
+}
diff --git a/package/ctcgfw/luci-theme-edge/luasrc/view/header_login.htm b/package/ctcgfw/luci-theme-edge/luasrc/view/header_login.htm
new file mode 100644
index 0000000000..c550b21361
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/luasrc/view/header_login.htm
@@ -0,0 +1,38 @@
+<%#
+ Copyright 2008 Steven Barth
+ Copyright 2008-2019 Jo-Philipp Wich
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%
+ if not luci.dispatcher.context.template_header_sent then
+ include("themes/" .. theme .. "/header_login")
+ luci.dispatcher.context.template_header_sent = true
+ end
+
+ local applyconf = luci.config and luci.config.apply
+%>
+
+
+
+
diff --git a/package/ctcgfw/luci-theme-edge/luasrc/view/themes/edge/footer.htm b/package/ctcgfw/luci-theme-edge/luasrc/view/themes/edge/footer.htm
new file mode 100644
index 0000000000..bd19d898b6
--- /dev/null
+++ b/package/ctcgfw/luci-theme-edge/luasrc/view/themes/edge/footer.htm
@@ -0,0 +1,36 @@
+<%#
+ edge is a clean HTML5 theme for LuCI. It is based on luci-theme-material edge Template
+
+ luci-theme-edge
+ Copyright 2019 Jerrykuku
+
+ Have a bug? Please create an issue here on GitHub!
+ https://github.com/jerrykuku/luci-theme-edge/issues
+
+ luci-theme-material:
+ Copyright 2015 Lutty Yang
+
+ Agron Theme
+ https://demos.creative-tim.com/edge-dashboard/index.html
+
+ Licensed to the public under the Apache License 2.0
+-%>
+
+<% local ver = require "luci.version" %>
+
+
+
+
+
+
+
+
+