custom_css = """ @import url('https://fonts.googleapis.com/css2?family=Lato:wght@700;900&display=swap'); @import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;600;700&family=IBM+Plex+Mono:wght@400;600&display=swap"); /* Force dark theme everywhere */ :root, .dark, .light { color-scheme: dark !important; --bg-1: #0d1117; --bg-2: #161b22; --card-bg: #1c2128; --ink-1: #e6edf3; --ink-2: #8b949e; --accent: #58a6ff; --accent-hover: #79b8ff; --accent-2: #bc8cff; --border: #30363d; --link-text-color: var(--accent); --blue-team: #58a6ff; --blue-team-hover: #79b8ff; --red-team: #f85149; --red-team-hover: #ff7b72; --success: #3fb950; --error: #f85149; } body, .gradio-container { font-family: "Space Grotesk", "Trebuchet MS", sans-serif; color: var(--ink-1) !important; background: var(--bg-1) !important; } .gradio-container .block { background: var(--card-bg) !important; border: 1px solid var(--border) !important; border-radius: 10px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); padding: 10px 20px !important; } /* Force text color on all Gradio elements */ .gradio-container *, .gradio-container .prose, .gradio-container .prose p, .gradio-container .prose li, .gradio-container .prose h1, .gradio-container .prose h2, .gradio-container .prose h3, .gradio-container .prose h4, .gradio-container .prose strong, .gradio-container label, .gradio-container span { color: var(--ink-1); } .gradio-container .prose a, .gradio-container a { color: var(--accent) !important; } .gradio-container .prose code, .gradio-container code { background: #282e36 !important; color: #e6edf3 !important; } .gradio-container .prose pre, .gradio-container pre { background: #161b22 !important; border: 1px solid var(--border) !important; } .gradio-container input, .gradio-container textarea, .gradio-container select, .gr-text-input textarea, .gr-text-input input { color: var(--ink-1) !important; background: #0d1117 !important; border: 1px solid var(--border) !important; } .gradio-container input::placeholder, .gradio-container textarea::placeholder { color: var(--ink-2) !important; } /* Tabs */ .gradio-container .tabs { background: transparent !important; } .gradio-container button.tab-nav, .gradio-container .tab-nav button { color: var(--ink-2) !important; background: transparent !important; } .gradio-container button.tab-nav.selected, .gradio-container .tab-nav button.selected { color: var(--ink-1) !important; border-bottom-color: var(--accent) !important; } #blue-tab-button { color: #58a6ff !important; font-weight: bold; } #red-tab-button { color: #f85149 !important; font-weight: bold; } /* Accordion */ .gradio-container .accordion { background: var(--card-bg) !important; border-color: var(--border) !important; } /* Dataframe / table */ .gradio-container table { background: var(--card-bg) !important; } .gradio-container table th { background: #21262d !important; color: var(--ink-1) !important; border-color: var(--border) !important; } .gradio-container table td { background: var(--card-bg) !important; color: var(--ink-1) !important; border-color: var(--border) !important; } .gradio-container table tr:nth-child(even) td { background: #161b22 !important; } /* Buttons */ .gr-button { background: var(--accent) !important; color: #ffffff !important; border: 1px solid transparent !important; font-weight: 600; letter-spacing: 0.01em; } .gr-button:hover { background: var(--accent-hover) !important; } .gr-button.secondary { background: var(--card-bg) !important; color: var(--ink-1) !important; border: 1px solid var(--border) !important; } .gr-button.secondary:hover { border-color: var(--accent) !important; color: var(--accent) !important; } /* Header */ .hackathon-header { margin: 10px 0 24px; } .hackathon-header h1 { font-family: 'Lato', sans-serif; font-weight: 900; font-size: 40px; letter-spacing: 0.02em; margin-bottom: 6px; color: var(--ink-1) !important; } .hackathon-subtitle { color: var(--ink-2) !important; font-size: 18px; margin-top: -4px; margin-bottom: 8px; } .hackathon-nav { font-weight: 500; margin: 4px 0 10px; } .hackathon-nav a { color: var(--ink-2) !important; text-decoration: none; padding: 0 8px; } .hackathon-nav a:hover { color: var(--accent) !important; } .nav-divider { color: var(--accent-2) !important; } .markdown-text { font-size: 16px !important; } .tab-buttons button { font-size: 20px; } /* Blue team accent */ .blue-team .gr-button.primary, .blue-team .gr-button:not(.secondary) { background: var(--blue-team) !important; } .blue-team .gr-button:not(.secondary):hover { background: var(--blue-team-hover) !important; } .blue-team-header { color: var(--blue-team) !important; border-left: 4px solid var(--blue-team); padding-left: 12px; margin-bottom: 12px; } /* Red team accent */ .red-team .gr-button.primary, .red-team .gr-button:not(.secondary) { background: var(--red-team) !important; } .red-team .gr-button:not(.secondary):hover { background: var(--red-team-hover) !important; } .red-team-header { color: var(--red-team) !important; border-left: 4px solid var(--red-team); padding-left: 12px; margin-bottom: 12px; } /* Status message styles */ .status-error { color: var(--error) !important; font-size: 16px; text-align: center; font-weight: 600; } .status-warning { color: var(--accent-2) !important; font-size: 16px; text-align: center; font-weight: 600; } .status-success { color: var(--success) !important; font-size: 16px; text-align: center; font-weight: 600; } """ get_window_url_params = """ function(url_params) { const params = new URLSearchParams(window.location.search); url_params = Object.fromEntries(params); return url_params; } """