#app{min-height:100vh}.card-header{background-color:#f8fafc;border-bottom:1px solid var(--sb-border);border-radius:var(--sb-radius-lg) var(--sb-radius-lg) 0 0!important;padding:14px 20px;font-weight:600;color:var(--sb-text)}.card-body{padding:20px}.stat-card{border-left:3px solid var(--sb-primary);transition:box-shadow var(--sb-transition),border-color var(--sb-transition)}.stat-card:hover{box-shadow:var(--sb-shadow-md)}.btn-lg{border-radius:var(--sb-radius);padding:11px 24px;font-size:15px}.btn-primary{border-color:var(--sb-primary)}.btn-primary:focus,.btn-primary:hover{background-color:var(--sb-primary-hover);border-color:var(--sb-primary-hover)}.btn-primary:active{background-color:var(--sb-primary-active)!important;border-color:var(--sb-primary-active)!important}.btn-success{border-color:var(--sb-success)}.btn-success:hover{border-color:#047857}.btn-danger{border-color:var(--sb-danger)}.btn-danger:hover{border-color:#b91c1c}.btn-warning{border-color:var(--sb-warning)}.btn-warning:hover{border-color:#b45309;color:#fff}.btn-secondary{background-color:var(--sb-surface);border-color:var(--sb-border);color:var(--sb-text-secondary)}.btn-secondary:hover{background-color:var(--sb-border-light);border-color:#cbd5e1;color:var(--sb-text)}.form-label{font-weight:500;font-size:13px;color:var(--sb-text);margin-bottom:6px}.input-group-text{border-radius:var(--sb-radius) 0 0 var(--sb-radius);background-color:#f8fafc;color:var(--sb-text-secondary)}.input-group-text,.modal-content{border:1px solid var(--sb-border)}.modal-content{border-radius:var(--sb-radius-lg);box-shadow:var(--sb-shadow-lg)}.modal-header{background-color:#f8fafc;border-bottom:1px solid var(--sb-border);border-radius:var(--sb-radius-lg) var(--sb-radius-lg) 0 0;padding:16px 20px}.modal-title{color:var(--sb-text);font-weight:600;font-size:16px}.modal-body{padding:20px}.modal-footer{border-top:1px solid var(--sb-border);border-radius:0 0 var(--sb-radius-lg) var(--sb-radius-lg);padding:14px 20px}.table{margin-bottom:0}.table thead th{background-color:#f8fafc;border-bottom:1px solid var(--sb-border);color:var(--sb-text-secondary);font-weight:600;font-size:13px;padding:12px 14px;white-space:nowrap}.table tbody td{padding:12px 14px;vertical-align:middle;border-bottom:1px solid var(--sb-border-light);color:var(--sb-text)}.table-responsive{border-radius:var(--sb-radius);border:1px solid var(--sb-border);overflow:hidden}.pagination .page-link{color:var(--sb-text-secondary);border-color:var(--sb-border);border-radius:var(--sb-radius-sm);margin:0 2px}.pagination .page-link:hover{background-color:var(--sb-primary-light);color:var(--sb-primary);border-color:var(--sb-primary-border)}.pagination .page-item.active .page-link{background-color:var(--sb-primary);border-color:var(--sb-primary);color:#fff}a{color:var(--sb-primary);text-decoration:none}a:hover{color:var(--sb-primary-hover);text-decoration:underline}.dropdown-menu{border:1px solid var(--sb-border);border-radius:var(--sb-radius);box-shadow:var(--sb-shadow-md);padding:6px}.dropdown-item{border-radius:var(--sb-radius-sm);padding:7px 12px;font-size:14px;color:var(--sb-text)}.dropdown-item:hover{background-color:var(--sb-border-light);color:var(--sb-text)}.text-muted{color:var(--sb-text-muted)!important}:root{--sb-primary:#2563eb;--sb-primary-hover:#1d4ed8;--sb-primary-active:#1e40af;--sb-primary-light:#eff6ff;--sb-primary-border:#bfdbfe;--sb-success:#059669;--sb-success-light:#ecfdf5;--sb-success-border:#a7f3d0;--sb-danger:#dc2626;--sb-danger-light:#fef2f2;--sb-danger-border:#fecaca;--sb-warning:#d97706;--sb-warning-light:#fffbeb;--sb-warning-border:#fde68a;--sb-info:#0891b2;--sb-info-light:#ecfeff;--sb-info-border:#a5f3fc;--sb-bg:#f8fafc;--sb-surface:#fff;--sb-sidebar-bg:#fff;--sb-text:#1e293b;--sb-text-secondary:#64748b;--sb-text-muted:#94a3b8;--sb-border:#e2e8f0;--sb-border-light:#f1f5f9;--sb-radius-sm:6px;--sb-radius:8px;--sb-radius-lg:12px;--sb-shadow-sm:0 1px 2px 0 rgba(15,23,42,.04);--sb-shadow:0 1px 3px 0 rgba(15,23,42,.08),0 1px 2px -1px rgba(15,23,42,.04);--sb-shadow-md:0 4px 6px -1px rgba(15,23,42,.08),0 2px 4px -2px rgba(15,23,42,.04);--sb-shadow-lg:0 10px 15px -3px rgba(15,23,42,.08),0 4px 6px -4px rgba(15,23,42,.04);--sb-transition:150ms cubic-bezier(0.4,0,0.2,1)}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;background-color:var(--sb-bg);color:var(--sb-text);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.container{max-width:1200px;margin:0 auto;padding:20px}.card{background:var(--sb-surface);border:1px solid var(--sb-border);border-radius:var(--sb-radius-lg);box-shadow:var(--sb-shadow);padding:24px;margin-bottom:20px;transition:box-shadow var(--sb-transition)}.card:hover{box-shadow:var(--sb-shadow-md)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:9px 18px;border:1px solid transparent;border-radius:var(--sb-radius);font-size:14px;font-weight:500;line-height:1.4;cursor:pointer;transition:all var(--sb-transition);text-decoration:none;white-space:nowrap}.btn:focus-visible{outline:2px solid var(--sb-primary);outline-offset:2px}.btn-primary{background-color:var(--sb-primary);color:#fff}.btn-primary:hover{background-color:var(--sb-primary-hover);box-shadow:0 2px 8px rgba(37,99,235,.25)}.btn-primary:active{background-color:var(--sb-primary-active)}.btn-success{background-color:var(--sb-success);color:#fff}.btn-success:hover{background-color:#047857;box-shadow:0 2px 8px rgba(5,150,105,.25)}.btn-danger{background-color:var(--sb-danger);color:#fff}.btn-danger:hover{background-color:#b91c1c;box-shadow:0 2px 8px rgba(220,38,38,.25)}.btn-warning{background-color:var(--sb-warning);color:#fff}.btn-warning:hover{background-color:#b45309;box-shadow:0 2px 8px rgba(217,119,6,.25)}.btn-outline-secondary,.btn-secondary{background-color:var(--sb-surface);color:var(--sb-text-secondary);border-color:var(--sb-border)}.btn-outline-secondary:hover,.btn-secondary:hover{background-color:var(--sb-border-light);color:var(--sb-text);border-color:#cbd5e1}.btn.disabled,.btn:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}.btn-sm{padding:6px 12px;font-size:13px;border-radius:var(--sb-radius-sm)}.btn-outline-primary{background-color:transparent;color:var(--sb-primary);border-color:var(--sb-primary-border)}.btn-outline-primary:hover{background-color:var(--sb-primary-light);color:var(--sb-primary-hover);border-color:var(--sb-primary)}.btn-outline-danger{background-color:transparent;color:var(--sb-danger);border-color:var(--sb-danger-border)}.btn-outline-danger:hover{background-color:var(--sb-danger-light);color:var(--sb-danger);border-color:var(--sb-danger)}.btn-outline-success{background-color:transparent;color:var(--sb-success);border-color:var(--sb-success-border)}.btn-outline-success:hover{background-color:var(--sb-success-light);border-color:var(--sb-success)}.btn-outline-secondary{background-color:var(--sb-surface);color:var(--sb-text-secondary);border-color:var(--sb-border)}.btn-outline-secondary:hover{background-color:var(--sb-border-light);color:var(--sb-text);border-color:#cbd5e1}.btn-light{background-color:var(--sb-surface);color:var(--sb-text-secondary);border-color:var(--sb-border)}.btn-light:hover{background-color:var(--sb-border-light);color:var(--sb-text)}.form-group{margin-bottom:16px}.form-group label,.form-label{display:block;margin-bottom:6px;font-weight:500;font-size:13px;color:var(--sb-text)}.form-control,.form-select{width:100%;padding:9px 12px;border:1px solid var(--sb-border);border-radius:var(--sb-radius);font-size:14px;color:var(--sb-text);background-color:var(--sb-surface);transition:border-color var(--sb-transition),box-shadow var(--sb-transition)}.form-control::-moz-placeholder{color:var(--sb-text-muted)}.form-control::placeholder{color:var(--sb-text-muted)}.form-control:focus,.form-select:focus{outline:none;border-color:var(--sb-primary);box-shadow:0 0 0 3px rgba(37,99,235,.1)}.form-control:disabled{background-color:var(--sb-border-light);color:var(--sb-text-muted);cursor:not-allowed}.form-text{font-size:12px;color:var(--sb-text-muted);margin-top:4px}.table{width:100%;border-collapse:separate;border-spacing:0}.table td,.table th{padding:12px 14px;text-align:left;border-bottom:1px solid var(--sb-border-light);vertical-align:middle}.table th{background-color:#f8fafc;font-weight:600;font-size:13px;color:var(--sb-text-secondary);white-space:nowrap;border-bottom:1px solid var(--sb-border)}.table thead th:first-child{border-top-left-radius:var(--sb-radius)}.table thead th:last-child{border-top-right-radius:var(--sb-radius)}.table tbody tr{transition:background-color var(--sb-transition)}.table tbody tr:hover{background-color:#f8fafc}.table tbody tr:last-child td{border-bottom:none}.badge{display:inline-flex;align-items:center;padding:3px 9px;border-radius:999px;font-size:12px;font-weight:500;line-height:1.5;border:1px solid transparent}.badge-success{background-color:var(--sb-success-light);color:var(--sb-success);border-color:var(--sb-success-border)}.badge-danger{background-color:var(--sb-danger-light);color:var(--sb-danger);border-color:var(--sb-danger-border)}.badge-warning{background-color:var(--sb-warning-light);color:var(--sb-warning);border-color:var(--sb-warning-border)}.badge-info{background-color:var(--sb-info-light);color:var(--sb-info);border-color:var(--sb-info-border)}.badge-primary{background-color:var(--sb-primary-light);color:var(--sb-primary);border-color:var(--sb-primary-border)}.badge-secondary{background-color:var(--sb-border-light);color:var(--sb-text-secondary);border-color:var(--sb-border)}.alert{padding:12px 16px;border-radius:var(--sb-radius);margin-bottom:16px;font-size:14px;border:1px solid transparent}.alert-success{background-color:var(--sb-success-light);color:var(--sb-success);border-color:var(--sb-success-border)}.alert-danger,.alert-error{background-color:var(--sb-danger-light);color:var(--sb-danger);border-color:var(--sb-danger-border)}.alert-warning{background-color:var(--sb-warning-light);color:var(--sb-warning);border-color:var(--sb-warning-border)}.alert-info{background-color:var(--sb-info-light);color:var(--sb-info);border-color:var(--sb-info-border)}.empty,.loading{text-align:center;padding:48px 20px;color:var(--sb-text-muted);font-size:14px}.page-title{font-size:20px;font-weight:600;color:var(--sb-text);margin-bottom:4px}.page-subtitle{font-size:13px;color:var(--sb-text-secondary);margin-bottom:20px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#94a3b8}