Outiref

Code source de l'URL : https://gpx-edit-pro.ovh/

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Éditeur GPX en ligne gratuit | GPX Edit Pro</title>
  <meta name="description" content="Créez et modifiez vos traces GPS en ligne. Éditeur GPX gratuit pour cyclistes, randonneurs et trailers. Sans installation, 100% privé, sans inscription.">
  <meta name="theme-color" content="#f5f0e8">
  <meta name="robots" content="index, follow">
  <link rel="canonical" href="https://gpx-edit-pro.ovh/">

  <meta property="og:type" content="website">
  <meta property="og:url" content="https://gpx-edit-pro.ovh/">
  <meta property="og:locale" content="fr_FR">
  <meta property="og:title" content="Éditeur GPX en ligne gratuit | GPX Edit Pro">
  <meta property="og:description" content="Chargez, modifiez et exportez vos fichiers GPX directement dans votre navigateur. Gratuit, sans inscription, sans serveur.">
  <meta property="og:image" content="https://gpx-edit-pro.ovh/apercu-carte.jpg">

  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:title" content="GPX Edit Pro - Éditeur GPX en ligne gratuit">
  <meta name="twitter:description" content="Modifiez vos traces GPS sans installation. 100% gratuit, 100% privé.">
  <meta name="twitter:image" content="https://gpx-edit-pro.ovh/apercu-carte.jpg">

  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "GPX Edit Pro",
    "url": "https://gpx-edit-pro.ovh",
    "description": "Éditeur GPX en ligne gratuit pour créer, modifier, nettoyer, analyser et exporter vos traces vélo, trail et randonnée.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "Web",
    "offers": { "@type": "Offer", "price": "0", "priceCurrency": "EUR" },
    "audience": { "@type": "Audience", "audienceType": "Cyclistes, trailers, randonneurs" },
    "featureList": "Création d'itinéraires, Import GPX FIT TCX KML, Export GPX, Édition de traces, Fusion de traces, Découpage de trace, Correction d'altitude, Routage BRouter OSRM, Simplification Douglas-Peucker, Profil d'élévation, Traitement local sans serveur"
  }
  </script>
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "name": "GPX Edit Pro",
    "url": "https://gpx-edit-pro.ovh",
    "description": "Outil en ligne gratuit d'édition et de création de traces GPS pour les sports outdoor.",
    "founder": {
      "@type": "Person",
      "name": "Damien ANNE"
    }
  }
  </script>
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "Accueil",
        "item": "https://gpx-edit-pro.ovh/"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "Éditeur GPX",
        "item": "https://gpx-edit-pro.ovh/editeur-gpx/"
      }
    ]
  }
  </script>
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Est-ce vraiment gratuit ?",
        "acceptedAnswer": { "@type": "Answer", "text": "Oui, 100% gratuit. Sans publicité, sans abonnement, sans création de compte." }
      },
      {
        "@type": "Question",
        "name": "Mes fichiers GPX sont-ils envoyés sur un serveur ?",
        "acceptedAnswer": { "@type": "Answer", "text": "Non. Tout le traitement se fait localement dans votre navigateur. Aucun fichier ne quitte votre appareil." }
      },
      {
        "@type": "Question",
        "name": "Compatible Garmin, Strava, Komoot ?",
        "acceptedAnswer": { "@type": "Answer", "text": "Oui. Les exports GPX sont au format standard compatible avec Garmin, Wahoo, Suunto, Strava et Komoot." }
      },
      {
        "@type": "Question",
        "name": "Quels formats de fichiers sont supportés ?",
        "acceptedAnswer": { "@type": "Answer", "text": "GPX, FIT (Garmin), TCX et KML sont acceptés à l'import. L'export se fait en GPX standard." }
      }
    ]
  }
  </script>

  <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>📍</text></svg>">
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link rel="preload" href="https://fonts.googleapis.com/css2?family=Archivo:wght@400;600;700;900&family=JetBrains+Mono:wght@400;600&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'">
  <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Archivo:wght@400;600;700;900&family=JetBrains+Mono:wght@400;600&display=swap"></noscript>

  <style>
    :root {
      --paper:       #f5f0e8;
      --parchment:   #ede5d0;
      --sand:        #d9cdb5;
      --contour:     #b8a888;
      --ink:         #1a1612;
      --ink-soft:    #3d342a;
      --ink-light:   #5a4f42;
      --trail:       #c0392b;
      --trail-glow:  rgba(192,57,43,0.18);
      --trail-light: #e74c3c;
      --water:       #8fb8cc;
      --green-map:   #4a7c3f;
      --success:     #27ae60;
      --warning:     #e67e22;
      --info:        #3498db;

      --space-xs: .375rem;
      --space-sm: .75rem;
      --space-md: 1.5rem;
      --space-lg: 3rem;
      --space-xl: 5rem;

      --radius: 6px;
      --shadow: 0 2px 12px rgba(26,22,18,.10);
      --shadow-lg: 0 8px 40px rgba(26,22,18,.14);
    }

    *, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
    html { scroll-behavior: smooth; }

    body {
      font-family: 'Archivo', sans-serif;
      background: var(--paper);
      color: var(--ink);
      line-height: 1.65;
      overflow-x: hidden;
    }

    /* ── TOPOGRAPHIC PATTERN ── */
    .topo {
      position: absolute; inset: 0; pointer-events: none; z-index: 0;
      opacity: .045;
      background-image:
        repeating-linear-gradient(0deg,   transparent, transparent 40px, var(--ink) 40px, var(--ink) 41px),
        repeating-linear-gradient(90deg,  transparent, transparent 40px, var(--ink) 40px, var(--ink) 41px);
    }

    /* ── NAVBAR ── */
    .navbar {
      position: fixed; top: 0; left: 0; right: 0; z-index: 100;
      background: rgba(245,240,232,.97);
      backdrop-filter: blur(8px);
      border-bottom: 2px solid var(--sand);
      padding: var(--space-sm) var(--space-md);
    }
    .navbar-inner {
      max-width: 1300px; margin: 0 auto;
      display: flex; align-items: center; justify-content: space-between; gap: var(--space-md);
    }
    .logo {
      font-family: 'JetBrains Mono', monospace;
      font-weight: 700; font-size: 1.15rem;
      color: var(--ink); text-decoration: none;
      display: flex; align-items: center; gap: .5rem;
    }
    .logo-icon {
      width: 28px; height: 28px; border-radius: 4px;
      background: var(--trail);
      display: flex; align-items: center; justify-content: center;
      font-size: 1rem; line-height: 1;
    }
    .logo-sub { font-size: .65rem; color: var(--ink-light); display: block; letter-spacing: .05em; }
    .nav-links { display: flex; gap: var(--space-md); list-style: none; }
    .nav-links a { color: var(--ink-soft); text-decoration: none; font-size: .9rem; font-weight: 600; transition: color .2s; }
    .nav-links a:hover { color: var(--trail); }
    .nav-cta {
      background: var(--trail); color: white;
      padding: .5rem 1.25rem; border-radius: var(--radius);
      font-weight: 700; font-size: .9rem; text-decoration: none;
      transition: background .2s, transform .15s;
    }
    .nav-cta:hover { background: var(--trail-light); transform: translateY(-1px); }
    .nav-mobile-menu { display: none; background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--ink); }

    /* ── HERO ── */
    .hero {
      position: relative; min-height: 100vh;
      display: flex; align-items: center;
      padding: calc(var(--space-xl) + 60px) var(--space-md) var(--space-xl);
      overflow: hidden;
      background: var(--paper);
    }
    .hero-container {
      position: relative; z-index: 1;
      max-width: 1300px; margin: 0 auto;
      display: grid; grid-template-columns: 1fr 1fr;
      gap: var(--space-xl); align-items: center;
    }
    .badge {
      display: inline-flex; align-items: center; gap: .4rem;
      background: var(--parchment); border: 1px solid var(--sand);
      color: var(--trail); font-size: .8rem; font-weight: 700;
      padding: .3rem .75rem; border-radius: 20px;
      margin-bottom: var(--space-md); letter-spacing: .04em;
    }
    .hero h1 {
      font-size: clamp(2.2rem, 5vw, 3.8rem);
      font-weight: 900; line-height: 1.08;
      margin-bottom: var(--space-md); color: var(--ink);
    }
    .hero h1 em { font-style: normal; color: var(--trail); }
    .hero-sub {
      font-size: 1.15rem; color: var(--ink-soft);
      max-width: 520px; margin-bottom: var(--space-lg);
    }
    .cta-group { display: flex; gap: var(--space-sm); flex-wrap: wrap; margin-bottom: var(--space-md); }
    .btn-primary {
      background: var(--trail); color: white;
      padding: .9rem 2rem; border-radius: var(--radius);
      font-size: 1rem; font-weight: 700; text-decoration: none;
      box-shadow: 0 4px 20px var(--trail-glow);
      transition: background .2s, transform .15s, box-shadow .2s;
      display: inline-block;
    }
    .btn-primary:hover { background: var(--trail-light); transform: translateY(-2px); box-shadow: 0 8px 30px var(--trail-glow); }
    .btn-ghost {
      background: transparent; color: var(--ink);
      padding: .9rem 2rem; border-radius: var(--radius);
      font-size: 1rem; font-weight: 700; text-decoration: none;
      border: 2px solid var(--sand);
      transition: border-color .2s, background .2s;
      display: inline-block;
    }
    .btn-ghost:hover { border-color: var(--trail); color: var(--trail); background: var(--trail-glow); }
    .hero-trust { display: flex; gap: var(--space-md); font-size: .88rem; color: var(--ink-light); flex-wrap: wrap; }
    .hero-trust span::before { content: '✓ '; color: var(--success); font-weight: 700; }

    /* Hero visual – fausse UI de l'éditeur */
    .editor-preview {
      background: var(--ink);
      border-radius: 10px;
      overflow: hidden;
      box-shadow: var(--shadow-lg);
      border: 1px solid rgba(255,255,255,.06);
    }
    .ep-toolbar {
      background: #111; padding: .5rem .75rem;
      display: flex; gap: .35rem; align-items: center; border-bottom: 1px solid #2a2a2a;
    }
    .ep-dot { width: 10px; height: 10px; border-radius: 50%; }
    .ep-dot.r { background: #e74c3c; } .ep-dot.y { background: #f39c12; } .ep-dot.g { background: #27ae60; }
    .ep-btn {
      margin-left: .5rem; padding: .2rem .55rem; border-radius: 3px;
      background: rgba(255,255,255,.07); color: rgba(255,255,255,.7);
      font-size: .72rem; font-family: 'JetBrains Mono', monospace;
    }
    .ep-map {
      position: relative; height: 340px;
      background: linear-gradient(160deg, #2c3e33 0%, #1a2f1a 50%, #243b2b 100%);
      overflow: hidden;
    }
    .ep-track {
      position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%);
      width: 80%;
    }
    .ep-track path { fill: none; stroke: var(--trail); stroke-width: 3; stroke-linecap: round; }
    .ep-grid {
      position: absolute; inset: 0; pointer-events: none; opacity: .08;
      background-image:
        repeating-linear-gradient(0deg,   transparent, transparent 30px, #fff 30px, #fff 31px),
        repeating-linear-gradient(90deg,  transparent, transparent 30px, #fff 30px, #fff 31px);
    }
    .ep-stats {
      position: absolute; bottom: 10px; left: 10px; right: 10px;
      background: rgba(26,22,18,.88); border-radius: 6px;
      display: grid; grid-template-columns: repeat(4,1fr);
      padding: .6rem; gap: .5rem;
    }
    .ep-stat { text-align: center; }
    .ep-stat-val { font-family: 'JetBrains Mono', monospace; font-size: .9rem; color: var(--trail); font-weight: 600; }
    .ep-stat-lbl { font-size: .6rem; color: rgba(255,255,255,.5); }
    .ep-elevation {
      height: 80px; background: rgba(26,22,18,.92);
      padding: .5rem .75rem; position: relative; overflow: hidden;
    }
    .ep-elev-svg { width: 100%; height: 100%; }

    /* ── STATS BAR ── */
    .stats-bar {
      background: var(--parchment); border-top: 1px solid var(--sand); border-bottom: 1px solid var(--sand);
      padding: var(--space-md) var(--space-md);
    }
    .stats-bar-inner {
      max-width: 1300px; margin: 0 auto;
      display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-md);
    }
    .stat-item { text-align: center; }
    .stat-num { font-family: 'JetBrains Mono', monospace; font-size: 2rem; font-weight: 700; color: var(--trail); }
    .stat-label { font-size: .85rem; color: var(--ink-light); }

    /* ── SECTIONS ── */
    section { padding: var(--space-xl) var(--space-md); }
    .section-inner { max-width: 1300px; margin: 0 auto; }
    .section-header { text-align: center; margin-bottom: var(--space-lg); }
    .section-header h2 { font-size: clamp(1.8rem, 3.5vw, 2.8rem); font-weight: 900; color: var(--ink); margin-bottom: .5rem; }
    .section-header p { font-size: 1.05rem; color: var(--ink-light); max-width: 600px; margin: 0 auto; }
    .eyebrow {
      display: inline-block; font-size: .75rem; font-weight: 700; letter-spacing: .1em;
      color: var(--trail); text-transform: uppercase; margin-bottom: .6rem;
    }

    /* ── FEATURES GRID ── */
    .features-bg { background: var(--parchment); }
    .features-grid {
      display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-md);
    }
    .feat-card {
      background: var(--paper); border-radius: var(--radius);
      border: 1px solid var(--sand); padding: var(--space-md);
      transition: border-color .2s, box-shadow .2s;
    }
    .feat-card:hover { border-color: var(--trail); box-shadow: var(--shadow); }
    .feat-icon { font-size: 1.8rem; margin-bottom: var(--space-sm); }
    .feat-card h3 { font-size: 1rem; font-weight: 700; color: var(--ink); margin-bottom: .4rem; }
    .feat-card p { font-size: .88rem; color: var(--ink-light); line-height: 1.6; }
    .feat-tag {
      display: inline-block; margin-top: .6rem;
      font-size: .7rem; font-weight: 700; color: var(--trail);
      background: var(--trail-glow); border-radius: 3px; padding: .15rem .4rem;
    }

    /* ── HOW IT WORKS ── */
    .steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--space-md); }
    .step { text-align: center; position: relative; }
    .step:not(:last-child)::after {
      content: '→'; position: absolute; right: -1rem; top: 1.8rem;
      color: var(--sand); font-size: 1.5rem; font-weight: 700;
    }
    .step-num {
      width: 52px; height: 52px; border-radius: 50%;
      background: var(--trail); color: white;
      font-family: 'JetBrains Mono', monospace; font-size: 1.2rem; font-weight: 700;
      display: flex; align-items: center; justify-content: center;
      margin: 0 auto var(--space-sm);
      box-shadow: 0 4px 16px var(--trail-glow);
    }
    .step h3 { font-size: .95rem; font-weight: 700; color: var(--ink); margin-bottom: .3rem; }
    .step p { font-size: .83rem; color: var(--ink-light); }

    /* ── FORMATS ── */
    .formats-bg { background: var(--parchment); }
    .formats-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-lg); align-items: center; }
    .format-list { list-style: none; }
    .format-list li {
      display: flex; align-items: flex-start; gap: .75rem;
      padding: .75rem 0; border-bottom: 1px solid var(--sand); font-size: .95rem;
    }
    .format-list li:last-child { border-bottom: none; }
    .format-icon { font-size: 1.3rem; flex-shrink: 0; margin-top: .05rem; }
    .format-list strong { display: block; color: var(--ink); font-size: .9rem; }
    .format-list span { color: var(--ink-light); font-size: .82rem; }
    .format-visual {
      background: var(--ink); border-radius: var(--radius); padding: var(--space-md);
      font-family: 'JetBrains Mono', monospace; font-size: .78rem;
      color: rgba(255,255,255,.6); line-height: 1.9;
    }
    .format-visual .kw { color: var(--trail); } .format-visual .attr { color: var(--water); }
    .format-visual .val { color: #a8d8a8; } .format-visual .cm { color: #666; }

    /* ── ADVANCED ── */
    .adv-grid { display: grid; grid-template-columns: 1fr 1fr; gap: var(--space-lg); align-items: center; }
    .adv-list { list-style: none; }
    .adv-list li {
      display: flex; align-items: flex-start; gap: .75rem;
      padding: .65rem 0; border-bottom: 1px solid var(--sand);
    }
    .adv-list li:last-child { border-bottom: none; }
    .adv-list .adv-icon { font-size: 1.2rem; flex-shrink: 0; margin-top: .1rem; }
    .adv-list strong { display: block; color: var(--ink); font-size: .9rem; margin-bottom: .15rem; }
    .adv-list p { font-size: .82rem; color: var(--ink-light); }
    .adv-card {
      background: var(--parchment); border-radius: var(--radius); border: 1px solid var(--sand);
      padding: var(--space-md);
    }
    .adv-card h3 { font-size: 1rem; font-weight: 700; color: var(--ink); margin-bottom: var(--space-sm); }
    .adv-card .sub-items { display: flex; flex-direction: column; gap: .5rem; }
    .adv-card .sub-item {
      background: var(--paper); border-radius: 4px; border: 1px solid var(--sand);
      padding: .6rem .75rem; font-size: .82rem; color: var(--ink-soft);
      display: flex; align-items: center; gap: .5rem;
    }
    .adv-card .sub-item::before { content: '›'; color: var(--trail); font-weight: 700; font-size: 1rem; }

    /* ── FAQ ── */
    .faq-bg { background: var(--parchment); }
    .faq-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: var(--space-md); }
    .faq-item {
      background: var(--paper); border-radius: var(--radius); border: 1px solid var(--sand);
      padding: var(--space-md);
    }
    .faq-item h3 { font-size: .95rem; font-weight: 700; color: var(--ink); margin-bottom: .4rem; }
    .faq-item p { font-size: .87rem; color: var(--ink-light); }

    /* ── CTA FINAL ── */
    .cta-section {
      background: var(--ink); color: white; text-align: center;
      padding: var(--space-xl) var(--space-md);
    }
    .cta-section h2 { font-size: clamp(1.8rem, 4vw, 3rem); font-weight: 900; margin-bottom: var(--space-sm); }
    .cta-section p { font-size: 1.05rem; color: rgba(255,255,255,.65); margin-bottom: var(--space-lg); max-width: 560px; margin-left: auto; margin-right: auto; }
    .btn-cta-white {
      background: white; color: var(--ink);
      padding: 1rem 2.5rem; border-radius: var(--radius);
      font-size: 1.05rem; font-weight: 700; text-decoration: none;
      display: inline-block; transition: background .2s, transform .15s;
    }
    .btn-cta-white:hover { background: var(--paper); transform: translateY(-2px); }

    /* ── FOOTER ── */
    footer {
      background: var(--ink-soft); color: rgba(255,255,255,.5);
      padding: var(--space-md) var(--space-md); text-align: center; font-size: .82rem;
    }
    footer a { color: rgba(255,255,255,.7); text-decoration: none; }
    footer a:hover { color: var(--trail); }

    /* ── RESPONSIVE ── */
    /* ── FOOTER RGPD BUTTON ── */
    .footer-rgpd-link {
      background: none; border: none; cursor: pointer;
      color: rgba(255,255,255,.7); font-size: .82rem; padding: 0;
      text-decoration: underline; font-family: inherit;
    }
    .footer-rgpd-link:hover { color: var(--trail); }

    /* ── RGPD OVERLAY ── */
    #rgpd-overlay {
      position: fixed; inset: 0; z-index: 9000;
      display: flex; align-items: center; justify-content: center;
      padding: var(--space-md);
    }
    #rgpd-overlay[hidden] { display: none; }
    .rgpd-backdrop {
      position: absolute; inset: 0;
      background: rgba(26,22,18,.65); backdrop-filter: blur(4px);
    }
    .rgpd-panel {
      position: relative; z-index: 1;
      background: var(--paper); border-radius: 10px;
      border: 1px solid var(--sand);
      box-shadow: 0 20px 60px rgba(26,22,18,.3);
      max-width: 720px; width: 100%;
      max-height: 85vh; display: flex; flex-direction: column;
      overflow: hidden;
    }
    .rgpd-header {
      display: flex; align-items: center; justify-content: space-between;
      padding: var(--space-md) var(--space-md) var(--space-sm);
      border-bottom: 1px solid var(--sand); flex-shrink: 0;
    }
    .rgpd-header h2 { font-size: 1.15rem; font-weight: 700; color: var(--ink); }
    .rgpd-close {
      background: none; border: none; font-size: 1.1rem; cursor: pointer;
      color: var(--ink-light); padding: .25rem .5rem; border-radius: 4px;
      transition: background .15s, color .15s;
    }
    .rgpd-close:hover { background: var(--parchment); color: var(--trail); }
    .rgpd-body {
      overflow-y: auto; padding: var(--space-md);
      flex: 1; scroll-behavior: smooth;
    }
    .rgpd-body h3 {
      font-size: .9rem; font-weight: 700; color: var(--ink);
      margin: var(--space-md) 0 .4rem; padding-top: var(--space-sm);
      border-top: 1px solid var(--sand);
    }
    .rgpd-body h3:first-of-type { margin-top: var(--space-sm); border-top: none; padding-top: 0; }
    .rgpd-body p { font-size: .86rem; color: var(--ink-soft); margin-bottom: .5rem; line-height: 1.7; }
    .rgpd-body a { color: var(--trail); }
    .rgpd-body strong { color: var(--ink); }
    .rgpd-body em { font-style: italic; }
    .rgpd-update {
      font-size: .78rem; color: var(--ink-light);
      background: var(--parchment); border-radius: 4px;
      padding: .3rem .6rem; display: inline-block; margin-bottom: var(--space-sm);
    }
    .rgpd-footer {
      padding: var(--space-sm) var(--space-md);
      border-top: 1px solid var(--sand); flex-shrink: 0;
      display: flex; justify-content: flex-end;
    }
    .rgpd-footer .btn-primary { padding: .6rem 1.5rem; font-size: .9rem; }

    .rgpd-email { font-style: italic; color: var(--trail); cursor: default; user-select: all; }

    @media (max-width: 900px) {
      .hero-container, .formats-grid, .adv-grid { grid-template-columns: 1fr; }
      .hero-container .editor-preview { order: -1; }
      .features-grid { grid-template-columns: repeat(2, 1fr); }
      .steps { grid-template-columns: repeat(2, 1fr); }
      .step:not(:last-child)::after { display: none; }
      .faq-grid { grid-template-columns: 1fr; }
      .stats-bar-inner { grid-template-columns: repeat(2, 1fr); }
      .nav-links { display: none; }
      .nav-mobile-menu { display: block; }
    }
    @media (max-width: 560px) {
      .features-grid { grid-template-columns: 1fr; }
      .steps { grid-template-columns: 1fr; }
      .hero h1 { font-size: 2rem; }
    }
  </style>
