@@ -89,7 +106,10 @@ export function Controls({ stats, config }: Props): JSX.Element {
Taker fees
- K {pct(config.takerFees.kraken, 2)} · By {pct(config.takerFees.bybit, 2)} · O {pct(config.takerFees.okx, 2)} · Bn {pct(config.takerFees.binance, 2)}
+ K {pct(config.takerFees.kraken, 2)} · By{" "}
+ {pct(config.takerFees.bybit, 2)} · O{" "}
+ {pct(config.takerFees.okx, 2)} · Bn{" "}
+ {pct(config.takerFees.binance, 2)}
diff --git a/web/src/components/PriceMatrix.tsx b/web/src/components/PriceMatrix.tsx
index 664fa1a..0678bc2 100644
--- a/web/src/components/PriceMatrix.tsx
+++ b/web/src/components/PriceMatrix.tsx
@@ -50,7 +50,83 @@ export function PriceMatrix({ quotes }: Props): JSX.Element {
) : undefined
}
>
-
+ {/* Mobile: per-venue stacked cards (no horizontal overflow). */}
+
+ {quotes.map((q) => {
+ const spread =
+ q.ask !== null && q.bid !== null ? q.ask - q.bid : null;
+ return (
+
+
+
+ {LABELS[q.exchange]}
+
+
+
+
-
+ Bid
+
+ -
+ {q.bid !== null ? usd(q.bid) : "—"}
+
+
+
+
-
+ Bid Qty
+
+ -
+ {q.bidQty?.toFixed(3) ?? "—"}
+
+
+
+
-
+ Ask
+
+ -
+ {q.ask !== null ? usd(q.ask) : "—"}
+
+
+
+
-
+ Ask Qty
+
+ -
+ {q.askQty?.toFixed(3) ?? "—"}
+
+
+
+
-
+ Spread
+
+ -
+ {spread !== null ? usd(spread) : "—"}
+
+
+
+
+ );
+ })}
+
+
+ {/* Desktop / tablet: full table from the sm breakpoint up. */}
+
@@ -64,34 +140,50 @@ export function PriceMatrix({ quotes }: Props): JSX.Element {
{quotes.map((q) => {
- const spread = q.ask !== null && q.bid !== null ? q.ask - q.bid : null;
+ const spread =
+ q.ask !== null && q.bid !== null ? q.ask - q.bid : null;
return (
|
-
+
{LABELS[q.exchange]}
|
{q.bid !== null ? usd(q.bid) : "—"}
|
- {q.bidQty?.toFixed(3) ?? "—"} |
+
+ {q.bidQty?.toFixed(3) ?? "—"}
+ |
{q.ask !== null ? usd(q.ask) : "—"}
|
- {q.askQty?.toFixed(3) ?? "—"} |
- {spread !== null ? usd(spread) : "—"} |
+
+ {q.askQty?.toFixed(3) ?? "—"}
+ |
+
+ {spread !== null ? usd(spread) : "—"}
+ |
);
})}
diff --git a/web/src/components/StatsBar.tsx b/web/src/components/StatsBar.tsx
index 546fe7b..d217073 100644
--- a/web/src/components/StatsBar.tsx
+++ b/web/src/components/StatsBar.tsx
@@ -6,10 +6,20 @@ interface Props {
connected: boolean;
}
-function Stat({ label, value, tone }: { label: string; value: string; tone?: "profit" | "loss" | "warn" }): JSX.Element {
+function Stat({
+ label,
+ value,
+ tone,
+}: {
+ label: string;
+ value: string;
+ tone?: "profit" | "loss" | "warn";
+}): JSX.Element {
return (
-
{label}
+
+ {label}
+
= 0 ? "profit" : "loss";
return (
-
-
+
+
-
+
{stats.demoMode && (
Demo / Simulated Feed
)}
-
+
{circuit.label}
-
+
{connected ? "LIVE" : "OFFLINE"}