Connecting to status stream...
diff --git a/statuspage/internal/statuspage/templates/index.html b/statuspage/internal/statuspage/templates/index.html index 6e383b6..1185f2c 100644 --- a/statuspage/internal/statuspage/templates/index.html +++ b/statuspage/internal/statuspage/templates/index.html @@ -30,8 +30,39 @@ margin-bottom: 2rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border); + flex-wrap: wrap; + gap: 0.75rem; } header h1 { font-size: 1.5rem; font-weight: 600; } + .header-left { + display: flex; + align-items: center; + gap: 1rem; + } + .header-right { + display: flex; + align-items: center; + gap: 1rem; + } + .header-stats { + display: flex; + align-items: center; + gap: 0.5rem; + } + .header-stat { + display: flex; + align-items: center; + gap: 0.35rem; + font-size: 0.85rem; + font-weight: 600; + padding: 0.25rem 0.6rem; + border-radius: 6px; + } + .header-stat .stat-count { font-weight: 700; } + .header-stat.healthy { background: rgba(34,197,94,0.12); color: var(--green); } + .header-stat.degraded { background: rgba(234,179,8,0.12); color: var(--yellow); } + .header-stat.unhealthy { background: rgba(239,68,68,0.12); color: var(--red); } + .header-stat.total { background: var(--card); border: 1px solid var(--border); color: var(--muted); } .conn-status { display: flex; align-items: center; @@ -53,25 +84,8 @@ font-size: 0.85rem; color: var(--blue); } - .summary { - display: flex; - gap: 1rem; - margin-bottom: 2rem; - flex-wrap: wrap; - } - .summary-card { - background: var(--card); - border: 1px solid var(--border); - border-radius: 8px; - padding: 1rem 1.5rem; - min-width: 140px; - text-align: center; - } - .summary-card .count { font-size: 2rem; font-weight: 700; } - .summary-card .label { font-size: 0.8rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.05em; } - .summary-card.healthy .count { color: var(--green); } - .summary-card.degraded .count { color: var(--yellow); } - .summary-card.unhealthy .count { color: var(--red); } + .summary { display: none; } + .summary-card { display: none; } section { margin-bottom: 2rem; } section h2 { font-size: 1.1rem; @@ -311,32 +325,133 @@ } .section-body.open { display: block; } .section-body table { border: none; border-radius: 0; } + + /* Layer grouping */ + .layer-group { + background: var(--card); + border: 1px solid var(--border); + border-left: 4px solid var(--border); + border-radius: 12px; + padding: 1.5rem; + margin-bottom: 1.5rem; + position: relative; + } + .layer-group.layer-Healthy { border-left-color: var(--green); } + .layer-group.layer-Degraded { border-left-color: var(--yellow); } + .layer-group.layer-Unhealthy { border-left-color: var(--red); } + .layer-header { + display: flex; + align-items: center; + gap: 0.75rem; + margin-bottom: 1.25rem; + padding-bottom: 0.75rem; + border-bottom: 1px solid var(--border); + } + .layer-icon { + flex-shrink: 0; + width: 40px; height: 40px; + border-radius: 10px; + display: flex; + align-items: center; + justify-content: center; + } + .layer-icon svg { width: 22px; height: 22px; } + .layer-title { + font-size: 1.15rem; + font-weight: 700; + flex: 1; + margin: 0; + } + .layer-status-badge { + font-size: 0.75rem; + font-weight: 700; + padding: 0.2rem 0.65rem; + border-radius: 6px; + text-transform: uppercase; + letter-spacing: 0.04em; + flex-shrink: 0; + } + .layer-status-badge.Healthy { background: rgba(34,197,94,0.15); color: var(--green); } + .layer-status-badge.Degraded { background: rgba(234,179,8,0.15); color: var(--yellow); } + .layer-status-badge.Unhealthy { background: rgba(239,68,68,0.15); color: var(--red); } + .layer-group .deploy-grid { margin-bottom: 0; } + .layer-section { margin-bottom: 0.75rem; } + .layer-section:last-child { margin-bottom: 0; } + .layer-group .deploy-card { background: var(--bg); } + .layer-row { + display: flex; + gap: 1.5rem; + margin-bottom: 1.5rem; + } + .layer-row > .layer-group { + flex: 1; + min-width: 0; + margin-bottom: 0; + } + @media (max-width: 768px) { + .layer-row { flex-direction: column; gap: 0; } + .layer-row > .layer-group { margin-bottom: 1.5rem; } + } + .layer-resources-toggle { + display: inline-flex; + align-items: center; + gap: 0.4rem; + margin-top: 1rem; + padding: 0.4rem 0; + font-size: 0.85rem; + color: var(--blue); + cursor: pointer; + user-select: none; + border: none; + background: none; + font-family: inherit; + } + .layer-resources-toggle:hover { text-decoration: underline; } + .layer-resources-toggle svg { width: 16px; height: 16px; transition: transform 0.2s; } + .layer-resources-toggle.open svg { transform: rotate(180deg); } + .layer-resources-body { + display: none; + margin-top: 0.75rem; + } + .layer-resources-body.open { display: block; } + .deploy-kind-label { + font-size: 0.7rem; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 0.1rem 0.4rem; + border-radius: 4px; + background: var(--border); + color: var(--muted); + font-weight: 600; + }
Connecting to status stream...