</head>
<body>

<!-- ── NAVBAR ── -->
<nav class="navbar" aria-label="Navigation principale">
  <div class="navbar-inner">
    <a href="/" class="logo" aria-label="GPX Edit Pro – Accueil">
      <span class="logo-icon">📍</span>
      <span>
        GPX Edit Pro
        <span class="logo-sub">Éditeur de traces GPS</span>
      </span>
    </a>
    <ul class="nav-links" role="list">
      <li><a href="#fonctionnalites">Fonctionnalités</a></li>
      <li><a href="#comment-ca-marche">Comment ça marche</a></li>
      <li><a href="#avances">Outils avancés</a></li>
      <li><a href="#faq">FAQ</a></li>
    </ul>
    <a href="https://gpx-edit-pro.ovh/editeur-gpx/" class="nav-cta" aria-label="Ouvrir l'éditeur GPX">Ouvrir l'éditeur →</a>
    <button class="nav-mobile-menu" aria-label="Menu">☰</button>
  </div>
</nav>

<!-- ── HERO ── -->
<header class="hero">
  <div class="topo" aria-hidden="true"></div>
  <div class="hero-container">
    <div class="hero-content">
      <span class="badge">🗺️ 100% gratuit · Sans inscription</span>
      <h1>Éditeur GPX en ligne.<br><em>Simple, gratuit, privé.</em></h1>
      <p class="hero-sub">Créez des itinéraires sur mesure ou chargez vos traces GPX, FIT, TCX, KML. Planifiez, corrigez, fusionnez, découpez et exportez vos parcours vélo, trail et randonnée — directement dans votre navigateur, sans serveur.</p>
      <div class="cta-group">
        <a href="https://gpx-edit-pro.ovh/editeur-gpx/" class="btn-primary">Créer un itinéraire →</a>
        <a href="https://gpx-edit-pro.ovh/editeur-gpx/" class="btn-ghost">Modifier mes traces GPX</a>
      </div>
      <div class="hero-trust">
        <span>Traitement local, données privées</span>
        <span>Aucune installation requise</span>
        <span>Gratuit sans publicité</span>
      </div>
    </div>

    <!-- Prévisualisation de l'interface éditeur -->
    <div class="editor-preview" aria-hidden="true">
      <div class="ep-toolbar">
        <div class="ep-dot r"></div><div class="ep-dot y"></div><div class="ep-dot g"></div>
        <span class="ep-btn">📂 Charger</span>
        <span class="ep-btn">✂️ Couper</span>
        <span class="ep-btn">⇄ Fusionner</span>
        <span class="ep-btn">💾 Exporter</span>
      </div>
      <div class="ep-map">
        <div class="ep-grid"></div>
        <svg class="ep-track" viewbox="0 0 400 200" preserveaspectratio="xMidYMid meet">
          <path d="M20,160 Q60,60 120,100 Q160,130 200,80 Q240,30 300,90 Q340,130 380,110" stroke="#c0392b" stroke-width="3.5"/>
          <circle cx="20"  cy="160" r="5" fill="#27ae60"/>
          <circle cx="380" cy="110" r="5" fill="#c0392b"/>
        </svg>
        <div class="ep-stats">
          <div class="ep-stat"><div class="ep-stat-val">48.3</div><div class="ep-stat-lbl">km</div></div>
          <div class="ep-stat"><div class="ep-stat-val">1 240</div><div class="ep-stat-lbl">D+ (m)</div></div>
          <div class="ep-stat"><div class="ep-stat-val">3:42</div><div class="ep-stat-lbl">Durée</div></div>
          <div class="ep-stat"><div class="ep-stat-val">14.2</div><div class="ep-stat-lbl">km/h moy.</div></div>
        </div>
      </div>
      <div class="ep-elevation">
        <svg class="ep-elev-svg" viewbox="0 0 500 60" preserveaspectratio="none">
          <defs>
            <lineargradient id="eg" x1="0" y1="0" x2="0" y2="1">
              <stop offset="0%" stop-color="#c0392b" stop-opacity=".5"/>
              <stop offset="100%" stop-color="#c0392b" stop-opacity=".05"/>
            </lineargradient>
          </defs>
          <path d="M0,55 Q30,40 70,30 Q110,20 150,35 Q200,50 240,18 Q280,5 330,28 Q380,45 430,20 Q470,8 500,15 L500,60 Z" fill="url(#eg)"/>
          <path d="M0,55 Q30,40 70,30 Q110,20 150,35 Q200,50 240,18 Q280,5 330,28 Q380,45 430,20 Q470,8 500,15" fill="none" stroke="#c0392b" stroke-width="2"/>
        </svg>
      </div>
    </div>
  </div>
