*{margin:0;padding:0;box-sizing:border-box}:root{--primary: #1677ff;--primary-hover: #4096ff;--primary-active: #0958d9;--primary-light: #e6f4ff;--primary-bg: #f0f5ff;--success: #52c41a;--success-light: #f6ffed;--warning: #faad14;--warning-light: #fffbe6;--error: #ff4d4f;--error-light: #fff2f0;--text-primary: #1f1f1f;--text-secondary: #5a5a5a;--text-tertiary: #8c8c8c;--text-quaternary: #bfbfbf;--bg-body: #f5f7fa;--bg-white: #ffffff;--bg-light: #fafbfc;--border: #e8e8e8;--border-light: #f0f0f0;--shadow-sm: 0 1px 2px rgba(0,0,0,.04);--shadow-md: 0 4px 12px rgba(0,0,0,.08);--shadow-lg: 0 8px 24px rgba(0,0,0,.12);--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--transition: .25s cubic-bezier(.4, 0, .2, 1)}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--bg-body);color:var(--text-primary);line-height:1.6}html{scroll-behavior:smooth}::-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-sider{background:linear-gradient(180deg,#001529,#002140)!important;box-shadow:2px 0 8px #00000026!important;border-right:none!important;position:relative!important;z-index:10}.layout-sider .ant-layout-sider-children{display:flex;flex-direction:column;height:100%}.sidebar-inner{flex:1;overflow-y:auto;overflow-x:hidden}.sidebar-logo{display:flex;align-items:center;gap:12px;padding:20px 20px 16px;border-bottom:1px solid rgba(255,255,255,.1);transition:padding var(--transition)}.ant-layout-sider-collapsed .sidebar-logo{padding:20px 16px 16px;justify-content:center}.sidebar-logo img{height:36px;object-fit:contain;flex-shrink:0}.sidebar-logo-text{color:#fff;font-size:16px;font-weight:600;white-space:nowrap;letter-spacing:1px;opacity:.9}.sidebar-collapse-btn{height:48px;display:flex;align-items:center;justify-content:center;color:#ffffffa6;cursor:pointer;font-size:16px;border-top:1px solid rgba(255,255,255,.1);transition:color var(--transition)}.sidebar-collapse-btn:hover{color:#fff}.layout-sider .ant-menu{background:transparent!important}.layout-sider .ant-menu-item,.layout-sider .ant-menu-submenu-title{color:#ffffffbf!important;border-radius:8px!important;margin:4px 12px!important;width:auto!important;transition:all var(--transition)!important}.layout-sider .ant-menu-item:hover,.layout-sider .ant-menu-submenu-title:hover{color:#fff!important;background:#ffffff14!important}.layout-sider .ant-menu-item-selected{background:#1677ff4d!important;color:#fff!important;font-weight:500}.layout-sider .ant-menu-item-selected:after{display:none!important}.layout-sider .ant-menu-submenu-arrow{color:#ffffffa6!important}.layout-sider .ant-menu-submenu-open>.ant-menu-submenu-title{color:#fff!important}.layout-main{background:var(--bg-body)!important}.layout-header{background:#fff!important;padding:0 24px!important;display:flex;align-items:center;justify-content:space-between;height:56px;line-height:56px;box-shadow:0 1px 4px #0000000f;z-index:9;position:sticky;top:0}.header-left{display:flex;align-items:center;gap:8px}.header-collapse-btn{font-size:18px!important;color:var(--text-secondary)!important}.header-greeting{font-size:14px;color:var(--text-secondary);white-space:nowrap;display:flex;align-items:center;gap:8px}.header-greeting strong{color:var(--text-primary);font-weight:600}.header-role-tag{margin-left:0!important;font-size:12px}.header-right{display:flex;align-items:center}.header-user{display:flex;align-items:center;gap:8px;cursor:pointer;padding:4px 8px;border-radius:8px;transition:background var(--transition)}.header-user:hover{background:var(--bg-light)}.header-user-name{font-size:14px;color:var(--text-primary);font-weight:500}.layout-content{margin:20px 24px;min-height:280px}.layout-content-simple{margin:24px;padding:24px;background:#fff;border-radius:var(--radius-lg);min-height:280px}.page-header{margin-bottom:16px}.page-body{background:#fff;border-radius:var(--radius-lg);padding:24px;box-shadow:var(--shadow-sm);border:1px solid var(--border-light);animation:pageEnter .3s cubic-bezier(.4,0,.2,1) both}@keyframes pageEnter{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.layout-footer{text-align:center;padding:16px 24px;display:flex;justify-content:center;align-items:center;gap:16px;font-size:12px;color:var(--text-tertiary)}.footer-logo{height:22px;object-fit:contain;opacity:.8}.footer-brand{font-weight:700;color:#1677ff;letter-spacing:.5px}.footer-copy{opacity:.7}.footer-icp{opacity:.7;color:inherit;text-decoration:none}.footer-icp:hover{color:#1677ff;opacity:1}.footer-status{display:flex;align-items:center;gap:20px;margin-left:8px;padding-left:16px;border-left:1px solid var(--border-light)}.footer-status-item{display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--text-tertiary);cursor:default;white-space:nowrap}.footer-status-dot{width:6px;height:6px;border-radius:50%;display:inline-block;flex-shrink:0}.footer-status-dot.build{background-color:#52c41a}.footer-status-dot.db{background-color:#1677ff}.footer-status-dot.server{background-color:#8c8c8c}.footer-status-clickable{cursor:pointer;text-decoration:underline dotted;text-underline-offset:3px}.startup-log-tooltip{max-height:240px;overflow-y:auto}.startup-log-header{font-size:12px;font-weight:600;color:#fffc;border-bottom:1px solid #ffffff22;padding-bottom:6px;margin-bottom:6px}.startup-log-entry{font-size:11px;line-height:1.8;color:#fffd}.startup-log-detail{color:#fff8;font-size:10px}.drawer-title{display:flex;align-items:center;justify-content:center}.ant-card{border-radius:var(--radius-lg)!important;box-shadow:var(--shadow-sm);border:1px solid var(--border-light)!important;transition:box-shadow var(--transition),border-color var(--transition)}.ant-card:hover{box-shadow:var(--shadow-md);border-color:var(--border)!important}.ant-card-head{border-bottom-color:var(--border-light)!important;border-radius:var(--radius-lg) var(--radius-lg) 0 0!important;padding:16px 20px!important;min-height:auto!important}.ant-card-head-title{font-size:15px;font-weight:600}.ant-card-body{padding:20px!important}.ant-card-hoverable:hover{transform:translateY(-2px)}.ant-btn{border-radius:var(--radius-sm)!important;font-weight:500;transition:all var(--transition);box-shadow:none!important}.ant-btn:hover{opacity:.9}.ant-btn-primary{background:var(--primary)!important;border-color:var(--primary)!important}.ant-btn-primary:hover{background:var(--primary-hover)!important;border-color:var(--primary-hover)!important}.ant-table{border-radius:var(--radius-md)!important;overflow:hidden}.ant-table-thead>tr>th{background:var(--bg-light)!important;font-weight:600;color:var(--text-primary);border-bottom:1px solid var(--border)!important;padding:12px 16px!important;font-size:13px}.ant-table-tbody>tr>td{border-bottom:1px solid var(--border-light)!important;padding:12px 16px!important}.ant-table-tbody>tr:hover>td{background:var(--primary-light)!important}.ant-table-tbody>tr:last-child>td{border-bottom:none!important}.ant-input,.ant-select-selector,.ant-picker,.ant-input-number{border-radius:var(--radius-sm)!important;border-color:var(--border)!important;transition:all var(--transition)}.ant-input:hover,.ant-select-selector:hover,.ant-picker:hover,.ant-input-number:hover{border-color:var(--primary-hover)!important}.ant-input:focus,.ant-select-selector:focus,.ant-picker-focused,.ant-input-number-focused{border-color:var(--primary)!important;box-shadow:0 0 0 2px #1677ff1f!important}.ant-form-item{margin-bottom:16px}.ant-form-item-label>label{font-weight:500;font-size:13px;color:var(--text-secondary)}.ant-modal-content{border-radius:var(--radius-lg)!important;overflow:hidden}.ant-modal-header{border-bottom:1px solid var(--border-light)!important;padding:20px 24px!important;background:var(--bg-light)}.ant-modal-body{padding:24px!important}.ant-modal-footer{border-top:1px solid var(--border-light)!important;padding:12px 24px!important}.ant-tag{border-radius:4px;font-size:12px;padding:2px 8px;border:none}.ant-badge-count{border-radius:10px;min-width:18px;height:18px;line-height:18px;font-size:11px}.ant-spin-dot-item{background-color:var(--primary)!important}.ant-tabs-nav{margin-bottom:16px!important}.ant-tabs-tab{padding:12px 0!important}.ant-tabs-tab-active .ant-tabs-tab-btn{color:var(--primary)!important}.ant-select-dropdown{border-radius:var(--radius-md)!important}.ant-divider{margin:16px 0}.ant-statistic-title{font-size:13px;color:var(--text-tertiary)}.ant-statistic-content{font-size:28px;font-weight:700}.dashboard-stat-card{display:flex;align-items:center;gap:16px}.dashboard-stat-icon{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:26px;flex-shrink:0}.dashboard-stat-icon.blue{background:var(--primary-light);color:var(--primary)}.dashboard-stat-icon.green{background:var(--success-light);color:var(--success)}.dashboard-stat-icon.orange{background:var(--warning-light);color:var(--warning)}.dashboard-stat-info{flex:1;min-width:0}.dashboard-stat-label{font-size:13px;color:var(--text-tertiary);margin-bottom:4px}.dashboard-stat-value{font-size:26px;font-weight:700;color:var(--text-primary);line-height:1.2}.dashboard-stat-desc{font-size:12px;color:var(--text-tertiary);margin-top:2px}.dashboard-chart-card .ant-card-head,.dashboard-progress-card .ant-card-head{border-bottom:none!important}.page-container{max-width:1400px;margin:0 auto}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-8px)}to{opacity:1;transform:translate(0)}}@keyframes slideUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}.fade-in{animation:fadeIn .35s ease-out both}.slide-in{animation:slideIn .35s ease-out both}.slide-up{animation:slideUp .4s ease-out both}.scale-in{animation:scaleIn .3s ease-out both}@keyframes highlightPulse{0%,to{box-shadow:0 0 0 2px #1677ff}50%{box-shadow:0 0 8px 4px #1677ff66}}.fade-in-delay-1{animation:fadeIn .35s ease-out .1s both;opacity:0}.fade-in-delay-2{animation:fadeIn .35s ease-out .15s both;opacity:0}.fade-in-delay-3{animation:fadeIn .35s ease-out .2s both;opacity:0}.fade-in-delay-4{animation:fadeIn .35s ease-out .25s both;opacity:0}.fade-in-delay-5{animation:fadeIn .35s ease-out .3s both;opacity:0}@media(max-width:768px){.layout-content{margin:12px}.page-body{padding:16px}.layout-header{padding:0 16px!important}.fade-in{animation-duration:.2s}}
