/* ===================================================== Monitoring Dashboard — mobile-first dark theme ===================================================== */ :root { --bg: #0d1117; --bg-elev: #151b23; --bg-elev-2: #1c242e; --border: #2a323d; --text: #e6edf3; --text-dim: #9da7b3; --green: #3fb950; --yellow: #d29922; --red: #f85149; --blue: #58a6ff; --purple: #bc8cff; --mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; background: var(--bg); color: var(--text); font: 14px/1.45 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; min-height: 100vh; } .topbar { position: sticky; top: 0; z-index: 10; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 14px; background: var(--bg-elev); border-bottom: 1px solid var(--border); } .brand { display: flex; align-items: center; gap: 8px; } .brand strong { letter-spacing: .3px; } .dot { width: 10px; height: 10px; border-radius: 50%; background: var(--red); transition: background .2s; } .dot.ok { background: var(--green); animation: pulse 2s infinite; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(63,185,80,.55); } 70% { box-shadow: 0 0 0 8px rgba(63,185,80,0); } 100% { box-shadow: 0 0 0 0 rgba(63,185,80,0); } } .controls { display: flex; gap: 8px; flex-wrap: wrap; } .controls select { background: var(--bg-elev-2); color: var(--text); border: 1px solid var(--border); border-radius: 6px; padding: 6px 10px; font: inherit; } .grid { display: grid; gap: 12px; padding: 12px; grid-template-columns: 1fr; } @media (min-width: 700px) { .grid { grid-template-columns: repeat(2, 1fr); } .cards { grid-column: 1 / -1; } } @media (min-width: 1200px) { .grid { grid-template-columns: repeat(3, 1fr); } .cards { grid-column: 1 / -1; } } .card { background: var(--bg-elev); border: 1px solid var(--border); border-radius: 10px; padding: 14px; min-width: 0; } .card h2 { margin: 0 0 10px; font-size: 13px; text-transform: uppercase; letter-spacing: .6px; color: var(--text-dim); font-weight: 600; } .card h2 small { color: var(--text-dim); font-weight: 400; margin-left: 6px; } .system-cards { display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); } .sys { background: var(--bg-elev-2); border: 1px solid var(--border); border-radius: 8px; padding: 12px; display: flex; flex-direction: column; gap: 4px; } .sys .name { font-weight: 600; font-size: 14px; display: flex; align-items: center; gap: 8px; } .sys .badge { width: 8px; height: 8px; border-radius: 50%; background: var(--red); } .sys.online .badge { background: var(--green); } .sys.degraded .badge { background: var(--yellow); } .sys.offline .badge { background: var(--red); } .sys .meta { color: var(--text-dim); font-size: 12px; } .sys .big { font: 600 20px/1 var(--mono); margin-top: 4px; } .chart-wrap { position: relative; height: 240px; } .stream { max-height: 320px; overflow-y: auto; font-family: var(--mono); font-size: 12px; } .stream .row { padding: 6px 8px; border-bottom: 1px solid var(--border); display: flex; gap: 8px; align-items: baseline; animation: fadeIn .25s; } .stream .row:last-child { border-bottom: 0; } @keyframes fadeIn { from { opacity: 0; transform: translateY(-2px); } to { opacity: 1; } } .stream .t { color: var(--text-dim); white-space: nowrap; } .stream .sys { color: var(--purple); white-space: nowrap; } .stream .ep { color: var(--text); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .stream .ms { color: var(--blue); } .stream .st { font-weight: 600; } .stream .st.ok { color: var(--green); } .stream .st.wrn { color: var(--yellow); } .stream .st.err { color: var(--red); } .stream.errors .row .msg { color: var(--red); flex: 1; white-space: normal; } .stream.alerts .row { padding: 10px 8px; } .stream.alerts .row.critical { background: rgba(248,81,73,.08); } .stream.alerts .row.warning { background: rgba(210,153,34,.08); } .stream.alerts .row .msg { flex: 1; } .stream::-webkit-scrollbar { width: 8px; } .stream::-webkit-scrollbar-track { background: transparent; } .stream::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }