From 8ed4c2a2a55187213e9fc815e047d84960c84b9b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 16 May 2026 08:37:13 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8D=89=20Sync=202026-05-16=2008:37:13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easytier-noweb/Makefile | 10 +- luci-app-openclaw/CHANGELOG.md | 47 +++ luci-app-openclaw/Makefile | 14 +- luci-app-openclaw/README.md | 52 ++- luci-app-openclaw/VERSION | 2 +- .../luasrc/controller/openclaw.lua | 356 ++++++++++++++---- luci-app-openclaw/luasrc/openclaw/paths.lua | 64 ++++ .../luasrc/view/openclaw/console.htm | 18 +- .../luasrc/view/openclaw/status.htm | 5 + luci-app-openclaw/root/etc/init.d/openclaw | 62 ++- .../root/etc/profile.d/openclaw.sh | 70 ++-- .../root/etc/uci-defaults/99-openclaw | 14 +- luci-app-openclaw/root/usr/bin/openclaw-env | 153 +++++++- .../root/usr/libexec/openclaw-node.sh | 57 +++ .../root/usr/libexec/openclaw-paths.sh | 111 ++++++ .../root/usr/share/openclaw/oc-config.sh | 18 +- .../root/usr/share/openclaw/web-pty.js | 11 +- .../share/rpcd/acl.d/luci-app-openclaw.json | 12 +- luci-app-openclaw/scripts/build_ipk.sh | 21 +- luci-app-openclaw/scripts/build_run.sh | 13 + .../tests/test_openclaw_contracts.sh | 41 ++ luci-app-openclaw/tests/test_openclaw_node.sh | 19 + .../tests/test_openclaw_paths.lua | 32 ++ .../tests/test_openclaw_paths.sh | 31 ++ luci-theme-aurora/.dev/package.json | 1 + luci-theme-aurora/.dev/pnpm-lock.yaml | 29 ++ luci-theme-aurora/.dev/src/media/main.css | 16 +- luci-theme-aurora/.gitignore | 5 +- luci-theme-aurora/Makefile | 4 +- luci-theme-aurora/README.md | 46 +-- luci-theme-aurora/README_zh.md | 43 +-- .../htdocs/luci-static/aurora/main.css | 2 +- 32 files changed, 1145 insertions(+), 234 deletions(-) create mode 100644 luci-app-openclaw/luasrc/openclaw/paths.lua create mode 100755 luci-app-openclaw/root/usr/libexec/openclaw-node.sh create mode 100755 luci-app-openclaw/root/usr/libexec/openclaw-paths.sh create mode 100755 luci-app-openclaw/tests/test_openclaw_contracts.sh create mode 100755 luci-app-openclaw/tests/test_openclaw_node.sh create mode 100644 luci-app-openclaw/tests/test_openclaw_paths.lua create mode 100755 luci-app-openclaw/tests/test_openclaw_paths.sh diff --git a/easytier-noweb/Makefile b/easytier-noweb/Makefile index f9954bbd2..3fcd525be 100644 --- a/easytier-noweb/Makefile +++ b/easytier-noweb/Makefile @@ -3,7 +3,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=easytier-noweb PKG_VERSION:=$(or $(EASYTIER_VERSION),2.6.2) -PKG_RELEASE:=1 +PKG_RELEASE:=2 ifeq ($(ARCH),mipsel) APP_ARCH:=mipsel @@ -37,6 +37,8 @@ PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) include $(INCLUDE_DIR)/package.mk +RSTRIP:=: + define Package/$(PKG_NAME) SECTION:=net CATEGORY:=Network @@ -64,8 +66,10 @@ endef define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/easytier-core $(1)/usr/bin/easytier-core - $(INSTALL_BIN) $(PKG_BUILD_DIR)/easytier-cli $(1)/usr/bin/easytier-cli + $(CP) $(PKG_BUILD_DIR)/easytier-core $(1)/usr/bin/ + chmod 0755 $(1)/usr/bin/easytier-core + $(CP) $(PKG_BUILD_DIR)/easytier-cli $(1)/usr/bin/ + chmod 0755 $(1)/usr/bin/easytier-cli endef $(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/luci-app-openclaw/CHANGELOG.md b/luci-app-openclaw/CHANGELOG.md index f87e69d93..2bcb20fad 100644 --- a/luci-app-openclaw/CHANGELOG.md +++ b/luci-app-openclaw/CHANGELOG.md @@ -4,6 +4,53 @@ 格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/)。 +## [2.0.5] - 2026-05-15 + +### 适配 OpenClaw v2026.5.12 + +- `OC_TESTED_VERSION` 更新为 `2026.5.12`,默认稳定版固定到 npm `latest` 稳定标签。 +- 保持 Node.js 默认运行时 `22.16.0`,安装后按 OpenClaw `engines.node` 最低要求执行强校验;版本过低会直接失败并输出明确日志。 +- 文档补充 `2026.5.14-beta.2` 不作为默认稳定版的说明。 + +### 修复权限与路径问题 + +- 保留公开 UCI 字段 `openclaw.main.install_path`,新增统一路径规范化逻辑。 +- 兼容用户误填 `/mnt/data/openclaw`,避免实际路径变成 `/mnt/data/openclaw/openclaw`。 +- 拒绝相对路径、空白字符、shell 特殊字符和 `/tmp`、`/usr`、`/overlay` 等危险根目录。 +- `profile.d/openclaw.sh` 不再全局 `export HOME="$OC_DATA"`,仅在 `openclaw` 命令包装器内注入 HOME,避免影响 SSH/zsh/oh-my-zsh。 +- 卸载逻辑移除 `chmod -R 777`,并将 `rm -rf` 限定到规范化后的 OpenClaw 运行根目录。 +- 安装前新增写入探针,提前识别 overlay 已满、只读挂载或目标挂载点不可写。 + +### 修复微信插件链路 + +- 微信插件安装和升级前检查 `python3`、`openclaw` 系统用户、npm cache/tmp/data 写权限。 +- 统一以 `openclaw` 用户运行微信插件 CLI,并显式传入 `OPENCLAW_CONFIG_PATH`、`NPM_CONFIG_CACHE`、`TMPDIR`。 +- 自动迁移旧渠道名 `weixin` 到 `openclaw-weixin`。 +- 保留 Web PTY `cmd=wechat` 初始化能力,微信向导入口不被破坏。 + +### 修复 LuCI 与打包 + +- 状态页区分“启动中”和“启动失败”,并显示 procd gateway 退出码。 +- Web 控制台每次加载前重新读取 token,强制使用正确的 HTTP Gateway URL,避免旧 token 或 HTTPS 混用。 +- `Makefile`、`.run`、`.ipk` 打包清单补齐 `wechat.htm`、rpcd ACL、共享 shell/Lua helper。 +- 主包不再直接生成 `openclaw.zh-cn.lmo`,避免与 `luci-i18n-openclaw-zh-cn` 文件冲突。 + +### 测试 + +- 新增路径规范化、卸载保护、profile HOME、Node 版本比较、打包清单、微信安装预检和控制台 token URL 的契约测试入口。 + +### 致谢 + +感谢以下用户通过 Issue 或 PR 提供问题反馈、复现信息和修复思路: + +- @svgr110 (#89)、@Cuscito (#88)、@ayysama (#87)、@Jameslau-tech (#86, #66) +- @hotwa (#85, #83, #63)、@hwliu11 (#84)、@alan9771 (#82, #65)、@zhuxf8 (#81) +- @yiyibuguai (#80, #75)、@nbagui (#79)、@sam528300-lab (#78)、@392377870 (#77) +- @ouyangmland (#76, #68, #67)、@lucian521 (#74)、@jiangxiaoqiang-cloud (#73)、@LuckyMai (#72, #62) +- @xuguoliang189 (#71, #64)、@ampcwin (#70)、@natserver (#69)、@jh620026 (#61)、@okareyouok (#60) + +--- + ## [2.0.4] - 2026-04-10 ### 适配 OpenClaw v2026.4.9 diff --git a/luci-app-openclaw/Makefile b/luci-app-openclaw/Makefile index f2217c614..76f87900f 100644 --- a/luci-app-openclaw/Makefile +++ b/luci-app-openclaw/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-openclaw PKG_VERSION:=$(strip $(shell cat $(CURDIR)/VERSION 2>/dev/null || echo "1.0.0")) -PKG_RELEASE:=14 +PKG_RELEASE:=15 PKG_MAINTAINER:=10000ge10000 <10000ge10000@users.noreply.github.com> PKG_LICENSE:=GPL-3.0 @@ -56,24 +56,28 @@ define Package/$(PKG_NAME)/install $(INSTALL_DATA) ./root/etc/profile.d/openclaw.sh $(1)/etc/profile.d/openclaw.sh $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) ./root/usr/bin/openclaw-env $(1)/usr/bin/openclaw-env + $(INSTALL_DIR) $(1)/usr/libexec + $(INSTALL_BIN) ./root/usr/libexec/openclaw-paths.sh $(1)/usr/libexec/openclaw-paths.sh + $(INSTALL_BIN) ./root/usr/libexec/openclaw-node.sh $(1)/usr/libexec/openclaw-node.sh $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller $(INSTALL_DATA) ./luasrc/controller/openclaw.lua $(1)/usr/lib/lua/luci/controller/openclaw.lua + $(INSTALL_DIR) $(1)/usr/lib/lua/openclaw + $(INSTALL_DATA) ./luasrc/openclaw/paths.lua $(1)/usr/lib/lua/openclaw/paths.lua $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/openclaw $(INSTALL_DATA) ./luasrc/model/cbi/openclaw/basic.lua $(1)/usr/lib/lua/luci/model/cbi/openclaw/basic.lua $(INSTALL_DIR) $(1)/usr/lib/lua/luci/view/openclaw $(INSTALL_DATA) ./luasrc/view/openclaw/status.htm $(1)/usr/lib/lua/luci/view/openclaw/status.htm $(INSTALL_DATA) ./luasrc/view/openclaw/advanced.htm $(1)/usr/lib/lua/luci/view/openclaw/advanced.htm $(INSTALL_DATA) ./luasrc/view/openclaw/console.htm $(1)/usr/lib/lua/luci/view/openclaw/console.htm + $(INSTALL_DATA) ./luasrc/view/openclaw/wechat.htm $(1)/usr/lib/lua/luci/view/openclaw/wechat.htm + $(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d + $(INSTALL_DATA) ./root/usr/share/rpcd/acl.d/luci-app-openclaw.json $(1)/usr/share/rpcd/acl.d/luci-app-openclaw.json $(INSTALL_DIR) $(1)/usr/share/openclaw $(INSTALL_DATA) ./VERSION $(1)/usr/share/openclaw/VERSION $(INSTALL_BIN) ./root/usr/share/openclaw/oc-config.sh $(1)/usr/share/openclaw/oc-config.sh $(INSTALL_DATA) ./root/usr/share/openclaw/web-pty.js $(1)/usr/share/openclaw/web-pty.js $(INSTALL_DIR) $(1)/usr/share/openclaw/ui $(CP) ./root/usr/share/openclaw/ui/* $(1)/usr/share/openclaw/ui/ - $(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n - if [ -f ./po/zh-cn/openclaw.po ]; then \ - po2lmo ./po/zh-cn/openclaw.po $(1)/usr/lib/lua/luci/i18n/openclaw.zh-cn.lmo 2>/dev/null || true; \ - fi endef define Package/$(PKG_NAME)/postinst diff --git a/luci-app-openclaw/README.md b/luci-app-openclaw/README.md index b2c793470..7f8fd493b 100644 --- a/luci-app-openclaw/README.md +++ b/luci-app-openclaw/README.md @@ -19,10 +19,18 @@ |------|------| | 架构 | x86_64 或 aarch64 (ARM64) | | C 库 | musl(自动检测;离线包仅支持 musl) | -| 依赖 | luci-compat, luci-base, curl, openssl-util | -| 存储 | **1.5GB 以上可用空间** | +| 依赖 | luci-compat, luci-base, curl, openssl-util, tar, script-utils | +| 存储 | **2GB 以上可用空间** | | 内存 | 推荐 1GB 及以上 | +**当前适配版本** + +| 组件 | 默认版本 | 说明 | +|------|----------|------| +| OpenClaw | `2026.5.12` | npm `latest` 稳定标签;不默认追 `2026.5.14-beta.2` | +| Node.js | `22.16.0` | 安装后会按 OpenClaw `engines.node` 做强校验,低于要求会直接失败 | +| 微信插件 | `@tencent-weixin/openclaw-weixin@2.4.3` | CLI 使用 `@tencent-weixin/openclaw-weixin-cli@2.1.4` | + ## 📦 安装 ### 方式一:.run 自解压包(推荐) @@ -84,6 +92,41 @@ find bin/ -name "luci-app-openclaw*.ipk" 3. 进入「Web 控制台」添加 AI 模型和 API Key 4. 进入「配置管理」可使用向导配置消息渠道 +## 自定义安装路径 + +UCI 字段仍然是 `openclaw.main.install_path`,语义为基础目录。例如: + +```bash +uci set openclaw.main.install_path='/mnt/data' +uci commit openclaw +openclaw-env setup +``` + +实际运行目录会固定展开为 `/mnt/data/openclaw`。如果误填 `/mnt/data/openclaw`,插件会自动规范化为 `/mnt/data`,不会再拼成 `/mnt/data/openclaw/openclaw`。 + +安装前会执行写入探针;如果 overlay 已满、只读或外置盘未正确挂载,安装会在下载前失败并给出明确日志。 + +## 微信插件依赖 + +微信渠道安装前会检查: + +- `openclaw` 系统用户是否存在,不存在时自动创建 +- `python3` 是否已安装 +- npm cache、tmp、OpenClaw 数据目录是否可由 `openclaw` 用户写入 +- 旧渠道名 `weixin` 会迁移为 `openclaw-weixin` + +如缺少 Python3: + +```bash +opkg update +opkg install python3 +``` + +## 已知说明 + +- OpenClaw 的 diagnostic heartbeat 可能在日志中出现类似周期性探测记录。它不是一次真实用户对话请求;如需降低噪音,优先在 OpenClaw 配置或日志采集侧降低诊断日志级别,不建议直接修改模型调用逻辑。 +- 当前仓库提供源码、OpenWrt feeds 集成方式、本地 `.run` / `.ipk` 构建脚本入口;本次维护不自动生成 Release 产物。 + ## 📂 目录结构 ``` @@ -91,17 +134,20 @@ luci-app-openclaw/ ├── Makefile # OpenWrt 包定义 ├── luasrc/ │ ├── controller/openclaw.lua # LuCI 路由和 API +│ ├── openclaw/paths.lua # 路径规范化与安全校验 │ ├── model/cbi/openclaw/basic.lua # 主页面 │ └── view/openclaw/ │ ├── status.htm # 状态面板 │ ├── advanced.htm # 配置管理(终端) -│ └── console.htm # Web 控制台 +│ ├── console.htm # Web 控制台 +│ └── wechat.htm # 微信渠道向导 ├── root/ │ ├── etc/ │ │ ├── config/openclaw # UCI 配置 │ │ ├── init.d/openclaw # 服务脚本 │ │ └── uci-defaults/99-openclaw # 初始化脚本 │ └── usr/ +│ ├── libexec/ # 共享 shell helper │ ├── bin/openclaw-env # 环境管理工具 │ └── share/openclaw/ # 配置终端资源 ├── scripts/ diff --git a/luci-app-openclaw/VERSION b/luci-app-openclaw/VERSION index 2165f8f9b..e01025862 100644 --- a/luci-app-openclaw/VERSION +++ b/luci-app-openclaw/VERSION @@ -1 +1 @@ -2.0.4 +2.0.5 diff --git a/luci-app-openclaw/luasrc/controller/openclaw.lua b/luci-app-openclaw/luasrc/controller/openclaw.lua index d60ec57cd..795c8eed2 100644 --- a/luci-app-openclaw/luasrc/controller/openclaw.lua +++ b/luci-app-openclaw/luasrc/controller/openclaw.lua @@ -1,6 +1,89 @@ -- luci-app-openclaw — LuCI Controller module("luci.controller.openclaw", package.seeall) +local paths_ok, oc_paths = pcall(require, "openclaw.paths") + +local function shellquote(value) + if paths_ok and oc_paths.shellquote then + return oc_paths.shellquote(value) + end + return "'" .. tostring(value or ""):gsub("'", "'\\''") .. "'" +end + +local function normalize_install_base(value) + if paths_ok and oc_paths.normalize_install_path then + return oc_paths.normalize_install_path(value) + end + local raw = tostring(value or ""):gsub("^%s+", ""):gsub("%s+$", ""):gsub("/+$", "") + if raw == "" then raw = "/opt" end + if raw:sub(1, 1) ~= "/" then return nil end + if raw:match("[%s'\"`$;&|<>()]") then return nil end + local unsafe = { "proc", "sys", "dev", "tmp", "var", "etc", "usr", "bin", "sbin", "lib", "rom", "overlay" } + if raw == "/" then return nil end + for _, name in ipairs(unsafe) do + if raw == "/" .. name or raw:match("^/" .. name .. "/") then return nil end + end + if raw:match("/openclaw$") then raw = raw:gsub("/openclaw$", "") end + return raw ~= "" and raw or nil +end + +local function get_path_info(input) + local uci = require "luci.model.uci".cursor() + local base = input or uci:get("openclaw", "main", "install_path") or "/opt" + if paths_ok and oc_paths.derive_paths then + return oc_paths.derive_paths(base) + end + local normalized = normalize_install_base(base) or "/opt" + local root = normalized .. "/openclaw" + return { + install_path = normalized, + oc_root = root, + node_base = root .. "/node", + oc_global = root .. "/global", + oc_data = root .. "/data", + config_file = root .. "/data/.openclaw/openclaw.json" + } +end + +local function is_safe_openclaw_root(value) + if paths_ok and oc_paths.is_safe_openclaw_root then + return oc_paths.is_safe_openclaw_root(value) + end + return value == "/opt/openclaw" or value:match("^/mnt/[^/]+/openclaw$") ~= nil or value:match("^/media/[^/]+/openclaw$") ~= nil +end + +local function ensure_openclaw_user(oc_data) + local sys = require "luci.sys" + local uid = sys.exec("id -u openclaw 2>/dev/null"):gsub("%s+", "") + if uid ~= "" then return true end + + local script = [[ +OC_UID=1000 +while grep -q "^[^:]*:x:${OC_UID}:" /etc/passwd 2>/dev/null; do OC_UID=$((OC_UID + 1)); done +OC_GID=$OC_UID +while grep -q "^[^:]*:x:${OC_GID}:" /etc/group 2>/dev/null; do OC_GID=$((OC_GID + 1)); done +grep -q '^openclaw:' /etc/passwd 2>/dev/null || echo "openclaw:x:${OC_UID}:${OC_GID}:openclaw:${OC_DATA}:/bin/false" >> /etc/passwd +grep -q '^openclaw:' /etc/shadow 2>/dev/null || echo 'openclaw:x:0:0:99999:7:::' >> /etc/shadow +grep -q '^openclaw:' /etc/group 2>/dev/null || echo "openclaw:x:${OC_GID}:" >> /etc/group +]] + sys.exec("OC_DATA=" .. shellquote(oc_data) .. " sh -c " .. shellquote(script) .. " >/dev/null 2>&1") + uid = sys.exec("id -u openclaw 2>/dev/null"):gsub("%s+", "") + return uid ~= "" +end + +local function write_wechat_log_and_exit(log_file, exit_file, content, exit_code) + local f = io.open(log_file, "w") + if f then + f:write(content) + f:close() + end + local ef = io.open(exit_file, "w") + if ef then + ef:write(tostring(exit_code or 1)) + ef:close() + end +end + function index() -- 主入口: 服务 → OpenClaw (🧠 作为菜单图标) local page = entry({"admin", "services", "openclaw"}, alias("admin", "services", "openclaw", "basic"), _("OpenClaw"), 90) @@ -77,32 +160,27 @@ function index() end-- ═══════════════════════════════════════════ -- 获取安装路径 (唯一权威来源: UCI 配置) -- ═══════════════════════════════════════════ --- 核心原则: 用户在安装时输入的路径是唯一的安装位置 --- - UCI install_path 存储用户输入的基础路径 (如 /mnt/data 或 /opt) --- - 实际安装路径为 ${install_path}/openclaw --- - 此函数始终返回 UCI 配置的路径,不做任何"智能"回退 +-- 核心原则: UCI install_path 继续存储公开兼容字段,语义是基础目录。 +-- 如果用户误填 /mnt/data/openclaw,这里会规范化为 /mnt/data,再返回真实根目录。 -- ═══════════════════════════════════════════ local function get_install_path() - local uci = require "luci.model.uci".cursor() - -- 从 UCI 读取用户配置的基础路径,默认 /opt - local base_path = uci:get("openclaw", "main", "install_path") or "/opt" - -- 返回完整安装路径 - return base_path .. "/openclaw" + return get_path_info().oc_root end -- 确保网关端口可用:检测占用并尝试优雅停止或强制杀死占用进程 local function ensure_port_free(port) local sys = require "luci.sys" if not port or port == "" then return end + if not tostring(port):match("^%d+$") then return end -- 优先尝试使用 openclaw 自身的 stop 命令(如果已安装) sys.exec("openclaw gateway stop >/dev/null 2>&1 || true") -- 查询占用端口的行 local check_cmd = "" if os.execute("command -v ss >/dev/null 2>&1") == 0 then - check_cmd = string.format("ss -tulnp 2>/dev/null | grep -E ':%%s ' || true", port) + check_cmd = "ss -tulnp 2>/dev/null | grep -E " .. shellquote(":" .. port .. " ") .. " || true" else - check_cmd = string.format("netstat -tulnp 2>/dev/null | grep -E ':%%s ' || true", port) + check_cmd = "netstat -tulnp 2>/dev/null | grep -E " .. shellquote(":" .. port .. " ") .. " || true" end local out = sys.exec(check_cmd) out = out or "" @@ -164,6 +242,8 @@ function action_status() install_path = install_path, gateway_running = false, gateway_starting = false, + gateway_failed = false, + gateway_exit_code = "", pty_running = false, pid = "", memory_kb = 0, @@ -218,9 +298,19 @@ function action_status() -- 如果端口未监听但 procd 进程存在,说明正在启动中 (gateway 初始化需要数分钟) if not result.gateway_running and enabled == "1" then - local procd_pid = sys.exec("pgrep -f 'openclaw.*gateway' 2>/dev/null | head -1"):gsub("%s+", "") - if procd_pid ~= "" then + local procd_pid = sys.exec("ubus call service list '{\"name\":\"openclaw\"}' 2>/dev/null | jsonfilter -e '$.openclaw.instances.gateway.pid' 2>/dev/null"):gsub("%s+", "") + local procd_running = sys.exec("ubus call service list '{\"name\":\"openclaw\"}' 2>/dev/null | jsonfilter -e '$.openclaw.instances.gateway.running' 2>/dev/null"):gsub("%s+", "") + local procd_exit = sys.exec("ubus call service list '{\"name\":\"openclaw\"}' 2>/dev/null | jsonfilter -e '$.openclaw.instances.gateway.exit_code' 2>/dev/null"):gsub("%s+", "") + result.gateway_exit_code = procd_exit + if procd_exit ~= "" and tonumber(procd_exit) and tonumber(procd_exit) ~= 0 and procd_running ~= "true" then + result.gateway_failed = true + elseif procd_pid ~= "" or procd_running == "true" then result.gateway_starting = true + else + local fallback_pid = sys.exec("pgrep -f 'openclaw.*gateway' 2>/dev/null | head -1"):gsub("%s+", "") + if fallback_pid ~= "" then + result.gateway_starting = true + end end end @@ -294,7 +384,7 @@ function action_status() -- 磁盘剩余空间 (检测安装路径所在分区) local install_parent = install_path:match("^(.*)/[^/]*$") or "/" - local df_output = sys.exec("df -h " .. install_parent .. " 2>/dev/null | tail -1 | awk '{print $4}'"):gsub("%s+", "") + local df_output = sys.exec("df -h " .. shellquote(install_parent) .. " 2>/dev/null | tail -1 | awk '{print $4}'"):gsub("%s+", "") if df_output and df_output ~= "" then result.disk_free = df_output end @@ -339,24 +429,27 @@ function action_service_ctl() -- 稳定版: 读取 openclaw-env 中定义的 OC_TESTED_VERSION local tested_ver = sys.exec("grep '^OC_TESTED_VERSION=' /usr/bin/openclaw-env 2>/dev/null | cut -d'\"' -f2"):gsub("%s+", "") if tested_ver ~= "" then - env_prefix = "OC_VERSION=" .. tested_ver .. " " + env_prefix = "OC_VERSION=" .. shellquote(tested_ver) .. " " end + elseif version == "latest" then + env_prefix = "OC_VERSION='latest' " elseif version ~= "" and version ~= "latest" then -- 校验版本号格式 (仅允许数字、点、横线、字母) if version:match("^[%d%.%-a-zA-Z]+$") then - env_prefix = "OC_VERSION=" .. version .. " " + env_prefix = "OC_VERSION=" .. shellquote(version) .. " " end end -- 处理自定义安装路径 - if install_path ~= "" and install_path ~= "/opt" then - -- 安全检查: 路径不能包含危险字符 - install_path = install_path:gsub("[`$;&|<>]", "") - install_path = install_path:gsub("/+$", "") - if install_path ~= "" then - -- 保存到 UCI 配置 (保存用户输入的基础路径) - sys.exec("uci set openclaw.main.install_path='" .. install_path .. "'; uci commit openclaw 2>/dev/null") - env_prefix = env_prefix .. "OC_INSTALL_PATH='" .. install_path .. "' " + if install_path ~= "" then + local normalized = normalize_install_base(install_path) + if not normalized then + http.prepare_content("application/json") + http.write_json({ status = "error", message = "安装路径无效:必须是绝对路径,且不能包含空格、引号或 shell 特殊字符。" }) + return end + -- 保存规范化后的基础路径,公开字段仍为 install_path,避免破坏兼容。 + sys.exec("uci set openclaw.main.install_path=" .. shellquote(normalized) .. "; uci commit openclaw 2>/dev/null") + env_prefix = env_prefix .. "OC_INSTALL_PATH=" .. shellquote(normalized) .. " " end -- 后台安装,成功后自动启用并启动服务 -- 注: openclaw-env 脚本有 set -e,init_openclaw 中的非关键失败不应阻止启动 @@ -490,10 +583,22 @@ function action_uninstall() local sys = require "luci.sys" local uci = require "luci.model.uci".cursor() - -- 获取安装路径 - local install_path_uci = uci:get("openclaw", "main", "install_path") or "/opt" - -- 实际安装路径 - local install_path = install_path_uci .. "/openclaw" + -- 获取并校验安装路径。卸载只能作用于规范化后的 /openclaw。 + local configured_base = uci:get("openclaw", "main", "install_path") or "/opt" + local normalized_base = normalize_install_base(configured_base) + if not normalized_base then + http.prepare_content("application/json") + http.write_json({ status = "error", message = "UCI 安装路径无效,已取消卸载: " .. tostring(configured_base) }) + return + end + local path_info = get_path_info(normalized_base) + local install_path = path_info.oc_root + if not is_safe_openclaw_root(install_path) then + http.prepare_content("application/json") + http.write_json({ status = "error", message = "安装路径未通过安全校验,已取消卸载: " .. install_path }) + return + end + local q_install_path = shellquote(install_path) -- 1. 停止服务 (通过 init.d 正常流程) sys.exec("/etc/init.d/openclaw stop >/dev/null 2>&1") @@ -513,17 +618,13 @@ function action_uninstall() -- 设置 UCI enabled=0 sys.exec("uci set openclaw.main.enabled=0; uci commit openclaw 2>/dev/null") -- 删除 Node.js + OpenClaw 运行环境 (包含所有插件: qqbot, 飞书等) - -- 尝试先解绑可能挂载的目录 - sys.exec("umount " .. install_path .. " 2>/dev/null") - -- 强制赋予最大权限避免 EACCES 阻挡 - sys.exec("chmod -R 777 " .. install_path .. " /root/.openclaw 2>/dev/null") - -- 删除 Node.js + OpenClaw 运行环境 - sys.exec("rm -rf " .. install_path) - -- OverlayFS 兼容: 确保 upper 层的残留也被暴力清空 - sys.exec("[ -d /overlay/upper" .. install_path .. " ] && rm -rf /overlay/upper" .. install_path .. " 2>/dev/null") - - -- 清理旧数据迁移后可能残留的目录 - sys.exec("rm -rf /root/.openclaw 2>/dev/null") + -- 尝试先解绑可能挂载的目录;失败不阻断后续删除。 + sys.exec("umount " .. q_install_path .. " 2>/dev/null || true") + -- 删除 Node.js + OpenClaw 运行环境。不要通过全局提权绕过权限问题。 + sys.exec("rm -rf " .. q_install_path) + -- OverlayFS 兼容: 只清理同一规范化路径在 upper 层的残留。 + local overlay_install_path = "/overlay/upper" .. install_path + sys.exec("[ -d " .. shellquote(overlay_install_path) .. " ] && rm -rf " .. shellquote(overlay_install_path) .. " 2>/dev/null || true") -- 清理临时文件 sys.exec("rm -f /tmp/openclaw-setup.* /tmp/openclaw-update.log /tmp/openclaw-plugin-upgrade.* /var/run/openclaw*.pid") -- 清理 LuCI 缓存 @@ -534,7 +635,7 @@ function action_uninstall() http.prepare_content("application/json") http.write_json({ status = "ok", - message = "运行环境已卸载。已清理: Node.js 运行环境 (" .. install_path .. ")、所有插件 (qqbot/飞书等)、旧数据目录 (/root/.openclaw)、临时文件、LuCI 缓存。" + message = "运行环境已卸载。已清理: Node.js 运行环境 (" .. install_path .. ")、所有插件、临时文件、LuCI 缓存。" }) end @@ -970,12 +1071,8 @@ function action_check_system() local uci = require "luci.model.uci".cursor() -- 获取自定义安装路径 (用户输入的是基础路径,如 /opt 或 /mnt/data) - local install_path = http.formvalue("install_path") or uci:get("openclaw", "main", "install_path") or "/opt" - -- 安全检查: 路径不能包含危险字符 - install_path = install_path:gsub("[`$;&|<>]", "") - -- 确保路径不以 / 结尾 - install_path = install_path:gsub("/+$", "") - if install_path == "" then install_path = "/opt" end + local raw_install_path = http.formvalue("install_path") or uci:get("openclaw", "main", "install_path") or "/opt" + local install_path = normalize_install_base(raw_install_path) -- 最低要求配置 (v2026.3.28: 包体积 ~200MB, 建议 2GB 可用空间) local MIN_MEMORY_MB = 1024 -- 1GB @@ -987,12 +1084,21 @@ function action_check_system() disk_mb = 0, disk_ok = false, disk_path = "", - install_path = install_path, + install_path = install_path or tostring(raw_install_path or ""), + path_valid = install_path ~= nil, + writable_ok = false, disk_free_str = "", pass = false, message = "" } + if not install_path then + result.message = "安装路径无效:必须是绝对路径,且不能包含空格、引号或 shell 特殊字符。" + http.prepare_content("application/json") + http.write_json(result) + return + end + -- 检测总内存 (从 /proc/meminfo 读取 MemTotal) local meminfo = io.open("/proc/meminfo", "r") if meminfo then @@ -1029,12 +1135,12 @@ function action_check_system() local disk_check_path = find_mount_point(install_path) -- 使用 df 检测磁盘空间 - local df_output = sys.exec("df -m " .. disk_check_path .. " 2>/dev/null | tail -1 | awk '{print $4}'"):gsub("%s+", "") + local df_output = sys.exec("df -m " .. shellquote(disk_check_path) .. " 2>/dev/null | tail -1 | awk '{print $4}'"):gsub("%s+", "") if df_output and df_output ~= "" and tonumber(df_output) then result.disk_mb = tonumber(df_output) result.disk_path = disk_check_path -- 获取可读的磁盘空间格式 - result.disk_free_str = sys.exec("df -h " .. disk_check_path .. " 2>/dev/null | tail -1 | awk '{print $4}'"):gsub("%s+", "") + result.disk_free_str = sys.exec("df -h " .. shellquote(disk_check_path) .. " 2>/dev/null | tail -1 | awk '{print $4}'"):gsub("%s+", "") else -- 如果检测失败,尝试检测根分区 df_output = sys.exec("df -m / 2>/dev/null | tail -1 | awk '{print $4}'"):gsub("%s+", "") @@ -1046,8 +1152,19 @@ function action_check_system() end result.disk_ok = result.disk_mb >= MIN_DISK_MB + -- 安装前写入探针:先在实际存在的父目录创建临时目录。 + -- 这能明确识别 overlay 满、只读挂载、路径挂载点不可写等问题,避免下载完才失败。 + local probe_dir = disk_check_path .. "/.openclaw-write-test-" .. tostring(os.time()) .. "-" .. tostring(math.random(1000, 9999)) + local probe_rc = os.execute("mkdir " .. shellquote(probe_dir) .. " >/dev/null 2>&1") + if probe_rc == 0 or probe_rc == true then + result.writable_ok = true + os.execute("rmdir " .. shellquote(probe_dir) .. " >/dev/null 2>&1") + else + result.writable_ok = false + end + -- 综合判断 - result.pass = result.memory_ok and result.disk_ok + result.pass = result.memory_ok and result.disk_ok and result.writable_ok -- 生成提示信息 if result.pass then @@ -1060,6 +1177,9 @@ function action_check_system() if not result.disk_ok then table.insert(issues, string.format("磁盘空间不足: 当前 %d MB 可用,需要至少 %d MB", result.disk_mb, MIN_DISK_MB)) end + if not result.writable_ok then + table.insert(issues, "安装路径所在挂载点不可写,可能是 overlay 已满、只读或外置盘未正确挂载") + end result.message = table.concat(issues, ";") end @@ -1191,22 +1311,48 @@ function action_wechat_install() http.write_json({ status = "ok", message = "微信插件安装已在后台启动..." }) return end + if sys.exec("command -v python3 2>/dev/null"):gsub("%s+", "") == "" then + write_wechat_log_and_exit( + "/tmp/openclaw-wechat-install.log", + "/tmp/openclaw-wechat-install.exit", + "开始安装微信插件...\n安装路径: " .. install_path .. "\n❌ 错误: 未检测到 python3。\n请先安装依赖: opkg update && opkg install python3\n", + 127 + ) + http.prepare_content("application/json") + http.write_json({ status = "ok", message = "微信插件安装已在后台启动..." }) + return + end + if not ensure_openclaw_user(oc_data) then + write_wechat_log_and_exit( + "/tmp/openclaw-wechat-install.log", + "/tmp/openclaw-wechat-install.exit", + "开始安装微信插件...\n安装路径: " .. install_path .. "\n❌ 错误: 无法创建或读取 openclaw 系统用户。\n请检查 /etc/passwd、/etc/group 是否可写。\n", + 1 + ) + http.prepare_content("application/json") + http.write_json({ status = "ok", message = "微信插件安装已在后台启动..." }) + return + end -- 后台执行安装 -- 在启动安装前,确保网关端口可用(自动清理残留 gateway 进程) local port = uci:get("openclaw", "main", "port") or "18789" ensure_port_free(port) -- 微信插件安装目录路径 (用于安装后权限修复) - local wechat_ext_dir = install_path .. "/data/.openclaw/extensions/openclaw-weixin" + local extensions_dir = install_path .. "/data/.openclaw/extensions" local install_cmd = string.format( "( " .. "echo '开始安装微信插件...' > /tmp/openclaw-wechat-install.log; " .. "echo '安装路径: %s' >> /tmp/openclaw-wechat-install.log; " .. "echo 'npx 路径: %s' >> /tmp/openclaw-wechat-install.log; " .. - -- 修复 npm 缓存目录权限 (避免 root 创建的缓存导致 openclaw 用户写入失败) - "chown -R openclaw:openclaw %s/.npm 2>/dev/null; " .. + "mkdir -p %s/.npm %s/.tmp %s/.openclaw/extensions; " .. + "if [ ! -w %s/.openclaw/extensions ]; then chown -R openclaw:openclaw %s/.openclaw/extensions 2>/dev/null; fi; " .. + "chown -R openclaw:openclaw %s/.npm %s/.tmp %s/.openclaw 2>/dev/null; " .. + "if [ ! -w %s/.npm ] || [ ! -w %s/.tmp ]; then echo '❌ npm cache/tmp 目录不可写' >> /tmp/openclaw-wechat-install.log; echo 1 > /tmp/openclaw-wechat-install.exit; exit 0; fi; " .. + "su -s /bin/sh openclaw -c 'test -w %s/.npm && test -w %s/.tmp && test -w %s/.openclaw' || { echo '❌ openclaw 用户无法写入 npm cache/tmp/data 目录' >> /tmp/openclaw-wechat-install.log; echo 1 > /tmp/openclaw-wechat-install.exit; exit 0; }; " .. "cd %s && " .. "su -s /bin/sh openclaw -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw " .. + "OPENCLAW_CONFIG_PATH=%s/.openclaw/openclaw.json NPM_CONFIG_CACHE=%s/.npm npm_config_cache=%s/.npm TMPDIR=%s/.tmp " .. "PATH=%s/node/bin:%s/global/bin:$PATH " .. "%s -y @tencent-weixin/openclaw-weixin-cli install' >> /tmp/openclaw-wechat-install.log 2>&1; " .. "RC=$?; echo $RC > /tmp/openclaw-wechat-install.exit; " .. @@ -1217,8 +1363,16 @@ function action_wechat_install() "if [ $RC -eq 0 ]; then echo '✅ 微信插件安装成功!' >> /tmp/openclaw-wechat-install.log; " .. "else echo '❌ 安装失败 (exit: '$RC')' >> /tmp/openclaw-wechat-install.log; fi " .. ") & echo $! > /tmp/openclaw-wechat-install.pid", - install_path, npx_bin, oc_data, install_path, oc_data, oc_data, oc_data, install_path, install_path, npx_bin, - wechat_ext_dir, wechat_ext_dir + install_path, npx_bin, + oc_data, oc_data, oc_data, + oc_data, oc_data, + oc_data, oc_data, oc_data, + oc_data, oc_data, + oc_data, oc_data, oc_data, + install_path, oc_data, oc_data, oc_data, + oc_data, oc_data, oc_data, oc_data, + install_path, install_path, npx_bin, + extensions_dir, extensions_dir ) sys.exec(install_cmd) @@ -1313,6 +1467,11 @@ function action_wechat_login() http.write_json({ status = "error", message = "OpenClaw 未安装" }) return end + if not ensure_openclaw_user(oc_data) then + http.prepare_content("application/json") + http.write_json({ status = "error", message = "无法创建或读取 openclaw 系统用户,请检查 /etc/passwd、/etc/group 是否可写" }) + return + end -- 清理旧状态和可能的残留进程 sys.exec("kill -9 $(cat /tmp/openclaw-wechat-login.pid 2>/dev/null) 2>/dev/null") @@ -1322,13 +1481,17 @@ function action_wechat_login() "( " .. "echo '正在启动微信登录...' > /tmp/openclaw-wechat-qrcode.txt; " .. "echo '安装路径: %s' >> /tmp/openclaw-wechat-qrcode.txt; " .. + "mkdir -p %s/.npm %s/.tmp %s/.openclaw; chown -R openclaw:openclaw %s/.npm %s/.tmp %s/.openclaw 2>/dev/null; " .. "cd %s && " .. "su -s /bin/sh openclaw -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw OPENCLAW_CONFIG_PATH=%s/.openclaw/openclaw.json " .. - "PATH=%s/node/bin:%s/global/bin:$PATH " .. + "NPM_CONFIG_CACHE=%s/.npm npm_config_cache=%s/.npm TMPDIR=%s/.tmp PATH=%s/node/bin:%s/global/bin:$PATH " .. "%s %s channels login --channel openclaw-weixin' >> /tmp/openclaw-wechat-qrcode.txt 2>&1; " .. "echo $? > /tmp/openclaw-wechat-login.exit; " .. ") >/dev/null 2>&1 & echo $! > /tmp/openclaw-wechat-login.pid", - install_path, oc_data, oc_data, oc_data, oc_data, oc_data, install_path, install_path, node_bin, oc_entry + install_path, + oc_data, oc_data, oc_data, oc_data, oc_data, oc_data, + oc_data, oc_data, oc_data, oc_data, oc_data, + oc_data, oc_data, oc_data, install_path, install_path, node_bin, oc_entry ) sys.exec(login_cmd) http.prepare_content("application/json") @@ -1419,6 +1582,9 @@ function action_wechat_uninstall() -- 删除微信插件目录 local wechat_ext_dir = install_path .. "/data/.openclaw/extensions/openclaw-weixin" + if wechat_ext_dir == install_path .. "/data/.openclaw/extensions/openclaw-weixin" then + sys.exec("rm -rf " .. shellquote(wechat_ext_dir) .. " 2>/dev/null") + end -- 从配置中删除微信相关配置 local config_file = install_path .. "/data/.openclaw/openclaw.json" @@ -1536,22 +1702,48 @@ function action_wechat_upgrade_plugin() http.write_json({ status = "ok", message = "微信插件升级已在后台启动..." }) return end + if sys.exec("command -v python3 2>/dev/null"):gsub("%s+", "") == "" then + write_wechat_log_and_exit( + "/tmp/openclaw-wechat-install.log", + "/tmp/openclaw-wechat-install.exit", + "正在升级微信插件...\n安装路径: " .. install_path .. "\n❌ 错误: 未检测到 python3。\n请先安装依赖: opkg update && opkg install python3\n", + 127 + ) + http.prepare_content("application/json") + http.write_json({ status = "ok", message = "微信插件升级已在后台启动..." }) + return + end + if not ensure_openclaw_user(oc_data) then + write_wechat_log_and_exit( + "/tmp/openclaw-wechat-install.log", + "/tmp/openclaw-wechat-install.exit", + "正在升级微信插件...\n安装路径: " .. install_path .. "\n❌ 错误: 无法创建或读取 openclaw 系统用户。\n请检查 /etc/passwd、/etc/group 是否可写。\n", + 1 + ) + http.prepare_content("application/json") + http.write_json({ status = "ok", message = "微信插件升级已在后台启动..." }) + return + end -- 后台执行升级 (其实就是重新安装最新版) -- 在启动升级前,确保网关端口可用(自动清理残留 gateway 进程) local port = uci:get("openclaw", "main", "port") or "18789" ensure_port_free(port) -- 微信插件安装目录路径 (用于升级后权限修复) - local wechat_ext_dir = install_path .. "/data/.openclaw/extensions/openclaw-weixin" + local extensions_dir = install_path .. "/data/.openclaw/extensions" local upgrade_cmd = string.format( "( " .. "echo '正在升级微信插件...' > /tmp/openclaw-wechat-install.log; " .. "echo '安装路径: %s' >> /tmp/openclaw-wechat-install.log; " .. "echo 'npx 路径: %s' >> /tmp/openclaw-wechat-install.log; " .. - -- 修复 npm 缓存目录权限 (避免 root 创建的缓存导致 openclaw 用户写入失败) - "chown -R openclaw:openclaw %s/.npm 2>/dev/null; " .. + "mkdir -p %s/.npm %s/.tmp %s/.openclaw/extensions; " .. + "if [ ! -w %s/.openclaw/extensions ]; then chown -R openclaw:openclaw %s/.openclaw/extensions 2>/dev/null; fi; " .. + "chown -R openclaw:openclaw %s/.npm %s/.tmp %s/.openclaw 2>/dev/null; " .. + "if [ ! -w %s/.npm ] || [ ! -w %s/.tmp ]; then echo '❌ npm cache/tmp 目录不可写' >> /tmp/openclaw-wechat-install.log; echo 1 > /tmp/openclaw-wechat-install.exit; exit 0; fi; " .. + "su -s /bin/sh openclaw -c 'test -w %s/.npm && test -w %s/.tmp && test -w %s/.openclaw' || { echo '❌ openclaw 用户无法写入 npm cache/tmp/data 目录' >> /tmp/openclaw-wechat-install.log; echo 1 > /tmp/openclaw-wechat-install.exit; exit 0; }; " .. "cd %s && " .. "su -s /bin/sh openclaw -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw " .. + "OPENCLAW_CONFIG_PATH=%s/.openclaw/openclaw.json NPM_CONFIG_CACHE=%s/.npm npm_config_cache=%s/.npm TMPDIR=%s/.tmp " .. "PATH=%s/node/bin:%s/global/bin:$PATH " .. "%s -y @tencent-weixin/openclaw-weixin-cli install' >> /tmp/openclaw-wechat-install.log 2>&1; " .. "RC=$?; echo $RC > /tmp/openclaw-wechat-install.exit; " .. @@ -1561,8 +1753,16 @@ function action_wechat_upgrade_plugin() "if [ $RC -eq 0 ]; then echo '✅ 微信插件升级成功!' >> /tmp/openclaw-wechat-install.log; " .. "else echo '❌ 升级失败 (exit: '$RC')' >> /tmp/openclaw-wechat-install.log; fi " .. ") & echo $! > /tmp/openclaw-wechat-install.pid", - install_path, npx_bin, oc_data, install_path, oc_data, oc_data, oc_data, install_path, install_path, npx_bin, - wechat_ext_dir, wechat_ext_dir + install_path, npx_bin, + oc_data, oc_data, oc_data, + oc_data, oc_data, + oc_data, oc_data, oc_data, + oc_data, oc_data, + oc_data, oc_data, oc_data, + install_path, oc_data, oc_data, oc_data, + oc_data, oc_data, oc_data, oc_data, + install_path, install_path, npx_bin, + extensions_dir, extensions_dir ) sys.exec(upgrade_cmd) @@ -1578,11 +1778,16 @@ function action_wechat_logout() local sys = require "luci.sys" local account_id = http.formvalue("account") - if not account_id or account_id == "" then - http.prepare_content("application/json") - http.write_json({ status = "error", message = "参数错误:未提供账号 ID" }) - return - end + if not account_id or account_id == "" then + http.prepare_content("application/json") + http.write_json({ status = "error", message = "参数错误:未提供账号 ID" }) + return + end + if account_id:match("[`$;&|<>\"']") then + http.prepare_content("application/json") + http.write_json({ status = "error", message = "账号 ID 包含非法字符" }) + return + end local install_path = get_install_path() local node_bin = install_path .. "/node/bin/node" @@ -1604,13 +1809,18 @@ function action_wechat_logout() end end - if oc_entry == "" then - http.prepare_content("application/json") - http.write_json({ status = "error", message = "OpenClaw 未安装" }) - return - end + if oc_entry == "" then + http.prepare_content("application/json") + http.write_json({ status = "error", message = "OpenClaw 未安装" }) + return + end + if not ensure_openclaw_user(oc_data) then + http.prepare_content("application/json") + http.write_json({ status = "error", message = "无法创建或读取 openclaw 系统用户" }) + return + end - -- 在后台执行 logout + -- 在后台执行 logout local logout_cmd = string.format( "cd %s && su -s /bin/sh openclaw -c 'HOME=%s OPENCLAW_HOME=%s OPENCLAW_STATE_DIR=%s/.openclaw OPENCLAW_CONFIG_PATH=%s/.openclaw/openclaw.json " .. "PATH=%s/node/bin:%s/global/bin:$PATH " .. diff --git a/luci-app-openclaw/luasrc/openclaw/paths.lua b/luci-app-openclaw/luasrc/openclaw/paths.lua new file mode 100644 index 000000000..ec988f5d7 --- /dev/null +++ b/luci-app-openclaw/luasrc/openclaw/paths.lua @@ -0,0 +1,64 @@ +local M = {} + +local function trim(value) + return (value or ""):gsub("^%s+", ""):gsub("%s+$", "") +end + +function M.normalize_install_path(value) + local raw = trim(value) + if raw == "" then raw = "/opt" end + raw = raw:gsub("/+$", "") + if raw == "" then raw = "/" end + + if raw:sub(1, 1) ~= "/" then return nil end + if raw:match("[%s'\"`$;&|<>()]") then return nil end + if raw == "/" or raw == "/proc" or raw:match("^/proc/") or + raw == "/sys" or raw:match("^/sys/") or + raw == "/dev" or raw:match("^/dev/") or + raw == "/tmp" or raw:match("^/tmp/") or + raw == "/var" or raw:match("^/var/") or + raw == "/etc" or raw:match("^/etc/") or + raw == "/usr" or raw:match("^/usr/") or + raw == "/bin" or raw:match("^/bin/") or + raw == "/sbin" or raw:match("^/sbin/") or + raw == "/lib" or raw:match("^/lib/") or + raw == "/rom" or raw:match("^/rom/") or + raw == "/overlay" or raw:match("^/overlay/") then + return nil + end + + if raw:match("/openclaw$") then + raw = raw:gsub("/openclaw$", "") + if raw == "" then raw = "/" end + end + + return raw +end + +function M.derive_paths(value) + local base = M.normalize_install_path(value) or "/opt" + local root = (base == "/") and "/openclaw" or (base .. "/openclaw") + return { + install_path = base, + oc_root = root, + node_base = root .. "/node", + oc_global = root .. "/global", + oc_data = root .. "/data", + config_file = root .. "/data/.openclaw/openclaw.json" + } +end + +function M.shellquote(value) + return "'" .. tostring(value or ""):gsub("'", "'\\''") .. "'" +end + +function M.is_safe_openclaw_root(value) + if type(value) ~= "string" or not value:match("/openclaw$") then return false end + if value == "/openclaw" or value == "/opt/openclaw" then return true end + if value:match("^/mnt/[^/]+/openclaw$") or value:match("^/media/[^/]+/openclaw$") then return true end + if value:match("^/srv/[^/]+/openclaw$") then return true end + if value == "/overlay/upper/opt/openclaw" then return true end + return false +end + +return M diff --git a/luci-app-openclaw/luasrc/view/openclaw/console.htm b/luci-app-openclaw/luasrc/view/openclaw/console.htm index 4c4055477..42b6a431e 100644 --- a/luci-app-openclaw/luasrc/view/openclaw/console.htm +++ b/luci-app-openclaw/luasrc/view/openclaw/console.htm @@ -107,9 +107,9 @@ local port = uci:get("openclaw", "main", "port") or "18789" var openBtn = document.getElementById('oc-console-open-btn'); function getConsoleUrl() { - var proto = window.location.protocol; var host = window.location.hostname; - var url = proto + '//' + host + ':' + gwPort + '/'; + // OpenClaw Gateway 当前只监听 HTTP;LuCI 使用 HTTPS 时也必须强制走 http,避免浏览器误连 HTTPS 端口。 + var url = 'http://' + host + ':' + gwPort + '/'; if (gwToken) url += '#token=' + encodeURIComponent(gwToken); return url; } @@ -136,6 +136,15 @@ local port = uci:get("openclaw", "main", "port") or "18789" openBtn.href = url; openBtn.style.display = ''; showIframe(url); + } else if (d.gateway_failed) { + statusTextEl.innerHTML = '● 网关启动失败'; + openBtn.style.display = 'none'; + loading.style.display = ''; + loading.innerHTML = '
' + + '
×
' + + '
OpenClaw 网关启动失败
' + + '
退出码:' + (d.gateway_exit_code || '-') + '。请查看系统日志或安装日志。
' + + '
'; } else if (d.gateway_starting) { statusTextEl.innerHTML = '⏳ 网关正在启动'; openBtn.style.display = 'none'; @@ -163,7 +172,10 @@ local port = uci:get("openclaw", "main", "port") or "18789" function showIframe(url) { loading.style.display = 'none'; var existing = document.getElementById('oc-console-iframe'); - if (existing) return; + if (existing) { + if (existing.src !== url) existing.src = url; + return; + } var iframe = document.createElement('iframe'); iframe.id = 'oc-console-iframe'; diff --git a/luci-app-openclaw/luasrc/view/openclaw/status.htm b/luci-app-openclaw/luasrc/view/openclaw/status.htm index 12338a369..71f78d74a 100644 --- a/luci-app-openclaw/luasrc/view/openclaw/status.htm +++ b/luci-app-openclaw/luasrc/view/openclaw/status.htm @@ -55,6 +55,7 @@ .oc-badge-running { background: #e6f7e9; color: #1a7f37; } .oc-badge-stopped { background: #ffeef0; color: #cf222e; } .oc-badge-starting { background: #fff8c5; color: #9a6700; } +.oc-badge-failed { background: #ffeef0; color: #cf222e; } .oc-badge-disabled { background: #f0f0f0; color: #656d76; } .oc-badge-unknown { background: #fff8c5; color: #9a6700; } .oc-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 6px; vertical-align: middle; } @@ -101,6 +102,8 @@ stEl.innerHTML = '运行中'; } else if (d.gateway_starting) { stEl.innerHTML = '⏳ 正在启动...'; + } else if (d.gateway_failed) { + stEl.innerHTML = '启动失败'; } else { stEl.innerHTML = '已停止'; } @@ -110,6 +113,8 @@ gwEl.innerHTML = '监听中 :' + d.port; } else if (d.gateway_starting) { gwEl.innerHTML = '初始化中,首次启动可能需要 2~5 分钟...'; + } else if (d.gateway_failed) { + gwEl.innerHTML = '启动失败,退出码 ' + (d.gateway_exit_code || '-'); } else { gwEl.innerHTML = '未监听'; } diff --git a/luci-app-openclaw/root/etc/init.d/openclaw b/luci-app-openclaw/root/etc/init.d/openclaw index 458a3f7d0..93121bb15 100755 --- a/luci-app-openclaw/root/etc/init.d/openclaw +++ b/luci-app-openclaw/root/etc/init.d/openclaw @@ -11,13 +11,33 @@ EXTRA_HELP=" setup 下载 Node.js 并安装 OpenClaw restart_gateway 仅重启 Gateway 实例 (不影响 Web PTY)" # ── 安装路径 (支持自定义) ── -# 从 UCI 配置读取自定义路径,默认为 /opt -# 程序会在此路径下自动创建 openclaw 目录 -OC_BASE_PATH="$(uci -q get openclaw.main.install_path || echo '/opt')" -OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" -NODE_BASE="${OC_INSTALL_PATH}/node" -OC_GLOBAL="${OC_INSTALL_PATH}/global" -OC_DATA="${OC_INSTALL_PATH}/data" +# 从 UCI 配置读取自定义路径,公开字段仍为 install_path。 +# 统一路径解析可以兼容 /mnt/data/openclaw 输入,避免双拼路径。 +[ -r /usr/libexec/openclaw-paths.sh ] && . /usr/libexec/openclaw-paths.sh +[ -r /usr/libexec/openclaw-node.sh ] && . /usr/libexec/openclaw-node.sh +OC_NODE_MIN_VERSION="${OC_NODE_MIN_VERSION:-22.14.0}" +OC_CONFIGURED_PATH="$(uci -q get openclaw.main.install_path 2>/dev/null || echo '/opt')" +if command -v oc_load_paths >/dev/null 2>&1; then + if ! oc_load_paths "$OC_CONFIGURED_PATH"; then + logger -t openclaw "安装路径无效: $OC_CONFIGURED_PATH" + OC_BASE_PATH="/opt" + OC_INSTALL_PATH="/opt/openclaw" + NODE_BASE="${OC_INSTALL_PATH}/node" + OC_GLOBAL="${OC_INSTALL_PATH}/global" + OC_DATA="${OC_INSTALL_PATH}/data" + CONFIG_FILE="${OC_DATA}/.openclaw/openclaw.json" + else + OC_BASE_PATH="$OPENCLAW_INSTALL_PATH" + OC_INSTALL_PATH="$OC_ROOT" + fi +else + OC_BASE_PATH="${OC_CONFIGURED_PATH%/}" + OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" + NODE_BASE="${OC_INSTALL_PATH}/node" + OC_GLOBAL="${OC_INSTALL_PATH}/global" + OC_DATA="${OC_INSTALL_PATH}/data" + CONFIG_FILE="${OC_DATA}/.openclaw/openclaw.json" +fi # ── OverlayFS 兼容性修复 ── # Docker bind mount (/overlay/upper/opt/docker) 会导致 /opt 不可写 @@ -220,6 +240,27 @@ if(d.plugins.installs){ } }); } +// v2026.5.x: 微信插件渠道名统一为 openclaw-weixin +// 旧配置里可能残留 weixin,启动前迁移,避免渠道加载失败。 +if(Array.isArray(d.plugins.allow)){ + d.plugins.allow=d.plugins.allow.map(x=>x==='weixin'?'openclaw-weixin':x) + .filter((x,i,a)=>x&&a.indexOf(x)===i); +} +['entries','installs'].forEach(ns=>{ + if(d.plugins&&d.plugins[ns]&&d.plugins[ns].weixin){ + if(!d.plugins[ns]['openclaw-weixin'])d.plugins[ns]['openclaw-weixin']=d.plugins[ns].weixin; + delete d.plugins[ns].weixin; + } +}); +['channel','channels'].forEach(ns=>{ + if(d[ns]&&d[ns].weixin){ + if(!d[ns]['openclaw-weixin'])d[ns]['openclaw-weixin']=d[ns].weixin; + delete d[ns].weixin; + } +}); +if(!d.plugins.allow.includes('openclaw-weixin') && d.plugins.installs && d.plugins.installs['openclaw-weixin']){ + d.plugins.allow.push('openclaw-weixin'); +} // 始终信任 copilot-proxy (内置插件) if(!d.plugins.allow.includes('copilot-proxy'))d.plugins.allow.push('copilot-proxy'); fs.writeFileSync(f,JSON.stringify(d,null,2)); @@ -248,6 +289,13 @@ echo "未找到 Node.js: $NODE_BIN" echo "请运行: openclaw-env setup" return 1 fi +if command -v oc_assert_node_min_version >/dev/null 2>&1; then + oc_assert_node_min_version "$NODE_BIN" "$OC_NODE_MIN_VERSION" >/dev/null || { + echo "Node.js 版本过低,OpenClaw 需要 >= v${OC_NODE_MIN_VERSION}" + echo "请运行: openclaw-env node" + return 1 + } +fi # 检查 openclaw 入口 local oc_entry diff --git a/luci-app-openclaw/root/etc/profile.d/openclaw.sh b/luci-app-openclaw/root/etc/profile.d/openclaw.sh index 4577d8008..aaaea3436 100644 --- a/luci-app-openclaw/root/etc/profile.d/openclaw.sh +++ b/luci-app-openclaw/root/etc/profile.d/openclaw.sh @@ -6,13 +6,23 @@ # 支持自定义安装路径 # ============================================================================ -# 从 UCI 配置读取自定义安装路径 -# 用户配置的是基础路径,程序会在此路径下创建 openclaw 目录 -OC_BASE_PATH="$(uci -q get openclaw.main.install_path 2>/dev/null || echo '/opt')" -OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" -NODE_BASE="${OC_INSTALL_PATH}/node" -OC_GLOBAL="${OC_INSTALL_PATH}/global" -OC_DATA="${OC_INSTALL_PATH}/data" +# 从 UCI 配置读取自定义安装路径。 +# 注意:这里不能修改全局 HOME。profile 会被 SSH shell、zsh/oh-my-zsh 等加载, +# 全局改 HOME 会让 cd ~、插件缓存、历史文件全部跑到 OpenClaw 数据目录。 +# OpenClaw CLI 需要的 HOME 只在 openclaw 命令包装器里单独注入。 +[ -r /usr/libexec/openclaw-paths.sh ] && . /usr/libexec/openclaw-paths.sh +OC_CONFIGURED_PATH="$(uci -q get openclaw.main.install_path 2>/dev/null || echo '/opt')" +if command -v oc_load_paths >/dev/null 2>&1; then + oc_load_paths "$OC_CONFIGURED_PATH" || return 0 + OC_INSTALL_PATH="$OC_ROOT" +else + OC_BASE_PATH="${OC_CONFIGURED_PATH%/}" + OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" + NODE_BASE="${OC_INSTALL_PATH}/node" + OC_GLOBAL="${OC_INSTALL_PATH}/global" + OC_DATA="${OC_INSTALL_PATH}/data" + CONFIG_FILE="${OC_DATA}/.openclaw/openclaw.json" +fi # 检查 Node.js 是否已安装 [ -x "${NODE_BASE}/bin/node" ] || return 0 @@ -30,26 +40,32 @@ export NODE_ICU_DATA="${NODE_BASE}/share/icu" # 这些变量确保 openclaw 命令使用正确的配置路径 export OPENCLAW_HOME="$OC_DATA" export OPENCLAW_STATE_DIR="${OC_DATA}/.openclaw" -export OPENCLAW_CONFIG_PATH="${OC_DATA}/.openclaw/openclaw.json" +export OPENCLAW_CONFIG_PATH="$CONFIG_FILE" -# 设置 HOME 为 OpenClaw 数据目录 -# 这是解决 Issue #42 的关键:确保 OpenClaw CLI 使用正确的配置路径 -# 注意:这会影响 cd ~ 等行为,但为了配置一致性是必要的 -export HOME="$OC_DATA" - -# 创建便捷别名:用户可直接运行 openclaw 命令 -if [ -x "${OC_GLOBAL}/bin/openclaw" ] || [ -x "${NODE_BASE}/bin/openclaw" ]; then - # openclaw 已在 PATH 中,无需别名 - : +# 创建便捷包装器:只给 openclaw 命令单独注入 HOME,避免污染用户 shell。 +_oc_cli="" +if [ -x "${OC_GLOBAL}/bin/openclaw" ]; then + _oc_cli="${OC_GLOBAL}/bin/openclaw" +elif [ -x "${NODE_BASE}/bin/openclaw" ]; then + _oc_cli="${NODE_BASE}/bin/openclaw" else - # 尝试查找 openclaw 入口并创建别名 - for _oc_dir in "${OC_GLOBAL}/lib/node_modules/openclaw" "${OC_GLOBAL}/node_modules/openclaw" "${NODE_BASE}/lib/node_modules/openclaw"; do - if [ -f "${_oc_dir}/openclaw.mjs" ]; then - alias openclaw="${NODE_BASE}/bin/node ${_oc_dir}/openclaw.mjs" - break - elif [ -f "${_oc_dir}/dist/cli.js" ]; then - alias openclaw="${NODE_BASE}/bin/node ${_oc_dir}/dist/cli.js" - break - fi - done + for _oc_dir in "${OC_GLOBAL}/lib/node_modules/openclaw" "${OC_GLOBAL}/node_modules/openclaw" "${NODE_BASE}/lib/node_modules/openclaw"; do + if [ -f "${_oc_dir}/openclaw.mjs" ]; then + _oc_cli="${NODE_BASE}/bin/node ${_oc_dir}/openclaw.mjs" + break + elif [ -f "${_oc_dir}/dist/cli.js" ]; then + _oc_cli="${NODE_BASE}/bin/node ${_oc_dir}/dist/cli.js" + break + fi + done +fi + +if [ -n "$_oc_cli" ]; then + openclaw() { + HOME="$OC_DATA" \ + OPENCLAW_HOME="$OC_DATA" \ + OPENCLAW_STATE_DIR="${OC_DATA}/.openclaw" \ + OPENCLAW_CONFIG_PATH="$CONFIG_FILE" \ + sh -c 'exec "$@"' openclaw $_oc_cli "$@" + } fi diff --git a/luci-app-openclaw/root/etc/uci-defaults/99-openclaw b/luci-app-openclaw/root/etc/uci-defaults/99-openclaw index a953d0773..89935913e 100755 --- a/luci-app-openclaw/root/etc/uci-defaults/99-openclaw +++ b/luci-app-openclaw/root/etc/uci-defaults/99-openclaw @@ -2,9 +2,17 @@ # luci-app-openclaw — 首次安装/升级初始化脚本 # 获取安装路径 (支持自定义) -# 用户配置的是基础路径,程序会在此路径下创建 openclaw 目录 -OC_BASE_PATH="$(uci -q get openclaw.main.install_path || echo '/opt')" -OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" +# 用户配置的是基础路径,程序会在此路径下创建 openclaw 目录。 +# 这里复用统一路径解析,兼容用户误填 /mnt/data/openclaw 的情况。 +[ -r /usr/libexec/openclaw-paths.sh ] && . /usr/libexec/openclaw-paths.sh +OC_CONFIGURED_PATH="$(uci -q get openclaw.main.install_path 2>/dev/null || echo '/opt')" +if command -v oc_load_paths >/dev/null 2>&1 && oc_load_paths "$OC_CONFIGURED_PATH"; then + OC_BASE_PATH="$OPENCLAW_INSTALL_PATH" + OC_INSTALL_PATH="$OC_ROOT" +else + OC_BASE_PATH="/opt" + OC_INSTALL_PATH="/opt/openclaw" +fi # ── v1.0.16: 清理错误路径下的配置文件 (Issue #42) ── # 用户在 SSH 中直接运行 openclaw 命令时,可能创建了 /root/.openclaw/ 目录 diff --git a/luci-app-openclaw/root/usr/bin/openclaw-env b/luci-app-openclaw/root/usr/bin/openclaw-env index bcabeec0a..289fdfdb4 100755 --- a/luci-app-openclaw/root/usr/bin/openclaw-env +++ b/luci-app-openclaw/root/usr/bin/openclaw-env @@ -19,19 +19,37 @@ NODE_VERSION_V1="22.15.1" # 默认使用 V2 版本 (可通过 NODE_VERSION 环境变量覆盖) NODE_VERSION="${NODE_VERSION:-${NODE_VERSION_V2}}" # 经过验证的 OpenClaw 稳定版本 (更新此值需同步测试) -OC_TESTED_VERSION="2026.4.9" +OC_TESTED_VERSION="2026.5.12" +# OpenClaw 2026.5.x package.json engines.node 的最低要求。 +# 如果未来上游提高要求,安装成功后还会从 package.json 再做一次强校验。 +OC_NODE_MIN_VERSION="${OC_NODE_MIN_VERSION:-22.14.0}" # 用户可通过 OC_VERSION 环境变量覆盖安装版本 OC_VERSION="${OC_VERSION:-}" +[ -r /usr/libexec/openclaw-paths.sh ] && . /usr/libexec/openclaw-paths.sh +[ -r /usr/libexec/openclaw-node.sh ] && . /usr/libexec/openclaw-node.sh + # ── 安装路径 (支持自定义) ── -# 从 UCI 配置读取自定义路径,默认为 /opt -# 用户可在 LuCI 界面或通过 uci set openclaw.main.install_path=/mnt/data 设置 -# 程序会在此路径下自动创建 openclaw 目录 -OC_BASE_PATH="${OC_INSTALL_PATH:-$(uci -q get openclaw.main.install_path || echo '/opt')}" -OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" -NODE_BASE="${OC_INSTALL_PATH}/node" -OC_GLOBAL="${OC_INSTALL_PATH}/global" -OC_DATA="${OC_INSTALL_PATH}/data" +# UCI 公开字段继续使用 openclaw.main.install_path,语义为“基础目录”。 +# 兼容用户误填 /mnt/data/openclaw:统一剥离末尾 openclaw,避免得到 +# /mnt/data/openclaw/openclaw 这种双拼路径。 +OC_CONFIGURED_PATH="${OC_INSTALL_PATH:-$(uci -q get openclaw.main.install_path 2>/dev/null || echo '/opt')}" +if command -v oc_load_paths >/dev/null 2>&1; then + if ! oc_load_paths "$OC_CONFIGURED_PATH"; then + echo " [✗] 安装路径无效: $OC_CONFIGURED_PATH" + echo " [!] 请使用绝对路径,例如 /opt、/mnt/data;不要使用相对路径、空格或 shell 特殊字符。" + exit 1 + fi + OC_BASE_PATH="$OPENCLAW_INSTALL_PATH" + OC_INSTALL_PATH="$OC_ROOT" +else + OC_BASE_PATH="${OC_CONFIGURED_PATH%/}" + OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" + NODE_BASE="${OC_INSTALL_PATH}/node" + OC_GLOBAL="${OC_INSTALL_PATH}/global" + OC_DATA="${OC_INSTALL_PATH}/data" + CONFIG_FILE="${OC_DATA}/.openclaw/openclaw.json" +fi # ── OverlayFS 兼容性修复 ── # iStoreOS/OpenWrt 上 Docker 的 bind mount (/overlay/upper/opt/docker) @@ -82,11 +100,58 @@ ensure_mkdir() { [ -d "$target" ] && return 0 if ! mkdir -p "$target" 2>/dev/null; then log_error "无法创建目录: $target" - log_error "如果安装了 Docker,可能需要手动执行: mount --bind /overlay/upper/opt /opt" + local probe_parent="/" + command -v oc_find_existing_path >/dev/null 2>&1 && probe_parent=$(oc_find_existing_path "$target") + log_error "请检查挂载点是否只读、overlay 是否已满,以及 ${probe_parent} 是否可写。" + [ "$OC_BASE_PATH" = "/opt" ] && log_error "如果安装了 Docker,可能需要手动执行: mount --bind /overlay/upper/opt /opt" return 1 fi } +ensure_openclaw_user() { + # OpenWrt 默认没有 useradd/adduser 的完整实现,所以沿用 uci-defaults 的轻量写法。 + # 这里在安装链路再兜底一次,避免用户删除账号后微信插件安装或 Gateway 启动失败。 + if id openclaw >/dev/null 2>&1 || grep -q '^openclaw:' /etc/passwd 2>/dev/null; then + return 0 + fi + + local oc_uid=1000 + while grep -q "^[^:]*:x:${oc_uid}:" /etc/passwd 2>/dev/null; do + oc_uid=$((oc_uid + 1)) + done + local oc_gid="$oc_uid" + while grep -q "^[^:]*:x:${oc_gid}:" /etc/group 2>/dev/null; do + oc_gid=$((oc_gid + 1)) + done + + echo "openclaw:x:${oc_uid}:${oc_gid}:openclaw:${OC_DATA}:/bin/false" >> /etc/passwd + echo 'openclaw:x:0:0:99999:7:::' >> /etc/shadow + echo "openclaw:x:${oc_gid}:" >> /etc/group + log_info "已创建 openclaw 系统用户 (uid=${oc_uid}, gid=${oc_gid})" +} + +probe_install_root() { + if command -v oc_probe_writable_root >/dev/null 2>&1; then + if ! oc_probe_writable_root "$OC_BASE_PATH"; then + log_error "安装路径不可写: $OC_BASE_PATH" + log_error "常见原因: overlay 已满、文件系统只读、挂载点未挂载或权限不正确。" + local check_path="/" + command -v oc_find_existing_path >/dev/null 2>&1 && check_path=$(oc_find_existing_path "$OC_BASE_PATH") + df -h "$check_path" 2>/dev/null | tail -1 || true + exit 1 + fi + fi +} + +cleanup_partial_install() { + # 只在确认目标是规范化后的 openclaw 运行根目录时清理,避免误删用户目录。 + if command -v oc_safe_openclaw_root >/dev/null 2>&1 && oc_safe_openclaw_root "$OC_INSTALL_PATH"; then + log_warn "安装失败,清理未完成的运行目录: $OC_INSTALL_PATH" + rm -rf "$OC_INSTALL_PATH" 2>/dev/null || true + [ -d /overlay/upper ] && rm -rf "/overlay/upper${OC_INSTALL_PATH}" 2>/dev/null || true + fi +} + # 检测 C 运行时类型 (glibc vs musl) detect_libc() { if ldd --version 2>&1 | grep -qi musl; then @@ -126,6 +191,38 @@ $ver_dir" done } +detect_oc_node_requirement() { + local oc_entry pkg_json required + oc_entry=$(find_oc_entry) + [ -n "$oc_entry" ] || return 1 + pkg_json="$(dirname "$oc_entry")/package.json" + [ -f "$pkg_json" ] || return 1 + [ -x "$NODE_BIN" ] || return 1 + + required=$(OC_PKG_JSON="$pkg_json" "$NODE_BIN" -e " +const fs=require('fs'); +try{ + const pkg=JSON.parse(fs.readFileSync(process.env.OC_PKG_JSON,'utf8')); + const spec=(pkg.engines&&pkg.engines.node)||''; + const m=String(spec).match(/([0-9]+\\.[0-9]+\\.[0-9]+)/); + if(m) process.stdout.write(m[1]); +}catch(e){} +" 2>/dev/null) + [ -n "$required" ] || return 1 + printf '%s\n' "$required" +} + +assert_node_runtime() { + local required="$OC_NODE_MIN_VERSION" + local from_pkg + from_pkg=$(detect_oc_node_requirement 2>/dev/null || true) + [ -n "$from_pkg" ] && required="$from_pkg" + + if command -v oc_assert_node_min_version >/dev/null 2>&1; then + oc_assert_node_min_version "$NODE_BIN" "$required" || exit 1 + fi +} + detect_arch() { local arch arch=$(uname -m) @@ -158,6 +255,7 @@ download_node() { current_ver=$("$NODE_BIN" --version 2>/dev/null | sed 's/^v//') if [ "$current_ver" = "$node_ver" ]; then log_info "Node.js v${node_ver} 已安装, 跳过下载" + assert_node_runtime return 0 fi # ARM64 musl 使用 Alpine 打包,版本号可能不完全匹配 @@ -166,6 +264,7 @@ download_node() { local want_major=$(echo "$node_ver" | cut -d. -f1) if [ "$cur_major" = "$want_major" ]; then log_info "Node.js v${current_ver} 已安装 (兼容 v${node_ver}), 跳过下载" + assert_node_runtime return 0 fi log_warn "当前 Node.js v${current_ver}, 将更新到 v${node_ver}" @@ -273,6 +372,7 @@ download_node() { local installed_ver installed_ver=$("$NODE_BIN" --version 2>/dev/null || echo "unknown") log_info "Node.js ${installed_ver} 安装成功" + assert_node_runtime else log_error "Node.js 安装验证失败" exit 1 @@ -309,12 +409,15 @@ install_openclaw() { # 确定安装版本 local oc_pkg="openclaw" - if [ -n "$OC_VERSION" ]; then + if [ -z "$OC_VERSION" ] || [ "$OC_VERSION" = "stable" ]; then + oc_pkg="openclaw@${OC_TESTED_VERSION}" + log_info "默认稳定版: v${OC_TESTED_VERSION}" + elif [ "$OC_VERSION" = "latest" ]; then + oc_pkg="openclaw@latest" + log_info "安装 npm latest 稳定标签版本" + else oc_pkg="openclaw@${OC_VERSION}" log_info "指定版本: v${OC_VERSION}" - else - oc_pkg="openclaw@latest" - log_info "安装最新版本" fi local libc_type @@ -371,6 +474,7 @@ install_openclaw() { if [ -n "$oc_ver" ]; then log_info "OpenClaw v${oc_ver} 安装成功" + assert_node_runtime else log_error "OpenClaw 安装验证失败" exit 1 @@ -435,16 +539,23 @@ do_setup() { if [ -n "$OC_VERSION" ]; then echo " OpenClaw: v${OC_VERSION} (稳定版)" else - echo " OpenClaw: 最新版" + echo " OpenClaw: v${OC_TESTED_VERSION} (默认稳定版)" fi echo " 安装路径: ${OC_INSTALL_PATH}" echo " 数据路径: ${OC_DATA}" echo "" + ensure_openclaw_user + probe_install_root + OC_SETUP_CLEANUP=1 + trap 'rc=$?; if [ $rc -ne 0 ] && [ "${OC_SETUP_CLEANUP:-0}" = "1" ]; then cleanup_partial_install; fi; exit $rc' EXIT + download_node "$node_ver" install_pnpm install_openclaw init_openclaw + OC_SETUP_CLEANUP=0 + trap - EXIT echo "" echo "╔══════════════════════════════════════════════════════════════╗" @@ -533,7 +644,11 @@ do_upgrade() { echo "=== 正在升级 OpenClaw ===" echo "" - "$NPM_BIN" install -g openclaw@latest --prefix="$OC_GLOBAL" $install_flags 2>&1 + local target_pkg="openclaw@${OC_TESTED_VERSION}" + [ "$OC_VERSION" = "latest" ] && target_pkg="openclaw@latest" + [ -n "$OC_VERSION" ] && [ "$OC_VERSION" != "latest" ] && [ "$OC_VERSION" != "stable" ] && target_pkg="openclaw@${OC_VERSION}" + echo "目标版本: ${target_pkg#openclaw@}" + "$NPM_BIN" install -g "$target_pkg" --prefix="$OC_GLOBAL" $install_flags 2>&1 # 验证升级结果 local new_ver="" @@ -547,6 +662,7 @@ do_upgrade() { echo "" if [ -n "$new_ver" ]; then + assert_node_runtime if [ "$current_ver" = "$new_ver" ]; then log_info "当前已是最新版本 v${new_ver}" else @@ -658,6 +774,9 @@ do_setup_offline() { echo " 离线包: ${offline_dir}" echo "" + ensure_openclaw_user + probe_install_root + # [1] 安装 Node.js local node_tarball="$offline_dir/node.tar.xz" if [ -f "$node_tarball" ]; then @@ -681,6 +800,7 @@ do_setup_offline() { if [ -x "$NODE_BIN" ]; then log_info "Node.js $($NODE_BIN --version 2>/dev/null) 安装成功" + assert_node_runtime else log_error "Node.js 安装失败" exit 1 @@ -705,6 +825,7 @@ do_setup_offline() { if [ -n "$oc_entry" ]; then local oc_ver=$("$NODE_BIN" "$oc_entry" --version 2>/dev/null | tr -d '[:space:]') log_info "OpenClaw v${oc_ver} 安装成功" + assert_node_runtime else log_error "OpenClaw 安装验证失败" exit 1 diff --git a/luci-app-openclaw/root/usr/libexec/openclaw-node.sh b/luci-app-openclaw/root/usr/libexec/openclaw-node.sh new file mode 100755 index 000000000..97c904cdc --- /dev/null +++ b/luci-app-openclaw/root/usr/libexec/openclaw-node.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# OpenClaw Node.js 版本校验工具。 + +oc_normalize_node_version() { + local raw="${1:-}" + raw=${raw#v} + case "$raw" in + [0-9]*.[0-9]*.[0-9]*) printf '%s\n' "$raw"; return 0 ;; + esac + return 1 +} + +oc_read_node_version() { + local node_bin="$1" + local raw + [ -x "$node_bin" ] || return 1 + raw=$("$node_bin" --version 2>/dev/null) || return 1 + oc_normalize_node_version "$raw" +} + +oc_node_version_ge() { + local current required + current=$(oc_normalize_node_version "$1") || return 1 + required=$(oc_normalize_node_version "$2") || return 1 + + awk -v a="$current" -v b="$required" ' + BEGIN { + split(a, av, "."); split(b, bv, "."); + for (i = 1; i <= 3; i++) { + ai = av[i] + 0; bi = bv[i] + 0; + if (ai > bi) exit 0; + if (ai < bi) exit 1; + } + exit 0; + } + ' +} + +oc_assert_node_min_version() { + local node_bin="$1" + local required="$2" + local current + + current=$(oc_read_node_version "$node_bin") || { + echo " [✗] Node.js 不可执行或无法读取版本: $node_bin" + return 1 + } + + if ! oc_node_version_ge "$current" "$required"; then + echo " [✗] Node.js v${current} 低于 OpenClaw 要求 v${required}" + echo " [!] 请重新运行 openclaw-env node 或 openclaw-env setup 更新运行时" + return 1 + fi + + echo " [✓] Node.js v${current} 满足要求 (>= v${required})" + return 0 +} diff --git a/luci-app-openclaw/root/usr/libexec/openclaw-paths.sh b/luci-app-openclaw/root/usr/libexec/openclaw-paths.sh new file mode 100755 index 000000000..a5291acbf --- /dev/null +++ b/luci-app-openclaw/root/usr/libexec/openclaw-paths.sh @@ -0,0 +1,111 @@ +#!/bin/sh +# luci-app-openclaw 统一路径解析工具 +# +# 为什么单独抽出来: +# OpenClaw 的安装根目录会被 init、openclaw-env、Web PTY、LuCI 控制器等多处使用。 +# 如果每处都自己拼路径,用户输入 /mnt/data/openclaw 时就容易得到 +# /mnt/data/openclaw/openclaw 这种错误路径,后续权限修复和卸载也会变得危险。 + +oc_normalize_install_path() { + local raw="${1:-}" + + # 空值统一回到 /opt,保持历史兼容。 + [ -n "$raw" ] || raw="/opt" + + # 去掉首尾空白和末尾斜杠。OpenWrt busybox sed 支持基础表达式。 + raw=$(printf '%s' "$raw" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//;s:/*$::') + [ -n "$raw" ] || raw="/" + + case "$raw" in + /*) ;; + *) return 1 ;; + esac + + case "$raw" in + *[\ \ ]*|*\'*|*\"*|*\`*|*\$*|*\;*|*\&*|*\|*|*\<*|*\>*|*\(*|*\)*) + return 1 + ;; + esac + + case "$raw" in + /|/proc|/proc/*|/sys|/sys/*|/dev|/dev/*|/tmp|/tmp/*|/var|/var/*|/etc|/etc/*|/usr|/usr/*|/bin|/bin/*|/sbin|/sbin/*|/lib|/lib/*|/rom|/rom/*|/overlay|/overlay/*) + return 1 + ;; + esac + + # 用户如果填写的是实际运行目录 /xxx/openclaw,这里回退到根目录 /xxx。 + case "$raw" in + */openclaw) + raw=${raw%/openclaw} + [ -n "$raw" ] || raw="/" + ;; + esac + + printf '%s\n' "$raw" +} + +oc_quote() { + # POSIX 单引号转义,用于拼接少量必须经 shell 执行的命令。 + printf "'%s'" "$(printf '%s' "$1" | sed "s/'/'\\\\''/g")" +} + +oc_load_paths() { + local input="${1:-}" + local normalized + + normalized=$(oc_normalize_install_path "$input") || return 1 + + OPENCLAW_INSTALL_PATH="$normalized" + if [ "$OPENCLAW_INSTALL_PATH" = "/" ]; then + OC_ROOT="/openclaw" + else + OC_ROOT="${OPENCLAW_INSTALL_PATH}/openclaw" + fi + NODE_BASE="${OC_ROOT}/node" + OC_GLOBAL="${OC_ROOT}/global" + OC_DATA="${OC_ROOT}/data" + CONFIG_FILE="${OC_DATA}/.openclaw/openclaw.json" + + export OPENCLAW_INSTALL_PATH OC_ROOT NODE_BASE OC_GLOBAL OC_DATA CONFIG_FILE +} + +oc_find_existing_path() { + local path="$1" + while [ -n "$path" ] && [ "$path" != "/" ]; do + [ -e "$path" ] && { printf '%s\n' "$path"; return 0; } + path=${path%/*} + done + printf '/\n' +} + +oc_probe_writable_root() { + local base="$1" + local probe_parent + local probe_dir + + probe_parent=$(oc_find_existing_path "$base") + [ -d "$probe_parent" ] || return 1 + [ -w "$probe_parent" ] || return 1 + + probe_dir="${probe_parent}/.openclaw-write-test-$$" + if mkdir "$probe_dir" 2>/dev/null; then + rmdir "$probe_dir" 2>/dev/null || true + return 0 + fi + + return 1 +} + +oc_safe_openclaw_root() { + local root="${1:-}" + case "$root" in + */openclaw) ;; + *) return 1 ;; + esac + case "$root" in + /openclaw|/opt/openclaw|/mnt/*/openclaw|/media/*/openclaw|/srv/*/openclaw|/overlay/upper/opt/openclaw) + return 0 + ;; + esac + return 1 +} diff --git a/luci-app-openclaw/root/usr/share/openclaw/oc-config.sh b/luci-app-openclaw/root/usr/share/openclaw/oc-config.sh index be613f072..1cb5b5a3f 100755 --- a/luci-app-openclaw/root/usr/share/openclaw/oc-config.sh +++ b/luci-app-openclaw/root/usr/share/openclaw/oc-config.sh @@ -33,10 +33,20 @@ get_pid_by_port() { } # ── 路径 (OpenWrt 适配,支持自定义安装路径) ── -# 从 UCI 配置读取自定义路径,环境变量可覆盖 -# 用户配置的是基础路径,程序会在此路径下创建 openclaw 目录 -OC_BASE_PATH="${OC_INSTALL_PATH:-$(uci -q get openclaw.main.install_path 2>/dev/null || echo '/opt')}" -OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" +# 从 UCI 配置读取自定义路径,环境变量可覆盖。 +# 注意 OC_INSTALL_PATH 历史上被当作“基础路径”传入,统一解析后再展开到 openclaw 根目录。 +[ -r /usr/libexec/openclaw-paths.sh ] && . /usr/libexec/openclaw-paths.sh +OC_CONFIGURED_PATH="${OC_INSTALL_PATH:-$(uci -q get openclaw.main.install_path 2>/dev/null || echo '/opt')}" +if command -v oc_load_paths >/dev/null 2>&1 && oc_load_paths "$OC_CONFIGURED_PATH"; then + OC_INSTALL_PATH="$OC_ROOT" +else + OC_BASE_PATH="${OC_CONFIGURED_PATH%/}" + OC_INSTALL_PATH="${OC_BASE_PATH}/openclaw" + NODE_BASE="${NODE_BASE:-${OC_INSTALL_PATH}/node}" + OC_GLOBAL="${OC_GLOBAL:-${OC_INSTALL_PATH}/global}" + OC_DATA="${OC_DATA:-${OC_INSTALL_PATH}/data}" + CONFIG_FILE="${OC_DATA}/.openclaw/openclaw.json" +fi NODE_BASE="${NODE_BASE:-${OC_INSTALL_PATH}/node}" OC_GLOBAL="${OC_GLOBAL:-${OC_INSTALL_PATH}/global}" OC_DATA="${OC_DATA:-${OC_INSTALL_PATH}/data}" diff --git a/luci-app-openclaw/root/usr/share/openclaw/web-pty.js b/luci-app-openclaw/root/usr/share/openclaw/web-pty.js index ff360cfe3..b1b86deac 100644 --- a/luci-app-openclaw/root/usr/share/openclaw/web-pty.js +++ b/luci-app-openclaw/root/usr/share/openclaw/web-pty.js @@ -19,10 +19,19 @@ const PORT = parseInt(process.env.OC_CONFIG_PORT || '18793', 10); const HOST = process.env.OC_CONFIG_HOST || '0.0.0.0'; // token 认证保护,可安全绑定所有接口 // 从 UCI 读取安装路径,默认为 /opt/openclaw const { execSync } = require('child_process'); +function normalizeInstallPath(raw) { + let value = String(raw || '').trim().replace(/\/+$/, ''); + if (!value) value = '/opt'; + if (!value.startsWith('/')) return '/opt'; + if (/[\s'"`$;&|<>()]/.test(value)) return '/opt'; + if (/^\/(proc|sys|dev|tmp|var|etc|usr|bin|sbin|lib|rom|overlay)(\/|$)/.test(value) || value === '/') return '/opt'; + if (value.endsWith('/openclaw')) value = value.slice(0, -'/openclaw'.length) || '/opt'; + return value; +} let installPath = '/opt/openclaw'; try { const uciPath = execSync('uci -q get openclaw.main.install_path 2>/dev/null', { encoding: 'utf8', timeout: 3000 }).trim(); - if (uciPath) installPath = uciPath + '/openclaw'; + if (uciPath) installPath = normalizeInstallPath(uciPath) + '/openclaw'; } catch {} const NODE_BASE = process.env.NODE_BASE || installPath + '/node'; const OC_GLOBAL = process.env.OC_GLOBAL || installPath + '/global'; diff --git a/luci-app-openclaw/root/usr/share/rpcd/acl.d/luci-app-openclaw.json b/luci-app-openclaw/root/usr/share/rpcd/acl.d/luci-app-openclaw.json index 9b77cf70f..2c06c05ee 100644 --- a/luci-app-openclaw/root/usr/share/rpcd/acl.d/luci-app-openclaw.json +++ b/luci-app-openclaw/root/usr/share/rpcd/acl.d/luci-app-openclaw.json @@ -1,11 +1,17 @@ { "luci-app-openclaw": { - "description": "Grant UCI access for luci-app-openclaw", + "description": "Grant access to the OpenClaw LuCI application", "read": { - "uci": [ "openclaw" ] + "uci": [ "openclaw" ], + "ubus": { + "service": [ "list" ] + } }, "write": { - "uci": [ "openclaw" ] + "uci": [ "openclaw" ], + "ubus": { + "service": [ "list", "set", "delete" ] + } } } } diff --git a/luci-app-openclaw/scripts/build_ipk.sh b/luci-app-openclaw/scripts/build_ipk.sh index 70d5aa582..83942a041 100755 --- a/luci-app-openclaw/scripts/build_ipk.sh +++ b/luci-app-openclaw/scripts/build_ipk.sh @@ -51,10 +51,19 @@ mkdir -p "$DATA_DIR/usr/bin" cp "$PKG_DIR/root/usr/bin/openclaw-env" "$DATA_DIR/usr/bin/" chmod +x "$DATA_DIR/usr/bin/openclaw-env" +# shared shell helpers +mkdir -p "$DATA_DIR/usr/libexec" +cp "$PKG_DIR/root/usr/libexec/"*.sh "$DATA_DIR/usr/libexec/" +chmod +x "$DATA_DIR/usr/libexec/"*.sh + # LuCI controller mkdir -p "$DATA_DIR/usr/lib/lua/luci/controller" cp "$PKG_DIR/luasrc/controller/openclaw.lua" "$DATA_DIR/usr/lib/lua/luci/controller/" +# shared Lua helpers +mkdir -p "$DATA_DIR/usr/lib/lua/openclaw" +cp "$PKG_DIR/luasrc/openclaw/"*.lua "$DATA_DIR/usr/lib/lua/openclaw/" + # LuCI CBI mkdir -p "$DATA_DIR/usr/lib/lua/luci/model/cbi/openclaw" cp "$PKG_DIR/luasrc/model/cbi/openclaw/"*.lua "$DATA_DIR/usr/lib/lua/luci/model/cbi/openclaw/" @@ -63,6 +72,10 @@ cp "$PKG_DIR/luasrc/model/cbi/openclaw/"*.lua "$DATA_DIR/usr/lib/lua/luci/model/ mkdir -p "$DATA_DIR/usr/lib/lua/luci/view/openclaw" cp "$PKG_DIR/luasrc/view/openclaw/"*.htm "$DATA_DIR/usr/lib/lua/luci/view/openclaw/" +# rpcd ACL +mkdir -p "$DATA_DIR/usr/share/rpcd/acl.d" +cp "$PKG_DIR/root/usr/share/rpcd/acl.d/"*.json "$DATA_DIR/usr/share/rpcd/acl.d/" + # oc-config assets mkdir -p "$DATA_DIR/usr/share/openclaw" cp "$PKG_DIR/VERSION" "$DATA_DIR/usr/share/openclaw/VERSION" @@ -78,12 +91,6 @@ mkdir -p "$DATA_DIR/etc/profile.d" cp "$PKG_DIR/root/etc/profile.d/openclaw.sh" "$DATA_DIR/etc/profile.d/" chmod +x "$DATA_DIR/etc/profile.d/openclaw.sh" -# i18n (po2lmo 可选) -mkdir -p "$DATA_DIR/usr/lib/lua/luci/i18n" -if command -v po2lmo >/dev/null 2>&1 && [ -f "$PKG_DIR/po/zh-cn/openclaw.po" ]; then - po2lmo "$PKG_DIR/po/zh-cn/openclaw.po" "$DATA_DIR/usr/lib/lua/luci/i18n/openclaw.zh-cn.lmo" 2>/dev/null || true -fi - # 计算安装大小 INSTALLED_SIZE=$(du -sk "$DATA_DIR" | awk '{print $1}') @@ -132,6 +139,7 @@ cat > "$CTRL_DIR/postinst" << 'EOF' USER_BIND=$(sed -n "s/^\s*option\s\+bind\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1) USER_TOKEN=$(sed -n "s/^\s*option\s\+token\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1) USER_PTY_PORT=$(sed -n "s/^\s*option\s\+pty_port\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1) + USER_INSTALL_PATH=$(sed -n "s/^\s*option\s\+install_path\s\+['\"]\\?\\([^'\"]*\\)['\"]\\?.*/\\1/p" "$OLD_CONFIG" 2>/dev/null | tail -1) # 步骤2: 备份旧配置 (带时间戳) BAK_FILE="/etc/config/openclaw.$(date +%Y%m%d%H%M%S).bak" @@ -149,6 +157,7 @@ cat > "$CTRL_DIR/postinst" << 'EOF' [ -n "$USER_BIND" ] && sed -i "s/^\(\s*option\s\+bind\s\+\).*/\\1'$USER_BIND'/" "$OLD_CONFIG" 2>/dev/null || true [ -n "$USER_TOKEN" ] && sed -i "s/^\(\s*option\s\+token\s\+\).*/\\1'$USER_TOKEN'/" "$OLD_CONFIG" 2>/dev/null || true [ -n "$USER_PTY_PORT" ] && sed -i "s/^\(\s*option\s\+pty_port\s\+\).*/\\1'$USER_PTY_PORT'/" "$OLD_CONFIG" 2>/dev/null || true + [ -n "$USER_INSTALL_PATH" ] && sed -i "s/^\(\s*option\s\+install_path\s\+\).*/\\1'$USER_INSTALL_PATH'/" "$OLD_CONFIG" 2>/dev/null || true echo "配置合并完成,用户设置已保留" fi diff --git a/luci-app-openclaw/scripts/build_run.sh b/luci-app-openclaw/scripts/build_run.sh index 2133a7483..acec47450 100755 --- a/luci-app-openclaw/scripts/build_run.sh +++ b/luci-app-openclaw/scripts/build_run.sh @@ -54,10 +54,19 @@ install_files() { cp "$PKG_DIR/root/usr/bin/openclaw-env" "$dest/usr/bin/" chmod +x "$dest/usr/bin/openclaw-env" + # shared shell helpers + mkdir -p "$dest/usr/libexec" + cp "$PKG_DIR/root/usr/libexec/"*.sh "$dest/usr/libexec/" + chmod +x "$dest/usr/libexec/"*.sh + # LuCI controller mkdir -p "$dest/usr/lib/lua/luci/controller" cp "$PKG_DIR/luasrc/controller/openclaw.lua" "$dest/usr/lib/lua/luci/controller/" + # shared Lua helpers + mkdir -p "$dest/usr/lib/lua/openclaw" + cp "$PKG_DIR/luasrc/openclaw/"*.lua "$dest/usr/lib/lua/openclaw/" + # LuCI CBI mkdir -p "$dest/usr/lib/lua/luci/model/cbi/openclaw" cp "$PKG_DIR/luasrc/model/cbi/openclaw/"*.lua "$dest/usr/lib/lua/luci/model/cbi/openclaw/" @@ -66,6 +75,10 @@ install_files() { mkdir -p "$dest/usr/lib/lua/luci/view/openclaw" cp "$PKG_DIR/luasrc/view/openclaw/"*.htm "$dest/usr/lib/lua/luci/view/openclaw/" + # rpcd ACL + mkdir -p "$dest/usr/share/rpcd/acl.d" + cp "$PKG_DIR/root/usr/share/rpcd/acl.d/"*.json "$dest/usr/share/rpcd/acl.d/" + # oc-config assets mkdir -p "$dest/usr/share/openclaw" cp "$PKG_DIR/VERSION" "$dest/usr/share/openclaw/VERSION" diff --git a/luci-app-openclaw/tests/test_openclaw_contracts.sh b/luci-app-openclaw/tests/test_openclaw_contracts.sh new file mode 100755 index 000000000..7ca1e4baa --- /dev/null +++ b/luci-app-openclaw/tests/test_openclaw_contracts.sh @@ -0,0 +1,41 @@ +#!/bin/sh +set -eu + +fail() { + echo "FAIL: $1" >&2 + exit 1 +} + +grep -q "OC_TESTED_VERSION=\"2026.5.12\"" root/usr/bin/openclaw-env || fail "tested OpenClaw version not pinned" +grep -q "oc_assert_node_min_version" root/usr/bin/openclaw-env || fail "Node.js minimum version check missing" + +grep -q "wechat.htm" Makefile || fail "Makefile must install wechat.htm" +grep -q "luci-app-openclaw.json" Makefile || fail "Makefile must install rpcd ACL" +if grep -q "openclaw.zh-cn.lmo" Makefile; then + fail "main package must not install openclaw.zh-cn.lmo" +fi + +if grep -q 'export HOME="$OC_DATA"' root/etc/profile.d/openclaw.sh; then + fail "profile must not export HOME globally" +fi +grep -q 'HOME="$OC_DATA"' root/etc/profile.d/openclaw.sh || fail "openclaw wrapper must inject HOME locally" + +if grep -q "chmod -R 777" luasrc/controller/openclaw.lua; then + fail "uninstall path must not chmod -R 777" +fi +grep -q "is_safe_openclaw_root" luasrc/controller/openclaw.lua || fail "uninstall safety check missing" +grep -q "local q_install_path = shellquote(install_path)" luasrc/controller/openclaw.lua || fail "uninstall rm must shellquote install_path" +grep -q "rm -rf \" .. q_install_path" luasrc/controller/openclaw.lua || fail "uninstall rm must use quoted install_path" + +grep -q "command -v python3" luasrc/controller/openclaw.lua || fail "wechat install must check python3" +grep -q "ensure_openclaw_user" luasrc/controller/openclaw.lua || fail "wechat install must ensure openclaw user" +grep -q "NPM_CONFIG_CACHE" luasrc/controller/openclaw.lua || fail "wechat install must set npm cache" +grep -q "openclaw-weixin" root/etc/init.d/openclaw || fail "weixin channel migration missing" + +grep -q "var url = 'http://'" luasrc/view/openclaw/console.htm || fail "console must force HTTP gateway URL" +grep -q "existing.src" luasrc/view/openclaw/console.htm || fail "console iframe must refresh token URL" + +grep -q "root/usr/libexec" scripts/build_ipk.sh || fail "ipk script must package shell helpers" +grep -q "root/usr/libexec" scripts/build_run.sh || fail "run script must package shell helpers" + +echo "ok" diff --git a/luci-app-openclaw/tests/test_openclaw_node.sh b/luci-app-openclaw/tests/test_openclaw_node.sh new file mode 100755 index 000000000..e681e6c2c --- /dev/null +++ b/luci-app-openclaw/tests/test_openclaw_node.sh @@ -0,0 +1,19 @@ +#!/bin/sh +set -eu + +. ./root/usr/libexec/openclaw-node.sh + +fail() { + echo "FAIL: $1" >&2 + exit 1 +} + +[ "$(oc_normalize_node_version v22.16.0)" = "22.16.0" ] || fail "normalize v" +oc_node_version_ge 22.16.0 22.16.0 || fail "exact version" +oc_node_version_ge 22.16.1 22.16.0 || fail "patch version" +oc_node_version_ge 23.0.0 22.16.0 || fail "major version" +if oc_node_version_ge 22.15.1 22.16.0; then + fail "older minor accepted" +fi + +echo "ok" diff --git a/luci-app-openclaw/tests/test_openclaw_paths.lua b/luci-app-openclaw/tests/test_openclaw_paths.lua new file mode 100644 index 000000000..469b2f91f --- /dev/null +++ b/luci-app-openclaw/tests/test_openclaw_paths.lua @@ -0,0 +1,32 @@ +package.path = "./luasrc/?.lua;./luasrc/?/?.lua;" .. package.path + +local paths = require "openclaw.paths" + +local function eq(actual, expected, label) + if actual ~= expected then + error(string.format("%s: expected %q, got %q", label, tostring(expected), tostring(actual)), 2) + end +end + +local function check(input, expected_base, expected_root) + local derived = paths.derive_paths(input) + eq(derived.install_path, expected_base, "install_path") + eq(derived.oc_root, expected_root, "oc_root") + eq(derived.node_base, expected_root .. "/node", "node_base") + eq(derived.oc_global, expected_root .. "/global", "oc_global") + eq(derived.oc_data, expected_root .. "/data", "oc_data") +end + +check(nil, "/opt", "/opt/openclaw") +check("", "/opt", "/opt/openclaw") +check("/mnt/data", "/mnt/data", "/mnt/data/openclaw") +check("/mnt/data/openclaw", "/mnt/data", "/mnt/data/openclaw") +check("/mnt/data/", "/mnt/data", "/mnt/data/openclaw") + +eq(paths.normalize_install_path("relative/path"), nil, "relative path rejected") +eq(paths.normalize_install_path("/mnt/data bad"), nil, "space rejected") +eq(paths.normalize_install_path("/"), nil, "root rejected") +eq(paths.is_safe_openclaw_root("/mnt/data/openclaw"), true, "safe root") +eq(paths.is_safe_openclaw_root("/mnt/data"), false, "unsafe root") + +print("ok") diff --git a/luci-app-openclaw/tests/test_openclaw_paths.sh b/luci-app-openclaw/tests/test_openclaw_paths.sh new file mode 100755 index 000000000..3a14dc044 --- /dev/null +++ b/luci-app-openclaw/tests/test_openclaw_paths.sh @@ -0,0 +1,31 @@ +#!/bin/sh +set -eu + +. ./root/usr/libexec/openclaw-paths.sh + +fail() { + echo "FAIL: $1" >&2 + exit 1 +} + +oc_load_paths "/mnt/data/openclaw" +[ "$OPENCLAW_INSTALL_PATH" = "/mnt/data" ] || fail "strip trailing openclaw" +[ "$OC_ROOT" = "/mnt/data/openclaw" ] || fail "derive root" + +if oc_normalize_install_path "relative/path" >/dev/null 2>&1; then + fail "relative path must be rejected" +fi + +if oc_normalize_install_path "/mnt/data bad" >/dev/null 2>&1; then + fail "path with whitespace must be rejected" +fi + +oc_safe_openclaw_root "/mnt/data/openclaw" || fail "safe root rejected" +if oc_safe_openclaw_root "/mnt/data"; then + fail "non-openclaw root accepted" +fi + +quoted=$(oc_quote "/mnt/a'b/openclaw") +[ "$quoted" = "'/mnt/a'\\''b/openclaw'" ] || fail "shell quote" + +echo "ok" diff --git a/luci-theme-aurora/.dev/package.json b/luci-theme-aurora/.dev/package.json index 3a70caa1a..970b5bcd5 100644 --- a/luci-theme-aurora/.dev/package.json +++ b/luci-theme-aurora/.dev/package.json @@ -15,6 +15,7 @@ "tailwind-scrollbar": "^4.0.2", "tailwindcss": "^4.1.11", "terser": "^5.43.1", + "tw-animate-css": "^1.4.0", "vite": "^7.1.1" }, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be" diff --git a/luci-theme-aurora/.dev/pnpm-lock.yaml b/luci-theme-aurora/.dev/pnpm-lock.yaml index 5591d2f1d..36bcc5e85 100644 --- a/luci-theme-aurora/.dev/pnpm-lock.yaml +++ b/luci-theme-aurora/.dev/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: terser: specifier: ^5.43.1 version: 5.46.0 + tw-animate-css: + specifier: ^1.4.0 + version: 1.4.0 vite: specifier: ^7.1.1 version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0) @@ -244,66 +247,79 @@ packages: resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.57.1': resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.57.1': resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.57.1': resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.57.1': resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.57.1': resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.57.1': resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.57.1': resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.57.1': resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.57.1': resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.57.1': resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.57.1': resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.57.1': resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.57.1': resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} @@ -373,24 +389,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-arm64-musl@4.1.18': resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@tailwindcss/oxide-linux-x64-gnu@4.1.18': resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@tailwindcss/oxide-linux-x64-musl@4.1.18': resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@tailwindcss/oxide-wasm32-wasi@4.1.18': resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} @@ -518,24 +538,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.30.2: resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.30.2: resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.30.2: resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.30.2: resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} @@ -679,6 +703,9 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tw-animate-css@1.4.0: + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} + undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} @@ -1174,6 +1201,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 + tw-animate-css@1.4.0: {} + undici-types@7.16.0: {} vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.46.0): diff --git a/luci-theme-aurora/.dev/src/media/main.css b/luci-theme-aurora/.dev/src/media/main.css index 4b5d1d53d..a0f4bfed8 100644 --- a/luci-theme-aurora/.dev/src/media/main.css +++ b/luci-theme-aurora/.dev/src/media/main.css @@ -11,6 +11,8 @@ nocompatible: true; } +@import "tw-animate-css"; + :root { --background: oklch(0.968 0.007 247.896); --foreground: oklch(0.208 0.042 265.755); @@ -75,6 +77,7 @@ --spacing: 0.25rem; --container-max-width: 80rem; + --radius-base: 0.5rem; } [data-darkmode="true"] { @@ -206,6 +209,15 @@ --spacing: var(--spacing); --container-max-width: var(--container-max-width); + + --radius-sm: calc(var(--radius-base) * 0.25); + --radius: calc(var(--radius-base) * 0.5); + --radius-md: calc(var(--radius-base) * 0.75); + --radius-lg: var(--radius-base); + --radius-xl: calc(var(--radius-base) * 1.5); + --radius-2xl: calc(var(--radius-base) * 2); + --radius-3xl: calc(var(--radius-base) * 3); + --radius-4xl: calc(var(--radius-base) * 4); } @layer base { @@ -434,7 +446,7 @@ @apply max-w-max-width mx-auto min-h-[calc(100vh-4rem)] w-23/24 px-4 max-md:w-full max-md:px-3; #view { - @apply md:border-border/30 md:bg-page-bg md:hover:border-border/50 mx-0 w-full p-0 shadow-none transition-all duration-300 empty:hidden md:rounded-4xl md:border md:p-6 md:shadow-xl md:hover:shadow-2xl; + @apply animate-in fade-in-0 slide-in-from-top-2 fill-mode-both md:border-border/30 md:bg-page-bg md:hover:border-border/50 mx-0 w-full p-0 shadow-none transition-all duration-300 empty:hidden md:rounded-4xl md:border md:p-6 md:shadow-xl md:hover:shadow-2xl; .cbi-title-section { @apply mb-6 leading-relaxed max-md:mx-2 max-md:mb-3; @@ -1949,7 +1961,7 @@ @apply relative inline-block pl-8!; @apply before:absolute before:top-1/2 before:left-[6px] before:size-5 before:-translate-y-1/2 before:animate-spin before:bg-current before:[mask:url('@assets/icons/spinning.svg')_center/cover_no-repeat]; #view > & { - @apply first:mx-auto first:grid first:min-h-[15vh] first:w-fit first:place-items-center first:max-md:min-h-dvh; + @apply first:mx-auto first:grid first:min-h-48 first:w-fit first:place-items-center first:max-md:min-h-[calc(100dvh-4rem)]; } } } diff --git a/luci-theme-aurora/.gitignore b/luci-theme-aurora/.gitignore index a06a1a0c6..ee766b2af 100644 --- a/luci-theme-aurora/.gitignore +++ b/luci-theme-aurora/.gitignore @@ -7,4 +7,7 @@ yarn.lock .env # System Configuration File -.DS_Store \ No newline at end of file +.DS_Store + +# Superpowers AI workflow docs +docs/superpowers/ \ No newline at end of file diff --git a/luci-theme-aurora/Makefile b/luci-theme-aurora/Makefile index 61eb12c5d..4ba91992d 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.11.5 -PKG_RELEASE:=8 +PKG_VERSION:=0.11.7 +PKG_RELEASE:=9 PKG_LICENSE:=Apache-2.0 LUCI_MINIFY_CSS:= diff --git a/luci-theme-aurora/README.md b/luci-theme-aurora/README.md index 705ba7a06..6832490da 100644 --- a/luci-theme-aurora/README.md +++ b/luci-theme-aurora/README.md @@ -19,16 +19,6 @@ Multi-Device Showcase -> [!NOTE] -> **🤖 Exploring AI Workflows...** -> -> Hey everyone — I've been pretty busy with work lately, so my time for Aurora has been limited. But I don't want the project to stall, so I've been exploring AI-assisted workflows to help pick up the slack, especially on the debugging side. -> -> There's a backlog of open issues right now, and honestly, most of them are styling compatibility problems with third-party plugins. These aren't huge issues individually, but they're incredibly time-consuming to track down — you have to install the plugin, sometimes set up specific conditions on the router just to reproduce the problem. -> -> The root cause is that LuCI only provides a basic set of web components. When plugin authors need more complex UI, they end up rolling their own HTML/CSS/JS with no shared conventions, so compatibility headaches are inevitable. With the sheer number of LuCI plugins out there, getting them all to play nicely is a massive undertaking — especially when some plugins don't even follow LuCI's own JS conventions. -> -> So I'm bringing AI into the loop to handle these tedious but important tasks, and ideally automate as much of it as possible. If you have better ideas or suggestions, I'd love to hear them — come chat on [Discord](https://discord.gg/EBncRrzfTw). ## Features @@ -80,36 +70,16 @@ OpenWrt 25.12+ and snapshots use `apk`; other versions use `opkg`: ## Contributing -
-Development +Aurora uses **Vite** and a modern front-end toolchain, and is experimenting with end-to-end AI integration across the full development workflow. See [Development Documentation](.dev/docs/DEVELOPMENT.md) to get started. Suggestions and PRs are always welcome. -

