/* Earphone Admin Console - Premium UI */ /* ========== 全局 ========== */ *, *::before, *::after { box-sizing: border-box; } body { margin: 0; min-height: 100vh; background: #F1F5F9; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.65; color: #334155; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } h1, h2, h3, h4, h5, h6 { font-weight: 600; color: #0F172A; letter-spacing: -0.02em; } /* ========== 侧边栏 ========== */ .sidebar-link { display: flex; align-items: center; padding: 8px 16px 8px 20px; margin: 1px 8px; border-radius: 8px; color: #94A3B8; text-decoration: none; font-size: 13px; font-weight: 400; transition: all 0.2s ease; gap: 10px; cursor: pointer; border-right: none; } .sidebar-link:hover { color: #E2E8F0; background: rgba(255,255,255,0.06); } .sidebar-link.active { color: #fff; background: linear-gradient(135deg, #4F46E5, #6366F1); font-weight: 500; box-shadow: 0 4px 12px rgba(79, 70, 229, 0.3); } .group-title { padding: 16px 20px 6px; font-size: 10px; color: #475569; text-transform: uppercase; letter-spacing: 1.2px; font-weight: 700; } .icon { width: 18px; height: 18px; flex-shrink: 0; opacity: 0.8; } .sidebar-link.active .icon { opacity: 1; } /* ========== 顶部栏 ========== */ header { backdrop-filter: blur(12px); background: rgba(255,255,255,0.85) !important; border-bottom: 1px solid rgba(0,0,0,0.04); } /* ========== 卡片 ========== */ .bg-white { border-radius: 12px; } .shadow-sm { box-shadow: 0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.02) !important; } .border-slate-100 { border-color: rgba(0,0,0,0.04) !important; } /* ========== 统计卡片 ========== */ .stat-card { transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); border: 1px solid rgba(0,0,0,0.04); position: relative; overflow: hidden; } .stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, #6366F1, #8B5CF6); opacity: 0; transition: opacity 0.3s; } .stat-card:hover { transform: translateY(-4px); box-shadow: 0 12px 40px rgba(0,0,0,0.08), 0 4px 12px rgba(0,0,0,0.04); } .stat-card:hover::before { opacity: 1; } /* ========== 表格 ========== */ .table { font-size: 13px; } .table th { background: #F8FAFC; font-weight: 600; color: #64748B; font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; padding: 12px 16px; border-bottom: 2px solid #E2E8F0; } .table td { color: #475569; padding: 11px 16px; border-bottom: 1px solid #F1F5F9; } .table tr:hover td { background: #F8FAFC; } .table tr:last-child td { border-bottom: none; } /* ========== 输入框 ========== */ .input, .select, .textarea { font-size: 14px; color: #334155; border-color: #E2E8F0; transition: all 0.2s; } .input:focus, .select:focus, .textarea:focus { border-color: #6366F1; box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1); outline: none; } .input::placeholder, .textarea::placeholder { color: #CBD5E1; } .label-text { font-size: 13px; color: #64748B; font-weight: 500; } /* ========== 按钮 ========== */ .btn { font-weight: 500; letter-spacing: 0.01em; transition: all 0.2s; } .btn-primary { background: linear-gradient(135deg, #4F46E5, #6366F1); border: none; box-shadow: 0 2px 8px rgba(79, 70, 229, 0.25); } .btn-primary:hover { background: linear-gradient(135deg, #4338CA, #4F46E5); box-shadow: 0 4px 16px rgba(79, 70, 229, 0.35); transform: translateY(-1px); } .btn-ghost:hover { background: #F1F5F9; } .btn-xs { font-size: 12px; border-radius: 6px; } /* ========== Badge ========== */ .badge { font-weight: 500; font-size: 11px; letter-spacing: 0.02em; border-radius: 6px; } /* ========== Toggle ========== */ .toggle-primary:checked { background: linear-gradient(135deg, #4F46E5, #6366F1); border-color: #4F46E5; } /* ========== Checkbox ========== */ .checkbox-primary:checked { background: linear-gradient(135deg, #4F46E5, #6366F1); border-color: #4F46E5; } /* ========== Tab ========== */ .tab { font-size: 13px; font-weight: 500; border-radius: 8px; transition: all 0.2s; } .tab-active, .tab.tab-active { background: linear-gradient(135deg, #4F46E5, #6366F1) !important; color: #fff !important; box-shadow: 0 2px 8px rgba(99, 102, 241, 0.25); } .tabs-boxed { border-radius: 10px; padding: 4px; gap: 2px; } /* ========== Alert/Toast ========== */ .alert { font-size: 13px; border-radius: 10px; } .toast { z-index: 9999; } /* ========== Modal ========== */ .modal-box { border-radius: 16px; padding: 28px; } /* ========== Divider ========== */ .divider { color: #94A3B8; font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; } .divider::before, .divider::after { background: #E2E8F0; } /* ========== 等宽字体 ========== */ .font-mono { font-family: "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Monaco, Consolas, monospace; font-size: 12px; } /* ========== 滚动条美化 ========== */ ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: #CBD5E1; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #94A3B8; } /* ========== 页面过渡动画 ========== */ main { animation: fadeIn 0.3s ease; } @keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } } /* ========== 面包屑 ========== */ header .text-sm { font-size: 13px; } /* ========== Dropdown 美化 ========== */ .dropdown-content { border-radius: 10px; box-shadow: 0 8px 30px rgba(0,0,0,0.12), 0 2px 8px rgba(0,0,0,0.04); border: 1px solid rgba(0,0,0,0.04); }