Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| :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; | |
| } | |
| } | |