From e2d52d44ebe16291343fdbbdc2f9cce16c9a87bb Mon Sep 17 00:00:00 2001 From: Anjali Date: Sat, 25 Oct 2025 18:01:15 +0530 Subject: [PATCH 1/3] Fix: Fix Card Overlapping --- app.py | 116 ++++++++++++++++-- models/__pycache__/__init__.cpython-314.pyc | Bin 0 -> 571 bytes .../batch_processor.cpython-314.pyc | Bin 0 -> 11159 bytes ...ensemble_classifier_method.cpython-314.pyc | Bin 0 -> 35049 bytes .../export_feature.cpython-314.pyc | Bin 0 -> 3227 bytes models/__pycache__/model_init.cpython-314.pyc | Bin 0 -> 1165 bytes .../threat_analyzer.cpython-314.pyc | Bin 0 -> 8675 bytes .../__pycache__/word_analyzer.cpython-314.pyc | Bin 0 -> 32469 bytes 8 files changed, 108 insertions(+), 8 deletions(-) create mode 100644 models/__pycache__/__init__.cpython-314.pyc create mode 100644 models/__pycache__/batch_processor.cpython-314.pyc create mode 100644 models/__pycache__/ensemble_classifier_method.cpython-314.pyc create mode 100644 models/__pycache__/export_feature.cpython-314.pyc create mode 100644 models/__pycache__/model_init.cpython-314.pyc create mode 100644 models/__pycache__/threat_analyzer.cpython-314.pyc create mode 100644 models/__pycache__/word_analyzer.cpython-314.pyc diff --git a/app.py b/app.py index 5e70a8b..1898322 100644 --- a/app.py +++ b/app.py @@ -524,11 +524,26 @@ def navigate_to(page_name): transform: translateY(-1px) !important; } - /* Sidebar hover effects */ + /* Sidebar hover effects and scrolling fix */ .stSidebar > div:hover { box-shadow: 0 4px 12px var(--hover-shadow) !important; } + /* Ensure sidebar can scroll properly */ + .stSidebar { + overflow-y: auto !important; + overflow-x: hidden !important; + position: relative !important; + z-index: 999 !important; + } + + .stSidebar > div { + overflow-y: auto !important; + overflow-x: hidden !important; + height: 100vh !important; + max-height: 100vh !important; + } + /* Progress bar hover effects */ .stProgress > div:hover { box-shadow: 0 0 10px var(--hover-glow) !important; @@ -565,6 +580,55 @@ def navigate_to(page_name): transform: translateY(-1px) !important; box-shadow: 0 4px 12px var(--hover-shadow) !important; } + + /* Minimal fix for overlapping issues - only for dashboard elements */ + .stTooltip { + z-index: 9999 !important; + position: fixed !important; + } + + /* Fix only dashboard-specific elements */ + .metric-container { + position: relative !important; + z-index: 1 !important; + margin: 10px 0 !important; + } + + /* Fix column layout for dashboard cards */ + .stColumns { + display: flex !important; + flex-wrap: wrap !important; + gap: 10px !important; + margin: 0 !important; + padding: 0 !important; + } + + .stColumns > div { + flex: 1 !important; + min-width: 0 !important; + margin: 0 !important; + padding: 0 !important; + } + + /* Dashboard container fixes */ + .dashboard-content { + position: relative !important; + z-index: 1 !important; + margin: 20px 0 !important; + } + + .dashboard-tabs-container { + position: relative !important; + z-index: 1 !important; + margin: 20px 0 !important; + } + + .dashboard-tab-content { + position: relative !important; + z-index: 1 !important; + margin: 20px 0 !important; + padding: 10px 0 !important; + } """, unsafe_allow_html=True) @@ -6787,7 +6851,7 @@ def render_spamlyser_dashboard(): st.markdown("---") st.markdown(""" -
+

📊 Advanced Analytics Dashboard

