:root{--primary-50: #ecfdf5;--primary-100: #d1fae5;--primary-200: #a7f3d0;--primary-300: #6ee7b7;--primary-400: #34d399;--primary-500: #10b981;--primary-600: #059669;--primary-700: #047857;--primary-800: #065f46;--primary-900: #064e3b;--accent-blue: #22d3ee;--primary-gradient: linear-gradient(135deg, #10b981 0%, #22d3ee 100%);--gray-50: #f9fafb;--gray-100: #f3f4f6;--gray-200: #e5e7eb;--gray-300: #d1d5db;--gray-400: #9ca3af;--gray-500: #6b7280;--gray-600: #4b5563;--gray-700: #374151;--gray-800: #1f2937;--gray-900: #111827;--success: #10b981;--warning: #f59e0b;--danger: #ef4444;--info: #3b82f6;--header-bg: rgba(255, 255, 255, .2);--header-border: rgba(16, 185, 129, .2);--header-text: #1f2937;--header-icon: #64748b;--header-icon-hover: #059669;--sidebar-bg: rgba(255, 255, 255, .4);--page-bg: #f8fafc;--sidebar-width: 260px;--topbar-height: 64px;--card-radius: 16px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05)}.dark{--header-bg: rgba(15, 23, 42, .4);--header-border: rgba(34, 211, 238, .15);--header-text: #f1f5f9;--header-icon: rgba(255, 255, 255, .8);--header-icon-hover: #f1f5f9;--sidebar-bg: rgba(15, 23, 42, .4);--page-bg: #020617}body{margin:0;font-family:Inter,Outfit,sans-serif;background-color:var(--gray-100);color:var(--gray-700);-webkit-font-smoothing:antialiased}*{box-sizing:border-box}a{text-decoration:none;color:inherit;transition:all .2s}.layout{display:flex;min-height:100vh}#page-content{opacity:1;transition:opacity .3s ease-in-out}body.page-transition #page-content{opacity:0}.active-nav-button{background:var(--primary-gradient);box-shadow:0 4px 12px #10b98133}.creative-mode-map .maplibregl-canvas{cursor:crosshair!important}@keyframes bridged-blink{0%,to{transform:scale(.98);border-color:transparent}50%{transform:scale(.95);border-color:#f97316;box-shadow:0 0 20px #f9731666}}.animate-bridged-blink{animation:bridged-blink 1s infinite ease-in-out}@keyframes marker-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-10px)}}.animate-marker-bounce{animation:marker-bounce .6s infinite ease-in-out}
