// ───────────────────────────────────────────────────────────────────────────── // Page: Agent Coordination Hub (.agents-* layout) // File: src/scss/pages/_agents.scss // // STRUCTURAL LAYOUT ONLY — zero colors, zero typography here. // Visual rules live in components/_agents.scss. // ───────────────────────────────────────────────────────────────────────────── .agents-wrap { max-width: 1000px; margin: 0 auto; padding: 0 var(--space-4); } // ── Page header ─────────────────────────────────────────────────────────────── .agents-hd { display: flex; align-items: baseline; gap: var(--space-3); padding: var(--space-5) 0 var(--space-4); margin-bottom: var(--space-5); } .agents-hd-title { display: flex; align-items: center; gap: var(--space-2); } .agents-hd-live { margin-left: auto; display: flex; align-items: center; gap: var(--space-2); } // ── Sub-navigation ──────────────────────────────────────────────────────────── .agents-subnav { display: flex; gap: var(--space-2); margin-bottom: var(--space-5); flex-wrap: wrap; } .agents-subnav-link { display: inline-flex; align-items: center; gap: var(--space-1); padding: var(--space-1) var(--space-3); } // ── Two-column grid ─────────────────────────────────────────────────────────── .agents-grid { display: grid; grid-template-columns: 240px 1fr; gap: var(--space-4); margin-bottom: var(--space-5); @media (max-width: 640px) { grid-template-columns: 1fr; } } // ── Cards / panels ──────────────────────────────────────────────────────────── .agents-card { padding: var(--space-4); } .agents-card-title { margin-bottom: var(--space-3); } // ── Active agent list ───────────────────────────────────────────────────────── .agents-active-count { margin-bottom: var(--space-3); } .agents-agent-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: var(--space-2); } // ── Task queue bar chart ────────────────────────────────────────────────────── .agents-queue { display: flex; flex-direction: column; gap: var(--space-2); } .agents-queue-row { display: grid; grid-template-columns: 68px 1fr 28px; align-items: center; gap: var(--space-2); } // ── Reservations table ──────────────────────────────────────────────────────── .agents-reservations { margin-bottom: var(--space-5); } .agents-reservations-hd { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: var(--space-3); } .agents-table { th { padding: var(--space-1) var(--space-2); } td { padding: var(--space-2); } } .agents-agent-chip { padding: 1px var(--space-2); } // ── Event stream ────────────────────────────────────────────────────────────── .agents-stream { margin-bottom: var(--space-5); } .agents-stream-hd { display: flex; align-items: center; justify-content: space-between; padding: var(--space-2) var(--space-3); } .agents-stream-body { padding: var(--space-2) 0; min-height: 120px; max-height: 320px; overflow-y: auto; } .agents-stream-row { display: grid; grid-template-columns: 10px 90px 1fr; align-items: center; gap: var(--space-2); padding: 3px var(--space-3); } // ── Shard map ───────────────────────────────────────────────────────────────── .agents-shard-meta { margin-bottom: var(--space-4); } .agents-shard-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: var(--space-3); margin-bottom: var(--space-5); } .agents-shard-card { padding: var(--space-3); } .agents-shard-num { margin-bottom: var(--space-2); } .agents-shard-symbols { margin-bottom: 2px; } .agents-shard-detail { margin-bottom: var(--space-3); } .agents-shard-assigned, .agents-shard-unassigned { margin-bottom: var(--space-2); } // ── Empty state ─────────────────────────────────────────────────────────────── .agents-empty { padding: var(--space-8) var(--space-4); text-align: center; } .agents-empty-icon { display: block; margin: 0 auto var(--space-3); } .agents-empty-hint { margin-top: var(--space-2); } // ── Forecast ────────────────────────────────────────────────────────────────── .agents-forecast-section { margin-bottom: var(--space-5); } .agents-forecast-title { margin-bottom: var(--space-3); padding-bottom: var(--space-2); } .agents-conflict-ok { display: flex; align-items: center; gap: var(--space-2); padding: var(--space-3) var(--space-4); } .agents-conflict-list { display: flex; flex-direction: column; gap: var(--space-3); } .agents-conflict-item { padding: var(--space-3) var(--space-4); } .agents-conflict-addr { margin-bottom: var(--space-2); } .agents-conflict-agents { display: flex; flex-wrap: wrap; gap: var(--space-2); } .agents-blast-list { display: flex; flex-direction: column; gap: var(--space-2); } .agents-blast-item { display: flex; align-items: center; gap: var(--space-2); font-size: 0.8rem; } .agents-blast-addr { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .agents-blast-reserved { padding: 1px 5px; } // ── Agent profile page ──────────────────────────────────────────────────────── .agents-profile-hd { margin-bottom: var(--space-5); } .agents-profile-name { margin-bottom: var(--space-2); } .agents-profile-meta { display: flex; flex-wrap: wrap; gap: var(--space-3); } .agents-profile-meta-item { display: flex; align-items: center; gap: var(--space-1); } .agents-profile-section { margin-bottom: var(--space-5); } .agents-profile-section-title { display: flex; align-items: center; gap: var(--space-2); margin-bottom: var(--space-3); padding-bottom: var(--space-2); } // ── Task rows ───────────────────────────────────────────────────────────────── .agents-task-row { display: flex; align-items: baseline; gap: var(--space-3); padding: var(--space-2) 0; } .agents-task-title { flex: 1; } .agents-task-status { padding: 1px 5px; } // ── Commit rows ─────────────────────────────────────────────────────────────── .agents-commit-row { display: flex; align-items: baseline; gap: var(--space-3); padding: var(--space-2) 0; } .agents-commit-msg { flex: 1; } // ── Misc ────────────────────────────────────────────────────────────────────── .agents-back { display: inline-flex; align-items: center; gap: var(--space-1); margin-bottom: var(--space-4); } .agents-hint { margin-top: var(--space-3); } .agents-section-empty { padding: var(--space-2) 0; }