<?php if (!defined('DASHBOARD_ROOT')) { http_response_code(403); exit; } ?> <div class="ov-panel"> <div class="ov-panel-hdr"> <span class="ov-panel-title"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8"><circle cx="12" cy="12" r="10"/><line x1="2" y1="12" x2="22" y2="12"/><path d="M12 2a15.3 15.3 0 014 10 15.3 15.3 0 01-4 10 15.3 15.3 0 01-4-10 15.3 15.3 0 014-10z"/></svg> Fleet Pulse</span> <span class="ov-badge<?= $fleetOnline === $fleetTotal && $fleetTotal > 0 ? 'ok' : 'warn' ?>"><?= $fleetOnline ?>/<?= $fleetTotal ?> Online</span> </div> <div class="ov-fleet-list"><?php foreach ($fleetNodes as $node): $online = $node['status'] === 'online'; $hb = $node['last_heartbeat'] ? date('H:i', strtotime($node['last_heartbeat'])) : '&#x2014;'; ?> <div class="ov-fleet-row"> <div class="ov-fleet-dot <?= $online ? 'on' : 'off' ?>"></div> <div class="ov-fleet-info"> <span class="ov-fleet-name"><?= htmlspecialchars($node['hostname'] ?: $node['node_id']) ?></span> <span class="ov-fleet-role"><?= htmlspecialchars($node['node_role'] ?: 'node') ?></span> </div> <span class="ov-fleet-hb"><?= $hb ?></span> </div><?php endforeach; ?> <?php if (empty($fleetNodes)): ?> <div class="ov-panel-empty">No fleet nodes registered yet</div><?php endif; ?> </div> <div class="ov-flow-strip"> <span style="color:rgba(200,204,212,.4)">User</span> <span class="ov-flow-arrow">&rarr;</span> <span style="color:#3498db">Shield</span> <span class="ov-flow-arrow">&rarr;</span> <span style="color:#e6a817">Filter</span> <span class="ov-flow-arrow">&rarr;</span> <span style="color:#2ecc71">Proxy</span> <span class="ov-flow-arrow">&rarr;</span> <span style="color:#9b59b6">Origin</span> </div> </div>