a1860e9462
- CarteController : index() + data() (JSON) — requête lieux géolocalisés
ayant des sources avec relevés, agrégats par lieu
- Lieu model : relations sources() et releves() (hasManyThrough)
- Vue carte/index.blade.php : carte Leaflet pleine hauteur, marqueurs
colorés par nombre de sources (taille/couleur proportionnels),
popup par lieu avec liste des sources, statuts, années et lien recherche
- Tuiles OpenStreetMap inversées en mode sombre
- Route GET /carte + GET /carte/data
- Lien "Carte" dans la navigation desktop et mobile
- @stack('head') dans le layout pour injecter Leaflet uniquement sur la page carte
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
56 lines
2.1 KiB
PHP
56 lines
2.1 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
|
|
|
<title>{{ config('app.name', 'MesRelevés') }}</title>
|
|
|
|
@if($siteLogoUrl)
|
|
<link rel="icon" href="{{ $siteLogoUrl }}">
|
|
@endif
|
|
|
|
<!-- Dark mode init — must run before first paint to avoid flash -->
|
|
<script>
|
|
(function () {
|
|
var t = localStorage.getItem('colorTheme') || 'auto';
|
|
var dark = t === 'dark' || (t === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
document.documentElement.classList.toggle('dark', dark);
|
|
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function (e) {
|
|
if ((localStorage.getItem('colorTheme') || 'auto') === 'auto') {
|
|
document.documentElement.classList.toggle('dark', e.matches);
|
|
}
|
|
});
|
|
})();
|
|
</script>
|
|
|
|
<!-- Fonts -->
|
|
<link rel="preconnect" href="https://fonts.bunny.net">
|
|
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
|
|
|
<!-- Scripts -->
|
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
@stack('head')
|
|
</head>
|
|
<body class="font-sans antialiased bg-gray-100 dark:bg-gray-900 text-gray-900 dark:text-gray-100">
|
|
<div class="min-h-screen">
|
|
@include('layouts.navigation')
|
|
|
|
<!-- Page Heading -->
|
|
@isset($header)
|
|
<header class="bg-white dark:bg-gray-800 shadow dark:shadow-gray-900/50">
|
|
<div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">
|
|
{{ $header }}
|
|
</div>
|
|
</header>
|
|
@endisset
|
|
|
|
<!-- Page Content -->
|
|
<main>
|
|
{{ $slot }}
|
|
</main>
|
|
</div>
|
|
</body>
|
|
</html>
|