diff --git a/app/public/favicon.svg b/app/public/favicon.svg index 6893eb1..23c2f0a 100644 --- a/app/public/favicon.svg +++ b/app/public/favicon.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + + + diff --git a/app/src/App.tsx b/app/src/App.tsx index b8635cd..265eab2 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -6,7 +6,6 @@ import { PhotosView } from './components/photos/PhotosView'; import { SettingsView } from './components/settings/SettingsView'; import { NavigationProvider, useNavigation } from './contexts/NavigationContext'; import { SessionProvider, useSession } from './contexts/SessionContext'; -import { ThemeProvider } from './contexts/ThemeContext'; /** Content router — a plain state switch (NavigationContext.nav), no react-router. */ function AppContent() { @@ -41,10 +40,8 @@ function Root() { export default function App() { return ( - - - - - + + + ); } diff --git a/app/src/components/auth/AuthBackground.tsx b/app/src/components/auth/AuthBackground.tsx index 0c9d904..59f7e24 100644 --- a/app/src/components/auth/AuthBackground.tsx +++ b/app/src/components/auth/AuthBackground.tsx @@ -1,46 +1,55 @@ -import { BACKGROUND_SCENES } from '../../lib/backgrounds'; +import { BACKGROUND_PHOTOS } from '../../lib/backgrounds'; import { useBackgroundCrossfade } from '../../hooks/useBackgroundCrossfade'; +/** + * Photos hotlinkées depuis Unsplash (jamais copiées sur notre serveur) — + * requis par leur charte développeur. L'attribution ci-dessous (nom du + * photographe + Unsplash, tous deux liés) est également requise, pas + * décorative : elle doit rester visible en permanence, pas seulement + * au survol. + */ export function AuthBackground() { const activeIndex = useBackgroundCrossfade(); + const active = BACKGROUND_PHOTOS[activeIndex]; return ( -
- {BACKGROUND_SCENES.map((scene, i) => ( -
- {scene.blobs.map((blob, bi) => ( -
- ))} -
+
+ {BACKGROUND_PHOTOS.map((photo, i) => ( + ))} - {/* Grain léger : casse l'effet "dégradé plat", donne une texture - plus organique - technique courante sur les fonds génératifs. */} - + {/* Voile sombre pour garantir la lisibilité du texte clair par-dessus + une vraie photo, plus prononcé à gauche où vit le contenu. */} +
+
- {/* Léger éclaircissement côté texte (gauche) pour garantir le - contraste de l'encre noire, sans jamais assombrir le fond. */} -
+
+ Photo par{' '} + + {active.photographerName} + {' '} + sur{' '} + + Unsplash + +
); } diff --git a/app/src/components/auth/AuthLayout.tsx b/app/src/components/auth/AuthLayout.tsx index 384a34c..3dbb021 100644 --- a/app/src/components/auth/AuthLayout.tsx +++ b/app/src/components/auth/AuthLayout.tsx @@ -1,43 +1,38 @@ import { AuthBackground } from './AuthBackground'; import { AuthPanel } from './AuthPanel'; -import { DoodleArrow, DoodleSquiggle } from './Doodle'; import { TripoliLogo, TripoliWordmark } from '../layout/TripoliLogo'; export function AuthLayout() { return ( -
+
-
+
-
- - +
+ Coffre-fort en ligne -

+

Vos documents,
- - sous clé. - + sous clé.

-

+

Documents, photos et sauvegardes sur un serveur que vous contrôlez.

-
-
+
Tripoli Cloud — 2026 Hébergé sur votre propre serveur Sans publicité, sans traçage diff --git a/app/src/components/auth/Doodle.tsx b/app/src/components/auth/Doodle.tsx deleted file mode 100644 index 63b0333..0000000 --- a/app/src/components/auth/Doodle.tsx +++ /dev/null @@ -1,35 +0,0 @@ -/** Petits traits dessinés à la main, en accent décoratif - inspirés du - * ton "studiocart.co" : jamais informatifs, purement une touche humaine - * dans une interface par ailleurs très structurée. */ -export function DoodleSquiggle({ className }: { className?: string }) { - return ( - - ); -} - -export function DoodleArrow({ className }: { className?: string }) { - return ( - - ); -} diff --git a/app/src/components/layout/TopBar.tsx b/app/src/components/layout/TopBar.tsx index 70701cb..82f685c 100644 --- a/app/src/components/layout/TopBar.tsx +++ b/app/src/components/layout/TopBar.tsx @@ -1,11 +1,9 @@ -import { Menu, Moon, Search, Sun } from 'lucide-react'; -import { useTheme } from '../../contexts/ThemeContext'; +import { Menu, Search } from 'lucide-react'; import { useNavigation } from '../../contexts/NavigationContext'; import { useIsMobile } from '../../hooks/useIsMobile'; import { NotificationCenter } from '../notifications/NotificationCenter'; export function TopBar() { - const { theme, toggleTheme } = useTheme(); const { openDrawer } = useNavigation(); const isMobile = useIsMobile(); @@ -32,14 +30,6 @@ export function TopBar() {
-
diff --git a/app/src/components/layout/TripoliLogo.tsx b/app/src/components/layout/TripoliLogo.tsx index c3b7afa..da281bf 100644 --- a/app/src/components/layout/TripoliLogo.tsx +++ b/app/src/components/layout/TripoliLogo.tsx @@ -5,8 +5,8 @@ interface TripoliLogoProps { /** Minimalist inline SVG mark — no external asset, easy to swap later. */ export function TripoliLogo({ size = 28, variant = 'sidebar' }: TripoliLogoProps) { - const badgeFill = variant === 'hero' ? 'rgba(23,20,14,0.05)' : 'rgba(91,140,255,0.14)'; - const badgeStroke = variant === 'hero' ? 'rgba(23,20,14,0.16)' : 'rgba(91,140,255,0.36)'; + const badgeFill = variant === 'hero' ? 'rgba(255,255,255,0.12)' : 'rgba(91,140,255,0.14)'; + const badgeStroke = variant === 'hero' ? 'rgba(255,255,255,0.28)' : 'rgba(91,140,255,0.36)'; return (