As we step into 2026, front-end toolchains have become mature and advanced, and modern browsers now support a wide range of exciting new features. Fully embracing the modern front-end ecosystem is at the core of the Aurora theme.

- -

Aurora uses Vite as the build tool.

- - - -

For more development information, see Development Documentation.

- -
- -

Community

- -

I've got a Discord server going - come hang out and chat! 👋 Join Discord

+[discord.gg/EBncRrzfTw](https://discord.gg/EBncRrzfTw) ## License & Credits -This project is licensed under the Apache License 2.0. +[Apache 2.0](LICENSE). Thanks to: -The production build structure is based on the official OpenWrt theme -[luci-theme-bootstrap](https://github.com/openwrt/luci/tree/master/themes/luci-theme-bootstrap). - -Visual style and some implementations are influenced by -[Apple](https://www.apple.com/) and [Vercel](https://vercel.com/). - -The project is developed using a modern front-end stack, including -[Vite](https://vitejs.dev/) and [Tailwind CSS](https://tailwindcss.com/). +- [luci-theme-bootstrap](https://github.com/openwrt/luci/tree/master/themes/luci-theme-bootstrap) +- [Vite](https://vitejs.dev/) +- [Tailwind CSS](https://tailwindcss.com/) +- [Claude Code](https://claude.ai/code) +- [Apple](https://www.apple.com/) and [Vercel](https://vercel.com/) — design inspiration diff --git a/luci-theme-aurora/README_zh.md b/luci-theme-aurora/README_zh.md index 89cb5aa6f..f115e5db1 100644 --- a/luci-theme-aurora/README_zh.md +++ b/luci-theme-aurora/README_zh.md @@ -19,16 +19,6 @@ Multi-Device Showcase -> [!NOTE] -> **🤖 AI 工作流探索中…** -> -> 大家好,最近工作比较忙,能投入到 Aurora 主题的时间有限,但我不希望 Aurora 因此停滞不前,所以最近一直在研究 AI 工作流,希望借助 AI 来分担一部分工作,尤其是调试方面。 -> -> 目前主题积压了不少 issue,其实大部分都是第三方插件的样式兼容问题。这类问题说大不大,但调起来真的很耗时间——你得先装上对应的插件,有时候路由器还得满足特定条件才能复现。 -> -> 归根结底,LuCI 本身只提供了一套基础的 Web 组件,插件作者想实现更复杂的交互,就只能用 HTML + CSS + JS 自行实现,没有统一的规范,各种兼容问题在所难免。LuCI 插件数量庞大,要逐一做好兼容,工作量可想而知——更何况有些插件本身也没有按照 LuCI JS 的规范来开发。 -> -> 所以我希望引入 AI,把这些琐碎但繁重的任务交给它来完成,如果能实现自动化那就更理想了。如果你有更好的建议或想法,欢迎来 [Discord](https://discord.gg/EBncRrzfTw) 聊聊。 ## 特性 @@ -81,33 +71,16 @@ OpenWrt 25.12+ 和 Snapshot 版本使用 `apk`;其他版本使用 `opkg`: ## 加入贡献 -
-关于开发 +Aurora 使用 **Vite** 与现代前端工具链构建,并尝试将 AI 融入开发全链路。详见[开发文档](.dev/docs/DEVELOPMENT.md)。欢迎提交建议或 PR。 -

步入 2026 年,前端工具链已相当成熟先进,并且现代浏览器也支持了很多有趣的新特性。所以全面拥抱现代前端生态是 Aurora 主题的核心理念。

- -

Aurora 使用 Vite 作为构建工具。

- - - -

更多开发信息,请参阅 开发文档。

- -
- -

社区

- -

我建立了一个 Discord 服务器 —— 欢迎来聊天!👋 加入 Discord

+[discord.gg/EBncRrzfTw](https://discord.gg/EBncRrzfTw) ## 许可与致谢 -本项目基于 Apache License 2.0 许可开源。 +[Apache 2.0](LICENSE)。致谢: -生产构建结构基于官方 OpenWrt 主题 [luci-theme-bootstrap](https://github.com/openwrt/luci/tree/master/themes/luci-theme-bootstrap)。 - -视觉风格和部分实现受到 [Apple](https://www.apple.com/) 和 [Vercel](https://vercel.com/) 的影响。 - -本项目使用现代前端技术栈开发,包括 [Vite](https://vitejs.dev/) 和 [Tailwind CSS](https://tailwindcss.com/)。 +- [luci-theme-bootstrap](https://github.com/openwrt/luci/tree/master/themes/luci-theme-bootstrap) +- [Vite](https://vitejs.dev/) +- [Tailwind CSS](https://tailwindcss.com/) +- [Claude Code](https://claude.ai/code) +- [Apple](https://www.apple.com/) 和 [Vercel](https://vercel.com/) — 设计灵感 diff --git a/luci-theme-aurora/htdocs/luci-static/aurora/main.css b/luci-theme-aurora/htdocs/luci-static/aurora/main.css index 3398f6443..6ebd32f33 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-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-md:28rem;--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-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--radius-4xl:2rem;--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}: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:var(--radius-xl);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{background-color:var(--secondary);border-radius:.25rem}@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}*{scrollbar-color:initial;scrollbar-width:initial}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:var(--radius-xl);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:var(--radius-3xl);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:var(--radius-xl);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%;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;transition-duration:.3s}#maincontent #view:empty{display:none}@media (min-width:48rem){#maincontent #view{border-radius:var(--radius-4xl);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-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:var(--radius-3xl);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:all;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:all;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:all;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:all;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,.btn,.cbi-button{cursor:pointer;justify-content:center;align-items:center;gap:calc(var(--spacing)*1.5);border-radius:var(--radius-2xl);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);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;border-width:1px;transition-duration:.2s;display:inline-flex}@media not all and (min-width:48rem){button,.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,.btn,.cbi-button)[disabled]{cursor:not-allowed;opacity:.4}:is(button,.btn,.cbi-button)[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.td :is(button,.btn,.cbi-button){white-space:nowrap;flex:none;width:auto;display:inline-flex}@media not all and (min-width:48rem){.td :is(button,.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:var(--radius-2xl);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);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}: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);content:var(--tw-content);transition-property:all;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}: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:.25rem}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:var(--radius-2xl);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);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}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:var(--radius-2xl);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);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}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);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;align-items:center;transition-duration:.2s;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:var(--radius-2xl);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-lg);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:var(--radius-xl);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:var(--radius-4xl);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:var(--radius-3xl);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:var(--radius-2xl);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:var(--radius-2xl);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:var(--radius-2xl)}.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);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;border-radius:3.40282e38px;transition-duration:.2s;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:var(--radius-xl);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:var(--radius-2xl);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);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-wrap:wrap;transition-duration:.2s;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:var(--radius-2xl);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:var(--radius-2xl);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:var(--radius-2xl);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:var(--radius-3xl);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:var(--radius-2xl);border-top-right-radius:var(--radius-2xl);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: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 not all and (min-width:48rem){.ifacebox .ifacebox-head{border-top-left-radius:var(--radius-3xl);border-top-right-radius:var(--radius-3xl);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:var(--radius-3xl);border-bottom-left-radius:var(--radius-3xl);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:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl);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:var(--radius-3xl);border-bottom-left-radius:var(--radius-3xl)}td :is(.ifacebox .ifacebox-body){border-top-right-radius:var(--radius-3xl);border-bottom-right-radius:var(--radius-3xl);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{transition-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:var(--radius-3xl);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:var(--radius-2xl);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:var(--radius-2xl);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-lg);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:var(--radius-xl);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:var(--radius-xl);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-lg);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: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}}@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: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){.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:all;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:all;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: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}@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:var(--radius-2xl);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:var(--radius-2xl)}}@media not all and (min-width:48rem){:is(table.table,.table) tbody,:is(table.table,.table) .tbody{display:block}}:is(table.table,.table) tr,:is(table.table,.table) .tr{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}@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:var(--radius-2xl)}: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:var(--radius-2xl)}}@media not all and (min-width:48rem){:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child{border-bottom-right-radius:var(--radius-2xl);border-bottom-left-radius:var(--radius-2xl)}}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child[data-title]:before{content:var(--tw-content);border-bottom-left-radius:var(--radius-2xl);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:var(--radius-2xl)}:is(:is(table.table,.table) tr,:is(table.table,.table) .tr):last-child .td:last-child{border-bottom-right-radius:var(--radius-2xl)}}@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:var(--radius-2xl);border-top-right-radius:var(--radius-2xl)}}: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);--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,)}@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:var(--radius-2xl);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);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;-webkit-user-select:text;user-select:text;transition-duration:.2s}@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:var(--radius-xl);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-lg);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:var(--radius-2xl);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);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;background-color:#0000;transition-duration:.2s}@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:var(--radius-xl);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:var(--radius-4xl);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:var(--radius-4xl);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)}.login-screen{min-height:100dvh;padding-inline:calc(var(--spacing)*5);justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.login-screen .login-shell{z-index:10;width:100%;max-width:var(--container-md);align-items:stretch;gap:calc(var(--spacing)*6);flex-direction:column;display:flex;position:relative}.login-screen .login-shell .login-card{border-radius:var(--radius-4xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--panel-bg);padding:calc(var(--spacing)*10);--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-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,);position:relative;overflow:hidden}@media not all and (min-width:48rem){.login-screen .login-shell .login-card{border-radius:var(--radius-3xl);padding:calc(var(--spacing)*6)}}.login-screen .login-shell .login-card .login-brand{align-items:center;gap:calc(var(--spacing)*4);display:flex}.login-screen .login-shell .login-card .login-brand .login-logo{height:calc(var(--spacing)*12);width:calc(var(--spacing)*12);border-radius:var(--radius-2xl);background-color:var(--primary);justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.login-screen .login-shell .login-card .login-brand .login-logo{background-color:color-mix(in oklab,var(--primary)15%,transparent)}}.login-screen .login-shell .login-card .login-brand .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-screen .login-shell .login-card .login-brand .login-logo{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}.login-screen .login-shell .login-card .login-brand .login-logo img{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.login-screen .login-shell .login-card .login-brand .login-title{gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.login-screen .login-shell .login-card .login-brand .login-title .login-hostname{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-screen .login-shell .login-card .login-brand .login-title .login-subtitle{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--default-foreground)}.login-screen .login-shell .login-card .login-divider{margin-block:calc(var(--spacing)*6);--tw-gradient-position:to right;width:100%;height:1px}@supports (background-image:linear-gradient(in lab, red, red)){.login-screen .login-shell .login-card .login-divider{--tw-gradient-position:to right in oklab}}.login-screen .login-shell .login-card .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}@media (min-width:48rem){.login-screen .login-shell .login-card .login-divider{margin-block:calc(var(--spacing)*8)}}.login-screen .login-shell .login-card .login-form{gap:calc(var(--spacing)*6);flex-direction:column;display:flex}@media (min-width:48rem){.login-screen .login-shell .login-card .login-form{gap:calc(var(--spacing)*4)}}.login-screen .login-shell .login-card .login-form .login-fields{gap:calc(var(--spacing)*4);flex-direction:column;display:flex}@media (min-width:48rem){.login-screen .login-shell .login-card .login-form .login-fields{gap:calc(var(--spacing)*5)}}.login-screen .login-shell .login-card .login-form .login-fields .login-field{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-label{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);color:var(--default-foreground);text-transform:uppercase}.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-input{border-radius:var(--radius-2xl);border-style:var(--tw-border-style);border-width:1px;border-color:var(--border);background-color:var(--panel-bg)}@supports (color:color-mix(in lab, red, red)){.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-input{background-color:color-mix(in oklab,var(--panel-bg)70%,transparent)}}.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-input{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)}.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-input:focus{border-color:var(--primary)}@media (min-width:48rem){.login-screen .login-shell .login-card .login-form .login-actions{padding-top:calc(var(--spacing)*4)}}.login-screen .login-shell .login-card .login-form .login-actions .login-submit{width:100%;padding-block:calc(var(--spacing)*2.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.login-screen .login-shell .login-footer{bottom:calc(var(--spacing)*0);--tw-translate-x:calc(calc(1/2*100%)*-1);width:calc(100% - 1.25rem);translate:var(--tw-translate-x)var(--tw-translate-y);padding-bottom:calc(var(--spacing)*4);text-align:center;color:var(--muted-foreground);position:fixed;left:50%}@media not all and (min-width:48rem){.login-screen .login-shell .login-footer{padding-bottom:calc(var(--spacing)*3)}}.login-screen .login-shell .login-footer p{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));white-space:normal}.login-screen .login-shell .login-footer p a{color:var(--primary)}@media (hover:hover){.login-screen .login-shell .login-footer p a:hover{color:var(--primary)}}.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}.hidden{display:none}.table{display:table}.underline{text-decoration-line:underline}@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}.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{place-items:center;width:fit-content;min-height:15vh;margin-inline:auto;display:grid}@media not all and (min-width:48rem){#view>.spinning:first-child{min-height:100dvh}}: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);--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}@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);--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);--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);--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)}}@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}}#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 .title 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 .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)}} +@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-md:28rem;--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;--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}: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}*{scrollbar-color:initial;scrollbar-width:initial}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-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:all;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:all;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:all;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:all;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,.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);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;border-width:1px;transition-duration:.2s;display:inline-flex}@media not all and (min-width:48rem){button,.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,.btn,.cbi-button)[disabled]{cursor:not-allowed;opacity:.4}:is(button,.btn,.cbi-button)[disabled]:where([data-darkmode=true],[data-darkmode=true] *){opacity:.3}.td :is(button,.btn,.cbi-button){white-space:nowrap;flex:none;width:auto;display:inline-flex}@media not all and (min-width:48rem){.td :is(button,.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);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}: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);content:var(--tw-content);transition-property:all;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}: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);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}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);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}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);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;align-items:center;transition-duration:.2s;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);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;border-radius:3.40282e38px;transition-duration:.2s;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);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-wrap:wrap;transition-duration:.2s;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: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 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: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}}@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: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){.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:all;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:all;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: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}@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}}:is(table.table,.table) tr,:is(table.table,.table) .tr{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}@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);--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,)}@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);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;-webkit-user-select:text;user-select:text;transition-duration:.2s}@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);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;background-color:#0000;transition-duration:.2s}@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)}.login-screen{min-height:100dvh;padding-inline:calc(var(--spacing)*5);justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.login-screen .login-shell{z-index:10;width:100%;max-width:var(--container-md);align-items:stretch;gap:calc(var(--spacing)*6);flex-direction:column;display:flex;position:relative}.login-screen .login-shell .login-card{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)*10);--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-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,);position:relative;overflow:hidden}@media not all and (min-width:48rem){.login-screen .login-shell .login-card{border-radius:calc(var(--radius-base)*3);padding:calc(var(--spacing)*6)}}.login-screen .login-shell .login-card .login-brand{align-items:center;gap:calc(var(--spacing)*4);display:flex}.login-screen .login-shell .login-card .login-brand .login-logo{height:calc(var(--spacing)*12);width:calc(var(--spacing)*12);border-radius:calc(var(--radius-base)*2);background-color:var(--primary);justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){.login-screen .login-shell .login-card .login-brand .login-logo{background-color:color-mix(in oklab,var(--primary)15%,transparent)}}.login-screen .login-shell .login-card .login-brand .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-screen .login-shell .login-card .login-brand .login-logo{--tw-ring-color:color-mix(in oklab,var(--primary)20%,transparent)}}.login-screen .login-shell .login-card .login-brand .login-logo img{height:calc(var(--spacing)*6);width:calc(var(--spacing)*6)}.login-screen .login-shell .login-card .login-brand .login-title{gap:calc(var(--spacing)*1);flex-direction:column;display:flex}.login-screen .login-shell .login-card .login-brand .login-title .login-hostname{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-screen .login-shell .login-card .login-brand .login-title .login-subtitle{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--default-foreground)}.login-screen .login-shell .login-card .login-divider{margin-block:calc(var(--spacing)*6);--tw-gradient-position:to right;width:100%;height:1px}@supports (background-image:linear-gradient(in lab, red, red)){.login-screen .login-shell .login-card .login-divider{--tw-gradient-position:to right in oklab}}.login-screen .login-shell .login-card .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}@media (min-width:48rem){.login-screen .login-shell .login-card .login-divider{margin-block:calc(var(--spacing)*8)}}.login-screen .login-shell .login-card .login-form{gap:calc(var(--spacing)*6);flex-direction:column;display:flex}@media (min-width:48rem){.login-screen .login-shell .login-card .login-form{gap:calc(var(--spacing)*4)}}.login-screen .login-shell .login-card .login-form .login-fields{gap:calc(var(--spacing)*4);flex-direction:column;display:flex}@media (min-width:48rem){.login-screen .login-shell .login-card .login-form .login-fields{gap:calc(var(--spacing)*5)}}.login-screen .login-shell .login-card .login-form .login-fields .login-field{gap:calc(var(--spacing)*2);flex-direction:column;display:flex}.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-label{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);color:var(--default-foreground);text-transform:uppercase}.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-input{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)}@supports (color:color-mix(in lab, red, red)){.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-input{background-color:color-mix(in oklab,var(--panel-bg)70%,transparent)}}.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-input{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)}.login-screen .login-shell .login-card .login-form .login-fields .login-field .login-input:focus{border-color:var(--primary)}@media (min-width:48rem){.login-screen .login-shell .login-card .login-form .login-actions{padding-top:calc(var(--spacing)*4)}}.login-screen .login-shell .login-card .login-form .login-actions .login-submit{width:100%;padding-block:calc(var(--spacing)*2.5);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.login-screen .login-shell .login-footer{bottom:calc(var(--spacing)*0);--tw-translate-x:calc(calc(1/2*100%)*-1);width:calc(100% - 1.25rem);translate:var(--tw-translate-x)var(--tw-translate-y);padding-bottom:calc(var(--spacing)*4);text-align:center;color:var(--muted-foreground);position:fixed;left:50%}@media not all and (min-width:48rem){.login-screen .login-shell .login-footer{padding-bottom:calc(var(--spacing)*3)}}.login-screen .login-shell .login-footer p{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));white-space:normal}.login-screen .login-shell .login-footer p a{color:var(--primary)}@media (hover:hover){.login-screen .login-shell .login-footer p a:hover{color:var(--primary)}}.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}.hidden{display:none}.table{display:table}.underline{text-decoration-line:underline}@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}.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)}}@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);--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);--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);--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);--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)}}@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}}#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 .title 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 .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))}}