| | |
| | :root { |
| | --primary: #6366f1; |
| | --primary-dark: #4f46e5; |
| | --primary-light: #818cf8; |
| | --secondary: #10b981; |
| | --accent: #f59e0b; |
| | --bg-dark: #0f172a; |
| | --bg-card: #1e293b; |
| | --bg-card-hover: #334155; |
| | --text-primary: #f1f5f9; |
| | --text-secondary: #94a3b8; |
| | --text-muted: #64748b; |
| | --border: #334155; |
| | --shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -2px rgba(0, 0, 0, 0.2); |
| | --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -4px rgba(0, 0, 0, 0.3); |
| | --gradient-primary: linear-gradient(135deg, #6366f1 0%, #8b5cf6 100%); |
| | --gradient-hero: linear-gradient(135deg, #1e293b 0%, #0f172a 50%, #1a1f3c 100%); |
| | } |
| |
|
| | |
| | *, *::before, *::after { |
| | box-sizing: border-box; |
| | margin: 0; |
| | padding: 0; |
| | } |
| |
|
| | html { |
| | scroll-behavior: smooth; |
| | } |
| |
|
| | body { |
| | font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; |
| | background-color: var(--bg-dark); |
| | color: var(--text-primary); |
| | line-height: 1.6; |
| | min-height: 100vh; |
| | } |
| |
|
| | |
| | .hero { |
| | background: var(--gradient-hero); |
| | padding: 4rem 2rem 3rem; |
| | text-align: center; |
| | position: relative; |
| | overflow: hidden; |
| | } |
| |
|
| | .hero::before { |
| | content: ''; |
| | position: absolute; |
| | top: 0; |
| | left: 0; |
| | right: 0; |
| | bottom: 0; |
| | background: |
| | radial-gradient(circle at 20% 50%, rgba(99, 102, 241, 0.15) 0%, transparent 50%), |
| | radial-gradient(circle at 80% 50%, rgba(139, 92, 246, 0.1) 0%, transparent 50%); |
| | pointer-events: none; |
| | } |
| |
|
| | .hero-content { |
| | max-width: 900px; |
| | margin: 0 auto; |
| | position: relative; |
| | z-index: 1; |
| | } |
| |
|
| | .badge { |
| | display: inline-block; |
| | background: rgba(99, 102, 241, 0.2); |
| | color: var(--primary-light); |
| | padding: 0.5rem 1rem; |
| | border-radius: 2rem; |
| | font-size: 0.85rem; |
| | font-weight: 500; |
| | margin-bottom: 1rem; |
| | border: 1px solid rgba(99, 102, 241, 0.3); |
| | } |
| |
|
| | .hero h1 { |
| | font-size: 3.5rem; |
| | font-weight: 700; |
| | background: linear-gradient(135deg, #f1f5f9 0%, #818cf8 100%); |
| | -webkit-background-clip: text; |
| | -webkit-text-fill-color: transparent; |
| | background-clip: text; |
| | margin-bottom: 0.75rem; |
| | letter-spacing: -0.02em; |
| | } |
| |
|
| | .subtitle { |
| | font-size: 1.35rem; |
| | color: var(--text-secondary); |
| | margin-bottom: 1rem; |
| | font-weight: 400; |
| | } |
| |
|
| | .description { |
| | font-size: 1rem; |
| | color: var(--text-muted); |
| | max-width: 700px; |
| | margin: 0 auto 2rem; |
| | line-height: 1.7; |
| | } |
| |
|
| | .stats-row { |
| | display: flex; |
| | justify-content: center; |
| | gap: 3rem; |
| | margin-top: 2rem; |
| | } |
| |
|
| | .stat-item { |
| | text-align: center; |
| | } |
| |
|
| | .stat-value { |
| | display: block; |
| | font-size: 2.5rem; |
| | font-weight: 700; |
| | color: var(--primary-light); |
| | } |
| |
|
| | .stat-label { |
| | font-size: 0.9rem; |
| | color: var(--text-muted); |
| | } |
| |
|
| | |
| | .nav-tabs { |
| | display: flex; |
| | justify-content: center; |
| | gap: 0.5rem; |
| | padding: 1rem 2rem; |
| | background: var(--bg-card); |
| | border-bottom: 1px solid var(--border); |
| | position: sticky; |
| | top: 0; |
| | z-index: 100; |
| | flex-wrap: wrap; |
| | } |
| |
|
| | .nav-tab { |
| | padding: 0.75rem 1.5rem; |
| | background: transparent; |
| | border: 1px solid transparent; |
| | border-radius: 0.5rem; |
| | color: var(--text-secondary); |
| | font-size: 0.95rem; |
| | font-weight: 500; |
| | cursor: pointer; |
| | transition: all 0.2s ease; |
| | font-family: inherit; |
| | } |
| |
|
| | .nav-tab:hover { |
| | color: var(--text-primary); |
| | background: var(--bg-card-hover); |
| | } |
| |
|
| | .nav-tab.active { |
| | color: var(--primary-light); |
| | background: rgba(99, 102, 241, 0.15); |
| | border-color: rgba(99, 102, 241, 0.3); |
| | } |
| |
|
| | |
| | .content { |
| | max-width: 1400px; |
| | margin: 0 auto; |
| | padding: 2rem; |
| | } |
| |
|
| | |
| | .section { |
| | display: none; |
| | animation: fadeIn 0.3s ease; |
| | } |
| |
|
| | .section.active { |
| | display: block; |
| | } |
| |
|
| | @keyframes fadeIn { |
| | from { opacity: 0; transform: translateY(10px); } |
| | to { opacity: 1; transform: translateY(0); } |
| | } |
| |
|
| | .section-header { |
| | margin-bottom: 2rem; |
| | text-align: center; |
| | } |
| |
|
| | .section-header h2 { |
| | font-size: 1.75rem; |
| | font-weight: 600; |
| | color: var(--text-primary); |
| | margin-bottom: 0.5rem; |
| | } |
| |
|
| | .section-header p { |
| | color: var(--text-muted); |
| | font-size: 1rem; |
| | } |
| |
|
| | |
| | .controls { |
| | display: flex; |
| | justify-content: center; |
| | gap: 1.5rem; |
| | margin-bottom: 1.5rem; |
| | flex-wrap: wrap; |
| | } |
| |
|
| | .controls label { |
| | display: flex; |
| | align-items: center; |
| | gap: 0.75rem; |
| | } |
| |
|
| | .controls label span { |
| | color: var(--text-secondary); |
| | font-size: 0.9rem; |
| | font-weight: 500; |
| | } |
| |
|
| | .controls select { |
| | padding: 0.6rem 1rem; |
| | background: var(--bg-card); |
| | border: 1px solid var(--border); |
| | border-radius: 0.5rem; |
| | color: var(--text-primary); |
| | font-size: 0.9rem; |
| | cursor: pointer; |
| | transition: all 0.2s ease; |
| | font-family: inherit; |
| | min-width: 160px; |
| | } |
| |
|
| | .controls select:hover { |
| | border-color: var(--primary); |
| | } |
| |
|
| | .controls select:focus { |
| | outline: none; |
| | border-color: var(--primary); |
| | box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2); |
| | } |
| |
|
| | |
| | .chart-container { |
| | background: var(--bg-card); |
| | border-radius: 1rem; |
| | padding: 1.5rem; |
| | box-shadow: var(--shadow); |
| | min-height: 500px; |
| | border: 1px solid var(--border); |
| | } |
| |
|
| | .chart-container.tall { |
| | min-height: 700px; |
| | } |
| |
|
| | |
| | .footer { |
| | text-align: center; |
| | padding: 2rem; |
| | color: var(--text-muted); |
| | font-size: 0.9rem; |
| | border-top: 1px solid var(--border); |
| | margin-top: 3rem; |
| | } |
| |
|
| | |
| | @media (max-width: 768px) { |
| | .hero { |
| | padding: 3rem 1.5rem 2rem; |
| | } |
| | |
| | .hero h1 { |
| | font-size: 2.5rem; |
| | } |
| | |
| | .subtitle { |
| | font-size: 1.1rem; |
| | } |
| | |
| | .stats-row { |
| | gap: 1.5rem; |
| | } |
| | |
| | .stat-value { |
| | font-size: 2rem; |
| | } |
| | |
| | .nav-tabs { |
| | padding: 0.75rem 1rem; |
| | gap: 0.25rem; |
| | } |
| | |
| | .nav-tab { |
| | padding: 0.5rem 1rem; |
| | font-size: 0.85rem; |
| | } |
| | |
| | .content { |
| | padding: 1rem; |
| | } |
| | |
| | .controls { |
| | flex-direction: column; |
| | align-items: stretch; |
| | } |
| | |
| | .controls label { |
| | flex-direction: column; |
| | align-items: flex-start; |
| | } |
| | |
| | .controls select { |
| | width: 100%; |
| | } |
| | } |
| |
|
| | |
| | .js-plotly-plot .plotly .modebar { |
| | background: rgba(30, 41, 59, 0.9) !important; |
| | } |
| |
|
| | .js-plotly-plot .plotly .modebar-btn path { |
| | fill: var(--text-secondary) !important; |
| | } |
| |
|
| | .js-plotly-plot .plotly .modebar-btn:hover path { |
| | fill: var(--text-primary) !important; |
| | } |
| |
|