@tailwind base; @tailwind components; @tailwind utilities; * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Inter', system-ui, -apple-system, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; background: #0F172A; color: #F8FAFC; /* GPU acceleration for smooth scrolling */ -webkit-overflow-scrolling: touch; } /* ─── Performance: GPU-accelerated transforms ───────────────────────────── */ .glass, .card, [class*="animate-"] { will-change: transform, opacity; transform: translateZ(0); backface-visibility: hidden; } /* ─── MapLibre popup overrides — dark premium theme ──────────────────────── */ .maplibregl-popup-content { padding: 0 !important; border-radius: 16px !important; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(51, 65, 85, 0.4) !important; overflow: hidden; max-width: 360px !important; background: #1E293B !important; border: 1px solid #334155 !important; } .maplibregl-popup-close-button { font-size: 18px; padding: 4px 8px; color: #94A3B8; z-index: 10; right: 4px !important; top: 4px !important; transition: all 0.15s ease; } .maplibregl-popup-close-button:hover { color: #F8FAFC; background: #334155; border-radius: 6px; } .maplibregl-popup-tip { display: none; } .maplibregl-ctrl-group { background: #1E293B !important; border: 1px solid #334155 !important; border-radius: 12px !important; overflow: hidden; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3) !important; } .maplibregl-ctrl-group button { background: #1E293B !important; border-color: #334155 !important; transition: background 0.15s ease; } .maplibregl-ctrl-group button:hover { background: #334155 !important; } .maplibregl-ctrl-group button .maplibregl-ctrl-icon { filter: invert(1); } /* ─── Custom scrollbar — thin & subtle ───────────────────────────────────── */ ::-webkit-scrollbar { width: 4px; } ::-webkit-scrollbar-track { background: transparent; } ::-webkit-scrollbar-thumb { background: #475569; border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { background: #64748B; } .scrollbar-thin::-webkit-scrollbar { width: 3px; } /* ─── Animations — 60fps GPU-accelerated ─────────────────────────────────── */ @keyframes slideInLeft { from { transform: translate3d(-100%, 0, 0); opacity: 0; } to { transform: translate3d(0, 0, 0); opacity: 1; } } @keyframes slideInRight { from { transform: translate3d(100%, 0, 0); opacity: 0; } to { transform: translate3d(0, 0, 0); opacity: 1; } } @keyframes fadeIn { from { opacity: 0; transform: translate3d(0, 8px, 0); } to { opacity: 1; transform: translate3d(0, 0, 0); } } @keyframes slideUp { from { transform: translate3d(0, 100%, 0); opacity: 0; } to { transform: translate3d(0, 0, 0); opacity: 1; } } @keyframes scaleIn { from { transform: scale(0.95); opacity: 0; } to { transform: scale(1); opacity: 1; } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } .animate-slide-in-left { animation: slideInLeft 0.25s cubic-bezier(0.16, 1, 0.3, 1); } .animate-slide-in-right { animation: slideInRight 0.25s cubic-bezier(0.16, 1, 0.3, 1); } .animate-fade-in { animation: fadeIn 0.2s ease-out; } .animate-slide-up { animation: slideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1); } .animate-scale-in { animation: scaleIn 0.2s cubic-bezier(0.16, 1, 0.3, 1); } /* ─── Glass panel — premium flat dark ────────────────────────────────────── */ .glass { background: rgba(30, 41, 59, 0.95); border: 1px solid rgba(51, 65, 85, 0.6); backdrop-filter: none; /* No blur = no lag */ } /* ─── Interactive micro-effects ──────────────────────────────────────────── */ button { transition: transform 0.1s ease, background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease; } button:active:not(:disabled) { transform: scale(0.97); } /* Hover lift for cards */ .card-hover { transition: transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.2s ease; } .card-hover:hover { transform: translateY(-2px); box-shadow: 0 8px 25px -5px rgba(0, 0, 0, 0.3); } /* ─── Brand colors ───────────────────────────────────────────────────────── */ .gradient-text { color: #F97316; } .unicorn-badge { color: #F97316; font-weight: 700; } /* ─── Utility classes ────────────────────────────────────────────────────── */ .line-clamp-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } .line-clamp-3 { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; } /* ─── Skeleton loading ───────────────────────────────────────────────────── */ .skeleton { background: linear-gradient(90deg, #1E293B 25%, #334155 50%, #1E293B 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: 8px; } /* ─── Focus ring for accessibility ───────────────────────────────────────── */ :focus-visible { outline: 2px solid #F97316; outline-offset: 2px; border-radius: 4px; } /* ─── Reduce motion for accessibility ────────────────────────────────────── */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } }