/* ========================================== TalkingQ Platform - Main Stylesheet Color Brand: #52c41a (green), #1a1a1a (black) ========================================== */ :root { --primary: #52c41a; --primary-dark: #389e0d; --primary-light: #b7eb8f; --primary-bg: #f6ffed; --primary-gradient: linear-gradient(135deg, #73d13d 0%, #389e0d 100%); --black: #1a1a1a; --text-primary: #1a1a1a; --text-secondary: #595959; --text-muted: #8c8c8c; --text-placeholder: #bfbfbf; --bg-base: #f5f5f5; --bg-white: #ffffff; --bg-card: #ffffff; --bg-sidebar: #141414; --border: #e8e8e8; --border-dark: #d9d9d9; --success: #52c41a; --warning: #faad14; --danger: #ff4d4f; --info: #1890ff; --radius-sm: 6px; --radius: 10px; --radius-lg: 16px; --radius-xl: 24px; --shadow-sm: 0 1px 4px rgba(0,0,0,0.06); --shadow: 0 2px 12px rgba(0,0,0,0.08); --shadow-lg: 0 8px 32px rgba(0,0,0,0.12); --shadow-green: 0 4px 20px rgba(82,196,26,0.25); --sidebar-width: 240px; --sidebar-collapsed: 76px; --topbar-height: 60px; --transition: all 0.2s ease; } /* ========== 暗黑模式支持 ========== */ [data-theme="dark"] { --bg-base: #1a1a1a; --bg-white: #262626; --bg-card: #262626; --text-primary: #ffffff; --text-secondary: #a6a6a6; --text-muted: #737373; --border: #434343; --border-dark: #595959; --bg-sidebar: #0a0a0a; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; font-size: 14px; color: var(--text-primary); background: var(--bg-base); overflow: hidden; } a { text-decoration: none; color: inherit; } button { cursor: pointer; border: none; background: none; font-family: inherit; } /* ========== SCROLLBAR ========== */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: #d9d9d9; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #bfbfbf; } /* ========== LAYOUT ========== */ body { display: flex; } /* Login mode - hide sidebar and topbar */ body.login-mode { display: block !important; overflow: hidden !important; } body.login-mode .sidebar { display: none !important; } body.login-mode .topbar { display: none !important; } body.login-mode .main-content { width: 100% !important; margin-left: 0 !important; height: 100vh !important; } body.login-mode .page-container { padding: 0 !important; overflow: hidden !important; height: 100vh !important; } .sidebar { width: var(--sidebar-width); min-width: var(--sidebar-width); height: 100vh; background: var(--bg-sidebar); display: flex; flex-direction: column; transition: width 0.25s ease, min-width 0.25s ease; overflow: hidden; position: relative; z-index: 100; } .sidebar.collapsed { width: var(--sidebar-collapsed); min-width: var(--sidebar-collapsed); } .main-content { flex: 1; display: flex; flex-direction: column; height: 100vh; overflow: hidden; } /* ========== SIDEBAR HEADER ========== */ .sidebar-header { display: flex; align-items: center; justify-content: space-between; padding: 0 16px; height: var(--topbar-height); border-bottom: 1px solid rgba(255,255,255,0.06); flex-shrink: 0; } .logo { display: flex; align-items: center; gap: 10px; overflow: hidden; } .logo-icon { width: 34px; height: 34px; flex-shrink: 0; } .logo-icon svg { width: 100%; height: 100%; } .logo-text { font-size: 18px; font-weight: 700; color: #fff; white-space: nowrap; letter-spacing: -0.3px; } .sidebar-toggle { color: rgba(255,255,255,0.7); display: flex; align-items: center; justify-content: center; width: 36px; height: 34px; border-radius: 12px; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.08); transition: var(--transition); flex-shrink: 0; cursor: pointer; } .sidebar-toggle:hover { color: #fff; background: rgba(82,196,26,0.18); border-color: rgba(82,196,26,0.26); } .sidebar-toggle i, .sidebar-toggle svg { width: 18px; height: 18px; transition: transform 0.2s ease; } .sidebar.collapsed .sidebar-toggle i, .sidebar.collapsed .sidebar-toggle svg { transform: rotate(180deg); } /* ========== SIDEBAR NAV ========== */ .sidebar-nav { flex: 1; overflow-y: auto; overflow-x: hidden; padding: 12px 0; } .nav-section { margin-bottom: 4px; padding: 0 8px; } .nav-section-title { font-size: 11px; color: rgba(255,255,255,0.28); text-transform: uppercase; letter-spacing: 0.8px; padding: 10px 8px 6px; white-space: nowrap; display: block; transition: opacity 0.2s; } .sidebar.collapsed .nav-section-title { opacity: 0; } .nav-item { display: flex; align-items: center; gap: 10px; padding: 9px 10px; border-radius: var(--radius-sm); color: rgba(255,255,255,0.65); transition: var(--transition); position: relative; white-space: nowrap; } .nav-item:hover { color: #fff; background: rgba(255,255,255,0.06); } .nav-item.active { color: #fff; background: linear-gradient(90deg, rgba(82,196,26,0.25) 0%, rgba(82,196,26,0.08) 100%); border-left: 3px solid var(--primary); padding-left: 7px; } .nav-parent { cursor: pointer; } .nav-chevron { margin-left: auto; width: 14px !important; height: 14px !important; transition: transform 0.2s; } .nav-parent[aria-expanded="false"] .nav-chevron { transform: rotate(-90deg); } .nav-submenu { display: none; margin: 2px 0 4px; } .nav-submenu.open { display: block; } .nav-item-sub { padding-left: 34px; font-size: 13px; } .nav-item-sub.active { padding-left: 31px; } .nav-item i { width: 18px; height: 18px; flex-shrink: 0; } .nav-item span:not(.nav-badge) { font-size: 13.5px; transition: opacity 0.15s; } .sidebar.collapsed .nav-item span:not(.nav-badge) { opacity: 0; pointer-events: none; } .sidebar.collapsed .nav-section-title { height: 0; padding: 0; overflow: hidden; } .sidebar.collapsed .nav-submenu { display: none; } .sidebar.collapsed .nav-chevron { display: none !important; } .nav-badge { font-size: 10px; padding: 1px 6px; border-radius: 10px; background: var(--primary); color: #fff; margin-left: auto; flex-shrink: 0; transition: opacity 0.15s; } .sidebar.collapsed .nav-badge { opacity: 0; } /* ========== SIDEBAR FOOTER ========== */ .sidebar-footer { border-top: 1px solid rgba(255,255,255,0.06); padding: 12px; flex-shrink: 0; } .user-info { display: flex; align-items: center; gap: 10px; overflow: hidden; } .user-avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--primary-gradient); color: #fff; font-weight: 700; font-size: 14px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .user-details { flex: 1; overflow: hidden; transition: opacity 0.2s; } .sidebar.collapsed .user-details { opacity: 0; } .user-name { display: block; font-size: 13px; font-weight: 600; color: #fff; white-space: nowrap; } .user-role { display: block; font-size: 11px; color: rgba(255,255,255,0.45); white-space: nowrap; } .logout-btn { color: rgba(255,255,255,0.4); display: flex; align-items: center; padding: 4px; border-radius: 4px; transition: var(--transition); flex-shrink: 0; } .logout-btn:hover { color: var(--danger); } .sidebar.collapsed .logout-btn { opacity: 0; } /* ========== SIDEBAR COLLAPSED RAIL ========== */ .sidebar.collapsed { overflow: visible; background: linear-gradient(180deg, #111713 0%, #0c100e 100%); border-right: 1px solid rgba(255,255,255,0.07); box-shadow: 8px 0 26px rgba(0,0,0,0.12); } .sidebar.collapsed .sidebar-header { flex-direction: column; justify-content: center; gap: 7px; height: 94px; padding: 10px 0 8px; border-bottom: 0; } .sidebar.collapsed .logo { width: 40px; height: 40px; justify-content: center; border-radius: 14px; background: linear-gradient(135deg, #52c41a 0%, #1f7a38 100%); border: 1px solid rgba(255,255,255,0.14); box-shadow: 0 10px 24px rgba(82,196,26,0.24); overflow: visible; } .sidebar.collapsed .logo::before { content: 'TQ'; color: #fff; font-size: 14px; font-weight: 800; letter-spacing: 0; line-height: 1; } .sidebar.collapsed .logo-text { width: 0; opacity: 0; overflow: hidden; } .sidebar.collapsed .sidebar-toggle { position: static; width: 40px; height: 30px; border-radius: 12px; color: rgba(255,255,255,0.74); background: rgba(255,255,255,0.07); border: 1px solid rgba(255,255,255,0.1); box-shadow: none; } .sidebar.collapsed .sidebar-toggle:hover { color: #fff; background: rgba(82,196,26,0.18); border-color: rgba(82,196,26,0.32); transform: none; } .sidebar.collapsed .sidebar-nav { padding: 0 0 12px; overflow: visible; } .sidebar.collapsed .nav-section { position: relative; width: 100%; padding: 4px 0; margin: 0; border: 0; border-radius: 0; background: transparent; box-shadow: none; } .sidebar.collapsed .nav-section + .nav-section { border-top: 0; padding-top: 8px; } .sidebar.collapsed .nav-section + .nav-section::before { content: ''; display: block; width: 28px; height: 1px; margin: 0 auto 7px; background: rgba(255,255,255,0.08); } .sidebar.collapsed .nav-item, .sidebar.collapsed .company-nav-item { width: 44px; height: 40px; display: flex; align-items: center; justify-content: center; margin: 2px auto; padding: 0; border-radius: 14px; line-height: 0; } .sidebar.collapsed .nav-parent { gap: 0; } .sidebar.collapsed .nav-item { color: rgba(255,255,255,0.56); border: 1px solid transparent; } .sidebar.collapsed .nav-item:hover { color: #fff; background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.08); box-shadow: none; transform: none; } .sidebar.collapsed .nav-item.active { color: #fff; padding-left: 0; border-left: 0; background: rgba(82,196,26,0.18); border-color: rgba(82,196,26,0.24); box-shadow: inset 0 0 0 1px rgba(82,196,26,0.08); } .sidebar.collapsed .nav-item.active::before { content: ''; position: absolute; left: -9px; top: 10px; width: 3px; height: 20px; border-radius: 999px; background: #52c41a; box-shadow: 0 0 12px rgba(82,196,26,0.65); } .sidebar.collapsed .nav-item i, .sidebar.collapsed .nav-item svg, .sidebar.collapsed .company-nav-item i, .sidebar.collapsed .company-nav-item svg { width: 18px !important; height: 18px !important; stroke-width: 2.15; flex-shrink: 0; } .sidebar.collapsed .nav-item span:not(.nav-badge) { position: absolute; left: 60px; top: 50%; z-index: 120; width: max-content; max-width: 220px; padding: 8px 11px; border-radius: 11px; background: rgba(18,26,21,0.96); border: 1px solid rgba(255,255,255,0.1); color: #fff; font-size: 12px; font-weight: 600; opacity: 0; pointer-events: none; transform: translate(-6px, -50%); box-shadow: 0 14px 34px rgba(19,45,26,0.16); } .sidebar.collapsed .nav-item span:not(.nav-badge)::before { content: ''; position: absolute; left: -5px; top: 50%; width: 10px; height: 10px; background: rgba(18,26,21,0.96); border-left: 1px solid rgba(255,255,255,0.1); border-bottom: 1px solid rgba(255,255,255,0.1); transform: translateY(-50%) rotate(45deg); } .sidebar.collapsed .nav-item:hover span:not(.nav-badge) { opacity: 1; transform: translate(0, -50%); } .sidebar.collapsed .sidebar-footer { padding: 8px 0 12px; border-top: 0; } .sidebar.collapsed .user-info { width: 44px; height: 44px; justify-content: center; gap: 0; margin: 0 auto; border-radius: 15px; background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.08); box-shadow: none; } .sidebar.collapsed .user-details, .sidebar.collapsed .logout-btn { display: none; } .sidebar.collapsed .user-avatar { width: 34px; height: 34px; border-radius: 13px; background: linear-gradient(135deg, #52c41a 0%, #1f7a38 100%); box-shadow: inset 0 1px 0 rgba(255,255,255,0.14); } /* ========== TOPBAR ========== */ .topbar { height: var(--topbar-height); background: var(--bg-white); border-bottom: 1px solid var(--border); display: flex; align-items: center; justify-content: space-between; padding: 0 24px; flex-shrink: 0; gap: 16px; position: sticky; top: 0; z-index: 100; } .topbar-left { display: flex; align-items: center; gap: 16px; } .menu-btn { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: var(--radius-sm); color: var(--text-secondary); transition: var(--transition); } .menu-btn:hover { background: var(--bg-base); color: var(--text-primary); } .breadcrumb { font-size: 15px; font-weight: 600; color: var(--text-primary); } .topbar-right { display: flex; align-items: center; gap: 12px; } .topbar-time { font-size: 13px; color: var(--text-muted); font-variant-numeric: tabular-nums; } .topbar-btn { display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: var(--radius-sm); color: var(--text-secondary); transition: var(--transition); position: relative; } .topbar-btn:hover { background: var(--bg-base); color: var(--text-primary); } .company-selector { display: inline-flex; align-items: center; gap: 8px; height: 32px; padding: 0 10px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg-white); color: var(--text-secondary); } .company-selector i { width: 14px; height: 14px; flex-shrink: 0; } .company-selector select { min-width: 150px; border: 0; background: transparent; color: var(--text-primary); font-size: 13px; outline: none; font-family: inherit; } .company-manage-btn { display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px; border: 1px solid var(--border); border-radius: 8px; background: #fff; color: var(--text-secondary); font-size: 12px; font-weight: 500; transition: var(--transition); } .company-manage-btn:hover { background: var(--bg-base); color: var(--text-primary); transform: translateY(-1px); } .company-manage-btn i { width: 14px; height: 14px; } .company-manager { display: flex; flex-direction: column; gap: 16px; } .company-manager-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .company-manager-toolbar-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; } .company-manager-summary { font-size: 13px; color: var(--text-muted); } .company-manager-list { display: flex; flex-direction: column; gap: 10px; max-height: 420px; overflow: auto; padding-right: 2px; } .company-manager-empty { padding: 24px; text-align: center; color: var(--text-muted); border: 1px dashed var(--border); border-radius: var(--radius-md); background: var(--bg-base); } .company-manager-item { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px 16px; border: 1px solid var(--border); border-radius: var(--radius-md); background: #fff; } .company-manager-info { min-width: 0; display: flex; align-items: center; gap: 12px; } .company-manager-dot { width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0; box-shadow: 0 0 0 4px rgba(0,0,0,0.03); } .company-manager-name { font-size: 14px; font-weight: 600; color: var(--text-primary); } .company-manager-meta { margin-top: 3px; font-size: 12px; color: var(--text-muted); } .company-manager-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; } .company-manager-actions .btn-sm { height: 32px; padding: 0 10px; gap: 6px; } .company-manager-actions .btn-outline.danger { border-color: rgba(245, 34, 45, 0.2); color: #cf1322; } .company-manager-actions .btn-outline.danger:hover { background: rgba(245, 34, 45, 0.06); border-color: rgba(245, 34, 45, 0.35); } .company-manager-actions i { width: 14px; height: 14px; } .company-color-pills { display: flex; flex-wrap: wrap; gap: 10px; } .company-color-pill { width: 28px; height: 28px; border: 1px solid var(--border); border-radius: 999px; padding: 0; background: #fff; } .company-color-pill span { display: block; width: 18px; height: 18px; margin: 4px auto; border-radius: 50%; background: var(--pill-color, #52c41a); } .company-color-pill.selected { border-color: var(--pill-color, #52c41a); box-shadow: 0 0 0 3px rgba(82,196,26,.1); } .company-delete-body { display: flex; flex-direction: column; gap: 14px; } .company-delete-title { margin: 0; font-size: 15px; font-weight: 600; color: var(--text-primary); } .company-delete-desc { margin: 0; font-size: 13px; color: var(--text-muted); } @media (max-width: 720px) { .company-manager-toolbar { align-items: stretch; flex-direction: column; } .company-manager-toolbar-actions { justify-content: stretch; } .company-manager-toolbar-actions .btn { flex: 1; } .company-manager-item { align-items: stretch; flex-direction: column; } .company-manager-actions { justify-content: flex-end; } } .notif-dot { position: absolute; top: 6px; right: 6px; width: 7px; height: 7px; background: var(--danger); border-radius: 50%; border: 1px solid #fff; } /* 通知下拉菜单 */ .notif-dropdown-wrapper { position: relative; } .notif-dropdown { position: absolute; top: calc(100% + 8px); right: 0; width: 320px; background: var(--bg-white); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); border: 1px solid var(--border); z-index: 1000; opacity: 0; visibility: hidden; transform: translateY(-8px); transition: all 0.2s ease; } .notif-dropdown.open { opacity: 1; visibility: visible; transform: translateY(0); } .notif-header { display: flex; justify-content: space-between; align-items: center; padding: 14px 16px; border-bottom: 1px solid var(--border); } .notif-title { font-size: 14px; font-weight: 600; color: var(--text-primary); } .notif-count { font-size: 12px; color: var(--text-muted); background: var(--bg-base); padding: 2px 8px; border-radius: 10px; } .notif-list { max-height: 280px; overflow-y: auto; } .notif-item { width: 100%; display: flex; align-items: flex-start; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--border); border-left: 0; border-right: 0; border-top: 0; background: transparent; cursor: pointer; transition: background 0.15s; text-align: left; font-family: inherit; } .notif-item:hover { background: var(--bg-base); } .notif-item.unread { background: rgba(24,144,255,0.04); } .notif-item.unread:hover { background: rgba(24,144,255,0.08); } .notif-icon { flex-shrink: 0; width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; } .notif-content { flex: 1; min-width: 0; } .notif-text { font-size: 13px; color: var(--text-primary); line-height: 1.5; margin-bottom: 2px; } .notif-item-tags, .notif-detail-tags { display: flex; align-items: center; gap: 6px; margin-bottom: 5px; } .notif-item-tags span, .notif-tag, .notif-severity { display: inline-flex; align-items: center; height: 20px; padding: 0 7px; border-radius: 999px; font-size: 11px; font-weight: 600; line-height: 1; background: var(--bg-base); color: var(--text-muted); } .notif-item-tags span:last-child, .notif-severity { background: rgba(24,144,255,0.08); color: #1677ff; } .notif-item-tags span.critical, .notif-severity.critical { background: rgba(255,77,79,0.1); color: #cf1322; } .notif-item-tags span.warning, .notif-severity.warning { background: rgba(250,140,22,0.12); color: #d46b08; } .notif-item-tags span.success, .notif-severity.success { background: rgba(82,196,26,0.12); color: #389e0d; } .notif-time { font-size: 12px; color: var(--text-muted); } .notif-footer { padding: 10px 16px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-top: 1px solid var(--border); } .notif-footer a, .notif-footer-action { font-size: 13px; color: var(--primary); text-decoration: none; background: transparent; border: 0; font-family: inherit; cursor: pointer; } .notif-footer a:hover, .notif-footer-action:hover { text-decoration: underline; } .notif-footer-action:disabled { color: var(--text-muted); cursor: default; } .notif-footer-action:disabled:hover { text-decoration: none; } .notif-footer-muted, .notif-empty { font-size: 13px; color: var(--text-muted); } .notif-empty { padding: 24px 16px; text-align: center; } .notif-detail-meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-top: 16px; } .notif-detail-meta div { padding: 10px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg-base); min-width: 0; } .notif-detail-meta span { display: block; margin-bottom: 4px; color: var(--text-muted); font-size: 11px; } .notif-detail-meta strong { display: block; color: var(--text-primary); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .notification-principles { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; } .notification-principles div { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--bg-base); } .notification-principles strong, .notification-principles span { display: block; } .notification-principles strong { margin-bottom: 5px; font-size: 13px; color: var(--text-primary); } .notification-principles span { font-size: 12px; line-height: 1.5; color: var(--text-muted); } .notification-rule-list { display: flex; flex-direction: column; gap: 10px; } .notification-rule-row { display: grid; grid-template-columns: minmax(0, 1fr) 260px; gap: 16px; padding: 14px; border: 1px solid var(--border); border-radius: var(--radius); background: #fff; } .notification-rule-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; } .notification-rule-title { font-size: 14px; font-weight: 600; color: var(--text-primary); } .notification-rule-desc, .notification-rule-content { margin-top: 5px; font-size: 12px; color: var(--text-muted); line-height: 1.5; } .notification-rule-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 9px; } .notification-rule-meta span { display: inline-flex; align-items: center; min-height: 22px; padding: 3px 8px; border-radius: 999px; background: var(--bg-base); color: var(--text-secondary); font-size: 11px; line-height: 1.35; } .notification-rule-severity { flex-shrink: 0; display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: 999px; font-size: 11px; font-weight: 700; background: rgba(24,144,255,0.08); color: #1677ff; } .notification-rule-severity.critical { background: rgba(255,77,79,0.1); color: #cf1322; } .notification-rule-severity.warning { background: rgba(250,140,22,0.12); color: #d46b08; } .notification-rule-severity.success { background: rgba(82,196,26,0.12); color: #389e0d; } .notification-rule-controls { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; } .notification-switch, .notification-threshold, .notification-channels, .notification-channels label { display: flex; align-items: center; } .notification-switch, .notification-threshold { gap: 8px; font-size: 13px; color: var(--text-secondary); } .notification-switch input, .notification-channels input { accent-color: var(--primary); } .notification-threshold em { font-style: normal; color: var(--text-muted); font-size: 12px; } .notification-threshold.readonly { align-items: flex-start; flex-direction: column; gap: 4px; } .notification-threshold.readonly strong { font-size: 13px; color: var(--text-primary); font-weight: 600; } .notification-channels { flex-wrap: wrap; gap: 8px 12px; font-size: 12px; color: var(--text-muted); } .notification-channels label { gap: 5px; } /* ========== SYSTEM SETTINGS ========== */ .settings-page-header, .settings-layout { width: 100%; max-width: 1320px; margin-left: auto; margin-right: auto; } .settings-page-header { margin-bottom: 20px; } .settings-layout { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 20px; align-items: start; } .settings-sidebar { position: sticky; top: 0; padding: 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-card); box-shadow: 0 2px 8px rgba(0,0,0,0.03); } .settings-sidebar-title { padding: 4px 8px 10px; color: var(--text-muted); font-size: 11px; font-weight: 700; } .settings-sidebar-nav { display: flex; flex-direction: column; gap: 4px; } .settings-nav-item { width: 100%; min-height: 54px; display: flex; align-items: center; gap: 10px; padding: 8px 10px; border: 1px solid transparent; border-radius: 8px; color: var(--text-secondary); text-align: left; transition: background 0.18s ease, border-color 0.18s ease, color 0.18s ease; } .settings-nav-item:hover { color: var(--text-primary); background: var(--bg-base); } .settings-nav-item.active { color: var(--primary-dark); border-color: rgba(82,196,26,0.22); background: rgba(82,196,26,0.08); } .settings-nav-icon { width: 32px; height: 32px; flex: 0 0 32px; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--bg-base); color: var(--text-muted); } .settings-nav-item.active .settings-nav-icon { color: var(--primary-dark); background: rgba(82,196,26,0.12); } .settings-nav-icon svg { width: 16px; height: 16px; } .settings-nav-item > span:last-child { min-width: 0; } .settings-nav-item strong, .settings-nav-item small { display: block; } .settings-nav-item strong { color: inherit; font-size: 13px; font-weight: 650; line-height: 1.35; } .settings-nav-item small { margin-top: 2px; color: var(--text-muted); font-size: 11px; line-height: 1.3; } .settings-sidebar-status { margin-top: 14px; padding: 12px 10px 2px; border-top: 1px solid var(--border); } .settings-status-line { display: flex; align-items: center; gap: 7px; color: var(--text-secondary); font-size: 12px; font-weight: 600; } .settings-status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--primary); box-shadow: 0 0 0 3px rgba(82,196,26,0.12); } .settings-sidebar-status small { display: block; margin-top: 6px; color: var(--text-muted); font-size: 11px; } .settings-content { min-width: 0; display: flex; flex-direction: column; gap: 16px; } .settings-two-column { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; align-items: stretch; } .settings-section-card { min-width: 0; overflow: hidden; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-card); box-shadow: 0 2px 8px rgba(0,0,0,0.03); scroll-margin-top: 16px; } .settings-two-column .settings-section-card { display: flex; flex-direction: column; } .settings-section-header { min-height: 72px; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 20px; border-bottom: 1px solid var(--border); } .settings-section-heading { min-width: 0; display: flex; align-items: center; gap: 12px; } .settings-section-icon { width: 36px; height: 36px; flex: 0 0 36px; display: inline-flex; align-items: center; justify-content: center; border-radius: 9px; color: var(--primary-dark); background: rgba(82,196,26,0.1); } .settings-section-icon svg { width: 18px; height: 18px; } .settings-section-heading h2 { color: var(--text-primary); font-size: 15px; font-weight: 700; line-height: 1.4; } .settings-section-heading p { margin-top: 2px; color: var(--text-muted); font-size: 12px; line-height: 1.4; } .settings-section-count { flex-shrink: 0; padding: 5px 9px; border-radius: 999px; color: var(--primary-dark); background: rgba(82,196,26,0.09); font-size: 11px; font-weight: 650; } .settings-section-body { min-width: 0; padding: 20px; } .settings-two-column .settings-section-body { flex: 1; } .settings-section-body > .form-group:last-child { margin-bottom: 0; } .settings-section-footer { display: flex; align-items: center; gap: 8px; min-height: 62px; padding: 12px 20px; border-top: 1px solid var(--border); background: rgba(0,0,0,0.012); } .settings-key-name { display: flex; align-items: center; gap: 9px; white-space: nowrap; } .settings-api-table { border: 1px solid var(--border); border-radius: 9px; } .settings-key-name strong { font-size: 13px; font-weight: 650; } .settings-key-avatar { width: 30px; height: 30px; flex: 0 0 30px; display: inline-flex; align-items: center; justify-content: center; border-radius: 8px; color: var(--primary-dark); background: rgba(82,196,26,0.09); } .settings-key-avatar svg { width: 14px; height: 14px; } .settings-key-code { display: inline-flex; padding: 5px 8px; border: 1px solid var(--border); border-radius: 6px; color: var(--text-secondary); background: var(--bg-base); font-size: 12px; white-space: nowrap; } .settings-muted-cell { color: var(--text-secondary); font-size: 12px; white-space: nowrap; } .settings-table-actions { display: flex; align-items: center; gap: 5px; white-space: nowrap; } .settings-icon-btn { width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid transparent; border-radius: 7px; color: var(--text-muted); transition: var(--transition); } .settings-icon-btn:hover { color: var(--primary-dark); border-color: rgba(82,196,26,0.24); background: rgba(82,196,26,0.08); } .settings-icon-btn.danger:hover { color: var(--danger); border-color: rgba(255,77,79,0.22); background: rgba(255,77,79,0.07); } .settings-icon-btn svg { width: 15px; height: 15px; } .settings-empty-state { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 190px; padding: 28px 20px; border: 1px dashed var(--border-dark); border-radius: 9px; text-align: center; background: rgba(0,0,0,0.01); } .settings-empty-state > span { width: 42px; height: 42px; display: inline-flex; align-items: center; justify-content: center; margin-bottom: 12px; border-radius: 10px; color: var(--primary-dark); background: rgba(82,196,26,0.1); } .settings-empty-state > span svg { width: 20px; height: 20px; } .settings-empty-state strong { font-size: 14px; } .settings-empty-state p { margin: 5px 0 14px; color: var(--text-muted); font-size: 12px; } .settings-security-note { display: flex; align-items: flex-start; gap: 9px; margin-top: 14px; padding: 10px 12px; border-radius: 8px; color: var(--text-secondary); background: rgba(82,196,26,0.055); font-size: 12px; line-height: 1.5; } .settings-security-note svg { width: 15px; height: 15px; flex-shrink: 0; margin-top: 1px; color: var(--primary-dark); } .settings-checkbox-row { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px 0 2px; border-top: 1px solid var(--border); } .settings-checkbox-row strong, .settings-checkbox-row small { display: block; } .settings-checkbox-row strong { font-size: 13px; font-weight: 600; } .settings-checkbox-row small { margin-top: 3px; color: var(--text-muted); font-size: 11px; } .settings-content .notification-principles { gap: 8px; margin-bottom: 14px; } .settings-content .notification-principles > div { display: flex; align-items: center; gap: 10px; min-width: 0; padding: 10px 12px; border-radius: 8px; background: var(--bg-base); } .settings-principle-icon { width: 30px; height: 30px; flex: 0 0 30px; display: inline-flex !important; align-items: center; justify-content: center; border-radius: 7px; color: var(--primary-dark); background: var(--bg-card); } .settings-principle-icon svg { width: 15px; height: 15px; } .settings-content .notification-principles strong, .settings-content .notification-principles small { display: block; } .settings-content .notification-principles strong { margin: 0; font-size: 12px; } .settings-content .notification-principles small { margin-top: 2px; overflow: hidden; color: var(--text-muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .settings-content .notification-rule-row { grid-template-columns: minmax(0, 1fr) 230px; gap: 18px; padding: 16px; border-radius: 9px; background: rgba(0,0,0,0.012); } .settings-content .notification-rule-controls { padding-left: 16px; border-left: 1px solid var(--border); } .tenant-selector { display: flex; align-items: center; gap: 6px; padding: 6px 12px; border: 1px solid var(--border); border-radius: var(--radius); font-size: 13px; color: var(--text-secondary); cursor: pointer; transition: var(--transition); background: var(--bg-white); } .tenant-selector:hover { border-color: var(--primary); color: var(--primary); } /* ========== PAGE CONTAINER ========== */ .page-container { flex: 1; overflow-y: auto; padding: 24px; } .page-container.agent-config-page-container { overflow: hidden; padding: 0; background: #f7faf7; } .page-container.agent-config-page-container .page.active { height: 100%; } .page { display: none; } .page.active { display: block; } /* ========== CARDS ========== */ .card { background: var(--bg-card); border-radius: var(--radius-lg); border: 1px solid var(--border); padding: 20px; box-shadow: var(--shadow-sm); } .card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; } .card-title { font-size: 15px; font-weight: 600; color: var(--text-primary); } .card-subtitle { font-size: 12px; color: var(--text-muted); margin-top: 2px; } /* ========== KPI CARDS ========== */ .kpi-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin-bottom: 24px; } .kpi-card { background: var(--bg-card); border-radius: var(--radius-lg); border: 1px solid var(--border); padding: 20px; position: relative; overflow: hidden; transition: var(--transition); box-shadow: var(--shadow-sm); } .kpi-card:hover { transform: translateY(-2px); box-shadow: var(--shadow); border-color: var(--primary-light); } .kpi-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--primary-gradient); } .kpi-label { font-size: 12px; color: var(--text-muted); margin-bottom: 8px; display: flex; align-items: center; gap: 6px; } .kpi-value { font-size: 28px; font-weight: 700; color: var(--text-primary); line-height: 1; margin-bottom: 8px; font-variant-numeric: tabular-nums; } .kpi-change { font-size: 12px; display: flex; align-items: center; gap: 3px; } .kpi-change.up { color: var(--success); } .kpi-change.down { color: var(--danger); } .kpi-icon { position: absolute; right: 16px; top: 16px; width: 40px; height: 40px; border-radius: var(--radius); background: var(--primary-bg); display: flex; align-items: center; justify-content: center; color: var(--primary); } /* ========== CHARTS GRID ========== */ .charts-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; margin-bottom: 24px; } .charts-grid .chart-card.full { grid-column: 1 / -1; } .chart-card { background: var(--bg-card); border-radius: var(--radius-lg); border: 1px solid var(--border); padding: 20px; box-shadow: var(--shadow-sm); } .chart-card canvas { max-height: 240px; } /* ========== BUTTONS ========== */ .btn { display: inline-flex; align-items: center; gap: 6px; padding: 7px 16px; border-radius: var(--radius-sm); font-size: 13.5px; font-weight: 500; transition: var(--transition); cursor: pointer; border: 1px solid transparent; font-family: inherit; } .btn-primary { background: var(--primary); color: #fff; border-color: var(--primary); } .btn-primary:hover { background: var(--primary-dark); border-color: var(--primary-dark); box-shadow: var(--shadow-green); } /* 绿色渐变按钮 - 商标色 */ .btn-primary-green { background: linear-gradient(135deg, #73d13d 0%, #389e0d 100%); color: #fff; border: none; box-shadow: 0 2px 8px rgba(82, 196, 26, 0.3); } .btn-primary-green:hover { background: linear-gradient(135deg, #52c41a 0%, #237804 100%); box-shadow: 0 4px 16px rgba(82, 196, 26, 0.4); transform: translateY(-1px); } .btn-primary-green:active { transform: translateY(0); } .btn-outline { background: transparent; border-color: var(--border-dark); color: var(--text-primary); } .btn-outline:hover { border-color: var(--primary); color: var(--primary); } .btn-ghost { background: transparent; color: var(--text-secondary); } .btn-ghost:hover { background: var(--bg-base); } .btn-danger { background: var(--danger); color: #fff; border-color: var(--danger); } .btn-sm { padding: 4px 10px; font-size: 12px; } .btn-lg { padding: 10px 24px; font-size: 15px; } .btn i { width: 15px; height: 15px; } /* ========== TABLES ========== */ .table-wrapper { overflow-x: auto; border-radius: var(--radius); } table { width: 100%; border-collapse: collapse; font-size: 13.5px; } thead th { background: #fafafa; padding: 10px 14px; text-align: left; font-weight: 600; color: var(--text-secondary); font-size: 12px; text-transform: uppercase; letter-spacing: 0.4px; border-bottom: 1px solid var(--border); white-space: nowrap; } tbody td { padding: 11px 14px; border-bottom: 1px solid var(--border); color: var(--text-primary); vertical-align: middle; } tbody tr:last-child td { border-bottom: none; } tbody tr:hover td { background: #fafcff; } /* ========== BADGES ========== */ .badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 20px; font-size: 11.5px; font-weight: 500; white-space: nowrap; } .badge-success { background: #f6ffed; color: #52c41a; border: 1px solid #b7eb8f; } .badge-warning { background: #fffbe6; color: #faad14; border: 1px solid #ffe58f; } .badge-danger { background: #fff2f0; color: #ff4d4f; border: 1px solid #ffccc7; } .badge-info { background: #e6f7ff; color: #1890ff; border: 1px solid #91d5ff; } .badge-default { background: #fafafa; color: #595959; border: 1px solid #d9d9d9; } .badge-purple { background: #f9f0ff; color: #722ed1; border: 1px solid #d3adf7; } /* ========== FORMS ========== */ .form-group { margin-bottom: 18px; } .form-label { display: block; font-size: 13px; font-weight: 500; color: var(--text-primary); margin-bottom: 6px; } .form-label .required { color: var(--danger); margin-left: 2px; } .form-control { width: 100%; padding: 8px 12px; border: 1px solid var(--border-dark); border-radius: var(--radius-sm); font-size: 13.5px; font-family: inherit; color: var(--text-primary); background: var(--bg-white); transition: var(--transition); outline: none; } .form-control:focus { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(82,196,26,0.1); } .form-control::placeholder { color: var(--text-placeholder); } textarea.form-control { resize: vertical; min-height: 80px; line-height: 1.6; } select.form-control { appearance: none; cursor: pointer; } .form-hint { font-size: 12px; color: var(--text-muted); margin-top: 4px; } .form-row { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; } /* ========== TOGGLE / SWITCH ========== */ .toggle-switch { position: relative; width: 40px; height: 22px; flex-shrink: 0; } .toggle-switch input { opacity: 0; width: 0; height: 0; position: absolute; } .toggle-track { position: absolute; inset: 0; background: #d9d9d9; border-radius: 11px; cursor: pointer; transition: background 0.2s; } .toggle-track::after { content: ''; position: absolute; top: 3px; left: 3px; width: 16px; height: 16px; background: #fff; border-radius: 50%; transition: transform 0.2s; box-shadow: 0 1px 4px rgba(0,0,0,0.15); } .toggle-switch input:checked + .toggle-track { background: var(--primary); } .toggle-switch input:checked + .toggle-track::after { transform: translateX(18px); } /* ========== PAGE HEADER ========== */ .page-header { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 24px; gap: 16px; } .page-title { font-size: 20px; font-weight: 700; color: var(--text-primary); line-height: 1.2; } .page-desc { font-size: 13px; color: var(--text-muted); margin-top: 4px; } .page-actions { display: flex; align-items: center; gap: 10px; flex-shrink: 0; } /* ========== FILTERS ========== */ .filter-bar { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; flex-wrap: wrap; } .search-input { display: flex; align-items: center; gap: 8px; padding: 7px 12px; border: 1px solid var(--border-dark); border-radius: var(--radius-sm); background: var(--bg-white); flex: 1; max-width: 320px; transition: var(--transition); } .search-input:focus-within { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(82,196,26,0.1); } .search-input i { color: var(--text-muted); flex-shrink: 0; } .search-input input { border: none; outline: none; font-size: 13.5px; color: var(--text-primary); width: 100%; font-family: inherit; } .filter-select { padding: 7px 12px; border: 1px solid var(--border-dark); border-radius: var(--radius-sm); font-size: 13px; color: var(--text-primary); background: var(--bg-white); cursor: pointer; outline: none; font-family: inherit; transition: var(--transition); } .filter-select:focus { border-color: var(--primary); } /* ========== SESSION DRILLDOWN ========== */ .session-drilldown-banner { display: flex; align-items: center; gap: 12px; margin: -8px 0 16px; padding: 14px 16px; border: 1px solid #d9f7be; border-radius: var(--radius-lg); background: linear-gradient(135deg, #f6ffed 0%, #ffffff 100%); box-shadow: var(--shadow-sm); } .session-drilldown-icon { width: 36px; height: 36px; border-radius: 10px; background: var(--primary); color: #fff; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .session-drilldown-icon i { width: 18px; height: 18px; } .session-drilldown-copy { flex: 1; min-width: 0; } .session-drilldown-copy strong { display: block; font-size: 14px; margin-bottom: 3px; } .session-drilldown-copy span { display: block; font-size: 12px; color: var(--text-muted); } .session-panel-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; } .session-view-backbar { display: flex; justify-content: flex-start; margin: -4px 0 12px; } .session-detail-layout { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 16px; align-items: start; } .session-filter-panel { display: flex; justify-content: space-between; align-items: stretch; gap: 16px; margin-bottom: 16px; padding: 16px; border: 1px solid var(--border); border-radius: var(--radius-lg); background: var(--bg-card); box-shadow: var(--shadow-sm); } .session-filter-main { display: grid; grid-template-columns: 180px 220px; gap: 14px; align-items: end; } .session-filter-main .form-group { margin-bottom: 0; } .session-filter-stats { display: grid; grid-template-columns: repeat(3, 96px); gap: 10px; } .session-filter-stats > div, .session-topic-summary > div { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); background: #fafafa; } .session-filter-stats span, .session-topic-summary span { display: block; font-size: 12px; color: var(--text-muted); margin-bottom: 4px; } .session-filter-stats strong, .session-topic-summary strong { display: block; font-size: 20px; color: var(--text-primary); line-height: 1; } .session-device-layout { display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(380px, 0.92fr); gap: 16px; align-items: start; } .session-device-row { cursor: pointer; } .session-device-row.active td { background: var(--primary-bg); } .session-device-panel { min-height: 420px; } .session-panel-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 14px; } .session-panel-header h3 { font-size: 16px; margin: 0 0 4px; } .session-panel-header p { font-size: 12px; color: var(--text-muted); } .session-history-list, .session-aggregate-list { display: grid; gap: 12px; } .session-history-card, .session-aggregate-card { padding: 14px; border: 1px solid var(--border); border-radius: var(--radius); background: #fff; } .session-history-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 12px; } .session-history-head strong { display: block; font-size: 14px; margin-bottom: 4px; } .session-history-head span:not(.badge) { display: block; font-size: 12px; color: var(--text-muted); } .session-transcript { display: grid; gap: 10px; padding: 12px; border-radius: var(--radius); background: #fafafa; } .session-message { display: flex; align-items: flex-start; gap: 8px; } .session-message.user { justify-content: flex-end; } .session-message.user .session-message-avatar { order: 2; background: #e6f7ff; color: #1890ff; } .session-message.bot .session-message-avatar { background: var(--primary); color: #fff; } .session-message-avatar { width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 11px; font-weight: 600; } .session-message-text { max-width: 78%; padding: 9px 12px; border-radius: 12px; font-size: 13px; line-height: 1.55; color: var(--text-primary); background: #fff; border: 1px solid var(--border); } .session-message.user .session-message-text { color: #fff; border-color: var(--primary); background: var(--primary); border-bottom-right-radius: 4px; } .session-message.bot .session-message-text { border-bottom-left-radius: 4px; } .session-more { text-align: center; padding: 4px; font-size: 11px; color: var(--text-muted); } .session-topic-layout { display: grid; gap: 16px; } .session-topic-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; } .chat-preview { display: flex; flex-direction: column; gap: 12px; overflow-y: auto; padding: 10px; border-radius: var(--radius); background: #fafafa; } .chat-preview .chat-bubble { display: flex; align-items: flex-start; gap: 8px; max-width: 100%; padding: 0; border-radius: 0; } .chat-preview .chat-bubble.user { justify-content: flex-end; } .chat-preview .chat-bubble.user .bubble-avatar { order: 2; } .bubble-avatar { width: 28px; height: 28px; border-radius: 50%; background: var(--primary); color: #fff; display: flex; align-items: center; justify-content: center; flex-shrink: 0; font-size: 12px; font-weight: 600; } .bubble-text { max-width: 78%; padding: 10px 12px; border-radius: 12px; font-size: 13px; line-height: 1.55; color: var(--text-primary); background: var(--bg-base); } .chat-preview .chat-bubble.user .bubble-text { color: #fff; background: var(--primary); border-bottom-right-radius: 4px; } .chat-preview .chat-bubble.bot .bubble-text { border-bottom-left-radius: 4px; } /* ========== TABS ========== */ .tabs { display: flex; border-bottom: 2px solid var(--border); margin-bottom: 20px; gap: 0; } .tab-item { padding: 10px 20px; font-size: 13.5px; font-weight: 500; color: var(--text-muted); cursor: pointer; position: relative; transition: var(--transition); white-space: nowrap; } .tab-item:hover { color: var(--primary); } .tab-item.active { color: var(--primary); font-weight: 600; } .tab-item.active::after { content: ''; position: absolute; bottom: -2px; left: 0; right: 0; height: 2px; background: var(--primary); border-radius: 1px; } .tab-content { display: none; } .tab-content.active { display: block; } /* ========== MODAL ========== */ .modal-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.45); display: flex; align-items: center; justify-content: center; z-index: 20000; backdrop-filter: blur(2px); opacity: 0; pointer-events: none; transition: opacity 0.2s; } body.modal-open { overflow: hidden; } body.modal-open .bailian-config-scroll, body.modal-open .page-content, body.modal-open .main-content { scrollbar-width: none; } body.modal-open .bailian-config-scroll::-webkit-scrollbar, body.modal-open .page-content::-webkit-scrollbar, body.modal-open .main-content::-webkit-scrollbar { width: 0; height: 0; } .modal-overlay.open { opacity: 1; pointer-events: all; } .modal { background: var(--bg-white); border-radius: var(--radius-xl); padding: 28px; width: 560px; max-width: 95vw; max-height: 90vh; overflow-y: auto; box-shadow: var(--shadow-lg); transform: scale(0.95) translateY(10px); transition: transform 0.2s; } .modal-overlay.open .modal { transform: scale(1) translateY(0); } .modal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; } .modal-title { font-size: 17px; font-weight: 700; } .modal-close { color: var(--text-muted); width: 28px; height: 28px; border-radius: 6px; display: flex; align-items: center; justify-content: center; transition: var(--transition); } .modal-close:hover { background: var(--bg-base); color: var(--text-primary); } .modal-footer { display: flex; justify-content: flex-end; gap: 10px; margin-top: 24px; padding-top: 16px; border-top: 1px solid var(--border); } /* 弹窗尺寸变体 */ .modal.modal-sm { width: 400px; } .modal.modal-lg { width: 720px; } .modal.modal-xl { width: 900px; } .modal.modal-full { width: 95vw; max-width: 1200px; } /* ========== EMPTY STATE ========== */ .empty-state { text-align: center; padding: 60px 20px; color: var(--text-muted); } .empty-state i { width: 48px; height: 48px; margin: 0 auto 16px; display: block; color: var(--text-placeholder); } .empty-state p { font-size: 14px; } /* 空状态插画风格 */ .empty-state-illustration { text-align: center; padding: 40px 20px; } .empty-state-icon { width: 64px; height: 64px; margin: 0 auto 16px; background: var(--bg-base); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--text-placeholder); } .empty-state-title { font-size: 15px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .empty-state-desc { font-size: 13px; color: var(--text-muted); margin-bottom: 20px; } /* ========== STATUS DOTS ========== */ .status-dot { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; } .status-dot::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: currentColor; flex-shrink: 0; } .status-dot.online { color: var(--success); } .status-dot.offline { color: var(--text-muted); } .status-dot.warning { color: var(--warning); } .status-dot.error { color: var(--danger); } /* ========== PROGRESS BAR ========== */ .progress-bar { background: var(--border); border-radius: 4px; height: 6px; overflow: hidden; } .progress-fill { height: 100%; background: var(--primary-gradient); border-radius: 4px; transition: width 0.6s ease; } /* ========== SECTION DIVIDER ========== */ .section-divider { border: none; border-top: 1px solid var(--border); margin: 20px 0; } /* ========== TOOLTIP ========== */ [data-tooltip] { position: relative; display: inline-flex; align-items: center; justify-content: center; } [data-tooltip]::after { content: attr(data-tooltip); position: absolute; bottom: calc(100% + 8px); left: 50%; transform: translateX(-50%); background: #1a1a1a; color: #fff; font-size: 12px; padding: 5px 10px; border-radius: 6px; white-space: nowrap; pointer-events: none; opacity: 0; transition: opacity 0.15s, transform 0.15s; z-index: 9999; box-shadow: 0 2px 8px rgba(0,0,0,0.2); line-height: 1.4; } [data-tooltip]:hover::after { opacity: 1; transform: translateX(-50%) translateY(-2px); } [data-tooltip]:focus::after, [data-tooltip]:focus-visible::after { opacity: 1; transform: translateX(-50%) translateY(-2px); } /* 表格操作按钮专用 tooltip */ .kb-table-actions [data-tooltip]::after { bottom: calc(100% + 4px); } /* 防止 tooltip 被遮挡 */ .dropdown-menu + [data-tooltip]::after { display: none; } /* ========== RESPONSIVE ========== */ @media (max-width: 1180px) { .settings-layout { grid-template-columns: minmax(0, 1fr); } .settings-sidebar { position: sticky; top: -1px; z-index: 5; padding: 8px; } .settings-sidebar-title, .settings-sidebar-status { display: none; } .settings-sidebar-nav { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; } .settings-nav-item { min-height: 48px; } .settings-section-card { scroll-margin-top: 82px; } } @media (max-width: 1024px) { .charts-grid { grid-template-columns: 1fr; } .config-panels { grid-template-columns: 1fr; } .session-detail-layout { grid-template-columns: 1fr; } .session-device-layout { grid-template-columns: 1fr; } .session-filter-panel { flex-direction: column; } .session-filter-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); } .notification-principles { grid-template-columns: 1fr; } .notification-rule-row { grid-template-columns: 1fr; } .settings-content .notification-principles { grid-template-columns: repeat(3, minmax(0, 1fr)); } .settings-content .notification-rule-row { grid-template-columns: 1fr; } .settings-content .notification-rule-controls { padding-top: 12px; padding-left: 0; border-top: 1px solid var(--border); border-left: 0; } .notif-detail-meta { grid-template-columns: 1fr; } #replayPanel { position: relative !important; } } @media (max-width: 768px) { .sidebar { position: fixed; left: 0; top: 0; bottom: 0; z-index: 200; transform: translateX(-100%); transition: transform 0.25s ease; } .sidebar.mobile-open { transform: translateX(0); } .form-row { grid-template-columns: 1fr; } .settings-two-column { grid-template-columns: 1fr; } .settings-sidebar-nav { grid-template-columns: repeat(2, minmax(0, 1fr)); } .settings-section-card { scroll-margin-top: 138px; } .settings-content .notification-principles { grid-template-columns: 1fr; } .settings-content .notification-principles small { white-space: normal; } .kpi-grid { grid-template-columns: repeat(2, 1fr); } .session-drilldown-banner { align-items: flex-start; flex-direction: column; } .session-panel-actions { width: 100%; align-items: stretch; flex-direction: column; } .session-panel-actions .btn { width: 100%; justify-content: center; } .session-filter-main, .session-topic-summary { grid-template-columns: 1fr; } .session-filter-stats { grid-template-columns: 1fr; } .session-message-text { max-width: 82%; } } @media (max-width: 560px) { .settings-page-header { margin-bottom: 16px; } .settings-nav-item { min-height: 44px; padding: 6px 8px; } .settings-nav-icon { width: 28px; height: 28px; flex-basis: 28px; } .settings-nav-item small { display: none; } .settings-section-header { min-height: 68px; align-items: flex-start; flex-direction: column; padding: 14px 16px; } .settings-section-header > .btn { width: 100%; justify-content: center; } .settings-section-body { padding: 16px; } .settings-section-footer { align-items: stretch; flex-direction: column; padding: 12px 16px; } .settings-section-footer .btn { width: 100%; justify-content: center; } .settings-section-count { margin-left: 48px; } } @media (max-width: 768px) { .kpi-grid { grid-template-columns: 1fr; } } /* ========== ANIMATIONS ========== */ @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } .page.active { animation: fadeIn 0.2s ease; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .loading-pulse { animation: pulse 1.5s ease-in-out infinite; } /* ========== NOTIFICATION TOAST ========== */ .toast-container { position: fixed; top: 20px; right: 20px; z-index: 9999; display: flex; flex-direction: column; gap: 8px; } .toast { display: flex; align-items: center; gap: 10px; padding: 12px 16px; background: #fff; border-radius: var(--radius); box-shadow: var(--shadow-lg); border-left: 4px solid var(--primary); min-width: 280px; animation: slideIn 0.25s ease; } .toast.success { border-color: var(--success); } .toast.error { border-color: var(--danger); } .toast.warning { border-color: var(--warning); } @keyframes slideIn { from { opacity: 0; transform: translateX(100%); } to { opacity: 1; transform: translateX(0); } } /* ========== COLLAPSE ========== */ .collapse-trigger { cursor: pointer; user-select: none; } .collapse-content { display: none; } .collapse-content.open { display: block; } /* ========== SKELETON LOADING ========== */ .skeleton { background: linear-gradient(90deg, var(--bg-base) 25%, #e8e8e8 50%, var(--bg-base) 75%); background-size: 200% 100%; animation: skeleton-loading 1.5s ease-in-out infinite; border-radius: var(--radius-sm); } @keyframes skeleton-loading { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } .skeleton-text { height: 14px; margin-bottom: 8px; } .skeleton-text:last-child { width: 60%; } .skeleton-title { height: 24px; width: 40%; margin-bottom: 16px; } .skeleton-avatar { width: 40px; height: 40px; border-radius: 50%; } .skeleton-card { height: 120px; margin-bottom: 16px; } /* ========================================== 知识库管理模块样式 ========================================== */ /* 返回按钮 */ .page-back-btn { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 13px; color: var(--text-secondary); background: var(--bg-white); cursor: pointer; transition: var(--transition); } .page-back-btn:hover { border-color: var(--primary); color: var(--primary); } /* 知识库列表页 */ .kb-list-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; } .kb-list-title { display: flex; align-items: center; gap: 12px; } .kb-list-stats { display: flex; align-items: center; gap: 8px; padding: 6px 12px; background: var(--primary-bg); border-radius: 20px; font-size: 12px; color: var(--primary-dark); } .kb-list-actions { display: flex; align-items: center; gap: 8px; } /* 知识库表格 */ .kb-table-wrapper { background: var(--bg-white); border-radius: var(--radius-lg); border: 1px solid var(--border); overflow: hidden; } .kb-table { width: 100%; border-collapse: collapse; font-size: 13.5px; } .kb-table thead { background: #fafafa; } .kb-table thead th { padding: 12px 16px; text-align: left; font-weight: 600; color: var(--text-secondary); font-size: 12px; text-transform: uppercase; letter-spacing: 0.4px; border-bottom: 1px solid var(--border); white-space: nowrap; } .kb-table thead th.sortable { cursor: pointer; user-select: none; } .kb-table thead th.sortable:hover { color: var(--primary); } .kb-table thead th .sort-icon { margin-left: 4px; opacity: 0.4; } .kb-table thead th.sorted .sort-icon { opacity: 1; color: var(--primary); } .kb-table tbody td { padding: 14px 16px; border-bottom: 1px solid var(--border); color: var(--text-primary); vertical-align: middle; } .kb-table tbody tr:last-child td { border-bottom: none; } .kb-table tbody tr:hover td { background: #fafcff; } .kb-table tbody tr.selected td { background: rgba(82, 196, 26, 0.05); } /* 表格复选框 */ .kb-table .row-checkbox { width: 18px; height: 18px; accent-color: var(--primary); cursor: pointer; } /* 知识库名称单元格 */ .kb-name-cell { display: flex; align-items: center; gap: 10px; } .kb-name-icon { width: 36px; height: 36px; border-radius: var(--radius-sm); background: var(--primary-bg); display: flex; align-items: center; justify-content: center; color: var(--primary); flex-shrink: 0; } .kb-name-text { font-weight: 500; color: var(--text-primary); max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .kb-name-desc { font-size: 12px; color: var(--text-muted); max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* ID单元格 */ .kb-id-cell { font-family: 'SF Mono', Monaco, monospace; font-size: 12px; color: var(--text-muted); } /* 标签列表 */ .kb-tags-cell { display: flex; flex-wrap: wrap; gap: 4px; } /* 表格操作 */ .kb-table-actions { display: flex; align-items: center; gap: 4px; } /* 分页器 */ .kb-pagination { display: flex; align-items: center; justify-content: space-between; padding: 16px; border-top: 1px solid var(--border); background: #fafafa; } .kb-pagination-info { font-size: 13px; color: var(--text-secondary); } .kb-pagination-controls { display: flex; align-items: center; gap: 4px; } .kb-pagination-btn { width: 32px; height: 32px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg-white); color: var(--text-secondary); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: var(--transition); font-size: 13px; } .kb-pagination-btn:hover:not(:disabled) { border-color: var(--primary); color: var(--primary); } .kb-pagination-btn:disabled { opacity: 0.5; cursor: not-allowed; } .kb-pagination-btn.active { background: var(--primary); border-color: var(--primary); color: #fff; } /* 批量操作栏 */ .kb-batch-bar { display: none; align-items: center; gap: 12px; padding: 12px 16px; background: var(--primary-bg); border-radius: var(--radius); margin-bottom: 16px; animation: slideDown 0.2s ease; } .kb-batch-bar.visible { display: flex; } .kb-batch-info { flex: 1; font-size: 13px; color: var(--primary-dark); } .kb-batch-actions { display: flex; gap: 8px; } @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } /* 知识库类型标签 */ .kb-type-tag { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 4px; font-size: 12px; font-weight: 500; } .kb-type-tag.doc_search { background: #e6f7ff; color: #1890ff; } .kb-type-tag.data_query { background: #fff7e6; color: #fa8c16; } .kb-type-tag.image_qa { background: #f9f0ff; color: #722ed1; } .kb-type-tag.video_search { background: #fff1f0; color: #ff4d4f; } /* 状态徽章 */ .kb-status-badge { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: 12px; font-size: 12px; font-weight: 500; } .kb-status-badge.ready { background: #f6ffed; color: #52c41a; border: 1px solid #b7eb8f; } .kb-status-badge.processing { background: #fffbe6; color: #faad14; border: 1px solid #ffe58f; } .kb-status-badge.error { background: #fff2f0; color: #ff4d4f; border: 1px solid #ffccc7; } .kb-status-badge.uploading { background: #e6f7ff; color: #1890ff; border: 1px solid #91d5ff; } .kb-status-badge .status-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; } .kb-status-badge.processing .status-dot, .kb-status-badge.uploading .status-dot { animation: pulse 1s ease-in-out infinite; } /* 加载状态 */ .kb-loading { display: flex; align-items: center; justify-content: center; padding: 60px 20px; color: var(--text-muted); } .kb-loading-spinner { width: 24px; height: 24px; border: 2px solid var(--border); border-top-color: var(--primary); border-radius: 50%; animation: spin 0.8s linear infinite; margin-right: 12px; } @keyframes spin { to { transform: rotate(360deg); } } /* 空状态 */ .kb-empty { text-align: center; padding: 80px 20px; } .kb-empty-icon { width: 80px; height: 80px; margin: 0 auto 24px; background: var(--bg-base); border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--text-placeholder); } .kb-empty-icon i { width: 36px; height: 36px; } .kb-empty-title { font-size: 16px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .kb-empty-desc { font-size: 13px; color: var(--text-muted); margin-bottom: 24px; } /* 筛选器样式 */ .filter-tabs { display: flex; gap: 4px; background: var(--bg-white); border: 1px solid var(--border); border-radius: var(--radius); padding: 4px; } .filter-tab { padding: 6px 14px; border-radius: 6px; font-size: 13px; color: var(--text-secondary); cursor: pointer; transition: var(--transition); display: flex; align-items: center; gap: 6px; white-space: nowrap; } .filter-tab.active { background: var(--primary); color: #fff; } .filter-tab:hover:not(.active) { background: var(--bg-base); color: var(--text-primary); } .filter-count { background: rgba(0,0,0,0.1); border-radius: 10px; padding: 1px 6px; font-size: 11px; font-weight: 600; min-width: 18px; text-align: center; } .filter-tab.active .filter-count { background: rgba(255,255,255,0.25); } .filter-search { display: flex; align-items: center; gap: 8px; background: var(--bg-white); border: 1px solid var(--border); border-radius: var(--radius); padding: 6px 12px; min-width: 220px; } .filter-search input { border: none; outline: none; background: transparent; font-size: 13px; color: var(--text-primary); width: 100%; } /* ========== 知识库选择弹窗 ========== */ .kb-select-modal { width: 720px; max-width: 95vw; } .kb-select-modal-header { margin-bottom: 16px; } .kb-select-modal-filters { display: flex; flex-direction: column; gap: 12px; } .kb-select-type-filter { display: flex; gap: 8px; flex-wrap: wrap; } .kb-select-type-btn { padding: 6px 12px; border: 1px solid var(--border); border-radius: 16px; font-size: 12px; color: var(--text-secondary); background: var(--bg-white); cursor: pointer; transition: var(--transition); } .kb-select-type-btn:hover { border-color: var(--primary-light); color: var(--primary); } .kb-select-type-btn.active { border-color: var(--primary); background: var(--primary-bg); color: var(--primary); } .kb-select-list-area { max-height: 400px; overflow-y: auto; margin: 0 -28px; padding: 0 28px; } .kb-select-item { display: flex; align-items: center; gap: 12px; padding: 14px 0; border-bottom: 1px solid var(--border); transition: var(--transition); } .kb-select-item:last-child { border-bottom: none; } .kb-select-item:hover { background: var(--bg-base); margin: 0 -28px; padding: 14px 28px; } .kb-select-icon { width: 44px; height: 44px; border-radius: var(--radius-sm); background: var(--primary-bg); display: flex; align-items: center; justify-content: center; color: var(--primary); flex-shrink: 0; } .kb-select-info { flex: 1; min-width: 0; } .kb-select-name { font-weight: 500; color: var(--text-primary); margin-bottom: 4px; display: flex; align-items: center; gap: 8px; } .kb-select-meta { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text-muted); flex-wrap: wrap; } .kb-select-tags { display: flex; gap: 4px; margin-top: 6px; } .kb-select-action { flex-shrink: 0; } .kb-select-modal-footer { display: flex; justify-content: space-between; align-items: center; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--border); } .kb-select-info-summary { font-size: 13px; color: var(--text-muted); } .kb-create-link-btn { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--primary); cursor: pointer; transition: var(--transition); } .kb-create-link-btn:hover { text-decoration: underline; } /* ========== 知识库创建向导 ========== */ .kb-create-wizard { max-width: 960px; margin: 0 auto; } .wizard-steps { display: flex; align-items: center; justify-content: center; margin: 32px 0; padding: 0 40px; } .wizard-step { display: flex; flex-direction: column; align-items: center; gap: 8px; } .wizard-step-num { width: 36px; height: 36px; border-radius: 50%; background: var(--bg-base); border: 2px solid var(--border); display: flex; align-items: center; justify-content: center; font-size: 14px; font-weight: 600; color: var(--text-muted); transition: var(--transition); } .wizard-step.active .wizard-step-num { background: var(--primary); border-color: var(--primary); color: #fff; } .wizard-step.completed .wizard-step-num { background: var(--success); border-color: var(--success); color: #fff; } .wizard-step-label { font-size: 13px; color: var(--text-muted); white-space: nowrap; } .wizard-step.active .wizard-step-label { color: var(--primary); font-weight: 500; } .wizard-step.completed .wizard-step-label { color: var(--success); } .wizard-step-line { flex: 1; height: 2px; background: var(--border); margin: 0 24px; max-width: 120px; } .wizard-step-line.completed { background: var(--success); } .wizard-content { background: var(--bg-white); border-radius: var(--radius-lg); border: 1px solid var(--border); padding: 32px; margin-bottom: 24px; } .wizard-footer { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px 24px; background: var(--bg-white); border-radius: var(--radius-lg); border: 1px solid var(--border); position: sticky; bottom: 24px; } .wizard-footer-left, .wizard-footer-right { display: flex; gap: 12px; } /* 知识库类型选择卡片 */ .kb-type-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; } .kb-type-card { position: relative; padding: 20px; border: 2px solid var(--border); border-radius: var(--radius); cursor: pointer; transition: var(--transition); } .kb-type-card:hover { border-color: var(--primary-light); background: var(--primary-bg); } .kb-type-card.selected { border-color: var(--primary); background: var(--primary-bg); } .kb-type-card .check-icon { position: absolute; top: 12px; right: 12px; width: 20px; height: 20px; border-radius: 50%; background: var(--primary); color: #fff; display: flex; align-items: center; justify-content: center; opacity: 0; transform: scale(0.5); transition: var(--transition); } .kb-type-card.selected .check-icon { opacity: 1; transform: scale(1); } .kb-type-card-icon { width: 48px; height: 48px; border-radius: var(--radius); background: var(--bg-white); display: flex; align-items: center; justify-content: center; color: var(--primary); margin-bottom: 12px; box-shadow: var(--shadow-sm); } .kb-type-card-title { font-size: 15px; font-weight: 600; color: var(--text-primary); margin-bottom: 6px; } .kb-type-card-desc { font-size: 12px; color: var(--text-muted); line-height: 1.5; } /* 帮助提示链接 */ .form-help-link { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--info); cursor: pointer; margin-top: 12px; } .form-help-link:hover { text-decoration: underline; } /* ========== 数据源相关 ========== */ .data-source-tabs { display: flex; gap: 4px; background: var(--bg-base); border-radius: var(--radius); padding: 4px; margin-bottom: 20px; } .data-source-tab { flex: 1; padding: 10px 16px; border-radius: 6px; font-size: 13px; color: var(--text-secondary); text-align: center; cursor: pointer; transition: var(--transition); } .data-source-tab:hover { color: var(--primary); } .data-source-tab.active { background: var(--bg-white); color: var(--primary); font-weight: 500; box-shadow: var(--shadow-sm); } /* 上传区域 */ .upload-zone { border: 2px dashed var(--border); border-radius: var(--radius); padding: 40px 20px; text-align: center; transition: var(--transition); background: var(--bg-base); } .upload-zone:hover, .upload-zone.dragover { border-color: var(--primary); background: var(--primary-bg); } .upload-zone-icon { font-size: 48px; margin-bottom: 16px; } .upload-zone-text { font-size: 14px; color: var(--text-secondary); margin-bottom: 16px; } .upload-zone-hint { font-size: 12px; color: var(--text-muted); margin-top: 16px; } /* 文件列表 */ .file-list { margin-top: 20px; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; } .file-list-header { display: flex; align-items: center; padding: 12px 16px; background: #fafafa; font-size: 12px; font-weight: 600; color: var(--text-secondary); text-transform: uppercase; letter-spacing: 0.4px; border-bottom: 1px solid var(--border); } .file-list-item { display: flex; align-items: center; padding: 12px 16px; border-bottom: 1px solid var(--border); transition: var(--transition); } .file-list-item:last-child { border-bottom: none; } .file-list-item:hover { background: var(--bg-base); } .file-icon { font-size: 24px; margin-right: 12px; flex-shrink: 0; } .file-info { flex: 1; min-width: 0; } .file-name { font-size: 13px; font-weight: 500; color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .file-meta { font-size: 12px; color: var(--text-muted); } .file-actions { display: flex; gap: 4px; } /* 文件状态 */ .file-status { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; min-width: 80px; } .file-status.pending { color: var(--text-muted); } .file-status.uploading { color: var(--info); } .file-status.ready { color: var(--success); } .file-status.error { color: var(--danger); } .file-status.processing { color: var(--warning); } .file-status .spinner { width: 12px; height: 12px; border: 2px solid var(--border); border-top-color: currentColor; border-radius: 50%; animation: spin 0.8s linear infinite; } /* 类目选择器 */ .category-selector { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; flex-wrap: wrap; } /* 自动同步开关 */ .sync-switch { display: flex; align-items: center; justify-content: space-between; padding: 16px; background: var(--bg-base); border-radius: var(--radius); margin-bottom: 20px; } .sync-switch-label { font-size: 13px; font-weight: 500; color: var(--text-primary); } .sync-switch-desc { font-size: 12px; color: var(--text-muted); margin-top: 4px; } /* Switch开关 */ .switch { position: relative; display: inline-block; width: 44px; height: 24px; flex-shrink: 0; } .switch input { opacity: 0; width: 0; height: 0; } .switch-slider { position: absolute; cursor: pointer; inset: 0; background: #d9d9d9; border-radius: 12px; transition: var(--transition); } .switch-slider::before { content: ''; position: absolute; height: 18px; width: 18px; left: 3px; bottom: 3px; background: #fff; border-radius: 50%; transition: var(--transition); box-shadow: 0 1px 4px rgba(0,0,0,0.15); } .switch input:checked + .switch-slider { background: var(--primary); } .switch input:checked + .switch-slider::before { transform: translateX(20px); } /* 文件对比面板 */ .file-compare { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .file-compare-panel { border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; } .file-compare-header { display: flex; align-items: center; gap: 8px; padding: 12px 16px; background: #fafafa; font-size: 13px; font-weight: 500; color: var(--text-secondary); border-bottom: 1px solid var(--border); } .file-compare-body { padding: 12px; max-height: 250px; overflow-y: auto; } .file-compare-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; border-radius: var(--radius-sm); cursor: pointer; transition: var(--transition); } .file-compare-item:hover { background: var(--bg-base); } .file-compare-item.selected { background: var(--primary-bg); border: 1px solid var(--primary-light); } .file-compare-empty { text-align: center; padding: 40px 20px; color: var(--text-muted); font-size: 13px; } /* 解析方式选择器 */ .parse-method-selector { display: flex; flex-wrap: wrap; gap: 8px; } .parse-method-option { display: flex; align-items: center; gap: 6px; padding: 8px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 13px; cursor: pointer; transition: var(--transition); } .parse-method-option:hover { border-color: var(--primary-light); } .parse-method-option.selected { border-color: var(--primary); background: var(--primary-bg); color: var(--primary); } /* ========== 索引设置相关 ========== */ /* 切片配置面板 */ .slice-config-panel { padding: 16px; background: var(--bg-base); border-radius: var(--radius); margin-bottom: 20px; } .slice-config-row { display: flex; align-items: center; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid var(--border); } .slice-config-row:last-child { border-bottom: none; } .slice-config-label { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--text-secondary); } .slice-config-control { display: flex; align-items: center; gap: 8px; } /* 范围滑块 */ .range-slider { display: flex; align-items: center; gap: 12px; width: 100%; } .range-slider input[type="range"] { flex: 1; height: 4px; -webkit-appearance: none; appearance: none; background: var(--border); border-radius: 2px; outline: none; } .range-slider input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--primary); cursor: pointer; box-shadow: 0 1px 4px rgba(0,0,0,0.15); } .range-slider-value { min-width: 40px; text-align: center; font-weight: 600; color: var(--primary); } .range-slider-hint { font-size: 12px; color: var(--text-muted); min-width: 60px; } /* Help Tooltip */ .help-tip { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 50%; background: var(--bg-base); color: var(--text-muted); font-size: 11px; cursor: pointer; margin-left: 4px; transition: var(--transition); } .help-tip:hover { background: var(--primary); color: #fff; } /* 字符计数器 */ .char-counter { font-size: 12px; color: var(--text-muted); text-align: right; margin-top: 4px; } .char-counter.warning { color: var(--warning); } /* 高级参数折叠面板 */ .advanced-config { margin-top: 24px; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; } .advanced-config-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; background: #fafafa; font-size: 13px; font-weight: 500; color: var(--text-secondary); cursor: pointer; transition: var(--transition); } .advanced-config-header:hover { background: var(--bg-base); } .advanced-config-header i { transition: transform 0.2s; } .advanced-config.open .advanced-config-header i { transform: rotate(180deg); } .advanced-config-body { display: none; padding: 16px; background: var(--bg-white); } .advanced-config.open .advanced-config-body { display: block; } /* ========== 知识库详情页 ========== */ .kb-detail-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 24px; padding: 24px; background: var(--bg-white); border-radius: var(--radius-lg); border: 1px solid var(--border); margin-bottom: 20px; } .kb-detail-info { flex: 1; } .kb-detail-title { display: flex; align-items: center; gap: 12px; font-size: 18px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .kb-detail-desc { font-size: 13px; color: var(--text-secondary); margin-bottom: 12px; } .kb-detail-meta { display: flex; flex-wrap: wrap; gap: 16px; font-size: 12px; color: var(--text-muted); } .kb-detail-meta span { display: flex; align-items: center; gap: 4px; } .kb-detail-actions { display: flex; gap: 8px; flex-shrink: 0; } /* 详情Tab */ .kb-detail-tabs { display: flex; gap: 4px; background: var(--bg-white); border: 1px solid var(--border); border-radius: var(--radius); padding: 4px; margin-bottom: 20px; } .kb-detail-tab { flex: 1; padding: 10px 20px; border-radius: 6px; font-size: 13px; color: var(--text-secondary); text-align: center; cursor: pointer; transition: var(--transition); } .kb-detail-tab:hover { color: var(--primary); } .kb-detail-tab.active { background: var(--primary); color: #fff; } /* ========== 切片相关 ========== */ .slice-list { max-height: 400px; overflow-y: auto; } .slice-list-item { padding: 16px; border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 12px; transition: var(--transition); } .slice-list-item:hover { border-color: var(--primary-light); } .slice-list-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } .slice-list-content { font-size: 13px; line-height: 1.7; color: var(--text-secondary); background: var(--bg-base); padding: 12px; border-radius: var(--radius-sm); } /* 切片编辑 */ .slice-edit-content textarea { font-family: 'SF Mono', Monaco, monospace; font-size: 13px; line-height: 1.6; } .slice-edit-footer { display: flex; justify-content: space-between; font-size: 12px; color: var(--text-muted); margin-top: 8px; } /* ========== Meta信息表格 ========== */ .meta-info-table { width: 100%; border-collapse: collapse; } .meta-info-table td { padding: 10px 12px; border-bottom: 1px solid var(--border); font-size: 13px; } .meta-info-table td:first-child { width: 100px; color: var(--text-muted); font-weight: 500; } .meta-info-table tr:last-child td { border-bottom: none; } /* ========== 标签相关 ========== */ .tag-list { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 20px; } .tag { display: inline-flex; align-items: center; gap: 4px; padding: 4px 10px; background: var(--primary-bg); border: 1px solid var(--primary-light); border-radius: 16px; font-size: 12px; color: var(--primary-dark); } .tag-item { display: inline-flex; align-items: center; gap: 6px; padding: 6px 12px; background: var(--primary-bg); border: 1px solid var(--primary-light); border-radius: 16px; font-size: 13px; color: var(--primary-dark); } .remove-tag { cursor: pointer; opacity: 0.6; transition: var(--transition); } .remove-tag:hover { opacity: 1; color: var(--danger); } .add-tag-input { display: inline-flex; align-items: center; } .add-tag-input input { padding: 6px 12px; border: 1px dashed var(--border); border-radius: 16px; font-size: 13px; outline: none; width: 120px; transition: var(--transition); } .add-tag-input input:focus { border-color: var(--primary); border-style: solid; } /* ========== 命中测试 ========== */ .hit-test-panel { padding: 24px; background: var(--bg-base); border-radius: var(--radius); } .hit-test-query { display: flex; gap: 12px; margin-bottom: 20px; } .hit-test-query input { flex: 1; } .hit-test-results { max-height: 350px; overflow-y: auto; } .hit-test-result-item { padding: 16px; background: var(--bg-white); border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 12px; } .hit-test-result-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; } .hit-test-result-source { display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; color: var(--text-primary); } .hit-test-result-meta { display: flex; gap: 12px; font-size: 12px; color: var(--text-muted); margin-bottom: 8px; } .hit-test-result-content { font-size: 13px; line-height: 1.7; color: var(--text-secondary); background: var(--bg-base); padding: 12px; border-radius: var(--radius-sm); max-height: 100px; overflow: hidden; } .hit-test-result-content.expanded { max-height: none; } /* 历史记录 */ .history-record { border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; } .history-record-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; background: #fafafa; font-size: 13px; font-weight: 500; color: var(--text-secondary); cursor: pointer; transition: var(--transition); } .history-record-header:hover { background: var(--bg-base); } .history-record-body { display: none; max-height: 200px; overflow-y: auto; } .history-record.open .history-record-body { display: block; } .history-record.open .history-record-header i { transform: rotate(180deg); } .history-record-item { padding: 12px 16px; border-bottom: 1px solid var(--border); cursor: pointer; transition: var(--transition); } .history-record-item:last-child { border-bottom: none; } .history-record-item:hover { background: var(--bg-base); } .history-record-time { font-size: 11px; color: var(--text-muted); margin-bottom: 4px; } .history-record-query { font-size: 13px; color: var(--text-primary); margin-bottom: 2px; } .history-record-result { font-size: 12px; color: var(--text-secondary); } /* 快捷问题标签 */ .quick-questions { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 16px; } .quick-question-tag { padding: 6px 12px; background: var(--bg-white); border: 1px solid var(--border); border-radius: 16px; font-size: 12px; color: var(--text-secondary); cursor: pointer; transition: var(--transition); } .quick-question-tag:hover { border-color: var(--primary); color: var(--primary); } /* ========== 下拉菜单 ========== */ .dropdown { position: relative; } .dropdown-menu { position: absolute; top: 100%; right: 0; background: var(--bg-white); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--shadow); min-width: 140px; z-index: 100; opacity: 0; visibility: hidden; transform: translateY(-4px); transition: all 0.15s ease; } .dropdown.open .dropdown-menu { opacity: 1; visibility: visible; transform: translateY(0); } .dropdown-item { display: flex; align-items: center; gap: 8px; padding: 10px 14px; font-size: 13px; color: var(--text-secondary); cursor: pointer; transition: var(--transition); } .dropdown-item:hover { background: var(--bg-base); color: var(--text-primary); } .dropdown-item.danger { color: var(--danger); } .dropdown-item.danger:hover { background: #fff2f0; } .dropdown-divider { height: 1px; background: var(--border); margin: 4px 0; } /* ========== 确认弹窗 ========== */ .confirm-leave-modal p { margin-bottom: 8px; font-size: 14px; color: var(--text-primary); } .confirm-leave-modal .warning-text { color: var(--warning); font-size: 13px; } /* ========== API说明卡片 ========== */ .api-note { display: flex; align-items: flex-start; gap: 10px; padding: 12px 16px; background: #fffbe6; border: 1px solid #ffe58f; border-radius: var(--radius-sm); font-size: 12.5px; color: #ad8b00; margin-top: 8px; } .api-note i { color: #faad14; flex-shrink: 0; margin-top: 1px; } /* ========== OTA 最新版本确认流 ========== */ .ota-latest-flow { display: flex; flex-direction: column; gap: 14px; } .ota-latest-hero { display: flex; align-items: flex-start; gap: 14px; } .ota-latest-icon { width: 44px; height: 44px; border-radius: 12px; background: #f6ffed; color: var(--primary); border: 1px solid rgba(82,196,26,0.16); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .ota-latest-icon svg { width: 22px; height: 22px; } .ota-latest-title { font-size: 15px; line-height: 1.35; font-weight: 700; color: var(--text-primary); } .ota-latest-desc { margin-top: 5px; font-size: 13px; line-height: 1.55; color: var(--text-muted); } .ota-version-compare { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 10px; align-items: center; } .ota-version-box { padding: 11px 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-base); } .ota-version-box.target { background: #f6ffed; border-color: rgba(82,196,26,0.22); } .ota-version-box span { display: block; margin-bottom: 5px; color: var(--text-muted); font-size: 12px; } .ota-version-box strong { color: var(--text-primary); font-size: 14px; } .ota-version-box.target strong { color: var(--primary); } .ota-version-arrow { color: var(--text-muted); display: flex; align-items: center; justify-content: center; } .ota-version-arrow svg { width: 18px; height: 18px; } .ota-latest-section { padding-top: 2px; } .ota-latest-section-title { margin-bottom: 9px; color: var(--text-primary); font-size: 13px; font-weight: 700; } .ota-upgrade-options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .ota-upgrade-option { display: flex; align-items: flex-start; gap: 9px; padding: 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-white); cursor: pointer; transition: var(--transition); } .ota-upgrade-option:hover { border-color: rgba(82,196,26,0.28); background: #fbfffa; } .ota-upgrade-option.active { border-color: rgba(82,196,26,0.42); background: #f6ffed; box-shadow: inset 0 0 0 1px rgba(82,196,26,0.08); } .ota-upgrade-option input { margin-top: 2px; accent-color: var(--primary); } .ota-upgrade-option strong { display: block; color: var(--text-primary); font-size: 13px; line-height: 1.25; } .ota-upgrade-option small { display: block; margin-top: 5px; color: var(--text-muted); font-size: 12px; line-height: 1.45; } .ota-latest-task-config { padding: 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-base); } .ota-upgrade-preview { min-height: 40px; padding: 10px 12px; border: 1px solid rgba(82,196,26,0.18); border-radius: 10px; background: #f6ffed; color: var(--primary); font-size: 14px; font-weight: 700; } @media (max-width: 640px) { .ota-version-compare, .ota-upgrade-options { grid-template-columns: 1fr; } .ota-version-arrow { transform: rotate(90deg); } } /* ========== 错误提示 ========== */ .error-tip { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--danger); margin-top: 4px; } /* ========== 解析进度 ========== */ .parse-progress { margin-top: 16px; } .parse-progress-header { display: flex; align-items: center; justify-content: space-between; font-size: 12px; color: var(--text-secondary); margin-bottom: 8px; } .parse-progress-bar { height: 6px; background: var(--border); border-radius: 3px; overflow: hidden; } .parse-progress-fill { height: 100%; background: var(--primary-gradient); border-radius: 3px; transition: width 0.3s ease; } /* ========== 保存草稿提示 ========== */ .save-draft-hint { font-size: 12px; color: var(--text-muted); margin-top: 8px; display: flex; align-items: center; gap: 6px; } /* ========== 类目管理抽屉 ========== */ .drawer-overlay { position: fixed; inset: 0; background: rgba(0,0,0,0.45); z-index: 1000; opacity: 0; pointer-events: none; transition: opacity 0.2s; } .drawer-overlay.open { opacity: 1; pointer-events: all; } .drawer { position: fixed; top: 0; right: 0; width: 480px; max-width: 90vw; height: 100vh; background: var(--bg-white); box-shadow: var(--shadow-lg); transform: translateX(100%); transition: transform 0.25s ease; z-index: 1001; display: flex; flex-direction: column; } .drawer.open { transform: translateX(0); } .drawer-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--border); } .drawer-title { font-size: 16px; font-weight: 600; } .drawer-close { width: 28px; height: 28px; border-radius: 6px; display: flex; align-items: center; justify-content: center; color: var(--text-muted); cursor: pointer; transition: var(--transition); } .drawer-close:hover { background: var(--bg-base); color: var(--text-primary); } .drawer-body { flex: 1; padding: 20px; overflow-y: auto; } .drawer-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 16px 20px; border-top: 1px solid var(--border); } /* ========== Tooltip弹窗样式 ========== */ .tooltip-modal-content { padding: 8px; } .tooltip-modal-item { padding: 12px 16px; border-radius: var(--radius-sm); transition: var(--transition); } .tooltip-modal-item:hover { background: var(--bg-base); } .tooltip-modal-item-title { display: flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: var(--text-primary); margin-bottom: 4px; } .tooltip-modal-item-desc { font-size: 13px; color: var(--text-secondary); line-height: 1.5; padding-left: 28px; } /* ========== 帮助弹窗内容 ========== */ .help-modal-content { max-height: 400px; overflow-y: auto; } .help-modal-item { padding: 16px; border-bottom: 1px solid var(--border); } .help-modal-item:last-child { border-bottom: none; } .help-modal-item-title { display: flex; align-items: center; gap: 10px; font-size: 14px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .help-modal-item-icon { width: 32px; height: 32px; border-radius: var(--radius-sm); background: var(--primary-bg); display: flex; align-items: center; justify-content: center; color: var(--primary); } .help-modal-item-desc { font-size: 13px; color: var(--text-secondary); line-height: 1.6; padding-left: 42px; } /* ========== 解析失败提示 ========== */ .parse-error-tip { display: flex; align-items: flex-start; gap: 8px; padding: 12px 16px; background: #fff2f0; border: 1px solid #ffccc7; border-radius: var(--radius-sm); font-size: 13px; color: var(--danger); margin-top: 12px; } /* ========== 无权限状态 ========== */ .no-permission { text-align: center; padding: 60px 20px; } .no-permission-icon { width: 80px; height: 80px; margin: 0 auto 24px; background: #fff2f0; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--danger); } .no-permission-title { font-size: 18px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .no-permission-desc { font-size: 14px; color: var(--text-muted); margin-bottom: 24px; } /* ========== 网络异常状态 ========== */ .network-error { text-align: center; padding: 60px 20px; } .network-error-icon { width: 80px; height: 80px; margin: 0 auto 24px; background: #fffbe6; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--warning); } .network-error-title { font-size: 18px; font-weight: 600; color: var(--text-primary); margin-bottom: 8px; } .network-error-desc { font-size: 14px; color: var(--text-muted); margin-bottom: 24px; } /* ========== Diff对比 ========== */ .diff-viewer { font-family: 'SF Mono', Monaco, monospace; font-size: 13px; line-height: 1.6; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; } .diff-row { display: flex; padding: 4px 12px; } .diff-row.added { background: #f6ffed; color: var(--success); } .diff-row.removed { background: #fff2f0; color: var(--danger); } .diff-row-number { width: 40px; color: var(--text-muted); user-select: none; } .diff-row-content { flex: 1; } /* ========== 响应式调整 ========== */ @media (max-width: 768px) { .kb-type-grid { grid-template-columns: 1fr; } .file-compare { grid-template-columns: 1fr; } .kb-detail-header { flex-direction: column; } .kb-detail-actions { width: 100%; justify-content: flex-start; } .wizard-steps { padding: 0; } .wizard-step-label { display: none; } } /* ========== 打印样式 ========== */ @media print { .sidebar, .topbar, .no-print { display: none !important; } .main-content { width: 100% !important; margin: 0 !important; } .page-container { padding: 0 !important; } } /* ========== 应用管理页面样式 ========== */ .app-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 16px; } .app-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 16px; transition: var(--transition); box-shadow: var(--shadow-sm); } .app-card:hover { box-shadow: var(--shadow); border-color: var(--primary-light); } .app-card-new { display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 200px; border-style: dashed; cursor: pointer; color: var(--text-muted); } .app-card-new:hover { border-color: var(--primary); color: var(--primary); background: var(--primary-bg); } .app-card-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } .app-type-badge { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 20px; font-size: 11.5px; font-weight: 500; } .app-card-body { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 12px; } .app-icon { width: 48px; height: 48px; border-radius: var(--radius); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .app-info { flex: 1; min-width: 0; } .app-name { font-size: 15px; font-weight: 600; color: var(--text-primary); margin-bottom: 4px; } .app-desc { font-size: 12.5px; color: var(--text-secondary); line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .app-meta { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; padding: 10px; background: var(--bg-base); border-radius: var(--radius-sm); } .app-meta-item { display: flex; justify-content: space-between; align-items: center; font-size: 12.5px; } .app-meta-label { color: var(--text-muted); } .app-meta-val { color: var(--text-primary); font-weight: 500; } .app-card-actions { display: flex; align-items: center; justify-content: space-between; gap: 10px; position: relative; } .app-action-config { flex: 1; min-height: 40px; justify-content: center; font-size: 13.5px; font-weight: 600; } .app-action-more { display: flex; align-items: center; justify-content: center; position: relative; flex-shrink: 0; } .app-action-more-trigger { width: 40px; height: 40px; padding: 0; justify-content: center; border-radius: 10px; } .app-action-more-trigger i, .app-action-more-trigger svg { width: 18px; height: 18px; } .app-action-menu { position: absolute; right: 0; top: calc(100% + 8px); z-index: 80; min-width: 156px; padding: 6px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-white); box-shadow: 0 14px 34px rgba(19,45,26,0.12); opacity: 0; visibility: hidden; transform: translateY(-4px); transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s ease; } .app-action-more.open .app-action-menu { opacity: 1; visibility: visible; transform: translateY(0); } .app-action-menu::after { content: ''; position: absolute; right: 14px; top: -5px; width: 10px; height: 10px; background: var(--bg-white); border-left: 1px solid var(--border); border-top: 1px solid var(--border); transform: rotate(45deg); } .app-action-menu-item { width: 100%; display: flex; align-items: center; gap: 9px; padding: 9px 10px; border: 0; border-radius: 8px; background: transparent; color: var(--text-secondary); font-size: 13px; line-height: 1; text-align: left; cursor: pointer; transition: var(--transition); } .app-action-menu-item:hover { background: var(--bg-base); color: var(--text-primary); } .app-action-menu-item.danger { color: var(--danger); } .app-action-menu-item.danger:hover { background: #fff1f0; } .app-action-menu-item i, .app-action-menu-item svg { width: 15px; height: 15px; flex-shrink: 0; } .app-recycle-count { min-width: 18px; height: 18px; padding: 0 6px; border-radius: 999px; background: var(--primary-bg); color: var(--primary); font-size: 11px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; } .app-recycle-note { display: flex; gap: 10px; align-items: flex-start; padding: 12px; border: 1px solid #b7eb8f; border-radius: 10px; background: #f6ffed; color: var(--text-secondary); font-size: 13px; line-height: 1.55; } .app-recycle-note i, .app-recycle-note svg { width: 16px; height: 16px; color: var(--primary); flex-shrink: 0; margin-top: 2px; } .app-recycle-note strong, .app-recycle-note span { display: block; } .app-recycle-note strong { color: var(--text-primary); margin-bottom: 2px; } .app-recycle-panel { display: flex; flex-direction: column; gap: 14px; } .app-recycle-summary { display: flex; justify-content: space-between; gap: 16px; padding: 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-base); } .app-recycle-summary strong { display: block; font-size: 24px; line-height: 1; color: var(--primary); margin-bottom: 5px; } .app-recycle-summary span, .app-recycle-summary p { font-size: 12.5px; color: var(--text-muted); } .app-recycle-summary p { max-width: 520px; margin: 0; line-height: 1.6; } .app-recycle-list { display: flex; flex-direction: column; gap: 10px; max-height: 52vh; overflow-y: auto; padding-right: 2px; } .app-recycle-item { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--bg-card); transition: var(--transition); } .app-recycle-item:hover { border-color: var(--primary-light); box-shadow: var(--shadow-sm); } .app-recycle-item-main { display: flex; gap: 12px; align-items: flex-start; min-width: 0; } .app-recycle-icon { width: 40px; height: 40px; border-radius: 10px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .app-recycle-icon i, .app-recycle-icon svg { width: 19px; height: 19px; } .app-recycle-name { font-size: 14px; font-weight: 700; color: var(--text-primary); margin-bottom: 6px; } .app-recycle-meta, .app-recycle-time { display: flex; flex-wrap: wrap; gap: 8px; font-size: 12px; color: var(--text-muted); line-height: 1.5; } .app-recycle-time { margin-top: 4px; } .app-recycle-actions { display: flex; gap: 8px; align-items: center; flex-shrink: 0; } .btn-ghost.danger { color: var(--danger); } .btn-ghost.danger:hover { background: #fff1f0; border-color: #ffccc7; } .app-recycle-empty { min-height: 220px; } /* 应用类型选择器 */ .app-type-selector { display: block; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); cursor: pointer; transition: var(--transition); } .app-type-selector:hover { border-color: var(--primary); } .app-type-selector.selected { border-color: var(--primary); background: var(--primary-bg); box-shadow: 0 0 0 2px rgba(82, 196, 26, 0.2); } /* ========================================== 应用配置页面样式 (agent-config) ========================================== */ /* 整体布局 */ .agent-config-layout { display: grid; grid-template-columns: 640px minmax(0, 1fr); gap: 24px; height: calc(100vh - var(--topbar-height)); min-height: 0; padding: 24px; background: linear-gradient(180deg, rgba(246,255,237,0.72) 0%, rgba(247,250,247,0) 220px), #f7faf7; } .agent-config-left { display: flex; flex-direction: column; min-height: 0; overflow: hidden; width: 640px; } .agent-config-scroll { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 0 4px 0 0; scrollbar-gutter: stable; } .agent-config-right { display: flex; flex-direction: column; min-height: 0; min-width: 0; } /* 应用标题栏 */ .agent-config-title-bar { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px 20px; background: var(--bg-white); border: 1px solid var(--border); border-radius: 8px; margin-bottom: 16px; flex-shrink: 0; box-shadow: 0 8px 22px rgba(82,196,26,0.05); } .agent-title-info { min-width: 0; display: flex; flex-direction: column; gap: 6px; } .agent-title-main { display: flex; align-items: center; gap: 8px; } .agent-title-text { font-size: 19px; font-weight: 700; color: var(--text-primary); outline: none; padding: 4px 8px; border-radius: var(--radius-sm); border: 1px solid transparent; transition: var(--transition); max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: default; } .agent-title-text:hover { border-color: transparent; background: transparent; } .agent-title-text:focus { border-color: var(--primary); background: var(--bg-white); } .agent-title-meta { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; } .agent-title-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-shrink: 0; } .agent-id-text { font-size: 12px; color: var(--text-muted); font-family: 'SF Mono', Monaco, monospace; } .autosave-status { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--text-muted); padding: 3px 8px; border-radius: 999px; background: var(--bg-base); white-space: nowrap; } .autosave-status.saved { color: var(--success); background: #f6ffed; } .autosave-status.saving, .autosave-status.dirty { color: var(--text-secondary); background: #fafafa; } .autosave-status.error { color: var(--danger); background: #fff2f0; } .version-history-panel { display: flex; flex-direction: column; gap: 14px; } .version-history-desc { font-size: 13px; line-height: 1.6; color: var(--text-muted); padding: 10px 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-base); } .version-timeline { max-height: 62vh; overflow-y: auto; padding-right: 4px; } .version-timeline-item { display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 12px; } .version-timeline-line { position: relative; display: flex; justify-content: center; } .version-timeline-line::after { content: ''; position: absolute; top: 30px; bottom: -14px; width: 1px; background: var(--border); } .version-timeline-item:last-child .version-timeline-line::after { display: none; } .version-timeline-dot { position: relative; z-index: 1; width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: var(--text-secondary); background: var(--bg-white); border: 1px solid var(--border); } .version-timeline-item.current .version-timeline-dot { color: var(--primary); border-color: var(--primary-light); background: var(--primary-bg); } .version-timeline-item.online .version-timeline-dot { color: var(--success); border-color: #b7eb8f; background: #f6ffed; } .version-card { margin-bottom: 14px; padding: 14px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-white); } .version-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 12px; } .version-card-title { font-size: 14px; font-weight: 700; color: var(--text-primary); } .version-card-subtitle { margin-top: 4px; font-size: 12px; color: var(--text-muted); } .version-meta-grid, .version-publish-summary { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; } .version-meta-grid div, .version-publish-summary div { padding: 10px; border-radius: 8px; background: var(--bg-base); min-width: 0; } .version-meta-grid span, .version-publish-summary span, .version-info span { display: block; margin-bottom: 4px; font-size: 12px; color: var(--text-muted); } .version-meta-grid strong, .version-publish-summary strong { display: block; min-width: 0; font-size: 12px; font-weight: 600; color: var(--text-primary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .version-info { margin-top: 12px; } .version-info p { margin: 0; font-size: 13px; line-height: 1.7; color: var(--text-secondary); } .publish-version-form { display: flex; flex-direction: column; gap: 16px; } .version-publish-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); } .hotword-library-summary { flex: 1; min-width: 0; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-base); } .hotword-summary-main { min-width: 0; } .hotword-summary-title { font-size: 13px; font-weight: 700; color: var(--text-primary); margin-bottom: 4px; } .hotword-summary-desc { font-size: 12px; line-height: 1.5; color: var(--text-muted); } .hotword-manager, .hotword-editor { display: flex; flex-direction: column; gap: 16px; } .modal.hotword-editor-modal { height: min(760px, 90vh); display: flex; flex-direction: column; padding: 0; overflow: hidden; } .hotword-editor-modal .modal-header { flex-shrink: 0; margin-bottom: 0; padding: 24px 28px 18px; border-bottom: 1px solid var(--border); } .hotword-editor-modal .modal-body { flex: 1; min-height: 0; padding: 18px 28px; overflow: hidden; } .hotword-editor-modal .modal-footer { flex-shrink: 0; margin-top: 0; padding: 16px 28px 20px; background: var(--bg-white); border-top: 1px solid var(--border); } .hotword-editor-modal .hotword-editor { height: 100%; min-height: 0; } .hotword-manager-head, .hotword-editor-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .hotword-manager-title { font-size: 14px; font-weight: 700; color: var(--text-primary); } .hotword-manager-desc { margin-top: 4px; font-size: 12px; line-height: 1.5; color: var(--text-muted); } .hotword-group-list { display: flex; flex-direction: column; gap: 10px; max-height: 52vh; overflow-y: auto; } .hotword-group-item { display: grid; grid-template-columns: minmax(0, 1fr) 72px 150px 168px; gap: 12px; align-items: center; padding: 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-white); } .hotword-group-name { font-size: 13px; font-weight: 700; color: var(--text-primary); margin-bottom: 4px; } .hotword-group-preview, .hotword-group-time, .hotword-group-count { font-size: 12px; line-height: 1.5; color: var(--text-muted); } .hotword-group-count { color: var(--text-secondary); font-weight: 600; } .hotword-group-actions { display: flex; justify-content: flex-end; gap: 6px; } .hotword-entry-list { border: 1px solid var(--border); border-radius: 8px; overflow: hidden; max-height: 360px; overflow-y: auto; background: var(--bg-white); } .hotword-editor-modal .hotword-entry-list { flex: 1; min-height: 160px; max-height: none; overflow-y: auto; } .hotword-entry-row { display: grid; grid-template-columns: minmax(0, 1fr) 120px 96px; gap: 10px; align-items: center; padding: 10px; border-bottom: 1px solid var(--border); } .hotword-entry-row:last-child { border-bottom: 0; } .hotword-empty-row { padding: 24px 16px; text-align: center; font-size: 13px; color: var(--text-muted); } .hotword-select-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .hotword-select-card { display: flex; align-items: flex-start; gap: 10px; padding: 12px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-white); cursor: pointer; transition: var(--transition); } .hotword-select-card input { display: none; } .hotword-select-card:hover { border-color: var(--primary-light); background: var(--primary-bg); } .hotword-select-card.selected { border-color: var(--primary); background: var(--primary-bg); box-shadow: 0 0 0 2px rgba(82,196,26,0.08); } .hotword-select-check { width: 22px; height: 22px; border-radius: 6px; border: 1px solid var(--border-dark); color: transparent; display: flex; align-items: center; justify-content: center; flex-shrink: 0; margin-top: 2px; } .hotword-select-card.selected .hotword-select-check { border-color: var(--primary); background: var(--primary); color: #fff; } .hotword-select-main { min-width: 0; display: flex; flex-direction: column; gap: 4px; } .hotword-select-name { font-size: 13px; font-weight: 700; color: var(--text-primary); } .hotword-select-preview, .hotword-select-time { font-size: 12px; line-height: 1.5; color: var(--text-muted); } /* 配置区块 */ .config-section { background: var(--bg-white); border: 1px solid var(--border); border-radius: 8px; padding: 18px 20px; margin-bottom: 16px; flex-shrink: 0; box-shadow: 0 1px 2px rgba(18,45,18,0.03); } .config-section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; } .config-section-title { font-size: 14px; font-weight: 600; color: var(--text-primary); } .config-section-tip { font-size: 12px; color: var(--text-muted); } /* 模块标签 */ .module-tabs { display: flex; gap: 6px; background: var(--bg-white); border: 1px solid var(--border); border-radius: 8px; padding: 6px; margin-bottom: 16px; flex-shrink: 0; position: sticky; top: 0; z-index: 20; box-shadow: 0 8px 20px rgba(82,196,26,0.06); } .module-tab { flex: 1; display: flex; align-items: center; justify-content: center; gap: 6px; padding: 10px 12px; border-radius: 6px; font-size: 13px; color: var(--text-secondary); cursor: pointer; transition: var(--transition); text-align: center; } .module-tab:hover { color: var(--primary); background: #f7fbf6; } .module-tab.active { background: var(--primary); color: #fff; box-shadow: 0 4px 10px rgba(82,196,26,0.16); } .module-tab.active .help-tip { background: rgba(255,255,255,0.2); color: #fff; } .module-tab .help-tip { width: 16px; height: 16px; font-size: 10px; background: var(--bg-base); } /* 模块内容区 */ .module-content { flex: none; overflow: visible; background: transparent; border: 0; border-radius: 0; min-height: 0; display: flex; flex-direction: column; gap: 18px; } .config-module-section { background: var(--bg-white); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; scroll-margin-top: 76px; box-shadow: 0 1px 2px rgba(18,45,18,0.03); } .config-module-heading { padding: 18px 20px; border-bottom: 1px solid var(--border); background: #fbfdfb; } .config-module-heading-main { display: flex; align-items: center; gap: 10px; } .config-module-icon { width: 32px; height: 32px; border-radius: var(--radius-sm); background: var(--primary-bg); color: var(--primary); display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .config-module-title { font-size: 15px; font-weight: 700; color: var(--text-primary); line-height: 1.4; } .config-module-desc { margin-top: 2px; font-size: 12px; color: var(--text-muted); line-height: 1.5; } .module-panel { padding: 18px 20px; } /* 配置行 */ .config-row { display: flex; align-items: center; justify-content: space-between; padding: 14px 0; border-bottom: 1px solid var(--border); gap: 16px; } .config-row:last-child { border-bottom: none; } .config-row.indent { padding-left: 18px; } .prompt-config-row { display: block; } .prompt-editor-field { width: 100%; min-width: 0; } .config-row-label { font-size: 13px; color: var(--text-primary); display: flex; align-items: center; gap: 4px; flex-shrink: 0; line-height: 1.5; } /* 配置子区块 */ .config-subsection { margin-bottom: 20px; } .config-subsection-title { font-size: 13px; font-weight: 700; color: var(--text-primary); margin-bottom: 14px; display: flex; align-items: center; gap: 6px; } .config-subsection-subtitle { font-size: 12px; color: var(--text-secondary); margin: 12px 0 8px; padding-left: 16px; } /* 表单控件尺寸 */ .form-control-sm { padding: 6px 10px; font-size: 13px; } select.form-control-sm { max-width: 200px; } /* 芯片组 */ .chip-group { display: flex; flex-wrap: wrap; gap: 6px; } .chip { display: inline-flex; align-items: center; padding: 4px 10px; border: 1px solid var(--border); border-radius: 999px; font-size: 12px; color: var(--text-secondary); cursor: pointer; transition: var(--transition); user-select: none; } .chip input[type="checkbox"] { display: none; } .chip:hover { border-color: var(--primary-light); } .chip.selected { border-color: var(--primary); background: var(--primary-bg); color: var(--primary); } /* 单选框组 */ .radio-group { display: flex; flex-wrap: wrap; gap: 8px; } .radio-item { display: flex; align-items: center; gap: 6px; padding: 6px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 13px; color: var(--text-secondary); cursor: pointer; transition: var(--transition); } .radio-item:has(input:checked) { border-color: var(--primary); background: var(--primary-bg); color: var(--primary); } .radio-item input[type="radio"] { accent-color: var(--primary); } /* 提示词编辑器 */ .prompt-editor-wrap { position: relative; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; } .prompt-editor { width: 100%; height: 400px; min-height: 400px; resize: vertical; border: none; outline: none; padding: 12px; font-size: 13px; line-height: 1.7; font-family: inherit; background: var(--bg-white); } .prompt-toolbar { display: flex; gap: 4px; padding: 6px 12px; background: #fafafa; border-top: 1px solid var(--border); } .btn-xs { padding: 3px 8px; font-size: 11px; } .prompt-char-count { position: absolute; bottom: 8px; right: 12px; font-size: 11px; color: var(--text-muted); background: rgba(255,255,255,0.9); padding: 2px 6px; border-radius: 4px; } /* 知识库列表 */ .kb-list { display: flex; flex-direction: column; gap: 8px; } .kb-item { display: flex; align-items: center; gap: 10px; padding: 10px 12px; background: var(--bg-base); border-radius: var(--radius); flex: 1; } /* 底部操作栏 */ .agent-config-footer { display: flex; align-items: center; justify-content: flex-end; gap: 10px; padding: 16px 20px; background: var(--bg-white); border: 1px solid var(--border); border-radius: var(--radius-lg); margin-top: 16px; flex-shrink: 0; } /* 技能网格 */ .skill-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 8px; } .skill-item { display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 12px 8px; border: 1px solid var(--border); border-radius: var(--radius); cursor: pointer; transition: var(--transition); position: relative; opacity: 0.5; } .skill-item.enabled { opacity: 1; border-color: var(--primary-light); background: var(--primary-bg); } .skill-item:hover { opacity: 1; border-color: var(--primary); } .skill-item.add-skill { border-style: dashed; opacity: 0.7; } .skill-item.add-skill:hover { opacity: 1; border-color: var(--primary); background: var(--primary-bg); } .skill-icon { width: 32px; height: 32px; border-radius: var(--radius-sm); background: var(--bg-base); display: flex; align-items: center; justify-content: center; color: var(--text-secondary); } .skill-item.enabled .skill-icon { background: var(--primary); color: #fff; } .skill-name { font-size: 11px; color: var(--text-secondary); text-align: center; } .skill-item.enabled .skill-name { color: var(--primary-dark); font-weight: 500; } .skill-del { position: absolute; top: 4px; right: 4px; width: 16px; height: 16px; border-radius: 50%; background: var(--danger); color: #fff; font-size: 12px; display: flex; align-items: center; justify-content: center; cursor: pointer; opacity: 0; transition: var(--transition); } .skill-item.enabled:hover .skill-del { opacity: 1; } /* ========================================== 对话测试面板样式 ========================================== */ .chat-test-panel { display: flex; flex-direction: column; height: 100%; background: var(--bg-white); border: 1px solid var(--border); border-radius: 8px; overflow: hidden; box-shadow: 0 8px 22px rgba(82,196,26,0.05); } .chat-test-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 18px; border-bottom: 1px solid var(--border); flex-shrink: 0; background: #fbfdfb; } .preview-title { display: flex; align-items: center; gap: 10px; min-width: 0; } .preview-title-icon { width: 32px; height: 32px; border-radius: 8px; display: flex; align-items: center; justify-content: center; color: var(--primary); background: var(--primary-bg); flex-shrink: 0; } .preview-title-main { font-size: 14px; font-weight: 700; color: var(--text-primary); line-height: 1.4; } .preview-title-sub { margin-top: 2px; font-size: 12px; color: var(--text-muted); line-height: 1.4; } .chat-messages { flex: 1; overflow-y: auto; padding: 24px; display: flex; flex-direction: column; gap: 14px; min-height: 0; background: linear-gradient(180deg, #ffffff 0%, #fbfdfb 100%); } .chat-empty-hint { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; color: var(--text-muted); font-size: 13px; } .chat-message { display: flex; align-items: flex-start; gap: 10px; animation: fadeIn 0.2s ease; } .chat-message.user { flex-direction: row-reverse; } .chat-avatar { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; flex-shrink: 0; } .user-avatar { background: var(--bg-base); color: var(--text-secondary); } .bot-avatar { background: var(--primary); color: #fff; } .chat-bubble { max-width: 75%; padding: 10px 14px; border-radius: 12px; font-size: 13.5px; line-height: 1.5; } .user-bubble { background: var(--primary); color: #fff; border-bottom-right-radius: 4px; } .bot-bubble { background: var(--bg-base); color: var(--text-primary); border-bottom-left-radius: 4px; } /* 打字指示器 */ .typing-dots { display: flex; gap: 4px; padding: 4px 0; } .typing-dots span { width: 6px; height: 6px; background: var(--text-muted); border-radius: 50%; animation: typingBounce 1.4s infinite ease-in-out; } .typing-dots span:nth-child(1) { animation-delay: 0s; } .typing-dots span:nth-child(2) { animation-delay: 0.2s; } .typing-dots span:nth-child(3) { animation-delay: 0.4s; } @keyframes typingBounce { 0%, 80%, 100% { transform: scale(1); opacity: 0.4; } 40% { transform: scale(1.2); opacity: 1; } } /* 输入区域 */ .chat-input-area { padding: 16px 18px; border-top: 1px solid var(--border); background: #fff; flex-shrink: 0; } .chat-textarea { width: 100%; resize: none; border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; font-size: 13px; outline: none; transition: var(--transition); background: var(--bg-white); line-height: 1.5; } .chat-textarea:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(82,196,26,0.08); } .chat-textarea:disabled { background: var(--bg-base); cursor: not-allowed; } .chat-voice-btn { width: 40px; height: 40px; padding: 0; display: flex; align-items: center; justify-content: center; } /* ========================================== Help Tooltip 样式 ========================================== */ .help-tip { display: inline-flex; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 50%; background: var(--bg-base); color: var(--text-muted); font-size: 10px; cursor: pointer; transition: var(--transition); flex-shrink: 0; } .help-tip:hover { background: var(--primary); color: #fff; } .help-tooltip { position: fixed; background: #1a1a1a; color: #fff; font-size: 12px; padding: 8px 12px; border-radius: var(--radius-sm); max-width: 280px; z-index: 10000; box-shadow: var(--shadow-lg); line-height: 1.5; display: none; pointer-events: none; white-space: pre-wrap; } /* ========================================== 旋转动画 ========================================== */ @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .spin { animation: spin 1s linear infinite; } /* ========================================== 响应式调整 ========================================== */ @media (max-width: 1200px) { .page-container.agent-config-page-container { overflow-y: auto; } .agent-config-layout { grid-template-columns: 1fr; height: auto; min-height: calc(100vh - var(--topbar-height)); padding: 16px; } .agent-config-left, .agent-config-scroll, .module-content { overflow: visible; } .agent-config-left { width: auto; } .agent-config-right { height: 520px; } } @media (max-width: 768px) { .module-tabs { flex-wrap: wrap; } .module-tab { flex: 1 1 45%; } .skill-grid { grid-template-columns: repeat(3, 1fr); } .agent-config-title-bar, .version-card-head { flex-direction: column; align-items: stretch; } .agent-title-actions { justify-content: flex-start; flex-wrap: wrap; } .version-meta-grid, .version-publish-summary { grid-template-columns: 1fr; } .bailian-split-grid, .bailian-filter-summary, .bailian-check-grid, .bailian-variable-grid, .bailian-mode-grid, .bailian-model-mode-grid, .bailian-mini-grid { grid-template-columns: 1fr; } .bailian-command-row { grid-template-columns: 1fr; } .bailian-command-editor-grid { grid-template-columns: 1fr; } .bailian-command-library-card { grid-template-columns: 18px minmax(0, 1fr); } .bailian-command-library-actions, .bailian-command-editor-actions, .bailian-command-head-actions { width: 100%; justify-content: flex-start; flex-wrap: wrap; } .bailian-command-library-actions { grid-column: 2; } .bailian-filter-row { grid-template-columns: 1fr; } .bailian-filter-row.single { grid-template-columns: 1fr; } .bailian-mcp-tool-row { grid-template-columns: 1fr; } .bailian-section-inline-action, .bailian-filter-summary, .bailian-feature-head, .bailian-filter-head { flex-direction: column; align-items: stretch; } .hotword-library-summary, .hotword-manager-head, .hotword-editor-head { flex-direction: column; align-items: stretch; } .hotword-group-item { grid-template-columns: 1fr; } .hotword-group-actions { justify-content: flex-start; } .hotword-entry-row { grid-template-columns: 1fr; } .modal.hotword-editor-modal { height: 92vh; } .hotword-editor-modal .modal-header, .hotword-editor-modal .modal-body, .hotword-editor-modal .modal-footer { padding-left: 18px; padding-right: 18px; } .hotword-select-list { grid-template-columns: 1fr; } .config-row { flex-direction: column; align-items: flex-start; gap: 8px; } } /* ========================================== 统计卡片样式 (stat-*) ========================================== */ .scope-banner { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-bottom: 16px; padding: 16px 18px; border: 1px solid rgba(82,196,26,0.16); border-radius: 14px; background: linear-gradient(90deg, rgba(82,196,26,0.06) 0%, rgba(82,196,26,0.015) 44%, rgba(255,255,255,0.92) 100%), var(--bg-white); box-shadow: 0 2px 8px rgba(0,0,0,0.025); } .scope-banner-main { display: flex; align-items: center; gap: 13px; min-width: 0; } .scope-banner-icon { width: 42px; height: 42px; border-radius: 12px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--primary); background: rgba(82,196,26,0.1); border: 1px solid rgba(82,196,26,0.16); } .scope-banner-icon i, .scope-banner-icon svg { width: 20px; height: 20px; } .scope-banner-eyebrow { margin-bottom: 4px; font-size: 12px; font-weight: 600; color: var(--primary); } .scope-banner-title { font-size: 16px; line-height: 1.2; font-weight: 700; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .scope-banner-desc { margin-top: 5px; font-size: 12.5px; line-height: 1.5; color: var(--text-muted); } .scope-banner-meta { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; flex-shrink: 0; } .scope-chip { display: inline-flex; align-items: center; gap: 8px; min-height: 32px; padding: 6px 10px; border: 1px solid var(--border); border-radius: 999px; background: rgba(255,255,255,0.78); color: var(--text-muted); font-size: 12px; line-height: 1; } .scope-chip strong { color: var(--text-primary); font-size: 13px; font-weight: 700; font-variant-numeric: tabular-nums; } .scope-chip.warning strong { color: var(--warning); } .scope-chip.danger strong { color: var(--danger); } .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(164px, 1fr)); gap: 14px; } .stats-grid-device { grid-template-columns: repeat(4, minmax(0, 1fr)); } .stats-grid-ota { grid-template-columns: repeat(5, minmax(0, 1fr)); } .stat-card { background: var(--bg-white); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 16px 18px; display: flex; align-items: center; gap: 12px; transition: var(--transition); min-width: 0; min-height: 82px; } .stat-card:hover { box-shadow: var(--shadow); border-color: var(--primary-light); transform: translateY(-1px); } .stat-icon { width: 42px; height: 42px; border-radius: 12px; display: flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--text-primary); } .stat-icon i, .stat-icon svg { width: 20px; height: 20px; } @media (max-width: 1180px) { .stats-grid-ota { grid-template-columns: repeat(3, minmax(0, 1fr)); } } @media (max-width: 960px) { .scope-banner { align-items: flex-start; flex-direction: column; } .scope-banner-meta { justify-content: flex-start; width: 100%; } .stats-grid-device, .stats-grid-ota { grid-template-columns: repeat(2, minmax(0, 1fr)); } } @media (max-width: 560px) { .scope-banner { padding: 14px; } .scope-banner-main { align-items: flex-start; } .scope-banner-title { white-space: normal; } .scope-chip { flex: 1; justify-content: space-between; min-width: 132px; } .stats-grid-device, .stats-grid-ota { grid-template-columns: 1fr; } } .stat-content { flex: 1; min-width: 0; } .stat-value { font-size: 26px; font-weight: 700; color: var(--text-primary); line-height: 1; margin-bottom: 0; letter-spacing: 0; font-variant-numeric: tabular-nums; } .stat-label { margin-top: 7px; font-size: 12px; line-height: 1.2; color: var(--text-muted); white-space: nowrap; } /* ========================================== Tooltip Box 样式 ========================================== */ .tooltip-box { background: var(--bg-white); border: 1px solid var(--border); border-radius: var(--radius); padding: 10px 14px; box-shadow: var(--shadow); font-size: 12.5px; color: var(--text-primary); max-width: 240px; z-index: 1000; } /* ========================================== 设备状态相关 ========================================== */ .device-status { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; } .device-status::before { content: ''; width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } .device-status.online::before { background: var(--success); } .device-status.offline::before { background: var(--text-muted); } .device-status.warning::before { background: var(--warning); } .device-status.error::before { background: var(--danger); } /* ========================================== 固件版本标签 ========================================== */ .firmware-version { font-family: 'SF Mono', Monaco, monospace; font-size: 12px; padding: 2px 8px; background: var(--bg-base); border-radius: var(--radius-sm); color: var(--text-secondary); } /* ========================================== 进度环形 ========================================== */ .progress-ring { width: 60px; height: 60px; position: relative; } .progress-ring svg { transform: rotate(-90deg); } .progress-ring-bg { fill: none; stroke: var(--border); stroke-width: 6; } .progress-ring-fill { fill: none; stroke: var(--primary); stroke-width: 6; stroke-linecap: round; transition: stroke-dashoffset 0.6s ease; } .progress-ring-text { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 600; color: var(--text-primary); } /* ========================================== 设备列表操作按钮 ========================================== */ .device-actions { display: flex; align-items: center; gap: 4px; } .device-action-btn { width: 28px; height: 28px; border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; color: var(--text-secondary); transition: var(--transition); cursor: pointer; } .device-action-btn:hover { background: var(--bg-base); color: var(--primary); } .device-action-btn.danger:hover { background: #fff2f0; color: var(--danger); } /* ========================================== 登录页面样式 ========================================== */ .login-center-wrapper { width: 100%; min-height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #f5f7fa 0%, #e8ecf1 100%); padding: 40px 20px; } .login-center-content { display: flex; flex-direction: column; align-items: center; width: 100%; max-width: 420px; } /* 品牌区域 */ .login-brand { text-align: center; margin-bottom: 32px; } .brand-title { font-size: 32px; font-weight: 800; color: var(--text-primary); letter-spacing: -0.5px; margin-bottom: 8px; display: inline-block; } .brand-title a { display: inline-block; position: relative; color: inherit; text-decoration: none; cursor: pointer; } .brand-title a:hover, .brand-title a:visited { color: inherit; } .brand-title a::after { content: attr(data-tooltip); position: absolute; left: 50%; bottom: calc(100% + 10px); transform: translateX(-50%) translateY(4px) scale(0.92); padding: 6px 10px; border-radius: 8px; background: rgba(17, 24, 39, 0.92); color: #fff; font-size: 12px; font-weight: 500; letter-spacing: 0; line-height: 1; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity 0.16s ease, transform 0.16s ease; box-shadow: 0 10px 24px rgba(0, 0, 0, 0.14); } .brand-title a::before { content: ''; position: absolute; left: 50%; bottom: calc(100% + 4px); transform: translateX(-50%) translateY(4px); border: 6px solid transparent; border-top-color: rgba(17, 24, 39, 0.92); opacity: 0; pointer-events: none; transition: opacity 0.16s ease, transform 0.16s ease; } .brand-title a:hover::after, .brand-title a:hover::before, .brand-title a.tooltip-visible::after, .brand-title a.tooltip-visible::before { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); } .brand-title a.tooltip-suppressed::after, .brand-title a.tooltip-suppressed::before { opacity: 0; transform: translateX(-50%) translateY(4px) scale(0.92); } .brand-slogan { font-size: 15px; color: var(--text-secondary); font-weight: 500; margin-bottom: 2px; } .brand-slogan-en { font-size: 13px; color: var(--text-secondary); font-weight: 400; } /* 登录卡片 */ .login-form-card { width: 100%; background: #fff; border-radius: var(--radius-lg); box-shadow: 0 4px 24px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04); padding: 40px 36px; } .login-form-header { text-align: center; margin-bottom: 28px; } .login-title { font-size: 24px; font-weight: 700; color: var(--text-primary); margin-bottom: 6px; } .login-subtitle { font-size: 14px; color: var(--text-secondary); } /* 角色选择器 */ .role-selector { display: flex; gap: 10px; margin-bottom: 24px; } .role-option { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 16px 8px; border: 1.5px solid var(--border-color); border-radius: var(--radius-md); cursor: pointer; transition: var(--transition); background: #fff; } .role-option:hover { border-color: var(--primary-light); background: var(--primary-bg); } .role-option.selected { border-color: var(--primary); background: var(--primary-bg); box-shadow: 0 0 0 3px rgba(82, 196, 26, 0.1); } .role-icon { width: 40px; height: 40px; border-radius: 50%; background: var(--bg-base); display: flex; align-items: center; justify-content: center; color: var(--text-secondary); transition: var(--transition); } .role-option.selected .role-icon { background: var(--primary); color: #fff; } .role-info { text-align: center; } .role-name { font-size: 13px; font-weight: 600; color: var(--text-primary); margin-bottom: 2px; } .role-desc { font-size: 11px; color: var(--text-tertiary); } /* 登录表单 */ .login-form .form-group { margin-bottom: 20px; } .login-form .form-label { display: block; font-size: 13px; font-weight: 500; color: var(--text-primary); margin-bottom: 8px; } .login-form .input-wrapper { position: relative; } .login-form .input-icon { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: var(--text-tertiary); width: 18px; height: 18px; pointer-events: none; } .login-form .form-control.with-icon { padding-left: 42px; padding-right: 44px; } .password-toggle { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); background: none; border: none; color: var(--text-tertiary); cursor: pointer; padding: 4px; display: flex; align-items: center; justify-content: center; transition: var(--transition); } .password-toggle:hover { color: var(--text-secondary); } /* 记住登录状态 */ .login-form .form-row { display: flex; align-items: center; justify-content: space-between; } .checkbox-label { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--text-secondary); cursor: pointer; } .checkbox-label input[type="checkbox"] { width: 16px; height: 16px; accent-color: var(--primary); cursor: pointer; } /* 登录按钮 */ .login-form .btn-block { width: 100%; justify-content: center; } .login-form .btn-lg { padding: 12px 24px; font-size: 15px; font-weight: 600; } /* 登录页脚 */ .login-footer { text-align: center; margin-top: 20px; padding-top: 20px; border-top: 1px solid var(--border-color); } .login-footer p { font-size: 13px; color: var(--text-secondary); } .login-footer .link { color: var(--primary); font-weight: 500; } .login-footer .link:hover { text-decoration: underline; } /* 登录页响应式 */ @media (max-width: 480px) { .login-form-card { padding: 28px 20px; } .role-selector { gap: 6px; } .role-option { padding: 10px 4px; } .role-icon { width: 32px; height: 32px; } .role-name { font-size: 12px; } .role-desc { font-size: 10px; } } /* ========================================== 侧边栏公司导航样式 ========================================== */ .company-nav-item { display: flex; align-items: center; gap: 8px; padding: 8px 12px; margin: 2px 8px; border-radius: var(--radius-md); cursor: pointer; color: rgba(255,255,255,0.65); font-size: 13px; transition: var(--transition); position: relative; flex-wrap: wrap; border-left: 3px solid transparent; padding-left: 9px; } .company-nav-item:hover { background: rgba(255, 255, 255, 0.08); color: #fff; } .company-nav-item.active { color: #fff; background: linear-gradient(90deg, rgba(82,196,26,0.25) 0%, rgba(82,196,26,0.08) 100%); border-left-color: var(--primary); box-shadow: inset 0 1px 0 rgba(255,255,255,0.03); } .company-nav-item i { width: 14px; height: 14px; flex-shrink: 0; opacity: 0.8; } .company-nav-item.active i { opacity: 1; } .company-name { flex: 1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .company-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; background: rgba(255, 255, 255, 0.15); border-radius: 9px; font-size: 11px; font-weight: 600; color: #fff; flex-shrink: 0; } .company-nav-item.active .company-badge { background: var(--primary); color: #fff; } .sidebar.collapsed .company-nav-item { flex-wrap: nowrap; gap: 0; color: rgba(255,255,255,0.58); border: 1px solid transparent; } .sidebar.collapsed .company-nav-item:hover { color: #fff; background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.08); box-shadow: none; transform: none; } .sidebar.collapsed .company-nav-item.active { color: #fff; background: rgba(82,196,26,0.18); border-color: rgba(82,196,26,0.24); box-shadow: inset 0 0 0 1px rgba(82,196,26,0.08); } .sidebar.collapsed .company-nav-item.active::before { content: ''; position: absolute; left: -9px; top: 10px; width: 3px; height: 20px; border-radius: 999px; background: var(--primary); box-shadow: 0 0 12px rgba(82,196,26,0.65); } .sidebar.collapsed .company-nav-item::after { content: none; display: none; } .sidebar.collapsed .company-nav-item i, .sidebar.collapsed .company-nav-item svg { display: block; opacity: 1; } .sidebar.collapsed .company-name { position: absolute; left: 60px; top: 50%; z-index: 120; width: max-content; max-width: 220px; padding: 8px 11px; border-radius: 11px; background: rgba(18,26,21,0.96); border: 1px solid rgba(255,255,255,0.1); color: #fff; font-size: 12px; font-weight: 600; opacity: 0; pointer-events: none; transform: translate(-6px, -50%); box-shadow: 0 14px 34px rgba(19,45,26,0.16); } .sidebar.collapsed .company-name::before { content: ''; position: absolute; left: -5px; top: 50%; width: 10px; height: 10px; background: rgba(18,26,21,0.96); border-left: 1px solid rgba(255,255,255,0.1); border-bottom: 1px solid rgba(255,255,255,0.1); transform: translateY(-50%) rotate(45deg); } .sidebar.collapsed .company-nav-item:hover .company-name { opacity: 1; transform: translate(0, -50%); } .sidebar.collapsed .company-badge { position: absolute; right: 8px; top: 8px; min-width: 8px; width: 8px; height: 8px; padding: 0; font-size: 0; background: #52c41a; border: 2px solid #111713; box-shadow: 0 0 0 2px rgba(82,196,26,0.12); } .sidebar.collapsed .company-submenu { display: none !important; } /* 公司子菜单 - 默认收起,点击展开 */ .company-submenu { width: 100%; display: none; flex-direction: column; gap: 2px; margin-top: 6px; padding-left: 22px; } .company-submenu.open { display: flex; } .submenu-item { display: flex; align-items: center; gap: 8px; padding: 6px 10px; border-radius: var(--radius-sm); color: rgba(255, 255, 255, 0.7); font-size: 12px; text-decoration: none; transition: var(--transition); } .submenu-item:hover { background: rgba(255, 255, 255, 0.08); color: #fff; } .submenu-item.active { color: #fff; background: linear-gradient(90deg, rgba(82,196,26,0.22) 0%, rgba(82,196,26,0.07) 100%); box-shadow: inset 2px 0 0 var(--primary); } .submenu-item i { width: 13px; height: 13px; flex-shrink: 0; opacity: 0.7; } .submenu-item:hover i, .submenu-item.active i { opacity: 1; color: var(--primary); } /* ========================================== Bailian-style Agent Configuration Workbench ========================================== */ body.agent-workbench-mode { display: block; overflow: hidden; background: #f7f8fc; } body.agent-workbench-mode .sidebar, body.agent-workbench-mode .topbar { display: none !important; } body.agent-workbench-mode .main-content { width: 100%; height: 100vh; margin-left: 0; } body.agent-workbench-mode .page-container { height: 100vh; padding: 0; overflow: hidden; background: #f7f8fc; } .page-container.agent-config-page-container { padding: 0; overflow: hidden; background: #f7f8fc; } .page-container.agent-config-page-container .page.active { height: 100%; } .bailian-agent-config { --agent-green: #52c41a; --agent-green-dark: #389e0d; --agent-primary: rgba(82,196,26,.82); --agent-primary-dark: rgba(82,196,26,.88); --agent-primary-hover: rgba(82,196,26,.96); --agent-primary-soft: rgba(246,255,237,.78); --agent-primary-border: rgba(82,196,26,.28); --agent-accent: rgba(115,209,61,.62); --agent-ink: #111827; --agent-text: #263142; --agent-muted: #7b8494; --agent-border: #e5e7f0; --agent-soft: #f7f8fc; --agent-card-shadow: 0 2px 8px rgba(0,0,0,0.03); height: 100vh; min-height: 0; display: flex; flex-direction: column; overflow: hidden; background: var(--agent-soft); color: var(--agent-text); font-family: Inter, -apple-system, BlinkMacSystemFont, "PingFang SC", "Segoe UI", sans-serif; } .bailian-agent-header { position: sticky; top: 0; z-index: 50; height: 64px; flex-shrink: 0; display: flex; align-items: center; justify-content: space-between; gap: 20px; padding: 0 24px; background: #fff; border-bottom: 1px solid var(--agent-border); } .bailian-header-left, .bailian-header-actions, .bailian-agent-title-row { display: flex; align-items: center; min-width: 0; } .bailian-header-left { gap: 14px; } .bailian-agent-title-wrap { min-width: 0; } .bailian-agent-title-row { gap: 8px; } .bailian-agent-title { max-width: 360px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; margin: 0; font-size: 18px; line-height: 1.2; font-weight: 650; color: var(--agent-ink); letter-spacing: 0; } .bailian-title-edit-btn { width: 24px; height: 24px; border-radius: 7px; } .bailian-title-edit-btn i, .bailian-title-edit-btn svg { width: 14px; height: 14px; } .bailian-agent-subtitle { margin-top: 4px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 12px; color: var(--agent-muted); } .bailian-autosave-status { display: inline-flex; align-items: center; height: 22px; padding: 0 8px; border-radius: 999px; background: var(--agent-primary-soft); color: var(--agent-green-dark); font-size: 11px; font-weight: 700; } .bailian-autosave-status.saving { background: #e6f4ff; color: #096dd9; } .bailian-header-actions { justify-content: flex-end; gap: 10px; flex-shrink: 0; } .bailian-icon-btn, .bailian-plain-icon, .bailian-action-btn, .bailian-link-btn, .bailian-run-btn, .bailian-add-round, .bailian-add-card, .bailian-model-select, .bailian-step-tab { font-family: inherit; } .bailian-icon-btn, .bailian-plain-icon { display: inline-flex; align-items: center; justify-content: center; color: #606a7b; transition: border-color .18s ease, background .18s ease, color .18s ease, transform .18s ease; } .bailian-icon-btn { width: 40px; height: 40px; border: 1px solid var(--agent-border); border-radius: 10px; background: #fff; } .bailian-icon-btn:hover, .bailian-plain-icon:hover { color: var(--agent-ink); border-color: #cfd5e3; background: #fafbfe; transform: translateY(-1px); } .bailian-icon-btn i, .bailian-action-btn i, .bailian-plain-icon i, .bailian-link-btn i, .bailian-run-btn i, .bailian-add-round i, .bailian-add-card i { width: 16px; height: 16px; } .bailian-plain-icon { width: 30px; height: 30px; border-radius: 8px; border: 1px solid transparent; background: transparent; } .bailian-plain-icon.danger:hover { color: var(--danger); background: #fff2f0; border-color: #ffccc7; } .bailian-action-btn { height: 40px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 0 16px; border: 1px solid var(--agent-border); border-radius: 10px; background: #fff; color: var(--agent-text); font-size: 14px; font-weight: 500; white-space: nowrap; transition: border-color .18s ease, background .18s ease, color .18s ease, transform .18s ease, box-shadow .18s ease; } .bailian-action-btn:hover { border-color: #cfd5e3; background: #fbfcff; transform: translateY(-1px); box-shadow: var(--agent-card-shadow); } .bailian-action-btn.small { height: 34px; padding: 0 12px; font-size: 13px; } .bailian-action-btn.danger { color: var(--danger); border-color: #ffccc7; background: #fff; } .bailian-action-btn.danger:hover { color: #cf1322; border-color: #ffa39e; background: #fff2f0; } .bailian-action-icon { width: 40px; padding: 0; } .bailian-primary-btn, .bailian-run-btn { border-color: var(--agent-primary-dark); background: var(--agent-primary-dark); color: #fff; } .bailian-primary-btn:hover, .bailian-run-btn:hover { border-color: var(--agent-primary-hover); background: var(--agent-primary-hover); color: #fff; } .bailian-status-pill, .bailian-small-pill { display: inline-flex; align-items: center; justify-content: center; height: 24px; padding: 0 10px; border-radius: 999px; font-size: 12px; font-weight: 600; white-space: nowrap; } .bailian-status-pill.published { color: var(--agent-green-dark); background: var(--agent-primary-soft); border: 1px solid var(--agent-primary-border); } .bailian-status-pill.editing { color: #b26a00; background: #fff7e6; border: 1px solid #ffd591; } .bailian-status-pill.draft { color: #606a7b; background: #f3f5f9; border: 1px solid var(--agent-border); } .bailian-agent-body { flex: 1; min-height: 0; display: grid; grid-template-columns: 640px minmax(0, 1fr); background: var(--agent-soft); } .bailian-config-pane { min-width: 0; min-height: 0; display: flex; flex-direction: column; background: #fff; border-right: 1px solid var(--agent-border); } .bailian-step-tabs { height: 72px; flex-shrink: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: stretch; border-bottom: 1px solid var(--agent-border); background: #fff; } .bailian-step-tab { position: relative; display: flex; flex-direction: row; align-items: center; justify-content: center; gap: 7px; padding: 0 10px; color: #8a93a3; background: #fff; transition: color .18s ease, background .18s ease; } .bailian-step-tab::after { content: ""; position: absolute; left: 18px; right: 18px; bottom: -1px; height: 2px; border-radius: 2px; background: transparent; transform: scaleX(.5); opacity: 0; transition: transform .2s ease, opacity .2s ease, background .2s ease; } .bailian-step-tab:hover { color: var(--agent-ink); background: #fbfcff; } .bailian-step-tab.active { color: var(--agent-green-dark); } .bailian-step-tab.active::after { background: var(--agent-green); transform: scaleX(1); opacity: 1; } .bailian-step-number { width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; border: 1px solid var(--agent-border); background: #fff; color: #8a93a3; font-size: 12px; font-weight: 700; transition: color .18s ease, border-color .18s ease, background .18s ease; } .bailian-step-tab.active .bailian-step-number { color: #fff; border-color: var(--agent-green); background: var(--agent-green); } .bailian-step-title { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; font-weight: 600; } .bailian-config-scroll { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 24px; scrollbar-width: thin; scrollbar-color: #dce1eb transparent; } .bailian-config-footer { flex-shrink: 0; padding: 14px 24px 18px; border-top: 1px solid var(--agent-border); background: rgba(255, 255, 255, .96); box-shadow: 0 -4px 14px rgba(17, 24, 39, .03); } .bailian-config-scroll::-webkit-scrollbar, .bailian-preview-pane::-webkit-scrollbar { width: 4px; } .bailian-config-scroll::-webkit-scrollbar-thumb, .bailian-preview-pane::-webkit-scrollbar-thumb { background: #dce1eb; border-radius: 999px; } .bailian-step-content { display: flex; flex-direction: column; gap: 18px; padding-bottom: 28px; } .bailian-step-section { scroll-margin-top: 88px; } .bailian-step-section + .bailian-step-section { margin-top: 30px; padding-top: 26px; border-top: 1px solid #edf0f6; } .bailian-step-section-head { display: flex; align-items: center; gap: 10px; margin-bottom: 16px; } .bailian-step-section-head span { width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--agent-primary-dark); color: #fff; font-size: 13px; font-weight: 700; } .bailian-step-section-head h2 { margin: 0; font-size: 20px; line-height: 1.3; font-weight: 700; color: var(--agent-ink); } .bailian-card-section { border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; box-shadow: var(--agent-card-shadow); } .bailian-card-section { padding: 18px; } .bailian-card-section:hover, .bailian-model-select:hover, .bailian-list-card:hover, .bailian-kb-card:hover, .bailian-mini-card:hover, .bailian-mode-card:hover { border-color: #cfd5e3; background: #fdfefe; } .bailian-card-section h3, .bailian-section-head h3 { margin: 0 0 14px; font-size: 18px; font-weight: 700; line-height: 1.35; color: var(--agent-ink); } .bailian-card-section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 0 0 14px; } .bailian-card-section-head h3 { margin: 0; } .bailian-card-section-head .btn { flex-shrink: 0; } .bailian-card-section.toggle-only { padding-top: 16px; padding-bottom: 16px; } .bailian-card-section.toggle-only .bailian-card-section-head { min-height: 32px; margin-bottom: 0; } .bailian-card-section.toggle-only .agent-switch { flex-shrink: 0; } .bailian-card-section-actions { display: flex; align-items: center; justify-content: flex-end; gap: 10px; flex-wrap: wrap; } .bailian-section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 14px; } .bailian-section-head h3 { margin-bottom: 0; } .bailian-stack, .bailian-list { display: flex; flex-direction: column; gap: 12px; } .bailian-model-icon, .bailian-list-icon, .bailian-mini-card span { display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; color: var(--agent-green-dark); background: var(--agent-primary-soft); border: 1px solid var(--agent-primary-border); } .bailian-model-icon i, .bailian-list-icon i, .bailian-mini-card i { width: 18px; height: 18px; } .bailian-field { display: flex; flex-direction: column; gap: 8px; } .bailian-field-label { font-size: 12px; color: var(--agent-muted); } .bailian-input, .bailian-number-input { height: 48px; border: 1px solid var(--agent-border); border-radius: 10px; background: #fff; color: var(--agent-text); outline: none; font-size: 14px; font-family: inherit; transition: border-color .18s ease, box-shadow .18s ease; } .bailian-input { width: 100%; padding: 0 14px; } .bailian-number-input { width: 92px; padding: 0 12px; text-align: center; } .bailian-input:focus, .bailian-number-input:focus, .bailian-prompt-editor:focus { border-color: var(--agent-primary-dark); box-shadow: 0 0 0 3px rgba(82,196,26,0.12); } .bailian-model-select { min-height: 64px; width: 100%; display: flex; align-items: center; gap: 12px; padding: 12px 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; text-align: left; color: var(--agent-text); transition: border-color .18s ease, background .18s ease, transform .18s ease; } .bailian-model-select:hover { transform: translateY(-1px); } .bailian-model-icon, .bailian-list-icon { width: 38px; height: 38px; border-radius: 10px; } .bailian-model-main { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 4px; } .bailian-model-main strong { font-size: 14px; color: var(--agent-ink); } .bailian-model-main small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; color: var(--agent-muted); } .bailian-hotword-box, .bailian-switch-row, .bailian-section-inline-action, .bailian-mcp-empty, .bailian-inline-field { display: flex; align-items: center; justify-content: space-between; gap: 14px; } .bailian-hotword-box { padding: 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fbfcff; } .bailian-split-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .bailian-feature-card { display: flex; flex-direction: column; gap: 12px; padding: 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; } .bailian-feature-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; } .bailian-feature-title { font-size: 14px; font-weight: 700; color: var(--agent-ink); } .bailian-feature-desc { margin-top: 4px; font-size: 12px; line-height: 1.6; color: var(--agent-muted); } .bailian-feature-manage { width: fit-content; } .bailian-model-desc, .bailian-section-note { font-size: 12px; line-height: 1.6; color: var(--agent-muted); } .bailian-model-field { margin-top: 12px; } .bailian-section-note { padding: 10px 12px; border-radius: 10px; background: #fafbfe; border: 1px solid #edf0f6; } .bailian-asr-manager { display: flex; flex-direction: column; gap: 16px; } .bailian-asr-form { padding: 16px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fbfcff; } .bailian-asr-form-head, .bailian-asr-list-head, .bailian-asr-model-row, .bailian-asr-model-actions, .bailian-asr-form-actions { display: flex; align-items: center; } .bailian-asr-form-head, .bailian-asr-list-head, .bailian-asr-model-row { justify-content: space-between; gap: 12px; } .bailian-asr-form-title { font-size: 14px; font-weight: 700; color: var(--agent-ink); } .bailian-asr-form-desc, .bailian-asr-list-head span, .bailian-asr-model-meta { font-size: 12px; line-height: 1.6; color: var(--agent-muted); } .bailian-asr-form-grid { margin-top: 14px; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .bailian-asr-form-wide { grid-column: 1 / -1; } .bailian-asr-form-actions { justify-content: flex-end; gap: 10px; margin-top: 14px; } .bailian-model-manager-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 14px 16px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fbfcff; } .bailian-model-manager-toolbar .bailian-action-btn, .bailian-model-manager-toolbar .btn { flex-shrink: 0; } .bailian-empty-action { margin-top: 6px; } .bailian-voice-mode-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .bailian-voice-mode-card { display: flex; align-items: flex-start; gap: 10px; padding: 12px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; cursor: pointer; transition: border-color .18s ease, background .18s ease, box-shadow .18s ease; } .bailian-voice-mode-card.active { border-color: var(--agent-green); background: var(--agent-primary-soft); box-shadow: var(--agent-card-shadow); } .bailian-voice-mode-card input { margin-top: 2px; accent-color: var(--agent-primary); } .bailian-voice-mode-card strong, .bailian-voice-mode-card small { display: block; } .bailian-voice-mode-card strong { font-size: 13px; color: var(--agent-ink); } .bailian-voice-mode-card small, .bailian-form-help { margin-top: 4px; font-size: 12px; line-height: 1.5; color: var(--agent-muted); } .bailian-voice-mode-panel { margin-top: 10px; } .bailian-voice-mode-panel.hidden { display: none; } .bailian-voice-batch-input { min-height: 128px; resize: vertical; line-height: 1.55; } .bailian-inline-check { margin-top: 14px; display: inline-flex; align-items: center; gap: 8px; font-size: 12px; color: var(--agent-muted); cursor: pointer; } .bailian-inline-check input { width: 14px; height: 14px; accent-color: var(--agent-primary); } .bailian-asr-list { display: flex; flex-direction: column; gap: 10px; } .bailian-asr-model-card { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding: 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; } .bailian-asr-model-main { flex: 1; min-width: 0; } .bailian-asr-model-row strong { font-size: 14px; color: var(--agent-ink); } .bailian-asr-status { display: inline-flex; align-items: center; justify-content: center; height: 22px; padding: 0 8px; border-radius: 999px; font-size: 11px; font-weight: 700; white-space: nowrap; } .bailian-asr-status.neutral { color: #606a7b; background: #f3f5f8; border: 1px solid #e1e5ee; } .bailian-asr-status.pending { color: #096dd9; background: #e6f4ff; border: 1px solid #91caff; } .bailian-asr-status.success { color: var(--agent-green-dark); background: var(--agent-primary-soft); border: 1px solid var(--agent-primary-border); } .bailian-asr-status.danger { color: #cf1322; background: #fff1f0; border: 1px solid #ffa39e; } .bailian-asr-status.disabled { color: #7b8494; background: #f7f8fc; border: 1px solid #e5e7f0; } .bailian-asr-model-meta { margin-top: 6px; display: flex; flex-wrap: wrap; gap: 8px 14px; } .bailian-asr-error { margin-top: 8px; padding: 8px 10px; border-radius: 10px; border: 1px solid #ffd8d6; background: #fff7f6; color: #cf1322; font-size: 12px; line-height: 1.5; } .bailian-asr-model-actions { flex-shrink: 0; gap: 8px; opacity: 1 !important; visibility: visible !important; } .bailian-model-manager-toolbar .bailian-action-btn, .bailian-model-manager-toolbar .btn, .bailian-asr-empty .bailian-action-btn, .bailian-asr-empty .btn, .bailian-asr-form-actions .bailian-action-btn, .bailian-asr-form-actions .btn, .bailian-asr-model-actions .bailian-action-btn, .bailian-asr-model-actions .bailian-plain-icon { display: inline-flex !important; opacity: 1 !important; visibility: visible !important; pointer-events: auto; } .bailian-asr-empty { min-height: 150px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 24px; border: 1px dashed var(--agent-border); border-radius: 12px; background: #fbfcff; color: var(--agent-muted); text-align: center; } .bailian-asr-empty i, .bailian-asr-empty svg { width: 30px; height: 30px; color: var(--agent-muted); } .bailian-asr-empty strong { color: var(--agent-ink); font-size: 14px; } .bailian-voice-disabled { padding: 24px; border: 1px dashed var(--agent-border); border-radius: 12px; background: #fff; display: flex; flex-direction: column; gap: 8px; align-items: flex-start; } .bailian-voice-disabled strong { font-size: 15px; color: var(--agent-ink); } .bailian-voice-disabled span { font-size: 12px; line-height: 1.6; color: var(--agent-muted); } .bailian-voice-toggle-card { padding: 14px 18px; } .bailian-voice-panel { display: flex; flex-direction: column; gap: 16px; } .bailian-voice-section { display: flex; flex-direction: column; gap: 12px; padding-top: 16px; border-top: 1px solid #edf0f6; } .bailian-voice-section:first-of-type { padding-top: 0; border-top: 0; } .bailian-voice-subtitle { font-size: 15px; font-weight: 700; color: var(--agent-ink); } .bailian-hotword-title, .bailian-switch-title { font-size: 14px; font-weight: 650; color: var(--agent-ink); } .bailian-title-with-info { display: inline-flex; align-items: center; gap: 6px; } .bailian-info-tip { width: 18px; height: 18px; padding: 0; border: 0; border-radius: 999px; background: transparent; color: #8a94a6; cursor: pointer; } .bailian-info-tip:hover, .bailian-info-tip:focus-visible { color: var(--agent-ink); outline: none; } .bailian-info-tip i, .bailian-info-tip svg { width: 15px; height: 15px; } .bailian-info-tip::after { width: max-content; max-width: 280px; white-space: normal; text-align: left; } .bailian-hotword-desc, .bailian-switch-desc, .bailian-section-inline-action, .bailian-list-desc, .bailian-variable-desc, .bailian-mini-card small, .bailian-mcp-empty p { font-size: 12px; line-height: 1.6; color: var(--agent-muted); } .bailian-link-btn { height: 32px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 0 10px; border-radius: 8px; color: var(--agent-green-dark); background: var(--agent-primary-soft); border: 1px solid var(--agent-primary-border); font-size: 13px; font-weight: 600; white-space: nowrap; transition: background .18s ease, transform .18s ease; } .bailian-link-btn:hover { background: #dffcef; transform: translateY(-1px); } .bailian-token-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; } .bailian-token-row.compact { margin-top: 8px; gap: 6px; } .bailian-token { display: inline-flex; align-items: center; height: 28px; padding: 0 10px; border-radius: 999px; border: 1px solid var(--agent-primary-border); background: var(--agent-primary-soft); color: var(--agent-green-dark); font-size: 12px; font-weight: 600; } .bailian-token.muted { color: var(--agent-muted); background: #f7f8fc; border-color: #e5e7f0; } .agent-switch { position: relative; width: 42px; height: 24px; flex-shrink: 0; } .agent-switch input { position: absolute; opacity: 0; } .agent-switch span { position: absolute; inset: 0; border-radius: 999px; background: #d5dae5; cursor: pointer; transition: background .2s ease; } .agent-switch span::after { content: ""; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.15); transition: transform .2s ease; } .agent-switch input:checked + span { background: var(--agent-primary-dark); } .agent-switch input:checked + span::after { transform: translateX(18px); } .bailian-radio-list { display: flex; flex-direction: column; gap: 10px; } .bailian-radio-list.compact { gap: 8px; } .bailian-check-card { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; transition: border-color .18s ease, background .18s ease, transform .18s ease; } .bailian-check-card:hover { border-color: #cfd5e3; background: #fbfcff; transform: translateY(-1px); } .bailian-check-card input { accent-color: var(--agent-green-dark); } .bailian-check-card span { display: flex; flex-direction: column; gap: 4px; min-width: 0; } .bailian-check-card strong { font-size: 14px; color: var(--agent-ink); } .bailian-check-card small { font-size: 12px; line-height: 1.5; color: var(--agent-muted); } .bailian-check-card.readonly { opacity: .82; } .bailian-check-card.readonly .bailian-radio-dot { margin-left: 2px; } .bailian-filter-summary { margin-top: 12px; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fbfcff; } .bailian-filter-summary-main { flex: 1; min-width: 0; } .bailian-filter-summary-title, .bailian-filter-group-title { font-size: 13px; font-weight: 700; color: var(--agent-ink); } .bailian-filter-summary-meta { margin-top: 3px; font-size: 12px; line-height: 1.5; color: var(--agent-muted); } .bailian-filter-group { padding: 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; } .bailian-filter-group-title { margin-bottom: 10px; } .bailian-radio-card { min-height: 46px; display: flex; align-items: center; gap: 10px; padding: 12px 14px; border: 1px solid var(--agent-border); border-radius: 12px; cursor: pointer; transition: border-color .18s ease, background .18s ease; } .bailian-radio-card input { display: none; } .bailian-radio-card:hover, .bailian-radio-card:has(input:checked) { border-color: var(--agent-green); background: var(--agent-primary-soft); } .bailian-radio-dot { width: 16px; height: 16px; border-radius: 50%; border: 1px solid #c8cfdd; box-shadow: inset 0 0 0 4px #fff; background: #fff; transition: border-color .18s ease, background .18s ease; } .bailian-radio-card:has(input:checked) .bailian-radio-dot { border-color: var(--agent-primary-dark); background: var(--agent-primary-dark); } .bailian-radio-card span:last-child { font-size: 14px; color: var(--agent-text); } .bailian-run-btn { width: 100%; height: 48px; border-radius: 12px; font-size: 15px; font-weight: 700; transition: background .18s ease, transform .18s ease, box-shadow .18s ease; } .bailian-run-btn:hover { transform: translateY(-1px); box-shadow: 0 8px 18px rgba(82,196,26,.18); } .prompt-section { padding-bottom: 0; overflow: hidden; } .bailian-prompt-editor { width: 100%; height: 360px; min-height: 360px; resize: vertical; padding: 16px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; color: var(--agent-text); outline: none; font-family: "SF Mono", Monaco, Consolas, "Liberation Mono", monospace; font-size: 13px; line-height: 1.7; } .bailian-prompt-footer { height: 44px; display: flex; align-items: center; justify-content: space-between; gap: 12px; color: var(--agent-muted); font-size: 12px; } .bailian-prompt-footer strong { color: var(--agent-text); font-weight: 600; } .bailian-variable-grid, .bailian-mode-grid, .bailian-model-mode-grid, .bailian-mini-grid { display: grid; gap: 12px; } .bailian-variable-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .bailian-variable-simple { margin-top: 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; overflow: hidden; } .bailian-variable-simple-head, .bailian-variable-simple-row { display: grid; grid-template-columns: minmax(150px, .72fr) minmax(220px, 1.28fr) 36px; align-items: center; gap: 10px; } .bailian-variable-simple-head { min-height: 42px; padding: 0 12px; border-bottom: 1px solid var(--agent-border); background: #fbfcff; color: var(--agent-muted); font-size: 12px; font-weight: 700; } .bailian-variable-simple-list { display: flex; flex-direction: column; } .bailian-variable-simple-row { padding: 10px 12px; border-bottom: 1px solid #f0f2f7; } .bailian-variable-simple-row:last-child { border-bottom: 0; } .bailian-variable-simple-row .bailian-input { height: 40px; } .bailian-variable-simple-empty { min-height: 86px; display: flex; align-items: center; justify-content: center; color: var(--agent-muted); font-size: 13px; } .bailian-variable-manager { display: grid; grid-template-columns: 238px minmax(0, 1fr); gap: 12px; } .bailian-variable-list-pane, .bailian-variable-detail-pane { min-height: 360px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; } .bailian-variable-pane-head { height: 44px; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 0 12px; border-bottom: 1px solid var(--agent-border); font-size: 13px; font-weight: 700; color: var(--agent-ink); } .bailian-variable-pane-head strong { min-width: 24px; height: 22px; display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; background: #f2f4f7; color: var(--agent-muted); font-size: 12px; } .bailian-variable-list { max-height: 410px; overflow: auto; padding: 8px; } .bailian-variable-row { width: 100%; min-height: 58px; display: grid; grid-template-columns: minmax(0, 1fr) 28px; align-items: center; gap: 8px; padding: 9px 8px; border: 1px solid transparent; border-radius: 10px; background: transparent; color: inherit; text-align: left; cursor: pointer; } .bailian-variable-row:hover, .bailian-variable-row.active { border-color: var(--agent-border); background: #fbfcff; } .bailian-variable-row.active { border-color: #cbd5e1; box-shadow: var(--agent-card-shadow); } .bailian-variable-select { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 8px; padding: 0; border: 0; background: transparent; color: inherit; text-align: left; cursor: pointer; } .bailian-variable-row-main { min-width: 0; } .bailian-variable-row-main strong, .bailian-variable-row-main small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .bailian-variable-row-main strong { font-size: 13px; color: var(--agent-ink); } .bailian-variable-row-main small { margin-top: 3px; font-size: 11px; color: var(--agent-muted); } .bailian-variable-source { display: inline-flex; align-items: center; justify-content: center; height: 22px; padding: 0 8px; border-radius: 999px; border: 1px solid #e5e7f0; background: #f7f8fc; color: var(--agent-muted); font-size: 11px; font-weight: 700; white-space: nowrap; } .bailian-variable-source.green { color: var(--agent-green-dark); background: var(--agent-primary-soft); border-color: var(--agent-primary-border); } .bailian-variable-source.blue { color: #0958d9; background: #e6f4ff; border-color: #91caff; } .bailian-variable-source.purple { color: #722ed1; background: #f9f0ff; border-color: #d3adf7; } .bailian-variable-source.orange { color: #ad4e00; background: #fff7e6; border-color: #ffd591; } .bailian-variable-source.cyan { color: #08979c; background: #e6fffb; border-color: #87e8de; } .bailian-variable-source.red { color: #cf1322; background: #fff1f0; border-color: #ffa39e; } .bailian-variable-delete { width: 28px; height: 28px; display: inline-flex; align-items: center; justify-content: center; border: 0; border-radius: 8px; background: transparent; color: #9aa3b2; cursor: pointer; } .bailian-variable-delete:hover { color: var(--danger); background: #fff2f0; } .bailian-variable-delete i, .bailian-variable-delete svg { width: 15px; height: 15px; } .bailian-variable-detail-pane { padding: 14px; } .bailian-variable-detail { display: flex; flex-direction: column; gap: 14px; } .bailian-variable-detail-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; } .bailian-variable-detail-name { font-size: 16px; font-weight: 800; color: var(--agent-ink); } .bailian-variable-detail-desc { margin-top: 6px; font-size: 12px; line-height: 1.6; color: var(--agent-muted); } .bailian-variable-detail-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .bailian-variable-detail-grid > div { min-width: 0; padding: 10px; border-radius: 10px; background: #fbfcff; border: 1px solid #eef1f6; } .bailian-variable-detail-grid span, .bailian-variable-example span, .bailian-variable-section-title { display: block; font-size: 11px; color: var(--agent-muted); margin-bottom: 5px; } .bailian-variable-detail-grid strong { display: block; overflow-wrap: anywhere; font-size: 12px; color: var(--agent-ink); } .bailian-variable-code { font-family: "SF Mono", Monaco, Consolas, "Liberation Mono", monospace; } .bailian-variable-example { padding: 10px; border-radius: 10px; background: #fbfcff; border: 1px solid #eef1f6; } .bailian-variable-example code { display: block; overflow-wrap: anywhere; color: var(--agent-ink); font-size: 12px; line-height: 1.5; } .bailian-variable-actions { display: flex; justify-content: flex-end; gap: 8px; } .bailian-variable-empty, .bailian-variable-detail-empty { height: 100%; min-height: 240px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 20px; text-align: center; color: var(--agent-muted); } .bailian-variable-detail-empty i, .bailian-variable-detail-empty svg { width: 28px; height: 28px; } .bailian-variable-empty strong, .bailian-variable-detail-empty strong { color: var(--agent-ink); font-size: 14px; } .bailian-variable-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .bailian-variable-form-wide { grid-column: 1 / -1; } .bailian-variable-textarea { min-height: 92px; resize: vertical; line-height: 1.6; } .bailian-variable-usage-checks { display: flex; flex-wrap: wrap; gap: 10px 14px; } .bailian-mode-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .bailian-variable-card, .bailian-add-card, .bailian-mode-card, .bailian-mini-card, .bailian-list-card, .bailian-kb-card, .bailian-mcp-empty { border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; transition: border-color .18s ease, background .18s ease, transform .18s ease; } .bailian-variable-card, .bailian-add-card, .bailian-mode-card, .bailian-mini-card { padding: 14px; } .bailian-variable-name, .bailian-list-title, .bailian-mini-card strong, .bailian-mcp-empty strong { font-size: 14px; font-weight: 700; color: var(--agent-ink); } .bailian-add-card { min-height: 72px; display: flex; align-items: center; justify-content: center; gap: 8px; color: var(--agent-muted); border-style: dashed; } .bailian-add-card.compact { min-height: 108px; flex-direction: column; } .bailian-add-card:hover { color: var(--agent-green-dark); border-color: var(--agent-green); background: var(--agent-primary-soft); transform: translateY(-1px); } .bailian-inline-field { justify-content: flex-start; color: var(--agent-muted); font-size: 14px; } .bailian-section-inline-action { margin: -4px 0 12px; } .bailian-list-card, .bailian-kb-card { min-height: 72px; display: flex; align-items: center; gap: 12px; padding: 14px; } .bailian-list-main { flex: 1; min-width: 0; } .bailian-list-title { display: flex; align-items: center; gap: 8px; } .bailian-list-title span, .bailian-kb-weight { color: var(--agent-green-dark); font-size: 12px; font-weight: 700; } .bailian-list-desc { margin-top: 4px; } .bailian-small-pill { color: var(--agent-green-dark); background: var(--agent-primary-soft); border: 1px solid var(--agent-primary-border); } .bailian-kb-weight { margin-top: 6px; } .bailian-kb-empty { min-height: 96px; display: flex; align-items: center; justify-content: center; gap: 8px; border: 1px dashed var(--agent-border); border-radius: 12px; background: #fbfcff; color: var(--agent-muted); font-size: 13px; } .bailian-kb-empty i, .bailian-kb-empty svg { width: 18px; height: 18px; } .bailian-kb-picker { display: flex; flex-direction: column; gap: 14px; } .bailian-kb-picker-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .bailian-search-field { flex: 1; min-width: 240px; height: 40px; display: flex; align-items: center; gap: 8px; padding: 0 12px; border: 1px solid var(--agent-border); border-radius: 10px; background: #fff; color: var(--agent-muted); } .bailian-search-field i, .bailian-search-field svg { width: 16px; height: 16px; flex-shrink: 0; } .bailian-search-field input { width: 100%; border: 0; outline: none; background: transparent; color: var(--agent-ink); font-size: 13px; } .bailian-kb-picker-list { max-height: 460px; overflow: auto; display: flex; flex-direction: column; gap: 10px; padding-right: 2px; } .bailian-kb-picker-card { display: grid; grid-template-columns: 18px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; cursor: pointer; transition: border-color .18s ease, background .18s ease, box-shadow .18s ease; } .bailian-kb-picker-card:hover, .bailian-kb-picker-card.active { border-color: #cbd5e1; background: #fbfcff; box-shadow: var(--agent-card-shadow); } .bailian-kb-picker-card input { display: none; } .bailian-kb-picker-check { width: 18px; height: 18px; border: 1px solid #cbd5e1; border-radius: 6px; background: #fff; position: relative; } .bailian-kb-picker-card.active .bailian-kb-picker-check { border-color: var(--agent-green); background: var(--agent-green); } .bailian-kb-picker-card.active .bailian-kb-picker-check::after { content: ""; position: absolute; left: 5px; top: 2px; width: 5px; height: 9px; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg); } .bailian-kb-picker-main { min-width: 0; display: flex; flex-direction: column; gap: 5px; } .bailian-kb-picker-main strong { color: var(--agent-ink); font-size: 14px; } .bailian-kb-picker-main small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--agent-muted); font-size: 12px; } .bailian-kb-picker-meta { display: flex; flex-wrap: wrap; gap: 8px; } .bailian-kb-picker-meta em { font-style: normal; color: var(--agent-muted); font-size: 11px; } .bailian-kb-picker-status { height: 24px; display: inline-flex; align-items: center; padding: 0 8px; border-radius: 999px; border: 1px solid #e5e7f0; background: #f7f8fc; color: var(--agent-muted); font-size: 11px; font-weight: 700; white-space: nowrap; } .bailian-kb-picker-status.ready { color: var(--agent-green-dark); background: var(--agent-primary-soft); border-color: var(--agent-primary-border); } .bailian-kb-picker-status.processing, .bailian-kb-picker-status.uploading { color: #0958d9; background: #e6f4ff; border-color: #91caff; } .bailian-kb-picker-status.error { color: #cf1322; background: #fff1f0; border-color: #ffa39e; } .bailian-kb-picker-empty { min-height: 180px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; border: 1px dashed var(--agent-border); border-radius: 12px; background: #fbfcff; color: var(--agent-muted); font-size: 13px; } .bailian-kb-picker-empty i, .bailian-kb-picker-empty svg { width: 28px; height: 28px; } .bailian-mode-card { cursor: pointer; } .bailian-mode-card input { display: none; } .bailian-mode-card strong, .bailian-mode-card span { display: block; } .bailian-mode-card strong { margin-bottom: 6px; font-size: 14px; color: var(--agent-ink); } .bailian-mode-card span { font-size: 12px; line-height: 1.6; color: var(--agent-muted); } .bailian-mode-card.active, .bailian-mode-card:has(input:checked) { border-color: var(--agent-green); background: var(--agent-primary-soft); box-shadow: 0 0 0 3px rgba(82,196,26,.10); } .bailian-mini-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .bailian-mini-card { min-height: 108px; display: flex; flex-direction: column; gap: 8px; } .bailian-mini-card span { width: 34px; height: 34px; border-radius: 10px; } .bailian-mcp-empty { padding: 16px; } .bailian-mcp-empty p { max-width: 420px; margin: 6px 0 0; } .bailian-mcp-card-meta { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 8px; } .bailian-mcp-card-meta span { max-width: 220px; overflow: hidden; color: var(--agent-muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; } .bailian-mcp-error { margin-top: 8px; color: #cf1322; font-size: 12px; } .bailian-mcp-tool-block { display: flex; flex-direction: column; gap: 10px; margin-top: 4px; } .bailian-mcp-tool-row { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr) minmax(0, 1.2fr) 34px; gap: 10px; align-items: center; padding: 10px 0; border-bottom: 1px solid #edf0f6; } .bailian-mcp-tool-row:last-child { border-bottom: 0; } .bailian-empty-inline { padding: 12px 0; font-size: 12px; color: var(--agent-muted); } .bailian-weight-row { display: grid; grid-template-columns: minmax(0, 1fr) 110px; gap: 12px; align-items: center; padding: 12px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; } .bailian-weight-name { font-size: 14px; font-weight: 700; color: var(--agent-ink); } .bailian-weight-desc { margin-top: 4px; font-size: 12px; line-height: 1.6; color: var(--agent-muted); } .bailian-weight-input { width: 100%; } .bailian-filter-modal, .bailian-command-modal { display: flex; flex-direction: column; gap: 14px; } .bailian-filter-modal-desc { padding: 12px 14px; border-radius: 12px; border: 1px solid #edf0f6; background: #fafbfe; font-size: 12px; line-height: 1.7; color: var(--agent-muted); } .bailian-filter-modal-section { display: flex; flex-direction: column; gap: 10px; } .bailian-filter-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .bailian-check-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; } .bailian-filter-row, .bailian-command-row { display: grid; gap: 10px; align-items: center; } .bailian-filter-row { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 34px; margin-top: 10px; } .bailian-filter-row.single { grid-template-columns: minmax(0, 1fr) 34px; } .bailian-command-row { grid-template-columns: 160px minmax(0, 1.4fr) minmax(0, 1fr) 120px 120px 34px; padding: 10px 0; border-bottom: 1px solid #edf0f6; } .bailian-command-row:last-child { border-bottom: 0; } .bailian-command-table-wrap { overflow: auto; border: 1px solid var(--agent-border); border-radius: 12px; } .bailian-command-table { width: 100%; border-collapse: collapse; background: #fff; } .bailian-command-table th, .bailian-command-table td { padding: 12px; border-bottom: 1px solid #edf0f6; text-align: left; vertical-align: top; font-size: 12px; } .bailian-command-table th { position: sticky; top: 0; z-index: 1; background: #fbfcff; color: var(--agent-ink); font-weight: 700; } .bailian-command-table td .form-control, .bailian-command-table td textarea, .bailian-command-table td input { width: 100%; min-width: 0; } .bailian-command-table textarea { min-height: 70px; padding: 10px 12px; resize: vertical; } .bailian-command-form { display: flex; flex-direction: column; gap: 12px; margin-top: 6px; } .bailian-command-head-actions { display: inline-flex; align-items: center; gap: 10px; } .bailian-command-empty, .bailian-command-library-empty { min-height: 150px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; padding: 24px; border: 1px dashed var(--agent-border); border-radius: 12px; background: #fbfcff; color: var(--agent-muted); text-align: center; } .bailian-command-empty i, .bailian-command-empty svg, .bailian-command-library-empty i, .bailian-command-library-empty svg { width: 28px; height: 28px; } .bailian-command-empty strong, .bailian-command-library-empty strong { color: var(--agent-ink); font-size: 14px; } .bailian-command-empty span, .bailian-command-library-empty span { font-size: 12px; line-height: 1.6; } .bailian-command-library, .bailian-command-editor { display: flex; flex-direction: column; gap: 12px; } .bailian-command-library-list { display: flex; flex-direction: column; gap: 10px; } .bailian-command-library-card { display: grid; grid-template-columns: 18px minmax(0, 1fr) auto; align-items: flex-start; gap: 12px; padding: 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fff; transition: border-color .18s ease, background .18s ease, box-shadow .18s ease; } .bailian-command-library-card:hover, .bailian-command-library-card.active { border-color: #cbd5e1; background: #fbfcff; box-shadow: var(--agent-card-shadow); } .bailian-command-select { margin-top: 2px; cursor: pointer; } .bailian-command-select input { display: none; } .bailian-command-select span { width: 18px; height: 18px; display: inline-flex; border: 1px solid #cbd5e1; border-radius: 6px; background: #fff; position: relative; } .bailian-command-select input:checked + span { border-color: var(--agent-green); background: var(--agent-green); } .bailian-command-select input:checked + span::after { content: ""; position: absolute; left: 5px; top: 2px; width: 5px; height: 9px; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg); } .bailian-command-library-main { min-width: 0; } .bailian-command-library-title { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; } .bailian-command-library-title strong { color: var(--agent-ink); font-size: 14px; } .bailian-command-library-title em { height: 22px; display: inline-flex; align-items: center; padding: 0 8px; border-radius: 999px; background: var(--agent-primary-soft); color: var(--agent-green-dark); font-style: normal; font-size: 11px; font-weight: 700; } .bailian-command-library-main p { margin: 6px 0 0; color: var(--agent-muted); font-size: 12px; line-height: 1.6; } .bailian-command-library-meta { margin-top: 8px; display: flex; flex-wrap: wrap; gap: 8px; } .bailian-command-library-meta span { color: var(--agent-muted); font-size: 11px; } .bailian-command-library-actions { display: inline-flex; align-items: center; gap: 6px; } .bailian-command-editor { padding: 14px; border: 1px solid var(--agent-border); border-radius: 12px; background: #fbfcff; } .bailian-command-editor-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .bailian-command-editor-wide { grid-column: 1 / -1; } .bailian-command-editor-textarea { min-height: 92px; resize: vertical; line-height: 1.6; } .bailian-command-editor-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 12px; } .bailian-add-round { width: 38px; height: 38px; display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; border-radius: 50%; background: var(--agent-primary-dark); color: #fff; transition: background .18s ease, transform .18s ease; } .bailian-add-round:hover { background: var(--agent-primary-hover); transform: translateY(-1px); } .bailian-preview-pane { min-width: 0; min-height: 0; overflow: auto; background: #f7f8fc; display: flex; align-items: center; justify-content: center; padding: 48px; } .bailian-preview-empty { max-width: 420px; display: flex; flex-direction: column; align-items: center; text-align: center; } .bailian-preview-empty h2 { margin: 28px 0 8px; font-size: 22px; line-height: 1.35; font-weight: 700; color: var(--agent-ink); } .bailian-preview-empty p { margin: 0; font-size: 14px; line-height: 1.7; color: var(--agent-muted); } .bailian-preview-tip { margin-top: 18px; display: inline-flex; align-items: flex-start; gap: 8px; padding: 10px 12px; border-radius: 12px; background: rgba(255,255,255,.72); border: 1px solid var(--agent-border); color: var(--agent-muted); font-size: 12px; line-height: 1.6; } .bailian-preview-tip i { width: 15px; height: 15px; margin-top: 2px; color: #a5adbb; } .bailian-preview-pane.is-runtime { align-items: stretch; justify-content: stretch; padding: 36px; } .bailian-preview-pane.is-runtime.is-voice-runtime { overflow: visible; padding: 14px 16px 16px; } .bailian-preview-pane.is-runtime.is-text-runtime { overflow: visible; padding: 14px 16px 16px; } .bailian-preview-pane.is-runtime.is-voice-runtime .agent-voice-panel { overflow: visible; border-radius: 0; } .bailian-preview-pane.is-runtime.is-text-runtime .agent-text-panel { overflow: visible; border-radius: 0; } .agent-runtime-shell { width: min(760px, 100%); margin: auto; display: flex; flex-direction: column; gap: 18px; } .agent-runtime-shell.voice { min-height: min(720px, calc(100vh - 136px)); } .agent-runtime-shell.text-chat { min-height: min(720px, calc(100vh - 136px)); } .agent-text-panel { width: 100%; height: 100%; min-height: min(720px, calc(100vh - 136px)); margin: 0 auto; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; overflow: visible; border: 0; border-radius: 0; background: radial-gradient(circle at 50% 20%, rgba(82,196,26,.075), transparent 34%), var(--agent-soft); box-shadow: none; } .agent-text-topbar { min-height: 52px; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 8px clamp(12px, 1.8vw, 20px) 4px; border-bottom: 0; background: transparent; } .agent-text-title { display: flex; align-items: center; gap: 8px; } .agent-text-title h2 { margin: 0; color: #303846; font-size: 16px; line-height: 1.35; font-weight: 650; letter-spacing: 0; } .agent-text-key { margin-top: 6px; display: flex; align-items: center; gap: 8px; color: var(--agent-muted); font-size: 11px; } .agent-text-key strong { max-width: 340px; overflow: hidden; color: #4b5563; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; } .agent-text-user { display: inline-flex; align-items: center; gap: 8px; color: #4b5563; font-size: 13px; font-weight: 650; } .agent-text-user i, .agent-text-user svg { width: 15px; height: 15px; } .agent-text-settings { width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center; border: 0; border-radius: 10px; background: rgba(255,255,255,.82); color: #6b7280; cursor: pointer; transition: background .18s ease, transform .18s ease; } .agent-text-settings:hover { background: #fff; transform: translateY(-1px); } .agent-text-message-area { min-height: 0; overflow-y: auto; padding: clamp(28px, 6vh, 64px) clamp(12px, 1.8vw, 20px) 18px; background: transparent; scrollbar-width: none; } .agent-text-message-area::-webkit-scrollbar { display: none; } .agent-text-message-stream { width: 100%; min-height: 100%; margin: 0 auto; display: flex; flex-direction: column; gap: 18px; } .agent-text-empty { flex: 1; min-height: 260px; display: flex; align-items: center; justify-content: center; color: #a0a7b5; font-size: 13px; } .agent-text-message-row { display: flex; width: 100%; } .agent-text-message-row.user { justify-content: flex-end; } .agent-text-message-row.ai { justify-content: flex-start; } .agent-text-user-bubble { max-width: min(78%, 640px); padding: 12px 16px; border-radius: 18px 18px 4px 18px; background: rgba(246,255,237,.88); box-shadow: 0 2px 8px rgba(82,196,26,.045); color: #303846; font-size: 15px; line-height: 1.65; word-break: break-word; } .agent-text-ai-message { max-width: min(82%, 700px); color: #303846; } .agent-text-ai-label { margin-bottom: 7px; color: #8a93a3; font-size: 12px; font-weight: 700; } .agent-text-ai-content { color: #303846; font-size: 15px; line-height: 1.85; word-break: break-word; white-space: pre-wrap; } .agent-text-actions { margin-top: 10px; display: flex; align-items: center; gap: 6px; } .agent-text-actions [data-tooltip]::after { top: calc(100% + 8px); bottom: auto; } .agent-text-actions [data-tooltip]:hover::after, .agent-text-actions [data-tooltip]:focus::after, .agent-text-actions [data-tooltip]:focus-visible::after { transform: translateX(-50%) translateY(2px); } .agent-text-action-btn { width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid #e5e7f0; border-radius: 9px; background: #fff; color: #8a93a3; cursor: pointer; transition: border-color .18s ease, color .18s ease, transform .18s ease; } .agent-text-action-btn:hover { border-color: var(--agent-primary-border); color: var(--agent-primary-dark); transform: translateY(-1px); } .agent-text-action-btn i, .agent-text-action-btn svg { width: 14px; height: 14px; } .agent-text-input-area { padding: 0 clamp(12px, 1.8vw, 20px) 14px; border-top: 0; background: transparent; } .agent-text-input-shell { width: 100%; min-height: 66px; margin: 0 auto; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 8px; border: 1px solid rgba(229,231,240,.96); border-radius: 999px; background: rgba(255,255,255,.94); box-shadow: 0 14px 40px rgba(31,41,55,.06); transition: border-color .18s ease, box-shadow .18s ease; } .agent-text-input-shell:focus-within { border-color: var(--agent-primary-border); box-shadow: 0 14px 40px rgba(31,41,55,.06), 0 0 0 3px rgba(82,196,26,.10); } .agent-text-input { width: 100%; height: 48px; padding: 0 16px; border: 0; border-radius: 999px; outline: 0; background: transparent; color: #303846; font-size: 14px; transition: border-color .18s ease, box-shadow .18s ease; } .agent-text-input:focus { box-shadow: none; } .agent-text-send { width: 58px; height: 48px; display: inline-flex; align-items: center; justify-content: center; border: 0; border-radius: 16px; background: var(--agent-primary-dark); color: #fff; cursor: pointer; transition: background .18s ease, transform .18s ease; } .agent-text-send:hover { background: var(--agent-primary-hover); transform: translateY(-1px); } .agent-text-send:disabled { cursor: not-allowed; opacity: .55; transform: none; } .agent-text-send i, .agent-text-send svg { width: 17px; height: 17px; } .agent-voice-panel { width: 100%; height: 100%; min-height: min(720px, calc(100vh - 136px)); margin: 0 auto; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; position: relative; overflow: visible; border-radius: 0; background: radial-gradient(circle at 50% 20%, rgba(82,196,26,.075), transparent 34%), var(--agent-soft); animation: agentRuntimeFade .32s ease both; } .agent-voice-panel.recording, .agent-voice-panel.has-conversation { animation: none; } @keyframes agentRuntimeFade { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } .agent-voice-topbar { min-height: 52px; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 8px clamp(12px, 1.8vw, 20px) 4px; } .agent-voice-title { display: flex; align-items: center; gap: 8px; } .agent-voice-title h2 { margin: 0; color: #303846; font-size: 16px; line-height: 1.35; font-weight: 650; } .agent-voice-user { display: inline-flex; align-items: center; gap: 8px; color: #4b5563; font-size: 13px; font-weight: 650; } .agent-voice-user i, .agent-voice-user svg { width: 15px; height: 15px; } .agent-voice-settings { width: 32px; height: 32px; display: inline-flex; align-items: center; justify-content: center; border: 0; border-radius: 10px; background: rgba(255,255,255,.82); color: #6b7280; cursor: pointer; transition: background .18s ease, transform .18s ease; } .agent-voice-settings:hover { background: #fff; transform: translateY(-1px); } .agent-voice-stage { min-height: 0; position: relative; display: flex; align-items: flex-start; justify-content: center; overflow: auto; padding: clamp(28px, 6vh, 64px) clamp(12px, 1.8vw, 20px) 18px; scrollbar-width: none; } .agent-voice-stage::-webkit-scrollbar { display: none; } .agent-voice-idle-center { display: flex; flex-direction: column; align-items: center; text-align: center; padding-top: clamp(10px, 2vh, 24px); animation: agentRuntimeFade .36s ease both; } .agent-voice-logo { width: 92px; height: 92px; display: inline-flex; align-items: center; justify-content: center; border-radius: 24px; background: linear-gradient(135deg, var(--agent-green) 0%, var(--agent-accent) 100%); color: #fff; box-shadow: 0 18px 46px rgba(82,196,26,.16); animation: agentVoiceGlow 2.8s ease-in-out infinite; } @keyframes agentVoiceGlow { 0%, 100% { transform: scale(1); box-shadow: 0 18px 46px rgba(82,196,26,.15); } 50% { transform: scale(1.025); box-shadow: 0 22px 58px rgba(82,196,26,.22); } } .agent-voice-logo i, .agent-voice-logo svg { width: 38px; height: 38px; } .agent-voice-idle-center h3 { margin: 22px 0 8px; color: #303846; font-size: 18px; line-height: 1.35; font-weight: 700; } .agent-voice-idle-center p { max-width: 420px; margin: 0; color: #8a93a3; font-size: 13px; line-height: 1.8; } .agent-voice-conversation { width: 100%; overflow: visible; margin: 0 auto; padding-top: clamp(8px, 2vh, 28px); } .agent-voice-message-stream { width: 100%; display: flex; flex-direction: column; gap: 18px; } .agent-voice-message-row { display: flex; width: 100%; } .agent-voice-message-row.user { display: flex; justify-content: flex-end; } .agent-voice-message-row.ai { justify-content: flex-start; } .agent-voice-user-bubble { max-width: min(78%, 640px); padding: 12px 16px; border-radius: 18px 18px 4px 18px; background: rgba(246,255,237,.90); box-shadow: 0 4px 14px rgba(82,196,26,.05); color: #303846; font-size: 15px; line-height: 1.65; } .agent-voice-ai-row, .agent-voice-ai-message { display: flex; flex-direction: column; align-items: flex-start; max-width: min(82%, 700px); } .agent-voice-ai-content { color: #303846; font-size: 15px; line-height: 1.65; white-space: pre-wrap; } .agent-voice-ai-actions { margin-top: 12px; display: flex; align-items: center; gap: 6px; } .agent-voice-ai-actions:not(.is-visible) { display: none; } .agent-voice-ai-actions [data-tooltip]::after { top: calc(100% + 8px); bottom: auto; } .agent-voice-ai-actions [data-tooltip]:hover::after, .agent-voice-ai-actions [data-tooltip]:focus::after, .agent-voice-ai-actions [data-tooltip]:focus-visible::after { transform: translateX(-50%) translateY(2px); } .agent-voice-latency { position: absolute; right: clamp(12px, 1.8vw, 20px); top: 48%; transform: translateY(-50%); padding: 8px 10px; border: 1px solid #e5e7f0; border-radius: 999px; background: rgba(255,255,255,.72); color: #6b7280; font-size: 12px; font-weight: 700; } .agent-voice-control { min-height: 66px; display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; margin: 0 clamp(12px, 1.8vw, 20px) 14px; padding: 8px; border: 1px solid rgba(229,231,240,.96); border-radius: 999px; background: rgba(255,255,255,.94); box-shadow: 0 14px 40px rgba(31,41,55,.06); } .agent-voice-panel.recording .agent-voice-control { grid-template-columns: 72px minmax(0, 1fr) auto; } .agent-voice-device { height: 48px; display: inline-flex; align-items: center; gap: 10px; min-width: 0; padding: 0 16px; border: 0; border-radius: 999px; background: transparent; color: #303846; cursor: pointer; transition: background .18s ease; } .agent-voice-device:hover { background: #f7f8fc; } .agent-voice-device span { overflow: hidden; font-size: 14px; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; } .agent-voice-device i, .agent-voice-device svg { width: 18px; height: 18px; flex-shrink: 0; color: #6b7280; } .agent-voice-start-btn, .agent-voice-hangup-btn, .agent-voice-mic-btn { display: inline-flex; align-items: center; justify-content: center; border: 0; cursor: pointer; transition: transform .18s ease, filter .18s ease, background .18s ease; } .agent-voice-start-btn { width: 58px; height: 48px; border-radius: 16px; background: linear-gradient(135deg, var(--agent-green) 0%, var(--agent-accent) 100%); color: #fff; box-shadow: 0 12px 26px rgba(82,196,26,.18); } .agent-voice-start-btn:hover, .agent-voice-hangup-btn:hover, .agent-voice-mic-btn:hover { transform: translateY(-1px); } .agent-voice-start-btn i, .agent-voice-start-btn svg, .agent-voice-hangup-btn i, .agent-voice-hangup-btn svg, .agent-voice-mic-btn i, .agent-voice-mic-btn svg { width: 20px; height: 20px; } .agent-voice-record-time { color: var(--agent-green-dark); font-size: 16px; font-weight: 800; text-align: center; font-variant-numeric: tabular-nums; } .agent-voice-wave { height: 44px; display: flex; align-items: center; justify-content: center; gap: 5px; overflow: hidden; } .agent-voice-wave span { width: 6px; height: 6px; border-radius: 999px; background: linear-gradient(180deg, var(--agent-green), var(--agent-accent)); opacity: .65; animation: agentVoiceDotWave 920ms ease-in-out infinite; animation-delay: calc(var(--i) * -42ms); } .agent-voice-wave.muted span { background: #cbd5e1; animation-play-state: paused; } @keyframes agentVoiceDotWave { 0%, 100% { height: 6px; opacity: .45; transform: translateY(0); } 40% { height: 34px; opacity: 1; transform: translateY(-1px); } 70% { height: 16px; opacity: .82; } } .agent-voice-control-actions { display: inline-flex; align-items: center; gap: 10px; } .agent-voice-mic-btn { width: 44px; height: 44px; border-radius: 16px; background: #f7f8fc; color: #303846; } .agent-voice-mic-btn.muted { background: #fff1f0; color: #cf1322; } .agent-voice-hangup-btn { width: 52px; height: 44px; border-radius: 16px; background: #dc2626; color: #fff; } .agent-runtime-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; } .agent-runtime-kicker { display: inline-flex; align-items: center; height: 24px; padding: 0 9px; border-radius: 999px; background: var(--agent-primary-soft); color: var(--agent-green-dark); font-size: 11px; font-weight: 800; letter-spacing: 0; } .agent-runtime-head h2 { margin: 12px 0 8px; color: var(--agent-ink); font-size: 22px; line-height: 1.32; } .agent-runtime-head p { max-width: 520px; margin: 0; color: var(--agent-muted); font-size: 13px; line-height: 1.7; } .agent-runtime-metrics { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; } .agent-runtime-metrics span { display: inline-flex; align-items: center; height: 30px; padding: 0 10px; border: 1px solid var(--agent-border); border-radius: 999px; background: #fff; color: var(--agent-ink); font-size: 12px; font-weight: 700; } .agent-runtime-auth-card, .agent-runtime-keybar, .agent-runtime-conversation, .agent-runtime-callbar, .agent-runtime-textbar, .agent-runtime-note { border: 1px solid var(--agent-border); border-radius: 14px; background: rgba(255,255,255,.86); box-shadow: var(--agent-card-shadow); } .agent-runtime-auth-card { display: grid; grid-template-columns: minmax(0, 1fr); gap: 14px; padding: 18px; } .agent-runtime-note { display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; color: var(--agent-muted); font-size: 12px; line-height: 1.7; } .agent-runtime-note i, .agent-runtime-note svg { width: 16px; height: 16px; margin-top: 2px; color: var(--agent-green-dark); } .agent-runtime-auth-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; } .agent-runtime-keybar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 13px 15px; } .agent-runtime-keybar span { display: block; color: var(--agent-muted); font-size: 11px; font-weight: 700; } .agent-runtime-keybar strong { display: block; margin-top: 4px; color: var(--agent-ink); font-size: 13px; font-weight: 750; } .agent-runtime-conversation { flex: 1; min-height: 300px; display: flex; flex-direction: column; gap: 14px; padding: 18px; } .agent-runtime-conversation.chat { min-height: 360px; max-height: min(520px, calc(100vh - 360px)); overflow-y: auto; } .agent-runtime-message { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 12px; align-items: flex-start; } .agent-runtime-avatar { width: 36px; height: 36px; display: inline-flex; align-items: center; justify-content: center; border-radius: 11px; background: #f7f8fc; color: var(--agent-muted); } .agent-runtime-message.ai .agent-runtime-avatar { background: var(--agent-primary-soft); color: var(--agent-green-dark); } .agent-runtime-avatar i, .agent-runtime-avatar svg { width: 17px; height: 17px; } .agent-runtime-message span { display: block; margin-bottom: 6px; color: var(--agent-muted); font-size: 12px; font-weight: 700; } .agent-runtime-message p { margin: 0; color: var(--agent-ink); font-size: 14px; line-height: 1.75; } .agent-runtime-message.user { align-self: flex-end; max-width: 82%; } .agent-runtime-message.user > div:last-child { padding: 10px 12px; border-radius: 14px; background: var(--agent-primary-dark); color: #fff; } .agent-runtime-message.user span, .agent-runtime-message.user p { color: #fff; } .agent-runtime-message.ai { max-width: 86%; } .agent-runtime-message.ai > div:last-child { padding: 10px 12px; border: 1px solid #edf0f6; border-radius: 14px; background: #fff; } .agent-runtime-message.pending svg { animation: spin 1s linear infinite; } .agent-runtime-typing { display: inline-flex; align-items: center; gap: 4px; height: 18px; } .agent-runtime-typing i { width: 6px; height: 6px; border-radius: 999px; background: var(--agent-green); animation: agentTyping 900ms ease-in-out infinite; } .agent-runtime-typing i:nth-child(2) { animation-delay: .12s; } .agent-runtime-typing i:nth-child(3) { animation-delay: .24s; } @keyframes agentTyping { 0%, 100% { transform: translateY(0); opacity: .45; } 50% { transform: translateY(-4px); opacity: 1; } } .agent-runtime-chat-meta { align-self: center; padding: 4px 8px; border-radius: 999px; background: #f7f8fc; color: var(--agent-muted); font-size: 11px; font-weight: 700; } .agent-runtime-callbar { min-height: 74px; display: grid; grid-template-columns: minmax(0, 1fr) 44px 54px; gap: 12px; align-items: center; padding: 12px; } .agent-runtime-wave { height: 42px; display: flex; align-items: center; gap: 4px; padding: 0 10px; border-radius: 12px; background: #f7f8fc; overflow: hidden; } .agent-runtime-wave span { width: 4px; height: 10px; border-radius: 999px; background: #c6ceda; transform-origin: center; } .agent-runtime-wave.active span { background: var(--agent-green); animation: agentWave 900ms ease-in-out infinite; animation-delay: calc(var(--i) * -58ms); } @keyframes agentWave { 0%, 100% { height: 8px; opacity: .55; } 45% { height: 32px; opacity: 1; } 70% { height: 18px; opacity: .78; } } .agent-runtime-round, .agent-runtime-call { display: inline-flex; align-items: center; justify-content: center; border: 0; cursor: pointer; transition: transform .18s ease, background .18s ease, color .18s ease; } .agent-runtime-round { width: 44px; height: 44px; border-radius: 14px; background: #f7f8fc; color: var(--agent-ink); } .agent-runtime-round.muted { background: #fff1f0; color: #cf1322; } .agent-runtime-call { width: 54px; height: 54px; border-radius: 18px; background: var(--agent-primary-dark); color: #fff; } .agent-runtime-call.danger { background: #ff4d4f; } .agent-runtime-round:hover, .agent-runtime-call:hover { transform: translateY(-1px); } .agent-runtime-round i, .agent-runtime-round svg, .agent-runtime-call i, .agent-runtime-call svg { width: 20px; height: 20px; } .agent-runtime-muted-tip { align-self: flex-end; color: #cf1322; font-size: 12px; font-weight: 700; } .agent-runtime-textbar { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; padding: 12px; } .bailian-cube { position: relative; width: 112px; height: 96px; opacity: .85; } .bailian-cube span { position: absolute; border: 1px solid #d6dbe6; background: linear-gradient(145deg, #f8f9fc, #e8ebf2); box-shadow: 0 18px 32px rgba(23,31,45,.07); } .bailian-cube span:nth-child(1) { left: 28px; top: 18px; width: 56px; height: 56px; border-radius: 12px; transform: rotate(45deg) skew(-8deg, -8deg); } .bailian-cube span:nth-child(2) { left: 8px; top: 44px; width: 50px; height: 38px; border-radius: 10px; transform: skewY(22deg); background: linear-gradient(145deg, #eef1f7, #dde2ec); } .bailian-cube span:nth-child(3) { right: 8px; top: 44px; width: 50px; height: 38px; border-radius: 10px; transform: skewY(-22deg); background: linear-gradient(145deg, #f7f8fb, #e5e9f1); } .bailian-required { color: #ff4d4f; font-size: 13px; } @media (max-width: 1180px) { .bailian-agent-body { grid-template-columns: minmax(420px, 54vw) minmax(0, 1fr); } .bailian-header-actions { gap: 8px; } .bailian-action-btn { padding: 0 12px; } } @media (max-width: 960px) { body.agent-workbench-mode .page-container { overflow-y: auto; } .bailian-agent-config { height: auto; min-height: 100vh; overflow: visible; } .bailian-agent-header { height: auto; min-height: 64px; flex-wrap: wrap; padding: 12px 16px; } .bailian-header-actions { width: 100%; justify-content: flex-start; overflow-x: auto; padding-bottom: 2px; } .bailian-agent-body { grid-template-columns: 1fr; } .bailian-config-pane { border-right: 0; border-bottom: 1px solid var(--agent-border); } .bailian-config-scroll { overflow: visible; } .bailian-config-footer { padding: 14px 18px 18px; box-shadow: none; } .bailian-preview-pane { min-height: 420px; } .bailian-preview-pane.is-runtime { padding: 24px; } .agent-runtime-head, .agent-runtime-keybar, .agent-text-topbar, .agent-voice-topbar { flex-direction: column; align-items: stretch; } .agent-runtime-metrics { justify-content: flex-start; } } @media (max-width: 640px) { .app-recycle-summary, .app-recycle-item, .app-recycle-actions { flex-direction: column; align-items: stretch; } .app-recycle-actions .btn { width: 100%; justify-content: center; } .bailian-agent-title { max-width: 220px; font-size: 17px; } .bailian-step-tabs { height: 64px; grid-template-columns: repeat(3, minmax(0, 1fr)); } .agent-runtime-callbar, .agent-runtime-textbar, .agent-text-input-shell { grid-template-columns: 1fr; } .agent-runtime-round, .agent-runtime-call, .agent-text-send { width: 100%; } .agent-text-panel { min-height: 640px; border-radius: 12px; } .agent-voice-panel { min-height: 640px; border-radius: 12px; } .agent-text-message-area { padding: 24px 14px; } .agent-text-user-bubble, .agent-text-ai-message, .agent-voice-user-bubble, .agent-voice-ai-row, .agent-voice-ai-message { max-width: 88%; } .agent-voice-stage { flex-direction: column; padding: 22px 16px 12px; } .agent-voice-latency { position: static; align-self: center; transform: none; margin-top: 14px; } .agent-voice-panel.idle .agent-voice-control, .agent-voice-panel.recording .agent-voice-control { grid-template-columns: 1fr; border-radius: 24px; margin: 0 14px 12px; padding: 8px; } .agent-voice-control-actions { justify-content: stretch; } .agent-voice-mic-btn, .agent-voice-hangup-btn, .agent-voice-start-btn { width: 100%; } .bailian-step-tab { min-height: 64px; gap: 4px; padding: 0 4px; } .bailian-step-number { width: 20px; height: 20px; font-size: 11px; } .bailian-step-title { font-size: 12px; } .bailian-config-scroll { padding: 16px; } .bailian-card-section { padding: 16px; } .bailian-variable-grid, .bailian-mode-grid, .bailian-model-mode-grid, .bailian-mini-grid { grid-template-columns: 1fr; } .bailian-variable-manager, .bailian-variable-detail-grid, .bailian-variable-form { grid-template-columns: 1fr; } .bailian-variable-simple-head { display: none; } .bailian-variable-simple-row { grid-template-columns: 1fr 36px; } .bailian-variable-simple-row .bailian-input:first-child { grid-column: 1 / -1; } .bailian-variable-list-pane, .bailian-variable-detail-pane { min-height: auto; } .bailian-variable-list { max-height: none; } .bailian-variable-actions { justify-content: stretch; } .bailian-variable-actions .bailian-action-btn { flex: 1; } .bailian-hotword-box, .bailian-switch-row, .bailian-section-inline-action, .bailian-mcp-empty, .bailian-list-card, .bailian-kb-card { align-items: flex-start; } .bailian-hotword-box, .bailian-mcp-empty, .bailian-model-manager-toolbar, .bailian-kb-picker-toolbar, .bailian-section-inline-action { flex-direction: column; } .bailian-card-section-head { align-items: flex-start; flex-wrap: wrap; } .bailian-card-section-actions { justify-content: flex-start; } .bailian-search-field { min-width: 0; width: 100%; } .bailian-kb-picker-toolbar .btn { width: 100%; justify-content: center; } .bailian-kb-picker-card { grid-template-columns: 18px minmax(0, 1fr); } .bailian-kb-picker-status { grid-column: 2; justify-self: flex-start; } .bailian-asr-form-grid { grid-template-columns: 1fr; } .bailian-voice-mode-grid { grid-template-columns: 1fr; } .bailian-asr-model-card, .bailian-asr-model-actions, .bailian-asr-form-actions { flex-direction: column; align-items: stretch; } .bailian-asr-model-actions .bailian-action-btn, .bailian-asr-form-actions .bailian-action-btn, .bailian-asr-form-actions .btn { width: 100%; } .bailian-list-card, .bailian-kb-card { flex-wrap: wrap; } .bailian-prompt-editor { height: 300px; min-height: 300px; } .bailian-preview-pane { padding: 32px 18px; } }