From 7c8b109fac2df45b9bb3ce4c2007692b41567343 Mon Sep 17 00:00:00 2001 From: Marc Blatter Date: Sat, 4 Jul 2026 13:07:52 +0200 Subject: [PATCH] Bot auto-update: src/__pycache__/web_dashboard.cpython-310.pyc,src/web_dashboard.py --- src/__pycache__/web_dashboard.cpython-310.pyc | Bin 20136 -> 17804 bytes src/web_dashboard.py | 355 +++++++----------- 2 files changed, 143 insertions(+), 212 deletions(-) diff --git a/src/__pycache__/web_dashboard.cpython-310.pyc b/src/__pycache__/web_dashboard.cpython-310.pyc index 4617c8b67b6bff5cc90776b2cc37eaf046f02228..cbb0a6ffac2c97881d58c3d873ab0f2da7702f8f 100644 GIT binary patch delta 2134 zcmah~-EPw`6s8D?F~rXpY=dpWP)ZpzQIc)l2wWkC011RZAa0$+O$=!qCGN&RXo5>X z-1rUz5_eo7A>INWfhXXCS3uZKow_s|wpt~Q&-u>z&Uft3A8K!2*A9{c2gY~t@$%R8 zM=x%EJ$QFwcgtbk#P{j*;Mq9nk1otYoVdWcG|t{m&ap3(b6d~lSNZ3WU{l-eLH}`> zkzNuQK8Z=@g1Qxmd8u@$*5xwys(?Bqp+*OGalGjQ1Ey(=jC?bvsM`WpVw^m_1^s*S zed`+E+5*jcC?p8nztL=g945JuqYQTj4!I37B80<;y1+Ku#TPC1$Zmni;lD*K0~KCJ zj)6BB-iGvc#071uA9>#$`+f8{8$UM77LLu_NMR7*By_=&l|C6kHGP-`8ej!wHWZT+ z{%U4+%zg%O?Z{*S?F{8pQoK)8Y(-Eka$-MD?b9V! zpyfTU0;?^@KULGy6v1f{FjJCair1^+c98F{*oCh%x=n&YSY^ZROiqOYfI?3)EuO{L zzyXao(U#R1gyxYfK$&Qh7^XR|gL=}ojCRwu(s(dLC0R#VCng&%h;R^~r0}UFK_iX5 z3JE&PV)6oTvA|MjHWwPO+qwuTdO{5tbG3wAk^dk~0$N-?MvnaFdBvy#;@LtPY zmSWsHe|l93Uzq8U>&;UY8RN!VDt?8j#8`Ri^aZl0^3u^VH-zL#%34M4Es4ZW-sPXvbED|`$L#=CCL(q=4e!( zF*${_mm3}oLfP`~r<#)`SKL@NJwH=c<>8@t(u-y*KE%h$qBSpTRGAXZh=;prXKfAL zC4C2JMmm`8NLUtn@Z3_n1srRs1#Ek<1uWBEUKof^)mv}kide~7F4$Gsj|MA|oJD?9 ztZ=xtRShIM|Eh3eO0o3P0Me=>WvAmwvdv~1^&`cVYf!=~U6hx-Y1G-b#x&TbCrs2$ zskn#P!}=Ld<^C^PDS&}yM9f9W>1NE&AWV5H`vV$vIcV+i?c>>Z&DtY&@irP8>y6cp I*7p4Q3qUn2j{pDw delta 3503 zcma)9OK;p%6mCctAvB@QOi0?K^tMSzLdLE=?o20>O+{58LKTAY5X)=(+GFbRwQNrw zRMl+QfrOA3NE8r4EZ9^6u|h1_^1_NR~T{Wkypg%{r3i}ednhTVYkh&-4j=_5(HE%|}dr@?WTtSJ=V zz4CI%4DOkUflBeM7(^_HoMgR8@hz@L>?q1249S``dd4h@L39P*F_S`=&gdyx=sYl4 zAQ{}{0TeQx2Q>`l-HjwWV9Y}cW*9fsqKlD5Bn8ZbWp?w1p&7~Y!x0{{87i-*0LIF~ zN*#gpscAZ%-6d(#@y846@i#k5L!Fz)1+>xD;$9?KwC}h8_~t!kb4EVg-)xW%Xpi@4 zgS^E&b^xCrvB0DrdD0Jy2Ylc`zOLgj8bEQ>beI=ysanfq_OK!9 zG@83a*?@mFrKz_yqAJS9cG;bPjw$$-*RleeihopI>N}p)V~*X6y6E+wmoGnzzuQ@e zzp5?9Ki00qf7VvxM?1B7xyLB9N?`bObv@o#tj%hf=lJpRlGgN(NXT8sBx`M>tyz`Y z(}X0QM-lIL3FZ}ly>s~;;k~C$!aa08V_+<|SU*n_u@uD@W5rh&m#0&|^Kux`Xb_65 z_b+V@abE^Z2l7?hRd9+eT2mCG)6yo!J?uFVE3c%4#)b~Uq`n&tJ; za#FA&@3KC^b56Dcfb_wL%JB~uuf%^`)V4JRs%#L|3brepu&G}R4TvnA#YUm8_}|)j z88Ijp8Q41AYPMPplK)X;HFX=4`pU2fF>c4FQmhIg%Ee?jj}s8Xn*sMF%W**>x4j`(#UM0lXJ(y&C^if2EBXOroa9tlHxQwD|A(PCT=C73Qig2<(i?lMbjm zU?)sQbuOO6F_BwQGms?HSOkE2K8YF*biuh_>tqqLFJ<0=c|`NqWS@sl9*{;4FYo8r$<}O4s3Y#$f_y+!^EA0)UI^>`BSTO zCX?D_7HIvAlLa~%fIE`VuM84F-E5*U*YdCzkj<29w@``9eI}YI+@%ADxn-At1bBpX zuejTAdC11#NbV1%{W;t2ru%*Bh=WT6KIMcINidoaI504?h19d-SzPcl(dCufAjl}n zWpGB4JT8zW%y6Dk0>ZrEse8Q`CX52^*%dyB5lcoHQya?RA@wCVnfevmQ*fs$hKV5`hwVzBOGo34(TRSl$xxL}gY536 zXPP263&+{HQe$t|*OxF-UTt0tUUZ-n3rSp;>dX}lhbCRZZROgs9-^GX6=^!93`;yb zN6J;XBOIV>d`?N#oc2;7k_=NLu0M&p{AkLxwk8jJ6V5SE)4mYXn6IwAhg$^2+U@p9 zJ*}njnr`-6; R9X5MrII}l1Ri8Th^nU diff --git a/src/web_dashboard.py b/src/web_dashboard.py index d1fe4cf..f23edf3 100644 --- a/src/web_dashboard.py +++ b/src/web_dashboard.py @@ -210,220 +210,151 @@ html_content = """ Trading Bot Dashboard + body { + background-color: #0d0d0d; + color: #d0d0d0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; + line-height: 1.6; + } + + h1, h2, h3 { + color: #ffffff; + font-weight: 600; + } + + .container { + max-width: 1400px; + margin: 0 auto; + padding: 40px; + } + + .card { + background-color: #1a1a1a; + border: 1px solid #2a2a2a; + border-radius: 8px; + padding: 24px; + margin-bottom: 20px; + } + + .card-title { + color: #a0a0a0; + font-size: 12px; + text-transform: uppercase; + letter-spacing: 1px; + margin-bottom: 12px; + font-weight: 600; + } + + .card-value { + color: #ffffff; + font-size: 28px; + font-weight: 700; + margin-bottom: 8px; + } + + .card-sub { + color: #666666; + font-size: 12px; + } + + .positive { + color: #2ecc71; + } + + .negative { + color: #e74c3c; + } + + table { + width: 100%; + border-collapse: collapse; + background-color: #1a1a1a; + border: 1px solid #2a2a2a; + border-radius: 8px; + overflow: hidden; + } + + th { + background-color: #252525; + color: #a0a0a0; + padding: 14px 16px; + text-align: left; + font-size: 12px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + border-bottom: 1px solid #2a2a2a; + } + + td { + padding: 14px 16px; + border-bottom: 1px solid #252525; + color: #d0d0d0; + font-size: 13px; + } + + tr:last-child td { + border-bottom: none; + } + + tr:hover { + background-color: #222222; + } + + .metrics { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 16px; + margin-bottom: 40px; + } + + .status-badge { + display: inline-block; + padding: 6px 12px; + border-radius: 4px; + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + } + + .badge-live { + background-color: #252525; + color: #a0a0a0; + } + + .badge-profit { + background-color: rgba(46, 204, 113, 0.15); + color: #2ecc71; + } + + .badge-loss { + background-color: rgba(231, 76, 60, 0.15); + color: #e74c3c; + } + + .last-update { + color: #666666; + font-size: 11px; + text-align: right; + margin-top: 40px; + padding-top: 20px; + border-top: 1px solid #2a2a2a; + } + + .empty { + text-align: center; + color: #666666; + padding: 40px; + font-style: italic; + font-size: 13px; + } +