feat(dashboard): boarding-pass hero, atlas row, live widgets + modal portal fix

Reworked dashboard layout: boarding-pass hero with hover + days-left countdown, atlas stats row with real flags, searchable currency widget, editable timezone widget, new-trip FAB. Modals now portal to document.body to avoid inheriting dashboard-scoped button/font styles.
This commit is contained in:
Maurice
2026-05-26 23:12:08 +02:00
parent e04ceeb1ee
commit 98032fda0c
10 changed files with 1163 additions and 1067 deletions
@@ -1,4 +1,5 @@
import React, { useEffect, useCallback } from 'react'
import ReactDOM from 'react-dom'
import { Check, X } from 'lucide-react'
import { useTranslation } from '../../i18n'
@@ -39,7 +40,7 @@ export default function CopyTripDialog({ isOpen, tripTitle, onClose, onConfirm }
if (!isOpen) return null
return (
return ReactDOM.createPortal(
<div
className="fixed inset-0 z-[10000] flex items-center justify-center px-4 trek-backdrop-enter"
style={{ backgroundColor: 'rgba(15, 23, 42, 0.5)', paddingBottom: 'var(--bottom-nav-h)' }}
@@ -97,12 +98,14 @@ export default function CopyTripDialog({ isOpen, tripTitle, onClose, onConfirm }
</button>
<button
onClick={() => { onConfirm(); onClose() }}
className="px-4 py-2 text-sm font-medium rounded-lg transition-colors text-white bg-blue-600 hover:bg-blue-700"
className="px-4 py-2 text-sm font-medium rounded-lg transition-opacity hover:opacity-90"
style={{ background: 'var(--text-primary)', color: 'var(--bg-card)' }}
>
{t('dashboard.confirm.copy.confirm')}
</button>
</div>
</div>
</div>
</div>,
document.body
)
}