:root { /* French tricolor */ --color-blue: #0055A4; --color-white: #FFFFFF; --color-red: #EF4135; /* UI colors */ --color-bg: #0a0a0f; --color-bg-secondary: #12121a; --color-text: #f0f0f5; --color-text-muted: #8888a0; --color-accent: #0055A4; /* Spacing */ --header-height: 80px; --timeline-height: 140px; /* Typography */ --font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; } html, body { height: 100%; overflow: hidden; } body { font-family: var(--font-family); background: var(--color-bg); color: var(--color-text); } #app { display: flex; flex-direction: column; height: 100vh; } /* Header */ .header { height: var(--header-height); display: flex; align-items: center; gap: 16px; padding: 0 24px; background: var(--color-bg-secondary); border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .header h1 { font-size: 2rem; font-weight: 700; background: linear-gradient(90deg, var(--color-blue), var(--color-white), var(--color-red)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .header .subtitle { font-size: 1rem; color: var(--color-text-muted); } .header-spacer { flex: 1; } .header-logo { height: 24px; opacity: 0.6; filter: brightness(0) invert(1); } /* Main content */ .main { flex: 1; position: relative; overflow: hidden; } .map { width: 100%; height: 100%; } /* Countdown */ .countdown-container { position: absolute; bottom: 24px; left: 24px; z-index: 10; } .countdown { background: linear-gradient(135deg, rgba(10, 10, 15, 0.95), rgba(18, 18, 26, 0.95)); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 16px; padding: 16px 24px; backdrop-filter: blur(10px); box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); } .countdown-header { display: flex; flex-direction: column; gap: 2px; margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid rgba(255, 255, 255, 0.1); } .countdown-label { font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.15em; color: var(--color-text-muted); } .countdown-event { font-size: 1rem; font-weight: 600; background: linear-gradient(90deg, var(--color-blue), var(--color-white), var(--color-red)); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .countdown-location { font-size: 0.75rem; color: var(--color-text-muted); } .countdown-timer { display: flex; align-items: center; gap: 8px; } .countdown-unit { display: flex; flex-direction: column; align-items: center; min-width: 44px; } .countdown-value { font-size: 1.75rem; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--color-text); line-height: 1; } .countdown-unit:first-child .countdown-value { color: var(--color-blue); } .countdown-unit:nth-child(3) .countdown-value { color: var(--color-white); } .countdown-unit:nth-child(5) .countdown-value { color: var(--color-white); } .countdown-unit:last-child .countdown-value { color: var(--color-red); } .countdown-unit-label { font-size: 0.6rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--color-text-muted); margin-top: 4px; } .countdown-separator { font-size: 1.5rem; font-weight: 300; color: var(--color-text-muted); margin-bottom: 16px; } /* Event Card */ .event-card { position: absolute; top: 20px; right: 20px; width: 300px; background: var(--color-bg-secondary); border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 12px; padding: 20px; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); z-index: 10; transition: opacity 0.3s, transform 0.3s; } .event-card.hidden { opacity: 0; pointer-events: none; transform: translateY(-10px); } .event-card .event-type { display: inline-block; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; padding: 4px 8px; border-radius: 4px; margin-bottom: 12px; } .event-card .event-type.international { background: rgba(0, 85, 164, 0.3); color: var(--color-blue); } .event-card .event-type.national { background: rgba(239, 65, 53, 0.3); color: var(--color-red); } .event-card .event-type.training { background: rgba(255, 255, 255, 0.2); color: var(--color-text-muted); } .event-card h2 { font-size: 1.25rem; margin-bottom: 8px; } .event-card .event-location { color: var(--color-text-muted); font-size: 0.875rem; margin-bottom: 8px; } .event-card .event-date { font-size: 0.875rem; color: var(--color-text); } .event-card .close-btn { position: absolute; top: 12px; right: 12px; background: none; border: none; color: var(--color-text-muted); cursor: pointer; font-size: 1.25rem; line-height: 1; padding: 4px; } .event-card .close-btn:hover { color: var(--color-text); } /* Footer */ .footer { height: var(--timeline-height); background: var(--color-bg-secondary); border-top: 1px solid rgba(255, 255, 255, 0.1); } /* Loading state */ .loading { display: flex; align-items: center; justify-content: center; height: 100%; color: var(--color-text-muted); } /* Mapbox overrides */ .mapboxgl-ctrl-logo, .mapboxgl-ctrl-attrib { opacity: 0.5; } /* Map markers */ .home-marker { cursor: pointer; } .event-marker { cursor: pointer; } .event-marker svg { transition: transform 0.2s; } .event-marker:hover svg { transform: scale(1.2); } .event-marker.selected svg { transform: scale(1.4); } .event-marker.selected svg circle:last-child { stroke: var(--color-white); stroke-width: 2; } /* Jet marker */ .jet-marker { z-index: 100; } .jet-marker svg { display: block; } /* Mobile styles */ @media (max-width: 768px) { :root { --header-height: 56px; --timeline-height: 120px; } .header { padding: 0 16px; gap: 8px; } .header h1 { font-size: 1.25rem; } .header .subtitle { font-size: 0.75rem; } /* Hide countdown on mobile to save space */ .countdown-container { display: none; } /* Event card - top position on mobile */ .event-card { top: 8px; bottom: auto; left: 8px; right: 8px; width: auto; border-radius: 8px; padding: 12px; transform: translateY(0); } .event-card.hidden { transform: translateY(-100%); opacity: 0; } .event-card h2 { font-size: 1rem; padding-right: 24px; } /* Mapbox controls */ .mapboxgl-ctrl-top-left { top: 8px; left: 8px; } .mapboxgl-ctrl-group { transform: scale(0.85); transform-origin: top left; } } @media (max-width: 480px) { .header h1 { font-size: 1rem; } .header .subtitle { display: none; } .header-logo { height: 18px; } }