{"id":2800,"date":"2022-10-12T09:37:55","date_gmt":"2022-10-12T07:37:55","guid":{"rendered":"https:\/\/www.06planet.org\/?page_id=2800"},"modified":"2025-08-09T02:31:47","modified_gmt":"2025-08-09T00:31:47","slug":"autopartage","status":"publish","type":"page","link":"https:\/\/www.06planet.org\/fr\/autopartage\/","title":{"rendered":"Autopartage"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2800\" class=\"elementor elementor-2800\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-35dab32 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"35dab32\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-845bdfb\" data-id=\"845bdfb\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-80057e4 elementor-widget elementor-widget-html\" data-id=\"80057e4\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n\n<html lang=\"fr\">\n<head>\n<meta charset=\"utf-8\"\/>\n<meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\"\/>\n<title>Autopartage \u00c9covillage<\/title>\n<style>\n    :root {\n      --primary-color: #537D85;\n      --accent-color: #00a39a;\n      --background: #f4f7f6;\n      --text-color: #333;\n      --header-bg: #00585e;\n      --nav-bg: #00787a;\n    }\n\n    * {\n      box-sizing: border-box;\n    }\n\n    body {\n      font-family: \"Helvetica Neue\", sans-serif;\n      margin: 0;\n      background: var(--background);\n      color: var(--text-color);\n      line-height: 1.6;\n    }\n\n    header {\n      background-color: var(--header-bg);\n      padding: 1em;\n      text-align: center;\n      color: white;\n    }\n\n    nav {\n      display: flex;\n      background-color: var(--nav-bg);\n      flex-wrap: wrap;\n    }\n\n    nav button {\n      flex: 1;\n      padding: 1em;\n      border: none;\n      background-color: var(--nav-bg);\n      color: white;\n      cursor: pointer;\n      font-size: 1em;\n      transition: background-color 0.3s ease;\n    }\n\n    nav button.active, nav button:hover {\n      background-color: var(--accent-color);\n    }\n\n    section {\n      display: none;\n      padding: 1em;\n      animation: fadeIn 0.3s ease-in-out;\n    }\n\n    section.active {\n      display: block;\n    }\n\n    @keyframes fadeIn {\n      from { opacity: 0; }\n      to { opacity: 1; }\n    }\n\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      margin-top: 1em;\n    }\n\n    th, td {\n      text-align: center;\n      border: 1px solid #ccc;\n      padding: 0.5em;\n    }\n\n    th {\n      background-color: #e0f2f1;\n    }\n\n    .section-container {\n      max-width: 450px;\n      margin: 0 auto;\n    }\n\n    .section-container h2 {\n      text-align: center;\n      margin-bottom: 1em;\n    }\n\n    form {\n      width: 100%;\n    }\n\n    .form-group {\n      margin: 1em 0;\n    }\n\n    label {\n      display: block;\n      margin-bottom: 0.3em;\n      font-weight: bold;\n    }\n\n    select,\n    input[type=\"date\"],\n    input[type=\"time\"],\n    input[type=\"text\"],\n    input[type=\"datetime-local\"],\n    input[type=\"number\"] {\n      padding: 0.6em;\n      border: 1px solid #ccc;\n      border-radius: 6px;\n      font-size: 1em;\n      width: 100%;\n    }\n\n    button.submit {\n      margin-top: 1em;\n      background-color: var(--accent-color);\n      color: white;\n      border: none;\n      padding: 0.9em;\n      border-radius: 6px;\n      font-size: 1em;\n      cursor: pointer;\n      width: 100%;\n    }\n\n    .hidden {\n      display: none;\n    }\n\n    @media screen and (max-width: 600px) {\n      nav button {\n        font-size: 0.9em;\n        padding: 0.8em;\n      }\n\n      header h1 {\n        font-size: 1.2em;\n      }\n    }\n\n    #covoit-buttons {\n      text-align: center;\n      margin-bottom: 1em;\n    }\n\n    #covoit-utilisateur-select {\n      display: inline-block;\n      max-width: 300px;\n      margin: 0 auto 1em auto;\n    }\n\n    #covoiturage-table-container {\n      max-width: 800px;\n      margin: 2em auto;\n    }\n\n    #covoiturage-table td:first-child {\n      width: 40px;\n    }\n\n    #covoiturage-table table {\n      border-collapse: collapse;\n      margin: 0 auto; \/* Centrage horizontal *\/\n      width: auto;\n    }\n\n    #covoiturage-table th,\n    #covoiturage-table td {\n      border: 1px solid #ccc;\n      padding: 8px 12px;\n      text-align: center;\n    }\n\n    #btn-covoiturer {\n      display: inline-block;\n    }\n\n    #covoiturage-actions,\n    #covoituer-btn-container {\n      text-align: center;\n      margin: 1em auto;\n    }\n\n    #covoit-user-select {\n      padding: 0.5em;\n      font-size: 1em;\n    }\n\n    #selection-utilisateur {\n      max-width: 450px;\n      margin: 1em auto;\n    }\n\n    #selection-utilisateur select {\n      width: 100%;\n      padding: 0.6em;\n      border: 1px solid #ccc;\n      border-radius: 6px;\n      font-size: 1em;\n    }\n  <\/style>\n<!-- Vis.js Timeline -->\n<link href=\"https:\/\/unpkg.com\/vis-timeline@7.7.0\/styles\/vis-timeline-graph2d.min.css\" rel=\"stylesheet\"\/>\n<script src=\"https:\/\/unpkg.com\/vis-timeline@7.7.0\/standalone\/umd\/vis-timeline-graph2d.min.js\"><\/script>\n<\/head>\n<body>\n<header>\n<h1>\ud83d\ude97 Autopartage - Les Gilats 0.6Planet\ud83c\udf3b<\/h1>\n<\/header>\n<nav>\n<button class=\"tab active\">Flotte<\/button>\n<button class=\"tab\">Covoiturer<\/button>\n<button class=\"tab\">R\u00e9server<\/button>\n<button class=\"tab\">Emprunter<\/button>\n<button class=\"tab\">Restituer<\/button>\n<button class=\"tab\">Facturer<\/button>\n<\/nav>\n<section class=\"active\" id=\"flotte\">\n<div class=\"section-container\">\n<h2 style=\"text-align: center; margin-top: 2em;\">Calendrier des r\u00e9servations<\/h2>\n<div id=\"reservation-calendar\" style=\"height: 300px; margin-bottom: 2em;\">Chargement\u2026<\/div>\n<div class=\"form-group\">\n<br\/>\n<h2 style=\"text-align: center;\">Positions estim\u00e9es de la Flotte \u00e0 la date du :<\/h2>\n<input id=\"flotte-date\" type=\"date\"\/>\n<\/div>\n<div id=\"flotte-table\">Chargement...<\/div>\n<!-- Covoiturage -->\n<h2 style=\"text-align: center; margin-top: 2em;\">Covoiturages possibles \u00e0 cette date<\/h2>\n<!-- Bouton Pr\u00e9nom Nom (au-dessus du tableau) -->\n<div class=\"hidden\" id=\"covoit-buttons\" style=\"text-align: center; margin-bottom: 1em;\">\n<label for=\"covoit-utilisateur-select\">Qui es tu ?<\/label>\n<select id=\"covoit-utilisateur-select\" style=\"max-width: 300px; margin-left: 0.5em;\">\n<option value=\"\">-- S\u00e9lectionner --<\/option>\n<\/select>\n<\/div>\n<!-- Tableau centr\u00e9 -->\n<div id=\"covoiturage-table-container\" style=\"display: flex; justify-content: center;\">\n<div id=\"covoiturage-table\">Chargement...<\/div>\n<\/div>\n<!-- Bouton \"Covoiturer\" centr\u00e9 sous le tableau -->\n<div style=\"text-align: center; margin-top: 1.5em;\">\n<button class=\"submit hidden\" id=\"btn-covoiturer\">Covoiturer !<\/button>\n<\/div>\n<\/div>\n<\/section>\n<section id=\"covoit\">\n<div class=\"section-container\">\n<h2>Entrer un trajet covoiturable<\/h2>\n<form id=\"form-covoiturage\">\n<!-- Conducteur -->\n<div class=\"form-group\">\n<label for=\"covoit-conducteur\">Conducteur<\/label>\n<select class=\"nom-utilisateur\" id=\"covoit-conducteur\" name=\"conducteur\"><\/select>\n<\/div>\n<!-- Point de d\u00e9part -->\n<div class=\"form-group\">\n<label for=\"covoit-depart\">Point de d\u00e9part<\/label>\n<select id=\"covoit-depart\" name=\"depart\">\n<option value=\"\">S\u00e9lectionner<\/option>\n<option value=\"Gilats\">Gilats<\/option>\n<option value=\"Joigny\">Joigny<\/option>\n<option value=\"Auxerre\">Auxerre<\/option>\n<option value=\"Autre\">Autre<\/option>\n<\/select>\n<\/div>\n<!-- Autre d\u00e9part -->\n<div class=\"form-group hidden\" id=\"covoit-autre-depart-container\">\n<label for=\"covoit-autre-depart\">Pr\u00e9ciser le lieu de d\u00e9part<\/label>\n<input id=\"covoit-autre-depart\" name=\"autre-depart\" placeholder=\"Ex : Paris, Dijon...\" type=\"text\"\/>\n<\/div>\n<!-- Date\/Heure de d\u00e9part -->\n<div class=\"form-group\">\n<label for=\"covoit-date\">Date et heure de d\u00e9part<\/label>\n<input id=\"covoit-date\" name=\"date-depart\" required=\"\" type=\"datetime-local\"\/>\n<\/div>\n<!-- Lieu d'arriv\u00e9e -->\n<div class=\"form-group\">\n<label for=\"covoit-arrivee\">Lieu d'arriv\u00e9e<\/label>\n<select id=\"covoit-arrivee\" name=\"arrivee\">\n<option value=\"\">S\u00e9lectionner<\/option>\n<option value=\"Gilats\">Gilats<\/option>\n<option value=\"Joigny\">Joigny<\/option>\n<option value=\"Auxerre\">Auxerre<\/option>\n<option value=\"Autre\">Autre<\/option>\n<\/select>\n<\/div>\n<!-- Autre arriv\u00e9e -->\n<div class=\"form-group hidden\" id=\"covoit-autre-arrivee-container\">\n<label for=\"covoit-autre-arrivee\">Pr\u00e9ciser le lieu d'arriv\u00e9e<\/label>\n<input id=\"covoit-autre-arrivee\" name=\"autre-arrivee\" placeholder=\"Ex : Lyon, Bordeaux...\" type=\"text\"\/>\n<\/div>\n<!-- Nombre de places -->\n<div class=\"form-group\">\n<label for=\"covoit-places\">Nombre de places disponibles<\/label>\n<select id=\"covoit-places\" name=\"places\" required=\"\">\n<option value=\"\">S\u00e9lectionner<\/option>\n<option value=\"1\">1<\/option>\n<option value=\"2\">2<\/option>\n<option value=\"3\">3<\/option>\n<option value=\"4\">4<\/option>\n<\/select>\n<\/div>\n<!-- Trajet retour -->\n<div class=\"form-group\">\n<label>Un trajet retour est-il pr\u00e9vu ?<\/label>\n<div style=\"display: flex; gap: 1em; align-items: center;\">\n<label><input checked=\"\" name=\"retour\" type=\"radio\" value=\"non\"\/> Non<\/label>\n<label><input name=\"retour\" type=\"radio\" value=\"oui\"\/> Oui<\/label>\n<\/div>\n<\/div>\n<div class=\"form-group hidden\" id=\"date-retour-container\">\n<label for=\"DateRetour\">Date et heure du retour<\/label>\n<input id=\"DateRetour\" name=\"DateRetour\" type=\"datetime-local\">\n<\/input><\/div>\n<!-- R\u00e9p\u00e9tition du trajet -->\n<div class=\"form-group\">\n<label>Ce trajet est-il r\u00e9current ?<\/label>\n<div style=\"display: flex; gap: 1em;\">\n<label>\n<input checked=\"\" name=\"recurrence\" type=\"radio\" value=\"non\"\/> Non\n          <\/label>\n<label>\n<input name=\"recurrence\" type=\"radio\" value=\"oui\"\/> Oui\n          <\/label>\n<\/div>\n<\/div>\n<!-- Fr\u00e9quence -->\n<div class=\"form-group hidden\" id=\"frequence-container\">\n<label for=\"frequence\">Fr\u00e9quence<\/label>\n<select id=\"frequence\" name=\"frequence\">\n<option value=\"\">S\u00e9lectionner<\/option>\n<option value=\"quotidien\">Tous les jours de la semaine<\/option>\n<option value=\"hebdomadaire\">Hebdomadaire<\/option>\n<option value=\"mensuelle\">Mensuelle<\/option>\n<\/select>\n<\/div>\n<!-- Date de fin de r\u00e9currence -->\n<div class=\"form-group hidden\" id=\"datefin-container\">\n<label for=\"datefin-recurrence\">Date de fin de r\u00e9currence<\/label>\n<input id=\"datefin-recurrence\" name=\"DateFinR\u00e9currence\" type=\"date\">\n<\/input><\/div>\n<!-- Bouton Enregistrer -->\n<button class=\"submit\" type=\"button\">Enregistrer<\/button>\n<\/form>\n<\/div>\n<\/section>\n<section id=\"reservation\">\n<div class=\"section-container\">\n<h2>R\u00e9server un v\u00e9hicule<\/h2>\n<form id=\"form-reservation\">\n<div class=\"form-group\">\n<label for=\"nom\">Qui es-tu ?<\/label>\n<select class=\"nom-utilisateur\" id=\"nom\" name=\"nom\"><\/select>\n<\/div>\n<div class=\"form-group\">\n<label for=\"vehicule\">V\u00e9hicule souhait\u00e9<\/label>\n<select class=\"vehicule\" id=\"vehicule\" name=\"vehicule\"><\/select>\n<\/div>\n<div class=\"form-group\">\n<label for=\"debut\">\u00c0 partir de<\/label>\n<input id=\"debut\" name=\"debut\" required=\"\" type=\"datetime-local\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"depart\">Depuis<\/label>\n<select id=\"depart\" name=\"depart\">\n<option value=\"Gilats\">Gilats<\/option>\n<option value=\"Joigny\">Joigny<\/option>\n<option value=\"Autre\">Autre<\/option>\n<\/select>\n<input class=\"hidden\" id=\"autre-depart\" name=\"autre-depart\" placeholder=\"Pr\u00e9cisez le lieu de d\u00e9part\" type=\"text\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"fin\">Jusqu'au<\/label>\n<input id=\"fin\" name=\"fin\" required=\"\" type=\"datetime-local\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"lieu-retour\">Lieu de restitution<\/label>\n<select id=\"lieu-retour\" name=\"lieu-retour\">\n<option value=\"Gilats\">Gilats<\/option>\n<option value=\"Joigny\">Joigny<\/option>\n<option value=\"Autre\">Autre<\/option>\n<\/select>\n<input class=\"hidden\" id=\"autre-retour\" name=\"autre-retour\" placeholder=\"Pr\u00e9cisez le lieu de retour\" type=\"text\"\/>\n<\/div>\n<div class=\"form-group\">\n<label>Es-tu ok pour covoiturer sur ce trajet ?<\/label>\n<label><input checked=\"\" name=\"covoiturage\" type=\"radio\" value=\"oui\"\/> Oui<\/label>\n<label><input name=\"covoiturage\" type=\"radio\" value=\"non\"\/> Non<\/label>\n<\/div>\n<button class=\"submit\" type=\"submit\">R\u00e9server<\/button>\n<\/form>\n<div id=\"reservation-msg\"><\/div>\n<\/div>\n<\/section>\n<section id=\"prise\">\n<input id=\"prise-km-connu\" type=\"hidden\"\/>\n<div class=\"section-container\" style=\"padding: 0 0.5em;\">\n<h2>Prise en charge<\/h2>\n<!-- S\u00e9lection utilisateur -->\n<div class=\"form-group\">\n<label for=\"prise-nom\">Qui es-tu ?<\/label>\n<select id=\"prise-nom\" name=\"prise-nom\" required=\"\">\n<option value=\"\">-- S\u00e9lectionnez --<\/option>\n<\/select>\n<\/div>\n<!-- S\u00e9lection d'une r\u00e9servation -->\n<div class=\"form-group\">\n<label for=\"prise-reservation\">S\u00e9lectionne ta r\u00e9servation<\/label>\n<select id=\"prise-reservation\" name=\"prise-reservation\"><\/select>\n<\/div>\n<!-- Formulaire complet -->\n<form class=\"hidden\" id=\"form-prise\">\n<input id=\"prise-resa-id\" name=\"prise-resa-id\" type=\"hidden\"\/>\n<div class=\"form-group\">\n<label for=\"prise-vehicule\">V\u00e9hicule<\/label>\n<input id=\"prise-vehicule\" name=\"prise-vehicule\" readonly=\"\" type=\"text\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"prise-date\">Date de prise en charge<\/label>\n<input id=\"prise-date\" name=\"prise-date\" required=\"\" type=\"date\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"prise-lieu\">Lieu de prise en charge<\/label>\n<select id=\"prise-lieu\" name=\"prise-lieu\" required=\"\">\n<option value=\"Gilats\">Gilats<\/option>\n<option value=\"Joigny\">Joigny<\/option>\n<option value=\"Autre\">Autre<\/option>\n<\/select>\n<input class=\"hidden\" id=\"prise-autre-lieu\" name=\"prise-autre-lieu\" placeholder=\"Pr\u00e9cisez le lieu\" type=\"text\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"prise-km\">Kilom\u00e9trage au d\u00e9part<\/label>\n<input id=\"prise-km\" inputmode=\"numeric\" name=\"prise-km\" pattern=\"\\\\d*\" required=\"\" type=\"number\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"prise-commentaire\">Commentaire<\/label>\n<input id=\"prise-commentaire\" name=\"prise-commentaire\" type=\"text\"\/>\n<\/div>\n<button class=\"submit\" type=\"submit\">Valider l'emprunt'<\/button>\n<div id=\"prise-msg\" style=\"margin-top: 1em; color: black;\"><\/div>\n<\/form>\n<\/div>\n<\/section>\n<section id=\"restitution\">\n<div class=\"section-container\" style=\"padding: 0 0.5em;\">\n<h2>Restitution<\/h2>\n<form id=\"form-restitution\">\n<div class=\"form-group\">\n<label for=\"rest-nom\">Qui es-tu ?<\/label>\n<select id=\"rest-nom\" name=\"rest-nom\" required=\"\">\n<option value=\"\">-- S\u00e9lectionnez --<\/option>\n<\/select>\n<\/div>\n<div class=\"form-group\">\n<label for=\"rest-reservation\">R\u00e9servation<\/label>\n<select id=\"rest-reservation\" name=\"rest-reservation\" required=\"\"><\/select>\n<\/div>\n<input id=\"rest-resa-id\" name=\"rest-resa-id\" type=\"hidden\"\/>\n<div class=\"form-group\">\n<label for=\"rest-vehicule\">V\u00e9hicule<\/label>\n<input id=\"rest-vehicule\" name=\"rest-vehicule\" readonly=\"\" type=\"text\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"rest-date\">Date de restitution<\/label>\n<input id=\"rest-date\" name=\"rest-date\" required=\"\" type=\"date\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"rest-lieu\">Lieu de restitution<\/label>\n<select id=\"rest-lieu\" name=\"rest-lieu\" required=\"\">\n<option value=\"Gilats\">Gilats<\/option>\n<option value=\"Joigny\">Joigny<\/option>\n<option value=\"Autre\">Autre<\/option>\n<\/select>\n<\/div>\n<div class=\"hidden\" id=\"rest-autre-lieu-container\">\n<label for=\"rest-autre-lieu\">Pr\u00e9cise le lieu de restitution<\/label>\n<input id=\"rest-autre-lieu\" name=\"rest-autre-lieu\" type=\"text\">\n<\/input><\/div>\n<div class=\"form-group\">\n<label for=\"rest-km\">Kilom\u00e9trage final<\/label>\n<input id=\"rest-km\" inputmode=\"numeric\" name=\"rest-km\" pattern=\"\\\\d*\" required=\"\" type=\"number\"\/>\n<\/div>\n<div class=\"form-group\">\n<label for=\"rest-frais\">Frais engag\u00e9s (\u20ac)<\/label>\n<input id=\"rest-frais\" min=\"0\" placeholder=\"Ex: 12.50 (facultatif)\" step=\"0.01\" type=\"number\">\n<\/input><\/div>\n<div class=\"form-group\">\n<label for=\"rest-commentaire\">Commentaire (facultatif)<\/label>\n<input id=\"rest-commentaire\" name=\"rest-commentaire\" type=\"text\"\/>\n<\/div>\n<button class=\"submit\" type=\"submit\">Valider la restitution<\/button>\n<\/form>\n<div id=\"rest-msg\"><\/div>\n<\/div>\n<\/section>\n<section id=\"facturation\">\n<div class=\"section-container\">\n<h2>Facturation<\/h2>\n<div class=\"form-group\">\n<label for=\"facturation-proprio\">Propri\u00e9taire<\/label>\n<select id=\"facturation-proprio\" required=\"\">\n<option value=\"\">-- S\u00e9lectionner un propri\u00e9taire --<\/option>\n<\/select>\n<\/div>\n<button class=\"submit\">\ud83d\udce4 Envoyer les factures<\/button>\n<div id=\"facturation-msg\"><\/div>\n<\/div>\n<\/section>\n<script>\n\/* =========================================\n   Configuration & helpers r\u00e9seau\n   ========================================= *\/\nconst SCRIPT_URL = \"https:\/\/script.google.com\/macros\/s\/AKfycbygcppW5tGRHNMDnAst_hBzNcDAcOsFQianhlq94DxGd5fuztztmLCYUpgkWZaFBiCrjg\/exec\";\n\n\nasync function apiGet(action, params = {}) {\n  const url = new URL(SCRIPT_URL);\n  url.searchParams.set(\"action\", action);\n  Object.entries(params || {}).forEach(([k, v]) => {\n    if (v !== undefined && v !== null) url.searchParams.set(k, v);\n  });\n  const res = await fetch(url.toString(), { method: \"GET\" });\n  if (!res.ok) throw new Error(\"HTTP \" + res.status);\n  return res.json();\n}\n\nasync function apiPost(body = {}) {\n  const res = await fetch(SCRIPT_URL, {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application\/json\" },\n    body: JSON.stringify(body)\n  });\n  if (!res.ok) throw new Error(\"HTTP \" + res.status);\n  return res.json();\n}\n\nfunction asArray(maybe) {\n  if (!maybe) return [];\n  if (Array.isArray(maybe)) return maybe;\n  if (Array.isArray(maybe.utilisateurs)) return maybe.utilisateurs;\n  if (Array.isArray(maybe.data)) return maybe.data;\n  for (const k in maybe) {\n    if (Array.isArray(maybe[k])) return maybe[k];\n  }\n  return [];\n}\n\n\/* =========================================\n   Fonctions UI \/ logique (conserv\u00e9es)\n   ========================================= *\/\n\nwindow.showTab = function(id) {\n  console.log(\"Changement d'onglet :\", id);\n\n  document.querySelectorAll('section').forEach(s => s.classList.remove('active'));\n  document.querySelectorAll('nav button').forEach(b => b.classList.remove('active'));\n\n  const targetSection = document.getElementById(id);\n  if (targetSection) {\n    targetSection.classList.add('active');\n  } else {\n    console.warn(\"Section introuvable :\", id);\n  }\n\n  const targetButton = document.querySelector(`nav button[onclick=\"showTab('${id}')\"]`);\n  if (targetButton) {\n    targetButton.classList.add('active');\n  } else {\n    console.warn(\"Bouton introuvable pour :\", id);\n  }\n\n  if (id === \"facturation\") {\n    chargerProprietaires();\n  }\n};\n\nfunction toggleRecurrenceOptions() {\n  const selected = document.querySelector('input[name=\"recurrence\"]:checked');\n  const show = selected && selected.value === \"oui\";\n  const frequenceContainer = document.getElementById(\"frequence-container\");\n  const datefinContainer = document.getElementById(\"datefin-container\");\n  if (frequenceContainer) frequenceContainer.classList.toggle(\"hidden\", !show);\n  if (datefinContainer) datefinContainer.classList.toggle(\"hidden\", !show);\n}\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n  toggleRecurrenceOptions();\n});\n\nfunction toggleRetourOptions() {\n  const selected = document.querySelector('input[name=\"retour\"]:checked');\n  const show = selected && selected.value === \"oui\";\n  const retourContainer = document.getElementById(\"date-retour-container\");\n  if (retourContainer) {\n    retourContainer.classList.toggle(\"hidden\", !show);\n  }\n}\n\nfunction loadReservationCalendar() {\n  apiGet(\"getAllReservations\")\n    .then(reservations => {\n      if (reservations && reservations.reservations) reservations = reservations.reservations;\n      drawCalendar(reservations || []);\n    })\n    .catch(err => {\n      console.error(\"Erreur loadReservationCalendar:\", err);\n      const container = document.getElementById(\"reservation-calendar\");\n      if (container) container.innerHTML = \"<p style='text-align:center;color:gray;'>Impossible de charger le calendrier.<\/p>\";\n    });\n}\n\nfunction drawCalendar(reservations) {\n  if (reservations && reservations.reservations) reservations = reservations.reservations;\n  if (!Array.isArray(reservations) || reservations.length === 0) {\n    const el = document.getElementById(\"reservation-calendar\");\n    if (el) el.innerHTML = \"<p style='text-align:center;color:gray;'>Aucune r\u00e9servation<\/p>\";\n    return;\n  }\n\n  const container = document.getElementById(\"reservation-calendar\");\n  if (!container) return;\n\n  const colors = {};\n  const colorPalette = [\"#7FBCD2\", \"#F1A661\", \"#D35D6E\", \"#99C24D\", \"#6A9C89\", \"#F28482\"];\n  container.innerHTML = \"\";\n\n  const vehicles = [...new Set(reservations.map(r => r.vehicule).filter(v => typeof v === 'string' && v.trim() !== ''))];\n  const groups = vehicles.map((vehicule, index) => {\n    const vehiculeId = vehicule.replace(\/\\s+\/g, \"_\");\n    colors[vehiculeId] = colorPalette[index % colorPalette.length];\n    return { id: vehiculeId, content: vehicule };\n  });\n\n  const items = reservations\n    .filter(res => typeof res.vehicule === 'string' && res.vehicule.trim() !== '')\n    .map((res, i) => {\n      const vehiculeId = res.vehicule.replace(\/\\s+\/g, \"_\");\n      const start = new Date(res.debut);\n      const end = new Date(res.fin);\n      const format = date => date.toLocaleString(\"fr-FR\", {\n        day: '2-digit', month: '2-digit',\n        hour: '2-digit', minute: '2-digit'\n      });\n      return {\n        id: i,\n        group: vehiculeId,\n        start: start,\n        end: end,\n        content: `<b>${res.utilisateur}<\/b><br><small>${format(start)} \u2192 ${format(end)}<\/small>`,\n        title: `${res.utilisateur}\\n${format(start)} \u2192 ${format(end)}`,\n        style: `background-color: ${colors[vehiculeId]}; min-width: 40px; border-radius: 4px; padding: 2px; color: white; font-size: 0.8em;`\n      };\n    });\n\n  try {\n    const timeline = new vis.Timeline(container);\n    timeline.setOptions({\n      stack: false,\n      margin: { item: 10 },\n      orientation: \"top\",\n      selectable: false,\n      zoomable: false,\n      moveable: true,\n      start: new Date(new Date().setDate(new Date().getDate() - 5)),\n      end: new Date(new Date().setDate(new Date().getDate() + 30))\n    });\n    timeline.setGroups(groups);\n    timeline.setItems(items);\n  } catch (err) {\n    console.error(\"Erreur vis timeline:\", err);\n    container.innerHTML = \"<p style='text-align:center;color:gray;'>Impossible d'afficher la timeline.<\/p>\";\n  }\n}\n\n\/* Covoiturage inscription *\/\nasync function onCovoiturerClick() {\n  const bouton = document.getElementById(\"btn-covoiturer\");\n  const nomCompletEl = document.getElementById(\"covoit-utilisateur-select\");\n  const nomComplet = nomCompletEl ? nomCompletEl.value : \"\";\n  if (!nomComplet) { alert(\"Merci de s\u00e9lectionner votre pr\u00e9nom et nom.\"); return; }\n\n  const checkboxes = document.querySelectorAll(\".covoit-checkbox:checked\");\n  if (checkboxes.length === 0) { alert(\"Merci de s\u00e9lectionner au moins un trajet.\"); return; }\n\n  const lignes = [];\n  checkboxes.forEach(cb => {\n    const tr = cb.closest(\"tr\");\n    if (tr && tr.dataset.index) lignes.push(parseInt(tr.dataset.index, 10));\n  });\n  if (lignes.length === 0) { alert(\"Erreur : les trajets s\u00e9lectionn\u00e9s n'ont pas d'index.\"); return; }\n\n  if (bouton) { bouton.disabled = true; bouton.textContent = \"Traitement en cours...\"; }\n\n  try {\n    await apiPost({ action: \"inscrireEtNotifierCovoiturages\", nomComplet, lignes });\n    alert(\"Covoiturage enregistr\u00e9 avec succ\u00e8s !\");\n    if (bouton) { bouton.disabled = false; bouton.textContent = \"Covoiturer\"; }\n    loadFlotteData();\n  } catch (err) {\n    console.error(\"Erreur inscrireEtNotifierCovoiturages:\", err);\n    alert(\"Erreur : \" + err.message);\n    if (bouton) { bouton.disabled = false; bouton.textContent = \"Covoiturer\"; }\n  }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const bouton = document.getElementById(\"btn-covoiturer\");\n  if (bouton) bouton.addEventListener(\"click\", onCovoiturerClick);\n});\n\nfunction loadFlotteData() {\n  const dateInput = document.getElementById(\"flotte-date\");\n  const dateValue = dateInput?.value || new Date().toISOString().split(\"T\")[0];\n\n  apiGet(\"getPositionsFlotte\", { date: dateValue })\n    .then(displayFlotteTable)\n    .catch(err => { console.error(\"Erreur getPositionsFlotte:\", err); const container = document.getElementById(\"flotte-table\"); if (container) container.textContent = \"Impossible de charger la flotte.\"; });\n\n  apiGet(\"getCovoituragesForDate\", { date: dateValue })\n    .then(displayCovoiturageTable)\n    .catch(err => { console.error(\"Erreur getCovoituragesForDate:\", err); const container = document.getElementById(\"covoiturage-table\"); if (container) container.textContent = \"Impossible de charger les covoiturages.\"; });\n\n  loadReservationCalendar();\n}\n\nfunction displayFlotteTable(data) {\n  const container = document.getElementById(\"flotte-table\");\n  if (!container) return;\n  container.innerHTML = \"\";\n  const rows = Array.isArray(data) ? data : (data && data.data ? data.data : data);\n  if (!rows || rows.length === 0) { container.textContent = \"Aucune donn\u00e9e disponible.\"; return; }\n  const table = document.createElement(\"table\");\n  const header = table.insertRow();\n  [\"V\u00e9hicule\", \"Position\", \"Date\", \"R\u00e9servation en cours\"].forEach(h => { const th = document.createElement(\"th\"); th.textContent = h; header.appendChild(th); });\n  rows.forEach(row => { const tr = table.insertRow(); [row.vehicule, row.position, row.date, row.reservation].forEach(val => { const td = tr.insertCell(); td.textContent = val; }); });\n  container.appendChild(table);\n}\n\nfunction displayCovoiturageTable(data) {\n  const container = document.getElementById(\"covoiturage-table\");\n  if (!container) return;\n  container.innerHTML = \"\";\n  const rows = Array.isArray(data) ? data : (data && data.data ? data.data : data);\n  if (!rows || rows.length === 0) { container.textContent = \"Aucun covoiturage pr\u00e9vu.\"; return; }\n  const table = document.createElement(\"table\");\n  table.id = \"covoiturage-table\";\n  const header = table.insertRow();\n  [\"\", \"Conducteur\", \"Date\", \"Heure\", \"Lieu d\u00e9part\", \"Lieu arriv\u00e9e\", \"P1\", \"P2\", \"P3\", \"P4\"].forEach(h => { const th = document.createElement(\"th\"); th.textContent = h; header.appendChild(th); });\n  rows.forEach(row => {\n    const tr = table.insertRow();\n    tr.dataset.index = row.index;\n    const checkbox = document.createElement(\"input\");\n    checkbox.type = \"checkbox\";\n    checkbox.className = \"covoit-checkbox\";\n    checkbox.addEventListener(\"change\", handleCheckboxChange);\n    const tdCheckbox = tr.insertCell();\n    tdCheckbox.appendChild(checkbox);\n    [row.conducteur, row.date, row.heure, row.depart, row.arrivee, row.pax1, row.pax2, row.pax3, row.pax4].forEach(val => { const td = tr.insertCell(); td.textContent = val; });\n  });\n  container.appendChild(table);\n}\n\nfunction handleCheckboxChange() {\n  const checkboxes = document.querySelectorAll(\".covoit-checkbox\");\n  const checked = Array.from(checkboxes).some(cb => cb.checked);\n  const btnContainer = document.getElementById(\"covoit-buttons\");\n  if (checked) {\n    if (btnContainer) btnContainer.classList.remove(\"hidden\");\n    apiGet(\"getListeUtilisateurs\").then(nomsRaw => {\n      const noms = asArray(nomsRaw);\n      const select = document.getElementById(\"covoit-utilisateur-select\");\n      if (!select) return;\n      select.innerHTML = '<option value=\"\">-- S\u00e9lectionner --<\/option>';\n      noms.forEach(n => { const o = document.createElement(\"option\"); o.value = n; o.textContent = n; select.appendChild(o); });\n    }).catch(err => console.error(\"Erreur getListeUtilisateurs:\", err));\n  } else {\n    if (btnContainer) btnContainer.classList.add(\"hidden\");\n  }\n}\n\nfunction toggleCovoitSelection() {\n  const checkboxes = document.querySelectorAll(\".covoit-checkbox\");\n  const anySelected = Array.from(checkboxes).some(cb => cb.checked);\n  const userSelector = document.getElementById(\"selection-utilisateur\");\n  const covoitButton = document.getElementById(\"btn-covoiturer\");\n  if (anySelected) { if (userSelector) userSelector.classList.remove(\"hidden\"); if (covoitButton) covoitButton.classList.remove(\"hidden\"); loadListeUtilisateurs(); }\n  else { if (userSelector) userSelector.classList.add(\"hidden\"); if (covoitButton) covoitButton.classList.add(\"hidden\"); }\n}\n\nfunction updateCovoitButtonsVisibility() {\n  const checkboxes = document.querySelectorAll(\".covoit-checkbox\");\n  const anyChecked = Array.from(checkboxes).some(cb => cb.checked);\n  const actions = document.getElementById(\"covoiturage-actions\");\n  const bouton = document.getElementById(\"covoituer-btn-container\");\n  if (anyChecked) { if (actions) actions.classList.remove(\"hidden\"); if (bouton) bouton.classList.remove(\"hidden\"); loadListeUtilisateurs(); }\n  else { if (actions) actions.classList.add(\"hidden\"); if (bouton) bouton.classList.add(\"hidden\"); }\n}\n\nfunction loadListeUtilisateurs() {\n  const select = document.getElementById(\"select-user\");\n  if (!select) return;\n  apiGet(\"getListeUtilisateurs\").then(data => {\n    const list = asArray(data);\n    select.innerHTML = '<option value=\"\">-- S\u00e9lectionnez --<\/option>';\n    list.forEach(nom => { const option = document.createElement(\"option\"); option.value = nom; option.textContent = nom; select.appendChild(option); });\n  }).catch(err => console.error(\"Erreur loadListeUtilisateurs:\", err));\n}\n\nfunction handleCovoitCheckboxChange() {\n  const checkboxes = document.querySelectorAll(\".covoit-checkbox\");\n  const selected = Array.from(checkboxes).filter(cb => cb.checked);\n  const header = document.getElementById(\"covoit-selection-header\");\n  const footer = document.getElementById(\"covoit-selection-footer\");\n  if (selected.length > 0) {\n    if (header && header.classList.contains(\"hidden\")) {\n      header.classList.remove(\"hidden\");\n      header.innerHTML = `\n        <label for=\"covoit-user-select\">Pr\u00e9nom Nom<\/label>\n        <select id=\"covoit-user-select\" class=\"nom-utilisateur\"><\/select>\n      `;\n      loadUtilisateursDansSelect(\"covoit-user-select\");\n    }\n    if (footer && footer.classList.contains(\"hidden\")) {\n      footer.classList.remove(\"hidden\");\n      footer.innerHTML = `<button class=\"submit\" onclick=\"covoiturer()\">Covoiturer<\/button>`;\n    }\n  } else {\n    if (header) { header.classList.add(\"hidden\"); header.innerHTML = \"\"; }\n    if (footer) { footer.classList.add(\"hidden\"); footer.innerHTML = \"\"; }\n  }\n}\n\nfunction loadUtilisateursDansSelect(selectId) {\n  apiGet(\"getUtilisateursEtVehicules\").then(data => {\n    const utilisateurs = asArray(data.utilisateurs ? data : data);\n    const select = document.getElementById(selectId);\n    if (!select) return;\n    select.innerHTML = '<option value=\"\">-- S\u00e9lectionnez --<\/option>';\n    utilisateurs.forEach(nom => { select.innerHTML += `<option value=\"${nom}\">${nom}<\/option>`; });\n  }).catch(err => console.error(\"Erreur loadUtilisateursDansSelect:\", err));\n}\n\nfunction toggleAutreLieu(type) {\n  if (!type) {\n    const departEl = document.getElementById(\"depart\");\n    const depart = departEl ? departEl.value : \"\";\n    const autre = document.getElementById(\"autre-depart\");\n    if (autre) autre.classList.toggle(\"hidden\", depart !== \"Autre\");\n  } else {\n    const select = document.getElementById(`covoit-${type}`);\n    const container = document.getElementById(`covoit-autre-${type}-container`);\n    const input = document.getElementById(`covoit-autre-${type}`);\n    if (select && container && input) {\n      if (select.value === \"Autre\") container.classList.remove(\"hidden\");\n      else { container.classList.add(\"hidden\"); input.value = \"\"; }\n    }\n  }\n}\n\nfunction toggleAutreRetour() {\n  const retourEl = document.getElementById(\"lieu-retour\");\n  const retour = retourEl ? retourEl.value : \"\";\n  const autre = document.getElementById(\"autre-retour\");\n  if (autre) autre.classList.toggle(\"hidden\", retour !== \"Autre\");\n}\n\nfunction loadDropdowns() {\n  apiGet(\"getUtilisateursEtVehicules\").then(data => {\n    const utilisateurs = data?.utilisateurs || (Array.isArray(data) ? data : []);\n    const vehicules = data?.vehicules || [];\n    window.kmConnus = data?.kmConnus || {};\n    const nomSelects = document.querySelectorAll(\"select.nom-utilisateur\");\n    const vehiculeSelects = document.querySelectorAll(\"select.vehicule\");\n    nomSelects.forEach(select => {\n      select.innerHTML = \"\";\n      const defaultOption = document.createElement(\"option\");\n      defaultOption.value = \"\";\n      defaultOption.textContent = \"-- S\u00e9lectionner --\";\n      select.appendChild(defaultOption);\n      (utilisateurs || []).forEach(nom => { const option = document.createElement(\"option\"); option.value = nom; option.textContent = nom; select.appendChild(option); });\n    });\n    vehiculeSelects.forEach(select => {\n      select.innerHTML = \"\";\n      const defaultOption = document.createElement(\"option\");\n      defaultOption.value = \"\";\n      defaultOption.textContent = \"-- S\u00e9lectionner --\";\n      select.appendChild(defaultOption);\n      (vehicules || []).forEach(vehicule => { const option = document.createElement(\"option\"); option.value = vehicule; option.textContent = vehicule; select.appendChild(option); });\n    });\n  }).catch(err => console.error(\"Erreur loadDropdowns:\", err));\n}\n\nconst formReservation = document.getElementById(\"form-reservation\");\nif (formReservation) {\n  formReservation.addEventListener(\"submit\", function (e) {\n    e.preventDefault();\n    const nom = document.getElementById(\"nom\")?.value;\n    const vehicule = document.getElementById(\"vehicule\")?.value;\n    const debutStr = document.getElementById(\"debut\")?.value;\n    const finStr = document.getElementById(\"fin\")?.value;\n    const depart = document.getElementById(\"depart\")?.value;\n    const autreLieu = document.getElementById(\"autre-depart\")?.value;\n    const lieuDepart = depart === \"Autre\" ? autreLieu : depart;\n    const retour = document.getElementById(\"lieu-retour\")?.value;\n    const autreRetour = document.getElementById(\"autre-retour\")?.value;\n    const lieuRetour = retour === \"Autre\" ? autreRetour : retour;\n    const covoitInput = document.querySelector('input[name=\"covoiturage\"]:checked');\n    const covoiturage = covoitInput ? covoitInput.value : \"oui\";\n    const tDebut = new Date(debutStr);\n    const tFin = new Date(finStr);\n    if (tDebut >= tFin) { alert(\"La date\/heure de retour doit \u00eatre post\u00e9rieure \u00e0 la date\/heure de d\u00e9part.\"); return; }\n    apiPost({ action: \"verifieEtEnregistreReservation\", nom, vehicule, debutStr, finStr, lieuDepart, lieuRetour, commentaire: '', covoiturage })\n      .then(res => { const msgEl = document.getElementById(\"reservation-msg\"); if (msgEl) msgEl.innerText = res?.message || \"\"; })\n      .catch(err => { console.error(\"Erreur verifieEtEnregistreReservation:\", err); alert(\"Erreur lors de l'enregistrement : \" + err.message); });\n  });\n}\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n  const today = new Date().toISOString().split(\"T\")[0];\n  const flotteDateInput = document.getElementById(\"flotte-date\");\n  if (flotteDateInput) { flotteDateInput.value = today; flotteDateInput.addEventListener(\"change\", loadFlotteData); loadFlotteData(); }\n  const dateInput = document.getElementById(\"prise-date\");\n  if (dateInput) dateInput.value = today;\n  const dateRest = document.getElementById(\"rest-date\");\n  if (dateRest) dateRest.value = today;\n  loadDropdowns();\n  loadPriseNomDropdown();\n  loadNomsUtilisateursRestitution();\n  loadFlotteData();\n});\n\nfunction loadPriseNomDropdown() {\n  apiGet(\"getUtilisateursEtVehicules\").then(data => {\n    const utilisateurs = data?.utilisateurs || (Array.isArray(data) ? data : []);\n    const priseNomSelect = document.getElementById(\"prise-nom\");\n    if (!priseNomSelect) return;\n    priseNomSelect.innerHTML = '<option value=\"\">-- S\u00e9lectionnez --<\/option>';\n    utilisateurs.forEach(nom => { priseNomSelect.innerHTML += `<option value=\"${nom}\">${nom}<\/option>`; });\n  }).catch(err => console.error(\"Erreur loadPriseNomDropdown:\", err));\n}\n\nfunction toggleAutreLieuPrise() {\n  const lieu = document.getElementById(\"prise-lieu\")?.value;\n  const autre = document.getElementById(\"prise-autre-lieu\");\n  if (autre) autre.classList.toggle(\"hidden\", lieu !== \"Autre\");\n}\n\nfunction loadReservationsUtilisateur(nom) {\n  if (!nom) return;\n  apiGet(\"getReservationsUtilisateurPourPriseEnCharge\", { nom }).then(reservations => {\n    if (reservations && reservations.reservations) reservations = reservations.reservations;\n    const select = document.getElementById(\"prise-reservation\");\n    const form = document.getElementById(\"form-prise\");\n    const msg = document.getElementById(\"prise-msg\");\n    if (!select) return;\n    select.innerHTML = '';\n    if (!reservations || reservations.length === 0) { if (msg) msg.innerText = \"Aucune r\u00e9servation de trouv\u00e9e pour toi actuellement. Commence par r\u00e9server une voiture sur l'onglet de gauche\"; if (form) form.classList.add(\"hidden\"); }\n    else {\n      reservations.forEach(r => { const option = document.createElement(\"option\"); option.value = JSON.stringify(r); option.textContent = `${r.vehicule} du ${r.debut} au ${r.fin}`; select.appendChild(option); });\n      if (msg) msg.innerText = \"\"; if (reservations.length === 1) select.selectedIndex = 0; if (form) form.classList.remove(\"hidden\"); handleReservationChange();\n    }\n  }).catch(err => console.error(\"Erreur loadReservationsUtilisateur:\", err));\n}\n\nfunction handleReservationChange() {\n  const select = document.getElementById(\"prise-reservation\");\n  if (!select || !select.value) return;\n  const res = JSON.parse(select.value);\n  document.getElementById(\"prise-km-connu\").value = res.kmConnu;\n  document.getElementById(\"prise-vehicule\").value = res.vehicule;\n  document.getElementById(\"prise-date\").value = res.debut.split(\"T\")[0];\n  const lieuInput = document.getElementById(\"prise-lieu\");\n  if (lieuInput && [...lieuInput.options].some(o => o.value === res.lieuDepart)) { lieuInput.value = res.lieuDepart; toggleAutreLieuPrise(); }\n  else { if (lieuInput) lieuInput.value = \"Autre\"; const autre = document.getElementById(\"prise-autre-lieu\"); if (autre) autre.value = res.lieuDepart; toggleAutreLieuPrise(); }\n  const resaIdEl = document.getElementById(\"prise-resa-id\");\n  if (resaIdEl) resaIdEl.value = res.id;\n}\n\nconst priseNomEl = document.getElementById(\"prise-nom\");\nif (priseNomEl) priseNomEl.addEventListener(\"change\", e => loadReservationsUtilisateur(e.target.value));\n\nconst formPrise = document.getElementById(\"form-prise\");\nif (formPrise) {\n  formPrise.addEventListener(\"submit\", function (e) {\n    e.preventDefault();\n    const nom = document.getElementById(\"prise-nom\")?.value;\n    const vehicule = document.getElementById(\"prise-vehicule\")?.value;\n    const date = document.getElementById(\"prise-date\")?.value;\n    const lieu = document.getElementById(\"prise-lieu\")?.value === \"Autre\" ? document.getElementById(\"prise-autre-lieu\")?.value : document.getElementById(\"prise-lieu\")?.value;\n    const km = parseInt(document.getElementById(\"prise-km\")?.value);\n    const kmConnu = parseInt(document.getElementById(\"prise-km-connu\")?.value);\n    if (km < kmConnu) { alert(`Le kilom\u00e9trage saisi (${km}) est inf\u00e9rieur au dernier kilom\u00e9trage connu pour ce v\u00e9hicule (${kmConnu}). Merci de v\u00e9rifier.`); return; }\n    const commentaire = document.getElementById(\"prise-commentaire\")?.value;\n    const reservationId = document.getElementById(\"prise-resa-id\")?.value;\n    if (!nom || !vehicule || !date || !lieu || isNaN(km)) { alert(\"Merci de remplir tous les champs obligatoires.\"); return; }\n    const payload = { nom, vehicule, date, lieu, km, commentaire, reservationId };\n    apiPost({ action: \"enregistrerPriseEnCharge\", ...payload }).then(res => { const msg = document.getElementById(\"prise-msg\"); if (msg) msg.innerText = res?.message || \"\"; }).catch(err => { console.error(\"Erreur enregistrerPriseEnCharge:\", err); alert(\"Erreur lors de l'enregistrement : \" + err.message); });\n  });\n}\n\nconst restNomEl = document.getElementById(\"rest-nom\");\nif (restNomEl) restNomEl.addEventListener(\"change\", e => loadReservationsUtilisateurPourRestitution(e.target.value));\n\nfunction toggleAutreLieuRestitution() {\n  const select = document.getElementById(\"rest-lieu\");\n  const container = document.getElementById(\"rest-autre-lieu-container\");\n  const input = document.getElementById(\"rest-autre-lieu\");\n  if (!select || !container || !input) return;\n  if (select.value === \"Autre\") container.classList.remove(\"hidden\"); else { container.classList.add(\"hidden\"); input.value = \"\"; }\n}\n\nfunction loadNomsUtilisateursRestitution() {\n  apiGet(\"getListeUtilisateurs\").then(utilisateurs => {\n    const list = asArray(utilisateurs);\n    const select = document.getElementById(\"rest-nom\");\n    if (!select) return;\n    select.innerHTML = '<option value=\"\">-- S\u00e9lectionnez --<\/option>';\n    list.forEach(nom => { const option = document.createElement(\"option\"); option.value = nom; option.textContent = nom; select.appendChild(option); });\n  }).catch(err => console.error(\"Erreur loadNomsUtilisateursRestitution:\", err));\n}\n\nfunction loadReservationsUtilisateurPourRestitution(nom) {\n  if (!nom) return;\n  apiGet(\"getReservationsUtilisateurPourRestitution\", { nom }).then(reservations => {\n    if (reservations && reservations.reservations) reservations = reservations.reservations;\n    const select = document.getElementById(\"rest-reservation\");\n    const form = document.getElementById(\"form-restitution\");\n    const msg = document.getElementById(\"rest-msg\");\n    if (!select) return;\n    select.innerHTML = '';\n    if (!reservations || reservations.length === 0) { if (msg) msg.innerText = \"Aucune r\u00e9servation en cours trouv\u00e9e. Assure-toi d\u2019avoir d\u00e9j\u00e0 pris en charge un v\u00e9hicule.\"; if (form) form.classList.add(\"hidden\"); }\n    else {\n      reservations.forEach(r => { const option = document.createElement(\"option\"); option.value = JSON.stringify(r); option.textContent = `${r.vehicule} du ${r.debut} au ${r.fin}`; select.appendChild(option); });\n      if (msg) msg.innerText = \"\"; if (reservations.length === 1) select.selectedIndex = 0; if (form) form.classList.remove(\"hidden\"); handleRestitutionChange();\n    }\n  }).catch(err => console.error(\"Erreur loadReservationsUtilisateurPourRestitution:\", err));\n}\n\nfunction handleRestitutionChange() {\n  const select = document.getElementById(\"rest-reservation\");\n  if (!select || !select.value) return;\n  const res = JSON.parse(select.value);\n  const restVehicule = document.getElementById(\"rest-vehicule\");\n  if (restVehicule) restVehicule.value = res.vehicule;\n  const restDate = document.getElementById(\"rest-date\");\n  if (restDate) restDate.value = new Date().toISOString().split(\"T\")[0];\n  const lieuInput = document.getElementById(\"rest-lieu\");\n  const autreInput = document.getElementById(\"rest-autre-lieu\");\n  const autreContainer = document.getElementById(\"rest-autre-lieu-container\");\n  const lieuRetour = (res.lieuRetour || \"\").trim().toLowerCase();\n  if (!lieuInput) return;\n  const match = [...lieuInput.options].find(o => o.value.toLowerCase() === lieuRetour);\n  if (match) { lieuInput.value = match.value; if (autreContainer) autreContainer.classList.add(\"hidden\"); if (autreInput) autreInput.value = \"\"; }\n  else { lieuInput.value = \"Autre\"; if (autreInput) autreInput.value = res.lieuRetour; if (autreContainer) autreContainer.classList.remove(\"hidden\"); }\n  const resaId = document.getElementById(\"rest-resa-id\");\n  if (resaId) resaId.value = res.id;\n}\n\nconst formRestitution = document.getElementById(\"form-restitution\");\nif (formRestitution) {\n  formRestitution.addEventListener(\"submit\", function (e) {\n    e.preventDefault();\n    const nom = document.getElementById(\"rest-nom\")?.value;\n    const vehicule = document.getElementById(\"rest-vehicule\")?.value;\n    const date = document.getElementById(\"rest-date\")?.value;\n    const lieu = document.getElementById(\"rest-lieu\")?.value;\n    const autreLieu = document.getElementById(\"rest-autre-lieu\")?.value;\n    const lieuFinal = lieu === \"Autre\" ? autreLieu : lieu;\n    const km = parseInt(document.getElementById(\"rest-km\")?.value);\n    const frais = parseFloat(document.getElementById(\"rest-frais\")?.value || 0);\n    const commentaire = document.getElementById(\"rest-commentaire\")?.value;\n    const resaID = document.getElementById(\"rest-resa-id\")?.value;\n    if (!nom || !vehicule || !date || !lieuFinal || isNaN(km)) { alert(\"Merci de remplir tous les champs obligatoires.\"); return; }\n    const today = new Date().toISOString().split(\"T\")[0];\n    if (date > today) { alert(\"La date de restitution ne peut pas \u00eatre dans le futur.\"); return; }\n    const kmRef = window.kmConnus?.[vehicule];\n    if (kmRef && km < kmRef) { alert(`Le kilom\u00e9trage indiqu\u00e9 (${km}) est inf\u00e9rieur au dernier kilom\u00e9trage connu (${kmRef}).`); return; }\n    apiPost({ action: \"enregistrerRestitution\", nom, vehicule, date, lieuRetour: lieuFinal, km, frais, commentaire, resaID })\n      .then(res => { const el = document.getElementById(\"rest-msg\"); if (el) el.innerText = res?.message || \"\"; })\n      .catch(err => { console.error(\"Erreur enregistrerRestitution:\", err); alert(\"Erreur lors de la restitution : \" + err.message); });\n  });\n}\n\n\/* Facturation *\/\nfunction chargerProprietaires() {\n  apiGet(\"getListeProprietaires\").then(proprietairesRaw => {\n    const select = document.getElementById(\"facturation-proprio\");\n    if (!select) return;\n    select.innerHTML = '<option value=\"\">-- S\u00e9lectionner --<\/option>';\n    const list = Array.isArray(proprietairesRaw) ? proprietairesRaw : (proprietairesRaw?.data || proprietairesRaw);\n    (list || []).forEach(p => {\n      const option = document.createElement(\"option\");\n      if (typeof p === \"string\") { option.value = p; option.textContent = p; }\n      else if (p && p.nom) { option.value = p.nom; option.textContent = p.nom; }\n      else { option.value = JSON.stringify(p); option.textContent = JSON.stringify(p); }\n      select.appendChild(option);\n    });\n  }).catch(err => console.error(\"Erreur chargerProprietaires:\", err));\n}\n\nconst facturationProprioEl = document.getElementById(\"facturation-proprio\");\nif (facturationProprioEl) {\n  facturationProprioEl.addEventListener(\"change\", () => {\n    const btn = document.getElementById(\"btn-envoyer-factures\");\n    const select = document.getElementById(\"facturation-proprio\");\n    if (btn && select) btn.disabled = !select.value;\n  });\n}\n\n\/\/ global functions called by onclick in HTML\nwindow.enregistrerCovoit = function() {\n  const conducteur = document.getElementById(\"covoit-conducteur\")?.value;\n  const dateDepart = document.getElementById(\"covoit-date\")?.value;\n  const lieuDepart = document.getElementById(\"covoit-depart\")?.value === \"Autre\" ? document.getElementById(\"covoit-autre-depart\")?.value : document.getElementById(\"covoit-depart\")?.value;\n  const lieuArrivee = document.getElementById(\"covoit-arrivee\")?.value === \"Autre\" ? document.getElementById(\"covoit-autre-arrivee\")?.value : document.getElementById(\"covoit-arrivee\")?.value;\n  const retourOui = document.querySelector('input[name=\"retour\"]:checked')?.value === \"oui\";\n  const dateRetour = retourOui ? document.getElementById(\"DateRetour\")?.value : null;\n  const places = parseInt(document.getElementById(\"covoit-places\")?.value, 10);\n  const recurrenceOui = document.querySelector('input[name=\"recurrence\"]:checked')?.value === \"oui\";\n  const frequence = recurrenceOui ? document.getElementById(\"frequence\")?.value : null;\n  const dateFinRecurrence = recurrenceOui ? document.getElementById(\"datefin-recurrence\")?.value : null;\n  const bouton = document.querySelector(\"#form-covoiturage button.submit\");\n  if (bouton) { bouton.disabled = true; bouton.textContent = \"Enregistrement...\"; }\n  if (!conducteur || !dateDepart || !lieuDepart || !lieuArrivee || !places) {\n    alert(\"Merci de remplir tous les champs obligatoires.\");\n    if (bouton) { bouton.disabled = false; bouton.textContent = \"Enregistrer\"; }\n    return;\n  }\n  if (retourOui && new Date(dateRetour) < new Date(dateDepart)) {\n    alert(\"\u26a0\ufe0f La date de retour ne peut pas \u00eatre ant\u00e9rieure \u00e0 la date de d\u00e9part.\");\n    if (bouton) { bouton.disabled = false; bouton.textContent = \"Enregistrer\"; }\n    return;\n  }\n  const pax = [\"\", \"\", \"\", \"\"];\n  for (let i = 0; i < 4; i++) pax[i] = i < places ? \"\" : \"R\u00e9serv\u00e9\";\n  const trajetAller = { conducteur, date: dateDepart, depart: lieuDepart, arrivee: lieuArrivee, pax1: pax[0], pax2: pax[1], pax3: pax[2], pax4: pax[3] };\n  let trajetRetour = null;\n  if (retourOui) trajetRetour = { conducteur, date: dateRetour, depart: lieuArrivee, arrivee: lieuDepart, pax1: pax[0], pax2: pax[1], pax3: pax[2], pax4: pax[3] };\n  apiPost({ action: \"enregistrerTrajetCovoit\", trajetAller, trajetRetour, frequence, dateFinRecurrence })\n    .then(() => { alert(\"\u2705 Trajet covoiturable enregistr\u00e9 avec succ\u00e8s.\"); if (bouton) { bouton.disabled = false; bouton.textContent = \"Enregistrer\"; } const form = document.getElementById(\"form-covoiturage\"); if (form) form.reset(); })\n    .catch(err => { alert(\"\u274c Une erreur est survenue : \" + err.message); if (bouton) { bouton.disabled = false; bouton.textContent = \"Enregistrer\"; } });\n};\n\nwindow.envoyerFactures = function() {\n  const select = document.getElementById(\"facturation-proprio\");\n  const nomProprio = select ? select.value : \"\";\n  const msgDiv = document.getElementById(\"facturation-msg\");\n  if (!nomProprio) { if (msgDiv) msgDiv.textContent = \"\u274c Merci de s\u00e9lectionner un propri\u00e9taire.\"; return; }\n  if (msgDiv) msgDiv.textContent = \"\u23f3 Envoi des factures en cours...\";\n  apiPost({ action: \"envoyerFacturesProprietaire\", nomProprio })\n    .then(res => { if (msgDiv) msgDiv.textContent = res?.message || \"\u2705 Factures envoy\u00e9es avec succ\u00e8s.\"; })\n    .catch(err => { if (msgDiv) msgDiv.textContent = \"\u274c Une erreur est survenue : \" + err.message; });\n};\n\nwindow.covoiturer = function() {\n  const btn = document.getElementById(\"btn-covoiturer\");\n  if (btn) btn.click();\n  else onCovoiturerClick();\n};\n\n<\/script>\n<script>document.addEventListener('DOMContentLoaded', function() {\n  document.querySelector('.tab.active')?.addEventListener('click', function(event) { showTab('flotte') });\n  document.querySelector('.tab')?.addEventListener('click', function(event) { showTab('covoit') });\n  document.querySelector('.tab')?.addEventListener('click', function(event) { showTab('reservation') });\n  document.querySelector('.tab')?.addEventListener('click', function(event) { showTab('prise') });\n  document.querySelector('.tab')?.addEventListener('click', function(event) { showTab('restitution') });\n  document.querySelector('.tab')?.addEventListener('click', function(event) { showTab('facturation') });\n  document.querySelector('.submit')?.addEventListener('click', function(event) { enregistrerCovoit() });\n  document.querySelector('.submit')?.addEventListener('click', function(event) { envoyerFactures() });\n  document.querySelector('#covoit-depart')?.addEventListener('change', function(event) { toggleAutreLieu('depart') });\n  document.querySelector('#covoit-arrivee')?.addEventListener('change', function(event) { toggleAutreLieu('arrivee') });\n  document.querySelector('input')?.addEventListener('change', function(event) { toggleRetourOptions() });\n  document.querySelector('input')?.addEventListener('change', function(event) { toggleRetourOptions() });\n  document.querySelector('input')?.addEventListener('change', function(event) { toggleRecurrenceOptions() });\n  document.querySelector('input')?.addEventListener('change', function(event) { toggleRecurrenceOptions() });\n  document.querySelector('#depart')?.addEventListener('change', function(event) { toggleAutreLieu() });\n  document.querySelector('#lieu-retour')?.addEventListener('change', function(event) { toggleAutreRetour() });\n  document.querySelector('#prise-reservation')?.addEventListener('change', function(event) { handleReservationChange() });\n  document.querySelector('#prise-lieu')?.addEventListener('change', function(event) { toggleAutreLieuPrise() });\n  document.querySelector('#rest-reservation')?.addEventListener('change', function(event) { handleRestitutionChange() });\n  document.querySelector('#rest-lieu')?.addEventListener('change', function(event) { toggleAutreLieuRestitution() });\n});<\/script><\/body>\n<\/html>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Autopartage \u00c9covillage \ud83d\ude97 Autopartage &#8211; Les Gilats 0.6Planet\ud83c\udf3b Flotte Covoiturer R\u00e9server Emprunter Restituer Facturer Calendrier des r\u00e9servations Chargement\u2026 Positions estim\u00e9es de la Flotte \u00e0 la date du : Chargement&#8230; Covoiturages possibles \u00e0 cette date Qui es tu ? &#8212; S\u00e9lectionner &#8212; Chargement&#8230; Covoiturer ! Entrer un trajet covoiturable Conducteur Point de d\u00e9part S\u00e9lectionnerGilatsJoignyAuxerreAutre Pr\u00e9ciser le &#8230; <a title=\"Autopartage\" class=\"read-more\" href=\"https:\/\/www.06planet.org\/fr\/autopartage\/\" aria-label=\"More on Autopartage\">Lire plus<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2800","page","type-page","status-publish"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Autopartage - 0.6 Planet<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.06planet.org\/fr\/?page_id=2800\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Autopartage - 0.6 Planet\" \/>\n<meta property=\"og:description\" content=\"Autopartage \u00c9covillage \ud83d\ude97 Autopartage &#8211; Les Gilats 0.6Planet\ud83c\udf3b Flotte Covoiturer R\u00e9server Emprunter Restituer Facturer Calendrier des r\u00e9servations Chargement\u2026 Positions estim\u00e9es de la Flotte \u00e0 la date du : Chargement&#8230; Covoiturages possibles \u00e0 cette date Qui es tu ? &#8212; S\u00e9lectionner &#8212; Chargement&#8230; Covoiturer ! Entrer un trajet covoiturable Conducteur Point de d\u00e9part S\u00e9lectionnerGilatsJoignyAuxerreAutre Pr\u00e9ciser le ... Lire plus\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.06planet.org\/fr\/?page_id=2800\" \/>\n<meta property=\"og:site_name\" content=\"0.6 Planet\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/0.6Planet\/\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-09T00:31:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mlw3muorq6zz.i.optimole.com\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/www.06planet.org\/wp-content\/uploads\/2021\/05\/dominiquee.jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.06planet.org\\\/?page_id=2800\",\"url\":\"https:\\\/\\\/www.06planet.org\\\/?page_id=2800\",\"name\":\"Autopartage - 0.6 Planet\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/#website\"},\"datePublished\":\"2022-10-12T07:37:55+00:00\",\"dateModified\":\"2025-08-09T00:31:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.06planet.org\\\/?page_id=2800#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.06planet.org\\\/?page_id=2800\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.06planet.org\\\/?page_id=2800#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.06planet.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"NOTRE PROJET &#8211; old\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/\",\"name\":\"0.6 Planet\",\"description\":\"l&#039;empreinte d&#039;un monde meilleur\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/#organization\",\"name\":\"0.6 Planet\",\"url\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\/\\/www.06planet.org\\/wp-content\\/uploads\\/2021\\/05\\/logo-planet-retina.png\",\"contentUrl\":\"https:\\/\\/www.06planet.org\\/wp-content\\/uploads\\/2021\\/05\\/logo-planet-retina.png\",\"width\":1400,\"height\":1400,\"caption\":\"0.6 Planet\"},\"image\":{\"@id\":\"https:\\\/\\\/www.06planet.org\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/0.6Planet\\\/\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCkLfI8BT3ZjRhV7hJu04XGA\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Autopartage - 0.6 Planet","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.06planet.org\/fr\/?page_id=2800","og_locale":"fr_FR","og_type":"article","og_title":"Autopartage - 0.6 Planet","og_description":"Autopartage \u00c9covillage \ud83d\ude97 Autopartage &#8211; Les Gilats 0.6Planet\ud83c\udf3b Flotte Covoiturer R\u00e9server Emprunter Restituer Facturer Calendrier des r\u00e9servations Chargement\u2026 Positions estim\u00e9es de la Flotte \u00e0 la date du : Chargement&#8230; Covoiturages possibles \u00e0 cette date Qui es tu ? &#8212; S\u00e9lectionner &#8212; Chargement&#8230; Covoiturer ! Entrer un trajet covoiturable Conducteur Point de d\u00e9part S\u00e9lectionnerGilatsJoignyAuxerreAutre Pr\u00e9ciser le ... Lire plus","og_url":"https:\/\/www.06planet.org\/fr\/?page_id=2800","og_site_name":"0.6 Planet","article_publisher":"https:\/\/www.facebook.com\/0.6Planet\/","article_modified_time":"2025-08-09T00:31:47+00:00","og_image":[{"url":"https:\/\/mlw3muorq6zz.i.optimole.com\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/www.06planet.org\/wp-content\/uploads\/2021\/05\/dominiquee.jpeg","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.06planet.org\/?page_id=2800","url":"https:\/\/www.06planet.org\/?page_id=2800","name":"Autopartage - 0.6 Planet","isPartOf":{"@id":"https:\/\/www.06planet.org\/fr\/#website"},"datePublished":"2022-10-12T07:37:55+00:00","dateModified":"2025-08-09T00:31:47+00:00","breadcrumb":{"@id":"https:\/\/www.06planet.org\/?page_id=2800#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.06planet.org\/?page_id=2800"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.06planet.org\/?page_id=2800#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.06planet.org\/"},{"@type":"ListItem","position":2,"name":"NOTRE PROJET &#8211; old"}]},{"@type":"WebSite","@id":"https:\/\/www.06planet.org\/fr\/#website","url":"https:\/\/www.06planet.org\/fr\/","name":"0.6 Planet","description":"l&#039;empreinte d&#039;un monde meilleur","publisher":{"@id":"https:\/\/www.06planet.org\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.06planet.org\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.06planet.org\/fr\/#organization","name":"0.6 Planet","url":"https:\/\/www.06planet.org\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.06planet.org\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/mlw3muorq6zz.i.optimole.com\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/www.06planet.org\/wp-content\/uploads\/2021\/05\/logo-planet-retina.png","contentUrl":"https:\/\/mlw3muorq6zz.i.optimole.com\/w:auto\/h:auto\/q:mauto\/f:best\/https:\/\/www.06planet.org\/wp-content\/uploads\/2021\/05\/logo-planet-retina.png","width":1400,"height":1400,"caption":"0.6 Planet"},"image":{"@id":"https:\/\/www.06planet.org\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/0.6Planet\/","https:\/\/www.youtube.com\/channel\/UCkLfI8BT3ZjRhV7hJu04XGA"]}]}},"_links":{"self":[{"href":"https:\/\/www.06planet.org\/fr\/wp-json\/wp\/v2\/pages\/2800","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.06planet.org\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.06planet.org\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.06planet.org\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.06planet.org\/fr\/wp-json\/wp\/v2\/comments?post=2800"}],"version-history":[{"count":66,"href":"https:\/\/www.06planet.org\/fr\/wp-json\/wp\/v2\/pages\/2800\/revisions"}],"predecessor-version":[{"id":3595,"href":"https:\/\/www.06planet.org\/fr\/wp-json\/wp\/v2\/pages\/2800\/revisions\/3595"}],"wp:attachment":[{"href":"https:\/\/www.06planet.org\/fr\/wp-json\/wp\/v2\/media?parent=2800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}