</header>

<!-- ── STATS BAR ── -->
<div class="stats-bar">
  <div class="stats-bar-inner">
    <div class="stat-item"><div class="stat-num">4</div><div class="stat-label">Formats d'import (GPX, FIT, TCX, KML)</div></div>
    <div class="stat-item"><div class="stat-num">0</div><div class="stat-label">Données envoyées sur un serveur</div></div>
    <div class="stat-item"><div class="stat-num">∞</div><div class="stat-label">Traces simultanées sans limite</div></div>
    <div class="stat-item"><div class="stat-num">100%</div><div class="stat-label">Gratuit, sans inscription ni pub</div></div>
  </div>
</div>

<!-- ── FONCTIONNALITÉS ── -->
<section id="fonctionnalites" class="features-bg">
  <div class="section-inner">
    <div class="section-header">
      <span class="eyebrow">Fonctionnalités</span>
      <h2>Tout ce dont vous avez besoin pour créer et modifier vos traces GPS</h2>
      <p>Des outils pensés pour les cyclistes, randonneurs et trailers qui veulent planifier leurs itinéraires et reprendre le contrôle de leurs parcours.</p>
    </div>
    <div class="features-grid">

      <article class="feat-card">
        <div class="feat-icon">🗺️</div>
        <h3>Création d'itinéraire depuis la carte</h3>
        <p>Dessinez votre parcours directement sur la carte en cliquant sur les points de passage souhaités. GPX Edit Pro calcule automatiquement le chemin via BRouter (vélo, VTT, randonnée) ou OSRM (route). Idéal pour planifier une sortie avant de partir, sans jamais avoir de fichier de départ.</p>
        <span class="feat-tag">Planification</span>
      </article>

      <article class="feat-card">
        <h3>Import multi-format (GPX, FIT, TCX, KML)</h3>
        <p>Chargez vos traces depuis Garmin, Wahoo, Suunto ou tout autre appareil GPS. GPX Edit Pro accepte les formats GPX, FIT, TCX et KML sans conversion préalable. Glissez-déposez votre fichier ou cliquez pour parcourir — votre itinéraire s'affiche instantanément sur la carte interactive.</p>
        <span class="feat-tag">Import / Export</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">💾</div>
        <h3>Export GPX multi-traces</h3>
        <p>Exportez une ou plusieurs traces au format GPX standard, compatible avec Garmin Connect, Strava, Komoot et RideWithGPS. Chaque fichier exporté conserve les points, l'altitude et les métadonnées — prêt à être transféré sur votre compteur de vélo ou partagé avec votre communauté.</p>
        <span class="feat-tag">Import / Export</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">✏️</div>
        <h3>Édition manuelle des points de passage</h3>
        <p>Déplacez, ajoutez ou supprimez des points sur votre trace GPX directement sur la carte. Idéal pour corriger un détour involontaire, ajuster un virage serré ou supprimer un segment erroné enregistré lors d'une pause. Chaque modification est annulable grâce au système d'undo intégré.</p>
        <span class="feat-tag">Édition de traces</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">✂️</div>
        <h3>Découpage de trace (Split)</h3>
        <p>Coupez votre parcours en deux à l'endroit exact de votre choix — un simple clic sur la carte place le marqueur de coupe. Parfait pour isoler un segment de compétition, extraire une montée spécifique ou séparer deux sorties enregistrées à la suite. Les deux moitiés deviennent des traces indépendantes éditables.</p>
        <span class="feat-tag">Édition de traces</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🔗</div>
        <h3>Fusion de traces (Merge)</h3>
        <p>Combinez plusieurs segments GPX en un seul parcours cohérent. Le mode itinérance optimise automatiquement l'ordre et l'orientation des étapes pour construire un grand itinéraire logique — idéal pour préparer une randonnée longue distance ou assembler les étapes d'un tour cycliste.</p>
        <span class="feat-tag">Édition de traces</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🔄</div>
        <h3>Inverser une trace</h3>
        <p>Retournez le sens d'un parcours en un clic. Vous avez enregistré un aller, mais vous souhaitez naviguer au retour ? Inversez la trace GPX et exportez-la directement. Utile également pour proposer le même parcours dans les deux sens lors d'événements sportifs.</p>
        <span class="feat-tag">Édition de traces</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🔁</div>
        <h3>Boucle automatique (Loop)</h3>
        <p>Transformez n'importe quelle trace en boucle fermée. GPX Edit Pro calcule automatiquement le chemin de retour via BRouter pour un résultat réaliste sur route ou sentier. Pour les trails, la fermeture manuelle ou en ligne droite est également disponible. Idéal pour planifier un parcours en circuit.</p>
        <span class="feat-tag">Planification</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🚀</div>
        <h3>Déplacement du point de départ</h3>
        <p>Recalibrez le point de départ d'une boucle sans modifier le reste du parcours. Utile lorsque votre trace commence à un endroit difficile d'accès et que vous préférez démarrer depuis un parking ou un arrêt de transport. Le reste de l'itinéraire reste intact.</p>
        <span class="feat-tag">Édition de traces</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🗜️</div>
        <h3>Simplification de trace (Douglas-Peucker)</h3>
        <p>Allégez vos fichiers GPX volumineux avec l'algorithme de simplification Douglas-Peucker. Réduisez le nombre de points sans perdre la fidélité visuelle du tracé — indispensable pour les appareils GPS à mémoire limitée ou pour accélérer le chargement sur les plateformes sportives.</p>
        <span class="feat-tag">Optimisation</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">📊</div>
        <h3>Profil d'altitude interactif</h3>
        <p>Visualisez le profil altimétrique de votre trace en temps réel, avec dénivelé positif, négatif, altitude min/max et pente par segment. Survolez la courbe pour localiser chaque point sur la carte. Un outil incontournable pour analyser un parcours VTT ou évaluer la difficulté d'une randonnée.</p>
        <span class="feat-tag">Analyse de données</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🏔️</div>
        <h3>Correction d'altitude (IGN / DEM)</h3>
        <p>Recalculez les données d'altitude de votre trace à partir de modèles numériques de terrain de haute précision. Corrigez les valeurs erronées enregistrées par un GPS en mauvaises conditions — indispensable pour obtenir un dénivelé fiable avant une sortie ou pour des calculs de performance.</p>
        <span class="feat-tag">Analyse de données</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🎨</div>
        <h3>Visualisation des pentes (Slope)</h3>
        <p>Colorisez automatiquement votre trace selon le gradient de pente : du vert doux pour les replats jusqu'au rouge vif pour les montées sévères. Identifiez d'un coup d'œil les passages techniques d'un trail ou les côtes à gérer sur un parcours vélo. La légende interactive guide votre lecture.</p>
        <span class="feat-tag">Analyse de données</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🛣️</div>
        <h3>Dessin de trace avec routage intelligent (OSRM / BRouter)</h3>
        <p>Créez un nouvel itinéraire en cliquant sur la carte. Le moteur de routage OSRM (route) ou BRouter (vélo, VTT, trail) calcule automatiquement le chemin le plus adapté entre vos points. Complétez ensuite votre propre trace ou étendez un parcours existant dans n'importe quelle direction.</p>
        <span class="feat-tag">Planification</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">📍</div>
        <h3>Points d'intérêt (POI) autour du tracé</h3>
        <p>Découvrez les points d'intérêt proches de votre trace : refuges, cols, fontaines, restaurants, parkings, sommets et bien plus. Les POI s'affichent directement sur la carte avec leurs informations Overpass/OSM. Cliquez pour dévier votre itinéraire et passer par un point qui vous intéresse.</p>
        <span class="feat-tag">Planification</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🎯</div>
        <h3>Déviation automatique via un POI</h3>
        <p>En un clic sur un point d'intérêt, GPX Edit Pro recalcule votre trace pour inclure ce détour et revenir sur l'itinéraire principal. Le tout en conservant le profil général de votre parcours. Idéal pour intégrer un ravitaillement, un sommet ou un site remarquable sans reprogrammer l'ensemble du trajet.</p>
        <span class="feat-tag">Planification</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">📐</div>
        <h3>Itinéraire planifié avec statistiques en temps réel</h3>
        <p>Planifiez un nouvel itinéraire depuis zéro avec le module de routage intégré. Ajoutez des étapes, choisissez votre profil (vélo de route, VTT, randonnée) et obtenez instantanément distance, dénivelé estimé et temps de parcours. Enregistrez le résultat comme nouvelle trace GPX.</p>
        <span class="feat-tag">Planification</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🏃</div>
        <h3>Simulation d'activité (fichier FIT synthétique)</h3>
        <p>Générez un fichier FIT simulé à partir de n'importe quelle trace GPX — avec vitesse, fréquence cardiaque et puissance synthétiques. Utile pour visualiser une activité sur Garmin Connect, tester des plans d'entraînement ou recréer des données manquantes après un bug d'enregistrement.</p>
        <span class="feat-tag">Outils spéciaux</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">📡</div>
        <h3>Géolocalisation en temps réel avec boussole</h3>
        <p>Activez le GPS de votre appareil pour vous positionner sur la carte et suivre votre progression le long de la trace. La boussole intégrée indique votre cap et la distance au tracé le plus proche — pratique en phase de reconnaissance terrain ou lors d'une sortie de navigation.</p>
        <span class="feat-tag">Navigation</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">⚖️</div>
        <h3>Comparaison de traces</h3>
        <p>Comparez plusieurs parcours côte à côte : distance, dénivelé, durée, vitesse moyenne. Le panneau de comparaison vous permet de trier et d'évaluer rapidement plusieurs variantes d'un même itinéraire avant de choisir celui qui correspond le mieux à votre forme du jour ou à vos objectifs.</p>
        <span class="feat-tag">Analyse de données</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">↩️</div>
        <h3>Annulation / Rétablissement (Undo/Redo)</h3>
        <p>Chaque modification est enregistrée dans un historique. Un faux clic, une coupe ratée ? Annulez l'opération en un clic et retrouvez votre trace intacte. Travaillez sereinement, sans crainte de perdre votre travail — même après plusieurs étapes d'édition successives.</p>
        <span class="feat-tag">Confort d'utilisation</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🗺️</div>
        <h3>Changement de fond de carte</h3>
        <p>Basculez entre différents fonds cartographiques : carte topographique, satellite, plan, OpenTopoMap. Visualisez vos traces sur le support qui correspond le mieux à votre activité — le mode satellite est idéal pour les sentiers hors-piste, la topo pour l'analyse du relief.</p>
        <span class="feat-tag">Confort d'utilisation</span>
      </article>

      <article class="feat-card">
        <div class="feat-icon">🔄</div>
        <h3>Réorganisation et renommage des traces</h3>
        <p>Glissez-déposez vos traces pour les réordonner dans la liste. Renommez-les directement depuis la barre latérale et personnalisez leur couleur pour les distinguer sur la carte. Indispensable dès lors que vous gérez plusieurs segments ou étapes dans une même session de travail.</p>
        <span class="feat-tag">Gestion des traces</span>
      </article>

    </div>
  </div>
