Outiref

Code source de l'URL : http://immolocv2.vercel.app/

<!DOCTYPE html>
<html lang="fr">

<head>
  <meta charset="UTF-8" />
  <!-- Ajout de viewport-fit=cover et interactive-widget=resizes-content pour gérer le clavier virtuel et les encoches -->
  <meta name="viewport"
    content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover, interactive-widget=resizes-content" />
  <!-- Couleur par défaut pour la barre de statut mobile (sera mise à jour par JS) -->
  <meta name="theme-color" content="#f8fafc" />

  <script>
    // Script immédiat pour appliquer le thème avant le rendu (évite le flash et maj la barre d'état au chargement)
    (function () {
      try {
        var savedTheme = localStorage.getItem('immoloc-theme');
        var isDark = savedTheme === 'dark' || !savedTheme;
        var meta = document.querySelector('meta[name="theme-color"]');
        var color = isDark ? '#020617' : '#f8fafc';

        if (isDark) {
          document.documentElement.classList.add('dark');
        } else {
          document.documentElement.classList.remove('dark');
        }

        // Application immédiate de la couleur de fond sur html pour éviter le flash blanc
        document.documentElement.style.backgroundColor = color;

        if (meta) {
          meta.setAttribute('content', color);
        }
      } catch (e) {
        console.error('Erreur application thème immédiat', e);
      }
    })();
  </script>

  <title>Immoloc - Gestion Immobilière</title>
  <script src="https://cdn.tailwindcss.com"></script>
  <script>
    tailwind.config = {
      darkMode: 'class',
      theme: {
        extend: {
          colors: {
            slate: {
              850: '#1e293b',
              950: '#020617',
            }
          },
          animation: {
            'slide-right': 'slideRight 1s ease-out forwards',
            'fade-up': 'fadeUp 0.5s ease-out forwards',
          },
          keyframes: {
            slideRight: {
              '0%': { width: '0%', opacity: '0' },
              '100%': { width: '100%', opacity: '1' },
            },
            fadeUp: {
              '0%': { transform: 'translateY(20px)', opacity: '0' },
              '100%': { transform: 'translateY(0)', opacity: '1' },
            }
          }
        }
      }
    }
  </script>
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link
    href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Outfit:wght@400;500;600;700&family=Roboto+Mono:wght@400;500;600;700&display=swap"
    rel="stylesheet">
  <style>
    /* Configuration racine */
    html {
      background-color: #f8fafc;
      height: 100%;
      height: 100dvh;
      /* Hauteur dynamique pour mobile */
      -webkit-tap-highlight-color: transparent;
    }

    /* Le fond noir doit s'appliquer à tout le document HTML */
    html.dark {
      background-color: #020617;
    }

    body {
      font-family: 'Inter', sans-serif;
      /* Hérite de la couleur de html pour l'overscroll */
      background-color: inherit;
      color: #1e293b;

      /* Layout Fullscreen sans scroll sur le body lui-même */
      margin: 0;
      padding: 0;
      width: 100%;
      height: 100%;
      height: 100dvh;
      /* overflow: hidden; Removed to allow scrolling */
      /* On scroll dans l'app, pas le body */

      /* Fix iOS */
      /* overscroll-behavior: none; Removed to allow scrolling */
      -webkit-font-smoothing: antialiased;
    }

    html.dark body {
      color: #f8fafc;
    }

    /* Custom Scrollbar */
    ::-webkit-scrollbar {
      width: 8px;
    }

    ::-webkit-scrollbar-track {
      background: transparent;
    }

    ::-webkit-scrollbar-thumb {
      background: #cbd5e1;
      border-radius: 4px;
    }

    ::-webkit-scrollbar-thumb:hover {
      background: #94a3b8;
    }

    /* Dark scrollbar */
    html.dark ::-webkit-scrollbar-thumb {
      background: #475569;
    }

    html.dark ::-webkit-scrollbar-thumb:hover {
      background: #64748b;
    }

    /* --- CORRECTIF AUTOFILL NAVIGATEUR --- */
    /* Force le fond blanc et texte noir en mode clair */
    input:-webkit-autofill,
    input:-webkit-autofill:hover,
    input:-webkit-autofill:focus,
    input:-webkit-autofill:active {
      -webkit-box-shadow: 0 0 0 30px white inset !important;
      -webkit-text-fill-color: #0f172a !important;
      /* slate-900 */
      caret-color: #0f172a !important;
      transition: background-color 5000s ease-in-out 0s;
    }

    /* Force le fond gris (slate-800) et texte blanc en mode sombre */
    html.dark input:-webkit-autofill,
    html.dark input:-webkit-autofill:hover,
    html.dark input:-webkit-autofill:focus,
    html.dark input:-webkit-autofill:active {
      -webkit-box-shadow: 0 0 0 30px #1e293b inset !important;
      /* slate-800 hex */
      -webkit-text-fill-color: white !important;
      caret-color: white !important;
    }

    /* --- CUSTOM CHECKBOX --- */
    .custom-checkbox {
      appearance: none;
      background-color: transparent;
      margin: 0;
      font: inherit;
      color: currentColor;
      width: 1.15em;
      height: 1.15em;
      border: 1px solid currentColor;
      border-radius: 0.25em;
      display: grid;
      place-content: center;
      cursor: pointer;
    }

    .custom-checkbox::before {
      content: "";
      width: 0.65em;
      height: 0.65em;
      transform: scale(0);
      transition: 120ms transform ease-in-out;
      box-shadow: inset 1em 1em #6366f1;
      /* Indigo-600 */
      border-radius: 0.15em;
    }

    html.dark .custom-checkbox::before {
      box-shadow: inset 1em 1em #818cf8;
      /* Indigo-400 */
    }

    .custom-checkbox:checked::before {
      transform: scale(1);
    }

    /* --- ANIMATION DELAYS --- */
    .animate-delay-100 {
      animation-delay: 100ms;
    }

    .animate-delay-200 {
      animation-delay: 200ms;
    }

    .animate-delay-300 {
      animation-delay: 300ms;
    }

    .animate-delay-400 {
      animation-delay: 400ms;
    }

    .animate-delay-500 {
      animation-delay: 500ms;
    }

    .animate-delay-600 {
      animation-delay: 600ms;
    }

    .animate-delay-700 {
      animation-delay: 700ms;
    }

    .animate-delay-800 {
      animation-delay: 800ms;
    }

    .animate-delay-900 {
      animation-delay: 900ms;
    }

    .animate-delay-1000 {
      animation-delay: 1000ms;
    }

    .animate-delay-1200 {
      animation-delay: 1200ms;
    }

    .animate-delay-1400 {
      animation-delay: 1400ms;
    }

    .animate-element {
      opacity: 0;
      animation: fadeUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
    }

    .animate-testimonial {
      opacity: 0;
      transform: translateY(20px);
      animation: fadeUp 0.8s cubic-bezier(0.16, 1, 0.3, 1) forwards;
    }

    @keyframes fadeUp {
      from {
        opacity: 0;
        transform: translateY(20px);
      }

      to {
        opacity: 1;
        transform: translateY(0);
      }
    }

    @keyframes slideRight {
      from {
        opacity: 0;
        clip-path: inset(0 100% 0 0);
      }

      to {
        opacity: 1;
        clip-path: inset(0 0 0 0);
      }
    }

    .animate-slide-right {
      animation: slideRight 1s cubic-bezier(0.16, 1, 0.3, 1) forwards;
    }
  </style>

  <script type="importmap">
{
  "imports": {
    "react": "https://aistudiocdn.com/react@^19.2.0",
    "react-dom/": "https://aistudiocdn.com/react-dom@^19.2.0/",
    "react/": "https://aistudiocdn.com/react@^19.2.0/",
    "lucide-react": "https://aistudiocdn.com/lucide-react@^0.554.0",
    "@google/genai": "https://aistudiocdn.com/@google/genai@^1.30.0",
    "recharts": "https://aistudiocdn.com/recharts@^3.4.1",
    "@supabase/supabase-js": "https://aistudiocdn.com/@supabase/supabase-js@^2.83.0",
    "vite": "https://aistudiocdn.com/vite@^7.2.2",
    "@vitejs/plugin-react": "https://aistudiocdn.com/@vitejs/plugin-react@^5.1.1",
    "jspdf": "https://aistudiocdn.com/jspdf@^2.5.1",
    "framer-motion": "https://aistudiocdn.com/framer-motion@^11.18.2",
    "clsx": "https://aistudiocdn.com/clsx@^2.1.1",
    "tailwind-merge": "https://aistudiocdn.com/tailwind-merge@^2.6.0"
  }
}
</script>
  <script type="module" crossorigin src="/assets/index-BjRohp_9.js"></script>
</head>

<body>
  <div id="root"></div>
</body>

</html>