diff --git a/dashboard/static/index.html b/dashboard/static/index.html
index 61cda17..ea953ea 100644
--- a/dashboard/static/index.html
+++ b/dashboard/static/index.html
@@ -2,7 +2,7 @@
-
+
FTDT Quant Lab
@@ -32,12 +32,13 @@
font-family: var(--font);
min-height: 100vh;
line-height: 1.5;
+ -webkit-font-smoothing: antialiased;
}
.container {
max-width: 1200px;
margin: 0 auto;
- padding: 24px 20px;
+ padding: 16px 12px;
}
/* ── Header ─────────────────────── */
@@ -45,41 +46,47 @@
display: flex;
justify-content: space-between;
align-items: flex-start;
- margin-bottom: 28px;
- padding-bottom: 20px;
+ margin-bottom: 20px;
+ padding-bottom: 14px;
border-bottom: 1px solid var(--border);
+ gap: 12px;
}
.brand h1 {
- font-size: 20px;
+ font-size: 18px;
font-weight: 600;
color: var(--text-bright);
letter-spacing: -0.3px;
}
- .brand span {
- font-size: 12px;
+ .brand .sub {
+ font-size: 11px;
color: var(--text);
- display: block;
- margin-top: 2px;
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ margin-top: 3px;
+ flex-wrap: wrap;
}
.summary {
text-align: right;
+ flex-shrink: 0;
}
.summary .pnl {
font-family: var(--mono);
- font-size: 28px;
+ font-size: 26px;
font-weight: 600;
letter-spacing: -0.5px;
+ line-height: 1.1;
}
.summary .pnl.positive { color: var(--green); }
.summary .pnl.negative { color: var(--red); }
.summary .label {
- font-size: 11px;
+ font-size: 10px;
color: var(--text);
text-transform: uppercase;
letter-spacing: 0.5px;
@@ -87,14 +94,13 @@
.status-dot {
display: inline-block;
- width: 6px;
- height: 6px;
+ width: 6px; height: 6px;
border-radius: 50%;
- margin-right: 6px;
+ margin-right: 4px;
+ flex-shrink: 0;
}
.status-dot.live { background: var(--green); animation: pulse 2s infinite; }
.status-dot.idle { background: var(--amber); }
- .status-dot.error { background: var(--red); }
@keyframes pulse {
0%, 100% { opacity: 1; }
@@ -106,78 +112,77 @@
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
- padding: 16px;
- margin-bottom: 20px;
+ padding: 12px;
+ margin-bottom: 14px;
}
.chart-card h2 {
- font-size: 14px;
+ font-size: 12px;
font-weight: 500;
color: var(--text-bright);
- margin-bottom: 12px;
+ margin-bottom: 8px;
}
- #equity-chart {
+ .chart-wrap {
+ position: relative;
width: 100%;
- height: 200px;
+ height: 180px;
}
/* ── Strategy Grid ──────────────── */
.strategy-grid {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
- gap: 12px;
- margin-bottom: 20px;
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
+ gap: 10px;
+ margin-bottom: 14px;
}
.strategy-card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
- padding: 14px 16px;
+ padding: 12px 14px;
transition: border-color 0.2s;
+ min-width: 0;
}
- .strategy-card:hover {
- border-color: #2a2a32;
- }
+ .strategy-card:hover { border-color: #2a2a32; }
.strategy-card .name {
- font-size: 12px;
+ font-size: 11px;
font-weight: 500;
color: var(--text-bright);
- margin-bottom: 8px;
+ margin-bottom: 6px;
display: flex;
align-items: center;
- gap: 6px;
+ gap: 5px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
}
.strategy-card .pnl {
font-family: var(--mono);
- font-size: 18px;
+ font-size: 16px;
font-weight: 600;
- margin-bottom: 4px;
+ margin-bottom: 3px;
}
.strategy-card .pnl.pos { color: var(--green); }
.strategy-card .pnl.neg { color: var(--red); }
.strategy-card .meta {
- font-size: 11px;
+ font-size: 10px;
color: var(--text);
display: flex;
flex-wrap: wrap;
- gap: 10px;
- }
-
- .strategy-card .meta span {
- white-space: nowrap;
+ gap: 8px;
}
.strategy-card .meta .val {
color: var(--text-bright);
font-family: var(--mono);
- font-size: 11px;
+ font-size: 10px;
}
/* ── Trade Log ──────────────────── */
@@ -189,34 +194,42 @@
}
.trade-log h2 {
- font-size: 14px;
+ font-size: 12px;
font-weight: 500;
color: var(--text-bright);
- padding: 14px 16px;
+ padding: 12px 14px;
border-bottom: 1px solid var(--border);
}
+ .trade-scroll {
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+ }
+
.trade-table {
width: 100%;
border-collapse: collapse;
+ min-width: 400px;
}
.trade-table th {
- font-size: 10px;
+ font-size: 9px;
font-weight: 500;
color: var(--text);
text-transform: uppercase;
- letter-spacing: 0.5px;
+ letter-spacing: 0.4px;
text-align: left;
- padding: 8px 16px;
+ padding: 7px 12px;
border-bottom: 1px solid var(--border);
+ white-space: nowrap;
}
.trade-table td {
font-family: var(--mono);
- font-size: 12px;
- padding: 6px 16px;
- border-bottom: 1px solid rgba(255,255,255,0.03);
+ font-size: 11px;
+ padding: 5px 12px;
+ border-bottom: 1px solid rgba(255,255,255,0.02);
+ white-space: nowrap;
}
.trade-table td.pos { color: var(--green); }
@@ -227,25 +240,84 @@
/* ── Footer ─────────────────────── */
footer {
text-align: center;
- padding: 20px;
- font-size: 11px;
+ padding: 16px;
+ font-size: 10px;
color: #3f3f46;
}
- footer a {
- color: #52525b;
- text-decoration: none;
+ footer a { color: #52525b; text-decoration: none; }
+ footer a:hover { color: var(--text); }
+
+ /* ── Mobile: < 480px ────────────── */
+ @media (max-width: 480px) {
+ .container { padding: 10px 8px; }
+
+ header {
+ flex-direction: column;
+ gap: 8px;
+ }
+
+ .summary {
+ text-align: left;
+ width: 100%;
+ }
+
+ .summary .pnl { font-size: 22px; }
+
+ .brand h1 { font-size: 16px; }
+
+ .strategy-grid {
+ grid-template-columns: 1fr 1fr;
+ gap: 6px;
+ }
+
+ .strategy-card {
+ padding: 10px;
+ }
+
+ .strategy-card .pnl { font-size: 14px; }
+ .strategy-card .meta { gap: 4px; }
+ .strategy-card .meta .val { font-size: 9px; }
+
+ .chart-wrap { height: 140px; }
+
+ .trade-table th,
+ .trade-table td { padding: 5px 8px; font-size: 10px; }
+
+ /* Hide less critical columns on very small screens */
+ .trade-table th:nth-child(3),
+ .trade-table td:nth-child(3) { display: none; }
+
+ footer { font-size: 9px; padding: 10px; }
}
- footer a:hover {
- color: var(--text);
+ /* ── Small phone: < 360px ───────── */
+ @media (max-width: 360px) {
+ .strategy-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .chart-wrap { height: 120px; }
+
+ .trade-table th:nth-child(4),
+ .trade-table td:nth-child(4) { display: none; }
}
- /* ── Responsive ─────────────────── */
- @media (max-width: 640px) {
- .container { padding: 16px 12px; }
- header { flex-direction: column; gap: 12px; }
- .summary { text-align: left; }
+ /* ── Tablet: 481-768px ──────────── */
+ @media (min-width: 481px) and (max-width: 768px) {
+ .container { padding: 18px 14px; }
+ .strategy-grid {
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
+ }
+ }
+
+ /* ── Desktop: 769px+ ────────────── */
+ @media (min-width: 769px) {
+ .container { padding: 24px 20px; }
+ .strategy-grid {
+ grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
+ }
+ .chart-wrap { height: 200px; }
}
@@ -256,23 +328,25 @@
FTDT Quant Lab
-
+
Hyperliquid Testnet ·
connecting...
-
+
Total PnL
$0.00
-
0.00%
+
0.00%
@@ -281,18 +355,20 @@
Recent Trades
-
-
-
- | Time |
- Strategy |
- Side |
- Size |
- PnL |
-
-
-
-
+