</section>

<!-- ── COMMENT ÇA MARCHE ── -->
<section id="comment-ca-marche">
  <div class="section-inner">
    <div class="section-header">
      <span class="eyebrow">Comment ça marche</span>
      <h2>Modifier une trace GPX en 4 étapes</h2>
      <p>Aucune installation, aucun compte. Votre éditeur GPX est prêt en quelques secondes.</p>
    </div>
    <div class="steps">
      <div class="step">
        <div class="step-num">1</div>
        <h3>Chargez votre fichier</h3>
        <p>Glissez-déposez un fichier GPX, FIT, TCX ou KML. Chargez plusieurs traces simultanément.</p>
      </div>
      <div class="step">
        <div class="step-num">2</div>
        <h3>Visualisez & analysez</h3>
        <p>Consultez le profil d'altitude, les statistiques et la visualisation des pentes sur la carte interactive.</p>
      </div>
      <div class="step">
        <div class="step-num">3</div>
        <h3>Modifiez à votre guise</h3>
        <p>Coupez, fusionnez, inversez, simplifiez, déplacez le départ — chaque opération est annulable.</p>
      </div>
      <div class="step">
        <div class="step-num">4</div>
        <h3>Exportez en GPX</h3>
        <p>Téléchargez votre trace optimisée, compatible avec tous les appareils GPS et plateformes sportives.</p>
      </div>
    </div>
  </div>
