diff --git a/src/__pycache__/web_dashboard.cpython-310.pyc b/src/__pycache__/web_dashboard.cpython-310.pyc index 80abfe1..2a3021e 100644 Binary files a/src/__pycache__/web_dashboard.cpython-310.pyc and b/src/__pycache__/web_dashboard.cpython-310.pyc differ diff --git a/src/web_dashboard.py b/src/web_dashboard.py index 2984ff9..7ec4782 100644 --- a/src/web_dashboard.py +++ b/src/web_dashboard.py @@ -210,207 +210,184 @@ html_content = """ Trading Bot Dashboard + * { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + body { + background-color: #0a0a0a; + color: #d0d0d0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + line-height: 1.6; + } + + h1, h2, h3, h4 { + color: #ffffff; + } + + .container { + max-width: 1400px; + margin: 0 auto; + padding: 40px; + } + + .header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 40px; + padding-bottom: 20px; + border-bottom: 1px solid #2a2a2a; + } + + .header h1 { + color: #ffffff; + font-size: 28px; + } + + .status-badge { + background-color: #2ecc71; + color: #000; + padding: 6px 14px; + border-radius: 20px; + font-size: 12px; + font-weight: 600; + } + + .metrics-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 20px; + margin-bottom: 40px; + } + + .card { + background-color: #1a1a1a; + border: 1px solid #2a2a2a; + border-radius: 8px; + padding: 24px; + } + + .card:hover { + border-color: #3a3a3a; + } + + .card-label { + color: #888888; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 1px; + margin-bottom: 12px; + font-weight: 600; + } + + .card-value { + color: #ffffff; + font-size: 32px; + font-weight: 700; + margin-bottom: 4px; + } + + .card-subtext { + color: #666666; + font-size: 12px; + } + + .positive { + color: #2ecc71; + } + + .negative { + color: #ff5555; + } + + .section-title { + color: #ffffff; + font-size: 18px; + font-weight: 700; + margin: 40px 0 20px 0; + padding-bottom: 10px; + border-bottom: 1px solid #2a2a2a; + } + + .performance-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); + gap: 16px; + margin-bottom: 40px; + } + + .performance-card { + background-color: #1a1a1a; + border: 1px solid #2a2a2a; + border-radius: 8px; + padding: 20px; + text-align: center; + } + + .performance-label { + color: #888888; + font-size: 11px; + text-transform: uppercase; + letter-spacing: 1px; + margin-bottom: 10px; + font-weight: 600; + } + + .performance-value { + color: #2ecc71; + font-size: 28px; + font-weight: 700; + } + + table { + width: 100%; + border-collapse: collapse; + margin-bottom: 40px; + } + + th { + background-color: #151515; + color: #888888; + padding: 14px; + text-align: left; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid #2a2a2a; + } + + td { + padding: 14px; + border-bottom: 1px solid #1f1f1f; + color: #d0d0d0; + font-size: 13px; + } + + tr:hover { + background-color: #141414; + } + + .empty-state { + text-align: center; + color: #666666; + padding: 40px; + font-style: italic; + font-size: 13px; + } + + .last-update { + text-align: right; + color: #666666; + font-size: 11px; + margin-top: 20px; + padding-top: 20px; + border-top: 1px solid #2a2a2a; + } +
@@ -518,26 +495,26 @@ html_content = """ } function updateDashboard(data) { - // Update key metrics - CHF PRIMARY, USD secondary + // Update key metrics - PRIMARY, USD secondary const usdt = data.balance.USDT || 0; const usdt_chf = usdt * 0.84; - document.getElementById('usdt').textContent = `$${usdt.toFixed(2)} / CHF ${usdt_chf.toFixed(2)}`; + document.getElementById('usdt').textContent = `$${usdt.toFixed(2)}${usdt_chf.toFixed(2)}`; const portfolio_usd = data.portfolio_value_usd || 0; const portfolio_chf = data.portfolio_value_chf || (portfolio_usd * 0.84); - document.getElementById('portfolio').textContent = `$${portfolio_usd.toFixed(2)} / CHF ${portfolio_chf.toFixed(2)}`; + document.getElementById('portfolio').textContent = `$${portfolio_usd.toFixed(2)}${portfolio_chf.toFixed(2)}`; - // Update P&L with color - CHF primary + // Update P&L with color - primary const dailyPnl = data.daily_pnl || 0; const dailyPnl_chf = dailyPnl * 0.84; const dailyPnlEl = document.getElementById('daily-pnl'); - dailyPnlEl.textContent = `$${dailyPnl >= 0 ? '+' : ''}${dailyPnl.toFixed(2)} / CHF ${dailyPnl_chf >= 0 ? '+' : ''}${dailyPnl_chf.toFixed(2)}`; + dailyPnlEl.textContent = `$${dailyPnl >= 0 ? '+' : ''}${dailyPnl.toFixed(2)}${dailyPnl_chf >= 0 ? '+' : ''}${dailyPnl_chf.toFixed(2)}`; dailyPnlEl.className = 'card-value ' + (dailyPnl >= 0 ? 'positive' : 'negative'); const totalPnl = data.total_pnl || 0; const totalPnl_chf = totalPnl * 0.84; const totalPnlEl = document.getElementById('total-pnl'); - totalPnlEl.textContent = `$${totalPnl >= 0 ? '+' : ''}${totalPnl.toFixed(2)} / CHF ${totalPnl_chf >= 0 ? '+' : ''}${totalPnl_chf.toFixed(2)}`; + totalPnlEl.textContent = `$${totalPnl >= 0 ? '+' : ''}${totalPnl.toFixed(2)}${totalPnl_chf >= 0 ? '+' : ''}${totalPnl_chf.toFixed(2)}`; totalPnlEl.className = 'card-value ' + (totalPnl >= 0 ? 'positive' : 'negative'); // Update performance