@@ -6797,44 +6861,73 @@ def render_spamlyser_dashboard():
""", unsafe_allow_html=True) - # Dashboard tabs - # Dashboard tabs + # Dashboard tabs with proper container + st.markdown('
', unsafe_allow_html=True) + dashboard_tabs = st.tabs(["đŸŽ¯ Overview", "🤖 Model Performance", "🧠 Ensemble Analytics", "📊 Detailed Stats", "⚡ Real-time Monitor"]) with dashboard_tabs[0]: # Overview Tab + st.markdown('
', unsafe_allow_html=True) render_overview_dashboard() + st.markdown('
', unsafe_allow_html=True) with dashboard_tabs[1]: # Model Performance Tab + st.markdown('
', unsafe_allow_html=True) render_model_performance_dashboard() + st.markdown('
', unsafe_allow_html=True) with dashboard_tabs[2]: # Ensemble Analytics Tab + st.markdown('
', unsafe_allow_html=True) render_ensemble_dashboard() + st.markdown('
', unsafe_allow_html=True) with dashboard_tabs[3]: # Detailed Stats Tab + st.markdown('
', unsafe_allow_html=True) render_detailed_stats_dashboard() + st.markdown('
', unsafe_allow_html=True) with dashboard_tabs[4]: # Real-time Monitor Tab + st.markdown('
', unsafe_allow_html=True) render_realtime_monitor() + st.markdown('
', unsafe_allow_html=True) + + st.markdown('
', unsafe_allow_html=True) def render_overview_dashboard(): st.markdown(""" """, unsafe_allow_html=True) @@ -7427,7 +7527,7 @@ def render_realtime_monitor(): # Add this to your main app.py file after your existing analysis section: # --- ADD THE DASHBOARD SECTION --- -if st.sidebar.button("📊 Open Dashboard", key="open_dashboard", help="Open the advanced analytics dashboard"): +if st.sidebar.button("📊 Open Dashboard", key="open_dashboard"): st.session_state.show_dashboard = True if st.session_state.get('show_dashboard', False): diff --git a/models/__pycache__/__init__.cpython-314.pyc b/models/__pycache__/__init__.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2da59981e7b748f73e614d0df45cff9f7a7124f8 GIT binary patch literal 571 zcmX|9O>fjN5Vbei4+7m%2`(T}OB~RuP>Cx-mA2K2q7^=l9(X* zNMjn&u!p_f4)-E2^wD2oFY1Q_9E3w0h9exUI6t}*1{my;xc`()2A2@bD{)aYRslN! z!;Vd=3d>G}JQqt9EOKpGbyF~DN))=ZOcVvfT(OI;`30y#ph{U*mlCxpMWL}_nE^IG zp1VF!0$Hk1t>do$x^`5Cbw5lR!6i6=epF$`F_>3qt}kC3v~eZ-COqwh<)tRZ;w*?r{_`s WZ$RktpXB8gIsHLSugEhPJN-YAh_5pM literal 0 HcmV?d00001 diff --git a/models/__pycache__/batch_processor.cpython-314.pyc b/models/__pycache__/batch_processor.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cfe08ba40ad15b153dfebfc3f8bdb66ddfe78616 GIT binary patch literal 11159 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 literal 0 HcmV?d00001 diff --git a/models/__pycache__/ensemble_classifier_method.cpython-314.pyc b/models/__pycache__/ensemble_classifier_method.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5c13266e183ea07cb921d81c0bbf6e06a975e62d GIT binary patch literal 35049 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 WnO@dy|4^TQU+)1P(&w^X`u_lIHyMKf literal 0 HcmV?d00001 diff --git a/models/__pycache__/export_feature.cpython-314.pyc b/models/__pycache__/export_feature.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c966a8a9ee5e8cbd1fa36848c0d0d7ae3e0e7f9 GIT binary patch literal 3227 zcma)8|4$pq6`%dSYrxnTI3Na`FK}laAxB7#gsbi($WhZH)ZMghFSTqfcri{F?`n4l zV5yZOT~+6DDyEkRpL(aDN|mVEANoUoxIcpwlDKn3t<<0Hw?skL{?H%##`f9{O4=LA zo;PpiedfJ4GoQC_dfPk*+Q2XWv-~>=p?}hW+t`}$d>({6N+6Y)MVP7dEasqRXZZ+^ z`9V6z%?c3_ixrull_D~h2azhN!fVK2u%gPUSdly`a~g$}uPOL^m?3gX!#d8a=pai| z8(4Q{zYiim6TLFC=(<1`EAZps_dEvwc@$@;lC}%g4q0rBjnWmznma#;U|u*j2}2bE zOL#BTEGw%Z6~|iwB|I@kWmQh)Cu%5_wbZX;Eg@W}dH3o)6N)NK)Z(kGsvN|NK=C$r z979pBD>r&~mjpA?P@<8R#=znrW?y6MN~$>0lnIM}Ild3ggb=a>z<5bUetaPwaPeaG zh!cz|P4HFyAo}1GJ-7jy`IqD=#=8*=qIj2!)f}}u@Alx)FTf-5mHu9*{xr)8qqa=cZeX;(p?4*<)s4sPEjcE`vuq>EvTodj_qeDLX6lE8nGUmr zHL^s|j7&O9AEuMZ>FFxczuyCexM12T-JYEPnr3=F$BmAT66P9Rn$jJdlMD@KvS-J_ z?KZt~MAlNNq@|^GB0D-xE}2NhlfMeM#iQm<3DnA+li+&JMF};S=x%R0gCtv>}EJ| zecdu`h(y=$s;!S&8^i~srY+gpik`$~5`gX30g}EU=euw&d35OU-WkqMmwD+|bGPO` zny(4P6Q#wS^9TGe9Y=0O3O^{a#rI38-P8HV0Y6H$Gq+|6V;{}d4R*%za|irT*%#Or zwuH|ECH4OG&#wP=aChus@5n>n+5BwT-?`nt)xQ&X=s%PH-cu3zIyQ5kBO%S1*RP6+Mc{SS(rZT z=qfI3r?=82?cR-@z&&%nV;HpU9mVlG>!nkl{Jh-VTRMGjd8g}P_i&Lbx3+IaZbynA z?oNNn6e5pWC!Z;(bKt25DXp90ZLyGhB=R#77^gxNzJN8&d=YKpY1b&;>Pjwh z46KGh8L#vI%lQ0cy$VL_oa`b&h2vZ_i)+e3XJdscK@NCTP{mPJm10aQI?t-|M6EJH zm4LZRKY@5IR^y4j=GrxSRZ%@I_W%>uC!#%du`a-FEir-aqqfF4_-{MUt6sIeQ9mlD zP-nOpTaQEhzsSCr*o5o{WE>@uQ2*&76$&b$kw_Fi!+SThI;Q zR$v(5#*CpSv%oWiUjb+T2Ou~GXh21|cFnR3Ab9H0IZ%YXgmr*}Gub7RuvUsFR{(p4 zvX@OMors!)H!R(zCuq~lK)9^A2K0^XC7L3lIJ%)P;stY^h`@K?C}~gCB1$f-Vr*tB z1Q?cxw48CUX>X8r>N@p2Y1#TxX5FTBim=!rZ7-yc$N-nDL@QHY&#cheb|gD()|d;@=Z^!JvIL)o(_eJt(y-aL>;{w8}5m6pxm$H8KHUm3_xm8A}# zv>RJD4x~`IFIf8N7v~=Lz4f5)t-l2J`z{vP!aKLy4;4SPxHIrr2|Z9kJA?bmSbplT zvwM5)H*;kW;XvxA6nc5<^3KKL<^4do zAcIqn<-WhledUg`Wq)tE_l>=t@UDON{O+0E)L!>^*?;0+ilBIoyr}cc&eVS3^>1Ty zs$yfm0ilPPoWEYS+&c!>(C@glELqE3xCKrV+d7oE47T3}TOwLoHl;cCB^XqXpUs%n z%F8d&+D6NI<$P_L??0f*meq5SzXLUL)zIIyufi1lByk4d?D)#>cbk&%h literal 0 HcmV?d00001 diff --git a/models/__pycache__/model_init.cpython-314.pyc b/models/__pycache__/model_init.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ee4068f56a03bbfac94521c8c9c8cbe2208c45b GIT binary patch literal 1165 zcmah|Pfr_16o2~<8*FSxH9=JxJeWwW(}ENy;sB%-HbjsDMaJ%F)79b~!zk-rGc%^K zPf?{x^pww$8&UcN(oaAk66%U7hxP+N$stN}$jsX7a_f_J-+S}k`_20|U#3P!K+wd` zA9n9+0Dnm(BDF7E&I;ivRDi<|P*GMDt_ZHKsw*1TR&=iCprVZfHy#<2aIYW4hbqbx z6!h-Q$hz-f7ZHzeV!NbkbK-l*_8hd2DQS>;@1W^BZ5NMh6x3jJvCaLe{}_9ui)oOT zY6$Ycr(1ZhjlDW9yEbEk=z5g1pMw+ z&%l(pAyt%n0$EZHZh#r@$pS0vWu*1^r07)S-2zh}_2_?nm5Me62+ULzF$B((%%i1V z$wW7=MfU38o+K0pat>}n#b~MDsFk6qzC;uP^V&@yN+H(0Kk~gCLkIC)n0=g7OAH9RLZlek`!;dyZ85HHv0PhPM4r$8JDfo^M!X$V-mIa9Pf-{s z=HI|nPHv_-P9(Jf$3kZgnpVVS6gxLlPX3`fS6ik=r%o@X#nL9S!VdhrLZn_uFW0u_SnN}zGG~DWr6&jh^dkru`N(gj|RPG0SrNx@A%MAcEwT z*0ZpgVei5cg5>&lOUrB4R&}vj+jPwhQ${|+2R?0O|J`8J`y%5e&?E^C>N@# e=$AvFjJ|<~|L7@Y>>>}D!b$q}Pf0o^ygmZA$r}&= literal 0 HcmV?d00001 diff --git a/models/__pycache__/threat_analyzer.cpython-314.pyc b/models/__pycache__/threat_analyzer.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc3be6f02bdb5b4aec9856bdd5180d5dee1cefcb GIT binary patch literal 8675 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 literal 0 HcmV?d00001 diff --git a/models/__pycache__/word_analyzer.cpython-314.pyc b/models/__pycache__/word_analyzer.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf864d51723a8dec3c31a1d2eb0f8dd47f02a3a2 GIT binary patch literal 32469 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

#NWl@MQ@N7uUtG(8hnnPvcu2hA8qO9Cwm zTL<#7S=pZnG}`is4{HW3K}h!KgcO`cw7?8K6-PkyLK+U`Xod8+7&APEUZQ2P*^=CJ zvOEUdx(p-jrUcwquQTCt6PPLIkYT*dNcW|q5#{>pPvS-_y0?8aTc~0{x^-#T)`dCO+Cn zpGi~hDT$vIL4}Na%0z1MGXyr@di!<0x98d8$M}9+LECkfvf7WY%gI@beKd+6!8{AM zg1Pxg=QwOvai2(R-ZaxqIsDS^L`siiirWe=fBlXwf`L`CH$D!QJLNjBnZqoe*J8zd zJSKdr5;wg}!`w7(z7%EH%zldDi~pMMJO0do&~=vYLYXf0_fWC=*!K=;#uQg9CoV|A zM<;LM19r)LRX4uvC!fodt*^^Pe6d2lZG;`v^f&U`=Xu^4T>s+rd3jjAyNN3fvMQaD z=V8;ndU>XIfZuJZhl!aI0TV%lo0`I>|M00U*az49&AdS0BRfkvR@g+V>anV%xtd6Q zY;{s>hPGWu+2m^mp2B8!6>nq{fqn8)DWt4!#Wye`hreY4`#dN^y|kecovKC7iQb}E zt1e0S-wkdXLT;?{CM5A90hV(Mb2)YQG) zvwTQOIVb7Q$y)^)c4M4;%k#fO!P!;Mebwpo0kmm5J|s9CHV)Hw)$m12;P{@%bzFa> zxTFjZkGVt$IV{ho-Eh_o596DW!^7gYDJmn?{XY^0BNtAjD=frM2>ee1L*)9~1ZYCd zWJF}Om5Fbd&@Dux!?;WbUq;0@yJ9 Date: Sat, 25 Oct 2025 21:12:44 +0530 Subject: [PATCH 2/3] Feat:Added Scroll Down Property and Highlighting clicked Nav Button --- app.py | 128 ++++++++++++------ feedback_data.json | 1 + .../feedback_handler.cpython-314.pyc | Bin 0 -> 9108 bytes 3 files changed, 88 insertions(+), 41 deletions(-) create mode 100644 feedback_data.json create mode 100644 models/__pycache__/feedback_handler.cpython-314.pyc diff --git a/app.py b/app.py index 1898322..f25c1f1 100644 --- a/app.py +++ b/app.py @@ -99,7 +99,7 @@ def get_all_predictions(self, predictions): from models.navigation import top_navigation_bar except ImportError: def top_navigation_bar(): - st.error("Navigation component not found") + pass # Silent fallback # --- Session State Initialization --- # Initialize all session state variables @@ -629,9 +629,68 @@ def navigate_to(page_name): margin: 20px 0 !important; padding: 10px 0 !important; } + + /* Smooth scrolling for navigation */ + html { + scroll-behavior: smooth !important; + } + + /* Content sections for navigation */ + .content-section { + scroll-margin-top: 100px !important; + padding: 20px 0 !important; + } + + /* Navigation button scroll effects */ + .nav-scroll-button { + transition: all 0.3s ease !important; + cursor: pointer !important; + } + + .nav-scroll-button:hover { + transform: translateY(-2px) !important; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15) !important; + } + + /* Active button styling */ + .stButton > button:active, + .stButton > button:focus { + background-color: #4ecdc4 !important; + color: #ffffff !important; + border: 2px solid #4ecdc4 !important; + box-shadow: 0 0 10px rgba(78, 205, 196, 0.5) !important; + } + + /* Clicked button styling */ + .nav-button-clicked { + background-color: #4ecdc4 !important; + color: #ffffff !important; + border: 2px solid #4ecdc4 !important; + box-shadow: 0 0 10px rgba(78, 205, 196, 0.5) !important; + } """, unsafe_allow_html=True) +# Add JavaScript for button click styling +st.markdown(""" + +""", unsafe_allow_html=True) + + + # --- Page Functions --- def show_home_page(): """Beautiful and comprehensive home page""" @@ -881,7 +940,7 @@ def show_home_page(): # Feedback Section st.markdown("---") st.markdown(""" -