</section>

<!-- ── FORMATS ── -->
<section class="formats-bg" id="formats">
  <div class="section-inner">
    <div class="section-header">
      <span class="eyebrow">Compatibilité</span>
      <h2>Tous vos formats GPS, dans un seul outil</h2>
      <p>GPX Edit Pro lit les fichiers de vos appareils Garmin, Wahoo, Suunto et de toutes vos applications sportives.</p>
    </div>
    <div class="formats-grid">
      <ul class="format-list">
        <li>
          <span class="format-icon">📄</span>
          <div>
            <strong>GPX — GPS Exchange Format</strong>
            <span>Le standard universel. Compatible avec tous les appareils et plateformes (Garmin, Strava, Komoot, Wahoo, RideWithGPS…).</span>
          </div>
        </li>
        <li>
          <span class="format-icon">⌚</span>
          <div>
            <strong>FIT — Flexible and Interoperable Data Transfer</strong>
            <span>Format propriétaire Garmin, lu directement. Conserve les données de fréquence cardiaque, puissance et cadence à l'import.</span>
          </div>
        </li>
        <li>
          <span class="format-icon">🏃</span>
          <div>
            <strong>TCX — Training Center XML</strong>
            <span>Ancien format Garmin Training Center. Compatible avec les exports Polar, Suunto et Garmin ancienne génération.</span>
          </div>
        </li>
        <li>
          <span class="format-icon">🌐</span>
          <div>
            <strong>KML — Keyhole Markup Language</strong>
            <span>Format Google Earth et Maps. Importez vos itinéraires tracés dans Google Maps ou créés sous QGIS.</span>
          </div>
        </li>
        <li>
          <span class="format-icon">📤</span>
          <div>
            <strong>Export GPX standard</strong>
            <span>Un seul format d'export, mais le meilleur : GPX standard, accepté partout, avec points, altitude et métadonnées.</span>
          </div>
        </li>
      </ul>
      <div class="format-visual" aria-label="Exemple de structure GPX">
        <span class="cm">&lt;!-- Exemple de fichier GPX --&gt;</span><br>
        &lt;<span class="kw">gpx</span> <span class="attr">version</span>=<span class="val">"1.1"</span>&gt;<br>
        &nbsp;&nbsp;&lt;<span class="kw">trk</span>&gt;<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&lt;<span class="kw">name</span>&gt;<span class="val">Col de la Forclaz</span>&lt;/<span class="kw">name</span>&gt;<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&lt;<span class="kw">trkseg</span>&gt;<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<span class="kw">trkpt</span> <span class="attr">lat</span>=<span class="val">"46.018"</span> <span class="attr">lon</span>=<span class="val">"6.887"</span>&gt;<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;<span class="kw">ele</span>&gt;<span class="val">1527</span>&lt;/<span class="kw">ele</span>&gt;<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/<span class="kw">trkpt</span>&gt;<br>
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cm">... (n points)</span><br>
        &nbsp;&nbsp;&nbsp;&nbsp;&lt;/<span class="kw">trkseg</span>&gt;<br>
        &nbsp;&nbsp;&lt;/<span class="kw">trk</span>&gt;<br>
        &lt;/<span class="kw">gpx</span>&gt;
      </div>
    </div>
  </div>
