diff --git a/src/pages/AdminRemnawave.tsx b/src/pages/AdminRemnawave.tsx
index dcd7eb4..3c7c592 100644
--- a/src/pages/AdminRemnawave.tsx
+++ b/src/pages/AdminRemnawave.tsx
@@ -215,6 +215,15 @@ function NodeCard({ node, providerName, realtime, onAction, isLoading }: NodeCar
const outbounds = realtime?.outbounds ?? [];
const hasBreakdown = inbounds.length + outbounds.length > 0;
+ const ramColorClass =
+ ramPct === null
+ ? ''
+ : ramPct > 85
+ ? 'text-error-400'
+ : ramPct > 65
+ ? 'text-warning-400'
+ : 'text-dark-400';
+
return (
- {/* Live metrics in 3 fixed rows (processor · traffic · versions) so the
- changing speed/value widths never reflow or jump between lines. */}
+ {/* Live metrics — mobile: 3 fixed rows so wrapping speeds don't reflow;
+ desktop (sm+): the original single wrap row, wide enough not to jump. */}
{(ramPct !== null || loadAvg || rx > 0 || tx > 0 || node.versions) && (
-
- {/* Row 1 — Processor: CPU load + RAM */}
- {(loadAvg || ramPct !== null) && (
-
- {loadAvg && (
-
-
- {loadAvg}
-
- )}
- {ramPct !== null && (
-
-
- 85
- ? 'text-error-400'
- : ramPct > 65
- ? 'text-warning-400'
- : 'text-dark-400'
- }
- >
- {ramPct}%
+ <>
+ {/* Mobile: processor · traffic · versions */}
+
+ {(loadAvg || ramPct !== null) && (
+
+ {loadAvg && (
+
+
+ {loadAvg}
-
-
+ )}
+ {ramPct !== null && (
+
+
+ {ramPct}%
+
+
+
+ )}
+
+ )}
+ {(rx > 0 || tx > 0) && (
+
+
+
+ {formatSpeed(rx)}
- )}
-
- )}
+
+
+ {formatSpeed(tx)}
+
+
+ )}
+ {(node.versions?.node || node.versions?.xray) && (
+
+ {node.versions?.node && (
+
+
+ {node.versions.node}
+
+ )}
+ {node.versions?.xray && (
+
+
+ {node.versions.xray}
+
+ )}
+
+ )}
+
- {/* Row 2 — Traffic: down / up speeds (2 fixed columns so a wide value
- never pushes the other) */}
- {(rx > 0 || tx > 0) && (
-
-
-
+ {/* Desktop: single wrap row (original) */}
+
+ {ramPct !== null && (
+
+
+ {ramPct}%
+
+
+
+
+ )}
+ {loadAvg && (
+
+
+ {loadAvg}
+
+ )}
+
+
+
{formatSpeed(rx)}
-
-
+
+
{formatSpeed(tx)}
-
- )}
-
- {/* Row 3 — Versions: remnanode + xray core */}
- {(node.versions?.node || node.versions?.xray) && (
-
- {node.versions?.node && (
-
-
- {node.versions.node}
-
- )}
- {node.versions?.xray && (
-
-
- {node.versions.xray}
-
- )}
-
- )}
-
+
+ {(node.versions?.node || node.versions?.xray) && (
+
+ {node.versions?.node && (
+
+
+ {node.versions.node}
+
+ )}
+ {node.versions?.xray && (
+
+
+ {node.versions.xray}
+
+ )}
+
+ )}
+
+ >
)}
{/* Per-node traffic accordion (merged from the former Traffic tab) */}