@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap'); /* ── Design tokens ───────────────────────────────────────────────────── */ :root { --bg: #0d0d14; --surface: #13131e; --surface-2: #1c1c2a; --surface-3: #252535; --border: rgba(255, 255, 255, 0.08); --border-2: rgba(255, 255, 255, 0.14); --accent: #24ab48; --accent-dim: rgba(36, 171, 72, 0.14); --accent-glow: rgba(36, 171, 72, 0.25); --text: #e2e2ef; --text-muted: #5e5e78; --text-soft: #9898b0; --danger: #ef4444; --danger-dim: rgba(239, 68, 68, 0.12); --nav-h: 52px; --radius-sm: 6px; --radius: 10px; --radius-lg: 14px; --radius-pill: 100px; --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.4); --shadow: 0 8px 32px rgba(0, 0, 0, 0.5); --shadow-lg: 0 24px 64px rgba(0, 0, 0, 0.7); } /* ── Reset ───────────────────────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; } html, body { height: 100%; margin: 0; background: var(--bg); color: var(--text); font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, sans-serif; font-size: 14px; line-height: 1.5; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } a { text-decoration: none; color: inherit; } /* Bootstrap resets we override */ .btn { border-radius: var(--radius-sm) !important; } .modal-content { border-radius: var(--radius-lg) !important; } /* ── Navbar ──────────────────────────────────────────────────────────── */ .navbar { height: var(--nav-h); min-height: var(--nav-h); padding: 0 20px; background: rgba(13, 13, 20, 0.9); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(--border); position: sticky; top: 0; z-index: 1000; margin-bottom: 0; } .navbar-brand { font-size: 14px; font-weight: 600; letter-spacing: 0.02em; color: var(--text) !important; opacity: 0.9; } .navbar-nav { gap: 4px; align-items: center; } /* ── Navbar icon buttons ─────────────────────────────────────────────── */ .nav-icon-btn { width: 36px; height: 36px; padding: 0; display: flex; align-items: center; justify-content: center; background: transparent; border: 1px solid transparent; border-radius: var(--radius-sm) !important; color: var(--text-muted); transition: background 0.15s, color 0.15s, border-color 0.15s; cursor: pointer; } .nav-icon-btn svg path { fill: currentColor; } .navbar path { fill: currentColor; } .nav-icon-btn:hover { background: var(--surface-2); border-color: var(--border); color: var(--text); } .nav-icon-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } /* ── Dropdown ────────────────────────────────────────────────────────── */ .dropdown-menu { background: var(--surface) !important; border: 1px solid var(--border-2) !important; border-radius: var(--radius) !important; padding: 6px !important; box-shadow: var(--shadow) !important; min-width: 160px; } .dropdown-item { border-radius: var(--radius-sm) !important; padding: 9px 12px !important; font-size: 13px; font-weight: 500; color: var(--text-soft) !important; transition: background 0.12s, color 0.12s; } .dropdown-item:hover, .dropdown-item:focus { background: var(--surface-2) !important; color: var(--text) !important; } /* ── Navbar toggler (mobile) ─────────────────────────────────────────── */ .navbar-toggler { border: 1px solid var(--border) !important; border-radius: var(--radius-sm) !important; padding: 6px 10px; } .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28226,226,239,0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") !important; } /* ── Map container ───────────────────────────────────────────────────── */ #map-container { height: calc(100vh - var(--nav-h)); width: 100%; background: var(--bg); position: relative; } /* ── Metric pill bar ─────────────────────────────────────────────────── */ #gbar { position: fixed; bottom: 28px; left: 50%; transform: translateX(-50%); display: flex !important; align-items: center; gap: 3px; padding: 5px; background: rgba(19, 19, 30, 0.94); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--border-2); border-radius: var(--radius-pill); box-shadow: var(--shadow), 0 2px 8px rgba(0, 0, 0, 0.4); z-index: 500; white-space: nowrap; /* allow horizontal scroll on very small screens */ max-width: calc(100vw - 32px); overflow-x: auto; scrollbar-width: none; } #gbar::-webkit-scrollbar { display: none; } .metric-btn { padding: 7px 18px; border: none; border-radius: var(--radius-pill); background: transparent; color: var(--text-muted); font-family: inherit; font-size: 12px; font-weight: 500; letter-spacing: 0.025em; cursor: pointer; transition: background 0.15s, color 0.15s; white-space: nowrap; } .metric-btn:hover { background: var(--surface-3); color: var(--text-soft); } .metric-btn.active-metric { background: var(--accent); color: #000; font-weight: 600; } /* ── Tooltip ─────────────────────────────────────────────────────────── */ .map-tooltip { position: fixed; background: rgba(13, 13, 20, 0.96); color: var(--text); padding: 9px 14px; border: 1px solid var(--border-2); border-radius: var(--radius); pointer-events: none; font-size: 13px; font-weight: 500; font-family: 'Inter', system-ui, sans-serif; opacity: 0; transition: opacity 0.1s; z-index: 9999; box-shadow: var(--shadow); } /* ── Modals ──────────────────────────────────────────────────────────── */ .modal-content { background: rgba(13, 13, 20, 0.98) !important; border: 1px solid var(--border-2) !important; border-radius: var(--radius-lg) !important; overflow: hidden; box-shadow: var(--shadow-lg); color: var(--text); backdrop-filter: blur(24px); -webkit-backdrop-filter: blur(24px); } .modal-header { background: transparent !important; border-bottom: 1px solid var(--border) !important; padding: 20px 24px; } .modal-title { font-size: 15px !important; font-weight: 600; color: var(--text) !important; letter-spacing: 0.01em; } /* Country modal — accent title */ #country-modal-title { color: var(--accent) !important; } .modal-body { background: transparent !important; padding: 24px !important; color: var(--text); } .modal-footer { background: transparent !important; border-top: 1px solid var(--border) !important; padding: 16px 24px !important; gap: 8px; } /* Modal body typography */ .modal-body p { margin-bottom: 14px; font-size: 14px; line-height: 1.7; } .modal-body p:last-child { margin-bottom: 0; } .modal-body p b { color: var(--text-soft); font-weight: 500; margin-right: 4px; } .modal-body hr { border: none; border-top: 1px solid var(--border); margin: 20px 0; } /* ── Modal buttons ───────────────────────────────────────────────────── */ .btn-modal-primary { padding: 9px 20px; background: var(--accent); color: #000; border: none; border-radius: var(--radius-sm) !important; font-family: inherit; font-size: 13px; font-weight: 600; cursor: pointer; transition: opacity 0.15s; } .btn-modal-primary:hover { opacity: 0.85; } .btn-modal-ghost { padding: 9px 20px; background: transparent; color: var(--text-soft); border: 1px solid var(--border-2); border-radius: var(--radius-sm) !important; font-family: inherit; font-size: 13px; font-weight: 500; cursor: pointer; transition: background 0.15s, color 0.15s; } .btn-modal-ghost:hover { background: var(--surface-2); color: var(--text); } .btn-modal-link { padding: 9px 20px; background: transparent; color: var(--accent); border: none; border-radius: var(--radius-sm) !important; font-family: inherit; font-size: 13px; font-weight: 500; cursor: pointer; text-decoration: none; display: inline-flex; align-items: center; } /* ── Alert ───────────────────────────────────────────────────────────── */ .alert-danger { background: var(--danger-dim) !important; border: 1px solid rgba(239, 68, 68, 0.25) !important; border-radius: var(--radius) !important; color: #fca5a5 !important; padding: 12px 16px; margin-bottom: 16px; font-size: 13px; } .text-danger { color: var(--danger) !important; } /* ── Selects ─────────────────────────────────────────────────────────── */ select { appearance: none; -webkit-appearance: none; background-color: var(--surface-2); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath fill='none' stroke='%235e5e78' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M1 1l4 4 4-4'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; border: 1px solid var(--border-2); border-radius: var(--radius); color: var(--text); cursor: pointer; font-family: inherit; font-size: 13px; padding: 10px 36px 10px 12px; width: 100%; transition: border-color 0.15s; } select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-dim); } select option { background: var(--surface); } /* ── Table ───────────────────────────────────────────────────────────── */ .table { color: var(--text); border-collapse: collapse; width: 100%; font-size: 13px; } .table th { color: var(--text-muted); font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.07em; padding: 0 12px 10px; border-bottom: 1px solid var(--border-2); } .table td { padding: 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.04); vertical-align: top; line-height: 1.5; } .table td:first-child { color: var(--text-soft); font-size: 12px; font-weight: 500; white-space: nowrap; padding-right: 20px; } .table tbody tr:last-child td { border-bottom: none; } /* ── Chart containers ────────────────────────────────────────────────── */ #myChart2, #myNextChart { min-height: 340px; background: transparent; } /* D3 chart axis styling */ #myChart2 .domain, #myNextChart .domain, #myChart2 .tick line, #myNextChart .tick line { stroke: var(--border-2); } /* ── Info modal reference links ──────────────────────────────────────── */ .modal-body .ref-btn { display: block; padding: 10px 16px; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius); color: var(--text-soft); font-size: 13px; font-weight: 500; text-align: center; transition: background 0.15s, color 0.15s, border-color 0.15s; } .modal-body .ref-btn:hover { background: var(--surface-3); border-color: var(--border-2); color: var(--text); }