</section>

<!-- ── OUTILS AVANCÉS ── -->
<section id="avances">
  <div class="section-inner">
    <div class="section-header">
      <span class="eyebrow">Outils avancés</span>
      <h2>Au-delà de l'édition basique</h2>
      <p>Des fonctionnalités pensées pour les utilisateurs exigeants et les cas d'usage spécifiques.</p>
    </div>
    <div class="adv-grid">
      <ul class="adv-list">
        <li>
          <span class="adv-icon">🏔️</span>
          <div>
            <strong>Correction d'altitude multi-sources</strong>
            <p>Recalcul des élévations via MNT français (IGN), européen (EU-DEM) et mondial (SRTM). Couverture des DOM-TOM incluse.</p>
          </div>
        </li>
        <li>
          <span class="adv-icon">🧭</span>
          <div>
            <strong>Routage multi-profil</strong>
            <p>OSRM pour la route, BRouter pour le vélo, VTT et randonnée. Choisissez le réseau adapté à votre activité pour un calcul réaliste.</p>
          </div>
        </li>
        <li>
          <span class="adv-icon">🔁</span>
          <div>
            <strong>Fusion avec optimisation de l'ordre</strong>
            <p>Algorithme glouton ou force brute pour trouver l'ordre optimal d'assemblage de plusieurs étapes en un seul itinéraire continu.</p>
          </div>
        </li>
        <li>
          <span class="adv-icon">🏃</span>
          <div>
            <strong>Génération de fichier FIT simulé</strong>
            <p>Créez une activité FIT synthétique (vitesse, FC, puissance) depuis n'importe quelle trace GPX — compatible Garmin Connect.</p>
          </div>
        </li>
        <li>
          <span class="adv-icon">🌐</span>
          <div>
            <strong>Géolocalisation GPS + boussole</strong>
            <p>Suivez votre position en temps réel sur la trace. La boussole indique votre cap et la distance au tracé le plus proche.</p>
          </div>
        </li>
        <li>
          <span class="adv-icon">💾</span>
          <div>
            <strong>Session persistante</strong>
            <p>Votre travail est automatiquement sauvegardé dans le navigateur (sessionStorage). Rechargez la page sans perdre vos traces en cours d'édition.</p>
          </div>
        </li>
      </ul>

      <div class="adv-card">
        <h3>Modules complémentaires intégrés</h3>
        <div class="sub-items">
          <div class="sub-item">🗺️ Carte topographique, satellite, OpenTopoMap</div>
          <div class="sub-item">📍 POI Overpass/OSM filtré par activité</div>
          <div class="sub-item">📐 Raccourcis clavier pour les actions fréquentes</div>
          <div class="sub-item">📱 Interface mobile optimisée (dock bas)</div>
          <div class="sub-item">🎨 Couleur personnalisée par trace</div>
          <div class="sub-item">🔀 Glisser-déposer pour réordonner les traces</div>
          <div class="sub-item">↩️ Historique d'annulation complet (undo/redo)</div>
          <div class="sub-item">⚖️ Panneau de comparaison multi-traces</div>
          <div class="sub-item">LOD adaptatif pour les grandes traces (&gt;50k pts)</div>
        </div>
      </div>
    </div>
  </div>
