:root{--color-primary: #1e5eff;--color-primary-hover: #3d7aff;--color-primary-active: #1545cc;--color-primary-bg: #eaf1ff;--color-primary-bg-hover: #dce8ff;--color-success: #52c41a;--color-success-bg: #f0fbe8;--color-warning: #faad14;--color-warning-bg: #fff7e6;--color-danger: #ff4d4f;--color-danger-bg: #fff1f0;--color-info: #1890ff;--bg-layout: #f5f7fa;--bg-container: #ffffff;--bg-hover: #f5f7fa;--bg-active: #eaf1ff;--bg-disabled: #f0f0f0;--border-color: #e4e7ed;--border-color-light: #f0f2f5;--border-color-dark: #c0c4cc;--text-primary: #1f2329;--text-regular: #4e5969;--text-secondary: #86909c;--text-disabled: #c9cdd4;--text-inverse: #ffffff;--sider-bg: #0f172a;--sider-text: #a0aec0;--sider-text-active: #ffffff;--sider-item-active-bg: #1e5eff;--font-sans: -apple-system, "PingFang SC", "Microsoft YaHei", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: "JetBrains Mono", "SF Mono", "Consolas", "Menlo", monospace;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--shadow-rest: 0 1px 2px rgba(0, 0, 0, .03);--shadow-hover: 0 4px 12px rgba(0, 0, 0, .08);--shadow-float: 0 6px 16px rgba(0, 0, 0, .12);--sider-width: 240px;--sider-collapsed: 64px;--header-height: 56px;--gap: 24px}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%}body{font-family:var(--font-sans);font-size:14px;line-height:1.57;color:var(--text-primary);background:var(--bg-layout);-webkit-font-smoothing:antialiased}a{color:var(--color-primary);text-decoration:none}a:hover{color:var(--color-primary-hover)}.mono{font-family:var(--font-mono);font-size:13px}.layout{display:flex;min-height:100vh}.sider{width:var(--sider-width);flex-shrink:0;background:var(--sider-bg);color:var(--sider-text);display:flex;flex-direction:column;position:sticky;top:0;height:100vh;transition:width .2s ease;overflow:visible}.sider-logo{height:var(--header-height);display:flex;align-items:center;gap:10px;padding:0 20px;color:var(--text-inverse);font-size:16px;font-weight:600;border-bottom:1px solid rgba(255,255,255,.08)}.sider-logo .logo-dot{width:10px;height:10px;border-radius:50%;background:var(--color-primary);box-shadow:0 0 8px #1e5effcc}.sider-nav{flex:1;padding:12px 0;overflow-y:auto}.sider-nav .nav-group{padding:8px 20px;font-size:12px;color:#a0aec080;letter-spacing:.5px}.sider-nav a.nav-item{position:relative;display:flex;align-items:center;gap:10px;padding:10px 20px;color:var(--sider-text);font-size:14px;border-left:3px solid transparent;transition:all .15s;white-space:nowrap}.nav-icon{width:18px;height:18px}.sider-nav a.nav-item:hover{color:var(--text-inverse);background:#ffffff0a}.sider-nav a.nav-item.active{color:var(--text-inverse);background:var(--sider-item-active-bg);border-left-color:#fff}.main{flex:1;display:flex;flex-direction:column;min-width:0}.header{height:var(--header-height);background:var(--bg-container);border-bottom:1px solid var(--border-color-light);display:flex;align-items:center;justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:10}.header .breadcrumb{font-size:14px;color:var(--text-secondary)}.header-left{display:flex;align-items:center;gap:12px}.header .brand{font-size:15px;font-weight:600;color:var(--text-primary)}.header-right{display:flex;align-items:center;gap:8px}.content{padding:var(--gap)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;font-size:14px;font-family:var(--font-sans);border-radius:var(--radius-sm);border:1px solid transparent;cursor:pointer;transition:all .15s;white-space:nowrap}.btn:disabled{cursor:not-allowed;background:var(--bg-disabled);color:var(--text-disabled);border-color:transparent}.btn-primary{background:var(--color-primary);color:var(--text-inverse)}.btn-primary:hover:not(:disabled){background:var(--color-primary-hover)}.btn-primary:active:not(:disabled){background:var(--color-primary-active)}.btn-default{background:var(--bg-container);color:var(--text-regular);border-color:var(--border-color)}.btn-default:hover:not(:disabled){color:var(--color-primary);border-color:var(--color-primary)}.btn-danger{background:var(--color-danger);color:var(--text-inverse)}.btn-danger:hover:not(:disabled){background:#ff7875}.btn-danger:active:not(:disabled){background:#d9363e}.btn-text{background:transparent;color:var(--color-primary);border:none;padding:0 6px}.btn-text:hover:not(:disabled){background:var(--color-primary-bg)}.btn-text.danger{color:var(--color-danger)}.btn-text.danger:hover:not(:disabled){background:var(--color-danger-bg)}.btn-sm{height:28px;padding:0 8px;font-size:13px}.btn-lg{height:40px;padding:0 16px}.form-item{margin-bottom:16px}.form-item label{display:block;margin-bottom:8px;font-size:14px;font-weight:500;color:var(--text-primary)}.form-item label .required{color:var(--color-danger);margin-right:2px}.input,.select,.textarea{width:100%;height:32px;padding:0 12px;font-size:14px;font-family:var(--font-sans);color:var(--text-primary);background:var(--bg-container);border:1px solid var(--border-color);border-radius:var(--radius-sm);transition:all .15s;outline:none}.textarea{height:auto;min-height:72px;padding:8px 12px;resize:vertical}.input:hover,.select:hover,.textarea:hover{border-color:var(--border-color-dark)}.input:focus,.select:focus,.textarea:focus{border-color:var(--color-primary);box-shadow:0 0 0 2px #1e5eff26}.input.error,.select.error{border-color:var(--color-danger);box-shadow:0 0 0 2px #ff4d4f26}.input:disabled,.select:disabled{background:var(--bg-disabled);color:var(--text-disabled)}.input::placeholder{color:var(--text-secondary)}.form-actions{display:flex;gap:12px;margin-top:24px}.form-error{margin-top:8px;font-size:12px;color:var(--color-danger)}.tag{display:inline-flex;align-items:center;gap:4px;height:22px;padding:0 8px;font-size:12px;line-height:1;border-radius:2px;white-space:nowrap}.tag-solid{color:#fff}.tag-outline{background:var(--color-primary-bg);color:var(--color-primary);border:1px solid var(--color-primary)}.tag-closable .tag-close{cursor:pointer;opacity:.6}.tag-closable .tag-close:hover{opacity:1}.tag-disabled{background:var(--bg-disabled);color:var(--text-disabled)}.tag-status-unallocated{background:#8c8c8c;color:#fff}.tag-status-allocatedIdle{background:#1890ff;color:#fff}.tag-status-allocatedActive{background:#52c41a;color:#fff}.tag-status-abnormal{background:#ff4d4f;color:#fff}.card{background:var(--bg-container);border:1px solid var(--border-color-light);border-radius:var(--radius-lg);box-shadow:var(--shadow-rest);transition:all .15s}.card:hover{box-shadow:var(--shadow-hover);border-color:var(--border-color)}.card-pad{padding:16px}.card-pad-lg{padding:20px}.card-head{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid var(--border-color-light)}.card-head .card-title{font-size:16px;font-weight:600}.card-body{padding:16px}.stat-card{height:120px;display:flex;flex-direction:column;justify-content:center;gap:6px}.stat-card .stat-value{font-size:28px;font-weight:600;line-height:1.3;font-variant-numeric:tabular-nums}.stat-card .stat-label{font-size:14px;color:var(--text-secondary)}.table-wrap{overflow-x:auto}table.table{width:100%;border-collapse:collapse}.table thead th{height:40px;padding:0 12px;font-size:12px;font-weight:500;color:var(--text-secondary);background:#fafbfc;text-align:left;border-bottom:1px solid var(--border-color);white-space:nowrap}.table tbody td{height:48px;padding:0 12px;font-size:14px;color:var(--text-regular);border-bottom:1px solid var(--border-color-light)}.table tbody tr:hover{background:var(--bg-hover)}.table tbody tr:last-child td{border-bottom:none}.table .col-actions{text-align:right}.table .col-actions .btn-text+.btn-text{margin-left:4px}.grid{display:grid;grid-template-columns:repeat(24,1fr);gap:var(--gap)}.col-6{grid-column:span 6}.col-8{grid-column:span 8}.col-12{grid-column:span 12}.col-16{grid-column:span 16}.col-18{grid-column:span 18}.col-24{grid-column:span 24}@media(max-width:1200px){.col-6,.col-8,.col-12,.col-16,.col-18{grid-column:span 12}}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;flex-wrap:wrap}.toolbar .filters{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.toolbar .filters .input,.toolbar .filters .select{width:160px}.page-title{font-size:20px;font-weight:600;line-height:1.4;margin-bottom:16px}.empty{padding:48px 0;text-align:center;color:var(--text-secondary)}.pagination{display:flex;align-items:center;justify-content:flex-end;gap:8px;margin-top:16px;font-size:14px;color:var(--text-secondary)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#0f172a,#1e3a8a)}.login-card{width:400px;background:var(--bg-container);border-radius:var(--radius-lg);box-shadow:var(--shadow-float);padding:32px}.login-card .login-title{font-size:20px;font-weight:600;text-align:center;margin-bottom:4px}.login-card .login-sub{font-size:13px;color:var(--text-secondary);text-align:center;margin-bottom:24px}.login-card .btn{width:100%}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:100}.modal{width:480px;max-width:90vw;max-height:90vh;overflow-y:auto;background:var(--bg-container);border-radius:var(--radius-lg);box-shadow:var(--shadow-float)}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px;border-bottom:1px solid var(--border-color-light)}.modal-head .modal-title{font-size:16px;font-weight:600}.modal-body{padding:16px}.modal-foot{display:flex;justify-content:flex-end;gap:12px;padding:16px;border-top:1px solid var(--border-color-light)}.toast{position:fixed;top:24px;left:50%;transform:translate(-50%);padding:10px 16px;border-radius:var(--radius-sm);background:var(--text-primary);color:#fff;font-size:14px;z-index:200;box-shadow:var(--shadow-float);opacity:0;transition:opacity .2s;pointer-events:none}.toast.show{opacity:1}.toast.error{background:var(--color-danger)}.toast.success{background:var(--color-success)}.detail-row{display:flex;padding:10px 0;border-bottom:1px solid var(--border-color-light)}.detail-row:last-child{border-bottom:none}.detail-row .detail-label{width:120px;flex-shrink:0;color:var(--text-secondary)}.detail-row .detail-value{color:var(--text-primary)}.password-box{display:flex;align-items:center;gap:8px}.password-box .input{font-family:var(--font-mono)}.icon{width:16px;height:16px;flex-shrink:0;vertical-align:middle}.sider.collapsed{width:var(--sider-collapsed)}.sider.collapsed .sider-logo{justify-content:center;padding:0}.sider.collapsed .sider-logo-text,.sider.collapsed .nav-text,.sider.collapsed .nav-group{display:none}.sider.collapsed .sider-nav a.nav-item{justify-content:center;padding:12px 0}.sider.collapsed .sider-nav a.nav-item:after{content:attr(data-label);position:absolute;left:calc(100% + 10px);top:50%;transform:translateY(-50%);background:var(--text-primary);color:var(--text-inverse);padding:5px 10px;border-radius:var(--radius-sm);font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:60;box-shadow:var(--shadow-float)}.sider.collapsed .sider-nav a.nav-item:hover:after{opacity:1}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;color:var(--text-regular);border-radius:var(--radius-sm);cursor:pointer;transition:all .15s;position:relative}.icon-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.icon-btn:after{content:attr(data-label);position:absolute;top:calc(100% + 6px);right:0;background:var(--text-primary);color:var(--text-inverse);padding:4px 8px;border-radius:var(--radius-sm);font-size:12px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s;z-index:60}.icon-btn:hover:after{opacity:1}.icon-sun{display:none}[data-theme=dark] .icon-sun{display:inline-block}[data-theme=dark] .icon-moon{display:none}.user-menu{position:relative}.user-trigger{display:flex;align-items:center;gap:8px;height:32px;padding:0 8px;border:none;background:transparent;color:var(--text-regular);font-size:14px;font-family:var(--font-sans);border-radius:var(--radius-sm);cursor:pointer;transition:all .15s}.user-trigger:hover{background:var(--bg-hover);color:var(--text-primary)}.user-trigger .chevron{transition:transform .15s}.user-menu.open .user-trigger .chevron{transform:rotate(180deg)}.user-dropdown{position:absolute;top:calc(100% + 6px);right:0;min-width:140px;background:var(--bg-container);border:1px solid var(--border-color);border-radius:var(--radius-md);box-shadow:var(--shadow-float);padding:4px;display:none;z-index:50}.user-menu.open .user-dropdown{display:block}.user-dropdown-item{display:block;width:100%;text-align:left;padding:8px 12px;border:none;background:transparent;color:var(--text-regular);font-size:14px;font-family:var(--font-sans);border-radius:var(--radius-sm);cursor:pointer;transition:all .15s}.user-dropdown-item:hover{background:var(--bg-hover);color:var(--text-primary)}[data-theme=dark]{--bg-layout: #0b0f19;--bg-container: #111827;--bg-hover: #1f2937;--bg-active: #1e3a8a;--bg-disabled: #1f2937;--border-color: #2d3748;--border-color-light: #1f2937;--border-color-dark: #4b5563;--text-primary: #e5e7eb;--text-regular: #9ca3af;--text-secondary: #6b7280;--text-disabled: #4b5563;--sider-bg: #0b0f19}[data-theme=dark] .table thead th{background:#1f2937}[data-theme=dark] .card{box-shadow:0 1px 2px #0000004d}[data-theme=dark] .board-col,[data-theme=dark] .board-projects,[data-theme=dark] .board-project{border-color:#4b5563}[data-theme=dark] .host-meta,[data-theme=dark] .board-col-count,[data-theme=dark] .board-col .empty,[data-theme=dark] .board-project .empty{color:#cbd5e1}
