* { margin: 0; padding: 0; box-sizing: border-box; } [hidden] { display: none !important; } body { width: 100%; min-width: 0; margin: 0; font-family: "Segoe UI", "Microsoft YaHei", sans-serif; background: #1a1a2e; color: #e0e0e0; font-size: 13px; } .container { padding: 16px; display: flex; flex-direction: column; height: 100vh; overflow-y: auto; box-sizing: border-box; } header, .add-section, .current-section, .footer { flex-shrink: 0; } header h1 { font-size: 18px; text-align: center; color: #e94560; margin-bottom: 12px; padding-bottom: 10px; border-bottom: 1px solid #16213e; } .env-bar { margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid #16213e; } .env-label { display: block; font-size: 11px; color: #888; margin-bottom: 4px; } .env-controls { display: flex; gap: 6px; } .env-select { flex: 1; padding: 6px 8px; background: #16213e; border: 1px solid #0f3460; border-radius: 6px; color: #e0e0e0; font-size: 13px; outline: none; cursor: pointer; transition: border-color 0.2s; } .env-select:focus { border-color: #e94560; } .btn-env { flex-shrink: 0; width: 30px; background: #0f3460; border: none; border-radius: 6px; color: #e0e0e0; cursor: pointer; font-size: 14px; transition: background 0.2s; display: flex; align-items: center; justify-content: center; } .btn-env:hover { background: #1a4a8a; } .btn-env-danger:hover { background: #c0392b; } .preset-env-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; } .preset-tag { display: inline-block; padding: 3px 10px; background: #0f3460; border: 1px solid #16213e; border-radius: 12px; color: #a0a0b0; font-size: 11px; cursor: pointer; transition: all 0.2s; } .preset-tag:hover { background: #1a4a8a; color: #e0e0e0; border-color: #e94560; } .header-title { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; } .header-logo { width: 36px; height: 36px; border-radius: 8px; } header .powered-by, .footer .powered-by { text-align: center; color: #e94560; font-size: 12px; font-weight: 600; letter-spacing: 0.5px; } .footer { margin-top: 16px; padding-top: 10px; border-top: 1px solid #16213e; } h2 { font-size: 14px; color: #e94560; margin-bottom: 10px; } .add-section, .current-section { margin-bottom: 20px; } .add-section-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; } .add-section-header h2 { margin-bottom: 0; } /* 添加配置表单收起态:有配置时仅显示入口按钮 */ #addEntryBtn { display: none; } .add-section.collapsed #addEntryBtn { display: block; } .add-section.collapsed .add-section-header, .add-section.collapsed > .form-group, .add-section.collapsed > .advanced-options, .add-section.collapsed > #addBtn { display: none; } .list-section { margin-bottom: 20px; flex: 1 1 auto; display: flex; flex-direction: column; min-height: 0; position: relative; } .list-header { flex-shrink: 0; } /* 内联展开式搜索框:点击搜索图标后向左展开 */ .search-box-inline { align-items: center; gap: 0; background: #16213e; border: 1px solid #0f3460; border-radius: 6px; padding: 0 2px; width: 220px; height: 22px; box-sizing: border-box; overflow: hidden; } .search-box-inline:not([hidden]) { display: flex; } .search-box-inline .btn-icon { padding: 2px; } .search-box-inline input { flex: 1; min-width: 0; background: transparent; border: none; color: #e0e0e0; font-size: 12px; outline: none; padding: 2px 2px; } .search-clear { background: none; border: none; color: #888; cursor: pointer; font-size: 16px; padding: 0 2px; line-height: 1; } .search-clear:hover { color: #e94560; } .form-group { margin-bottom: 12px; } .form-row { display: flex; gap: 12px; margin-bottom: 12px; } .form-group-inline { flex: 1; margin-bottom: 0; display: flex; flex-direction: column; } .form-group-inline label:not(.toggle-switch) { margin-bottom: 4px; } /* 自定义 toggle 开关 */ .toggle-switch { position: relative; display: inline-block; width: 36px; height: 20px; margin: 4px 0; cursor: pointer; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .toggle-slider { position: absolute; inset: 0; background: #0f3460; border-radius: 20px; transition: background 0.2s; } .toggle-slider::before { content: ""; position: absolute; width: 14px; height: 14px; left: 3px; bottom: 3px; background: #e0e0e0; border-radius: 50%; transition: transform 0.2s; } .toggle-switch input:checked + .toggle-slider { background: #e94560; } .toggle-switch input:checked + .toggle-slider::before { transform: translateX(16px); } /* 列表中切换启用状态的按钮 */ .btn-toggle { background: #0f3460; color: #e0e0e0; border: none; border-radius: 4px; padding: 4px 8px; font-size: 11px; cursor: pointer; transition: background 0.2s; } .btn-toggle:hover { background: #1a4a8a; } /* 列表中标签 */ .tag-disabled { display: inline-block; padding: 1px 6px; background: #3a2a2a; color: #c0392b; border-radius: 8px; font-size: 10px; margin-left: 4px; vertical-align: middle; } .tag-delay { display: inline-block; padding: 1px 6px; background: #2a2a3a; color: #f1c40f; border-radius: 8px; font-size: 10px; margin-left: 4px; vertical-align: middle; } .config-disabled { opacity: 0.55; } /* ---------- 锁定界面 ---------- */ .lock-screen { position: fixed; inset: 0; display: flex; align-items: center; justify-content: center; z-index: 9999; } .lock-card { width: 85%; max-width: 320px; padding: 28px 24px; text-align: center; } .lock-logo { width: 56px; height: 56px; border-radius: 12px; margin-bottom: 14px; } .lock-card h2 { color: #e94560; font-size: 20px; margin: 0 0 8px; } .lock-hint { color: #888; font-size: 12px; margin: 0 0 20px; line-height: 1.5; } .lock-card .form-group { text-align: left; margin-bottom: 14px; } .lock-card label { display: block; margin-bottom: 4px; color: #a0a0b0; font-size: 12px; } .lock-card input[type="password"] { width: 100%; padding: 10px 12px; background: #16213e; border: 1px solid #0f3460; border-radius: 6px; color: #e0e0e0; font-size: 14px; outline: none; box-sizing: border-box; } .lock-card input[type="password"]:focus { border-color: #e94560; } .lock-warn { color: #e74c3c; font-size: 12px; min-height: 16px; margin: 8px 0; display: none; } .lock-submit { width: 100%; padding: 10px; font-size: 14px; margin-top: 4px; } .lock-footnote { color: #555; font-size: 10px; margin: 12px 0 0; } /* 锁定按钮 */ .btn-lock { background: #0f3460; border: 1px solid #1a4a8a; color: #e0e0e0; padding: 4px 10px; border-radius: 6px; font-size: 11px; cursor: pointer; margin-left: auto; transition: background 0.2s; } .btn-lock:hover { background: #1a4a8a; } .header-title { display: flex; align-items: center; gap: 8px; justify-content: center; } .btn-lock { position: fixed; top: 8px; right: 8px; z-index: 10; } .form-group label { display: block; margin-bottom: 4px; color: #a0a0b0; font-size: 12px; } .form-group input, .form-group select { width: 100%; padding: 8px 10px; background: #16213e; border: 1px solid #0f3460; border-radius: 6px; color: #e0e0e0; font-size: 13px; outline: none; transition: border-color 0.2s; } .form-group input:focus, .form-group select:focus { border-color: #e94560; } .form-group input::placeholder { color: #555; } .form-group small { display: block; margin-top: 3px; color: #666; font-size: 11px; } .advanced-options { background: #16213e; border: 1px solid #0f3460; border-radius: 6px; padding: 10px 12px; margin-bottom: 12px; } .advanced-options summary { cursor: pointer; color: #a0a0b0; font-size: 12px; user-select: none; list-style: none; font-weight: 500; } .advanced-options summary::-webkit-details-marker { display: none; } .advanced-options summary::before { content: "▶"; color: #e94560; font-size: 10px; margin-right: 10px; transition: transform 0.2s; display: inline-block; } .advanced-options[open] summary::before { content: "▼"; } .advanced-options-body { margin-top: 12px; padding-top: 10px; border-top: 1px dashed #0f3460; } .advanced-options-body p { font-size: 11px; line-height: 1.6; color: #a0a0b0; margin-bottom: 6px; } .advanced-options-body .help-tip { color: #e94560; font-weight: 500; } .advanced-options-body code { background: #0f1d3a; padding: 1px 4px; border-radius: 3px; color: #f1c40f; font-size: 11px; font-family: Consolas, Monaco, monospace; } .advanced-options-body kbd { background: #0f1d3a; border: 1px solid #0f3460; border-radius: 3px; padding: 1px 5px; color: #e0e0e0; font-size: 11px; font-family: Consolas, Monaco, monospace; } .advanced-options-body .icon-arrow { display: inline-block; padding: 1px 5px; background: #0f3460; border-radius: 3px; color: #e94560; font-size: 11px; } .advanced-options-body .rule-tag { display: inline-block; padding: 1px 5px; margin: 0 2px; background: #0f1d3a; border: 1px solid #0f3460; border-radius: 3px; color: #f1c40f; font-size: 11px; font-family: Consolas, Monaco, monospace; } .selector-tutorial { margin: 8px 0 10px; padding: 8px 10px; background: rgba(15, 52, 96, 0.25); border-left: 3px solid #0f3460; border-radius: 4px; } .password-wrapper { display: flex; gap: 6px; } .password-wrapper input { flex: 1; } .domain-wrapper { display: flex; gap: 6px; } .domain-wrapper input { flex: 1; } .btn-fill-domain { padding: 8px 12px; background: #0f3460; border: none; border-radius: 6px; color: #e0e0e0; cursor: pointer; font-size: 12px; white-space: nowrap; transition: background 0.2s; } .btn-fill-domain:hover { background: #1a4a8a; } .toggle-pwd { padding: 6px 10px; background: #0f3460; border: none; border-radius: 6px; color: #e0e0e0; cursor: pointer; font-size: 16px; line-height: 1; white-space: nowrap; transition: background 0.2s; } .toggle-pwd:hover { background: #1a4a8a; } .toggle-pwd.eye-open { /* 睁眼:默认显示密码为隐藏(小圆点)状态,眼睛图标提示可点击查看 */ } .toggle-pwd.eye-closed { /* 闭眼:当前已显示明文,再点会切回隐藏 */ } .btn-primary, .btn-secondary, .btn-danger, .btn-edit { padding: 8px 14px; border: none; border-radius: 6px; cursor: pointer; font-size: 13px; font-weight: 600; transition: opacity 0.2s; } .btn-primary { width: 100%; background: #e94560; color: #fff; } .btn-primary:hover { opacity: 0.85; } .btn-secondary { width: 100%; background: #0f3460; color: #e0e0e0; } .btn-secondary:hover { opacity: 0.85; } .btn-danger { background: #c0392b; color: #fff; padding: 4px 10px; font-size: 11px; } .btn-edit { background: #0f3460; color: #e0e0e0; padding: 4px 10px; font-size: 11px; } .config-list { flex: 1 1 auto; min-height: 0; overflow-y: auto; max-height: none; } .list-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; } .list-header h2 { margin-bottom: 0; } .list-actions { display: flex; align-items: center; gap: 6px; } .btn-io { padding: 4px 1px; background: transparent; border: none; border-radius: 6px; color: #e0e0e0; cursor: pointer; font-size: 11px; transition: background 0.2s; } .btn-io:hover { background: #0f3460; } .config-item { background: #16213e; border: 1px solid #0f3460; border-radius: 8px; padding: 10px 12px; margin-bottom: 8px; display: flex; justify-content: space-between; align-items: center; gap: 8px; cursor: pointer; } .config-item:hover { border-color: #e94560; } .config-info { flex: 1; min-width: 0; } .config-domain { font-weight: 600; color: #e94560; font-size: 13px; word-break: break-all; } .config-domain-sub { color: #888; font-size: 11px; word-break: break-all; margin-top: 2px; } .config-detail { color: #888; font-size: 11px; margin-top: 3px; } .config-actions { display: flex; gap: 4px; flex-shrink: 0; position: relative; } .btn-icon { background: transparent; border: none; color: #a0a0b0; cursor: pointer; padding: 4px 6px; border-radius: 6px; display: flex; align-items: center; justify-content: center; line-height: 0; transition: background 0.2s, color 0.2s; } .btn-icon:hover { background: #0f3460; color: #e94560; } .config-menu { position: absolute; top: 100%; right: 0; margin-top: 4px; background: #1a1a2e; border: 1px solid #0f3460; border-radius: 8px; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.45); min-width: 120px; display: none; z-index: 100; overflow: hidden; } .config-menu.open { display: block; } .config-menu-item { display: block; width: 100%; text-align: left; background: transparent; border: none; color: #e0e0e0; cursor: pointer; padding: 8px 14px; font-size: 12px; white-space: nowrap; } .config-menu-item:hover { background: #0f3460; } .config-menu-item.danger { color: #e94560; } .config-menu-item.danger:hover { background: #3a0f1a; } .empty-msg { text-align: center; color: #555; padding: 20px; font-size: 13px; } /* 空状态:缺省图标 */ .empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 32px 16px 24px; text-align: center; } .empty-icon { color: #0f3460; margin-bottom: 14px; opacity: 0.85; } .empty-icon svg { display: block; } .empty-text { font-size: 14px; color: #a0a0b0; margin-bottom: 6px; font-weight: 500; } .empty-sub { font-size: 11px; color: #555; line-height: 1.6; } /* 禁用按钮 */ .btn-io.btn-disabled, .btn-io:disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; } .toast { position: fixed; bottom: 10px; left: 50%; transform: translateX(-50%) translateY(80px); background: #e94560; color: #fff; padding: 8px 20px; border-radius: 20px; font-size: 13px; opacity: 0; transition: all 0.3s; z-index: 9999; pointer-events: none; max-width: 90vw; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .toast.show { transform: translateX(-50%) translateY(0); opacity: 1; } .config-list::-webkit-scrollbar { width: 5px; } .config-list::-webkit-scrollbar-track { background: #1a1a2e; } .config-list::-webkit-scrollbar-thumb { background: #0f3460; border-radius: 3px; } .modal { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.7); display: none; align-items: center; justify-content: center; z-index: 10000; padding: 16px; box-sizing: border-box; } .modal.show { display: flex; } .modal-content { background: #16213e; border: 1px solid #0f3460; border-radius: 10px; padding: 18px; width: 100%; max-width: 360px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5); } .modal-content h3 { font-size: 15px; color: #e94560; margin-bottom: 12px; text-align: center; } .modal-toggle { margin-bottom: 12px; } .toggle-label { display: flex; align-items: center; gap: 6px; color: #e0e0e0; font-size: 13px; cursor: pointer; margin-bottom: 4px; } .toggle-label input[type="checkbox"] { width: auto; margin: 0; cursor: pointer; accent-color: #e94560; } .modal-fields { display: block; } .modal-fields.hidden { display: none; } .modal-warn { color: #c0392b; font-size: 11px; margin: 4px 0 8px; text-align: center; } .modal-actions { display: flex; gap: 8px; margin-top: 8px; } .modal-actions button { flex: 1; } /* 编辑域名配置对话框:字段较多,允许滚动并加宽 */ .edit-config-content { max-width: 380px; max-height: 90vh; overflow-y: auto; } .edit-config-content .modal-actions { position: sticky; bottom: 0; background: #16213e; padding-top: 10px; margin-top: 12px; } /* 环境管理对话框列表 */ .env-manage-list { display: flex; flex-direction: column; gap: 6px; max-height: 280px; overflow-y: auto; margin-bottom: 8px; } .env-manage-row { display: flex; align-items: center; justify-content: space-between; padding: 8px 10px; background: #16213e; border: 1px solid #0f3460; border-radius: 4px; } .env-manage-row.active { border-color: #e94560; background: rgba(233, 69, 96, 0.08); } .env-manage-name { font-size: 13px; color: #e0e0e0; display: flex; align-items: center; gap: 6px; } .env-manage-count { color: #a0a0b0; font-size: 11px; } .env-manage-active-mark { display: inline-block; padding: 1px 6px; background: #e94560; color: #fff; font-size: 10px; border-radius: 8px; } .env-manage-actions { display: flex; gap: 6px; } .env-manage-actions button { padding: 4px 10px; font-size: 12px; } .env-manage-empty { text-align: center; color: #a0a0b0; font-size: 12px; padding: 20px; } .strength-block { margin-top: 10px; } .strength-bar-bg { width: 100%; height: 6px; background: #0f3460; border-radius: 3px; overflow: hidden; } .strength-bar-fg { height: 100%; width: 0; border-radius: 3px; transition: width 0.25s ease, background 0.25s ease; background: #555; } .strength-bar-fg.very-weak { background: #c0392b; } .strength-bar-fg.weak { background: #e67e22; } .strength-bar-fg.medium { background: #f1c40f; } .strength-bar-fg.strong { background: #27ae60; } .strength-bar-fg.very-strong { background: #2ecc71; } .strength-info { display: flex; flex-direction: column; gap: 2px; margin-top: 6px; font-size: 11px; color: #a0a0b0; } .strength-info #crackTime { color: #888; } /* 书签导入对话框 */ .bookmark-modal-content { max-width: 420px; } .bookmark-toolbar { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } .bookmark-select-all { display: flex; align-items: center; gap: 4px; font-size: 12px; color: #e0e0e0; cursor: pointer; white-space: nowrap; } .bookmark-select-all input[type="checkbox"] { width: auto; } .bookmark-toolbar input[type="text"] { flex: 1; padding: 4px 8px; font-size: 12px; background: #0f1b35; border: 1px solid #0f3460; border-radius: 4px; color: #e0e0e0; } .bookmark-list { max-height: 320px; overflow-y: auto; display: flex; flex-direction: column; gap: 2px; margin-bottom: 8px; } .bookmark-item { display: flex; align-items: center; gap: 6px; padding: 5px 8px; border-radius: 4px; cursor: pointer; } .bookmark-item:hover { background: rgba(15, 52, 96, 0.5); } .bookmark-item input[type="checkbox"] { width: auto; flex-shrink: 0; } .bookmark-item-text { font-size: 12px; color: #e0e0e0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1; min-width: 0; } .bookmark-item-url { font-size: 10px; color: #666; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex-shrink: 1; min-width: 0; }