diff --git a/frontend/console.html b/frontend/console.html index 548fb08..7c2ac82 100644 --- a/frontend/console.html +++ b/frontend/console.html @@ -350,6 +350,133 @@ gap: 18px; } + .focus-summary { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 12px; + margin-top: 14px; + } + + .focus-summary-card { + padding: 14px 16px; + border-radius: 16px; + background: rgba(255,255,255,0.03); + border: 1px solid rgba(255,255,255,0.06); + } + + .focus-summary-card .kicker { + color: var(--muted); + font-size: 11px; + margin-bottom: 8px; + text-transform: uppercase; + letter-spacing: 0.08em; + font-family: "IBM Plex Mono", monospace; + } + + .focus-summary-card .headline { + font-family: "IBM Plex Mono", monospace; + font-size: 18px; + color: var(--text); + margin-bottom: 6px; + } + + .focus-summary-card .headline.good { + color: var(--good); + } + + .focus-summary-card .headline.warn { + color: var(--warn); + } + + .focus-summary-card .headline.danger { + color: var(--danger); + } + + .focus-summary-card .detail { + color: var(--muted); + font-size: 12px; + line-height: 1.55; + } + + .alert-strip { + display: grid; + gap: 10px; + margin-top: 14px; + } + + .alert-strip:empty { + display: none; + } + + .alert-banner { + display: grid; + grid-template-columns: 140px 1fr auto; + gap: 12px; + align-items: center; + padding: 12px 14px; + border-radius: 16px; + border: 1px solid rgba(255,255,255,0.08); + background: rgba(255,255,255,0.03); + } + + .alert-banner.danger { + border-color: rgba(255, 111, 97, 0.26); + background: rgba(255, 111, 97, 0.10); + } + + .alert-banner.warn { + border-color: rgba(255, 184, 77, 0.24); + background: rgba(255, 184, 77, 0.10); + } + + .alert-banner.good { + border-color: rgba(48, 209, 88, 0.22); + background: rgba(48, 209, 88, 0.08); + } + + .alert-kicker { + color: var(--text); + font-size: 11px; + font-family: "IBM Plex Mono", monospace; + text-transform: uppercase; + letter-spacing: 0.08em; + } + + .alert-detail { + color: var(--muted); + font-size: 13px; + line-height: 1.55; + } + + .alert-count { + font-family: "IBM Plex Mono", monospace; + font-size: 18px; + color: var(--text); + } + + .focus-grid { + display: grid; + grid-template-columns: minmax(320px, 0.82fr) minmax(0, 1.18fr); + gap: 18px; + margin-top: 18px; + } + + .focus-panel { + min-height: 100%; + } + + .overview-grid { + display: grid; + grid-template-columns: minmax(0, 1.18fr) minmax(320px, 0.82fr); + gap: 14px; + } + + .overview-main, + .overview-side { + display: grid; + gap: 14px; + } + .ops-panel-body { min-height: 320px; } @@ -636,7 +763,7 @@ } .platform-grid { - grid-template-columns: repeat(3, minmax(0, 1fr)); + grid-template-columns: 1fr; } .platform-grid.compact { @@ -647,12 +774,22 @@ padding: 18px; } + .platform-card.danger { + border-color: rgba(255, 111, 97, 0.22); + background: rgba(255, 111, 97, 0.06); + } + + .platform-card.warn { + border-color: rgba(255, 184, 77, 0.18); + background: rgba(255, 184, 77, 0.05); + } + .platform-top { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start; - margin-bottom: 14px; + margin-bottom: 10px; } .platform-title { @@ -667,8 +804,38 @@ color: var(--muted); } + .platform-overview { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 10px; + margin-bottom: 12px; + } + + .platform-pill-stat { + padding: 10px 12px; + border-radius: 12px; + background: rgba(255,255,255,0.035); + border: 1px solid rgba(255,255,255,0.05); + } + + .platform-pill-stat .label { + display: block; + color: var(--muted); + font-size: 10px; + margin-bottom: 4px; + text-transform: uppercase; + letter-spacing: 0.05em; + font-family: "IBM Plex Mono", monospace; + } + + .platform-pill-stat .value { + font-family: "IBM Plex Mono", monospace; + font-size: 14px; + color: var(--text); + } + .risk-band { - margin: 12px 0 14px; + margin: 8px 0 12px; height: 8px; border-radius: 999px; background: rgba(255,255,255,0.06); @@ -683,7 +850,7 @@ .platform-stats { display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; } @@ -705,6 +872,29 @@ font-size: 14px; } + .platform-detail-toggle { + margin-top: 12px; + display: flex; + justify-content: space-between; + align-items: center; + gap: 10px; + color: var(--muted); + font-size: 12px; + } + + .platform-detail-toggle summary { + cursor: pointer; + list-style: none; + font-family: "IBM Plex Mono", monospace; + text-transform: uppercase; + letter-spacing: 0.05em; + color: var(--cold); + } + + .platform-detail-toggle summary::-webkit-details-marker { + display: none; + } + .stream-card { padding: 18px; } @@ -789,6 +979,21 @@ min-height: 0; } + .scroll-panel { + max-height: 560px; + overflow: auto; + padding-right: 4px; + } + + .log-shell { + display: grid; + gap: 12px; + } + + .log-head { + margin-bottom: 0; + } + .event-list { display: grid; gap: 10px; @@ -1557,7 +1762,9 @@ @media (max-width: 1240px) { .hero, .layout, - .priority-layout { + .priority-layout, + .focus-grid, + .overview-grid { grid-template-columns: 1fr; } @@ -1568,9 +1775,18 @@ grid-template-columns: 1fr; } + .platform-overview, + .platform-stats { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .hero-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); } + + .focus-summary { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } } @media (max-width: 720px) { @@ -1590,10 +1806,16 @@ .hero-metrics, .platform-stats, + .platform-overview, .signal-stats, .heartbeat-grid, .health-ribbon, - .ops-summary { + .ops-summary, + .focus-summary { + grid-template-columns: 1fr; + } + + .alert-banner { grid-template-columns: 1fr; } @@ -1659,62 +1881,47 @@