diff --git a/internal/gateway/ui/index.html b/internal/gateway/ui/index.html index 5a62bdc..66a0021 100644 --- a/internal/gateway/ui/index.html +++ b/internal/gateway/ui/index.html @@ -110,6 +110,8 @@ pre.configbox { background:var(--card2); border:1px solid var(--line); border-ra .kpi.kpi-exit { cursor:pointer; border-color:var(--err); } .kpi.kpi-exit:hover { border-color:var(--err); box-shadow:0 0 0 3px rgba(244,67,54,.15); } .kpi.kpi-exit .k-lab::after { content:'×'; color:var(--err); font-weight:800; font-size:15px; margin-left:auto; } +.kpi.kpi-status { display:flex; flex-direction:column; padding:12px; } +.kpi.kpi-status > div { flex:1; display:flex; align-items:center; justify-content:center; } .dot { width:7px; height:7px; border-radius:50%; background:var(--ok); display:inline-block; animation:blink 1.6s infinite; } .dot.err { background:var(--err); } @keyframes blink { 50% { opacity:.25; } } @@ -126,16 +128,17 @@ td .errc { color:var(--err); font-weight:600; } .bar i { display:block; height:100%; background:var(--accent); border-radius:3px; } .bar.ok i { background:var(--ok); } .bar.err i { background:var(--err); } -.donut-wrap { display:flex; align-items:center; gap:22px; padding:6px 2px; flex-wrap:wrap; } -.donut { position:relative; width:150px; height:150px; flex:0 0 auto; } -.donut svg { transform:rotate(-90deg); } -.donut .center { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; } -.donut .center b { font-size:24px; font-weight:800; } -.donut .center span { font-size:11px; color:var(--muted); } -.donut-legend { display:flex; flex-direction:column; gap:7px; min-width:130px; } -.donut-legend .dl { display:flex; align-items:center; gap:8px; font-size:12.5px; cursor:help; } -.donut-legend .dl i { width:11px; height:11px; border-radius:3px; flex:0 0 auto; } -.donut-legend .dl b { margin-left:auto; font-variant-numeric:tabular-nums; } +.donut-wrap { display:flex; flex-direction:column; align-items:center; gap:10px; padding:4px 0; } +.donut { position:relative; width:108px; height:108px; flex:0 0 auto; } +.donut svg { display:block; } +.donut .center { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; pointer-events:none; } +.donut .center b { font-size:20px; font-weight:800; } +.donut .center span { font-size:10px; color:var(--muted); } +.status-chips { display:flex; flex-wrap:wrap; gap:5px; justify-content:center; } +.status-chips .sc { display:inline-flex; align-items:center; gap:4px; font-size:11px; padding:2px 7px; border-radius:99px; + background:var(--card2); border:1px solid var(--line); cursor:help; white-space:nowrap; } +.status-chips .sc i { width:8px; height:8px; border-radius:50%; flex:0 0 auto; } +.status-chips .sc b { font-variant-numeric:tabular-nums; } table th { white-space:nowrap; } .recs-scroll { max-height:420px; overflow:auto; } .recs-scroll table th { position:sticky; top:0; background:var(--card); z-index:1; } @@ -686,7 +689,6 @@ async function renderStatus() {