/* ============================================================ Multi-Hazard Warning System — Dashboard Styles Premium dark-mode design with glassmorphism effects ============================================================ */ /* ---- CSS Variables ---- */ :root { --bg-primary: #0a0a0f; --bg-secondary: #111118; --bg-card: rgba(20, 20, 30, 0.85); --bg-glass: rgba(255, 255, 255, 0.05); --border-glass: rgba(255, 255, 255, 0.1); --text-primary: #e8e8f0; --text-secondary: #a0a0b0; --text-muted: #666680; --accent-fire: #ff6b35; --accent-fire-glow: rgba(255, 107, 53, 0.3); --accent-blue: #4fc3f7; --accent-green: #00e676; --accent-yellow: #ffeb3b; --accent-red: #f44336; --accent-purple: #b388ff; --gradient-fire: linear-gradient(135deg, #ff6b35 0%, #ff8a60 100%); --gradient-danger: linear-gradient(135deg, #f44336 0%, #ff5252 100%); --gradient-safe: linear-gradient(135deg, #00c853 0%, #00e676 100%); --radius: 12px; --shadow: 0 8px 32px rgba(0, 0, 0, 0.4); --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* ---- Global Overrides ---- */ .gradio-container { background: var(--bg-primary) !important; font-family: 'Inter', 'Segoe UI', -apple-system, sans-serif !important; max-width: 100% !important; } .dark { --background-fill-primary: var(--bg-primary) !important; } /* ---- Header ---- */ .dashboard-header { text-align: center; padding: 24px 20px; background: linear-gradient(135deg, rgba(255, 107, 53, 0.1) 0%, rgba(79, 195, 247, 0.1) 100%); border-bottom: 1px solid var(--border-glass); border-radius: var(--radius); margin-bottom: 16px; } .dashboard-header h1 { font-size: 28px; font-weight: 700; background: linear-gradient(135deg, var(--accent-fire), var(--accent-blue)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; margin: 0; letter-spacing: -0.5px; } .dashboard-header p { color: var(--text-secondary); font-size: 14px; margin-top: 6px; } /* ---- Risk Badge ---- */ .risk-badge { display: inline-flex; align-items: center; gap: 8px; padding: 10px 20px; border-radius: 50px; font-weight: 700; font-size: 16px; letter-spacing: 0.5px; text-transform: uppercase; box-shadow: var(--shadow); transition: var(--transition); } .risk-low { background: var(--gradient-safe); color: #003300; } .risk-medium { background: linear-gradient(135deg, #ffd600, #ffeb3b); color: #333300; } .risk-high { background: var(--gradient-fire); color: white; } .risk-extreme { background: var(--gradient-danger); color: white; animation: pulse-danger 2s ease-in-out infinite; } @keyframes pulse-danger { 0%, 100% { box-shadow: 0 0 0 0 rgba(244, 67, 54, 0.5); } 50% { box-shadow: 0 0 20px 4px rgba(244, 67, 54, 0.3); } } /* ---- Map Container ---- */ .map-container { border-radius: var(--radius); overflow: hidden; border: 1px solid var(--border-glass); box-shadow: var(--shadow); min-height: 500px; } .map-container iframe { border: none !important; border-radius: var(--radius); } /* ---- Card Panels ---- */ .panel-card { background: var(--bg-card); backdrop-filter: blur(20px); border: 1px solid var(--border-glass); border-radius: var(--radius); padding: 16px; transition: var(--transition); } .panel-card:hover { border-color: rgba(255, 255, 255, 0.15); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5); } /* ---- Status Bar ---- */ .status-bar { display: flex; align-items: center; justify-content: center; gap: 24px; padding: 12px 20px; background: var(--bg-glass); border: 1px solid var(--border-glass); border-radius: var(--radius); font-size: 13px; color: var(--text-secondary); } .status-item { display: flex; align-items: center; gap: 6px; } .status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--accent-green); animation: blink 2s ease-in-out infinite; } @keyframes blink { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } } /* ---- Buttons ---- */ .analyze-btn { background: var(--gradient-fire) !important; border: none !important; color: white !important; font-weight: 600 !important; font-size: 15px !important; padding: 12px 24px !important; border-radius: 8px !important; cursor: pointer !important; transition: var(--transition) !important; text-transform: uppercase !important; letter-spacing: 1px !important; } .analyze-btn:hover { transform: translateY(-2px) !important; box-shadow: 0 8px 24px var(--accent-fire-glow) !important; } /* ---- Loading Animation --- */ .loading-overlay { display: flex; align-items: center; justify-content: center; padding: 40px; } .loading-spinner { width: 40px; height: 40px; border: 3px solid var(--border-glass); border-top: 3px solid var(--accent-fire); border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ---- Tabs Styling ---- */ .output-tabs .tab-nav button { color: var(--text-secondary) !important; border-bottom: 2px solid transparent !important; transition: var(--transition) !important; } .output-tabs .tab-nav button.selected { color: var(--accent-fire) !important; border-bottom-color: var(--accent-fire) !important; } /* ---- Data Table ---- */ .data-table { width: 100%; border-collapse: collapse; font-size: 13px; } .data-table th { background: var(--bg-glass); color: var(--text-primary); padding: 10px 12px; text-align: left; font-weight: 600; border-bottom: 1px solid var(--border-glass); } .data-table td { padding: 8px 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.03); color: var(--text-secondary); } .data-table tr:hover td { background: rgba(255, 255, 255, 0.02); } /* ---- Responsive ---- */ @media (max-width: 768px) { .dashboard-header h1 { font-size: 22px; } .status-bar { flex-direction: column; gap: 8px; } }