</section>

<!-- ── FAQ ── -->
<section class="faq-bg" id="faq">
  <div class="section-inner">
    <div class="section-header">
      <span class="eyebrow">FAQ</span>
      <h2>Questions fréquentes</h2>
    </div>
    <div class="faq-grid">
      <div class="faq-item">
        <h3>Est-ce vraiment gratuit ?</h3>
        <p>Oui, entièrement gratuit. Pas d'abonnement, pas de publicité, pas de compte à créer. Le projet est maintenu par passion pour les sports outdoor et le partage open source.</p>
      </div>
      <div class="faq-item">
        <h3>Mes fichiers GPX partent-ils sur un serveur ?</h3>
        <p>Non. Tout le traitement est réalisé localement dans votre navigateur via JavaScript. Vos données ne quittent jamais votre appareil, même pour la correction d'altitude (API externe en option).</p>
      </div>
      <div class="faq-item">
        <h3>Compatible Garmin, Wahoo, Strava ?</h3>
        <p>Oui. Les exports GPX sont au format standard compatible avec Garmin Connect, Wahoo ELEMNT, Suunto App, Strava, Komoot, RideWithGPS et la plupart des outils GPS.</p>
      </div>
      <div class="faq-item">
        <h3>Quels appareils sont supportés ?</h3>
        <p>GPX Edit Pro fonctionne sur tous les navigateurs modernes (Chrome, Firefox, Safari, Edge). Une interface mobile optimisée est disponible pour smartphone et tablette.</p>
      </div>
      <div class="faq-item">
        <h3>Puis-je charger plusieurs traces à la fois ?</h3>
        <p>Oui. Chargez autant de traces que vous le souhaitez simultanément, gérez-les dans la barre latérale, comparez-les et fusionnez-les en quelques clics.</p>
      </div>
      <div class="faq-item">
        <h3>La simplification de trace dégrade-t-elle la qualité ?</h3>
        <p>L'algorithme Douglas-Peucker conserve la forme générale du tracé tout en réduisant le nombre de points. Vous contrôlez le niveau de tolérance pour trouver le bon équilibre entre fidélité et légèreté du fichier.</p>
      </div>
    </div>
  </div>
</section>

<!-- ── CTA FINAL ── -->
<section class="cta-section">
  <h2>Prêt à créer ou modifier vos traces GPS ?</h2>
  <p>Rejoignez des milliers de cyclistes, randonneurs et trailers qui utilisent GPX Edit Pro pour planifier et optimiser leurs parcours.</p>
  <a href="https://gpx-edit-pro.ovh/editeur-gpx/" class="btn-cta-white">Ouvrir l'éditeur GPX gratuitement →</a>
</section>

<!-- ── FOOTER ── -->
<footer>
  <p>
    © <span id="footer-year">2025</span> <a href="https://gpx-edit-pro.ovh">GPX Edit Pro</a> — Éditeur GPX en ligne gratuit ·
    <a href="https://gpx-edit-pro.ovh/editeur-gpx/">Ouvrir l'application</a> ·
    Traitement 100% local, aucune donnée collectée ·
    <button class="footer-rgpd-link" onclick="openRgpd()" aria-haspopup="dialog">Politique de confidentialité</button>
  </p>
</footer>

