diff --git a/luci-app-fwlive/Makefile b/luci-app-fwlive/Makefile index 2d2be25e2..34ac8205f 100644 --- a/luci-app-fwlive/Makefile +++ b/luci-app-fwlive/Makefile @@ -12,7 +12,7 @@ LUCI_DEPENDS:=+luci-base +logd +jsonfilter LUCI_PKGARCH:=all PKG_VERSION:=0.1.45 -PKG_RELEASE:=31 +PKG_RELEASE:=32 # Reproducible build: honor SOURCE_DATE_EPOCH from the build environment (set by docker-sdk.sh / CI). ifdef SOURCE_DATE_EPOCH diff --git a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js index d2ce6acd7..9d23c440b 100644 --- a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js +++ b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/links.js @@ -3,6 +3,7 @@ /* Copyright 2025-2026 Lucas Albers */ 'require baseclass'; /* LuCI require() needs Class.isSubclass — plain return {} fails */ 'require fwlive.log as log'; +'require fwlive.hostname as hostname'; /** * Link-builder helpers for luci-app-fwlive. @@ -14,7 +15,7 @@ * filterLink, addrFilterLink, ruleAdminPath, ruleAdminLink, ifaceLink * * No host element — all functions return DOM nodes or strings. - * May require fwlive.log for formatCell. + * May require fwlive.log for formatCell and fwlive.hostname for cache reads. */ function luciUrl(path) { @@ -75,7 +76,14 @@ function filterLink(field, value, label, onFilterClick) { function addrFilterLink(field, ip, showHostnames, hostnameCache, onFilterClick) { if (!ip) return log.formatCell(ip); - const name = showHostnames && hostnameCache ? hostnameCache.get(ip) : null; + let name = null; + if (showHostnames && hostnameCache) { + /* Display reads refresh recency so visible names remain warm in the LRU. */ + name = + hostname && typeof hostname.lruGet === 'function' + ? hostname.lruGet(hostnameCache, ip) + : hostnameCache.get(ip); + } const display = name || ip; const title = name ? ip : _('Filter by %s').format(field); diff --git a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js index 404d6663a..a9c181f0a 100644 --- a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js +++ b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/logging.js @@ -87,6 +87,11 @@ function labelWithZoneCandidates(label, st) { return children; } +function appendLoggingNotice(host, state) { + if (!state.loggingNotice) return; + host.appendChild(E('span', { 'class': 'fwlive-logging-notice' }, [state.loggingNotice])); +} + function renderToolbar(host, state, callbacks) { host.innerHTML = ''; const st = state.loggingStatus; @@ -107,6 +112,7 @@ function renderToolbar(host, state, callbacks) { ) ); host.appendChild(links.firewallZonesLink()); + appendLoggingNotice(host, state); return; } @@ -116,6 +122,7 @@ function renderToolbar(host, state, callbacks) { _('WAN logging unavailable: missing kernel log modules') ]) ); + appendLoggingNotice(host, state); return; } @@ -144,6 +151,7 @@ function renderToolbar(host, state, callbacks) { children ) ); + appendLoggingNotice(host, state); return; } @@ -162,6 +170,7 @@ function renderToolbar(host, state, callbacks) { [state.loggingBusy ? _('Enabling…') : _('Enable logging')] ) ); + appendLoggingNotice(host, state); } function buildConsentPanel(state, callbacks) { diff --git a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/render-scheduler.js b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/render-scheduler.js index 80a81aa76..170d9b754 100644 --- a/luci-app-fwlive/htdocs/luci-static/resources/fwlive/render-scheduler.js +++ b/luci-app-fwlive/htdocs/luci-static/resources/fwlive/render-scheduler.js @@ -77,6 +77,14 @@ function createScheduler(options) { const elapsed = bucketMs === null ? 0 : Math.max(0, timestamp - bucketMs); bucketMs = timestamp; bucket = Math.min(capacity, bucket + (elapsed * capacity) / 1000); + /* A single batch can cost more than one second's budget. Once the + * bucket is full, spend that full interval on one paint so a sustained + * flood cannot freeze the table until the user changes a control. */ + if (cost > bucket && bucket >= capacity) { + bucket = 0; + floodSuppressed = true; + return true; + } floodSuppressed = cost > bucket; if (floodSuppressed) return false; bucket -= cost; diff --git a/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js b/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js index e1d8b2104..aca0004d8 100644 --- a/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js +++ b/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js @@ -683,10 +683,15 @@ return view.extend({ const status = await callFwliveLoggingStatus(); if (this.viewDisposed) return; this.loggingStatus = status; + this.loggingNotice = ''; this.weakDevice = !!(this.loggingStatus && this.loggingStatus.weak_device === true); } catch (_e) { if (this.viewDisposed) return; - this.loggingStatus = null; + /* Keep last toolbar state. Do not clobber a toggle success/failure notice. */ + if (!this.loggingNotice) + this.loggingNotice = _( + 'Could not refresh logging status; showing the last known state.' + ); } this.updateBackendUi(); this.updateLoggingToolbarUi(); @@ -712,6 +717,10 @@ return view.extend({ this.loggingNotice = opts.successNotice(res); if (opts.onSuccess) opts.onSuccess(res); + if (this.loggingStatus && typeof opts.wanLog === 'boolean') + this.loggingStatus = Object.assign({}, this.loggingStatus, { + wan_log: opts.wanLog + }); await this.loadLoggingStatus(); } catch (_e) { this.loggingNotice = opts.catchNotice(); @@ -725,6 +734,7 @@ return view.extend({ async handleEnableLogging() { return this.runLoggingToggle({ + wanLog: true, call: () => callFwliveEnableLogging(), initialUi: () => { this.updateEmptyStateUi(); @@ -752,6 +762,7 @@ return view.extend({ async handleDisableLogging() { return this.runLoggingToggle({ + wanLog: false, call: () => callFwliveDisableLogging(), initialUi: () => this.updateLoggingToolbarUi(), failureNotice: (res) => { @@ -1333,7 +1344,14 @@ return view.extend({ this.summaryRowsShown = false; this.summaryData = null; this.updateSummaryUi(); - this.renderRows(true); + if (this.tablePaused) { + const empty = document.getElementById('fwlive-empty'); + if (empty) { + const rows = this.filteredRows(); + empty.style.display = rows.length ? 'none' : 'block'; + } + this.updateStatus(); + } else this.renderRows(true); }, onSummaryRowsToggle() { @@ -1469,8 +1487,10 @@ return view.extend({ this.resolveGeneration = (this.resolveGeneration || 0) + 1; this.resolveInFlight = false; - if (this.showHostnames) this.resolveHostnamesForEntries(this.filteredRows()); + /* Paint the existing cache immediately; resolving only fills misses. */ + if (this.tablePaused) this.updateStatus(); else this.renderRows(true); + if (this.showHostnames) this.resolveHostnamesForEntries(this.filteredRows()); }, onFetchModeChange(ev) { @@ -1646,7 +1666,7 @@ return view.extend({ for (let i = 0; i < ips.length && need.length < 32; i++) { const ip = ips[i]; - if (this.hostnameCache.has(ip)) continue; + if (hostname.lruGet(this.hostnameCache, ip) !== undefined) continue; if (hostname.failIsHot(this.hostnameFailed, ip, now)) continue; need.push(ip); } diff --git a/luci-app-fwlive/po/de/luci-app-fwlive.po b/luci-app-fwlive/po/de/luci-app-fwlive.po index 4b16af1c8..280518e80 100644 --- a/luci-app-fwlive/po/de/luci-app-fwlive.po +++ b/luci-app-fwlive/po/de/luci-app-fwlive.po @@ -124,6 +124,10 @@ msgstr "Connection lost — retrying…" msgid "Could not disable logging." msgstr "Protokollierung konnte nicht deaktiviert werden." +#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:690 +msgid "Could not refresh logging status; showing the last known state." +msgstr "Could not refresh logging status; showing the last known state." + #: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573 msgid "Could not enable logging." msgstr "Protokollierung konnte nicht aktiviert werden." diff --git a/luci-app-fwlive/po/ru/luci-app-fwlive.po b/luci-app-fwlive/po/ru/luci-app-fwlive.po index a68be6aa4..c2a533646 100644 --- a/luci-app-fwlive/po/ru/luci-app-fwlive.po +++ b/luci-app-fwlive/po/ru/luci-app-fwlive.po @@ -129,6 +129,10 @@ msgstr "Connection lost — retrying…" msgid "Could not disable logging." msgstr "Не удалось отключить журналирование." +#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:690 +msgid "Could not refresh logging status; showing the last known state." +msgstr "Could not refresh logging status; showing the last known state." + #: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573 msgid "Could not enable logging." msgstr "Не удалось включить журналирование." diff --git a/luci-app-fwlive/po/templates/luci-app-fwlive.pot b/luci-app-fwlive/po/templates/luci-app-fwlive.pot index 3acac351e..d9bd28fec 100644 --- a/luci-app-fwlive/po/templates/luci-app-fwlive.pot +++ b/luci-app-fwlive/po/templates/luci-app-fwlive.pot @@ -100,6 +100,10 @@ msgstr "" msgid "Could not disable logging." msgstr "" +#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:690 +msgid "Could not refresh logging status; showing the last known state." +msgstr "" + #: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573 msgid "Could not enable logging." msgstr "" diff --git a/luci-app-fwlive/po/zh_Hans/luci-app-fwlive.po b/luci-app-fwlive/po/zh_Hans/luci-app-fwlive.po index fef5da89e..919f8d562 100644 --- a/luci-app-fwlive/po/zh_Hans/luci-app-fwlive.po +++ b/luci-app-fwlive/po/zh_Hans/luci-app-fwlive.po @@ -115,6 +115,10 @@ msgstr "Connection lost — retrying…" msgid "Could not disable logging." msgstr "无法" +#: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:690 +msgid "Could not refresh logging status; showing the last known state." +msgstr "Could not refresh logging status; showing the last known state." + #: openwrt-feed/luci-app-fwlive/htdocs/luci-static/resources/view/status/fwlive.js:573 msgid "Could not enable logging." msgstr "无法开启日志记录。" diff --git a/luci-app-fwlive/root/usr/libexec/fwlive-adaptive-cap.sh b/luci-app-fwlive/root/usr/libexec/fwlive-adaptive-cap.sh index f5dcae00d..9622a802b 100755 --- a/luci-app-fwlive/root/usr/libexec/fwlive-adaptive-cap.sh +++ b/luci-app-fwlive/root/usr/libexec/fwlive-adaptive-cap.sh @@ -276,7 +276,8 @@ fwlive_adaptive_bucket_for_ms() { # Args: requested_limit duration_ms prev_limit prev_bucket prev_warm # prev_completed_cs planning -# Prints next limit. +# Prints next limit. A full-sized cold sample may retain one upward probe +# above the number of lines served; planning then holds that retained probe. fwlive_adaptive_compute_limit() { _req=$1 _ms=$2 @@ -343,7 +344,21 @@ fwlive_adaptive_compute_limit() { fi case "$_bucket" in - cold) _limit=$_max ;; + cold) + _base=$_prev_l + [ "$_base" -lt 1 ] && _base=$_max + if [ "$_planning" = 1 ]; then + # Keep a cold probe at the limit that was actually retained. + _limit=$_base + elif [ "$_req" -ge "$_base" ]; then + # A full-sized cold sample earns one doubling, not a jump + # from the 250-line floor straight to the maximum. + _limit=$((_base * 2)) + else + # A short cold sample does not prove the larger request is safe. + _limit=$_base + fi + ;; cool) # A healthy cooldown probe may retain its raised limit for the # short probe window. Ordinary cool samples still use the fixed @@ -370,7 +385,10 @@ fwlive_adaptive_compute_limit() { hot) _limit=$FWLIVE_ADAPTIVE_HOT_FLOOR ;; esac - [ "$_limit" -gt "$_req" ] && _limit=$_req + if [ "$_planning" = 1 ] || [ "$_bucket" != cold ] || \ + [ "$_prev_l" -lt 1 ] || [ "$_req" -lt "$_prev_l" ]; then + [ "$_limit" -gt "$_req" ] && _limit=$_req + fi [ "$_limit" -gt "$_max" ] && _limit=$_max [ "$_limit" -lt 1 ] && _limit=1 printf '%s\n' "$_limit" diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 5b5a2621a..eeac93871 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=26.9.16 -PKG_RELEASE:=286 +PKG_RELEASE:=287 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua index c75139da5..85939783d 100644 --- a/luci-app-passwall/luasrc/passwall/api.lua +++ b/luci-app-passwall/luasrc/passwall/api.lua @@ -197,16 +197,19 @@ function exec_call(cmd) end function base64Decode(text) - if not text then return '' end - local encoded = text:gsub("%z", ""):gsub("%c", ""):gsub("_", "/"):gsub("-", "+") + if type(text) ~= "string" then return "" end + local encoded = text:gsub("%z", ""):gsub("%c", ""):gsub("_", "/"):gsub("-", "+"):gsub("=+$", "") + if encoded == "" then return text end + if not encoded:match("^[A-Za-z0-9+/]*$") then return text end local mod4 = #encoded % 4 - encoded = encoded .. string.sub('====', mod4 + 1) - local result = nixio.bin.b64decode(encoded) - if result then - return result:gsub("%z", "") - else - return text - end + if mod4 == 1 then return text end + local padded = encoded .. string.rep("=", (4 - mod4) % 4) + local result = nixio.bin.b64decode(padded) + if not result then return text end + -- Verify that the normalized input is canonical Base64. + local reencoded = nixio.bin.b64encode(result):gsub("=+$", "") + if reencoded ~= encoded then return text end + return (result:gsub("%z", "")) end function base64Encode(text) diff --git a/luci-app-xray/Makefile b/luci-app-xray/Makefile index 572a59722..75a6de690 100644 --- a/luci-app-xray/Makefile +++ b/luci-app-xray/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-xray PKG_VERSION:=3.7.2 -PKG_RELEASE:=9 +PKG_RELEASE:=10 PKG_LICENSE:=MPLv2 PKG_LICENSE_FILES:=LICENSE diff --git a/luci-app-xray/root/usr/share/xray/feature/manual_tproxy.mjs b/luci-app-xray/root/usr/share/xray/feature/manual_tproxy.mjs index 870f5a530..81dc2f346 100644 --- a/luci-app-xray/root/usr/share/xray/feature/manual_tproxy.mjs +++ b/luci-app-xray/root/usr/share/xray/feature/manual_tproxy.mjs @@ -2,52 +2,70 @@ import { server_outbound } from "./outbound.mjs"; +function manual_tproxy_redirect(v) { + return sprintf("%s:%d", v["dest_addr"] || "", v["dest_port"] || 0); +} + +function manual_tproxy_outbound_tag(v, name) { + return `manual_tproxy:${v[".name"]}@${name}`; +} + +function manual_tproxy_force_forward_tag(v, name, force_forward_key, server_key) { + if (v[force_forward_key] !== "1" || v[server_key] == null) { + return null; + } + return `manual_tproxy:${v[".name"]}@${name}@force_forward:${v[server_key]}`; +} + +function manual_tproxy_needs_dialer_proxy(v, force_forward_key, server_key) { + if (v[force_forward_key] !== "1") { + return true; + } + if (v[server_key] == null) { + return true; + } + if (manual_tproxy_redirect(v) !== ":0") { + return true; + } + return false; +} + +function manual_tproxy_outbound(config, v, name, force_forward_key, server_key) { + const force_forward_tag = manual_tproxy_force_forward_tag(v, name, force_forward_key, server_key); + let result = []; + if (force_forward_tag != null) { + push(result, ...server_outbound(config[v[server_key]], force_forward_tag, config)); + } + if (manual_tproxy_needs_dialer_proxy(v, force_forward_key, server_key)) { + push(result, { + protocol: "freedom", + tag: manual_tproxy_outbound_tag(v, name), + settings: { + redirect: manual_tproxy_redirect(v), + domainStrategy: "AsIs" + }, + streamSettings: { + sockOpt: { + dialerProxy: force_forward_tag != null ? force_forward_tag : "direct" + } + } + }); + } + return result; +} + +function manual_tproxy_rule_tag(v, name, force_forward_key, server_key) { + if (manual_tproxy_needs_dialer_proxy(v, force_forward_key, server_key)) { + return manual_tproxy_outbound_tag(v, name); + } + return manual_tproxy_force_forward_tag(v, name, force_forward_key, server_key); +} + export function manual_tproxy_outbounds(config, manual_tproxy) { let result = []; for (let v in manual_tproxy) { - let tcp_tag = "direct"; - if (v["force_forward_tcp"] === "1") { - if (v["force_forward_server_tcp"] != null) { - tcp_tag = `manual_tproxy:${v[".name"]}@tcp_outbound@force_forward:${v["force_forward_server_tcp"]}`; - const force_forward_server_tcp = config[v["force_forward_server_tcp"]]; - push(result, ...server_outbound(force_forward_server_tcp, tcp_tag, config)); - } - } - push(result, { - protocol: "freedom", - tag: sprintf("manual_tproxy:%s@tcp_outbound", v[".name"]), - settings: { - redirect: sprintf("%s:%d", v["dest_addr"] || "", v["dest_port"] || 0), - domainStrategy: "AsIs" - }, - streamSettings: { - sockOpt: { - dialerProxy: tcp_tag - } - } - }); - - let udp_tag = "direct"; - if (v["force_forward_udp"] === "1") { - if (v["force_forward_server_udp"] != null) { - udp_tag = `manual_tproxy:${v[".name"]}@udp_outbound@force_forward:${v["force_forward_server_udp"]}`; - const force_forward_server_udp = config[v["force_forward_server_udp"]]; - push(result, ...server_outbound(force_forward_server_udp, udp_tag, config)); - } - } - push(result, { - protocol: "freedom", - tag: sprintf("manual_tproxy:%s@udp_outbound", v[".name"]), - settings: { - redirect: sprintf("%s:%d", v["dest_addr"] || "", v["dest_port"] || 0), - domainStrategy: "AsIs" - }, - streamSettings: { - sockOpt: { - dialerProxy: udp_tag - } - } - }); + push(result, ...manual_tproxy_outbound(config, v, "tcp_outbound", "force_forward_tcp", "force_forward_server_tcp")); + push(result, ...manual_tproxy_outbound(config, v, "udp_outbound", "force_forward_udp", "force_forward_server_udp")); } return result; }; @@ -55,11 +73,13 @@ export function manual_tproxy_outbounds(config, manual_tproxy) { export function manual_tproxy_outbound_tags(manual_tproxy) { let result = []; for (let v in manual_tproxy) { - if (v["force_forward_tcp"] === "1") { - push(result, `manual_tproxy:${v[".name"]}@tcp_outbound@force_forward:${v["force_forward_server_tcp"]}`); + const tcp_tag = manual_tproxy_force_forward_tag(v, "tcp_outbound", "force_forward_tcp", "force_forward_server_tcp"); + if (tcp_tag != null) { + push(result, tcp_tag); } - if (v["force_forward_udp"] === "1") { - push(result, `manual_tproxy:${v[".name"]}@udp_outbound@force_forward:${v["force_forward_server_udp"]}`); + const udp_tag = manual_tproxy_force_forward_tag(v, "udp_outbound", "force_forward_udp", "force_forward_server_udp"); + if (udp_tag != null) { + push(result, udp_tag); } } return result; @@ -73,14 +93,14 @@ export function manual_tproxy_rules(manual_tproxy) { inboundTag: ["tproxy_tcp_inbound_v4", "tproxy_tcp_inbound_v6", "socks_inbound", "https_inbound", "http_inbound"], ip: [v["source_addr"]], port: v["source_port"], - outboundTag: sprintf("manual_tproxy:%s@tcp_outbound", v[".name"]) + outboundTag: manual_tproxy_rule_tag(v, "tcp_outbound", "force_forward_tcp", "force_forward_server_tcp") }); splice(result, 0, 0, { type: "field", inboundTag: ["tproxy_udp_inbound_v4", "tproxy_udp_inbound_v6"], ip: [v["source_addr"]], port: v["source_port"], - outboundTag: sprintf("manual_tproxy:%s@udp_outbound", v[".name"]) + outboundTag: manual_tproxy_rule_tag(v, "udp_outbound", "force_forward_udp", "force_forward_server_udp") }); } return result; diff --git a/luci-theme-argon/Makefile b/luci-theme-argon/Makefile index 70217e06d..7b9d7c42f 100644 --- a/luci-theme-argon/Makefile +++ b/luci-theme-argon/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=Argon Theme LUCI_DEPENDS:=+USE_APK:wget-any +!USE_APK:wget +jsonfilter PKG_VERSION:=2.4.7 -PKG_RELEASE:=15 +PKG_RELEASE:=16 CONFIG_LUCI_CSSTIDY:= diff --git a/luci-theme-argon/htdocs/luci-static/argon/css/dark.css b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css index 99f740dbe..134d0926b 100644 --- a/luci-theme-argon/htdocs/luci-static/argon/css/dark.css +++ b/luci-theme-argon/htdocs/luci-static/argon/css/dark.css @@ -1 +1 @@ -body{background:#1e1e1e;color:#ccc}.spinning::before{filter:invert(1)}.login-page .login-container{background-color:rgba(0,0,0,var(--blur-opacity-dark));-webkit-backdrop-filter:blur(var(--blur-radius-dark));backdrop-filter:blur(var(--blur-radius-dark))}.login-page .login-container .login-form{background-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.login-page .login-container .login-form .brand{color:#adb5bd}.login-page .login-container .login-form .form-login .input-group::before{color:#adb5bd}.login-page .login-container .login-form .form-login .input-group input{background-color:transparent!important;color:#adb5bd;border-bottom:#adb5bd 1px solid!important;border-radius:0!important;border-top:none!important;border-left:none!important;border-right:none!important;box-shadow:none}.login-page .login-container .login-form .form-login .cbi-button-apply{background-color:#483d8b!important;background-color:var(--dark-primary)!important}.login-page .login-container .login-form .form-login .cbi-button-apply:focus,.login-page .login-container .login-form .form-login .cbi-button-apply:hover{opacity:.9}header::after{background-color:#1e1e1e!important}.main .main-left{background-color:#333!important;box-shadow:0 0 .5rem 0 rgba(0,0,0,.15)}.main .main-left .sidenav-header .brand{color:#ccc}.main .main-left .nav .slide .slide-menu .active a{color:#ccc}.main .main-left .nav .slide .slide-menu .active a::after{background-color:#ccc!important}.main .main-left .nav .slide .slide-menu .active::after{background-color:var(--dark-primary)!important}.main .main-left .nav .slide .slide-menu li a{color:#ccc}.main .main-left .nav .slide .slide-menu li a:hover{background:0 0!important}.main .main-left .nav .slide .slide-menu li::after{background-color:var(--dark-primary)!important}.main .main-left .nav .slide .menu.active{background-color:#483d8b!important;background-color:var(--dark-primary)!important;color:#fff!important}.main .main-left .nav .slide .menu.active a::after{background-color:#fff!important}.main .main-left .nav li a{color:#ccc!important}.main .main-left .nav li a:hover{background-color:#483d8b!important;background-color:var(--dark-primary)!important;color:#fff!important}.main .main-left::-webkit-scrollbar-thumb{background-color:#252526!important}.main .main-left::-webkit-scrollbar-track{background-color:#333}.main .main-right{background-color:#1e1e1e}h2{color:#ccc;background:#333}h3{color:#ccc;border-bottom:0;background:#333}h4{color:#8c6900}abbr{color:var(--dark-primary)!important}a:active,a:link,a:visited{color:#a5b2ff}input:-webkit-autofill{background-color:#3c3c3c!important}#channel_graph{background-color:transparent!important}.cbi-button-apply,.cbi-button-edit,.cbi-value-field .cbi-input-apply{color:#fff!important;background-color:#483d8b!important;background-color:var(--dark-primary)!important;border-color:#483d8b!important;border-color:var(--dark-primary)!important}.cbi-section em{color:#ccc}header.bg-primary{background-color:#1e1e1e!important}.cbi-map-descr{color:#ccc}.cbi-section{background:0 0;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}.panel-title{color:#ccc;background-color:#333}div>.table>.tr:nth-of-type(2n),div>table>tbody>tr:nth-of-type(2n){background-color:#252526}table>tbody>tr>td,table>tfoot>tr>td,table>thead>tr>td{color:#ccc}fieldset>table>tbody>tr:nth-of-type(2n){background-color:#252526}table>tbody>tr>td,table>tfoot>tr>td,table>thead>tr>td{border-top:1px solid #252526}#conns>div>div,#membuff>div>div,#memfree>div>div,#memtotal>div>div,#swapfree>div>div,#swaptotal>div>div{background-color:var(--dark-primary)!important}#conns>div>div>div>small,#membuff>div>div>div>small,#memfree>div>div>div>small,#memtotal>div>div>div>small,#swapfree>div>div>div>small,#swaptotal>div>div>div>small{color:#ccc!important}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last{line-height:1.8em}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"]{border:1px solid #999!important;background-color:transparent!important}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] div{background-color:#ba8b00!important}table>tbody>tr>th,table>tfoot>tr>th,table>thead>tr>th{background-color:#252526;border-bottom:#000 1px solid!important}.tr.cbi-section-table-titles.named::before,.tr[data-title]::before{background-color:#252526}#cbi-wireless>#wifi_assoclist_table>.tr:nth-child(2),.cbi-section-table-row::before,.tr>.td,.tr>.th,tr>td,tr>th{border-top:0}.cbi-rowstyle-2{background-color:#1e1e1e}.cbi-rowstyle-1{background-color:#252526}.cbi-rowstyle-2 .cbi-button-down,.cbi-rowstyle-2 .cbi-button-up,body:not(.Interfaces) .cbi-rowstyle-2:first-child{background-color:#666!important}.cbi-section>h3:first-child,.panel-title,h3{color:#ccc}h4{background-color:#1e1e1f}.cbi-progressbar{background:#282a2c}.cbi-progressbar div{background-color:var(--dark-primary)!important}.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{background-color:#1e1e1f}.cbi-button{color:#fff!important;background-color:#483d8b;background-color:var(--dark-primary)}.cbi-section-node{background:0 0}abbr{color:#5e72e4}div>.table>.tbody>.tr:nth-of-type(2n),div>table>tbody>tr:nth-of-type(2n){background-color:#252526}#content_syslog{box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}#syslog{color:#ccc;background-color:#1e1e1e}#bwsvg,#iwsvg,#iwsvg2{overflow:hidden;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35);background-color:#1e1e1e!important}.tabs{background-color:#252526}.tabs li:hover,.tabs li[class~=active]{cursor:pointer;color:#ccc!important}.tabs li:hover a,.tabs li[class~=active] a{color:#ccc!important}.tabs>li[class~=active]>a{color:#ccc}.tabs>li:hover,.tabs>li[class~=active]{border-bottom:.18751rem solid #483d8b;border-bottom:.18751rem solid var(--dark-primary);color:var(--dark-primary)!important;background-color:#181819}.cbi-tabmenu>li>a,.tabs>li>a{color:#ccc}.cbi-tabmenu>li>a:hover,.tabs>li>a:hover{color:#ccc}.cbi-tabmenu>li{background:#2d2d2d}.cbi-tabmenu li[class~=cbi-tab] a{color:#ccc}.cbi-tabmenu>li:hover{color:#ccc;background:#2d2d2d;border-bottom:.18751rem solid var(--dark-primary)!important}.cbi-tabmenu>li[class~=cbi-tab]{background-color:#181819;border-bottom:.18751rem solid var(--dark-primary)!important}.cbi-tabcontainer>.cbi-value:nth-of-type(2n){background-color:#252526}.cbi-value-title{color:#ccc}input,select{color:#ccc;background-color:transparent!important;border:1px solid #252526;box-shadow:none}input:focus,select:not([multiple=multiple]):focus{border-color:#483d8b!important;border-color:var(--dark-primary)!important;outline:0}.cbi-dropdown:focus,input:not(.cbi-button):focus,select:not([multiple=multiple]):focus{border-color:#5e72e4;border-color:var(--dark-primary)!important}select{background-color:#1e1e1e!important}#cbi-customfeedconf .cbi-map-descr,#cbi-customfeedconf h2,#cbi-distfeedconf .cbi-map-descr,#cbi-distfeedconf h2,#cbi-download h2,#cbi-dropbear .cbi-map-descr,#cbi-dropbear .cbi-map-descr abbr,#cbi-dropbear h2,#cbi-filelist h2,#cbi-rc .cbi-map-descr,#cbi-rc h2{color:#ccc!important}.cbi-value-field>ul>li .ifacebadge{background-color:#3c3c3c}.cbi-section-descr{color:#ccc}.cbi-input-textarea{background-color:#1e1e1e;color:#ccc;border:1px solid #3c3c3c!important}textarea:focus-visible{border:1px solid var(--dark-primary)}.cbi-section-node:nth-of-type(2n),.cbi-section-remove:nth-of-type(2n){background-color:#1e1e1e}.cbi-section[id] .cbi-section-node:nth-of-type(4n+4),.cbi-section[id] .cbi-section-remove:nth-of-type(4n+3){background-color:#1e1e1e}.node-system-packages>.main table tr td:last-child{color:#ccc}.cbi-tooltip{background-color:var(--primary);color:#fff}.ifacebox{background-color:transparent!important;border:1px solid #1e1e1e}.ifacebox-head{color:#ccc;background:#666}.ifacebox-body{background-color:#333}.zonebadge strong{color:#333}.zonebadge>.ifacebadge{background-color:#3c3c3c}div.cbi-value var,td.cbi-value-field var{color:#5e72e4}#diag-rc-output>pre{color:#ccc;background-color:#1e1e1e}.node-services-vssr .block{background-color:#3c3c3c!important;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}.node-services-vssr .block h4{color:#ccc!important}.node-services-vssr .status-bar{color:#ccc;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35);background-color:#1e1e1e}.node-services-vssr .cbi-section-table-row{color:#ccc;background-color:#3c3c3c!important;box-shadow:0 0 5px 0 rgba(0,0,0,.35)}.node-services-vssr .cbi-section-table-row.fast{background:#483d8b!important;background:var(--dark-primary)!important;color:#fff}.node-services-vssr .ssr-button{color:#ccc}.node-services-vssr .incon:nth-child(2){border-right:#1e1e1e 1px solid}#xhr_poll_status>.label.success{color:#ccc!important;background-color:#556b2f!important}.notice{background-color:#483d8b!important;background-color:var(--dark-primary)!important}.cbi-section.fade-in .cbi-title>div:last-child span{background:0 0!important;color:#ced4da}.cbi-button-add,.cbi-button-find,.cbi-button-reload,.cbi-button-save,.cbi-input-find,.cbi-input-reload,.cbi-input-save{color:#fff!important;background:#556b2f!important;border-color:#556b2f!important}.cbi-button-reset,.cbi-input-remove{color:#fff!important;background-color:#ff8c00!important;border-color:#ff8c00!important}.cbi-button-action.important,.cbi-button-apply.important,.cbi-button-edit.important,.cbi-button-reload.important,.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit{border:1px #483d8b solid!important;border:1px var(--dark-primary) solid!important}.btn[value=Dismiss],.cbi-button-neutral[value=Disable],.cbi-button[onclick="handleReset(event)"],.cbi-button[onclick^=iface_reconnect],.cbi-button[value=Disabled],.cbi-button[value=Reset],.cbi-button[value=Terminate]{color:#fff;border:thin solid #ff8c00!important;background-color:#ff8c00!important}fieldset[id^=cbi-apply-]{background-color:#333}#detail-bubble>div{border:1px solid #ccc;background:#252525}.ifacebox-head.active{background-color:var(--dark-primary)!important}header .fill .status span[data-style=active]{color:#ccc!important;background-color:#556b2f!important}#cbi-network .tr:first-child>.td,#cbi-wireless .td,.table[width="100%"]>.tr:first-child>.td,.tr.cbi-section-table-titles>.th,.tr.table-titles>.th,[data-page=admin-network-diagnostics] .tr>.td{background-color:#252526;border-bottom:#000 1px solid!important}.network-status-table .ifacebox-body .ifacebadge{background-color:#252526;border-bottom:0;box-shadow:none}.td>.ifacebadge,td>.ifacebadge{color:#fff;background-color:#483d8b;background-color:var(--dark-primary);border:0}.alert,.alert-message{background-color:#333}.alert-message.warning{background-color:#986400!important}.alert-message.error,.alert.error{background-color:#784f00}.alert h4,.alert-message h4{background-color:#784f00;color:#ffbf00}.alert-message [class=btn]{background-color:#777;color:#ccc}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>ins{border-color:#00ad00;background-color:#688668}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>del{border-color:#c60000;background-color:#896565}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var{background-color:#333;border-color:#666}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var ins{background-color:#688668}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var del{background-color:#896565}.uci-dialog .cbi-section .uci-change-list>var{background-color:#333;border-color:#666}.uci-dialog .cbi-section .uci-change-list>var del{background-color:#896565}.uci-dialog .cbi-section .uci-change-list>var ins{background-color:#688668}.uci-dialog .cbi-section .uci-change-list>ins{border-color:#00ad00;background-color:#688668}.uci-dialog .cbi-section .uci-change-list>del{border-color:#c60000;background-color:#896565}.uci-dialog .cbi-section .uci-change-list+.right .btn{color:#ccc}.uci-dialog .cbi-section .uci-change-list+.right .cbi-button{border:1px solid #3c3c3c!important}.btn.danger,.cbi-button-negative,.cbi-button-neutral[value=Restart],.cbi-button-remove,.cbi-button-reset,.cbi-button[onclick="reboot(this)"],.cbi-button[value=Kill],.cbi-button[value=Stop],.cbi-section-remove>.cbi-button{border:thin solid #ff8c00!important;background-color:#ff8c00!important}#cbi-network>.cbi-section-node,#cbi-wireless>#wifi_assoclist_table,#cbi-wireless>.cbi-section-node,#iptables,.Firewall form,.cbi-section,.cbi-section-error,[data-page=admin-system-opkg] #maincontent>.container,[data-page^=admin-system-admin]:not(.node-main-login) .cbi-map:not(#cbi-dropbear),[data-tab-title]{background:#1e1e1e!important;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}div[style="width:100%;height:300px;border:1px solid #000;background:#fff"]{background:0 0!important}[data-page=admin-system-admin-password] .cbi-map .cbi-map-descr,[data-page=admin-system-admin-password] .cbi-map h2,[data-page=admin-system-admin] .cbi-map .cbi-map-descr,[data-page=admin-system-admin] .cbi-map h2{color:#ccc}[data-page=admin-system-flash] .modal label>input[type=checkbox]{vertical-align:text-top;top:auto;border-color:#fff!important}[data-page=admin-system-flash] .modal .btn{white-space:normal!important;background-color:#8fbc8f}[data-page=admin-system-flash] .modal .alert-message{background-color:transparent!important}[data-page=admin-system-flash] .modal .danger{border:thin solid #ff8c00!important;background-color:#ff8c00!important}.cbi-value input[type=password]+.cbi-button-neutral{background-color:#483d8b!important;background-color:var(--dark-primary)!important;border-color:var(--dark-primary)!important}.btn,.cbi-dropdown,button,input,select{border:1px solid #3c3c3c!important}.cbi-dropdown .preview{color:#ccc}.cbi-section-table-row{background-color:#1e1e1e!important}.modal{background-color:#1e1e1e}.cbi-button-positive{color:#fff!important;background-color:#556b2f!important}[data-page=admin-system-flash] legend{color:#ccc}.logout:before{color:#adb5bd!important}.cbi-dropdown[open]{border-color:#483d8b!important;border-color:var(--dark-primary)!important}.cbi-dropdown[open]>ul.dropdown{background:#252526!important;color:#fff!important;box-shadow:none;border:1px solid #3c3c3c!important}.cbi-dropdown[open]>ul.dropdown li{color:#fff;border-bottom:1px solid #3c3c3c!important}.cbi-dropdown[open]>ul.dropdown>li[selected]{background-color:#483d8b!important;background-color:var(--dark-primary)!important;border-bottom:1px solid #3c3c3c!important}.cbi-dropdown[open]>ul.dropdown>li.focus{background:#483d8b;background:var(--dark-primary);outline:0}.ifacebadge{background-color:#333}.cbi-dynlist>.item>span{border:1px solid #3c3c3c!important}.cbi-button-action,.cbi-button-apply,.cbi-button-edit,.cbi-button-reload,.cbi-button[onclick="addKey(event)"],.cbi-button[value$=Apply],.cbi-button[value=Submit],.cbi-button[value=Upload],.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit{background:#483d8b!important;background:var(--dark-primary)!important;border-color:var(--dark-primary)!important}.btn.primary,.cbi-button-add,.cbi-button-link,.cbi-button-neutral[onclick="handleConfig(event)"],.cbi-button-positive,.cbi-button-save,.cbi-button[value=Enable],.cbi-button[value=Scan],.cbi-button[value^=Back],.cbi-page-actions .cbi-button-apply+.cbi-button-save,.cbi-page-actions .cbi-button-save{background:#483d8b;background:var(--dark-primary)}[data-page=admin-system-opkg] h2{color:#ccc!important}[data-page=admin-system-startup] textarea{color:#ccc;background-color:transparent}[data-page=admin-system-startup] textarea:focus-visible{border:1px solid var(--dark-primary)}[data-page=admin-network-firewall-custom] #view p textarea,[data-page=admin-status-routes] #view p textarea,[data-page=admin-system-crontab] #view p textarea{color:#ccc;background-color:transparent}#view>.spinning{background:#333!important;box-shadow:0 4px 8px rgba(0,0,0,.03)!important}@media screen and (min-width:600px){::-webkit-scrollbar-thumb{background:var(--dark-primary)}::-webkit-scrollbar-thumb:hover{background:var(--dark-primary)}::-webkit-scrollbar-thumb:active{background:var(--dark-primary)}}@media screen and (max-width:480px){.node-status-iptables>.main div>.cbi-map>form{background-color:#1e1e1e;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}}[data-page=""] .main-right>#maincontent .Dashboard,[data-page=admin-dashboard] .main-right>#maincontent .Dashboard{color:#ccc!important}[data-page=""] .main-right>#maincontent .Dashboard h3,[data-page=admin-dashboard] .main-right>#maincontent .Dashboard h3{color:#ccc}[data-page=""] .main-right>#maincontent .Dashboard hr,[data-page=admin-dashboard] .main-right>#maincontent .Dashboard hr{border-top:1px solid #fff}[data-page=""] .main-right>#maincontent .Dashboard .dashboard-bg,[data-page=admin-dashboard] .main-right>#maincontent .Dashboard .dashboard-bg{background-color:#333}[data-page=""] .main-right>#maincontent .Dashboard img.svgmonochrome,[data-page=admin-dashboard] .main-right>#maincontent .Dashboard img.svgmonochrome{filter:invert(90%)}[data-page=""] .main-right>#maincontent .Dashboard tr,[data-page=admin-dashboard] .main-right>#maincontent .Dashboard tr{border-top:thin solid #4d4d4d}[data-page=""] .main-right>#maincontent .Dashboard tr:last-child,[data-page=admin-dashboard] .main-right>#maincontent .Dashboard tr:last-child{border-bottom:thin solid #4d4d4d}[data-page=admin-system-fileassistant] .fb-container .panel-container{border-bottom-color:#3c3c3c!important}[data-page=admin-system-fileassistant] .fb-container td[class$="-icon"]::before{filter:invert(.7)}[data-page=admin-system-fileassistant] div#list-content table.cbi-section-table tbody tr:first-child td.parent-icon{background:#1e1e1e!important}[data-page^=admin-services-openclash]{--oc-accent:var(--dark-primary);--oc-surface:#1e1e1e;--oc-surface-muted:#252526;--oc-control-bg:#1e1e1e;--oc-border:#3c3c3c;--oc-text:#ccc;--oc-text-muted:#a1a1aa;--oc-neutral:#5b5b5b;--oc-scrollbar:#5b5b5b}[data-page^=admin-services-openclash] img[src$="arrow-clockwise-light.svg"],[data-page^=admin-services-openclash] img[src$="eye-light.svg"],[data-page^=admin-services-openclash] img[src$="wrench-light.svg"]{filter:invert(.9)}[data-page=admin-network-diagnostics] .cbi-section{background:#252526!important}[data-page=admin-network-diagnostics] textarea{background:0 0;border-radius:.25rem;color:#ccc;border:1px solid #3c3c3c!important}[data-page=admin-network-diagnostics] .tr>.td{background-color:#252526!important}[data-page=admin-network-network] .ifacebox-head[style*="--zone-color-rgb: 144, 240, 144"]{background-color:#497e49!important;color:#ccc!important}[data-page=admin-network-network] .ifacebox-head[style*="--zone-color-rgb: 240, 144, 144;"]{background-color:#9c4f4f!important;color:#ccc!important}[data-page=admin-network-network] .ifacebox-head[style*="--zone-color-rgb: 238, 238, 238;"]{background-color:#666!important}[data-page=admin-network-network] #modal_overlay>.modal.cbi-modal>div>p>textarea{border:1px solid #3c3c3c!important;background-color:transparent!important}[data-page=admin-network-network] #modal_overlay div[data-tab=peers] div[data-name="_peers"] .ifacebadge code{color:#fff!important;background-color:transparent!important}[data-page=admin-network-network] #modal_overlay>.modal.cbi-modal>div>p>textarea{color:#ccc!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:240, 144, 144;"]{--zone-color-rgb:156,79,79!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong{color:#ccc!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:238, 238, 238;"]{--zone-color-rgb:112,112,112!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] em{color:#ccc!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule>table>.cbi-section-table-row[data-title]::before{background-color:#252526!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"],[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"]{--zone-color-rgb:156,79,79!important;color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong,[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong{color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"],[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"]{--zone-color-rgb:73,126,73!important;color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"] strong,[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"] strong{color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"],[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"]{--zone-color-rgb:112,112,112!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong,[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong{color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong+span,[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong+span{color:#ccc!important}[data-page=admin-system-commands-dashboard] .commandbox,[data-page=admin-system-commands] .commandbox{border-bottom:thin solid #333;background:#252526;box-shadow:inset 0 1px 0 rgba(0,0,0,.2),0 1px 2px rgba(255,255,255,.05)}.btn{background-color:#707070;color:#fff}[data-page=admin-system-admin-repokeys] #key-input{background-color:#1e1e1e;color:#ccc;border:1px solid #3c3c3c!important}[data-page=admin-system-package-manager] #modal_overlay textarea{background-color:#1e1e1e;color:#ccc;border:1px solid #3c3c3c!important}.cbi-dropdown[open]>ul.dropdown>li[selected]{color:#fff} \ No newline at end of file +body{background:#1e1e1e;color:#ccc}.spinning::before{filter:invert(1)}.login-page .login-container{background-color:rgba(0,0,0,var(--blur-opacity-dark));-webkit-backdrop-filter:blur(var(--blur-radius-dark));backdrop-filter:blur(var(--blur-radius-dark))}.login-page .login-container .login-form{background-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.login-page .login-container .login-form .brand{color:#adb5bd}.login-page .login-container .login-form .form-login .input-group::before{color:#adb5bd}.login-page .login-container .login-form .form-login .input-group input{background-color:transparent!important;color:#adb5bd;border-bottom:#adb5bd 1px solid!important;border-radius:0!important;border-top:none!important;border-left:none!important;border-right:none!important;box-shadow:none}.login-page .login-container .login-form .form-login .cbi-button-apply{background-color:#483d8b!important;background-color:var(--dark-primary)!important}.login-page .login-container .login-form .form-login .cbi-button-apply:focus,.login-page .login-container .login-form .form-login .cbi-button-apply:hover{opacity:.9}header::after{background-color:#1e1e1e!important}.main .main-left{background-color:#333!important;box-shadow:0 0 .5rem 0 rgba(0,0,0,.15)}.main .main-left .sidenav-header .brand{color:#ccc}.main .main-left .nav .slide .slide-menu .active a{color:#ccc}.main .main-left .nav .slide .slide-menu .active a::after{background-color:#ccc!important}.main .main-left .nav .slide .slide-menu .active::after{background-color:var(--dark-primary)!important}.main .main-left .nav .slide .slide-menu li a{color:#ccc}.main .main-left .nav .slide .slide-menu li a:hover{background:0 0!important}.main .main-left .nav .slide .slide-menu li::after{background-color:var(--dark-primary)!important}.main .main-left .nav .slide .menu.active{background-color:#483d8b!important;background-color:var(--dark-primary)!important;color:#fff!important}.main .main-left .nav .slide .menu.active a::after{background-color:#fff!important}.main .main-left .nav li a{color:#ccc!important}.main .main-left .nav li a:hover{background-color:#483d8b!important;background-color:var(--dark-primary)!important;color:#fff!important}.main .main-left::-webkit-scrollbar-thumb{background-color:#252526!important}.main .main-left::-webkit-scrollbar-track{background-color:#333}.main .main-right{background-color:#1e1e1e}h2{color:#ccc;background:#333}h3{color:#ccc;border-bottom:0;background:#333}h4{color:#8c6900}abbr{color:var(--dark-primary)!important}a:active,a:link,a:visited{color:#a5b2ff}input:-webkit-autofill{background-color:#3c3c3c!important}#channel_graph{background-color:transparent!important}.cbi-button-apply,.cbi-button-edit,.cbi-value-field .cbi-input-apply{color:#fff!important;background-color:#483d8b!important;background-color:var(--dark-primary)!important;border-color:#483d8b!important;border-color:var(--dark-primary)!important}.cbi-section em{color:#ccc}header.bg-primary{background-color:#1e1e1e!important}.cbi-map-descr{color:#ccc}.cbi-section{background:0 0;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}.panel-title{color:#ccc;background-color:#333}div>.table>.tr:nth-of-type(2n),div>table>tbody>tr:nth-of-type(2n){background-color:#252526}table>tbody>tr>td,table>tfoot>tr>td,table>thead>tr>td{color:#ccc}fieldset>table>tbody>tr:nth-of-type(2n){background-color:#252526}table>tbody>tr>td,table>tfoot>tr>td,table>thead>tr>td{border-top:1px solid #252526}#conns>div>div,#membuff>div>div,#memfree>div>div,#memtotal>div>div,#swapfree>div>div,#swaptotal>div>div{background-color:var(--dark-primary)!important}#conns>div>div>div>small,#membuff>div>div>div>small,#memfree>div>div>div>small,#memtotal>div>div>div>small,#swapfree>div>div>div>small,#swaptotal>div>div>div>small{color:#ccc!important}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last{line-height:1.8em}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"]{border:1px solid #999!important;background-color:transparent!important}.node-system-packages>.main .cbi-section-node:first-child .cbi-value-last div[style="margin:3px 0; width:300px; height:10px; border:1px solid #000000; background-color:#80C080"] div{background-color:#ba8b00!important}table>tbody>tr>th,table>tfoot>tr>th,table>thead>tr>th{background-color:#252526;border-bottom:#000 1px solid!important}.tr.cbi-section-table-titles.named::before,.tr[data-title]::before{background-color:#252526}#cbi-wireless>#wifi_assoclist_table>.tr:nth-child(2),.cbi-section-table-row::before,.tr>.td,.tr>.th,tr>td,tr>th{border-top:0}.cbi-rowstyle-2{background-color:#1e1e1e}.cbi-rowstyle-1{background-color:#252526}.cbi-rowstyle-2 .cbi-button-down,.cbi-rowstyle-2 .cbi-button-up,body:not(.Interfaces) .cbi-rowstyle-2:first-child{background-color:#666!important}.cbi-section>h3:first-child,.panel-title,h3{color:#ccc}h4{background-color:#1e1e1f}.cbi-progressbar{background:#282a2c}.cbi-progressbar div{background-color:var(--dark-primary)!important}.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{background-color:#1e1e1f}.cbi-button{color:#fff!important;background-color:#483d8b;background-color:var(--dark-primary)}.cbi-section-node{background:0 0}abbr{color:#5e72e4}div>.table>.tbody>.tr:nth-of-type(2n),div>table>tbody>tr:nth-of-type(2n){background-color:#252526}#content_syslog{box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}#syslog{color:#ccc;background-color:#1e1e1e}#bwsvg,#iwsvg,#iwsvg2{overflow:hidden;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35);background-color:#1e1e1e!important}.tabs{background-color:#252526}.tabs li:hover,.tabs li[class~=active]{cursor:pointer;color:#ccc!important}.tabs li:hover a,.tabs li[class~=active] a{color:#ccc!important}.tabs>li[class~=active]>a{color:#ccc}.tabs>li:hover,.tabs>li[class~=active]{border-bottom:.18751rem solid #483d8b;border-bottom:.18751rem solid var(--dark-primary);color:var(--dark-primary)!important;background-color:#181819}.cbi-tabmenu>li>a,.tabs>li>a{color:#ccc}.cbi-tabmenu>li>a:hover,.tabs>li>a:hover{color:#ccc}.cbi-tabmenu>li{background:#2d2d2d}.cbi-tabmenu li[class~=cbi-tab] a{color:#ccc}.cbi-tabmenu>li:hover{color:#ccc;background:#2d2d2d;border-bottom:.18751rem solid var(--dark-primary)!important}.cbi-tabmenu>li[class~=cbi-tab]{background-color:#181819;border-bottom:.18751rem solid var(--dark-primary)!important}.cbi-tabcontainer>.cbi-value:nth-of-type(2n){background-color:#252526}.cbi-value-title{color:#ccc}input,select{color:#ccc;background-color:transparent!important;border:1px solid #252526;box-shadow:none}input:focus,select:not([multiple=multiple]):focus{border-color:#483d8b!important;border-color:var(--dark-primary)!important;outline:0}.cbi-dropdown:focus,input:not(.cbi-button):focus,select:not([multiple=multiple]):focus{border-color:#5e72e4;border-color:var(--dark-primary)!important}select{background-color:#1e1e1e!important}#cbi-customfeedconf .cbi-map-descr,#cbi-customfeedconf h2,#cbi-distfeedconf .cbi-map-descr,#cbi-distfeedconf h2,#cbi-download h2,#cbi-dropbear .cbi-map-descr,#cbi-dropbear .cbi-map-descr abbr,#cbi-dropbear h2,#cbi-filelist h2,#cbi-rc .cbi-map-descr,#cbi-rc h2{color:#ccc!important}.cbi-value-field>ul>li .ifacebadge{background-color:#3c3c3c}.cbi-section-descr{color:#ccc}.cbi-input-textarea{background-color:#1e1e1e;color:#ccc;border:1px solid #3c3c3c!important}textarea:focus-visible{border:1px solid var(--dark-primary)}.cbi-section-node:nth-of-type(2n),.cbi-section-remove:nth-of-type(2n){background-color:#1e1e1e}.cbi-section[id] .cbi-section-node:nth-of-type(4n+4),.cbi-section[id] .cbi-section-remove:nth-of-type(4n+3){background-color:#1e1e1e}.node-system-packages>.main table tr td:last-child{color:#ccc}.cbi-tooltip{background-color:var(--primary);color:#fff}.ifacebox{background-color:transparent!important;border:1px solid #1e1e1e}.ifacebox-head{color:#ccc;background:#666}.ifacebox-body{background-color:#333}.zonebadge strong{color:#333}.zonebadge>.ifacebadge{background-color:#3c3c3c}div.cbi-value var,td.cbi-value-field var{color:#5e72e4}#diag-rc-output>pre{color:#ccc;background-color:#1e1e1e}.node-services-vssr .block{background-color:#3c3c3c!important;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}.node-services-vssr .block h4{color:#ccc!important}.node-services-vssr .status-bar{color:#ccc;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35);background-color:#1e1e1e}.node-services-vssr .cbi-section-table-row{color:#ccc;background-color:#3c3c3c!important;box-shadow:0 0 5px 0 rgba(0,0,0,.35)}.node-services-vssr .cbi-section-table-row.fast{background:#483d8b!important;background:var(--dark-primary)!important;color:#fff}.node-services-vssr .ssr-button{color:#ccc}.node-services-vssr .incon:nth-child(2){border-right:#1e1e1e 1px solid}#xhr_poll_status>.label.success{color:#ccc!important;background-color:#556b2f!important}.notice{background-color:#483d8b!important;background-color:var(--dark-primary)!important}.cbi-section.fade-in .cbi-title>div:last-child span{background:0 0!important;color:#ced4da}.cbi-button-add,.cbi-button-find,.cbi-button-reload,.cbi-button-save,.cbi-input-find,.cbi-input-reload,.cbi-input-save{color:#fff!important;background:#556b2f!important;border-color:#556b2f!important}.cbi-button-reset,.cbi-input-remove{color:#fff!important;background-color:#ff8c00!important;border-color:#ff8c00!important}.cbi-button-action.important,.cbi-button-apply.important,.cbi-button-edit.important,.cbi-button-reload.important,.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit{border:1px #483d8b solid!important;border:1px var(--dark-primary) solid!important}.btn[value=Dismiss],.cbi-button-neutral[value=Disable],.cbi-button[onclick="handleReset(event)"],.cbi-button[onclick^=iface_reconnect],.cbi-button[value=Disabled],.cbi-button[value=Reset],.cbi-button[value=Terminate]{color:#fff;border:thin solid #ff8c00!important;background-color:#ff8c00!important}fieldset[id^=cbi-apply-]{background-color:#333}#detail-bubble>div{border:1px solid #ccc;background:#252525}.ifacebox-head.active{background-color:var(--dark-primary)!important}header .fill .status span[data-style=active]{color:#ccc!important;background-color:#556b2f!important}#cbi-network .tr:first-child>.td,#cbi-wireless .td,.table[width="100%"]>.tr:first-child>.td,.tr.cbi-section-table-titles>.th,.tr.table-titles>.th,[data-page=admin-network-diagnostics] .tr>.td{background-color:#252526;border-bottom:#000 1px solid!important}.network-status-table .ifacebox-body .ifacebadge{background-color:#252526;border-bottom:0;box-shadow:none}.td>.ifacebadge,td>.ifacebadge{color:#fff;background-color:#483d8b;background-color:var(--dark-primary);border:0}.alert,.alert-message{background-color:#333}.alert-message.warning{background-color:#986400!important}.alert-message.error,.alert.error{background-color:#784f00}.alert h4,.alert-message h4{background-color:#784f00;color:#ffbf00}.alert-message [class=btn]{background-color:#777;color:#ccc}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>ins{border-color:#00ad00;background-color:#688668}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>del{border-color:#c60000;background-color:#896565}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var{background-color:#333;border-color:#666}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var ins{background-color:#688668}.uci-dialog .cbi-section .uci-change-legend .uci-change-legend-label>var del{background-color:#896565}.uci-dialog .cbi-section .uci-change-list>var{background-color:#333;border-color:#666}.uci-dialog .cbi-section .uci-change-list>var del{background-color:#896565}.uci-dialog .cbi-section .uci-change-list>var ins{background-color:#688668}.uci-dialog .cbi-section .uci-change-list>ins{border-color:#00ad00;background-color:#688668}.uci-dialog .cbi-section .uci-change-list>del{border-color:#c60000;background-color:#896565}.uci-dialog .cbi-section .uci-change-list+.right .btn{color:#ccc}.uci-dialog .cbi-section .uci-change-list+.right .cbi-button{border:1px solid #3c3c3c!important}.btn.danger,.cbi-button-negative,.cbi-button-neutral[value=Restart],.cbi-button-remove,.cbi-button-reset,.cbi-button[onclick="reboot(this)"],.cbi-button[value=Kill],.cbi-button[value=Stop],.cbi-section-remove>.cbi-button{border:thin solid #ff8c00!important;background-color:#ff8c00!important}#cbi-network>.cbi-section-node,#cbi-wireless>#wifi_assoclist_table,#cbi-wireless>.cbi-section-node,#iptables,.Firewall form,.cbi-section,.cbi-section-error,[data-page=admin-system-opkg] #maincontent>.container,[data-page^=admin-system-admin]:not(.node-main-login) .cbi-map:not(#cbi-dropbear),[data-tab-title]{background:#1e1e1e!important;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}div[style="width:100%;height:300px;border:1px solid #000;background:#fff"]{background:0 0!important}[data-page=admin-system-admin-password] .cbi-map .cbi-map-descr,[data-page=admin-system-admin-password] .cbi-map h2,[data-page=admin-system-admin] .cbi-map .cbi-map-descr,[data-page=admin-system-admin] .cbi-map h2{color:#ccc}[data-page=admin-system-flash] .modal label>input[type=checkbox]{vertical-align:text-top;top:auto;border-color:#fff!important}[data-page=admin-system-flash] .modal .btn{white-space:normal!important;background-color:#8fbc8f}[data-page=admin-system-flash] .modal .alert-message{background-color:transparent!important}[data-page=admin-system-flash] .modal .danger{border:thin solid #ff8c00!important;background-color:#ff8c00!important}.cbi-value input[type=password]+.cbi-button-neutral{background-color:#483d8b!important;background-color:var(--dark-primary)!important;border-color:var(--dark-primary)!important}.btn,.cbi-dropdown,button,input,select{border:1px solid #3c3c3c!important}.cbi-dropdown .preview{color:#ccc}.cbi-section-table-row{background-color:#1e1e1e!important}.modal{background-color:#1e1e1e}.cbi-button-positive{color:#fff!important;background-color:#556b2f!important}[data-page=admin-system-flash] legend{color:#ccc}.logout:before{color:#adb5bd!important}.cbi-dropdown[open]{border-color:#483d8b!important;border-color:var(--dark-primary)!important}.cbi-dropdown[open]>ul.dropdown{background:#252526!important;color:#fff!important;box-shadow:none;border:1px solid #3c3c3c!important}.cbi-dropdown[open]>ul.dropdown li{color:#fff;border-bottom:1px solid #3c3c3c!important}.cbi-dropdown[open]>ul.dropdown>li[selected]{background-color:#483d8b!important;background-color:var(--dark-primary)!important;border-bottom:1px solid #3c3c3c!important}.cbi-dropdown[open]>ul.dropdown>li.focus{background:#483d8b;background:var(--dark-primary);outline:0}.ifacebadge{background-color:#333}.cbi-dynlist>.item>span{border:1px solid #3c3c3c!important}.cbi-button-action,.cbi-button-apply,.cbi-button-edit,.cbi-button-reload,.cbi-button[onclick="addKey(event)"],.cbi-button[value$=Apply],.cbi-button[value=Submit],.cbi-button[value=Upload],.cbi-page-actions .cbi-button-apply,.cbi-section-actions .cbi-button-edit{background:#483d8b!important;background:var(--dark-primary)!important;border-color:var(--dark-primary)!important}.btn.primary,.cbi-button-add,.cbi-button-link,.cbi-button-neutral[onclick="handleConfig(event)"],.cbi-button-positive,.cbi-button-save,.cbi-button[value=Enable],.cbi-button[value=Scan],.cbi-button[value^=Back],.cbi-page-actions .cbi-button-apply+.cbi-button-save,.cbi-page-actions .cbi-button-save{background:#483d8b;background:var(--dark-primary)}[data-page=admin-system-opkg] h2{color:#ccc!important}[data-page=admin-system-startup] textarea{color:#ccc;background-color:transparent}[data-page=admin-system-startup] textarea:focus-visible{border:1px solid var(--dark-primary)}[data-page=admin-network-firewall-custom] #view p textarea,[data-page=admin-status-routes] #view p textarea,[data-page=admin-system-crontab] #view p textarea{color:#ccc;background-color:transparent}#view>.spinning{background:#333!important;box-shadow:0 4px 8px rgba(0,0,0,.03)!important}@media screen and (min-width:600px){::-webkit-scrollbar-thumb{background:var(--dark-primary)}::-webkit-scrollbar-thumb:hover{background:var(--dark-primary)}::-webkit-scrollbar-thumb:active{background:var(--dark-primary)}}@media screen and (max-width:480px){.node-status-iptables>.main div>.cbi-map>form{background-color:#1e1e1e;box-shadow:0 0 .5rem 0 rgba(0,0,0,.35)}}[data-page=""] .main-right>#maincontent .Dashboard,[data-page=admin-status-dashboard] .main-right>#maincontent .Dashboard{color:#ccc!important}[data-page=""] .main-right>#maincontent .Dashboard h3,[data-page=admin-status-dashboard] .main-right>#maincontent .Dashboard h3{color:#ccc}[data-page=""] .main-right>#maincontent .Dashboard hr,[data-page=admin-status-dashboard] .main-right>#maincontent .Dashboard hr{border-top:1px solid #fff}[data-page=""] .main-right>#maincontent .Dashboard .dashboard-bg,[data-page=admin-status-dashboard] .main-right>#maincontent .Dashboard .dashboard-bg{background-color:#333}[data-page=""] .main-right>#maincontent .Dashboard img.svgmonochrome,[data-page=admin-status-dashboard] .main-right>#maincontent .Dashboard img.svgmonochrome{filter:invert(90%)}[data-page=""] .main-right>#maincontent .Dashboard tr,[data-page=admin-status-dashboard] .main-right>#maincontent .Dashboard tr{border-top:thin solid #4d4d4d}[data-page=""] .main-right>#maincontent .Dashboard tr:last-child,[data-page=admin-status-dashboard] .main-right>#maincontent .Dashboard tr:last-child{border-bottom:thin solid #4d4d4d}[data-page=admin-system-fileassistant] .fb-container .panel-container{border-bottom-color:#3c3c3c!important}[data-page=admin-system-fileassistant] .fb-container td[class$="-icon"]::before{filter:invert(.7)}[data-page=admin-system-fileassistant] div#list-content table.cbi-section-table tbody tr:first-child td.parent-icon{background:#1e1e1e!important}[data-page^=admin-services-openclash]{--oc-accent:var(--dark-primary);--oc-surface:#1e1e1e;--oc-surface-muted:#252526;--oc-control-bg:#1e1e1e;--oc-border:#3c3c3c;--oc-text:#ccc;--oc-text-muted:#a1a1aa;--oc-neutral:#5b5b5b;--oc-scrollbar:#5b5b5b}[data-page^=admin-services-openclash] img[src$="arrow-clockwise-light.svg"],[data-page^=admin-services-openclash] img[src$="eye-light.svg"],[data-page^=admin-services-openclash] img[src$="wrench-light.svg"]{filter:invert(.9)}[data-page=admin-network-diagnostics] .cbi-section{background:#252526!important}[data-page=admin-network-diagnostics] textarea{background:0 0;border-radius:.25rem;color:#ccc;border:1px solid #3c3c3c!important}[data-page=admin-network-diagnostics] .tr>.td{background-color:#252526!important}[data-page=admin-network-network] .ifacebox-head[style*="--zone-color-rgb: 144, 240, 144"]{background-color:#497e49!important;color:#ccc!important}[data-page=admin-network-network] .ifacebox-head[style*="--zone-color-rgb: 240, 144, 144;"]{background-color:#9c4f4f!important;color:#ccc!important}[data-page=admin-network-network] .ifacebox-head[style*="--zone-color-rgb: 238, 238, 238;"]{background-color:#666!important}[data-page=admin-network-network] #modal_overlay>.modal.cbi-modal>div>p>textarea{border:1px solid #3c3c3c!important;background-color:transparent!important}[data-page=admin-network-network] #modal_overlay div[data-tab=peers] div[data-name="_peers"] .ifacebadge code{color:#fff!important;background-color:transparent!important}[data-page=admin-network-network] #modal_overlay>.modal.cbi-modal>div>p>textarea{color:#ccc!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:240, 144, 144;"]{--zone-color-rgb:156,79,79!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong{color:#ccc!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:238, 238, 238;"]{--zone-color-rgb:112,112,112!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] em{color:#ccc!important}[data-page=admin-network-firewall-rules] #cbi-firewall-rule>table>.cbi-section-table-row[data-title]::before{background-color:#252526!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"],[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"]{--zone-color-rgb:156,79,79!important;color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong,[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:240, 144, 144;"] strong{color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"],[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"]{--zone-color-rgb:73,126,73!important;color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"] strong,[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:144, 240, 144;"] strong{color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"],[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"]{--zone-color-rgb:112,112,112!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong,[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong{color:#ccc!important}[data-page=admin-network-firewall-rules] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong+span,[data-page=admin-network-network] .cbi-dropdown .zonebadge[style*="--zone-color-rgb:238, 238, 238;"] strong+span{color:#ccc!important}[data-page=admin-system-commands-dashboard] .commandbox,[data-page=admin-system-commands] .commandbox{border-bottom:thin solid #333;background:#252526;box-shadow:inset 0 1px 0 rgba(0,0,0,.2),0 1px 2px rgba(255,255,255,.05)}.btn{background-color:#707070;color:#fff}[data-page=admin-system-admin-repokeys] #key-input{background-color:#1e1e1e;color:#ccc;border:1px solid #3c3c3c!important}[data-page=admin-system-package-manager] #modal_overlay textarea{background-color:#1e1e1e;color:#ccc;border:1px solid #3c3c3c!important}.cbi-dropdown[open]>ul.dropdown>li[selected]{color:#fff} \ No newline at end of file