@import url('https://api.fontshare.com/v2/css?f[]=general-sans@600,700&display=swap'); @import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap'); :root { --genesis-primary: #6366f1; --genesis-primary-hover: #4f46e5; --genesis-secondary: #20970b; --genesis-neutral: #9c9c9c; --genesis-bg: #fafafa; --genesis-surface: #ffffff; --genesis-text: #0a0a0a; --genesis-text-secondary: #6b6b6b; --genesis-border: #e8e8ec; --genesis-success: #10b981; --genesis-warning: #f59e0b; --genesis-error: #ef4444; --app-sidebar-width: 280px; --app-mobile-bar-height: 58px; } html, body { background: var(--genesis-bg) !important; color: var(--genesis-text); font-family: 'DM Sans', ui-sans-serif, system-ui, sans-serif !important; font-size: 15px; font-weight: 400 !important; } * { letter-spacing: 0 !important; } h1, h2, h3, h4, h5, h6, .card-title, .stat-value { color: var(--genesis-text); font-family: 'General Sans', 'DM Sans', ui-sans-serif, system-ui, sans-serif !important; font-weight: 700 !important; } code, kbd, pre, .font-mono { font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace !important; } .text-primary, .btn-ghost.text-primary, .menu a.text-primary { color: var(--genesis-primary) !important; } main h1 i.text-primary, main h2 i.text-primary, main h3 i.text-primary, .card h3 i.text-primary, .modal-box h3 i.text-primary, .stat-figure.text-success, .stat-figure.text-warning, .stat-figure.text-error, .stat-figure.text-info { color: var(--genesis-text) !important; } .text-secondary, .text-info { color: var(--genesis-text-secondary) !important; } .text-success { color: var(--genesis-success) !important; } .text-warning { color: var(--genesis-warning) !important; } .text-error { color: var(--genesis-error) !important; } .bg-primary, .badge-primary { background-color: var(--genesis-primary) !important; border-color: var(--genesis-primary) !important; color: #fff !important; } .bg-base-100, .bg-white { background-color: var(--genesis-surface) !important; } .bg-base-200, .bg-base-200\/50 { background-color: var(--genesis-bg) !important; } .border-base-200, .border-base-300, .border-base-content\/10 { border-color: var(--genesis-border) !important; } .text-base-content\/50, .text-base-content\/60, .opacity-50 { color: var(--genesis-text-secondary) !important; } .shadow, .shadow-sm, .shadow-lg, .shadow-xl, .shadow-2xl { box-shadow: none !important; } .rounded-box, .rounded-lg, .rounded-xl, .rounded-2xl, .rounded-3xl, .modal-box, .card, .stat, .tab-content { border-radius: 8px !important; } .app-sidebar-toggle { position: fixed; opacity: 0; pointer-events: none; } .app-mobile-bar { display: none; } .app-sidebar { position: fixed; inset: 0 auto 0 0; z-index: 1200; width: var(--app-sidebar-width); display: flex; flex-direction: column; gap: 18px; padding: 18px; background: rgba(255, 255, 255, 0.94); border-right: 1px solid var(--genesis-border); backdrop-filter: blur(16px); } .app-sidebar-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; } .app-sidebar-brand, .app-mobile-brand { display: inline-flex; align-items: center; min-width: 0; gap: 10px; color: var(--genesis-text) !important; text-decoration: none; } .app-brand-icon { display: grid; width: 38px; height: 38px; flex: 0 0 auto; place-items: center; border: 1px solid var(--genesis-border); border-radius: 8px; background: var(--genesis-surface); color: var(--genesis-text); } .app-brand-copy, .app-user-copy { min-width: 0; } .app-brand-title, .app-user-name { display: block; overflow: hidden; color: var(--genesis-text); font-size: 14px; font-weight: 700; line-height: 1.2; text-overflow: ellipsis; white-space: nowrap; } .app-brand-subtitle, .app-user-role { display: block; overflow: hidden; color: var(--genesis-text-secondary); font-size: 12px; font-weight: 500; line-height: 1.4; text-overflow: ellipsis; text-transform: capitalize; white-space: nowrap; } .app-sidebar-close { display: none !important; } .app-sidebar-nav { display: flex; min-height: 0; flex: 1 1 auto; flex-direction: column; gap: 20px; overflow-y: auto; padding-right: 2px; } .app-nav-section { display: flex; flex-direction: column; gap: 6px; } .app-nav-section-title { padding: 0 10px 4px; color: var(--genesis-neutral); font-size: 11px; font-weight: 700; text-transform: uppercase; } .app-nav-link { display: flex; align-items: center; gap: 10px; min-height: 42px; padding: 0 11px; border: 1px solid transparent; border-radius: 8px; color: var(--genesis-text-secondary); font-size: 14px; font-weight: 600; text-decoration: none; transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease; } .app-nav-link i { width: 18px; flex: 0 0 18px; text-align: center; } .app-nav-link span:not(.badge) { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .app-nav-link:hover { background: #f3f3f5; color: var(--genesis-text); } .app-nav-link.is-active { background: rgba(99, 102, 241, 0.1); border-color: rgba(99, 102, 241, 0.2); color: var(--genesis-primary); } .app-nav-badge { margin-left: auto; } .app-sidebar-footer { display: flex; flex-direction: column; gap: 10px; border-top: 1px solid var(--genesis-border); padding-top: 14px; } .app-user-card { display: flex; align-items: center; min-width: 0; gap: 10px; } .app-logout-button { display: flex; align-items: center; justify-content: center; width: 100%; min-height: 38px; gap: 8px; border: 1px solid var(--genesis-border); border-radius: 8px; background: var(--genesis-surface); color: var(--genesis-error); font-size: 14px; font-weight: 700; cursor: pointer; } .app-logout-button:hover { background: rgba(239, 68, 68, 0.08); border-color: rgba(239, 68, 68, 0.22); } .app-main { min-height: 100vh; margin-left: var(--app-sidebar-width); } .app-map-body { height: 100vh !important; display: block !important; overflow: hidden !important; } .map-wrapper.app-map-main { height: 100vh; min-height: 100vh; margin-left: var(--app-sidebar-width); } .app-sidebar-backdrop { display: none; } .menu.menu-horizontal { gap: 4px !important; min-width: 0; width: 100%; display: flex !important; flex-wrap: nowrap !important; justify-content: center; overflow-x: auto; overflow-y: hidden; scrollbar-width: none; } .menu.menu-horizontal::-webkit-scrollbar { display: none; } .menu a, .dropdown-content .menu a { border-radius: 6px !important; color: var(--genesis-text-secondary); font-size: 14px; font-weight: 500 !important; white-space: nowrap; flex-wrap: nowrap !important; } .menu a:hover, .btn-ghost:hover { background: #f3f3f5 !important; color: var(--genesis-text) !important; } .menu a.bg-primary\/10, .menu a.font-semibold { background: rgba(99, 102, 241, 0.1) !important; color: var(--genesis-primary) !important; } .btn { min-height: 38px; border-radius: 6px !important; font-family: 'DM Sans', ui-sans-serif, system-ui, sans-serif !important; font-size: 14px; font-weight: 600 !important; text-transform: none !important; transition: transform 160ms ease, box-shadow 160ms ease, background-color 160ms ease, border-color 160ms ease, color 160ms ease; } .btn:hover { transform: translateY(-1px); } .btn-primary { background: var(--genesis-primary) !important; border-color: var(--genesis-primary) !important; color: #fff !important; } .btn-primary:hover { background: var(--genesis-primary-hover) !important; border-color: var(--genesis-primary-hover) !important; box-shadow: 0 4px 12px rgba(99, 102, 241, 0.35) !important; } .btn-outline { background: transparent !important; border-color: var(--genesis-border) !important; color: var(--genesis-text) !important; } .btn-outline:hover, .btn-active { background: #f3f3f5 !important; border-color: var(--genesis-primary) !important; color: var(--genesis-primary) !important; } .btn-success { background: var(--genesis-success) !important; border-color: var(--genesis-success) !important; color: #fff !important; } .btn-warning, .btn-info { background: transparent !important; border-color: var(--genesis-border) !important; color: var(--genesis-text) !important; } .btn-warning:hover, .btn-info:hover { background: rgba(99, 102, 241, 0.1) !important; border-color: rgba(99, 102, 241, 0.2) !important; color: var(--genesis-primary) !important; } .btn-error { background: var(--genesis-error) !important; border-color: var(--genesis-error) !important; color: #fff !important; } .card, .stat, .modal-box, .tab-content, .dropdown-content, .table-shell, .glass-card, .map-panel { background: var(--genesis-surface) !important; border: 1px solid var(--genesis-border) !important; } .card, .stat, .tab-content, .table-shell, .glass-card, .map-panel { box-shadow: none !important; } .card:hover, .stat:hover, .table-shell:hover { box-shadow: 0 8px 30px rgba(0, 0, 0, 0.08) !important; transform: translateY(-2px); } .card, .stat, .table-shell { transition: transform 200ms ease, box-shadow 200ms ease; } .stat { padding: 20px !important; } .stat-figure { color: var(--genesis-text-secondary) !important; opacity: 0.82; } .stat-title { color: var(--genesis-neutral) !important; font-size: 11px !important; font-weight: 700 !important; letter-spacing: 0 !important; text-transform: uppercase; } .stat-value { font-size: 32px !important; line-height: 1.1 !important; color: var(--genesis-text) !important; } .input, .select, .textarea { min-height: 38px; border-radius: 6px !important; border-color: var(--genesis-border) !important; background: var(--genesis-surface) !important; color: var(--genesis-text) !important; font-size: 14px !important; } .input:focus, .select:focus, .textarea:focus { border-color: var(--genesis-primary) !important; box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12) !important; outline: none !important; } .label-text { color: var(--genesis-text); font-size: 13px !important; font-weight: 600 !important; } .badge { border-radius: 9999px !important; font-size: 12px !important; font-weight: 600 !important; } .badge-success { background: rgba(16, 185, 129, 0.12) !important; border-color: rgba(16, 185, 129, 0.25) !important; color: #047857 !important; } .badge-warning { background: rgba(245, 158, 11, 0.14) !important; border-color: rgba(245, 158, 11, 0.28) !important; color: #92400e !important; } .badge-error { background: rgba(239, 68, 68, 0.12) !important; border-color: rgba(239, 68, 68, 0.25) !important; color: #b91c1c !important; } .table { color: var(--genesis-text); font-size: 13px; } .table thead tr { border-color: var(--genesis-border); } .table th { color: var(--genesis-neutral); font-size: 11px; font-weight: 700 !important; text-transform: uppercase; } .table td, .table th { border-color: var(--genesis-border) !important; padding-block: 12px !important; } .table-zebra tbody tr:nth-child(even) { background: #f7f7f8 !important; } .tabs { gap: 6px; } .tab { border-radius: 6px !important; color: var(--genesis-text-secondary) !important; font-size: 14px !important; font-weight: 600 !important; } .tab:is(:checked), .tab-active { color: var(--genesis-primary) !important; } .genesis-tabs { display: flex; flex-direction: column; gap: 12px; margin-bottom: 24px; } .genesis-tab-list { display: inline-flex; width: fit-content; max-width: 100%; gap: 8px; padding: 4px; border: 1px solid var(--genesis-border); border-radius: 8px; background: var(--genesis-surface); overflow-x: auto; } .genesis-tab-button { display: inline-flex; align-items: center; justify-content: center; min-width: 148px; height: 38px; padding: 0 16px; border: 1px solid transparent; border-radius: 6px; color: var(--genesis-text-secondary); background: transparent; font-size: 14px; font-weight: 600; white-space: nowrap; transition: background-color 160ms ease, border-color 160ms ease, color 160ms ease; } .genesis-tab-button:hover { background: #f3f3f5; color: var(--genesis-text); } .genesis-tab-button.is-active { background: rgba(99, 102, 241, 0.1); border-color: rgba(99, 102, 241, 0.2); color: var(--genesis-primary); } .genesis-tab-panel { border: 1px solid var(--genesis-border); border-radius: 8px; background: var(--genesis-surface); overflow: hidden; } .modal-box { box-shadow: 0 18px 55px rgba(0, 0, 0, 0.14) !important; } .modal-box .text-5xl { font-size: 32px !important; line-height: 1.1 !important; } .alert { border-radius: 8px !important; border: 1px solid var(--genesis-border) !important; box-shadow: none !important; } .toast .alert { background: var(--genesis-surface) !important; color: var(--genesis-text) !important; } .checkbox { border-radius: 9999px !important; border-color: #d4d4d8 !important; } .checkbox:checked { background-color: var(--genesis-primary) !important; border-color: var(--genesis-primary) !important; } .leaflet-control-layers, .leaflet-control-zoom a { border-color: var(--genesis-border) !important; box-shadow: none !important; font-family: 'DM Sans', ui-sans-serif, system-ui, sans-serif !important; } .leaflet-popup-content-wrapper, .leaflet-popup-tip { border-radius: 8px !important; box-shadow: 0 8px 30px rgba(0, 0, 0, 0.08) !important; } .genesis-overline { color: var(--genesis-neutral); font-size: 11px; font-weight: 700; text-transform: uppercase; } .genesis-section-title { color: var(--genesis-text); font-family: 'General Sans', 'DM Sans', ui-sans-serif, system-ui, sans-serif; font-size: 32px; font-weight: 700; } @media (max-width: 1024px) { .app-mobile-bar { position: fixed; inset: 0 0 auto 0; z-index: 1150; display: flex; align-items: center; justify-content: space-between; height: var(--app-mobile-bar-height); padding: 0 14px; background: rgba(255, 255, 255, 0.94); border-bottom: 1px solid var(--genesis-border); backdrop-filter: blur(16px); } .app-mobile-brand { font-size: 15px; font-weight: 700; } .app-sidebar { width: min(82vw, var(--app-sidebar-width)); transform: translateX(-100%); transition: transform 200ms ease; } .app-sidebar-close { display: inline-flex !important; } .app-sidebar-toggle:checked ~ .app-sidebar { transform: translateX(0); } .app-sidebar-toggle:checked ~ .app-sidebar-backdrop { position: fixed; inset: 0; z-index: 1190; display: block; background: rgba(10, 10, 10, 0.36); } .app-main { margin-left: 0; padding-top: var(--app-mobile-bar-height); } .map-wrapper.app-map-main { height: 100vh; min-height: 100vh; margin-left: 0; } .floating-panel { top: calc(var(--app-mobile-bar-height) + 14px); left: 12px; width: min(316px, calc(100vw - 24px)); max-height: calc(100vh - var(--app-mobile-bar-height) - 32px); } .app-map-body .leaflet-top { top: var(--app-mobile-bar-height); } } @media (max-width: 768px) { .stat-value { font-size: 26px !important; } .genesis-tabs { grid-template-columns: repeat(2, minmax(0, 1fr)); } .genesis-tabs > .tab { min-width: 0; } }