:root{--primary: #4f46e5;--primary-hover: #4338ca;--primary-light: #818cf8;--primary-bg: #eef2ff;--accent-purple: #8b5cf6;--accent-purple-light: #c4b5fd;--accent-purple-bg: #f5f3ff;--accent-cyan: #06b6d4;--accent-cyan-light: #67e8f9;--accent-cyan-bg: #ecfeff;--gradient-brand: #3,7,89;--gradient-main: linear-gradient(135deg, #4f46e5 0%, #8b5cf6 50%, #06b6d4 100%);--gradient-soft: linear-gradient(135deg, #eef2ff 0%, #f5f3ff 50%, #ecfeff 100%);--gradient-card: linear-gradient(135deg, rgba(79,70,229,.06) 0%, rgba(139,92,246,.05) 50%, rgba(6,182,212,.06) 100%);--bg: #ffffff;--bg-secondary: #f8fafc;--bg-tertiary: #f1f5f9;--text: #0f172a;--text-secondary: #475569;--text-muted: #94a3b8;--border: #e2e8f0;--border-strong: #cbd5e1;--success: #10b981;--success-bg: #d1fae5;--danger: #ef4444;--danger-bg: #fee2e2;--warning: #f59e0b;--warning-bg: #fef3c7;--info: #06b6d4;--info-bg: #cffafe;--radius: 10px;--radius-sm: 6px;--radius-lg: 14px;--radius-xl: 20px;--shadow-sm: 0 1px 2px rgba(15,23,42,.05);--shadow-md: 0 4px 14px rgba(79,70,229,.08);--shadow-lg: 0 12px 32px rgba(79,70,229,.12);--shadow-brand: 0 8px 24px rgba(79,70,229,.25);--sidebar-bg: #ffffff;--sidebar-border: var(--border);--sidebar-text: #64748b;--sidebar-text-strong: #0f172a;--sidebar-active-bg: var(--primary-bg);--sidebar-active-color: var(--primary);--sidebar-hover-bg: var(--bg-tertiary);--header-bg: rgba(255,255,255,.85);--header-blur: 12px}*{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.5;color:var(--text);background:var(--bg-secondary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 16px;border:1px solid transparent;border-radius:var(--radius);font-size:14px;font-weight:500;cursor:pointer;transition:all .18s ease;-webkit-user-select:none;user-select:none;white-space:nowrap}.btn-primary{background:var(--primary);color:#fff;box-shadow:0 2px 8px #4f46e540}.btn-primary:hover{background:var(--primary-hover);transform:translateY(-1px);box-shadow:0 4px 12px #4f46e559}.btn-secondary{background:var(--bg-tertiary);color:var(--text)}.btn-secondary:hover{background:var(--border)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover{opacity:.9}.btn-ghost{background:transparent;color:var(--primary);border-color:var(--primary-bg)}.btn-ghost:hover{background:var(--primary-bg)}.btn-sm{padding:5px 12px;font-size:12px;border-radius:var(--radius-sm)}.btn-lg{padding:11px 22px;font-size:15px}.btn:disabled{opacity:.55;cursor:not-allowed;transform:none!important;box-shadow:none!important}.form-group{margin-bottom:16px}.form-group label{display:block;font-size:13px;font-weight:500;margin-bottom:6px;color:var(--text-secondary)}.form-group input,.form-group textarea,.form-group select{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:var(--radius);font-size:14px;background:var(--bg);color:var(--text);transition:border-color .15s,box-shadow .15s}.form-group textarea{min-height:80px;resize:vertical}.form-group input:focus,.form-group textarea:focus,.form-group select:focus{outline:none;border-color:var(--primary-light);box-shadow:0 0 0 3px #4f46e526}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;animation:fadeIn .18s ease}.modal{background:var(--bg);border-radius:var(--radius-lg);padding:24px;width:90%;max-width:560px;max-height:85vh;overflow-y:auto;box-shadow:var(--shadow-lg);animation:slideUp .22s ease}.modal h3{margin-bottom:16px;font-size:18px;font-weight:600}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:20px}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{transform:translateY(12px);opacity:0}to{transform:translateY(0);opacity:1}}.data-table{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.data-table th,.data-table td{padding:11px 16px;text-align:left;border-bottom:1px solid var(--border);font-size:13px}.data-table tbody tr:last-child td{border-bottom:none}.data-table th{font-weight:600;color:var(--text-secondary);background:var(--bg-secondary);font-size:12px;letter-spacing:.02em;text-transform:uppercase}.data-table tbody tr{transition:background .12s}.data-table tbody tr:hover td{background:var(--primary-bg)}.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:500;line-height:1.4}.badge-primary{background:var(--primary-bg);color:var(--primary)}.badge-success{background:var(--success-bg);color:#047857}.badge-danger{background:var(--danger-bg);color:#b91c1c}.badge-warning{background:var(--warning-bg);color:#b45309}.badge-info{background:var(--info-bg);color:#0e7490}.badge-purple{background:var(--accent-purple-bg);color:#6d28d9}.badge-secondary{background:var(--bg-tertiary);color:var(--text-secondary);border:1px solid var(--border)}.page-header{padding:20px 28px;display:flex;align-items:center;justify-content:space-between;background:var(--bg);border-bottom:1px solid var(--border)}.page-header h1{font-size:19px;font-weight:600;background:var(--gradient-main);-webkit-background-clip:text;background-clip:text;color:transparent}.page-body{padding:22px 28px 28px}.empty-state{text-align:center;padding:60px 20px;color:var(--text-muted)}.error-msg{color:var(--danger);font-size:13px;margin-bottom:8px}.text-muted{color:var(--text-muted);font-size:12px}.loading{text-align:center;padding:48px;color:var(--text-muted)}.pagination{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:20px}.pagination button{min-width:34px;height:34px;padding:0 10px;border:1px solid var(--border);background:var(--bg);border-radius:var(--radius-sm);cursor:pointer;font-size:13px;transition:all .15s}.pagination button:hover:not(:disabled){border-color:var(--primary-light);color:var(--primary)}.pagination button:disabled{opacity:.4;cursor:not-allowed}.pagination button.active{background:var(--primary);color:#fff;border-color:var(--primary);box-shadow:0 2px 6px #4f46e540}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:16px;margin-bottom:22px}.stat-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;transition:transform .18s,box-shadow .18s;position:relative;overflow:hidden}.stat-card:before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--gradient-main);border-radius:3px 0 0 3px;opacity:.85}.stat-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.stat-card .label{font-size:13px;color:var(--text-secondary);margin-bottom:6px}.stat-card .value{font-size:26px;font-weight:700;font-variant-nums:tabular-nums;background:var(--gradient-main);-webkit-background-clip:text;background-clip:text;color:transparent}.search-bar{display:flex;align-items:center;gap:12px;margin-bottom:16px;flex-wrap:wrap}.search-bar input{width:280px;padding:8px 12px;border:1px solid var(--border);border-radius:var(--radius);font-size:14px;background:var(--bg);color:var(--text);transition:border-color .15s,box-shadow .15s}.search-bar input:focus{outline:none;border-color:var(--primary-light);box-shadow:0 0 0 3px #4f46e526}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}.portrait-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;transition:box-shadow .15s,transform .15s}.portrait-card:hover{box-shadow:var(--shadow-md);transform:translateY(-2px)}.portrait-card img{width:100%;height:200px;object-fit:cover;background:var(--bg-tertiary);display:block}.portrait-card .card-body{padding:12px}.portrait-card .card-name{font-weight:600;font-size:14px;margin-bottom:4px}.portrait-card .card-desc{font-size:12px;color:var(--text-secondary);margin-bottom:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.portrait-card .card-category{font-size:12px;color:var(--text-muted)}.portrait-card .card-actions{display:flex;gap:6px;padding:8px 12px;border-top:1px solid var(--border)}.table-actions{display:flex;gap:6px;flex-wrap:wrap}
