/* Hub 业务布局。控制台壳层、控件、弹窗和列表视觉均来自 control-plane.css。 */

.hub-login-page { display:flex; min-height:100vh; align-items:flex-start; justify-content:center; padding:clamp(56px, 13vh, 128px) 24px 48px; background:var(--page-bg, #f5f7fa); }
.hub-login-card { width:min(100%, 430px); padding:32px 34px 28px; }
.hub-login-brand { display:flex; align-items:center; gap:12px; margin-bottom:30px; }
.hub-login-mark { display:grid; width:38px; height:38px; place-items:center; border-radius:10px; color:#fff; background:var(--primary, #3370ff); font-size:20px; font-weight:700; }
.hub-login-brand h1 { margin:0; color:var(--text); font-size:20px; line-height:1.25; }
.hub-login-brand p { margin:3px 0 0; color:var(--muted); font-size:12px; }
.hub-login-heading { margin-bottom:20px; }
.hub-login-heading h2 { margin:0 0 6px; color:var(--text); font-size:17px; }
.hub-login-heading p { margin:0; line-height:1.6; }
.hub-login-card .field { margin-bottom:15px; }
.hub-login-card .field label { display:block; margin-bottom:7px; color:var(--text); font-size:13px; font-weight:500; }
.hub-login-card input { width:100%; box-sizing:border-box; }
.hub-login-submit { width:100%; margin-top:4px; }
.hub-login-hint { margin:18px 0 0; color:var(--muted); font-size:12px; line-height:1.6; text-align:center; }
.trace-text { min-height:72px; max-height:180px; margin:8px 0 0; overflow:auto; white-space:pre-wrap; word-break:break-word; color:var(--body); font:inherit; line-height:1.55; }
.card-table { padding:0; overflow:hidden; }

.policy-table { width:100%; table-layout:auto; }
.toolbar { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin-bottom:8px; }
.modal-actions { display:flex; justify-content:flex-end; gap:8px; margin-top:18px; }

/* Hub 独有的复合单元格、调度与出口内容。 */
.list-metric b { color:var(--text); font-weight:600; }
.list-disclosure { min-width:0; margin:0; }
.list-disclosure summary { display:flex; align-items:center; gap:4px; margin:0; color:var(--body); font-size:13px; cursor:pointer; list-style:none; }
.list-disclosure summary::-webkit-details-marker { display:none; }
.list-disclosure[open] summary { margin-bottom:6px; }
.list-session-list { display:grid; max-width:100%; gap:4px; }
.list-session-item { display:flex; align-items:center; min-width:0; gap:4px; }
.list-session-item .sid { flex:1 1 auto; min-width:0; }
.list-session-item button.link { flex:0 0 auto; font-size:12px; }
.wizard-step { margin:10px 0 6px; font-size:15px; }
.wizard-sub { min-height:42px; color:var(--muted); font-size:13px; line-height:1.7; }
.spinner { display:inline-block; width:14px; height:14px; margin-right:8px; border:2px solid var(--border); border-top-color:var(--primary); border-radius:50%; vertical-align:-2px; animation:spin .8s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }
.pf { color:var(--muted); font-size:12px; }
details summary { margin:6px 0; color:var(--body); font-size:13px; cursor:pointer; }

.cap-block { margin-bottom:14px; }
.cap-line { display:flex; align-items:center; gap:8px; margin-bottom:6px; }
.cap-line input { width:80px; }
.cap-bar { height:8px; overflow:hidden; border-radius:4px; background:var(--border); }
.cap-fill { width:0; height:100%; background:var(--primary); transition:width .2s; }
.cap-fill.warn { background:var(--warning); }
.cap-fill.danger { background:var(--danger); }

.proxy-identity { display:inline-flex; align-items:center; min-width:0; gap:6px; }
.proxy-identity-name { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--text); }
.proxy-identity-detail { display:flex; min-width:0; }
.proxy-identity-detail-primary { display:flex; align-items:center; min-width:0; gap:6px; }
.proxy-name-value { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.egress-identity-cell { display:grid; min-width:0; gap:2px; }
.egress-identity-id { min-width:0; overflow:hidden; color:var(--muted); font-size:11px; line-height:16px; text-overflow:ellipsis; white-space:nowrap; }
