/* Hub-only additions. Everything else comes from the CTF's main.css so both UIs match. */
.hub-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;font-size:12px;font-weight:600;border:1px solid var(--accent);background:transparent;color:var(--accent);border-radius:6px;cursor:pointer;font-family:inherit}
.hub-btn:hover{background:var(--accent);color:#fff}
.hub-btn:disabled{opacity:.5;cursor:not-allowed}
.hub-btn--solid{background:var(--accent);color:#fff}
.hub-btn--danger{border-color:#dc2626;color:#dc2626}
.hub-btn--danger:hover{background:#dc2626;color:#fff}
.hub-pill{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;padding:2px 9px;border-radius:999px;background:rgba(100,116,139,.12);color:var(--text-secondary)}
.hub-pill i{width:7px;height:7px;border-radius:50%;background:#94a3b8;display:inline-block}
.hub-pill.run{background:rgba(22,163,74,.1);color:#16a34a}.hub-pill.run i{background:#16a34a}
.hub-pill.standby{background:rgba(245,158,11,.12);color:#d97706}.hub-pill.standby i{background:#f59e0b}
.hub-pill.stop{background:rgba(220,38,38,.1);color:#ef4444}.hub-pill.stop i{background:#ef4444}
.hub-form-card{margin-bottom:16px}
.hub-form-body{padding:16px 18px;display:flex;flex-direction:column;gap:12px;max-width:520px}
.hub-form-body input[type=text],.hub-form-body input[type=password]{width:100%;box-sizing:border-box;padding:9px 12px;font-size:13px;border:1px solid var(--border);border-radius:8px;background:var(--bg-primary);color:var(--text-primary)}
.hub-form-body label{font-size:12px;font-weight:600;color:var(--text-secondary)}
.hub-msg{font-size:12px;min-height:16px}
.hub-msg.err{color:#ef4444}.hub-msg.ok{color:#16a34a}
.hub-inline-input{width:120px;padding:4px 8px;font-size:12px;border:1px solid var(--border);border-radius:6px;background:var(--bg-primary);color:var(--text-primary)}
.hub-ctf-actions{display:flex;gap:4px;justify-content:center;flex-wrap:wrap;margin-top:6px}
.hub-pre{background:#0b1220;color:#d1e7ff;padding:12px;border-radius:9px;overflow:auto;font-size:12px;margin:8px 0 0;max-height:60vh;white-space:pre-wrap;word-break:break-all}
.hub-ctf-grid{display:flex;flex-direction:column;gap:10px}
.hub-ctf-card-row{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.hub-ctf-meta{font-size:12px;color:var(--text-secondary);display:flex;gap:12px;flex-wrap:wrap;margin:4px 0 8px}
#hub-modal h3{margin:0 0 6px;font-size:15px;color:var(--text-primary)}
#hub-modal p{font-size:13px;color:var(--text-secondary);line-height:1.6;margin:0 0 14px}
#hub-modal input[type=text]{width:100%;box-sizing:border-box;padding:9px 12px;font-size:13px;border:1px solid var(--border);border-radius:8px;background:var(--bg-primary);color:var(--text-primary)}
.hub-ctf-grid .challenge-card{display:flex;border:1px solid var(--border);border-radius:10px;padding:14px 16px;background:var(--bg-secondary)}
.hub-ctf-grid .challenge-card.completed{border-color:rgba(22,163,74,.45)}

/* Compact horizontal semaphore (same lights as the CTF's control center, rotated and smaller) */
.hub-sema{display:inline-flex;flex-direction:row;align-items:center;gap:6px;padding:4px 9px;border-radius:999px;
  background:linear-gradient(180deg,#64748b,#4b5563);border:1px solid #94a3b8;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18),inset 0 -2px 4px rgba(17,24,39,.22),0 2px 5px rgba(15,23,42,.16)}
.hub-sema .ctf-dash-light{width:15px;height:15px;border-width:2px}
.hub-sema.is-off .ctf-dash-light{cursor:default}
.hub-sema-cap{display:block;font-size:10px;color:var(--text-muted);margin-top:5px}
.hub-ctf-table tbody td{padding:20px 14px;vertical-align:middle}
.hub-ctf-table tbody tr+tr td{border-top:1px solid var(--border)}
.hub-scope-chip{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:600;padding:3px 10px;border-radius:999px;background:var(--accent-bg);color:var(--accent);margin:2px 4px 2px 0}
.hub-scope-chip i{width:8px;height:8px;border-radius:2px;display:inline-block}
.hub-scope-chip--global{background:rgba(124,92,255,.14);color:#7c5cff}
.hub-check-list{display:flex;flex-direction:column;gap:8px;margin:10px 0 4px;max-height:40vh;overflow:auto}
.hub-check-list label{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--text-secondary);cursor:pointer}
.hub-check-list input{width:auto}

.hub-bar{height:8px;border-radius:999px;background:var(--border-subtle,rgba(148,163,184,.2));overflow:hidden;min-width:90px}
.hub-bar>div{height:100%;border-radius:999px;background:var(--accent);transition:width .4s}
.hub-bar.warn>div{background:#f59e0b}.hub-bar.hot>div{background:#ef4444}
.hub-metric{display:flex;flex-direction:column;gap:6px;min-width:130px}
.hub-metric span{font-size:12px;color:var(--text-secondary);font-variant-numeric:tabular-nums}

/* Edit CTF dialog */
.hub-edit-head h3{margin:0;font-size:18px}
.hub-edit-head p{margin:2px 0 14px;font-size:12px;color:var(--text-muted);font-family:var(--font-mono)}
.hub-edit-preview{display:flex;align-items:center;gap:14px;padding:14px 16px;margin-bottom:16px;border:1px solid var(--border);border-radius:12px;
  background:linear-gradient(120deg,color-mix(in srgb,var(--prev,#00b5d4) 14%,transparent),transparent 70%)}
.hub-edit-prev-bar{width:6px;align-self:stretch;border-radius:999px}
.hub-edit-prev-title{font-size:16px;font-weight:700;color:var(--text-primary)}
.hub-edit-prev-sub{font-size:12px;color:var(--text-muted);margin-top:2px;word-break:break-all}
.hub-edit-section{margin-bottom:16px;padding-top:14px;border-top:1px solid var(--border-subtle,var(--border))}
.hub-edit-section h4{margin:0 0 10px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}
.hub-edit-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:560px){.hub-edit-grid{grid-template-columns:1fr}}
.hub-edit-field{display:flex;flex-direction:column;gap:5px;margin-bottom:6px}
.hub-edit-field label{font-size:12px;font-weight:600;color:var(--text-secondary)}
.hub-edit-field small{font-size:11px;color:var(--text-muted)}
.hub-edit-field input[type=text],.hub-edit-field input[type=password],.hub-edit-field select{width:100%;box-sizing:border-box;padding:9px 12px;font-size:13px;font-family:inherit;border:1px solid var(--border);border-radius:8px;background:var(--bg-primary);color:var(--text-primary)}
.hub-edit-field input:disabled,.hub-edit-field select:disabled{opacity:.55;cursor:not-allowed}
.hub-edit-field input:focus,.hub-edit-field select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-bg)}
.hub-edit-check{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--text-secondary);margin:8px 0;cursor:pointer}
.hub-edit-check input{width:auto}
.hub-edit-codeRow{display:flex;gap:8px}
.hub-edit-codeRow input{flex:1}
.hub-edit-note{font-size:12px;color:#d97706;background:rgba(245,158,11,.1);padding:8px 12px;border-radius:8px;margin:0 0 10px}

/* Server Status */
.hub-srv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;margin-bottom:16px}
.hub-srv-card{padding:18px 20px;border-radius:14px}
.hub-srv-title{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-weight:700;margin-bottom:12px}
.hub-srv-id{display:flex;align-items:center;gap:14px}
.hub-srv-icon{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;background:var(--accent-bg);color:var(--accent);flex-shrink:0}
.hub-srv-name{font-size:18px;font-weight:700;color:var(--text-primary)}
.hub-srv-sub{font-size:12px;color:var(--text-muted);font-family:var(--font-mono)}
.hub-srv-facts{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}
.hub-srv-fact{padding:10px 12px;border-radius:10px;background:var(--bg-primary);border:1px solid var(--border-subtle,var(--border))}
.hub-srv-fact b{display:block;font-size:15px;color:var(--text-primary);font-variant-numeric:tabular-nums}
.hub-srv-fact span{font-size:11px;color:var(--text-muted)}
.hub-gauge{display:flex;align-items:center;gap:18px}
.hub-gauge svg{flex-shrink:0}
.hub-gauge-val{font-size:30px;font-weight:800;color:var(--text-primary);font-variant-numeric:tabular-nums;line-height:1}
.hub-gauge-cap{font-size:12px;color:var(--text-secondary);margin-top:6px;font-variant-numeric:tabular-nums}
.hub-gauge-ring{stroke:var(--accent)}.hub-gauge-ring.warn{stroke:#f59e0b}.hub-gauge-ring.hot{stroke:#ef4444}
.hub-spark{width:100%;height:90px;display:block}
.hub-spark-legend{display:flex;gap:16px;font-size:11px;color:var(--text-muted);margin-top:8px}
.hub-spark-legend i{display:inline-block;width:10px;height:3px;border-radius:2px;margin-right:6px;vertical-align:middle}
.hub-res{display:flex;flex-direction:column;gap:6px;min-width:150px;text-align:left}
.hub-res-row{display:grid;grid-template-columns:34px 1fr;align-items:center;gap:8px;font-size:11px;color:var(--text-secondary)}
.hub-res-row>span:first-child{color:var(--text-muted);font-weight:600}
.hub-res-val{font-variant-numeric:tabular-nums;font-size:11px;margin-top:2px}

/* Loading placeholders (cards appear immediately, data fills in) */
@keyframes hub-shimmer{0%{background-position:-300px 0}100%{background-position:300px 0}}
.hub-skel{display:block;border-radius:8px;background:linear-gradient(90deg,var(--border-subtle,rgba(148,163,184,.18)) 25%,var(--border,rgba(148,163,184,.32)) 37%,var(--border-subtle,rgba(148,163,184,.18)) 63%);background-size:600px 100%;animation:hub-shimmer 1.3s infinite linear}
.hub-skel-ring{width:96px;height:96px;border-radius:50%}

/* Participant detail drawer: CTF tabs */
.hub-det-tabs{display:flex;flex-wrap:wrap;gap:6px;padding:12px 16px 4px}
.hub-det-tab{display:inline-flex;align-items:center;gap:7px;font:inherit;font-size:12px;font-weight:600;padding:6px 12px;border-radius:999px;border:1px solid var(--border);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer}
.hub-det-tab i{width:8px;height:8px;border-radius:2px;display:inline-block}
.hub-det-tab small{font-size:11px;color:var(--text-muted);font-weight:600}
.hub-det-tab:hover{border-color:var(--accent);color:var(--accent)}
.hub-det-tab.is-on{background:var(--accent-bg);border-color:var(--accent);color:var(--accent)}
.hub-det-tab.is-dim{opacity:.55}
.hub-det-empty{font-size:12px;color:var(--text-muted);padding:14px 16px}

/* Danger zone: scope bar */
.danger-scope-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:4px 0 18px;padding:14px 16px;border:1px solid color-mix(in srgb,#ef4444 28%,var(--border));border-radius:12px;background:color-mix(in srgb,var(--bg-secondary) 80%,transparent)}
.danger-scope-row label{font-size:10px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}
.danger-scope-row .ctf-select-wrap{width:min(360px,100%)}
.danger-scope-hint{font-size:12px;color:var(--text-muted)}

/* Dashboard: readiness tiles (full width) with the leaderboard below */
#section-dashboard .dash-top-row { grid-template-columns: 1fr; }
.hub-tiles { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; padding: 16px; }
@media (max-width: 1150px) { .hub-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .hub-tiles { grid-template-columns: 1fr; } }
.hub-tile {
  --tile: #94a3b8;
  position: relative; display: flex; align-items: center; gap: 14px; overflow: hidden;
  padding: 18px 20px 18px 24px; min-height: 92px;
  border: 1px solid color-mix(in srgb, var(--tile) 32%, var(--border)); border-radius: 14px;
  background: linear-gradient(120deg, color-mix(in srgb, var(--tile) 16%, transparent), transparent 78%), var(--bg-secondary);
  transition: background .5s ease, border-color .5s ease;
}
.hub-tile::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 5px; background: var(--tile); transition: background .5s ease; }
.hub-tile.is-ready   { --tile: #008c95; }
.hub-tile.is-warn    { --tile: #f59e0b; }
.hub-tile.is-missing { --tile: #ef4444; }
.hub-tile-ic { flex-shrink: 0; display: grid; place-items: center; width: 40px; height: 40px; border-radius: 11px; color: var(--tile); background: color-mix(in srgb, var(--tile) 14%, transparent); transition: color .5s, background .5s; }
.hub-tile-body { display: flex; flex-direction: column; min-width: 0; gap: 2px; }
.hub-tile-name { font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--text-secondary); }
.hub-tile-val { font-size: 26px; line-height: 1.1; font-weight: 800; color: var(--tile); font-variant-numeric: tabular-nums; transition: color .5s; }

/* Global Settings: three cards in one row */
.settings-trio { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-bottom: 20px; align-items: stretch; }
@media (max-width: 1250px) { .settings-trio { grid-template-columns: 1fr; } }
.settings-trio .settings-card-body input[type="file"] { width: 100%; box-sizing: border-box; padding: 8px; border: 1px dashed var(--border); border-radius: 10px; background: var(--input-bg); color: var(--text-secondary); }
.settings-trio .settings-compact-actions { flex-wrap: wrap; }

.hub-type-chip { display:inline-block; margin-left:8px; padding:1px 7px; border-radius:999px; font-size:9px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:var(--accent); background:var(--accent-bg); border:1px solid color-mix(in srgb, var(--accent) 35%, transparent); vertical-align:1px; }

/* The Registration tile of the dashboard doubles as a switch: its semaphore is bigger than the ones in the table */
.hub-tile .hub-sema { zoom: 1.7; }
.hub-tile > div:last-child:not(.hub-tile-body) { margin-right: 6px; }

.hub-edit-warn { grid-column: 1 / -1; font-size: 13px; line-height: 1.45; color: #b91c1c; background: rgba(239,68,68,.09); border: 1px solid rgba(239,68,68,.35); padding: 10px 14px; border-radius: 10px; margin: 0 0 8px; }