<!-- ── OVERLAY RGPD ── -->
<div id="rgpd-overlay" role="dialog" aria-modal="true" aria-labelledby="rgpd-title" hidden>
  <div class="rgpd-backdrop" onclick="closeRgpd()"></div>
  <div class="rgpd-panel">
    <div class="rgpd-header">
      <h2 id="rgpd-title">Politique de confidentialité</h2>
      <button class="rgpd-close" onclick="closeRgpd()" aria-label="Fermer">✕</button>
    </div>
    <div class="rgpd-body">

      <p class="rgpd-update">Dernière mise à jour : juin 2025</p>

      <h3>1. Responsable du traitement</h3>
      <p>Le site <strong>gpx-edit-pro.ovh</strong> est édité à titre personnel par <strong>Damien ANNE</strong>. Pour toute question relative à la protection de vos données, vous pouvez contacter le responsable à l'adresse suivante : <span class="rgpd-email" aria-label="adresse e-mail contact at gpx-edit-pro point ovh"></span></p>

      <h3>2. Données collectées</h3>
      <p><strong>GPX Edit Pro ne collecte aucune donnée personnelle.</strong> L'outil fonctionne entièrement dans votre navigateur (traitement côté client, JavaScript). Les fichiers que vous chargez (GPX, FIT, TCX, KML) ne sont jamais transmis à un serveur distant : ils restent sur votre appareil et en mémoire temporaire de votre navigateur le temps de la session.</p>

      <h3>3. Cookies et traceurs</h3>
      <p>Ce site <strong>n'utilise aucun cookie</strong>, ni traceur publicitaire, ni outil d'analyse d'audience (Google Analytics, Matomo, etc.). Aucun identifiant de session persistant n'est déposé sur votre terminal.</p>
      <p>Certaines fonctionnalités optionnelles (correction d'altitude, calcul d'itinéraire) font appel à des API tierces publiques (IGN, BRouter, OSRM). Ces requêtes transmettent uniquement les coordonnées GPS nécessaires au calcul, sans aucune donnée personnelle.</p>

      <h3>4. Stockage local (sessionStorage)</h3>
      <p>Afin de préserver votre travail en cas de rechargement de page, l'application utilise le <strong>sessionStorage</strong> de votre navigateur pour sauvegarder temporairement vos traces en cours d'édition. Ces données sont stockées <em>localement sur votre appareil</em>, jamais sur un serveur, et sont automatiquement supprimées à la fermeture de l'onglet ou du navigateur.</p>
      <p>Conformément à l'article 5 de la directive ePrivacy 2002/58/CE (telle que transposée en droit français à l'article L.32-3 du Code des postes et des communications électroniques), ce type de stockage strictement fonctionnel et limité à la session ne requiert pas de consentement préalable.</p>

      <h3>5. Hébergement</h3>
      <p>Le site est hébergé par <strong>OVHcloud</strong> (SAS, 2 rue Kellermann, 59100 Roubaix, France), acteur européen soumis au RGPD. OVHcloud peut collecter des journaux d'accès techniques (adresse IP, horodatage, URL) à des fins de sécurité et de maintenance, conformément à ses propres obligations légales. Ces journaux sont conservés pendant une durée maximale d'un an.</p>

      <h3>6. Bases légales (RGPD)</h3>
      <p>Dans la mesure où aucune donnée personnelle n'est collectée par GPX Edit Pro lui-même, le Règlement (UE) 2016/679 (RGPD) ne trouve pas d'application directe aux traitements réalisés par l'outil. Les traitements éventuels de l'hébergeur reposent sur l'intérêt légitime au sens de l'article 6(1)(f) du RGPD.</p>

      <h3>7. Vos droits</h3>
      <p>Conformément au RGPD et à la loi Informatique et Libertés n° 78-17 du 6 janvier 1978 modifiée, vous disposez des droits suivants concernant vos données personnelles : droit d'accès, de rectification, d'effacement, de limitation, d'opposition et de portabilité. Dans la mesure où aucune donnée personnelle n'est stockée par ce service, l'exercice de ces droits s'applique uniquement aux journaux d'hébergement, pour lesquels vous pouvez contacter OVHcloud directement.</p>
      <p>Vous disposez également du droit d'introduire une réclamation auprès de la <strong>CNIL</strong> (Commission Nationale de l'Informatique et des Libertés) — <a href="https://www.cnil.fr" target="_blank" rel="noopener noreferrer">www.cnil.fr</a>.</p>

      <h3>8. Sécurité</h3>
      <p>L'ensemble des échanges entre votre navigateur et le serveur est chiffré via le protocole <strong>HTTPS/TLS</strong>. Vos fichiers GPS ne transitant pas par nos serveurs, ils ne sont exposés à aucun risque lié à une fuite de données côté serveur.</p>

      <h3>9. Mineurs</h3>
      <p>Ce service ne collectant aucune donnée personnelle, il ne présente pas de risque particulier pour les mineurs. Aucune donnée concernant des mineurs n'est traitée.</p>

      <h3>10. Modifications</h3>
      <p>Cette politique peut être mise à jour pour refléter l'évolution du service ou de la réglementation applicable. La date de dernière mise à jour est indiquée en haut de ce document. Nous vous invitons à la consulter régulièrement.</p>

    </div>
    <div class="rgpd-footer">
      <button class="btn-primary" onclick="closeRgpd()">J'ai compris</button>
    </div>
  </div>
</div>

<script>
  /* Année dynamique footer */
  document.getElementById('footer-year').textContent = new Date().getFullYear();

  /* Email anti-bot : reconstruction côté client uniquement */
  (function() {
    const parts = ['contact', '\u0040', 'gpx\u002Dedit\u002Dpro', '\u002E', 'ovh'];
    const addr  = parts.join('');
    const el    = document.querySelector('.rgpd-email');
    if (el) {
      const a = document.createElement('a');
      a.href = 'mai' + 'lto:' + addr;
      a.textContent = addr;
      el.appendChild(a);
    }
  })();

  /* RGPD overlay */
  function openRgpd() {
    const overlay = document.getElementById('rgpd-overlay');
    overlay.hidden = false;
    document.body.style.overflow = 'hidden';
    overlay.querySelector('.rgpd-close').focus();
  }
  function closeRgpd() {
    document.getElementById('rgpd-overlay').hidden = true;
    document.body.style.overflow = '';
  }
  document.addEventListener('keydown', e => {
    if (e.key === 'Escape') closeRgpd();
  });

  /* Smooth nav highlight on scroll */
  const sections = document.querySelectorAll('section[id], header[id]');
  const navLinks = document.querySelectorAll('.nav-links a');
  const obs = new IntersectionObserver(entries => {
    entries.forEach(e => {
      if (e.isIntersecting) {
        navLinks.forEach(l => l.style.color = '');
        const active = document.querySelector(`.nav-links a[href="#${e.target.id}"]`);
        if (active) active.style.color = 'var(--trail)';
      }
    });
  }, { threshold: 0.4 });
  sections.forEach(s => obs.observe(s));

  /* Mobile menu toggle (simple) */
  document.querySelector('.nav-mobile-menu')?.addEventListener('click', () => {
    const nl = document.querySelector('.nav-links');
    if (nl) nl.style.display = nl.style.display === 'flex' ? 'none' : 'flex';
  });
</script>

</body>
</html>