diff --git a/deepbot/Makefile b/deepbot/Makefile
new file mode 100644
index 00000000..981c603c
--- /dev/null
+++ b/deepbot/Makefile
@@ -0,0 +1,45 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:= deepbot
+PKG_VERSION:= 1.0.0
+PKG_RELEASE:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/deepbot
+ SECTION:= utils
+ CATEGORY:= Utilities
+ TITLE:= DeepSeek AI Telegram Bot
+ DEPENDS:= +lua +luasocket +lua-cjson +lsqlite3 +curl
+ PKGARCH:= all
+endef
+
+define Package/deepbot/description
+ Telegram bot powered by DeepSeek AI.
+ Supports private and group chats, conversation history,
+ daily token limits, SOCKS5/HTTP proxy.
+ Lua implementation from
+ https://github.com/Bimaoitsuki/deepseek-telegram-bot-
+endef
+
+define Build/Compile
+endef
+
+define Package/deepbot/conffiles
+/etc/config/deepbot
+endef
+
+define Package/deepbot/install
+ $(INSTALL_DIR) $(1)/usr/bin \
+ $(1)/etc/init.d \
+ $(1)/etc/config \
+ $(1)/usr/share/deepbot
+ $(INSTALL_BIN) ./files/usr/bin/deepbot.lua \
+ $(1)/usr/bin/deepbot.lua
+ $(INSTALL_BIN) ./files/etc/init.d/deepbot \
+ $(1)/etc/init.d/deepbot
+ $(INSTALL_DATA) ./files/etc/config/deepbot \
+ $(1)/etc/config/deepbot
+endef
+
+$(eval $(call BuildPackage,deepbot))
diff --git a/deepbot/files/etc/config/deepbot b/deepbot/files/etc/config/deepbot
new file mode 100644
index 00000000..9d624144
--- /dev/null
+++ b/deepbot/files/etc/config/deepbot
@@ -0,0 +1,10 @@
+config deepbot 'main'
+ option token 'YOUR_BOT_TOKEN' # Telegrab BOT token (from @BotFather)
+ option deepseek_key 'YOUR_DEEPSEEK_KEY' # DeepSeek API key
+ option deepseek_url 'https://api.deepseek.com/v1/chat/completions' # DeepSeek API URL
+ option proxy '' # Proxy server (proxy_type://host:port[@username:passwd] see man curl)
+ option database '/usr/share/deepbot/chat_history.db' # SQLite3 database path
+ option token_limit '10000' # Token linit per day
+ option rate_limit '5' # Max replies per user in one min
+ option group_mention_only '1' # Reply queris in public chats
+ option debug '0' # Verbose log (stdout)
diff --git a/deepbot/files/etc/init.d/deepbot b/deepbot/files/etc/init.d/deepbot
new file mode 100644
index 00000000..ea4ff173
--- /dev/null
+++ b/deepbot/files/etc/init.d/deepbot
@@ -0,0 +1,40 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+STOP=10
+USE_PROCD=1
+
+PROG="/usr/bin/deepbot.lua"
+
+start_service() {
+ local token deepseek_key deepseek_url proxy database \
+ token_limit rate_limit group_mention_only debug
+
+ config_load deepbot
+ config_get token main token ''
+ config_get deepseek_key main deepseek_key ''
+ config_get deepseek_url main deepseek_url 'https://api.deepseek.com/v1/chat/completions'
+ config_get proxy main proxy ''
+ config_get database main database '/usr/share/deepbot/chat_history.db'
+ config_get token_limit main token_limit '10000'
+ config_get rate_limit main rate_limit '5'
+ config_get group_mention_only main group_mention_only '1'
+ config_get debug main debug '0'
+
+ procd_open_instance
+ procd_set_param command lua "$PROG"
+ procd_set_param env \
+ TELEGRAM_BOT_TOKEN="$token" \
+ DEEPSEEK_API_KEY="$deepseek_key" \
+ DEEPSEEK_API_URL="$deepseek_url" \
+ PROXY_URL="$proxy" \
+ DEBUG="$debug"
+ procd_set_param stdout 1
+ procd_set_param stderr 1
+ procd_set_param respawn 30 5 0
+ procd_close_instance
+}
+
+service_triggers() {
+ procd_add_reload_trigger "deepbot"
+}
diff --git a/deepbot/files/usr/bin/deepbot.lua b/deepbot/files/usr/bin/deepbot.lua
new file mode 100755
index 00000000..030f0991
--- /dev/null
+++ b/deepbot/files/usr/bin/deepbot.lua
@@ -0,0 +1,559 @@
+#!/usr/bin/env lua
+-- DeepSeek Telegram Bot (Lua 5.1.5)
+-- Config: /etc/config/deepbot
+-- Depends: curl lua luasocket lua-cjson lsqlite3 uci
+
+local socket = require("socket")
+local json = require("cjson")
+local sqlite3 = require("lsqlite3")
+
+-- ===== UCI КОНФИГ =====
+local function uci_get(key)
+ local f = io.popen("uci -q get deepbot." .. key .. " 2>/dev/null")
+ if not f then return nil end
+ local v = f:read("*l")
+ f:close()
+ return (v and v ~= "") and v or nil
+end
+
+local function uci_get_bool(key, default)
+ local v = uci_get(key)
+ if v == nil then return default end
+ return v == "1" or v == "true" or v == "yes"
+end
+
+local function uci_get_int(key, default)
+ local v = uci_get(key)
+ return v and tonumber(v) or default
+end
+
+-- ===== Config =====
+-- Prio: envilopment variables > UCI > default value
+local TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
+ or uci_get("main.token")
+ or "YOUR_BOT_TOKEN"
+local DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY")
+ or uci_get("main.deepseek_key")
+ or "YOUR_DEEPSEEK_KEY"
+local DEEPSEEK_API_URL = os.getenv("DEEPSEEK_API_URL")
+ or uci_get("main.deepseek_url")
+ or "https://api.deepseek.com/v1/chat/completions"
+local PROXY_URL = os.getenv("PROXY_URL")
+ or uci_get("main.proxy")
+ or ""
+local DATABASE_NAME = uci_get("main.database")
+ or "/usr/share/deepbot/chat_history.db"
+local TOKEN_LIMIT_PER_DAY = uci_get_int("main.token_limit", 10000)
+local RATE_LIMIT = uci_get_int("main.rate_limit", 5)
+local DEBUG = os.getenv("DEBUG") == "1"
+ or uci_get_bool("main.debug", false)
+-- reply in chant only ask or @bot call
+local GROUP_MENTION_ONLY = uci_get_bool("main.group_mention_only", true)
+
+local TG_API_BASE = "https://api.telegram.org/bot" .. TELEGRAM_BOT_TOKEN
+
+-- bot_username defined after getMe
+local BOT_USERNAME = ""
+
+-- ===== LOG =====
+local function log(level, msg)
+ io.stderr:write(string.format("[%s] [%s] %s\n",
+ os.date("%Y-%m-%d %H:%M:%S"), level, tostring(msg)))
+ io.stderr:flush()
+end
+local function info(msg) log("INFO", msg) end
+local function err(msg) log("ERROR", msg) end
+local function dbg(msg) if DEBUG then log("DEBUG", msg) end end
+
+-- ===== CURL =====
+local function curl_post(url, headers, body)
+ local header_args = ""
+ for k, v in pairs(headers) do
+ header_args = header_args .. string.format(" -H '%s: %s'", k, v)
+ end
+ local proxy_arg = (PROXY_URL ~= "") and (" -x '" .. PROXY_URL .. "'") or ""
+
+ local pid_f = io.popen("echo $$")
+ local pid = pid_f and pid_f:read("*l") or "0"
+ if pid_f then pid_f:close() end
+ local tmpfile = string.format("/tmp/deepbot_%s_%s.json", pid, tostring(os.time()))
+
+ local f = io.open(tmpfile, "w")
+ if not f then
+ err("curl_post: cannot write tmpfile " .. tmpfile)
+ return nil
+ end
+ f:write(body)
+ f:flush()
+ f:close()
+
+ local cmd = string.format(
+ "curl -s -m 30 -X POST%s%s --data-binary @'%s' '%s'",
+ header_args, proxy_arg, tmpfile, url
+ )
+ dbg("curl_post CMD: " .. cmd)
+
+ local pipe = io.popen(cmd)
+ if not pipe then
+ os.remove(tmpfile)
+ err("curl_post: popen failed")
+ return nil
+ end
+ local resp = pipe:read("*a")
+ pipe:close()
+ os.remove(tmpfile)
+
+ dbg("curl_post RESP (" .. #resp .. " bytes): " .. resp:sub(1, 300))
+ return resp
+end
+
+-- ===== TELEGRAM API =====
+local function tg_call(method, params)
+ local body = params and json.encode(params) or "{}"
+ dbg("tg_call " .. method .. " body: " .. body:sub(1, 200))
+ local resp = curl_post(
+ TG_API_BASE .. "/" .. method,
+ { ["Content-Type"] = "application/json" },
+ body
+ )
+ if not resp or resp == "" then
+ err("tg_call " .. method .. ": empty response")
+ return nil
+ end
+ local ok, data = pcall(json.decode, resp)
+ if not ok then
+ err("tg_call " .. method .. " JSON error: " .. tostring(data))
+ err("raw: " .. resp:sub(1, 300))
+ return nil
+ end
+ if not data.ok then
+ err("tg_call " .. method .. " API error: " ..
+ tostring(data.description or json.encode(data)))
+ end
+ return data
+end
+
+-- ===== DATABASE =====
+local db
+
+local function init_database()
+ os.execute("mkdir -p /usr/share/deepbot")
+ db = sqlite3.open(DATABASE_NAME)
+ local rc = db:exec([[
+ CREATE TABLE IF NOT EXISTS conversations (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ user_id INTEGER NOT NULL,
+ role TEXT NOT NULL,
+ content TEXT NOT NULL,
+ timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
+ tokens INTEGER DEFAULT 0
+ );
+ CREATE INDEX IF NOT EXISTS idx_user_id ON conversations (user_id);
+ CREATE INDEX IF NOT EXISTS idx_timestamp ON conversations (timestamp);
+ CREATE TABLE IF NOT EXISTS token_usage (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ user_id INTEGER NOT NULL,
+ date DATE NOT NULL,
+ tokens_used INTEGER DEFAULT 0,
+ UNIQUE(user_id, date)
+ );
+ CREATE INDEX IF NOT EXISTS idx_token_usage ON token_usage (user_id, date);
+ ]])
+ if rc ~= sqlite3.OK then
+ err("DB init error: " .. tostring(db:errmsg()))
+ else
+ info("Database: " .. DATABASE_NAME)
+ end
+end
+
+local function get_user_messages(user_id, limit)
+ limit = limit or 10
+ local messages = {}
+ local stmt = db:prepare(
+ "SELECT role, content FROM conversations WHERE user_id=? ORDER BY timestamp DESC LIMIT ?"
+ )
+ stmt:bind_values(user_id, limit)
+ for row in stmt:nrows() do
+ table.insert(messages, 1, { role = row.role, content = row.content })
+ end
+ stmt:finalize()
+ return messages
+end
+
+local function save_message(user_id, role, content, tokens)
+ tokens = tokens or 0
+ local stmt = db:prepare(
+ "INSERT INTO conversations (user_id, role, content, tokens) VALUES (?,?,?,?)"
+ )
+ stmt:bind_values(user_id, role, content, tokens)
+ stmt:step()
+ stmt:finalize()
+ local today = os.date("%Y-%m-%d")
+ db:exec(string.format(
+ "INSERT OR IGNORE INTO token_usage (user_id, date, tokens_used) VALUES (%d,'%s',0)",
+ user_id, today
+ ))
+ db:exec(string.format(
+ "UPDATE token_usage SET tokens_used=tokens_used+%d WHERE user_id=%d AND date='%s'",
+ tokens, user_id, today
+ ))
+end
+
+local function clear_user_conversation(user_id)
+ db:exec(string.format("DELETE FROM conversations WHERE user_id=%d", user_id))
+end
+
+local function get_daily_token_usage(user_id)
+ local today = os.date("%Y-%m-%d")
+ local stmt = db:prepare(
+ "SELECT tokens_used FROM token_usage WHERE user_id=? AND date=?"
+ )
+ stmt:bind_values(user_id, today)
+ local result = 0
+ for row in stmt:nrows() do result = row.tokens_used end
+ stmt:finalize()
+ return result
+end
+
+-- ===== utils =====
+local function estimate_tokens(text)
+ return math.max(1, math.floor(#text / 4))
+end
+
+local function sanitize_text(text)
+ if #text > 4000 then text = text:sub(1, 4000) .. "…" end
+ return text
+end
+
+-- ===== RATE LIMITER =====
+local rate_table = {}
+
+local function check_rate(user_id)
+ local now = socket.gettime()
+ local ts = rate_table[user_id] or {}
+ local fresh = {}
+ for _, t in ipairs(ts) do
+ if now - t < 60 then fresh[#fresh+1] = t end
+ end
+ if #fresh >= RATE_LIMIT then
+ rate_table[user_id] = fresh
+ return false
+ end
+ fresh[#fresh+1] = now
+ rate_table[user_id] = fresh
+ return true
+end
+
+-- ===== LRU CACHE =====
+local response_cache = {}
+local cache_order = {}
+local CACHE_MAX = 200
+
+local function cache_get(key) return response_cache[key] end
+local function cache_set(key, val)
+ if not response_cache[key] then
+ table.insert(cache_order, key)
+ if #cache_order > CACHE_MAX then
+ response_cache[table.remove(cache_order, 1)] = nil
+ end
+ end
+ response_cache[key] = val
+end
+
+-- ===== CHAT: reply filter =====
+-- reply cleared text
+local function group_filter(msg)
+ local chat_type = msg.chat.type -- "private","group","supergroup","channel"
+
+ -- private msg reply always
+ if chat_type == "private" then
+ return true, msg.text
+ end
+
+ -- in chat — if GROUP_MENTION_ONLY disabled
+ if not GROUP_MENTION_ONLY then
+ return true, msg.text
+ end
+
+ local text = msg.text or ""
+
+ -- 1. Reply
+ if msg.reply_to_message and msg.reply_to_message.from then
+ if msg.reply_to_message.from.username == BOT_USERNAME then
+ dbg("group_filter: reply to bot")
+ return true, text
+ end
+ end
+
+ -- 2. ask bot @BotUsername (any case)
+ if BOT_USERNAME ~= "" then
+ local mention = "@" .. BOT_USERNAME
+ local lower_text = text:lower()
+ local lower_mention = mention:lower()
+ if lower_text:find(lower_mention, 1, true) then
+ -- clean quote
+ local clean = text:gsub("(?i)" .. mention, "")
+ -- lua (?i) not support, make case-insensitive
+ clean = lower_text:gsub(lower_mention, "")
+ clean = clean:match("^%s*(.-)%s*$") -- trim
+ if clean == "" then clean = text end -- if empty — keep
+ dbg("group_filter: mention found, clean text: " .. clean)
+ return true, clean
+ end
+ end
+
+ dbg("group_filter: not addressed to bot, skipping")
+ return false, nil
+end
+
+-- ===== DEEPSEEK API =====
+local function call_deepseek(user_id, prompt)
+ local cache_key = tostring(user_id) .. "\0" .. prompt
+ if cache_get(cache_key) then
+ info("Cache hit user=" .. user_id)
+ return cache_get(cache_key)
+ end
+
+ local daily_usage = get_daily_token_usage(user_id)
+ if daily_usage >= TOKEN_LIMIT_PER_DAY then
+ return nil, "Daily token limit reached"
+ end
+
+ local conversation = get_user_messages(user_id, 10)
+ if #conversation == 0 then
+ local sys = "You are a helpful AI assistant for Telegram users."
+ table.insert(conversation, { role = "system", content = sys })
+ save_message(user_id, "system", sys)
+ end
+
+ local total_est = estimate_tokens(prompt) + 100
+ for _, m in ipairs(conversation) do
+ total_est = total_est + estimate_tokens(m.content)
+ end
+ if daily_usage + total_est > TOKEN_LIMIT_PER_DAY then
+ return nil, "This request would exceed daily token limit"
+ end
+
+ local messages = {}
+ for _, m in ipairs(conversation) do messages[#messages+1] = m end
+ messages[#messages+1] = { role = "user", content = prompt }
+
+ local payload = json.encode({
+ model = "deepseek-chat",
+ messages = messages,
+ temperature = 0.5,
+ })
+
+ local resp_body = curl_post(
+ DEEPSEEK_API_URL,
+ {
+ ["Authorization"] = "Bearer " .. DEEPSEEK_API_KEY,
+ ["Content-Type"] = "application/json",
+ },
+ payload
+ )
+
+ if not resp_body or resp_body == "" then
+ return nil, "Empty response from DeepSeek API"
+ end
+
+ local ok, data = pcall(json.decode, resp_body)
+ if not ok then
+ err("DeepSeek JSON error: " .. tostring(data))
+ err("Raw: " .. resp_body:sub(1, 300))
+ return nil, "JSON parse error"
+ end
+
+ if data.choices then
+ local ai_reply = data.choices[1].message.content
+ local usage = data.usage or {}
+ local reply_tokens = usage.completion_tokens or estimate_tokens(ai_reply)
+ save_message(user_id, "assistant", ai_reply, reply_tokens)
+ if #prompt < 100 then cache_set(cache_key, data) end
+ info(string.format("DeepSeek OK user=%d tokens=%d", user_id, reply_tokens))
+ return data
+ elseif data.error then
+ local emsg = data.error.message or json.encode(data.error)
+ err("DeepSeek API error: " .. tostring(emsg))
+ return nil, tostring(emsg)
+ else
+ err("DeepSeek unknown response: " .. resp_body:sub(1, 300))
+ return nil, "Unknown API response"
+ end
+end
+
+-- ===== Send =====
+local function send_message(chat_id, text, reply_to)
+ local payload = {
+ chat_id = chat_id,
+ text = sanitize_text(text),
+ parse_mode = "Markdown",
+ disable_web_page_preview = true,
+ }
+ if reply_to then payload.reply_to_message_id = reply_to end
+ local res = tg_call("sendMessage", payload)
+ if not res or not res.ok then
+ -- retry without Markdown
+ payload.parse_mode = nil
+ res = tg_call("sendMessage", payload)
+ end
+ return res
+end
+
+-- ===== HANDLERS =====
+local function handle_start(msg)
+ local user_id = msg.from.id
+ info("handle_start user=" .. user_id)
+ clear_user_conversation(user_id)
+ save_message(user_id, "system", "You are a helpful AI assistant for Telegram users.")
+ send_message(msg.chat.id,
+ "🤖 *DeepSeek AI Bot*\n\n"
+ .. "Conversation history is saved locally.\n"
+ .. "/clear — start a new conversation\n"
+ .. "/history — show recent messages\n"
+ .. "/tokens — daily token usage",
+ msg.message_id
+ )
+end
+
+local function handle_clear(msg)
+ info("handle_clear user=" .. msg.from.id)
+ clear_user_conversation(msg.from.id)
+ send_message(msg.chat.id, "🔄 *Conversation reset*", msg.message_id)
+end
+
+local function handle_history(msg)
+ local messages = get_user_messages(msg.from.id, 20)
+ if #messages == 0 then
+ send_message(msg.chat.id, "📜 *Conversation history is empty*", msg.message_id)
+ return
+ end
+ local lines = { "📜 *Recent Conversation:*\n" }
+ local start = math.max(1, #messages - 4)
+ for i = start, #messages do
+ local m = messages[i]
+ local role = (m.role == "user") and "You" or "AI"
+ local text = m.content:sub(1, 200)
+ if #m.content > 200 then text = text .. "…" end
+ lines[#lines+1] = string.format("*%s:* %s\n", role, text)
+ end
+ send_message(msg.chat.id, table.concat(lines, "\n"), msg.message_id)
+end
+
+local function handle_tokens(msg)
+ local user_id = msg.from.id
+ local daily_usage = get_daily_token_usage(user_id)
+ local pct = string.format("%.1f", daily_usage / TOKEN_LIMIT_PER_DAY * 100)
+ send_message(msg.chat.id,
+ string.format(
+ "🧮 *Daily Token Usage:*\n\n"
+ .. "• Used today: %d\n"
+ .. "• Daily limit: %d\n"
+ .. "• Percentage: %s%%\n\n"
+ .. "Stats reset at midnight UTC.",
+ daily_usage, TOKEN_LIMIT_PER_DAY, pct
+ ),
+ msg.message_id
+ )
+end
+
+local function handle_text(msg, clean_text)
+ local user_id = msg.from.id
+ local chat_id = msg.chat.id
+ local text = clean_text or msg.text
+ info(string.format("handle_text user=%d chat=%d text=%q",
+ user_id, chat_id, text:sub(1, 80)))
+
+ if not check_rate(user_id) then
+ send_message(chat_id, "⏳ *Too many requests!* Please wait 1 minute.", msg.message_id)
+ return
+ end
+
+ tg_call("sendChatAction", { chat_id = chat_id, action = "typing" })
+
+ local data, api_err = call_deepseek(user_id, text)
+ if api_err then
+ err("DeepSeek error user=" .. user_id .. ": " .. api_err)
+ send_message(chat_id, "❌ *Error:* " .. api_err, msg.message_id)
+ return
+ end
+
+ local answer = data.choices[1].message.content
+ send_message(chat_id, answer, msg.message_id)
+end
+
+-- ===== manager =====
+local function dispatch(msg)
+ if not msg then dbg("dispatch: nil message") return end
+ if not msg.text then dbg("dispatch: no text") return end
+ dbg(string.format("dispatch: chat_type=%s text=%q",
+ tostring(msg.chat and msg.chat.type), msg.text:sub(1, 80)))
+
+ local text = msg.text
+
+ -- commands run any
+ if text == "/start" or text:find("^/start@") then handle_start(msg)
+ elseif text == "/clear" or text:find("^/clear@") then handle_clear(msg)
+ elseif text == "/history" or text:find("^/history@") then handle_history(msg)
+ elseif text == "/tokens" or text:find("^/tokens@") then handle_tokens(msg)
+ elseif text:sub(1,1) ~= "/" then
+ -- for standart msg — check public filter
+ local should_reply, clean_text = group_filter(msg)
+ if should_reply then
+ handle_text(msg, clean_text)
+ end
+ end
+end
+
+-- ===== LONG POLLING =====
+local function run()
+ info("Lua version: " .. _VERSION)
+ info("Token configured: " .. (TELEGRAM_BOT_TOKEN ~= "YOUR_BOT_TOKEN" and "YES" or "NO"))
+ info("DeepSeek key configured: " .. (DEEPSEEK_API_KEY ~= "YOUR_DEEPSEEK_KEY" and "YES" or "NO"))
+ info("Debug mode: " .. (DEBUG and "ON" or "OFF"))
+ info("Proxy: " .. (PROXY_URL ~= "" and PROXY_URL or "none"))
+ info("Group mention only: " .. (GROUP_MENTION_ONLY and "ON" or "OFF"))
+
+ local test = io.popen("curl --version 2>&1 | head -1")
+ if test then info("curl: " .. (test:read("*l") or "?")); test:close() end
+
+ info("Checking token via getMe...")
+ local me = tg_call("getMe", {})
+ if me and me.ok then
+ BOT_USERNAME = me.result.username or ""
+ info("Bot: @" .. BOT_USERNAME)
+ else
+ err("getMe failed — проверь TELEGRAM_BOT_TOKEN!")
+ os.exit(1)
+ end
+
+ init_database()
+ info("Bot started. Long polling...")
+
+ local offset = 0
+ while true do
+ dbg("getUpdates offset=" .. offset)
+ local res = tg_call("getUpdates", {
+ offset = offset,
+ timeout = 30,
+ allowed_updates = { "message" },
+ })
+
+ if res and res.ok and res.result then
+ local count = #res.result
+ if count > 0 then info("getUpdates: " .. count .. " update(s)") end
+ for _, update in ipairs(res.result) do
+ offset = update.update_id + 1
+ dbg("update_id=" .. update.update_id)
+ local ok, e = pcall(dispatch, update.message)
+ if not ok then err("dispatch error: " .. tostring(e)) end
+ end
+ else
+ err("getUpdates failed, sleeping 5s...")
+ if res then err("Response: " .. json.encode(res)) end
+ socket.sleep(5)
+ end
+ end
+end
+
+run()
diff --git a/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js b/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js
index becbd663..cb4b4755 100644
--- a/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js
+++ b/luci-app-fchomo/htdocs/luci-static/resources/fchomo.js
@@ -118,7 +118,7 @@ const glossary = {
prefmt: '%s_nodedomain',
field: 'proxy-server-nameserver-policy',
},
- node: {
+ node: { // outbound
prefmt: 'node_%s',
field: 'proxies',
},
@@ -207,13 +207,21 @@ const outbound_type = [
const preset_outbound = {
full: [
+ ['DIRECT'], // built-in Outbound
+ ['REJECT'], // built-in Outbound
+ ['REJECT-DROP'], // built-in Outbound
+ ['PASS'], // built-in Outbound
+ ['PASS-RULE'], // built-in Outbound
+ ['COMPATIBLE'], // built-in Outbound
+ ['GLOBAL'] // built-in Proxy Group
+ ],
+ proxy: [ // built-in Outbound
['DIRECT'],
['REJECT'],
['REJECT-DROP'],
['PASS'],
['PASS-RULE'],
- ['COMPATIBLE'],
- ['GLOBAL']
+ ['COMPATIBLE']
],
direct: [
['', _('null')],
diff --git a/luci-app-fchomo/htdocs/luci-static/resources/fchomo/listeners.js b/luci-app-fchomo/htdocs/luci-static/resources/fchomo/listeners.js
index 2da6c140..0fa826a3 100644
--- a/luci-app-fchomo/htdocs/luci-static/resources/fchomo/listeners.js
+++ b/luci-app-fchomo/htdocs/luci-static/resources/fchomo/listeners.js
@@ -295,6 +295,7 @@ function renderListeners(s, uciconfig, isClient) {
]
o = s.taboption('field_general', hm.GenValue, 'sudoku_key', _('Key'),
_('The ED25519 master public key or UUID generated by Sudoku.'));
+ o.password = true;
o.hm_options = {
type: sudoku_keytypes[0][0],
callback: function(result) {
diff --git a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/client.js b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/client.js
index 9a3d9138..b5a18bfc 100644
--- a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/client.js
+++ b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/client.js
@@ -13,7 +13,7 @@ const parseProxyGroupYaml = hm.parseYaml.extend({
if (!cfg.type)
return null;
- // key mapping // 2026/06/06
+ // key mapping // 2026/06/10
let config = hm.removeBlankAttrs({
id: this.id,
label: this.label,
@@ -1083,12 +1083,12 @@ return view.extend({
so.default = so.disabled;
so.editable = true;
- so = ss.taboption('field_general', form.ListValue, 'empty_fallback', _('Empty fallback'));
- so.default = 'COMPATIBLE';
- hm.preset_outbound.full.forEach((res) => {
+ so = ss.taboption('field_general', form.Value, 'empty_fallback', _('Empty fallback'));
+ so.default = ''; // COMPATIBLE
+ hm.preset_outbound.proxy.forEach((res) => {
so.value.apply(so, res);
})
- so.load = L.bind(hm.loadProxyGroupLabel, so, hm.preset_outbound.full);
+ so.load = L.bind(hm.loadNodeLabel, so, hm.preset_outbound.proxy);
so.modalonly = true;
/* Override fields */
diff --git a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js
index 8ed36af7..287e2072 100644
--- a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js
+++ b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/global.js
@@ -385,6 +385,24 @@ return view.extend({
so = ss.option(form.DummyValue, '_china_list_version', _('China list version'));
so.cfgvalue = function() { return renderResVersion.call(this, null, 'china_list') };
+
+ so = ss.option(form.Value, 'github_token', _('GitHub token'));
+ so.password = true;
+ so.renderWidget = function(/* ... */) {
+ let node = form.Value.prototype.renderWidget.apply(this, arguments);
+
+ (node.querySelector('.control-group') || node).appendChild(E('button', {
+ class: 'cbi-button cbi-button-apply',
+ title: _('Save'),
+ click: ui.createHandlerFn(this, () => {
+ return this.map.save(null, true).then(() => {
+ ui.changes.apply(true);
+ });
+ }, this.option)
+ }, [ _('Save') ]));
+
+ return node;
+ }
/* Overview END */
/* General START */
diff --git a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js
index cb252daa..41ff3749 100644
--- a/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js
+++ b/luci-app-fchomo/htdocs/luci-static/resources/view/fchomo/node.js
@@ -14,6 +14,16 @@ document.querySelector('head').appendChild(E('link', {
'href': L.resource('view/fchomo/node.css')
}));
+const age_encryption = {
+ keypairs: {
+ types: [
+ ['age-x25519', _('age-x25519')],
+ ['age-mlkem768-x25519', _('age-mlkem768-x25519')],
+ ['age-convert', _('Derive from priv-key')]
+ ]
+ }
+};
+
const CBIBubblesValue = form.DummyValue.extend({
__name__: 'CBI.BubblesValue',
@@ -94,7 +104,7 @@ const parseProviderYaml = hm.parseYaml.extend({
if (!cfg.type)
return null;
- // key mapping // 2026/01/17
+ // key mapping // 2026/06/06
let config = hm.removeBlankAttrs({
id: this.id,
label: this.label,
@@ -107,6 +117,7 @@ const parseProviderYaml = hm.parseYaml.extend({
size_limit: cfg["size-limit"],
interval: cfg.interval,
proxy: cfg.proxy ? hm.preset_outbound.full.map(([key, label]) => key).includes(cfg.proxy) ? cfg.proxy : this.calcID(hm.glossary["proxy_group"].field, cfg.proxy) : null,
+ age_private_key: cfg["age-secret-key"],
header: cfg.header ? JSON.stringify(cfg.header, null, 2) : null, // string: object
/* Health fields */
health_enable: this.bool2str(this.jq(cfg, "health-check.enable")), // bool
@@ -1519,6 +1530,7 @@ return view.extend({
' interval: 3600\n' +
' proxy: DIRECT\n' +
' size-limit: 0\n' +
+ ' age-secret-key: AGE-SECRET-KEY-1ZTQLLN0A4U3ZTT3DCZKYN0CGZEZQLWX2DFTXUWMT4ZHR0N2UG6LSW9NT0N\n' +
' header:\n' +
' User-Agent:\n' +
' - "mihomo/1.18.3"\n' +
@@ -1526,6 +1538,8 @@ return view.extend({
" - 'application/vnd.github.v3.raw'\n" +
' Authorization:\n' +
" - 'token 1231231'\n" +
+ ' X-Age-Public-Key:\n' +
+ " - 'age1xh86kh9v23vattr58yedspm3f57sxvnswu9krr6ns438amekx5gsd09uma'\n" +
' health-check:\n' +
' enable: true\n' +
' interval: 600\n' +
@@ -1701,9 +1715,74 @@ return view.extend({
//so.editable = true;
so.depends('type', 'http');
+ so = ss.taboption('field_general', hm.GenValue, 'age_private_key', _('age private key'));
+ so.password = true;
+ so.hm_options = {
+ type: age_encryption.keypairs.types[0][0],
+ params: '',
+ callback: function(result) {
+ const section_id = this.section.section;
+
+ let header = {};
+ try {
+ header = JSON.parse(this.section.formvalue(section_id, 'header').trim());
+ } catch {}
+
+ header['X-Age-Public-Key'] = [result.public_key].filter(Boolean);
+
+ return [
+ [this.option, this.hm_options.params || result.private_key],
+ ['age_public_key', result.public_key],
+ ['header', JSON.stringify(header, null, 2)]
+ ]
+ }
+ }
+ so.renderWidget = function(section_id, option_index, cfgvalue) {
+ let node = form.Value.prototype.renderWidget.call(this, section_id, option_index, cfgvalue);
+ const cbid = this.cbid(section_id) + '._keytype_select';
+ const selected = this.hm_options.type;
+
+ let selectEl = E('select', {
+ id: cbid,
+ class: 'cbi-input-select',
+ style: 'width: 10em',
+ });
+
+ age_encryption.keypairs.types.forEach(([k, v]) => {
+ selectEl.appendChild(E('option', {
+ 'value': k,
+ 'selected': (k === selected) ? '' : null
+ }, [ v ]));
+ });
+
+ node.appendChild(E('div', { 'class': 'control-group' }, [
+ selectEl,
+ E('button', {
+ class: 'cbi-button cbi-button-add',
+ click: ui.createHandlerFn(this, () => {
+ this.hm_options.type = document.getElementById(cbid).value;
+ if (this.hm_options.type === 'age-convert')
+ this.hm_options.params = this.formvalue(section_id);
+ else
+ this.hm_options.params = '';
+
+ return hm.handleGenKey.call(this, this.hm_options);
+ })
+ }, [ _('Generate') ])
+ ]));
+
+ return node;
+ }
+ so.depends('type', 'http');
+ so.modalonly = true;
+
+ so = ss.taboption('field_general', hm.CopyValue, 'age_public_key', _('age public key'));
+ so.depends('type', 'http');
+ so.modalonly = true;
+
so = ss.taboption('field_general', hm.TextValue, 'header', _('HTTP header'),
_('Custom HTTP header.'));
- so.placeholder = '{\n "User-Agent": [\n "mihomo/1.18.3"\n ],\n "Accept": [\n //"application/vnd.github.v3.raw"\n ],\n "Authorization": [\n //"token 1231231"\n ]\n}';
+ so.placeholder = '{\n "User-Agent": [\n "mihomo/1.18.3"\n ],\n "Accept": [\n //"application/vnd.github.v3.raw"\n ],\n "Authorization": [\n //"token 1231231"\n ]\n "X-Age-Public-Key": [\n //"age1xh86kh9v23vattr58yedspm3f57sxvnswu9krr6ns438amekx5gsd09uma"\n ]\n}';
so.validate = hm.validateJson;
so.depends('type', 'http');
so.modalonly = true;
diff --git a/luci-app-fchomo/po/templates/fchomo.pot b/luci-app-fchomo/po/templates/fchomo.pot
index 7103696d..1dce0403 100644
--- a/luci-app-fchomo/po/templates/fchomo.pot
+++ b/luci-app-fchomo/po/templates/fchomo.pot
@@ -5,30 +5,30 @@ msgstr "Content-Type: text/plain; charset=UTF-8"
msgid "%s log"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:242
-#: htdocs/luci-static/resources/fchomo.js:243
-#: htdocs/luci-static/resources/fchomo.js:244
-#: htdocs/luci-static/resources/fchomo.js:245
-#: htdocs/luci-static/resources/fchomo.js:246
-#: htdocs/luci-static/resources/fchomo.js:247
+#: htdocs/luci-static/resources/fchomo.js:250
+#: htdocs/luci-static/resources/fchomo.js:251
+#: htdocs/luci-static/resources/fchomo.js:252
+#: htdocs/luci-static/resources/fchomo.js:253
+#: htdocs/luci-static/resources/fchomo.js:254
+#: htdocs/luci-static/resources/fchomo.js:255
msgid "%s ports"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:607
-#: htdocs/luci-static/resources/fchomo.js:610
+#: htdocs/luci-static/resources/fchomo.js:615
+#: htdocs/luci-static/resources/fchomo.js:618
#: htdocs/luci-static/resources/view/fchomo/client.js:316
msgid "(Imported)"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:990
-#: htdocs/luci-static/resources/fchomo/listeners.js:998
-#: htdocs/luci-static/resources/fchomo/listeners.js:1007
-#: htdocs/luci-static/resources/view/fchomo/global.js:546
-#: htdocs/luci-static/resources/view/fchomo/global.js:552
-#: htdocs/luci-static/resources/view/fchomo/node.js:1113
-#: htdocs/luci-static/resources/view/fchomo/node.js:1119
-#: htdocs/luci-static/resources/view/fchomo/node.js:1127
-#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/fchomo/listeners.js:991
+#: htdocs/luci-static/resources/fchomo/listeners.js:999
+#: htdocs/luci-static/resources/fchomo/listeners.js:1008
+#: htdocs/luci-static/resources/view/fchomo/global.js:564
+#: htdocs/luci-static/resources/view/fchomo/global.js:570
+#: htdocs/luci-static/resources/view/fchomo/node.js:1124
+#: htdocs/luci-static/resources/view/fchomo/node.js:1130
+#: htdocs/luci-static/resources/view/fchomo/node.js:1138
+#: htdocs/luci-static/resources/view/fchomo/node.js:1144
msgid "(mTLS)"
msgstr ""
@@ -39,19 +39,19 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1058
#: htdocs/luci-static/resources/view/fchomo/client.js:1059
#: htdocs/luci-static/resources/view/fchomo/client.js:1288
-#: htdocs/luci-static/resources/view/fchomo/node.js:1916
-#: htdocs/luci-static/resources/view/fchomo/node.js:1922
-#: htdocs/luci-static/resources/view/fchomo/node.js:1936
-#: htdocs/luci-static/resources/view/fchomo/node.js:1942
+#: htdocs/luci-static/resources/view/fchomo/node.js:1993
+#: htdocs/luci-static/resources/view/fchomo/node.js:1999
+#: htdocs/luci-static/resources/view/fchomo/node.js:2013
+#: htdocs/luci-static/resources/view/fchomo/node.js:2019
msgid "-- Please choose --"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:394
+#: htdocs/luci-static/resources/fchomo.js:402
msgid "0-RTT reuse."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:391
-#: htdocs/luci-static/resources/fchomo.js:395
+#: htdocs/luci-static/resources/fchomo.js:399
+#: htdocs/luci-static/resources/fchomo.js:403
msgid "1-RTT only."
msgstr ""
@@ -59,15 +59,15 @@ msgstr ""
msgid "163Music"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:341
+#: htdocs/luci-static/resources/fchomo.js:349
msgid "2022-blake3-aes-128-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:342
+#: htdocs/luci-static/resources/fchomo.js:350
msgid "2022-blake3-aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:343
+#: htdocs/luci-static/resources/fchomo.js:351
msgid "2022-blake3-chacha20-poly1305"
msgstr ""
@@ -75,72 +75,72 @@ msgstr ""
msgid "0 or 1 only."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:968
-#: htdocs/luci-static/resources/fchomo/listeners.js:983
-#: htdocs/luci-static/resources/fchomo/listeners.js:1008
-#: htdocs/luci-static/resources/view/fchomo/node.js:1120
-#: htdocs/luci-static/resources/view/fchomo/node.js:1134
+#: htdocs/luci-static/resources/fchomo/listeners.js:969
+#: htdocs/luci-static/resources/fchomo/listeners.js:984
+#: htdocs/luci-static/resources/fchomo/listeners.js:1009
+#: htdocs/luci-static/resources/view/fchomo/node.js:1131
+#: htdocs/luci-static/resources/view/fchomo/node.js:1145
msgid "Save your configuration before uploading files!"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:286
-#: htdocs/luci-static/resources/view/fchomo/node.js:391
+#: htdocs/luci-static/resources/view/fchomo/node.js:402
msgid ""
"A base64 string is used to fine-tune network behavior.
Please refer to "
"the document"
"a>."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:602
+#: htdocs/luci-static/resources/view/fchomo/global.js:620
msgid "API"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:552
+#: htdocs/luci-static/resources/view/fchomo/global.js:570
msgid "API Client Auth Certificate path"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:546
+#: htdocs/luci-static/resources/view/fchomo/global.js:564
msgid "API Client Auth type"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:642
+#: htdocs/luci-static/resources/view/fchomo/global.js:660
msgid "API DoH service"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:596
+#: htdocs/luci-static/resources/view/fchomo/global.js:614
msgid "API ECH config"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:557
+#: htdocs/luci-static/resources/view/fchomo/global.js:575
msgid "API ECH key"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:633
+#: htdocs/luci-static/resources/view/fchomo/global.js:651
msgid "API HTTP port"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:637
+#: htdocs/luci-static/resources/view/fchomo/global.js:655
msgid "API HTTPS port"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:538
+#: htdocs/luci-static/resources/view/fchomo/global.js:556
msgid "API TLS certificate path"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:542
+#: htdocs/luci-static/resources/view/fchomo/global.js:560
msgid "API TLS private key path"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:646
+#: htdocs/luci-static/resources/view/fchomo/global.js:664
msgid "API secret"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:370
-#: htdocs/luci-static/resources/fchomo/listeners.js:372
+#: htdocs/luci-static/resources/fchomo/listeners.js:371
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/view/fchomo/node.js:420
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:431
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
msgid "ASCII data stream"
msgstr ""
@@ -148,8 +148,8 @@ msgstr ""
msgid "ASN version"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:723
-#: htdocs/luci-static/resources/view/fchomo/global.js:773
+#: htdocs/luci-static/resources/view/fchomo/global.js:741
+#: htdocs/luci-static/resources/view/fchomo/global.js:791
msgid "Access Control"
msgstr ""
@@ -165,7 +165,7 @@ msgstr ""
msgid "Add a DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:217
+#: htdocs/luci-static/resources/view/fchomo/node.js:228
msgid "Add a Node"
msgstr ""
@@ -173,11 +173,11 @@ msgstr ""
msgid "Add a inbound"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1504
+#: htdocs/luci-static/resources/view/fchomo/node.js:1515
msgid "Add a provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1892
+#: htdocs/luci-static/resources/view/fchomo/node.js:1969
msgid "Add a proxy chain"
msgstr ""
@@ -201,11 +201,11 @@ msgstr ""
msgid "Add a sub rule"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1714
+#: htdocs/luci-static/resources/view/fchomo/node.js:1791
msgid "Add prefix"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1718
+#: htdocs/luci-static/resources/view/fchomo/node.js:1795
msgid "Add suffix"
msgstr ""
@@ -214,7 +214,7 @@ msgstr ""
msgid "Address"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:398
+#: htdocs/luci-static/resources/fchomo.js:406
msgid ""
"After the 1-RTT client/server hello, padding randomly 111-1111 bytes with "
"100% probability."
@@ -224,31 +224,31 @@ msgstr ""
msgid "Aggressive"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:517
+#: htdocs/luci-static/resources/view/fchomo/global.js:535
msgid "Aging time of NAT map maintained by client."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:776
-#: htdocs/luci-static/resources/view/fchomo/global.js:839
-#: htdocs/luci-static/resources/view/fchomo/global.js:873
+#: htdocs/luci-static/resources/view/fchomo/global.js:794
+#: htdocs/luci-static/resources/view/fchomo/global.js:857
+#: htdocs/luci-static/resources/view/fchomo/global.js:891
msgid "All allowed"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:239
+#: htdocs/luci-static/resources/fchomo.js:247
msgid "All ports"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:629
+#: htdocs/luci-static/resources/view/fchomo/global.js:647
msgid ""
"Allow access from private network.To access the API on a private "
"network from a public website, it must be enabled."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:895
+#: htdocs/luci-static/resources/fchomo/listeners.js:896
msgid "Allow insecure connections"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:787
+#: htdocs/luci-static/resources/view/fchomo/node.js:798
msgid "Allowed IPs"
msgstr ""
@@ -260,8 +260,8 @@ msgstr ""
msgid "Already in updating."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:542
-#: htdocs/luci-static/resources/view/fchomo/node.js:657
+#: htdocs/luci-static/resources/fchomo/listeners.js:543
+#: htdocs/luci-static/resources/view/fchomo/node.js:668
msgid "Alter ID"
msgstr ""
@@ -274,29 +274,29 @@ msgstr ""
msgid "Application version"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:801
+#: htdocs/luci-static/resources/view/fchomo/global.js:819
msgid "As the TOP upstream of dnsmasq"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:802
-#: htdocs/luci-static/resources/view/fchomo/global.js:809
+#: htdocs/luci-static/resources/view/fchomo/global.js:820
+#: htdocs/luci-static/resources/view/fchomo/global.js:827
msgid "As the TOP upstream of dnsmasq."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:492
+#: htdocs/luci-static/resources/fchomo/listeners.js:493
msgid "Auth timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:679
+#: htdocs/luci-static/resources/view/fchomo/node.js:690
msgid "Authenticated length"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:439
-#: htdocs/luci-static/resources/fchomo/listeners.js:1162
-#: htdocs/luci-static/resources/view/fchomo/global.js:405
-#: htdocs/luci-static/resources/view/fchomo/node.js:471
-#: htdocs/luci-static/resources/view/fchomo/node.js:495
-#: htdocs/luci-static/resources/view/fchomo/node.js:1315
+#: htdocs/luci-static/resources/fchomo/listeners.js:440
+#: htdocs/luci-static/resources/fchomo/listeners.js:1163
+#: htdocs/luci-static/resources/view/fchomo/global.js:423
+#: htdocs/luci-static/resources/view/fchomo/node.js:482
+#: htdocs/luci-static/resources/view/fchomo/node.js:506
+#: htdocs/luci-static/resources/view/fchomo/node.js:1326
msgid "Auto"
msgstr ""
@@ -312,8 +312,8 @@ msgstr ""
msgid "Auto update resources."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:628
-#: htdocs/luci-static/resources/view/fchomo/node.js:884
+#: htdocs/luci-static/resources/fchomo/listeners.js:629
+#: htdocs/luci-static/resources/view/fchomo/node.js:895
msgid "BBR profile"
msgstr ""
@@ -321,15 +321,15 @@ msgstr ""
msgid "Baidu"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:694
+#: htdocs/luci-static/resources/view/fchomo/node.js:705
msgid "Base64 encoded ECDSA private key on the NIST P-256 curve."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:702
+#: htdocs/luci-static/resources/view/fchomo/node.js:713
msgid "Base64 encoded ECDSA public key on the NIST P-256 curve."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:499
+#: htdocs/luci-static/resources/view/fchomo/global.js:517
msgid "Based on google/gvisor."
msgstr ""
@@ -346,23 +346,23 @@ msgstr ""
msgid "Binary mrs"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:737
-#: htdocs/luci-static/resources/view/fchomo/node.js:1474
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/global.js:755
+#: htdocs/luci-static/resources/view/fchomo/node.js:1485
+#: htdocs/luci-static/resources/view/fchomo/node.js:1867
msgid "Bind interface"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1475
-#: htdocs/luci-static/resources/view/fchomo/node.js:1791
+#: htdocs/luci-static/resources/view/fchomo/node.js:1486
+#: htdocs/luci-static/resources/view/fchomo/node.js:1868
msgid "Bind outbound interface."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:738
+#: htdocs/luci-static/resources/view/fchomo/global.js:756
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:778
+#: htdocs/luci-static/resources/view/fchomo/global.js:796
msgid "Black list"
msgstr ""
@@ -387,52 +387,52 @@ msgstr ""
msgid "BundleMRS version"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:840
+#: htdocs/luci-static/resources/view/fchomo/global.js:858
msgid "Bypass CN"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:874
+#: htdocs/luci-static/resources/view/fchomo/global.js:892
msgid "Bypass DSCP"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:437
#: htdocs/luci-static/resources/fchomo/listeners.js:438
#: htdocs/luci-static/resources/fchomo/listeners.js:439
#: htdocs/luci-static/resources/fchomo/listeners.js:440
-#: htdocs/luci-static/resources/view/fchomo/node.js:469
-#: htdocs/luci-static/resources/view/fchomo/node.js:470
-#: htdocs/luci-static/resources/view/fchomo/node.js:471
-#: htdocs/luci-static/resources/view/fchomo/node.js:472
+#: htdocs/luci-static/resources/fchomo/listeners.js:441
+#: htdocs/luci-static/resources/view/fchomo/node.js:480
+#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:482
+#: htdocs/luci-static/resources/view/fchomo/node.js:483
msgid "CDN support"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:624
+#: htdocs/luci-static/resources/view/fchomo/global.js:642
msgid "CORS Allow origins"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:628
+#: htdocs/luci-static/resources/view/fchomo/global.js:646
msgid "CORS Allow private network"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:625
+#: htdocs/luci-static/resources/view/fchomo/global.js:643
msgid "CORS allowed origins, * will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:723
+#: htdocs/luci-static/resources/fchomo.js:731
msgid "Cancel"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1092
+#: htdocs/luci-static/resources/view/fchomo/node.js:1103
msgid "Cert fingerprint"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1093
+#: htdocs/luci-static/resources/view/fchomo/node.js:1104
msgid ""
"Certificate fingerprint. Used to implement SSL Pinning and prevent MitM."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:960
-#: htdocs/luci-static/resources/view/fchomo/node.js:1113
+#: htdocs/luci-static/resources/fchomo/listeners.js:961
+#: htdocs/luci-static/resources/view/fchomo/node.js:1124
msgid "Certificate path"
msgstr ""
@@ -462,15 +462,15 @@ msgid "China list version"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:255
-#: htdocs/luci-static/resources/fchomo/listeners.js:353
-#: htdocs/luci-static/resources/view/fchomo/node.js:344
-#: htdocs/luci-static/resources/view/fchomo/node.js:403
-#: htdocs/luci-static/resources/view/fchomo/node.js:663
+#: htdocs/luci-static/resources/fchomo/listeners.js:354
+#: htdocs/luci-static/resources/view/fchomo/node.js:355
+#: htdocs/luci-static/resources/view/fchomo/node.js:414
+#: htdocs/luci-static/resources/view/fchomo/node.js:674
msgid "Chipher"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/view/fchomo/node.js:412
+#: htdocs/luci-static/resources/fchomo/listeners.js:363
+#: htdocs/luci-static/resources/view/fchomo/node.js:423
msgid "Chipher must be enabled if obfuscate downlink is disabled."
msgstr ""
@@ -484,29 +484,29 @@ msgid ""
"to download the latest initial package."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:726
-#: htdocs/luci-static/resources/fchomo/listeners.js:999
-#: htdocs/luci-static/resources/view/fchomo/global.js:553
-#: htdocs/luci-static/resources/view/fchomo/node.js:948
-#: htdocs/luci-static/resources/view/fchomo/node.js:1114
-#: htdocs/luci-static/resources/view/fchomo/node.js:1128
+#: htdocs/luci-static/resources/fchomo/listeners.js:727
+#: htdocs/luci-static/resources/fchomo/listeners.js:1000
+#: htdocs/luci-static/resources/view/fchomo/global.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:959
+#: htdocs/luci-static/resources/view/fchomo/node.js:1125
+#: htdocs/luci-static/resources/view/fchomo/node.js:1139
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:22
msgid "Client"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:998
+#: htdocs/luci-static/resources/fchomo/listeners.js:999
msgid "Client Auth Certificate path"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:990
+#: htdocs/luci-static/resources/fchomo/listeners.js:991
msgid "Client Auth type"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1159
+#: htdocs/luci-static/resources/view/fchomo/node.js:1170
msgid "Client fingerprint"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:349
+#: htdocs/luci-static/resources/fchomo/listeners.js:350
msgid "Client key"
msgstr ""
@@ -518,21 +518,21 @@ msgstr ""
msgid "Collecting data..."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:240
-#: htdocs/luci-static/resources/fchomo.js:241
+#: htdocs/luci-static/resources/fchomo.js:248
+#: htdocs/luci-static/resources/fchomo.js:249
msgid "Common ports (bypass P2P traffic)"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1370
+#: htdocs/luci-static/resources/fchomo.js:1378
msgid "Complete"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1811
msgid "Configuration Items"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:620
-#: htdocs/luci-static/resources/view/fchomo/node.js:876
+#: htdocs/luci-static/resources/fchomo/listeners.js:621
+#: htdocs/luci-static/resources/view/fchomo/node.js:887
msgid "Congestion controller"
msgstr ""
@@ -540,7 +540,7 @@ msgstr ""
msgid "Connection check"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:528
+#: htdocs/luci-static/resources/view/fchomo/node.js:539
msgid "Connection reuse"
msgstr ""
@@ -548,19 +548,19 @@ msgstr ""
msgid "Conservative"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:592
+#: htdocs/luci-static/resources/fchomo.js:600
msgid "Content copied to clipboard!"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:671
-#: htdocs/luci-static/resources/view/fchomo/node.js:1644
-#: htdocs/luci-static/resources/view/fchomo/node.js:1670
+#: htdocs/luci-static/resources/view/fchomo/node.js:1658
+#: htdocs/luci-static/resources/view/fchomo/node.js:1684
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:348
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:374
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1643
+#: htdocs/luci-static/resources/view/fchomo/node.js:1657
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:347
msgid "Contents"
msgstr ""
@@ -569,7 +569,7 @@ msgstr ""
msgid "Contents have been saved."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:594
+#: htdocs/luci-static/resources/fchomo.js:602
msgid "Copy"
msgstr ""
@@ -581,21 +581,21 @@ msgstr ""
msgid "Cron expression"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:892
+#: htdocs/luci-static/resources/view/fchomo/global.js:910
msgid "Custom Direct List"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1782
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:415
msgid "Custom HTTP header."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:910
+#: htdocs/luci-static/resources/view/fchomo/global.js:928
msgid "Custom Proxy List"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:377
-#: htdocs/luci-static/resources/view/fchomo/node.js:427
+#: htdocs/luci-static/resources/fchomo/listeners.js:378
+#: htdocs/luci-static/resources/view/fchomo/node.js:438
msgid "Custom byte layout"
msgstr ""
@@ -613,15 +613,15 @@ msgstr ""
msgid "DNS policy"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:474
+#: htdocs/luci-static/resources/view/fchomo/global.js:492
msgid "DNS port"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:874
#: htdocs/luci-static/resources/view/fchomo/client.js:1438
#: htdocs/luci-static/resources/view/fchomo/client.js:1447
-#: htdocs/luci-static/resources/view/fchomo/node.js:734
-#: htdocs/luci-static/resources/view/fchomo/node.js:817
+#: htdocs/luci-static/resources/view/fchomo/node.js:745
+#: htdocs/luci-static/resources/view/fchomo/node.js:828
msgid "DNS server"
msgstr ""
@@ -629,7 +629,7 @@ msgstr ""
msgid "DNS settings"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:877
+#: htdocs/luci-static/resources/view/fchomo/global.js:895
msgid "DSCP list"
msgstr ""
@@ -649,62 +649,66 @@ msgstr ""
msgid "Default DNS server"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:788
+#: htdocs/luci-static/resources/view/fchomo/node.js:22
+msgid "Derive from priv-key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:799
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1915
+#: htdocs/luci-static/resources/view/fchomo/node.js:1992
msgid "Destination provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1921
+#: htdocs/luci-static/resources/view/fchomo/node.js:1998
msgid "Destination proxy node"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:228
+#: htdocs/luci-static/resources/view/fchomo/node.js:239
msgid "Dial fields"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1928
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2025
msgid "Different chain head/tail"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:398
+#: htdocs/luci-static/resources/view/fchomo/global.js:416
msgid "Direct"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:780
+#: htdocs/luci-static/resources/view/fchomo/global.js:798
msgid "Direct IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:783
+#: htdocs/luci-static/resources/view/fchomo/global.js:801
msgid "Direct IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:786
+#: htdocs/luci-static/resources/view/fchomo/global.js:804
msgid "Direct MAC-s"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:194
-#: htdocs/luci-static/resources/view/fchomo/global.js:406
-#: htdocs/luci-static/resources/view/fchomo/node.js:299
+#: htdocs/luci-static/resources/view/fchomo/global.js:424
+#: htdocs/luci-static/resources/view/fchomo/node.js:310
msgid "Disable"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:714
+#: htdocs/luci-static/resources/view/fchomo/global.js:732
msgid "Disable ECN of quic-go"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:711
+#: htdocs/luci-static/resources/view/fchomo/global.js:729
msgid "Disable GSO of quic-go"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:526
+#: htdocs/luci-static/resources/view/fchomo/global.js:544
msgid "Disable ICMP Forwarding"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1033
+#: htdocs/luci-static/resources/view/fchomo/node.js:1044
msgid "Disable SNI"
msgstr ""
@@ -712,7 +716,7 @@ msgstr ""
msgid "Disable UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:708
+#: htdocs/luci-static/resources/view/fchomo/global.js:726
msgid "Disable safe path check"
msgstr ""
@@ -730,29 +734,29 @@ msgstr ""
msgid "Domain"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1034
+#: htdocs/luci-static/resources/view/fchomo/node.js:1045
msgid "Donot send server name in ClientHello."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1587
-#: htdocs/luci-static/resources/view/fchomo/node.js:1106
-#: htdocs/luci-static/resources/view/fchomo/node.js:1774
+#: htdocs/luci-static/resources/view/fchomo/node.js:1117
+#: htdocs/luci-static/resources/view/fchomo/node.js:1851
msgid "Donot verifying server certificate."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1453
+#: htdocs/luci-static/resources/view/fchomo/node.js:1464
msgid "Download bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
+#: htdocs/luci-static/resources/view/fchomo/node.js:1465
msgid "Download bandwidth in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1249
+#: htdocs/luci-static/resources/fchomo.js:1257
msgid "Download failed: %s"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1247
+#: htdocs/luci-static/resources/fchomo.js:1255
msgid "Download successful."
msgstr ""
@@ -760,16 +764,16 @@ msgstr ""
msgid "Dual stack"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1153
+#: htdocs/luci-static/resources/view/fchomo/node.js:1164
msgid "ECH HTTPS record query servername"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1056
-#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/fchomo/listeners.js:1057
+#: htdocs/luci-static/resources/view/fchomo/node.js:1158
msgid "ECH config"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1015
+#: htdocs/luci-static/resources/fchomo/listeners.js:1016
msgid "ECH key"
msgstr ""
@@ -781,15 +785,15 @@ msgstr ""
msgid "EDNS Client Subnet"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:415
+#: htdocs/luci-static/resources/view/fchomo/global.js:433
msgid "ETag support"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1304
msgid "Early Data first packet length limit."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1299
+#: htdocs/luci-static/resources/view/fchomo/node.js:1310
msgid "Early Data header name"
msgstr ""
@@ -797,7 +801,7 @@ msgstr ""
msgid "Edit inbound"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:203
+#: htdocs/luci-static/resources/view/fchomo/node.js:214
msgid "Edit node"
msgstr ""
@@ -805,12 +809,12 @@ msgstr ""
msgid "Edit ruleset"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1655
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:345
msgid "Editer"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:385
+#: htdocs/luci-static/resources/fchomo.js:393
msgid "Eliminate encryption header characteristics"
msgstr ""
@@ -826,85 +830,85 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1503
#: htdocs/luci-static/resources/view/fchomo/client.js:1734
#: htdocs/luci-static/resources/view/fchomo/client.js:1790
-#: htdocs/luci-static/resources/view/fchomo/global.js:404
-#: htdocs/luci-static/resources/view/fchomo/global.js:683
-#: htdocs/luci-static/resources/view/fchomo/node.js:235
-#: htdocs/luci-static/resources/view/fchomo/node.js:1614
-#: htdocs/luci-static/resources/view/fchomo/node.js:1813
-#: htdocs/luci-static/resources/view/fchomo/node.js:1902
+#: htdocs/luci-static/resources/view/fchomo/global.js:422
+#: htdocs/luci-static/resources/view/fchomo/global.js:701
+#: htdocs/luci-static/resources/view/fchomo/node.js:246
+#: htdocs/luci-static/resources/view/fchomo/node.js:1628
+#: htdocs/luci-static/resources/view/fchomo/node.js:1890
+#: htdocs/luci-static/resources/view/fchomo/node.js:1979
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:272
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:572
+#: htdocs/luci-static/resources/view/fchomo/node.js:583
msgid ""
"Enable 0-RTT QUIC connection handshake on the client side. This is not "
"impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:582
msgid "Enable 0-RTT handshake"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:717
+#: htdocs/luci-static/resources/view/fchomo/global.js:735
msgid ""
"Enable IP4P "
"conversion for outbound connections"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1141
+#: htdocs/luci-static/resources/view/fchomo/node.js:1152
msgid "Enable ECH"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1441
+#: htdocs/luci-static/resources/view/fchomo/node.js:1452
msgid "Enable TCP Brutal"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1442
+#: htdocs/luci-static/resources/view/fchomo/node.js:1453
msgid "Enable TCP Brutal congestion control algorithm"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1430
+#: htdocs/luci-static/resources/view/fchomo/node.js:1441
msgid "Enable multiplexing only for TCP."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:423
-#: htdocs/luci-static/resources/view/fchomo/node.js:455
+#: htdocs/luci-static/resources/fchomo/listeners.js:424
+#: htdocs/luci-static/resources/view/fchomo/node.js:466
msgid "Enable obfuscate for downlink"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1424
+#: htdocs/luci-static/resources/view/fchomo/node.js:1435
msgid "Enable padding"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1435
+#: htdocs/luci-static/resources/view/fchomo/node.js:1446
msgid "Enable statistic"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:900
-#: htdocs/luci-static/resources/view/fchomo/node.js:1756
+#: htdocs/luci-static/resources/view/fchomo/node.js:911
+#: htdocs/luci-static/resources/view/fchomo/node.js:1833
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:201
-#: htdocs/luci-static/resources/view/fchomo/node.js:306
+#: htdocs/luci-static/resources/view/fchomo/node.js:317
msgid ""
"Enabling obfuscation will make the server incompatible with standard QUIC "
"connections, losing the ability to masquerade with HTTP/3."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:689
+#: htdocs/luci-static/resources/fchomo/listeners.js:690
msgid "Encryption method"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:701
+#: htdocs/luci-static/resources/view/fchomo/node.js:712
msgid "Endpoint pubkic key"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:522
+#: htdocs/luci-static/resources/view/fchomo/global.js:540
msgid "Endpoint-Independent NAT"
msgstr ""
@@ -923,7 +927,7 @@ msgid ""
"if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1871
+#: htdocs/luci-static/resources/view/fchomo/node.js:1948
msgid "Exclude matched node types."
msgstr ""
@@ -934,7 +938,7 @@ msgid ""
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1171
-#: htdocs/luci-static/resources/view/fchomo/node.js:1864
+#: htdocs/luci-static/resources/view/fchomo/node.js:1941
msgid "Exclude nodes that meet keywords or regexps."
msgstr ""
@@ -943,70 +947,70 @@ msgid "Expand/Collapse result"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:1849
+#: htdocs/luci-static/resources/view/fchomo/node.js:1926
msgid "Expected HTTP code. 204 will be used if empty."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1133
-#: htdocs/luci-static/resources/view/fchomo/node.js:1851
+#: htdocs/luci-static/resources/view/fchomo/node.js:1928
msgid "Expected status"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:442
-#: htdocs/luci-static/resources/fchomo.js:445
-#: htdocs/luci-static/resources/fchomo.js:448
-#: htdocs/luci-static/resources/fchomo.js:1387
+#: htdocs/luci-static/resources/fchomo.js:450
+#: htdocs/luci-static/resources/fchomo.js:453
+#: htdocs/luci-static/resources/fchomo.js:456
#: htdocs/luci-static/resources/fchomo.js:1395
#: htdocs/luci-static/resources/fchomo.js:1403
-#: htdocs/luci-static/resources/fchomo.js:1426
-#: htdocs/luci-static/resources/fchomo.js:1429
-#: htdocs/luci-static/resources/fchomo.js:1436
-#: htdocs/luci-static/resources/fchomo.js:1452
-#: htdocs/luci-static/resources/fchomo.js:1461
-#: htdocs/luci-static/resources/fchomo.js:1473
-#: htdocs/luci-static/resources/fchomo.js:1476
-#: htdocs/luci-static/resources/fchomo.js:1486
-#: htdocs/luci-static/resources/fchomo.js:1498
-#: htdocs/luci-static/resources/fchomo.js:1501
-#: htdocs/luci-static/resources/fchomo.js:1511
-#: htdocs/luci-static/resources/fchomo.js:1521
-#: htdocs/luci-static/resources/fchomo.js:1556
-#: htdocs/luci-static/resources/fchomo.js:1558
-#: htdocs/luci-static/resources/fchomo.js:1571
-#: htdocs/luci-static/resources/fchomo.js:1577
-#: htdocs/luci-static/resources/fchomo.js:1584
-#: htdocs/luci-static/resources/fchomo.js:1593
-#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/fchomo/listeners.js:409
-#: htdocs/luci-static/resources/fchomo/listeners.js:718
-#: htdocs/luci-static/resources/fchomo/listeners.js:749
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo.js:1411
+#: htdocs/luci-static/resources/fchomo.js:1434
+#: htdocs/luci-static/resources/fchomo.js:1437
+#: htdocs/luci-static/resources/fchomo.js:1444
+#: htdocs/luci-static/resources/fchomo.js:1460
+#: htdocs/luci-static/resources/fchomo.js:1469
+#: htdocs/luci-static/resources/fchomo.js:1481
+#: htdocs/luci-static/resources/fchomo.js:1484
+#: htdocs/luci-static/resources/fchomo.js:1494
+#: htdocs/luci-static/resources/fchomo.js:1506
+#: htdocs/luci-static/resources/fchomo.js:1509
+#: htdocs/luci-static/resources/fchomo.js:1519
+#: htdocs/luci-static/resources/fchomo.js:1529
+#: htdocs/luci-static/resources/fchomo.js:1564
+#: htdocs/luci-static/resources/fchomo.js:1566
+#: htdocs/luci-static/resources/fchomo.js:1579
+#: htdocs/luci-static/resources/fchomo.js:1585
+#: htdocs/luci-static/resources/fchomo.js:1592
+#: htdocs/luci-static/resources/fchomo.js:1601
+#: htdocs/luci-static/resources/fchomo/listeners.js:363
+#: htdocs/luci-static/resources/fchomo/listeners.js:410
+#: htdocs/luci-static/resources/fchomo/listeners.js:719
+#: htdocs/luci-static/resources/fchomo/listeners.js:750
+#: htdocs/luci-static/resources/fchomo/listeners.js:851
#: htdocs/luci-static/resources/view/fchomo/client.js:69
#: htdocs/luci-static/resources/view/fchomo/client.js:1020
#: htdocs/luci-static/resources/view/fchomo/client.js:1518
-#: htdocs/luci-static/resources/view/fchomo/global.js:883
-#: htdocs/luci-static/resources/view/fchomo/node.js:412
-#: htdocs/luci-static/resources/view/fchomo/node.js:448
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
-#: htdocs/luci-static/resources/view/fchomo/node.js:971
-#: htdocs/luci-static/resources/view/fchomo/node.js:1098
-#: htdocs/luci-static/resources/view/fchomo/node.js:1928
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/global.js:901
+#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/view/fchomo/node.js:459
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
+#: htdocs/luci-static/resources/view/fchomo/node.js:982
+#: htdocs/luci-static/resources/view/fchomo/node.js:1109
+#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2025
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:300
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:314
msgid "Expecting: %s"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1123
-#: htdocs/luci-static/resources/fchomo/listeners.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1215
-#: htdocs/luci-static/resources/view/fchomo/node.js:1223
+#: htdocs/luci-static/resources/fchomo/listeners.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:1131
+#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1226
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "Expecting: only support %s."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:702
+#: htdocs/luci-static/resources/view/fchomo/global.js:720
msgid "Experimental"
msgstr ""
@@ -1021,24 +1025,24 @@ msgstr ""
msgid "Factor"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1328
+#: htdocs/luci-static/resources/fchomo.js:1336
msgid "Failed to execute \"/etc/init.d/fchomo %s %s\" reason: %s"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1281
+#: htdocs/luci-static/resources/fchomo.js:1289
msgid "Failed to generate %s, error: %s."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1693
+#: htdocs/luci-static/resources/fchomo.js:1701
msgid "Failed to upload %s, error: %s."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1712
+#: htdocs/luci-static/resources/fchomo.js:1720
msgid "Failed to upload, error: %s."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:232
-#: htdocs/luci-static/resources/fchomo/listeners.js:448
+#: htdocs/luci-static/resources/fchomo.js:240
+#: htdocs/luci-static/resources/fchomo/listeners.js:449
msgid "Fallback"
msgstr ""
@@ -1052,7 +1056,7 @@ msgid "Fallback filter"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1166
-#: htdocs/luci-static/resources/view/fchomo/node.js:1858
+#: htdocs/luci-static/resources/view/fchomo/node.js:1935
msgid "Filter nodes that meet keywords or regexps."
msgstr ""
@@ -1081,8 +1085,8 @@ msgstr ""
msgid "Firewall"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:534
-#: htdocs/luci-static/resources/view/fchomo/node.js:649
+#: htdocs/luci-static/resources/fchomo/listeners.js:535
+#: htdocs/luci-static/resources/view/fchomo/node.js:660
msgid "Flow"
msgstr ""
@@ -1093,19 +1097,19 @@ msgid ""
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1132
-#: htdocs/luci-static/resources/view/fchomo/node.js:1724
-#: htdocs/luci-static/resources/view/fchomo/node.js:1850
+#: htdocs/luci-static/resources/view/fchomo/node.js:1801
+#: htdocs/luci-static/resources/view/fchomo/node.js:1927
msgid ""
"For format see %s."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:729
-#: htdocs/luci-static/resources/view/fchomo/node.js:812
+#: htdocs/luci-static/resources/view/fchomo/node.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:823
msgid "Force DNS remote resolution."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:662
+#: htdocs/luci-static/resources/view/fchomo/global.js:680
msgid "Forced sniffing domain"
msgstr ""
@@ -1120,7 +1124,7 @@ msgstr ""
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:1259
msgid "GET"
msgstr ""
@@ -1129,39 +1133,40 @@ msgid "GFW list version"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:196
-#: htdocs/luci-static/resources/view/fchomo/node.js:301
+#: htdocs/luci-static/resources/view/fchomo/node.js:312
msgid "Gecko"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:391
+#: htdocs/luci-static/resources/view/fchomo/global.js:409
msgid "General"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1011
-#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:1604
+#: htdocs/luci-static/resources/view/fchomo/node.js:233
+#: htdocs/luci-static/resources/view/fchomo/node.js:1618
msgid "General fields"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:394
+#: htdocs/luci-static/resources/view/fchomo/global.js:412
msgid "General settings"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:543
-#: htdocs/luci-static/resources/fchomo.js:545
-#: htdocs/luci-static/resources/fchomo.js:559
-#: htdocs/luci-static/resources/fchomo.js:561
-#: htdocs/luci-static/resources/fchomo/listeners.js:340
-#: htdocs/luci-static/resources/fchomo/listeners.js:384
-#: htdocs/luci-static/resources/fchomo/listeners.js:386
-#: htdocs/luci-static/resources/fchomo/listeners.js:822
-#: htdocs/luci-static/resources/fchomo/listeners.js:1048
-#: htdocs/luci-static/resources/view/fchomo/global.js:590
+#: htdocs/luci-static/resources/fchomo.js:551
+#: htdocs/luci-static/resources/fchomo.js:553
+#: htdocs/luci-static/resources/fchomo.js:567
+#: htdocs/luci-static/resources/fchomo.js:569
+#: htdocs/luci-static/resources/fchomo/listeners.js:341
+#: htdocs/luci-static/resources/fchomo/listeners.js:385
+#: htdocs/luci-static/resources/fchomo/listeners.js:387
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:1049
+#: htdocs/luci-static/resources/view/fchomo/global.js:608
+#: htdocs/luci-static/resources/view/fchomo/node.js:1769
msgid "Generate"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:509
+#: htdocs/luci-static/resources/view/fchomo/global.js:527
msgid "Generic segmentation offload"
msgstr ""
@@ -1191,16 +1196,20 @@ msgstr ""
msgid "GitHub"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:400
+#: htdocs/luci-static/resources/view/fchomo/global.js:389
+msgid "GitHub token"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:418
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:14
msgid "Global"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:438
+#: htdocs/luci-static/resources/view/fchomo/global.js:456
msgid "Global Authentication"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:673
+#: htdocs/luci-static/resources/view/fchomo/node.js:684
msgid "Global padding"
msgstr ""
@@ -1208,7 +1217,7 @@ msgstr ""
msgid "Google"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:245
+#: htdocs/luci-static/resources/fchomo.js:253
msgid "Google FCM"
msgstr ""
@@ -1222,48 +1231,48 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo.js:153
#: htdocs/luci-static/resources/fchomo.js:188
-#: htdocs/luci-static/resources/fchomo/listeners.js:568
-#: htdocs/luci-static/resources/view/fchomo/node.js:835
-#: htdocs/luci-static/resources/view/fchomo/node.js:1197
+#: htdocs/luci-static/resources/fchomo/listeners.js:569
+#: htdocs/luci-static/resources/view/fchomo/node.js:846
#: htdocs/luci-static/resources/view/fchomo/node.js:1208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1215
+#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1226
msgid "HTTP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:268
-#: htdocs/luci-static/resources/view/fchomo/node.js:1270
-#: htdocs/luci-static/resources/view/fchomo/node.js:1704
+#: htdocs/luci-static/resources/view/fchomo/node.js:279
+#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/view/fchomo/node.js:1781
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:414
msgid "HTTP header"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:429
-#: htdocs/luci-static/resources/view/fchomo/node.js:461
+#: htdocs/luci-static/resources/fchomo/listeners.js:430
+#: htdocs/luci-static/resources/view/fchomo/node.js:472
msgid "HTTP mask"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:434
-#: htdocs/luci-static/resources/view/fchomo/node.js:466
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/fchomo/listeners.js:435
+#: htdocs/luci-static/resources/view/fchomo/node.js:477
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "HTTP mask mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:491
+#: htdocs/luci-static/resources/view/fchomo/node.js:502
msgid "HTTP mask multiplex"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:476
-#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/view/fchomo/node.js:492
msgid "HTTP mask: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/view/fchomo/node.js:1258
msgid "HTTP request method"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:444
-#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/fchomo/listeners.js:445
+#: htdocs/luci-static/resources/view/fchomo/node.js:498
msgid "HTTP root path"
msgstr ""
@@ -1277,25 +1286,25 @@ msgid ""
"returned if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1198
#: htdocs/luci-static/resources/view/fchomo/node.js:1209
-#: htdocs/luci-static/resources/view/fchomo/node.js:1216
+#: htdocs/luci-static/resources/view/fchomo/node.js:1220
+#: htdocs/luci-static/resources/view/fchomo/node.js:1227
msgid "HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:858
+#: htdocs/luci-static/resources/view/fchomo/global.js:876
msgid "Handle domain"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:383
+#: htdocs/luci-static/resources/view/fchomo/node.js:394
msgid "Handshake mode"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:581
+#: htdocs/luci-static/resources/fchomo/listeners.js:582
msgid "Handshake target that supports TLS 1.3"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:416
+#: htdocs/luci-static/resources/fchomo/listeners.js:417
msgid "Handshake timeout"
msgstr ""
@@ -1303,36 +1312,36 @@ msgstr ""
msgid "Header to read real client IP from (e.g. X-Forwarded-For)"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:751
msgid "Health check"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1101
-#: htdocs/luci-static/resources/view/fchomo/node.js:1818
+#: htdocs/luci-static/resources/view/fchomo/node.js:1895
msgid "Health check URL"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1848
+#: htdocs/luci-static/resources/view/fchomo/node.js:1925
msgid "Health check expected status"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1110
-#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1905
msgid "Health check interval"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1117
-#: htdocs/luci-static/resources/view/fchomo/node.js:1835
+#: htdocs/luci-static/resources/view/fchomo/node.js:1912
msgid "Health check timeout"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1013
-#: htdocs/luci-static/resources/view/fchomo/node.js:1606
+#: htdocs/luci-static/resources/view/fchomo/node.js:1620
msgid "Health fields"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:578
+#: htdocs/luci-static/resources/view/fchomo/node.js:589
msgid "Heartbeat interval"
msgstr ""
@@ -1340,20 +1349,20 @@ msgstr ""
msgid "Hidden"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:574
-#: htdocs/luci-static/resources/view/fchomo/node.js:841
+#: htdocs/luci-static/resources/fchomo/listeners.js:575
+#: htdocs/luci-static/resources/view/fchomo/node.js:852
msgid "Host that supports TLS 1.3"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:338
+#: htdocs/luci-static/resources/view/fchomo/node.js:349
msgid "Host-key"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:333
+#: htdocs/luci-static/resources/view/fchomo/node.js:344
msgid "Host-key algorithms"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:492
msgid "Host/SNI override"
msgstr ""
@@ -1372,7 +1381,7 @@ msgid "Hysteria2 Realm"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:121
-#: htdocs/luci-static/resources/view/fchomo/node.js:224
+#: htdocs/luci-static/resources/view/fchomo/node.js:235
msgid "Hysteria2 Realm fields"
msgstr ""
@@ -1385,12 +1394,12 @@ msgstr ""
msgid "IP CIDR"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:540
+#: htdocs/luci-static/resources/view/fchomo/node.js:551
msgid "IP override"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1486
-#: htdocs/luci-static/resources/view/fchomo/node.js:1804
+#: htdocs/luci-static/resources/view/fchomo/node.js:1497
+#: htdocs/luci-static/resources/view/fchomo/node.js:1881
msgid "IP version"
msgstr ""
@@ -1403,7 +1412,7 @@ msgid "IPv6 only"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1389
-#: htdocs/luci-static/resources/view/fchomo/global.js:418
+#: htdocs/luci-static/resources/view/fchomo/global.js:436
msgid "IPv6 support"
msgstr ""
@@ -1411,19 +1420,19 @@ msgstr ""
msgid "Icon"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:622
+#: htdocs/luci-static/resources/view/fchomo/node.js:633
msgid "Idle session check interval"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:629
+#: htdocs/luci-static/resources/view/fchomo/node.js:640
msgid "Idle session timeout"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:485
+#: htdocs/luci-static/resources/fchomo/listeners.js:486
msgid "Idle timeout"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1429
+#: htdocs/luci-static/resources/fchomo.js:1437
msgid "If All ports is selected, uncheck others"
msgstr ""
@@ -1435,7 +1444,7 @@ msgstr ""
msgid "Ignore client bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:728
+#: htdocs/luci-static/resources/fchomo.js:736
msgid "Import"
msgstr ""
@@ -1451,8 +1460,8 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1723
#: htdocs/luci-static/resources/view/fchomo/client.js:1758
#: htdocs/luci-static/resources/view/fchomo/client.js:1779
-#: htdocs/luci-static/resources/view/fchomo/node.js:1511
-#: htdocs/luci-static/resources/view/fchomo/node.js:1592
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
+#: htdocs/luci-static/resources/view/fchomo/node.js:1606
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:249
msgid "Import mihomo config"
@@ -1466,61 +1475,61 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:176
#: htdocs/luci-static/resources/fchomo/listeners.js:182
-#: htdocs/luci-static/resources/view/fchomo/node.js:287
-#: htdocs/luci-static/resources/view/fchomo/node.js:293
-#: htdocs/luci-static/resources/view/fchomo/node.js:1762
-#: htdocs/luci-static/resources/view/fchomo/node.js:1768
+#: htdocs/luci-static/resources/view/fchomo/node.js:298
+#: htdocs/luci-static/resources/view/fchomo/node.js:304
+#: htdocs/luci-static/resources/view/fchomo/node.js:1839
+#: htdocs/luci-static/resources/view/fchomo/node.js:1845
msgid "In Mbps."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1682
+#: htdocs/luci-static/resources/view/fchomo/node.js:1696
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:392
msgid "In bytes. %s will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:579
-#: htdocs/luci-static/resources/view/fchomo/node.js:586
+#: htdocs/luci-static/resources/view/fchomo/node.js:590
+#: htdocs/luci-static/resources/view/fchomo/node.js:597
msgid "In millisecond."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1118
#: htdocs/luci-static/resources/view/fchomo/client.js:1147
-#: htdocs/luci-static/resources/view/fchomo/node.js:1836
+#: htdocs/luci-static/resources/view/fchomo/node.js:1913
msgid "In millisecond. %s will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1339
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
msgid "In milliseconds."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:417
-#: htdocs/luci-static/resources/fchomo/listeners.js:486
-#: htdocs/luci-static/resources/fchomo/listeners.js:493
-#: htdocs/luci-static/resources/view/fchomo/node.js:623
-#: htdocs/luci-static/resources/view/fchomo/node.js:630
-#: htdocs/luci-static/resources/view/fchomo/node.js:1286
+#: htdocs/luci-static/resources/fchomo/listeners.js:418
+#: htdocs/luci-static/resources/fchomo/listeners.js:487
+#: htdocs/luci-static/resources/fchomo/listeners.js:494
+#: htdocs/luci-static/resources/view/fchomo/node.js:634
+#: htdocs/luci-static/resources/view/fchomo/node.js:641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1297
msgid "In seconds."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1111
-#: htdocs/luci-static/resources/view/fchomo/global.js:428
-#: htdocs/luci-static/resources/view/fchomo/global.js:433
-#: htdocs/luci-static/resources/view/fchomo/global.js:518
-#: htdocs/luci-static/resources/view/fchomo/node.js:281
-#: htdocs/luci-static/resources/view/fchomo/node.js:1688
-#: htdocs/luci-static/resources/view/fchomo/node.js:1829
+#: htdocs/luci-static/resources/view/fchomo/global.js:446
+#: htdocs/luci-static/resources/view/fchomo/global.js:451
+#: htdocs/luci-static/resources/view/fchomo/global.js:536
+#: htdocs/luci-static/resources/view/fchomo/node.js:292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1702
+#: htdocs/luci-static/resources/view/fchomo/node.js:1906
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:398
msgid "In seconds. %s will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:738
-#: htdocs/luci-static/resources/view/fchomo/node.js:960
+#: htdocs/luci-static/resources/fchomo/listeners.js:739
+#: htdocs/luci-static/resources/view/fchomo/node.js:971
msgid ""
"In the order of one Padding-Length and one Padding-"
"Interval, infinite concatenation."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:452
+#: htdocs/luci-static/resources/view/fchomo/global.js:470
#: htdocs/luci-static/resources/view/fchomo/inbound.js:28
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:38
msgid "Inbound"
@@ -1554,38 +1563,38 @@ msgstr ""
msgid "Info"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1621
+#: htdocs/luci-static/resources/view/fchomo/node.js:1635
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:288
msgid "Inline"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:730
+#: htdocs/luci-static/resources/view/fchomo/global.js:748
msgid "Interface Control"
msgstr ""
#: htdocs/luci-static/resources/fchomo.js:52
#: htdocs/luci-static/resources/fchomo.js:59
#: htdocs/luci-static/resources/fchomo.js:172
-#: htdocs/luci-static/resources/fchomo.js:367
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
+#: htdocs/luci-static/resources/fchomo.js:375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1855
msgid "Keep default"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "Keep-alive period"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:296
-#: htdocs/luci-static/resources/view/fchomo/node.js:397
+#: htdocs/luci-static/resources/view/fchomo/node.js:408
msgid "Key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:975
-#: htdocs/luci-static/resources/view/fchomo/node.js:1127
+#: htdocs/luci-static/resources/fchomo/listeners.js:976
+#: htdocs/luci-static/resources/view/fchomo/node.js:1138
msgid "Key path"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:757
+#: htdocs/luci-static/resources/fchomo/listeners.js:758
msgid "Keypairs"
msgstr ""
@@ -1596,35 +1605,35 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1498
#: htdocs/luci-static/resources/view/fchomo/client.js:1729
#: htdocs/luci-static/resources/view/fchomo/client.js:1785
-#: htdocs/luci-static/resources/view/fchomo/node.js:230
-#: htdocs/luci-static/resources/view/fchomo/node.js:1609
-#: htdocs/luci-static/resources/view/fchomo/node.js:1897
+#: htdocs/luci-static/resources/view/fchomo/node.js:241
+#: htdocs/luci-static/resources/view/fchomo/node.js:1623
+#: htdocs/luci-static/resources/view/fchomo/node.js:1974
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:267
msgid "Label"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1124
-#: htdocs/luci-static/resources/view/fchomo/node.js:1842
+#: htdocs/luci-static/resources/view/fchomo/node.js:1919
msgid "Lazy"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:436
-#: htdocs/luci-static/resources/view/fchomo/node.js:468
+#: htdocs/luci-static/resources/fchomo/listeners.js:437
+#: htdocs/luci-static/resources/view/fchomo/node.js:479
msgid "Legacy"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:543
+#: htdocs/luci-static/resources/fchomo/listeners.js:544
msgid ""
"Legacy protocol support (VMess MD5 Authentication) is provided for "
"compatibility purposes only, use of alterId > 1 is not recommended."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:497
+#: htdocs/luci-static/resources/view/fchomo/global.js:515
msgid "Less compatibility and sometimes better performance."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:956
-#: htdocs/luci-static/resources/view/fchomo/node.js:1046
+#: htdocs/luci-static/resources/fchomo/listeners.js:957
+#: htdocs/luci-static/resources/view/fchomo/node.js:1057
msgid "List of supported application level protocols, in order of preference."
msgstr ""
@@ -1636,7 +1645,7 @@ msgstr ""
msgid "Listen fields"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:732
+#: htdocs/luci-static/resources/view/fchomo/global.js:750
msgid "Listen interfaces"
msgstr ""
@@ -1645,26 +1654,26 @@ msgstr ""
msgid "Listen port"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:455
+#: htdocs/luci-static/resources/view/fchomo/global.js:473
msgid "Listen ports"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:234
+#: htdocs/luci-static/resources/fchomo.js:242
msgid "Load balance"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1619
+#: htdocs/luci-static/resources/view/fchomo/node.js:1633
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:286
msgid "Local"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:716
-#: htdocs/luci-static/resources/view/fchomo/node.js:759
+#: htdocs/luci-static/resources/view/fchomo/node.js:727
+#: htdocs/luci-static/resources/view/fchomo/node.js:770
msgid "Local IPv6 address"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:708
-#: htdocs/luci-static/resources/view/fchomo/node.js:751
+#: htdocs/luci-static/resources/view/fchomo/node.js:719
+#: htdocs/luci-static/resources/view/fchomo/node.js:762
msgid "Local address"
msgstr ""
@@ -1680,28 +1689,28 @@ msgstr ""
msgid "Log is empty."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:409
+#: htdocs/luci-static/resources/view/fchomo/global.js:427
msgid "Log level"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:371
#: htdocs/luci-static/resources/fchomo/listeners.js:372
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/fchomo/listeners.js:378
-#: htdocs/luci-static/resources/view/fchomo/node.js:421
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
-#: htdocs/luci-static/resources/view/fchomo/node.js:428
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/fchomo/listeners.js:379
+#: htdocs/luci-static/resources/view/fchomo/node.js:432
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
+#: htdocs/luci-static/resources/view/fchomo/node.js:439
msgid "Low-entropy data stream"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:442
+#: htdocs/luci-static/resources/fchomo.js:450
msgid "Lowercase only"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:505
-#: htdocs/luci-static/resources/view/fchomo/node.js:722
-#: htdocs/luci-static/resources/view/fchomo/node.js:805
+#: htdocs/luci-static/resources/view/fchomo/global.js:523
+#: htdocs/luci-static/resources/view/fchomo/node.js:733
+#: htdocs/luci-static/resources/view/fchomo/node.js:816
msgid "MTU"
msgstr ""
@@ -1741,24 +1750,24 @@ msgstr ""
msgid "Match rule set."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1303
msgid "Max Early Data"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:479
-#: htdocs/luci-static/resources/view/fchomo/node.js:565
+#: htdocs/luci-static/resources/fchomo/listeners.js:480
+#: htdocs/luci-static/resources/view/fchomo/node.js:576
msgid "Max UDP relay packet size"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1174
+#: htdocs/luci-static/resources/fchomo/listeners.js:1175
msgid "Max buffered posts"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
msgid "Max concurrency"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
+#: htdocs/luci-static/resources/view/fchomo/node.js:1366
msgid "Max connections"
msgstr ""
@@ -1767,16 +1776,16 @@ msgid "Max count of failures"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:181
-#: htdocs/luci-static/resources/view/fchomo/node.js:292
+#: htdocs/luci-static/resources/view/fchomo/node.js:303
msgid "Max download speed"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1185
-#: htdocs/luci-static/resources/view/fchomo/node.js:1332
+#: htdocs/luci-static/resources/fchomo/listeners.js:1186
+#: htdocs/luci-static/resources/view/fchomo/node.js:1343
msgid "Max each POST bytes"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:592
+#: htdocs/luci-static/resources/view/fchomo/node.js:603
msgid "Max open streams"
msgstr ""
@@ -1788,47 +1797,47 @@ msgstr ""
msgid "Max realms per client IP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1365
+#: htdocs/luci-static/resources/view/fchomo/node.js:1376
msgid "Max request times"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
msgid "Max reusable seconds"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1360
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
msgid "Max reuse times"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:175
-#: htdocs/luci-static/resources/view/fchomo/node.js:286
+#: htdocs/luci-static/resources/view/fchomo/node.js:297
msgid "Max upload speed"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1396
-#: htdocs/luci-static/resources/view/fchomo/node.js:1416
+#: htdocs/luci-static/resources/view/fchomo/node.js:1407
+#: htdocs/luci-static/resources/view/fchomo/node.js:1427
msgid "Maximum connections"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1414
+#: htdocs/luci-static/resources/view/fchomo/node.js:1425
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:401
-#: htdocs/luci-static/resources/view/fchomo/node.js:440
+#: htdocs/luci-static/resources/fchomo/listeners.js:402
+#: htdocs/luci-static/resources/view/fchomo/node.js:451
msgid "Maximum padding rate"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:409
-#: htdocs/luci-static/resources/view/fchomo/node.js:448
+#: htdocs/luci-static/resources/fchomo/listeners.js:410
+#: htdocs/luci-static/resources/view/fchomo/node.js:459
msgid ""
"Maximum padding rate must be greater than or equal to the minimum padding "
"rate."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1413
+#: htdocs/luci-static/resources/view/fchomo/node.js:1424
msgid "Maximum streams"
msgstr ""
@@ -1849,52 +1858,52 @@ msgstr ""
msgid "Mihomo server"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:636
+#: htdocs/luci-static/resources/view/fchomo/node.js:647
msgid "Min of idle sessions to keep"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1338
+#: htdocs/luci-static/resources/view/fchomo/node.js:1349
msgid "Min posts interval"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1405
+#: htdocs/luci-static/resources/view/fchomo/node.js:1416
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:394
-#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/fchomo/listeners.js:395
+#: htdocs/luci-static/resources/view/fchomo/node.js:444
msgid "Minimum padding rate"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1404
-#: htdocs/luci-static/resources/view/fchomo/node.js:1416
+#: htdocs/luci-static/resources/view/fchomo/node.js:1415
+#: htdocs/luci-static/resources/view/fchomo/node.js:1427
msgid "Minimum streams"
msgstr ""
#: htdocs/luci-static/resources/fchomo.js:155
-#: htdocs/luci-static/resources/view/fchomo/global.js:500
+#: htdocs/luci-static/resources/view/fchomo/global.js:518
msgid "Mixed"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:500
+#: htdocs/luci-static/resources/view/fchomo/global.js:518
msgid "Mixed system TCP stack and gVisor UDP stack."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:458
+#: htdocs/luci-static/resources/view/fchomo/global.js:476
msgid "Mixed port"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1382
+#: htdocs/luci-static/resources/view/fchomo/node.js:1393
msgid "Multiplex"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:124
-#: htdocs/luci-static/resources/view/fchomo/node.js:227
+#: htdocs/luci-static/resources/view/fchomo/node.js:238
msgid "Multiplex fields"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:385
msgid "Multiplexing"
msgstr ""
@@ -1903,11 +1912,11 @@ msgstr ""
msgid "NOT"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:611
+#: htdocs/luci-static/resources/fchomo/listeners.js:612
msgid "Name of the Proxy group as outbound."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1694
+#: htdocs/luci-static/resources/view/fchomo/node.js:1708
msgid "Name of the Proxy group to download provider."
msgstr ""
@@ -1915,31 +1924,31 @@ msgstr ""
msgid "Name of the Proxy group to download rule set."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:605
+#: htdocs/luci-static/resources/fchomo/listeners.js:606
msgid "Name of the Sub rule used for inbound matching."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:549
+#: htdocs/luci-static/resources/view/fchomo/node.js:560
msgid "Native UDP"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:384
+#: htdocs/luci-static/resources/fchomo.js:392
msgid "Native appearance"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:637
+#: htdocs/luci-static/resources/fchomo/listeners.js:638
msgid "Network type"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1857
msgid "No"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:446
+#: htdocs/luci-static/resources/view/fchomo/global.js:464
msgid "No Authentication IP ranges"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1169
+#: htdocs/luci-static/resources/fchomo/listeners.js:1170
msgid "No SSE header"
msgstr ""
@@ -1947,16 +1956,16 @@ msgstr ""
msgid "No add'l params"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1322
+#: htdocs/luci-static/resources/view/fchomo/node.js:1333
msgid "No gRPC header"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1125
-#: htdocs/luci-static/resources/view/fchomo/node.js:1843
+#: htdocs/luci-static/resources/view/fchomo/node.js:1920
msgid "No testing is performed when this provider node is not in use."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:689
+#: htdocs/luci-static/resources/fchomo.js:697
msgid "No valid %s found."
msgstr ""
@@ -1965,23 +1974,22 @@ msgid "No valid rule-set link found."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1043
-#: htdocs/luci-static/resources/view/fchomo/node.js:217
-#: root/usr/share/luci/menu.d/luci-app-fchomo.json:46
+#: htdocs/luci-static/resources/view/fchomo/node.js:228
msgid "Node"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1170
-#: htdocs/luci-static/resources/view/fchomo/node.js:1863
+#: htdocs/luci-static/resources/view/fchomo/node.js:1940
msgid "Node exclude filter"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1175
-#: htdocs/luci-static/resources/view/fchomo/node.js:1870
+#: htdocs/luci-static/resources/view/fchomo/node.js:1947
msgid "Node exclude type"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1857
+#: htdocs/luci-static/resources/view/fchomo/node.js:1934
msgid "Node filter"
msgstr ""
@@ -1989,96 +1997,100 @@ msgstr ""
msgid "Node switch tolerance"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:411
+#: htdocs/luci-static/resources/fchomo.js:419
msgid "None"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:616
+#: htdocs/luci-static/resources/view/fchomo/global.js:634
msgid "Not Installed"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1207
+#: htdocs/luci-static/resources/fchomo.js:1215
msgid "Not Running"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:494
+#: htdocs/luci-static/resources/view/fchomo/node.js:505
msgid "OFF"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:496
+#: htdocs/luci-static/resources/view/fchomo/node.js:507
msgid "ON"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:567
-#: htdocs/luci-static/resources/view/fchomo/node.js:834
+#: htdocs/luci-static/resources/fchomo/listeners.js:568
+#: htdocs/luci-static/resources/view/fchomo/node.js:845
msgid "Obfs Mode"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:213
-#: htdocs/luci-static/resources/view/fchomo/node.js:318
+#: htdocs/luci-static/resources/view/fchomo/node.js:329
msgid "Obfuscate maximum packet size"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:313
+#: htdocs/luci-static/resources/view/fchomo/node.js:324
msgid "Obfuscate minimum packet size"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:200
-#: htdocs/luci-static/resources/view/fchomo/node.js:305
+#: htdocs/luci-static/resources/view/fchomo/node.js:316
msgid "Obfuscate password"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:193
-#: htdocs/luci-static/resources/fchomo/listeners.js:369
-#: htdocs/luci-static/resources/view/fchomo/node.js:298
-#: htdocs/luci-static/resources/view/fchomo/node.js:419
+#: htdocs/luci-static/resources/fchomo/listeners.js:370
+#: htdocs/luci-static/resources/view/fchomo/node.js:309
+#: htdocs/luci-static/resources/view/fchomo/node.js:430
msgid "Obfuscate type"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:370
#: htdocs/luci-static/resources/fchomo/listeners.js:371
-#: htdocs/luci-static/resources/view/fchomo/node.js:420
-#: htdocs/luci-static/resources/view/fchomo/node.js:421
+#: htdocs/luci-static/resources/fchomo/listeners.js:372
+#: htdocs/luci-static/resources/view/fchomo/node.js:431
+#: htdocs/luci-static/resources/view/fchomo/node.js:432
msgid "Obfuscated as %s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:883
+#: htdocs/luci-static/resources/view/fchomo/global.js:901
msgid "One or more numbers in the range 0-63 separated by commas"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:896
+#: htdocs/luci-static/resources/fchomo/listeners.js:897
msgid "Only applicable when %s are used as a frontend."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:378
-#: htdocs/luci-static/resources/view/fchomo/node.js:428
+#: htdocs/luci-static/resources/fchomo/listeners.js:379
+#: htdocs/luci-static/resources/view/fchomo/node.js:439
msgid "Only applies to the %s."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:733
+#: htdocs/luci-static/resources/view/fchomo/global.js:751
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1201
+#: htdocs/luci-static/resources/fchomo.js:1209
msgid "Open Dashboard"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:397
+#: htdocs/luci-static/resources/view/fchomo/global.js:415
msgid "Operation mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:658
-#: htdocs/luci-static/resources/view/fchomo/global.js:696
+#: root/usr/share/luci/menu.d/luci-app-fchomo.json:46
+msgid "Outbound"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:676
+#: htdocs/luci-static/resources/view/fchomo/global.js:714
msgid "Override destination"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1012
-#: htdocs/luci-static/resources/view/fchomo/node.js:1605
+#: htdocs/luci-static/resources/view/fchomo/node.js:1619
msgid "Override fields"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:541
+#: htdocs/luci-static/resources/view/fchomo/node.js:552
msgid "Override the IP address of the server that DNS response."
msgstr ""
@@ -2086,7 +2098,7 @@ msgstr ""
msgid "Override the Proxy group of DNS server."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:659
+#: htdocs/luci-static/resources/view/fchomo/global.js:677
msgid "Override the connection destination address with the sniffed domain."
msgstr ""
@@ -2094,7 +2106,7 @@ msgstr ""
msgid "Override the existing ECS in original request."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1154
+#: htdocs/luci-static/resources/view/fchomo/node.js:1165
msgid "Overrides the domain name used for HTTPS record queries."
msgstr ""
@@ -2102,37 +2114,37 @@ msgstr ""
msgid "Overview"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1249
+#: htdocs/luci-static/resources/view/fchomo/node.js:1260
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1250
+#: htdocs/luci-static/resources/view/fchomo/node.js:1261
msgid "PUT"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:685
+#: htdocs/luci-static/resources/view/fchomo/node.js:696
msgid "Packet encoding"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1327
+#: htdocs/luci-static/resources/view/fchomo/node.js:1338
msgid "Padding bytes"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:523
+#: htdocs/luci-static/resources/fchomo/listeners.js:524
msgid "Padding scheme"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:736
-#: htdocs/luci-static/resources/view/fchomo/node.js:958
+#: htdocs/luci-static/resources/fchomo/listeners.js:737
+#: htdocs/luci-static/resources/view/fchomo/node.js:969
msgid "Paddings"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:166
#: htdocs/luci-static/resources/fchomo/listeners.js:263
-#: htdocs/luci-static/resources/fchomo/listeners.js:588
-#: htdocs/luci-static/resources/view/fchomo/node.js:262
-#: htdocs/luci-static/resources/view/fchomo/node.js:352
-#: htdocs/luci-static/resources/view/fchomo/node.js:849
+#: htdocs/luci-static/resources/fchomo/listeners.js:589
+#: htdocs/luci-static/resources/view/fchomo/node.js:273
+#: htdocs/luci-static/resources/view/fchomo/node.js:363
+#: htdocs/luci-static/resources/view/fchomo/node.js:860
msgid "Password"
msgstr ""
@@ -2144,27 +2156,27 @@ msgstr ""
msgid "Path in bundle: %s"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:676
-#: htdocs/luci-static/resources/view/fchomo/node.js:1669
+#: htdocs/luci-static/resources/fchomo/listeners.js:677
+#: htdocs/luci-static/resources/view/fchomo/node.js:1683
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:373
msgid "Payload"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:773
+#: htdocs/luci-static/resources/view/fchomo/node.js:784
msgid "Peer pubkic key"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:523
+#: htdocs/luci-static/resources/view/fchomo/global.js:541
msgid ""
"Performance may degrade slightly, so it is not recommended to enable on when "
"it is not needed."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:800
+#: htdocs/luci-static/resources/view/fchomo/node.js:811
msgid "Periodically sends data packets to maintain connection persistence."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:799
+#: htdocs/luci-static/resources/view/fchomo/node.js:810
msgid "Persistent keepalive"
msgstr ""
@@ -2172,7 +2184,7 @@ msgstr ""
msgid "Plain text"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:860
+#: htdocs/luci-static/resources/view/fchomo/global.js:878
msgid ""
"Please ensure that the DNS query of the domains to be processed in the DNS "
"policyare send via DIRECT/Proxy Node in the same semantics as Routing "
@@ -2185,8 +2197,8 @@ msgid ""
"standards."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1642
-#: htdocs/luci-static/resources/view/fchomo/node.js:1668
+#: htdocs/luci-static/resources/view/fchomo/node.js:1656
+#: htdocs/luci-static/resources/view/fchomo/node.js:1682
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:346
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:372
msgid ""
@@ -2200,64 +2212,64 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1455
#: htdocs/luci-static/resources/view/fchomo/client.js:1707
#: htdocs/luci-static/resources/view/fchomo/client.js:1759
-#: htdocs/luci-static/resources/view/fchomo/node.js:1512
+#: htdocs/luci-static/resources/view/fchomo/node.js:1523
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:155
msgid "Please type %s fields of mihomo config."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:559
-#: htdocs/luci-static/resources/view/fchomo/node.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:560
+#: htdocs/luci-static/resources/view/fchomo/node.js:834
msgid "Plugin"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:567
-#: htdocs/luci-static/resources/fchomo/listeners.js:574
-#: htdocs/luci-static/resources/fchomo/listeners.js:581
-#: htdocs/luci-static/resources/fchomo/listeners.js:588
-#: htdocs/luci-static/resources/fchomo/listeners.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:834
-#: htdocs/luci-static/resources/view/fchomo/node.js:841
-#: htdocs/luci-static/resources/view/fchomo/node.js:849
-#: htdocs/luci-static/resources/view/fchomo/node.js:855
-#: htdocs/luci-static/resources/view/fchomo/node.js:863
-#: htdocs/luci-static/resources/view/fchomo/node.js:869
+#: htdocs/luci-static/resources/fchomo/listeners.js:568
+#: htdocs/luci-static/resources/fchomo/listeners.js:575
+#: htdocs/luci-static/resources/fchomo/listeners.js:582
+#: htdocs/luci-static/resources/fchomo/listeners.js:589
+#: htdocs/luci-static/resources/fchomo/listeners.js:595
+#: htdocs/luci-static/resources/view/fchomo/node.js:845
+#: htdocs/luci-static/resources/view/fchomo/node.js:852
+#: htdocs/luci-static/resources/view/fchomo/node.js:860
+#: htdocs/luci-static/resources/view/fchomo/node.js:866
+#: htdocs/luci-static/resources/view/fchomo/node.js:874
+#: htdocs/luci-static/resources/view/fchomo/node.js:880
msgid "Plugin:"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:250
+#: htdocs/luci-static/resources/view/fchomo/node.js:261
msgid "Port"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1438
+#: htdocs/luci-static/resources/fchomo.js:1446
msgid "Port %s alrealy exists!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:280
+#: htdocs/luci-static/resources/view/fchomo/node.js:291
msgid "Port hop interval"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:362
+#: htdocs/luci-static/resources/view/fchomo/node.js:373
msgid "Port range"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:693
+#: htdocs/luci-static/resources/view/fchomo/global.js:711
msgid "Ports"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:153
-#: htdocs/luci-static/resources/view/fchomo/node.js:275
+#: htdocs/luci-static/resources/view/fchomo/node.js:286
msgid "Ports pool"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:225
-#: htdocs/luci-static/resources/fchomo/listeners.js:455
-#: htdocs/luci-static/resources/view/fchomo/node.js:511
-#: htdocs/luci-static/resources/view/fchomo/node.js:780
+#: htdocs/luci-static/resources/fchomo/listeners.js:456
+#: htdocs/luci-static/resources/view/fchomo/node.js:522
+#: htdocs/luci-static/resources/view/fchomo/node.js:791
msgid "Pre-shared key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:874
-#: htdocs/luci-static/resources/view/fchomo/node.js:993
+#: htdocs/luci-static/resources/fchomo/listeners.js:875
+#: htdocs/luci-static/resources/view/fchomo/node.js:1004
msgid "Pre-shared key of rendezvous server"
msgstr ""
@@ -2269,60 +2281,60 @@ msgstr ""
msgid "Prefer IPv6"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:527
+#: htdocs/luci-static/resources/view/fchomo/global.js:545
msgid ""
"Prevent ICMP loopback issues in some cases. Ping will not show real delay."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:739
-#: htdocs/luci-static/resources/view/fchomo/global.js:756
-#: htdocs/luci-static/resources/view/fchomo/node.js:1476
-#: htdocs/luci-static/resources/view/fchomo/node.js:1482
-#: htdocs/luci-static/resources/view/fchomo/node.js:1792
-#: htdocs/luci-static/resources/view/fchomo/node.js:1799
+#: htdocs/luci-static/resources/view/fchomo/global.js:757
+#: htdocs/luci-static/resources/view/fchomo/global.js:774
+#: htdocs/luci-static/resources/view/fchomo/node.js:1487
+#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1869
+#: htdocs/luci-static/resources/view/fchomo/node.js:1876
msgid "Priority: Proxy Node > Global."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:324
+#: htdocs/luci-static/resources/view/fchomo/node.js:335
msgid "Priv-key"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:328
+#: htdocs/luci-static/resources/view/fchomo/node.js:339
msgid "Priv-key passphrase"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:693
-#: htdocs/luci-static/resources/view/fchomo/node.js:765
+#: htdocs/luci-static/resources/view/fchomo/node.js:704
+#: htdocs/luci-static/resources/view/fchomo/node.js:776
msgid "Private key"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:403
+#: htdocs/luci-static/resources/view/fchomo/global.js:421
msgid "Process matching mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:687
-#: htdocs/luci-static/resources/view/fchomo/node.js:1388
+#: htdocs/luci-static/resources/view/fchomo/global.js:705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1399
msgid "Protocol"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:680
+#: htdocs/luci-static/resources/view/fchomo/node.js:691
msgid "Protocol parameter. Enable length block encryption."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:674
+#: htdocs/luci-static/resources/view/fchomo/node.js:685
msgid ""
"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
"default in v2ray and cannot be disabled)."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1057
-#: htdocs/luci-static/resources/view/fchomo/node.js:1495
-#: htdocs/luci-static/resources/view/fchomo/node.js:1504
-#: htdocs/luci-static/resources/view/fchomo/node.js:1908
+#: htdocs/luci-static/resources/view/fchomo/node.js:1506
+#: htdocs/luci-static/resources/view/fchomo/node.js:1515
+#: htdocs/luci-static/resources/view/fchomo/node.js:1985
msgid "Provider"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1675
+#: htdocs/luci-static/resources/view/fchomo/node.js:1689
msgid "Provider URL"
msgstr ""
@@ -2332,32 +2344,32 @@ msgstr ""
msgid "Proxy Group"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:789
+#: htdocs/luci-static/resources/view/fchomo/global.js:807
msgid "Proxy IPv4 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:792
+#: htdocs/luci-static/resources/view/fchomo/global.js:810
msgid "Proxy IPv6 IP-s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:795
+#: htdocs/luci-static/resources/view/fchomo/global.js:813
msgid "Proxy MAC-s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1907
+#: htdocs/luci-static/resources/view/fchomo/node.js:219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1984
msgid "Proxy Node"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1883
-#: htdocs/luci-static/resources/view/fchomo/node.js:1892
+#: htdocs/luci-static/resources/view/fchomo/node.js:1960
+#: htdocs/luci-static/resources/view/fchomo/node.js:1969
msgid "Proxy chain"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:610
+#: htdocs/luci-static/resources/fchomo/listeners.js:611
#: htdocs/luci-static/resources/view/fchomo/client.js:784
#: htdocs/luci-static/resources/view/fchomo/client.js:1553
-#: htdocs/luci-static/resources/view/fchomo/node.js:1693
+#: htdocs/luci-static/resources/view/fchomo/node.js:1707
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:403
msgid "Proxy group"
msgstr ""
@@ -2366,16 +2378,16 @@ msgstr ""
msgid "Proxy group override"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:479
+#: htdocs/luci-static/resources/view/fchomo/global.js:497
msgid "Proxy mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:798
+#: htdocs/luci-static/resources/view/fchomo/global.js:816
msgid "Proxy routerself"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:550
-#: htdocs/luci-static/resources/view/fchomo/node.js:745
+#: htdocs/luci-static/resources/view/fchomo/node.js:561
+#: htdocs/luci-static/resources/view/fchomo/node.js:756
msgid "QUIC"
msgstr ""
@@ -2384,62 +2396,62 @@ msgstr ""
msgid "Quick Reload"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1063
-#: htdocs/luci-static/resources/view/fchomo/node.js:1168
+#: htdocs/luci-static/resources/fchomo/listeners.js:1064
+#: htdocs/luci-static/resources/view/fchomo/node.js:1179
msgid "REALITY"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1183
+#: htdocs/luci-static/resources/view/fchomo/node.js:1194
msgid "REALITY X25519MLKEM768 PQC support"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1100
+#: htdocs/luci-static/resources/fchomo/listeners.js:1101
msgid "REALITY certificate issued to"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1068
+#: htdocs/luci-static/resources/fchomo/listeners.js:1069
msgid "REALITY handshake server"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1075
+#: htdocs/luci-static/resources/fchomo/listeners.js:1076
msgid "REALITY private key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1090
-#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/fchomo/listeners.js:1091
+#: htdocs/luci-static/resources/view/fchomo/node.js:1184
msgid "REALITY public key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1094
-#: htdocs/luci-static/resources/view/fchomo/node.js:1178
+#: htdocs/luci-static/resources/fchomo/listeners.js:1095
+#: htdocs/luci-static/resources/view/fchomo/node.js:1189
msgid "REALITY short ID"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:707
-#: htdocs/luci-static/resources/fchomo/listeners.js:726
-#: htdocs/luci-static/resources/view/fchomo/node.js:948
+#: htdocs/luci-static/resources/fchomo/listeners.js:708
+#: htdocs/luci-static/resources/fchomo/listeners.js:727
+#: htdocs/luci-static/resources/view/fchomo/node.js:959
msgid "RTT"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:376
+#: htdocs/luci-static/resources/fchomo.js:384
msgid "Random"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:647
+#: htdocs/luci-static/resources/view/fchomo/global.js:665
msgid "Random will be used if empty."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:386
+#: htdocs/luci-static/resources/fchomo.js:394
msgid "Randomized traffic characteristics"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:863
-#: htdocs/luci-static/resources/view/fchomo/node.js:982
+#: htdocs/luci-static/resources/fchomo/listeners.js:864
+#: htdocs/luci-static/resources/view/fchomo/node.js:993
msgid "Realm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:879
-#: htdocs/luci-static/resources/view/fchomo/node.js:998
+#: htdocs/luci-static/resources/fchomo/listeners.js:880
+#: htdocs/luci-static/resources/view/fchomo/node.js:1009
msgid "Realm ID"
msgstr ""
@@ -2447,19 +2459,19 @@ msgstr ""
msgid "Realm name pattern"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:463
+#: htdocs/luci-static/resources/view/fchomo/global.js:481
msgid "Redir port"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:480
+#: htdocs/luci-static/resources/view/fchomo/global.js:498
msgid "Redirect TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:482
+#: htdocs/luci-static/resources/view/fchomo/global.js:500
msgid "Redirect TCP + TProxy UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:484
+#: htdocs/luci-static/resources/view/fchomo/global.js:502
msgid "Redirect TCP + Tun UDP"
msgstr ""
@@ -2467,7 +2479,7 @@ msgstr ""
msgid "Refresh every %s seconds."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1194
+#: htdocs/luci-static/resources/fchomo.js:1202
#: htdocs/luci-static/resources/view/fchomo/client.js:928
#: htdocs/luci-static/resources/view/fchomo/global.js:193
#: htdocs/luci-static/resources/view/fchomo/server.js:45
@@ -2478,69 +2490,69 @@ msgstr ""
msgid "Reload All"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1620
+#: htdocs/luci-static/resources/view/fchomo/node.js:1634
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:287
msgid "Remote"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:728
-#: htdocs/luci-static/resources/view/fchomo/node.js:811
+#: htdocs/luci-static/resources/view/fchomo/node.js:739
+#: htdocs/luci-static/resources/view/fchomo/node.js:822
msgid "Remote DNS resolve"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1359
+#: htdocs/luci-static/resources/fchomo.js:1367
msgid "Remove"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1364
-#: htdocs/luci-static/resources/view/fchomo/node.js:1596
-#: htdocs/luci-static/resources/view/fchomo/node.js:1598
+#: htdocs/luci-static/resources/fchomo.js:1372
+#: htdocs/luci-static/resources/view/fchomo/node.js:1610
+#: htdocs/luci-static/resources/view/fchomo/node.js:1612
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:261
msgid "Remove idles"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:868
-#: htdocs/luci-static/resources/view/fchomo/node.js:987
+#: htdocs/luci-static/resources/fchomo/listeners.js:869
+#: htdocs/luci-static/resources/view/fchomo/node.js:998
msgid "Rendezvous server"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1722
+#: htdocs/luci-static/resources/view/fchomo/node.js:1799
msgid "Replace name"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1723
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
msgid "Replace node name."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:360
+#: htdocs/luci-static/resources/fchomo.js:368
msgid "Request"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1148
-#: htdocs/luci-static/resources/view/fchomo/node.js:1256
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/fchomo/listeners.js:1149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1267
+#: htdocs/luci-static/resources/view/fchomo/node.js:1274
msgid "Request path"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:585
+#: htdocs/luci-static/resources/view/fchomo/node.js:596
msgid "Request timeout"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:363
+#: htdocs/luci-static/resources/fchomo.js:371
msgid "Require and verify"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:361
+#: htdocs/luci-static/resources/fchomo.js:369
msgid "Require any"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:394
-#: htdocs/luci-static/resources/view/fchomo/node.js:1184
+#: htdocs/luci-static/resources/fchomo.js:402
+#: htdocs/luci-static/resources/view/fchomo/node.js:1195
msgid "Requires server support."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:794
+#: htdocs/luci-static/resources/view/fchomo/node.js:805
msgid "Reserved field bytes"
msgstr ""
@@ -2548,7 +2560,7 @@ msgstr ""
msgid "Resources management"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:869
+#: htdocs/luci-static/resources/view/fchomo/node.js:880
msgid "Restls script"
msgstr ""
@@ -2562,51 +2574,51 @@ msgid ""
"Returns the string input for icon in the API to display in this proxy group."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:495
+#: htdocs/luci-static/resources/view/fchomo/node.js:506
msgid "Reuse HTTP connections to reduce RTT for each connection establishment."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:492
-#: htdocs/luci-static/resources/view/fchomo/node.js:496
+#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:507
msgid "Reusing a single tunnel to carry multiple target connections within it."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:817
+#: htdocs/luci-static/resources/view/fchomo/global.js:835
msgid "Routing Control"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:872
-#: htdocs/luci-static/resources/view/fchomo/global.js:875
+#: htdocs/luci-static/resources/view/fchomo/global.js:890
+#: htdocs/luci-static/resources/view/fchomo/global.js:893
msgid "Routing DSCP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:842
+#: htdocs/luci-static/resources/view/fchomo/global.js:860
msgid "Routing GFW"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1481
-#: htdocs/luci-static/resources/view/fchomo/node.js:1798
+#: htdocs/luci-static/resources/view/fchomo/node.js:1492
+#: htdocs/luci-static/resources/view/fchomo/node.js:1875
msgid "Routing mark"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:755
+#: htdocs/luci-static/resources/view/fchomo/global.js:773
msgid "Routing mark (Fwmark)"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:837
+#: htdocs/luci-static/resources/view/fchomo/global.js:855
msgid "Routing mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:838
+#: htdocs/luci-static/resources/view/fchomo/global.js:856
msgid "Routing mode of the traffic enters mihomo via firewall rules."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:859
+#: htdocs/luci-static/resources/view/fchomo/global.js:877
msgid "Routing mode will be handle domain."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:819
-#: htdocs/luci-static/resources/view/fchomo/global.js:828
+#: htdocs/luci-static/resources/view/fchomo/global.js:837
+#: htdocs/luci-static/resources/view/fchomo/global.js:846
msgid "Routing ports"
msgstr ""
@@ -2615,15 +2627,15 @@ msgstr ""
msgid "Routing rule"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:749
+#: htdocs/luci-static/resources/view/fchomo/global.js:767
msgid "Routing rule priority"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:743
+#: htdocs/luci-static/resources/view/fchomo/global.js:761
msgid "Routing table ID"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:399
+#: htdocs/luci-static/resources/view/fchomo/global.js:417
msgid "Rule"
msgstr ""
@@ -2645,11 +2657,11 @@ msgstr ""
msgid "Ruleset-URI-Scheme"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1207
+#: htdocs/luci-static/resources/fchomo.js:1215
msgid "Running"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:242
+#: htdocs/luci-static/resources/fchomo.js:250
msgid "SMTP"
msgstr ""
@@ -2665,12 +2677,12 @@ msgstr ""
msgid "SSH"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:243
+#: htdocs/luci-static/resources/fchomo.js:251
msgid "STUN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:885
-#: htdocs/luci-static/resources/view/fchomo/node.js:1004
+#: htdocs/luci-static/resources/fchomo/listeners.js:886
+#: htdocs/luci-static/resources/view/fchomo/node.js:1015
msgid "STUN servers"
msgstr ""
@@ -2678,12 +2690,12 @@ msgstr ""
msgid "SUB-RULE"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:905
+#: htdocs/luci-static/resources/view/fchomo/node.js:916
msgid "SUoT version"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:195
-#: htdocs/luci-static/resources/view/fchomo/node.js:300
+#: htdocs/luci-static/resources/view/fchomo/node.js:311
msgid "Salamander"
msgstr ""
@@ -2695,42 +2707,47 @@ msgstr ""
msgid "Same srcaddr and dstaddr requests. Same node"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:512
+#: htdocs/luci-static/resources/view/fchomo/global.js:396
+#: htdocs/luci-static/resources/view/fchomo/global.js:402
+msgid "Save"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:530
msgid "Segment maximum size"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:231
+#: htdocs/luci-static/resources/fchomo.js:239
msgid "Select"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:608
+#: htdocs/luci-static/resources/view/fchomo/global.js:626
msgid "Select Dashboard"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:400
+#: htdocs/luci-static/resources/fchomo.js:408
msgid "Send padding randomly 0-3333 bytes with 50% probability."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:389
-#: htdocs/luci-static/resources/fchomo.js:390
+#: htdocs/luci-static/resources/fchomo.js:397
+#: htdocs/luci-static/resources/fchomo.js:398
msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:707
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
-#: htdocs/luci-static/resources/fchomo/listeners.js:976
+#: htdocs/luci-static/resources/fchomo/listeners.js:708
+#: htdocs/luci-static/resources/fchomo/listeners.js:962
+#: htdocs/luci-static/resources/fchomo/listeners.js:977
#: htdocs/luci-static/resources/view/fchomo/server.js:58
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:62
msgid "Server"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:245
+#: htdocs/luci-static/resources/view/fchomo/node.js:256
msgid "Server address"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1142
-#: htdocs/luci-static/resources/view/fchomo/node.js:1235
-#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/fchomo/listeners.js:1143
+#: htdocs/luci-static/resources/view/fchomo/node.js:1246
+#: htdocs/luci-static/resources/view/fchomo/node.js:1252
msgid "Server hostname"
msgstr ""
@@ -2747,22 +2764,22 @@ msgstr ""
msgid "Shadowsocks"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:505
-#: htdocs/luci-static/resources/view/fchomo/node.js:604
+#: htdocs/luci-static/resources/fchomo/listeners.js:506
+#: htdocs/luci-static/resources/view/fchomo/node.js:615
msgid "Shadowsocks chipher"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:500
-#: htdocs/luci-static/resources/view/fchomo/node.js:599
+#: htdocs/luci-static/resources/fchomo/listeners.js:501
+#: htdocs/luci-static/resources/view/fchomo/node.js:610
msgid "Shadowsocks encrypt"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:513
-#: htdocs/luci-static/resources/view/fchomo/node.js:612
+#: htdocs/luci-static/resources/fchomo/listeners.js:514
+#: htdocs/luci-static/resources/view/fchomo/node.js:623
msgid "Shadowsocks password"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1436
+#: htdocs/luci-static/resources/view/fchomo/node.js:1447
msgid "Show connections in the dashboard for breaking connections easier."
msgstr ""
@@ -2774,26 +2791,26 @@ msgstr ""
msgid "Simple round-robin all nodes"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1681
+#: htdocs/luci-static/resources/view/fchomo/node.js:1695
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:391
msgid "Size limit"
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1586
-#: htdocs/luci-static/resources/view/fchomo/node.js:1105
-#: htdocs/luci-static/resources/view/fchomo/node.js:1773
+#: htdocs/luci-static/resources/view/fchomo/node.js:1116
+#: htdocs/luci-static/resources/view/fchomo/node.js:1850
msgid "Skip cert verify"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:665
+#: htdocs/luci-static/resources/view/fchomo/global.js:683
msgid "Skiped sniffing domain"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:671
+#: htdocs/luci-static/resources/view/fchomo/global.js:689
msgid "Skiped sniffing dst address"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:668
+#: htdocs/luci-static/resources/view/fchomo/global.js:686
msgid "Skiped sniffing src address"
msgstr ""
@@ -2802,30 +2819,30 @@ msgstr ""
msgid "Snell"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:675
+#: htdocs/luci-static/resources/view/fchomo/global.js:693
msgid "Sniff protocol"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:652
+#: htdocs/luci-static/resources/view/fchomo/global.js:670
msgid "Sniffer"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:655
+#: htdocs/luci-static/resources/view/fchomo/global.js:673
msgid "Sniffer settings"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:432
+#: htdocs/luci-static/resources/fchomo.js:440
msgid "Specify a ID"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:820
-#: htdocs/luci-static/resources/view/fchomo/global.js:829
+#: htdocs/luci-static/resources/view/fchomo/global.js:838
+#: htdocs/luci-static/resources/view/fchomo/global.js:847
msgid ""
"Specify target ports to be proxied. Multiple ports must be separated by "
"commas."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:495
+#: htdocs/luci-static/resources/view/fchomo/global.js:513
msgid "Stack"
msgstr ""
@@ -2833,11 +2850,11 @@ msgstr ""
msgid "Standard"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:246
+#: htdocs/luci-static/resources/fchomo.js:254
msgid "Steam Client"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:247
+#: htdocs/luci-static/resources/fchomo.js:255
msgid "Steam P2P"
msgstr ""
@@ -2846,7 +2863,7 @@ msgstr ""
msgid "Strategy"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:604
+#: htdocs/luci-static/resources/fchomo/listeners.js:605
#: htdocs/luci-static/resources/view/fchomo/client.js:1313
#: htdocs/luci-static/resources/view/fchomo/client.js:1322
msgid "Sub rule"
@@ -2856,7 +2873,7 @@ msgstr ""
msgid "Sub rule group"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:692
+#: htdocs/luci-static/resources/fchomo.js:700
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:231
msgid "Successfully imported %s %s of total %s."
msgstr ""
@@ -2865,7 +2882,7 @@ msgstr ""
msgid "Successfully updated."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1709
+#: htdocs/luci-static/resources/fchomo.js:1717
msgid "Successfully uploaded."
msgstr ""
@@ -2880,7 +2897,7 @@ msgid ""
""
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:497
+#: htdocs/luci-static/resources/view/fchomo/global.js:515
msgid "System"
msgstr ""
@@ -2903,25 +2920,25 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo.js:197
#: htdocs/luci-static/resources/fchomo.js:198
#: htdocs/luci-static/resources/fchomo.js:205
-#: htdocs/luci-static/resources/fchomo/listeners.js:638
+#: htdocs/luci-static/resources/fchomo/listeners.js:639
#: htdocs/luci-static/resources/view/fchomo/client.js:590
#: htdocs/luci-static/resources/view/fchomo/client.js:680
msgid "TCP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:424
+#: htdocs/luci-static/resources/view/fchomo/global.js:442
msgid "TCP concurrency"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1429
+#: htdocs/luci-static/resources/view/fchomo/node.js:1440
msgid "TCP only"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:432
+#: htdocs/luci-static/resources/view/fchomo/global.js:450
msgid "TCP-Keep-Alive idle timeout"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:427
+#: htdocs/luci-static/resources/view/fchomo/global.js:445
msgid "TCP-Keep-Alive interval"
msgstr ""
@@ -2940,31 +2957,31 @@ msgstr ""
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1460
-#: htdocs/luci-static/resources/view/fchomo/node.js:1740
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
+#: htdocs/luci-static/resources/view/fchomo/node.js:1817
msgid "TFO"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:569
-#: htdocs/luci-static/resources/fchomo/listeners.js:901
-#: htdocs/luci-static/resources/view/fchomo/global.js:532
-#: htdocs/luci-static/resources/view/fchomo/node.js:476
-#: htdocs/luci-static/resources/view/fchomo/node.js:836
-#: htdocs/luci-static/resources/view/fchomo/node.js:1014
+#: htdocs/luci-static/resources/fchomo/listeners.js:570
+#: htdocs/luci-static/resources/fchomo/listeners.js:902
+#: htdocs/luci-static/resources/view/fchomo/global.js:550
+#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/view/fchomo/node.js:847
+#: htdocs/luci-static/resources/view/fchomo/node.js:1025
msgid "TLS"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:955
-#: htdocs/luci-static/resources/view/fchomo/node.js:1045
+#: htdocs/luci-static/resources/fchomo/listeners.js:956
+#: htdocs/luci-static/resources/view/fchomo/node.js:1056
msgid "TLS ALPN"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1039
+#: htdocs/luci-static/resources/view/fchomo/node.js:1050
msgid "TLS SNI"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:122
-#: htdocs/luci-static/resources/view/fchomo/node.js:225
+#: htdocs/luci-static/resources/view/fchomo/node.js:236
msgid "TLS fields"
msgstr ""
@@ -2973,11 +2990,11 @@ msgstr ""
msgid "TUIC"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:244
+#: htdocs/luci-static/resources/fchomo.js:252
msgid "TURN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:552
+#: htdocs/luci-static/resources/fchomo/listeners.js:553
msgid "Target address"
msgstr ""
@@ -2986,35 +3003,35 @@ msgid ""
"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:709
-#: htdocs/luci-static/resources/view/fchomo/node.js:717
+#: htdocs/luci-static/resources/view/fchomo/node.js:720
+#: htdocs/luci-static/resources/view/fchomo/node.js:728
msgid "The %s address used by local machine in the Cloudflare WARP network."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:752
-#: htdocs/luci-static/resources/view/fchomo/node.js:760
+#: htdocs/luci-static/resources/view/fchomo/node.js:763
+#: htdocs/luci-static/resources/view/fchomo/node.js:771
msgid "The %s address used by local machine in the Wireguard network."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:976
-#: htdocs/luci-static/resources/view/fchomo/node.js:1128
+#: htdocs/luci-static/resources/fchomo/listeners.js:977
+#: htdocs/luci-static/resources/view/fchomo/node.js:1139
msgid "The %s private key, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
-#: htdocs/luci-static/resources/fchomo/listeners.js:999
-#: htdocs/luci-static/resources/view/fchomo/global.js:553
-#: htdocs/luci-static/resources/view/fchomo/node.js:1114
+#: htdocs/luci-static/resources/fchomo/listeners.js:962
+#: htdocs/luci-static/resources/fchomo/listeners.js:1000
+#: htdocs/luci-static/resources/view/fchomo/global.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:1125
msgid "The %s public key, in PEM format."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1159
msgid ""
"The ECH parameter of the HTTPS record for the domain. Leave empty to resolve "
"via DNS."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:398
+#: htdocs/luci-static/resources/view/fchomo/node.js:409
msgid "The ED25519 available private key or UUID provided by Sudoku server."
msgstr ""
@@ -3026,8 +3043,8 @@ msgstr ""
msgid "The default value is 2:00 every day."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:739
-#: htdocs/luci-static/resources/view/fchomo/node.js:961
+#: htdocs/luci-static/resources/fchomo/listeners.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:972
msgid ""
"The first padding must have a probability of 100% and at least 35 bytes."
msgstr ""
@@ -3042,25 +3059,25 @@ msgstr ""
msgid "The matching %s will be deemed as poisoned."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:737
-#: htdocs/luci-static/resources/view/fchomo/node.js:959
+#: htdocs/luci-static/resources/fchomo/listeners.js:738
+#: htdocs/luci-static/resources/view/fchomo/node.js:970
msgid "The server and client can set different padding parameters."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1057
-#: htdocs/luci-static/resources/view/fchomo/global.js:597
+#: htdocs/luci-static/resources/fchomo/listeners.js:1058
+#: htdocs/luci-static/resources/view/fchomo/global.js:615
msgid "This ECH parameter needs to be added to the HTTPS record of the domain."
msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1589
-#: htdocs/luci-static/resources/view/fchomo/node.js:1108
-#: htdocs/luci-static/resources/view/fchomo/node.js:1776
+#: htdocs/luci-static/resources/view/fchomo/node.js:1119
+#: htdocs/luci-static/resources/view/fchomo/node.js:1853
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:555
+#: htdocs/luci-static/resources/view/fchomo/node.js:566
msgid ""
"This is the TUIC port of the SUoT protocol, designed to provide a QUIC "
"stream based UDP relay mode that TUIC does not provide."
@@ -3071,51 +3088,51 @@ msgid ""
"To check NAT Behavior you need to install %s first"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:487
+#: htdocs/luci-static/resources/view/fchomo/global.js:505
msgid ""
"To enable Tun support, you need to install ip-full and "
"kmod-tun"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:864
+#: htdocs/luci-static/resources/view/fchomo/global.js:882
msgid "To enable, you need to install dnsmasq-full."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:762
+#: htdocs/luci-static/resources/view/fchomo/global.js:780
msgid "Tproxy Fwmark/fwmask"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:468
+#: htdocs/luci-static/resources/view/fchomo/global.js:486
msgid "Tproxy port"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:285
-#: htdocs/luci-static/resources/view/fchomo/node.js:390
+#: htdocs/luci-static/resources/view/fchomo/node.js:401
msgid "Traffic pattern"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1935
+#: htdocs/luci-static/resources/view/fchomo/node.js:2012
msgid "Transit proxy group"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1941
+#: htdocs/luci-static/resources/view/fchomo/node.js:2018
msgid "Transit proxy node"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:273
-#: htdocs/luci-static/resources/fchomo/listeners.js:1108
-#: htdocs/luci-static/resources/view/fchomo/node.js:367
-#: htdocs/luci-static/resources/view/fchomo/node.js:1190
+#: htdocs/luci-static/resources/fchomo/listeners.js:1109
+#: htdocs/luci-static/resources/view/fchomo/node.js:378
+#: htdocs/luci-static/resources/view/fchomo/node.js:1201
msgid "Transport"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:123
-#: htdocs/luci-static/resources/view/fchomo/node.js:226
+#: htdocs/luci-static/resources/view/fchomo/node.js:237
msgid "Transport fields"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1113
-#: htdocs/luci-static/resources/view/fchomo/node.js:1195
+#: htdocs/luci-static/resources/fchomo/listeners.js:1114
+#: htdocs/luci-static/resources/view/fchomo/node.js:1206
msgid "Transport type"
msgstr ""
@@ -3137,19 +3154,19 @@ msgstr ""
msgid "Trusted proxy header"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:767
+#: htdocs/luci-static/resources/view/fchomo/global.js:785
msgid "Tun Fwmark/fwmask"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:485
+#: htdocs/luci-static/resources/view/fchomo/global.js:503
msgid "Tun TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:492
+#: htdocs/luci-static/resources/view/fchomo/global.js:510
msgid "Tun settings"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:496
+#: htdocs/luci-static/resources/view/fchomo/global.js:514
msgid "Tun stack."
msgstr ""
@@ -3163,9 +3180,9 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:738
#: htdocs/luci-static/resources/view/fchomo/client.js:843
#: htdocs/luci-static/resources/view/fchomo/client.js:1030
-#: htdocs/luci-static/resources/view/fchomo/node.js:239
-#: htdocs/luci-static/resources/view/fchomo/node.js:1618
-#: htdocs/luci-static/resources/view/fchomo/node.js:1906
+#: htdocs/luci-static/resources/view/fchomo/node.js:250
+#: htdocs/luci-static/resources/view/fchomo/node.js:1632
+#: htdocs/luci-static/resources/view/fchomo/node.js:1983
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:285
msgid "Type"
msgstr ""
@@ -3176,55 +3193,55 @@ msgstr ""
#: htdocs/luci-static/resources/fchomo.js:201
#: htdocs/luci-static/resources/fchomo.js:202
#: htdocs/luci-static/resources/fchomo.js:204
-#: htdocs/luci-static/resources/fchomo/listeners.js:639
-#: htdocs/luci-static/resources/fchomo/listeners.js:644
+#: htdocs/luci-static/resources/fchomo/listeners.js:640
+#: htdocs/luci-static/resources/fchomo/listeners.js:645
#: htdocs/luci-static/resources/view/fchomo/client.js:589
#: htdocs/luci-static/resources/view/fchomo/client.js:679
-#: htdocs/luci-static/resources/view/fchomo/node.js:893
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:904
+#: htdocs/luci-static/resources/view/fchomo/node.js:1827
msgid "UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:516
+#: htdocs/luci-static/resources/view/fchomo/global.js:534
msgid "UDP NAT expiration time"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:554
+#: htdocs/luci-static/resources/view/fchomo/node.js:565
msgid "UDP over stream"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:560
+#: htdocs/luci-static/resources/view/fchomo/node.js:571
msgid "UDP over stream version"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:547
+#: htdocs/luci-static/resources/view/fchomo/node.js:558
msgid "UDP packet relay mode."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:546
+#: htdocs/luci-static/resources/view/fchomo/node.js:557
msgid "UDP relay mode"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:372
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
msgid "UP: %s; DOWN: %s"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:233
+#: htdocs/luci-static/resources/fchomo.js:241
msgid "URL test"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:294
-#: htdocs/luci-static/resources/fchomo/listeners.js:473
-#: htdocs/luci-static/resources/fchomo/listeners.js:528
-#: htdocs/luci-static/resources/view/fchomo/node.js:534
-#: htdocs/luci-static/resources/view/fchomo/node.js:643
+#: htdocs/luci-static/resources/fchomo/listeners.js:474
+#: htdocs/luci-static/resources/fchomo/listeners.js:529
+#: htdocs/luci-static/resources/view/fchomo/node.js:545
+#: htdocs/luci-static/resources/view/fchomo/node.js:654
msgid "UUID"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1252
+#: htdocs/luci-static/resources/fchomo.js:1260
msgid "Unable to download unsupported type: %s"
msgstr ""
@@ -3232,7 +3249,7 @@ msgstr ""
msgid "Unable to save contents: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:421
+#: htdocs/luci-static/resources/view/fchomo/global.js:439
msgid "Unified delay"
msgstr ""
@@ -3249,8 +3266,8 @@ msgstr ""
msgid "Unknown error: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:899
-#: htdocs/luci-static/resources/view/fchomo/node.js:1755
+#: htdocs/luci-static/resources/view/fchomo/node.js:910
+#: htdocs/luci-static/resources/view/fchomo/node.js:1832
msgid "UoT"
msgstr ""
@@ -3258,22 +3275,22 @@ msgstr ""
msgid "Update failed."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1687
+#: htdocs/luci-static/resources/view/fchomo/node.js:1701
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:397
msgid "Update interval"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1447
+#: htdocs/luci-static/resources/view/fchomo/node.js:1458
msgid "Upload bandwidth"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1448
+#: htdocs/luci-static/resources/view/fchomo/node.js:1459
msgid "Upload bandwidth in Mbps."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:967
-#: htdocs/luci-static/resources/fchomo/listeners.js:1007
-#: htdocs/luci-static/resources/view/fchomo/node.js:1119
+#: htdocs/luci-static/resources/fchomo/listeners.js:968
+#: htdocs/luci-static/resources/fchomo/listeners.js:1008
+#: htdocs/luci-static/resources/view/fchomo/node.js:1130
msgid "Upload certificate"
msgstr ""
@@ -3281,17 +3298,17 @@ msgstr ""
msgid "Upload initial package"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:982
-#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/fchomo/listeners.js:983
+#: htdocs/luci-static/resources/view/fchomo/node.js:1144
msgid "Upload key"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:970
-#: htdocs/luci-static/resources/fchomo/listeners.js:985
-#: htdocs/luci-static/resources/fchomo/listeners.js:1010
+#: htdocs/luci-static/resources/fchomo/listeners.js:971
+#: htdocs/luci-static/resources/fchomo/listeners.js:986
+#: htdocs/luci-static/resources/fchomo/listeners.js:1011
#: htdocs/luci-static/resources/view/fchomo/global.js:306
-#: htdocs/luci-static/resources/view/fchomo/node.js:1122
-#: htdocs/luci-static/resources/view/fchomo/node.js:1136
+#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/view/fchomo/node.js:1147
msgid "Upload..."
msgstr ""
@@ -3315,11 +3332,11 @@ msgstr ""
msgid "Used to resolve the domain of the Proxy node."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1040
+#: htdocs/luci-static/resources/view/fchomo/node.js:1051
msgid "Used to verify the hostname on the returned certificates."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:441
+#: htdocs/luci-static/resources/view/fchomo/global.js:459
msgid "User Authentication"
msgstr ""
@@ -3328,19 +3345,19 @@ msgid "User-hint is mandatory"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:161
-#: htdocs/luci-static/resources/view/fchomo/node.js:257
+#: htdocs/luci-static/resources/view/fchomo/node.js:268
msgid "Username"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:775
+#: htdocs/luci-static/resources/view/fchomo/global.js:793
msgid "Users filter mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1304
+#: htdocs/luci-static/resources/view/fchomo/node.js:1315
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1309
+#: htdocs/luci-static/resources/view/fchomo/node.js:1320
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3354,33 +3371,33 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1624
-#: htdocs/luci-static/resources/view/fchomo/node.js:1912
+#: htdocs/luci-static/resources/view/fchomo/node.js:1638
+#: htdocs/luci-static/resources/view/fchomo/node.js:1989
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:328
msgid "Value"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:362
+#: htdocs/luci-static/resources/fchomo.js:370
msgid "Verify if given"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:462
-#: htdocs/luci-static/resources/fchomo/listeners.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:518
-#: htdocs/luci-static/resources/view/fchomo/node.js:855
+#: htdocs/luci-static/resources/fchomo/listeners.js:463
+#: htdocs/luci-static/resources/fchomo/listeners.js:595
+#: htdocs/luci-static/resources/view/fchomo/node.js:529
+#: htdocs/luci-static/resources/view/fchomo/node.js:866
msgid "Version"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:863
+#: htdocs/luci-static/resources/view/fchomo/node.js:874
msgid "Version hint"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:120
-#: htdocs/luci-static/resources/view/fchomo/node.js:223
+#: htdocs/luci-static/resources/view/fchomo/node.js:234
msgid "Vless Encryption fields"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:399
+#: htdocs/luci-static/resources/fchomo.js:407
msgid "Wait a random 0-111 milliseconds with 75% probability."
msgstr ""
@@ -3388,16 +3405,16 @@ msgstr ""
msgid "Warning"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:440
-#: htdocs/luci-static/resources/fchomo/listeners.js:1115
-#: htdocs/luci-static/resources/fchomo/listeners.js:1124
-#: htdocs/luci-static/resources/fchomo/listeners.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:472
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:1200
+#: htdocs/luci-static/resources/fchomo/listeners.js:441
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
+#: htdocs/luci-static/resources/fchomo/listeners.js:1125
+#: htdocs/luci-static/resources/fchomo/listeners.js:1132
+#: htdocs/luci-static/resources/view/fchomo/node.js:483
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
#: htdocs/luci-static/resources/view/fchomo/node.js:1211
-#: htdocs/luci-static/resources/view/fchomo/node.js:1218
-#: htdocs/luci-static/resources/view/fchomo/node.js:1224
+#: htdocs/luci-static/resources/view/fchomo/node.js:1222
+#: htdocs/luci-static/resources/view/fchomo/node.js:1229
+#: htdocs/luci-static/resources/view/fchomo/node.js:1235
msgid "WebSocket"
msgstr ""
@@ -3405,7 +3422,7 @@ msgstr ""
msgid "When used as a server, HomeProxy is a better choice."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:777
+#: htdocs/luci-static/resources/view/fchomo/global.js:795
msgid "White list"
msgstr ""
@@ -3413,48 +3430,48 @@ msgstr ""
msgid "WireGuard"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:774
+#: htdocs/luci-static/resources/view/fchomo/node.js:785
msgid "WireGuard peer public key."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:781
+#: htdocs/luci-static/resources/view/fchomo/node.js:792
msgid "WireGuard pre-shared key."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:766
+#: htdocs/luci-static/resources/view/fchomo/node.js:777
msgid "WireGuard requires base64-encoded private keys."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1116
-#: htdocs/luci-static/resources/fchomo/listeners.js:1125
-#: htdocs/luci-static/resources/view/fchomo/node.js:1201
-#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/fchomo/listeners.js:1117
+#: htdocs/luci-static/resources/fchomo/listeners.js:1126
+#: htdocs/luci-static/resources/view/fchomo/node.js:1212
+#: htdocs/luci-static/resources/view/fchomo/node.js:1230
msgid "XHTTP"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1161
-#: htdocs/luci-static/resources/view/fchomo/node.js:1314
+#: htdocs/luci-static/resources/fchomo/listeners.js:1162
+#: htdocs/luci-static/resources/view/fchomo/node.js:1325
msgid "XHTTP mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1345
+#: htdocs/luci-static/resources/view/fchomo/node.js:1356
msgid "XMUX"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1350
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
-#: htdocs/luci-static/resources/view/fchomo/node.js:1360
-#: htdocs/luci-static/resources/view/fchomo/node.js:1365
-#: htdocs/luci-static/resources/view/fchomo/node.js:1370
-#: htdocs/luci-static/resources/view/fchomo/node.js:1375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1366
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
+#: htdocs/luci-static/resources/view/fchomo/node.js:1376
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "XMUX:"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:698
+#: htdocs/luci-static/resources/fchomo/listeners.js:699
msgid "XOR mode"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:688
+#: htdocs/luci-static/resources/view/fchomo/node.js:699
msgid "Xudp (Xray-core)"
msgstr ""
@@ -3462,7 +3479,7 @@ msgstr ""
msgid "Yaml text"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1779
+#: htdocs/luci-static/resources/view/fchomo/node.js:1856
msgid "Yes"
msgstr ""
@@ -3470,27 +3487,43 @@ msgstr ""
msgid "YouTube"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1691
+#: htdocs/luci-static/resources/fchomo.js:1699
msgid "Your %s was successfully uploaded. Size: %sB."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:335
-#: htdocs/luci-static/resources/fchomo.js:348
-#: htdocs/luci-static/resources/fchomo.js:353
-#: htdocs/luci-static/resources/view/fchomo/node.js:668
+#: htdocs/luci-static/resources/fchomo.js:343
+#: htdocs/luci-static/resources/fchomo.js:356
+#: htdocs/luci-static/resources/fchomo.js:361
+#: htdocs/luci-static/resources/view/fchomo/node.js:679
msgid "aes-128-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:336
+#: htdocs/luci-static/resources/fchomo.js:344
msgid "aes-192-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:337
-#: htdocs/luci-static/resources/fchomo.js:354
+#: htdocs/luci-static/resources/fchomo.js:345
+#: htdocs/luci-static/resources/fchomo.js:362
msgid "aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:665
+#: htdocs/luci-static/resources/view/fchomo/node.js:1718
+msgid "age private key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1777
+msgid "age public key"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:21
+msgid "age-mlkem768-x25519"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:20
+msgid "age-x25519"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:676
msgid "auto"
msgstr ""
@@ -3498,19 +3531,19 @@ msgstr ""
msgid "bbr"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:972
-#: htdocs/luci-static/resources/fchomo/listeners.js:1012
-#: htdocs/luci-static/resources/view/fchomo/node.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:973
+#: htdocs/luci-static/resources/fchomo/listeners.js:1013
+#: htdocs/luci-static/resources/view/fchomo/node.js:1135
msgid "certificate"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:338
-#: htdocs/luci-static/resources/fchomo.js:349
-#: htdocs/luci-static/resources/fchomo.js:355
+#: htdocs/luci-static/resources/fchomo.js:346
+#: htdocs/luci-static/resources/fchomo.js:357
+#: htdocs/luci-static/resources/fchomo.js:363
msgid "chacha20-ietf-poly1305"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:669
+#: htdocs/luci-static/resources/view/fchomo/node.js:680
msgid "chacha20-poly1305"
msgstr ""
@@ -3518,62 +3551,62 @@ msgstr ""
msgid "cubic"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:650
-#: htdocs/luci-static/resources/fchomo/listeners.js:681
+#: htdocs/luci-static/resources/fchomo/listeners.js:651
+#: htdocs/luci-static/resources/fchomo/listeners.js:682
msgid "decryption"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:811
+#: htdocs/luci-static/resources/view/fchomo/global.js:829
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1767
+#: htdocs/luci-static/resources/view/fchomo/node.js:1844
msgid "down"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:685
-#: htdocs/luci-static/resources/view/fchomo/node.js:913
-#: htdocs/luci-static/resources/view/fchomo/node.js:936
+#: htdocs/luci-static/resources/fchomo/listeners.js:686
+#: htdocs/luci-static/resources/view/fchomo/node.js:924
+#: htdocs/luci-static/resources/view/fchomo/node.js:947
msgid "encryption"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:424
-#: htdocs/luci-static/resources/view/fchomo/node.js:456
+#: htdocs/luci-static/resources/fchomo/listeners.js:425
+#: htdocs/luci-static/resources/view/fchomo/node.js:467
msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1114
-#: htdocs/luci-static/resources/fchomo/listeners.js:1123
-#: htdocs/luci-static/resources/fchomo/listeners.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1199
+#: htdocs/luci-static/resources/fchomo/listeners.js:1115
+#: htdocs/luci-static/resources/fchomo/listeners.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:1131
#: htdocs/luci-static/resources/view/fchomo/node.js:1210
-#: htdocs/luci-static/resources/view/fchomo/node.js:1217
-#: htdocs/luci-static/resources/view/fchomo/node.js:1223
+#: htdocs/luci-static/resources/view/fchomo/node.js:1221
+#: htdocs/luci-static/resources/view/fchomo/node.js:1228
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1280
+#: htdocs/luci-static/resources/view/fchomo/node.js:1291
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1285
+#: htdocs/luci-static/resources/view/fchomo/node.js:1296
msgid "gRPC ping interval"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1155
-#: htdocs/luci-static/resources/view/fchomo/node.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1156
+#: htdocs/luci-static/resources/view/fchomo/node.js:1287
msgid "gRPC service name"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:499
+#: htdocs/luci-static/resources/view/fchomo/global.js:517
msgid "gVisor"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1392
+#: htdocs/luci-static/resources/view/fchomo/node.js:1403
msgid "h2mux"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo/listeners.js:851
msgid "least one keypair required"
msgstr ""
@@ -3587,17 +3620,17 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1490
#: htdocs/luci-static/resources/view/fchomo/client.js:1721
#: htdocs/luci-static/resources/view/fchomo/client.js:1777
-#: htdocs/luci-static/resources/view/fchomo/node.js:1590
+#: htdocs/luci-static/resources/view/fchomo/node.js:1604
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:247
msgid "mihomo config"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:381
+#: htdocs/luci-static/resources/fchomo.js:389
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1464
-#: htdocs/luci-static/resources/view/fchomo/node.js:1745
+#: htdocs/luci-static/resources/view/fchomo/node.js:1475
+#: htdocs/luci-static/resources/view/fchomo/node.js:1822
msgid "mpTCP"
msgstr ""
@@ -3609,20 +3642,20 @@ msgstr ""
msgid "no-resolve"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1426
-#: htdocs/luci-static/resources/fchomo.js:1521
-#: htdocs/luci-static/resources/fchomo.js:1556
-#: htdocs/luci-static/resources/fchomo.js:1584
+#: htdocs/luci-static/resources/fchomo.js:1434
+#: htdocs/luci-static/resources/fchomo.js:1529
+#: htdocs/luci-static/resources/fchomo.js:1564
+#: htdocs/luci-static/resources/fchomo.js:1592
msgid "non-empty value"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:333
-#: htdocs/luci-static/resources/fchomo.js:347
-#: htdocs/luci-static/resources/fchomo.js:359
-#: htdocs/luci-static/resources/fchomo/listeners.js:560
-#: htdocs/luci-static/resources/view/fchomo/node.js:666
-#: htdocs/luci-static/resources/view/fchomo/node.js:686
-#: htdocs/luci-static/resources/view/fchomo/node.js:824
+#: htdocs/luci-static/resources/fchomo.js:341
+#: htdocs/luci-static/resources/fchomo.js:355
+#: htdocs/luci-static/resources/fchomo.js:367
+#: htdocs/luci-static/resources/fchomo/listeners.js:561
+#: htdocs/luci-static/resources/view/fchomo/node.js:677
+#: htdocs/luci-static/resources/view/fchomo/node.js:697
+#: htdocs/luci-static/resources/view/fchomo/node.js:835
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:324
msgid "none"
msgstr ""
@@ -3635,45 +3668,45 @@ msgstr ""
msgid "not included \",\""
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:219
-#: htdocs/luci-static/resources/fchomo/listeners.js:606
+#: htdocs/luci-static/resources/fchomo.js:227
#: htdocs/luci-static/resources/fchomo/listeners.js:607
+#: htdocs/luci-static/resources/fchomo/listeners.js:608
msgid "null"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:561
-#: htdocs/luci-static/resources/view/fchomo/node.js:825
+#: htdocs/luci-static/resources/fchomo/listeners.js:562
+#: htdocs/luci-static/resources/view/fchomo/node.js:836
msgid "obfs-simple"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "only applies when %s is %s."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
msgid "only applies when %s is not %s."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1725
+#: htdocs/luci-static/resources/view/fchomo/node.js:1802
msgid "override.proxy-name"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:687
+#: htdocs/luci-static/resources/view/fchomo/node.js:698
msgid "packet addr (v2ray-core v5+)"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1318
+#: htdocs/luci-static/resources/fchomo/listeners.js:1166
+#: htdocs/luci-static/resources/view/fchomo/node.js:1329
msgid "packet-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:438
-#: htdocs/luci-static/resources/view/fchomo/node.js:470
+#: htdocs/luci-static/resources/fchomo/listeners.js:439
+#: htdocs/luci-static/resources/view/fchomo/node.js:481
msgid "poll"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:987
-#: htdocs/luci-static/resources/view/fchomo/node.js:1138
+#: htdocs/luci-static/resources/fchomo/listeners.js:988
+#: htdocs/luci-static/resources/view/fchomo/node.js:1149
msgid "private key"
msgstr ""
@@ -3686,7 +3719,7 @@ msgstr ""
msgid "requires front-end adaptation using the API."
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:829
+#: htdocs/luci-static/resources/view/fchomo/node.js:840
msgid "restls"
msgstr ""
@@ -3694,17 +3727,17 @@ msgstr ""
msgid "rule-set"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:562
-#: htdocs/luci-static/resources/view/fchomo/node.js:828
+#: htdocs/luci-static/resources/fchomo/listeners.js:563
+#: htdocs/luci-static/resources/view/fchomo/node.js:839
msgid "shadow-tls"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1390
+#: htdocs/luci-static/resources/view/fchomo/node.js:1401
msgid "smux"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:437
-#: htdocs/luci-static/resources/view/fchomo/node.js:469
+#: htdocs/luci-static/resources/fchomo/listeners.js:438
+#: htdocs/luci-static/resources/view/fchomo/node.js:480
msgid "split-stream"
msgstr ""
@@ -3712,21 +3745,21 @@ msgstr ""
msgid "src"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1163
-#: htdocs/luci-static/resources/view/fchomo/node.js:1316
+#: htdocs/luci-static/resources/fchomo/listeners.js:1164
+#: htdocs/luci-static/resources/view/fchomo/node.js:1327
msgid "stream-one"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1164
-#: htdocs/luci-static/resources/view/fchomo/node.js:1317
+#: htdocs/luci-static/resources/fchomo/listeners.js:1165
+#: htdocs/luci-static/resources/view/fchomo/node.js:1328
msgid "stream-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1180
+#: htdocs/luci-static/resources/fchomo/listeners.js:1181
msgid "stream-up server seconds"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "stream/poll/auto"
msgstr ""
@@ -3738,100 +3771,100 @@ msgstr ""
msgid "unchecked"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:445
+#: htdocs/luci-static/resources/fchomo.js:453
msgid "unique UCI identifier"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:448
+#: htdocs/luci-static/resources/fchomo.js:456
msgid "unique identifier"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1593
+#: htdocs/luci-static/resources/fchomo.js:1601
msgid "unique value"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1761
+#: htdocs/luci-static/resources/view/fchomo/node.js:1838
msgid "up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:463
-#: htdocs/luci-static/resources/fchomo/listeners.js:595
-#: htdocs/luci-static/resources/view/fchomo/node.js:519
-#: htdocs/luci-static/resources/view/fchomo/node.js:561
-#: htdocs/luci-static/resources/view/fchomo/node.js:856
-#: htdocs/luci-static/resources/view/fchomo/node.js:906
-msgid "v1"
-msgstr ""
-
#: htdocs/luci-static/resources/fchomo/listeners.js:464
#: htdocs/luci-static/resources/fchomo/listeners.js:596
-#: htdocs/luci-static/resources/view/fchomo/node.js:520
-#: htdocs/luci-static/resources/view/fchomo/node.js:857
-#: htdocs/luci-static/resources/view/fchomo/node.js:907
-msgid "v2"
+#: htdocs/luci-static/resources/view/fchomo/node.js:530
+#: htdocs/luci-static/resources/view/fchomo/node.js:572
+#: htdocs/luci-static/resources/view/fchomo/node.js:867
+#: htdocs/luci-static/resources/view/fchomo/node.js:917
+msgid "v1"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:465
#: htdocs/luci-static/resources/fchomo/listeners.js:597
-#: htdocs/luci-static/resources/view/fchomo/node.js:521
-#: htdocs/luci-static/resources/view/fchomo/node.js:858
-msgid "v3"
+#: htdocs/luci-static/resources/view/fchomo/node.js:531
+#: htdocs/luci-static/resources/view/fchomo/node.js:868
+#: htdocs/luci-static/resources/view/fchomo/node.js:918
+msgid "v2"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:466
-#: htdocs/luci-static/resources/view/fchomo/node.js:522
-msgid "v4"
+#: htdocs/luci-static/resources/fchomo/listeners.js:598
+#: htdocs/luci-static/resources/view/fchomo/node.js:532
+#: htdocs/luci-static/resources/view/fchomo/node.js:869
+msgid "v3"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:467
-#: htdocs/luci-static/resources/view/fchomo/node.js:523
+#: htdocs/luci-static/resources/view/fchomo/node.js:533
+msgid "v4"
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:468
+#: htdocs/luci-static/resources/view/fchomo/node.js:534
msgid "v5"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1473
-#: htdocs/luci-static/resources/fchomo.js:1476
+#: htdocs/luci-static/resources/fchomo.js:1481
+#: htdocs/luci-static/resources/fchomo.js:1484
msgid "valid JSON format"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1098
+#: htdocs/luci-static/resources/view/fchomo/node.js:1109
msgid "valid SHA256 string with %d characters"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1498
-#: htdocs/luci-static/resources/fchomo.js:1501
+#: htdocs/luci-static/resources/fchomo.js:1506
+#: htdocs/luci-static/resources/fchomo.js:1509
msgid "valid URL"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1511
+#: htdocs/luci-static/resources/fchomo.js:1519
msgid "valid base64 key with %d characters"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1571
-#: htdocs/luci-static/resources/fchomo.js:1577
+#: htdocs/luci-static/resources/fchomo.js:1579
+#: htdocs/luci-static/resources/fchomo.js:1585
msgid "valid format: 2x, 2p, 4v"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1558
+#: htdocs/luci-static/resources/fchomo.js:1566
msgid "valid key length with %d characters"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1436
+#: htdocs/luci-static/resources/fchomo.js:1444
msgid "valid port value"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1486
+#: htdocs/luci-static/resources/fchomo.js:1494
msgid "valid uuid"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:405
+#: htdocs/luci-static/resources/fchomo.js:413
msgid "vless-mlkem768"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:404
+#: htdocs/luci-static/resources/fchomo.js:412
msgid "vless-x25519"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:339
+#: htdocs/luci-static/resources/fchomo.js:347
msgid "xchacha20-ietf-poly1305"
msgstr ""
@@ -3839,7 +3872,7 @@ msgstr ""
msgid "yacd-meta"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1391
+#: htdocs/luci-static/resources/view/fchomo/node.js:1402
msgid "yamux"
msgstr ""
@@ -3847,10 +3880,10 @@ msgstr ""
msgid "zashboard"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:667
+#: htdocs/luci-static/resources/view/fchomo/node.js:678
msgid "zero"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1254
+#: htdocs/luci-static/resources/fchomo.js:1262
msgid "🡇"
msgstr ""
diff --git a/luci-app-fchomo/po/zh_Hans/fchomo.po b/luci-app-fchomo/po/zh_Hans/fchomo.po
index 304a8985..d1ff28e2 100644
--- a/luci-app-fchomo/po/zh_Hans/fchomo.po
+++ b/luci-app-fchomo/po/zh_Hans/fchomo.po
@@ -12,30 +12,30 @@ msgstr ""
msgid "%s log"
msgstr "%s 日志"
-#: htdocs/luci-static/resources/fchomo.js:242
-#: htdocs/luci-static/resources/fchomo.js:243
-#: htdocs/luci-static/resources/fchomo.js:244
-#: htdocs/luci-static/resources/fchomo.js:245
-#: htdocs/luci-static/resources/fchomo.js:246
-#: htdocs/luci-static/resources/fchomo.js:247
+#: htdocs/luci-static/resources/fchomo.js:250
+#: htdocs/luci-static/resources/fchomo.js:251
+#: htdocs/luci-static/resources/fchomo.js:252
+#: htdocs/luci-static/resources/fchomo.js:253
+#: htdocs/luci-static/resources/fchomo.js:254
+#: htdocs/luci-static/resources/fchomo.js:255
msgid "%s ports"
msgstr "%s 端口"
-#: htdocs/luci-static/resources/fchomo.js:607
-#: htdocs/luci-static/resources/fchomo.js:610
+#: htdocs/luci-static/resources/fchomo.js:615
+#: htdocs/luci-static/resources/fchomo.js:618
#: htdocs/luci-static/resources/view/fchomo/client.js:316
msgid "(Imported)"
msgstr "(已导入)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:990
-#: htdocs/luci-static/resources/fchomo/listeners.js:998
-#: htdocs/luci-static/resources/fchomo/listeners.js:1007
-#: htdocs/luci-static/resources/view/fchomo/global.js:546
-#: htdocs/luci-static/resources/view/fchomo/global.js:552
-#: htdocs/luci-static/resources/view/fchomo/node.js:1113
-#: htdocs/luci-static/resources/view/fchomo/node.js:1119
-#: htdocs/luci-static/resources/view/fchomo/node.js:1127
-#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/fchomo/listeners.js:991
+#: htdocs/luci-static/resources/fchomo/listeners.js:999
+#: htdocs/luci-static/resources/fchomo/listeners.js:1008
+#: htdocs/luci-static/resources/view/fchomo/global.js:564
+#: htdocs/luci-static/resources/view/fchomo/global.js:570
+#: htdocs/luci-static/resources/view/fchomo/node.js:1124
+#: htdocs/luci-static/resources/view/fchomo/node.js:1130
+#: htdocs/luci-static/resources/view/fchomo/node.js:1138
+#: htdocs/luci-static/resources/view/fchomo/node.js:1144
msgid "(mTLS)"
msgstr ""
@@ -46,19 +46,19 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1058
#: htdocs/luci-static/resources/view/fchomo/client.js:1059
#: htdocs/luci-static/resources/view/fchomo/client.js:1288
-#: htdocs/luci-static/resources/view/fchomo/node.js:1916
-#: htdocs/luci-static/resources/view/fchomo/node.js:1922
-#: htdocs/luci-static/resources/view/fchomo/node.js:1936
-#: htdocs/luci-static/resources/view/fchomo/node.js:1942
+#: htdocs/luci-static/resources/view/fchomo/node.js:1993
+#: htdocs/luci-static/resources/view/fchomo/node.js:1999
+#: htdocs/luci-static/resources/view/fchomo/node.js:2013
+#: htdocs/luci-static/resources/view/fchomo/node.js:2019
msgid "-- Please choose --"
msgstr "-- 请选择 --"
-#: htdocs/luci-static/resources/fchomo.js:394
+#: htdocs/luci-static/resources/fchomo.js:402
msgid "0-RTT reuse."
msgstr "0-RTT 重用。"
-#: htdocs/luci-static/resources/fchomo.js:391
-#: htdocs/luci-static/resources/fchomo.js:395
+#: htdocs/luci-static/resources/fchomo.js:399
+#: htdocs/luci-static/resources/fchomo.js:403
msgid "1-RTT only."
msgstr "仅限 1-RTT。"
@@ -66,15 +66,15 @@ msgstr "仅限 1-RTT。"
msgid "163Music"
msgstr "网抑云"
-#: htdocs/luci-static/resources/fchomo.js:341
+#: htdocs/luci-static/resources/fchomo.js:349
msgid "2022-blake3-aes-128-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:342
+#: htdocs/luci-static/resources/fchomo.js:350
msgid "2022-blake3-aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:343
+#: htdocs/luci-static/resources/fchomo.js:351
msgid "2022-blake3-chacha20-poly1305"
msgstr ""
@@ -82,16 +82,16 @@ msgstr ""
msgid "0 or 1 only."
msgstr "仅限 0 或 1。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:968
-#: htdocs/luci-static/resources/fchomo/listeners.js:983
-#: htdocs/luci-static/resources/fchomo/listeners.js:1008
-#: htdocs/luci-static/resources/view/fchomo/node.js:1120
-#: htdocs/luci-static/resources/view/fchomo/node.js:1134
+#: htdocs/luci-static/resources/fchomo/listeners.js:969
+#: htdocs/luci-static/resources/fchomo/listeners.js:984
+#: htdocs/luci-static/resources/fchomo/listeners.js:1009
+#: htdocs/luci-static/resources/view/fchomo/node.js:1131
+#: htdocs/luci-static/resources/view/fchomo/node.js:1145
msgid "Save your configuration before uploading files!"
msgstr "上传文件前请先保存配置!"
#: htdocs/luci-static/resources/fchomo/listeners.js:286
-#: htdocs/luci-static/resources/view/fchomo/node.js:391
+#: htdocs/luci-static/resources/view/fchomo/node.js:402
msgid ""
"A base64 string is used to fine-tune network behavior.
Please refer to "
"the document"
@@ -100,56 +100,56 @@ msgstr ""
"一个 base64 字符串用于微调网络行为。
格式请参考文档。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:602
+#: htdocs/luci-static/resources/view/fchomo/global.js:620
msgid "API"
msgstr "API"
-#: htdocs/luci-static/resources/view/fchomo/global.js:552
+#: htdocs/luci-static/resources/view/fchomo/global.js:570
msgid "API Client Auth Certificate path"
msgstr "API 客户端认证证书路径"
-#: htdocs/luci-static/resources/view/fchomo/global.js:546
+#: htdocs/luci-static/resources/view/fchomo/global.js:564
msgid "API Client Auth type"
msgstr "API 客户端认证类型"
-#: htdocs/luci-static/resources/view/fchomo/global.js:642
+#: htdocs/luci-static/resources/view/fchomo/global.js:660
msgid "API DoH service"
msgstr "API DoH 服务器"
-#: htdocs/luci-static/resources/view/fchomo/global.js:596
+#: htdocs/luci-static/resources/view/fchomo/global.js:614
msgid "API ECH config"
msgstr "API ECH 配置"
-#: htdocs/luci-static/resources/view/fchomo/global.js:557
+#: htdocs/luci-static/resources/view/fchomo/global.js:575
msgid "API ECH key"
msgstr "API ECH 密钥"
-#: htdocs/luci-static/resources/view/fchomo/global.js:633
+#: htdocs/luci-static/resources/view/fchomo/global.js:651
msgid "API HTTP port"
msgstr "API HTTP 端口"
-#: htdocs/luci-static/resources/view/fchomo/global.js:637
+#: htdocs/luci-static/resources/view/fchomo/global.js:655
msgid "API HTTPS port"
msgstr "API HTTPS 端口"
-#: htdocs/luci-static/resources/view/fchomo/global.js:538
+#: htdocs/luci-static/resources/view/fchomo/global.js:556
msgid "API TLS certificate path"
msgstr "API TLS 证书路径"
-#: htdocs/luci-static/resources/view/fchomo/global.js:542
+#: htdocs/luci-static/resources/view/fchomo/global.js:560
msgid "API TLS private key path"
msgstr "API TLS 私钥"
-#: htdocs/luci-static/resources/view/fchomo/global.js:646
+#: htdocs/luci-static/resources/view/fchomo/global.js:664
msgid "API secret"
msgstr "API 令牌"
-#: htdocs/luci-static/resources/fchomo/listeners.js:370
-#: htdocs/luci-static/resources/fchomo/listeners.js:372
+#: htdocs/luci-static/resources/fchomo/listeners.js:371
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/view/fchomo/node.js:420
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:431
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
msgid "ASCII data stream"
msgstr "ASCII 数据流"
@@ -157,8 +157,8 @@ msgstr "ASCII 数据流"
msgid "ASN version"
msgstr "ASN 版本"
-#: htdocs/luci-static/resources/view/fchomo/global.js:723
-#: htdocs/luci-static/resources/view/fchomo/global.js:773
+#: htdocs/luci-static/resources/view/fchomo/global.js:741
+#: htdocs/luci-static/resources/view/fchomo/global.js:791
msgid "Access Control"
msgstr "访问控制"
@@ -174,7 +174,7 @@ msgstr "新增 DNS 策略"
msgid "Add a DNS server"
msgstr "新增 DNS 服务器"
-#: htdocs/luci-static/resources/view/fchomo/node.js:217
+#: htdocs/luci-static/resources/view/fchomo/node.js:228
msgid "Add a Node"
msgstr "新增 节点"
@@ -182,11 +182,11 @@ msgstr "新增 节点"
msgid "Add a inbound"
msgstr "新增 入站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1504
+#: htdocs/luci-static/resources/view/fchomo/node.js:1515
msgid "Add a provider"
msgstr "新增 供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1892
+#: htdocs/luci-static/resources/view/fchomo/node.js:1969
msgid "Add a proxy chain"
msgstr "新增 代理链"
@@ -210,11 +210,11 @@ msgstr "新增 服务器"
msgid "Add a sub rule"
msgstr "新增 子规则"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1714
+#: htdocs/luci-static/resources/view/fchomo/node.js:1791
msgid "Add prefix"
msgstr "添加前缀"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1718
+#: htdocs/luci-static/resources/view/fchomo/node.js:1795
msgid "Add suffix"
msgstr "添加后缀"
@@ -223,7 +223,7 @@ msgstr "添加后缀"
msgid "Address"
msgstr "地址"
-#: htdocs/luci-static/resources/fchomo.js:398
+#: htdocs/luci-static/resources/fchomo.js:406
msgid ""
"After the 1-RTT client/server hello, padding randomly 111-1111 bytes with "
"100% probability."
@@ -234,32 +234,32 @@ msgstr ""
msgid "Aggressive"
msgstr "侵略性"
-#: htdocs/luci-static/resources/view/fchomo/global.js:517
+#: htdocs/luci-static/resources/view/fchomo/global.js:535
msgid "Aging time of NAT map maintained by client."
msgstr "客户端维护的 NAT 映射 的老化时间。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:776
-#: htdocs/luci-static/resources/view/fchomo/global.js:839
-#: htdocs/luci-static/resources/view/fchomo/global.js:873
+#: htdocs/luci-static/resources/view/fchomo/global.js:794
+#: htdocs/luci-static/resources/view/fchomo/global.js:857
+#: htdocs/luci-static/resources/view/fchomo/global.js:891
msgid "All allowed"
msgstr "允许所有"
-#: htdocs/luci-static/resources/fchomo.js:239
+#: htdocs/luci-static/resources/fchomo.js:247
msgid "All ports"
msgstr "所有端口"
-#: htdocs/luci-static/resources/view/fchomo/global.js:629
+#: htdocs/luci-static/resources/view/fchomo/global.js:647
msgid ""
"Allow access from private network.To access the API on a private "
"network from a public website, it must be enabled."
msgstr ""
"允许从私有网络访问。要从公共网站访问私有网络上的 API,则必须启用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:895
+#: htdocs/luci-static/resources/fchomo/listeners.js:896
msgid "Allow insecure connections"
msgstr "允许不安全的连接"
-#: htdocs/luci-static/resources/view/fchomo/node.js:787
+#: htdocs/luci-static/resources/view/fchomo/node.js:798
msgid "Allowed IPs"
msgstr "允许的 IP"
@@ -271,8 +271,8 @@ msgstr "已是最新版本。"
msgid "Already in updating."
msgstr "已在更新中。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:542
-#: htdocs/luci-static/resources/view/fchomo/node.js:657
+#: htdocs/luci-static/resources/fchomo/listeners.js:543
+#: htdocs/luci-static/resources/view/fchomo/node.js:668
msgid "Alter ID"
msgstr "额外 ID"
@@ -285,29 +285,29 @@ msgstr ""
msgid "Application version"
msgstr "应用版本"
-#: htdocs/luci-static/resources/view/fchomo/global.js:801
+#: htdocs/luci-static/resources/view/fchomo/global.js:819
msgid "As the TOP upstream of dnsmasq"
msgstr "作为 dnsmasq 的最优先上游"
-#: htdocs/luci-static/resources/view/fchomo/global.js:802
-#: htdocs/luci-static/resources/view/fchomo/global.js:809
+#: htdocs/luci-static/resources/view/fchomo/global.js:820
+#: htdocs/luci-static/resources/view/fchomo/global.js:827
msgid "As the TOP upstream of dnsmasq."
msgstr "作为 dnsmasq 的最优先上游。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:492
+#: htdocs/luci-static/resources/fchomo/listeners.js:493
msgid "Auth timeout"
msgstr "认证超时"
-#: htdocs/luci-static/resources/view/fchomo/node.js:679
+#: htdocs/luci-static/resources/view/fchomo/node.js:690
msgid "Authenticated length"
msgstr "认证长度"
-#: htdocs/luci-static/resources/fchomo/listeners.js:439
-#: htdocs/luci-static/resources/fchomo/listeners.js:1162
-#: htdocs/luci-static/resources/view/fchomo/global.js:405
-#: htdocs/luci-static/resources/view/fchomo/node.js:471
-#: htdocs/luci-static/resources/view/fchomo/node.js:495
-#: htdocs/luci-static/resources/view/fchomo/node.js:1315
+#: htdocs/luci-static/resources/fchomo/listeners.js:440
+#: htdocs/luci-static/resources/fchomo/listeners.js:1163
+#: htdocs/luci-static/resources/view/fchomo/global.js:423
+#: htdocs/luci-static/resources/view/fchomo/node.js:482
+#: htdocs/luci-static/resources/view/fchomo/node.js:506
+#: htdocs/luci-static/resources/view/fchomo/node.js:1326
msgid "Auto"
msgstr "自动"
@@ -323,8 +323,8 @@ msgstr "自动更新"
msgid "Auto update resources."
msgstr "自动更新资源文件。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:628
-#: htdocs/luci-static/resources/view/fchomo/node.js:884
+#: htdocs/luci-static/resources/fchomo/listeners.js:629
+#: htdocs/luci-static/resources/view/fchomo/node.js:895
msgid "BBR profile"
msgstr "BBR 配置文件"
@@ -332,15 +332,15 @@ msgstr "BBR 配置文件"
msgid "Baidu"
msgstr "百度"
-#: htdocs/luci-static/resources/view/fchomo/node.js:694
+#: htdocs/luci-static/resources/view/fchomo/node.js:705
msgid "Base64 encoded ECDSA private key on the NIST P-256 curve."
msgstr "基于 NIST P-256 曲线的 Base64 编码 ECDSA 私钥。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:702
+#: htdocs/luci-static/resources/view/fchomo/node.js:713
msgid "Base64 encoded ECDSA public key on the NIST P-256 curve."
msgstr "基于 NIST P-256 曲线的 Base64 编码 ECDSA 公钥。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:499
+#: htdocs/luci-static/resources/view/fchomo/global.js:517
msgid "Based on google/gvisor."
msgstr "基于 google/gvisor。"
@@ -357,23 +357,23 @@ msgstr "二进制格式仅支持 domain/ipcidr"
msgid "Binary mrs"
msgstr "二进制 mrs"
-#: htdocs/luci-static/resources/view/fchomo/global.js:737
-#: htdocs/luci-static/resources/view/fchomo/node.js:1474
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/global.js:755
+#: htdocs/luci-static/resources/view/fchomo/node.js:1485
+#: htdocs/luci-static/resources/view/fchomo/node.js:1867
msgid "Bind interface"
msgstr "绑定接口"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1475
-#: htdocs/luci-static/resources/view/fchomo/node.js:1791
+#: htdocs/luci-static/resources/view/fchomo/node.js:1486
+#: htdocs/luci-static/resources/view/fchomo/node.js:1868
msgid "Bind outbound interface."
msgstr "绑定出站接口。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:738
+#: htdocs/luci-static/resources/view/fchomo/global.js:756
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr "绑定出站流量至指定接口。留空自动检测。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:778
+#: htdocs/luci-static/resources/view/fchomo/global.js:796
msgid "Black list"
msgstr "黑名单"
@@ -398,52 +398,52 @@ msgstr "引导 DNS 服务器 (节点)"
msgid "BundleMRS version"
msgstr "BundleMRS 版本"
-#: htdocs/luci-static/resources/view/fchomo/global.js:840
+#: htdocs/luci-static/resources/view/fchomo/global.js:858
msgid "Bypass CN"
msgstr "绕过 CN 流量"
-#: htdocs/luci-static/resources/view/fchomo/global.js:874
+#: htdocs/luci-static/resources/view/fchomo/global.js:892
msgid "Bypass DSCP"
msgstr "绕过 DSCP"
-#: htdocs/luci-static/resources/fchomo/listeners.js:437
#: htdocs/luci-static/resources/fchomo/listeners.js:438
#: htdocs/luci-static/resources/fchomo/listeners.js:439
#: htdocs/luci-static/resources/fchomo/listeners.js:440
-#: htdocs/luci-static/resources/view/fchomo/node.js:469
-#: htdocs/luci-static/resources/view/fchomo/node.js:470
-#: htdocs/luci-static/resources/view/fchomo/node.js:471
-#: htdocs/luci-static/resources/view/fchomo/node.js:472
+#: htdocs/luci-static/resources/fchomo/listeners.js:441
+#: htdocs/luci-static/resources/view/fchomo/node.js:480
+#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:482
+#: htdocs/luci-static/resources/view/fchomo/node.js:483
msgid "CDN support"
msgstr "CDN 支持"
-#: htdocs/luci-static/resources/view/fchomo/global.js:624
+#: htdocs/luci-static/resources/view/fchomo/global.js:642
msgid "CORS Allow origins"
msgstr "CORS 允许的来源"
-#: htdocs/luci-static/resources/view/fchomo/global.js:628
+#: htdocs/luci-static/resources/view/fchomo/global.js:646
msgid "CORS Allow private network"
msgstr "CORS 允许私有网络"
-#: htdocs/luci-static/resources/view/fchomo/global.js:625
+#: htdocs/luci-static/resources/view/fchomo/global.js:643
msgid "CORS allowed origins, * will be used if empty."
msgstr "CORS 允许的来源,留空则使用 *。"
-#: htdocs/luci-static/resources/fchomo.js:723
+#: htdocs/luci-static/resources/fchomo.js:731
msgid "Cancel"
msgstr "取消"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1092
+#: htdocs/luci-static/resources/view/fchomo/node.js:1103
msgid "Cert fingerprint"
msgstr "证书指纹"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1093
+#: htdocs/luci-static/resources/view/fchomo/node.js:1104
msgid ""
"Certificate fingerprint. Used to implement SSL Pinning and prevent MitM."
msgstr "证书指纹。用于实现 SSL证书固定 并防止 MitM。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:960
-#: htdocs/luci-static/resources/view/fchomo/node.js:1113
+#: htdocs/luci-static/resources/fchomo/listeners.js:961
+#: htdocs/luci-static/resources/view/fchomo/node.js:1124
msgid "Certificate path"
msgstr "证书路径"
@@ -473,15 +473,15 @@ msgid "China list version"
msgstr "大陆域名列表版本"
#: htdocs/luci-static/resources/fchomo/listeners.js:255
-#: htdocs/luci-static/resources/fchomo/listeners.js:353
-#: htdocs/luci-static/resources/view/fchomo/node.js:344
-#: htdocs/luci-static/resources/view/fchomo/node.js:403
-#: htdocs/luci-static/resources/view/fchomo/node.js:663
+#: htdocs/luci-static/resources/fchomo/listeners.js:354
+#: htdocs/luci-static/resources/view/fchomo/node.js:355
+#: htdocs/luci-static/resources/view/fchomo/node.js:414
+#: htdocs/luci-static/resources/view/fchomo/node.js:674
msgid "Chipher"
msgstr "加密方法"
-#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/view/fchomo/node.js:412
+#: htdocs/luci-static/resources/fchomo/listeners.js:363
+#: htdocs/luci-static/resources/view/fchomo/node.js:423
msgid "Chipher must be enabled if obfuscate downlink is disabled."
msgstr "如果下行链路混淆功能被禁用,则必须启用加密。"
@@ -497,29 +497,29 @@ msgstr ""
"点击此处下载"
"最新的初始包。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:726
-#: htdocs/luci-static/resources/fchomo/listeners.js:999
-#: htdocs/luci-static/resources/view/fchomo/global.js:553
-#: htdocs/luci-static/resources/view/fchomo/node.js:948
-#: htdocs/luci-static/resources/view/fchomo/node.js:1114
-#: htdocs/luci-static/resources/view/fchomo/node.js:1128
+#: htdocs/luci-static/resources/fchomo/listeners.js:727
+#: htdocs/luci-static/resources/fchomo/listeners.js:1000
+#: htdocs/luci-static/resources/view/fchomo/global.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:959
+#: htdocs/luci-static/resources/view/fchomo/node.js:1125
+#: htdocs/luci-static/resources/view/fchomo/node.js:1139
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:22
msgid "Client"
msgstr "客户端"
-#: htdocs/luci-static/resources/fchomo/listeners.js:998
+#: htdocs/luci-static/resources/fchomo/listeners.js:999
msgid "Client Auth Certificate path"
msgstr "客户端认证证书路径"
-#: htdocs/luci-static/resources/fchomo/listeners.js:990
+#: htdocs/luci-static/resources/fchomo/listeners.js:991
msgid "Client Auth type"
msgstr "客户端认证类型"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1159
+#: htdocs/luci-static/resources/view/fchomo/node.js:1170
msgid "Client fingerprint"
msgstr "客户端指纹"
-#: htdocs/luci-static/resources/fchomo/listeners.js:349
+#: htdocs/luci-static/resources/fchomo/listeners.js:350
msgid "Client key"
msgstr "客户端密钥"
@@ -531,21 +531,21 @@ msgstr "客户端状态"
msgid "Collecting data..."
msgstr "收集数据中..."
-#: htdocs/luci-static/resources/fchomo.js:240
-#: htdocs/luci-static/resources/fchomo.js:241
+#: htdocs/luci-static/resources/fchomo.js:248
+#: htdocs/luci-static/resources/fchomo.js:249
msgid "Common ports (bypass P2P traffic)"
msgstr "常用端口(绕过 P2P 流量)"
-#: htdocs/luci-static/resources/fchomo.js:1370
+#: htdocs/luci-static/resources/fchomo.js:1378
msgid "Complete"
msgstr "完成"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1811
msgid "Configuration Items"
msgstr "配置项"
-#: htdocs/luci-static/resources/fchomo/listeners.js:620
-#: htdocs/luci-static/resources/view/fchomo/node.js:876
+#: htdocs/luci-static/resources/fchomo/listeners.js:621
+#: htdocs/luci-static/resources/view/fchomo/node.js:887
msgid "Congestion controller"
msgstr "拥塞控制器"
@@ -553,7 +553,7 @@ msgstr "拥塞控制器"
msgid "Connection check"
msgstr "连接检查"
-#: htdocs/luci-static/resources/view/fchomo/node.js:528
+#: htdocs/luci-static/resources/view/fchomo/node.js:539
msgid "Connection reuse"
msgstr "连接复用"
@@ -561,19 +561,19 @@ msgstr "连接复用"
msgid "Conservative"
msgstr "保守"
-#: htdocs/luci-static/resources/fchomo.js:592
+#: htdocs/luci-static/resources/fchomo.js:600
msgid "Content copied to clipboard!"
msgstr "内容已复制到剪贴板!"
#: htdocs/luci-static/resources/view/fchomo/client.js:671
-#: htdocs/luci-static/resources/view/fchomo/node.js:1644
-#: htdocs/luci-static/resources/view/fchomo/node.js:1670
+#: htdocs/luci-static/resources/view/fchomo/node.js:1658
+#: htdocs/luci-static/resources/view/fchomo/node.js:1684
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:348
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:374
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr "内容将不会被验证,请确保输入正确。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1643
+#: htdocs/luci-static/resources/view/fchomo/node.js:1657
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:347
msgid "Contents"
msgstr "内容"
@@ -582,7 +582,7 @@ msgstr "内容"
msgid "Contents have been saved."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:594
+#: htdocs/luci-static/resources/fchomo.js:602
msgid "Copy"
msgstr "复制"
@@ -594,21 +594,21 @@ msgstr "核心版本"
msgid "Cron expression"
msgstr "Cron 表达式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:892
+#: htdocs/luci-static/resources/view/fchomo/global.js:910
msgid "Custom Direct List"
msgstr "自定义直连列表"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1782
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:415
msgid "Custom HTTP header."
msgstr "自定义 HTTP header。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:910
+#: htdocs/luci-static/resources/view/fchomo/global.js:928
msgid "Custom Proxy List"
msgstr "自定义代理列表"
-#: htdocs/luci-static/resources/fchomo/listeners.js:377
-#: htdocs/luci-static/resources/view/fchomo/node.js:427
+#: htdocs/luci-static/resources/fchomo/listeners.js:378
+#: htdocs/luci-static/resources/view/fchomo/node.js:438
msgid "Custom byte layout"
msgstr "自定义字节布局"
@@ -626,15 +626,15 @@ msgstr ""
msgid "DNS policy"
msgstr "DNS 策略"
-#: htdocs/luci-static/resources/view/fchomo/global.js:474
+#: htdocs/luci-static/resources/view/fchomo/global.js:492
msgid "DNS port"
msgstr " DNS 端口"
#: htdocs/luci-static/resources/view/fchomo/client.js:874
#: htdocs/luci-static/resources/view/fchomo/client.js:1438
#: htdocs/luci-static/resources/view/fchomo/client.js:1447
-#: htdocs/luci-static/resources/view/fchomo/node.js:734
-#: htdocs/luci-static/resources/view/fchomo/node.js:817
+#: htdocs/luci-static/resources/view/fchomo/node.js:745
+#: htdocs/luci-static/resources/view/fchomo/node.js:828
msgid "DNS server"
msgstr "DNS 服务器"
@@ -642,7 +642,7 @@ msgstr "DNS 服务器"
msgid "DNS settings"
msgstr "DNS 设置"
-#: htdocs/luci-static/resources/view/fchomo/global.js:877
+#: htdocs/luci-static/resources/view/fchomo/global.js:895
msgid "DSCP list"
msgstr "DSCP 列表"
@@ -662,62 +662,66 @@ msgstr "默认 DNS(由 WAN 下发)"
msgid "Default DNS server"
msgstr "默认 DNS 服务器"
-#: htdocs/luci-static/resources/view/fchomo/node.js:788
+#: htdocs/luci-static/resources/view/fchomo/node.js:22
+msgid "Derive from priv-key"
+msgstr "从私钥派生"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:799
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr "允许通过 WireGuard 转发的目的地址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1915
+#: htdocs/luci-static/resources/view/fchomo/node.js:1992
msgid "Destination provider"
msgstr "落地供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1921
+#: htdocs/luci-static/resources/view/fchomo/node.js:1998
msgid "Destination proxy node"
msgstr "落地代理节点"
-#: htdocs/luci-static/resources/view/fchomo/node.js:228
+#: htdocs/luci-static/resources/view/fchomo/node.js:239
msgid "Dial fields"
msgstr "拨号字段"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1928
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2025
msgid "Different chain head/tail"
msgstr "不同的链头/链尾"
-#: htdocs/luci-static/resources/view/fchomo/global.js:398
+#: htdocs/luci-static/resources/view/fchomo/global.js:416
msgid "Direct"
msgstr "直连"
-#: htdocs/luci-static/resources/view/fchomo/global.js:780
+#: htdocs/luci-static/resources/view/fchomo/global.js:798
msgid "Direct IPv4 IP-s"
msgstr "直连 IPv4 地址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:783
+#: htdocs/luci-static/resources/view/fchomo/global.js:801
msgid "Direct IPv6 IP-s"
msgstr "直连 IPv6 地址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:786
+#: htdocs/luci-static/resources/view/fchomo/global.js:804
msgid "Direct MAC-s"
msgstr "直连 MAC 地址"
#: htdocs/luci-static/resources/fchomo/listeners.js:194
-#: htdocs/luci-static/resources/view/fchomo/global.js:406
-#: htdocs/luci-static/resources/view/fchomo/node.js:299
+#: htdocs/luci-static/resources/view/fchomo/global.js:424
+#: htdocs/luci-static/resources/view/fchomo/node.js:310
msgid "Disable"
msgstr "禁用"
-#: htdocs/luci-static/resources/view/fchomo/global.js:714
+#: htdocs/luci-static/resources/view/fchomo/global.js:732
msgid "Disable ECN of quic-go"
msgstr "禁用 quic-go 的 显式拥塞通知(ECN)"
-#: htdocs/luci-static/resources/view/fchomo/global.js:711
+#: htdocs/luci-static/resources/view/fchomo/global.js:729
msgid "Disable GSO of quic-go"
msgstr "禁用 quic-go 的 通用分段卸载(GSO)"
-#: htdocs/luci-static/resources/view/fchomo/global.js:526
+#: htdocs/luci-static/resources/view/fchomo/global.js:544
msgid "Disable ICMP Forwarding"
msgstr "禁用 ICMP 转发"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1033
+#: htdocs/luci-static/resources/view/fchomo/node.js:1044
msgid "Disable SNI"
msgstr "禁用 SNI"
@@ -725,7 +729,7 @@ msgstr "禁用 SNI"
msgid "Disable UDP"
msgstr "禁用 UDP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:708
+#: htdocs/luci-static/resources/view/fchomo/global.js:726
msgid "Disable safe path check"
msgstr "禁用安全路径检查"
@@ -745,29 +749,29 @@ msgstr ""
msgid "Domain"
msgstr "域名"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1034
+#: htdocs/luci-static/resources/view/fchomo/node.js:1045
msgid "Donot send server name in ClientHello."
msgstr "不要在 ClientHello 中发送服务器名称。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1587
-#: htdocs/luci-static/resources/view/fchomo/node.js:1106
-#: htdocs/luci-static/resources/view/fchomo/node.js:1774
+#: htdocs/luci-static/resources/view/fchomo/node.js:1117
+#: htdocs/luci-static/resources/view/fchomo/node.js:1851
msgid "Donot verifying server certificate."
msgstr "不验证服务器证书。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1453
+#: htdocs/luci-static/resources/view/fchomo/node.js:1464
msgid "Download bandwidth"
msgstr "下载带宽"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
+#: htdocs/luci-static/resources/view/fchomo/node.js:1465
msgid "Download bandwidth in Mbps."
msgstr "下载带宽(单位:Mbps)。"
-#: htdocs/luci-static/resources/fchomo.js:1249
+#: htdocs/luci-static/resources/fchomo.js:1257
msgid "Download failed: %s"
msgstr "下载失败: %s"
-#: htdocs/luci-static/resources/fchomo.js:1247
+#: htdocs/luci-static/resources/fchomo.js:1255
msgid "Download successful."
msgstr "下载成功。"
@@ -775,16 +779,16 @@ msgstr "下载成功。"
msgid "Dual stack"
msgstr "双栈"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1153
+#: htdocs/luci-static/resources/view/fchomo/node.js:1164
msgid "ECH HTTPS record query servername"
msgstr "ECH HTTPS 记录查询域名"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1056
-#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/fchomo/listeners.js:1057
+#: htdocs/luci-static/resources/view/fchomo/node.js:1158
msgid "ECH config"
msgstr "ECH 配置"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1015
+#: htdocs/luci-static/resources/fchomo/listeners.js:1016
msgid "ECH key"
msgstr "ECH 密钥"
@@ -796,15 +800,15 @@ msgstr "强制覆盖 ECS"
msgid "EDNS Client Subnet"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:415
+#: htdocs/luci-static/resources/view/fchomo/global.js:433
msgid "ETag support"
msgstr "ETag 支持"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1304
msgid "Early Data first packet length limit."
msgstr "前置数据长度阈值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1299
+#: htdocs/luci-static/resources/view/fchomo/node.js:1310
msgid "Early Data header name"
msgstr "前置数据标头"
@@ -812,7 +816,7 @@ msgstr "前置数据标头"
msgid "Edit inbound"
msgstr "编辑入站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:203
+#: htdocs/luci-static/resources/view/fchomo/node.js:214
msgid "Edit node"
msgstr "编辑节点"
@@ -820,12 +824,12 @@ msgstr "编辑节点"
msgid "Edit ruleset"
msgstr "编辑规则集"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1655
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:345
msgid "Editer"
msgstr "编辑器"
-#: htdocs/luci-static/resources/fchomo.js:385
+#: htdocs/luci-static/resources/fchomo.js:393
msgid "Eliminate encryption header characteristics"
msgstr "消除加密头特征"
@@ -841,18 +845,18 @@ msgstr "为空时回退"
#: htdocs/luci-static/resources/view/fchomo/client.js:1503
#: htdocs/luci-static/resources/view/fchomo/client.js:1734
#: htdocs/luci-static/resources/view/fchomo/client.js:1790
-#: htdocs/luci-static/resources/view/fchomo/global.js:404
-#: htdocs/luci-static/resources/view/fchomo/global.js:683
-#: htdocs/luci-static/resources/view/fchomo/node.js:235
-#: htdocs/luci-static/resources/view/fchomo/node.js:1614
-#: htdocs/luci-static/resources/view/fchomo/node.js:1813
-#: htdocs/luci-static/resources/view/fchomo/node.js:1902
+#: htdocs/luci-static/resources/view/fchomo/global.js:422
+#: htdocs/luci-static/resources/view/fchomo/global.js:701
+#: htdocs/luci-static/resources/view/fchomo/node.js:246
+#: htdocs/luci-static/resources/view/fchomo/node.js:1628
+#: htdocs/luci-static/resources/view/fchomo/node.js:1890
+#: htdocs/luci-static/resources/view/fchomo/node.js:1979
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:272
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
msgstr "启用"
-#: htdocs/luci-static/resources/view/fchomo/node.js:572
+#: htdocs/luci-static/resources/view/fchomo/node.js:583
msgid ""
"Enable 0-RTT QUIC connection handshake on the client side. This is not "
"impacting much on the performance, as the protocol is fully multiplexed.
强烈建议禁用此功能,因为它容易受到重放攻击。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:582
msgid "Enable 0-RTT handshake"
msgstr "启用 0-RTT 握手"
-#: htdocs/luci-static/resources/view/fchomo/global.js:717
+#: htdocs/luci-static/resources/view/fchomo/global.js:735
msgid ""
"Enable IP4P "
"conversion for outbound connections"
@@ -873,57 +877,57 @@ msgstr ""
"为出站连接启用 IP4P 转换"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1141
+#: htdocs/luci-static/resources/view/fchomo/node.js:1152
msgid "Enable ECH"
msgstr "启用 ECH"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1441
+#: htdocs/luci-static/resources/view/fchomo/node.js:1452
msgid "Enable TCP Brutal"
msgstr "启用 TCP Brutal"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1442
+#: htdocs/luci-static/resources/view/fchomo/node.js:1453
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "启用 TCP Brutal 拥塞控制算法。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1430
+#: htdocs/luci-static/resources/view/fchomo/node.js:1441
msgid "Enable multiplexing only for TCP."
msgstr "仅为 TCP 启用多路复用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:423
-#: htdocs/luci-static/resources/view/fchomo/node.js:455
+#: htdocs/luci-static/resources/fchomo/listeners.js:424
+#: htdocs/luci-static/resources/view/fchomo/node.js:466
msgid "Enable obfuscate for downlink"
msgstr "启用下行链路混淆"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1424
+#: htdocs/luci-static/resources/view/fchomo/node.js:1435
msgid "Enable padding"
msgstr "启用填充"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1435
+#: htdocs/luci-static/resources/view/fchomo/node.js:1446
msgid "Enable statistic"
msgstr "启用统计"
-#: htdocs/luci-static/resources/view/fchomo/node.js:900
-#: htdocs/luci-static/resources/view/fchomo/node.js:1756
+#: htdocs/luci-static/resources/view/fchomo/node.js:911
+#: htdocs/luci-static/resources/view/fchomo/node.js:1833
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。"
#: htdocs/luci-static/resources/fchomo/listeners.js:201
-#: htdocs/luci-static/resources/view/fchomo/node.js:306
+#: htdocs/luci-static/resources/view/fchomo/node.js:317
msgid ""
"Enabling obfuscation will make the server incompatible with standard QUIC "
"connections, losing the ability to masquerade with HTTP/3."
msgstr "启用混淆将使服务器与标准的 QUIC 连接不兼容,失去 HTTP/3 伪装的能力。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:689
+#: htdocs/luci-static/resources/fchomo/listeners.js:690
msgid "Encryption method"
msgstr "加密方法"
-#: htdocs/luci-static/resources/view/fchomo/node.js:701
+#: htdocs/luci-static/resources/view/fchomo/node.js:712
msgid "Endpoint pubkic key"
msgstr "端点公钥"
-#: htdocs/luci-static/resources/view/fchomo/global.js:522
+#: htdocs/luci-static/resources/view/fchomo/global.js:540
msgid "Endpoint-Independent NAT"
msgstr "端点独立 NAT"
@@ -942,7 +946,7 @@ msgid ""
"if empty."
msgstr "超过此限制将会触发强制健康检查。留空则使用 5。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1871
+#: htdocs/luci-static/resources/view/fchomo/node.js:1948
msgid "Exclude matched node types."
msgstr "排除匹配的节点类型。"
@@ -955,7 +959,7 @@ msgstr ""
"rel=\"noreferrer noopener\">此处。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1171
-#: htdocs/luci-static/resources/view/fchomo/node.js:1864
+#: htdocs/luci-static/resources/view/fchomo/node.js:1941
msgid "Exclude nodes that meet keywords or regexps."
msgstr "排除匹配关键词或表达式的节点。"
@@ -964,70 +968,70 @@ msgid "Expand/Collapse result"
msgstr "展开/收起 结果"
#: htdocs/luci-static/resources/view/fchomo/client.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:1849
+#: htdocs/luci-static/resources/view/fchomo/node.js:1926
msgid "Expected HTTP code. 204 will be used if empty."
msgstr "预期的 HTTP code。留空则使用 204。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1133
-#: htdocs/luci-static/resources/view/fchomo/node.js:1851
+#: htdocs/luci-static/resources/view/fchomo/node.js:1928
msgid "Expected status"
msgstr "预期状态"
-#: htdocs/luci-static/resources/fchomo.js:442
-#: htdocs/luci-static/resources/fchomo.js:445
-#: htdocs/luci-static/resources/fchomo.js:448
-#: htdocs/luci-static/resources/fchomo.js:1387
+#: htdocs/luci-static/resources/fchomo.js:450
+#: htdocs/luci-static/resources/fchomo.js:453
+#: htdocs/luci-static/resources/fchomo.js:456
#: htdocs/luci-static/resources/fchomo.js:1395
#: htdocs/luci-static/resources/fchomo.js:1403
-#: htdocs/luci-static/resources/fchomo.js:1426
-#: htdocs/luci-static/resources/fchomo.js:1429
-#: htdocs/luci-static/resources/fchomo.js:1436
-#: htdocs/luci-static/resources/fchomo.js:1452
-#: htdocs/luci-static/resources/fchomo.js:1461
-#: htdocs/luci-static/resources/fchomo.js:1473
-#: htdocs/luci-static/resources/fchomo.js:1476
-#: htdocs/luci-static/resources/fchomo.js:1486
-#: htdocs/luci-static/resources/fchomo.js:1498
-#: htdocs/luci-static/resources/fchomo.js:1501
-#: htdocs/luci-static/resources/fchomo.js:1511
-#: htdocs/luci-static/resources/fchomo.js:1521
-#: htdocs/luci-static/resources/fchomo.js:1556
-#: htdocs/luci-static/resources/fchomo.js:1558
-#: htdocs/luci-static/resources/fchomo.js:1571
-#: htdocs/luci-static/resources/fchomo.js:1577
-#: htdocs/luci-static/resources/fchomo.js:1584
-#: htdocs/luci-static/resources/fchomo.js:1593
-#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/fchomo/listeners.js:409
-#: htdocs/luci-static/resources/fchomo/listeners.js:718
-#: htdocs/luci-static/resources/fchomo/listeners.js:749
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo.js:1411
+#: htdocs/luci-static/resources/fchomo.js:1434
+#: htdocs/luci-static/resources/fchomo.js:1437
+#: htdocs/luci-static/resources/fchomo.js:1444
+#: htdocs/luci-static/resources/fchomo.js:1460
+#: htdocs/luci-static/resources/fchomo.js:1469
+#: htdocs/luci-static/resources/fchomo.js:1481
+#: htdocs/luci-static/resources/fchomo.js:1484
+#: htdocs/luci-static/resources/fchomo.js:1494
+#: htdocs/luci-static/resources/fchomo.js:1506
+#: htdocs/luci-static/resources/fchomo.js:1509
+#: htdocs/luci-static/resources/fchomo.js:1519
+#: htdocs/luci-static/resources/fchomo.js:1529
+#: htdocs/luci-static/resources/fchomo.js:1564
+#: htdocs/luci-static/resources/fchomo.js:1566
+#: htdocs/luci-static/resources/fchomo.js:1579
+#: htdocs/luci-static/resources/fchomo.js:1585
+#: htdocs/luci-static/resources/fchomo.js:1592
+#: htdocs/luci-static/resources/fchomo.js:1601
+#: htdocs/luci-static/resources/fchomo/listeners.js:363
+#: htdocs/luci-static/resources/fchomo/listeners.js:410
+#: htdocs/luci-static/resources/fchomo/listeners.js:719
+#: htdocs/luci-static/resources/fchomo/listeners.js:750
+#: htdocs/luci-static/resources/fchomo/listeners.js:851
#: htdocs/luci-static/resources/view/fchomo/client.js:69
#: htdocs/luci-static/resources/view/fchomo/client.js:1020
#: htdocs/luci-static/resources/view/fchomo/client.js:1518
-#: htdocs/luci-static/resources/view/fchomo/global.js:883
-#: htdocs/luci-static/resources/view/fchomo/node.js:412
-#: htdocs/luci-static/resources/view/fchomo/node.js:448
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
-#: htdocs/luci-static/resources/view/fchomo/node.js:971
-#: htdocs/luci-static/resources/view/fchomo/node.js:1098
-#: htdocs/luci-static/resources/view/fchomo/node.js:1928
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/global.js:901
+#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/view/fchomo/node.js:459
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
+#: htdocs/luci-static/resources/view/fchomo/node.js:982
+#: htdocs/luci-static/resources/view/fchomo/node.js:1109
+#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2025
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:300
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:314
msgid "Expecting: %s"
msgstr "请输入:%s"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1123
-#: htdocs/luci-static/resources/fchomo/listeners.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1215
-#: htdocs/luci-static/resources/view/fchomo/node.js:1223
+#: htdocs/luci-static/resources/fchomo/listeners.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:1131
+#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1226
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "Expecting: only support %s."
msgstr "请输入:仅支援 %s."
-#: htdocs/luci-static/resources/view/fchomo/global.js:702
+#: htdocs/luci-static/resources/view/fchomo/global.js:720
msgid "Experimental"
msgstr "实验性"
@@ -1042,24 +1046,24 @@ msgstr "实验性"
msgid "Factor"
msgstr "条件"
-#: htdocs/luci-static/resources/fchomo.js:1328
+#: htdocs/luci-static/resources/fchomo.js:1336
msgid "Failed to execute \"/etc/init.d/fchomo %s %s\" reason: %s"
msgstr "无法执行 \"/etc/init.d/fchomo %s %s\" 原因: %s"
-#: htdocs/luci-static/resources/fchomo.js:1281
+#: htdocs/luci-static/resources/fchomo.js:1289
msgid "Failed to generate %s, error: %s."
msgstr "生成 %s 失败,错误:%s。"
-#: htdocs/luci-static/resources/fchomo.js:1693
+#: htdocs/luci-static/resources/fchomo.js:1701
msgid "Failed to upload %s, error: %s."
msgstr "上传 %s 失败,错误:%s。"
-#: htdocs/luci-static/resources/fchomo.js:1712
+#: htdocs/luci-static/resources/fchomo.js:1720
msgid "Failed to upload, error: %s."
msgstr "上传失败,错误:%s。"
-#: htdocs/luci-static/resources/fchomo.js:232
-#: htdocs/luci-static/resources/fchomo/listeners.js:448
+#: htdocs/luci-static/resources/fchomo.js:240
+#: htdocs/luci-static/resources/fchomo/listeners.js:449
msgid "Fallback"
msgstr "自动回退"
@@ -1073,7 +1077,7 @@ msgid "Fallback filter"
msgstr "後備过滤器"
#: htdocs/luci-static/resources/view/fchomo/client.js:1166
-#: htdocs/luci-static/resources/view/fchomo/node.js:1858
+#: htdocs/luci-static/resources/view/fchomo/node.js:1935
msgid "Filter nodes that meet keywords or regexps."
msgstr "过滤匹配关键字或表达式的节点。"
@@ -1102,8 +1106,8 @@ msgstr "兜底 DNS 服务器 (用于已被投毒污染的域名)"
msgid "Firewall"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:534
-#: htdocs/luci-static/resources/view/fchomo/node.js:649
+#: htdocs/luci-static/resources/fchomo/listeners.js:535
+#: htdocs/luci-static/resources/view/fchomo/node.js:660
msgid "Flow"
msgstr "流控"
@@ -1116,8 +1120,8 @@ msgstr ""
"noopener\">%s."
#: htdocs/luci-static/resources/view/fchomo/client.js:1132
-#: htdocs/luci-static/resources/view/fchomo/node.js:1724
-#: htdocs/luci-static/resources/view/fchomo/node.js:1850
+#: htdocs/luci-static/resources/view/fchomo/node.js:1801
+#: htdocs/luci-static/resources/view/fchomo/node.js:1927
msgid ""
"For format see %s."
@@ -1125,12 +1129,12 @@ msgstr ""
"格式请参阅 %s"
"a>."
-#: htdocs/luci-static/resources/view/fchomo/node.js:729
-#: htdocs/luci-static/resources/view/fchomo/node.js:812
+#: htdocs/luci-static/resources/view/fchomo/node.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:823
msgid "Force DNS remote resolution."
msgstr "强制 DNS 远程解析。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:662
+#: htdocs/luci-static/resources/view/fchomo/global.js:680
msgid "Forced sniffing domain"
msgstr "强制嗅探域名"
@@ -1145,7 +1149,7 @@ msgstr "格式"
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:1259
msgid "GET"
msgstr ""
@@ -1154,39 +1158,40 @@ msgid "GFW list version"
msgstr "GFW 域名列表版本"
#: htdocs/luci-static/resources/fchomo/listeners.js:196
-#: htdocs/luci-static/resources/view/fchomo/node.js:301
+#: htdocs/luci-static/resources/view/fchomo/node.js:312
msgid "Gecko"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:391
+#: htdocs/luci-static/resources/view/fchomo/global.js:409
msgid "General"
msgstr "常规"
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1011
-#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:1604
+#: htdocs/luci-static/resources/view/fchomo/node.js:233
+#: htdocs/luci-static/resources/view/fchomo/node.js:1618
msgid "General fields"
msgstr "常规字段"
-#: htdocs/luci-static/resources/view/fchomo/global.js:394
+#: htdocs/luci-static/resources/view/fchomo/global.js:412
msgid "General settings"
msgstr "常规设置"
-#: htdocs/luci-static/resources/fchomo.js:543
-#: htdocs/luci-static/resources/fchomo.js:545
-#: htdocs/luci-static/resources/fchomo.js:559
-#: htdocs/luci-static/resources/fchomo.js:561
-#: htdocs/luci-static/resources/fchomo/listeners.js:340
-#: htdocs/luci-static/resources/fchomo/listeners.js:384
-#: htdocs/luci-static/resources/fchomo/listeners.js:386
-#: htdocs/luci-static/resources/fchomo/listeners.js:822
-#: htdocs/luci-static/resources/fchomo/listeners.js:1048
-#: htdocs/luci-static/resources/view/fchomo/global.js:590
+#: htdocs/luci-static/resources/fchomo.js:551
+#: htdocs/luci-static/resources/fchomo.js:553
+#: htdocs/luci-static/resources/fchomo.js:567
+#: htdocs/luci-static/resources/fchomo.js:569
+#: htdocs/luci-static/resources/fchomo/listeners.js:341
+#: htdocs/luci-static/resources/fchomo/listeners.js:385
+#: htdocs/luci-static/resources/fchomo/listeners.js:387
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:1049
+#: htdocs/luci-static/resources/view/fchomo/global.js:608
+#: htdocs/luci-static/resources/view/fchomo/node.js:1769
msgid "Generate"
msgstr "生成"
-#: htdocs/luci-static/resources/view/fchomo/global.js:509
+#: htdocs/luci-static/resources/view/fchomo/global.js:527
msgid "Generic segmentation offload"
msgstr "通用分段卸载(GSO)"
@@ -1216,16 +1221,20 @@ msgstr ""
msgid "GitHub"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:400
+#: htdocs/luci-static/resources/view/fchomo/global.js:389
+msgid "GitHub token"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:418
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:14
msgid "Global"
msgstr "全局"
-#: htdocs/luci-static/resources/view/fchomo/global.js:438
+#: htdocs/luci-static/resources/view/fchomo/global.js:456
msgid "Global Authentication"
msgstr "全局认证"
-#: htdocs/luci-static/resources/view/fchomo/node.js:673
+#: htdocs/luci-static/resources/view/fchomo/node.js:684
msgid "Global padding"
msgstr "全局填充"
@@ -1233,7 +1242,7 @@ msgstr "全局填充"
msgid "Google"
msgstr "谷歌"
-#: htdocs/luci-static/resources/fchomo.js:245
+#: htdocs/luci-static/resources/fchomo.js:253
msgid "Google FCM"
msgstr "谷歌 FCM"
@@ -1247,48 +1256,48 @@ msgstr "组"
#: htdocs/luci-static/resources/fchomo.js:153
#: htdocs/luci-static/resources/fchomo.js:188
-#: htdocs/luci-static/resources/fchomo/listeners.js:568
-#: htdocs/luci-static/resources/view/fchomo/node.js:835
-#: htdocs/luci-static/resources/view/fchomo/node.js:1197
+#: htdocs/luci-static/resources/fchomo/listeners.js:569
+#: htdocs/luci-static/resources/view/fchomo/node.js:846
#: htdocs/luci-static/resources/view/fchomo/node.js:1208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1215
+#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1226
msgid "HTTP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:268
-#: htdocs/luci-static/resources/view/fchomo/node.js:1270
-#: htdocs/luci-static/resources/view/fchomo/node.js:1704
+#: htdocs/luci-static/resources/view/fchomo/node.js:279
+#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/view/fchomo/node.js:1781
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:414
msgid "HTTP header"
msgstr "HTTP header"
-#: htdocs/luci-static/resources/fchomo/listeners.js:429
-#: htdocs/luci-static/resources/view/fchomo/node.js:461
+#: htdocs/luci-static/resources/fchomo/listeners.js:430
+#: htdocs/luci-static/resources/view/fchomo/node.js:472
msgid "HTTP mask"
msgstr "HTTP 伪装"
-#: htdocs/luci-static/resources/fchomo/listeners.js:434
-#: htdocs/luci-static/resources/view/fchomo/node.js:466
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/fchomo/listeners.js:435
+#: htdocs/luci-static/resources/view/fchomo/node.js:477
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "HTTP mask mode"
msgstr "HTTP 伪装模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:491
+#: htdocs/luci-static/resources/view/fchomo/node.js:502
msgid "HTTP mask multiplex"
msgstr "HTTP 伪装多路复用"
-#: htdocs/luci-static/resources/view/fchomo/node.js:476
-#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/view/fchomo/node.js:492
msgid "HTTP mask: %s"
msgstr "HTTP 伪装: %s"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/view/fchomo/node.js:1258
msgid "HTTP request method"
msgstr "HTTP 请求方法"
-#: htdocs/luci-static/resources/fchomo/listeners.js:444
-#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/fchomo/listeners.js:445
+#: htdocs/luci-static/resources/view/fchomo/node.js:498
msgid "HTTP root path"
msgstr "HTTP 根路径"
@@ -1302,25 +1311,25 @@ msgid ""
"returned if empty."
msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1198
#: htdocs/luci-static/resources/view/fchomo/node.js:1209
-#: htdocs/luci-static/resources/view/fchomo/node.js:1216
+#: htdocs/luci-static/resources/view/fchomo/node.js:1220
+#: htdocs/luci-static/resources/view/fchomo/node.js:1227
msgid "HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:858
+#: htdocs/luci-static/resources/view/fchomo/global.js:876
msgid "Handle domain"
msgstr "处理域名"
-#: htdocs/luci-static/resources/view/fchomo/node.js:383
+#: htdocs/luci-static/resources/view/fchomo/node.js:394
msgid "Handshake mode"
msgstr "握手模式"
-#: htdocs/luci-static/resources/fchomo/listeners.js:581
+#: htdocs/luci-static/resources/fchomo/listeners.js:582
msgid "Handshake target that supports TLS 1.3"
msgstr "握手目标 (支援 TLS 1.3)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:416
+#: htdocs/luci-static/resources/fchomo/listeners.js:417
msgid "Handshake timeout"
msgstr "握手超时"
@@ -1328,36 +1337,36 @@ msgstr "握手超时"
msgid "Header to read real client IP from (e.g. X-Forwarded-For)"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:751
msgid "Health check"
msgstr "健康检查"
#: htdocs/luci-static/resources/view/fchomo/client.js:1101
-#: htdocs/luci-static/resources/view/fchomo/node.js:1818
+#: htdocs/luci-static/resources/view/fchomo/node.js:1895
msgid "Health check URL"
msgstr "健康检查 URL"
#: htdocs/luci-static/resources/view/fchomo/client.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1848
+#: htdocs/luci-static/resources/view/fchomo/node.js:1925
msgid "Health check expected status"
msgstr "健康检查预期状态"
#: htdocs/luci-static/resources/view/fchomo/client.js:1110
-#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1905
msgid "Health check interval"
msgstr "健康检查间隔"
#: htdocs/luci-static/resources/view/fchomo/client.js:1117
-#: htdocs/luci-static/resources/view/fchomo/node.js:1835
+#: htdocs/luci-static/resources/view/fchomo/node.js:1912
msgid "Health check timeout"
msgstr "健康检查超时"
#: htdocs/luci-static/resources/view/fchomo/client.js:1013
-#: htdocs/luci-static/resources/view/fchomo/node.js:1606
+#: htdocs/luci-static/resources/view/fchomo/node.js:1620
msgid "Health fields"
msgstr "健康字段"
-#: htdocs/luci-static/resources/view/fchomo/node.js:578
+#: htdocs/luci-static/resources/view/fchomo/node.js:589
msgid "Heartbeat interval"
msgstr "心跳间隔"
@@ -1365,20 +1374,20 @@ msgstr "心跳间隔"
msgid "Hidden"
msgstr "隐藏"
-#: htdocs/luci-static/resources/fchomo/listeners.js:574
-#: htdocs/luci-static/resources/view/fchomo/node.js:841
+#: htdocs/luci-static/resources/fchomo/listeners.js:575
+#: htdocs/luci-static/resources/view/fchomo/node.js:852
msgid "Host that supports TLS 1.3"
msgstr "主机名称 (支援 TLS 1.3)"
-#: htdocs/luci-static/resources/view/fchomo/node.js:338
+#: htdocs/luci-static/resources/view/fchomo/node.js:349
msgid "Host-key"
msgstr "主机密钥"
-#: htdocs/luci-static/resources/view/fchomo/node.js:333
+#: htdocs/luci-static/resources/view/fchomo/node.js:344
msgid "Host-key algorithms"
msgstr "主机密钥算法"
-#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:492
msgid "Host/SNI override"
msgstr "主机/SNI 覆盖"
@@ -1397,7 +1406,7 @@ msgid "Hysteria2 Realm"
msgstr "Hysteria2 Realm"
#: htdocs/luci-static/resources/fchomo/listeners.js:121
-#: htdocs/luci-static/resources/view/fchomo/node.js:224
+#: htdocs/luci-static/resources/view/fchomo/node.js:235
msgid "Hysteria2 Realm fields"
msgstr "Hysteria2 Realm 字段"
@@ -1410,12 +1419,12 @@ msgstr ""
msgid "IP CIDR"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:540
+#: htdocs/luci-static/resources/view/fchomo/node.js:551
msgid "IP override"
msgstr "IP 覆写"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1486
-#: htdocs/luci-static/resources/view/fchomo/node.js:1804
+#: htdocs/luci-static/resources/view/fchomo/node.js:1497
+#: htdocs/luci-static/resources/view/fchomo/node.js:1881
msgid "IP version"
msgstr "IP 版本"
@@ -1428,7 +1437,7 @@ msgid "IPv6 only"
msgstr "仅 IPv6"
#: htdocs/luci-static/resources/view/fchomo/client.js:1389
-#: htdocs/luci-static/resources/view/fchomo/global.js:418
+#: htdocs/luci-static/resources/view/fchomo/global.js:436
msgid "IPv6 support"
msgstr "IPv6 支持"
@@ -1436,19 +1445,19 @@ msgstr "IPv6 支持"
msgid "Icon"
msgstr "图标"
-#: htdocs/luci-static/resources/view/fchomo/node.js:622
+#: htdocs/luci-static/resources/view/fchomo/node.js:633
msgid "Idle session check interval"
msgstr "闲置会话检查间隔"
-#: htdocs/luci-static/resources/view/fchomo/node.js:629
+#: htdocs/luci-static/resources/view/fchomo/node.js:640
msgid "Idle session timeout"
msgstr "闲置会话超时"
-#: htdocs/luci-static/resources/fchomo/listeners.js:485
+#: htdocs/luci-static/resources/fchomo/listeners.js:486
msgid "Idle timeout"
msgstr "闲置超时"
-#: htdocs/luci-static/resources/fchomo.js:1429
+#: htdocs/luci-static/resources/fchomo.js:1437
msgid "If All ports is selected, uncheck others"
msgstr "如果选择了“所有端口”,则取消选中“其他”"
@@ -1460,7 +1469,7 @@ msgstr "如果选择了“阻止”,则取消选中“其他”"
msgid "Ignore client bandwidth"
msgstr "忽略客户端带宽"
-#: htdocs/luci-static/resources/fchomo.js:728
+#: htdocs/luci-static/resources/fchomo.js:736
msgid "Import"
msgstr "导入"
@@ -1476,8 +1485,8 @@ msgstr "导入"
#: htdocs/luci-static/resources/view/fchomo/client.js:1723
#: htdocs/luci-static/resources/view/fchomo/client.js:1758
#: htdocs/luci-static/resources/view/fchomo/client.js:1779
-#: htdocs/luci-static/resources/view/fchomo/node.js:1511
-#: htdocs/luci-static/resources/view/fchomo/node.js:1592
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
+#: htdocs/luci-static/resources/view/fchomo/node.js:1606
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:249
msgid "Import mihomo config"
@@ -1491,55 +1500,55 @@ msgstr "导入规则集链接"
#: htdocs/luci-static/resources/fchomo/listeners.js:176
#: htdocs/luci-static/resources/fchomo/listeners.js:182
-#: htdocs/luci-static/resources/view/fchomo/node.js:287
-#: htdocs/luci-static/resources/view/fchomo/node.js:293
-#: htdocs/luci-static/resources/view/fchomo/node.js:1762
-#: htdocs/luci-static/resources/view/fchomo/node.js:1768
+#: htdocs/luci-static/resources/view/fchomo/node.js:298
+#: htdocs/luci-static/resources/view/fchomo/node.js:304
+#: htdocs/luci-static/resources/view/fchomo/node.js:1839
+#: htdocs/luci-static/resources/view/fchomo/node.js:1845
msgid "In Mbps."
msgstr "单位为 Mbps。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1682
+#: htdocs/luci-static/resources/view/fchomo/node.js:1696
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:392
msgid "In bytes. %s will be used if empty."
msgstr "单位为字节。留空则使用 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:579
-#: htdocs/luci-static/resources/view/fchomo/node.js:586
+#: htdocs/luci-static/resources/view/fchomo/node.js:590
+#: htdocs/luci-static/resources/view/fchomo/node.js:597
msgid "In millisecond."
msgstr "单位为毫秒。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1118
#: htdocs/luci-static/resources/view/fchomo/client.js:1147
-#: htdocs/luci-static/resources/view/fchomo/node.js:1836
+#: htdocs/luci-static/resources/view/fchomo/node.js:1913
msgid "In millisecond. %s will be used if empty."
msgstr "单位为毫秒。留空则使用 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1339
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
msgid "In milliseconds."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:417
-#: htdocs/luci-static/resources/fchomo/listeners.js:486
-#: htdocs/luci-static/resources/fchomo/listeners.js:493
-#: htdocs/luci-static/resources/view/fchomo/node.js:623
-#: htdocs/luci-static/resources/view/fchomo/node.js:630
-#: htdocs/luci-static/resources/view/fchomo/node.js:1286
+#: htdocs/luci-static/resources/fchomo/listeners.js:418
+#: htdocs/luci-static/resources/fchomo/listeners.js:487
+#: htdocs/luci-static/resources/fchomo/listeners.js:494
+#: htdocs/luci-static/resources/view/fchomo/node.js:634
+#: htdocs/luci-static/resources/view/fchomo/node.js:641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1297
msgid "In seconds."
msgstr "单位为秒。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1111
-#: htdocs/luci-static/resources/view/fchomo/global.js:428
-#: htdocs/luci-static/resources/view/fchomo/global.js:433
-#: htdocs/luci-static/resources/view/fchomo/global.js:518
-#: htdocs/luci-static/resources/view/fchomo/node.js:281
-#: htdocs/luci-static/resources/view/fchomo/node.js:1688
-#: htdocs/luci-static/resources/view/fchomo/node.js:1829
+#: htdocs/luci-static/resources/view/fchomo/global.js:446
+#: htdocs/luci-static/resources/view/fchomo/global.js:451
+#: htdocs/luci-static/resources/view/fchomo/global.js:536
+#: htdocs/luci-static/resources/view/fchomo/node.js:292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1702
+#: htdocs/luci-static/resources/view/fchomo/node.js:1906
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:398
msgid "In seconds. %s will be used if empty."
msgstr "单位为秒。留空则使用 %s。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:738
-#: htdocs/luci-static/resources/view/fchomo/node.js:960
+#: htdocs/luci-static/resources/fchomo/listeners.js:739
+#: htdocs/luci-static/resources/view/fchomo/node.js:971
msgid ""
"In the order of one Padding-Length and one Padding-"
"Interval, infinite concatenation."
@@ -1547,7 +1556,7 @@ msgstr ""
"按照一个 Padding-Length 一个 Padding-Interval 的顺"
"序,无限连接。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:452
+#: htdocs/luci-static/resources/view/fchomo/global.js:470
#: htdocs/luci-static/resources/view/fchomo/inbound.js:28
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:38
msgid "Inbound"
@@ -1581,38 +1590,38 @@ msgstr "引入所有代理节点。"
msgid "Info"
msgstr "信息"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1621
+#: htdocs/luci-static/resources/view/fchomo/node.js:1635
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:288
msgid "Inline"
msgstr "内嵌"
-#: htdocs/luci-static/resources/view/fchomo/global.js:730
+#: htdocs/luci-static/resources/view/fchomo/global.js:748
msgid "Interface Control"
msgstr "接口控制"
#: htdocs/luci-static/resources/fchomo.js:52
#: htdocs/luci-static/resources/fchomo.js:59
#: htdocs/luci-static/resources/fchomo.js:172
-#: htdocs/luci-static/resources/fchomo.js:367
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
+#: htdocs/luci-static/resources/fchomo.js:375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1855
msgid "Keep default"
msgstr "保持缺省"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "Keep-alive period"
msgstr "Keep-alive 周期"
#: htdocs/luci-static/resources/fchomo/listeners.js:296
-#: htdocs/luci-static/resources/view/fchomo/node.js:397
+#: htdocs/luci-static/resources/view/fchomo/node.js:408
msgid "Key"
msgstr "密钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:975
-#: htdocs/luci-static/resources/view/fchomo/node.js:1127
+#: htdocs/luci-static/resources/fchomo/listeners.js:976
+#: htdocs/luci-static/resources/view/fchomo/node.js:1138
msgid "Key path"
msgstr "证书路径"
-#: htdocs/luci-static/resources/fchomo/listeners.js:757
+#: htdocs/luci-static/resources/fchomo/listeners.js:758
msgid "Keypairs"
msgstr "密钥对"
@@ -1623,24 +1632,24 @@ msgstr "密钥对"
#: htdocs/luci-static/resources/view/fchomo/client.js:1498
#: htdocs/luci-static/resources/view/fchomo/client.js:1729
#: htdocs/luci-static/resources/view/fchomo/client.js:1785
-#: htdocs/luci-static/resources/view/fchomo/node.js:230
-#: htdocs/luci-static/resources/view/fchomo/node.js:1609
-#: htdocs/luci-static/resources/view/fchomo/node.js:1897
+#: htdocs/luci-static/resources/view/fchomo/node.js:241
+#: htdocs/luci-static/resources/view/fchomo/node.js:1623
+#: htdocs/luci-static/resources/view/fchomo/node.js:1974
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:267
msgid "Label"
msgstr "标签"
#: htdocs/luci-static/resources/view/fchomo/client.js:1124
-#: htdocs/luci-static/resources/view/fchomo/node.js:1842
+#: htdocs/luci-static/resources/view/fchomo/node.js:1919
msgid "Lazy"
msgstr "懒惰状态"
-#: htdocs/luci-static/resources/fchomo/listeners.js:436
-#: htdocs/luci-static/resources/view/fchomo/node.js:468
+#: htdocs/luci-static/resources/fchomo/listeners.js:437
+#: htdocs/luci-static/resources/view/fchomo/node.js:479
msgid "Legacy"
msgstr "传统"
-#: htdocs/luci-static/resources/fchomo/listeners.js:543
+#: htdocs/luci-static/resources/fchomo/listeners.js:544
msgid ""
"Legacy protocol support (VMess MD5 Authentication) is provided for "
"compatibility purposes only, use of alterId > 1 is not recommended."
@@ -1648,12 +1657,12 @@ msgstr ""
"提供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > "
"1。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:497
+#: htdocs/luci-static/resources/view/fchomo/global.js:515
msgid "Less compatibility and sometimes better performance."
msgstr "有时性能更好。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:956
-#: htdocs/luci-static/resources/view/fchomo/node.js:1046
+#: htdocs/luci-static/resources/fchomo/listeners.js:957
+#: htdocs/luci-static/resources/view/fchomo/node.js:1057
msgid "List of supported application level protocols, in order of preference."
msgstr "支持的应用层协议协商列表,按顺序排列。"
@@ -1665,7 +1674,7 @@ msgstr "监听地址"
msgid "Listen fields"
msgstr "监听字段"
-#: htdocs/luci-static/resources/view/fchomo/global.js:732
+#: htdocs/luci-static/resources/view/fchomo/global.js:750
msgid "Listen interfaces"
msgstr "监听接口"
@@ -1674,26 +1683,26 @@ msgstr "监听接口"
msgid "Listen port"
msgstr "监听端口"
-#: htdocs/luci-static/resources/view/fchomo/global.js:455
+#: htdocs/luci-static/resources/view/fchomo/global.js:473
msgid "Listen ports"
msgstr "监听端口"
-#: htdocs/luci-static/resources/fchomo.js:234
+#: htdocs/luci-static/resources/fchomo.js:242
msgid "Load balance"
msgstr "负载均衡"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1619
+#: htdocs/luci-static/resources/view/fchomo/node.js:1633
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:286
msgid "Local"
msgstr "本地"
-#: htdocs/luci-static/resources/view/fchomo/node.js:716
-#: htdocs/luci-static/resources/view/fchomo/node.js:759
+#: htdocs/luci-static/resources/view/fchomo/node.js:727
+#: htdocs/luci-static/resources/view/fchomo/node.js:770
msgid "Local IPv6 address"
msgstr "本地 IPv6 地址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:708
-#: htdocs/luci-static/resources/view/fchomo/node.js:751
+#: htdocs/luci-static/resources/view/fchomo/node.js:719
+#: htdocs/luci-static/resources/view/fchomo/node.js:762
msgid "Local address"
msgstr "本地地址"
@@ -1709,28 +1718,28 @@ msgstr "日志文件不存在。"
msgid "Log is empty."
msgstr "日志为空。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:409
+#: htdocs/luci-static/resources/view/fchomo/global.js:427
msgid "Log level"
msgstr "日志等级"
-#: htdocs/luci-static/resources/fchomo/listeners.js:371
#: htdocs/luci-static/resources/fchomo/listeners.js:372
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/fchomo/listeners.js:378
-#: htdocs/luci-static/resources/view/fchomo/node.js:421
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
-#: htdocs/luci-static/resources/view/fchomo/node.js:428
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/fchomo/listeners.js:379
+#: htdocs/luci-static/resources/view/fchomo/node.js:432
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
+#: htdocs/luci-static/resources/view/fchomo/node.js:439
msgid "Low-entropy data stream"
msgstr "低熵数据流"
-#: htdocs/luci-static/resources/fchomo.js:442
+#: htdocs/luci-static/resources/fchomo.js:450
msgid "Lowercase only"
msgstr "仅限小写"
-#: htdocs/luci-static/resources/view/fchomo/global.js:505
-#: htdocs/luci-static/resources/view/fchomo/node.js:722
-#: htdocs/luci-static/resources/view/fchomo/node.js:805
+#: htdocs/luci-static/resources/view/fchomo/global.js:523
+#: htdocs/luci-static/resources/view/fchomo/node.js:733
+#: htdocs/luci-static/resources/view/fchomo/node.js:816
msgid "MTU"
msgstr ""
@@ -1770,24 +1779,24 @@ msgstr "匹配响应通过 ipcidr"
msgid "Match rule set."
msgstr "匹配规则集。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1303
msgid "Max Early Data"
msgstr "前置数据最大值"
-#: htdocs/luci-static/resources/fchomo/listeners.js:479
-#: htdocs/luci-static/resources/view/fchomo/node.js:565
+#: htdocs/luci-static/resources/fchomo/listeners.js:480
+#: htdocs/luci-static/resources/view/fchomo/node.js:576
msgid "Max UDP relay packet size"
msgstr "UDP 中继数据包最大尺寸"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1174
+#: htdocs/luci-static/resources/fchomo/listeners.js:1175
msgid "Max buffered posts"
msgstr "POST 最大缓冲"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
msgid "Max concurrency"
msgstr "最大并发"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
+#: htdocs/luci-static/resources/view/fchomo/node.js:1366
msgid "Max connections"
msgstr "最大连接数"
@@ -1796,16 +1805,16 @@ msgid "Max count of failures"
msgstr "最大失败次数"
#: htdocs/luci-static/resources/fchomo/listeners.js:181
-#: htdocs/luci-static/resources/view/fchomo/node.js:292
+#: htdocs/luci-static/resources/view/fchomo/node.js:303
msgid "Max download speed"
msgstr "最大下载速度"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1185
-#: htdocs/luci-static/resources/view/fchomo/node.js:1332
+#: htdocs/luci-static/resources/fchomo/listeners.js:1186
+#: htdocs/luci-static/resources/view/fchomo/node.js:1343
msgid "Max each POST bytes"
msgstr "POST 最大字节数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:592
+#: htdocs/luci-static/resources/view/fchomo/node.js:603
msgid "Max open streams"
msgstr "限制打开流的数量"
@@ -1817,29 +1826,29 @@ msgstr "最大 Realms 总数"
msgid "Max realms per client IP"
msgstr "每客户端 IP 最大 Realms 总数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1365
+#: htdocs/luci-static/resources/view/fchomo/node.js:1376
msgid "Max request times"
msgstr "最大请求次数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
msgid "Max reusable seconds"
msgstr "最大可复用秒数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1360
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
msgid "Max reuse times"
msgstr "最大复用次数"
#: htdocs/luci-static/resources/fchomo/listeners.js:175
-#: htdocs/luci-static/resources/view/fchomo/node.js:286
+#: htdocs/luci-static/resources/view/fchomo/node.js:297
msgid "Max upload speed"
msgstr "最大上传速度"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1396
-#: htdocs/luci-static/resources/view/fchomo/node.js:1416
+#: htdocs/luci-static/resources/view/fchomo/node.js:1407
+#: htdocs/luci-static/resources/view/fchomo/node.js:1427
msgid "Maximum connections"
msgstr "最大连接数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1414
+#: htdocs/luci-static/resources/view/fchomo/node.js:1425
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1847,19 +1856,19 @@ msgstr ""
"在打开新连接之前,连接中的最大多路复用流数量。
与 %s 和 "
"%s 冲突。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:401
-#: htdocs/luci-static/resources/view/fchomo/node.js:440
+#: htdocs/luci-static/resources/fchomo/listeners.js:402
+#: htdocs/luci-static/resources/view/fchomo/node.js:451
msgid "Maximum padding rate"
msgstr "最大填充率"
-#: htdocs/luci-static/resources/fchomo/listeners.js:409
-#: htdocs/luci-static/resources/view/fchomo/node.js:448
+#: htdocs/luci-static/resources/fchomo/listeners.js:410
+#: htdocs/luci-static/resources/view/fchomo/node.js:459
msgid ""
"Maximum padding rate must be greater than or equal to the minimum padding "
"rate."
msgstr "最大填充率必须大于等于最小填充率。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1413
+#: htdocs/luci-static/resources/view/fchomo/node.js:1424
msgid "Maximum streams"
msgstr "最大流数量"
@@ -1880,52 +1889,52 @@ msgstr "Mihomo 客户端"
msgid "Mihomo server"
msgstr "Mihomo 服务端"
-#: htdocs/luci-static/resources/view/fchomo/node.js:636
+#: htdocs/luci-static/resources/view/fchomo/node.js:647
msgid "Min of idle sessions to keep"
msgstr "要保留的最少闲置会话数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1338
+#: htdocs/luci-static/resources/view/fchomo/node.js:1349
msgid "Min posts interval"
msgstr "POST 请求最小间隔时间"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1405
+#: htdocs/luci-static/resources/view/fchomo/node.js:1416
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在打开新连接之前,连接中的最小多路复用流数量。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:394
-#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/fchomo/listeners.js:395
+#: htdocs/luci-static/resources/view/fchomo/node.js:444
msgid "Minimum padding rate"
msgstr "最小填充率"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1404
-#: htdocs/luci-static/resources/view/fchomo/node.js:1416
+#: htdocs/luci-static/resources/view/fchomo/node.js:1415
+#: htdocs/luci-static/resources/view/fchomo/node.js:1427
msgid "Minimum streams"
msgstr "最小流数量"
#: htdocs/luci-static/resources/fchomo.js:155
-#: htdocs/luci-static/resources/view/fchomo/global.js:500
+#: htdocs/luci-static/resources/view/fchomo/global.js:518
msgid "Mixed"
msgstr "混合"
-#: htdocs/luci-static/resources/view/fchomo/global.js:500
+#: htdocs/luci-static/resources/view/fchomo/global.js:518
msgid "Mixed system TCP stack and gVisor UDP stack."
msgstr "混合 系统 TCP 栈和 gVisor UDP 栈。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:458
+#: htdocs/luci-static/resources/view/fchomo/global.js:476
msgid "Mixed port"
msgstr "混合端口"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1382
+#: htdocs/luci-static/resources/view/fchomo/node.js:1393
msgid "Multiplex"
msgstr "多路复用"
#: htdocs/luci-static/resources/fchomo/listeners.js:124
-#: htdocs/luci-static/resources/view/fchomo/node.js:227
+#: htdocs/luci-static/resources/view/fchomo/node.js:238
msgid "Multiplex fields"
msgstr "多路复用字段"
-#: htdocs/luci-static/resources/view/fchomo/node.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:385
msgid "Multiplexing"
msgstr "多路复用"
@@ -1934,11 +1943,11 @@ msgstr "多路复用"
msgid "NOT"
msgstr "NOT"
-#: htdocs/luci-static/resources/fchomo/listeners.js:611
+#: htdocs/luci-static/resources/fchomo/listeners.js:612
msgid "Name of the Proxy group as outbound."
msgstr "出站代理组的名称。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1694
+#: htdocs/luci-static/resources/view/fchomo/node.js:1708
msgid "Name of the Proxy group to download provider."
msgstr "用于下载供应商订阅的代理组名称。"
@@ -1946,31 +1955,31 @@ msgstr "用于下载供应商订阅的代理组名称。"
msgid "Name of the Proxy group to download rule set."
msgstr "用于下载规则集订阅的代理组名称。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:605
+#: htdocs/luci-static/resources/fchomo/listeners.js:606
msgid "Name of the Sub rule used for inbound matching."
msgstr "用于入站匹配的子规则名称。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:549
+#: htdocs/luci-static/resources/view/fchomo/node.js:560
msgid "Native UDP"
msgstr "原生 UDP"
-#: htdocs/luci-static/resources/fchomo.js:384
+#: htdocs/luci-static/resources/fchomo.js:392
msgid "Native appearance"
msgstr "原生外观"
-#: htdocs/luci-static/resources/fchomo/listeners.js:637
+#: htdocs/luci-static/resources/fchomo/listeners.js:638
msgid "Network type"
msgstr "网络类型"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1857
msgid "No"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:446
+#: htdocs/luci-static/resources/view/fchomo/global.js:464
msgid "No Authentication IP ranges"
msgstr "无需认证的 IP 范围"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1169
+#: htdocs/luci-static/resources/fchomo/listeners.js:1170
msgid "No SSE header"
msgstr "无 SSE header"
@@ -1978,16 +1987,16 @@ msgstr "无 SSE header"
msgid "No add'l params"
msgstr "无附加参数"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1322
+#: htdocs/luci-static/resources/view/fchomo/node.js:1333
msgid "No gRPC header"
msgstr "无 gRPC header"
#: htdocs/luci-static/resources/view/fchomo/client.js:1125
-#: htdocs/luci-static/resources/view/fchomo/node.js:1843
+#: htdocs/luci-static/resources/view/fchomo/node.js:1920
msgid "No testing is performed when this provider node is not in use."
msgstr "当此供应商的节点未使用时,不执行任何测试。"
-#: htdocs/luci-static/resources/fchomo.js:689
+#: htdocs/luci-static/resources/fchomo.js:697
msgid "No valid %s found."
msgstr "未找到有效的%s。"
@@ -1996,23 +2005,22 @@ msgid "No valid rule-set link found."
msgstr "未找到有效的规则集链接。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1043
-#: htdocs/luci-static/resources/view/fchomo/node.js:217
-#: root/usr/share/luci/menu.d/luci-app-fchomo.json:46
+#: htdocs/luci-static/resources/view/fchomo/node.js:228
msgid "Node"
msgstr "节点"
#: htdocs/luci-static/resources/view/fchomo/client.js:1170
-#: htdocs/luci-static/resources/view/fchomo/node.js:1863
+#: htdocs/luci-static/resources/view/fchomo/node.js:1940
msgid "Node exclude filter"
msgstr "排除节点"
#: htdocs/luci-static/resources/view/fchomo/client.js:1175
-#: htdocs/luci-static/resources/view/fchomo/node.js:1870
+#: htdocs/luci-static/resources/view/fchomo/node.js:1947
msgid "Node exclude type"
msgstr "排除节点类型"
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1857
+#: htdocs/luci-static/resources/view/fchomo/node.js:1934
msgid "Node filter"
msgstr "过滤节点"
@@ -2020,96 +2028,100 @@ msgstr "过滤节点"
msgid "Node switch tolerance"
msgstr "节点切换容差"
-#: htdocs/luci-static/resources/fchomo.js:411
+#: htdocs/luci-static/resources/fchomo.js:419
msgid "None"
msgstr "无"
-#: htdocs/luci-static/resources/view/fchomo/global.js:616
+#: htdocs/luci-static/resources/view/fchomo/global.js:634
msgid "Not Installed"
msgstr "未安装"
-#: htdocs/luci-static/resources/fchomo.js:1207
+#: htdocs/luci-static/resources/fchomo.js:1215
msgid "Not Running"
msgstr "未在运行"
-#: htdocs/luci-static/resources/view/fchomo/node.js:494
+#: htdocs/luci-static/resources/view/fchomo/node.js:505
msgid "OFF"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:496
+#: htdocs/luci-static/resources/view/fchomo/node.js:507
msgid "ON"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:567
-#: htdocs/luci-static/resources/view/fchomo/node.js:834
+#: htdocs/luci-static/resources/fchomo/listeners.js:568
+#: htdocs/luci-static/resources/view/fchomo/node.js:845
msgid "Obfs Mode"
msgstr "Obfs 模式"
#: htdocs/luci-static/resources/fchomo/listeners.js:213
-#: htdocs/luci-static/resources/view/fchomo/node.js:318
+#: htdocs/luci-static/resources/view/fchomo/node.js:329
msgid "Obfuscate maximum packet size"
msgstr "混淆最大数据包大小"
#: htdocs/luci-static/resources/fchomo/listeners.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:313
+#: htdocs/luci-static/resources/view/fchomo/node.js:324
msgid "Obfuscate minimum packet size"
msgstr "混淆最小数据包大小"
#: htdocs/luci-static/resources/fchomo/listeners.js:200
-#: htdocs/luci-static/resources/view/fchomo/node.js:305
+#: htdocs/luci-static/resources/view/fchomo/node.js:316
msgid "Obfuscate password"
msgstr "混淆密码"
#: htdocs/luci-static/resources/fchomo/listeners.js:193
-#: htdocs/luci-static/resources/fchomo/listeners.js:369
-#: htdocs/luci-static/resources/view/fchomo/node.js:298
-#: htdocs/luci-static/resources/view/fchomo/node.js:419
+#: htdocs/luci-static/resources/fchomo/listeners.js:370
+#: htdocs/luci-static/resources/view/fchomo/node.js:309
+#: htdocs/luci-static/resources/view/fchomo/node.js:430
msgid "Obfuscate type"
msgstr "混淆类型"
-#: htdocs/luci-static/resources/fchomo/listeners.js:370
#: htdocs/luci-static/resources/fchomo/listeners.js:371
-#: htdocs/luci-static/resources/view/fchomo/node.js:420
-#: htdocs/luci-static/resources/view/fchomo/node.js:421
+#: htdocs/luci-static/resources/fchomo/listeners.js:372
+#: htdocs/luci-static/resources/view/fchomo/node.js:431
+#: htdocs/luci-static/resources/view/fchomo/node.js:432
msgid "Obfuscated as %s"
msgstr "混淆为%s"
-#: htdocs/luci-static/resources/view/fchomo/global.js:883
+#: htdocs/luci-static/resources/view/fchomo/global.js:901
msgid "One or more numbers in the range 0-63 separated by commas"
msgstr "0-63 范围内的一个或多个数字,以逗号分隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:896
+#: htdocs/luci-static/resources/fchomo/listeners.js:897
msgid "Only applicable when %s are used as a frontend."
msgstr "仅当 %s 用作前端时适用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:378
-#: htdocs/luci-static/resources/view/fchomo/node.js:428
+#: htdocs/luci-static/resources/fchomo/listeners.js:379
+#: htdocs/luci-static/resources/view/fchomo/node.js:439
msgid "Only applies to the %s."
msgstr "只对%s生效。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:733
+#: htdocs/luci-static/resources/view/fchomo/global.js:751
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr "只处理来自指定接口的流量。留空表示全部。"
-#: htdocs/luci-static/resources/fchomo.js:1201
+#: htdocs/luci-static/resources/fchomo.js:1209
msgid "Open Dashboard"
msgstr "打开面板"
-#: htdocs/luci-static/resources/view/fchomo/global.js:397
+#: htdocs/luci-static/resources/view/fchomo/global.js:415
msgid "Operation mode"
msgstr "运行模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:658
-#: htdocs/luci-static/resources/view/fchomo/global.js:696
+#: root/usr/share/luci/menu.d/luci-app-fchomo.json:46
+msgid "Outbound"
+msgstr "出站"
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:676
+#: htdocs/luci-static/resources/view/fchomo/global.js:714
msgid "Override destination"
msgstr "覆盖目标地址"
#: htdocs/luci-static/resources/view/fchomo/client.js:1012
-#: htdocs/luci-static/resources/view/fchomo/node.js:1605
+#: htdocs/luci-static/resources/view/fchomo/node.js:1619
msgid "Override fields"
msgstr "覆盖字段"
-#: htdocs/luci-static/resources/view/fchomo/node.js:541
+#: htdocs/luci-static/resources/view/fchomo/node.js:552
msgid "Override the IP address of the server that DNS response."
msgstr "覆盖 DNS 回应的服务器的 IP 地址。"
@@ -2117,7 +2129,7 @@ msgstr "覆盖 DNS 回应的服务器的 IP 地址。"
msgid "Override the Proxy group of DNS server."
msgstr "覆盖 DNS 服务器所使用的代理组。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:659
+#: htdocs/luci-static/resources/view/fchomo/global.js:677
msgid "Override the connection destination address with the sniffed domain."
msgstr "使用嗅探到的域名覆盖连接目标。"
@@ -2125,7 +2137,7 @@ msgstr "使用嗅探到的域名覆盖连接目标。"
msgid "Override the existing ECS in original request."
msgstr "覆盖原始请求中已有的 ECS。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1154
+#: htdocs/luci-static/resources/view/fchomo/node.js:1165
msgid "Overrides the domain name used for HTTPS record queries."
msgstr "覆盖用于 HTTPS 记录查询的域名。"
@@ -2133,37 +2145,37 @@ msgstr "覆盖用于 HTTPS 记录查询的域名。"
msgid "Overview"
msgstr "概览"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1249
+#: htdocs/luci-static/resources/view/fchomo/node.js:1260
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1250
+#: htdocs/luci-static/resources/view/fchomo/node.js:1261
msgid "PUT"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:685
+#: htdocs/luci-static/resources/view/fchomo/node.js:696
msgid "Packet encoding"
msgstr "数据包编码"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1327
+#: htdocs/luci-static/resources/view/fchomo/node.js:1338
msgid "Padding bytes"
msgstr "填充字节"
-#: htdocs/luci-static/resources/fchomo/listeners.js:523
+#: htdocs/luci-static/resources/fchomo/listeners.js:524
msgid "Padding scheme"
msgstr "填充方案"
-#: htdocs/luci-static/resources/fchomo/listeners.js:736
-#: htdocs/luci-static/resources/view/fchomo/node.js:958
+#: htdocs/luci-static/resources/fchomo/listeners.js:737
+#: htdocs/luci-static/resources/view/fchomo/node.js:969
msgid "Paddings"
msgstr "填充 (Paddings)"
#: htdocs/luci-static/resources/fchomo/listeners.js:166
#: htdocs/luci-static/resources/fchomo/listeners.js:263
-#: htdocs/luci-static/resources/fchomo/listeners.js:588
-#: htdocs/luci-static/resources/view/fchomo/node.js:262
-#: htdocs/luci-static/resources/view/fchomo/node.js:352
-#: htdocs/luci-static/resources/view/fchomo/node.js:849
+#: htdocs/luci-static/resources/fchomo/listeners.js:589
+#: htdocs/luci-static/resources/view/fchomo/node.js:273
+#: htdocs/luci-static/resources/view/fchomo/node.js:363
+#: htdocs/luci-static/resources/view/fchomo/node.js:860
msgid "Password"
msgstr "密码"
@@ -2175,27 +2187,27 @@ msgstr "捆绑包路径"
msgid "Path in bundle: %s"
msgstr "在捆绑包%s中的路径"
-#: htdocs/luci-static/resources/fchomo/listeners.js:676
-#: htdocs/luci-static/resources/view/fchomo/node.js:1669
+#: htdocs/luci-static/resources/fchomo/listeners.js:677
+#: htdocs/luci-static/resources/view/fchomo/node.js:1683
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:373
msgid "Payload"
msgstr "Payload"
-#: htdocs/luci-static/resources/view/fchomo/node.js:773
+#: htdocs/luci-static/resources/view/fchomo/node.js:784
msgid "Peer pubkic key"
msgstr "对端公钥"
-#: htdocs/luci-static/resources/view/fchomo/global.js:523
+#: htdocs/luci-static/resources/view/fchomo/global.js:541
msgid ""
"Performance may degrade slightly, so it is not recommended to enable on when "
"it is not needed."
msgstr "性能可能会略有下降,建议仅在需要时开启。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:800
+#: htdocs/luci-static/resources/view/fchomo/node.js:811
msgid "Periodically sends data packets to maintain connection persistence."
msgstr "定期发送数据包以维持连接持久性。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:799
+#: htdocs/luci-static/resources/view/fchomo/node.js:810
msgid "Persistent keepalive"
msgstr "持久连接"
@@ -2203,7 +2215,7 @@ msgstr "持久连接"
msgid "Plain text"
msgstr "纯文本 text"
-#: htdocs/luci-static/resources/view/fchomo/global.js:860
+#: htdocs/luci-static/resources/view/fchomo/global.js:878
msgid ""
"Please ensure that the DNS query of the domains to be processed in the DNS "
"policyare send via DIRECT/Proxy Node in the same semantics as Routing "
@@ -2218,8 +2230,8 @@ msgid ""
"standards."
msgstr "链接格式标准请参考 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1642
-#: htdocs/luci-static/resources/view/fchomo/node.js:1668
+#: htdocs/luci-static/resources/view/fchomo/node.js:1656
+#: htdocs/luci-static/resources/view/fchomo/node.js:1682
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:346
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:372
msgid ""
@@ -2234,64 +2246,64 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1455
#: htdocs/luci-static/resources/view/fchomo/client.js:1707
#: htdocs/luci-static/resources/view/fchomo/client.js:1759
-#: htdocs/luci-static/resources/view/fchomo/node.js:1512
+#: htdocs/luci-static/resources/view/fchomo/node.js:1523
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:155
msgid "Please type %s fields of mihomo config."
msgstr "请输入 mihomo 配置的 %s 字段。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:559
-#: htdocs/luci-static/resources/view/fchomo/node.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:560
+#: htdocs/luci-static/resources/view/fchomo/node.js:834
msgid "Plugin"
msgstr "插件"
-#: htdocs/luci-static/resources/fchomo/listeners.js:567
-#: htdocs/luci-static/resources/fchomo/listeners.js:574
-#: htdocs/luci-static/resources/fchomo/listeners.js:581
-#: htdocs/luci-static/resources/fchomo/listeners.js:588
-#: htdocs/luci-static/resources/fchomo/listeners.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:834
-#: htdocs/luci-static/resources/view/fchomo/node.js:841
-#: htdocs/luci-static/resources/view/fchomo/node.js:849
-#: htdocs/luci-static/resources/view/fchomo/node.js:855
-#: htdocs/luci-static/resources/view/fchomo/node.js:863
-#: htdocs/luci-static/resources/view/fchomo/node.js:869
+#: htdocs/luci-static/resources/fchomo/listeners.js:568
+#: htdocs/luci-static/resources/fchomo/listeners.js:575
+#: htdocs/luci-static/resources/fchomo/listeners.js:582
+#: htdocs/luci-static/resources/fchomo/listeners.js:589
+#: htdocs/luci-static/resources/fchomo/listeners.js:595
+#: htdocs/luci-static/resources/view/fchomo/node.js:845
+#: htdocs/luci-static/resources/view/fchomo/node.js:852
+#: htdocs/luci-static/resources/view/fchomo/node.js:860
+#: htdocs/luci-static/resources/view/fchomo/node.js:866
+#: htdocs/luci-static/resources/view/fchomo/node.js:874
+#: htdocs/luci-static/resources/view/fchomo/node.js:880
msgid "Plugin:"
msgstr "插件:"
-#: htdocs/luci-static/resources/view/fchomo/node.js:250
+#: htdocs/luci-static/resources/view/fchomo/node.js:261
msgid "Port"
msgstr "端口"
-#: htdocs/luci-static/resources/fchomo.js:1438
+#: htdocs/luci-static/resources/fchomo.js:1446
msgid "Port %s alrealy exists!"
msgstr "端口 %s 已存在!"
-#: htdocs/luci-static/resources/view/fchomo/node.js:280
+#: htdocs/luci-static/resources/view/fchomo/node.js:291
msgid "Port hop interval"
msgstr "端口跳跃间隔"
-#: htdocs/luci-static/resources/view/fchomo/node.js:362
+#: htdocs/luci-static/resources/view/fchomo/node.js:373
msgid "Port range"
msgstr "端口范围"
-#: htdocs/luci-static/resources/view/fchomo/global.js:693
+#: htdocs/luci-static/resources/view/fchomo/global.js:711
msgid "Ports"
msgstr "端口"
#: htdocs/luci-static/resources/fchomo/listeners.js:153
-#: htdocs/luci-static/resources/view/fchomo/node.js:275
+#: htdocs/luci-static/resources/view/fchomo/node.js:286
msgid "Ports pool"
msgstr "端口池"
#: htdocs/luci-static/resources/fchomo/listeners.js:225
-#: htdocs/luci-static/resources/fchomo/listeners.js:455
-#: htdocs/luci-static/resources/view/fchomo/node.js:511
-#: htdocs/luci-static/resources/view/fchomo/node.js:780
+#: htdocs/luci-static/resources/fchomo/listeners.js:456
+#: htdocs/luci-static/resources/view/fchomo/node.js:522
+#: htdocs/luci-static/resources/view/fchomo/node.js:791
msgid "Pre-shared key"
msgstr "预共享密钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:874
-#: htdocs/luci-static/resources/view/fchomo/node.js:993
+#: htdocs/luci-static/resources/fchomo/listeners.js:875
+#: htdocs/luci-static/resources/view/fchomo/node.js:1004
msgid "Pre-shared key of rendezvous server"
msgstr "牵线服务器的预共享密钥"
@@ -2303,60 +2315,60 @@ msgstr "优先 IPv4"
msgid "Prefer IPv6"
msgstr "优先 IPv6"
-#: htdocs/luci-static/resources/view/fchomo/global.js:527
+#: htdocs/luci-static/resources/view/fchomo/global.js:545
msgid ""
"Prevent ICMP loopback issues in some cases. Ping will not show real delay."
msgstr "防止某些情况下的 ICMP 环回问题。Ping 不会显示实际延迟。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:739
-#: htdocs/luci-static/resources/view/fchomo/global.js:756
-#: htdocs/luci-static/resources/view/fchomo/node.js:1476
-#: htdocs/luci-static/resources/view/fchomo/node.js:1482
-#: htdocs/luci-static/resources/view/fchomo/node.js:1792
-#: htdocs/luci-static/resources/view/fchomo/node.js:1799
+#: htdocs/luci-static/resources/view/fchomo/global.js:757
+#: htdocs/luci-static/resources/view/fchomo/global.js:774
+#: htdocs/luci-static/resources/view/fchomo/node.js:1487
+#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1869
+#: htdocs/luci-static/resources/view/fchomo/node.js:1876
msgid "Priority: Proxy Node > Global."
msgstr "优先级: 代理节点 > 全局。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:324
+#: htdocs/luci-static/resources/view/fchomo/node.js:335
msgid "Priv-key"
msgstr "密钥"
-#: htdocs/luci-static/resources/view/fchomo/node.js:328
+#: htdocs/luci-static/resources/view/fchomo/node.js:339
msgid "Priv-key passphrase"
msgstr "密钥密码"
-#: htdocs/luci-static/resources/view/fchomo/node.js:693
-#: htdocs/luci-static/resources/view/fchomo/node.js:765
+#: htdocs/luci-static/resources/view/fchomo/node.js:704
+#: htdocs/luci-static/resources/view/fchomo/node.js:776
msgid "Private key"
msgstr "私钥"
-#: htdocs/luci-static/resources/view/fchomo/global.js:403
+#: htdocs/luci-static/resources/view/fchomo/global.js:421
msgid "Process matching mode"
msgstr "进程匹配模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:687
-#: htdocs/luci-static/resources/view/fchomo/node.js:1388
+#: htdocs/luci-static/resources/view/fchomo/global.js:705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1399
msgid "Protocol"
msgstr "协议"
-#: htdocs/luci-static/resources/view/fchomo/node.js:680
+#: htdocs/luci-static/resources/view/fchomo/node.js:691
msgid "Protocol parameter. Enable length block encryption."
msgstr "协议参数。启用长度块加密。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:674
+#: htdocs/luci-static/resources/view/fchomo/node.js:685
msgid ""
"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
"default in v2ray and cannot be disabled)."
msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1057
-#: htdocs/luci-static/resources/view/fchomo/node.js:1495
-#: htdocs/luci-static/resources/view/fchomo/node.js:1504
-#: htdocs/luci-static/resources/view/fchomo/node.js:1908
+#: htdocs/luci-static/resources/view/fchomo/node.js:1506
+#: htdocs/luci-static/resources/view/fchomo/node.js:1515
+#: htdocs/luci-static/resources/view/fchomo/node.js:1985
msgid "Provider"
msgstr "供应商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1675
+#: htdocs/luci-static/resources/view/fchomo/node.js:1689
msgid "Provider URL"
msgstr "供应商订阅 URL"
@@ -2366,32 +2378,32 @@ msgstr "供应商订阅 URL"
msgid "Proxy Group"
msgstr "代理组"
-#: htdocs/luci-static/resources/view/fchomo/global.js:789
+#: htdocs/luci-static/resources/view/fchomo/global.js:807
msgid "Proxy IPv4 IP-s"
msgstr "代理 IPv4 地址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:792
+#: htdocs/luci-static/resources/view/fchomo/global.js:810
msgid "Proxy IPv6 IP-s"
msgstr "代理 IPv6 地址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:795
+#: htdocs/luci-static/resources/view/fchomo/global.js:813
msgid "Proxy MAC-s"
msgstr "代理 MAC 地址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1907
+#: htdocs/luci-static/resources/view/fchomo/node.js:219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1984
msgid "Proxy Node"
msgstr "代理节点"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1883
-#: htdocs/luci-static/resources/view/fchomo/node.js:1892
+#: htdocs/luci-static/resources/view/fchomo/node.js:1960
+#: htdocs/luci-static/resources/view/fchomo/node.js:1969
msgid "Proxy chain"
msgstr "代理链"
-#: htdocs/luci-static/resources/fchomo/listeners.js:610
+#: htdocs/luci-static/resources/fchomo/listeners.js:611
#: htdocs/luci-static/resources/view/fchomo/client.js:784
#: htdocs/luci-static/resources/view/fchomo/client.js:1553
-#: htdocs/luci-static/resources/view/fchomo/node.js:1693
+#: htdocs/luci-static/resources/view/fchomo/node.js:1707
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:403
msgid "Proxy group"
msgstr "代理组"
@@ -2400,16 +2412,16 @@ msgstr "代理组"
msgid "Proxy group override"
msgstr "代理组覆盖"
-#: htdocs/luci-static/resources/view/fchomo/global.js:479
+#: htdocs/luci-static/resources/view/fchomo/global.js:497
msgid "Proxy mode"
msgstr "代理模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:798
+#: htdocs/luci-static/resources/view/fchomo/global.js:816
msgid "Proxy routerself"
msgstr "代理路由器自身"
-#: htdocs/luci-static/resources/view/fchomo/node.js:550
-#: htdocs/luci-static/resources/view/fchomo/node.js:745
+#: htdocs/luci-static/resources/view/fchomo/node.js:561
+#: htdocs/luci-static/resources/view/fchomo/node.js:756
msgid "QUIC"
msgstr ""
@@ -2418,62 +2430,62 @@ msgstr ""
msgid "Quick Reload"
msgstr "快速重载"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1063
-#: htdocs/luci-static/resources/view/fchomo/node.js:1168
+#: htdocs/luci-static/resources/fchomo/listeners.js:1064
+#: htdocs/luci-static/resources/view/fchomo/node.js:1179
msgid "REALITY"
msgstr "REALITY"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1183
+#: htdocs/luci-static/resources/view/fchomo/node.js:1194
msgid "REALITY X25519MLKEM768 PQC support"
msgstr "REALITY X25519MLKEM768 后量子加密支持"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1100
+#: htdocs/luci-static/resources/fchomo/listeners.js:1101
msgid "REALITY certificate issued to"
msgstr "REALITY 证书颁发给"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1068
+#: htdocs/luci-static/resources/fchomo/listeners.js:1069
msgid "REALITY handshake server"
msgstr "REALITY 握手服务器"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1075
+#: htdocs/luci-static/resources/fchomo/listeners.js:1076
msgid "REALITY private key"
msgstr "REALITY 私钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1090
-#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/fchomo/listeners.js:1091
+#: htdocs/luci-static/resources/view/fchomo/node.js:1184
msgid "REALITY public key"
msgstr "REALITY 公钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1094
-#: htdocs/luci-static/resources/view/fchomo/node.js:1178
+#: htdocs/luci-static/resources/fchomo/listeners.js:1095
+#: htdocs/luci-static/resources/view/fchomo/node.js:1189
msgid "REALITY short ID"
msgstr "REALITY 标识符"
-#: htdocs/luci-static/resources/fchomo/listeners.js:707
-#: htdocs/luci-static/resources/fchomo/listeners.js:726
-#: htdocs/luci-static/resources/view/fchomo/node.js:948
+#: htdocs/luci-static/resources/fchomo/listeners.js:708
+#: htdocs/luci-static/resources/fchomo/listeners.js:727
+#: htdocs/luci-static/resources/view/fchomo/node.js:959
msgid "RTT"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:376
+#: htdocs/luci-static/resources/fchomo.js:384
msgid "Random"
msgstr "随机"
-#: htdocs/luci-static/resources/view/fchomo/global.js:647
+#: htdocs/luci-static/resources/view/fchomo/global.js:665
msgid "Random will be used if empty."
msgstr "留空将使用随机令牌。"
-#: htdocs/luci-static/resources/fchomo.js:386
+#: htdocs/luci-static/resources/fchomo.js:394
msgid "Randomized traffic characteristics"
msgstr "随机化流量特征"
-#: htdocs/luci-static/resources/fchomo/listeners.js:863
-#: htdocs/luci-static/resources/view/fchomo/node.js:982
+#: htdocs/luci-static/resources/fchomo/listeners.js:864
+#: htdocs/luci-static/resources/view/fchomo/node.js:993
msgid "Realm"
msgstr "Realm"
-#: htdocs/luci-static/resources/fchomo/listeners.js:879
-#: htdocs/luci-static/resources/view/fchomo/node.js:998
+#: htdocs/luci-static/resources/fchomo/listeners.js:880
+#: htdocs/luci-static/resources/view/fchomo/node.js:1009
msgid "Realm ID"
msgstr "Realm ID"
@@ -2481,19 +2493,19 @@ msgstr "Realm ID"
msgid "Realm name pattern"
msgstr "Realm 名称模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:463
+#: htdocs/luci-static/resources/view/fchomo/global.js:481
msgid "Redir port"
msgstr "Redir 端口"
-#: htdocs/luci-static/resources/view/fchomo/global.js:480
+#: htdocs/luci-static/resources/view/fchomo/global.js:498
msgid "Redirect TCP"
msgstr "Redirect TCP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:482
+#: htdocs/luci-static/resources/view/fchomo/global.js:500
msgid "Redirect TCP + TProxy UDP"
msgstr "Redirect TCP + TProxy UDP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:484
+#: htdocs/luci-static/resources/view/fchomo/global.js:502
msgid "Redirect TCP + Tun UDP"
msgstr "Redirect TCP + Tun UDP"
@@ -2501,7 +2513,7 @@ msgstr "Redirect TCP + Tun UDP"
msgid "Refresh every %s seconds."
msgstr "每 %s 秒刷新。"
-#: htdocs/luci-static/resources/fchomo.js:1194
+#: htdocs/luci-static/resources/fchomo.js:1202
#: htdocs/luci-static/resources/view/fchomo/client.js:928
#: htdocs/luci-static/resources/view/fchomo/global.js:193
#: htdocs/luci-static/resources/view/fchomo/server.js:45
@@ -2512,69 +2524,69 @@ msgstr "重载"
msgid "Reload All"
msgstr "重载所有"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1620
+#: htdocs/luci-static/resources/view/fchomo/node.js:1634
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:287
msgid "Remote"
msgstr "远程"
-#: htdocs/luci-static/resources/view/fchomo/node.js:728
-#: htdocs/luci-static/resources/view/fchomo/node.js:811
+#: htdocs/luci-static/resources/view/fchomo/node.js:739
+#: htdocs/luci-static/resources/view/fchomo/node.js:822
msgid "Remote DNS resolve"
msgstr "远程 DNS 解析"
-#: htdocs/luci-static/resources/fchomo.js:1359
+#: htdocs/luci-static/resources/fchomo.js:1367
msgid "Remove"
msgstr "移除"
-#: htdocs/luci-static/resources/fchomo.js:1364
-#: htdocs/luci-static/resources/view/fchomo/node.js:1596
-#: htdocs/luci-static/resources/view/fchomo/node.js:1598
+#: htdocs/luci-static/resources/fchomo.js:1372
+#: htdocs/luci-static/resources/view/fchomo/node.js:1610
+#: htdocs/luci-static/resources/view/fchomo/node.js:1612
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:261
msgid "Remove idles"
msgstr "移除闲置"
-#: htdocs/luci-static/resources/fchomo/listeners.js:868
-#: htdocs/luci-static/resources/view/fchomo/node.js:987
+#: htdocs/luci-static/resources/fchomo/listeners.js:869
+#: htdocs/luci-static/resources/view/fchomo/node.js:998
msgid "Rendezvous server"
msgstr "牵线服务器"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1722
+#: htdocs/luci-static/resources/view/fchomo/node.js:1799
msgid "Replace name"
msgstr "名称替换"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1723
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
msgid "Replace node name."
msgstr "替换节点名称"
-#: htdocs/luci-static/resources/fchomo.js:360
+#: htdocs/luci-static/resources/fchomo.js:368
msgid "Request"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1148
-#: htdocs/luci-static/resources/view/fchomo/node.js:1256
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/fchomo/listeners.js:1149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1267
+#: htdocs/luci-static/resources/view/fchomo/node.js:1274
msgid "Request path"
msgstr "请求路径"
-#: htdocs/luci-static/resources/view/fchomo/node.js:585
+#: htdocs/luci-static/resources/view/fchomo/node.js:596
msgid "Request timeout"
msgstr "请求超时"
-#: htdocs/luci-static/resources/fchomo.js:363
+#: htdocs/luci-static/resources/fchomo.js:371
msgid "Require and verify"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:361
+#: htdocs/luci-static/resources/fchomo.js:369
msgid "Require any"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:394
-#: htdocs/luci-static/resources/view/fchomo/node.js:1184
+#: htdocs/luci-static/resources/fchomo.js:402
+#: htdocs/luci-static/resources/view/fchomo/node.js:1195
msgid "Requires server support."
msgstr "需要服务器支持。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:794
+#: htdocs/luci-static/resources/view/fchomo/node.js:805
msgid "Reserved field bytes"
msgstr "保留字段字节"
@@ -2582,7 +2594,7 @@ msgstr "保留字段字节"
msgid "Resources management"
msgstr "资源管理"
-#: htdocs/luci-static/resources/view/fchomo/node.js:869
+#: htdocs/luci-static/resources/view/fchomo/node.js:880
msgid "Restls script"
msgstr "Restls 剧本"
@@ -2596,51 +2608,51 @@ msgid ""
"Returns the string input for icon in the API to display in this proxy group."
msgstr "在 API 返回 icon 所输入的字符串,以在该代理组显示。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:495
+#: htdocs/luci-static/resources/view/fchomo/node.js:506
msgid "Reuse HTTP connections to reduce RTT for each connection establishment."
msgstr "重用 HTTP 连接以减少每次建立连接的 RTT。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:492
-#: htdocs/luci-static/resources/view/fchomo/node.js:496
+#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:507
msgid "Reusing a single tunnel to carry multiple target connections within it."
msgstr "复用单条隧道使其内部承载多条目标连线。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:817
+#: htdocs/luci-static/resources/view/fchomo/global.js:835
msgid "Routing Control"
msgstr "路由控制"
-#: htdocs/luci-static/resources/view/fchomo/global.js:872
-#: htdocs/luci-static/resources/view/fchomo/global.js:875
+#: htdocs/luci-static/resources/view/fchomo/global.js:890
+#: htdocs/luci-static/resources/view/fchomo/global.js:893
msgid "Routing DSCP"
msgstr "路由 DSCP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:842
+#: htdocs/luci-static/resources/view/fchomo/global.js:860
msgid "Routing GFW"
msgstr "路由 GFW 流量"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1481
-#: htdocs/luci-static/resources/view/fchomo/node.js:1798
+#: htdocs/luci-static/resources/view/fchomo/node.js:1492
+#: htdocs/luci-static/resources/view/fchomo/node.js:1875
msgid "Routing mark"
msgstr "路由标记"
-#: htdocs/luci-static/resources/view/fchomo/global.js:755
+#: htdocs/luci-static/resources/view/fchomo/global.js:773
msgid "Routing mark (Fwmark)"
msgstr "路由标记 (Fwmark)"
-#: htdocs/luci-static/resources/view/fchomo/global.js:837
+#: htdocs/luci-static/resources/view/fchomo/global.js:855
msgid "Routing mode"
msgstr "路由模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:838
+#: htdocs/luci-static/resources/view/fchomo/global.js:856
msgid "Routing mode of the traffic enters mihomo via firewall rules."
msgstr "流量通过防火墙规则进入 mihomo 的路由模式。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:859
+#: htdocs/luci-static/resources/view/fchomo/global.js:877
msgid "Routing mode will be handle domain."
msgstr "路由模式将处理域名。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:819
-#: htdocs/luci-static/resources/view/fchomo/global.js:828
+#: htdocs/luci-static/resources/view/fchomo/global.js:837
+#: htdocs/luci-static/resources/view/fchomo/global.js:846
msgid "Routing ports"
msgstr "路由端口"
@@ -2649,15 +2661,15 @@ msgstr "路由端口"
msgid "Routing rule"
msgstr "路由规则"
-#: htdocs/luci-static/resources/view/fchomo/global.js:749
+#: htdocs/luci-static/resources/view/fchomo/global.js:767
msgid "Routing rule priority"
msgstr "路由规则优先权"
-#: htdocs/luci-static/resources/view/fchomo/global.js:743
+#: htdocs/luci-static/resources/view/fchomo/global.js:761
msgid "Routing table ID"
msgstr "路由表 ID"
-#: htdocs/luci-static/resources/view/fchomo/global.js:399
+#: htdocs/luci-static/resources/view/fchomo/global.js:417
msgid "Rule"
msgstr "规则"
@@ -2679,11 +2691,11 @@ msgstr "规则集"
msgid "Ruleset-URI-Scheme"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1207
+#: htdocs/luci-static/resources/fchomo.js:1215
msgid "Running"
msgstr "正在运行"
-#: htdocs/luci-static/resources/fchomo.js:242
+#: htdocs/luci-static/resources/fchomo.js:250
msgid "SMTP"
msgstr ""
@@ -2699,12 +2711,12 @@ msgstr ""
msgid "SSH"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:243
+#: htdocs/luci-static/resources/fchomo.js:251
msgid "STUN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:885
-#: htdocs/luci-static/resources/view/fchomo/node.js:1004
+#: htdocs/luci-static/resources/fchomo/listeners.js:886
+#: htdocs/luci-static/resources/view/fchomo/node.js:1015
msgid "STUN servers"
msgstr "STUN 服务器"
@@ -2712,12 +2724,12 @@ msgstr "STUN 服务器"
msgid "SUB-RULE"
msgstr "SUB-RULE"
-#: htdocs/luci-static/resources/view/fchomo/node.js:905
+#: htdocs/luci-static/resources/view/fchomo/node.js:916
msgid "SUoT version"
msgstr "SUoT 版本"
#: htdocs/luci-static/resources/fchomo/listeners.js:195
-#: htdocs/luci-static/resources/view/fchomo/node.js:300
+#: htdocs/luci-static/resources/view/fchomo/node.js:311
msgid "Salamander"
msgstr "Salamander"
@@ -2729,42 +2741,47 @@ msgstr "相同 目标地址 请求。相同节点"
msgid "Same srcaddr and dstaddr requests. Same node"
msgstr "相同 来源地址 和 目标地址 请求。相同节点"
-#: htdocs/luci-static/resources/view/fchomo/global.js:512
+#: htdocs/luci-static/resources/view/fchomo/global.js:396
+#: htdocs/luci-static/resources/view/fchomo/global.js:402
+msgid "Save"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:530
msgid "Segment maximum size"
msgstr "分段最大尺寸"
-#: htdocs/luci-static/resources/fchomo.js:231
+#: htdocs/luci-static/resources/fchomo.js:239
msgid "Select"
msgstr "手动选择"
-#: htdocs/luci-static/resources/view/fchomo/global.js:608
+#: htdocs/luci-static/resources/view/fchomo/global.js:626
msgid "Select Dashboard"
msgstr "选择面板"
-#: htdocs/luci-static/resources/fchomo.js:400
+#: htdocs/luci-static/resources/fchomo.js:408
msgid "Send padding randomly 0-3333 bytes with 50% probability."
msgstr "以 50% 的概率发送随机 0-3333 字节的填充。"
-#: htdocs/luci-static/resources/fchomo.js:389
-#: htdocs/luci-static/resources/fchomo.js:390
+#: htdocs/luci-static/resources/fchomo.js:397
+#: htdocs/luci-static/resources/fchomo.js:398
msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse."
msgstr "发送 300-600 秒的随机票证,以供客户端 0-RTT 重用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:707
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
-#: htdocs/luci-static/resources/fchomo/listeners.js:976
+#: htdocs/luci-static/resources/fchomo/listeners.js:708
+#: htdocs/luci-static/resources/fchomo/listeners.js:962
+#: htdocs/luci-static/resources/fchomo/listeners.js:977
#: htdocs/luci-static/resources/view/fchomo/server.js:58
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:62
msgid "Server"
msgstr "服务端"
-#: htdocs/luci-static/resources/view/fchomo/node.js:245
+#: htdocs/luci-static/resources/view/fchomo/node.js:256
msgid "Server address"
msgstr "服务器地址"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1142
-#: htdocs/luci-static/resources/view/fchomo/node.js:1235
-#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/fchomo/listeners.js:1143
+#: htdocs/luci-static/resources/view/fchomo/node.js:1246
+#: htdocs/luci-static/resources/view/fchomo/node.js:1252
msgid "Server hostname"
msgstr "服务器主机名称"
@@ -2781,22 +2798,22 @@ msgstr "服务状态"
msgid "Shadowsocks"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:505
-#: htdocs/luci-static/resources/view/fchomo/node.js:604
+#: htdocs/luci-static/resources/fchomo/listeners.js:506
+#: htdocs/luci-static/resources/view/fchomo/node.js:615
msgid "Shadowsocks chipher"
msgstr "Shadowsocks 加密方法"
-#: htdocs/luci-static/resources/fchomo/listeners.js:500
-#: htdocs/luci-static/resources/view/fchomo/node.js:599
+#: htdocs/luci-static/resources/fchomo/listeners.js:501
+#: htdocs/luci-static/resources/view/fchomo/node.js:610
msgid "Shadowsocks encrypt"
msgstr "Shadowsocks 加密"
-#: htdocs/luci-static/resources/fchomo/listeners.js:513
-#: htdocs/luci-static/resources/view/fchomo/node.js:612
+#: htdocs/luci-static/resources/fchomo/listeners.js:514
+#: htdocs/luci-static/resources/view/fchomo/node.js:623
msgid "Shadowsocks password"
msgstr "Shadowsocks 密码"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1436
+#: htdocs/luci-static/resources/view/fchomo/node.js:1447
msgid "Show connections in the dashboard for breaking connections easier."
msgstr "在面板中显示连接以便于打断连接。"
@@ -2808,26 +2825,26 @@ msgstr "静音"
msgid "Simple round-robin all nodes"
msgstr "简单轮替所有节点"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1681
+#: htdocs/luci-static/resources/view/fchomo/node.js:1695
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:391
msgid "Size limit"
msgstr "大小限制"
#: htdocs/luci-static/resources/view/fchomo/client.js:1586
-#: htdocs/luci-static/resources/view/fchomo/node.js:1105
-#: htdocs/luci-static/resources/view/fchomo/node.js:1773
+#: htdocs/luci-static/resources/view/fchomo/node.js:1116
+#: htdocs/luci-static/resources/view/fchomo/node.js:1850
msgid "Skip cert verify"
msgstr "跳过证书验证"
-#: htdocs/luci-static/resources/view/fchomo/global.js:665
+#: htdocs/luci-static/resources/view/fchomo/global.js:683
msgid "Skiped sniffing domain"
msgstr "跳过嗅探域名"
-#: htdocs/luci-static/resources/view/fchomo/global.js:671
+#: htdocs/luci-static/resources/view/fchomo/global.js:689
msgid "Skiped sniffing dst address"
msgstr "跳过嗅探目标地址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:668
+#: htdocs/luci-static/resources/view/fchomo/global.js:686
msgid "Skiped sniffing src address"
msgstr "跳过嗅探来源地址"
@@ -2836,30 +2853,30 @@ msgstr "跳过嗅探来源地址"
msgid "Snell"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:675
+#: htdocs/luci-static/resources/view/fchomo/global.js:693
msgid "Sniff protocol"
msgstr "嗅探协议"
-#: htdocs/luci-static/resources/view/fchomo/global.js:652
+#: htdocs/luci-static/resources/view/fchomo/global.js:670
msgid "Sniffer"
msgstr "嗅探器"
-#: htdocs/luci-static/resources/view/fchomo/global.js:655
+#: htdocs/luci-static/resources/view/fchomo/global.js:673
msgid "Sniffer settings"
msgstr "嗅探器设置"
-#: htdocs/luci-static/resources/fchomo.js:432
+#: htdocs/luci-static/resources/fchomo.js:440
msgid "Specify a ID"
msgstr "指定一个ID"
-#: htdocs/luci-static/resources/view/fchomo/global.js:820
-#: htdocs/luci-static/resources/view/fchomo/global.js:829
+#: htdocs/luci-static/resources/view/fchomo/global.js:838
+#: htdocs/luci-static/resources/view/fchomo/global.js:847
msgid ""
"Specify target ports to be proxied. Multiple ports must be separated by "
"commas."
msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:495
+#: htdocs/luci-static/resources/view/fchomo/global.js:513
msgid "Stack"
msgstr "堆栈"
@@ -2867,11 +2884,11 @@ msgstr "堆栈"
msgid "Standard"
msgstr "标准"
-#: htdocs/luci-static/resources/fchomo.js:246
+#: htdocs/luci-static/resources/fchomo.js:254
msgid "Steam Client"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:247
+#: htdocs/luci-static/resources/fchomo.js:255
msgid "Steam P2P"
msgstr ""
@@ -2880,7 +2897,7 @@ msgstr ""
msgid "Strategy"
msgstr "策略"
-#: htdocs/luci-static/resources/fchomo/listeners.js:604
+#: htdocs/luci-static/resources/fchomo/listeners.js:605
#: htdocs/luci-static/resources/view/fchomo/client.js:1313
#: htdocs/luci-static/resources/view/fchomo/client.js:1322
msgid "Sub rule"
@@ -2890,7 +2907,7 @@ msgstr "子规则"
msgid "Sub rule group"
msgstr "子规则组"
-#: htdocs/luci-static/resources/fchomo.js:692
+#: htdocs/luci-static/resources/fchomo.js:700
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:231
msgid "Successfully imported %s %s of total %s."
msgstr "已成功导入 %s 个%s (共 %s 个)。"
@@ -2899,7 +2916,7 @@ msgstr "已成功导入 %s 个%s (共 %s 个)。"
msgid "Successfully updated."
msgstr "更新成功。"
-#: htdocs/luci-static/resources/fchomo.js:1709
+#: htdocs/luci-static/resources/fchomo.js:1717
msgid "Successfully uploaded."
msgstr "已成功上传。"
@@ -2916,7 +2933,7 @@ msgstr ""
"支持规则集类型为: %s 并且格式为: %s 的规则集链接。"
""
-#: htdocs/luci-static/resources/view/fchomo/global.js:497
+#: htdocs/luci-static/resources/view/fchomo/global.js:515
msgid "System"
msgstr "系统"
@@ -2939,25 +2956,25 @@ msgstr "系统 DNS"
#: htdocs/luci-static/resources/fchomo.js:197
#: htdocs/luci-static/resources/fchomo.js:198
#: htdocs/luci-static/resources/fchomo.js:205
-#: htdocs/luci-static/resources/fchomo/listeners.js:638
+#: htdocs/luci-static/resources/fchomo/listeners.js:639
#: htdocs/luci-static/resources/view/fchomo/client.js:590
#: htdocs/luci-static/resources/view/fchomo/client.js:680
msgid "TCP"
msgstr "TCP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:424
+#: htdocs/luci-static/resources/view/fchomo/global.js:442
msgid "TCP concurrency"
msgstr "TCP 并发"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1429
+#: htdocs/luci-static/resources/view/fchomo/node.js:1440
msgid "TCP only"
msgstr "仅 TCP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:432
+#: htdocs/luci-static/resources/view/fchomo/global.js:450
msgid "TCP-Keep-Alive idle timeout"
msgstr "TCP-Keep-Alive 闲置超时"
-#: htdocs/luci-static/resources/view/fchomo/global.js:427
+#: htdocs/luci-static/resources/view/fchomo/global.js:445
msgid "TCP-Keep-Alive interval"
msgstr "TCP-Keep-Alive 间隔"
@@ -2976,31 +2993,31 @@ msgstr "TCP-Keep-Alive 间隔"
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1460
-#: htdocs/luci-static/resources/view/fchomo/node.js:1740
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
+#: htdocs/luci-static/resources/view/fchomo/node.js:1817
msgid "TFO"
msgstr "TCP 快速打开 (TFO)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:569
-#: htdocs/luci-static/resources/fchomo/listeners.js:901
-#: htdocs/luci-static/resources/view/fchomo/global.js:532
-#: htdocs/luci-static/resources/view/fchomo/node.js:476
-#: htdocs/luci-static/resources/view/fchomo/node.js:836
-#: htdocs/luci-static/resources/view/fchomo/node.js:1014
+#: htdocs/luci-static/resources/fchomo/listeners.js:570
+#: htdocs/luci-static/resources/fchomo/listeners.js:902
+#: htdocs/luci-static/resources/view/fchomo/global.js:550
+#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/view/fchomo/node.js:847
+#: htdocs/luci-static/resources/view/fchomo/node.js:1025
msgid "TLS"
msgstr "TLS"
-#: htdocs/luci-static/resources/fchomo/listeners.js:955
-#: htdocs/luci-static/resources/view/fchomo/node.js:1045
+#: htdocs/luci-static/resources/fchomo/listeners.js:956
+#: htdocs/luci-static/resources/view/fchomo/node.js:1056
msgid "TLS ALPN"
msgstr "TLS ALPN"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1039
+#: htdocs/luci-static/resources/view/fchomo/node.js:1050
msgid "TLS SNI"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:122
-#: htdocs/luci-static/resources/view/fchomo/node.js:225
+#: htdocs/luci-static/resources/view/fchomo/node.js:236
msgid "TLS fields"
msgstr "TLS字段"
@@ -3009,11 +3026,11 @@ msgstr "TLS字段"
msgid "TUIC"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:244
+#: htdocs/luci-static/resources/fchomo.js:252
msgid "TURN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:552
+#: htdocs/luci-static/resources/fchomo/listeners.js:553
msgid "Target address"
msgstr "目标地址"
@@ -3022,35 +3039,35 @@ msgid ""
"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
msgstr "让客户端使用 BBR 流控算法。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:709
-#: htdocs/luci-static/resources/view/fchomo/node.js:717
+#: htdocs/luci-static/resources/view/fchomo/node.js:720
+#: htdocs/luci-static/resources/view/fchomo/node.js:728
msgid "The %s address used by local machine in the Cloudflare WARP network."
msgstr "Cloudflare WARP 网络中使用的本机 %s 地址。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:752
-#: htdocs/luci-static/resources/view/fchomo/node.js:760
+#: htdocs/luci-static/resources/view/fchomo/node.js:763
+#: htdocs/luci-static/resources/view/fchomo/node.js:771
msgid "The %s address used by local machine in the Wireguard network."
msgstr "WireGuard 网络中使用的本机 %s 地址。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:976
-#: htdocs/luci-static/resources/view/fchomo/node.js:1128
+#: htdocs/luci-static/resources/fchomo/listeners.js:977
+#: htdocs/luci-static/resources/view/fchomo/node.js:1139
msgid "The %s private key, in PEM format."
msgstr "%s私钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
-#: htdocs/luci-static/resources/fchomo/listeners.js:999
-#: htdocs/luci-static/resources/view/fchomo/global.js:553
-#: htdocs/luci-static/resources/view/fchomo/node.js:1114
+#: htdocs/luci-static/resources/fchomo/listeners.js:962
+#: htdocs/luci-static/resources/fchomo/listeners.js:1000
+#: htdocs/luci-static/resources/view/fchomo/global.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:1125
msgid "The %s public key, in PEM format."
msgstr "%s公钥,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1159
msgid ""
"The ECH parameter of the HTTPS record for the domain. Leave empty to resolve "
"via DNS."
msgstr "域名的 HTTPS 记录的 ECH 参数。留空则通过 DNS 解析。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:398
+#: htdocs/luci-static/resources/view/fchomo/node.js:409
msgid "The ED25519 available private key or UUID provided by Sudoku server."
msgstr "Sudoku 服务器提供的 ED25519 可用私钥 或 UUID。"
@@ -3062,8 +3079,8 @@ msgstr "Sudoku 生成的 ED25519 主公钥 或 UUID。"
msgid "The default value is 2:00 every day."
msgstr "默认值为每天 2:00。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:739
-#: htdocs/luci-static/resources/view/fchomo/node.js:961
+#: htdocs/luci-static/resources/fchomo/listeners.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:972
msgid ""
"The first padding must have a probability of 100% and at least 35 bytes."
msgstr "首个填充必须为 100% 的概率并且至少 35 字节。"
@@ -3078,26 +3095,26 @@ msgstr "匹配 %s 的将被视为未被投毒污染。"
msgid "The matching %s will be deemed as poisoned."
msgstr "匹配 %s 的将被视为已被投毒污染。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:737
-#: htdocs/luci-static/resources/view/fchomo/node.js:959
+#: htdocs/luci-static/resources/fchomo/listeners.js:738
+#: htdocs/luci-static/resources/view/fchomo/node.js:970
msgid "The server and client can set different padding parameters."
msgstr "服务器和客户端可以设置不同的填充参数。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1057
-#: htdocs/luci-static/resources/view/fchomo/global.js:597
+#: htdocs/luci-static/resources/fchomo/listeners.js:1058
+#: htdocs/luci-static/resources/view/fchomo/global.js:615
msgid "This ECH parameter needs to be added to the HTTPS record of the domain."
msgstr "此 ECH 参数需要添加到域名的 HTTPS 记录中。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1589
-#: htdocs/luci-static/resources/view/fchomo/node.js:1108
-#: htdocs/luci-static/resources/view/fchomo/node.js:1776
+#: htdocs/luci-static/resources/view/fchomo/node.js:1119
+#: htdocs/luci-static/resources/view/fchomo/node.js:1853
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
msgstr ""
"这是危险行为,您的流量将几乎等同于明文!使用风险自负!"
-#: htdocs/luci-static/resources/view/fchomo/node.js:555
+#: htdocs/luci-static/resources/view/fchomo/node.js:566
msgid ""
"This is the TUIC port of the SUoT protocol, designed to provide a QUIC "
"stream based UDP relay mode that TUIC does not provide."
@@ -3110,52 +3127,52 @@ msgid ""
"To check NAT Behavior you need to install %s first"
msgstr "检测 NAT 行为需要先安装 %s"
-#: htdocs/luci-static/resources/view/fchomo/global.js:487
+#: htdocs/luci-static/resources/view/fchomo/global.js:505
msgid ""
"To enable Tun support, you need to install ip-full and "
"kmod-tun"
msgstr ""
"要启用 Tun 支持,您需要安装 ip-full 和 kmod-tun。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:864
+#: htdocs/luci-static/resources/view/fchomo/global.js:882
msgid "To enable, you need to install dnsmasq-full."
msgstr "要启用,您需要安装 dnsmasq-full。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:762
+#: htdocs/luci-static/resources/view/fchomo/global.js:780
msgid "Tproxy Fwmark/fwmask"
msgstr "Tproxy Fwmark/fwmask"
-#: htdocs/luci-static/resources/view/fchomo/global.js:468
+#: htdocs/luci-static/resources/view/fchomo/global.js:486
msgid "Tproxy port"
msgstr "Tproxy 端口"
#: htdocs/luci-static/resources/fchomo/listeners.js:285
-#: htdocs/luci-static/resources/view/fchomo/node.js:390
+#: htdocs/luci-static/resources/view/fchomo/node.js:401
msgid "Traffic pattern"
msgstr "流量模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1935
+#: htdocs/luci-static/resources/view/fchomo/node.js:2012
msgid "Transit proxy group"
msgstr "中转代理组"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1941
+#: htdocs/luci-static/resources/view/fchomo/node.js:2018
msgid "Transit proxy node"
msgstr "中转代理节点"
#: htdocs/luci-static/resources/fchomo/listeners.js:273
-#: htdocs/luci-static/resources/fchomo/listeners.js:1108
-#: htdocs/luci-static/resources/view/fchomo/node.js:367
-#: htdocs/luci-static/resources/view/fchomo/node.js:1190
+#: htdocs/luci-static/resources/fchomo/listeners.js:1109
+#: htdocs/luci-static/resources/view/fchomo/node.js:378
+#: htdocs/luci-static/resources/view/fchomo/node.js:1201
msgid "Transport"
msgstr "传输层"
#: htdocs/luci-static/resources/fchomo/listeners.js:123
-#: htdocs/luci-static/resources/view/fchomo/node.js:226
+#: htdocs/luci-static/resources/view/fchomo/node.js:237
msgid "Transport fields"
msgstr "传输层字段"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1113
-#: htdocs/luci-static/resources/view/fchomo/node.js:1195
+#: htdocs/luci-static/resources/fchomo/listeners.js:1114
+#: htdocs/luci-static/resources/view/fchomo/node.js:1206
msgid "Transport type"
msgstr "传输层类型"
@@ -3177,19 +3194,19 @@ msgstr ""
msgid "Trusted proxy header"
msgstr "可信代理 Header"
-#: htdocs/luci-static/resources/view/fchomo/global.js:767
+#: htdocs/luci-static/resources/view/fchomo/global.js:785
msgid "Tun Fwmark/fwmask"
msgstr "Tun Fwmark/fwmask"
-#: htdocs/luci-static/resources/view/fchomo/global.js:485
+#: htdocs/luci-static/resources/view/fchomo/global.js:503
msgid "Tun TCP/UDP"
msgstr "Tun TCP/UDP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:492
+#: htdocs/luci-static/resources/view/fchomo/global.js:510
msgid "Tun settings"
msgstr "Tun 设置"
-#: htdocs/luci-static/resources/view/fchomo/global.js:496
+#: htdocs/luci-static/resources/view/fchomo/global.js:514
msgid "Tun stack."
msgstr "Tun 堆栈"
@@ -3203,9 +3220,9 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:738
#: htdocs/luci-static/resources/view/fchomo/client.js:843
#: htdocs/luci-static/resources/view/fchomo/client.js:1030
-#: htdocs/luci-static/resources/view/fchomo/node.js:239
-#: htdocs/luci-static/resources/view/fchomo/node.js:1618
-#: htdocs/luci-static/resources/view/fchomo/node.js:1906
+#: htdocs/luci-static/resources/view/fchomo/node.js:250
+#: htdocs/luci-static/resources/view/fchomo/node.js:1632
+#: htdocs/luci-static/resources/view/fchomo/node.js:1983
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:285
msgid "Type"
msgstr "类型"
@@ -3216,55 +3233,55 @@ msgstr "类型"
#: htdocs/luci-static/resources/fchomo.js:201
#: htdocs/luci-static/resources/fchomo.js:202
#: htdocs/luci-static/resources/fchomo.js:204
-#: htdocs/luci-static/resources/fchomo/listeners.js:639
-#: htdocs/luci-static/resources/fchomo/listeners.js:644
+#: htdocs/luci-static/resources/fchomo/listeners.js:640
+#: htdocs/luci-static/resources/fchomo/listeners.js:645
#: htdocs/luci-static/resources/view/fchomo/client.js:589
#: htdocs/luci-static/resources/view/fchomo/client.js:679
-#: htdocs/luci-static/resources/view/fchomo/node.js:893
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:904
+#: htdocs/luci-static/resources/view/fchomo/node.js:1827
msgid "UDP"
msgstr "UDP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:516
+#: htdocs/luci-static/resources/view/fchomo/global.js:534
msgid "UDP NAT expiration time"
msgstr "UDP NAT 过期时间"
-#: htdocs/luci-static/resources/view/fchomo/node.js:554
+#: htdocs/luci-static/resources/view/fchomo/node.js:565
msgid "UDP over stream"
msgstr "UDP over stream"
-#: htdocs/luci-static/resources/view/fchomo/node.js:560
+#: htdocs/luci-static/resources/view/fchomo/node.js:571
msgid "UDP over stream version"
msgstr "UDP over stream 版本"
-#: htdocs/luci-static/resources/view/fchomo/node.js:547
+#: htdocs/luci-static/resources/view/fchomo/node.js:558
msgid "UDP packet relay mode."
msgstr "UDP 包中继模式。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:546
+#: htdocs/luci-static/resources/view/fchomo/node.js:557
msgid "UDP relay mode"
msgstr "UDP 中继模式"
-#: htdocs/luci-static/resources/fchomo/listeners.js:372
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
msgid "UP: %s; DOWN: %s"
msgstr "上传: %s; 下载: %s"
-#: htdocs/luci-static/resources/fchomo.js:233
+#: htdocs/luci-static/resources/fchomo.js:241
msgid "URL test"
msgstr "自动选择"
#: htdocs/luci-static/resources/fchomo/listeners.js:294
-#: htdocs/luci-static/resources/fchomo/listeners.js:473
-#: htdocs/luci-static/resources/fchomo/listeners.js:528
-#: htdocs/luci-static/resources/view/fchomo/node.js:534
-#: htdocs/luci-static/resources/view/fchomo/node.js:643
+#: htdocs/luci-static/resources/fchomo/listeners.js:474
+#: htdocs/luci-static/resources/fchomo/listeners.js:529
+#: htdocs/luci-static/resources/view/fchomo/node.js:545
+#: htdocs/luci-static/resources/view/fchomo/node.js:654
msgid "UUID"
msgstr "UUID"
-#: htdocs/luci-static/resources/fchomo.js:1252
+#: htdocs/luci-static/resources/fchomo.js:1260
msgid "Unable to download unsupported type: %s"
msgstr "无法下载不支持的类型: %s"
@@ -3272,7 +3289,7 @@ msgstr "无法下载不支持的类型: %s"
msgid "Unable to save contents: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:421
+#: htdocs/luci-static/resources/view/fchomo/global.js:439
msgid "Unified delay"
msgstr "统一延迟"
@@ -3289,8 +3306,8 @@ msgstr "未知错误。"
msgid "Unknown error: %s"
msgstr "未知错误:%s"
-#: htdocs/luci-static/resources/view/fchomo/node.js:899
-#: htdocs/luci-static/resources/view/fchomo/node.js:1755
+#: htdocs/luci-static/resources/view/fchomo/node.js:910
+#: htdocs/luci-static/resources/view/fchomo/node.js:1832
msgid "UoT"
msgstr "UDP over TCP (UoT)"
@@ -3298,22 +3315,22 @@ msgstr "UDP over TCP (UoT)"
msgid "Update failed."
msgstr "更新失败。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1687
+#: htdocs/luci-static/resources/view/fchomo/node.js:1701
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:397
msgid "Update interval"
msgstr "更新间隔"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1447
+#: htdocs/luci-static/resources/view/fchomo/node.js:1458
msgid "Upload bandwidth"
msgstr "上传带宽"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1448
+#: htdocs/luci-static/resources/view/fchomo/node.js:1459
msgid "Upload bandwidth in Mbps."
msgstr "上传带宽(单位:Mbps)。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:967
-#: htdocs/luci-static/resources/fchomo/listeners.js:1007
-#: htdocs/luci-static/resources/view/fchomo/node.js:1119
+#: htdocs/luci-static/resources/fchomo/listeners.js:968
+#: htdocs/luci-static/resources/fchomo/listeners.js:1008
+#: htdocs/luci-static/resources/view/fchomo/node.js:1130
msgid "Upload certificate"
msgstr "上传证书"
@@ -3321,17 +3338,17 @@ msgstr "上传证书"
msgid "Upload initial package"
msgstr "上传初始资源包"
-#: htdocs/luci-static/resources/fchomo/listeners.js:982
-#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/fchomo/listeners.js:983
+#: htdocs/luci-static/resources/view/fchomo/node.js:1144
msgid "Upload key"
msgstr "上传密钥"
-#: htdocs/luci-static/resources/fchomo/listeners.js:970
-#: htdocs/luci-static/resources/fchomo/listeners.js:985
-#: htdocs/luci-static/resources/fchomo/listeners.js:1010
+#: htdocs/luci-static/resources/fchomo/listeners.js:971
+#: htdocs/luci-static/resources/fchomo/listeners.js:986
+#: htdocs/luci-static/resources/fchomo/listeners.js:1011
#: htdocs/luci-static/resources/view/fchomo/global.js:306
-#: htdocs/luci-static/resources/view/fchomo/node.js:1122
-#: htdocs/luci-static/resources/view/fchomo/node.js:1136
+#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/view/fchomo/node.js:1147
msgid "Upload..."
msgstr "上传..."
@@ -3355,11 +3372,11 @@ msgstr "用于解析 DNS 服务器的域名。必须是 IP。"
msgid "Used to resolve the domain of the Proxy node."
msgstr "用于解析代理节点的域名。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1040
+#: htdocs/luci-static/resources/view/fchomo/node.js:1051
msgid "Used to verify the hostname on the returned certificates."
msgstr "用于验证返回的证书上的主机名。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:441
+#: htdocs/luci-static/resources/view/fchomo/global.js:459
msgid "User Authentication"
msgstr "用户认证"
@@ -3368,19 +3385,19 @@ msgid "User-hint is mandatory"
msgstr "User-hint 是必填项"
#: htdocs/luci-static/resources/fchomo/listeners.js:161
-#: htdocs/luci-static/resources/view/fchomo/node.js:257
+#: htdocs/luci-static/resources/view/fchomo/node.js:268
msgid "Username"
msgstr "用户名"
-#: htdocs/luci-static/resources/view/fchomo/global.js:775
+#: htdocs/luci-static/resources/view/fchomo/global.js:793
msgid "Users filter mode"
msgstr "使用者过滤模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1304
+#: htdocs/luci-static/resources/view/fchomo/node.js:1315
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1309
+#: htdocs/luci-static/resources/view/fchomo/node.js:1320
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3394,33 +3411,33 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1624
-#: htdocs/luci-static/resources/view/fchomo/node.js:1912
+#: htdocs/luci-static/resources/view/fchomo/node.js:1638
+#: htdocs/luci-static/resources/view/fchomo/node.js:1989
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:328
msgid "Value"
msgstr "可视化值"
-#: htdocs/luci-static/resources/fchomo.js:362
+#: htdocs/luci-static/resources/fchomo.js:370
msgid "Verify if given"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:462
-#: htdocs/luci-static/resources/fchomo/listeners.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:518
-#: htdocs/luci-static/resources/view/fchomo/node.js:855
+#: htdocs/luci-static/resources/fchomo/listeners.js:463
+#: htdocs/luci-static/resources/fchomo/listeners.js:595
+#: htdocs/luci-static/resources/view/fchomo/node.js:529
+#: htdocs/luci-static/resources/view/fchomo/node.js:866
msgid "Version"
msgstr "版本"
-#: htdocs/luci-static/resources/view/fchomo/node.js:863
+#: htdocs/luci-static/resources/view/fchomo/node.js:874
msgid "Version hint"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:120
-#: htdocs/luci-static/resources/view/fchomo/node.js:223
+#: htdocs/luci-static/resources/view/fchomo/node.js:234
msgid "Vless Encryption fields"
msgstr "Vless Encryption 字段"
-#: htdocs/luci-static/resources/fchomo.js:399
+#: htdocs/luci-static/resources/fchomo.js:407
msgid "Wait a random 0-111 milliseconds with 75% probability."
msgstr "以 75% 的概率等待随机 0-111 毫秒。"
@@ -3428,16 +3445,16 @@ msgstr "以 75% 的概率等待随机 0-111 毫秒。"
msgid "Warning"
msgstr "警告"
-#: htdocs/luci-static/resources/fchomo/listeners.js:440
-#: htdocs/luci-static/resources/fchomo/listeners.js:1115
-#: htdocs/luci-static/resources/fchomo/listeners.js:1124
-#: htdocs/luci-static/resources/fchomo/listeners.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:472
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:1200
+#: htdocs/luci-static/resources/fchomo/listeners.js:441
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
+#: htdocs/luci-static/resources/fchomo/listeners.js:1125
+#: htdocs/luci-static/resources/fchomo/listeners.js:1132
+#: htdocs/luci-static/resources/view/fchomo/node.js:483
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
#: htdocs/luci-static/resources/view/fchomo/node.js:1211
-#: htdocs/luci-static/resources/view/fchomo/node.js:1218
-#: htdocs/luci-static/resources/view/fchomo/node.js:1224
+#: htdocs/luci-static/resources/view/fchomo/node.js:1222
+#: htdocs/luci-static/resources/view/fchomo/node.js:1229
+#: htdocs/luci-static/resources/view/fchomo/node.js:1235
msgid "WebSocket"
msgstr ""
@@ -3445,7 +3462,7 @@ msgstr ""
msgid "When used as a server, HomeProxy is a better choice."
msgstr "用作服务端时,HomeProxy 是更好的选择。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:777
+#: htdocs/luci-static/resources/view/fchomo/global.js:795
msgid "White list"
msgstr "白名单"
@@ -3453,48 +3470,48 @@ msgstr "白名单"
msgid "WireGuard"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:774
+#: htdocs/luci-static/resources/view/fchomo/node.js:785
msgid "WireGuard peer public key."
msgstr "WireGuard 对端公钥。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:781
+#: htdocs/luci-static/resources/view/fchomo/node.js:792
msgid "WireGuard pre-shared key."
msgstr "WireGuard 预共享密钥。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:766
+#: htdocs/luci-static/resources/view/fchomo/node.js:777
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 编码的私钥。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1116
-#: htdocs/luci-static/resources/fchomo/listeners.js:1125
-#: htdocs/luci-static/resources/view/fchomo/node.js:1201
-#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/fchomo/listeners.js:1117
+#: htdocs/luci-static/resources/fchomo/listeners.js:1126
+#: htdocs/luci-static/resources/view/fchomo/node.js:1212
+#: htdocs/luci-static/resources/view/fchomo/node.js:1230
msgid "XHTTP"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1161
-#: htdocs/luci-static/resources/view/fchomo/node.js:1314
+#: htdocs/luci-static/resources/fchomo/listeners.js:1162
+#: htdocs/luci-static/resources/view/fchomo/node.js:1325
msgid "XHTTP mode"
msgstr "XHTTP 模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1345
+#: htdocs/luci-static/resources/view/fchomo/node.js:1356
msgid "XMUX"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1350
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
-#: htdocs/luci-static/resources/view/fchomo/node.js:1360
-#: htdocs/luci-static/resources/view/fchomo/node.js:1365
-#: htdocs/luci-static/resources/view/fchomo/node.js:1370
-#: htdocs/luci-static/resources/view/fchomo/node.js:1375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1366
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
+#: htdocs/luci-static/resources/view/fchomo/node.js:1376
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "XMUX:"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:698
+#: htdocs/luci-static/resources/fchomo/listeners.js:699
msgid "XOR mode"
msgstr "XOR 模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:688
+#: htdocs/luci-static/resources/view/fchomo/node.js:699
msgid "Xudp (Xray-core)"
msgstr ""
@@ -3502,7 +3519,7 @@ msgstr ""
msgid "Yaml text"
msgstr "Yaml 格式文本"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1779
+#: htdocs/luci-static/resources/view/fchomo/node.js:1856
msgid "Yes"
msgstr ""
@@ -3510,27 +3527,43 @@ msgstr ""
msgid "YouTube"
msgstr "油管"
-#: htdocs/luci-static/resources/fchomo.js:1691
+#: htdocs/luci-static/resources/fchomo.js:1699
msgid "Your %s was successfully uploaded. Size: %sB."
msgstr "您的 %s 已成功上传。大小:%sB。"
-#: htdocs/luci-static/resources/fchomo.js:335
-#: htdocs/luci-static/resources/fchomo.js:348
-#: htdocs/luci-static/resources/fchomo.js:353
-#: htdocs/luci-static/resources/view/fchomo/node.js:668
+#: htdocs/luci-static/resources/fchomo.js:343
+#: htdocs/luci-static/resources/fchomo.js:356
+#: htdocs/luci-static/resources/fchomo.js:361
+#: htdocs/luci-static/resources/view/fchomo/node.js:679
msgid "aes-128-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:336
+#: htdocs/luci-static/resources/fchomo.js:344
msgid "aes-192-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:337
-#: htdocs/luci-static/resources/fchomo.js:354
+#: htdocs/luci-static/resources/fchomo.js:345
+#: htdocs/luci-static/resources/fchomo.js:362
msgid "aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:665
+#: htdocs/luci-static/resources/view/fchomo/node.js:1718
+msgid "age private key"
+msgstr "age 私钥"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1777
+msgid "age public key"
+msgstr "age 公钥"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:21
+msgid "age-mlkem768-x25519"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:20
+msgid "age-x25519"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:676
msgid "auto"
msgstr "自动"
@@ -3538,19 +3571,19 @@ msgstr "自动"
msgid "bbr"
msgstr "bbr"
-#: htdocs/luci-static/resources/fchomo/listeners.js:972
-#: htdocs/luci-static/resources/fchomo/listeners.js:1012
-#: htdocs/luci-static/resources/view/fchomo/node.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:973
+#: htdocs/luci-static/resources/fchomo/listeners.js:1013
+#: htdocs/luci-static/resources/view/fchomo/node.js:1135
msgid "certificate"
msgstr "证书"
-#: htdocs/luci-static/resources/fchomo.js:338
-#: htdocs/luci-static/resources/fchomo.js:349
-#: htdocs/luci-static/resources/fchomo.js:355
+#: htdocs/luci-static/resources/fchomo.js:346
+#: htdocs/luci-static/resources/fchomo.js:357
+#: htdocs/luci-static/resources/fchomo.js:363
msgid "chacha20-ietf-poly1305"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:669
+#: htdocs/luci-static/resources/view/fchomo/node.js:680
msgid "chacha20-poly1305"
msgstr ""
@@ -3558,62 +3591,62 @@ msgstr ""
msgid "cubic"
msgstr "cubic"
-#: htdocs/luci-static/resources/fchomo/listeners.js:650
-#: htdocs/luci-static/resources/fchomo/listeners.js:681
+#: htdocs/luci-static/resources/fchomo/listeners.js:651
+#: htdocs/luci-static/resources/fchomo/listeners.js:682
msgid "decryption"
msgstr "decryption"
-#: htdocs/luci-static/resources/view/fchomo/global.js:811
+#: htdocs/luci-static/resources/view/fchomo/global.js:829
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr "dnsmasq 自行选择上游服务器。 (可能影响 CDN 准确性)"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1767
+#: htdocs/luci-static/resources/view/fchomo/node.js:1844
msgid "down"
msgstr "Hysteria 下载速率"
-#: htdocs/luci-static/resources/fchomo/listeners.js:685
-#: htdocs/luci-static/resources/view/fchomo/node.js:913
-#: htdocs/luci-static/resources/view/fchomo/node.js:936
+#: htdocs/luci-static/resources/fchomo/listeners.js:686
+#: htdocs/luci-static/resources/view/fchomo/node.js:924
+#: htdocs/luci-static/resources/view/fchomo/node.js:947
msgid "encryption"
msgstr "encryption"
-#: htdocs/luci-static/resources/fchomo/listeners.js:424
-#: htdocs/luci-static/resources/view/fchomo/node.js:456
+#: htdocs/luci-static/resources/fchomo/listeners.js:425
+#: htdocs/luci-static/resources/view/fchomo/node.js:467
msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink."
msgstr "false = 带宽优化下行 true = 纯 Sudoku 下行。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1114
-#: htdocs/luci-static/resources/fchomo/listeners.js:1123
-#: htdocs/luci-static/resources/fchomo/listeners.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1199
+#: htdocs/luci-static/resources/fchomo/listeners.js:1115
+#: htdocs/luci-static/resources/fchomo/listeners.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:1131
#: htdocs/luci-static/resources/view/fchomo/node.js:1210
-#: htdocs/luci-static/resources/view/fchomo/node.js:1217
-#: htdocs/luci-static/resources/view/fchomo/node.js:1223
+#: htdocs/luci-static/resources/view/fchomo/node.js:1221
+#: htdocs/luci-static/resources/view/fchomo/node.js:1228
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1280
+#: htdocs/luci-static/resources/view/fchomo/node.js:1291
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1285
+#: htdocs/luci-static/resources/view/fchomo/node.js:1296
msgid "gRPC ping interval"
msgstr "gRPC ping 间隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1155
-#: htdocs/luci-static/resources/view/fchomo/node.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1156
+#: htdocs/luci-static/resources/view/fchomo/node.js:1287
msgid "gRPC service name"
msgstr "gRPC 服务名称"
-#: htdocs/luci-static/resources/view/fchomo/global.js:499
+#: htdocs/luci-static/resources/view/fchomo/global.js:517
msgid "gVisor"
msgstr "gVisor"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1392
+#: htdocs/luci-static/resources/view/fchomo/node.js:1403
msgid "h2mux"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo/listeners.js:851
msgid "least one keypair required"
msgstr "至少需要一对密钥"
@@ -3627,17 +3660,17 @@ msgstr "metacubexd"
#: htdocs/luci-static/resources/view/fchomo/client.js:1490
#: htdocs/luci-static/resources/view/fchomo/client.js:1721
#: htdocs/luci-static/resources/view/fchomo/client.js:1777
-#: htdocs/luci-static/resources/view/fchomo/node.js:1590
+#: htdocs/luci-static/resources/view/fchomo/node.js:1604
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:247
msgid "mihomo config"
msgstr "mihomo 配置"
-#: htdocs/luci-static/resources/fchomo.js:381
+#: htdocs/luci-static/resources/fchomo.js:389
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1464
-#: htdocs/luci-static/resources/view/fchomo/node.js:1745
+#: htdocs/luci-static/resources/view/fchomo/node.js:1475
+#: htdocs/luci-static/resources/view/fchomo/node.js:1822
msgid "mpTCP"
msgstr "多路径 TCP (mpTCP)"
@@ -3649,20 +3682,20 @@ msgstr "new_reno"
msgid "no-resolve"
msgstr "no-resolve"
-#: htdocs/luci-static/resources/fchomo.js:1426
-#: htdocs/luci-static/resources/fchomo.js:1521
-#: htdocs/luci-static/resources/fchomo.js:1556
-#: htdocs/luci-static/resources/fchomo.js:1584
+#: htdocs/luci-static/resources/fchomo.js:1434
+#: htdocs/luci-static/resources/fchomo.js:1529
+#: htdocs/luci-static/resources/fchomo.js:1564
+#: htdocs/luci-static/resources/fchomo.js:1592
msgid "non-empty value"
msgstr "非空值"
-#: htdocs/luci-static/resources/fchomo.js:333
-#: htdocs/luci-static/resources/fchomo.js:347
-#: htdocs/luci-static/resources/fchomo.js:359
-#: htdocs/luci-static/resources/fchomo/listeners.js:560
-#: htdocs/luci-static/resources/view/fchomo/node.js:666
-#: htdocs/luci-static/resources/view/fchomo/node.js:686
-#: htdocs/luci-static/resources/view/fchomo/node.js:824
+#: htdocs/luci-static/resources/fchomo.js:341
+#: htdocs/luci-static/resources/fchomo.js:355
+#: htdocs/luci-static/resources/fchomo.js:367
+#: htdocs/luci-static/resources/fchomo/listeners.js:561
+#: htdocs/luci-static/resources/view/fchomo/node.js:677
+#: htdocs/luci-static/resources/view/fchomo/node.js:697
+#: htdocs/luci-static/resources/view/fchomo/node.js:835
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:324
msgid "none"
msgstr "无"
@@ -3675,45 +3708,45 @@ msgstr "未找到"
msgid "not included \",\""
msgstr "不包含 \",\""
-#: htdocs/luci-static/resources/fchomo.js:219
-#: htdocs/luci-static/resources/fchomo/listeners.js:606
+#: htdocs/luci-static/resources/fchomo.js:227
#: htdocs/luci-static/resources/fchomo/listeners.js:607
+#: htdocs/luci-static/resources/fchomo/listeners.js:608
msgid "null"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:561
-#: htdocs/luci-static/resources/view/fchomo/node.js:825
+#: htdocs/luci-static/resources/fchomo/listeners.js:562
+#: htdocs/luci-static/resources/view/fchomo/node.js:836
msgid "obfs-simple"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "only applies when %s is %s."
msgstr "仅当 %s 为 %s 时适用。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
msgid "only applies when %s is not %s."
msgstr "仅当 %s 不为 %s 时适用。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1725
+#: htdocs/luci-static/resources/view/fchomo/node.js:1802
msgid "override.proxy-name"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:687
+#: htdocs/luci-static/resources/view/fchomo/node.js:698
msgid "packet addr (v2ray-core v5+)"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1318
+#: htdocs/luci-static/resources/fchomo/listeners.js:1166
+#: htdocs/luci-static/resources/view/fchomo/node.js:1329
msgid "packet-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:438
-#: htdocs/luci-static/resources/view/fchomo/node.js:470
+#: htdocs/luci-static/resources/fchomo/listeners.js:439
+#: htdocs/luci-static/resources/view/fchomo/node.js:481
msgid "poll"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:987
-#: htdocs/luci-static/resources/view/fchomo/node.js:1138
+#: htdocs/luci-static/resources/fchomo/listeners.js:988
+#: htdocs/luci-static/resources/view/fchomo/node.js:1149
msgid "private key"
msgstr "私钥"
@@ -3726,7 +3759,7 @@ msgstr "razord-meta"
msgid "requires front-end adaptation using the API."
msgstr "需要使用 API 的前端适配。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:829
+#: htdocs/luci-static/resources/view/fchomo/node.js:840
msgid "restls"
msgstr ""
@@ -3734,17 +3767,17 @@ msgstr ""
msgid "rule-set"
msgstr "规则集"
-#: htdocs/luci-static/resources/fchomo/listeners.js:562
-#: htdocs/luci-static/resources/view/fchomo/node.js:828
+#: htdocs/luci-static/resources/fchomo/listeners.js:563
+#: htdocs/luci-static/resources/view/fchomo/node.js:839
msgid "shadow-tls"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1390
+#: htdocs/luci-static/resources/view/fchomo/node.js:1401
msgid "smux"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:437
-#: htdocs/luci-static/resources/view/fchomo/node.js:469
+#: htdocs/luci-static/resources/fchomo/listeners.js:438
+#: htdocs/luci-static/resources/view/fchomo/node.js:480
msgid "split-stream"
msgstr ""
@@ -3752,21 +3785,21 @@ msgstr ""
msgid "src"
msgstr "src"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1163
-#: htdocs/luci-static/resources/view/fchomo/node.js:1316
+#: htdocs/luci-static/resources/fchomo/listeners.js:1164
+#: htdocs/luci-static/resources/view/fchomo/node.js:1327
msgid "stream-one"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1164
-#: htdocs/luci-static/resources/view/fchomo/node.js:1317
+#: htdocs/luci-static/resources/fchomo/listeners.js:1165
+#: htdocs/luci-static/resources/view/fchomo/node.js:1328
msgid "stream-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1180
+#: htdocs/luci-static/resources/fchomo/listeners.js:1181
msgid "stream-up server seconds"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "stream/poll/auto"
msgstr ""
@@ -3778,100 +3811,100 @@ msgstr ""
msgid "unchecked"
msgstr "未检查"
-#: htdocs/luci-static/resources/fchomo.js:445
+#: htdocs/luci-static/resources/fchomo.js:453
msgid "unique UCI identifier"
msgstr "独立 UCI 标识"
-#: htdocs/luci-static/resources/fchomo.js:448
+#: htdocs/luci-static/resources/fchomo.js:456
msgid "unique identifier"
msgstr "独立标识"
-#: htdocs/luci-static/resources/fchomo.js:1593
+#: htdocs/luci-static/resources/fchomo.js:1601
msgid "unique value"
msgstr "独立值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1761
+#: htdocs/luci-static/resources/view/fchomo/node.js:1838
msgid "up"
msgstr "Hysteria 上传速率"
-#: htdocs/luci-static/resources/fchomo/listeners.js:463
-#: htdocs/luci-static/resources/fchomo/listeners.js:595
-#: htdocs/luci-static/resources/view/fchomo/node.js:519
-#: htdocs/luci-static/resources/view/fchomo/node.js:561
-#: htdocs/luci-static/resources/view/fchomo/node.js:856
-#: htdocs/luci-static/resources/view/fchomo/node.js:906
-msgid "v1"
-msgstr ""
-
#: htdocs/luci-static/resources/fchomo/listeners.js:464
#: htdocs/luci-static/resources/fchomo/listeners.js:596
-#: htdocs/luci-static/resources/view/fchomo/node.js:520
-#: htdocs/luci-static/resources/view/fchomo/node.js:857
-#: htdocs/luci-static/resources/view/fchomo/node.js:907
-msgid "v2"
+#: htdocs/luci-static/resources/view/fchomo/node.js:530
+#: htdocs/luci-static/resources/view/fchomo/node.js:572
+#: htdocs/luci-static/resources/view/fchomo/node.js:867
+#: htdocs/luci-static/resources/view/fchomo/node.js:917
+msgid "v1"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:465
#: htdocs/luci-static/resources/fchomo/listeners.js:597
-#: htdocs/luci-static/resources/view/fchomo/node.js:521
-#: htdocs/luci-static/resources/view/fchomo/node.js:858
-msgid "v3"
+#: htdocs/luci-static/resources/view/fchomo/node.js:531
+#: htdocs/luci-static/resources/view/fchomo/node.js:868
+#: htdocs/luci-static/resources/view/fchomo/node.js:918
+msgid "v2"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:466
-#: htdocs/luci-static/resources/view/fchomo/node.js:522
-msgid "v4"
+#: htdocs/luci-static/resources/fchomo/listeners.js:598
+#: htdocs/luci-static/resources/view/fchomo/node.js:532
+#: htdocs/luci-static/resources/view/fchomo/node.js:869
+msgid "v3"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:467
-#: htdocs/luci-static/resources/view/fchomo/node.js:523
+#: htdocs/luci-static/resources/view/fchomo/node.js:533
+msgid "v4"
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:468
+#: htdocs/luci-static/resources/view/fchomo/node.js:534
msgid "v5"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1473
-#: htdocs/luci-static/resources/fchomo.js:1476
+#: htdocs/luci-static/resources/fchomo.js:1481
+#: htdocs/luci-static/resources/fchomo.js:1484
msgid "valid JSON format"
msgstr "有效的 JSON 格式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1098
+#: htdocs/luci-static/resources/view/fchomo/node.js:1109
msgid "valid SHA256 string with %d characters"
msgstr "包含 %d 个字符的有效 SHA256 字符串"
-#: htdocs/luci-static/resources/fchomo.js:1498
-#: htdocs/luci-static/resources/fchomo.js:1501
+#: htdocs/luci-static/resources/fchomo.js:1506
+#: htdocs/luci-static/resources/fchomo.js:1509
msgid "valid URL"
msgstr "有效网址"
-#: htdocs/luci-static/resources/fchomo.js:1511
+#: htdocs/luci-static/resources/fchomo.js:1519
msgid "valid base64 key with %d characters"
msgstr "包含 %d 个字符的有效 base64 密钥"
-#: htdocs/luci-static/resources/fchomo.js:1571
-#: htdocs/luci-static/resources/fchomo.js:1577
+#: htdocs/luci-static/resources/fchomo.js:1579
+#: htdocs/luci-static/resources/fchomo.js:1585
msgid "valid format: 2x, 2p, 4v"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1558
+#: htdocs/luci-static/resources/fchomo.js:1566
msgid "valid key length with %d characters"
msgstr "包含 %d 个字符的有效密钥"
-#: htdocs/luci-static/resources/fchomo.js:1436
+#: htdocs/luci-static/resources/fchomo.js:1444
msgid "valid port value"
msgstr "有效端口值"
-#: htdocs/luci-static/resources/fchomo.js:1486
+#: htdocs/luci-static/resources/fchomo.js:1494
msgid "valid uuid"
msgstr "有效 uuid"
-#: htdocs/luci-static/resources/fchomo.js:405
+#: htdocs/luci-static/resources/fchomo.js:413
msgid "vless-mlkem768"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:404
+#: htdocs/luci-static/resources/fchomo.js:412
msgid "vless-x25519"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:339
+#: htdocs/luci-static/resources/fchomo.js:347
msgid "xchacha20-ietf-poly1305"
msgstr ""
@@ -3879,7 +3912,7 @@ msgstr ""
msgid "yacd-meta"
msgstr "yacd-meta"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1391
+#: htdocs/luci-static/resources/view/fchomo/node.js:1402
msgid "yamux"
msgstr ""
@@ -3887,11 +3920,11 @@ msgstr ""
msgid "zashboard"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:667
+#: htdocs/luci-static/resources/view/fchomo/node.js:678
msgid "zero"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1254
+#: htdocs/luci-static/resources/fchomo.js:1262
msgid "🡇"
msgstr ""
diff --git a/luci-app-fchomo/po/zh_Hant/fchomo.po b/luci-app-fchomo/po/zh_Hant/fchomo.po
index 58ee6c0a..d351a2d0 100644
--- a/luci-app-fchomo/po/zh_Hant/fchomo.po
+++ b/luci-app-fchomo/po/zh_Hant/fchomo.po
@@ -12,30 +12,30 @@ msgstr ""
msgid "%s log"
msgstr "%s 日誌"
-#: htdocs/luci-static/resources/fchomo.js:242
-#: htdocs/luci-static/resources/fchomo.js:243
-#: htdocs/luci-static/resources/fchomo.js:244
-#: htdocs/luci-static/resources/fchomo.js:245
-#: htdocs/luci-static/resources/fchomo.js:246
-#: htdocs/luci-static/resources/fchomo.js:247
+#: htdocs/luci-static/resources/fchomo.js:250
+#: htdocs/luci-static/resources/fchomo.js:251
+#: htdocs/luci-static/resources/fchomo.js:252
+#: htdocs/luci-static/resources/fchomo.js:253
+#: htdocs/luci-static/resources/fchomo.js:254
+#: htdocs/luci-static/resources/fchomo.js:255
msgid "%s ports"
msgstr "%s 連接埠"
-#: htdocs/luci-static/resources/fchomo.js:607
-#: htdocs/luci-static/resources/fchomo.js:610
+#: htdocs/luci-static/resources/fchomo.js:615
+#: htdocs/luci-static/resources/fchomo.js:618
#: htdocs/luci-static/resources/view/fchomo/client.js:316
msgid "(Imported)"
msgstr "(已導入)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:990
-#: htdocs/luci-static/resources/fchomo/listeners.js:998
-#: htdocs/luci-static/resources/fchomo/listeners.js:1007
-#: htdocs/luci-static/resources/view/fchomo/global.js:546
-#: htdocs/luci-static/resources/view/fchomo/global.js:552
-#: htdocs/luci-static/resources/view/fchomo/node.js:1113
-#: htdocs/luci-static/resources/view/fchomo/node.js:1119
-#: htdocs/luci-static/resources/view/fchomo/node.js:1127
-#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/fchomo/listeners.js:991
+#: htdocs/luci-static/resources/fchomo/listeners.js:999
+#: htdocs/luci-static/resources/fchomo/listeners.js:1008
+#: htdocs/luci-static/resources/view/fchomo/global.js:564
+#: htdocs/luci-static/resources/view/fchomo/global.js:570
+#: htdocs/luci-static/resources/view/fchomo/node.js:1124
+#: htdocs/luci-static/resources/view/fchomo/node.js:1130
+#: htdocs/luci-static/resources/view/fchomo/node.js:1138
+#: htdocs/luci-static/resources/view/fchomo/node.js:1144
msgid "(mTLS)"
msgstr ""
@@ -46,19 +46,19 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1058
#: htdocs/luci-static/resources/view/fchomo/client.js:1059
#: htdocs/luci-static/resources/view/fchomo/client.js:1288
-#: htdocs/luci-static/resources/view/fchomo/node.js:1916
-#: htdocs/luci-static/resources/view/fchomo/node.js:1922
-#: htdocs/luci-static/resources/view/fchomo/node.js:1936
-#: htdocs/luci-static/resources/view/fchomo/node.js:1942
+#: htdocs/luci-static/resources/view/fchomo/node.js:1993
+#: htdocs/luci-static/resources/view/fchomo/node.js:1999
+#: htdocs/luci-static/resources/view/fchomo/node.js:2013
+#: htdocs/luci-static/resources/view/fchomo/node.js:2019
msgid "-- Please choose --"
msgstr "-- 請選擇 --"
-#: htdocs/luci-static/resources/fchomo.js:394
+#: htdocs/luci-static/resources/fchomo.js:402
msgid "0-RTT reuse."
msgstr "0-RTT 重用。"
-#: htdocs/luci-static/resources/fchomo.js:391
-#: htdocs/luci-static/resources/fchomo.js:395
+#: htdocs/luci-static/resources/fchomo.js:399
+#: htdocs/luci-static/resources/fchomo.js:403
msgid "1-RTT only."
msgstr "僅限 1-RTT。"
@@ -66,15 +66,15 @@ msgstr "僅限 1-RTT。"
msgid "163Music"
msgstr "網易雲音樂"
-#: htdocs/luci-static/resources/fchomo.js:341
+#: htdocs/luci-static/resources/fchomo.js:349
msgid "2022-blake3-aes-128-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:342
+#: htdocs/luci-static/resources/fchomo.js:350
msgid "2022-blake3-aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:343
+#: htdocs/luci-static/resources/fchomo.js:351
msgid "2022-blake3-chacha20-poly1305"
msgstr ""
@@ -82,16 +82,16 @@ msgstr ""
msgid "0 or 1 only."
msgstr "僅限 0 或 1。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:968
-#: htdocs/luci-static/resources/fchomo/listeners.js:983
-#: htdocs/luci-static/resources/fchomo/listeners.js:1008
-#: htdocs/luci-static/resources/view/fchomo/node.js:1120
-#: htdocs/luci-static/resources/view/fchomo/node.js:1134
+#: htdocs/luci-static/resources/fchomo/listeners.js:969
+#: htdocs/luci-static/resources/fchomo/listeners.js:984
+#: htdocs/luci-static/resources/fchomo/listeners.js:1009
+#: htdocs/luci-static/resources/view/fchomo/node.js:1131
+#: htdocs/luci-static/resources/view/fchomo/node.js:1145
msgid "Save your configuration before uploading files!"
msgstr "上傳文件前請先保存配置!"
#: htdocs/luci-static/resources/fchomo/listeners.js:286
-#: htdocs/luci-static/resources/view/fchomo/node.js:391
+#: htdocs/luci-static/resources/view/fchomo/node.js:402
msgid ""
"A base64 string is used to fine-tune network behavior.
Please refer to "
"the document"
@@ -100,56 +100,56 @@ msgstr ""
"一個 base64 字串用於微調網路行為。
格式請參考文檔。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:602
+#: htdocs/luci-static/resources/view/fchomo/global.js:620
msgid "API"
msgstr "API"
-#: htdocs/luci-static/resources/view/fchomo/global.js:552
+#: htdocs/luci-static/resources/view/fchomo/global.js:570
msgid "API Client Auth Certificate path"
msgstr "API 客戶端認證憑證路徑"
-#: htdocs/luci-static/resources/view/fchomo/global.js:546
+#: htdocs/luci-static/resources/view/fchomo/global.js:564
msgid "API Client Auth type"
msgstr "API 客戶端認證類型"
-#: htdocs/luci-static/resources/view/fchomo/global.js:642
+#: htdocs/luci-static/resources/view/fchomo/global.js:660
msgid "API DoH service"
msgstr "API DoH 伺服器"
-#: htdocs/luci-static/resources/view/fchomo/global.js:596
+#: htdocs/luci-static/resources/view/fchomo/global.js:614
msgid "API ECH config"
msgstr "API ECH 配置"
-#: htdocs/luci-static/resources/view/fchomo/global.js:557
+#: htdocs/luci-static/resources/view/fchomo/global.js:575
msgid "API ECH key"
msgstr "API ECH 密鑰"
-#: htdocs/luci-static/resources/view/fchomo/global.js:633
+#: htdocs/luci-static/resources/view/fchomo/global.js:651
msgid "API HTTP port"
msgstr "API HTTP 連接埠"
-#: htdocs/luci-static/resources/view/fchomo/global.js:637
+#: htdocs/luci-static/resources/view/fchomo/global.js:655
msgid "API HTTPS port"
msgstr "API HTTPS 連接埠"
-#: htdocs/luci-static/resources/view/fchomo/global.js:538
+#: htdocs/luci-static/resources/view/fchomo/global.js:556
msgid "API TLS certificate path"
msgstr "API TLS 憑證路徑"
-#: htdocs/luci-static/resources/view/fchomo/global.js:542
+#: htdocs/luci-static/resources/view/fchomo/global.js:560
msgid "API TLS private key path"
msgstr "API TLS 私鑰"
-#: htdocs/luci-static/resources/view/fchomo/global.js:646
+#: htdocs/luci-static/resources/view/fchomo/global.js:664
msgid "API secret"
msgstr "API 令牌"
-#: htdocs/luci-static/resources/fchomo/listeners.js:370
-#: htdocs/luci-static/resources/fchomo/listeners.js:372
+#: htdocs/luci-static/resources/fchomo/listeners.js:371
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/view/fchomo/node.js:420
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:431
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
msgid "ASCII data stream"
msgstr "ASCII 資料流"
@@ -157,8 +157,8 @@ msgstr "ASCII 資料流"
msgid "ASN version"
msgstr "ASN 版本"
-#: htdocs/luci-static/resources/view/fchomo/global.js:723
-#: htdocs/luci-static/resources/view/fchomo/global.js:773
+#: htdocs/luci-static/resources/view/fchomo/global.js:741
+#: htdocs/luci-static/resources/view/fchomo/global.js:791
msgid "Access Control"
msgstr "訪問控制"
@@ -174,7 +174,7 @@ msgstr "新增 DNS 策略"
msgid "Add a DNS server"
msgstr "新增 DNS 伺服器"
-#: htdocs/luci-static/resources/view/fchomo/node.js:217
+#: htdocs/luci-static/resources/view/fchomo/node.js:228
msgid "Add a Node"
msgstr "新增 節點"
@@ -182,11 +182,11 @@ msgstr "新增 節點"
msgid "Add a inbound"
msgstr "新增 入站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1504
+#: htdocs/luci-static/resources/view/fchomo/node.js:1515
msgid "Add a provider"
msgstr "新增 供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1892
+#: htdocs/luci-static/resources/view/fchomo/node.js:1969
msgid "Add a proxy chain"
msgstr "新增 代理鏈"
@@ -210,11 +210,11 @@ msgstr "新增 伺服器"
msgid "Add a sub rule"
msgstr "新增 子規則"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1714
+#: htdocs/luci-static/resources/view/fchomo/node.js:1791
msgid "Add prefix"
msgstr "添加前綴"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1718
+#: htdocs/luci-static/resources/view/fchomo/node.js:1795
msgid "Add suffix"
msgstr "添加後綴"
@@ -223,7 +223,7 @@ msgstr "添加後綴"
msgid "Address"
msgstr "位址"
-#: htdocs/luci-static/resources/fchomo.js:398
+#: htdocs/luci-static/resources/fchomo.js:406
msgid ""
"After the 1-RTT client/server hello, padding randomly 111-1111 bytes with "
"100% probability."
@@ -234,32 +234,32 @@ msgstr ""
msgid "Aggressive"
msgstr "侵略性"
-#: htdocs/luci-static/resources/view/fchomo/global.js:517
+#: htdocs/luci-static/resources/view/fchomo/global.js:535
msgid "Aging time of NAT map maintained by client."
msgstr "客戶端維護的 NAT 映射 的老化時間。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:776
-#: htdocs/luci-static/resources/view/fchomo/global.js:839
-#: htdocs/luci-static/resources/view/fchomo/global.js:873
+#: htdocs/luci-static/resources/view/fchomo/global.js:794
+#: htdocs/luci-static/resources/view/fchomo/global.js:857
+#: htdocs/luci-static/resources/view/fchomo/global.js:891
msgid "All allowed"
msgstr "允許所有"
-#: htdocs/luci-static/resources/fchomo.js:239
+#: htdocs/luci-static/resources/fchomo.js:247
msgid "All ports"
msgstr "所有連接埠"
-#: htdocs/luci-static/resources/view/fchomo/global.js:629
+#: htdocs/luci-static/resources/view/fchomo/global.js:647
msgid ""
"Allow access from private network.To access the API on a private "
"network from a public website, it must be enabled."
msgstr ""
"允許從私有網路訪問。要從公共網站訪問私有網路上的 API,則必須啟用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:895
+#: htdocs/luci-static/resources/fchomo/listeners.js:896
msgid "Allow insecure connections"
msgstr "允許不安全的連線"
-#: htdocs/luci-static/resources/view/fchomo/node.js:787
+#: htdocs/luci-static/resources/view/fchomo/node.js:798
msgid "Allowed IPs"
msgstr "允許的 IP"
@@ -271,8 +271,8 @@ msgstr "已是最新版本。"
msgid "Already in updating."
msgstr "已在更新中。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:542
-#: htdocs/luci-static/resources/view/fchomo/node.js:657
+#: htdocs/luci-static/resources/fchomo/listeners.js:543
+#: htdocs/luci-static/resources/view/fchomo/node.js:668
msgid "Alter ID"
msgstr "額外 ID"
@@ -285,29 +285,29 @@ msgstr ""
msgid "Application version"
msgstr "應用版本"
-#: htdocs/luci-static/resources/view/fchomo/global.js:801
+#: htdocs/luci-static/resources/view/fchomo/global.js:819
msgid "As the TOP upstream of dnsmasq"
msgstr "作為 dnsmasq 的最優先上游"
-#: htdocs/luci-static/resources/view/fchomo/global.js:802
-#: htdocs/luci-static/resources/view/fchomo/global.js:809
+#: htdocs/luci-static/resources/view/fchomo/global.js:820
+#: htdocs/luci-static/resources/view/fchomo/global.js:827
msgid "As the TOP upstream of dnsmasq."
msgstr "作為 dnsmasq 的最優先上游。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:492
+#: htdocs/luci-static/resources/fchomo/listeners.js:493
msgid "Auth timeout"
msgstr "認證超時"
-#: htdocs/luci-static/resources/view/fchomo/node.js:679
+#: htdocs/luci-static/resources/view/fchomo/node.js:690
msgid "Authenticated length"
msgstr "認證長度"
-#: htdocs/luci-static/resources/fchomo/listeners.js:439
-#: htdocs/luci-static/resources/fchomo/listeners.js:1162
-#: htdocs/luci-static/resources/view/fchomo/global.js:405
-#: htdocs/luci-static/resources/view/fchomo/node.js:471
-#: htdocs/luci-static/resources/view/fchomo/node.js:495
-#: htdocs/luci-static/resources/view/fchomo/node.js:1315
+#: htdocs/luci-static/resources/fchomo/listeners.js:440
+#: htdocs/luci-static/resources/fchomo/listeners.js:1163
+#: htdocs/luci-static/resources/view/fchomo/global.js:423
+#: htdocs/luci-static/resources/view/fchomo/node.js:482
+#: htdocs/luci-static/resources/view/fchomo/node.js:506
+#: htdocs/luci-static/resources/view/fchomo/node.js:1326
msgid "Auto"
msgstr "自動"
@@ -323,8 +323,8 @@ msgstr "自動更新"
msgid "Auto update resources."
msgstr "自動更新資源文件。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:628
-#: htdocs/luci-static/resources/view/fchomo/node.js:884
+#: htdocs/luci-static/resources/fchomo/listeners.js:629
+#: htdocs/luci-static/resources/view/fchomo/node.js:895
msgid "BBR profile"
msgstr "BBR 設定檔"
@@ -332,15 +332,15 @@ msgstr "BBR 設定檔"
msgid "Baidu"
msgstr "百度"
-#: htdocs/luci-static/resources/view/fchomo/node.js:694
+#: htdocs/luci-static/resources/view/fchomo/node.js:705
msgid "Base64 encoded ECDSA private key on the NIST P-256 curve."
msgstr "基於 NIST P-256 曲線的 Base64 編碼 ECDSA 私鑰。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:702
+#: htdocs/luci-static/resources/view/fchomo/node.js:713
msgid "Base64 encoded ECDSA public key on the NIST P-256 curve."
msgstr "基於 NIST P-256 曲線的 Base64 編碼 ECDSA 公鑰。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:499
+#: htdocs/luci-static/resources/view/fchomo/global.js:517
msgid "Based on google/gvisor."
msgstr "基於 google/gvisor。"
@@ -357,23 +357,23 @@ msgstr "二進位格式僅支持 domain/ipcidr"
msgid "Binary mrs"
msgstr "二進位 mrs"
-#: htdocs/luci-static/resources/view/fchomo/global.js:737
-#: htdocs/luci-static/resources/view/fchomo/node.js:1474
-#: htdocs/luci-static/resources/view/fchomo/node.js:1790
+#: htdocs/luci-static/resources/view/fchomo/global.js:755
+#: htdocs/luci-static/resources/view/fchomo/node.js:1485
+#: htdocs/luci-static/resources/view/fchomo/node.js:1867
msgid "Bind interface"
msgstr "綁定介面"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1475
-#: htdocs/luci-static/resources/view/fchomo/node.js:1791
+#: htdocs/luci-static/resources/view/fchomo/node.js:1486
+#: htdocs/luci-static/resources/view/fchomo/node.js:1868
msgid "Bind outbound interface."
msgstr "綁定出站介面。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:738
+#: htdocs/luci-static/resources/view/fchomo/global.js:756
msgid ""
"Bind outbound traffic to specific interface. Leave empty to auto detect."
msgstr "綁定出站流量至指定介面。留空自動檢測。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:778
+#: htdocs/luci-static/resources/view/fchomo/global.js:796
msgid "Black list"
msgstr "黑名單"
@@ -398,52 +398,52 @@ msgstr "引導 DNS 伺服器 (節點)"
msgid "BundleMRS version"
msgstr "BundleMRS 版本"
-#: htdocs/luci-static/resources/view/fchomo/global.js:840
+#: htdocs/luci-static/resources/view/fchomo/global.js:858
msgid "Bypass CN"
msgstr "繞過 CN 流量"
-#: htdocs/luci-static/resources/view/fchomo/global.js:874
+#: htdocs/luci-static/resources/view/fchomo/global.js:892
msgid "Bypass DSCP"
msgstr "繞過 DSCP"
-#: htdocs/luci-static/resources/fchomo/listeners.js:437
#: htdocs/luci-static/resources/fchomo/listeners.js:438
#: htdocs/luci-static/resources/fchomo/listeners.js:439
#: htdocs/luci-static/resources/fchomo/listeners.js:440
-#: htdocs/luci-static/resources/view/fchomo/node.js:469
-#: htdocs/luci-static/resources/view/fchomo/node.js:470
-#: htdocs/luci-static/resources/view/fchomo/node.js:471
-#: htdocs/luci-static/resources/view/fchomo/node.js:472
+#: htdocs/luci-static/resources/fchomo/listeners.js:441
+#: htdocs/luci-static/resources/view/fchomo/node.js:480
+#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:482
+#: htdocs/luci-static/resources/view/fchomo/node.js:483
msgid "CDN support"
msgstr "CDN 支援"
-#: htdocs/luci-static/resources/view/fchomo/global.js:624
+#: htdocs/luci-static/resources/view/fchomo/global.js:642
msgid "CORS Allow origins"
msgstr "CORS 允許的來源"
-#: htdocs/luci-static/resources/view/fchomo/global.js:628
+#: htdocs/luci-static/resources/view/fchomo/global.js:646
msgid "CORS Allow private network"
msgstr "CORS 允許私有網路"
-#: htdocs/luci-static/resources/view/fchomo/global.js:625
+#: htdocs/luci-static/resources/view/fchomo/global.js:643
msgid "CORS allowed origins, * will be used if empty."
msgstr "CORS 允許的來源,留空則使用 *。"
-#: htdocs/luci-static/resources/fchomo.js:723
+#: htdocs/luci-static/resources/fchomo.js:731
msgid "Cancel"
msgstr "取消"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1092
+#: htdocs/luci-static/resources/view/fchomo/node.js:1103
msgid "Cert fingerprint"
msgstr "憑證指紋"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1093
+#: htdocs/luci-static/resources/view/fchomo/node.js:1104
msgid ""
"Certificate fingerprint. Used to implement SSL Pinning and prevent MitM."
msgstr "憑證指紋。用於實現 SSL憑證固定 並防止 MitM。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:960
-#: htdocs/luci-static/resources/view/fchomo/node.js:1113
+#: htdocs/luci-static/resources/fchomo/listeners.js:961
+#: htdocs/luci-static/resources/view/fchomo/node.js:1124
msgid "Certificate path"
msgstr "憑證路徑"
@@ -473,15 +473,15 @@ msgid "China list version"
msgstr "大陸網域清單版本"
#: htdocs/luci-static/resources/fchomo/listeners.js:255
-#: htdocs/luci-static/resources/fchomo/listeners.js:353
-#: htdocs/luci-static/resources/view/fchomo/node.js:344
-#: htdocs/luci-static/resources/view/fchomo/node.js:403
-#: htdocs/luci-static/resources/view/fchomo/node.js:663
+#: htdocs/luci-static/resources/fchomo/listeners.js:354
+#: htdocs/luci-static/resources/view/fchomo/node.js:355
+#: htdocs/luci-static/resources/view/fchomo/node.js:414
+#: htdocs/luci-static/resources/view/fchomo/node.js:674
msgid "Chipher"
msgstr "加密方法"
-#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/view/fchomo/node.js:412
+#: htdocs/luci-static/resources/fchomo/listeners.js:363
+#: htdocs/luci-static/resources/view/fchomo/node.js:423
msgid "Chipher must be enabled if obfuscate downlink is disabled."
msgstr "如果下行鏈路混淆功能已停用,則必須啟用加密。"
@@ -497,29 +497,29 @@ msgstr ""
"點擊此處下載"
"最新的初始包。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:726
-#: htdocs/luci-static/resources/fchomo/listeners.js:999
-#: htdocs/luci-static/resources/view/fchomo/global.js:553
-#: htdocs/luci-static/resources/view/fchomo/node.js:948
-#: htdocs/luci-static/resources/view/fchomo/node.js:1114
-#: htdocs/luci-static/resources/view/fchomo/node.js:1128
+#: htdocs/luci-static/resources/fchomo/listeners.js:727
+#: htdocs/luci-static/resources/fchomo/listeners.js:1000
+#: htdocs/luci-static/resources/view/fchomo/global.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:959
+#: htdocs/luci-static/resources/view/fchomo/node.js:1125
+#: htdocs/luci-static/resources/view/fchomo/node.js:1139
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:22
msgid "Client"
msgstr "客戶端"
-#: htdocs/luci-static/resources/fchomo/listeners.js:998
+#: htdocs/luci-static/resources/fchomo/listeners.js:999
msgid "Client Auth Certificate path"
msgstr "客戶端認證憑證路徑"
-#: htdocs/luci-static/resources/fchomo/listeners.js:990
+#: htdocs/luci-static/resources/fchomo/listeners.js:991
msgid "Client Auth type"
msgstr "客戶端認證類型"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1159
+#: htdocs/luci-static/resources/view/fchomo/node.js:1170
msgid "Client fingerprint"
msgstr "客戶端指紋"
-#: htdocs/luci-static/resources/fchomo/listeners.js:349
+#: htdocs/luci-static/resources/fchomo/listeners.js:350
msgid "Client key"
msgstr "客戶端密鑰"
@@ -531,21 +531,21 @@ msgstr "客戶端狀態"
msgid "Collecting data..."
msgstr "收集資料中..."
-#: htdocs/luci-static/resources/fchomo.js:240
-#: htdocs/luci-static/resources/fchomo.js:241
+#: htdocs/luci-static/resources/fchomo.js:248
+#: htdocs/luci-static/resources/fchomo.js:249
msgid "Common ports (bypass P2P traffic)"
msgstr "常用連接埠(繞過 P2P 流量)"
-#: htdocs/luci-static/resources/fchomo.js:1370
+#: htdocs/luci-static/resources/fchomo.js:1378
msgid "Complete"
msgstr "完成"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1734
+#: htdocs/luci-static/resources/view/fchomo/node.js:1811
msgid "Configuration Items"
msgstr "配置項"
-#: htdocs/luci-static/resources/fchomo/listeners.js:620
-#: htdocs/luci-static/resources/view/fchomo/node.js:876
+#: htdocs/luci-static/resources/fchomo/listeners.js:621
+#: htdocs/luci-static/resources/view/fchomo/node.js:887
msgid "Congestion controller"
msgstr "擁塞控制器"
@@ -553,7 +553,7 @@ msgstr "擁塞控制器"
msgid "Connection check"
msgstr "連接檢查"
-#: htdocs/luci-static/resources/view/fchomo/node.js:528
+#: htdocs/luci-static/resources/view/fchomo/node.js:539
msgid "Connection reuse"
msgstr "連接重用"
@@ -561,19 +561,19 @@ msgstr "連接重用"
msgid "Conservative"
msgstr "保守"
-#: htdocs/luci-static/resources/fchomo.js:592
+#: htdocs/luci-static/resources/fchomo.js:600
msgid "Content copied to clipboard!"
msgstr "內容已複製到剪貼簿!"
#: htdocs/luci-static/resources/view/fchomo/client.js:671
-#: htdocs/luci-static/resources/view/fchomo/node.js:1644
-#: htdocs/luci-static/resources/view/fchomo/node.js:1670
+#: htdocs/luci-static/resources/view/fchomo/node.js:1658
+#: htdocs/luci-static/resources/view/fchomo/node.js:1684
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:348
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:374
msgid "Content will not be verified, Please make sure you enter it correctly."
msgstr "內容將不會被驗證,請確保輸入正確。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1643
+#: htdocs/luci-static/resources/view/fchomo/node.js:1657
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:347
msgid "Contents"
msgstr "內容"
@@ -582,7 +582,7 @@ msgstr "內容"
msgid "Contents have been saved."
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:594
+#: htdocs/luci-static/resources/fchomo.js:602
msgid "Copy"
msgstr "複製"
@@ -594,21 +594,21 @@ msgstr "核心版本"
msgid "Cron expression"
msgstr "Cron 表達式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:892
+#: htdocs/luci-static/resources/view/fchomo/global.js:910
msgid "Custom Direct List"
msgstr "自訂直連清單"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1782
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:415
msgid "Custom HTTP header."
msgstr "自訂 HTTP header。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:910
+#: htdocs/luci-static/resources/view/fchomo/global.js:928
msgid "Custom Proxy List"
msgstr "自訂代理清單"
-#: htdocs/luci-static/resources/fchomo/listeners.js:377
-#: htdocs/luci-static/resources/view/fchomo/node.js:427
+#: htdocs/luci-static/resources/fchomo/listeners.js:378
+#: htdocs/luci-static/resources/view/fchomo/node.js:438
msgid "Custom byte layout"
msgstr "自訂位元組佈局"
@@ -626,15 +626,15 @@ msgstr ""
msgid "DNS policy"
msgstr "DNS 策略"
-#: htdocs/luci-static/resources/view/fchomo/global.js:474
+#: htdocs/luci-static/resources/view/fchomo/global.js:492
msgid "DNS port"
msgstr " DNS 連接埠"
#: htdocs/luci-static/resources/view/fchomo/client.js:874
#: htdocs/luci-static/resources/view/fchomo/client.js:1438
#: htdocs/luci-static/resources/view/fchomo/client.js:1447
-#: htdocs/luci-static/resources/view/fchomo/node.js:734
-#: htdocs/luci-static/resources/view/fchomo/node.js:817
+#: htdocs/luci-static/resources/view/fchomo/node.js:745
+#: htdocs/luci-static/resources/view/fchomo/node.js:828
msgid "DNS server"
msgstr "DNS 伺服器"
@@ -642,7 +642,7 @@ msgstr "DNS 伺服器"
msgid "DNS settings"
msgstr "DNS 設定"
-#: htdocs/luci-static/resources/view/fchomo/global.js:877
+#: htdocs/luci-static/resources/view/fchomo/global.js:895
msgid "DSCP list"
msgstr "DSCP 清單"
@@ -662,62 +662,66 @@ msgstr "預設 DNS(由 WAN 下發)"
msgid "Default DNS server"
msgstr "預設 DNS 伺服器"
-#: htdocs/luci-static/resources/view/fchomo/node.js:788
+#: htdocs/luci-static/resources/view/fchomo/node.js:22
+msgid "Derive from priv-key"
+msgstr "從私鑰派生"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:799
msgid "Destination addresses allowed to be forwarded via Wireguard."
msgstr "允許通過 WireGuard 轉發的目的位址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1915
+#: htdocs/luci-static/resources/view/fchomo/node.js:1992
msgid "Destination provider"
msgstr "落地供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1921
+#: htdocs/luci-static/resources/view/fchomo/node.js:1998
msgid "Destination proxy node"
msgstr "落地代理節點"
-#: htdocs/luci-static/resources/view/fchomo/node.js:228
+#: htdocs/luci-static/resources/view/fchomo/node.js:239
msgid "Dial fields"
msgstr "撥號欄位"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1928
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2025
msgid "Different chain head/tail"
msgstr "不同的鏈頭/鏈尾"
-#: htdocs/luci-static/resources/view/fchomo/global.js:398
+#: htdocs/luci-static/resources/view/fchomo/global.js:416
msgid "Direct"
msgstr "直連"
-#: htdocs/luci-static/resources/view/fchomo/global.js:780
+#: htdocs/luci-static/resources/view/fchomo/global.js:798
msgid "Direct IPv4 IP-s"
msgstr "直連 IPv4 位址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:783
+#: htdocs/luci-static/resources/view/fchomo/global.js:801
msgid "Direct IPv6 IP-s"
msgstr "直連 IPv6 位址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:786
+#: htdocs/luci-static/resources/view/fchomo/global.js:804
msgid "Direct MAC-s"
msgstr "直連 MAC 位址"
#: htdocs/luci-static/resources/fchomo/listeners.js:194
-#: htdocs/luci-static/resources/view/fchomo/global.js:406
-#: htdocs/luci-static/resources/view/fchomo/node.js:299
+#: htdocs/luci-static/resources/view/fchomo/global.js:424
+#: htdocs/luci-static/resources/view/fchomo/node.js:310
msgid "Disable"
msgstr "停用"
-#: htdocs/luci-static/resources/view/fchomo/global.js:714
+#: htdocs/luci-static/resources/view/fchomo/global.js:732
msgid "Disable ECN of quic-go"
msgstr "停用 quic-go 的 明確壅塞通知(ECN)"
-#: htdocs/luci-static/resources/view/fchomo/global.js:711
+#: htdocs/luci-static/resources/view/fchomo/global.js:729
msgid "Disable GSO of quic-go"
msgstr "停用 quic-go 的 通用分段卸載(GSO)"
-#: htdocs/luci-static/resources/view/fchomo/global.js:526
+#: htdocs/luci-static/resources/view/fchomo/global.js:544
msgid "Disable ICMP Forwarding"
msgstr "禁用 ICMP 轉發"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1033
+#: htdocs/luci-static/resources/view/fchomo/node.js:1044
msgid "Disable SNI"
msgstr "停用 SNI"
@@ -725,7 +729,7 @@ msgstr "停用 SNI"
msgid "Disable UDP"
msgstr "停用 UDP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:708
+#: htdocs/luci-static/resources/view/fchomo/global.js:726
msgid "Disable safe path check"
msgstr "禁用安全路徑檢查"
@@ -745,29 +749,29 @@ msgstr ""
msgid "Domain"
msgstr "網域"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1034
+#: htdocs/luci-static/resources/view/fchomo/node.js:1045
msgid "Donot send server name in ClientHello."
msgstr "不要在 ClientHello 中傳送伺服器名稱。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1587
-#: htdocs/luci-static/resources/view/fchomo/node.js:1106
-#: htdocs/luci-static/resources/view/fchomo/node.js:1774
+#: htdocs/luci-static/resources/view/fchomo/node.js:1117
+#: htdocs/luci-static/resources/view/fchomo/node.js:1851
msgid "Donot verifying server certificate."
msgstr "不驗證伺服器憑證。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1453
+#: htdocs/luci-static/resources/view/fchomo/node.js:1464
msgid "Download bandwidth"
msgstr "下載頻寬"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1454
+#: htdocs/luci-static/resources/view/fchomo/node.js:1465
msgid "Download bandwidth in Mbps."
msgstr "下載頻寬(單位:Mbps)。"
-#: htdocs/luci-static/resources/fchomo.js:1249
+#: htdocs/luci-static/resources/fchomo.js:1257
msgid "Download failed: %s"
msgstr "下載失敗: %s"
-#: htdocs/luci-static/resources/fchomo.js:1247
+#: htdocs/luci-static/resources/fchomo.js:1255
msgid "Download successful."
msgstr "下載成功。"
@@ -775,16 +779,16 @@ msgstr "下載成功。"
msgid "Dual stack"
msgstr "雙棧"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1153
+#: htdocs/luci-static/resources/view/fchomo/node.js:1164
msgid "ECH HTTPS record query servername"
msgstr "ECH HTTPS 記錄查詢網域"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1056
-#: htdocs/luci-static/resources/view/fchomo/node.js:1147
+#: htdocs/luci-static/resources/fchomo/listeners.js:1057
+#: htdocs/luci-static/resources/view/fchomo/node.js:1158
msgid "ECH config"
msgstr "ECH 配置"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1015
+#: htdocs/luci-static/resources/fchomo/listeners.js:1016
msgid "ECH key"
msgstr "ECH 密鑰"
@@ -796,15 +800,15 @@ msgstr "強制覆蓋 ECS"
msgid "EDNS Client Subnet"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:415
+#: htdocs/luci-static/resources/view/fchomo/global.js:433
msgid "ETag support"
msgstr "ETag 支援"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1293
+#: htdocs/luci-static/resources/view/fchomo/node.js:1304
msgid "Early Data first packet length limit."
msgstr "前置數據長度閾值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1299
+#: htdocs/luci-static/resources/view/fchomo/node.js:1310
msgid "Early Data header name"
msgstr "前置數據標頭"
@@ -812,7 +816,7 @@ msgstr "前置數據標頭"
msgid "Edit inbound"
msgstr "編輯入站"
-#: htdocs/luci-static/resources/view/fchomo/node.js:203
+#: htdocs/luci-static/resources/view/fchomo/node.js:214
msgid "Edit node"
msgstr "編輯節點"
@@ -820,12 +824,12 @@ msgstr "編輯節點"
msgid "Edit ruleset"
msgstr "編輯規則集"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1655
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:345
msgid "Editer"
msgstr "編輯器"
-#: htdocs/luci-static/resources/fchomo.js:385
+#: htdocs/luci-static/resources/fchomo.js:393
msgid "Eliminate encryption header characteristics"
msgstr "消除加密頭特徵"
@@ -841,18 +845,18 @@ msgstr "為空時回退"
#: htdocs/luci-static/resources/view/fchomo/client.js:1503
#: htdocs/luci-static/resources/view/fchomo/client.js:1734
#: htdocs/luci-static/resources/view/fchomo/client.js:1790
-#: htdocs/luci-static/resources/view/fchomo/global.js:404
-#: htdocs/luci-static/resources/view/fchomo/global.js:683
-#: htdocs/luci-static/resources/view/fchomo/node.js:235
-#: htdocs/luci-static/resources/view/fchomo/node.js:1614
-#: htdocs/luci-static/resources/view/fchomo/node.js:1813
-#: htdocs/luci-static/resources/view/fchomo/node.js:1902
+#: htdocs/luci-static/resources/view/fchomo/global.js:422
+#: htdocs/luci-static/resources/view/fchomo/global.js:701
+#: htdocs/luci-static/resources/view/fchomo/node.js:246
+#: htdocs/luci-static/resources/view/fchomo/node.js:1628
+#: htdocs/luci-static/resources/view/fchomo/node.js:1890
+#: htdocs/luci-static/resources/view/fchomo/node.js:1979
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:272
#: htdocs/luci-static/resources/view/fchomo/server.js:49
msgid "Enable"
msgstr "啟用"
-#: htdocs/luci-static/resources/view/fchomo/node.js:572
+#: htdocs/luci-static/resources/view/fchomo/node.js:583
msgid ""
"Enable 0-RTT QUIC connection handshake on the client side. This is not "
"impacting much on the performance, as the protocol is fully multiplexed.
強烈建議停用此功能,因為它容易受到重放攻擊。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:582
msgid "Enable 0-RTT handshake"
msgstr "啟用 0-RTT 握手"
-#: htdocs/luci-static/resources/view/fchomo/global.js:717
+#: htdocs/luci-static/resources/view/fchomo/global.js:735
msgid ""
"Enable IP4P "
"conversion for outbound connections"
@@ -873,57 +877,57 @@ msgstr ""
"為出站連線啟用 IP4P 轉換"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1141
+#: htdocs/luci-static/resources/view/fchomo/node.js:1152
msgid "Enable ECH"
msgstr "啟用 ECH"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1441
+#: htdocs/luci-static/resources/view/fchomo/node.js:1452
msgid "Enable TCP Brutal"
msgstr "啟用 TCP Brutal"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1442
+#: htdocs/luci-static/resources/view/fchomo/node.js:1453
msgid "Enable TCP Brutal congestion control algorithm"
msgstr "啟用 TCP Brutal 擁塞控制演算法。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1430
+#: htdocs/luci-static/resources/view/fchomo/node.js:1441
msgid "Enable multiplexing only for TCP."
msgstr "僅為 TCP 啟用多路復用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:423
-#: htdocs/luci-static/resources/view/fchomo/node.js:455
+#: htdocs/luci-static/resources/fchomo/listeners.js:424
+#: htdocs/luci-static/resources/view/fchomo/node.js:466
msgid "Enable obfuscate for downlink"
msgstr "啟用下行鏈路混淆"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1424
+#: htdocs/luci-static/resources/view/fchomo/node.js:1435
msgid "Enable padding"
msgstr "啟用填充"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1435
+#: htdocs/luci-static/resources/view/fchomo/node.js:1446
msgid "Enable statistic"
msgstr "啟用統計"
-#: htdocs/luci-static/resources/view/fchomo/node.js:900
-#: htdocs/luci-static/resources/view/fchomo/node.js:1756
+#: htdocs/luci-static/resources/view/fchomo/node.js:911
+#: htdocs/luci-static/resources/view/fchomo/node.js:1833
msgid ""
"Enable the SUoT protocol, requires server support. Conflict with Multiplex."
msgstr "啟用 SUoT 協議,需要服務端支援。與多路復用衝突。"
#: htdocs/luci-static/resources/fchomo/listeners.js:201
-#: htdocs/luci-static/resources/view/fchomo/node.js:306
+#: htdocs/luci-static/resources/view/fchomo/node.js:317
msgid ""
"Enabling obfuscation will make the server incompatible with standard QUIC "
"connections, losing the ability to masquerade with HTTP/3."
msgstr "啟用混淆將使伺服器與標準的 QUIC 連線不相容,失去 HTTP/3 偽裝的能力。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:689
+#: htdocs/luci-static/resources/fchomo/listeners.js:690
msgid "Encryption method"
msgstr "加密方法"
-#: htdocs/luci-static/resources/view/fchomo/node.js:701
+#: htdocs/luci-static/resources/view/fchomo/node.js:712
msgid "Endpoint pubkic key"
msgstr "端點公鑰"
-#: htdocs/luci-static/resources/view/fchomo/global.js:522
+#: htdocs/luci-static/resources/view/fchomo/global.js:540
msgid "Endpoint-Independent NAT"
msgstr "端點獨立 NAT"
@@ -942,7 +946,7 @@ msgid ""
"if empty."
msgstr "超過此限制將會觸發強制健康檢查。留空則使用 5。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1871
+#: htdocs/luci-static/resources/view/fchomo/node.js:1948
msgid "Exclude matched node types."
msgstr "排除匹配的節點類型。"
@@ -955,7 +959,7 @@ msgstr ""
"rel=\"noreferrer noopener\">此處。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1171
-#: htdocs/luci-static/resources/view/fchomo/node.js:1864
+#: htdocs/luci-static/resources/view/fchomo/node.js:1941
msgid "Exclude nodes that meet keywords or regexps."
msgstr "排除匹配關鍵字或表達式的節點。"
@@ -964,70 +968,70 @@ msgid "Expand/Collapse result"
msgstr "展開/收起 結果"
#: htdocs/luci-static/resources/view/fchomo/client.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:1849
+#: htdocs/luci-static/resources/view/fchomo/node.js:1926
msgid "Expected HTTP code. 204 will be used if empty."
msgstr "預期的 HTTP code。留空則使用 204。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1133
-#: htdocs/luci-static/resources/view/fchomo/node.js:1851
+#: htdocs/luci-static/resources/view/fchomo/node.js:1928
msgid "Expected status"
msgstr "預期狀態"
-#: htdocs/luci-static/resources/fchomo.js:442
-#: htdocs/luci-static/resources/fchomo.js:445
-#: htdocs/luci-static/resources/fchomo.js:448
-#: htdocs/luci-static/resources/fchomo.js:1387
+#: htdocs/luci-static/resources/fchomo.js:450
+#: htdocs/luci-static/resources/fchomo.js:453
+#: htdocs/luci-static/resources/fchomo.js:456
#: htdocs/luci-static/resources/fchomo.js:1395
#: htdocs/luci-static/resources/fchomo.js:1403
-#: htdocs/luci-static/resources/fchomo.js:1426
-#: htdocs/luci-static/resources/fchomo.js:1429
-#: htdocs/luci-static/resources/fchomo.js:1436
-#: htdocs/luci-static/resources/fchomo.js:1452
-#: htdocs/luci-static/resources/fchomo.js:1461
-#: htdocs/luci-static/resources/fchomo.js:1473
-#: htdocs/luci-static/resources/fchomo.js:1476
-#: htdocs/luci-static/resources/fchomo.js:1486
-#: htdocs/luci-static/resources/fchomo.js:1498
-#: htdocs/luci-static/resources/fchomo.js:1501
-#: htdocs/luci-static/resources/fchomo.js:1511
-#: htdocs/luci-static/resources/fchomo.js:1521
-#: htdocs/luci-static/resources/fchomo.js:1556
-#: htdocs/luci-static/resources/fchomo.js:1558
-#: htdocs/luci-static/resources/fchomo.js:1571
-#: htdocs/luci-static/resources/fchomo.js:1577
-#: htdocs/luci-static/resources/fchomo.js:1584
-#: htdocs/luci-static/resources/fchomo.js:1593
-#: htdocs/luci-static/resources/fchomo/listeners.js:362
-#: htdocs/luci-static/resources/fchomo/listeners.js:409
-#: htdocs/luci-static/resources/fchomo/listeners.js:718
-#: htdocs/luci-static/resources/fchomo/listeners.js:749
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo.js:1411
+#: htdocs/luci-static/resources/fchomo.js:1434
+#: htdocs/luci-static/resources/fchomo.js:1437
+#: htdocs/luci-static/resources/fchomo.js:1444
+#: htdocs/luci-static/resources/fchomo.js:1460
+#: htdocs/luci-static/resources/fchomo.js:1469
+#: htdocs/luci-static/resources/fchomo.js:1481
+#: htdocs/luci-static/resources/fchomo.js:1484
+#: htdocs/luci-static/resources/fchomo.js:1494
+#: htdocs/luci-static/resources/fchomo.js:1506
+#: htdocs/luci-static/resources/fchomo.js:1509
+#: htdocs/luci-static/resources/fchomo.js:1519
+#: htdocs/luci-static/resources/fchomo.js:1529
+#: htdocs/luci-static/resources/fchomo.js:1564
+#: htdocs/luci-static/resources/fchomo.js:1566
+#: htdocs/luci-static/resources/fchomo.js:1579
+#: htdocs/luci-static/resources/fchomo.js:1585
+#: htdocs/luci-static/resources/fchomo.js:1592
+#: htdocs/luci-static/resources/fchomo.js:1601
+#: htdocs/luci-static/resources/fchomo/listeners.js:363
+#: htdocs/luci-static/resources/fchomo/listeners.js:410
+#: htdocs/luci-static/resources/fchomo/listeners.js:719
+#: htdocs/luci-static/resources/fchomo/listeners.js:750
+#: htdocs/luci-static/resources/fchomo/listeners.js:851
#: htdocs/luci-static/resources/view/fchomo/client.js:69
#: htdocs/luci-static/resources/view/fchomo/client.js:1020
#: htdocs/luci-static/resources/view/fchomo/client.js:1518
-#: htdocs/luci-static/resources/view/fchomo/global.js:883
-#: htdocs/luci-static/resources/view/fchomo/node.js:412
-#: htdocs/luci-static/resources/view/fchomo/node.js:448
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
-#: htdocs/luci-static/resources/view/fchomo/node.js:971
-#: htdocs/luci-static/resources/view/fchomo/node.js:1098
-#: htdocs/luci-static/resources/view/fchomo/node.js:1928
-#: htdocs/luci-static/resources/view/fchomo/node.js:1948
+#: htdocs/luci-static/resources/view/fchomo/global.js:901
+#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/view/fchomo/node.js:459
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
+#: htdocs/luci-static/resources/view/fchomo/node.js:982
+#: htdocs/luci-static/resources/view/fchomo/node.js:1109
+#: htdocs/luci-static/resources/view/fchomo/node.js:2005
+#: htdocs/luci-static/resources/view/fchomo/node.js:2025
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:300
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:314
msgid "Expecting: %s"
msgstr "請輸入:%s"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1123
-#: htdocs/luci-static/resources/fchomo/listeners.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1215
-#: htdocs/luci-static/resources/view/fchomo/node.js:1223
+#: htdocs/luci-static/resources/fchomo/listeners.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:1131
+#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1226
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "Expecting: only support %s."
msgstr "請輸入:僅支援 %s."
-#: htdocs/luci-static/resources/view/fchomo/global.js:702
+#: htdocs/luci-static/resources/view/fchomo/global.js:720
msgid "Experimental"
msgstr "實驗性"
@@ -1042,24 +1046,24 @@ msgstr "實驗性"
msgid "Factor"
msgstr "條件"
-#: htdocs/luci-static/resources/fchomo.js:1328
+#: htdocs/luci-static/resources/fchomo.js:1336
msgid "Failed to execute \"/etc/init.d/fchomo %s %s\" reason: %s"
msgstr "無法執行 \"/etc/init.d/fchomo %s %s\" 原因: %s"
-#: htdocs/luci-static/resources/fchomo.js:1281
+#: htdocs/luci-static/resources/fchomo.js:1289
msgid "Failed to generate %s, error: %s."
msgstr "生成 %s 失敗,錯誤:%s。"
-#: htdocs/luci-static/resources/fchomo.js:1693
+#: htdocs/luci-static/resources/fchomo.js:1701
msgid "Failed to upload %s, error: %s."
msgstr "上傳 %s 失敗,錯誤:%s。"
-#: htdocs/luci-static/resources/fchomo.js:1712
+#: htdocs/luci-static/resources/fchomo.js:1720
msgid "Failed to upload, error: %s."
msgstr "上傳失敗,錯誤:%s。"
-#: htdocs/luci-static/resources/fchomo.js:232
-#: htdocs/luci-static/resources/fchomo/listeners.js:448
+#: htdocs/luci-static/resources/fchomo.js:240
+#: htdocs/luci-static/resources/fchomo/listeners.js:449
msgid "Fallback"
msgstr "自動回退"
@@ -1073,7 +1077,7 @@ msgid "Fallback filter"
msgstr "後備過濾器"
#: htdocs/luci-static/resources/view/fchomo/client.js:1166
-#: htdocs/luci-static/resources/view/fchomo/node.js:1858
+#: htdocs/luci-static/resources/view/fchomo/node.js:1935
msgid "Filter nodes that meet keywords or regexps."
msgstr "過濾匹配關鍵字或表達式的節點。"
@@ -1102,8 +1106,8 @@ msgstr "兜底 DNS 伺服器 (用於已被投毒汙染的網域)"
msgid "Firewall"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:534
-#: htdocs/luci-static/resources/view/fchomo/node.js:649
+#: htdocs/luci-static/resources/fchomo/listeners.js:535
+#: htdocs/luci-static/resources/view/fchomo/node.js:660
msgid "Flow"
msgstr "流控"
@@ -1116,8 +1120,8 @@ msgstr ""
"noopener\">%s."
#: htdocs/luci-static/resources/view/fchomo/client.js:1132
-#: htdocs/luci-static/resources/view/fchomo/node.js:1724
-#: htdocs/luci-static/resources/view/fchomo/node.js:1850
+#: htdocs/luci-static/resources/view/fchomo/node.js:1801
+#: htdocs/luci-static/resources/view/fchomo/node.js:1927
msgid ""
"For format see %s."
@@ -1125,12 +1129,12 @@ msgstr ""
"格式請參閱 %s"
"a>."
-#: htdocs/luci-static/resources/view/fchomo/node.js:729
-#: htdocs/luci-static/resources/view/fchomo/node.js:812
+#: htdocs/luci-static/resources/view/fchomo/node.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:823
msgid "Force DNS remote resolution."
msgstr "強制 DNS 遠端解析。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:662
+#: htdocs/luci-static/resources/view/fchomo/global.js:680
msgid "Forced sniffing domain"
msgstr "強制嗅探網域"
@@ -1145,7 +1149,7 @@ msgstr "格式"
msgid "FullCombo Shark!"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1248
+#: htdocs/luci-static/resources/view/fchomo/node.js:1259
msgid "GET"
msgstr ""
@@ -1154,39 +1158,40 @@ msgid "GFW list version"
msgstr "GFW 網域清單版本"
#: htdocs/luci-static/resources/fchomo/listeners.js:196
-#: htdocs/luci-static/resources/view/fchomo/node.js:301
+#: htdocs/luci-static/resources/view/fchomo/node.js:312
msgid "Gecko"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:391
+#: htdocs/luci-static/resources/view/fchomo/global.js:409
msgid "General"
msgstr "常規"
#: htdocs/luci-static/resources/fchomo/listeners.js:119
#: htdocs/luci-static/resources/view/fchomo/client.js:1011
-#: htdocs/luci-static/resources/view/fchomo/node.js:222
-#: htdocs/luci-static/resources/view/fchomo/node.js:1604
+#: htdocs/luci-static/resources/view/fchomo/node.js:233
+#: htdocs/luci-static/resources/view/fchomo/node.js:1618
msgid "General fields"
msgstr "常規欄位"
-#: htdocs/luci-static/resources/view/fchomo/global.js:394
+#: htdocs/luci-static/resources/view/fchomo/global.js:412
msgid "General settings"
msgstr "常規設定"
-#: htdocs/luci-static/resources/fchomo.js:543
-#: htdocs/luci-static/resources/fchomo.js:545
-#: htdocs/luci-static/resources/fchomo.js:559
-#: htdocs/luci-static/resources/fchomo.js:561
-#: htdocs/luci-static/resources/fchomo/listeners.js:340
-#: htdocs/luci-static/resources/fchomo/listeners.js:384
-#: htdocs/luci-static/resources/fchomo/listeners.js:386
-#: htdocs/luci-static/resources/fchomo/listeners.js:822
-#: htdocs/luci-static/resources/fchomo/listeners.js:1048
-#: htdocs/luci-static/resources/view/fchomo/global.js:590
+#: htdocs/luci-static/resources/fchomo.js:551
+#: htdocs/luci-static/resources/fchomo.js:553
+#: htdocs/luci-static/resources/fchomo.js:567
+#: htdocs/luci-static/resources/fchomo.js:569
+#: htdocs/luci-static/resources/fchomo/listeners.js:341
+#: htdocs/luci-static/resources/fchomo/listeners.js:385
+#: htdocs/luci-static/resources/fchomo/listeners.js:387
+#: htdocs/luci-static/resources/fchomo/listeners.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:1049
+#: htdocs/luci-static/resources/view/fchomo/global.js:608
+#: htdocs/luci-static/resources/view/fchomo/node.js:1769
msgid "Generate"
msgstr "生成"
-#: htdocs/luci-static/resources/view/fchomo/global.js:509
+#: htdocs/luci-static/resources/view/fchomo/global.js:527
msgid "Generic segmentation offload"
msgstr "通用分段卸載(GSO)"
@@ -1216,16 +1221,20 @@ msgstr ""
msgid "GitHub"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:400
+#: htdocs/luci-static/resources/view/fchomo/global.js:389
+msgid "GitHub token"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:418
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:14
msgid "Global"
msgstr "全域"
-#: htdocs/luci-static/resources/view/fchomo/global.js:438
+#: htdocs/luci-static/resources/view/fchomo/global.js:456
msgid "Global Authentication"
msgstr "全域認證"
-#: htdocs/luci-static/resources/view/fchomo/node.js:673
+#: htdocs/luci-static/resources/view/fchomo/node.js:684
msgid "Global padding"
msgstr "全域填充"
@@ -1233,7 +1242,7 @@ msgstr "全域填充"
msgid "Google"
msgstr "Google"
-#: htdocs/luci-static/resources/fchomo.js:245
+#: htdocs/luci-static/resources/fchomo.js:253
msgid "Google FCM"
msgstr ""
@@ -1247,48 +1256,48 @@ msgstr "組"
#: htdocs/luci-static/resources/fchomo.js:153
#: htdocs/luci-static/resources/fchomo.js:188
-#: htdocs/luci-static/resources/fchomo/listeners.js:568
-#: htdocs/luci-static/resources/view/fchomo/node.js:835
-#: htdocs/luci-static/resources/view/fchomo/node.js:1197
+#: htdocs/luci-static/resources/fchomo/listeners.js:569
+#: htdocs/luci-static/resources/view/fchomo/node.js:846
#: htdocs/luci-static/resources/view/fchomo/node.js:1208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1215
+#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1226
msgid "HTTP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:268
-#: htdocs/luci-static/resources/view/fchomo/node.js:1270
-#: htdocs/luci-static/resources/view/fchomo/node.js:1704
+#: htdocs/luci-static/resources/view/fchomo/node.js:279
+#: htdocs/luci-static/resources/view/fchomo/node.js:1281
+#: htdocs/luci-static/resources/view/fchomo/node.js:1781
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:414
msgid "HTTP header"
msgstr "HTTP header"
-#: htdocs/luci-static/resources/fchomo/listeners.js:429
-#: htdocs/luci-static/resources/view/fchomo/node.js:461
+#: htdocs/luci-static/resources/fchomo/listeners.js:430
+#: htdocs/luci-static/resources/view/fchomo/node.js:472
msgid "HTTP mask"
msgstr "HTTP 偽裝"
-#: htdocs/luci-static/resources/fchomo/listeners.js:434
-#: htdocs/luci-static/resources/view/fchomo/node.js:466
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/fchomo/listeners.js:435
+#: htdocs/luci-static/resources/view/fchomo/node.js:477
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "HTTP mask mode"
msgstr "HTTP 偽裝模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:491
+#: htdocs/luci-static/resources/view/fchomo/node.js:502
msgid "HTTP mask multiplex"
msgstr "HTTP 偽裝多路復用"
-#: htdocs/luci-static/resources/view/fchomo/node.js:476
-#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/view/fchomo/node.js:492
msgid "HTTP mask: %s"
msgstr "HTTP 偽裝: %s"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1247
+#: htdocs/luci-static/resources/view/fchomo/node.js:1258
msgid "HTTP request method"
msgstr "HTTP 請求方法"
-#: htdocs/luci-static/resources/fchomo/listeners.js:444
-#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/fchomo/listeners.js:445
+#: htdocs/luci-static/resources/view/fchomo/node.js:498
msgid "HTTP root path"
msgstr "HTTP 根路徑"
@@ -1302,25 +1311,25 @@ msgid ""
"returned if empty."
msgstr "身份驗證失敗時的 HTTP3 伺服器回應。預設回傳 404 頁面。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1198
#: htdocs/luci-static/resources/view/fchomo/node.js:1209
-#: htdocs/luci-static/resources/view/fchomo/node.js:1216
+#: htdocs/luci-static/resources/view/fchomo/node.js:1220
+#: htdocs/luci-static/resources/view/fchomo/node.js:1227
msgid "HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:858
+#: htdocs/luci-static/resources/view/fchomo/global.js:876
msgid "Handle domain"
msgstr "處理網域"
-#: htdocs/luci-static/resources/view/fchomo/node.js:383
+#: htdocs/luci-static/resources/view/fchomo/node.js:394
msgid "Handshake mode"
msgstr "握手模式"
-#: htdocs/luci-static/resources/fchomo/listeners.js:581
+#: htdocs/luci-static/resources/fchomo/listeners.js:582
msgid "Handshake target that supports TLS 1.3"
msgstr "握手目標 (支援 TLS 1.3)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:416
+#: htdocs/luci-static/resources/fchomo/listeners.js:417
msgid "Handshake timeout"
msgstr "握手超時"
@@ -1328,36 +1337,36 @@ msgstr "握手超時"
msgid "Header to read real client IP from (e.g. X-Forwarded-For)"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:751
msgid "Health check"
msgstr "健康檢查"
#: htdocs/luci-static/resources/view/fchomo/client.js:1101
-#: htdocs/luci-static/resources/view/fchomo/node.js:1818
+#: htdocs/luci-static/resources/view/fchomo/node.js:1895
msgid "Health check URL"
msgstr "健康檢查 URL"
#: htdocs/luci-static/resources/view/fchomo/client.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1848
+#: htdocs/luci-static/resources/view/fchomo/node.js:1925
msgid "Health check expected status"
msgstr "健康檢查预期状态"
#: htdocs/luci-static/resources/view/fchomo/client.js:1110
-#: htdocs/luci-static/resources/view/fchomo/node.js:1828
+#: htdocs/luci-static/resources/view/fchomo/node.js:1905
msgid "Health check interval"
msgstr "健康檢查間隔"
#: htdocs/luci-static/resources/view/fchomo/client.js:1117
-#: htdocs/luci-static/resources/view/fchomo/node.js:1835
+#: htdocs/luci-static/resources/view/fchomo/node.js:1912
msgid "Health check timeout"
msgstr "健康檢查超时"
#: htdocs/luci-static/resources/view/fchomo/client.js:1013
-#: htdocs/luci-static/resources/view/fchomo/node.js:1606
+#: htdocs/luci-static/resources/view/fchomo/node.js:1620
msgid "Health fields"
msgstr "健康欄位"
-#: htdocs/luci-static/resources/view/fchomo/node.js:578
+#: htdocs/luci-static/resources/view/fchomo/node.js:589
msgid "Heartbeat interval"
msgstr "心跳間隔"
@@ -1365,20 +1374,20 @@ msgstr "心跳間隔"
msgid "Hidden"
msgstr "隱藏"
-#: htdocs/luci-static/resources/fchomo/listeners.js:574
-#: htdocs/luci-static/resources/view/fchomo/node.js:841
+#: htdocs/luci-static/resources/fchomo/listeners.js:575
+#: htdocs/luci-static/resources/view/fchomo/node.js:852
msgid "Host that supports TLS 1.3"
msgstr "主機名稱 (支援 TLS 1.3)"
-#: htdocs/luci-static/resources/view/fchomo/node.js:338
+#: htdocs/luci-static/resources/view/fchomo/node.js:349
msgid "Host-key"
msgstr "主機金鑰"
-#: htdocs/luci-static/resources/view/fchomo/node.js:333
+#: htdocs/luci-static/resources/view/fchomo/node.js:344
msgid "Host-key algorithms"
msgstr "主機金鑰演算法"
-#: htdocs/luci-static/resources/view/fchomo/node.js:481
+#: htdocs/luci-static/resources/view/fchomo/node.js:492
msgid "Host/SNI override"
msgstr "主機/SNI 覆蓋"
@@ -1397,7 +1406,7 @@ msgid "Hysteria2 Realm"
msgstr "Hysteria2 Realm"
#: htdocs/luci-static/resources/fchomo/listeners.js:121
-#: htdocs/luci-static/resources/view/fchomo/node.js:224
+#: htdocs/luci-static/resources/view/fchomo/node.js:235
msgid "Hysteria2 Realm fields"
msgstr "Hysteria2 Realm 欄位"
@@ -1410,12 +1419,12 @@ msgstr ""
msgid "IP CIDR"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:540
+#: htdocs/luci-static/resources/view/fchomo/node.js:551
msgid "IP override"
msgstr "IP 覆寫"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1486
-#: htdocs/luci-static/resources/view/fchomo/node.js:1804
+#: htdocs/luci-static/resources/view/fchomo/node.js:1497
+#: htdocs/luci-static/resources/view/fchomo/node.js:1881
msgid "IP version"
msgstr "IP 版本"
@@ -1428,7 +1437,7 @@ msgid "IPv6 only"
msgstr "僅 IPv6"
#: htdocs/luci-static/resources/view/fchomo/client.js:1389
-#: htdocs/luci-static/resources/view/fchomo/global.js:418
+#: htdocs/luci-static/resources/view/fchomo/global.js:436
msgid "IPv6 support"
msgstr "IPv6 支援"
@@ -1436,19 +1445,19 @@ msgstr "IPv6 支援"
msgid "Icon"
msgstr "圖標"
-#: htdocs/luci-static/resources/view/fchomo/node.js:622
+#: htdocs/luci-static/resources/view/fchomo/node.js:633
msgid "Idle session check interval"
msgstr "閒置會話檢查間隔"
-#: htdocs/luci-static/resources/view/fchomo/node.js:629
+#: htdocs/luci-static/resources/view/fchomo/node.js:640
msgid "Idle session timeout"
msgstr "閒置會話逾時"
-#: htdocs/luci-static/resources/fchomo/listeners.js:485
+#: htdocs/luci-static/resources/fchomo/listeners.js:486
msgid "Idle timeout"
msgstr "閒置逾時"
-#: htdocs/luci-static/resources/fchomo.js:1429
+#: htdocs/luci-static/resources/fchomo.js:1437
msgid "If All ports is selected, uncheck others"
msgstr "如果選擇了“所有連接埠”,則取消選取“其他”"
@@ -1460,7 +1469,7 @@ msgstr "如果選擇了“封鎖”,則取消選取“其他”"
msgid "Ignore client bandwidth"
msgstr "忽略客戶端頻寬"
-#: htdocs/luci-static/resources/fchomo.js:728
+#: htdocs/luci-static/resources/fchomo.js:736
msgid "Import"
msgstr "導入"
@@ -1476,8 +1485,8 @@ msgstr "導入"
#: htdocs/luci-static/resources/view/fchomo/client.js:1723
#: htdocs/luci-static/resources/view/fchomo/client.js:1758
#: htdocs/luci-static/resources/view/fchomo/client.js:1779
-#: htdocs/luci-static/resources/view/fchomo/node.js:1511
-#: htdocs/luci-static/resources/view/fchomo/node.js:1592
+#: htdocs/luci-static/resources/view/fchomo/node.js:1522
+#: htdocs/luci-static/resources/view/fchomo/node.js:1606
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:154
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:249
msgid "Import mihomo config"
@@ -1491,55 +1500,55 @@ msgstr "導入規則集連結"
#: htdocs/luci-static/resources/fchomo/listeners.js:176
#: htdocs/luci-static/resources/fchomo/listeners.js:182
-#: htdocs/luci-static/resources/view/fchomo/node.js:287
-#: htdocs/luci-static/resources/view/fchomo/node.js:293
-#: htdocs/luci-static/resources/view/fchomo/node.js:1762
-#: htdocs/luci-static/resources/view/fchomo/node.js:1768
+#: htdocs/luci-static/resources/view/fchomo/node.js:298
+#: htdocs/luci-static/resources/view/fchomo/node.js:304
+#: htdocs/luci-static/resources/view/fchomo/node.js:1839
+#: htdocs/luci-static/resources/view/fchomo/node.js:1845
msgid "In Mbps."
msgstr "單位為 Mbps。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1682
+#: htdocs/luci-static/resources/view/fchomo/node.js:1696
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:392
msgid "In bytes. %s will be used if empty."
msgstr "單位為位元組。留空則使用 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:579
-#: htdocs/luci-static/resources/view/fchomo/node.js:586
+#: htdocs/luci-static/resources/view/fchomo/node.js:590
+#: htdocs/luci-static/resources/view/fchomo/node.js:597
msgid "In millisecond."
msgstr "單位為毫秒。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1118
#: htdocs/luci-static/resources/view/fchomo/client.js:1147
-#: htdocs/luci-static/resources/view/fchomo/node.js:1836
+#: htdocs/luci-static/resources/view/fchomo/node.js:1913
msgid "In millisecond. %s will be used if empty."
msgstr "單位為毫秒。留空則使用 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1339
+#: htdocs/luci-static/resources/view/fchomo/node.js:1350
msgid "In milliseconds."
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:417
-#: htdocs/luci-static/resources/fchomo/listeners.js:486
-#: htdocs/luci-static/resources/fchomo/listeners.js:493
-#: htdocs/luci-static/resources/view/fchomo/node.js:623
-#: htdocs/luci-static/resources/view/fchomo/node.js:630
-#: htdocs/luci-static/resources/view/fchomo/node.js:1286
+#: htdocs/luci-static/resources/fchomo/listeners.js:418
+#: htdocs/luci-static/resources/fchomo/listeners.js:487
+#: htdocs/luci-static/resources/fchomo/listeners.js:494
+#: htdocs/luci-static/resources/view/fchomo/node.js:634
+#: htdocs/luci-static/resources/view/fchomo/node.js:641
+#: htdocs/luci-static/resources/view/fchomo/node.js:1297
msgid "In seconds."
msgstr "單位為秒。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1111
-#: htdocs/luci-static/resources/view/fchomo/global.js:428
-#: htdocs/luci-static/resources/view/fchomo/global.js:433
-#: htdocs/luci-static/resources/view/fchomo/global.js:518
-#: htdocs/luci-static/resources/view/fchomo/node.js:281
-#: htdocs/luci-static/resources/view/fchomo/node.js:1688
-#: htdocs/luci-static/resources/view/fchomo/node.js:1829
+#: htdocs/luci-static/resources/view/fchomo/global.js:446
+#: htdocs/luci-static/resources/view/fchomo/global.js:451
+#: htdocs/luci-static/resources/view/fchomo/global.js:536
+#: htdocs/luci-static/resources/view/fchomo/node.js:292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1702
+#: htdocs/luci-static/resources/view/fchomo/node.js:1906
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:398
msgid "In seconds. %s will be used if empty."
msgstr "單位為秒。留空則使用 %s。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:738
-#: htdocs/luci-static/resources/view/fchomo/node.js:960
+#: htdocs/luci-static/resources/fchomo/listeners.js:739
+#: htdocs/luci-static/resources/view/fchomo/node.js:971
msgid ""
"In the order of one Padding-Length and one Padding-"
"Interval, infinite concatenation."
@@ -1547,7 +1556,7 @@ msgstr ""
"依照一個 Padding-Length 一個 Padding-Interval 的順"
"序,無限連接。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:452
+#: htdocs/luci-static/resources/view/fchomo/global.js:470
#: htdocs/luci-static/resources/view/fchomo/inbound.js:28
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:38
msgid "Inbound"
@@ -1581,38 +1590,38 @@ msgstr "引入所有代理節點。"
msgid "Info"
msgstr "訊息"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1621
+#: htdocs/luci-static/resources/view/fchomo/node.js:1635
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:288
msgid "Inline"
msgstr "內嵌"
-#: htdocs/luci-static/resources/view/fchomo/global.js:730
+#: htdocs/luci-static/resources/view/fchomo/global.js:748
msgid "Interface Control"
msgstr "介面控制"
#: htdocs/luci-static/resources/fchomo.js:52
#: htdocs/luci-static/resources/fchomo.js:59
#: htdocs/luci-static/resources/fchomo.js:172
-#: htdocs/luci-static/resources/fchomo.js:367
-#: htdocs/luci-static/resources/view/fchomo/node.js:1778
+#: htdocs/luci-static/resources/fchomo.js:375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1855
msgid "Keep default"
msgstr "保持預設"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "Keep-alive period"
msgstr "Keep-alive 週期"
#: htdocs/luci-static/resources/fchomo/listeners.js:296
-#: htdocs/luci-static/resources/view/fchomo/node.js:397
+#: htdocs/luci-static/resources/view/fchomo/node.js:408
msgid "Key"
msgstr "密鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:975
-#: htdocs/luci-static/resources/view/fchomo/node.js:1127
+#: htdocs/luci-static/resources/fchomo/listeners.js:976
+#: htdocs/luci-static/resources/view/fchomo/node.js:1138
msgid "Key path"
msgstr "憑證路徑"
-#: htdocs/luci-static/resources/fchomo/listeners.js:757
+#: htdocs/luci-static/resources/fchomo/listeners.js:758
msgid "Keypairs"
msgstr "密鑰對"
@@ -1623,24 +1632,24 @@ msgstr "密鑰對"
#: htdocs/luci-static/resources/view/fchomo/client.js:1498
#: htdocs/luci-static/resources/view/fchomo/client.js:1729
#: htdocs/luci-static/resources/view/fchomo/client.js:1785
-#: htdocs/luci-static/resources/view/fchomo/node.js:230
-#: htdocs/luci-static/resources/view/fchomo/node.js:1609
-#: htdocs/luci-static/resources/view/fchomo/node.js:1897
+#: htdocs/luci-static/resources/view/fchomo/node.js:241
+#: htdocs/luci-static/resources/view/fchomo/node.js:1623
+#: htdocs/luci-static/resources/view/fchomo/node.js:1974
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:267
msgid "Label"
msgstr "標籤"
#: htdocs/luci-static/resources/view/fchomo/client.js:1124
-#: htdocs/luci-static/resources/view/fchomo/node.js:1842
+#: htdocs/luci-static/resources/view/fchomo/node.js:1919
msgid "Lazy"
msgstr "懶惰狀態"
-#: htdocs/luci-static/resources/fchomo/listeners.js:436
-#: htdocs/luci-static/resources/view/fchomo/node.js:468
+#: htdocs/luci-static/resources/fchomo/listeners.js:437
+#: htdocs/luci-static/resources/view/fchomo/node.js:479
msgid "Legacy"
msgstr "傳統"
-#: htdocs/luci-static/resources/fchomo/listeners.js:543
+#: htdocs/luci-static/resources/fchomo/listeners.js:544
msgid ""
"Legacy protocol support (VMess MD5 Authentication) is provided for "
"compatibility purposes only, use of alterId > 1 is not recommended."
@@ -1648,12 +1657,12 @@ msgstr ""
"提供舊協議支援(VMess MD5 身份認證)僅出於相容性目的,不建議使用 alterId > "
"1。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:497
+#: htdocs/luci-static/resources/view/fchomo/global.js:515
msgid "Less compatibility and sometimes better performance."
msgstr "有時效能較好。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:956
-#: htdocs/luci-static/resources/view/fchomo/node.js:1046
+#: htdocs/luci-static/resources/fchomo/listeners.js:957
+#: htdocs/luci-static/resources/view/fchomo/node.js:1057
msgid "List of supported application level protocols, in order of preference."
msgstr "支援的應用層協議協商清單,依序排列。"
@@ -1665,7 +1674,7 @@ msgstr "監聽位址"
msgid "Listen fields"
msgstr "監聽欄位"
-#: htdocs/luci-static/resources/view/fchomo/global.js:732
+#: htdocs/luci-static/resources/view/fchomo/global.js:750
msgid "Listen interfaces"
msgstr "監聽介面"
@@ -1674,26 +1683,26 @@ msgstr "監聽介面"
msgid "Listen port"
msgstr "監聽埠"
-#: htdocs/luci-static/resources/view/fchomo/global.js:455
+#: htdocs/luci-static/resources/view/fchomo/global.js:473
msgid "Listen ports"
msgstr "監聽埠"
-#: htdocs/luci-static/resources/fchomo.js:234
+#: htdocs/luci-static/resources/fchomo.js:242
msgid "Load balance"
msgstr "負載均衡"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1619
+#: htdocs/luci-static/resources/view/fchomo/node.js:1633
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:286
msgid "Local"
msgstr "本地"
-#: htdocs/luci-static/resources/view/fchomo/node.js:716
-#: htdocs/luci-static/resources/view/fchomo/node.js:759
+#: htdocs/luci-static/resources/view/fchomo/node.js:727
+#: htdocs/luci-static/resources/view/fchomo/node.js:770
msgid "Local IPv6 address"
msgstr "本地 IPv6 位址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:708
-#: htdocs/luci-static/resources/view/fchomo/node.js:751
+#: htdocs/luci-static/resources/view/fchomo/node.js:719
+#: htdocs/luci-static/resources/view/fchomo/node.js:762
msgid "Local address"
msgstr "本地位址"
@@ -1709,28 +1718,28 @@ msgstr "日誌檔不存在。"
msgid "Log is empty."
msgstr "日誌為空。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:409
+#: htdocs/luci-static/resources/view/fchomo/global.js:427
msgid "Log level"
msgstr "日誌等級"
-#: htdocs/luci-static/resources/fchomo/listeners.js:371
#: htdocs/luci-static/resources/fchomo/listeners.js:372
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/fchomo/listeners.js:378
-#: htdocs/luci-static/resources/view/fchomo/node.js:421
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
-#: htdocs/luci-static/resources/view/fchomo/node.js:428
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/fchomo/listeners.js:379
+#: htdocs/luci-static/resources/view/fchomo/node.js:432
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
+#: htdocs/luci-static/resources/view/fchomo/node.js:439
msgid "Low-entropy data stream"
msgstr "低熵資料流"
-#: htdocs/luci-static/resources/fchomo.js:442
+#: htdocs/luci-static/resources/fchomo.js:450
msgid "Lowercase only"
msgstr "僅限小寫"
-#: htdocs/luci-static/resources/view/fchomo/global.js:505
-#: htdocs/luci-static/resources/view/fchomo/node.js:722
-#: htdocs/luci-static/resources/view/fchomo/node.js:805
+#: htdocs/luci-static/resources/view/fchomo/global.js:523
+#: htdocs/luci-static/resources/view/fchomo/node.js:733
+#: htdocs/luci-static/resources/view/fchomo/node.js:816
msgid "MTU"
msgstr ""
@@ -1770,24 +1779,24 @@ msgstr "匹配回應通過 ipcidr"
msgid "Match rule set."
msgstr "匹配規則集。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1292
+#: htdocs/luci-static/resources/view/fchomo/node.js:1303
msgid "Max Early Data"
msgstr "前置數據最大值"
-#: htdocs/luci-static/resources/fchomo/listeners.js:479
-#: htdocs/luci-static/resources/view/fchomo/node.js:565
+#: htdocs/luci-static/resources/fchomo/listeners.js:480
+#: htdocs/luci-static/resources/view/fchomo/node.js:576
msgid "Max UDP relay packet size"
msgstr "UDP 中繼數據包最大尺寸"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1174
+#: htdocs/luci-static/resources/fchomo/listeners.js:1175
msgid "Max buffered posts"
msgstr "POST 最大緩衝"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1350
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
msgid "Max concurrency"
msgstr "最大並發"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
+#: htdocs/luci-static/resources/view/fchomo/node.js:1366
msgid "Max connections"
msgstr "最大連線數"
@@ -1796,16 +1805,16 @@ msgid "Max count of failures"
msgstr "最大失敗次數"
#: htdocs/luci-static/resources/fchomo/listeners.js:181
-#: htdocs/luci-static/resources/view/fchomo/node.js:292
+#: htdocs/luci-static/resources/view/fchomo/node.js:303
msgid "Max download speed"
msgstr "最大下載速度"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1185
-#: htdocs/luci-static/resources/view/fchomo/node.js:1332
+#: htdocs/luci-static/resources/fchomo/listeners.js:1186
+#: htdocs/luci-static/resources/view/fchomo/node.js:1343
msgid "Max each POST bytes"
msgstr "POST 最大位元組數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:592
+#: htdocs/luci-static/resources/view/fchomo/node.js:603
msgid "Max open streams"
msgstr "限制打開流的數量"
@@ -1817,29 +1826,29 @@ msgstr "最大 Realms 數量"
msgid "Max realms per client IP"
msgstr "每客戶端 IP 最大 Realms 數量"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1365
+#: htdocs/luci-static/resources/view/fchomo/node.js:1376
msgid "Max request times"
msgstr "最大請求次數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1370
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
msgid "Max reusable seconds"
msgstr "最大可重用秒數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1360
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
msgid "Max reuse times"
msgstr "最大重用次數"
#: htdocs/luci-static/resources/fchomo/listeners.js:175
-#: htdocs/luci-static/resources/view/fchomo/node.js:286
+#: htdocs/luci-static/resources/view/fchomo/node.js:297
msgid "Max upload speed"
msgstr "最大上傳速度"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1396
-#: htdocs/luci-static/resources/view/fchomo/node.js:1416
+#: htdocs/luci-static/resources/view/fchomo/node.js:1407
+#: htdocs/luci-static/resources/view/fchomo/node.js:1427
msgid "Maximum connections"
msgstr "最大連線數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1414
+#: htdocs/luci-static/resources/view/fchomo/node.js:1425
msgid ""
"Maximum multiplexed streams in a connection before opening a new connection."
"
Conflict with %s and %s."
@@ -1847,19 +1856,19 @@ msgstr ""
"在開啟新連線之前,連線中的最大多路復用流數量。
與 %s 和 "
"%s 衝突。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:401
-#: htdocs/luci-static/resources/view/fchomo/node.js:440
+#: htdocs/luci-static/resources/fchomo/listeners.js:402
+#: htdocs/luci-static/resources/view/fchomo/node.js:451
msgid "Maximum padding rate"
msgstr "最大填充率"
-#: htdocs/luci-static/resources/fchomo/listeners.js:409
-#: htdocs/luci-static/resources/view/fchomo/node.js:448
+#: htdocs/luci-static/resources/fchomo/listeners.js:410
+#: htdocs/luci-static/resources/view/fchomo/node.js:459
msgid ""
"Maximum padding rate must be greater than or equal to the minimum padding "
"rate."
msgstr "最大填充率必須大於等于最小填充率。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1413
+#: htdocs/luci-static/resources/view/fchomo/node.js:1424
msgid "Maximum streams"
msgstr "最大流數量"
@@ -1880,52 +1889,52 @@ msgstr "Mihomo 客戶端"
msgid "Mihomo server"
msgstr "Mihomo 服務端"
-#: htdocs/luci-static/resources/view/fchomo/node.js:636
+#: htdocs/luci-static/resources/view/fchomo/node.js:647
msgid "Min of idle sessions to keep"
msgstr "要保留的最少閒置會話數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1338
+#: htdocs/luci-static/resources/view/fchomo/node.js:1349
msgid "Min posts interval"
msgstr "POST 請求最小間隔時間"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1405
+#: htdocs/luci-static/resources/view/fchomo/node.js:1416
msgid ""
"Minimum multiplexed streams in a connection before opening a new connection."
msgstr "在開啟新連線之前,連線中的最小多路復用流數量。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:394
-#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/fchomo/listeners.js:395
+#: htdocs/luci-static/resources/view/fchomo/node.js:444
msgid "Minimum padding rate"
msgstr "最小填充率"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1404
-#: htdocs/luci-static/resources/view/fchomo/node.js:1416
+#: htdocs/luci-static/resources/view/fchomo/node.js:1415
+#: htdocs/luci-static/resources/view/fchomo/node.js:1427
msgid "Minimum streams"
msgstr "最小流數量"
#: htdocs/luci-static/resources/fchomo.js:155
-#: htdocs/luci-static/resources/view/fchomo/global.js:500
+#: htdocs/luci-static/resources/view/fchomo/global.js:518
msgid "Mixed"
msgstr "混合"
-#: htdocs/luci-static/resources/view/fchomo/global.js:500
+#: htdocs/luci-static/resources/view/fchomo/global.js:518
msgid "Mixed system TCP stack and gVisor UDP stack."
msgstr "混合 系統 TCP 堆栈和 gVisor UDP 堆栈。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:458
+#: htdocs/luci-static/resources/view/fchomo/global.js:476
msgid "Mixed port"
msgstr "混合連接埠"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1382
+#: htdocs/luci-static/resources/view/fchomo/node.js:1393
msgid "Multiplex"
msgstr "多路復用"
#: htdocs/luci-static/resources/fchomo/listeners.js:124
-#: htdocs/luci-static/resources/view/fchomo/node.js:227
+#: htdocs/luci-static/resources/view/fchomo/node.js:238
msgid "Multiplex fields"
msgstr "多路復用欄位"
-#: htdocs/luci-static/resources/view/fchomo/node.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:385
msgid "Multiplexing"
msgstr "多路復用"
@@ -1934,11 +1943,11 @@ msgstr "多路復用"
msgid "NOT"
msgstr "NOT"
-#: htdocs/luci-static/resources/fchomo/listeners.js:611
+#: htdocs/luci-static/resources/fchomo/listeners.js:612
msgid "Name of the Proxy group as outbound."
msgstr "出站代理組的名稱。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1694
+#: htdocs/luci-static/resources/view/fchomo/node.js:1708
msgid "Name of the Proxy group to download provider."
msgstr "用於下載供應商訂閱的代理組名稱。"
@@ -1946,31 +1955,31 @@ msgstr "用於下載供應商訂閱的代理組名稱。"
msgid "Name of the Proxy group to download rule set."
msgstr "用於下載規則集訂閱的代理組名稱。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:605
+#: htdocs/luci-static/resources/fchomo/listeners.js:606
msgid "Name of the Sub rule used for inbound matching."
msgstr "用於入站匹配的子規則名稱。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:549
+#: htdocs/luci-static/resources/view/fchomo/node.js:560
msgid "Native UDP"
msgstr "原生 UDP"
-#: htdocs/luci-static/resources/fchomo.js:384
+#: htdocs/luci-static/resources/fchomo.js:392
msgid "Native appearance"
msgstr "原生外觀"
-#: htdocs/luci-static/resources/fchomo/listeners.js:637
+#: htdocs/luci-static/resources/fchomo/listeners.js:638
msgid "Network type"
msgstr "網路類型"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1780
+#: htdocs/luci-static/resources/view/fchomo/node.js:1857
msgid "No"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:446
+#: htdocs/luci-static/resources/view/fchomo/global.js:464
msgid "No Authentication IP ranges"
msgstr "無需認證的 IP 範圍"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1169
+#: htdocs/luci-static/resources/fchomo/listeners.js:1170
msgid "No SSE header"
msgstr "無 SSE header"
@@ -1978,16 +1987,16 @@ msgstr "無 SSE header"
msgid "No add'l params"
msgstr "無附加參數"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1322
+#: htdocs/luci-static/resources/view/fchomo/node.js:1333
msgid "No gRPC header"
msgstr "無 gRPC header"
#: htdocs/luci-static/resources/view/fchomo/client.js:1125
-#: htdocs/luci-static/resources/view/fchomo/node.js:1843
+#: htdocs/luci-static/resources/view/fchomo/node.js:1920
msgid "No testing is performed when this provider node is not in use."
msgstr "當此供應商的節點未使用時,不執行任何測試。"
-#: htdocs/luci-static/resources/fchomo.js:689
+#: htdocs/luci-static/resources/fchomo.js:697
msgid "No valid %s found."
msgstr "未找到有效的%s。"
@@ -1996,23 +2005,22 @@ msgid "No valid rule-set link found."
msgstr "未找到有效的規則集連結。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1043
-#: htdocs/luci-static/resources/view/fchomo/node.js:217
-#: root/usr/share/luci/menu.d/luci-app-fchomo.json:46
+#: htdocs/luci-static/resources/view/fchomo/node.js:228
msgid "Node"
msgstr "節點"
#: htdocs/luci-static/resources/view/fchomo/client.js:1170
-#: htdocs/luci-static/resources/view/fchomo/node.js:1863
+#: htdocs/luci-static/resources/view/fchomo/node.js:1940
msgid "Node exclude filter"
msgstr "排除節點"
#: htdocs/luci-static/resources/view/fchomo/client.js:1175
-#: htdocs/luci-static/resources/view/fchomo/node.js:1870
+#: htdocs/luci-static/resources/view/fchomo/node.js:1947
msgid "Node exclude type"
msgstr "排除節點類型"
#: htdocs/luci-static/resources/view/fchomo/client.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1857
+#: htdocs/luci-static/resources/view/fchomo/node.js:1934
msgid "Node filter"
msgstr "過濾節點"
@@ -2020,96 +2028,100 @@ msgstr "過濾節點"
msgid "Node switch tolerance"
msgstr "節點切換容差"
-#: htdocs/luci-static/resources/fchomo.js:411
+#: htdocs/luci-static/resources/fchomo.js:419
msgid "None"
msgstr "無"
-#: htdocs/luci-static/resources/view/fchomo/global.js:616
+#: htdocs/luci-static/resources/view/fchomo/global.js:634
msgid "Not Installed"
msgstr "未安裝"
-#: htdocs/luci-static/resources/fchomo.js:1207
+#: htdocs/luci-static/resources/fchomo.js:1215
msgid "Not Running"
msgstr "未在運作"
-#: htdocs/luci-static/resources/view/fchomo/node.js:494
+#: htdocs/luci-static/resources/view/fchomo/node.js:505
msgid "OFF"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:496
+#: htdocs/luci-static/resources/view/fchomo/node.js:507
msgid "ON"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:567
-#: htdocs/luci-static/resources/view/fchomo/node.js:834
+#: htdocs/luci-static/resources/fchomo/listeners.js:568
+#: htdocs/luci-static/resources/view/fchomo/node.js:845
msgid "Obfs Mode"
msgstr "Obfs 模式"
#: htdocs/luci-static/resources/fchomo/listeners.js:213
-#: htdocs/luci-static/resources/view/fchomo/node.js:318
+#: htdocs/luci-static/resources/view/fchomo/node.js:329
msgid "Obfuscate maximum packet size"
msgstr "混淆最大資料包大小"
#: htdocs/luci-static/resources/fchomo/listeners.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:313
+#: htdocs/luci-static/resources/view/fchomo/node.js:324
msgid "Obfuscate minimum packet size"
msgstr "混淆最小資料包大小"
#: htdocs/luci-static/resources/fchomo/listeners.js:200
-#: htdocs/luci-static/resources/view/fchomo/node.js:305
+#: htdocs/luci-static/resources/view/fchomo/node.js:316
msgid "Obfuscate password"
msgstr "混淆密碼"
#: htdocs/luci-static/resources/fchomo/listeners.js:193
-#: htdocs/luci-static/resources/fchomo/listeners.js:369
-#: htdocs/luci-static/resources/view/fchomo/node.js:298
-#: htdocs/luci-static/resources/view/fchomo/node.js:419
+#: htdocs/luci-static/resources/fchomo/listeners.js:370
+#: htdocs/luci-static/resources/view/fchomo/node.js:309
+#: htdocs/luci-static/resources/view/fchomo/node.js:430
msgid "Obfuscate type"
msgstr "混淆類型"
-#: htdocs/luci-static/resources/fchomo/listeners.js:370
#: htdocs/luci-static/resources/fchomo/listeners.js:371
-#: htdocs/luci-static/resources/view/fchomo/node.js:420
-#: htdocs/luci-static/resources/view/fchomo/node.js:421
+#: htdocs/luci-static/resources/fchomo/listeners.js:372
+#: htdocs/luci-static/resources/view/fchomo/node.js:431
+#: htdocs/luci-static/resources/view/fchomo/node.js:432
msgid "Obfuscated as %s"
msgstr "混淆為%s"
-#: htdocs/luci-static/resources/view/fchomo/global.js:883
+#: htdocs/luci-static/resources/view/fchomo/global.js:901
msgid "One or more numbers in the range 0-63 separated by commas"
msgstr "0-63 範圍內的一個或多個數字,以逗號分隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:896
+#: htdocs/luci-static/resources/fchomo/listeners.js:897
msgid "Only applicable when %s are used as a frontend."
msgstr "僅當 %s 用作前端時適用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:378
-#: htdocs/luci-static/resources/view/fchomo/node.js:428
+#: htdocs/luci-static/resources/fchomo/listeners.js:379
+#: htdocs/luci-static/resources/view/fchomo/node.js:439
msgid "Only applies to the %s."
msgstr "只對%s生效。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:733
+#: htdocs/luci-static/resources/view/fchomo/global.js:751
msgid "Only process traffic from specific interfaces. Leave empty for all."
msgstr "只處理來自指定介面的流量。留空表示全部。"
-#: htdocs/luci-static/resources/fchomo.js:1201
+#: htdocs/luci-static/resources/fchomo.js:1209
msgid "Open Dashboard"
msgstr "打開面板"
-#: htdocs/luci-static/resources/view/fchomo/global.js:397
+#: htdocs/luci-static/resources/view/fchomo/global.js:415
msgid "Operation mode"
msgstr "運作模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:658
-#: htdocs/luci-static/resources/view/fchomo/global.js:696
+#: root/usr/share/luci/menu.d/luci-app-fchomo.json:46
+msgid "Outbound"
+msgstr "出站"
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:676
+#: htdocs/luci-static/resources/view/fchomo/global.js:714
msgid "Override destination"
msgstr "覆蓋目標位址"
#: htdocs/luci-static/resources/view/fchomo/client.js:1012
-#: htdocs/luci-static/resources/view/fchomo/node.js:1605
+#: htdocs/luci-static/resources/view/fchomo/node.js:1619
msgid "Override fields"
msgstr "覆蓋欄位"
-#: htdocs/luci-static/resources/view/fchomo/node.js:541
+#: htdocs/luci-static/resources/view/fchomo/node.js:552
msgid "Override the IP address of the server that DNS response."
msgstr "覆蓋 DNS 回應的伺服器的 IP 位址。"
@@ -2117,7 +2129,7 @@ msgstr "覆蓋 DNS 回應的伺服器的 IP 位址。"
msgid "Override the Proxy group of DNS server."
msgstr "覆蓋 DNS 伺服器所使用的代理組。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:659
+#: htdocs/luci-static/resources/view/fchomo/global.js:677
msgid "Override the connection destination address with the sniffed domain."
msgstr "使用嗅探到的網域覆寫連線目標。"
@@ -2125,7 +2137,7 @@ msgstr "使用嗅探到的網域覆寫連線目標。"
msgid "Override the existing ECS in original request."
msgstr "覆蓋原始請求中已有的 ECS。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1154
+#: htdocs/luci-static/resources/view/fchomo/node.js:1165
msgid "Overrides the domain name used for HTTPS record queries."
msgstr "覆蓋用於 HTTPS 記錄查詢的網域。"
@@ -2133,37 +2145,37 @@ msgstr "覆蓋用於 HTTPS 記錄查詢的網域。"
msgid "Overview"
msgstr "概覽"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1249
+#: htdocs/luci-static/resources/view/fchomo/node.js:1260
msgid "POST"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1250
+#: htdocs/luci-static/resources/view/fchomo/node.js:1261
msgid "PUT"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:685
+#: htdocs/luci-static/resources/view/fchomo/node.js:696
msgid "Packet encoding"
msgstr "數據包編碼"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1327
+#: htdocs/luci-static/resources/view/fchomo/node.js:1338
msgid "Padding bytes"
msgstr "填充位元組"
-#: htdocs/luci-static/resources/fchomo/listeners.js:523
+#: htdocs/luci-static/resources/fchomo/listeners.js:524
msgid "Padding scheme"
msgstr "填充方案"
-#: htdocs/luci-static/resources/fchomo/listeners.js:736
-#: htdocs/luci-static/resources/view/fchomo/node.js:958
+#: htdocs/luci-static/resources/fchomo/listeners.js:737
+#: htdocs/luci-static/resources/view/fchomo/node.js:969
msgid "Paddings"
msgstr "填充 (Paddings)"
#: htdocs/luci-static/resources/fchomo/listeners.js:166
#: htdocs/luci-static/resources/fchomo/listeners.js:263
-#: htdocs/luci-static/resources/fchomo/listeners.js:588
-#: htdocs/luci-static/resources/view/fchomo/node.js:262
-#: htdocs/luci-static/resources/view/fchomo/node.js:352
-#: htdocs/luci-static/resources/view/fchomo/node.js:849
+#: htdocs/luci-static/resources/fchomo/listeners.js:589
+#: htdocs/luci-static/resources/view/fchomo/node.js:273
+#: htdocs/luci-static/resources/view/fchomo/node.js:363
+#: htdocs/luci-static/resources/view/fchomo/node.js:860
msgid "Password"
msgstr "密碼"
@@ -2175,27 +2187,27 @@ msgstr "捆綁包路徑"
msgid "Path in bundle: %s"
msgstr "在捆綁包%s中的路徑"
-#: htdocs/luci-static/resources/fchomo/listeners.js:676
-#: htdocs/luci-static/resources/view/fchomo/node.js:1669
+#: htdocs/luci-static/resources/fchomo/listeners.js:677
+#: htdocs/luci-static/resources/view/fchomo/node.js:1683
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:373
msgid "Payload"
msgstr "Payload"
-#: htdocs/luci-static/resources/view/fchomo/node.js:773
+#: htdocs/luci-static/resources/view/fchomo/node.js:784
msgid "Peer pubkic key"
msgstr "對端公鑰"
-#: htdocs/luci-static/resources/view/fchomo/global.js:523
+#: htdocs/luci-static/resources/view/fchomo/global.js:541
msgid ""
"Performance may degrade slightly, so it is not recommended to enable on when "
"it is not needed."
msgstr "效能可能會略有下降,建議僅在需要時開啟。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:800
+#: htdocs/luci-static/resources/view/fchomo/node.js:811
msgid "Periodically sends data packets to maintain connection persistence."
msgstr "定期發送資料包以維持連線持久性。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:799
+#: htdocs/luci-static/resources/view/fchomo/node.js:810
msgid "Persistent keepalive"
msgstr "持久連接"
@@ -2203,7 +2215,7 @@ msgstr "持久連接"
msgid "Plain text"
msgstr "純文本 text"
-#: htdocs/luci-static/resources/view/fchomo/global.js:860
+#: htdocs/luci-static/resources/view/fchomo/global.js:878
msgid ""
"Please ensure that the DNS query of the domains to be processed in the DNS "
"policyare send via DIRECT/Proxy Node in the same semantics as Routing "
@@ -2218,8 +2230,8 @@ msgid ""
"standards."
msgstr "連結格式標準請參考 %s。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1642
-#: htdocs/luci-static/resources/view/fchomo/node.js:1668
+#: htdocs/luci-static/resources/view/fchomo/node.js:1656
+#: htdocs/luci-static/resources/view/fchomo/node.js:1682
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:346
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:372
msgid ""
@@ -2234,64 +2246,64 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:1455
#: htdocs/luci-static/resources/view/fchomo/client.js:1707
#: htdocs/luci-static/resources/view/fchomo/client.js:1759
-#: htdocs/luci-static/resources/view/fchomo/node.js:1512
+#: htdocs/luci-static/resources/view/fchomo/node.js:1523
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:155
msgid "Please type %s fields of mihomo config."
msgstr "請輸入 mihomo 配置的 %s 欄位。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:559
-#: htdocs/luci-static/resources/view/fchomo/node.js:823
+#: htdocs/luci-static/resources/fchomo/listeners.js:560
+#: htdocs/luci-static/resources/view/fchomo/node.js:834
msgid "Plugin"
msgstr "插件"
-#: htdocs/luci-static/resources/fchomo/listeners.js:567
-#: htdocs/luci-static/resources/fchomo/listeners.js:574
-#: htdocs/luci-static/resources/fchomo/listeners.js:581
-#: htdocs/luci-static/resources/fchomo/listeners.js:588
-#: htdocs/luci-static/resources/fchomo/listeners.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:834
-#: htdocs/luci-static/resources/view/fchomo/node.js:841
-#: htdocs/luci-static/resources/view/fchomo/node.js:849
-#: htdocs/luci-static/resources/view/fchomo/node.js:855
-#: htdocs/luci-static/resources/view/fchomo/node.js:863
-#: htdocs/luci-static/resources/view/fchomo/node.js:869
+#: htdocs/luci-static/resources/fchomo/listeners.js:568
+#: htdocs/luci-static/resources/fchomo/listeners.js:575
+#: htdocs/luci-static/resources/fchomo/listeners.js:582
+#: htdocs/luci-static/resources/fchomo/listeners.js:589
+#: htdocs/luci-static/resources/fchomo/listeners.js:595
+#: htdocs/luci-static/resources/view/fchomo/node.js:845
+#: htdocs/luci-static/resources/view/fchomo/node.js:852
+#: htdocs/luci-static/resources/view/fchomo/node.js:860
+#: htdocs/luci-static/resources/view/fchomo/node.js:866
+#: htdocs/luci-static/resources/view/fchomo/node.js:874
+#: htdocs/luci-static/resources/view/fchomo/node.js:880
msgid "Plugin:"
msgstr "插件:"
-#: htdocs/luci-static/resources/view/fchomo/node.js:250
+#: htdocs/luci-static/resources/view/fchomo/node.js:261
msgid "Port"
msgstr "連接埠"
-#: htdocs/luci-static/resources/fchomo.js:1438
+#: htdocs/luci-static/resources/fchomo.js:1446
msgid "Port %s alrealy exists!"
msgstr "連接埠 %s 已存在!"
-#: htdocs/luci-static/resources/view/fchomo/node.js:280
+#: htdocs/luci-static/resources/view/fchomo/node.js:291
msgid "Port hop interval"
msgstr "連接埠跳躍間隔"
-#: htdocs/luci-static/resources/view/fchomo/node.js:362
+#: htdocs/luci-static/resources/view/fchomo/node.js:373
msgid "Port range"
msgstr "連接埠範圍"
-#: htdocs/luci-static/resources/view/fchomo/global.js:693
+#: htdocs/luci-static/resources/view/fchomo/global.js:711
msgid "Ports"
msgstr "連接埠"
#: htdocs/luci-static/resources/fchomo/listeners.js:153
-#: htdocs/luci-static/resources/view/fchomo/node.js:275
+#: htdocs/luci-static/resources/view/fchomo/node.js:286
msgid "Ports pool"
msgstr "連接埠池"
#: htdocs/luci-static/resources/fchomo/listeners.js:225
-#: htdocs/luci-static/resources/fchomo/listeners.js:455
-#: htdocs/luci-static/resources/view/fchomo/node.js:511
-#: htdocs/luci-static/resources/view/fchomo/node.js:780
+#: htdocs/luci-static/resources/fchomo/listeners.js:456
+#: htdocs/luci-static/resources/view/fchomo/node.js:522
+#: htdocs/luci-static/resources/view/fchomo/node.js:791
msgid "Pre-shared key"
msgstr "預先共用金鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:874
-#: htdocs/luci-static/resources/view/fchomo/node.js:993
+#: htdocs/luci-static/resources/fchomo/listeners.js:875
+#: htdocs/luci-static/resources/view/fchomo/node.js:1004
msgid "Pre-shared key of rendezvous server"
msgstr "牽線伺服器的預先共用金鑰"
@@ -2303,60 +2315,60 @@ msgstr "優先 IPv4"
msgid "Prefer IPv6"
msgstr "優先 IPv6"
-#: htdocs/luci-static/resources/view/fchomo/global.js:527
+#: htdocs/luci-static/resources/view/fchomo/global.js:545
msgid ""
"Prevent ICMP loopback issues in some cases. Ping will not show real delay."
msgstr "防止某些情況下的 ICMP 環回問題。 Ping 不會顯示實際延遲。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:739
-#: htdocs/luci-static/resources/view/fchomo/global.js:756
-#: htdocs/luci-static/resources/view/fchomo/node.js:1476
-#: htdocs/luci-static/resources/view/fchomo/node.js:1482
-#: htdocs/luci-static/resources/view/fchomo/node.js:1792
-#: htdocs/luci-static/resources/view/fchomo/node.js:1799
+#: htdocs/luci-static/resources/view/fchomo/global.js:757
+#: htdocs/luci-static/resources/view/fchomo/global.js:774
+#: htdocs/luci-static/resources/view/fchomo/node.js:1487
+#: htdocs/luci-static/resources/view/fchomo/node.js:1493
+#: htdocs/luci-static/resources/view/fchomo/node.js:1869
+#: htdocs/luci-static/resources/view/fchomo/node.js:1876
msgid "Priority: Proxy Node > Global."
msgstr "優先權: 代理節點 > 全域。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:324
+#: htdocs/luci-static/resources/view/fchomo/node.js:335
msgid "Priv-key"
msgstr "金鑰"
-#: htdocs/luci-static/resources/view/fchomo/node.js:328
+#: htdocs/luci-static/resources/view/fchomo/node.js:339
msgid "Priv-key passphrase"
msgstr "金鑰密碼"
-#: htdocs/luci-static/resources/view/fchomo/node.js:693
-#: htdocs/luci-static/resources/view/fchomo/node.js:765
+#: htdocs/luci-static/resources/view/fchomo/node.js:704
+#: htdocs/luci-static/resources/view/fchomo/node.js:776
msgid "Private key"
msgstr "私鑰"
-#: htdocs/luci-static/resources/view/fchomo/global.js:403
+#: htdocs/luci-static/resources/view/fchomo/global.js:421
msgid "Process matching mode"
msgstr "進程匹配模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:687
-#: htdocs/luci-static/resources/view/fchomo/node.js:1388
+#: htdocs/luci-static/resources/view/fchomo/global.js:705
+#: htdocs/luci-static/resources/view/fchomo/node.js:1399
msgid "Protocol"
msgstr "協議"
-#: htdocs/luci-static/resources/view/fchomo/node.js:680
+#: htdocs/luci-static/resources/view/fchomo/node.js:691
msgid "Protocol parameter. Enable length block encryption."
msgstr "協議參數。啟用長度塊加密。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:674
+#: htdocs/luci-static/resources/view/fchomo/node.js:685
msgid ""
"Protocol parameter. Will waste traffic randomly if enabled (enabled by "
"default in v2ray and cannot be disabled)."
msgstr "協議參數。 如啟用會隨機浪費流量(在 v2ray 中預設為啟用且無法停用)。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1057
-#: htdocs/luci-static/resources/view/fchomo/node.js:1495
-#: htdocs/luci-static/resources/view/fchomo/node.js:1504
-#: htdocs/luci-static/resources/view/fchomo/node.js:1908
+#: htdocs/luci-static/resources/view/fchomo/node.js:1506
+#: htdocs/luci-static/resources/view/fchomo/node.js:1515
+#: htdocs/luci-static/resources/view/fchomo/node.js:1985
msgid "Provider"
msgstr "供應商"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1675
+#: htdocs/luci-static/resources/view/fchomo/node.js:1689
msgid "Provider URL"
msgstr "供應商訂閱 URL"
@@ -2366,32 +2378,32 @@ msgstr "供應商訂閱 URL"
msgid "Proxy Group"
msgstr "代理組"
-#: htdocs/luci-static/resources/view/fchomo/global.js:789
+#: htdocs/luci-static/resources/view/fchomo/global.js:807
msgid "Proxy IPv4 IP-s"
msgstr "代理 IPv4 位址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:792
+#: htdocs/luci-static/resources/view/fchomo/global.js:810
msgid "Proxy IPv6 IP-s"
msgstr "代理 IPv6 位址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:795
+#: htdocs/luci-static/resources/view/fchomo/global.js:813
msgid "Proxy MAC-s"
msgstr "代理 MAC 位址"
-#: htdocs/luci-static/resources/view/fchomo/node.js:208
-#: htdocs/luci-static/resources/view/fchomo/node.js:1907
+#: htdocs/luci-static/resources/view/fchomo/node.js:219
+#: htdocs/luci-static/resources/view/fchomo/node.js:1984
msgid "Proxy Node"
msgstr "代理節點"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1883
-#: htdocs/luci-static/resources/view/fchomo/node.js:1892
+#: htdocs/luci-static/resources/view/fchomo/node.js:1960
+#: htdocs/luci-static/resources/view/fchomo/node.js:1969
msgid "Proxy chain"
msgstr "代理鏈"
-#: htdocs/luci-static/resources/fchomo/listeners.js:610
+#: htdocs/luci-static/resources/fchomo/listeners.js:611
#: htdocs/luci-static/resources/view/fchomo/client.js:784
#: htdocs/luci-static/resources/view/fchomo/client.js:1553
-#: htdocs/luci-static/resources/view/fchomo/node.js:1693
+#: htdocs/luci-static/resources/view/fchomo/node.js:1707
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:403
msgid "Proxy group"
msgstr "代理組"
@@ -2400,16 +2412,16 @@ msgstr "代理組"
msgid "Proxy group override"
msgstr "代理組覆蓋"
-#: htdocs/luci-static/resources/view/fchomo/global.js:479
+#: htdocs/luci-static/resources/view/fchomo/global.js:497
msgid "Proxy mode"
msgstr "代理模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:798
+#: htdocs/luci-static/resources/view/fchomo/global.js:816
msgid "Proxy routerself"
msgstr "代理路由器自身"
-#: htdocs/luci-static/resources/view/fchomo/node.js:550
-#: htdocs/luci-static/resources/view/fchomo/node.js:745
+#: htdocs/luci-static/resources/view/fchomo/node.js:561
+#: htdocs/luci-static/resources/view/fchomo/node.js:756
msgid "QUIC"
msgstr ""
@@ -2418,62 +2430,62 @@ msgstr ""
msgid "Quick Reload"
msgstr "快速重載"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1063
-#: htdocs/luci-static/resources/view/fchomo/node.js:1168
+#: htdocs/luci-static/resources/fchomo/listeners.js:1064
+#: htdocs/luci-static/resources/view/fchomo/node.js:1179
msgid "REALITY"
msgstr "REALITY"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1183
+#: htdocs/luci-static/resources/view/fchomo/node.js:1194
msgid "REALITY X25519MLKEM768 PQC support"
msgstr "REALITY X25519MLKEM768 後量子加密支援"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1100
+#: htdocs/luci-static/resources/fchomo/listeners.js:1101
msgid "REALITY certificate issued to"
msgstr "REALITY 證書頒發給"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1068
+#: htdocs/luci-static/resources/fchomo/listeners.js:1069
msgid "REALITY handshake server"
msgstr "REALITY 握手伺服器"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1075
+#: htdocs/luci-static/resources/fchomo/listeners.js:1076
msgid "REALITY private key"
msgstr "REALITY 私鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1090
-#: htdocs/luci-static/resources/view/fchomo/node.js:1173
+#: htdocs/luci-static/resources/fchomo/listeners.js:1091
+#: htdocs/luci-static/resources/view/fchomo/node.js:1184
msgid "REALITY public key"
msgstr "REALITY 公鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1094
-#: htdocs/luci-static/resources/view/fchomo/node.js:1178
+#: htdocs/luci-static/resources/fchomo/listeners.js:1095
+#: htdocs/luci-static/resources/view/fchomo/node.js:1189
msgid "REALITY short ID"
msgstr "REALITY 標識符"
-#: htdocs/luci-static/resources/fchomo/listeners.js:707
-#: htdocs/luci-static/resources/fchomo/listeners.js:726
-#: htdocs/luci-static/resources/view/fchomo/node.js:948
+#: htdocs/luci-static/resources/fchomo/listeners.js:708
+#: htdocs/luci-static/resources/fchomo/listeners.js:727
+#: htdocs/luci-static/resources/view/fchomo/node.js:959
msgid "RTT"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:376
+#: htdocs/luci-static/resources/fchomo.js:384
msgid "Random"
msgstr "隨機"
-#: htdocs/luci-static/resources/view/fchomo/global.js:647
+#: htdocs/luci-static/resources/view/fchomo/global.js:665
msgid "Random will be used if empty."
msgstr "留空將使用隨機令牌。"
-#: htdocs/luci-static/resources/fchomo.js:386
+#: htdocs/luci-static/resources/fchomo.js:394
msgid "Randomized traffic characteristics"
msgstr "隨機化流量特徵"
-#: htdocs/luci-static/resources/fchomo/listeners.js:863
-#: htdocs/luci-static/resources/view/fchomo/node.js:982
+#: htdocs/luci-static/resources/fchomo/listeners.js:864
+#: htdocs/luci-static/resources/view/fchomo/node.js:993
msgid "Realm"
msgstr "Realm"
-#: htdocs/luci-static/resources/fchomo/listeners.js:879
-#: htdocs/luci-static/resources/view/fchomo/node.js:998
+#: htdocs/luci-static/resources/fchomo/listeners.js:880
+#: htdocs/luci-static/resources/view/fchomo/node.js:1009
msgid "Realm ID"
msgstr "Realm ID"
@@ -2481,19 +2493,19 @@ msgstr "Realm ID"
msgid "Realm name pattern"
msgstr "Realm 名稱模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:463
+#: htdocs/luci-static/resources/view/fchomo/global.js:481
msgid "Redir port"
msgstr "Redir 連接埠"
-#: htdocs/luci-static/resources/view/fchomo/global.js:480
+#: htdocs/luci-static/resources/view/fchomo/global.js:498
msgid "Redirect TCP"
msgstr "Redirect TCP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:482
+#: htdocs/luci-static/resources/view/fchomo/global.js:500
msgid "Redirect TCP + TProxy UDP"
msgstr "Redirect TCP + TProxy UDP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:484
+#: htdocs/luci-static/resources/view/fchomo/global.js:502
msgid "Redirect TCP + Tun UDP"
msgstr "Redirect TCP + Tun UDP"
@@ -2501,7 +2513,7 @@ msgstr "Redirect TCP + Tun UDP"
msgid "Refresh every %s seconds."
msgstr "每 %s 秒刷新。"
-#: htdocs/luci-static/resources/fchomo.js:1194
+#: htdocs/luci-static/resources/fchomo.js:1202
#: htdocs/luci-static/resources/view/fchomo/client.js:928
#: htdocs/luci-static/resources/view/fchomo/global.js:193
#: htdocs/luci-static/resources/view/fchomo/server.js:45
@@ -2512,69 +2524,69 @@ msgstr "重載"
msgid "Reload All"
msgstr "重載所有"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1620
+#: htdocs/luci-static/resources/view/fchomo/node.js:1634
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:287
msgid "Remote"
msgstr "遠端"
-#: htdocs/luci-static/resources/view/fchomo/node.js:728
-#: htdocs/luci-static/resources/view/fchomo/node.js:811
+#: htdocs/luci-static/resources/view/fchomo/node.js:739
+#: htdocs/luci-static/resources/view/fchomo/node.js:822
msgid "Remote DNS resolve"
msgstr "遠端 DNS 解析"
-#: htdocs/luci-static/resources/fchomo.js:1359
+#: htdocs/luci-static/resources/fchomo.js:1367
msgid "Remove"
msgstr "移除"
-#: htdocs/luci-static/resources/fchomo.js:1364
-#: htdocs/luci-static/resources/view/fchomo/node.js:1596
-#: htdocs/luci-static/resources/view/fchomo/node.js:1598
+#: htdocs/luci-static/resources/fchomo.js:1372
+#: htdocs/luci-static/resources/view/fchomo/node.js:1610
+#: htdocs/luci-static/resources/view/fchomo/node.js:1612
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:259
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:261
msgid "Remove idles"
msgstr "移除閒置"
-#: htdocs/luci-static/resources/fchomo/listeners.js:868
-#: htdocs/luci-static/resources/view/fchomo/node.js:987
+#: htdocs/luci-static/resources/fchomo/listeners.js:869
+#: htdocs/luci-static/resources/view/fchomo/node.js:998
msgid "Rendezvous server"
msgstr "牽線伺服器"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1722
+#: htdocs/luci-static/resources/view/fchomo/node.js:1799
msgid "Replace name"
msgstr "名稱替換"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1723
+#: htdocs/luci-static/resources/view/fchomo/node.js:1800
msgid "Replace node name."
msgstr "替換節點名稱"
-#: htdocs/luci-static/resources/fchomo.js:360
+#: htdocs/luci-static/resources/fchomo.js:368
msgid "Request"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1148
-#: htdocs/luci-static/resources/view/fchomo/node.js:1256
-#: htdocs/luci-static/resources/view/fchomo/node.js:1263
+#: htdocs/luci-static/resources/fchomo/listeners.js:1149
+#: htdocs/luci-static/resources/view/fchomo/node.js:1267
+#: htdocs/luci-static/resources/view/fchomo/node.js:1274
msgid "Request path"
msgstr "請求路徑"
-#: htdocs/luci-static/resources/view/fchomo/node.js:585
+#: htdocs/luci-static/resources/view/fchomo/node.js:596
msgid "Request timeout"
msgstr "請求逾時"
-#: htdocs/luci-static/resources/fchomo.js:363
+#: htdocs/luci-static/resources/fchomo.js:371
msgid "Require and verify"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:361
+#: htdocs/luci-static/resources/fchomo.js:369
msgid "Require any"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:394
-#: htdocs/luci-static/resources/view/fchomo/node.js:1184
+#: htdocs/luci-static/resources/fchomo.js:402
+#: htdocs/luci-static/resources/view/fchomo/node.js:1195
msgid "Requires server support."
msgstr "需要伺服器支援。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:794
+#: htdocs/luci-static/resources/view/fchomo/node.js:805
msgid "Reserved field bytes"
msgstr "保留字段位元組"
@@ -2582,7 +2594,7 @@ msgstr "保留字段位元組"
msgid "Resources management"
msgstr "資源管理"
-#: htdocs/luci-static/resources/view/fchomo/node.js:869
+#: htdocs/luci-static/resources/view/fchomo/node.js:880
msgid "Restls script"
msgstr "Restls 劇本"
@@ -2596,51 +2608,51 @@ msgid ""
"Returns the string input for icon in the API to display in this proxy group."
msgstr "在 API 傳回 icon 所輸入的字串,以在該代理組顯示。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:495
+#: htdocs/luci-static/resources/view/fchomo/node.js:506
msgid "Reuse HTTP connections to reduce RTT for each connection establishment."
msgstr "重用 HTTP 連接以減少每次建立連接的 RTT。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:492
-#: htdocs/luci-static/resources/view/fchomo/node.js:496
+#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:507
msgid "Reusing a single tunnel to carry multiple target connections within it."
msgstr "複用單條隧道使其內部承載多條目標連線。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:817
+#: htdocs/luci-static/resources/view/fchomo/global.js:835
msgid "Routing Control"
msgstr "路由控制"
-#: htdocs/luci-static/resources/view/fchomo/global.js:872
-#: htdocs/luci-static/resources/view/fchomo/global.js:875
+#: htdocs/luci-static/resources/view/fchomo/global.js:890
+#: htdocs/luci-static/resources/view/fchomo/global.js:893
msgid "Routing DSCP"
msgstr "路由 DSCP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:842
+#: htdocs/luci-static/resources/view/fchomo/global.js:860
msgid "Routing GFW"
msgstr "路由 GFW 流量"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1481
-#: htdocs/luci-static/resources/view/fchomo/node.js:1798
+#: htdocs/luci-static/resources/view/fchomo/node.js:1492
+#: htdocs/luci-static/resources/view/fchomo/node.js:1875
msgid "Routing mark"
msgstr "路由標記"
-#: htdocs/luci-static/resources/view/fchomo/global.js:755
+#: htdocs/luci-static/resources/view/fchomo/global.js:773
msgid "Routing mark (Fwmark)"
msgstr "路由標記 (Fwmark)"
-#: htdocs/luci-static/resources/view/fchomo/global.js:837
+#: htdocs/luci-static/resources/view/fchomo/global.js:855
msgid "Routing mode"
msgstr "路由模式"
-#: htdocs/luci-static/resources/view/fchomo/global.js:838
+#: htdocs/luci-static/resources/view/fchomo/global.js:856
msgid "Routing mode of the traffic enters mihomo via firewall rules."
msgstr "流量經由防火牆規則進入 mihomo 的路由模式。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:859
+#: htdocs/luci-static/resources/view/fchomo/global.js:877
msgid "Routing mode will be handle domain."
msgstr "路由模式將處理網域。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:819
-#: htdocs/luci-static/resources/view/fchomo/global.js:828
+#: htdocs/luci-static/resources/view/fchomo/global.js:837
+#: htdocs/luci-static/resources/view/fchomo/global.js:846
msgid "Routing ports"
msgstr "路由連接埠"
@@ -2649,15 +2661,15 @@ msgstr "路由連接埠"
msgid "Routing rule"
msgstr "路由規則"
-#: htdocs/luci-static/resources/view/fchomo/global.js:749
+#: htdocs/luci-static/resources/view/fchomo/global.js:767
msgid "Routing rule priority"
msgstr "路由規則優先權"
-#: htdocs/luci-static/resources/view/fchomo/global.js:743
+#: htdocs/luci-static/resources/view/fchomo/global.js:761
msgid "Routing table ID"
msgstr "路由表 ID"
-#: htdocs/luci-static/resources/view/fchomo/global.js:399
+#: htdocs/luci-static/resources/view/fchomo/global.js:417
msgid "Rule"
msgstr "規則"
@@ -2679,11 +2691,11 @@ msgstr "規則集"
msgid "Ruleset-URI-Scheme"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1207
+#: htdocs/luci-static/resources/fchomo.js:1215
msgid "Running"
msgstr "正在運作"
-#: htdocs/luci-static/resources/fchomo.js:242
+#: htdocs/luci-static/resources/fchomo.js:250
msgid "SMTP"
msgstr ""
@@ -2699,12 +2711,12 @@ msgstr ""
msgid "SSH"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:243
+#: htdocs/luci-static/resources/fchomo.js:251
msgid "STUN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:885
-#: htdocs/luci-static/resources/view/fchomo/node.js:1004
+#: htdocs/luci-static/resources/fchomo/listeners.js:886
+#: htdocs/luci-static/resources/view/fchomo/node.js:1015
msgid "STUN servers"
msgstr "STUN 伺服器"
@@ -2712,12 +2724,12 @@ msgstr "STUN 伺服器"
msgid "SUB-RULE"
msgstr "SUB-RULE"
-#: htdocs/luci-static/resources/view/fchomo/node.js:905
+#: htdocs/luci-static/resources/view/fchomo/node.js:916
msgid "SUoT version"
msgstr "SUoT 版本"
#: htdocs/luci-static/resources/fchomo/listeners.js:195
-#: htdocs/luci-static/resources/view/fchomo/node.js:300
+#: htdocs/luci-static/resources/view/fchomo/node.js:311
msgid "Salamander"
msgstr "Salamander"
@@ -2729,42 +2741,47 @@ msgstr "相同 目標位址 請求。相同節點"
msgid "Same srcaddr and dstaddr requests. Same node"
msgstr "相同 來源位址 和 目標位址 請求。相同節點"
-#: htdocs/luci-static/resources/view/fchomo/global.js:512
+#: htdocs/luci-static/resources/view/fchomo/global.js:396
+#: htdocs/luci-static/resources/view/fchomo/global.js:402
+msgid "Save"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/global.js:530
msgid "Segment maximum size"
msgstr "分段最大尺寸"
-#: htdocs/luci-static/resources/fchomo.js:231
+#: htdocs/luci-static/resources/fchomo.js:239
msgid "Select"
msgstr "手動選擇"
-#: htdocs/luci-static/resources/view/fchomo/global.js:608
+#: htdocs/luci-static/resources/view/fchomo/global.js:626
msgid "Select Dashboard"
msgstr "選擇面板"
-#: htdocs/luci-static/resources/fchomo.js:400
+#: htdocs/luci-static/resources/fchomo.js:408
msgid "Send padding randomly 0-3333 bytes with 50% probability."
msgstr "以 50% 的機率發送隨機 0 到 3333 位元組的填充。"
-#: htdocs/luci-static/resources/fchomo.js:389
-#: htdocs/luci-static/resources/fchomo.js:390
+#: htdocs/luci-static/resources/fchomo.js:397
+#: htdocs/luci-static/resources/fchomo.js:398
msgid "Send random ticket of 300s-600s duration for client 0-RTT reuse."
msgstr "發送 300-600 秒的隨機票證,以供客戶端 0-RTT 重用。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:707
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
-#: htdocs/luci-static/resources/fchomo/listeners.js:976
+#: htdocs/luci-static/resources/fchomo/listeners.js:708
+#: htdocs/luci-static/resources/fchomo/listeners.js:962
+#: htdocs/luci-static/resources/fchomo/listeners.js:977
#: htdocs/luci-static/resources/view/fchomo/server.js:58
#: root/usr/share/luci/menu.d/luci-app-fchomo.json:62
msgid "Server"
msgstr "服務端"
-#: htdocs/luci-static/resources/view/fchomo/node.js:245
+#: htdocs/luci-static/resources/view/fchomo/node.js:256
msgid "Server address"
msgstr "伺服器位址"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1142
-#: htdocs/luci-static/resources/view/fchomo/node.js:1235
-#: htdocs/luci-static/resources/view/fchomo/node.js:1241
+#: htdocs/luci-static/resources/fchomo/listeners.js:1143
+#: htdocs/luci-static/resources/view/fchomo/node.js:1246
+#: htdocs/luci-static/resources/view/fchomo/node.js:1252
msgid "Server hostname"
msgstr "伺服器主機名稱"
@@ -2781,22 +2798,22 @@ msgstr "服務狀態"
msgid "Shadowsocks"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:505
-#: htdocs/luci-static/resources/view/fchomo/node.js:604
+#: htdocs/luci-static/resources/fchomo/listeners.js:506
+#: htdocs/luci-static/resources/view/fchomo/node.js:615
msgid "Shadowsocks chipher"
msgstr "Shadowsocks 加密方法"
-#: htdocs/luci-static/resources/fchomo/listeners.js:500
-#: htdocs/luci-static/resources/view/fchomo/node.js:599
+#: htdocs/luci-static/resources/fchomo/listeners.js:501
+#: htdocs/luci-static/resources/view/fchomo/node.js:610
msgid "Shadowsocks encrypt"
msgstr "Shadowsocks 加密"
-#: htdocs/luci-static/resources/fchomo/listeners.js:513
-#: htdocs/luci-static/resources/view/fchomo/node.js:612
+#: htdocs/luci-static/resources/fchomo/listeners.js:514
+#: htdocs/luci-static/resources/view/fchomo/node.js:623
msgid "Shadowsocks password"
msgstr "Shadowsocks 密碼"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1436
+#: htdocs/luci-static/resources/view/fchomo/node.js:1447
msgid "Show connections in the dashboard for breaking connections easier."
msgstr "在面板中顯示連線以便於打斷連線。"
@@ -2808,26 +2825,26 @@ msgstr "靜音"
msgid "Simple round-robin all nodes"
msgstr "簡單輪替所有節點"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1681
+#: htdocs/luci-static/resources/view/fchomo/node.js:1695
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:391
msgid "Size limit"
msgstr "大小限制"
#: htdocs/luci-static/resources/view/fchomo/client.js:1586
-#: htdocs/luci-static/resources/view/fchomo/node.js:1105
-#: htdocs/luci-static/resources/view/fchomo/node.js:1773
+#: htdocs/luci-static/resources/view/fchomo/node.js:1116
+#: htdocs/luci-static/resources/view/fchomo/node.js:1850
msgid "Skip cert verify"
msgstr "跳過憑證驗證"
-#: htdocs/luci-static/resources/view/fchomo/global.js:665
+#: htdocs/luci-static/resources/view/fchomo/global.js:683
msgid "Skiped sniffing domain"
msgstr "跳過嗅探網域"
-#: htdocs/luci-static/resources/view/fchomo/global.js:671
+#: htdocs/luci-static/resources/view/fchomo/global.js:689
msgid "Skiped sniffing dst address"
msgstr "跳過嗅探目標位址"
-#: htdocs/luci-static/resources/view/fchomo/global.js:668
+#: htdocs/luci-static/resources/view/fchomo/global.js:686
msgid "Skiped sniffing src address"
msgstr "跳過嗅探來源位址"
@@ -2836,30 +2853,30 @@ msgstr "跳過嗅探來源位址"
msgid "Snell"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:675
+#: htdocs/luci-static/resources/view/fchomo/global.js:693
msgid "Sniff protocol"
msgstr "嗅探協議"
-#: htdocs/luci-static/resources/view/fchomo/global.js:652
+#: htdocs/luci-static/resources/view/fchomo/global.js:670
msgid "Sniffer"
msgstr "嗅探器"
-#: htdocs/luci-static/resources/view/fchomo/global.js:655
+#: htdocs/luci-static/resources/view/fchomo/global.js:673
msgid "Sniffer settings"
msgstr "嗅探器設定"
-#: htdocs/luci-static/resources/fchomo.js:432
+#: htdocs/luci-static/resources/fchomo.js:440
msgid "Specify a ID"
msgstr "指定一個ID"
-#: htdocs/luci-static/resources/view/fchomo/global.js:820
-#: htdocs/luci-static/resources/view/fchomo/global.js:829
+#: htdocs/luci-static/resources/view/fchomo/global.js:838
+#: htdocs/luci-static/resources/view/fchomo/global.js:847
msgid ""
"Specify target ports to be proxied. Multiple ports must be separated by "
"commas."
msgstr "指定需要被代理的目標連接埠。多個連接埠必須以逗號隔開。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:495
+#: htdocs/luci-static/resources/view/fchomo/global.js:513
msgid "Stack"
msgstr "堆栈"
@@ -2867,11 +2884,11 @@ msgstr "堆栈"
msgid "Standard"
msgstr "標準"
-#: htdocs/luci-static/resources/fchomo.js:246
+#: htdocs/luci-static/resources/fchomo.js:254
msgid "Steam Client"
msgstr "Steam 客戶端"
-#: htdocs/luci-static/resources/fchomo.js:247
+#: htdocs/luci-static/resources/fchomo.js:255
msgid "Steam P2P"
msgstr ""
@@ -2880,7 +2897,7 @@ msgstr ""
msgid "Strategy"
msgstr "策略"
-#: htdocs/luci-static/resources/fchomo/listeners.js:604
+#: htdocs/luci-static/resources/fchomo/listeners.js:605
#: htdocs/luci-static/resources/view/fchomo/client.js:1313
#: htdocs/luci-static/resources/view/fchomo/client.js:1322
msgid "Sub rule"
@@ -2890,7 +2907,7 @@ msgstr "子規則"
msgid "Sub rule group"
msgstr "子規則組"
-#: htdocs/luci-static/resources/fchomo.js:692
+#: htdocs/luci-static/resources/fchomo.js:700
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:231
msgid "Successfully imported %s %s of total %s."
msgstr "已成功匯入 %s 個%s (共 %s 個)。"
@@ -2899,7 +2916,7 @@ msgstr "已成功匯入 %s 個%s (共 %s 個)。"
msgid "Successfully updated."
msgstr "更新成功。"
-#: htdocs/luci-static/resources/fchomo.js:1709
+#: htdocs/luci-static/resources/fchomo.js:1717
msgid "Successfully uploaded."
msgstr "已成功上傳。"
@@ -2916,7 +2933,7 @@ msgstr ""
"支持规则集类型为: %s 并且格式为: %s 的规则集鏈接。"
""
-#: htdocs/luci-static/resources/view/fchomo/global.js:497
+#: htdocs/luci-static/resources/view/fchomo/global.js:515
msgid "System"
msgstr "系統"
@@ -2939,25 +2956,25 @@ msgstr "系統 DNS"
#: htdocs/luci-static/resources/fchomo.js:197
#: htdocs/luci-static/resources/fchomo.js:198
#: htdocs/luci-static/resources/fchomo.js:205
-#: htdocs/luci-static/resources/fchomo/listeners.js:638
+#: htdocs/luci-static/resources/fchomo/listeners.js:639
#: htdocs/luci-static/resources/view/fchomo/client.js:590
#: htdocs/luci-static/resources/view/fchomo/client.js:680
msgid "TCP"
msgstr "TCP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:424
+#: htdocs/luci-static/resources/view/fchomo/global.js:442
msgid "TCP concurrency"
msgstr "TCP 併發"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1429
+#: htdocs/luci-static/resources/view/fchomo/node.js:1440
msgid "TCP only"
msgstr "僅 TCP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:432
+#: htdocs/luci-static/resources/view/fchomo/global.js:450
msgid "TCP-Keep-Alive idle timeout"
msgstr "TCP-Keep-Alive 閒置逾時"
-#: htdocs/luci-static/resources/view/fchomo/global.js:427
+#: htdocs/luci-static/resources/view/fchomo/global.js:445
msgid "TCP-Keep-Alive interval"
msgstr "TCP-Keep-Alive 間隔"
@@ -2976,31 +2993,31 @@ msgstr "TCP-Keep-Alive 間隔"
msgid "TCP/UDP"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1460
-#: htdocs/luci-static/resources/view/fchomo/node.js:1740
+#: htdocs/luci-static/resources/view/fchomo/node.js:1471
+#: htdocs/luci-static/resources/view/fchomo/node.js:1817
msgid "TFO"
msgstr "TCP 快速開啟 (TFO)"
-#: htdocs/luci-static/resources/fchomo/listeners.js:569
-#: htdocs/luci-static/resources/fchomo/listeners.js:901
-#: htdocs/luci-static/resources/view/fchomo/global.js:532
-#: htdocs/luci-static/resources/view/fchomo/node.js:476
-#: htdocs/luci-static/resources/view/fchomo/node.js:836
-#: htdocs/luci-static/resources/view/fchomo/node.js:1014
+#: htdocs/luci-static/resources/fchomo/listeners.js:570
+#: htdocs/luci-static/resources/fchomo/listeners.js:902
+#: htdocs/luci-static/resources/view/fchomo/global.js:550
+#: htdocs/luci-static/resources/view/fchomo/node.js:487
+#: htdocs/luci-static/resources/view/fchomo/node.js:847
+#: htdocs/luci-static/resources/view/fchomo/node.js:1025
msgid "TLS"
msgstr "TLS"
-#: htdocs/luci-static/resources/fchomo/listeners.js:955
-#: htdocs/luci-static/resources/view/fchomo/node.js:1045
+#: htdocs/luci-static/resources/fchomo/listeners.js:956
+#: htdocs/luci-static/resources/view/fchomo/node.js:1056
msgid "TLS ALPN"
msgstr "TLS ALPN"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1039
+#: htdocs/luci-static/resources/view/fchomo/node.js:1050
msgid "TLS SNI"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:122
-#: htdocs/luci-static/resources/view/fchomo/node.js:225
+#: htdocs/luci-static/resources/view/fchomo/node.js:236
msgid "TLS fields"
msgstr "TLS欄位"
@@ -3009,11 +3026,11 @@ msgstr "TLS欄位"
msgid "TUIC"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:244
+#: htdocs/luci-static/resources/fchomo.js:252
msgid "TURN"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:552
+#: htdocs/luci-static/resources/fchomo/listeners.js:553
msgid "Target address"
msgstr "目標位址"
@@ -3022,35 +3039,35 @@ msgid ""
"Tell the client to use the BBR flow control algorithm instead of Hysteria CC."
msgstr "讓客戶端使用 BBR 流控演算法。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:709
-#: htdocs/luci-static/resources/view/fchomo/node.js:717
+#: htdocs/luci-static/resources/view/fchomo/node.js:720
+#: htdocs/luci-static/resources/view/fchomo/node.js:728
msgid "The %s address used by local machine in the Cloudflare WARP network."
msgstr "Cloudflare WARP 網路中使用的本機 %s 位址。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:752
-#: htdocs/luci-static/resources/view/fchomo/node.js:760
+#: htdocs/luci-static/resources/view/fchomo/node.js:763
+#: htdocs/luci-static/resources/view/fchomo/node.js:771
msgid "The %s address used by local machine in the Wireguard network."
msgstr "WireGuard 網路中使用的本機 %s 位址。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:976
-#: htdocs/luci-static/resources/view/fchomo/node.js:1128
+#: htdocs/luci-static/resources/fchomo/listeners.js:977
+#: htdocs/luci-static/resources/view/fchomo/node.js:1139
msgid "The %s private key, in PEM format."
msgstr "%s私鑰,需要 PEM 格式。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:961
-#: htdocs/luci-static/resources/fchomo/listeners.js:999
-#: htdocs/luci-static/resources/view/fchomo/global.js:553
-#: htdocs/luci-static/resources/view/fchomo/node.js:1114
+#: htdocs/luci-static/resources/fchomo/listeners.js:962
+#: htdocs/luci-static/resources/fchomo/listeners.js:1000
+#: htdocs/luci-static/resources/view/fchomo/global.js:571
+#: htdocs/luci-static/resources/view/fchomo/node.js:1125
msgid "The %s public key, in PEM format."
msgstr "%s公鑰,需要 PEM 格式。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1148
+#: htdocs/luci-static/resources/view/fchomo/node.js:1159
msgid ""
"The ECH parameter of the HTTPS record for the domain. Leave empty to resolve "
"via DNS."
msgstr "網域的 HTTPS 記錄的 ECH 參數。留空則透過 DNS 解析。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:398
+#: htdocs/luci-static/resources/view/fchomo/node.js:409
msgid "The ED25519 available private key or UUID provided by Sudoku server."
msgstr "Sudoku 伺服器提供的 ED25519 可用私鑰 或 UUID。"
@@ -3062,8 +3079,8 @@ msgstr "Sudoku 產生的 ED25519 主公鑰 或 UUID。"
msgid "The default value is 2:00 every day."
msgstr "預設值為每天 2:00。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:739
-#: htdocs/luci-static/resources/view/fchomo/node.js:961
+#: htdocs/luci-static/resources/fchomo/listeners.js:740
+#: htdocs/luci-static/resources/view/fchomo/node.js:972
msgid ""
"The first padding must have a probability of 100% and at least 35 bytes."
msgstr "首個填充必須為 100% 的機率並且至少 35 位元組。"
@@ -3078,26 +3095,26 @@ msgstr "匹配 %s 的將被視為未被投毒汙染。"
msgid "The matching %s will be deemed as poisoned."
msgstr "匹配 %s 的將被視為已被投毒汙染。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:737
-#: htdocs/luci-static/resources/view/fchomo/node.js:959
+#: htdocs/luci-static/resources/fchomo/listeners.js:738
+#: htdocs/luci-static/resources/view/fchomo/node.js:970
msgid "The server and client can set different padding parameters."
msgstr "伺服器和客戶端可以設定不同的填充參數。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1057
-#: htdocs/luci-static/resources/view/fchomo/global.js:597
+#: htdocs/luci-static/resources/fchomo/listeners.js:1058
+#: htdocs/luci-static/resources/view/fchomo/global.js:615
msgid "This ECH parameter needs to be added to the HTTPS record of the domain."
msgstr "此 ECH 參數需要加入到網域的 HTTPS 記錄中。"
#: htdocs/luci-static/resources/view/fchomo/client.js:1589
-#: htdocs/luci-static/resources/view/fchomo/node.js:1108
-#: htdocs/luci-static/resources/view/fchomo/node.js:1776
+#: htdocs/luci-static/resources/view/fchomo/node.js:1119
+#: htdocs/luci-static/resources/view/fchomo/node.js:1853
msgid ""
"This is DANGEROUS, your traffic is almost like "
"PLAIN TEXT! Use at your own risk!"
msgstr ""
"這是危險行為,您的流量將幾乎等同於明文!使用風險自負!"
-#: htdocs/luci-static/resources/view/fchomo/node.js:555
+#: htdocs/luci-static/resources/view/fchomo/node.js:566
msgid ""
"This is the TUIC port of the SUoT protocol, designed to provide a QUIC "
"stream based UDP relay mode that TUIC does not provide."
@@ -3110,52 +3127,52 @@ msgid ""
"To check NAT Behavior you need to install %s first"
msgstr "檢測 NAT 行為需要先安裝 %s"
-#: htdocs/luci-static/resources/view/fchomo/global.js:487
+#: htdocs/luci-static/resources/view/fchomo/global.js:505
msgid ""
"To enable Tun support, you need to install ip-full and "
"kmod-tun"
msgstr ""
"要啟用 Tun 支持,您需要安裝 ip-full 和 kmod-tun。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:864
+#: htdocs/luci-static/resources/view/fchomo/global.js:882
msgid "To enable, you need to install dnsmasq-full."
msgstr "要啟用,您需要安裝 dnsmasq-full。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:762
+#: htdocs/luci-static/resources/view/fchomo/global.js:780
msgid "Tproxy Fwmark/fwmask"
msgstr "Tproxy Fwmark/fwmask"
-#: htdocs/luci-static/resources/view/fchomo/global.js:468
+#: htdocs/luci-static/resources/view/fchomo/global.js:486
msgid "Tproxy port"
msgstr "Tproxy 連接埠"
#: htdocs/luci-static/resources/fchomo/listeners.js:285
-#: htdocs/luci-static/resources/view/fchomo/node.js:390
+#: htdocs/luci-static/resources/view/fchomo/node.js:401
msgid "Traffic pattern"
msgstr "流量模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1935
+#: htdocs/luci-static/resources/view/fchomo/node.js:2012
msgid "Transit proxy group"
msgstr "中轉代理組"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1941
+#: htdocs/luci-static/resources/view/fchomo/node.js:2018
msgid "Transit proxy node"
msgstr "中轉代理節點"
#: htdocs/luci-static/resources/fchomo/listeners.js:273
-#: htdocs/luci-static/resources/fchomo/listeners.js:1108
-#: htdocs/luci-static/resources/view/fchomo/node.js:367
-#: htdocs/luci-static/resources/view/fchomo/node.js:1190
+#: htdocs/luci-static/resources/fchomo/listeners.js:1109
+#: htdocs/luci-static/resources/view/fchomo/node.js:378
+#: htdocs/luci-static/resources/view/fchomo/node.js:1201
msgid "Transport"
msgstr "傳輸層"
#: htdocs/luci-static/resources/fchomo/listeners.js:123
-#: htdocs/luci-static/resources/view/fchomo/node.js:226
+#: htdocs/luci-static/resources/view/fchomo/node.js:237
msgid "Transport fields"
msgstr "傳輸層欄位"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1113
-#: htdocs/luci-static/resources/view/fchomo/node.js:1195
+#: htdocs/luci-static/resources/fchomo/listeners.js:1114
+#: htdocs/luci-static/resources/view/fchomo/node.js:1206
msgid "Transport type"
msgstr "傳輸層類型"
@@ -3177,19 +3194,19 @@ msgstr ""
msgid "Trusted proxy header"
msgstr "可信代理 Header"
-#: htdocs/luci-static/resources/view/fchomo/global.js:767
+#: htdocs/luci-static/resources/view/fchomo/global.js:785
msgid "Tun Fwmark/fwmask"
msgstr "Tun Fwmark/fwmask"
-#: htdocs/luci-static/resources/view/fchomo/global.js:485
+#: htdocs/luci-static/resources/view/fchomo/global.js:503
msgid "Tun TCP/UDP"
msgstr "Tun TCP/UDP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:492
+#: htdocs/luci-static/resources/view/fchomo/global.js:510
msgid "Tun settings"
msgstr "Tun 設定"
-#: htdocs/luci-static/resources/view/fchomo/global.js:496
+#: htdocs/luci-static/resources/view/fchomo/global.js:514
msgid "Tun stack."
msgstr "Tun 堆栈"
@@ -3203,9 +3220,9 @@ msgstr ""
#: htdocs/luci-static/resources/view/fchomo/client.js:738
#: htdocs/luci-static/resources/view/fchomo/client.js:843
#: htdocs/luci-static/resources/view/fchomo/client.js:1030
-#: htdocs/luci-static/resources/view/fchomo/node.js:239
-#: htdocs/luci-static/resources/view/fchomo/node.js:1618
-#: htdocs/luci-static/resources/view/fchomo/node.js:1906
+#: htdocs/luci-static/resources/view/fchomo/node.js:250
+#: htdocs/luci-static/resources/view/fchomo/node.js:1632
+#: htdocs/luci-static/resources/view/fchomo/node.js:1983
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:285
msgid "Type"
msgstr "類型"
@@ -3216,55 +3233,55 @@ msgstr "類型"
#: htdocs/luci-static/resources/fchomo.js:201
#: htdocs/luci-static/resources/fchomo.js:202
#: htdocs/luci-static/resources/fchomo.js:204
-#: htdocs/luci-static/resources/fchomo/listeners.js:639
-#: htdocs/luci-static/resources/fchomo/listeners.js:644
+#: htdocs/luci-static/resources/fchomo/listeners.js:640
+#: htdocs/luci-static/resources/fchomo/listeners.js:645
#: htdocs/luci-static/resources/view/fchomo/client.js:589
#: htdocs/luci-static/resources/view/fchomo/client.js:679
-#: htdocs/luci-static/resources/view/fchomo/node.js:893
-#: htdocs/luci-static/resources/view/fchomo/node.js:1750
+#: htdocs/luci-static/resources/view/fchomo/node.js:904
+#: htdocs/luci-static/resources/view/fchomo/node.js:1827
msgid "UDP"
msgstr "UDP"
-#: htdocs/luci-static/resources/view/fchomo/global.js:516
+#: htdocs/luci-static/resources/view/fchomo/global.js:534
msgid "UDP NAT expiration time"
msgstr "UDP NAT 過期時間"
-#: htdocs/luci-static/resources/view/fchomo/node.js:554
+#: htdocs/luci-static/resources/view/fchomo/node.js:565
msgid "UDP over stream"
msgstr "UDP over stream"
-#: htdocs/luci-static/resources/view/fchomo/node.js:560
+#: htdocs/luci-static/resources/view/fchomo/node.js:571
msgid "UDP over stream version"
msgstr "UDP over stream 版本"
-#: htdocs/luci-static/resources/view/fchomo/node.js:547
+#: htdocs/luci-static/resources/view/fchomo/node.js:558
msgid "UDP packet relay mode."
msgstr "UDP 包中繼模式。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:546
+#: htdocs/luci-static/resources/view/fchomo/node.js:557
msgid "UDP relay mode"
msgstr "UDP 中繼模式"
-#: htdocs/luci-static/resources/fchomo/listeners.js:372
#: htdocs/luci-static/resources/fchomo/listeners.js:373
-#: htdocs/luci-static/resources/view/fchomo/node.js:422
-#: htdocs/luci-static/resources/view/fchomo/node.js:423
+#: htdocs/luci-static/resources/fchomo/listeners.js:374
+#: htdocs/luci-static/resources/view/fchomo/node.js:433
+#: htdocs/luci-static/resources/view/fchomo/node.js:434
msgid "UP: %s; DOWN: %s"
msgstr "上傳: %s; 下載: %s"
-#: htdocs/luci-static/resources/fchomo.js:233
+#: htdocs/luci-static/resources/fchomo.js:241
msgid "URL test"
msgstr "自動選擇"
#: htdocs/luci-static/resources/fchomo/listeners.js:294
-#: htdocs/luci-static/resources/fchomo/listeners.js:473
-#: htdocs/luci-static/resources/fchomo/listeners.js:528
-#: htdocs/luci-static/resources/view/fchomo/node.js:534
-#: htdocs/luci-static/resources/view/fchomo/node.js:643
+#: htdocs/luci-static/resources/fchomo/listeners.js:474
+#: htdocs/luci-static/resources/fchomo/listeners.js:529
+#: htdocs/luci-static/resources/view/fchomo/node.js:545
+#: htdocs/luci-static/resources/view/fchomo/node.js:654
msgid "UUID"
msgstr "UUID"
-#: htdocs/luci-static/resources/fchomo.js:1252
+#: htdocs/luci-static/resources/fchomo.js:1260
msgid "Unable to download unsupported type: %s"
msgstr "無法下載不支援的類型: %s"
@@ -3272,7 +3289,7 @@ msgstr "無法下載不支援的類型: %s"
msgid "Unable to save contents: %s"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/global.js:421
+#: htdocs/luci-static/resources/view/fchomo/global.js:439
msgid "Unified delay"
msgstr "統一延遲"
@@ -3289,8 +3306,8 @@ msgstr "未知錯誤。"
msgid "Unknown error: %s"
msgstr "未知錯誤:%s"
-#: htdocs/luci-static/resources/view/fchomo/node.js:899
-#: htdocs/luci-static/resources/view/fchomo/node.js:1755
+#: htdocs/luci-static/resources/view/fchomo/node.js:910
+#: htdocs/luci-static/resources/view/fchomo/node.js:1832
msgid "UoT"
msgstr "UDP over TCP (UoT)"
@@ -3298,22 +3315,22 @@ msgstr "UDP over TCP (UoT)"
msgid "Update failed."
msgstr "更新失敗。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1687
+#: htdocs/luci-static/resources/view/fchomo/node.js:1701
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:397
msgid "Update interval"
msgstr "更新間隔"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1447
+#: htdocs/luci-static/resources/view/fchomo/node.js:1458
msgid "Upload bandwidth"
msgstr "上傳頻寬"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1448
+#: htdocs/luci-static/resources/view/fchomo/node.js:1459
msgid "Upload bandwidth in Mbps."
msgstr "上傳頻寬(單位:Mbps)。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:967
-#: htdocs/luci-static/resources/fchomo/listeners.js:1007
-#: htdocs/luci-static/resources/view/fchomo/node.js:1119
+#: htdocs/luci-static/resources/fchomo/listeners.js:968
+#: htdocs/luci-static/resources/fchomo/listeners.js:1008
+#: htdocs/luci-static/resources/view/fchomo/node.js:1130
msgid "Upload certificate"
msgstr "上傳憑證"
@@ -3321,17 +3338,17 @@ msgstr "上傳憑證"
msgid "Upload initial package"
msgstr "上傳初始資源包"
-#: htdocs/luci-static/resources/fchomo/listeners.js:982
-#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/fchomo/listeners.js:983
+#: htdocs/luci-static/resources/view/fchomo/node.js:1144
msgid "Upload key"
msgstr "上傳金鑰"
-#: htdocs/luci-static/resources/fchomo/listeners.js:970
-#: htdocs/luci-static/resources/fchomo/listeners.js:985
-#: htdocs/luci-static/resources/fchomo/listeners.js:1010
+#: htdocs/luci-static/resources/fchomo/listeners.js:971
+#: htdocs/luci-static/resources/fchomo/listeners.js:986
+#: htdocs/luci-static/resources/fchomo/listeners.js:1011
#: htdocs/luci-static/resources/view/fchomo/global.js:306
-#: htdocs/luci-static/resources/view/fchomo/node.js:1122
-#: htdocs/luci-static/resources/view/fchomo/node.js:1136
+#: htdocs/luci-static/resources/view/fchomo/node.js:1133
+#: htdocs/luci-static/resources/view/fchomo/node.js:1147
msgid "Upload..."
msgstr "上傳..."
@@ -3355,11 +3372,11 @@ msgstr "用於解析 DNS 伺服器的網域。必須是 IP。"
msgid "Used to resolve the domain of the Proxy node."
msgstr "用於解析代理節點的網域。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1040
+#: htdocs/luci-static/resources/view/fchomo/node.js:1051
msgid "Used to verify the hostname on the returned certificates."
msgstr "用於驗證傳回的憑證上的主機名稱。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:441
+#: htdocs/luci-static/resources/view/fchomo/global.js:459
msgid "User Authentication"
msgstr "使用者認證"
@@ -3368,19 +3385,19 @@ msgid "User-hint is mandatory"
msgstr "User-hint 是必填項"
#: htdocs/luci-static/resources/fchomo/listeners.js:161
-#: htdocs/luci-static/resources/view/fchomo/node.js:257
+#: htdocs/luci-static/resources/view/fchomo/node.js:268
msgid "Username"
msgstr "使用者名稱"
-#: htdocs/luci-static/resources/view/fchomo/global.js:775
+#: htdocs/luci-static/resources/view/fchomo/global.js:793
msgid "Users filter mode"
msgstr "使用者過濾模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1304
+#: htdocs/luci-static/resources/view/fchomo/node.js:1315
msgid "V2ray HTTPUpgrade"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1309
+#: htdocs/luci-static/resources/view/fchomo/node.js:1320
msgid "V2ray HTTPUpgrade fast open"
msgstr ""
@@ -3394,33 +3411,33 @@ msgstr ""
msgid "VMess"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1624
-#: htdocs/luci-static/resources/view/fchomo/node.js:1912
+#: htdocs/luci-static/resources/view/fchomo/node.js:1638
+#: htdocs/luci-static/resources/view/fchomo/node.js:1989
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:328
msgid "Value"
msgstr "可視化值"
-#: htdocs/luci-static/resources/fchomo.js:362
+#: htdocs/luci-static/resources/fchomo.js:370
msgid "Verify if given"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:462
-#: htdocs/luci-static/resources/fchomo/listeners.js:594
-#: htdocs/luci-static/resources/view/fchomo/node.js:518
-#: htdocs/luci-static/resources/view/fchomo/node.js:855
+#: htdocs/luci-static/resources/fchomo/listeners.js:463
+#: htdocs/luci-static/resources/fchomo/listeners.js:595
+#: htdocs/luci-static/resources/view/fchomo/node.js:529
+#: htdocs/luci-static/resources/view/fchomo/node.js:866
msgid "Version"
msgstr "版本"
-#: htdocs/luci-static/resources/view/fchomo/node.js:863
+#: htdocs/luci-static/resources/view/fchomo/node.js:874
msgid "Version hint"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:120
-#: htdocs/luci-static/resources/view/fchomo/node.js:223
+#: htdocs/luci-static/resources/view/fchomo/node.js:234
msgid "Vless Encryption fields"
msgstr "Vless Encryption 欄位"
-#: htdocs/luci-static/resources/fchomo.js:399
+#: htdocs/luci-static/resources/fchomo.js:407
msgid "Wait a random 0-111 milliseconds with 75% probability."
msgstr "以 75% 的機率等待隨機 0-111 毫秒。"
@@ -3428,16 +3445,16 @@ msgstr "以 75% 的機率等待隨機 0-111 毫秒。"
msgid "Warning"
msgstr "警告"
-#: htdocs/luci-static/resources/fchomo/listeners.js:440
-#: htdocs/luci-static/resources/fchomo/listeners.js:1115
-#: htdocs/luci-static/resources/fchomo/listeners.js:1124
-#: htdocs/luci-static/resources/fchomo/listeners.js:1131
-#: htdocs/luci-static/resources/view/fchomo/node.js:472
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
-#: htdocs/luci-static/resources/view/fchomo/node.js:1200
+#: htdocs/luci-static/resources/fchomo/listeners.js:441
+#: htdocs/luci-static/resources/fchomo/listeners.js:1116
+#: htdocs/luci-static/resources/fchomo/listeners.js:1125
+#: htdocs/luci-static/resources/fchomo/listeners.js:1132
+#: htdocs/luci-static/resources/view/fchomo/node.js:483
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
#: htdocs/luci-static/resources/view/fchomo/node.js:1211
-#: htdocs/luci-static/resources/view/fchomo/node.js:1218
-#: htdocs/luci-static/resources/view/fchomo/node.js:1224
+#: htdocs/luci-static/resources/view/fchomo/node.js:1222
+#: htdocs/luci-static/resources/view/fchomo/node.js:1229
+#: htdocs/luci-static/resources/view/fchomo/node.js:1235
msgid "WebSocket"
msgstr ""
@@ -3445,7 +3462,7 @@ msgstr ""
msgid "When used as a server, HomeProxy is a better choice."
msgstr "用作服務端時,HomeProxy 是更好的選擇。"
-#: htdocs/luci-static/resources/view/fchomo/global.js:777
+#: htdocs/luci-static/resources/view/fchomo/global.js:795
msgid "White list"
msgstr "白名單"
@@ -3453,48 +3470,48 @@ msgstr "白名單"
msgid "WireGuard"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:774
+#: htdocs/luci-static/resources/view/fchomo/node.js:785
msgid "WireGuard peer public key."
msgstr "WireGuard 對端公鑰。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:781
+#: htdocs/luci-static/resources/view/fchomo/node.js:792
msgid "WireGuard pre-shared key."
msgstr "WireGuard 預先共用金鑰。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:766
+#: htdocs/luci-static/resources/view/fchomo/node.js:777
msgid "WireGuard requires base64-encoded private keys."
msgstr "WireGuard 要求 base64 編碼的私鑰。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1116
-#: htdocs/luci-static/resources/fchomo/listeners.js:1125
-#: htdocs/luci-static/resources/view/fchomo/node.js:1201
-#: htdocs/luci-static/resources/view/fchomo/node.js:1219
+#: htdocs/luci-static/resources/fchomo/listeners.js:1117
+#: htdocs/luci-static/resources/fchomo/listeners.js:1126
+#: htdocs/luci-static/resources/view/fchomo/node.js:1212
+#: htdocs/luci-static/resources/view/fchomo/node.js:1230
msgid "XHTTP"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1161
-#: htdocs/luci-static/resources/view/fchomo/node.js:1314
+#: htdocs/luci-static/resources/fchomo/listeners.js:1162
+#: htdocs/luci-static/resources/view/fchomo/node.js:1325
msgid "XHTTP mode"
msgstr "XHTTP 模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1345
+#: htdocs/luci-static/resources/view/fchomo/node.js:1356
msgid "XMUX"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1350
-#: htdocs/luci-static/resources/view/fchomo/node.js:1355
-#: htdocs/luci-static/resources/view/fchomo/node.js:1360
-#: htdocs/luci-static/resources/view/fchomo/node.js:1365
-#: htdocs/luci-static/resources/view/fchomo/node.js:1370
-#: htdocs/luci-static/resources/view/fchomo/node.js:1375
+#: htdocs/luci-static/resources/view/fchomo/node.js:1361
+#: htdocs/luci-static/resources/view/fchomo/node.js:1366
+#: htdocs/luci-static/resources/view/fchomo/node.js:1371
+#: htdocs/luci-static/resources/view/fchomo/node.js:1376
+#: htdocs/luci-static/resources/view/fchomo/node.js:1381
+#: htdocs/luci-static/resources/view/fchomo/node.js:1386
msgid "XMUX:"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:698
+#: htdocs/luci-static/resources/fchomo/listeners.js:699
msgid "XOR mode"
msgstr "XOR 模式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:688
+#: htdocs/luci-static/resources/view/fchomo/node.js:699
msgid "Xudp (Xray-core)"
msgstr ""
@@ -3502,7 +3519,7 @@ msgstr ""
msgid "Yaml text"
msgstr "Yaml 格式文本"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1779
+#: htdocs/luci-static/resources/view/fchomo/node.js:1856
msgid "Yes"
msgstr ""
@@ -3510,27 +3527,43 @@ msgstr ""
msgid "YouTube"
msgstr "YouTube"
-#: htdocs/luci-static/resources/fchomo.js:1691
+#: htdocs/luci-static/resources/fchomo.js:1699
msgid "Your %s was successfully uploaded. Size: %sB."
msgstr "您的 %s 已成功上傳。大小:%sB。"
-#: htdocs/luci-static/resources/fchomo.js:335
-#: htdocs/luci-static/resources/fchomo.js:348
-#: htdocs/luci-static/resources/fchomo.js:353
-#: htdocs/luci-static/resources/view/fchomo/node.js:668
+#: htdocs/luci-static/resources/fchomo.js:343
+#: htdocs/luci-static/resources/fchomo.js:356
+#: htdocs/luci-static/resources/fchomo.js:361
+#: htdocs/luci-static/resources/view/fchomo/node.js:679
msgid "aes-128-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:336
+#: htdocs/luci-static/resources/fchomo.js:344
msgid "aes-192-gcm"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:337
-#: htdocs/luci-static/resources/fchomo.js:354
+#: htdocs/luci-static/resources/fchomo.js:345
+#: htdocs/luci-static/resources/fchomo.js:362
msgid "aes-256-gcm"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:665
+#: htdocs/luci-static/resources/view/fchomo/node.js:1718
+msgid "age private key"
+msgstr "age 私鑰"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:1777
+msgid "age public key"
+msgstr "age 公鑰"
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:21
+msgid "age-mlkem768-x25519"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:20
+msgid "age-x25519"
+msgstr ""
+
+#: htdocs/luci-static/resources/view/fchomo/node.js:676
msgid "auto"
msgstr "自動"
@@ -3538,19 +3571,19 @@ msgstr "自動"
msgid "bbr"
msgstr "bbr"
-#: htdocs/luci-static/resources/fchomo/listeners.js:972
-#: htdocs/luci-static/resources/fchomo/listeners.js:1012
-#: htdocs/luci-static/resources/view/fchomo/node.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:973
+#: htdocs/luci-static/resources/fchomo/listeners.js:1013
+#: htdocs/luci-static/resources/view/fchomo/node.js:1135
msgid "certificate"
msgstr "憑證"
-#: htdocs/luci-static/resources/fchomo.js:338
-#: htdocs/luci-static/resources/fchomo.js:349
-#: htdocs/luci-static/resources/fchomo.js:355
+#: htdocs/luci-static/resources/fchomo.js:346
+#: htdocs/luci-static/resources/fchomo.js:357
+#: htdocs/luci-static/resources/fchomo.js:363
msgid "chacha20-ietf-poly1305"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:669
+#: htdocs/luci-static/resources/view/fchomo/node.js:680
msgid "chacha20-poly1305"
msgstr ""
@@ -3558,62 +3591,62 @@ msgstr ""
msgid "cubic"
msgstr "cubic"
-#: htdocs/luci-static/resources/fchomo/listeners.js:650
-#: htdocs/luci-static/resources/fchomo/listeners.js:681
+#: htdocs/luci-static/resources/fchomo/listeners.js:651
+#: htdocs/luci-static/resources/fchomo/listeners.js:682
msgid "decryption"
msgstr "decryption"
-#: htdocs/luci-static/resources/view/fchomo/global.js:811
+#: htdocs/luci-static/resources/view/fchomo/global.js:829
msgid "dnsmasq selects upstream on its own. (may affect CDN accuracy)"
msgstr "dnsmasq 自行選擇上游服務器。 (可能影響 CDN 準確性)"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1767
+#: htdocs/luci-static/resources/view/fchomo/node.js:1844
msgid "down"
msgstr "Hysteria 下載速率"
-#: htdocs/luci-static/resources/fchomo/listeners.js:685
-#: htdocs/luci-static/resources/view/fchomo/node.js:913
-#: htdocs/luci-static/resources/view/fchomo/node.js:936
+#: htdocs/luci-static/resources/fchomo/listeners.js:686
+#: htdocs/luci-static/resources/view/fchomo/node.js:924
+#: htdocs/luci-static/resources/view/fchomo/node.js:947
msgid "encryption"
msgstr "encryption"
-#: htdocs/luci-static/resources/fchomo/listeners.js:424
-#: htdocs/luci-static/resources/view/fchomo/node.js:456
+#: htdocs/luci-static/resources/fchomo/listeners.js:425
+#: htdocs/luci-static/resources/view/fchomo/node.js:467
msgid "false = bandwidth optimized downlink; true = pure Sudoku downlink."
msgstr "false = 頻寬最佳化下行 true = 純 Sudoku 下行。"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1114
-#: htdocs/luci-static/resources/fchomo/listeners.js:1123
-#: htdocs/luci-static/resources/fchomo/listeners.js:1130
-#: htdocs/luci-static/resources/view/fchomo/node.js:1199
+#: htdocs/luci-static/resources/fchomo/listeners.js:1115
+#: htdocs/luci-static/resources/fchomo/listeners.js:1124
+#: htdocs/luci-static/resources/fchomo/listeners.js:1131
#: htdocs/luci-static/resources/view/fchomo/node.js:1210
-#: htdocs/luci-static/resources/view/fchomo/node.js:1217
-#: htdocs/luci-static/resources/view/fchomo/node.js:1223
+#: htdocs/luci-static/resources/view/fchomo/node.js:1221
+#: htdocs/luci-static/resources/view/fchomo/node.js:1228
+#: htdocs/luci-static/resources/view/fchomo/node.js:1234
msgid "gRPC"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1280
+#: htdocs/luci-static/resources/view/fchomo/node.js:1291
msgid "gRPC User-Agent"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1285
+#: htdocs/luci-static/resources/view/fchomo/node.js:1296
msgid "gRPC ping interval"
msgstr "gRPC ping 間隔"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1155
-#: htdocs/luci-static/resources/view/fchomo/node.js:1276
+#: htdocs/luci-static/resources/fchomo/listeners.js:1156
+#: htdocs/luci-static/resources/view/fchomo/node.js:1287
msgid "gRPC service name"
msgstr "gRPC 服務名稱"
-#: htdocs/luci-static/resources/view/fchomo/global.js:499
+#: htdocs/luci-static/resources/view/fchomo/global.js:517
msgid "gVisor"
msgstr "gVisor"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1392
+#: htdocs/luci-static/resources/view/fchomo/node.js:1403
msgid "h2mux"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:850
+#: htdocs/luci-static/resources/fchomo/listeners.js:851
msgid "least one keypair required"
msgstr "至少需要一對密鑰"
@@ -3627,17 +3660,17 @@ msgstr "metacubexd"
#: htdocs/luci-static/resources/view/fchomo/client.js:1490
#: htdocs/luci-static/resources/view/fchomo/client.js:1721
#: htdocs/luci-static/resources/view/fchomo/client.js:1777
-#: htdocs/luci-static/resources/view/fchomo/node.js:1590
+#: htdocs/luci-static/resources/view/fchomo/node.js:1604
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:247
msgid "mihomo config"
msgstr "mihomo 配置"
-#: htdocs/luci-static/resources/fchomo.js:381
+#: htdocs/luci-static/resources/fchomo.js:389
msgid "mlkem768x25519plus"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1464
-#: htdocs/luci-static/resources/view/fchomo/node.js:1745
+#: htdocs/luci-static/resources/view/fchomo/node.js:1475
+#: htdocs/luci-static/resources/view/fchomo/node.js:1822
msgid "mpTCP"
msgstr "多路徑 TCP (mpTCP)"
@@ -3649,20 +3682,20 @@ msgstr "new_reno"
msgid "no-resolve"
msgstr "no-resolve"
-#: htdocs/luci-static/resources/fchomo.js:1426
-#: htdocs/luci-static/resources/fchomo.js:1521
-#: htdocs/luci-static/resources/fchomo.js:1556
-#: htdocs/luci-static/resources/fchomo.js:1584
+#: htdocs/luci-static/resources/fchomo.js:1434
+#: htdocs/luci-static/resources/fchomo.js:1529
+#: htdocs/luci-static/resources/fchomo.js:1564
+#: htdocs/luci-static/resources/fchomo.js:1592
msgid "non-empty value"
msgstr "非空值"
-#: htdocs/luci-static/resources/fchomo.js:333
-#: htdocs/luci-static/resources/fchomo.js:347
-#: htdocs/luci-static/resources/fchomo.js:359
-#: htdocs/luci-static/resources/fchomo/listeners.js:560
-#: htdocs/luci-static/resources/view/fchomo/node.js:666
-#: htdocs/luci-static/resources/view/fchomo/node.js:686
-#: htdocs/luci-static/resources/view/fchomo/node.js:824
+#: htdocs/luci-static/resources/fchomo.js:341
+#: htdocs/luci-static/resources/fchomo.js:355
+#: htdocs/luci-static/resources/fchomo.js:367
+#: htdocs/luci-static/resources/fchomo/listeners.js:561
+#: htdocs/luci-static/resources/view/fchomo/node.js:677
+#: htdocs/luci-static/resources/view/fchomo/node.js:697
+#: htdocs/luci-static/resources/view/fchomo/node.js:835
#: htdocs/luci-static/resources/view/fchomo/ruleset.js:324
msgid "none"
msgstr "無"
@@ -3675,45 +3708,45 @@ msgstr "未找到"
msgid "not included \",\""
msgstr "不包含 \",\""
-#: htdocs/luci-static/resources/fchomo.js:219
-#: htdocs/luci-static/resources/fchomo/listeners.js:606
+#: htdocs/luci-static/resources/fchomo.js:227
#: htdocs/luci-static/resources/fchomo/listeners.js:607
+#: htdocs/luci-static/resources/fchomo/listeners.js:608
msgid "null"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:561
-#: htdocs/luci-static/resources/view/fchomo/node.js:825
+#: htdocs/luci-static/resources/fchomo/listeners.js:562
+#: htdocs/luci-static/resources/view/fchomo/node.js:836
msgid "obfs-simple"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "only applies when %s is %s."
msgstr "僅當 %s 為 %s 時適用。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:501
+#: htdocs/luci-static/resources/view/fchomo/node.js:512
msgid "only applies when %s is not %s."
msgstr "僅當 %s 不為 %s 時適用。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1725
+#: htdocs/luci-static/resources/view/fchomo/node.js:1802
msgid "override.proxy-name"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:687
+#: htdocs/luci-static/resources/view/fchomo/node.js:698
msgid "packet addr (v2ray-core v5+)"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1165
-#: htdocs/luci-static/resources/view/fchomo/node.js:1318
+#: htdocs/luci-static/resources/fchomo/listeners.js:1166
+#: htdocs/luci-static/resources/view/fchomo/node.js:1329
msgid "packet-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:438
-#: htdocs/luci-static/resources/view/fchomo/node.js:470
+#: htdocs/luci-static/resources/fchomo/listeners.js:439
+#: htdocs/luci-static/resources/view/fchomo/node.js:481
msgid "poll"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:987
-#: htdocs/luci-static/resources/view/fchomo/node.js:1138
+#: htdocs/luci-static/resources/fchomo/listeners.js:988
+#: htdocs/luci-static/resources/view/fchomo/node.js:1149
msgid "private key"
msgstr "私鑰"
@@ -3726,7 +3759,7 @@ msgstr "razord-meta"
msgid "requires front-end adaptation using the API."
msgstr "需要使用 API 的前端適配。"
-#: htdocs/luci-static/resources/view/fchomo/node.js:829
+#: htdocs/luci-static/resources/view/fchomo/node.js:840
msgid "restls"
msgstr ""
@@ -3734,17 +3767,17 @@ msgstr ""
msgid "rule-set"
msgstr "規則集"
-#: htdocs/luci-static/resources/fchomo/listeners.js:562
-#: htdocs/luci-static/resources/view/fchomo/node.js:828
+#: htdocs/luci-static/resources/fchomo/listeners.js:563
+#: htdocs/luci-static/resources/view/fchomo/node.js:839
msgid "shadow-tls"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:1390
+#: htdocs/luci-static/resources/view/fchomo/node.js:1401
msgid "smux"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:437
-#: htdocs/luci-static/resources/view/fchomo/node.js:469
+#: htdocs/luci-static/resources/fchomo/listeners.js:438
+#: htdocs/luci-static/resources/view/fchomo/node.js:480
msgid "split-stream"
msgstr ""
@@ -3752,21 +3785,21 @@ msgstr ""
msgid "src"
msgstr "src"
-#: htdocs/luci-static/resources/fchomo/listeners.js:1163
-#: htdocs/luci-static/resources/view/fchomo/node.js:1316
+#: htdocs/luci-static/resources/fchomo/listeners.js:1164
+#: htdocs/luci-static/resources/view/fchomo/node.js:1327
msgid "stream-one"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1164
-#: htdocs/luci-static/resources/view/fchomo/node.js:1317
+#: htdocs/luci-static/resources/fchomo/listeners.js:1165
+#: htdocs/luci-static/resources/view/fchomo/node.js:1328
msgid "stream-up"
msgstr ""
-#: htdocs/luci-static/resources/fchomo/listeners.js:1180
+#: htdocs/luci-static/resources/fchomo/listeners.js:1181
msgid "stream-up server seconds"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:503
+#: htdocs/luci-static/resources/view/fchomo/node.js:514
msgid "stream/poll/auto"
msgstr ""
@@ -3778,100 +3811,100 @@ msgstr ""
msgid "unchecked"
msgstr "未檢查"
-#: htdocs/luci-static/resources/fchomo.js:445
+#: htdocs/luci-static/resources/fchomo.js:453
msgid "unique UCI identifier"
msgstr "獨立 UCI 識別"
-#: htdocs/luci-static/resources/fchomo.js:448
+#: htdocs/luci-static/resources/fchomo.js:456
msgid "unique identifier"
msgstr "獨立標識"
-#: htdocs/luci-static/resources/fchomo.js:1593
+#: htdocs/luci-static/resources/fchomo.js:1601
msgid "unique value"
msgstr "獨立值"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1761
+#: htdocs/luci-static/resources/view/fchomo/node.js:1838
msgid "up"
msgstr "Hysteria 上傳速率"
-#: htdocs/luci-static/resources/fchomo/listeners.js:463
-#: htdocs/luci-static/resources/fchomo/listeners.js:595
-#: htdocs/luci-static/resources/view/fchomo/node.js:519
-#: htdocs/luci-static/resources/view/fchomo/node.js:561
-#: htdocs/luci-static/resources/view/fchomo/node.js:856
-#: htdocs/luci-static/resources/view/fchomo/node.js:906
-msgid "v1"
-msgstr ""
-
#: htdocs/luci-static/resources/fchomo/listeners.js:464
#: htdocs/luci-static/resources/fchomo/listeners.js:596
-#: htdocs/luci-static/resources/view/fchomo/node.js:520
-#: htdocs/luci-static/resources/view/fchomo/node.js:857
-#: htdocs/luci-static/resources/view/fchomo/node.js:907
-msgid "v2"
+#: htdocs/luci-static/resources/view/fchomo/node.js:530
+#: htdocs/luci-static/resources/view/fchomo/node.js:572
+#: htdocs/luci-static/resources/view/fchomo/node.js:867
+#: htdocs/luci-static/resources/view/fchomo/node.js:917
+msgid "v1"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:465
#: htdocs/luci-static/resources/fchomo/listeners.js:597
-#: htdocs/luci-static/resources/view/fchomo/node.js:521
-#: htdocs/luci-static/resources/view/fchomo/node.js:858
-msgid "v3"
+#: htdocs/luci-static/resources/view/fchomo/node.js:531
+#: htdocs/luci-static/resources/view/fchomo/node.js:868
+#: htdocs/luci-static/resources/view/fchomo/node.js:918
+msgid "v2"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:466
-#: htdocs/luci-static/resources/view/fchomo/node.js:522
-msgid "v4"
+#: htdocs/luci-static/resources/fchomo/listeners.js:598
+#: htdocs/luci-static/resources/view/fchomo/node.js:532
+#: htdocs/luci-static/resources/view/fchomo/node.js:869
+msgid "v3"
msgstr ""
#: htdocs/luci-static/resources/fchomo/listeners.js:467
-#: htdocs/luci-static/resources/view/fchomo/node.js:523
+#: htdocs/luci-static/resources/view/fchomo/node.js:533
+msgid "v4"
+msgstr ""
+
+#: htdocs/luci-static/resources/fchomo/listeners.js:468
+#: htdocs/luci-static/resources/view/fchomo/node.js:534
msgid "v5"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1473
-#: htdocs/luci-static/resources/fchomo.js:1476
+#: htdocs/luci-static/resources/fchomo.js:1481
+#: htdocs/luci-static/resources/fchomo.js:1484
msgid "valid JSON format"
msgstr "有效的 JSON 格式"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1098
+#: htdocs/luci-static/resources/view/fchomo/node.js:1109
msgid "valid SHA256 string with %d characters"
msgstr "包含 %d 個字元的有效 SHA256 字串"
-#: htdocs/luci-static/resources/fchomo.js:1498
-#: htdocs/luci-static/resources/fchomo.js:1501
+#: htdocs/luci-static/resources/fchomo.js:1506
+#: htdocs/luci-static/resources/fchomo.js:1509
msgid "valid URL"
msgstr "有效網址"
-#: htdocs/luci-static/resources/fchomo.js:1511
+#: htdocs/luci-static/resources/fchomo.js:1519
msgid "valid base64 key with %d characters"
msgstr "包含 %d 個字元的有效 base64 金鑰"
-#: htdocs/luci-static/resources/fchomo.js:1571
-#: htdocs/luci-static/resources/fchomo.js:1577
+#: htdocs/luci-static/resources/fchomo.js:1579
+#: htdocs/luci-static/resources/fchomo.js:1585
msgid "valid format: 2x, 2p, 4v"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1558
+#: htdocs/luci-static/resources/fchomo.js:1566
msgid "valid key length with %d characters"
msgstr "包含 %d 個字元的有效金鑰"
-#: htdocs/luci-static/resources/fchomo.js:1436
+#: htdocs/luci-static/resources/fchomo.js:1444
msgid "valid port value"
msgstr "有效連接埠值"
-#: htdocs/luci-static/resources/fchomo.js:1486
+#: htdocs/luci-static/resources/fchomo.js:1494
msgid "valid uuid"
msgstr "有效 uuid"
-#: htdocs/luci-static/resources/fchomo.js:405
+#: htdocs/luci-static/resources/fchomo.js:413
msgid "vless-mlkem768"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:404
+#: htdocs/luci-static/resources/fchomo.js:412
msgid "vless-x25519"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:339
+#: htdocs/luci-static/resources/fchomo.js:347
msgid "xchacha20-ietf-poly1305"
msgstr ""
@@ -3879,7 +3912,7 @@ msgstr ""
msgid "yacd-meta"
msgstr "yacd-meta"
-#: htdocs/luci-static/resources/view/fchomo/node.js:1391
+#: htdocs/luci-static/resources/view/fchomo/node.js:1402
msgid "yamux"
msgstr ""
@@ -3887,11 +3920,11 @@ msgstr ""
msgid "zashboard"
msgstr ""
-#: htdocs/luci-static/resources/view/fchomo/node.js:667
+#: htdocs/luci-static/resources/view/fchomo/node.js:678
msgid "zero"
msgstr ""
-#: htdocs/luci-static/resources/fchomo.js:1254
+#: htdocs/luci-static/resources/fchomo.js:1262
msgid "🡇"
msgstr ""
diff --git a/luci-app-fchomo/root/usr/libexec/fchomo/update_resources.sh b/luci-app-fchomo/root/usr/libexec/fchomo/update_resources.sh
index af50d353..db83d9b9 100755
--- a/luci-app-fchomo/root/usr/libexec/fchomo/update_resources.sh
+++ b/luci-app-fchomo/root/usr/libexec/fchomo/update_resources.sh
@@ -3,6 +3,7 @@
. /usr/share/libubox/jshn.sh
CONF="fchomo"
+GITHUB_TOKEN="$(uci -q get $CONF.resources.github_token)"
RESOURCES_DIR="/etc/$CONF/resources"
VER_PATH="/etc/$CONF/resources.json"
@@ -40,6 +41,7 @@ check_dashboard_update() {
local dashrepoid="$(echo -n "$dashrepo" | sed 's|\W|_|g' | tr 'A-Z' 'a-z')"
local lock="$RUN_DIR/update_resources-$dashtype.lock"
local wget="wget --tries=1 --timeout=10 -q"
+ [ -z "$GITHUB_TOKEN" ] || local github_token="--header=Authorization: Bearer $GITHUB_TOKEN"
exec 200>"$lock"
if ! flock -n 200 &> "/dev/null"; then
@@ -47,9 +49,9 @@ check_dashboard_update() {
return 2
fi
- local dash_ver="$($wget -O- "https://api.github.com/repos/$dashrepo/releases/latest" | jsonfilter -e "@.tag_name" 2>/dev/null)"
+ local dash_ver="$($wget "${github_token:--q}" -O- "https://api.github.com/repos/$dashrepo/releases/latest" | jsonfilter -qe "@.tag_name" 2>/dev/null)"
[ -n "$dash_ver" ] || {
- dash_ver="$($wget -O- "https://api.github.com/repos/$dashrepo/tags" | jsonfilter -e "@[*].name" | head -n1)"
+ dash_ver="$($wget "${github_token:--q}" -O- "https://api.github.com/repos/$dashrepo/tags" | jsonfilter -qe "@[*].name" | head -n1)"
}
if [ -z "$dash_ver" ]; then
log "[$(to_upper "$dashtype")] [$dashrepo] Failed to get the latest version, please retry later."
@@ -65,7 +67,7 @@ check_dashboard_update() {
log "[$(to_upper "$dashtype")] [$dashrepo] Local version: $local_dash_ver, latest version: $dash_ver."
fi
- if ! $wget "https://codeload.github.com/$dashrepo/tar.gz/refs/heads/gh-pages" -O "$RUN_DIR/$dashtype.tgz" || ! tar -tzf "$RUN_DIR/$dashtype.tgz" >/dev/null; then
+ if ! $wget "${github_token:--q}" "https://codeload.github.com/$dashrepo/tar.gz/refs/heads/gh-pages" -O "$RUN_DIR/$dashtype.tgz" || ! tar -tzf "$RUN_DIR/$dashtype.tgz" >/dev/null; then
rm -f "$RUN_DIR/$dashtype.tgz"
log "[$(to_upper "$dashtype")] [$dashrepo] Update failed."
return 1
@@ -90,6 +92,7 @@ check_geodata_update() {
local georepo="$2"
local lock="$RUN_DIR/update_resources-$geotype.lock"
local wget="wget --tries=1 --timeout=10 -q"
+ [ -z "$GITHUB_TOKEN" ] || local github_token="--header=Authorization: Bearer $GITHUB_TOKEN"
exec 200>"$lock"
if ! flock -n 200 &> "/dev/null"; then
@@ -97,7 +100,7 @@ check_geodata_update() {
return 2
fi
- local geodata_ver="$($wget -O- "https://api.github.com/repos/$georepo/releases/latest" | jsonfilter -e "@.tag_name")"
+ local geodata_ver="$($wget "${github_token:--q}" -O- "https://api.github.com/repos/$georepo/releases/latest" | jsonfilter -qe "@.tag_name")"
if [ -z "$geodata_ver" ]; then
log "[$(to_upper "$geotype")] Failed to get the latest version, please retry later."
return 1
@@ -113,8 +116,8 @@ check_geodata_update() {
fi
local geodata_hash
- $wget "https://github.com/$georepo/releases/download/$geodata_ver/$geotype.dat" -O "$RUN_DIR/$geotype.dat"
- geodata_hash="$($wget -O- "https://github.com/$georepo/releases/download/$geodata_ver/$geotype.dat.sha256sum" | awk '{print $1}')"
+ $wget "${github_token:--q}" "https://github.com/$georepo/releases/download/$geodata_ver/$geotype.dat" -O "$RUN_DIR/$geotype.dat"
+ geodata_hash="$($wget "${github_token:--q}" -O- "https://github.com/$georepo/releases/download/$geodata_ver/$geotype.dat.sha256sum" | awk '{print $1}')"
if ! echo -e "$geodata_hash $RUN_DIR/$geotype.dat" | sha256sum -s -c -; then
rm -f "$RUN_DIR/$geotype.dat"
log "[$(to_upper "$geotype")] Update failed."
@@ -139,6 +142,7 @@ check_list_update() {
local listname="$4"
local lock="$RUN_DIR/update_resources-$listtype.lock"
local wget="wget --tries=1 --timeout=10 -q"
+ [ -z "$GITHUB_TOKEN" ] || local github_token="--header=Authorization: Bearer $GITHUB_TOKEN"
exec 200>"$lock"
if ! flock -n 200 &> "/dev/null"; then
@@ -146,9 +150,9 @@ check_list_update() {
return 2
fi
- local list_info="$($wget -O- "https://api.github.com/repos/$listrepo/commits?sha=$listref&path=$listname")"
- local list_sha="$(echo -e "$list_info" | jsonfilter -e "@[0].sha")"
- local list_ver="$(echo -e "$list_info" | jsonfilter -e "@[0].commit.message" | grep -Eo "[0-9-]+" | tr -d ' \n-')"
+ local list_info="$($wget "${github_token:--q}" -O- "https://api.github.com/repos/$listrepo/commits?sha=$listref&path=$listname")"
+ local list_sha="$(echo -e "$list_info" | jsonfilter -qe "@[0].sha")"
+ local list_ver="$(echo -e "$list_info" | jsonfilter -qe "@[0].commit.message" | grep -Eo "[0-9-]+" | tr -d ' \n-')"
if [ -z "$list_sha" ] || [ -z "$list_ver" ]; then
log "[$(to_upper "$listtype")] Failed to get the latest version, please retry later."
return 1
diff --git a/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc b/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc
index b7ee461f..42119438 100644
--- a/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc
+++ b/luci-app-fchomo/root/usr/share/fchomo/generate_client.uc
@@ -121,18 +121,7 @@ function parse_filter(cfg) {
return cfg;
}
-function get_proxynode(cfg) {
- if (isEmpty(cfg))
- return null;
-
- const label = uci.get(uciconf, cfg, 'label');
- if (isEmpty(label))
- die(sprintf("%s's label is missing, please check your configuration.", cfg));
- else
- return label;
-}
-
-function get_proxygroup(cfg) {
+function get_proxy(cfg) {
if (isEmpty(cfg))
return null;
@@ -164,7 +153,7 @@ function get_nameserver(cfg, detour) {
});
} else
push(servers, replace(dnsservers[k]?.address || '', /#detour=([^&]+)/, (m, c1) => {
- return '#' + urlencode(get_proxygroup(detour || c1));
+ return '#' + urlencode(get_proxy(detour || c1));
}));
}
@@ -177,7 +166,7 @@ function parse_entry(cfg) {
let rule = json(cfg);
if (rule.detour)
- rule.detour = get_proxygroup(rule.detour);
+ rule.detour = get_proxy(rule.detour);
function _payloadStrategy(payload) {
// LOGIC_TYPE,((payload1),(payload2))
@@ -225,7 +214,7 @@ uci.foreach(uciconf, ucichain, (cfg) => {
return;
dialerproxy[identifier] = {
- detour: get_proxygroup(cfg.chain_tail_group) || get_proxynode(cfg.chain_tail)
+ detour: get_proxy(cfg.chain_tail_group) || get_proxy(cfg.chain_tail)
};
});
@@ -349,7 +338,7 @@ uci.foreach(uciconf, uciinbd, (cfg) => {
if (cfg.enabled === '0')
return;
- push(config.listeners, parseListener(cfg, true, get_proxygroup(cfg.proxy)));
+ push(config.listeners, parseListener(cfg, true, get_proxy(cfg.proxy)));
});
/* Tun settings */
if (match(proxy_mode, /tun/))
@@ -738,14 +727,14 @@ uci.foreach(uciconf, ucipgrp, (cfg) => {
name: cfg.label,
type: cfg.type,
proxies: [
- ...map(cfg.groups || [], cfg => get_proxygroup(cfg)),
- ...map(cfg.proxies || [], cfg => get_proxynode(cfg))
+ ...map(cfg.groups || [], cfg => get_proxy(cfg)),
+ ...map(cfg.proxies || [], cfg => get_proxy(cfg))
],
use: cfg.use,
"include-all": strToBool(cfg.include_all),
"include-all-proxies": strToBool(cfg.include_all_proxies),
"include-all-providers": strToBool(cfg.include_all_providers),
- "empty-fallback": cfg.empty_fallback ? get_proxygroup(cfg.empty_fallback) : null,
+ "empty-fallback": cfg.empty_fallback ? get_proxy(cfg.empty_fallback) : null,
// Url-test fields
tolerance: (cfg.type === 'url-test') ? strToInt(cfg.tolerance) ?? 150 : null,
// Load-balance fields
@@ -786,7 +775,8 @@ uci.foreach(uciconf, uciprov, (cfg) => {
url: cfg.url,
"size-limit": bytesizeToByte(cfg.size_limit) || null,
interval: (cfg.type === 'http') ? durationToSecond(cfg.interval) ?? 86400 : null,
- proxy: get_proxygroup(cfg.proxy),
+ proxy: get_proxy(cfg.proxy),
+ "age-secret-key": cfg.age_private_key,
header: cfg.header ? json(cfg.header) : null,
/* Health fields */
"health-check": cfg.health_enable === '0' ? {enable: false} : {
@@ -843,7 +833,7 @@ uci.foreach(uciconf, ucirule, (cfg) => {
"path-in-bundle": cfg.path_in_bundle,
"size-limit": bytesizeToByte(cfg.size_limit) || null,
interval: (cfg.type === 'http') ? durationToSecond(cfg.interval) ?? 259200 : null,
- proxy: get_proxygroup(cfg.proxy),
+ proxy: get_proxy(cfg.proxy),
header: cfg.header ? json(cfg.header) : null
})
};
diff --git a/luci-app-fchomo/root/usr/share/luci/menu.d/luci-app-fchomo.json b/luci-app-fchomo/root/usr/share/luci/menu.d/luci-app-fchomo.json
index e6b7f5ab..d9f5947e 100644
--- a/luci-app-fchomo/root/usr/share/luci/menu.d/luci-app-fchomo.json
+++ b/luci-app-fchomo/root/usr/share/luci/menu.d/luci-app-fchomo.json
@@ -42,8 +42,8 @@
"path": "fchomo/inbound"
}
},
- "admin/services/fchomo/node": {
- "title": "Node",
+ "admin/services/fchomo/outbound": {
+ "title": "Outbound",
"order": 30,
"action": {
"type": "view",
diff --git a/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo b/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo
index a258d915..973b0b55 100644
--- a/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo
+++ b/luci-app-fchomo/root/usr/share/rpcd/ucode/luci.fchomo
@@ -2,9 +2,9 @@
'use strict';
-import { access, lsdir, lstat, popen, readfile, writefile } from 'fs';
+import { access, lsdir, lstat, mkstemp, popen, readfile, writefile } from 'fs';
import {
- shellQuote, isBinary, yqRead, yqReadFile,
+ shellQuote, isBinary, executeCommand, yqRead, yqReadFile,
HM_DIR, EXE_DIR, SDL_DIR, RUN_DIR
} from 'fchomo';
@@ -44,13 +44,26 @@ const methods = {
args: { type: 'type', params: 'params' },
call: function(req) {
/* https://github.com/MetaCubeX/mihomo/blob/Alpha/component/generator/cmd.go */
- if (!(req.args?.type in ['uuid', 'reality-keypair', 'wg-keypair', 'ech-keypair', 'vless-mlkem768', 'vless-x25519', 'sudoku-keypair']))
+ if (!(req.args?.type in ['uuid',
+ 'reality-keypair', 'wg-keypair', 'sudoku-keypair',
+ 'age-x25519', 'age-mlkem768-x25519', 'age-convert',
+ 'vless-mlkem768', 'vless-x25519',
+ 'ech-keypair'])) {
return { result: false, error: 'illegal type' };
+ }
const type = req.args?.type;
+ let cmd = `generate ${type}`;
let result = {};
- const fd = popen('/usr/bin/mihomo generate ' + type + (req.args?.params ? ' ' + shellQuote(req.args.params) : ''));
+ if (type === 'age-x25519') {
+ cmd = 'age keygen';
+ } else if (type === 'age-mlkem768-x25519') {
+ cmd = 'age keygen-pq';
+ } else if (type === 'age-convert') {
+ cmd = 'age convert';
+ }
+ const fd = popen(`/usr/bin/mihomo ${cmd}` + (req.args?.params ? ' ' + shellQuote(req.args.params) : ''));
if (fd) {
for (let line = fd.read('line'); length(line); line = fd.read('line')) {
if (type === 'uuid')
@@ -62,6 +75,15 @@ const methods = {
let pub = match(trim(line), /PublicKey: (.*)/);
if (pub)
result.public_key = pub[1];
+ } else if (type in ['age-x25519', 'age-mlkem768-x25519']) {
+ let priv = match(trim(line), /AGE-SECRET-KEY-.*/);
+ if (priv)
+ result.private_key = priv[0];
+ let pub = match(trim(line), /# public key: (.*)/);
+ if (pub)
+ result.public_key = pub[1];
+ } else if (type in ['age-convert']) {
+ result.public_key = trim(line);
} else if (type in ['vless-x25519', 'vless-mlkem768']) {
let priv = match(trim(line), /PrivateKey: (.*)/);
if (priv)
@@ -96,6 +118,56 @@ const methods = {
}
},
+ age_crypto: {
+ args: { action: 'action', key: 'key', content: 'content'},
+ call: function(req) {
+ if (!(req.args?.action in ['decrypt', 'encrypt']))
+ return { result: false, error: 'illegal action' };
+
+ if (!req.args?.key)
+ return { result: false, error: 'illegal key' };
+
+ if (!req.args?.content)
+ return { result: '' };
+
+ let content = req.args?.content;
+ let infd = mkstemp();
+
+ if (content) {
+ content = trim(content);
+ content = replace(content, /\r\n?/g, '\n');
+ }
+ infd.write(content);
+
+ infd.seek();
+ const out = executeCommand(infd, '/usr/bin/mihomo age', req.args?.action, req.args?.key, '-', '-');
+ infd.close();
+
+ return out.exitcode === 0 ? { result: out.stdout } : { result: false, error: out.stderr };
+ }
+ },
+
+ age_crypto_file: {
+ args: { action: 'action', key: 'key', input: 'input', output: 'output'},
+ call: function(req) {
+ if (!(req.args?.action in ['decrypt', 'encrypt']))
+ return { result: false, error: 'illegal action' };
+
+ if (!req.args?.key)
+ return { result: false, error: 'illegal key' };
+
+ if ((!req.args?.input) || match(req.args?.input, /\.\.\//))
+ return { result: false, error: 'illegal input' };
+
+ if ((!req.args?.output) || match(req.args?.output, /\.\.\//))
+ return { result: false, error: 'illegal output' };
+
+ const out = executeCommand(null, '/usr/bin/mihomo age', req.args?.action, req.args?.key, req.args?.input, req.args?.output);
+
+ return out.exitcode === 0 ? { result: true } : { result: false, error: out.stderr };
+ }
+ },
+
get_features: {
call: function() {
let features = {};
diff --git a/luci-theme-aurora/.dev/docs/DEVELOPMENT.md b/luci-theme-aurora/.dev/docs/DEVELOPMENT.md
index 5fa396a1..c65b6648 100644
--- a/luci-theme-aurora/.dev/docs/DEVELOPMENT.md
+++ b/luci-theme-aurora/.dev/docs/DEVELOPMENT.md
@@ -62,7 +62,7 @@ The Vite development server uses middleware to rewrite local requests to serve C
1. Proxies `/cgi-bin` and `/luci-static` requests to OpenWrt device
2. Uses middleware (`createLocalServePlugin`) to rewrite request paths for CSS and JS files
-3. CSS requests to `/luci-static/aurora/main.css` are rewritten to serve from `.dev/src/media/main.css`
+3. CSS requests to `/luci-static/aurora/main.css` and `/luci-static/aurora/login.css` are rewritten to serve from `.dev/src/media/main.css` and `.dev/src/media/login.css` respectively
4. JS file requests are served directly from `.dev/src/resource/` with middleware reading and returning file content
5. Injects Vite HMR client into proxied HTML responses for live reload support
6. Redirects `/` to `/cgi-bin/luci` for proper routing
@@ -83,6 +83,20 @@ Thanks to **lightningcss**, you can freely use [CSS Nesting syntax](https://draf
This will be compiled to standard CSS that works in all browsers.
+### CSS Architecture
+
+The theme has two independent Tailwind CSS v4 entry points, both sourced from `.dev/src/media/`:
+
+- **`main.css`** — the LuCI admin UI. It contains no rules of its own; it's a pure import manifest that pulls in (in order) `_tokens.css` (OKLCH theme tokens, mapped via `@theme inline`), `_base.css`, `_layout.css`, every file in `components/` (one partial per UI component — buttons, cards, modals, tables, etc.), `_utilities.css`, and `_patches.css`.
+- **`login.css`** — the standalone login page (`sysauth.ut`). Self-contained: imports Tailwind and `_tokens.css` directly.
+
+**Adding new styles:**
+
+- New UI component → create `components/_.css` and add an `@import` line to `main.css`. Each file is its own organizational unit — no `@layer` wrappers needed (any that remain are stripped by PostCSS).
+- Compatibility fix for a third-party LuCI app/page → add a narrow, selector-scoped rule to `_patches.css` under a comment naming the app (e.g. `/* luci-app-openclash */`).
+
+All rules use `@apply` with Tailwind utilities and CSS Nesting — no raw CSS properties.
+
### LuCI JavaScript API
For LuCI-specific JavaScript development, refer to the official API documentation:
@@ -150,7 +164,8 @@ This compiles all assets to the production directory `htdocs/luci-static/`, whic
```
htdocs/luci-static/
├── aurora/
-│ ├── main.css # Minified CSS (via lightningcss)
+│ ├── main.css # Minified admin UI CSS (via lightningcss)
+│ ├── login.css # Minified login page CSS (via lightningcss)
│ ├── fonts/ # Web fonts (Lato)
│ └── images/ # Logo assets + PWA icons
└── resources/
@@ -159,7 +174,7 @@ htdocs/luci-static/
**Build Process:**
-1. Vite builds CSS entry point (`src/media/main.css`)
+1. Vite builds the CSS entry points (`src/media/main.css` and `src/media/login.css`)
2. Custom PostCSS plugin removes `@layer` at-rules for OpenWrt compatibility
3. Custom Vite plugin (`luci-js-compress`) minifies JS files via Terser
4. Static assets copied from `.dev/public/aurora/`
@@ -175,17 +190,22 @@ htdocs/luci-static/
**Build `.ipk`/`.apk` packages:**
-1. Push a version tag (`v*`) or push to `master` with `[build]` in the commit message
-2. The `build-theme-package` workflow compiles the OpenWrt package
+1. Push a version tag (`v*`), push to `master`/`feat/**` with `[build]` in the commit message, or manually trigger the workflow
+2. The `build-theme-package` workflow compiles both `.ipk` and `.apk` OpenWrt packages
-**PR checks:**
+**PR review:**
-Pull requests that touch `.dev/`, `htdocs/`, `ucode/`, or `root/` are automatically linted and build-verified by the `pr-check` workflow.
+Pull requests that touch `.dev/`, `htdocs/`, `ucode/`, or `root/` are automatically reviewed by the `claude-pr-review` workflow — it posts inline comments on the source diff (generated `htdocs/` output is excluded) plus a summary comment. Mention `@claude` in a PR comment to request a follow-up review or ask a question.
+
+**Issue triage:**
+
+New issues are handled by the `claude-issue-bot` workflow — it checks for spam/duplicates, applies labels, and posts a deep technical analysis comment. Mention `@claude` in an issue comment to get a response.
**Workflow Files:** `.github/workflows/`
-- `frontend-assets-build.yml` — Build assets and auto-commit
+- `frontend-assets-build.yml` — Build assets and auto-commit (manual trigger)
- `build-theme-package.yml` — Compile `.ipk`/`.apk` packages
-- `pr-check.yml` — Lint and build verification for PRs
+- `claude-pr-review.yml` — AI code review for PRs (inline + summary comments)
+- `claude-issue-bot.yml` — AI issue triage and analysis
## Directory Structure
@@ -202,8 +222,15 @@ luci-theme-aurora/
│ │ └── clean.js # Build cleanup utility
│ ├── src/ # Source code
│ │ ├── assets/icons/ # SVG icons
-│ │ ├── media/ # CSS entry points
-│ │ │ └── main.css # Main stylesheet (Tailwind CSS)
+│ │ ├── media/ # CSS source (Tailwind CSS v4)
+│ │ │ ├── main.css # Admin UI entry point (import manifest)
+│ │ │ ├── login.css # Login page entry point
+│ │ │ ├── _tokens.css # OKLCH theme tokens (@theme inline)
+│ │ │ ├── _base.css # Base element styles
+│ │ │ ├── _layout.css # Page layout/structure
+│ │ │ ├── _utilities.css # Custom utility classes
+│ │ │ ├── _patches.css # Third-party LuCI app/page overrides
+│ │ │ └── components/ # One partial per UI component
│ │ └── resource/ # JavaScript resources
│ │ └── menu-aurora.js # Menu logic
│ ├── .env.example # Environment variables template
@@ -221,7 +248,8 @@ luci-theme-aurora/
│ ├── aurora/ # Theme CSS and assets
│ │ ├── fonts/ # Built font files
│ │ ├── images/ # Built images + PWA icons
-│ │ └── main.css # Compiled CSS
+│ │ ├── main.css # Compiled admin UI CSS
+│ │ └── login.css # Compiled login page CSS
│ └── resources/ # Built JavaScript modules
│ └── menu-aurora.js # Minified menu logic
├── root/etc/uci-defaults/ # OpenWrt system integration
@@ -240,8 +268,10 @@ luci-theme-aurora/
- **[Tailwind CSS v4](https://tailwindcss.com/)** - Utility-first CSS framework
- **[Vite](https://vitejs.dev/)** - Build tool and development server
- **[pnpm](https://pnpm.io/)** - Fast, disk space efficient package manager
+- **[pnpm](https://pnpm.io/)** - Fast, disk space efficient package manager
- **[lightningcss](https://lightningcss.dev/)** - CSS minifier
- **[Terser](https://terser.org/)** - JavaScript minifier
- **[Prettier](https://prettier.io/)** - Code formatter
- **[prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss)** - Tailwind class sorting
+- **[tw-animate-css](https://github.com/Wombosvideo/tw-animate-css)** - Animation utilities for Tailwind CSS
+- **[tailwind-scrollbar](https://github.com/adoxography/tailwind-scrollbar)** - Custom scrollbar styling plugin
diff --git a/luci-theme-aurora/.dev/src/media/_patches.css b/luci-theme-aurora/.dev/src/media/_patches.css
index 01810ab2..0f530b98 100644
--- a/luci-theme-aurora/.dev/src/media/_patches.css
+++ b/luci-theme-aurora/.dev/src/media/_patches.css
@@ -1,8 +1,8 @@
/*
- PATCH LAYER (temporary)
- - Purpose: Quick fixes and app-specific overrides that may be removed at any time.
- - Scope: Keep selectors narrow and limited to known breakages only.
- - Migration: Promote stable rules to appropriate layers (e.g., components/plugins) or delete once fixed upstream.
+ PLUGIN/PAGE PATCHES
+ - Purpose: Compatibility overrides for third-party LuCI apps/pages that don't adapt to the theme.
+ - Scope: Keep selectors narrow and limited to the specific app/page being patched.
+ - Note: May need to be revisited when the corresponding plugin updates its markup/styles.
*/
/* admin-network-network */
@@ -10,7 +10,21 @@
@apply max-md:overflow-visible!;
}
+/* luci-app-filemanager */
+#file-manager-container {
+ @apply overflow-auto;
+ #status-bar {
+ @apply bg-page-bg border-0;
+ }
+}
+
/* luci-app-openclash */
+.diag-style {
+ @apply max-md:grid max-md:grid-cols-1 max-md:gap-4;
+ & > div {
+ @apply flex flex-col items-center gap-2 max-md:w-full! max-md:gap-1;
+ }
+}
[data-page="admin-services-openclash-config"] {
.sub_div {
img {
@@ -26,6 +40,11 @@
}
}
+/* luci-app-statistics */
+[data-page="admin-statistics-graphs"] [data-plugin] img {
+ @apply dark:hue-rotate-150 dark:invert;
+}
+
/* luci-mod-dashboard */
.Dashboard {
& > .section-content {
diff --git a/luci-theme-aurora/.dev/src/media/_plugins.css b/luci-theme-aurora/.dev/src/media/_plugins.css
deleted file mode 100644
index c5c9e02a..00000000
--- a/luci-theme-aurora/.dev/src/media/_plugins.css
+++ /dev/null
@@ -1,20 +0,0 @@
-/* luci-app-openclash */
-.diag-style {
- @apply max-md:grid max-md:grid-cols-1 max-md:gap-4;
- & > div {
- @apply flex flex-col items-center gap-2 max-md:w-full! max-md:gap-1;
- }
-}
-
-/* luci-app-filemanager */
-#file-manager-container {
- @apply overflow-auto;
- #status-bar {
- @apply bg-page-bg border-0;
- }
-}
-
-/* luci-app-statistics */
-[data-page="admin-statistics-graphs"] [data-plugin] img {
- @apply dark:hue-rotate-150 dark:invert;
-}
diff --git a/luci-theme-aurora/.dev/src/media/main.css b/luci-theme-aurora/.dev/src/media/main.css
index 99d54103..75742f11 100644
--- a/luci-theme-aurora/.dev/src/media/main.css
+++ b/luci-theme-aurora/.dev/src/media/main.css
@@ -38,5 +38,4 @@
@import "./components/_tab.css";
@import "./_utilities.css";
-@import "./_plugins.css";
@import "./_patches.css";
diff --git a/luci-theme-aurora/CLAUDE.md b/luci-theme-aurora/CLAUDE.md
index d27a0920..fea37ce2 100644
--- a/luci-theme-aurora/CLAUDE.md
+++ b/luci-theme-aurora/CLAUDE.md
@@ -19,12 +19,12 @@ No test suite or linter CLI. Formatting uses Prettier with format-on-save (`.vsc
**Dual-layer build**: source in `.dev/` → OpenWrt-compatible output in `htdocs/luci-static/`.
-- `.dev/src/media/main.css` → `htdocs/luci-static/aurora/main.css` (TailwindCSS v4, lightningcss)
+- `.dev/src/media/main.css` and `.dev/src/media/login.css` → `htdocs/luci-static/aurora/main.css` and `login.css` (TailwindCSS v4, lightningcss)
- `.dev/src/resource/*.js` → `htdocs/luci-static/resources/*.js` (Terser, no bundling)
- `.dev/public/aurora/` → `htdocs/luci-static/aurora/` (copied as-is)
- `ucode/template/themes/aurora/*.ut` — server-side templates, not processed by Vite
-**CSS**: single entry point `.dev/src/media/main.css`. All styling MUST use TailwindCSS v4 utility classes via `@apply` — no raw CSS properties (e.g. write `@apply text-sm font-semibold;` not `font-size: 14px; font-weight: 600;`). Use [CSS Nesting syntax](https://drafts.csswg.org/css-nesting/) for selectors. Theme colors defined as OKLCH custom properties in `:root` and mapped via `@theme inline`. `@layer` at-rules stripped by PostCSS plugin for OpenWrt compatibility.
+**CSS**: two Tailwind CSS v4 entry points in `.dev/src/media/` — `main.css` (admin UI; a pure import manifest over `_tokens.css`, `_base.css`, `_layout.css`, `components/*.css`, `_utilities.css`, `_patches.css`) and `login.css` (standalone login page). All styling MUST use TailwindCSS v4 utility classes via `@apply` — no raw CSS properties (e.g. write `@apply text-sm font-semibold;` not `font-size: 14px; font-weight: 600;`). Use [CSS Nesting syntax](https://drafts.csswg.org/css-nesting/) for selectors. Theme colors defined as OKLCH custom properties in `_tokens.css` and mapped via `@theme inline`. `@layer` at-rules stripped by PostCSS plugin for OpenWrt compatibility. See `.dev/docs/DEVELOPMENT.md` for the full CSS file layout.
**JavaScript**: LuCI `E()` DOM API (not React/Vue). Minified but not bundled.
@@ -35,5 +35,5 @@ No test suite or linter CLI. Formatting uses Prettier with format-on-save (`.vsc
## Key References
- **Development guide**: `.dev/docs/DEVELOPMENT.md` — dev server setup, env config, proxy details, CI workflows, directory structure
-- **Vite config**: `.dev/vite.config.ts` — custom plugins (luci-js-compress, local-serve, ut-sync, remove-layers)
+- **Vite config**: `.dev/vite.config.ts` — custom plugins (luci-js-compress, local-serve, redirect, ut-sync, remove-layers)
- **Version**: `PKG_VERSION` and `PKG_RELEASE` in `Makefile`
diff --git a/luci-theme-aurora/Makefile b/luci-theme-aurora/Makefile
index 382d977e..21d4c846 100644
--- a/luci-theme-aurora/Makefile
+++ b/luci-theme-aurora/Makefile
@@ -8,8 +8,8 @@ include $(TOPDIR)/rules.mk
LUCI_TITLE:=Aurora Theme (A modern browser theme built with Vite and Tailwind CSS)
LUCI_DEPENDS:=+luci-base
-PKG_VERSION:=0.12.3
-PKG_RELEASE:=20
+PKG_VERSION:=0.12.4
+PKG_RELEASE:=21
PKG_LICENSE:=Apache-2.0
LUCI_MINIFY_CSS:=
diff --git a/luci-theme-aurora/htdocs/luci-static/aurora/login.css b/luci-theme-aurora/htdocs/luci-static/aurora/login.css
index 14d613d7..7ac2dc35 100644
--- a/luci-theme-aurora/htdocs/luci-static/aurora/login.css
+++ b/luci-theme-aurora/htdocs/luci-static/aurora/login.css
@@ -1,2 +1,2 @@
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
-@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-content:"";--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-tracking:initial}}:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:var(--spacing);--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-widest:.1em;--radius-2xl:calc(var(--radius-base)*2);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--container-max-width:var(--container-max-width)}*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{background-color:var(--background);height:100%;font-family:var(--font-sans)}body{background-color:var(--background);min-height:100%;color:var(--foreground)}.collapse{visibility:collapse}.fixed{position:fixed}.static{position:static}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.hidden{display:none}.table{display:table}.rounded{border-radius:calc(var(--radius-base)*.5)}.underline{text-decoration-line:underline}:root{--background:#f1f5f9;--foreground:#0f172b;--primary:#46a3d1;--primary-foreground:#fff;--secondary:#e2e8f0;--secondary-foreground:#314158;--muted:#f5f5f5;--muted-foreground:#45556c;--destructive:#ffe2df;--destructive-foreground:#6c1517;--accent:#ee343b;--accent-foreground:#fff1f0;--default:#f5f5f5;--default-foreground:#171717;--info:#d3f1ff;--info-foreground:#003f60;--warning:#fbeec9;--warning-foreground:#582f02;--success:#cff6e0;--success-foreground:#003d2a;--error:#ffe2df;--error-foreground:#6c1517;--border:#e4e4e4;--link:#ec6cff;--input-checked:#fff;--label-surface:oklch(from var(--panel-bg)calc(l - .02)c h);--login-aurora-1:#00c23d;--login-aurora-2:#00a6a0;--login-aurora-3:#4266ff;--login-aurora-4:#b93ef3;--terminal-bg:#1a2029;--terminal-foreground:#fff;--overlay-base:#000;--progress-bar-start:#46a3d1;--progress-bar-end:#4fc3c7;--header-bg:oklch(from var(--background)l c h);--header-interactive:oklch(from var(--header-bg)calc(l - .12)c h);--page-bg:#fff;--panel-bg:#fff;--tooltip-bg:oklch(from var(--page-bg)calc(l - .015)c h);--font-sans:"Lato",ui-sans-serif,system-ui,sans-serif;--font-mono:ui-monospace,"SF Mono",Menlo,Monaco,Consolas,monospace;--spacing:.25rem;--container-max-width:80rem;--radius-base:.5rem}@supports (color:lab(0% 0 0)){:root{--background:lab(96.286% -.852436 -2.46847);--foreground:lab(7.78673% 1.82345 -15.0537);--primary:lab(63.0437% -17.6746 -32.0381);--primary-foreground:lab(100% 0 0);--secondary:lab(91.7353% -.998765 -4.76968);--secondary-foreground:lab(26.9569% -1.47016 -15.6993);--muted:lab(96.52% -.0000298023 .0000119209);--muted-foreground:lab(35.5623% -1.74978 -15.4316);--destructive:lab(92.5749% 15.3735 8.32583);--destructive-foreground:lab(23.385% 37.9736 23.5817);--accent:lab(53.6853% 69.6775 43.7724);--accent-foreground:lab(96.3359% 6.12152 3.29586);--default:lab(96.52% -.0000298023 .0000119209);--default-foreground:lab(7.78201% -.0000149012 0);--info:lab(93.2141% -10.1735 -14.3943);--info-foreground:lab(24.4811% -7.8918 -24.9024);--warning:lab(94.421% .545532 19.5962);--warning-foreground:lab(24.2528% 17.0621 33.1082);--success:lab(93.715% -16.1219 6.39679);--success-foreground:lab(22.3041% -31.6825 8.84454);--error:lab(92.5749% 15.3735 8.32583);--error-foreground:lab(23.385% 37.9736 23.5817);--border:lab(90.72% .0000298023 -.0000119209);--link:lab(66.1178% 66.0652 -52.4733);--input-checked:lab(100% 0 0);--login-aurora-1:lab(68.2738% -77.861 60.3677);--login-aurora-2:lab(61.8807% -76.0735 -14.3835);--login-aurora-3:lab(47.9708% 31.2682 -84.9353);--login-aurora-4:lab(51.406% 68.7947 -68.8447);--terminal-bg:lab(11.7506% -.5823 -7.27103);--terminal-foreground:lab(100% 0 0);--overlay-base:lab(0% 0 0);--progress-bar-start:lab(63.0437% -17.6746 -32.0381);--progress-bar-end:lab(72.4424% -32.9195 -12.3464);--page-bg:lab(100% 0 0);--panel-bg:lab(100% 0 0)}}[data-darkmode=true]{--background:#003c38;--foreground:#f1f5f9;--primary:#00958e;--primary-foreground:#fff;--secondary:#314158;--secondary-foreground:#e5e7eb;--muted:#38414f;--muted-foreground:#90a1b9;--destructive:#460809;--destructive-foreground:#ffc6c0;--accent:#6c1517;--accent-foreground:#ffc6c0;--default:#27272a80;--default-foreground:#f9f9ff;--info:#024a7080;--info-foreground:#b0e0f8;--warning:#7b330680;--warning-foreground:#fee685;--success:#004e3b80;--success-foreground:#aff8d0;--error:#8b083680;--error-foreground:#ffc6c0;--border:#364358;--link:#a685ff;--input-checked:#fff;--label-surface:oklch(from var(--panel-bg)calc(l + .04)c h);--login-aurora-1:#00d847;--login-aurora-2:#00b7b3;--login-aurora-3:#5279ff;--login-aurora-4:#c854ff;--terminal-bg:#0a121f;--terminal-foreground:#fff;--overlay-base:#000;--progress-bar-start:#065f46;--progress-bar-end:#009b94;--header-bg:oklch(from var(--page-bg)l c h);--header-interactive:oklch(from var(--header-bg)calc(l + .24)c h);--page-bg:#101828;--panel-bg:#1d293d;--tooltip-bg:oklch(from var(--page-bg)calc(l + .06)c h)}@supports (color:lab(0% 0 0)){[data-darkmode=true]{--background:lab(21.8032% -20.1655 -3.35968);--foreground:lab(96.286% -.852436 -2.46847);--primary:lab(55.0978% -44.5567 -7.62978);--primary-foreground:lab(100% 0 0);--secondary:lab(26.9569% -1.47016 -15.6993);--secondary-foreground:lab(91.6229% -.159115 -2.26791);--muted:lab(27.1597% -.911355 -9.48523);--muted-foreground:lab(65.5349% -2.25151 -14.5072);--destructive:lab(13.003% 29.04 16.7519);--destructive-foreground:lab(84.7556% 43.3341 25.2722);--accent:lab(23.385% 37.9736 23.5817);--accent-foreground:lab(84.7347% 43.595 24.3042);--default:lab(15.7305% .613764 -2.16959/.5);--default-foreground:lab(98.1732% .982702 -3.63715);--info:lab(29.1959% -8.34689 -28.2453/.5);--info-foreground:lab(86.2797% -12.0086 -17.1909);--warning:lab(31.2288% 30.2627 40.0378/.5);--warning-foreground:lab(91.7203% -.505269 49.9084);--success:lab(28.8637% -26.9249 5.45986/.5);--success-foreground:lab(91.9265% -29.2737 11.5846);--error:lab(29.7104% 51.514 12.6253/.5);--error-foreground:lab(84.7347% 43.595 24.3042);--border:lab(27.8781% -.856712 -14.804);--link:lab(62.8239% 34.9159 -60.0512);--input-checked:lab(100% 0 0);--login-aurora-1:lab(75.4735% -83.8096 64.8452);--login-aurora-2:lab(67.7176% -77.9628 -17.8815);--login-aurora-3:lab(53.7474% 31.0421 -88.4899);--login-aurora-4:lab(57.0971% 71.0297 -71.531);--terminal-bg:lab(5.13221% -.0256523 -9.94164);--terminal-foreground:lab(100% 0 0);--overlay-base:lab(0% 0 0);--progress-bar-start:lab(35.2336% -29.9851 7.30804);--progress-bar-end:lab(57.6867% -49.5425 -9.29472);--page-bg:lab(8.11897% .811279 -12.254);--panel-bg:lab(16.132% -.318035 -14.6672)}}@keyframes divider-in{0%{opacity:0;transform:scaleX(.15)}}.login-screen{min-height:100dvh;padding-inline:calc(var(--spacing)*5);padding-bottom:calc(var(--spacing)*14);flex-direction:column;justify-content:center;align-items:center;display:flex;position:relative}.login-shell{width:100%;max-width:var(--container-md)}.login-bg{pointer-events:none;inset:calc(var(--spacing)*0);background-position:50%;background-repeat:no-repeat;background-size:cover;background-image:var(--login-bg-lqip,var(--login-bg));position:fixed;transform:translateZ(0)}.login-bg:after{pointer-events:none;inset:calc(var(--spacing)*0);opacity:0;will-change:opacity;--tw-content:"";content:var(--tw-content);background-position:50%;background-repeat:no-repeat;background-size:cover;background-image:var(--login-bg);transition:opacity .5s;position:absolute}.login-bg.full-loaded:after{opacity:1}.login-card{gap:calc(var(--spacing)*7);border-radius:calc(var(--radius-base)*4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--panel-bg);padding:calc(var(--spacing)*14);flex-direction:column;display:flex}@media not all and (min-width:48rem){.login-card{border-radius:calc(var(--radius-base)*3);padding:calc(var(--spacing)*9)}}.login-brand{align-items:center;gap:calc(var(--spacing)*3.5);display:flex}.login-divider{border-style:var(--tw-border-style);--tw-gradient-position:to right;border-width:0;width:100%;height:1px;animation:.7s cubic-bezier(.16,1,.3,1) .1s both divider-in}@supports (background-image:linear-gradient(in lab, red, red)){.login-divider{--tw-gradient-position:to right in oklab}}.login-divider{background-image:linear-gradient(var(--tw-gradient-stops));--tw-gradient-from:transparent;--tw-gradient-via:var(--border);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position));--tw-gradient-to:transparent}.login-logo{height:calc(var(--spacing)*11);width:calc(var(--spacing)*11);border-radius:calc(var(--radius-base)*2);background-color:var(--primary);flex-shrink:0;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.login-logo{background-color:color-mix(in oklab,var(--primary)15%,transparent)}}.login-logo{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.login-logo{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}.login-logo img{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.login-title{gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.login-hostname{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--foreground)}.login-subtitle{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--default-foreground)}.login-form{gap:calc(var(--spacing)*5);flex-direction:column;display:flex}.login-fields{gap:calc(var(--spacing)*4);flex-direction:column;display:flex}.login-field{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.login-label{--tw-font-weight:var(--font-weight-semibold);font-size:.6875rem;font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest);color:var(--default-foreground);text-transform:uppercase}.input-wrap{border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--panel-bg);contain:layout style;position:relative}.input-wrap:after{pointer-events:none;border-radius:calc(var(--radius-2xl) + 1px);border-style:var(--tw-border-style);border-width:2px;border-color:var(--primary);opacity:0;will-change:opacity;--tw-content:"";content:var(--tw-content);transition:opacity .15s;position:absolute;inset:-1px}.input-wrap:focus-within:after{opacity:1}.login-input{appearance:none;border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));color:var(--foreground);--tw-outline-style:none;background-color:#0000;border-width:0;outline-style:none}.login-input::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.login-input::placeholder{color:color-mix(in oklab,var(--muted-foreground)60%,transparent)}}.login-error{border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.login-error{border-color:color-mix(in oklab,var(--error)40%,transparent)}}.login-error{background-color:var(--error);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--error-foreground)}.login-actions{padding-top:calc(var(--spacing)*4)}.login-submit{cursor:pointer;border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);background-color:var(--primary);width:100%;padding-block:calc(var(--spacing)*2.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--primary-foreground);border-width:0}@media (hover:hover){.login-submit:hover{opacity:.9}}.login-submit:active{opacity:.8}.login-footer{right:calc(var(--spacing)*0);bottom:calc(var(--spacing)*5);left:calc(var(--spacing)*0);padding-inline:calc(var(--spacing)*5);text-align:center;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--muted-foreground);position:absolute}.login-footer p{white-space:normal}.login-footer a{color:var(--primary)}@media (hover:hover){.login-footer a:hover{text-decoration-line:underline}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}
+@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-content:"";--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-font-weight:initial;--tw-tracking:initial}}:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:var(--spacing);--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-widest:.1em;--radius-2xl:calc(var(--radius-base)*2);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--container-max-width:var(--container-max-width)}*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}html{background-color:var(--background);height:100%;font-family:var(--font-sans)}body{background-color:var(--background);min-height:100%;color:var(--foreground)}.collapse{visibility:collapse}.fixed{position:fixed}.static{position:static}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.hidden{display:none}.inline{display:inline}.table{display:table}.rounded{border-radius:calc(var(--radius-base)*.5)}.underline{text-decoration-line:underline}:root{--background:#f1f5f9;--foreground:#0f172b;--primary:#46a3d1;--primary-foreground:#fff;--secondary:#e2e8f0;--secondary-foreground:#314158;--muted:#f5f5f5;--muted-foreground:#45556c;--destructive:#ffe2df;--destructive-foreground:#6c1517;--accent:#ee343b;--accent-foreground:#fff1f0;--default:#f5f5f5;--default-foreground:#171717;--info:#d3f1ff;--info-foreground:#003f60;--warning:#fbeec9;--warning-foreground:#582f02;--success:#cff6e0;--success-foreground:#003d2a;--error:#ffe2df;--error-foreground:#6c1517;--border:#e4e4e4;--link:#ec6cff;--input-checked:#fff;--label-surface:oklch(from var(--panel-bg)calc(l - .02)c h);--login-aurora-1:#00c23d;--login-aurora-2:#00a6a0;--login-aurora-3:#4266ff;--login-aurora-4:#b93ef3;--terminal-bg:#1a2029;--terminal-foreground:#fff;--overlay-base:#000;--progress-bar-start:#46a3d1;--progress-bar-end:#4fc3c7;--header-bg:oklch(from var(--background)l c h);--header-interactive:oklch(from var(--header-bg)calc(l - .12)c h);--page-bg:#fff;--panel-bg:#fff;--tooltip-bg:oklch(from var(--page-bg)calc(l - .015)c h);--font-sans:"Lato",ui-sans-serif,system-ui,sans-serif;--font-mono:ui-monospace,"SF Mono",Menlo,Monaco,Consolas,monospace;--spacing:.25rem;--container-max-width:80rem;--radius-base:.5rem}@supports (color:lab(0% 0 0)){:root{--background:lab(96.286% -.852436 -2.46847);--foreground:lab(7.78673% 1.82345 -15.0537);--primary:lab(63.0437% -17.6746 -32.0381);--primary-foreground:lab(100% 0 0);--secondary:lab(91.7353% -.998765 -4.76968);--secondary-foreground:lab(26.9569% -1.47016 -15.6993);--muted:lab(96.52% -.0000298023 .0000119209);--muted-foreground:lab(35.5623% -1.74978 -15.4316);--destructive:lab(92.5749% 15.3735 8.32583);--destructive-foreground:lab(23.385% 37.9736 23.5817);--accent:lab(53.6853% 69.6775 43.7724);--accent-foreground:lab(96.3359% 6.12152 3.29586);--default:lab(96.52% -.0000298023 .0000119209);--default-foreground:lab(7.78201% -.0000149012 0);--info:lab(93.2141% -10.1735 -14.3943);--info-foreground:lab(24.4811% -7.8918 -24.9024);--warning:lab(94.421% .545532 19.5962);--warning-foreground:lab(24.2528% 17.0621 33.1082);--success:lab(93.715% -16.1219 6.39679);--success-foreground:lab(22.3041% -31.6825 8.84454);--error:lab(92.5749% 15.3735 8.32583);--error-foreground:lab(23.385% 37.9736 23.5817);--border:lab(90.72% .0000298023 -.0000119209);--link:lab(66.1178% 66.0652 -52.4733);--input-checked:lab(100% 0 0);--login-aurora-1:lab(68.2738% -77.861 60.3677);--login-aurora-2:lab(61.8807% -76.0735 -14.3835);--login-aurora-3:lab(47.9708% 31.2682 -84.9353);--login-aurora-4:lab(51.406% 68.7947 -68.8447);--terminal-bg:lab(11.7506% -.5823 -7.27103);--terminal-foreground:lab(100% 0 0);--overlay-base:lab(0% 0 0);--progress-bar-start:lab(63.0437% -17.6746 -32.0381);--progress-bar-end:lab(72.4424% -32.9195 -12.3464);--page-bg:lab(100% 0 0);--panel-bg:lab(100% 0 0)}}[data-darkmode=true]{--background:#003c38;--foreground:#f1f5f9;--primary:#00958e;--primary-foreground:#fff;--secondary:#314158;--secondary-foreground:#e5e7eb;--muted:#38414f;--muted-foreground:#90a1b9;--destructive:#460809;--destructive-foreground:#ffc6c0;--accent:#6c1517;--accent-foreground:#ffc6c0;--default:#27272a80;--default-foreground:#f9f9ff;--info:#024a7080;--info-foreground:#b0e0f8;--warning:#7b330680;--warning-foreground:#fee685;--success:#004e3b80;--success-foreground:#aff8d0;--error:#8b083680;--error-foreground:#ffc6c0;--border:#364358;--link:#a685ff;--input-checked:#fff;--label-surface:oklch(from var(--panel-bg)calc(l + .04)c h);--login-aurora-1:#00d847;--login-aurora-2:#00b7b3;--login-aurora-3:#5279ff;--login-aurora-4:#c854ff;--terminal-bg:#0a121f;--terminal-foreground:#fff;--overlay-base:#000;--progress-bar-start:#065f46;--progress-bar-end:#009b94;--header-bg:oklch(from var(--page-bg)l c h);--header-interactive:oklch(from var(--header-bg)calc(l + .24)c h);--page-bg:#101828;--panel-bg:#1d293d;--tooltip-bg:oklch(from var(--page-bg)calc(l + .06)c h)}@supports (color:lab(0% 0 0)){[data-darkmode=true]{--background:lab(21.8032% -20.1655 -3.35968);--foreground:lab(96.286% -.852436 -2.46847);--primary:lab(55.0978% -44.5567 -7.62978);--primary-foreground:lab(100% 0 0);--secondary:lab(26.9569% -1.47016 -15.6993);--secondary-foreground:lab(91.6229% -.159115 -2.26791);--muted:lab(27.1597% -.911355 -9.48523);--muted-foreground:lab(65.5349% -2.25151 -14.5072);--destructive:lab(13.003% 29.04 16.7519);--destructive-foreground:lab(84.7556% 43.3341 25.2722);--accent:lab(23.385% 37.9736 23.5817);--accent-foreground:lab(84.7347% 43.595 24.3042);--default:lab(15.7305% .613764 -2.16959/.5);--default-foreground:lab(98.1732% .982702 -3.63715);--info:lab(29.1959% -8.34689 -28.2453/.5);--info-foreground:lab(86.2797% -12.0086 -17.1909);--warning:lab(31.2288% 30.2627 40.0378/.5);--warning-foreground:lab(91.7203% -.505269 49.9084);--success:lab(28.8637% -26.9249 5.45986/.5);--success-foreground:lab(91.9265% -29.2737 11.5846);--error:lab(29.7104% 51.514 12.6253/.5);--error-foreground:lab(84.7347% 43.595 24.3042);--border:lab(27.8781% -.856712 -14.804);--link:lab(62.8239% 34.9159 -60.0512);--input-checked:lab(100% 0 0);--login-aurora-1:lab(75.4735% -83.8096 64.8452);--login-aurora-2:lab(67.7176% -77.9628 -17.8815);--login-aurora-3:lab(53.7474% 31.0421 -88.4899);--login-aurora-4:lab(57.0971% 71.0297 -71.531);--terminal-bg:lab(5.13221% -.0256523 -9.94164);--terminal-foreground:lab(100% 0 0);--overlay-base:lab(0% 0 0);--progress-bar-start:lab(35.2336% -29.9851 7.30804);--progress-bar-end:lab(57.6867% -49.5425 -9.29472);--page-bg:lab(8.11897% .811279 -12.254);--panel-bg:lab(16.132% -.318035 -14.6672)}}@keyframes divider-in{0%{opacity:0;transform:scaleX(.15)}}.login-screen{min-height:100dvh;padding-inline:calc(var(--spacing)*5);padding-bottom:calc(var(--spacing)*14);flex-direction:column;justify-content:center;align-items:center;display:flex;position:relative}.login-shell{width:100%;max-width:var(--container-md)}.login-bg{pointer-events:none;inset:calc(var(--spacing)*0);background-position:50%;background-repeat:no-repeat;background-size:cover;background-image:var(--login-bg-lqip,var(--login-bg));position:fixed;transform:translateZ(0)}.login-bg:after{pointer-events:none;inset:calc(var(--spacing)*0);opacity:0;will-change:opacity;--tw-content:"";content:var(--tw-content);background-position:50%;background-repeat:no-repeat;background-size:cover;background-image:var(--login-bg);transition:opacity .5s;position:absolute}.login-bg.full-loaded:after{opacity:1}.login-card{gap:calc(var(--spacing)*7);border-radius:calc(var(--radius-base)*4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--panel-bg);padding:calc(var(--spacing)*14);flex-direction:column;display:flex}@media not all and (min-width:48rem){.login-card{border-radius:calc(var(--radius-base)*3);padding:calc(var(--spacing)*9)}}.login-brand{align-items:center;gap:calc(var(--spacing)*3.5);display:flex}.login-divider{border-style:var(--tw-border-style);--tw-gradient-position:to right;border-width:0;width:100%;height:1px;animation:.7s cubic-bezier(.16,1,.3,1) .1s both divider-in}@supports (background-image:linear-gradient(in lab, red, red)){.login-divider{--tw-gradient-position:to right in oklab}}.login-divider{background-image:linear-gradient(var(--tw-gradient-stops));--tw-gradient-from:transparent;--tw-gradient-via:var(--border);--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position));--tw-gradient-to:transparent}.login-logo{height:calc(var(--spacing)*11);width:calc(var(--spacing)*11);border-radius:calc(var(--radius-base)*2);background-color:var(--primary);flex-shrink:0;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.login-logo{background-color:color-mix(in oklab,var(--primary)15%,transparent)}}.login-logo{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.login-logo{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}.login-logo img{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.login-title{gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.login-hostname{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--foreground)}.login-subtitle{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--default-foreground)}.login-form{gap:calc(var(--spacing)*5);flex-direction:column;display:flex}.login-fields{gap:calc(var(--spacing)*4);flex-direction:column;display:flex}.login-field{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.login-label{--tw-font-weight:var(--font-weight-semibold);font-size:.6875rem;font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest);color:var(--default-foreground);text-transform:uppercase}.input-wrap{border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--panel-bg);contain:layout style;position:relative}.input-wrap:after{pointer-events:none;border-radius:calc(var(--radius-2xl) + 1px);border-style:var(--tw-border-style);border-width:2px;border-color:var(--primary);opacity:0;will-change:opacity;--tw-content:"";content:var(--tw-content);transition:opacity .15s;position:absolute;inset:-1px}.input-wrap:focus-within:after{opacity:1}.login-input{appearance:none;border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));color:var(--foreground);--tw-outline-style:none;background-color:#0000;border-width:0;outline-style:none}.login-input::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.login-input::placeholder{color:color-mix(in oklab,var(--muted-foreground)60%,transparent)}}.login-error{border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.login-error{border-color:color-mix(in oklab,var(--error)40%,transparent)}}.login-error{background-color:var(--error);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--error-foreground)}.login-actions{padding-top:calc(var(--spacing)*4)}.login-submit{cursor:pointer;border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);background-color:var(--primary);width:100%;padding-block:calc(var(--spacing)*2.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--primary-foreground);border-width:0}@media (hover:hover){.login-submit:hover{opacity:.9}}.login-submit:active{opacity:.8}.login-footer{right:calc(var(--spacing)*0);bottom:calc(var(--spacing)*5);left:calc(var(--spacing)*0);padding-inline:calc(var(--spacing)*5);text-align:center;font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--muted-foreground);position:absolute}.login-footer p{white-space:normal}.login-footer a{color:var(--primary)}@media (hover:hover){.login-footer a:hover{text-decoration-line:underline}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}
diff --git a/luci-theme-aurora/htdocs/luci-static/aurora/main.css b/luci-theme-aurora/htdocs/luci-static/aurora/main.css
index bcc76188..ff78e33b 100644
--- a/luci-theme-aurora/htdocs/luci-static/aurora/main.css
+++ b/luci-theme-aurora/htdocs/luci-static/aurora/main.css
@@ -1,2 +1,2 @@
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
-@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-content:"";--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-space-y-reverse:0;--tw-border-spacing-x:0;--tw-border-spacing-y:0}}:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:var(--spacing);--container-xs:20rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-2xl:calc(var(--radius-base)*2);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--container-max-width:var(--container-max-width)}*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{scrollbar-color:initial;scrollbar-width:initial}.collapse{visibility:collapse}.fixed{position:fixed}.static{position:static}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.scrollbar::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.scrollbar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.scrollbar::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.scrollbar{scrollbar-width:auto;scrollbar-color:var(--scrollbar-thumb,initial)var(--scrollbar-track,initial)}.scrollbar::-webkit-scrollbar{width:var(--scrollbar-width,16px);height:var(--scrollbar-height,16px);display:block}.table{display:table}.rounded{border-radius:calc(var(--radius-base)*.5)}.underline{text-decoration-line:underline}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--background:#f1f5f9;--foreground:#0f172b;--primary:#46a3d1;--primary-foreground:#fff;--secondary:#e2e8f0;--secondary-foreground:#314158;--muted:#f5f5f5;--muted-foreground:#45556c;--destructive:#ffe2df;--destructive-foreground:#6c1517;--accent:#ee343b;--accent-foreground:#fff1f0;--default:#f5f5f5;--default-foreground:#171717;--info:#d3f1ff;--info-foreground:#003f60;--warning:#fbeec9;--warning-foreground:#582f02;--success:#cff6e0;--success-foreground:#003d2a;--error:#ffe2df;--error-foreground:#6c1517;--border:#e4e4e4;--link:#ec6cff;--input-checked:#fff;--label-surface:oklch(from var(--panel-bg)calc(l - .02)c h);--login-aurora-1:#00c23d;--login-aurora-2:#00a6a0;--login-aurora-3:#4266ff;--login-aurora-4:#b93ef3;--terminal-bg:#1a2029;--terminal-foreground:#fff;--overlay-base:#000;--progress-bar-start:#46a3d1;--progress-bar-end:#4fc3c7;--header-bg:oklch(from var(--background)l c h);--header-interactive:oklch(from var(--header-bg)calc(l - .12)c h);--page-bg:#fff;--panel-bg:#fff;--tooltip-bg:oklch(from var(--page-bg)calc(l - .015)c h);--font-sans:"Lato",ui-sans-serif,system-ui,sans-serif;--font-mono:ui-monospace,"SF Mono",Menlo,Monaco,Consolas,monospace;--spacing:.25rem;--container-max-width:80rem;--radius-base:.5rem}@supports (color:lab(0% 0 0)){:root{--background:lab(96.286% -.852436 -2.46847);--foreground:lab(7.78673% 1.82345 -15.0537);--primary:lab(63.0437% -17.6746 -32.0381);--primary-foreground:lab(100% 0 0);--secondary:lab(91.7353% -.998765 -4.76968);--secondary-foreground:lab(26.9569% -1.47016 -15.6993);--muted:lab(96.52% -.0000298023 .0000119209);--muted-foreground:lab(35.5623% -1.74978 -15.4316);--destructive:lab(92.5749% 15.3735 8.32583);--destructive-foreground:lab(23.385% 37.9736 23.5817);--accent:lab(53.6853% 69.6775 43.7724);--accent-foreground:lab(96.3359% 6.12152 3.29586);--default:lab(96.52% -.0000298023 .0000119209);--default-foreground:lab(7.78201% -.0000149012 0);--info:lab(93.2141% -10.1735 -14.3943);--info-foreground:lab(24.4811% -7.8918 -24.9024);--warning:lab(94.421% .545532 19.5962);--warning-foreground:lab(24.2528% 17.0621 33.1082);--success:lab(93.715% -16.1219 6.39679);--success-foreground:lab(22.3041% -31.6825 8.84454);--error:lab(92.5749% 15.3735 8.32583);--error-foreground:lab(23.385% 37.9736 23.5817);--border:lab(90.72% .0000298023 -.0000119209);--link:lab(66.1178% 66.0652 -52.4733);--input-checked:lab(100% 0 0);--login-aurora-1:lab(68.2738% -77.861 60.3677);--login-aurora-2:lab(61.8807% -76.0735 -14.3835);--login-aurora-3:lab(47.9708% 31.2682 -84.9353);--login-aurora-4:lab(51.406% 68.7947 -68.8447);--terminal-bg:lab(11.7506% -.5823 -7.27103);--terminal-foreground:lab(100% 0 0);--overlay-base:lab(0% 0 0);--progress-bar-start:lab(63.0437% -17.6746 -32.0381);--progress-bar-end:lab(72.4424% -32.9195 -12.3464);--page-bg:lab(100% 0 0);--panel-bg:lab(100% 0 0)}}[data-darkmode=true]{--background:#003c38;--foreground:#f1f5f9;--primary:#00958e;--primary-foreground:#fff;--secondary:#314158;--secondary-foreground:#e5e7eb;--muted:#38414f;--muted-foreground:#90a1b9;--destructive:#460809;--destructive-foreground:#ffc6c0;--accent:#6c1517;--accent-foreground:#ffc6c0;--default:#27272a80;--default-foreground:#f9f9ff;--info:#024a7080;--info-foreground:#b0e0f8;--warning:#7b330680;--warning-foreground:#fee685;--success:#004e3b80;--success-foreground:#aff8d0;--error:#8b083680;--error-foreground:#ffc6c0;--border:#364358;--link:#a685ff;--input-checked:#fff;--label-surface:oklch(from var(--panel-bg)calc(l + .04)c h);--login-aurora-1:#00d847;--login-aurora-2:#00b7b3;--login-aurora-3:#5279ff;--login-aurora-4:#c854ff;--terminal-bg:#0a121f;--terminal-foreground:#fff;--overlay-base:#000;--progress-bar-start:#065f46;--progress-bar-end:#009b94;--header-bg:oklch(from var(--page-bg)l c h);--header-interactive:oklch(from var(--header-bg)calc(l + .24)c h);--page-bg:#101828;--panel-bg:#1d293d;--tooltip-bg:oklch(from var(--page-bg)calc(l + .06)c h)}@supports (color:lab(0% 0 0)){[data-darkmode=true]{--background:lab(21.8032% -20.1655 -3.35968);--foreground:lab(96.286% -.852436 -2.46847);--primary:lab(55.0978% -44.5567 -7.62978);--primary-foreground:lab(100% 0 0);--secondary:lab(26.9569% -1.47016 -15.6993);--secondary-foreground:lab(91.6229% -.159115 -2.26791);--muted:lab(27.1597% -.911355 -9.48523);--muted-foreground:lab(65.5349% -2.25151 -14.5072);--destructive:lab(13.003% 29.04 16.7519);--destructive-foreground:lab(84.7556% 43.3341 25.2722);--accent:lab(23.385% 37.9736 23.5817);--accent-foreground:lab(84.7347% 43.595 24.3042);--default:lab(15.7305% .613764 -2.16959/.5);--default-foreground:lab(98.1732% .982702 -3.63715);--info:lab(29.1959% -8.34689 -28.2453/.5);--info-foreground:lab(86.2797% -12.0086 -17.1909);--warning:lab(31.2288% 30.2627 40.0378/.5);--warning-foreground:lab(91.7203% -.505269 49.9084);--success:lab(28.8637% -26.9249 5.45986/.5);--success-foreground:lab(91.9265% -29.2737 11.5846);--error:lab(29.7104% 51.514 12.6253/.5);--error-foreground:lab(84.7347% 43.595 24.3042);--border:lab(27.8781% -.856712 -14.804);--link:lab(62.8239% 34.9159 -60.0512);--input-checked:lab(100% 0 0);--login-aurora-1:lab(75.4735% -83.8096 64.8452);--login-aurora-2:lab(67.7176% -77.9628 -17.8815);--login-aurora-3:lab(53.7474% 31.0421 -88.4899);--login-aurora-4:lab(57.0971% 71.0297 -71.531);--terminal-bg:lab(5.13221% -.0256523 -9.94164);--terminal-foreground:lab(100% 0 0);--overlay-base:lab(0% 0 0);--progress-bar-start:lab(35.2336% -29.9851 7.30804);--progress-bar-end:lab(57.6867% -49.5425 -9.29472);--page-bg:lab(8.11897% .811279 -12.254);--panel-bg:lab(16.132% -.318035 -14.6672)}}:not(html)::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}:not(html)::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}:not(html)::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}:not(html){scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb,initial)var(--scrollbar-track,initial)}:not(html)::-webkit-scrollbar{width:8px;height:8px;display:block}:not(html){--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab, red, red)){:not(html){--scrollbar-thumb:color-mix(in oklab,var(--foreground)70%,transparent)}}:not(html){--scrollbar-thumb-radius:9999px;--scrollbar-track:transparent}html::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}html::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}html::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}html{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb,initial)var(--scrollbar-track,initial)}html::-webkit-scrollbar{width:8px;height:8px;display:block}html{--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab, red, red)){html{--scrollbar-thumb:color-mix(in oklab,var(--foreground)70%,transparent)}}html{--scrollbar-thumb-radius:9999px;--scrollbar-track:var(--page-bg);background-color:var(--background);height:100%;font-family:var(--font-sans);position:relative}html body{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;background-color:#0000;flex-direction:column;transition-duration:.3s;display:flex;position:relative}html body.modal-overlay-active{height:100vh;overflow:hidden}h1,h2,h3,h4,h5,h6{font-family:var(--font-sans);--tw-leading:var(--leading-tight);line-height:var(--leading-tight);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--foreground)}h1{margin-bottom:calc(var(--spacing)*4);padding-left:calc(var(--spacing)*6);font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}@media not all and (min-width:48rem){h1{padding-left:calc(var(--spacing)*4);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}h2{margin-bottom:calc(var(--spacing)*4);padding-left:calc(var(--spacing)*5);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}@media not all and (min-width:48rem){h2{margin-bottom:calc(var(--spacing)*2);padding-left:calc(var(--spacing)*4);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}h3{margin-bottom:calc(var(--spacing)*4);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}@media not all and (min-width:48rem){h3{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}h4{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}@media not all and (min-width:48rem){h4{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}h5{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media not all and (min-width:48rem){h5{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}h6{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}@media not all and (min-width:48rem){h6{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}hr{border-style:var(--tw-border-style);border-width:0}strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}abbr{cursor:help}p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--default-foreground)}pre{border-radius:calc(var(--radius-base)*1.5);border-style:var(--tw-border-style);border-width:1px;border-color:var(--secondary);display:block}@supports (color:color-mix(in lab, red, red)){pre{border-color:color-mix(in oklab,var(--secondary)60%,transparent)}}pre{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){pre{background-color:color-mix(in oklab,var(--secondary)60%,transparent)}}pre{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);overflow-wrap:break-word;white-space:pre-wrap;color:var(--secondary-foreground)}code{border-radius:calc(var(--radius-base)*.5);background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){code{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}code{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--secondary-foreground)}a{color:var(--link);text-decoration-line:none}@media (hover:hover){a:hover{text-decoration-line:underline}}var{font-family:var(--font-mono);color:var(--link)}small{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--default-foreground)}em{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground);font-style:italic}header{top:calc(var(--spacing)*0);z-index:60;margin-bottom:calc(var(--spacing)*2);background-color:var(--header-bg);position:sticky}header .header-content{height:calc(var(--spacing)*14);padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*3);justify-content:space-between;align-items:center;display:flex;position:relative}@media not all and (min-width:48rem){header .header-content{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2)}}[data-nav-type=mega-menu] :is(header) .desktop-menu-container{pointer-events:none;inset-inline:calc(var(--spacing)*0);top:calc(var(--spacing)*0);z-index:30;height:calc(var(--spacing)*0);background-color:var(--header-bg);width:100%;position:absolute;overflow:hidden}@supports (color:color-mix(in lab, red, red)){[data-nav-type=mega-menu] :is(header) .desktop-menu-container{background-color:color-mix(in oklab,var(--header-bg)40%,transparent)}}[data-nav-type=mega-menu] :is(header) .desktop-menu-container{opacity:0;--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;--tw-ease:var(--ease-in-out);transition-duration:.15s;transition-timing-function:var(--ease-in-out)}@media not all and (min-width:48rem){[data-nav-type=mega-menu] :is(header) .desktop-menu-container{display:none}}[data-nav-type=mega-menu] :is(header) .desktop-menu-container:where([data-darkmode=true],[data-darkmode=true] *){background-color:var(--header-bg)}@supports (color:color-mix(in lab, red, red)){[data-nav-type=mega-menu] :is(header) .desktop-menu-container:where([data-darkmode=true],[data-darkmode=true] *){background-color:color-mix(in oklab,var(--header-bg)90%,transparent)}}[data-nav-type=mega-menu] :is(header) .desktop-menu-container.active{pointer-events:auto;height:var(--mega-menu-height,0);opacity:1}header .brand{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;flex-shrink:0;text-decoration-line:none;transition-duration:.2s;display:inline-block}@media (hover:hover){header .brand:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y);color:var(--primary)}}@media not all and (min-width:48rem){header .brand{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));flex:1;order:1}}header .nav{z-index:60;margin:calc(var(--spacing)*0);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);align-items:center;gap:calc(var(--spacing)*1);padding:calc(var(--spacing)*0);list-style-type:none;display:flex;position:absolute;left:50%}@media not all and (min-width:48rem){header .nav{display:none}}header .nav>li{position:relative}header .nav>li .menu{border-radius:calc(var(--radius-base)*1.5);padding-inline:calc(var(--spacing)*3.5);padding-block:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;text-decoration-line:none;transition-duration:.15s;display:block}header .nav>li .menu.menu-active{color:var(--foreground)}[data-nav-type=mega-menu] header .nav>li .menu.menu-active{text-underline-offset:4px;text-decoration-line:underline;text-decoration-thickness:2px}[data-nav-type=boxed-dropdown] header .nav>li .menu.menu-active{background-color:var(--header-interactive)}header .nav>li .desktop-nav{pointer-events:none;left:calc(var(--spacing)*0);z-index:40;padding-inline:calc(var(--spacing)*0);padding-top:calc(var(--spacing)*0);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s}[data-nav-type=mega-menu] :is(header .nav>li .desktop-nav){top:calc(var(--spacing)*14);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);padding-bottom:calc(var(--spacing)*6);position:fixed;left:50%}[data-nav-type=boxed-dropdown] :is(header .nav>li .desktop-nav){margin-top:calc(var(--spacing)*2);min-width:calc(var(--spacing)*48);position:absolute;top:100%}header .nav>li .desktop-nav.active{pointer-events:auto;opacity:1}[data-nav-type=mega-menu] :is(header .nav>li .desktop-nav .desktop-nav-list){column-gap:calc(var(--spacing)*4);row-gap:calc(var(--spacing)*2);grid-template-columns:repeat(4,minmax(0,1fr));width:max-content;display:grid}[data-nav-type=boxed-dropdown] :is(header .nav>li .desktop-nav .desktop-nav-list){row-gap:calc(var(--spacing)*1);border-radius:calc(var(--radius-base)*3);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:color-mix(in oklab,var(--header-bg)90%,transparent);padding-block:calc(var(--spacing)*2);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-md));--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;flex-direction:column;transition-duration:.2s;display:flex}header .nav>li .desktop-nav .desktop-nav-list>li{margin:calc(var(--spacing)*0);list-style-type:none}header .nav>li .desktop-nav .desktop-nav-list>li>a{padding-inline:calc(var(--spacing)*4);white-space:nowrap;color:var(--foreground);text-decoration-line:none;display:block}[data-nav-type=mega-menu] :is(header .nav>li .desktop-nav .desktop-nav-list>li>a){padding-block:calc(var(--spacing)*3)}@media (hover:hover){[data-nav-type=mega-menu] :is(header .nav>li .desktop-nav .desktop-nav-list>li>a):hover{text-underline-offset:4px;text-decoration-line:underline;text-decoration-thickness:2px}}[data-nav-type=boxed-dropdown] :is(header .nav>li .desktop-nav .desktop-nav-list>li>a){margin-inline:calc(var(--spacing)*2);border-radius:calc(var(--radius-base)*1.5);padding-block:calc(var(--spacing)*2)}@media (hover:hover){[data-nav-type=boxed-dropdown] :is(header .nav>li .desktop-nav .desktop-nav-list>li>a):hover{background-color:var(--header-interactive)}}@media not all and (min-width:48rem){header .mobile-controls{flex-shrink:0;order:9999;align-items:center;display:flex}}@media (min-width:48rem){header .mobile-controls{display:none}}@media not all and (min-width:48rem){header .mobile-controls .mobile-menu-toggle{margin-left:calc(var(--spacing)*5);cursor:pointer;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){header .mobile-controls .mobile-menu-toggle:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}}header .mobile-controls .mobile-menu-toggle:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}header .mobile-controls .mobile-menu-toggle svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}@media not all and (min-width:48rem){header .mobile-controls .mobile-menu-toggle svg{color:var(--foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}header .mobile-controls .mobile-menu-toggle.active svg{rotate:180deg}}header #indicators{gap:calc(var(--spacing)*5);flex-direction:row-reverse;flex-shrink:0;display:flex}@media not all and (min-width:48rem){header #indicators{flex-shrink:0;order:2}}@media (min-width:48rem){header #indicators{gap:calc(var(--spacing)*8)}}header #indicators span[data-indicator]{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);cursor:pointer;font-size:0}header #indicators span[data-indicator]:before{content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);content:var(--tw-content);content:var(--tw-content);color:var(--foreground);background-color:currentColor;position:absolute}header #indicators span[data-indicator][data-indicator=media_error]:before{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M99.5149%20622.549C93.2144%20633.653%2093.4349%20634%20107.075%20634H651.912C665.537%20634%20665.757%20633.622%20659.473%20622.549L385.196%20138.236C378.99%20127.258%20379.998%20127.258%20373.792%20138.236L99.5149%20622.534V622.549ZM440.01%20107.161L714.303%20591.475C744.577%20644.978%20713.373%20697%20651.912%20697H107.075C45.5668%20697%2014.4423%20644.946%2044.7005%20591.506L318.977%20107.192C349.314%2053.5947%20409.705%2053.6105%20440.026%20107.192L440.01%20107.161ZM379.494%20586.75C383.631%20586.75%20387.728%20585.936%20391.551%20584.353C395.373%20582.77%20398.847%20580.45%20401.773%20577.525C404.698%20574.6%20407.019%20571.127%20408.603%20567.305C410.186%20563.483%20411.001%20559.387%20411.001%20555.25C411.001%20551.112%20410.186%20547.016%20408.603%20543.194C407.019%20539.372%20404.698%20535.899%20401.773%20532.974C398.847%20530.049%20395.373%20527.729%20391.551%20526.146C387.728%20524.563%20383.631%20523.749%20379.494%20523.749C371.14%20523.751%20363.128%20527.07%20357.221%20532.977C351.314%20538.885%20347.996%20546.896%20347.996%20555.25C347.996%20563.603%20351.314%20571.614%20357.221%20577.522C363.128%20583.429%20371.14%20586.748%20379.494%20586.75ZM347.991%20303.249V460.749C347.991%20469.104%20351.31%20477.116%20357.218%20483.023C363.126%20488.931%20371.139%20492.249%20379.494%20492.249C387.849%20492.249%20395.862%20488.931%20401.769%20483.023C407.677%20477.116%20410.996%20469.104%20410.996%20460.749V303.249C410.996%20294.894%20407.677%20286.882%20401.769%20280.975C395.862%20275.067%20387.849%20271.749%20379.494%20271.749C371.139%20271.749%20363.126%20275.067%20357.218%20280.975C351.31%20286.882%20347.991%20294.894%20347.991%20303.249Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M99.5149%20622.549C93.2144%20633.653%2093.4349%20634%20107.075%20634H651.912C665.537%20634%20665.757%20633.622%20659.473%20622.549L385.196%20138.236C378.99%20127.258%20379.998%20127.258%20373.792%20138.236L99.5149%20622.534V622.549ZM440.01%20107.161L714.303%20591.475C744.577%20644.978%20713.373%20697%20651.912%20697H107.075C45.5668%20697%2014.4423%20644.946%2044.7005%20591.506L318.977%20107.192C349.314%2053.5947%20409.705%2053.6105%20440.026%20107.192L440.01%20107.161ZM379.494%20586.75C383.631%20586.75%20387.728%20585.936%20391.551%20584.353C395.373%20582.77%20398.847%20580.45%20401.773%20577.525C404.698%20574.6%20407.019%20571.127%20408.603%20567.305C410.186%20563.483%20411.001%20559.387%20411.001%20555.25C411.001%20551.112%20410.186%20547.016%20408.603%20543.194C407.019%20539.372%20404.698%20535.899%20401.773%20532.974C398.847%20530.049%20395.373%20527.729%20391.551%20526.146C387.728%20524.563%20383.631%20523.749%20379.494%20523.749C371.14%20523.751%20363.128%20527.07%20357.221%20532.977C351.314%20538.885%20347.996%20546.896%20347.996%20555.25C347.996%20563.603%20351.314%20571.614%20357.221%20577.522C363.128%20583.429%20371.14%20586.748%20379.494%20586.75ZM347.991%20303.249V460.749C347.991%20469.104%20351.31%20477.116%20357.218%20483.023C363.126%20488.931%20371.139%20492.249%20379.494%20492.249C387.849%20492.249%20395.862%20488.931%20401.769%20483.023C407.677%20477.116%20410.996%20469.104%20410.996%20460.749V303.249C410.996%20294.894%20407.677%20286.882%20401.769%20280.975C395.862%20275.067%20387.849%20271.749%20379.494%20271.749C371.139%20271.749%20363.126%20275.067%20357.218%20280.975C351.31%20286.882%20347.991%20294.894%20347.991%20303.249Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat}header #indicators span[data-indicator][data-indicator=poll-status][data-style=active]:before{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M201.032%20123.921C202.67%20122.913%20204.182%20121.936%20205.537%20121.023C257.614%2085.7368%20319.094%2066.9154%20382%2067.0003C555.974%2067.0003%20697%20208.026%20697%20382C697.086%20440.93%20680.568%20498.691%20649.34%20548.666C648.405%20550.159%20647.097%20551.383%20645.545%20552.216C643.993%20553.05%20642.25%20553.465%20640.489%20553.42C638.728%20553.376%20637.009%20552.873%20635.501%20551.962C633.993%20551.051%20632.748%20549.763%20631.889%20548.225L552.509%20405.404C551.176%20403.007%20550.492%20400.303%20550.525%20397.56C550.558%20394.817%20551.307%20392.13%20552.698%20389.765C554.089%20387.401%20556.073%20385.44%20558.454%20384.078C560.836%20382.716%20563.531%20382%20566.275%20382H634C634.01%20335.412%20621.106%20289.734%20596.72%20250.038C572.334%20210.343%20537.422%20178.184%20495.861%20157.135C454.3%20136.085%20407.718%20126.968%20361.288%20130.797C314.858%20134.626%20270.398%20151.251%20232.847%20178.825C229.627%20181.188%20225.94%20182.839%20222.032%20183.668C218.124%20184.497%20214.085%20184.485%20210.182%20183.633C206.279%20182.781%20202.602%20181.108%20199.395%20178.726C196.189%20176.344%20193.525%20173.307%20191.582%20169.816L189.818%20166.666C185.825%20159.468%20184.763%20151.007%20186.852%20143.044C188.941%20135.082%20194.02%20128.232%20201.032%20123.921ZM558.715%20642.82C506.586%20678.213%20445.009%20697.092%20382%20697C208.025%20697%2067%20555.974%2067%20382C67%20322.969%2083.254%20267.718%20111.478%20220.5C112.696%20218.456%20114.432%20216.77%20116.509%20215.61C118.587%20214.45%20120.933%20213.858%20123.312%20213.893C125.691%20213.928%20128.019%20214.589%20130.061%20215.81C132.103%20217.03%20133.788%20218.768%20134.945%20220.846L211.49%20358.595C212.824%20360.993%20213.508%20363.697%20213.474%20366.44C213.441%20369.183%20212.692%20371.87%20211.302%20374.235C209.911%20376.599%20207.926%20378.56%20205.545%20379.922C203.164%20381.284%20200.468%20382%20197.725%20382H130C129.999%20428.603%20142.921%20474.294%20167.33%20513.993C191.739%20553.693%20226.679%20585.846%20268.265%20606.879C309.852%20627.913%20356.457%20637.002%20402.9%20633.137C449.342%20629.272%20493.803%20612.604%20531.341%20584.986C534.645%20582.52%20538.43%20580.775%20542.451%20579.865C546.472%20578.954%20550.64%20578.898%20554.684%20579.7C558.728%20580.501%20562.558%20582.143%20565.928%20584.519C569.297%20586.894%20572.131%20589.951%20574.244%20593.491C578.821%20601.138%20580.227%20610.272%20578.161%20618.941C576.095%20627.61%20570.721%20635.129%20563.188%20639.89C561.702%20640.833%20560.232%20641.799%20558.778%20642.788L558.715%20642.82Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M201.032%20123.921C202.67%20122.913%20204.182%20121.936%20205.537%20121.023C257.614%2085.7368%20319.094%2066.9154%20382%2067.0003C555.974%2067.0003%20697%20208.026%20697%20382C697.086%20440.93%20680.568%20498.691%20649.34%20548.666C648.405%20550.159%20647.097%20551.383%20645.545%20552.216C643.993%20553.05%20642.25%20553.465%20640.489%20553.42C638.728%20553.376%20637.009%20552.873%20635.501%20551.962C633.993%20551.051%20632.748%20549.763%20631.889%20548.225L552.509%20405.404C551.176%20403.007%20550.492%20400.303%20550.525%20397.56C550.558%20394.817%20551.307%20392.13%20552.698%20389.765C554.089%20387.401%20556.073%20385.44%20558.454%20384.078C560.836%20382.716%20563.531%20382%20566.275%20382H634C634.01%20335.412%20621.106%20289.734%20596.72%20250.038C572.334%20210.343%20537.422%20178.184%20495.861%20157.135C454.3%20136.085%20407.718%20126.968%20361.288%20130.797C314.858%20134.626%20270.398%20151.251%20232.847%20178.825C229.627%20181.188%20225.94%20182.839%20222.032%20183.668C218.124%20184.497%20214.085%20184.485%20210.182%20183.633C206.279%20182.781%20202.602%20181.108%20199.395%20178.726C196.189%20176.344%20193.525%20173.307%20191.582%20169.816L189.818%20166.666C185.825%20159.468%20184.763%20151.007%20186.852%20143.044C188.941%20135.082%20194.02%20128.232%20201.032%20123.921ZM558.715%20642.82C506.586%20678.213%20445.009%20697.092%20382%20697C208.025%20697%2067%20555.974%2067%20382C67%20322.969%2083.254%20267.718%20111.478%20220.5C112.696%20218.456%20114.432%20216.77%20116.509%20215.61C118.587%20214.45%20120.933%20213.858%20123.312%20213.893C125.691%20213.928%20128.019%20214.589%20130.061%20215.81C132.103%20217.03%20133.788%20218.768%20134.945%20220.846L211.49%20358.595C212.824%20360.993%20213.508%20363.697%20213.474%20366.44C213.441%20369.183%20212.692%20371.87%20211.302%20374.235C209.911%20376.599%20207.926%20378.56%20205.545%20379.922C203.164%20381.284%20200.468%20382%20197.725%20382H130C129.999%20428.603%20142.921%20474.294%20167.33%20513.993C191.739%20553.693%20226.679%20585.846%20268.265%20606.879C309.852%20627.913%20356.457%20637.002%20402.9%20633.137C449.342%20629.272%20493.803%20612.604%20531.341%20584.986C534.645%20582.52%20538.43%20580.775%20542.451%20579.865C546.472%20578.954%20550.64%20578.898%20554.684%20579.7C558.728%20580.501%20562.558%20582.143%20565.928%20584.519C569.297%20586.894%20572.131%20589.951%20574.244%20593.491C578.821%20601.138%20580.227%20610.272%20578.161%20618.941C576.095%20627.61%20570.721%20635.129%20563.188%20639.89C561.702%20640.833%20560.232%20641.799%20558.778%20642.788L558.715%20642.82Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat}header #indicators span[data-indicator][data-indicator=poll-status][data-style=inactive]:before{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M571.418%20595.528C580.7%20609.514%20576.962%20628.288%20563.018%20637.696C533.911%20657.268%20510.181%20670.456%20491.868%20677.302C456.716%20690.382%20419.502%20697.054%20381.995%20697C354.694%20697%20328.234%20693.514%20302.949%20687.004L335.962%20629.8C396.485%20641.014%20459.864%20629.8%20513.289%20597.124L530.089%20586.708C536.769%20582.478%20544.84%20581.032%20552.573%20582.681C560.306%20584.329%20567.086%20588.941%20571.46%20595.528H571.418ZM509.803%2094.006C529.123%20102.574%20547.477%20113.074%20564.53%20125.212L250.869%20668.482C231.733%20659.714%20213.526%20649.048%20196.52%20636.646L509.761%2094.006H509.803ZM381.995%2067C409.295%2067%20435.839%2070.486%20461.082%2076.996L427.985%20134.284L422.063%20133.234C371.12%20125.021%20318.883%20132.645%20272.412%20155.075C225.941%20177.505%20187.476%20213.659%20162.214%20258.653C136.953%20303.647%20126.112%20355.311%20131.158%20406.664C136.204%20458.017%20156.893%20506.583%20190.43%20545.8L157.459%20602.92C113.918%20558.666%2084.4251%20502.532%2072.6843%20441.57C60.9436%20380.609%2067.4788%20317.537%2091.469%20260.277C115.459%20203.018%20155.835%20154.123%20207.524%20119.736C259.213%2085.349%20319.912%2067.0021%20381.995%2067ZM606.572%20161.08C664.623%20219.944%20697.117%20299.327%20697%20382C697.058%20427.158%20687.374%20471.797%20668.607%20512.872C664.536%20521.456%20660.05%20529.838%20655.167%20537.988C653.67%20540.539%20651.526%20542.649%20648.952%20544.106C646.378%20545.563%20643.465%20546.315%20640.508%20546.285C637.55%20546.255%20634.653%20545.445%20632.109%20543.936C629.564%20542.428%20627.464%20540.274%20626.019%20537.694L609.932%20508.714L553.357%20406.948C551.939%20404.39%20551.212%20401.505%20551.251%20398.581C551.289%20395.656%20552.09%20392.791%20553.575%20390.271C555.06%20387.751%20557.177%20385.662%20559.717%20384.212C562.258%20382.761%20565.132%20381.998%20568.058%20382H633.999C634.02%20321.959%20612.568%20263.891%20573.518%20218.284L606.572%20161.122V161.08Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M571.418%20595.528C580.7%20609.514%20576.962%20628.288%20563.018%20637.696C533.911%20657.268%20510.181%20670.456%20491.868%20677.302C456.716%20690.382%20419.502%20697.054%20381.995%20697C354.694%20697%20328.234%20693.514%20302.949%20687.004L335.962%20629.8C396.485%20641.014%20459.864%20629.8%20513.289%20597.124L530.089%20586.708C536.769%20582.478%20544.84%20581.032%20552.573%20582.681C560.306%20584.329%20567.086%20588.941%20571.46%20595.528H571.418ZM509.803%2094.006C529.123%20102.574%20547.477%20113.074%20564.53%20125.212L250.869%20668.482C231.733%20659.714%20213.526%20649.048%20196.52%20636.646L509.761%2094.006H509.803ZM381.995%2067C409.295%2067%20435.839%2070.486%20461.082%2076.996L427.985%20134.284L422.063%20133.234C371.12%20125.021%20318.883%20132.645%20272.412%20155.075C225.941%20177.505%20187.476%20213.659%20162.214%20258.653C136.953%20303.647%20126.112%20355.311%20131.158%20406.664C136.204%20458.017%20156.893%20506.583%20190.43%20545.8L157.459%20602.92C113.918%20558.666%2084.4251%20502.532%2072.6843%20441.57C60.9436%20380.609%2067.4788%20317.537%2091.469%20260.277C115.459%20203.018%20155.835%20154.123%20207.524%20119.736C259.213%2085.349%20319.912%2067.0021%20381.995%2067ZM606.572%20161.08C664.623%20219.944%20697.117%20299.327%20697%20382C697.058%20427.158%20687.374%20471.797%20668.607%20512.872C664.536%20521.456%20660.05%20529.838%20655.167%20537.988C653.67%20540.539%20651.526%20542.649%20648.952%20544.106C646.378%20545.563%20643.465%20546.315%20640.508%20546.285C637.55%20546.255%20634.653%20545.445%20632.109%20543.936C629.564%20542.428%20627.464%20540.274%20626.019%20537.694L609.932%20508.714L553.357%20406.948C551.939%20404.39%20551.212%20401.505%20551.251%20398.581C551.289%20395.656%20552.09%20392.791%20553.575%20390.271C555.06%20387.751%20557.177%20385.662%20559.717%20384.212C562.258%20382.761%20565.132%20381.998%20568.058%20382H633.999C634.02%20321.959%20612.568%20263.891%20573.518%20218.284L606.572%20161.122V161.08Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat}header #indicators span[data-indicator][data-indicator=uci-changes]{position:relative}header #indicators span[data-indicator][data-indicator=uci-changes]:before{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1758476543825'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='17352'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M439.594667%2085.333333h144.810666a70.4%2070.4%200%200%201%2070.101334%2060.970667l5.802666%2044.8a17.066667%2017.066667%200%200%200%208.192%2012.458667l38.058667%2022.528a17.066667%2017.066667%200%200%200%2015.146667%201.109333l46.848-19.2a71.082667%2071.082667%200%200%201%2088.021333%2029.226667l72.405333%20122.069333c18.218667%2030.72%2010.069333%2069.973333-18.688%2091.221333l-45.184%2033.408a17.066667%2017.066667%200%200%200-6.912%2013.696v28.757334a17.066667%2017.066667%200%200%200%206.912%2013.696l45.226667%2033.408c28.714667%2021.205333%2036.864%2060.458667%2018.645333%2091.221333l-72.405333%20122.026667a71.082667%2071.082667%200%200%201-88.021333%2029.226666l-46.848-19.2a17.066667%2017.066667%200%200%200-15.146667%201.152l-38.058667%2022.528a17.066667%2017.066667%200%200%200-8.192%2012.501334l-5.802666%2044.8A70.4%2070.4%200%200%201%20584.405333%20938.666667h-144.810666a70.4%2070.4%200%200%201-70.101334-60.970667l-5.802666-44.8a17.066667%2017.066667%200%200%200-8.192-12.458667l-38.058667-22.528a17.066667%2017.066667%200%200%200-15.146667-1.109333l-46.848%2019.2a71.082667%2071.082667%200%200%201-88.021333-29.226667l-72.405333-122.069333a69.290667%2069.290667%200%200%201%2018.688-91.221333l45.184-33.408a17.066667%2017.066667%200%200%200%206.912-13.696v-28.757334a17.066667%2017.066667%200%200%200-6.912-13.696l-45.226667-33.408a69.290667%2069.290667%200%200%201-18.645333-91.221333l72.405333-122.026667a71.082667%2071.082667%200%200%201%2088.021333-29.226666l46.848%2019.2a17.066667%2017.066667%200%200%200%2015.146667-1.152l38.058667-22.528a17.066667%2017.066667%200%200%200%208.192-12.501334l5.802666-44.8A70.4%2070.4%200%200%201%20439.594667%2085.333333z%20m1.024%20130.688a75.818667%2075.818667%200%200%201-36.821334%2055.466667l-51.712%2030.464a76.970667%2076.970667%200%200%201-67.925333%204.906667l-35.328-14.336a17.066667%2017.066667%200%200%200-21.077333%207.04L178.645333%20381.738667a17.066667%2017.066667%200%200%200%204.565334%2022.528l33.066666%2024.277333c19.541333%2014.293333%2031.018667%2036.906667%2031.018667%2061.013333v44.885334c0%2024.106667-11.52%2046.72-31.018667%2061.013333l-33.066666%2024.277333a17.066667%2017.066667%200%200%200-4.565334%2022.528l49.066667%2082.176a17.066667%2017.066667%200%200%200%2021.12%207.04l35.328-14.336a76.970667%2076.970667%200%200%201%2067.925333%204.906667l51.712%2030.421333c20.224%2011.946667%2033.792%2032.384%2036.821334%2055.509334l4.010666%2030.506666a17.066667%2017.066667%200%200%200%2016.896%2014.848h100.949334a17.066667%2017.066667%200%200%200%2016.896-14.848l4.010666-30.506666c2.986667-23.125333%2016.597333-43.605333%2036.821334-55.466667l51.712-30.464a76.970667%2076.970667%200%200%201%2067.925333-4.906667l35.328%2014.336a17.066667%2017.066667%200%200%200%2021.077333-7.04l49.109334-82.176a17.066667%2017.066667%200%200%200-4.565334-22.528l-33.066666-24.277333a75.648%2075.648%200%200%201-31.018667-61.013333v-44.885334c0-24.106667%2011.52-46.72%2031.018667-61.013333l33.066666-24.277333a17.066667%2017.066667%200%200%200%204.565334-22.528l-49.066667-82.176a17.066667%2017.066667%200%200%200-21.12-7.04l-35.328%2014.336c-22.186667%209.045333-47.317333%207.210667-67.925333-4.906667l-51.712-30.421333a75.818667%2075.818667%200%200%201-36.821334-55.509334l-4.010666-30.506666A17.066667%2017.066667%200%200%200%20562.474667%20170.666667h-100.949334a17.066667%2017.066667%200%200%200-16.896%2014.848l-4.010666%2030.506666zM682.666667%20512a42.666667%2042.666667%200%200%201-85.333334%200%2085.333333%2085.333333%200%201%200-85.333333%2085.333333%2042.666667%2042.666667%200%200%201%200%2085.333334%20170.666667%20170.666667%200%201%201%20170.666667-170.666667z'%20fill='%230f162b'%20p-id='17353'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1758476543825'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='17352'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M439.594667%2085.333333h144.810666a70.4%2070.4%200%200%201%2070.101334%2060.970667l5.802666%2044.8a17.066667%2017.066667%200%200%200%208.192%2012.458667l38.058667%2022.528a17.066667%2017.066667%200%200%200%2015.146667%201.109333l46.848-19.2a71.082667%2071.082667%200%200%201%2088.021333%2029.226667l72.405333%20122.069333c18.218667%2030.72%2010.069333%2069.973333-18.688%2091.221333l-45.184%2033.408a17.066667%2017.066667%200%200%200-6.912%2013.696v28.757334a17.066667%2017.066667%200%200%200%206.912%2013.696l45.226667%2033.408c28.714667%2021.205333%2036.864%2060.458667%2018.645333%2091.221333l-72.405333%20122.026667a71.082667%2071.082667%200%200%201-88.021333%2029.226666l-46.848-19.2a17.066667%2017.066667%200%200%200-15.146667%201.152l-38.058667%2022.528a17.066667%2017.066667%200%200%200-8.192%2012.501334l-5.802666%2044.8A70.4%2070.4%200%200%201%20584.405333%20938.666667h-144.810666a70.4%2070.4%200%200%201-70.101334-60.970667l-5.802666-44.8a17.066667%2017.066667%200%200%200-8.192-12.458667l-38.058667-22.528a17.066667%2017.066667%200%200%200-15.146667-1.109333l-46.848%2019.2a71.082667%2071.082667%200%200%201-88.021333-29.226667l-72.405333-122.069333a69.290667%2069.290667%200%200%201%2018.688-91.221333l45.184-33.408a17.066667%2017.066667%200%200%200%206.912-13.696v-28.757334a17.066667%2017.066667%200%200%200-6.912-13.696l-45.226667-33.408a69.290667%2069.290667%200%200%201-18.645333-91.221333l72.405333-122.026667a71.082667%2071.082667%200%200%201%2088.021333-29.226666l46.848%2019.2a17.066667%2017.066667%200%200%200%2015.146667-1.152l38.058667-22.528a17.066667%2017.066667%200%200%200%208.192-12.501334l5.802666-44.8A70.4%2070.4%200%200%201%20439.594667%2085.333333z%20m1.024%20130.688a75.818667%2075.818667%200%200%201-36.821334%2055.466667l-51.712%2030.464a76.970667%2076.970667%200%200%201-67.925333%204.906667l-35.328-14.336a17.066667%2017.066667%200%200%200-21.077333%207.04L178.645333%20381.738667a17.066667%2017.066667%200%200%200%204.565334%2022.528l33.066666%2024.277333c19.541333%2014.293333%2031.018667%2036.906667%2031.018667%2061.013333v44.885334c0%2024.106667-11.52%2046.72-31.018667%2061.013333l-33.066666%2024.277333a17.066667%2017.066667%200%200%200-4.565334%2022.528l49.066667%2082.176a17.066667%2017.066667%200%200%200%2021.12%207.04l35.328-14.336a76.970667%2076.970667%200%200%201%2067.925333%204.906667l51.712%2030.421333c20.224%2011.946667%2033.792%2032.384%2036.821334%2055.509334l4.010666%2030.506666a17.066667%2017.066667%200%200%200%2016.896%2014.848h100.949334a17.066667%2017.066667%200%200%200%2016.896-14.848l4.010666-30.506666c2.986667-23.125333%2016.597333-43.605333%2036.821334-55.466667l51.712-30.464a76.970667%2076.970667%200%200%201%2067.925333-4.906667l35.328%2014.336a17.066667%2017.066667%200%200%200%2021.077333-7.04l49.109334-82.176a17.066667%2017.066667%200%200%200-4.565334-22.528l-33.066666-24.277333a75.648%2075.648%200%200%201-31.018667-61.013333v-44.885334c0-24.106667%2011.52-46.72%2031.018667-61.013333l33.066666-24.277333a17.066667%2017.066667%200%200%200%204.565334-22.528l-49.066667-82.176a17.066667%2017.066667%200%200%200-21.12-7.04l-35.328%2014.336c-22.186667%209.045333-47.317333%207.210667-67.925333-4.906667l-51.712-30.421333a75.818667%2075.818667%200%200%201-36.821334-55.509334l-4.010666-30.506666A17.066667%2017.066667%200%200%200%20562.474667%20170.666667h-100.949334a17.066667%2017.066667%200%200%200-16.896%2014.848l-4.010666%2030.506666zM682.666667%20512a42.666667%2042.666667%200%200%201-85.333334%200%2085.333333%2085.333333%200%201%200-85.333333%2085.333333%2042.666667%2042.666667%200%200%201%200%2085.333334%20170.666667%20170.666667%200%201%201%20170.666667-170.666667z'%20fill='%230f162b'%20p-id='17353'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat}header #indicators span[data-indicator][data-indicator=uci-changes][data-count]:not([data-count="0"]):after{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*-.5);content:var(--tw-content);right:calc(var(--spacing)*-.5);content:var(--tw-content);z-index:10;content:var(--tw-content);content:var(--tw-content);min-height:calc(var(--spacing)*3);content:var(--tw-content);min-width:calc(var(--spacing)*3);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);background-color:var(--accent);content:var(--tw-content);padding-inline:calc(var(--spacing)*.5);content:var(--tw-content);content:var(--tw-content);--tw-leading:1;content:var(--tw-content);--tw-font-weight:var(--font-weight-bold);font-size:8px;line-height:1;font-weight:var(--font-weight-bold);content:var(--tw-content);color:var(--accent-foreground);content:var(--tw-content);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-content:attr(data-count);content:var(--tw-content);border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex;position:absolute}#maincontent{width:95.8333%;min-height:calc(100vh - 4rem);max-width:var(--container-max-width);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media not all and (min-width:48rem){#maincontent{width:100%;padding-inline:calc(var(--spacing)*3)}}#maincontent #view{margin-inline:calc(var(--spacing)*0);width:100%;animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);padding:calc(var(--spacing)*0);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-enter-opacity:0;--tw-animation-fill-mode:both;--tw-enter-translate-y:calc(2*var(--spacing)*-1);transition-duration:.3s;animation-fill-mode:both}#maincontent #view:empty{display:none}@media (min-width:48rem){#maincontent #view{border-radius:calc(var(--radius-base)*4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#maincontent #view{border-color:color-mix(in oklab,var(--border)30%,transparent)}}#maincontent #view{background-color:var(--page-bg);padding:calc(var(--spacing)*6);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){#maincontent #view:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#maincontent #view:hover{border-color:color-mix(in oklab,var(--border)50%,transparent)}}#maincontent #view:hover{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}#maincontent #view .cbi-title-section{margin-bottom:calc(var(--spacing)*6);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}@media not all and (min-width:48rem){#maincontent #view .cbi-title-section{margin-inline:calc(var(--spacing)*2);margin-bottom:calc(var(--spacing)*3)}}#maincontent #view .controls{margin:calc(var(--spacing)*2);align-items:center;gap:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}@media not all and (min-width:48rem){#maincontent #view .controls{margin:calc(var(--spacing)*1);gap:calc(var(--spacing)*2)}}#maincontent #view .controls label input[type=radio],#maincontent #view .controls label input[type=checkbox]{margin-right:calc(var(--spacing)*1);vertical-align:middle}#maincontent #view #content_syslog{margin:calc(var(--spacing)*2)}@media not all and (min-width:48rem){#maincontent #view #content_syslog{margin:calc(var(--spacing)*1)}}#maincontent #view #content_syslog>div{align-items:baseline;column-gap:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}@media not all and (min-width:48rem){#maincontent #view #content_syslog>div{column-gap:calc(var(--spacing)*1.5)}#maincontent #view #content_syslog>div>.cbi-input-select,#maincontent #view #content_syslog>div>.cbi-input-text{min-width:calc(var(--spacing)*45)}}#maincontent #view div[style]>svg:where([data-darkmode=true],[data-darkmode=true] *){background-color:var(--page-bg)!important}#maincontent #view div[style]>svg line[style]:where([data-darkmode=true],[data-darkmode=true] *){stroke:var(--foreground)!important}#maincontent .cbi-map-descr,#maincontent .cbi-section-descr{margin-bottom:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--muted-foreground)}@media not all and (min-width:48rem){#maincontent .cbi-map-descr,#maincontent .cbi-section-descr{margin-inline:calc(var(--spacing)*2);margin-bottom:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}#maincontent .cbi-page-actions{margin-top:calc(var(--spacing)*6);justify-content:flex-end;align-items:center;gap:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);flex-wrap:wrap;display:flex}@supports (color:color-mix(in lab, red, red)){#maincontent .cbi-page-actions{border-color:color-mix(in oklab,var(--border)50%,transparent)}}#maincontent .cbi-page-actions{padding-top:calc(var(--spacing)*4)}@media not all and (min-width:48rem){#maincontent .cbi-page-actions{margin-inline:calc(var(--spacing)*2);margin-top:calc(var(--spacing)*4);gap:calc(var(--spacing)*2);padding-top:calc(var(--spacing)*3)}}#maincontent .zone-forwards{align-items:flex-start;gap:calc(var(--spacing)*3);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);display:flex}#maincontent .zone-forwards>span{margin-top:calc(var(--spacing)*1.5);color:var(--muted-foreground)}#maincontent .zone-forwards .zone-dest{align-items:flex-start;gap:calc(var(--spacing)*2);flex-direction:column;display:flex}#maincontent #syslog,#maincontent #log_textarea{width:100%;font-family:var(--font-mono);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}#maincontent #syslog{border-radius:calc(var(--radius-base)*3);border-style:var(--tw-border-style);background-color:var(--terminal-bg);padding:calc(var(--spacing)*6);color:var(--terminal-foreground);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px}@media not all and (min-width:48rem){#maincontent #syslog{padding:calc(var(--spacing)*3)}}footer{margin-top:calc(var(--spacing)*2);min-height:calc(var(--spacing)*16);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--secondary-foreground);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}footer a{color:var(--primary)}footer span{text-align:center;display:inline-block}footer .breadcrumb{align-items:center;gap:calc(var(--spacing)*1);background-color:var(--page-bg);border-radius:3.40282e38px;display:flex}@supports (color:color-mix(in lab, red, red)){footer .breadcrumb{background-color:color-mix(in oklab,var(--page-bg)60%,transparent)}}footer .breadcrumb{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){footer .breadcrumb:hover{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){footer .breadcrumb:hover{background-color:color-mix(in oklab,var(--page-bg)80%,transparent)}}footer .breadcrumb:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}footer .breadcrumb li{list-style-type:none}footer .breadcrumb li.active a{color:var(--default-foreground)}.control-group{margin-top:calc(var(--spacing)*1)}.control-group,.cbi-page-actions>div,.cbi-section-actions>div{align-items:center;gap:calc(var(--spacing)*2);flex-flow:row;display:flex}@media not all and (min-width:48rem){.control-group,.cbi-page-actions>div,.cbi-section-actions>div{gap:calc(var(--spacing)*1);flex-wrap:wrap}}.theme-switcher{align-items:center;gap:calc(var(--spacing)*0);background-color:var(--page-bg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;border-radius:3.40282e38px;transition-duration:.3s;display:inline-flex;position:relative}@media not all and (min-width:48rem){.theme-switcher{padding-block:calc(var(--spacing)*.5)}}.theme-switcher{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.theme-switcher{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.theme-switcher:before{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*1);content:var(--tw-content);left:calc(var(--spacing)*1);content:var(--tw-content);z-index:0;content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);background-color:var(--border);border-radius:3.40282e38px;width:calc(33.333% - .5rem);height:calc(100% - .5rem);position:absolute}@supports (color:color-mix(in lab, red, red)){.theme-switcher:before{background-color:color-mix(in oklab,var(--border)50%,transparent)}}.theme-switcher:before{content:var(--tw-content);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:var(--tw-content);--tw-ring-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.theme-switcher:before{--tw-ring-color:color-mix(in oklab,var(--border)60%,transparent)}}.theme-switcher:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-duration:.3s;transition-duration:.3s}@media not all and (min-width:48rem){footer .theme-switcher{display:none}}.theme-switcher .theme-option{z-index:10;cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;border-radius:3.40282e38px;transition-duration:.3s;display:flex;position:relative}@media (hover:hover){.theme-switcher .theme-option:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.theme-switcher .theme-option:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.theme-switcher .theme-option input[type=radio]{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.theme-switcher .theme-option .theme-icon{color:var(--muted-foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;justify-content:center;align-items:center;transition-duration:.3s;display:flex}.theme-switcher .theme-option .theme-icon svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.theme-switcher .theme-option .theme-label{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s;display:none}.theme-switcher .theme-option.active .theme-icon{color:var(--foreground)}.theme-switcher .theme-option.active .theme-icon svg{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.theme-switcher .theme-option.active .theme-label,.theme-switcher .theme-option:hover:not(.active) .theme-icon,.theme-switcher .theme-option:hover:not(.active) .theme-label{color:var(--foreground)}.theme-switcher:has(.theme-option[data-theme=device].active):before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.theme-switcher:has(.theme-option[data-theme=light].active):before{content:var(--tw-content);--tw-translate-x:calc(100% + .5rem);translate:var(--tw-translate-x)var(--tw-translate-y)}.theme-switcher:has(.theme-option[data-theme=dark].active):before{content:var(--tw-content);--tw-translate-x:calc(200% + 1rem);translate:var(--tw-translate-x)var(--tw-translate-y)}.floating-toolbar{right:calc(var(--spacing)*4);bottom:calc(var(--spacing)*4);z-index:40;flex-direction:column;align-items:center;display:flex;position:fixed}@media not all and (min-width:48rem){.floating-toolbar{right:calc(var(--spacing)*3);bottom:calc(var(--spacing)*3)}}.floating-toolbar .toolbar-list{visibility:visible;margin-bottom:calc(var(--spacing)*2);transform-origin:bottom;opacity:1;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.4s;--tw-ease:var(--ease-in-out);transition-duration:.4s;transition-timing-function:var(--ease-in-out);grid-template-rows:1fr;display:grid}@media not all and (min-width:48rem){.floating-toolbar .toolbar-list{margin-bottom:calc(var(--spacing)*1.5)}}.floating-toolbar .toolbar-list .toolbar-list-inner{min-height:calc(var(--spacing)*0);align-items:center;gap:calc(var(--spacing)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);border-radius:3.40282e38px;flex-direction:column;display:flex;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.floating-toolbar .toolbar-list .toolbar-list-inner{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.floating-toolbar .toolbar-list .toolbar-list-inner{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){.floating-toolbar .toolbar-list .toolbar-list-inner{background-color:color-mix(in oklab,var(--page-bg)90%,transparent)}}.floating-toolbar .toolbar-list .toolbar-list-inner{padding:calc(var(--spacing)*1);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media not all and (min-width:48rem){.floating-toolbar .toolbar-list .toolbar-list-inner{gap:calc(var(--spacing)*1.5);padding:calc(var(--spacing)*.5)}}.floating-toolbar .toolbar-btn{height:calc(var(--spacing)*10);width:calc(var(--spacing)*10);cursor:pointer;padding:calc(var(--spacing)*2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);border-radius:3.40282e38px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.floating-toolbar .toolbar-btn:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media not all and (min-width:48rem){.floating-toolbar .toolbar-btn{height:calc(var(--spacing)*9);width:calc(var(--spacing)*9);padding:calc(var(--spacing)*1.5)}}.floating-toolbar .toolbar-btn .icon{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);flex-shrink:0}@media not all and (min-width:48rem){.floating-toolbar .toolbar-btn .icon{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}}.floating-toolbar .toolbar-btn:not(.toggle){text-decoration-line:none}@media (hover:hover){.floating-toolbar .toolbar-btn:not(.toggle):hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y);background-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.floating-toolbar .toolbar-btn:not(.toggle):hover{background-color:color-mix(in oklab,var(--border)40%,transparent)}}}.floating-toolbar .toolbar-btn:not(.toggle) .icon{object-fit:contain}.floating-toolbar .toolbar-btn:not(.toggle) .icon:where([data-darkmode=true],[data-darkmode=true] *){--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.floating-toolbar .toolbar-btn.toggle{border-style:var(--tw-border-style);background-color:var(--page-bg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:0}.floating-toolbar .toolbar-btn.toggle .icon{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.4s;--tw-ease:var(--ease-out);transition-duration:.4s;transition-timing-function:var(--ease-out)}.floating-toolbar.collapsed .toolbar-list{pointer-events:none;visibility:hidden;margin-bottom:calc(var(--spacing)*0);--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:0;grid-template-rows:0fr}.floating-toolbar.collapsed .toolbar-btn:not(.toggle){--tw-scale-x:50%;--tw-scale-y:50%;--tw-scale-z:50%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:0}.floating-toolbar.collapsed .toolbar-btn.toggle .icon{rotate:45deg}button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px;display:inline-flex}@media not all and (min-width:48rem){button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}:is(button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button)[disabled]{cursor:not-allowed;opacity:.4}:is(button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button)[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.td :is(button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button){white-space:nowrap;flex:none;width:auto;display:inline-flex}@media not all and (min-width:48rem){.td :is(button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button){min-height:calc(var(--spacing)*9);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.btn,.cbi-button,.cbi-button-default,.cbi-button-download,.cbi-button-find,.cbi-button-link,.cbi-button-up,.cbi-button-down{border-color:var(--secondary);background-color:var(--secondary);color:var(--secondary-foreground)}@media (hover:hover){:is(.btn,.cbi-button,.cbi-button-default,.cbi-button-download,.cbi-button-find,.cbi-button-link,.cbi-button-up,.cbi-button-down):hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.cbi-button,.cbi-button-default,.cbi-button-download,.cbi-button-find,.cbi-button-link,.cbi-button-up,.cbi-button-down):hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}}.drag-handle{border-color:var(--muted);background-color:var(--muted);color:var(--muted-foreground)}@media (hover:hover){.drag-handle:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.drag-handle:hover{background-color:color-mix(in oklab,var(--muted)90%,transparent)}}}.btn.primary,.cbi-button-action,.cbi-button-apply,.cbi-button-reload,.cbi-button-add,.cbi-button-edit{border-color:var(--primary);background-color:var(--primary);color:var(--primary-foreground)}@media (hover:hover){:is(.btn.primary,.cbi-button-action,.cbi-button-apply,.cbi-button-reload,.cbi-button-add,.cbi-button-edit):hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){:is(.btn.primary,.cbi-button-action,.cbi-button-apply,.cbi-button-reload,.cbi-button-add,.cbi-button-edit):hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}}.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{border-color:color-mix(in oklab,var(--primary)25%,transparent)}}.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{background-color:color-mix(in oklab,var(--primary)25%,transparent)}}.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{color:var(--primary)}@media (hover:hover){:is(.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save):hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){:is(.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save):hover{background-color:color-mix(in oklab,var(--primary)30%,transparent)}}}.cbi-button-negative,.cbi-section-remove .cbi-button,.cbi-button-reset,.cbi-button-remove{border-color:var(--destructive);background-color:var(--destructive);color:var(--destructive-foreground)}@media (hover:hover){:is(.cbi-button-negative,.cbi-section-remove .cbi-button,.cbi-button-reset,.cbi-button-remove):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.cbi-button-negative,.cbi-section-remove .cbi-button,.cbi-button-reset,.cbi-button-remove):hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}}input:disabled{cursor:not-allowed;opacity:.4}input:disabled:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}input[type=text],input[type=password],.cbi-input-text,.cbi-input{border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);position:relative}@supports (color:color-mix(in lab, red, red)){input[type=text],input[type=password],.cbi-input-text,.cbi-input{border-color:color-mix(in oklab,var(--border)70%,transparent)}}input[type=text],input[type=password],.cbi-input-text,.cbi-input{background-color:var(--page-bg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--foreground)}:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input)::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input)::placeholder{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}input[type=text],input[type=password],.cbi-input-text,.cbi-input{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input):focus{border-color:var(--primary);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input):focus{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input):focus{--tw-outline-style:none;outline-style:none}.table.cbi-section-table :is(input[type=text],input[type=password],.cbi-input-text,.cbi-input){width:100%}.cbi-input-text{min-width:calc(var(--spacing)*20)}@media not all and (min-width:48rem){.cbi-input-text{min-width:calc(var(--spacing)*14)}}#localtime{min-width:calc(var(--spacing)*70)}input[type=radio],input[type=checkbox]{margin-right:calc(var(--spacing)*3);height:calc(var(--spacing)*4);width:calc(var(--spacing)*4);cursor:pointer;appearance:none;display:inline-block;position:relative}:is(input[type=radio],input[type=checkbox]):before{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*0);content:var(--tw-content);left:calc(var(--spacing)*0);content:var(--tw-content);height:calc(var(--spacing)*4);content:var(--tw-content);width:calc(var(--spacing)*4);content:var(--tw-content);border-style:var(--tw-border-style);content:var(--tw-content);border-width:1px;border-color:var(--border);position:absolute}@supports (color:color-mix(in lab, red, red)){:is(input[type=radio],input[type=checkbox]):before{border-color:color-mix(in oklab,var(--border)70%,transparent)}}:is(input[type=radio],input[type=checkbox]):before{content:var(--tw-content);background-color:var(--page-bg)}:is(input[type=radio],input[type=checkbox]):after{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*.5);content:var(--tw-content);left:calc(var(--spacing)*.5);content:var(--tw-content);height:calc(var(--spacing)*3);content:var(--tw-content);width:calc(var(--spacing)*3);content:var(--tw-content);background-color:var(--input-checked);content:var(--tw-content);opacity:0;content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-duration:.2s;transition-duration:.2s;position:absolute}:is(input[type=radio],input[type=checkbox]):checked:before{content:var(--tw-content);border-color:var(--primary);content:var(--tw-content);background-color:var(--primary)}:is(input[type=radio],input[type=checkbox]):checked:after{content:var(--tw-content);opacity:1}@media (hover:hover){:is(input[type=radio],input[type=checkbox]):hover:before{content:var(--tw-content);border-color:var(--border)}}:is(input[type=radio],input[type=checkbox]):focus:before{content:var(--tw-content);border-color:var(--primary);content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:var(--tw-content);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){:is(input[type=radio],input[type=checkbox]):focus:before{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}:is(input[type=radio],input[type=checkbox]):focus:before{content:var(--tw-content);--tw-outline-style:none;outline-style:none}:is(input[type=radio],input[type=checkbox]):disabled{cursor:not-allowed}input[type=radio]:before{content:var(--tw-content);border-radius:3.40282e38px}input[type=radio]:after{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3ccircle%20cx='12'%20cy='12'%20r='6'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3ccircle%20cx='12'%20cy='12'%20r='6'/%3e%3c/svg%3e") 50%/cover no-repeat}input[type=checkbox]:before{content:var(--tw-content);border-radius:calc(var(--radius-base)*.5)}input[type=checkbox]:after{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1760890864667'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='18898'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M918.8%2083.7c-43.5-30.3-104-19.5-134.6%2024.1l-425.8%20606-127-135.7c-36.4-38.9-98.1-41.1-137-4.8-39%2036.2-41.1%2097.7-4.7%20136.6l206.5%20220.7c4.7%205%209.8%209.4%2015.1%2013.1%200.7%200.5%201.4%201%202.2%201.5%2043.5%2030.3%20104%2019.5%20134.6-24.1l494-703.2c30.7-43.5%2020.1-103.9-23.3-134.2z'%20fill='%230f162b'%20p-id='18899'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1760890864667'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='18898'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M918.8%2083.7c-43.5-30.3-104-19.5-134.6%2024.1l-425.8%20606-127-135.7c-36.4-38.9-98.1-41.1-137-4.8-39%2036.2-41.1%2097.7-4.7%20136.6l206.5%20220.7c4.7%205%209.8%209.4%2015.1%2013.1%200.7%200.5%201.4%201%202.2%201.5%2043.5%2030.3%20104%2019.5%20134.6-24.1l494-703.2c30.7-43.5%2020.1-103.9-23.3-134.2z'%20fill='%230f162b'%20p-id='18899'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat}.cbi-checkbox{align-items:center;display:inline-flex;position:relative}textarea{min-height:calc(var(--spacing)*24);resize:vertical;border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);width:100%}@supports (color:color-mix(in lab, red, red)){textarea{border-color:color-mix(in oklab,var(--border)70%,transparent)}}textarea{background-color:var(--page-bg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--foreground)}textarea::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){textarea::placeholder{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}textarea{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}textarea:focus{border-color:var(--primary);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){textarea:focus{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}textarea:focus{--tw-outline-style:none;outline-style:none}textarea[disabled]{cursor:not-allowed;opacity:.4}textarea[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}select{appearance:none;border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){select{border-color:color-mix(in oklab,var(--border)70%,transparent)}}select{background-color:var(--page-bg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);padding-right:calc(var(--spacing)*10);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--foreground);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}select:focus{border-color:var(--primary);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){select:focus{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}select:focus{--tw-outline-style:none;outline-style:none}select{background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M5.22%208.22a.75.75%200%200%201%201.06%200L10%2011.94l3.72-3.72a.75.75%200%201%201%201.06%201.06l-4.25%204.25a.75.75%200%200%201-1.06%200L5.22%209.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e");background-position:right .75rem center;background-repeat:no-repeat;background-size:16px}select:where([data-darkmode=true],[data-darkmode=true] *){background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23ffffff'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M5.22%208.22a.75.75%200%200%201%201.06%200L10%2011.94l3.72-3.72a.75.75%200%201%201%201.06%201.06l-4.25%204.25a.75.75%200%200%201-1.06%200L5.22%209.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e")}select[disabled]{cursor:not-allowed;opacity:.4}select[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.cbi-dropdown{min-width:fit-content;max-width:100%;height:fit-content;padding:calc(var(--spacing)*0);white-space:nowrap;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-shrink:0;align-items:center;display:inline-flex}.cbi-dropdown[disabled]{pointer-events:none;opacity:.4}.cbi-dropdown[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.cbi-dropdown:not(.btn):not(.cbi-button){border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown:not(.btn):not(.cbi-button){border-color:color-mix(in oklab,var(--border)70%,transparent)}}.cbi-dropdown:not(.btn):not(.cbi-button){background-color:var(--page-bg)}.cbi-dropdown:not(.btn):not(.cbi-button)>ul>li[placeholder]{display:none}.cbi-dropdown>ul{margin:calc(var(--spacing)*0);align-items:center;gap:calc(var(--spacing)*.5);flex-wrap:nowrap;flex:1;list-style-type:none;display:flex;overflow:hidden}@media not all and (min-width:48rem){.cbi-dropdown>ul{flex-wrap:wrap}}.cbi-dropdown>ul>li{margin:calc(var(--spacing)*0);align-items:center;gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);list-style-type:none;display:none;overflow:hidden}.cbi-dropdown>ul>li[display]{display:flex!important}.cbi-dropdown>ul>li .hide-open{display:block}.cbi-dropdown>ul>li .hide-close{display:none}.cbi-dropdown>ul>li>form{pointer-events:none;display:none}.cbi-dropdown>ul>li>label{align-items:center;gap:calc(var(--spacing)*2);display:flex}.cbi-dropdown>ul>li img{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5);vertical-align:middle;flex:none}.cbi-dropdown>ul>li span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cbi-dropdown>ul.dropdown{left:calc(var(--spacing)*0);z-index:60;border-radius:var(--radius-base);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);width:fit-content;min-width:100%;position:absolute;overflow-y:auto}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown>ul.dropdown{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.cbi-dropdown>ul.dropdown{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown>ul.dropdown{background-color:color-mix(in oklab,var(--page-bg)95%,transparent)}}.cbi-dropdown>ul.dropdown{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.cbi-dropdown>ul.dropdown>li{min-height:calc(var(--spacing)*9);cursor:pointer;width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground)}@media (hover:hover){.cbi-dropdown>ul.dropdown>li:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown>ul.dropdown>li:hover{background-color:color-mix(in oklab,var(--primary)15%,transparent)}}}.cbi-dropdown>ul.preview{display:none}.cbi-dropdown[empty]>ul{max-width:1px;max-height:1px}.cbi-dropdown[empty]>ul>li,.cbi-dropdown[optional][open]>ul.dropdown>li[placeholder]{display:block}.cbi-dropdown[open]{border-color:var(--primary);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary);position:relative}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown[open]{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}.cbi-dropdown[open]>ul.dropdown{width:auto;max-width:none;display:block}.cbi-dropdown[open]>ul.dropdown>li{display:flex}.cbi-dropdown[open]>ul.dropdown>li[selected]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown[open]>ul.dropdown>li[selected]{background-color:color-mix(in oklab,var(--primary)20%,transparent)}}.cbi-dropdown[open]>ul.dropdown>li[selected]{color:var(--primary)}.cbi-dropdown[open]>ul.dropdown>li[unselectable]{opacity:.4}.cbi-dropdown[open]>ul.dropdown>li[unselectable]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.cbi-dropdown[open]>ul.dropdown>li .hide-open{display:none}.cbi-dropdown[open]>ul.dropdown>li .hide-close{display:block}.cbi-dropdown[open]>ul.preview{display:flex}:is(.cbi-dropdown[multiple][more],.cbi-dropdown[multiple][empty])>.more{padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*1.5);flex:none;display:flex}.cbi-dropdown[multiple][open]>ul.dropdown>li>form{align-items:center;display:flex}.cbi-dropdown[multiple]>ul>li>label{display:flex}.cbi-dropdown>.open{cursor:pointer;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--border);flex:none;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown>.open{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.cbi-dropdown>.open{padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:currentColor}.cbi-dropdown>.more{display:none}.cbi-tooltip{z-index:110;max-width:var(--container-xs);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);border-radius:calc(var(--radius-base)*1.5);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);position:absolute}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.cbi-tooltip{background-color:var(--tooltip-bg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));overflow-wrap:normal;word-break:normal;white-space:normal;color:var(--foreground);opacity:0;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-out);transition-duration:.3s;transition-timing-function:var(--ease-out)}.cbi-tooltip.error{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip.error{border-color:color-mix(in oklab,var(--error)40%,transparent)}}.cbi-tooltip.error{background-color:var(--error);color:var(--error-foreground)}.cbi-tooltip.success{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip.success{border-color:color-mix(in oklab,var(--success)40%,transparent)}}.cbi-tooltip.success{background-color:var(--success);color:var(--success-foreground)}.cbi-tooltip.info{border-color:var(--info)}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip.info{border-color:color-mix(in oklab,var(--info)40%,transparent)}}.cbi-tooltip.info{background-color:var(--info);color:var(--info-foreground)}.cbi-tooltip.notice{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip.notice{border-color:color-mix(in oklab,var(--warning)40%,transparent)}}.cbi-tooltip.notice{background-color:var(--warning);color:var(--warning-foreground)}.cbi-tooltip-container,[data-tooltip]{cursor:help;white-space:nowrap;text-underline-offset:2px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;text-decoration-line:underline;text-decoration-style:dotted;text-decoration-color:currentColor;transition-duration:.2s;display:inline-block;position:relative}:is(.cbi-tooltip-container,[data-tooltip]) .cbi-tooltip{visibility:hidden;--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-out);transition-duration:.3s;transition-timing-function:var(--ease-out)}:is(.cbi-tooltip-container,[data-tooltip]):hover .cbi-tooltip{visibility:visible;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:1}.alert-message{top:calc(var(--spacing)*14);z-index:40;margin-bottom:calc(var(--spacing)*4);border-radius:calc(var(--radius-base)*4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--default);position:sticky}@supports (color:color-mix(in lab, red, red)){.alert-message{border-color:color-mix(in oklab,var(--default)30%,transparent)}}.alert-message{background-color:var(--default);padding:calc(var(--spacing)*6);color:var(--default-foreground)}@media not all and (min-width:48rem){.alert-message{margin-inline:calc(var(--spacing)*0);margin-bottom:calc(var(--spacing)*3);border-radius:calc(var(--radius-base)*3);padding:calc(var(--spacing)*4)}}.alert-message.modal{position:static;top:auto}.modal .alert-message{margin-bottom:calc(var(--spacing)*0)}.login-shell .alert-message{margin-bottom:calc(var(--spacing)*0);border-radius:calc(var(--radius-base)*2);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*2.5);text-align:center;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media not all and (min-width:48rem){.login-shell .alert-message{padding-inline:calc(var(--spacing)*.5)}}.alert-message.success{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.alert-message.success{border-color:color-mix(in oklab,var(--success)30%,transparent)}}.alert-message.success{background-color:var(--success);color:var(--success-foreground)}.alert-message.info{border-color:var(--info)}@supports (color:color-mix(in lab, red, red)){.alert-message.info{border-color:color-mix(in oklab,var(--info)30%,transparent)}}.alert-message.info{background-color:var(--info);color:var(--info-foreground)}.alert-message.warning,.alert-message.notice{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.alert-message.warning,.alert-message.notice{border-color:color-mix(in oklab,var(--warning)30%,transparent)}}.alert-message.warning,.alert-message.notice{background-color:var(--warning);color:var(--warning-foreground)}.alert-message.error,.alert-message.danger{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.alert-message.error,.alert-message.danger{border-color:color-mix(in oklab,var(--error)30%,transparent)}}.alert-message.error,.alert-message.danger{background-color:var(--error);color:var(--error-foreground)}.alert-message h4,.alert-message h5,.alert-message pre,.alert-message ul,.alert-message li,.alert-message p{border-style:var(--tw-border-style);color:inherit;background-color:#0000;border-width:0}.alert-message h4{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}@media not all and (min-width:48rem){.alert-message h4{margin-bottom:calc(var(--spacing)*1.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.alert-message p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}@media not all and (min-width:48rem){.alert-message p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.alert-message .right{margin-top:calc(var(--spacing)*4)}@media not all and (min-width:48rem){.alert-message .right{margin-top:calc(var(--spacing)*3)}}.cbi-progressbar{height:calc(var(--spacing)*3.5);cursor:help;background-color:var(--secondary);border-radius:3.40282e38px;width:100%;position:relative;overflow:hidden}.cbi-progressbar:before{content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);content:var(--tw-content);border-radius:calc(var(--radius-base)*2);content:var(--tw-content);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));content:var(--tw-content);white-space:nowrap;content:var(--tw-content);color:var(--foreground);--tw-content:attr(title);content:var(--tw-content);position:absolute;top:50%;left:50%}@media not all and (min-width:48rem){.cbi-progressbar{height:calc(var(--spacing)*4);border-radius:calc(var(--radius-base)*2)}.cbi-progressbar:before{content:var(--tw-content);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));content:var(--tw-content);--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}}@media not all and (min-width:40rem){[data-page=admin-system-package-manager] .cbi-progressbar:before{content:var(--tw-content);font-size:10px}}.cbi-progressbar>div{--tw-gradient-position:to right;height:100%}@supports (background-image:linear-gradient(in lab, red, red)){.cbi-progressbar>div{--tw-gradient-position:to right in oklab}}.cbi-progressbar>div{background-image:linear-gradient(var(--tw-gradient-stops));--tw-gradient-from:var(--progress-bar-start);--tw-gradient-to:var(--progress-bar-end);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.label{background-color:var(--default);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--default-foreground);text-transform:uppercase;border-radius:3.40282e38px}.label.important{background-color:var(--info);color:var(--info-foreground)}.label.warning{background-color:var(--error);color:var(--error-foreground)}.label.success{background-color:var(--success);color:var(--success-foreground)}.label.notice{background-color:var(--warning);color:var(--warning-foreground)}.zonebadge{align-items:center;gap:calc(var(--spacing)*1.5);border-style:var(--tw-border-style);border-width:1px;border-color:var(--secondary);background-color:var(--secondary);padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--secondary-foreground);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:3.40282e38px;display:inline-flex;overflow:visible}@media (hover:hover){.zonebadge:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media not all and (min-width:48rem){.zonebadge{gap:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}.zonebadge[style*=--zone-color-rgb]{background-color:rgb(var(--zone-color-rgb),.7)!important}.zonebadge[style*=--zone-color-rgb] em{color:var(--default-foreground)}.cbi-dropdown .zonebadge{border-radius:calc(var(--radius-base)*1.5);padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*.5)}.ifacebadge{cursor:default;align-items:center;gap:calc(var(--spacing)*2);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--label-surface);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--default-foreground);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-wrap:wrap;display:inline-flex}@media (hover:hover){.ifacebadge:hover{border-color:var(--border);background-color:var(--label-surface);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media not all and (min-width:48rem){.ifacebadge{gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}.cbi-dropdown .ifacebadge,.cbi-tooltip .ifacebadge{flex-wrap:nowrap}.zonebadge>.ifacebadge,.cbi-dropdown .ifacebadge{border-radius:calc(var(--radius-base)*2);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*0)}:is(.zonebadge>.ifacebadge,.cbi-dropdown .ifacebadge) img{margin-right:calc(var(--spacing)*1);width:calc(var(--spacing)*4)}.ifacebadge>img{width:calc(var(--spacing)*5);flex-shrink:0;align-self:center}@media not all and (min-width:48rem){.ifacebadge>img{width:calc(var(--spacing)*4)}}.ifacebadge>span>.nowrap{margin-bottom:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));display:inline-block}@media not all and (min-width:48rem){.ifacebadge>span>.nowrap{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}.ifacebadge.ifacebadge-active{border-color:var(--primary);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.ifacebadge.large{min-width:200px;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);flex:1}@media not all and (min-width:48rem){.ifacebadge.large{min-width:180px;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5)}}.cbi-section{margin-bottom:calc(var(--spacing)*3);border-radius:calc(var(--radius-base)*2);padding:calc(var(--spacing)*5);overflow:visible}@media not all and (min-width:48rem){.cbi-section{padding:calc(var(--spacing)*3)}}.cbi-section[data-tab-title]{margin:calc(var(--spacing)*0);padding:calc(var(--spacing)*0)}.cbi-section[data-tab-active=true]{margin-bottom:calc(var(--spacing)*3);padding:calc(var(--spacing)*5)}@media not all and (min-width:48rem){.cbi-section[data-tab-active=true]{padding:calc(var(--spacing)*3)}}#maincontent .cbi-section{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#maincontent .cbi-section{border-color:color-mix(in oklab,var(--border)30%,transparent)}}#maincontent .cbi-section{background-color:var(--panel-bg);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){#maincontent .cbi-section:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#maincontent .cbi-section:hover{border-color:color-mix(in oklab,var(--border)50%,transparent)}}#maincontent .cbi-section:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.cbi-section>.cbi-title{justify-content:space-between;align-items:flex-start;display:flex}.cbi-section>.cbi-title>h3{flex:1}.cbi-section>.cbi-title>h3 .label[data-clickable]{background-color:var(--label-surface);color:var(--foreground);width:calc(var(--spacing)*7);height:calc(var(--spacing)*7);cursor:pointer;padding:calc(var(--spacing)*0);justify-content:center;align-items:center;display:inline-flex}.cbi-section>.cbi-title>h3 .label[data-clickable]:before{content:var(--tw-content);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);content:var(--tw-content);content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-duration:.3s;background-color:currentColor;transition-duration:.3s}@media (hover:hover){.cbi-section>.cbi-title>h3 .label[data-clickable]:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.cbi-section>.cbi-title>h3 .label[data-clickable]:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media not all and (min-width:48rem){.cbi-section>.cbi-title>h3 .label[data-clickable]{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status]{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);cursor:pointer;font-size:0;position:relative}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status]:before{content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);content:var(--tw-content);content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-duration:.3s;content:var(--tw-content);--tw-ease:var(--ease-out);transition-duration:.3s;transition-timing-function:var(--ease-out);background-color:currentColor;position:absolute}@media (hover:hover){.cbi-section>.cbi-title>h3 span[data-indicator=poll-status]:hover:before{content:var(--tw-content);--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status]:active:before{content:var(--tw-content);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status][data-style=active]:before{content:var(--tw-content);content:var(--tw-content);rotate:none;-webkit-mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M8.22%205.22a.75.75%200%200%201%201.06%200l4.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.75.75%200%200%201-1.06-1.06L11.94%2010L8.22%206.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M8.22%205.22a.75.75%200%200%201%201.06%200l4.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.75.75%200%200%201-1.06-1.06L11.94%2010L8.22%206.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status][data-style=inactive]:before{content:var(--tw-content);content:var(--tw-content);rotate:90deg;-webkit-mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M8.22%205.22a.75.75%200%200%201%201.06%200l4.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.75.75%200%200%201-1.06-1.06L11.94%2010L8.22%206.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M8.22%205.22a.75.75%200%200%201%201.06%200l4.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.75.75%200%200%201-1.06-1.06L11.94%2010L8.22%206.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat}.cbi-section legend{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.cbi-section h3{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.cbi-section h3{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.cbi-section h3{padding-bottom:calc(var(--spacing)*4);color:var(--foreground)}@media not all and (min-width:48rem){.cbi-section h3{margin-inline:calc(var(--spacing)*0);padding-bottom:calc(var(--spacing)*2)}.cbi-section div[style*=display\:grid]{gap:calc(var(--spacing)*3);grid-template-columns:repeat(2,minmax(0,1fr))!important}}.cbi-section .network-status-table{margin-bottom:calc(var(--spacing)*3);justify-content:space-around;gap:calc(var(--spacing)*4);flex-wrap:wrap;display:flex}@media not all and (min-width:48rem){.cbi-section .network-status-table{flex-direction:column}}.cbi-section .cbi-section-create{margin-top:calc(var(--spacing)*6);align-items:center;gap:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}@media not all and (min-width:48rem){.cbi-section .cbi-section-create{margin-inline:calc(var(--spacing)*0);margin-top:calc(var(--spacing)*5);align-items:stretch;gap:calc(var(--spacing)*3);flex-direction:column}}.cbi-section .cbi-section-create>div{flex:none}@media not all and (min-width:48rem){.cbi-section .cbi-section-create>div{flex:1;width:100%}}.ifacebox{min-width:calc(var(--spacing)*40);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--panel-bg);flex-direction:column;align-items:stretch;display:inline-flex;position:relative;overflow:visible}@supports (color:color-mix(in lab, red, red)){.ifacebox{background-color:color-mix(in oklab,var(--panel-bg)95%,transparent)}}.ifacebox{text-align:center;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.ifacebox:hover{border-color:var(--border);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media not all and (min-width:48rem){.ifacebox{min-width:calc(var(--spacing)*30);border-radius:calc(var(--radius-base)*3);border-color:var(--border);flex:1}@supports (color:color-mix(in lab, red, red)){.ifacebox{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.ifacebox{background-color:var(--panel-bg)}@supports (color:color-mix(in lab, red, red)){.ifacebox{background-color:color-mix(in oklab,var(--panel-bg)98%,transparent)}}.ifacebox{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}td .ifacebox{flex-direction:row}}.ifacebox .ifacebox-head{border-top-left-radius:calc(var(--radius-base)*2);border-top-right-radius:calc(var(--radius-base)*2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);background-color:var(--label-surface);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);text-align:center;--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media not all and (min-width:48rem){.ifacebox .ifacebox-head{border-top-left-radius:calc(var(--radius-base)*3);border-top-right-radius:calc(var(--radius-base)*3);border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.ifacebox .ifacebox-head{border-color:color-mix(in oklab,var(--border)80%,transparent)}}.ifacebox .ifacebox-head{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}.ifacebox .ifacebox-head[style*=--zone-color-rgb]{background-color:rgb(var(--zone-color-rgb),.75)!important}@media not all and (min-width:48rem){td :is(.ifacebox .ifacebox-head){border-top-left-radius:calc(var(--radius-base)*3);border-bottom-left-radius:calc(var(--radius-base)*3);border-right-style:var(--tw-border-style);border-right-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-top-right-radius:0;flex-shrink:0;justify-content:center;align-items:center;width:auto;display:flex}}.ifacebox .ifacebox-head.cbi-tooltip-container{background-color:#0000;position:static}.ifacebox .ifacebox-head.cbi-tooltip-container .cbi-tooltip{bottom:calc(var(--spacing)*0);left:calc(var(--spacing)*0)}.ifacebox .ifacebox-head.active{border-color:var(--primary);background-color:var(--primary);color:var(--primary-foreground)}.ifacebox .ifacebox-body{justify-content:space-around;align-items:center;gap:calc(var(--spacing)*2);border-bottom-right-radius:calc(var(--radius-base)*2);border-bottom-left-radius:calc(var(--radius-base)*2);width:100%;padding:calc(var(--spacing)*4);text-align:center;color:var(--default-foreground);flex-direction:column;flex:1;display:flex}@media not all and (min-width:48rem){.ifacebox .ifacebox-body{border-bottom-right-radius:calc(var(--radius-base)*3);border-bottom-left-radius:calc(var(--radius-base)*3)}td :is(.ifacebox .ifacebox-body){border-top-right-radius:calc(var(--radius-base)*3);border-bottom-right-radius:calc(var(--radius-base)*3);padding-block:calc(var(--spacing)*2);padding-right:calc(var(--spacing)*2);padding-left:calc(var(--spacing)*4);border-bottom-left-radius:0;flex-direction:row}}:where(.ifacebox .ifacebox-body>span>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}.ifacebox .ifacebox-body>span{color:var(--foreground)}@media not all and (min-width:48rem){:where(.ifacebox .ifacebox-body>span>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}.ifacebox .ifacebox-body>span{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}}.network-status-table :is(.ifacebox .ifacebox-body>span){width:100%}.ifacebox .ifacebox-body>span .cbi-tooltip-container+.cbi-tooltip-container{margin-left:calc(var(--spacing)*2)}@media not all and (min-width:48rem){.ifacebox .ifacebox-body>span .cbi-tooltip-container+.cbi-tooltip-container{margin-left:calc(var(--spacing)*1.5)}}.ifacebox .ifacebox-body>span .cbi-tooltip{--tw-animation-delay:.2s;transition-delay:.2s;animation-delay:.2s}.ifacebox .ifacebox-body>span .nowrap{display:inline-block}.ifacebox .ifacebox-body>span>.nowrap:not(:last-child){margin-bottom:calc(var(--spacing)*4)}@media not all and (min-width:48rem){.ifacebox .ifacebox-body>span>.nowrap:not(:last-child){margin-bottom:calc(var(--spacing)*3)}}.ifacebox .ifacebox-body>span img{width:calc(var(--spacing)*6);flex-shrink:0}@media not all and (min-width:48rem){.ifacebox .ifacebox-body>span img{width:calc(var(--spacing)*5)}}.ifacebox .ifacebox-body>div{flex-wrap:wrap;width:100%;display:flex}:where(.ifacebox .ifacebox-body>div>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2.5)*calc(1 - var(--tw-space-y-reverse)))}@media not all and (min-width:48rem){:where(.ifacebox .ifacebox-body>div>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}td :is(.ifacebox .ifacebox-body>div){flex:1;width:auto}:where(td :is(.ifacebox .ifacebox-body>div)>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}}.ifacebox .ifacebox-body>div .ifacebadge{flex:1}.ifacebox .ifacebox-body .cbi-tooltip-container{cursor:help;color:var(--foreground);justify-content:center;align-items:center;display:inline-flex;position:static}.ifacebox .ifacebox-body .cbi-tooltip-container .cbi-tooltip{bottom:calc(var(--spacing)*0)}@media (min-width:48rem){.ifacebox .ifacebox-body .cbi-tooltip-container .cbi-tooltip{left:calc(var(--spacing)*0)}}.ifacebox .ifacebox-body .cbi-tooltip-container .cbi-tooltip .nowrap{white-space:nowrap}.ifacebox .ifacebox-body small{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4);display:block}@media not all and (min-width:48rem){td :is(.ifacebox .ifacebox-body small){margin-top:calc(var(--spacing)*0)}}#modal_overlay{pointer-events:none;top:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);background-color:#0000;display:none;position:fixed;overflow:auto}.modal-overlay-active #modal_overlay{pointer-events:auto;inset:calc(var(--spacing)*0);right:calc(var(--spacing)*0);left:calc(var(--spacing)*0);z-index:100;background-color:var(--overlay-base);grid-template-columns:repeat(1,minmax(0,1fr));place-items:center;display:grid}@supports (color:color-mix(in lab, red, red)){.modal-overlay-active #modal_overlay{background-color:color-mix(in oklab,var(--overlay-base)70%,transparent)}}.modal-overlay-active #modal_overlay{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}#modal_overlay>.modal{width:var(--container-5xl);gap:calc(var(--spacing)*4);border-radius:calc(var(--radius-base)*3);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in oklab,var(--border)70%,transparent);background-color:var(--page-bg);padding:calc(var(--spacing)*6);overflow-wrap:break-word;white-space:normal;--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-lg));--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);flex-direction:column;display:flex}@media not all and (min-width:48rem){#modal_overlay>.modal{gap:calc(var(--spacing)*3);width:100%;padding:calc(var(--spacing)*4)}}#modal_overlay>.modal h4{margin-bottom:calc(var(--spacing)*0);text-align:center}#modal_overlay>.modal h4 em{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--primary)}#modal_overlay>.modal h5{margin-block:calc(var(--spacing)*3);color:var(--foreground)}#modal_overlay>.modal p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--default-foreground)}#modal_overlay>.modal>ul{border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);overflow:auto}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal>ul{border-color:color-mix(in oklab,var(--border)60%,transparent)}}#modal_overlay>.modal>ul{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal>ul{background-color:color-mix(in oklab,var(--page-bg)60%,transparent)}}#modal_overlay>.modal>ul{padding:calc(var(--spacing)*3)}#modal_overlay>.modal label.btn{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal label.btn{border-color:color-mix(in oklab,var(--border)60%,transparent)}}#modal_overlay>.modal label.btn{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal label.btn{background-color:color-mix(in oklab,var(--page-bg)60%,transparent)}}#modal_overlay>.modal label.btn{color:var(--foreground)}@media (hover:hover){#modal_overlay>.modal label.btn:hover{border-color:var(--border)}}#modal_overlay>.modal pre{overflow:auto}#modal_overlay>.modal pre.errors{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal pre.errors{border-color:color-mix(in oklab,var(--error)60%,transparent)}}#modal_overlay>.modal pre.errors{background-color:var(--error)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal pre.errors{background-color:color-mix(in oklab,var(--error)20%,transparent)}}#modal_overlay>.modal pre.errors{color:var(--error-foreground)}#modal_overlay>.modal pre+pre{margin-top:calc(var(--spacing)*3)}#modal_overlay>.modal .button-row,#modal_overlay>.modal div.left,#modal_overlay>.modal div.right{gap:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);flex-shrink:0;display:flex}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal .button-row,#modal_overlay>.modal div.left,#modal_overlay>.modal div.right{border-color:color-mix(in oklab,var(--border)40%,transparent)}}#modal_overlay>.modal .button-row,#modal_overlay>.modal div.left,#modal_overlay>.modal div.right{padding:calc(var(--spacing)*4)}@media not all and (min-width:48rem){#modal_overlay>.modal .button-row,#modal_overlay>.modal div.left,#modal_overlay>.modal div.right{gap:calc(var(--spacing)*1.5);padding:calc(var(--spacing)*2.5)}}#modal_overlay>.modal div.left{justify-content:flex-start}#modal_overlay>.modal .button-row,#modal_overlay>.modal div.right{justify-content:flex-end}#modal_overlay>.modal.uci-dialog ins,#modal_overlay>.modal.uci-dialog del,#modal_overlay>.modal.uci-dialog var{font-family:var(--font-mono);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);font-style:normal;text-decoration-line:none}#modal_overlay>.modal.uci-dialog ins{border-style:var(--tw-border-style);border-width:1px;border-color:var(--success);background-color:var(--success)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog ins{background-color:color-mix(in oklab,var(--success)80%,transparent)}}#modal_overlay>.modal.uci-dialog ins{color:var(--success-foreground)}#modal_overlay>.modal.uci-dialog del{border-style:var(--tw-border-style);border-width:1px;border-color:var(--error);background-color:var(--error)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog del{background-color:color-mix(in oklab,var(--error)80%,transparent)}}#modal_overlay>.modal.uci-dialog del{color:var(--error-foreground)}#modal_overlay>.modal.uci-dialog var{border-style:var(--tw-border-style);border-width:1px;border-color:var(--info);background-color:var(--info)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog var{background-color:color-mix(in oklab,var(--info)80%,transparent)}}#modal_overlay>.modal.uci-dialog var{color:var(--info-foreground)}#modal_overlay>.modal.uci-dialog .uci-change-legend{margin-top:calc(var(--spacing)*4);gap:calc(var(--spacing)*3);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog .uci-change-legend{border-color:color-mix(in oklab,var(--border)60%,transparent)}}#modal_overlay>.modal.uci-dialog .uci-change-legend{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog .uci-change-legend{background-color:color-mix(in oklab,var(--page-bg)60%,transparent)}}#modal_overlay>.modal.uci-dialog .uci-change-legend{padding:calc(var(--spacing)*4)}@media not all and (min-width:48rem){#modal_overlay>.modal.uci-dialog .uci-change-legend{gap:calc(var(--spacing)*2);padding:calc(var(--spacing)*3);grid-template-columns:repeat(1,minmax(0,1fr))}}#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label{align-items:center;gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);display:flex}#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label ins,#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label del,#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label var{height:calc(var(--spacing)*6);min-width:calc(var(--spacing)*6);border-radius:var(--radius-base);padding-inline:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);justify-content:center;align-items:center;display:flex}#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label var ins,#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label var del{margin-left:calc(var(--spacing)*1);height:calc(var(--spacing)*4);min-width:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*1)}#modal_overlay>.modal.uci-dialog .uci-change-list{margin-top:calc(var(--spacing)*4)}:where(#modal_overlay>.modal.uci-dialog .uci-change-list>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}#modal_overlay>.modal.uci-dialog .uci-change-list h5{margin-top:calc(var(--spacing)*6);margin-bottom:calc(var(--spacing)*2);border-radius:calc(var(--radius-base)*1.5);background-color:var(--default);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--default-foreground)}#modal_overlay>.modal.uci-dialog .uci-change-list h5:first-child{margin-top:calc(var(--spacing)*0)}#modal_overlay>.modal.uci-dialog .uci-change-list ins,#modal_overlay>.modal.uci-dialog .uci-change-list del{border-radius:calc(var(--radius-base)*1.5);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));display:block}:is(#modal_overlay>.modal.uci-dialog .uci-change-list ins,#modal_overlay>.modal.uci-dialog .uci-change-list del) strong{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}#modal_overlay>.modal.uci-dialog .uci-change-list var{border-radius:var(--radius-base);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));display:inline-block}#modal_overlay>.modal.uci-dialog .uci-change-list var ins,#modal_overlay>.modal.uci-dialog .uci-change-list var del{margin-left:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));display:inline-block}@media not all and (min-width:48rem){.mobile-menu-overlay{visibility:hidden;inset:calc(var(--spacing)*0);z-index:60;background-color:var(--overlay-base);position:fixed}@supports (color:color-mix(in lab, red, red)){.mobile-menu-overlay{background-color:color-mix(in oklab,var(--overlay-base)60%,transparent)}}.mobile-menu-overlay{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}}@media (min-width:48rem){.mobile-menu-overlay{display:none}}@media not all and (min-width:48rem){.mobile-menu-overlay.mobile-menu-open{visibility:visible;opacity:1;--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.mobile-menu-overlay.mobile-menu-open .mobile-nav{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.mobile-menu-overlay .mobile-nav{top:calc(var(--spacing)*0);right:calc(var(--spacing)*0);height:100%;width:calc(var(--spacing)*80);--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y);background-color:var(--page-bg);--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);--tw-backdrop-saturate:saturate(150%);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;flex-direction:column;transition-duration:.3s;display:flex;position:absolute}.mobile-menu-overlay .mobile-nav .mobile-nav-header{padding:calc(var(--spacing)*6);padding-bottom:calc(var(--spacing)*4);justify-content:space-between;align-items:center;display:flex}.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-title{margin:calc(var(--spacing)*0);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--foreground)}.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close{cursor:pointer;transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}@media not all and (min-width:48rem){.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close svg{color:var(--foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}.mobile-menu-overlay .mobile-nav .mobile-nav-list{margin:calc(var(--spacing)*0);gap:calc(var(--spacing)*0);padding:calc(var(--spacing)*0);padding-inline:calc(var(--spacing)*6);flex-direction:column;flex:1;list-style-type:none;display:flex;overflow-y:auto}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-link{width:100%;padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*4);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--default-foreground);transition-property:color,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;align-items:center;text-decoration-line:none;transition-duration:.3s;display:flex}@media (hover:hover){.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-link:hover{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y);color:var(--foreground)}}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu{margin:calc(var(--spacing)*0);padding:calc(var(--spacing)*0);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);list-style-type:none;overflow:hidden}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem{border-color:color-mix(in oklab,var(--border)20%,transparent)}}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem .mobile-nav-sublink{width:100%;padding-block:calc(var(--spacing)*3);padding-right:calc(var(--spacing)*0);padding-left:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--default-foreground);transition-property:color,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;align-items:center;text-decoration-line:none;transition-duration:.3s;display:flex}@media (hover:hover){.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem .mobile-nav-sublink:hover{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y);color:var(--foreground)}}}[data-nav-type=mega-menu] .desktop-menu-overlay{pointer-events:none;inset:calc(var(--spacing)*0);z-index:50;background-color:var(--overlay-base);position:fixed}@supports (color:color-mix(in lab, red, red)){[data-nav-type=mega-menu] .desktop-menu-overlay{background-color:color-mix(in oklab,var(--overlay-base)35%,transparent)}}[data-nav-type=mega-menu] .desktop-menu-overlay{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}@media not all and (min-width:48rem){[data-nav-type=mega-menu] .desktop-menu-overlay{display:none}}[data-nav-type=mega-menu] .desktop-menu-overlay.active{pointer-events:auto;opacity:1;--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}table.table,.table{margin-bottom:calc(var(--spacing)*3);border-collapse:separate;--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);width:100%;border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);overflow:visible}@media not all and (min-width:48rem){table.table,.table{margin-inline:calc(var(--spacing)*0);border-style:var(--tw-border-style);background-color:var(--panel-bg);border-width:0;width:100%;display:block;overflow:visible}@supports (color:color-mix(in lab, red, red)){table.table,.table{background-color:color-mix(in oklab,var(--panel-bg)98%,transparent)}}table.table,.table{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}:is(table.table,.table)[width="100%"]{width:100%}:is(table.table,.table)[width="33%"]{width:33.3333%}:is(table.table,.table) .cbi-section-table-titles{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):before{content:var(--tw-content);content:var(--tw-content);border-color:var(--border);content:var(--tw-content);padding-inline:calc(var(--spacing)*3);content:var(--tw-content);padding-block:calc(var(--spacing)*3);content:var(--tw-content);vertical-align:middle;content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));content:var(--tw-content);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-content:attr(data-title);content:var(--tw-content);content:var(--tw-content);display:table-cell}@media not all and (min-width:48rem){:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):before{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));flex:0 0 100%;display:flex}}:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):before{content:var(--tw-content)}@media (min-width:48rem){:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):before{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}}:is(:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):not([data-title]),:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):has(td.cbi-section-table-titles)):before{content:var(--tw-content);--tw-content:none;content:none}:is(table.table,.table) .cbi-section-table-titles.named:before{content:var(--tw-content);background-color:var(--label-surface);content:var(--tw-content)}@media not all and (min-width:48rem){:is(table.table,.table) .cbi-section-table-titles.named:before{background-color:var(--label-surface)}}:is(table.table,.table) .cbi-section-table-titles.named:before{content:var(--tw-content)}@media (min-width:48rem){:is(table.table,.table) .cbi-section-table-titles.named:before{border-top-left-radius:calc(var(--radius-base)*2)}}@media not all and (min-width:48rem){:is(table.table,.table) tbody,:is(table.table,.table) .tbody{display:block}}@media (hover:hover){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):hover{background-color:var(--label-surface)}}@media not all and (min-width:48rem){:is(table.table,.table) tr,:is(table.table,.table) .tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):has(.cbi-progressbar){justify-content:center;align-items:center;display:flex}}@media (min-width:48rem){:is(:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child:not([data-title]) .th,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child:not([data-title]) .td):first-child{border-top-left-radius:calc(var(--radius-base)*2)}:is(:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child .th,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child .td):last-child{border-top-right-radius:calc(var(--radius-base)*2)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child{border-bottom-right-radius:calc(var(--radius-base)*2);border-bottom-left-radius:calc(var(--radius-base)*2)}}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child[data-title]:before{content:var(--tw-content);border-bottom-left-radius:calc(var(--radius-base)*2);content:var(--tw-content);border-bottom-style:var(--tw-border-style);border-bottom-width:0}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child .td{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child .td:first-child{border-bottom-left-radius:calc(var(--radius-base)*2)}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child .td:last-child{border-bottom-right-radius:calc(var(--radius-base)*2)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).table-titles,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-section-table-titles,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-section-table-descr{display:none}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child:not(.table-titles,.cbi-section-table-titles,.cbi-section-table-descr),:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).table-titles+.tr,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-section-table-titles+.tr,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-section-table-descr+.tr{border-top-left-radius:calc(var(--radius-base)*2);border-top-right-radius:calc(var(--radius-base)*2)}}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-rowstyle-1{background-color:var(--panel-bg)}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-rowstyle-2{background-color:var(--label-surface)}@supports (color:color-mix(in lab, red, red)){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-rowstyle-2{background-color:color-mix(in oklab,var(--label-surface)50%,transparent)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-1{flex:2rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-1{width:calc(var(--spacing)*20);max-width:calc(var(--spacing)*28)}}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-2{white-space:normal}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-2{flex:2 2 4rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-2{width:calc(var(--spacing)*32);max-width:calc(var(--spacing)*40)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-3{flex:3 3 6rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-3{width:calc(var(--spacing)*44);max-width:calc(var(--spacing)*52)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-4{flex:4 4 8rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-4{width:calc(var(--spacing)*56);max-width:calc(var(--spacing)*64)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-5{flex:5 5 10rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-5{width:calc(var(--spacing)*68);max-width:calc(var(--spacing)*76)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-6{flex:6 6 12rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-6{width:calc(var(--spacing)*80);max-width:calc(var(--spacing)*88)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-7{flex:7 7 14rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-7{width:calc(var(--spacing)*92);max-width:calc(var(--spacing)*100)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-8{flex:8 8 16rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-8{width:calc(var(--spacing)*104);max-width:calc(var(--spacing)*112)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-9{flex:9 9 18rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-9{width:calc(var(--spacing)*116);max-width:calc(var(--spacing)*124)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-10{flex:0 0 100%;max-width:calc(100vw - 40px)}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-10{width:calc(var(--spacing)*128);max-width:calc(var(--spacing)*136)}}:is(table.table,.table) th,:is(table.table,.table) .th{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);background-color:var(--label-surface);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);text-align:left;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}@media not all and (min-width:48rem){:is(table.table,.table) th,:is(table.table,.table) .th{border-style:var(--tw-border-style);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-width:0;flex:50%}}#cbi-samba4 :is(:is(table.table,.table) th,:is(table.table,.table) .th){padding-inline:calc(var(--spacing)*.5);padding-block:calc(var(--spacing)*1.5)}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[width="100%"]{width:100%}@media not all and (min-width:48rem){:is(:is(table.table,.table) th,:is(table.table,.table) .th)[width="100%"]{flex:0 0 100%}}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[width="33%"]{width:33.3333%}@media not all and (min-width:48rem){:is(:is(table.table,.table) th,:is(table.table,.table) .th)[width="33%"]{flex:0 0 33.333%}}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true]{cursor:pointer;-webkit-user-select:none;user-select:none}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true]:after{content:var(--tw-content);margin-left:calc(var(--spacing)*.5);content:var(--tw-content);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}@media (hover:hover){:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true]:hover{background-color:var(--label-surface)}}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true][data-sort-direction=asc]:after{--tw-content:"▲";content:var(--tw-content)}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true][data-sort-direction=desc]:after{--tw-content:"▼";content:var(--tw-content)}:is(table.table,.table)[id*=status_leases] .td{max-width:calc(var(--spacing)*62)}@media not all and (min-width:48rem){:is(table.table,.table)[id*=status_leases] .td{max-width:100%}}:is(table.table,.table) td,:is(table.table,.table) .td{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));overflow-wrap:break-word;white-space:normal;display:table-cell}@media not all and (min-width:48rem){:is(table.table,.table) td,:is(table.table,.table) .td{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-width:0;flex:50%}}:is(:is(table.table,.table) td,:is(table.table,.table) .td):before{content:var(--tw-content);--tw-content:attr(data-title);content:var(--tw-content);content:var(--tw-content);display:none}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td):before{margin-bottom:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);display:block}}:is(:is(table.table,.table) td,:is(table.table,.table) .td):before{content:var(--tw-content)}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td):before{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}}#cbi-samba4 :is(:is(table.table,.table) td,:is(table.table,.table) .td){padding-inline:calc(var(--spacing)*.5);padding-block:calc(var(--spacing)*1.5)}[data-page=admin-system-mounts] :is(:is(table.table,.table) td,:is(table.table,.table) .td){max-width:calc(var(--spacing)*104)}@media not all and (min-width:48rem){[data-page=admin-system-mounts] :is(:is(table.table,.table) td,:is(table.table,.table) .td){max-width:100%}#wifi_assoclist_table :is(:is(table.table,.table) td,:is(table.table,.table) .td){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);flex:0 0 100%}}#wifi_assoclist_table :is(:is(table.table,.table) td,:is(table.table,.table) .td):before{content:var(--tw-content)}@media not all and (min-width:48rem){#wifi_assoclist_table :is(:is(table.table,.table) td,:is(table.table,.table) .td):before{margin-bottom:calc(var(--spacing)*1.5)}}:is(:is(table.table,.table) td,:is(table.table,.table) .td)>input[type=text],:is(:is(table.table,.table) td,:is(table.table,.table) .td)>input[type=password],:is(:is(table.table,.table) td,:is(table.table,.table) .td)>select,:is(:is(table.table,.table) td,:is(table.table,.table) .td)>.cbi-dropdown:not(.btn):not(.cbi-button){width:100%}:is(:is(table.table,.table) td,:is(table.table,.table) .td).cbi-value-field{word-break:break-all}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td).cbi-section-actions{flex:0 0 100%}:is(:is(table.table,.table) td,:is(table.table,.table) .td).cbi-section-actions>div{width:100%}:is(:is(table.table,.table) td,:is(table.table,.table) .td).cbi-section-actions>div>.cbi-button{flex:1}:is(:is(table.table,.table) td,:is(table.table,.table) .td)>.cbi-button{width:100%}}:is(:is(table.table,.table) td,:is(table.table,.table) .td)[width="100%"]{width:100%}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td)[width="100%"]{flex:0 0 100%}}:is(:is(table.table,.table) td,:is(table.table,.table) .td)[width="33%"]{width:33.3333%}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td)[width="33%"]{flex:0 0 33.333%}[data-page=admin-network-network] :is(:is(table.table,.table) td,:is(table.table,.table) .td)[data-name=_ifacebox],[data-page=admin-network-network] :is(:is(table.table,.table) td,:is(table.table,.table) .td)[data-name=_ifacestat]{flex-basis:100%}}.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{width:auto!important}.cbi-input-invalid,.cbi-value-error{border-color:var(--error)!important}@supports (color:color-mix(in lab, red, red)){.cbi-input-invalid,.cbi-value-error{border-color:color-mix(in oklab,var(--error)70%,transparent)!important}}:is(.cbi-input-invalid,.cbi-value-error):focus{--tw-ring-color:var(--error)!important}@supports (color:color-mix(in lab, red, red)){:is(.cbi-input-invalid,.cbi-value-error):focus{--tw-ring-color:color-mix(in oklab,var(--error)40%,transparent)!important}}.cbi-value{gap:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*1.5);flex-flow:wrap;display:flex}@media not all and (min-width:48rem){.cbi-value{gap:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*1);flex-direction:column}}.cbi-value.hidden{display:none}.cbi-value+.cbi-value{margin-top:calc(var(--spacing)*3)}@media not all and (min-width:48rem){.cbi-value+.cbi-value{margin-top:calc(var(--spacing)*2)}}.cbi-value>.cbi-value-title{padding-top:calc(var(--spacing)*1);text-align:right;--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}@media not all and (min-width:48rem){.cbi-value>.cbi-value-title{text-align:left;width:auto}}@media (min-width:48rem){.cbi-value>.cbi-value-title{flex:0 0 12rem}}.cbi-value>.cbi-value-field{flex:1;max-width:100%}.cbi-value>.cbi-value-field:has(>.cbi-dropdown[disabled]){cursor:not-allowed}.cbi-value>.cbi-value-field .cbi-value-description{margin-top:calc(var(--spacing)*1);padding-left:calc(var(--spacing)*4);--tw-leading:1;overflow-wrap:break-word;color:var(--muted-foreground);line-height:1;position:relative}.cbi-value>.cbi-value-field .cbi-value-description:not(:empty):before{content:var(--tw-content);content:var(--tw-content);left:calc(var(--spacing)*-.5);content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);content:var(--tw-content);background-color:var(--info-foreground);content:var(--tw-content);display:inline-block;position:absolute;-webkit-mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M15%208A7%207%200%201%201%201%208a7%207%200%200%201%2014%200M9%205a1%201%200%201%201-2%200a1%201%200%200%201%202%200M6.75%208a.75.75%200%200%200%200%201.5h.75v1.75a.75.75%200%200%200%201.5%200v-2.5A.75.75%200%200%200%208.25%208z'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M15%208A7%207%200%201%201%201%208a7%207%200%200%201%2014%200M9%205a1%201%200%201%201-2%200a1%201%200%200%201%202%200M6.75%208a.75.75%200%200%200%200%201.5h.75v1.75a.75.75%200%200%200%201.5%200v-2.5A.75.75%200%200%200%208.25%208z'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat}.cbi-value>.cbi-section,.cbi-value>.cbi-tblsection{width:100%}.cbi-dynlist{width:max-content;max-width:calc(var(--spacing)*120);align-items:flex-start;gap:calc(var(--spacing)*3);flex-direction:column;display:inline-flex}@media not all and (min-width:48rem){.cbi-dynlist{max-width:100%!important}}.cbi-dynlist .item{pointer-events:auto;cursor:move;align-items:flex-start;gap:calc(var(--spacing)*2);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);flex-direction:column;align-self:stretch;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.cbi-dynlist .item{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.cbi-dynlist .item{background-color:var(--panel-bg);padding-block:calc(var(--spacing)*3);padding-right:calc(var(--spacing)*10);padding-left:calc(var(--spacing)*4);word-break:break-all;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);-webkit-user-select:text;user-select:text}@media not all and (min-width:48rem){.cbi-dynlist .item{width:100%;padding-block:calc(var(--spacing)*2.5);padding-right:calc(var(--spacing)*8);padding-left:calc(var(--spacing)*3)}}.cbi-dynlist .item:after{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*2.5);content:var(--tw-content);right:calc(var(--spacing)*2);content:var(--tw-content);content:var(--tw-content);height:calc(var(--spacing)*6);content:var(--tw-content);width:calc(var(--spacing)*6);content:var(--tw-content);content:var(--tw-content);cursor:pointer;content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);border-radius:calc(var(--radius-base)*1.5);content:var(--tw-content);background-color:var(--muted);content:var(--tw-content);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);content:var(--tw-content);color:var(--muted-foreground);--tw-content:"×";content:var(--tw-content);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:absolute}.cbi-dynlist .item.dragging{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);cursor:grabbing;opacity:.5;--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cbi-dynlist .item.drag-over{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y);border-color:color-mix(in oklab,var(--primary)60%,transparent);background-color:color-mix(in oklab,var(--primary)5%,transparent);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--primary)30%,transparent)}.cbi-dynlist .item>span,.cbi-dynlist .item>code{pointer-events:none;border-radius:var(--radius-base);width:100%;font-family:var(--font-mono);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.cbi-dynlist .placeholder{word-break:break-all}.cbi-dynlist .add-item{align-items:center;gap:calc(var(--spacing)*1.5);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);align-self:stretch;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.cbi-dynlist .add-item{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.cbi-dynlist .add-item{padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*1);background-color:#0000}@media (hover:hover){.cbi-dynlist .add-item:hover{border-color:var(--border);background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){.cbi-dynlist .add-item:hover{background-color:color-mix(in oklab,var(--page-bg)50%,transparent)}}}.cbi-dynlist .add-item>input{min-width:calc(var(--spacing)*61);flex:1}.cbi-dynlist .add-item>.cbi-button{min-height:calc(var(--spacing)*6);min-width:calc(var(--spacing)*6);cursor:pointer;border-radius:calc(var(--radius-base)*1.5);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*0);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.cbi-dynlist .add-item>.cbi-button:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.cbi-tabmenu{margin-bottom:calc(var(--spacing)*1);align-items:center;gap:calc(var(--spacing)*1);border-radius:calc(var(--radius-base)*4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);display:flex;overflow-x:auto}@supports (color:color-mix(in lab, red, red)){.cbi-tabmenu{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.cbi-tabmenu{background-color:var(--label-surface);padding:calc(var(--spacing)*1)}.cbi-tabmenu li{margin:calc(var(--spacing)*0);flex-shrink:0;min-width:fit-content;list-style-type:none;position:relative}.cbi-tabmenu li[data-errors]:after{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*-.5);content:var(--tw-content);right:calc(var(--spacing)*-1.5);content:var(--tw-content);z-index:20;content:var(--tw-content);content:var(--tw-content);min-height:calc(var(--spacing)*4);content:var(--tw-content);min-width:calc(var(--spacing)*4);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);background-color:var(--accent);content:var(--tw-content);padding-inline:calc(var(--spacing)*1.5);content:var(--tw-content);padding-block:calc(var(--spacing)*.5);content:var(--tw-content);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));content:var(--tw-content);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);content:var(--tw-content);color:var(--accent-foreground);--tw-content:attr(data-errors);content:var(--tw-content);border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.cbi-tabmenu li[data-errors]>a{border-style:var(--tw-border-style);border-width:1px;border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.cbi-tabmenu li[data-errors]>a{border-color:color-mix(in oklab,var(--error)50%,transparent)}}.cbi-tabmenu li>a{border-radius:calc(var(--radius-base)*4);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--muted-foreground);text-decoration-line:none;display:block}@media (hover:hover){.cbi-tabmenu li>a:hover{color:var(--foreground)}}.cbi-tabmenu li.cbi-tab a{background-color:var(--foreground);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--page-bg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[data-tab-title]{visibility:hidden;height:calc(var(--spacing)*0);overflow:hidden}[data-tab-active=true]{visibility:visible;height:auto;overflow:visible}#tabmenu{margin-bottom:calc(var(--spacing)*8);width:100%}.tabs{align-items:center;gap:calc(var(--spacing)*0);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);display:flex;position:relative;overflow-x:auto}.tabs a{padding-inline:calc(var(--spacing)*8);padding-block:calc(var(--spacing)*4);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--muted-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s;display:block}@media (hover:hover){.tabs a:hover{color:var(--foreground);text-decoration-line:none}}.tabs>li.active{border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:var(--foreground)}.tabs>li.active>a{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--foreground)}.cbi-section-node-tabbed{margin-top:calc(var(--spacing)*6)}.hidden{display:none!important}@media (min-width:48rem){.left{text-align:left!important}}.left:not(td){text-align:left!important}@media (min-width:48rem){.right{text-align:right!important}}.right:not(td){text-align:right!important}@media (min-width:48rem){.top{vertical-align:top!important}}.top:not(td){vertical-align:top!important}@media (min-width:48rem){.bottom{vertical-align:bottom!important}}.bottom:not(td){vertical-align:bottom!important}@media (min-width:48rem){.center{text-align:center!important}}.center:not(td){text-align:center!important}@media (min-width:48rem){.middle{vertical-align:middle!important}}.middle:not(td){vertical-align:middle!important}@media (min-width:48rem){.nowrap:not(span){white-space:nowrap}}.nowrap:not(span):not(td){white-space:nowrap}.fade-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.4s;--tw-enter-opacity:0;--tw-animation-fill-mode:backwards;transition-duration:.4s;animation-fill-mode:backwards}.fade-out{pointer-events:none;opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.4s;transition-duration:.4s}.spinning{display:inline-block;position:relative;padding-left:calc(var(--spacing)*8)!important}.spinning:before{content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);content:var(--tw-content);animation:var(--animate-spin);content:var(--tw-content);content:var(--tw-content);background-color:currentColor;position:absolute;top:50%;left:6px;-webkit-mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1758357645269'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='7610'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M512%2085.333333c235.648%200%20426.666667%20191.018667%20426.666667%20426.666667s-191.018667%20426.666667-426.666667%20426.666667S85.333333%20747.648%2085.333333%20512%20276.352%2085.333333%20512%2085.333333z%20m0%20128a298.666667%20298.666667%200%201%200%200%20597.333334%20298.666667%20298.666667%200%200%200%200-597.333334z'%20fill='%23000000'%20fill-opacity='.05'%20p-id='7611'%3e%3c/path%3e%3cpath%20d='M813.696%20813.696c166.613333-166.613333%20166.613333-436.778667%200-603.392-166.613333-166.613333-436.778667-166.613333-603.392%200A64%2064%200%200%200%20300.8%20300.8a298.666667%20298.666667%200%201%201%20422.4%20422.4%2064%2064%200%200%200%2090.496%2090.496z'%20fill='%23000000'%20p-id='7612'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1758357645269'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='7610'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M512%2085.333333c235.648%200%20426.666667%20191.018667%20426.666667%20426.666667s-191.018667%20426.666667-426.666667%20426.666667S85.333333%20747.648%2085.333333%20512%20276.352%2085.333333%20512%2085.333333z%20m0%20128a298.666667%20298.666667%200%201%200%200%20597.333334%20298.666667%20298.666667%200%200%200%200-597.333334z'%20fill='%23000000'%20fill-opacity='.05'%20p-id='7611'%3e%3c/path%3e%3cpath%20d='M813.696%20813.696c166.613333-166.613333%20166.613333-436.778667%200-603.392-166.613333-166.613333-436.778667-166.613333-603.392%200A64%2064%200%200%200%20300.8%20300.8a298.666667%20298.666667%200%201%201%20422.4%20422.4%2064%2064%200%200%200%2090.496%2090.496z'%20fill='%23000000'%20p-id='7612'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat}#view>.spinning:first-child{min-height:calc(var(--spacing)*48);place-items:center;width:fit-content;margin-inline:auto;display:grid}@media not all and (min-width:48rem){#view>.spinning:first-child{min-height:calc(100dvh - 4rem)}.diag-style{gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}}.diag-style>div{align-items:center;gap:calc(var(--spacing)*2);flex-direction:column;display:flex}@media not all and (min-width:48rem){.diag-style>div{gap:calc(var(--spacing)*1);width:100%!important}}#file-manager-container{overflow:auto}#file-manager-container #status-bar{border-style:var(--tw-border-style);background-color:var(--page-bg);border-width:0}[data-page=admin-statistics-graphs] [data-plugin] img:where([data-darkmode=true],[data-darkmode=true] *){--tw-hue-rotate:hue-rotate(150deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,);--tw-invert:invert(100%)}@media not all and (min-width:48rem){[data-name=bridge-vlan]>div{overflow:visible!important}}[data-page=admin-services-openclash-config] .sub_div img{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}@media not all and (min-width:48rem){[data-page=admin-services-openclash-settings] .cbi-value-field .cbi-input-select{width:100%!important}}.Dashboard>.section-content .dashboard-bg.tr{border-radius:0}.Dashboard>.section-content .dashboard-bg{background-color:var(--panel-bg)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg{background-color:color-mix(in oklab,var(--panel-bg)95%,transparent)}}.Dashboard>.section-content .dashboard-bg:not(.tr){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg:not(.tr){border-color:color-mix(in oklab,var(--border)40%,transparent)}}.Dashboard>.section-content .dashboard-bg:not(.tr){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.Dashboard>.section-content .dashboard-bg:not(.tr):hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg:not(.tr):hover{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.Dashboard>.section-content .dashboard-bg:not(.tr):hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media not all and (min-width:48rem){.Dashboard>.section-content .dashboard-bg{background-color:var(--panel-bg)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg{background-color:color-mix(in oklab,var(--panel-bg)98%,transparent)}}.Dashboard>.section-content .dashboard-bg:not(.tr){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg:not(.tr){border-color:color-mix(in oklab,var(--border)30%,transparent)}}}.Dashboard>.section-content .dashboard-bg span:where([data-darkmode=true],[data-darkmode=true] *),.Dashboard>.section-content .dashboard-bg td:where([data-darkmode=true],[data-darkmode=true] *),.Dashboard>.section-content .dashboard-bg th:where([data-darkmode=true],[data-darkmode=true] *){color:var(--foreground)!important}.Dashboard>.section-content .dashboard-bg img[src*=\.svg]:where([data-darkmode=true],[data-darkmode=true] *){--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.Dashboard>.section-content .dashboard-bg .td{padding-block:calc(var(--spacing)*2)}@media not all and (min-width:48rem){.Dashboard>.section-content .dashboard-bg .td{padding-block:calc(var(--spacing)*1)}}.Dashboard>.section-content .dashboard-bg .th{padding-block:calc(var(--spacing)*2)}.Dashboard>.section-content .dashboard-bg .table:not(.assoclist){margin-bottom:calc(var(--spacing)*0);border-style:var(--tw-border-style);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#0000;border-width:0;border-radius:0}@media (hover:hover){.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) tr:hover{background-color:#0000}}@media not all and (min-width:48rem){.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) tr{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*0);border-width:0;display:table-row}}.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) td{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*.5);border-width:0}@media not all and (min-width:48rem){.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) td{display:table-cell}}.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) td:first-child{padding-right:calc(var(--spacing)*2);white-space:nowrap;opacity:.7}.Dashboard>.section-content .title h3{border-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*4);color:var(--foreground);border-width:0}@media not all and (min-width:48rem){.Dashboard>.section-content .title h3{margin-inline:calc(var(--spacing)*0);padding-bottom:calc(var(--spacing)*2)}}.Dashboard>.section-content .router-status-wifi .wifi-info .devices-info .tr .td:nth-child(3){top:calc(var(--spacing)*0);width:100%;padding-inline:calc(var(--spacing)*0);position:relative}@media not all and (min-width:48rem){.Dashboard>.section-content .router-status-wifi .wifi-info .devices-info .tr .td{flex:50%}}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}
+@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--tw-leading:initial;--tw-font-weight:initial;--tw-duration:initial;--tw-tracking:initial;--tw-border-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-content:"";--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-space-y-reverse:0;--tw-border-spacing-x:0;--tw-border-spacing-y:0}}:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--spacing:var(--spacing);--container-xs:20rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25/1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-normal:1.5;--leading-relaxed:1.625;--radius-2xl:calc(var(--radius-base)*2);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--blur-sm:8px;--blur-md:12px;--blur-lg:16px;--blur-xl:24px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--container-max-width:var(--container-max-width)}*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{scrollbar-color:initial;scrollbar-width:initial}.collapse{visibility:collapse}.fixed{position:fixed}.static{position:static}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.scrollbar::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.scrollbar::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.scrollbar::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.scrollbar{scrollbar-width:auto;scrollbar-color:var(--scrollbar-thumb,initial)var(--scrollbar-track,initial)}.scrollbar::-webkit-scrollbar{width:var(--scrollbar-width,16px);height:var(--scrollbar-height,16px);display:block}.inline{display:inline}.table{display:table}.rounded{border-radius:calc(var(--radius-base)*.5)}.underline{text-decoration-line:underline}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--background:#f1f5f9;--foreground:#0f172b;--primary:#46a3d1;--primary-foreground:#fff;--secondary:#e2e8f0;--secondary-foreground:#314158;--muted:#f5f5f5;--muted-foreground:#45556c;--destructive:#ffe2df;--destructive-foreground:#6c1517;--accent:#ee343b;--accent-foreground:#fff1f0;--default:#f5f5f5;--default-foreground:#171717;--info:#d3f1ff;--info-foreground:#003f60;--warning:#fbeec9;--warning-foreground:#582f02;--success:#cff6e0;--success-foreground:#003d2a;--error:#ffe2df;--error-foreground:#6c1517;--border:#e4e4e4;--link:#ec6cff;--input-checked:#fff;--label-surface:oklch(from var(--panel-bg)calc(l - .02)c h);--login-aurora-1:#00c23d;--login-aurora-2:#00a6a0;--login-aurora-3:#4266ff;--login-aurora-4:#b93ef3;--terminal-bg:#1a2029;--terminal-foreground:#fff;--overlay-base:#000;--progress-bar-start:#46a3d1;--progress-bar-end:#4fc3c7;--header-bg:oklch(from var(--background)l c h);--header-interactive:oklch(from var(--header-bg)calc(l - .12)c h);--page-bg:#fff;--panel-bg:#fff;--tooltip-bg:oklch(from var(--page-bg)calc(l - .015)c h);--font-sans:"Lato",ui-sans-serif,system-ui,sans-serif;--font-mono:ui-monospace,"SF Mono",Menlo,Monaco,Consolas,monospace;--spacing:.25rem;--container-max-width:80rem;--radius-base:.5rem}@supports (color:lab(0% 0 0)){:root{--background:lab(96.286% -.852436 -2.46847);--foreground:lab(7.78673% 1.82345 -15.0537);--primary:lab(63.0437% -17.6746 -32.0381);--primary-foreground:lab(100% 0 0);--secondary:lab(91.7353% -.998765 -4.76968);--secondary-foreground:lab(26.9569% -1.47016 -15.6993);--muted:lab(96.52% -.0000298023 .0000119209);--muted-foreground:lab(35.5623% -1.74978 -15.4316);--destructive:lab(92.5749% 15.3735 8.32583);--destructive-foreground:lab(23.385% 37.9736 23.5817);--accent:lab(53.6853% 69.6775 43.7724);--accent-foreground:lab(96.3359% 6.12152 3.29586);--default:lab(96.52% -.0000298023 .0000119209);--default-foreground:lab(7.78201% -.0000149012 0);--info:lab(93.2141% -10.1735 -14.3943);--info-foreground:lab(24.4811% -7.8918 -24.9024);--warning:lab(94.421% .545532 19.5962);--warning-foreground:lab(24.2528% 17.0621 33.1082);--success:lab(93.715% -16.1219 6.39679);--success-foreground:lab(22.3041% -31.6825 8.84454);--error:lab(92.5749% 15.3735 8.32583);--error-foreground:lab(23.385% 37.9736 23.5817);--border:lab(90.72% .0000298023 -.0000119209);--link:lab(66.1178% 66.0652 -52.4733);--input-checked:lab(100% 0 0);--login-aurora-1:lab(68.2738% -77.861 60.3677);--login-aurora-2:lab(61.8807% -76.0735 -14.3835);--login-aurora-3:lab(47.9708% 31.2682 -84.9353);--login-aurora-4:lab(51.406% 68.7947 -68.8447);--terminal-bg:lab(11.7506% -.5823 -7.27103);--terminal-foreground:lab(100% 0 0);--overlay-base:lab(0% 0 0);--progress-bar-start:lab(63.0437% -17.6746 -32.0381);--progress-bar-end:lab(72.4424% -32.9195 -12.3464);--page-bg:lab(100% 0 0);--panel-bg:lab(100% 0 0)}}[data-darkmode=true]{--background:#003c38;--foreground:#f1f5f9;--primary:#00958e;--primary-foreground:#fff;--secondary:#314158;--secondary-foreground:#e5e7eb;--muted:#38414f;--muted-foreground:#90a1b9;--destructive:#460809;--destructive-foreground:#ffc6c0;--accent:#6c1517;--accent-foreground:#ffc6c0;--default:#27272a80;--default-foreground:#f9f9ff;--info:#024a7080;--info-foreground:#b0e0f8;--warning:#7b330680;--warning-foreground:#fee685;--success:#004e3b80;--success-foreground:#aff8d0;--error:#8b083680;--error-foreground:#ffc6c0;--border:#364358;--link:#a685ff;--input-checked:#fff;--label-surface:oklch(from var(--panel-bg)calc(l + .04)c h);--login-aurora-1:#00d847;--login-aurora-2:#00b7b3;--login-aurora-3:#5279ff;--login-aurora-4:#c854ff;--terminal-bg:#0a121f;--terminal-foreground:#fff;--overlay-base:#000;--progress-bar-start:#065f46;--progress-bar-end:#009b94;--header-bg:oklch(from var(--page-bg)l c h);--header-interactive:oklch(from var(--header-bg)calc(l + .24)c h);--page-bg:#101828;--panel-bg:#1d293d;--tooltip-bg:oklch(from var(--page-bg)calc(l + .06)c h)}@supports (color:lab(0% 0 0)){[data-darkmode=true]{--background:lab(21.8032% -20.1655 -3.35968);--foreground:lab(96.286% -.852436 -2.46847);--primary:lab(55.0978% -44.5567 -7.62978);--primary-foreground:lab(100% 0 0);--secondary:lab(26.9569% -1.47016 -15.6993);--secondary-foreground:lab(91.6229% -.159115 -2.26791);--muted:lab(27.1597% -.911355 -9.48523);--muted-foreground:lab(65.5349% -2.25151 -14.5072);--destructive:lab(13.003% 29.04 16.7519);--destructive-foreground:lab(84.7556% 43.3341 25.2722);--accent:lab(23.385% 37.9736 23.5817);--accent-foreground:lab(84.7347% 43.595 24.3042);--default:lab(15.7305% .613764 -2.16959/.5);--default-foreground:lab(98.1732% .982702 -3.63715);--info:lab(29.1959% -8.34689 -28.2453/.5);--info-foreground:lab(86.2797% -12.0086 -17.1909);--warning:lab(31.2288% 30.2627 40.0378/.5);--warning-foreground:lab(91.7203% -.505269 49.9084);--success:lab(28.8637% -26.9249 5.45986/.5);--success-foreground:lab(91.9265% -29.2737 11.5846);--error:lab(29.7104% 51.514 12.6253/.5);--error-foreground:lab(84.7347% 43.595 24.3042);--border:lab(27.8781% -.856712 -14.804);--link:lab(62.8239% 34.9159 -60.0512);--input-checked:lab(100% 0 0);--login-aurora-1:lab(75.4735% -83.8096 64.8452);--login-aurora-2:lab(67.7176% -77.9628 -17.8815);--login-aurora-3:lab(53.7474% 31.0421 -88.4899);--login-aurora-4:lab(57.0971% 71.0297 -71.531);--terminal-bg:lab(5.13221% -.0256523 -9.94164);--terminal-foreground:lab(100% 0 0);--overlay-base:lab(0% 0 0);--progress-bar-start:lab(35.2336% -29.9851 7.30804);--progress-bar-end:lab(57.6867% -49.5425 -9.29472);--page-bg:lab(8.11897% .811279 -12.254);--panel-bg:lab(16.132% -.318035 -14.6672)}}:not(html)::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}:not(html)::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}:not(html)::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}:not(html){scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb,initial)var(--scrollbar-track,initial)}:not(html)::-webkit-scrollbar{width:8px;height:8px;display:block}:not(html){--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab, red, red)){:not(html){--scrollbar-thumb:color-mix(in oklab,var(--foreground)70%,transparent)}}:not(html){--scrollbar-thumb-radius:9999px;--scrollbar-track:transparent}html::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}html::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}html::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}html{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb,initial)var(--scrollbar-track,initial)}html::-webkit-scrollbar{width:8px;height:8px;display:block}html{--scrollbar-thumb:var(--foreground)}@supports (color:color-mix(in lab, red, red)){html{--scrollbar-thumb:color-mix(in oklab,var(--foreground)70%,transparent)}}html{--scrollbar-thumb-radius:9999px;--scrollbar-track:var(--page-bg);background-color:var(--background);height:100%;font-family:var(--font-sans);position:relative}html body{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;background-color:#0000;flex-direction:column;transition-duration:.3s;display:flex;position:relative}html body.modal-overlay-active{height:100vh;overflow:hidden}h1,h2,h3,h4,h5,h6{font-family:var(--font-sans);--tw-leading:var(--leading-tight);line-height:var(--leading-tight);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--foreground)}h1{margin-bottom:calc(var(--spacing)*4);padding-left:calc(var(--spacing)*6);font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}@media not all and (min-width:48rem){h1{padding-left:calc(var(--spacing)*4);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}h2{margin-bottom:calc(var(--spacing)*4);padding-left:calc(var(--spacing)*5);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}@media not all and (min-width:48rem){h2{margin-bottom:calc(var(--spacing)*2);padding-left:calc(var(--spacing)*4);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}h3{margin-bottom:calc(var(--spacing)*4);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}@media not all and (min-width:48rem){h3{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}h4{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}@media not all and (min-width:48rem){h4{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}h5{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media not all and (min-width:48rem){h5{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}h6{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}@media not all and (min-width:48rem){h6{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}hr{border-style:var(--tw-border-style);border-width:0}strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}abbr{cursor:help}p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--default-foreground)}pre{border-radius:calc(var(--radius-base)*1.5);border-style:var(--tw-border-style);border-width:1px;border-color:var(--secondary);display:block}@supports (color:color-mix(in lab, red, red)){pre{border-color:color-mix(in oklab,var(--secondary)60%,transparent)}}pre{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){pre{background-color:color-mix(in oklab,var(--secondary)60%,transparent)}}pre{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);overflow-wrap:break-word;white-space:pre-wrap;color:var(--secondary-foreground)}code{border-radius:calc(var(--radius-base)*.5);background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){code{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}code{padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-family:var(--font-mono);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--secondary-foreground)}a{color:var(--link);text-decoration-line:none}@media (hover:hover){a:hover{text-decoration-line:underline}}var{font-family:var(--font-mono);color:var(--link)}small{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--default-foreground)}em{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground);font-style:italic}header{top:calc(var(--spacing)*0);z-index:60;margin-bottom:calc(var(--spacing)*2);background-color:var(--header-bg);position:sticky}header .header-content{height:calc(var(--spacing)*14);padding-inline:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*3);justify-content:space-between;align-items:center;display:flex;position:relative}@media not all and (min-width:48rem){header .header-content{padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2)}}[data-nav-type=mega-menu] :is(header) .desktop-menu-container{pointer-events:none;inset-inline:calc(var(--spacing)*0);top:calc(var(--spacing)*0);z-index:30;height:calc(var(--spacing)*0);background-color:var(--header-bg);width:100%;position:absolute;overflow:hidden}@supports (color:color-mix(in lab, red, red)){[data-nav-type=mega-menu] :is(header) .desktop-menu-container{background-color:color-mix(in oklab,var(--header-bg)40%,transparent)}}[data-nav-type=mega-menu] :is(header) .desktop-menu-container{opacity:0;--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;--tw-ease:var(--ease-in-out);transition-duration:.15s;transition-timing-function:var(--ease-in-out)}@media not all and (min-width:48rem){[data-nav-type=mega-menu] :is(header) .desktop-menu-container{display:none}}[data-nav-type=mega-menu] :is(header) .desktop-menu-container:where([data-darkmode=true],[data-darkmode=true] *){background-color:var(--header-bg)}@supports (color:color-mix(in lab, red, red)){[data-nav-type=mega-menu] :is(header) .desktop-menu-container:where([data-darkmode=true],[data-darkmode=true] *){background-color:color-mix(in oklab,var(--header-bg)90%,transparent)}}[data-nav-type=mega-menu] :is(header) .desktop-menu-container.active{pointer-events:auto;height:var(--mega-menu-height,0);opacity:1}header .brand{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;flex-shrink:0;text-decoration-line:none;transition-duration:.2s;display:inline-block}@media (hover:hover){header .brand:hover{--tw-translate-y:calc(var(--spacing)*-.5);translate:var(--tw-translate-x)var(--tw-translate-y);color:var(--primary)}}@media not all and (min-width:48rem){header .brand{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));flex:1;order:1}}header .nav{z-index:60;margin:calc(var(--spacing)*0);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);align-items:center;gap:calc(var(--spacing)*1);padding:calc(var(--spacing)*0);list-style-type:none;display:flex;position:absolute;left:50%}@media not all and (min-width:48rem){header .nav{display:none}}header .nav>li{position:relative}header .nav>li .menu{border-radius:calc(var(--radius-base)*1.5);padding-inline:calc(var(--spacing)*3.5);padding-block:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;text-decoration-line:none;transition-duration:.15s;display:block}header .nav>li .menu.menu-active{color:var(--foreground)}[data-nav-type=mega-menu] header .nav>li .menu.menu-active{text-underline-offset:4px;text-decoration-line:underline;text-decoration-thickness:2px}[data-nav-type=boxed-dropdown] header .nav>li .menu.menu-active{background-color:var(--header-interactive)}header .nav>li .desktop-nav{pointer-events:none;left:calc(var(--spacing)*0);z-index:40;padding-inline:calc(var(--spacing)*0);padding-top:calc(var(--spacing)*0);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.15s;transition-duration:.15s}[data-nav-type=mega-menu] :is(header .nav>li .desktop-nav){top:calc(var(--spacing)*14);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);padding-bottom:calc(var(--spacing)*6);position:fixed;left:50%}[data-nav-type=boxed-dropdown] :is(header .nav>li .desktop-nav){margin-top:calc(var(--spacing)*2);min-width:calc(var(--spacing)*48);position:absolute;top:100%}header .nav>li .desktop-nav.active{pointer-events:auto;opacity:1}[data-nav-type=mega-menu] :is(header .nav>li .desktop-nav .desktop-nav-list){column-gap:calc(var(--spacing)*4);row-gap:calc(var(--spacing)*2);grid-template-columns:repeat(4,minmax(0,1fr));width:max-content;display:grid}[data-nav-type=boxed-dropdown] :is(header .nav>li .desktop-nav .desktop-nav-list){row-gap:calc(var(--spacing)*1);border-radius:calc(var(--radius-base)*3);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:color-mix(in oklab,var(--header-bg)90%,transparent);padding-block:calc(var(--spacing)*2);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-md));--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;flex-direction:column;transition-duration:.2s;display:flex}header .nav>li .desktop-nav .desktop-nav-list>li{margin:calc(var(--spacing)*0);list-style-type:none}header .nav>li .desktop-nav .desktop-nav-list>li>a{padding-inline:calc(var(--spacing)*4);white-space:nowrap;color:var(--foreground);text-decoration-line:none;display:block}[data-nav-type=mega-menu] :is(header .nav>li .desktop-nav .desktop-nav-list>li>a){padding-block:calc(var(--spacing)*3)}@media (hover:hover){[data-nav-type=mega-menu] :is(header .nav>li .desktop-nav .desktop-nav-list>li>a):hover{text-underline-offset:4px;text-decoration-line:underline;text-decoration-thickness:2px}}[data-nav-type=boxed-dropdown] :is(header .nav>li .desktop-nav .desktop-nav-list>li>a){margin-inline:calc(var(--spacing)*2);border-radius:calc(var(--radius-base)*1.5);padding-block:calc(var(--spacing)*2)}@media (hover:hover){[data-nav-type=boxed-dropdown] :is(header .nav>li .desktop-nav .desktop-nav-list>li>a):hover{background-color:var(--header-interactive)}}@media not all and (min-width:48rem){header .mobile-controls{flex-shrink:0;order:9999;align-items:center;display:flex}}@media (min-width:48rem){header .mobile-controls{display:none}}@media not all and (min-width:48rem){header .mobile-controls .mobile-menu-toggle{margin-left:calc(var(--spacing)*5);cursor:pointer;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){header .mobile-controls .mobile-menu-toggle:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}}header .mobile-controls .mobile-menu-toggle:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}header .mobile-controls .mobile-menu-toggle svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}@media not all and (min-width:48rem){header .mobile-controls .mobile-menu-toggle svg{color:var(--foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}header .mobile-controls .mobile-menu-toggle.active svg{rotate:180deg}}header #indicators{gap:calc(var(--spacing)*5);flex-direction:row-reverse;flex-shrink:0;display:flex}@media not all and (min-width:48rem){header #indicators{flex-shrink:0;order:2}}@media (min-width:48rem){header #indicators{gap:calc(var(--spacing)*8)}}header #indicators span[data-indicator]{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);cursor:pointer;font-size:0}header #indicators span[data-indicator]:before{content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);content:var(--tw-content);content:var(--tw-content);color:var(--foreground);background-color:currentColor;position:absolute}header #indicators span[data-indicator][data-indicator=media_error]:before{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M99.5149%20622.549C93.2144%20633.653%2093.4349%20634%20107.075%20634H651.912C665.537%20634%20665.757%20633.622%20659.473%20622.549L385.196%20138.236C378.99%20127.258%20379.998%20127.258%20373.792%20138.236L99.5149%20622.534V622.549ZM440.01%20107.161L714.303%20591.475C744.577%20644.978%20713.373%20697%20651.912%20697H107.075C45.5668%20697%2014.4423%20644.946%2044.7005%20591.506L318.977%20107.192C349.314%2053.5947%20409.705%2053.6105%20440.026%20107.192L440.01%20107.161ZM379.494%20586.75C383.631%20586.75%20387.728%20585.936%20391.551%20584.353C395.373%20582.77%20398.847%20580.45%20401.773%20577.525C404.698%20574.6%20407.019%20571.127%20408.603%20567.305C410.186%20563.483%20411.001%20559.387%20411.001%20555.25C411.001%20551.112%20410.186%20547.016%20408.603%20543.194C407.019%20539.372%20404.698%20535.899%20401.773%20532.974C398.847%20530.049%20395.373%20527.729%20391.551%20526.146C387.728%20524.563%20383.631%20523.749%20379.494%20523.749C371.14%20523.751%20363.128%20527.07%20357.221%20532.977C351.314%20538.885%20347.996%20546.896%20347.996%20555.25C347.996%20563.603%20351.314%20571.614%20357.221%20577.522C363.128%20583.429%20371.14%20586.748%20379.494%20586.75ZM347.991%20303.249V460.749C347.991%20469.104%20351.31%20477.116%20357.218%20483.023C363.126%20488.931%20371.139%20492.249%20379.494%20492.249C387.849%20492.249%20395.862%20488.931%20401.769%20483.023C407.677%20477.116%20410.996%20469.104%20410.996%20460.749V303.249C410.996%20294.894%20407.677%20286.882%20401.769%20280.975C395.862%20275.067%20387.849%20271.749%20379.494%20271.749C371.139%20271.749%20363.126%20275.067%20357.218%20280.975C351.31%20286.882%20347.991%20294.894%20347.991%20303.249Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M99.5149%20622.549C93.2144%20633.653%2093.4349%20634%20107.075%20634H651.912C665.537%20634%20665.757%20633.622%20659.473%20622.549L385.196%20138.236C378.99%20127.258%20379.998%20127.258%20373.792%20138.236L99.5149%20622.534V622.549ZM440.01%20107.161L714.303%20591.475C744.577%20644.978%20713.373%20697%20651.912%20697H107.075C45.5668%20697%2014.4423%20644.946%2044.7005%20591.506L318.977%20107.192C349.314%2053.5947%20409.705%2053.6105%20440.026%20107.192L440.01%20107.161ZM379.494%20586.75C383.631%20586.75%20387.728%20585.936%20391.551%20584.353C395.373%20582.77%20398.847%20580.45%20401.773%20577.525C404.698%20574.6%20407.019%20571.127%20408.603%20567.305C410.186%20563.483%20411.001%20559.387%20411.001%20555.25C411.001%20551.112%20410.186%20547.016%20408.603%20543.194C407.019%20539.372%20404.698%20535.899%20401.773%20532.974C398.847%20530.049%20395.373%20527.729%20391.551%20526.146C387.728%20524.563%20383.631%20523.749%20379.494%20523.749C371.14%20523.751%20363.128%20527.07%20357.221%20532.977C351.314%20538.885%20347.996%20546.896%20347.996%20555.25C347.996%20563.603%20351.314%20571.614%20357.221%20577.522C363.128%20583.429%20371.14%20586.748%20379.494%20586.75ZM347.991%20303.249V460.749C347.991%20469.104%20351.31%20477.116%20357.218%20483.023C363.126%20488.931%20371.139%20492.249%20379.494%20492.249C387.849%20492.249%20395.862%20488.931%20401.769%20483.023C407.677%20477.116%20410.996%20469.104%20410.996%20460.749V303.249C410.996%20294.894%20407.677%20286.882%20401.769%20280.975C395.862%20275.067%20387.849%20271.749%20379.494%20271.749C371.139%20271.749%20363.126%20275.067%20357.218%20280.975C351.31%20286.882%20347.991%20294.894%20347.991%20303.249Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat}header #indicators span[data-indicator][data-indicator=poll-status][data-style=active]:before{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M201.032%20123.921C202.67%20122.913%20204.182%20121.936%20205.537%20121.023C257.614%2085.7368%20319.094%2066.9154%20382%2067.0003C555.974%2067.0003%20697%20208.026%20697%20382C697.086%20440.93%20680.568%20498.691%20649.34%20548.666C648.405%20550.159%20647.097%20551.383%20645.545%20552.216C643.993%20553.05%20642.25%20553.465%20640.489%20553.42C638.728%20553.376%20637.009%20552.873%20635.501%20551.962C633.993%20551.051%20632.748%20549.763%20631.889%20548.225L552.509%20405.404C551.176%20403.007%20550.492%20400.303%20550.525%20397.56C550.558%20394.817%20551.307%20392.13%20552.698%20389.765C554.089%20387.401%20556.073%20385.44%20558.454%20384.078C560.836%20382.716%20563.531%20382%20566.275%20382H634C634.01%20335.412%20621.106%20289.734%20596.72%20250.038C572.334%20210.343%20537.422%20178.184%20495.861%20157.135C454.3%20136.085%20407.718%20126.968%20361.288%20130.797C314.858%20134.626%20270.398%20151.251%20232.847%20178.825C229.627%20181.188%20225.94%20182.839%20222.032%20183.668C218.124%20184.497%20214.085%20184.485%20210.182%20183.633C206.279%20182.781%20202.602%20181.108%20199.395%20178.726C196.189%20176.344%20193.525%20173.307%20191.582%20169.816L189.818%20166.666C185.825%20159.468%20184.763%20151.007%20186.852%20143.044C188.941%20135.082%20194.02%20128.232%20201.032%20123.921ZM558.715%20642.82C506.586%20678.213%20445.009%20697.092%20382%20697C208.025%20697%2067%20555.974%2067%20382C67%20322.969%2083.254%20267.718%20111.478%20220.5C112.696%20218.456%20114.432%20216.77%20116.509%20215.61C118.587%20214.45%20120.933%20213.858%20123.312%20213.893C125.691%20213.928%20128.019%20214.589%20130.061%20215.81C132.103%20217.03%20133.788%20218.768%20134.945%20220.846L211.49%20358.595C212.824%20360.993%20213.508%20363.697%20213.474%20366.44C213.441%20369.183%20212.692%20371.87%20211.302%20374.235C209.911%20376.599%20207.926%20378.56%20205.545%20379.922C203.164%20381.284%20200.468%20382%20197.725%20382H130C129.999%20428.603%20142.921%20474.294%20167.33%20513.993C191.739%20553.693%20226.679%20585.846%20268.265%20606.879C309.852%20627.913%20356.457%20637.002%20402.9%20633.137C449.342%20629.272%20493.803%20612.604%20531.341%20584.986C534.645%20582.52%20538.43%20580.775%20542.451%20579.865C546.472%20578.954%20550.64%20578.898%20554.684%20579.7C558.728%20580.501%20562.558%20582.143%20565.928%20584.519C569.297%20586.894%20572.131%20589.951%20574.244%20593.491C578.821%20601.138%20580.227%20610.272%20578.161%20618.941C576.095%20627.61%20570.721%20635.129%20563.188%20639.89C561.702%20640.833%20560.232%20641.799%20558.778%20642.788L558.715%20642.82Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M201.032%20123.921C202.67%20122.913%20204.182%20121.936%20205.537%20121.023C257.614%2085.7368%20319.094%2066.9154%20382%2067.0003C555.974%2067.0003%20697%20208.026%20697%20382C697.086%20440.93%20680.568%20498.691%20649.34%20548.666C648.405%20550.159%20647.097%20551.383%20645.545%20552.216C643.993%20553.05%20642.25%20553.465%20640.489%20553.42C638.728%20553.376%20637.009%20552.873%20635.501%20551.962C633.993%20551.051%20632.748%20549.763%20631.889%20548.225L552.509%20405.404C551.176%20403.007%20550.492%20400.303%20550.525%20397.56C550.558%20394.817%20551.307%20392.13%20552.698%20389.765C554.089%20387.401%20556.073%20385.44%20558.454%20384.078C560.836%20382.716%20563.531%20382%20566.275%20382H634C634.01%20335.412%20621.106%20289.734%20596.72%20250.038C572.334%20210.343%20537.422%20178.184%20495.861%20157.135C454.3%20136.085%20407.718%20126.968%20361.288%20130.797C314.858%20134.626%20270.398%20151.251%20232.847%20178.825C229.627%20181.188%20225.94%20182.839%20222.032%20183.668C218.124%20184.497%20214.085%20184.485%20210.182%20183.633C206.279%20182.781%20202.602%20181.108%20199.395%20178.726C196.189%20176.344%20193.525%20173.307%20191.582%20169.816L189.818%20166.666C185.825%20159.468%20184.763%20151.007%20186.852%20143.044C188.941%20135.082%20194.02%20128.232%20201.032%20123.921ZM558.715%20642.82C506.586%20678.213%20445.009%20697.092%20382%20697C208.025%20697%2067%20555.974%2067%20382C67%20322.969%2083.254%20267.718%20111.478%20220.5C112.696%20218.456%20114.432%20216.77%20116.509%20215.61C118.587%20214.45%20120.933%20213.858%20123.312%20213.893C125.691%20213.928%20128.019%20214.589%20130.061%20215.81C132.103%20217.03%20133.788%20218.768%20134.945%20220.846L211.49%20358.595C212.824%20360.993%20213.508%20363.697%20213.474%20366.44C213.441%20369.183%20212.692%20371.87%20211.302%20374.235C209.911%20376.599%20207.926%20378.56%20205.545%20379.922C203.164%20381.284%20200.468%20382%20197.725%20382H130C129.999%20428.603%20142.921%20474.294%20167.33%20513.993C191.739%20553.693%20226.679%20585.846%20268.265%20606.879C309.852%20627.913%20356.457%20637.002%20402.9%20633.137C449.342%20629.272%20493.803%20612.604%20531.341%20584.986C534.645%20582.52%20538.43%20580.775%20542.451%20579.865C546.472%20578.954%20550.64%20578.898%20554.684%20579.7C558.728%20580.501%20562.558%20582.143%20565.928%20584.519C569.297%20586.894%20572.131%20589.951%20574.244%20593.491C578.821%20601.138%20580.227%20610.272%20578.161%20618.941C576.095%20627.61%20570.721%20635.129%20563.188%20639.89C561.702%20640.833%20560.232%20641.799%20558.778%20642.788L558.715%20642.82Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat}header #indicators span[data-indicator][data-indicator=poll-status][data-style=inactive]:before{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M571.418%20595.528C580.7%20609.514%20576.962%20628.288%20563.018%20637.696C533.911%20657.268%20510.181%20670.456%20491.868%20677.302C456.716%20690.382%20419.502%20697.054%20381.995%20697C354.694%20697%20328.234%20693.514%20302.949%20687.004L335.962%20629.8C396.485%20641.014%20459.864%20629.8%20513.289%20597.124L530.089%20586.708C536.769%20582.478%20544.84%20581.032%20552.573%20582.681C560.306%20584.329%20567.086%20588.941%20571.46%20595.528H571.418ZM509.803%2094.006C529.123%20102.574%20547.477%20113.074%20564.53%20125.212L250.869%20668.482C231.733%20659.714%20213.526%20649.048%20196.52%20636.646L509.761%2094.006H509.803ZM381.995%2067C409.295%2067%20435.839%2070.486%20461.082%2076.996L427.985%20134.284L422.063%20133.234C371.12%20125.021%20318.883%20132.645%20272.412%20155.075C225.941%20177.505%20187.476%20213.659%20162.214%20258.653C136.953%20303.647%20126.112%20355.311%20131.158%20406.664C136.204%20458.017%20156.893%20506.583%20190.43%20545.8L157.459%20602.92C113.918%20558.666%2084.4251%20502.532%2072.6843%20441.57C60.9436%20380.609%2067.4788%20317.537%2091.469%20260.277C115.459%20203.018%20155.835%20154.123%20207.524%20119.736C259.213%2085.349%20319.912%2067.0021%20381.995%2067ZM606.572%20161.08C664.623%20219.944%20697.117%20299.327%20697%20382C697.058%20427.158%20687.374%20471.797%20668.607%20512.872C664.536%20521.456%20660.05%20529.838%20655.167%20537.988C653.67%20540.539%20651.526%20542.649%20648.952%20544.106C646.378%20545.563%20643.465%20546.315%20640.508%20546.285C637.55%20546.255%20634.653%20545.445%20632.109%20543.936C629.564%20542.428%20627.464%20540.274%20626.019%20537.694L609.932%20508.714L553.357%20406.948C551.939%20404.39%20551.212%20401.505%20551.251%20398.581C551.289%20395.656%20552.09%20392.791%20553.575%20390.271C555.06%20387.751%20557.177%20385.662%20559.717%20384.212C562.258%20382.761%20565.132%20381.998%20568.058%20382H633.999C634.02%20321.959%20612.568%20263.891%20573.518%20218.284L606.572%20161.122V161.08Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20width='800'%20height='800'%20viewBox='0%200%20800%20800'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='M571.418%20595.528C580.7%20609.514%20576.962%20628.288%20563.018%20637.696C533.911%20657.268%20510.181%20670.456%20491.868%20677.302C456.716%20690.382%20419.502%20697.054%20381.995%20697C354.694%20697%20328.234%20693.514%20302.949%20687.004L335.962%20629.8C396.485%20641.014%20459.864%20629.8%20513.289%20597.124L530.089%20586.708C536.769%20582.478%20544.84%20581.032%20552.573%20582.681C560.306%20584.329%20567.086%20588.941%20571.46%20595.528H571.418ZM509.803%2094.006C529.123%20102.574%20547.477%20113.074%20564.53%20125.212L250.869%20668.482C231.733%20659.714%20213.526%20649.048%20196.52%20636.646L509.761%2094.006H509.803ZM381.995%2067C409.295%2067%20435.839%2070.486%20461.082%2076.996L427.985%20134.284L422.063%20133.234C371.12%20125.021%20318.883%20132.645%20272.412%20155.075C225.941%20177.505%20187.476%20213.659%20162.214%20258.653C136.953%20303.647%20126.112%20355.311%20131.158%20406.664C136.204%20458.017%20156.893%20506.583%20190.43%20545.8L157.459%20602.92C113.918%20558.666%2084.4251%20502.532%2072.6843%20441.57C60.9436%20380.609%2067.4788%20317.537%2091.469%20260.277C115.459%20203.018%20155.835%20154.123%20207.524%20119.736C259.213%2085.349%20319.912%2067.0021%20381.995%2067ZM606.572%20161.08C664.623%20219.944%20697.117%20299.327%20697%20382C697.058%20427.158%20687.374%20471.797%20668.607%20512.872C664.536%20521.456%20660.05%20529.838%20655.167%20537.988C653.67%20540.539%20651.526%20542.649%20648.952%20544.106C646.378%20545.563%20643.465%20546.315%20640.508%20546.285C637.55%20546.255%20634.653%20545.445%20632.109%20543.936C629.564%20542.428%20627.464%20540.274%20626.019%20537.694L609.932%20508.714L553.357%20406.948C551.939%20404.39%20551.212%20401.505%20551.251%20398.581C551.289%20395.656%20552.09%20392.791%20553.575%20390.271C555.06%20387.751%20557.177%20385.662%20559.717%20384.212C562.258%20382.761%20565.132%20381.998%20568.058%20382H633.999C634.02%20321.959%20612.568%20263.891%20573.518%20218.284L606.572%20161.122V161.08Z'%20fill='%230F162B'/%3e%3c/svg%3e") 50%/cover no-repeat}header #indicators span[data-indicator][data-indicator=uci-changes]{position:relative}header #indicators span[data-indicator][data-indicator=uci-changes]:before{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1758476543825'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='17352'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M439.594667%2085.333333h144.810666a70.4%2070.4%200%200%201%2070.101334%2060.970667l5.802666%2044.8a17.066667%2017.066667%200%200%200%208.192%2012.458667l38.058667%2022.528a17.066667%2017.066667%200%200%200%2015.146667%201.109333l46.848-19.2a71.082667%2071.082667%200%200%201%2088.021333%2029.226667l72.405333%20122.069333c18.218667%2030.72%2010.069333%2069.973333-18.688%2091.221333l-45.184%2033.408a17.066667%2017.066667%200%200%200-6.912%2013.696v28.757334a17.066667%2017.066667%200%200%200%206.912%2013.696l45.226667%2033.408c28.714667%2021.205333%2036.864%2060.458667%2018.645333%2091.221333l-72.405333%20122.026667a71.082667%2071.082667%200%200%201-88.021333%2029.226666l-46.848-19.2a17.066667%2017.066667%200%200%200-15.146667%201.152l-38.058667%2022.528a17.066667%2017.066667%200%200%200-8.192%2012.501334l-5.802666%2044.8A70.4%2070.4%200%200%201%20584.405333%20938.666667h-144.810666a70.4%2070.4%200%200%201-70.101334-60.970667l-5.802666-44.8a17.066667%2017.066667%200%200%200-8.192-12.458667l-38.058667-22.528a17.066667%2017.066667%200%200%200-15.146667-1.109333l-46.848%2019.2a71.082667%2071.082667%200%200%201-88.021333-29.226667l-72.405333-122.069333a69.290667%2069.290667%200%200%201%2018.688-91.221333l45.184-33.408a17.066667%2017.066667%200%200%200%206.912-13.696v-28.757334a17.066667%2017.066667%200%200%200-6.912-13.696l-45.226667-33.408a69.290667%2069.290667%200%200%201-18.645333-91.221333l72.405333-122.026667a71.082667%2071.082667%200%200%201%2088.021333-29.226666l46.848%2019.2a17.066667%2017.066667%200%200%200%2015.146667-1.152l38.058667-22.528a17.066667%2017.066667%200%200%200%208.192-12.501334l5.802666-44.8A70.4%2070.4%200%200%201%20439.594667%2085.333333z%20m1.024%20130.688a75.818667%2075.818667%200%200%201-36.821334%2055.466667l-51.712%2030.464a76.970667%2076.970667%200%200%201-67.925333%204.906667l-35.328-14.336a17.066667%2017.066667%200%200%200-21.077333%207.04L178.645333%20381.738667a17.066667%2017.066667%200%200%200%204.565334%2022.528l33.066666%2024.277333c19.541333%2014.293333%2031.018667%2036.906667%2031.018667%2061.013333v44.885334c0%2024.106667-11.52%2046.72-31.018667%2061.013333l-33.066666%2024.277333a17.066667%2017.066667%200%200%200-4.565334%2022.528l49.066667%2082.176a17.066667%2017.066667%200%200%200%2021.12%207.04l35.328-14.336a76.970667%2076.970667%200%200%201%2067.925333%204.906667l51.712%2030.421333c20.224%2011.946667%2033.792%2032.384%2036.821334%2055.509334l4.010666%2030.506666a17.066667%2017.066667%200%200%200%2016.896%2014.848h100.949334a17.066667%2017.066667%200%200%200%2016.896-14.848l4.010666-30.506666c2.986667-23.125333%2016.597333-43.605333%2036.821334-55.466667l51.712-30.464a76.970667%2076.970667%200%200%201%2067.925333-4.906667l35.328%2014.336a17.066667%2017.066667%200%200%200%2021.077333-7.04l49.109334-82.176a17.066667%2017.066667%200%200%200-4.565334-22.528l-33.066666-24.277333a75.648%2075.648%200%200%201-31.018667-61.013333v-44.885334c0-24.106667%2011.52-46.72%2031.018667-61.013333l33.066666-24.277333a17.066667%2017.066667%200%200%200%204.565334-22.528l-49.066667-82.176a17.066667%2017.066667%200%200%200-21.12-7.04l-35.328%2014.336c-22.186667%209.045333-47.317333%207.210667-67.925333-4.906667l-51.712-30.421333a75.818667%2075.818667%200%200%201-36.821334-55.509334l-4.010666-30.506666A17.066667%2017.066667%200%200%200%20562.474667%20170.666667h-100.949334a17.066667%2017.066667%200%200%200-16.896%2014.848l-4.010666%2030.506666zM682.666667%20512a42.666667%2042.666667%200%200%201-85.333334%200%2085.333333%2085.333333%200%201%200-85.333333%2085.333333%2042.666667%2042.666667%200%200%201%200%2085.333334%20170.666667%20170.666667%200%201%201%20170.666667-170.666667z'%20fill='%230f162b'%20p-id='17353'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1758476543825'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='17352'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M439.594667%2085.333333h144.810666a70.4%2070.4%200%200%201%2070.101334%2060.970667l5.802666%2044.8a17.066667%2017.066667%200%200%200%208.192%2012.458667l38.058667%2022.528a17.066667%2017.066667%200%200%200%2015.146667%201.109333l46.848-19.2a71.082667%2071.082667%200%200%201%2088.021333%2029.226667l72.405333%20122.069333c18.218667%2030.72%2010.069333%2069.973333-18.688%2091.221333l-45.184%2033.408a17.066667%2017.066667%200%200%200-6.912%2013.696v28.757334a17.066667%2017.066667%200%200%200%206.912%2013.696l45.226667%2033.408c28.714667%2021.205333%2036.864%2060.458667%2018.645333%2091.221333l-72.405333%20122.026667a71.082667%2071.082667%200%200%201-88.021333%2029.226666l-46.848-19.2a17.066667%2017.066667%200%200%200-15.146667%201.152l-38.058667%2022.528a17.066667%2017.066667%200%200%200-8.192%2012.501334l-5.802666%2044.8A70.4%2070.4%200%200%201%20584.405333%20938.666667h-144.810666a70.4%2070.4%200%200%201-70.101334-60.970667l-5.802666-44.8a17.066667%2017.066667%200%200%200-8.192-12.458667l-38.058667-22.528a17.066667%2017.066667%200%200%200-15.146667-1.109333l-46.848%2019.2a71.082667%2071.082667%200%200%201-88.021333-29.226667l-72.405333-122.069333a69.290667%2069.290667%200%200%201%2018.688-91.221333l45.184-33.408a17.066667%2017.066667%200%200%200%206.912-13.696v-28.757334a17.066667%2017.066667%200%200%200-6.912-13.696l-45.226667-33.408a69.290667%2069.290667%200%200%201-18.645333-91.221333l72.405333-122.026667a71.082667%2071.082667%200%200%201%2088.021333-29.226666l46.848%2019.2a17.066667%2017.066667%200%200%200%2015.146667-1.152l38.058667-22.528a17.066667%2017.066667%200%200%200%208.192-12.501334l5.802666-44.8A70.4%2070.4%200%200%201%20439.594667%2085.333333z%20m1.024%20130.688a75.818667%2075.818667%200%200%201-36.821334%2055.466667l-51.712%2030.464a76.970667%2076.970667%200%200%201-67.925333%204.906667l-35.328-14.336a17.066667%2017.066667%200%200%200-21.077333%207.04L178.645333%20381.738667a17.066667%2017.066667%200%200%200%204.565334%2022.528l33.066666%2024.277333c19.541333%2014.293333%2031.018667%2036.906667%2031.018667%2061.013333v44.885334c0%2024.106667-11.52%2046.72-31.018667%2061.013333l-33.066666%2024.277333a17.066667%2017.066667%200%200%200-4.565334%2022.528l49.066667%2082.176a17.066667%2017.066667%200%200%200%2021.12%207.04l35.328-14.336a76.970667%2076.970667%200%200%201%2067.925333%204.906667l51.712%2030.421333c20.224%2011.946667%2033.792%2032.384%2036.821334%2055.509334l4.010666%2030.506666a17.066667%2017.066667%200%200%200%2016.896%2014.848h100.949334a17.066667%2017.066667%200%200%200%2016.896-14.848l4.010666-30.506666c2.986667-23.125333%2016.597333-43.605333%2036.821334-55.466667l51.712-30.464a76.970667%2076.970667%200%200%201%2067.925333-4.906667l35.328%2014.336a17.066667%2017.066667%200%200%200%2021.077333-7.04l49.109334-82.176a17.066667%2017.066667%200%200%200-4.565334-22.528l-33.066666-24.277333a75.648%2075.648%200%200%201-31.018667-61.013333v-44.885334c0-24.106667%2011.52-46.72%2031.018667-61.013333l33.066666-24.277333a17.066667%2017.066667%200%200%200%204.565334-22.528l-49.066667-82.176a17.066667%2017.066667%200%200%200-21.12-7.04l-35.328%2014.336c-22.186667%209.045333-47.317333%207.210667-67.925333-4.906667l-51.712-30.421333a75.818667%2075.818667%200%200%201-36.821334-55.509334l-4.010666-30.506666A17.066667%2017.066667%200%200%200%20562.474667%20170.666667h-100.949334a17.066667%2017.066667%200%200%200-16.896%2014.848l-4.010666%2030.506666zM682.666667%20512a42.666667%2042.666667%200%200%201-85.333334%200%2085.333333%2085.333333%200%201%200-85.333333%2085.333333%2042.666667%2042.666667%200%200%201%200%2085.333334%20170.666667%20170.666667%200%201%201%20170.666667-170.666667z'%20fill='%230f162b'%20p-id='17353'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat}header #indicators span[data-indicator][data-indicator=uci-changes][data-count]:not([data-count="0"]):after{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*-.5);content:var(--tw-content);right:calc(var(--spacing)*-.5);content:var(--tw-content);z-index:10;content:var(--tw-content);content:var(--tw-content);min-height:calc(var(--spacing)*3);content:var(--tw-content);min-width:calc(var(--spacing)*3);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);background-color:var(--accent);content:var(--tw-content);padding-inline:calc(var(--spacing)*.5);content:var(--tw-content);content:var(--tw-content);--tw-leading:1;content:var(--tw-content);--tw-font-weight:var(--font-weight-bold);font-size:8px;line-height:1;font-weight:var(--font-weight-bold);content:var(--tw-content);color:var(--accent-foreground);content:var(--tw-content);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-content:attr(data-count);content:var(--tw-content);border-radius:3.40282e38px;justify-content:center;align-items:center;display:flex;position:absolute}#maincontent{width:95.8333%;min-height:calc(100vh - 4rem);max-width:var(--container-max-width);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media not all and (min-width:48rem){#maincontent{width:100%;padding-inline:calc(var(--spacing)*3)}}#maincontent #view{margin-inline:calc(var(--spacing)*0);width:100%;animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);padding:calc(var(--spacing)*0);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-enter-opacity:0;--tw-animation-fill-mode:both;--tw-enter-translate-y:calc(2*var(--spacing)*-1);transition-duration:.3s;animation-fill-mode:both}#maincontent #view:empty{display:none}@media (min-width:48rem){#maincontent #view{border-radius:calc(var(--radius-base)*4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#maincontent #view{border-color:color-mix(in oklab,var(--border)30%,transparent)}}#maincontent #view{background-color:var(--page-bg);padding:calc(var(--spacing)*6);--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){#maincontent #view:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#maincontent #view:hover{border-color:color-mix(in oklab,var(--border)50%,transparent)}}#maincontent #view:hover{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}}#maincontent #view .cbi-title-section{margin-bottom:calc(var(--spacing)*6);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}@media not all and (min-width:48rem){#maincontent #view .cbi-title-section{margin-inline:calc(var(--spacing)*2);margin-bottom:calc(var(--spacing)*3)}}#maincontent #view .controls{margin:calc(var(--spacing)*2);align-items:center;gap:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}@media not all and (min-width:48rem){#maincontent #view .controls{margin:calc(var(--spacing)*1);gap:calc(var(--spacing)*2)}}#maincontent #view .controls label input[type=radio],#maincontent #view .controls label input[type=checkbox]{margin-right:calc(var(--spacing)*1);vertical-align:middle}#maincontent #view #content_syslog{margin:calc(var(--spacing)*2)}@media not all and (min-width:48rem){#maincontent #view #content_syslog{margin:calc(var(--spacing)*1)}}#maincontent #view #content_syslog>div{align-items:baseline;column-gap:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}@media not all and (min-width:48rem){#maincontent #view #content_syslog>div{column-gap:calc(var(--spacing)*1.5)}#maincontent #view #content_syslog>div>.cbi-input-select,#maincontent #view #content_syslog>div>.cbi-input-text{min-width:calc(var(--spacing)*45)}}#maincontent #view div[style]>svg:where([data-darkmode=true],[data-darkmode=true] *){background-color:var(--page-bg)!important}#maincontent #view div[style]>svg line[style]:where([data-darkmode=true],[data-darkmode=true] *){stroke:var(--foreground)!important}#maincontent .cbi-map-descr,#maincontent .cbi-section-descr{margin-bottom:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--muted-foreground)}@media not all and (min-width:48rem){#maincontent .cbi-map-descr,#maincontent .cbi-section-descr{margin-inline:calc(var(--spacing)*2);margin-bottom:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}#maincontent .cbi-page-actions{margin-top:calc(var(--spacing)*6);justify-content:flex-end;align-items:center;gap:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);flex-wrap:wrap;display:flex}@supports (color:color-mix(in lab, red, red)){#maincontent .cbi-page-actions{border-color:color-mix(in oklab,var(--border)50%,transparent)}}#maincontent .cbi-page-actions{padding-top:calc(var(--spacing)*4)}@media not all and (min-width:48rem){#maincontent .cbi-page-actions{margin-inline:calc(var(--spacing)*2);margin-top:calc(var(--spacing)*4);gap:calc(var(--spacing)*2);padding-top:calc(var(--spacing)*3)}}#maincontent .zone-forwards{align-items:flex-start;gap:calc(var(--spacing)*3);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);display:flex}#maincontent .zone-forwards>span{margin-top:calc(var(--spacing)*1.5);color:var(--muted-foreground)}#maincontent .zone-forwards .zone-dest{align-items:flex-start;gap:calc(var(--spacing)*2);flex-direction:column;display:flex}#maincontent #syslog,#maincontent #log_textarea{width:100%;font-family:var(--font-mono);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}#maincontent #syslog{border-radius:calc(var(--radius-base)*3);border-style:var(--tw-border-style);background-color:var(--terminal-bg);padding:calc(var(--spacing)*6);color:var(--terminal-foreground);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px}@media not all and (min-width:48rem){#maincontent #syslog{padding:calc(var(--spacing)*3)}}footer{margin-top:calc(var(--spacing)*2);min-height:calc(var(--spacing)*16);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:var(--secondary-foreground);flex-wrap:wrap;justify-content:space-between;align-items:center;display:flex}footer a{color:var(--primary)}footer span{text-align:center;display:inline-block}footer .breadcrumb{align-items:center;gap:calc(var(--spacing)*1);background-color:var(--page-bg);border-radius:3.40282e38px;display:flex}@supports (color:color-mix(in lab, red, red)){footer .breadcrumb{background-color:color-mix(in oklab,var(--page-bg)60%,transparent)}}footer .breadcrumb{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){footer .breadcrumb:hover{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){footer .breadcrumb:hover{background-color:color-mix(in oklab,var(--page-bg)80%,transparent)}}footer .breadcrumb:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}footer .breadcrumb li{list-style-type:none}footer .breadcrumb li.active a{color:var(--default-foreground)}.control-group{margin-top:calc(var(--spacing)*1)}.control-group,.cbi-page-actions>div,.cbi-section-actions>div{align-items:center;gap:calc(var(--spacing)*2);flex-flow:row;display:flex}@media not all and (min-width:48rem){.control-group,.cbi-page-actions>div,.cbi-section-actions>div{gap:calc(var(--spacing)*1);flex-wrap:wrap}}.theme-switcher{align-items:center;gap:calc(var(--spacing)*0);background-color:var(--page-bg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;border-radius:3.40282e38px;transition-duration:.3s;display:inline-flex;position:relative}@media not all and (min-width:48rem){.theme-switcher{padding-block:calc(var(--spacing)*.5)}}.theme-switcher{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.theme-switcher{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.theme-switcher:before{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*1);content:var(--tw-content);left:calc(var(--spacing)*1);content:var(--tw-content);z-index:0;content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);background-color:var(--border);border-radius:3.40282e38px;width:calc(33.333% - .5rem);height:calc(100% - .5rem);position:absolute}@supports (color:color-mix(in lab, red, red)){.theme-switcher:before{background-color:color-mix(in oklab,var(--border)50%,transparent)}}.theme-switcher:before{content:var(--tw-content);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:var(--tw-content);--tw-ring-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.theme-switcher:before{--tw-ring-color:color-mix(in oklab,var(--border)60%,transparent)}}.theme-switcher:before{content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-duration:.3s;transition-duration:.3s}@media not all and (min-width:48rem){footer .theme-switcher{display:none}}.theme-switcher .theme-option{z-index:10;cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;border-radius:3.40282e38px;transition-duration:.3s;display:flex;position:relative}@media (hover:hover){.theme-switcher .theme-option:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.theme-switcher .theme-option:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.theme-switcher .theme-option input[type=radio]{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.theme-switcher .theme-option .theme-icon{color:var(--muted-foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;justify-content:center;align-items:center;transition-duration:.3s;display:flex}.theme-switcher .theme-option .theme-icon svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.theme-switcher .theme-option .theme-label{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s;display:none}.theme-switcher .theme-option.active .theme-icon{color:var(--foreground)}.theme-switcher .theme-option.active .theme-icon svg{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}.theme-switcher .theme-option.active .theme-label,.theme-switcher .theme-option:hover:not(.active) .theme-icon,.theme-switcher .theme-option:hover:not(.active) .theme-label{color:var(--foreground)}.theme-switcher:has(.theme-option[data-theme=device].active):before{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.theme-switcher:has(.theme-option[data-theme=light].active):before{content:var(--tw-content);--tw-translate-x:calc(100% + .5rem);translate:var(--tw-translate-x)var(--tw-translate-y)}.theme-switcher:has(.theme-option[data-theme=dark].active):before{content:var(--tw-content);--tw-translate-x:calc(200% + 1rem);translate:var(--tw-translate-x)var(--tw-translate-y)}.floating-toolbar{right:calc(var(--spacing)*4);bottom:calc(var(--spacing)*4);z-index:40;flex-direction:column;align-items:center;display:flex;position:fixed}@media not all and (min-width:48rem){.floating-toolbar{right:calc(var(--spacing)*3);bottom:calc(var(--spacing)*3)}}.floating-toolbar .toolbar-list{visibility:visible;margin-bottom:calc(var(--spacing)*2);transform-origin:bottom;opacity:1;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.4s;--tw-ease:var(--ease-in-out);transition-duration:.4s;transition-timing-function:var(--ease-in-out);grid-template-rows:1fr;display:grid}@media not all and (min-width:48rem){.floating-toolbar .toolbar-list{margin-bottom:calc(var(--spacing)*1.5)}}.floating-toolbar .toolbar-list .toolbar-list-inner{min-height:calc(var(--spacing)*0);align-items:center;gap:calc(var(--spacing)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);border-radius:3.40282e38px;flex-direction:column;display:flex;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.floating-toolbar .toolbar-list .toolbar-list-inner{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.floating-toolbar .toolbar-list .toolbar-list-inner{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){.floating-toolbar .toolbar-list .toolbar-list-inner{background-color:color-mix(in oklab,var(--page-bg)90%,transparent)}}.floating-toolbar .toolbar-list .toolbar-list-inner{padding:calc(var(--spacing)*1);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media not all and (min-width:48rem){.floating-toolbar .toolbar-list .toolbar-list-inner{gap:calc(var(--spacing)*1.5);padding:calc(var(--spacing)*.5)}}.floating-toolbar .toolbar-btn{height:calc(var(--spacing)*10);width:calc(var(--spacing)*10);cursor:pointer;padding:calc(var(--spacing)*2);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);border-radius:3.40282e38px;flex-shrink:0;justify-content:center;align-items:center;display:flex}.floating-toolbar .toolbar-btn:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media not all and (min-width:48rem){.floating-toolbar .toolbar-btn{height:calc(var(--spacing)*9);width:calc(var(--spacing)*9);padding:calc(var(--spacing)*1.5)}}.floating-toolbar .toolbar-btn .icon{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);flex-shrink:0}@media not all and (min-width:48rem){.floating-toolbar .toolbar-btn .icon{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}}.floating-toolbar .toolbar-btn:not(.toggle){text-decoration-line:none}@media (hover:hover){.floating-toolbar .toolbar-btn:not(.toggle):hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y);background-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.floating-toolbar .toolbar-btn:not(.toggle):hover{background-color:color-mix(in oklab,var(--border)40%,transparent)}}}.floating-toolbar .toolbar-btn:not(.toggle) .icon{object-fit:contain}.floating-toolbar .toolbar-btn:not(.toggle) .icon:where([data-darkmode=true],[data-darkmode=true] *){--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.floating-toolbar .toolbar-btn.toggle{border-style:var(--tw-border-style);background-color:var(--page-bg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:0}.floating-toolbar .toolbar-btn.toggle .icon{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.4s;--tw-ease:var(--ease-out);transition-duration:.4s;transition-timing-function:var(--ease-out)}.floating-toolbar.collapsed .toolbar-list{pointer-events:none;visibility:hidden;margin-bottom:calc(var(--spacing)*0);--tw-translate-y:calc(var(--spacing)*2);translate:var(--tw-translate-x)var(--tw-translate-y);--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:0;grid-template-rows:0fr}.floating-toolbar.collapsed .toolbar-btn:not(.toggle){--tw-scale-x:50%;--tw-scale-y:50%;--tw-scale-z:50%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:0}.floating-toolbar.collapsed .toolbar-btn.toggle .icon{rotate:45deg}button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-width:1px;display:inline-flex}@media not all and (min-width:48rem){button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}:is(button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button)[disabled]{cursor:not-allowed;opacity:.4}:is(button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button)[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.td :is(button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button){white-space:nowrap;flex:none;width:auto;display:inline-flex}@media not all and (min-width:48rem){.td :is(button,input[type=button],input[type=submit],input[type=reset],.btn,.cbi-button){min-height:calc(var(--spacing)*9);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.btn,.cbi-button,.cbi-button-default,.cbi-button-download,.cbi-button-find,.cbi-button-link,.cbi-button-up,.cbi-button-down{border-color:var(--secondary);background-color:var(--secondary);color:var(--secondary-foreground)}@media (hover:hover){:is(.btn,.cbi-button,.cbi-button-default,.cbi-button-download,.cbi-button-find,.cbi-button-link,.cbi-button-up,.cbi-button-down):hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){:is(.btn,.cbi-button,.cbi-button-default,.cbi-button-download,.cbi-button-find,.cbi-button-link,.cbi-button-up,.cbi-button-down):hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}}.drag-handle{border-color:var(--muted);background-color:var(--muted);color:var(--muted-foreground)}@media (hover:hover){.drag-handle:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.drag-handle:hover{background-color:color-mix(in oklab,var(--muted)90%,transparent)}}}.btn.primary,.cbi-button-action,.cbi-button-apply,.cbi-button-reload,.cbi-button-add,.cbi-button-edit{border-color:var(--primary);background-color:var(--primary);color:var(--primary-foreground)}@media (hover:hover){:is(.btn.primary,.cbi-button-action,.cbi-button-apply,.cbi-button-reload,.cbi-button-add,.cbi-button-edit):hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){:is(.btn.primary,.cbi-button-action,.cbi-button-apply,.cbi-button-reload,.cbi-button-add,.cbi-button-edit):hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}}.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{border-color:color-mix(in oklab,var(--primary)25%,transparent)}}.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{background-color:color-mix(in oklab,var(--primary)25%,transparent)}}.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save{color:var(--primary)}@media (hover:hover){:is(.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save):hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){:is(.cbi-button-positive,.cbi-button-fieldadd,.cbi-button-save):hover{background-color:color-mix(in oklab,var(--primary)30%,transparent)}}}.cbi-button-negative,.cbi-section-remove .cbi-button,.cbi-button-reset,.cbi-button-remove{border-color:var(--destructive);background-color:var(--destructive);color:var(--destructive-foreground)}@media (hover:hover){:is(.cbi-button-negative,.cbi-section-remove .cbi-button,.cbi-button-reset,.cbi-button-remove):hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.cbi-button-negative,.cbi-section-remove .cbi-button,.cbi-button-reset,.cbi-button-remove):hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}}input:disabled{cursor:not-allowed;opacity:.4}input:disabled:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}input[type=text],input[type=password],.cbi-input-text,.cbi-input{border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);position:relative}@supports (color:color-mix(in lab, red, red)){input[type=text],input[type=password],.cbi-input-text,.cbi-input{border-color:color-mix(in oklab,var(--border)70%,transparent)}}input[type=text],input[type=password],.cbi-input-text,.cbi-input{background-color:var(--page-bg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--foreground)}:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input)::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input)::placeholder{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}input[type=text],input[type=password],.cbi-input-text,.cbi-input{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input):focus{border-color:var(--primary);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input):focus{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}:is(input[type=text],input[type=password],.cbi-input-text,.cbi-input):focus{--tw-outline-style:none;outline-style:none}.table.cbi-section-table :is(input[type=text],input[type=password],.cbi-input-text,.cbi-input){width:100%}.cbi-input-text{min-width:calc(var(--spacing)*20)}@media not all and (min-width:48rem){.cbi-input-text{min-width:calc(var(--spacing)*14)}}#localtime{min-width:calc(var(--spacing)*70)}input[type=radio],input[type=checkbox]{margin-right:calc(var(--spacing)*3);height:calc(var(--spacing)*4);width:calc(var(--spacing)*4);cursor:pointer;appearance:none;display:inline-block;position:relative}:is(input[type=radio],input[type=checkbox]):before{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*0);content:var(--tw-content);left:calc(var(--spacing)*0);content:var(--tw-content);height:calc(var(--spacing)*4);content:var(--tw-content);width:calc(var(--spacing)*4);content:var(--tw-content);border-style:var(--tw-border-style);content:var(--tw-content);border-width:1px;border-color:var(--border);position:absolute}@supports (color:color-mix(in lab, red, red)){:is(input[type=radio],input[type=checkbox]):before{border-color:color-mix(in oklab,var(--border)70%,transparent)}}:is(input[type=radio],input[type=checkbox]):before{content:var(--tw-content);background-color:var(--page-bg)}:is(input[type=radio],input[type=checkbox]):after{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*.5);content:var(--tw-content);left:calc(var(--spacing)*.5);content:var(--tw-content);height:calc(var(--spacing)*3);content:var(--tw-content);width:calc(var(--spacing)*3);content:var(--tw-content);background-color:var(--input-checked);content:var(--tw-content);opacity:0;content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-duration:.2s;transition-duration:.2s;position:absolute}:is(input[type=radio],input[type=checkbox]):checked:before{content:var(--tw-content);border-color:var(--primary);content:var(--tw-content);background-color:var(--primary)}:is(input[type=radio],input[type=checkbox]):checked:after{content:var(--tw-content);opacity:1}@media (hover:hover){:is(input[type=radio],input[type=checkbox]):hover:before{content:var(--tw-content);border-color:var(--border)}}:is(input[type=radio],input[type=checkbox]):focus:before{content:var(--tw-content);border-color:var(--primary);content:var(--tw-content);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);content:var(--tw-content);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){:is(input[type=radio],input[type=checkbox]):focus:before{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}:is(input[type=radio],input[type=checkbox]):focus:before{content:var(--tw-content);--tw-outline-style:none;outline-style:none}:is(input[type=radio],input[type=checkbox]):disabled{cursor:not-allowed}input[type=radio]:before{content:var(--tw-content);border-radius:3.40282e38px}input[type=radio]:after{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3ccircle%20cx='12'%20cy='12'%20r='6'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='currentColor'%3e%3ccircle%20cx='12'%20cy='12'%20r='6'/%3e%3c/svg%3e") 50%/cover no-repeat}input[type=checkbox]:before{content:var(--tw-content);border-radius:calc(var(--radius-base)*.5)}input[type=checkbox]:after{content:var(--tw-content);-webkit-mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1760890864667'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='18898'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M918.8%2083.7c-43.5-30.3-104-19.5-134.6%2024.1l-425.8%20606-127-135.7c-36.4-38.9-98.1-41.1-137-4.8-39%2036.2-41.1%2097.7-4.7%20136.6l206.5%20220.7c4.7%205%209.8%209.4%2015.1%2013.1%200.7%200.5%201.4%201%202.2%201.5%2043.5%2030.3%20104%2019.5%20134.6-24.1l494-703.2c30.7-43.5%2020.1-103.9-23.3-134.2z'%20fill='%230f162b'%20p-id='18899'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1760890864667'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='18898'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M918.8%2083.7c-43.5-30.3-104-19.5-134.6%2024.1l-425.8%20606-127-135.7c-36.4-38.9-98.1-41.1-137-4.8-39%2036.2-41.1%2097.7-4.7%20136.6l206.5%20220.7c4.7%205%209.8%209.4%2015.1%2013.1%200.7%200.5%201.4%201%202.2%201.5%2043.5%2030.3%20104%2019.5%20134.6-24.1l494-703.2c30.7-43.5%2020.1-103.9-23.3-134.2z'%20fill='%230f162b'%20p-id='18899'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat}.cbi-checkbox{align-items:center;display:inline-flex;position:relative}textarea{min-height:calc(var(--spacing)*24);resize:vertical;border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);width:100%}@supports (color:color-mix(in lab, red, red)){textarea{border-color:color-mix(in oklab,var(--border)70%,transparent)}}textarea{background-color:var(--page-bg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--foreground)}textarea::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){textarea::placeholder{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}textarea{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}textarea:focus{border-color:var(--primary);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){textarea:focus{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}textarea:focus{--tw-outline-style:none;outline-style:none}textarea[disabled]{cursor:not-allowed;opacity:.4}textarea[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}select{appearance:none;border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){select{border-color:color-mix(in oklab,var(--border)70%,transparent)}}select{background-color:var(--page-bg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);padding-right:calc(var(--spacing)*10);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--foreground);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}select:focus{border-color:var(--primary);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){select:focus{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}select:focus{--tw-outline-style:none;outline-style:none}select{background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M5.22%208.22a.75.75%200%200%201%201.06%200L10%2011.94l3.72-3.72a.75.75%200%201%201%201.06%201.06l-4.25%204.25a.75.75%200%200%201-1.06%200L5.22%209.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e");background-position:right .75rem center;background-repeat:no-repeat;background-size:16px}select:where([data-darkmode=true],[data-darkmode=true] *){background-image:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23ffffff'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M5.22%208.22a.75.75%200%200%201%201.06%200L10%2011.94l3.72-3.72a.75.75%200%201%201%201.06%201.06l-4.25%204.25a.75.75%200%200%201-1.06%200L5.22%209.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e")}select[disabled]{cursor:not-allowed;opacity:.4}select[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.cbi-dropdown{min-width:fit-content;max-width:100%;height:fit-content;padding:calc(var(--spacing)*0);white-space:nowrap;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-shrink:0;align-items:center;display:inline-flex}.cbi-dropdown[disabled]{pointer-events:none;opacity:.4}.cbi-dropdown[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.cbi-dropdown:not(.btn):not(.cbi-button){border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown:not(.btn):not(.cbi-button){border-color:color-mix(in oklab,var(--border)70%,transparent)}}.cbi-dropdown:not(.btn):not(.cbi-button){background-color:var(--page-bg)}.cbi-dropdown:not(.btn):not(.cbi-button)>ul>li[placeholder]{display:none}.cbi-dropdown>ul{margin:calc(var(--spacing)*0);align-items:center;gap:calc(var(--spacing)*.5);flex-wrap:nowrap;flex:1;list-style-type:none;display:flex;overflow:hidden}@media not all and (min-width:48rem){.cbi-dropdown>ul{flex-wrap:wrap}}.cbi-dropdown>ul>li{margin:calc(var(--spacing)*0);align-items:center;gap:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1.5);list-style-type:none;display:none;overflow:hidden}.cbi-dropdown>ul>li[display]{display:flex!important}.cbi-dropdown>ul>li .hide-open{display:block}.cbi-dropdown>ul>li .hide-close{display:none}.cbi-dropdown>ul>li>form{pointer-events:none;display:none}.cbi-dropdown>ul>li>label{align-items:center;gap:calc(var(--spacing)*2);display:flex}.cbi-dropdown>ul>li img{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5);vertical-align:middle;flex:none}.cbi-dropdown>ul>li span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cbi-dropdown>ul.dropdown{left:calc(var(--spacing)*0);z-index:60;border-radius:var(--radius-base);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);width:fit-content;min-width:100%;position:absolute;overflow-y:auto}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown>ul.dropdown{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.cbi-dropdown>ul.dropdown{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown>ul.dropdown{background-color:color-mix(in oklab,var(--page-bg)95%,transparent)}}.cbi-dropdown>ul.dropdown{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.cbi-dropdown>ul.dropdown>li{min-height:calc(var(--spacing)*9);cursor:pointer;width:100%;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1.5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground)}@media (hover:hover){.cbi-dropdown>ul.dropdown>li:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown>ul.dropdown>li:hover{background-color:color-mix(in oklab,var(--primary)15%,transparent)}}}.cbi-dropdown>ul.preview{display:none}.cbi-dropdown[empty]>ul{max-width:1px;max-height:1px}.cbi-dropdown[empty]>ul>li,.cbi-dropdown[optional][open]>ul.dropdown>li[placeholder]{display:block}.cbi-dropdown[open]{border-color:var(--primary);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:var(--primary);position:relative}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown[open]{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}.cbi-dropdown[open]>ul.dropdown{width:auto;max-width:none;display:block}.cbi-dropdown[open]>ul.dropdown>li{display:flex}.cbi-dropdown[open]>ul.dropdown>li[selected]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown[open]>ul.dropdown>li[selected]{background-color:color-mix(in oklab,var(--primary)20%,transparent)}}.cbi-dropdown[open]>ul.dropdown>li[selected]{color:var(--primary)}.cbi-dropdown[open]>ul.dropdown>li[unselectable]{opacity:.4}.cbi-dropdown[open]>ul.dropdown>li[unselectable]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.cbi-dropdown[open]>ul.dropdown>li .hide-open{display:none}.cbi-dropdown[open]>ul.dropdown>li .hide-close{display:block}.cbi-dropdown[open]>ul.preview{display:flex}:is(.cbi-dropdown[multiple][more],.cbi-dropdown[multiple][empty])>.more{padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*1.5);flex:none;display:flex}.cbi-dropdown[multiple][open]>ul.dropdown>li>form{align-items:center;display:flex}.cbi-dropdown[multiple]>ul>li>label{display:flex}.cbi-dropdown>.open{cursor:pointer;border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--border);flex:none;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.cbi-dropdown>.open{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.cbi-dropdown>.open{padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:currentColor}.cbi-dropdown>.more{display:none}.cbi-tooltip{z-index:110;max-width:var(--container-xs);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);border-radius:calc(var(--radius-base)*1.5);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);position:absolute}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.cbi-tooltip{background-color:var(--tooltip-bg);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));overflow-wrap:normal;word-break:normal;white-space:normal;color:var(--foreground);opacity:0;--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-out);transition-duration:.3s;transition-timing-function:var(--ease-out)}.cbi-tooltip.error{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip.error{border-color:color-mix(in oklab,var(--error)40%,transparent)}}.cbi-tooltip.error{background-color:var(--error);color:var(--error-foreground)}.cbi-tooltip.success{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip.success{border-color:color-mix(in oklab,var(--success)40%,transparent)}}.cbi-tooltip.success{background-color:var(--success);color:var(--success-foreground)}.cbi-tooltip.info{border-color:var(--info)}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip.info{border-color:color-mix(in oklab,var(--info)40%,transparent)}}.cbi-tooltip.info{background-color:var(--info);color:var(--info-foreground)}.cbi-tooltip.notice{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.cbi-tooltip.notice{border-color:color-mix(in oklab,var(--warning)40%,transparent)}}.cbi-tooltip.notice{background-color:var(--warning);color:var(--warning-foreground)}.cbi-tooltip-container,[data-tooltip]{cursor:help;white-space:nowrap;text-underline-offset:2px;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;text-decoration-line:underline;text-decoration-style:dotted;text-decoration-color:currentColor;transition-duration:.2s;display:inline-block;position:relative}:is(.cbi-tooltip-container,[data-tooltip]) .cbi-tooltip{visibility:hidden;--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,);opacity:0;transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-out);transition-duration:.3s;transition-timing-function:var(--ease-out)}:is(.cbi-tooltip-container,[data-tooltip]):hover .cbi-tooltip{visibility:visible;--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x)var(--tw-scale-y);opacity:1}.alert-message{top:calc(var(--spacing)*14);z-index:40;margin-bottom:calc(var(--spacing)*4);border-radius:calc(var(--radius-base)*4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--default);position:sticky}@supports (color:color-mix(in lab, red, red)){.alert-message{border-color:color-mix(in oklab,var(--default)30%,transparent)}}.alert-message{background-color:var(--default);padding:calc(var(--spacing)*6);color:var(--default-foreground)}@media not all and (min-width:48rem){.alert-message{margin-inline:calc(var(--spacing)*0);margin-bottom:calc(var(--spacing)*3);border-radius:calc(var(--radius-base)*3);padding:calc(var(--spacing)*4)}}.alert-message.modal{position:static;top:auto}.modal .alert-message{margin-bottom:calc(var(--spacing)*0)}.login-shell .alert-message{margin-bottom:calc(var(--spacing)*0);border-radius:calc(var(--radius-base)*2);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*2.5);text-align:center;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}@media not all and (min-width:48rem){.login-shell .alert-message{padding-inline:calc(var(--spacing)*.5)}}.alert-message.success{border-color:var(--success)}@supports (color:color-mix(in lab, red, red)){.alert-message.success{border-color:color-mix(in oklab,var(--success)30%,transparent)}}.alert-message.success{background-color:var(--success);color:var(--success-foreground)}.alert-message.info{border-color:var(--info)}@supports (color:color-mix(in lab, red, red)){.alert-message.info{border-color:color-mix(in oklab,var(--info)30%,transparent)}}.alert-message.info{background-color:var(--info);color:var(--info-foreground)}.alert-message.warning,.alert-message.notice{border-color:var(--warning)}@supports (color:color-mix(in lab, red, red)){.alert-message.warning,.alert-message.notice{border-color:color-mix(in oklab,var(--warning)30%,transparent)}}.alert-message.warning,.alert-message.notice{background-color:var(--warning);color:var(--warning-foreground)}.alert-message.error,.alert-message.danger{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.alert-message.error,.alert-message.danger{border-color:color-mix(in oklab,var(--error)30%,transparent)}}.alert-message.error,.alert-message.danger{background-color:var(--error);color:var(--error-foreground)}.alert-message h4,.alert-message h5,.alert-message pre,.alert-message ul,.alert-message li,.alert-message p{border-style:var(--tw-border-style);color:inherit;background-color:#0000;border-width:0}.alert-message h4{margin-bottom:calc(var(--spacing)*2);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}@media not all and (min-width:48rem){.alert-message h4{margin-bottom:calc(var(--spacing)*1.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}.alert-message p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}@media not all and (min-width:48rem){.alert-message p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.alert-message .right{margin-top:calc(var(--spacing)*4)}@media not all and (min-width:48rem){.alert-message .right{margin-top:calc(var(--spacing)*3)}}.cbi-progressbar{height:calc(var(--spacing)*3.5);cursor:help;background-color:var(--secondary);border-radius:3.40282e38px;width:100%;position:relative;overflow:hidden}.cbi-progressbar:before{content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);content:var(--tw-content);border-radius:calc(var(--radius-base)*2);content:var(--tw-content);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));content:var(--tw-content);white-space:nowrap;content:var(--tw-content);color:var(--foreground);--tw-content:attr(title);content:var(--tw-content);position:absolute;top:50%;left:50%}@media not all and (min-width:48rem){.cbi-progressbar{height:calc(var(--spacing)*4);border-radius:calc(var(--radius-base)*2)}.cbi-progressbar:before{content:var(--tw-content);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));content:var(--tw-content);--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}}@media not all and (min-width:40rem){[data-page=admin-system-package-manager] .cbi-progressbar:before{content:var(--tw-content);font-size:10px}}.cbi-progressbar>div{--tw-gradient-position:to right;height:100%}@supports (background-image:linear-gradient(in lab, red, red)){.cbi-progressbar>div{--tw-gradient-position:to right in oklab}}.cbi-progressbar>div{background-image:linear-gradient(var(--tw-gradient-stops));--tw-gradient-from:var(--progress-bar-start);--tw-gradient-to:var(--progress-bar-end);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position));transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}.label{background-color:var(--default);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);color:var(--default-foreground);text-transform:uppercase;border-radius:3.40282e38px}.label.important{background-color:var(--info);color:var(--info-foreground)}.label.warning{background-color:var(--error);color:var(--error-foreground)}.label.success{background-color:var(--success);color:var(--success-foreground)}.label.notice{background-color:var(--warning);color:var(--warning-foreground)}.zonebadge{align-items:center;gap:calc(var(--spacing)*1.5);border-style:var(--tw-border-style);border-width:1px;border-color:var(--secondary);background-color:var(--secondary);padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--secondary-foreground);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-radius:3.40282e38px;display:inline-flex;overflow:visible}@media (hover:hover){.zonebadge:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media not all and (min-width:48rem){.zonebadge{gap:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}.zonebadge[style*=--zone-color-rgb]{background-color:rgb(var(--zone-color-rgb),.7)!important}.zonebadge[style*=--zone-color-rgb] em{color:var(--default-foreground)}.cbi-dropdown .zonebadge{border-radius:calc(var(--radius-base)*1.5);padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*.5)}.ifacebadge{cursor:default;align-items:center;gap:calc(var(--spacing)*2);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--label-surface);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--default-foreground);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-wrap:wrap;display:inline-flex}@media (hover:hover){.ifacebadge:hover{border-color:var(--border);background-color:var(--label-surface);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media not all and (min-width:48rem){.ifacebadge{gap:calc(var(--spacing)*1.5);padding-inline:calc(var(--spacing)*2.5);padding-block:calc(var(--spacing)*1.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}.cbi-dropdown .ifacebadge,.cbi-tooltip .ifacebadge{flex-wrap:nowrap}.zonebadge>.ifacebadge,.cbi-dropdown .ifacebadge{border-radius:calc(var(--radius-base)*2);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*0)}:is(.zonebadge>.ifacebadge,.cbi-dropdown .ifacebadge) img{margin-right:calc(var(--spacing)*1);width:calc(var(--spacing)*4)}.ifacebadge>img{width:calc(var(--spacing)*5);flex-shrink:0;align-self:center}@media not all and (min-width:48rem){.ifacebadge>img{width:calc(var(--spacing)*4)}}.ifacebadge>span>.nowrap{margin-bottom:calc(var(--spacing)*1.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));display:inline-block}@media not all and (min-width:48rem){.ifacebadge>span>.nowrap{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}}.ifacebadge.ifacebadge-active{border-color:var(--primary);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.ifacebadge.large{min-width:200px;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);flex:1}@media not all and (min-width:48rem){.ifacebadge.large{min-width:180px;padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5)}}.cbi-section{margin-bottom:calc(var(--spacing)*3);border-radius:calc(var(--radius-base)*2);padding:calc(var(--spacing)*5);overflow:visible}@media not all and (min-width:48rem){.cbi-section{padding:calc(var(--spacing)*3)}}.cbi-section[data-tab-title]{margin:calc(var(--spacing)*0);padding:calc(var(--spacing)*0)}.cbi-section[data-tab-active=true]{margin-bottom:calc(var(--spacing)*3);padding:calc(var(--spacing)*5)}@media not all and (min-width:48rem){.cbi-section[data-tab-active=true]{padding:calc(var(--spacing)*3)}}#maincontent .cbi-section{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#maincontent .cbi-section{border-color:color-mix(in oklab,var(--border)30%,transparent)}}#maincontent .cbi-section{background-color:var(--panel-bg);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){#maincontent .cbi-section:hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#maincontent .cbi-section:hover{border-color:color-mix(in oklab,var(--border)50%,transparent)}}#maincontent .cbi-section:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.cbi-section>.cbi-title{justify-content:space-between;align-items:flex-start;display:flex}.cbi-section>.cbi-title>h3{flex:1}.cbi-section>.cbi-title>h3 .label[data-clickable]{background-color:var(--label-surface);color:var(--foreground);width:calc(var(--spacing)*7);height:calc(var(--spacing)*7);cursor:pointer;padding:calc(var(--spacing)*0);justify-content:center;align-items:center;display:inline-flex}.cbi-section>.cbi-title>h3 .label[data-clickable]:before{content:var(--tw-content);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);content:var(--tw-content);content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-duration:.3s;background-color:currentColor;transition-duration:.3s}@media (hover:hover){.cbi-section>.cbi-title>h3 .label[data-clickable]:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.cbi-section>.cbi-title>h3 .label[data-clickable]:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}@media not all and (min-width:48rem){.cbi-section>.cbi-title>h3 .label[data-clickable]{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status]{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);cursor:pointer;font-size:0;position:relative}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status]:before{content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);content:var(--tw-content);content:var(--tw-content);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));content:var(--tw-content);--tw-duration:.3s;content:var(--tw-content);--tw-ease:var(--ease-out);transition-duration:.3s;transition-timing-function:var(--ease-out);background-color:currentColor;position:absolute}@media (hover:hover){.cbi-section>.cbi-title>h3 span[data-indicator=poll-status]:hover:before{content:var(--tw-content);--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status]:active:before{content:var(--tw-content);--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status][data-style=active]:before{content:var(--tw-content);content:var(--tw-content);rotate:none;-webkit-mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M8.22%205.22a.75.75%200%200%201%201.06%200l4.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.75.75%200%200%201-1.06-1.06L11.94%2010L8.22%206.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M8.22%205.22a.75.75%200%200%201%201.06%200l4.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.75.75%200%200%201-1.06-1.06L11.94%2010L8.22%206.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat}.cbi-section>.cbi-title>h3 span[data-indicator=poll-status][data-style=inactive]:before{content:var(--tw-content);content:var(--tw-content);rotate:90deg;-webkit-mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M8.22%205.22a.75.75%200%200%201%201.06%200l4.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.75.75%200%200%201-1.06-1.06L11.94%2010L8.22%206.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2020%2020'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M8.22%205.22a.75.75%200%200%201%201.06%200l4.25%204.25a.75.75%200%200%201%200%201.06l-4.25%204.25a.75.75%200%200%201-1.06-1.06L11.94%2010L8.22%206.28a.75.75%200%200%201%200-1.06'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat}.cbi-section legend{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.cbi-section h3{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.cbi-section h3{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.cbi-section h3{padding-bottom:calc(var(--spacing)*4);color:var(--foreground)}@media not all and (min-width:48rem){.cbi-section h3{margin-inline:calc(var(--spacing)*0);padding-bottom:calc(var(--spacing)*2)}.cbi-section div[style*=display\:grid]{gap:calc(var(--spacing)*3);grid-template-columns:repeat(2,minmax(0,1fr))!important}}.cbi-section .network-status-table{margin-bottom:calc(var(--spacing)*3);justify-content:space-around;gap:calc(var(--spacing)*4);flex-wrap:wrap;display:flex}@media not all and (min-width:48rem){.cbi-section .network-status-table{flex-direction:column}}.cbi-section .cbi-section-create{margin-top:calc(var(--spacing)*6);align-items:center;gap:calc(var(--spacing)*3);flex-wrap:wrap;display:flex}@media not all and (min-width:48rem){.cbi-section .cbi-section-create{margin-inline:calc(var(--spacing)*0);margin-top:calc(var(--spacing)*5);align-items:stretch;gap:calc(var(--spacing)*3);flex-direction:column}}.cbi-section .cbi-section-create>div{flex:none}@media not all and (min-width:48rem){.cbi-section .cbi-section-create>div{flex:1;width:100%}}.ifacebox{min-width:calc(var(--spacing)*40);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--panel-bg);flex-direction:column;align-items:stretch;display:inline-flex;position:relative;overflow:visible}@supports (color:color-mix(in lab, red, red)){.ifacebox{background-color:color-mix(in oklab,var(--panel-bg)95%,transparent)}}.ifacebox{text-align:center;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.ifacebox:hover{border-color:var(--border);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media not all and (min-width:48rem){.ifacebox{min-width:calc(var(--spacing)*30);border-radius:calc(var(--radius-base)*3);border-color:var(--border);flex:1}@supports (color:color-mix(in lab, red, red)){.ifacebox{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.ifacebox{background-color:var(--panel-bg)}@supports (color:color-mix(in lab, red, red)){.ifacebox{background-color:color-mix(in oklab,var(--panel-bg)98%,transparent)}}.ifacebox{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}td .ifacebox{flex-direction:row}}.ifacebox .ifacebox-head{border-top-left-radius:calc(var(--radius-base)*2);border-top-right-radius:calc(var(--radius-base)*2);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);background-color:var(--label-surface);width:100%;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);text-align:center;--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);color:var(--foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media not all and (min-width:48rem){.ifacebox .ifacebox-head{border-top-left-radius:calc(var(--radius-base)*3);border-top-right-radius:calc(var(--radius-base)*3);border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.ifacebox .ifacebox-head{border-color:color-mix(in oklab,var(--border)80%,transparent)}}.ifacebox .ifacebox-head{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}.ifacebox .ifacebox-head[style*=--zone-color-rgb]{background-color:rgb(var(--zone-color-rgb),.75)!important}@media not all and (min-width:48rem){td :is(.ifacebox .ifacebox-head){border-top-left-radius:calc(var(--radius-base)*3);border-bottom-left-radius:calc(var(--radius-base)*3);border-right-style:var(--tw-border-style);border-right-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-top-right-radius:0;flex-shrink:0;justify-content:center;align-items:center;width:auto;display:flex}}.ifacebox .ifacebox-head.cbi-tooltip-container{background-color:#0000;position:static}.ifacebox .ifacebox-head.cbi-tooltip-container .cbi-tooltip{bottom:calc(var(--spacing)*0);left:calc(var(--spacing)*0)}.ifacebox .ifacebox-head.active{border-color:var(--primary);background-color:var(--primary);color:var(--primary-foreground)}.ifacebox .ifacebox-body{justify-content:space-around;align-items:center;gap:calc(var(--spacing)*2);border-bottom-right-radius:calc(var(--radius-base)*2);border-bottom-left-radius:calc(var(--radius-base)*2);width:100%;padding:calc(var(--spacing)*4);text-align:center;color:var(--default-foreground);flex-direction:column;flex:1;display:flex}@media not all and (min-width:48rem){.ifacebox .ifacebox-body{border-bottom-right-radius:calc(var(--radius-base)*3);border-bottom-left-radius:calc(var(--radius-base)*3)}td :is(.ifacebox .ifacebox-body){border-top-right-radius:calc(var(--radius-base)*3);border-bottom-right-radius:calc(var(--radius-base)*3);padding-block:calc(var(--spacing)*2);padding-right:calc(var(--spacing)*2);padding-left:calc(var(--spacing)*4);border-bottom-left-radius:0;flex-direction:row}}:where(.ifacebox .ifacebox-body>span>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}.ifacebox .ifacebox-body>span{color:var(--foreground)}@media not all and (min-width:48rem){:where(.ifacebox .ifacebox-body>span>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}.ifacebox .ifacebox-body>span{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}}.network-status-table :is(.ifacebox .ifacebox-body>span){width:100%}.ifacebox .ifacebox-body>span .cbi-tooltip-container+.cbi-tooltip-container{margin-left:calc(var(--spacing)*2)}@media not all and (min-width:48rem){.ifacebox .ifacebox-body>span .cbi-tooltip-container+.cbi-tooltip-container{margin-left:calc(var(--spacing)*1.5)}}.ifacebox .ifacebox-body>span .cbi-tooltip{--tw-animation-delay:.2s;transition-delay:.2s;animation-delay:.2s}.ifacebox .ifacebox-body>span .nowrap{display:inline-block}.ifacebox .ifacebox-body>span>.nowrap:not(:last-child){margin-bottom:calc(var(--spacing)*4)}@media not all and (min-width:48rem){.ifacebox .ifacebox-body>span>.nowrap:not(:last-child){margin-bottom:calc(var(--spacing)*3)}}.ifacebox .ifacebox-body>span img{width:calc(var(--spacing)*6);flex-shrink:0}@media not all and (min-width:48rem){.ifacebox .ifacebox-body>span img{width:calc(var(--spacing)*5)}}.ifacebox .ifacebox-body>div{flex-wrap:wrap;width:100%;display:flex}:where(.ifacebox .ifacebox-body>div>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2.5)*calc(1 - var(--tw-space-y-reverse)))}@media not all and (min-width:48rem){:where(.ifacebox .ifacebox-body>div>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}td :is(.ifacebox .ifacebox-body>div){flex:1;width:auto}:where(td :is(.ifacebox .ifacebox-body>div)>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}}.ifacebox .ifacebox-body>div .ifacebadge{flex:1}.ifacebox .ifacebox-body .cbi-tooltip-container{cursor:help;color:var(--foreground);justify-content:center;align-items:center;display:inline-flex;position:static}.ifacebox .ifacebox-body .cbi-tooltip-container .cbi-tooltip{bottom:calc(var(--spacing)*0)}@media (min-width:48rem){.ifacebox .ifacebox-body .cbi-tooltip-container .cbi-tooltip{left:calc(var(--spacing)*0)}}.ifacebox .ifacebox-body .cbi-tooltip-container .cbi-tooltip .nowrap{white-space:nowrap}.ifacebox .ifacebox-body small{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4);display:block}@media not all and (min-width:48rem){td :is(.ifacebox .ifacebox-body small){margin-top:calc(var(--spacing)*0)}}#modal_overlay{pointer-events:none;top:calc(var(--spacing)*0);bottom:calc(var(--spacing)*0);background-color:#0000;display:none;position:fixed;overflow:auto}.modal-overlay-active #modal_overlay{pointer-events:auto;inset:calc(var(--spacing)*0);right:calc(var(--spacing)*0);left:calc(var(--spacing)*0);z-index:100;background-color:var(--overlay-base);grid-template-columns:repeat(1,minmax(0,1fr));place-items:center;display:grid}@supports (color:color-mix(in lab, red, red)){.modal-overlay-active #modal_overlay{background-color:color-mix(in oklab,var(--overlay-base)70%,transparent)}}.modal-overlay-active #modal_overlay{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}#modal_overlay>.modal{width:var(--container-5xl);gap:calc(var(--spacing)*4);border-radius:calc(var(--radius-base)*3);border-style:var(--tw-border-style);border-width:1px;border-color:color-mix(in oklab,var(--border)70%,transparent);background-color:var(--page-bg);padding:calc(var(--spacing)*6);overflow-wrap:break-word;white-space:normal;--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-lg));--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);flex-direction:column;display:flex}@media not all and (min-width:48rem){#modal_overlay>.modal{gap:calc(var(--spacing)*3);width:100%;padding:calc(var(--spacing)*4)}}#modal_overlay>.modal h4{margin-bottom:calc(var(--spacing)*0);text-align:center}#modal_overlay>.modal h4 em{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--primary)}#modal_overlay>.modal h5{margin-block:calc(var(--spacing)*3);color:var(--foreground)}#modal_overlay>.modal p{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed);color:var(--default-foreground)}#modal_overlay>.modal>ul{border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);overflow:auto}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal>ul{border-color:color-mix(in oklab,var(--border)60%,transparent)}}#modal_overlay>.modal>ul{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal>ul{background-color:color-mix(in oklab,var(--page-bg)60%,transparent)}}#modal_overlay>.modal>ul{padding:calc(var(--spacing)*3)}#modal_overlay>.modal label.btn{border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal label.btn{border-color:color-mix(in oklab,var(--border)60%,transparent)}}#modal_overlay>.modal label.btn{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal label.btn{background-color:color-mix(in oklab,var(--page-bg)60%,transparent)}}#modal_overlay>.modal label.btn{color:var(--foreground)}@media (hover:hover){#modal_overlay>.modal label.btn:hover{border-color:var(--border)}}#modal_overlay>.modal pre{overflow:auto}#modal_overlay>.modal pre.errors{border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal pre.errors{border-color:color-mix(in oklab,var(--error)60%,transparent)}}#modal_overlay>.modal pre.errors{background-color:var(--error)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal pre.errors{background-color:color-mix(in oklab,var(--error)20%,transparent)}}#modal_overlay>.modal pre.errors{color:var(--error-foreground)}#modal_overlay>.modal pre+pre{margin-top:calc(var(--spacing)*3)}#modal_overlay>.modal .button-row,#modal_overlay>.modal div.left,#modal_overlay>.modal div.right{gap:calc(var(--spacing)*3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--border);flex-shrink:0;display:flex}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal .button-row,#modal_overlay>.modal div.left,#modal_overlay>.modal div.right{border-color:color-mix(in oklab,var(--border)40%,transparent)}}#modal_overlay>.modal .button-row,#modal_overlay>.modal div.left,#modal_overlay>.modal div.right{padding:calc(var(--spacing)*4)}@media not all and (min-width:48rem){#modal_overlay>.modal .button-row,#modal_overlay>.modal div.left,#modal_overlay>.modal div.right{gap:calc(var(--spacing)*1.5);padding:calc(var(--spacing)*2.5)}}#modal_overlay>.modal div.left{justify-content:flex-start}#modal_overlay>.modal .button-row,#modal_overlay>.modal div.right{justify-content:flex-end}#modal_overlay>.modal.uci-dialog ins,#modal_overlay>.modal.uci-dialog del,#modal_overlay>.modal.uci-dialog var{font-family:var(--font-mono);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);font-style:normal;text-decoration-line:none}#modal_overlay>.modal.uci-dialog ins{border-style:var(--tw-border-style);border-width:1px;border-color:var(--success);background-color:var(--success)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog ins{background-color:color-mix(in oklab,var(--success)80%,transparent)}}#modal_overlay>.modal.uci-dialog ins{color:var(--success-foreground)}#modal_overlay>.modal.uci-dialog del{border-style:var(--tw-border-style);border-width:1px;border-color:var(--error);background-color:var(--error)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog del{background-color:color-mix(in oklab,var(--error)80%,transparent)}}#modal_overlay>.modal.uci-dialog del{color:var(--error-foreground)}#modal_overlay>.modal.uci-dialog var{border-style:var(--tw-border-style);border-width:1px;border-color:var(--info);background-color:var(--info)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog var{background-color:color-mix(in oklab,var(--info)80%,transparent)}}#modal_overlay>.modal.uci-dialog var{color:var(--info-foreground)}#modal_overlay>.modal.uci-dialog .uci-change-legend{margin-top:calc(var(--spacing)*4);gap:calc(var(--spacing)*3);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog .uci-change-legend{border-color:color-mix(in oklab,var(--border)60%,transparent)}}#modal_overlay>.modal.uci-dialog .uci-change-legend{background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){#modal_overlay>.modal.uci-dialog .uci-change-legend{background-color:color-mix(in oklab,var(--page-bg)60%,transparent)}}#modal_overlay>.modal.uci-dialog .uci-change-legend{padding:calc(var(--spacing)*4)}@media not all and (min-width:48rem){#modal_overlay>.modal.uci-dialog .uci-change-legend{gap:calc(var(--spacing)*2);padding:calc(var(--spacing)*3);grid-template-columns:repeat(1,minmax(0,1fr))}}#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label{align-items:center;gap:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground);display:flex}#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label ins,#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label del,#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label var{height:calc(var(--spacing)*6);min-width:calc(var(--spacing)*6);border-radius:var(--radius-base);padding-inline:calc(var(--spacing)*2);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);justify-content:center;align-items:center;display:flex}#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label var ins,#modal_overlay>.modal.uci-dialog .uci-change-legend .uci-change-legend-label var del{margin-left:calc(var(--spacing)*1);height:calc(var(--spacing)*4);min-width:calc(var(--spacing)*4);padding-inline:calc(var(--spacing)*1)}#modal_overlay>.modal.uci-dialog .uci-change-list{margin-top:calc(var(--spacing)*4)}:where(#modal_overlay>.modal.uci-dialog .uci-change-list>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}#modal_overlay>.modal.uci-dialog .uci-change-list h5{margin-top:calc(var(--spacing)*6);margin-bottom:calc(var(--spacing)*2);border-radius:calc(var(--radius-base)*1.5);background-color:var(--default);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--default-foreground)}#modal_overlay>.modal.uci-dialog .uci-change-list h5:first-child{margin-top:calc(var(--spacing)*0)}#modal_overlay>.modal.uci-dialog .uci-change-list ins,#modal_overlay>.modal.uci-dialog .uci-change-list del{border-radius:calc(var(--radius-base)*1.5);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*3);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));display:block}:is(#modal_overlay>.modal.uci-dialog .uci-change-list ins,#modal_overlay>.modal.uci-dialog .uci-change-list del) strong{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}#modal_overlay>.modal.uci-dialog .uci-change-list var{border-radius:var(--radius-base);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));display:inline-block}#modal_overlay>.modal.uci-dialog .uci-change-list var ins,#modal_overlay>.modal.uci-dialog .uci-change-list var del{margin-left:calc(var(--spacing)*1);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));display:inline-block}@media not all and (min-width:48rem){.mobile-menu-overlay{visibility:hidden;inset:calc(var(--spacing)*0);z-index:60;background-color:var(--overlay-base);position:fixed}@supports (color:color-mix(in lab, red, red)){.mobile-menu-overlay{background-color:color-mix(in oklab,var(--overlay-base)60%,transparent)}}.mobile-menu-overlay{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}}@media (min-width:48rem){.mobile-menu-overlay{display:none}}@media not all and (min-width:48rem){.mobile-menu-overlay.mobile-menu-open{visibility:visible;opacity:1;--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.mobile-menu-overlay.mobile-menu-open .mobile-nav{--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.mobile-menu-overlay .mobile-nav{top:calc(var(--spacing)*0);right:calc(var(--spacing)*0);height:100%;width:calc(var(--spacing)*80);--tw-translate-x:100%;translate:var(--tw-translate-x)var(--tw-translate-y);background-color:var(--page-bg);--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-backdrop-blur:blur(var(--blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);--tw-backdrop-saturate:saturate(150%);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;flex-direction:column;transition-duration:.3s;display:flex;position:absolute}.mobile-menu-overlay .mobile-nav .mobile-nav-header{padding:calc(var(--spacing)*6);padding-bottom:calc(var(--spacing)*4);justify-content:space-between;align-items:center;display:flex}.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-title{margin:calc(var(--spacing)*0);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--foreground)}.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close{cursor:pointer;transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}}.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close svg{width:calc(var(--spacing)*5);height:calc(var(--spacing)*5)}@media not all and (min-width:48rem){.mobile-menu-overlay .mobile-nav .mobile-nav-header .mobile-nav-close svg{color:var(--foreground);transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s}.mobile-menu-overlay .mobile-nav .mobile-nav-list{margin:calc(var(--spacing)*0);gap:calc(var(--spacing)*0);padding:calc(var(--spacing)*0);padding-inline:calc(var(--spacing)*6);flex-direction:column;flex:1;list-style-type:none;display:flex;overflow-y:auto}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-link{width:100%;padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*4);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--default-foreground);transition-property:color,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;align-items:center;text-decoration-line:none;transition-duration:.3s;display:flex}@media (hover:hover){.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-link:hover{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y);color:var(--foreground)}}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu{margin:calc(var(--spacing)*0);padding:calc(var(--spacing)*0);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;--tw-ease:var(--ease-in-out);transition-duration:.3s;transition-timing-function:var(--ease-in-out);list-style-type:none;overflow:hidden}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem{border-color:color-mix(in oklab,var(--border)20%,transparent)}}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem .mobile-nav-sublink{width:100%;padding-block:calc(var(--spacing)*3);padding-right:calc(var(--spacing)*0);padding-left:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal);color:var(--default-foreground);transition-property:color,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;align-items:center;text-decoration-line:none;transition-duration:.3s;display:flex}@media (hover:hover){.mobile-menu-overlay .mobile-nav .mobile-nav-list .mobile-nav-item .mobile-nav-submenu .mobile-nav-subitem .mobile-nav-sublink:hover{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y);color:var(--foreground)}}}[data-nav-type=mega-menu] .desktop-menu-overlay{pointer-events:none;inset:calc(var(--spacing)*0);z-index:50;background-color:var(--overlay-base);position:fixed}@supports (color:color-mix(in lab, red, red)){[data-nav-type=mega-menu] .desktop-menu-overlay{background-color:color-mix(in oklab,var(--overlay-base)35%,transparent)}}[data-nav-type=mega-menu] .desktop-menu-overlay{opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.3s;transition-duration:.3s}@media not all and (min-width:48rem){[data-nav-type=mega-menu] .desktop-menu-overlay{display:none}}[data-nav-type=mega-menu] .desktop-menu-overlay.active{pointer-events:auto;opacity:1;--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}table.table,.table{margin-bottom:calc(var(--spacing)*3);border-collapse:separate;--tw-border-spacing-x:calc(var(--spacing)*0);--tw-border-spacing-y:calc(var(--spacing)*0);width:100%;border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);overflow:visible}@media not all and (min-width:48rem){table.table,.table{margin-inline:calc(var(--spacing)*0);border-style:var(--tw-border-style);background-color:var(--panel-bg);border-width:0;width:100%;display:block;overflow:visible}@supports (color:color-mix(in lab, red, red)){table.table,.table{background-color:color-mix(in oklab,var(--panel-bg)98%,transparent)}}table.table,.table{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}:is(table.table,.table)[width="100%"]{width:100%}:is(table.table,.table)[width="33%"]{width:33.3333%}:is(table.table,.table) .cbi-section-table-titles{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):before{content:var(--tw-content);content:var(--tw-content);border-color:var(--border);content:var(--tw-content);padding-inline:calc(var(--spacing)*3);content:var(--tw-content);padding-block:calc(var(--spacing)*3);content:var(--tw-content);vertical-align:middle;content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));content:var(--tw-content);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-content:attr(data-title);content:var(--tw-content);content:var(--tw-content);display:table-cell}@media not all and (min-width:48rem){:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):before{padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2.5);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));flex:0 0 100%;display:flex}}:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):before{content:var(--tw-content)}@media (min-width:48rem){:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):before{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}}:is(:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):not([data-title]),:is(:is(table.table,.table) .cbi-section-table-titles.named,:is(table.table,.table) .cbi-section-table-descr.named,:is(table.table,.table) .cbi-section-table-row[data-title]):has(td.cbi-section-table-titles)):before{content:var(--tw-content);--tw-content:none;content:none}:is(table.table,.table) .cbi-section-table-titles.named:before{content:var(--tw-content);background-color:var(--label-surface);content:var(--tw-content)}@media not all and (min-width:48rem){:is(table.table,.table) .cbi-section-table-titles.named:before{background-color:var(--label-surface)}}:is(table.table,.table) .cbi-section-table-titles.named:before{content:var(--tw-content)}@media (min-width:48rem){:is(table.table,.table) .cbi-section-table-titles.named:before{border-top-left-radius:calc(var(--radius-base)*2)}}@media not all and (min-width:48rem){:is(table.table,.table) tbody,:is(table.table,.table) .tbody{display:block}}@media (hover:hover){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):hover{background-color:var(--label-surface)}}@media not all and (min-width:48rem){:is(table.table,.table) tr,:is(table.table,.table) .tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*2);flex-wrap:wrap;display:flex}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):has(.cbi-progressbar){justify-content:center;align-items:center;display:flex}}@media (min-width:48rem){:is(:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child:not([data-title]) .th,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child:not([data-title]) .td):first-child{border-top-left-radius:calc(var(--radius-base)*2)}:is(:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child .th,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child .td):last-child{border-top-right-radius:calc(var(--radius-base)*2)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child{border-bottom-right-radius:calc(var(--radius-base)*2);border-bottom-left-radius:calc(var(--radius-base)*2)}}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child[data-title]:before{content:var(--tw-content);border-bottom-left-radius:calc(var(--radius-base)*2);content:var(--tw-content);border-bottom-style:var(--tw-border-style);border-bottom-width:0}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child .td{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child .td:first-child{border-bottom-left-radius:calc(var(--radius-base)*2)}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child .td:last-child{border-bottom-right-radius:calc(var(--radius-base)*2)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).table-titles,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-section-table-titles,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-section-table-descr{display:none}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):first-child:not(.table-titles,.cbi-section-table-titles,.cbi-section-table-descr),:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).table-titles+.tr,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-section-table-titles+.tr,:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-section-table-descr+.tr{border-top-left-radius:calc(var(--radius-base)*2);border-top-right-radius:calc(var(--radius-base)*2)}}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-rowstyle-1{background-color:var(--panel-bg)}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-rowstyle-2{background-color:var(--label-surface)}@supports (color:color-mix(in lab, red, red)){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr).cbi-rowstyle-2{background-color:color-mix(in oklab,var(--label-surface)50%,transparent)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-1{flex:2rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-1{width:calc(var(--spacing)*20);max-width:calc(var(--spacing)*28)}}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-2{white-space:normal}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-2{flex:2 2 4rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-2{width:calc(var(--spacing)*32);max-width:calc(var(--spacing)*40)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-3{flex:3 3 6rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-3{width:calc(var(--spacing)*44);max-width:calc(var(--spacing)*52)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-4{flex:4 4 8rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-4{width:calc(var(--spacing)*56);max-width:calc(var(--spacing)*64)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-5{flex:5 5 10rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-5{width:calc(var(--spacing)*68);max-width:calc(var(--spacing)*76)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-6{flex:6 6 12rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-6{width:calc(var(--spacing)*80);max-width:calc(var(--spacing)*88)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-7{flex:7 7 14rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-7{width:calc(var(--spacing)*92);max-width:calc(var(--spacing)*100)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-8{flex:8 8 16rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-8{width:calc(var(--spacing)*104);max-width:calc(var(--spacing)*112)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-9{flex:9 9 18rem}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-9{width:calc(var(--spacing)*116);max-width:calc(var(--spacing)*124)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-10{flex:0 0 100%;max-width:calc(100vw - 40px)}}@media (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr)>.col-10{width:calc(var(--spacing)*128);max-width:calc(var(--spacing)*136)}}:is(table.table,.table) th,:is(table.table,.table) .th{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);background-color:var(--label-surface);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);text-align:left;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}@media not all and (min-width:48rem){:is(table.table,.table) th,:is(table.table,.table) .th{border-style:var(--tw-border-style);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-width:0;flex:50%}}#cbi-samba4 :is(:is(table.table,.table) th,:is(table.table,.table) .th){padding-inline:calc(var(--spacing)*.5);padding-block:calc(var(--spacing)*1.5)}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[width="100%"]{width:100%}@media not all and (min-width:48rem){:is(:is(table.table,.table) th,:is(table.table,.table) .th)[width="100%"]{flex:0 0 100%}}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[width="33%"]{width:33.3333%}@media not all and (min-width:48rem){:is(:is(table.table,.table) th,:is(table.table,.table) .th)[width="33%"]{flex:0 0 33.333%}}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true]{cursor:pointer;-webkit-user-select:none;user-select:none}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true]:after{content:var(--tw-content);margin-left:calc(var(--spacing)*.5);content:var(--tw-content);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}@media (hover:hover){:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true]:hover{background-color:var(--label-surface)}}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true][data-sort-direction=asc]:after{--tw-content:"▲";content:var(--tw-content)}:is(:is(table.table,.table) th,:is(table.table,.table) .th)[data-sortable-row=true][data-sort-direction=desc]:after{--tw-content:"▼";content:var(--tw-content)}:is(table.table,.table)[id*=status_leases] .td{max-width:calc(var(--spacing)*62)}@media not all and (min-width:48rem){:is(table.table,.table)[id*=status_leases] .td{max-width:100%}}:is(table.table,.table) td,:is(table.table,.table) .td{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*3);vertical-align:middle;font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));overflow-wrap:break-word;white-space:normal;display:table-cell}@media not all and (min-width:48rem){:is(table.table,.table) td,:is(table.table,.table) .td{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*1);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));border-width:0;flex:50%}}:is(:is(table.table,.table) td,:is(table.table,.table) .td):before{content:var(--tw-content);--tw-content:attr(data-title);content:var(--tw-content);content:var(--tw-content);display:none}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td):before{margin-bottom:calc(var(--spacing)*1);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);display:block}}:is(:is(table.table,.table) td,:is(table.table,.table) .td):before{content:var(--tw-content)}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td):before{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}}#cbi-samba4 :is(:is(table.table,.table) td,:is(table.table,.table) .td){padding-inline:calc(var(--spacing)*.5);padding-block:calc(var(--spacing)*1.5)}[data-page=admin-system-mounts] :is(:is(table.table,.table) td,:is(table.table,.table) .td){max-width:calc(var(--spacing)*104)}@media not all and (min-width:48rem){[data-page=admin-system-mounts] :is(:is(table.table,.table) td,:is(table.table,.table) .td){max-width:100%}#wifi_assoclist_table :is(:is(table.table,.table) td,:is(table.table,.table) .td){padding-inline:calc(var(--spacing)*3);padding-block:calc(var(--spacing)*2);flex:0 0 100%}}#wifi_assoclist_table :is(:is(table.table,.table) td,:is(table.table,.table) .td):before{content:var(--tw-content)}@media not all and (min-width:48rem){#wifi_assoclist_table :is(:is(table.table,.table) td,:is(table.table,.table) .td):before{margin-bottom:calc(var(--spacing)*1.5)}}:is(:is(table.table,.table) td,:is(table.table,.table) .td)>input[type=text],:is(:is(table.table,.table) td,:is(table.table,.table) .td)>input[type=password],:is(:is(table.table,.table) td,:is(table.table,.table) .td)>select,:is(:is(table.table,.table) td,:is(table.table,.table) .td)>.cbi-dropdown:not(.btn):not(.cbi-button){width:100%}:is(:is(table.table,.table) td,:is(table.table,.table) .td).cbi-value-field{word-break:break-all}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td).cbi-section-actions{flex:0 0 100%}:is(:is(table.table,.table) td,:is(table.table,.table) .td).cbi-section-actions>div{width:100%}:is(:is(table.table,.table) td,:is(table.table,.table) .td).cbi-section-actions>div>.cbi-button{flex:1}:is(:is(table.table,.table) td,:is(table.table,.table) .td)>.cbi-button{width:100%}}:is(:is(table.table,.table) td,:is(table.table,.table) .td)[width="100%"]{width:100%}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td)[width="100%"]{flex:0 0 100%}}:is(:is(table.table,.table) td,:is(table.table,.table) .td)[width="33%"]{width:33.3333%}@media not all and (min-width:48rem){:is(:is(table.table,.table) td,:is(table.table,.table) .td)[width="33%"]{flex:0 0 33.333%}[data-page=admin-network-network] :is(:is(table.table,.table) td,:is(table.table,.table) .td)[data-name=_ifacebox],[data-page=admin-network-network] :is(:is(table.table,.table) td,:is(table.table,.table) .td)[data-name=_ifacestat]{flex-basis:100%}}.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell{width:auto!important}.cbi-input-invalid,.cbi-value-error{border-color:var(--error)!important}@supports (color:color-mix(in lab, red, red)){.cbi-input-invalid,.cbi-value-error{border-color:color-mix(in oklab,var(--error)70%,transparent)!important}}:is(.cbi-input-invalid,.cbi-value-error):focus{--tw-ring-color:var(--error)!important}@supports (color:color-mix(in lab, red, red)){:is(.cbi-input-invalid,.cbi-value-error):focus{--tw-ring-color:color-mix(in oklab,var(--error)40%,transparent)!important}}.cbi-value{gap:calc(var(--spacing)*6);padding-block:calc(var(--spacing)*1.5);flex-flow:wrap;display:flex}@media not all and (min-width:48rem){.cbi-value{gap:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*1);flex-direction:column}}.cbi-value.hidden{display:none}.cbi-value+.cbi-value{margin-top:calc(var(--spacing)*3)}@media not all and (min-width:48rem){.cbi-value+.cbi-value{margin-top:calc(var(--spacing)*2)}}.cbi-value>.cbi-value-title{padding-top:calc(var(--spacing)*1);text-align:right;--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}@media not all and (min-width:48rem){.cbi-value>.cbi-value-title{text-align:left;width:auto}}@media (min-width:48rem){.cbi-value>.cbi-value-title{flex:0 0 12rem}}.cbi-value>.cbi-value-field{flex:1;max-width:100%}.cbi-value>.cbi-value-field:has(>.cbi-dropdown[disabled]){cursor:not-allowed}.cbi-value>.cbi-value-field .cbi-value-description{margin-top:calc(var(--spacing)*1);padding-left:calc(var(--spacing)*4);--tw-leading:1;overflow-wrap:break-word;color:var(--muted-foreground);line-height:1;position:relative}.cbi-value>.cbi-value-field .cbi-value-description:not(:empty):before{content:var(--tw-content);content:var(--tw-content);left:calc(var(--spacing)*-.5);content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*4);height:calc(var(--spacing)*4);content:var(--tw-content);background-color:var(--info-foreground);content:var(--tw-content);display:inline-block;position:absolute;-webkit-mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M15%208A7%207%200%201%201%201%208a7%207%200%200%201%2014%200M9%205a1%201%200%201%201-2%200a1%201%200%200%201%202%200M6.75%208a.75.75%200%200%200%200%201.5h.75v1.75a.75.75%200%200%200%201.5%200v-2.5A.75.75%200%200%200%208.25%208z'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2016%2016'%20width='24'%20height='24'%20fill='%23000000'%20style='opacity:1;'%3e%3cpath%20fill-rule='evenodd'%20d='M15%208A7%207%200%201%201%201%208a7%207%200%200%201%2014%200M9%205a1%201%200%201%201-2%200a1%201%200%200%201%202%200M6.75%208a.75.75%200%200%200%200%201.5h.75v1.75a.75.75%200%200%200%201.5%200v-2.5A.75.75%200%200%200%208.25%208z'%20clip-rule='evenodd'/%3e%3c/svg%3e") 50%/cover no-repeat}.cbi-value>.cbi-section,.cbi-value>.cbi-tblsection{width:100%}.cbi-dynlist{width:max-content;max-width:calc(var(--spacing)*120);align-items:flex-start;gap:calc(var(--spacing)*3);flex-direction:column;display:inline-flex}@media not all and (min-width:48rem){.cbi-dynlist{max-width:100%!important}}.cbi-dynlist .item{pointer-events:auto;cursor:move;align-items:flex-start;gap:calc(var(--spacing)*2);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);flex-direction:column;align-self:stretch;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.cbi-dynlist .item{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.cbi-dynlist .item{background-color:var(--panel-bg);padding-block:calc(var(--spacing)*3);padding-right:calc(var(--spacing)*10);padding-left:calc(var(--spacing)*4);word-break:break-all;--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);-webkit-user-select:text;user-select:text}@media not all and (min-width:48rem){.cbi-dynlist .item{width:100%;padding-block:calc(var(--spacing)*2.5);padding-right:calc(var(--spacing)*8);padding-left:calc(var(--spacing)*3)}}.cbi-dynlist .item:after{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*2.5);content:var(--tw-content);right:calc(var(--spacing)*2);content:var(--tw-content);content:var(--tw-content);height:calc(var(--spacing)*6);content:var(--tw-content);width:calc(var(--spacing)*6);content:var(--tw-content);content:var(--tw-content);cursor:pointer;content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);border-radius:calc(var(--radius-base)*1.5);content:var(--tw-content);background-color:var(--muted);content:var(--tw-content);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);content:var(--tw-content);color:var(--muted-foreground);--tw-content:"×";content:var(--tw-content);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:absolute}.cbi-dynlist .item.dragging{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y);cursor:grabbing;opacity:.5;--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.cbi-dynlist .item.drag-over{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y);border-color:color-mix(in oklab,var(--primary)60%,transparent);background-color:color-mix(in oklab,var(--primary)5%,transparent);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);--tw-ring-color:color-mix(in oklab,var(--primary)30%,transparent)}.cbi-dynlist .item>span,.cbi-dynlist .item>code{pointer-events:none;border-radius:var(--radius-base);width:100%;font-family:var(--font-mono);--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.cbi-dynlist .placeholder{word-break:break-all}.cbi-dynlist .add-item{align-items:center;gap:calc(var(--spacing)*1.5);border-radius:calc(var(--radius-base)*2);border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:1px;border-color:var(--border);align-self:stretch;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.cbi-dynlist .add-item{border-color:color-mix(in oklab,var(--border)70%,transparent)}}.cbi-dynlist .add-item{padding-inline:calc(var(--spacing)*1);padding-block:calc(var(--spacing)*1);background-color:#0000}@media (hover:hover){.cbi-dynlist .add-item:hover{border-color:var(--border);background-color:var(--page-bg)}@supports (color:color-mix(in lab, red, red)){.cbi-dynlist .add-item:hover{background-color:color-mix(in oklab,var(--page-bg)50%,transparent)}}}.cbi-dynlist .add-item>input{min-width:calc(var(--spacing)*61);flex:1}.cbi-dynlist .add-item>.cbi-button{min-height:calc(var(--spacing)*6);min-width:calc(var(--spacing)*6);cursor:pointer;border-radius:calc(var(--radius-base)*1.5);padding-inline:calc(var(--spacing)*2);padding-block:calc(var(--spacing)*0);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.cbi-dynlist .add-item>.cbi-button:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x)var(--tw-scale-y)}.cbi-tabmenu{margin-bottom:calc(var(--spacing)*1);align-items:center;gap:calc(var(--spacing)*1);border-radius:calc(var(--radius-base)*4);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);display:flex;overflow-x:auto}@supports (color:color-mix(in lab, red, red)){.cbi-tabmenu{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.cbi-tabmenu{background-color:var(--label-surface);padding:calc(var(--spacing)*1)}.cbi-tabmenu li{margin:calc(var(--spacing)*0);flex-shrink:0;min-width:fit-content;list-style-type:none;position:relative}.cbi-tabmenu li[data-errors]:after{content:var(--tw-content);content:var(--tw-content);top:calc(var(--spacing)*-.5);content:var(--tw-content);right:calc(var(--spacing)*-1.5);content:var(--tw-content);z-index:20;content:var(--tw-content);content:var(--tw-content);min-height:calc(var(--spacing)*4);content:var(--tw-content);min-width:calc(var(--spacing)*4);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);background-color:var(--accent);content:var(--tw-content);padding-inline:calc(var(--spacing)*1.5);content:var(--tw-content);padding-block:calc(var(--spacing)*.5);content:var(--tw-content);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));content:var(--tw-content);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);content:var(--tw-content);color:var(--accent-foreground);--tw-content:attr(data-errors);content:var(--tw-content);border-radius:3.40282e38px;justify-content:center;align-items:center;display:inline-flex;position:absolute}.cbi-tabmenu li[data-errors]>a{border-style:var(--tw-border-style);border-width:1px;border-color:var(--error)}@supports (color:color-mix(in lab, red, red)){.cbi-tabmenu li[data-errors]>a{border-color:color-mix(in oklab,var(--error)50%,transparent)}}.cbi-tabmenu li>a{border-radius:calc(var(--radius-base)*4);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--muted-foreground);text-decoration-line:none;display:block}@media (hover:hover){.cbi-tabmenu li>a:hover{color:var(--foreground)}}.cbi-tabmenu li.cbi-tab a{background-color:var(--foreground);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--page-bg);--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}[data-tab-title]{visibility:hidden;height:calc(var(--spacing)*0);overflow:hidden}[data-tab-active=true]{visibility:visible;height:auto;overflow:visible}#tabmenu{margin-bottom:calc(var(--spacing)*8);width:100%}.tabs{align-items:center;gap:calc(var(--spacing)*0);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--border);display:flex;position:relative;overflow-x:auto}.tabs a{padding-inline:calc(var(--spacing)*8);padding-block:calc(var(--spacing)*4);text-align:center;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);white-space:nowrap;color:var(--muted-foreground);transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.2s;transition-duration:.2s;display:block}@media (hover:hover){.tabs a:hover{color:var(--foreground);text-decoration-line:none}}.tabs>li.active{border-bottom-style:var(--tw-border-style);border-bottom-width:2px;border-color:var(--foreground)}.tabs>li.active>a{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);color:var(--foreground)}.cbi-section-node-tabbed{margin-top:calc(var(--spacing)*6)}.hidden{display:none!important}@media (min-width:48rem){.left{text-align:left!important}}.left:not(td){text-align:left!important}@media (min-width:48rem){.right{text-align:right!important}}.right:not(td){text-align:right!important}@media (min-width:48rem){.top{vertical-align:top!important}}.top:not(td){vertical-align:top!important}@media (min-width:48rem){.bottom{vertical-align:bottom!important}}.bottom:not(td){vertical-align:bottom!important}@media (min-width:48rem){.center{text-align:center!important}}.center:not(td){text-align:center!important}@media (min-width:48rem){.middle{vertical-align:middle!important}}.middle:not(td){vertical-align:middle!important}@media (min-width:48rem){.nowrap:not(span){white-space:nowrap}}.nowrap:not(span):not(td){white-space:nowrap}.fade-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none);--tw-duration:.4s;--tw-enter-opacity:0;--tw-animation-fill-mode:backwards;transition-duration:.4s;animation-fill-mode:backwards}.fade-out{pointer-events:none;opacity:0;transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration));--tw-duration:.4s;transition-duration:.4s}.spinning{display:inline-block;position:relative;padding-left:calc(var(--spacing)*8)!important}.spinning:before{content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);content:var(--tw-content);width:calc(var(--spacing)*5);height:calc(var(--spacing)*5);content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y);content:var(--tw-content);animation:var(--animate-spin);content:var(--tw-content);content:var(--tw-content);background-color:currentColor;position:absolute;top:50%;left:6px;-webkit-mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1758357645269'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='7610'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M512%2085.333333c235.648%200%20426.666667%20191.018667%20426.666667%20426.666667s-191.018667%20426.666667-426.666667%20426.666667S85.333333%20747.648%2085.333333%20512%20276.352%2085.333333%20512%2085.333333z%20m0%20128a298.666667%20298.666667%200%201%200%200%20597.333334%20298.666667%20298.666667%200%200%200%200-597.333334z'%20fill='%23000000'%20fill-opacity='.05'%20p-id='7611'%3e%3c/path%3e%3cpath%20d='M813.696%20813.696c166.613333-166.613333%20166.613333-436.778667%200-603.392-166.613333-166.613333-436.778667-166.613333-603.392%200A64%2064%200%200%200%20300.8%20300.8a298.666667%20298.666667%200%201%201%20422.4%20422.4%2064%2064%200%200%200%2090.496%2090.496z'%20fill='%23000000'%20p-id='7612'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat;mask:url("data:image/svg+xml,%3c?xml%20version='1.0'%20standalone='no'?%3e%3c!DOCTYPE%20svg%20PUBLIC%20'-//W3C//DTD%20SVG%201.1//EN'%20'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e%3csvg%20t='1758357645269'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='7610'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20width='200'%20height='200'%3e%3cpath%20d='M512%2085.333333c235.648%200%20426.666667%20191.018667%20426.666667%20426.666667s-191.018667%20426.666667-426.666667%20426.666667S85.333333%20747.648%2085.333333%20512%20276.352%2085.333333%20512%2085.333333z%20m0%20128a298.666667%20298.666667%200%201%200%200%20597.333334%20298.666667%20298.666667%200%200%200%200-597.333334z'%20fill='%23000000'%20fill-opacity='.05'%20p-id='7611'%3e%3c/path%3e%3cpath%20d='M813.696%20813.696c166.613333-166.613333%20166.613333-436.778667%200-603.392-166.613333-166.613333-436.778667-166.613333-603.392%200A64%2064%200%200%200%20300.8%20300.8a298.666667%20298.666667%200%201%201%20422.4%20422.4%2064%2064%200%200%200%2090.496%2090.496z'%20fill='%23000000'%20p-id='7612'%3e%3c/path%3e%3c/svg%3e") 50%/cover no-repeat}#view>.spinning:first-child{min-height:calc(var(--spacing)*48);place-items:center;width:fit-content;margin-inline:auto;display:grid}@media not all and (min-width:48rem){#view>.spinning:first-child{min-height:calc(100dvh - 4rem)}[data-name=bridge-vlan]>div{overflow:visible!important}}#file-manager-container{overflow:auto}#file-manager-container #status-bar{border-style:var(--tw-border-style);background-color:var(--page-bg);border-width:0}@media not all and (min-width:48rem){.diag-style{gap:calc(var(--spacing)*4);grid-template-columns:repeat(1,minmax(0,1fr));display:grid}}.diag-style>div{align-items:center;gap:calc(var(--spacing)*2);flex-direction:column;display:flex}@media not all and (min-width:48rem){.diag-style>div{gap:calc(var(--spacing)*1);width:100%!important}}[data-page=admin-services-openclash-config] .sub_div img{height:calc(var(--spacing)*5);width:calc(var(--spacing)*5)}@media not all and (min-width:48rem){[data-page=admin-services-openclash-settings] .cbi-value-field .cbi-input-select{width:100%!important}}[data-page=admin-statistics-graphs] [data-plugin] img:where([data-darkmode=true],[data-darkmode=true] *){--tw-hue-rotate:hue-rotate(150deg);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,);--tw-invert:invert(100%)}.Dashboard>.section-content .dashboard-bg.tr{border-radius:0}.Dashboard>.section-content .dashboard-bg{background-color:var(--panel-bg)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg{background-color:color-mix(in oklab,var(--panel-bg)95%,transparent)}}.Dashboard>.section-content .dashboard-bg:not(.tr){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg:not(.tr){border-color:color-mix(in oklab,var(--border)40%,transparent)}}.Dashboard>.section-content .dashboard-bg:not(.tr){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.Dashboard>.section-content .dashboard-bg:not(.tr):hover{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg:not(.tr):hover{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.Dashboard>.section-content .dashboard-bg:not(.tr):hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}@media not all and (min-width:48rem){.Dashboard>.section-content .dashboard-bg{background-color:var(--panel-bg)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg{background-color:color-mix(in oklab,var(--panel-bg)98%,transparent)}}.Dashboard>.section-content .dashboard-bg:not(.tr){border-style:var(--tw-border-style);border-width:1px;border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.Dashboard>.section-content .dashboard-bg:not(.tr){border-color:color-mix(in oklab,var(--border)30%,transparent)}}}.Dashboard>.section-content .dashboard-bg span:where([data-darkmode=true],[data-darkmode=true] *),.Dashboard>.section-content .dashboard-bg td:where([data-darkmode=true],[data-darkmode=true] *),.Dashboard>.section-content .dashboard-bg th:where([data-darkmode=true],[data-darkmode=true] *){color:var(--foreground)!important}.Dashboard>.section-content .dashboard-bg img[src*=\.svg]:where([data-darkmode=true],[data-darkmode=true] *){--tw-invert:invert(100%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.Dashboard>.section-content .dashboard-bg .td{padding-block:calc(var(--spacing)*2)}@media not all and (min-width:48rem){.Dashboard>.section-content .dashboard-bg .td{padding-block:calc(var(--spacing)*1)}}.Dashboard>.section-content .dashboard-bg .th{padding-block:calc(var(--spacing)*2)}.Dashboard>.section-content .dashboard-bg .table:not(.assoclist){margin-bottom:calc(var(--spacing)*0);border-style:var(--tw-border-style);--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);background-color:#0000;border-width:0;border-radius:0}@media (hover:hover){.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) tr:hover{background-color:#0000}}@media not all and (min-width:48rem){.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) tr{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*0);border-width:0;display:table-row}}.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) td{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*0);padding-block:calc(var(--spacing)*.5);border-width:0}@media not all and (min-width:48rem){.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) td{display:table-cell}}.Dashboard>.section-content .dashboard-bg .table:not(.assoclist) td:first-child{padding-right:calc(var(--spacing)*2);white-space:nowrap;opacity:.7}.Dashboard>.section-content .title h3{border-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*4);color:var(--foreground);border-width:0}@media not all and (min-width:48rem){.Dashboard>.section-content .title h3{margin-inline:calc(var(--spacing)*0);padding-bottom:calc(var(--spacing)*2)}}.Dashboard>.section-content .router-status-wifi .wifi-info .devices-info .tr .td:nth-child(3){top:calc(var(--spacing)*0);width:100%;padding-inline:calc(var(--spacing)*0);position:relative}@media not all and (min-width:48rem){.Dashboard>.section-content .router-status-wifi .wifi-info .devices-info .tr .td{flex:50%}}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}