+

đŸ’Ŧ Your Feedback Matters!

@@ -6913,7 +6972,7 @@ def render_overview_dashboard(): padding: 20px; text-align: center; box-shadow: 0 4px 12px rgba(0,0,0,0.5); - + /* 🔑 Force same size for all cards */ min-height: 180px; max-height: 180px; @@ -8727,39 +8786,52 @@ def classify_csv(file, ensemble_mode, selected_models_for_bulk, selected_ensembl """, unsafe_allow_html=True) + # Create beautiful navigation links in columns col1, col2, col3, col4, col5 = st.columns(5) with col1: - if st.button("🏠 Home", key="nav_home", use_container_width=True): + if st.button("Home", key="nav_home", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('home') - if st.button("â„šī¸ About", key="nav_about", use_container_width=True): + if st.button("About", key="nav_about", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('about') with col2: - if st.button("⚡ Features", key="nav_features", use_container_width=True): + if st.button("Features", key="nav_features", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('features') - if st.button("📊 Analytics", key="nav_analytics", use_container_width=True): + if st.button("Analytics", key="nav_analytics", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('analytics') with col3: - if st.button("🤖 Models", key="nav_models", use_container_width=True): + if st.button("Models", key="nav_models", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('models') - if st.button("đŸ’Ŧ Feedback", key="nav_feedback", use_container_width=True): + if st.button("Feedback", key="nav_feedback", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('feedback') with col4: - if st.button("📞 Contact", key="nav_contact", use_container_width=True): + if st.button("Contact", key="nav_contact", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('contact') - if st.button("📚 Docs", key="nav_docs", use_container_width=True): + if st.button("Docs", key="nav_docs", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('docs') with col5: - if st.button("🔌 API", key="nav_api", use_container_width=True): + if st.button("API", key="nav_api", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('api') - if st.button("âš™ī¸ Settings", key="nav_settings", use_container_width=True): + if st.button("Settings", key="nav_settings", use_container_width=True): + st.markdown('', unsafe_allow_html=True) navigate_to('settings') + + # Beautiful Footer Info Section # Clean and simple footer info st.markdown("---") @@ -8790,31 +8862,5 @@ def classify_csv(file, ensemble_mode, selected_models_for_bulk, selected_ensembl ) # --- Main Execution --- -# Route to appropriate page based on session state -if st.session_state.current_page == 'home': - show_home_page() -elif st.session_state.current_page == 'analyzer': - # All the above analyzer content has already been executed - pass -elif st.session_state.current_page == 'about': - show_about_page() -elif st.session_state.current_page == 'features': - show_features_page() -elif st.session_state.current_page == 'analytics': - show_analytics_page() -elif st.session_state.current_page == 'models': - show_models_page() -elif st.session_state.current_page == 'help': - show_help_page() -elif st.session_state.current_page == 'contact': - show_contact_page() -elif st.session_state.current_page == 'docs': - show_docs_page() -elif st.session_state.current_page == 'api': - show_api_page() -elif st.session_state.current_page == 'settings': - show_settings_page() -else: - # Default to home page - st.session_state.current_page = 'home' - show_home_page() +# Call the main function to handle routing +main() diff --git a/feedback_data.json b/feedback_data.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/feedback_data.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/models/__pycache__/feedback_handler.cpython-314.pyc b/models/__pycache__/feedback_handler.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8eda583a606eafbd7b68444bc372c0dc5c5333d1 GIT binary patch literal 9108 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 XDLK4C4*!zWY;ux?Y1kl`)3N>+tVhs4 literal 0 HcmV?d00001 From 926f6791ed2d539a4114c5c62a2bd43b0e281f7b Mon Sep 17 00:00:00 2001 From: Anjali Date: Sat, 25 Oct 2025 23:34:42 +0530 Subject: [PATCH 3/3] Fix: Fix side bar brightness mode problem --- app.py | 192 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/app.py b/app.py index f25c1f1..5c969cd 100644 --- a/app.py +++ b/app.py @@ -6775,6 +6775,38 @@ def update_progress(progress, message=""): .main, .stApp { background: #181f2f; } + + /* Sidebar dark mode styling */ + .stSidebar { + background: #232a3d !important; + color: #f8fafc !important; + } + + .stSidebar .stMarkdown { + color: #f8fafc !important; + } + + .stSidebar label { + color: #f8fafc !important; + } + + .stSidebar .stExpander { + background: #232a3d !important; + border: 1px solid #324a7c !important; + } + + .stSidebar .stCheckbox label { + color: #f8fafc !important; + } + + .stSidebar .stRadio label { + color: #f8fafc !important; + } + + .stSidebar .stSelectbox label { + color: #f8fafc !important; + } + .metric-container, .prediction-card, .ensemble-card, .feature-card, .model-info, .ensemble-method, .method-comparison { background: #232a3d; border-radius: 16px; @@ -6839,6 +6871,166 @@ def update_progress(progress, message=""): .main, .stApp { background: #f4f8ff; } + + /* Sidebar light mode styling */ + .stSidebar { + background: #ffffff !important; + color: #232a3d !important; + } + + .stSidebar .stMarkdown { + color: #232a3d !important; + } + + .stSidebar label { + color: #232a3d !important; + } + + .stSidebar .stExpander { + background: #ffffff !important; + border: 1px solid #b3c7f7 !important; + } + + .stSidebar .stCheckbox label { + color: #232a3d !important; + } + + .stSidebar .stRadio label { + color: #232a3d !important; + } + + .stSidebar .stSelectbox label { + color: #232a3d !important; + } + + /* Additional sidebar elements for light mode */ + .stSidebar .stText { + color: #232a3d !important; + } + + .stSidebar .stMetric { + color: #232a3d !important; + } + + .stSidebar .stSelectbox > div > div { + background: #ffffff !important; + color: #232a3d !important; + border: 1px solid #b3c7f7 !important; + } + + .stSidebar .stSelectbox > div > div > div { + background: #ffffff !important; + color: #232a3d !important; + } + + .stSidebar .stCheckbox > div > label { + color: #232a3d !important; + } + + .stSidebar .stRadio > div > label { + color: #232a3d !important; + } + + .stSidebar .stNumberInput label { + color: #232a3d !important; + } + + .stSidebar .stSlider label { + color: #232a3d !important; + } + + .stSidebar .stProgress label { + color: #232a3d !important; + } + + .stSidebar .stInfo { + color: #232a3d !important; + } + + .stSidebar .stSuccess { + color: #232a3d !important; + } + + .stSidebar .stWarning { + color: #232a3d !important; + } + + .stSidebar .stError { + color: #232a3d !important; + } + + /* Force sidebar text visibility in light mode */ + .stSidebar * { + color: #232a3d !important; + } + + .stSidebar div { + color: #232a3d !important; + } + + .stSidebar span { + color: #232a3d !important; + } + + .stSidebar p { + color: #232a3d !important; + } + + .stSidebar h1, .stSidebar h2, .stSidebar h3, .stSidebar h4, .stSidebar h5, .stSidebar h6 { + color: #232a3d !important; + } + + /* Specific targeting for Streamlit components */ + .stSidebar [data-testid="stCheckbox"] label { + color: #232a3d !important; + } + + .stSidebar [data-testid="stRadio"] label { + color: #232a3d !important; + } + + .stSidebar [data-testid="stSelectbox"] label { + color: #232a3d !important; + } + + .stSidebar [data-testid="stExpander"] label { + color: #232a3d !important; + } + + .stSidebar [data-testid="stText"] { + color: #232a3d !important; + } + + .stSidebar [data-testid="stMetric"] { + color: #232a3d !important; + } + + /* Override any inherited light colors */ + .stSidebar .stMarkdown p { + color: #232a3d !important; + } + + .stSidebar .stMarkdown div { + color: #232a3d !important; + } + + .stSidebar .stMarkdown span { + color: #232a3d !important; + } + + /* Ensure form elements are visible */ + .stSidebar .stForm label { + color: #232a3d !important; + } + + .stSidebar .stForm div { + color: #232a3d !important; + } + + .stSidebar .stForm span { + color: #232a3d !important; + } + .metric-container, .prediction-card, .ensemble-card, .feature-card, .model-info, .ensemble-method, .method-comparison { background: #e3eafc; border-radius: 16px;