<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MonPermisIA — Simulation graphique PCMI 1 & 6</title>
<meta property="og:type" content="website">
<meta property="og:site_name" content="MonPermisIA">
<meta property="og:title" content="Simulation PCMI 1 & 6 — MonPermisIA">
<meta property="og:description" content="Simulez et générez les pièces PCMI 1 et PCMI 6 de votre dossier de permis de construire. Export PDF officiel en un clic.">
<meta property="og:url" content="https://monpermisia.fr/simulation-pcmi.html">
<meta property="og:image" content="https://monpermisia.fr/og-image.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Simulation PCMI 1 & 6 — MonPermisIA">
<meta name="twitter:description" content="Simulez et générez les pièces PCMI 1 et PCMI 6 de votre dossier de permis de construire. Export PDF officiel en un clic.">
<meta name="twitter:image" content="https://monpermisia.fr/og-image.png">
<link rel="canonical" href="https://monpermisia.fr/simulation-pcmi.html">
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="manifest" href="/manifest.json">
<meta name="theme-color" content="#2563EB">
<link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;600;700;800&family=DM+Mono:wght@400;500&family=DM+Sans:wght@300;400;500;600&display=swap" rel="stylesheet">
<style>

:root {
  /* Brand yellow */
  --yellow: #2563EB; --yellow-h: #1D4ED8; --yellow-l: #EFF6FF; --yellow-m: #DBEAFE;
  /* Ink */
  --ink: #0D1117; --ink2: #2A3444; --ink3: #5E6E84; --ink4: #9AAABB;
  /* Surfaces */
  --bg: #FFFFFF; --bg2: #F8F6F2; --bg3: #F0EDE6;
  /* Borders */
  --border: rgba(0,0,0,.08); --border2: rgba(0,0,0,.14);
  /* Semantic */
  --green: #0C9059; --red: #C92B2B; --amber: #B07D0A;
  /* Shadows */
  --shadow: 0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.06);
  --shadow-md: 0 4px 16px rgba(0,0,0,.08);
  --shadow-lg: 0 12px 40px rgba(0,0,0,.10);
  /* Radii */
  --r: 8px; --r2: 14px; --r3: 20px;
  /* JS theme vars */
  --accent: #B07D0A; --accent-lo: #FFFBEB; --accent-border: #FDE68A;
  --surf: #FFFFFF; --ok: #0C9059;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:'DM Sans',sans-serif;background:#FFFFFF;color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.6}
::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border2);border-radius:2px}
nav{position:fixed;top:0;left:0;right:0;z-index:100;height:60px;background:rgba(255,255,255,.97);border-bottom:1px solid var(--border);backdrop-filter:blur(12px);display:flex;align-items:center;padding:0 1.5rem;gap:1rem;box-shadow:0 1px 0 var(--border)}
.nav-logo{display:flex;align-items:center;gap:10px;text-decoration:none;cursor:pointer}
.nav-logo-mark{width:36px;height:36px;background:var(--yellow);border-radius:9px;display:flex;align-items:center;justify-content:center;font-family:'Syne',sans-serif;font-weight:900;font-size:18px;color:#000;box-shadow:0 2px 8px rgba(37,99,235,.35)}
nav.nav-dark .nav-logo-mark{box-shadow:0 2px 12px rgba(37,99,235,.4)}
.nav-logo-text{font-family:'Syne',sans-serif;font-weight:900;font-size:16px;letter-spacing:-.03em;color:var(--ink)}
.nav-logo-text span{color:var(--yellow-h)}
/* Nav dropdown menus */
.nav-item{position:relative}
.nav-item-btn{padding:6px 12px;border-radius:8px;font-size:13px;font-weight:500;color:var(--ink3);background:transparent;border:none;cursor:pointer;font-family:'DM Sans',sans-serif;transition:.15s;display:flex;align-items:center;gap:5px}
.nav-item-btn:hover{background:var(--bg2);color:var(--ink)}
.nav-chevron{font-size:9px;opacity:.5;transition:transform .2s}
.nav-item:has(.nav-dropdown.open) .nav-chevron{transform:rotate(180deg)}
.nav-dropdown{display:none;position:absolute;top:calc(100% + 8px);left:0;background:#fff;border:1.5px solid var(--border);border-radius:var(--r2);box-shadow:0 8px 32px rgba(0,0,0,.12);min-width:280px;padding:.5rem;z-index:200}
.nav-dropdown.open{display:block}
.dd-label{font-size:10px;font-weight:700;font-family:'DM Mono',monospace;color:var(--ink4);text-transform:uppercase;letter-spacing:.09em;padding:.375rem .75rem .25rem;margin-bottom:.25rem}
.dd-item{display:flex;align-items:center;gap:.75rem;padding:.625rem .75rem;border-radius:8px;text-decoration:none;cursor:pointer;transition:.12s;border:none;background:transparent;width:100%;text-align:left}
.dd-item:hover{background:var(--yellow-l)}
.dd-ico{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:16px;border:1px solid rgba(0,0,0,.06)}
.dd-txt{flex:1;min-width:0}
.dd-title{font-size:13px;font-weight:600;color:var(--ink);letter-spacing:-.01em}
.dd-sub{font-size:11px;color:var(--ink3);margin-top:.1rem;line-height:1.4}
.dd-badge{display:inline-block;padding:1px 7px;border-radius:4px;font-size:9px;font-weight:700;font-family:'DM Mono',monospace;letter-spacing:.05em;margin-top:.25rem;text-transform:uppercase}
.dd-badge{background:var(--yellow-m);color:var(--amber)}
.dd-badge.ok{background:#D1FAE5;color:#065F46}
.dd-badge.info{background:#DBEAFE;color:#1D4ED8}
.nav-links{display:flex;margin-left:.5rem;gap:.25rem}
.nav-item{position:relative}
.nav-link-btn{padding:6px 12px;border-radius:8px;font-size:13px;font-weight:500;color:var(--ink3);background:transparent;border:none;cursor:pointer;font-family:'DM Sans',sans-serif;transition:.15s;display:flex;align-items:center;gap:4px}
.nav-link-btn:hover{background:var(--bg3);color:var(--ink)}
.nav-link-btn svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.nav-dropdown{display:none;position:absolute;top:calc(100% + 6px);left:0;background:#fff;border:1.5px solid var(--border);border-radius:var(--r2);box-shadow:var(--shadow-lg);min-width:200px;padding:.5rem;z-index:200}
.nav-dropdown.open{display:block}
.nav-dd-item{display:flex;align-items:center;gap:.625rem;padding:.5rem .75rem;border-radius:8px;font-size:13px;color:var(--ink2);cursor:pointer;transition:.12s;font-weight:500}
.nav-dd-item:hover{background:var(--yellow-l);color:var(--ink)}
.nav-dd-item.active{background:var(--yellow-m);color:var(--amber);font-weight:700}
.nav-dd-item svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}
.nav-r{margin-left:auto;display:flex;gap:.5rem;align-items:center}
.nav-info{font-size:11px;color:var(--ink4);font-family:'DM Mono',monospace}
.btn-connexion,.btn-launch{padding:9px 20px;border-radius:var(--r);font-size:13px;font-weight:700;color:#000;background:var(--yellow);border:none;cursor:pointer;font-family:'DM Sans',sans-serif;transition:.15s;box-shadow:0 2px 8px rgba(37,99,235,.3);letter-spacing:-.01em}
.btn-connexion:hover,.btn-launch:hover{background:var(--yellow-h);transform:translateY(-1px)}
.copilote{background:var(--bg2);border-bottom:1px solid var(--border);padding:1rem 2rem}
.copilote-inner{max-width:1200px;margin:0 auto;display:flex;align-items:flex-start;gap:1rem;flex-wrap:wrap}
.copilote-badge{display:inline-flex;align-items:center;gap:5px;background:#fff;border:1.5px solid var(--yellow-m);border-radius:20px;padding:3px 12px;font-size:10px;font-weight:600;color:var(--amber);font-family:'DM Mono',monospace;letter-spacing:.06em;text-transform:uppercase;flex-shrink:0;margin-top:2px}
.copilote-text{font-size:13px;color:var(--ink2);line-height:1.6}
.copilote-text strong{color:var(--ink);font-weight:700}
.copilote-text a{color:var(--yellow-h);text-decoration:none;font-weight:600}
.layout{display:grid;grid-template-columns:260px 1fr;min-height:calc(100vh - 60px)}
.sidebar{background:var(--bg2);border-right:1px solid rgba(0,0,0,.07);padding:1.25rem 1rem;display:flex;flex-direction:column;position:sticky;top:60px;height:calc(100vh - 60px);overflow-y:auto}
.sidebar-head{padding:.5rem .5rem 1rem;border-bottom:1px solid var(--border);margin-bottom:.75rem}
.sidebar-proj-name{font-family:'Syne',sans-serif;font-size:14px;font-weight:800;color:var(--ink);letter-spacing:-.01em;margin-bottom:2px}
.sidebar-proj-adr{font-size:11px;color:var(--ink4);font-family:'DM Mono',monospace}
.prog-wrap{margin-top:.625rem}
.prog-label{display:flex;justify-content:space-between;font-size:10px;font-family:'DM Mono',monospace;color:var(--ink4);margin-bottom:.35rem;text-transform:uppercase;letter-spacing:.06em}
.prog-bar{height:4px;background:var(--border);border-radius:2px;overflow:hidden}
.prog-fill{height:100%;background:var(--yellow);border-radius:2px;transition:width .4s ease}
.wz-step{display:flex;flex-direction:column;margin-bottom:2px;cursor:pointer}
.wz-block{display:flex;align-items:center;gap:10px;padding:.625rem .75rem;border-radius:var(--r);border:1.5px solid transparent;transition:all .15s;background:transparent}
.wz-block:hover{background:var(--yellow-l);border-color:var(--yellow-m)}
.wz-num{width:26px;height:26px;border-radius:50%;background:var(--bg3);border:1.5px solid var(--border2);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;font-family:'DM Mono',monospace;color:var(--ink4);flex-shrink:0;transition:.15s}
.wz-info{flex:1;min-width:0}
.wz-name{font-size:13px;color:var(--ink3);font-weight:500;line-height:1.3;letter-spacing:-.01em}
.wz-sub{font-size:10px;color:var(--ink4);margin-top:.1rem;font-family:'DM Mono',monospace}
.wz-arrow{text-align:center;color:var(--border2);font-size:10px;padding:.1rem 0 .1rem .75rem}
.wz-step.done .wz-block{background:#F0FDF4;border-color:#BBF7D0}
.wz-step.done .wz-num{background:var(--green);border-color:var(--green);color:#fff;font-size:11px}
.wz-step.done .wz-name{color:var(--green)}
.wz-step.done .wz-arrow{color:#BBF7D0}
.wz-step.active .wz-block{background:var(--yellow-m);border-color:var(--yellow)}
.wz-step.active .wz-num{background:var(--yellow);border-color:var(--yellow-h);color:#000;font-weight:700}
.wz-step.active .wz-name{color:var(--amber);font-weight:700}
.wz-step.active .wz-sub{color:var(--amber)}
.wz-step.active .wz-arrow{color:var(--yellow)}
.wz-step.locked{opacity:.45;cursor:not-allowed}
.main{padding:2rem;overflow-y:auto;background:var(--bg);min-height:calc(100vh - 60px)}
.badge-phase{display:inline-flex;align-items:center;gap:6px;background:var(--yellow-m);border:1.5px solid var(--yellow);border-radius:20px;padding:4px 14px;font-size:10px;font-weight:700;color:var(--amber);font-family:'DM Mono',monospace;letter-spacing:.06em;text-transform:uppercase;margin-bottom:.875rem}
.badge-phase::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--yellow-h)}
.wz-title{font-family:'Syne',sans-serif;font-size:clamp(22px,3vw,32px);font-weight:900;letter-spacing:-.03em;color:var(--ink);margin-bottom:1.75rem}
.wz-title span{color:var(--yellow-h)}
.section{display:none}.section.active{display:block}
.hint{background:var(--yellow-l);border:1.5px solid var(--yellow-m);border-radius:var(--r2);padding:1rem 1.25rem;margin-bottom:1.5rem;display:flex;align-items:flex-start;gap:.875rem}
.hint-ico{width:32px;height:32px;border-radius:8px;background:var(--yellow-m);display:flex;align-items:center;justify-content:center;flex-shrink:0;border:1px solid var(--yellow)}
.hint-ico svg{width:16px;height:16px;stroke:var(--amber);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.hint-title{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:.25rem}
.hint-text{font-size:12px;color:var(--ink3);line-height:1.6}
.card{background:#fff;border:1.5px solid rgba(0,0,0,.08);border-radius:var(--r2);overflow:hidden;margin-bottom:1.25rem;box-shadow:0 1px 4px rgba(0,0,0,.05),0 1px 2px rgba(0,0,0,.04)}
.card-head{padding:.875rem 1.25rem;border-bottom:1px solid rgba(0,0,0,.06);display:flex;align-items:center;gap:.75rem;background:var(--bg2)}
.card-ico{width:32px;height:32px;border-radius:8px;background:var(--yellow-l);border:1px solid var(--yellow-m);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.card-ico svg{width:16px;height:16px;stroke:var(--amber);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.card-title{font-size:13px;font-weight:700;color:var(--ink);letter-spacing:-.01em}
.card-body{padding:1.25rem}
.card-foot{padding:.875rem 1.25rem;border-top:1px solid var(--border);background:var(--bg2);display:flex;gap:.5rem;flex-wrap:wrap}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:.875rem;margin-bottom:.875rem}
.form-row.tri{grid-template-columns:1fr 1fr 1fr}
.form-row.full{grid-template-columns:1fr}
.field{display:flex;flex-direction:column;gap:.375rem}
.field label{font-size:10px;font-weight:600;color:var(--ink3);text-transform:uppercase;letter-spacing:.08em;font-family:'DM Mono',monospace}
.field input,.field select,.field textarea{padding:10px 14px;border:1.5px solid var(--border2);border-radius:var(--r);font-size:14px;font-family:'DM Sans',sans-serif;color:var(--ink);background:#fff;outline:none;transition:.15s}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--yellow-h);box-shadow:0 0 0 3px rgba(37,99,235,.15)}
.field input::placeholder{color:var(--ink4)}
.field textarea{resize:none;min-height:80px;line-height:1.55}
.field select option{background:#fff}
.btn{padding:9px 18px;border-radius:var(--r);font-size:13px;font-weight:700;cursor:pointer;font-family:'DM Sans',sans-serif;border:none;transition:.15s;display:inline-flex;align-items:center;gap:6px}
.btn svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.btn-jaune,.btn-yellow{background:var(--yellow);color:#000;box-shadow:0 2px 8px rgba(37,99,235,.3)}
.btn-jaune:hover:not(:disabled),.btn-yellow:hover:not(:disabled){background:var(--yellow-h);transform:translateY(-1px)}
.btn-ol,.btn-outline{background:#fff;color:var(--ink2);border:1.5px solid var(--border2)}
.btn-ol:hover:not(:disabled),.btn-outline:hover:not(:disabled){border-color:var(--yellow-h);color:var(--amber)}
.btn-ia{background:var(--yellow-l);color:var(--amber);border:1.5px solid var(--yellow-m)}
.btn-ia:hover:not(:disabled){background:var(--yellow-m)}
.btn-ok,.btn-vert{background:#D1FAE5;color:#065F46;border:1.5px solid #6EE7B7}
.btn-danger{background:#FEE2E2;color:#991B1B;border:1.5px solid #FCA5A5}
.btn:disabled{opacity:.35;cursor:not-allowed;transform:none;box-shadow:none}
.btn-next{padding:10px 24px;border-radius:var(--r);font-size:14px;font-weight:700;color:#000;background:var(--yellow);border:none;cursor:pointer;font-family:'DM Sans',sans-serif;transition:.15s;box-shadow:0 2px 8px rgba(37,99,235,.3);display:inline-flex;align-items:center;gap:7px}
.btn-next:hover:not(:disabled){background:var(--yellow-h);transform:translateY(-1px)}
.btn-next:disabled{opacity:.35;cursor:not-allowed;transform:none}
.btn-prev{padding:10px 18px;border-radius:var(--r);font-size:14px;font-weight:600;color:var(--ink3);background:#fff;border:1.5px solid var(--border2);cursor:pointer;font-family:'DM Sans',sans-serif;transition:.15s;display:inline-flex;align-items:center;gap:6px}
.btn-prev:hover{border-color:var(--yellow-h);color:var(--amber)}
.agenda-header{display:flex;align-items:center;gap:.875rem;margin-bottom:1rem;flex-wrap:wrap}
.agenda-mois{font-family:'Syne',sans-serif;font-size:18px;font-weight:800;color:var(--ink);letter-spacing:-.02em}
.cal-nav-btn{width:32px;height:32px;border-radius:8px;border:1.5px solid var(--border2);background:#fff;color:var(--ink3);cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;transition:.12s}
.cal-nav-btn:hover{border-color:var(--yellow-h);color:var(--amber)}
.legende{display:flex;gap:.875rem;flex-wrap:wrap;margin-left:auto}
.leg-item{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--ink4);font-family:'DM Mono',monospace}
.leg-dot{width:10px;height:10px;border-radius:50%}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;margin-bottom:1.25rem}
.cal-day-name{text-align:center;font-size:10px;font-weight:700;font-family:'DM Mono',monospace;color:var(--ink4);text-transform:uppercase;letter-spacing:.06em;padding:.375rem 0}
.cal-cell{min-height:64px;border-radius:var(--r);padding:.375rem;border:1.5px solid transparent;background:var(--bg2);position:relative;cursor:pointer;transition:.12s}
.cal-cell:hover{background:var(--yellow-l);border-color:var(--yellow-m)}
.cal-cell.today{background:var(--yellow-m);border-color:var(--yellow)}
.cal-cell.other-month{opacity:.4}
.cal-num{font-size:11px;font-weight:700;font-family:'DM Mono',monospace;color:var(--ink3);margin-bottom:.25rem}
.cal-cell.today .cal-num{color:var(--amber);font-weight:800}
.ev{font-size:9px;font-weight:600;border-radius:4px;padding:1px 5px;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-family:'DM Mono',monospace}
.ev-rg{background:#FEF3C7;color:#92400E}
.ev-doc{background:#DBEAFE;color:#1D4ED8}
.ev-travaux{background:#D1FAE5;color:#065F46}
.ev-custom{background:#EDE9FE;color:#5B21B6}
.ev-admin{background:#E0F2FE;color:#0369A1}
.export-section{display:flex;gap:.625rem;margin-top:1rem;flex-wrap:wrap}
.export-btns{display:flex;gap:.5rem}
.dv-list{display:flex;flex-direction:column;gap:.75rem;margin-bottom:1rem}
.dv-item{background:var(--bg2);border:1.5px solid var(--border);border-radius:var(--r2);padding:1rem 1.25rem;display:flex;align-items:center;gap:1rem;flex-wrap:wrap}
.dv-lot{font-size:13px;font-weight:700;color:var(--ink);min-width:140px}
.dv-artisan{font-size:12px;color:var(--ink3);flex:1}
.dv-montant{font-family:'Syne',sans-serif;font-size:18px;font-weight:800;color:var(--ink);letter-spacing:-.02em}
.dv-pct{font-size:11px;font-family:'DM Mono',monospace;color:var(--ink4)}
.dv-min{width:100%}
.upload-z{border:2px dashed var(--border2);border-radius:var(--r2);padding:1.5rem;text-align:center;cursor:pointer;transition:.15s;background:var(--bg2)}
.upload-z:hover{border-color:var(--yellow-h);background:var(--yellow-l)}
.upload-z-title{font-size:13px;font-weight:600;color:var(--ink2);margin-bottom:.25rem}
.upload-z-sub{font-size:11px;color:var(--ink4);font-family:'DM Mono',monospace}
.ia-box{background:var(--yellow-l);border:1.5px solid var(--yellow-m);border-radius:var(--r2);padding:1.125rem 1.375rem;margin-top:1rem}
.ia-t{font-size:10px;font-weight:700;font-family:'DM Mono',monospace;color:var(--amber);text-transform:uppercase;letter-spacing:.1em;margin-bottom:.75rem;display:flex;align-items:center;gap:6px}
.ia-t::before{content:'✦'}
.ia-box p{font-size:13px;color:var(--ink2);line-height:1.7}
.ia-box h4{font-size:13px;font-weight:700;color:var(--ink);margin:.75rem 0 .3rem}
.reunion-zone,.reun-zone{background:var(--bg2);border:1.5px solid var(--border);border-radius:var(--r2);padding:1.25rem;margin-bottom:1.25rem}
.tr-tabs{display:flex;gap:.375rem;margin-bottom:.875rem;flex-wrap:wrap}
.tr-tab{padding:6px 14px;border-radius:8px;font-size:12px;font-weight:600;cursor:pointer;border:1.5px solid var(--border);background:#fff;color:var(--ink3);font-family:'DM Mono',monospace;transition:.12s;text-transform:uppercase;letter-spacing:.04em}
.tr-tab:hover{border-color:var(--yellow-h);color:var(--amber)}
.tr-tab.active{background:var(--yellow-m);border-color:var(--yellow);color:var(--amber)}
.tr-pane{display:none}.tr-pane.active{display:block}
.tr-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:.625rem;margin-top:.875rem}
.tr-step-c{background:#fff;border:1.5px solid var(--border);border-radius:var(--r);padding:.75rem;text-align:center}
.tr-step-n{font-size:20px;font-weight:800;font-family:'Syne',sans-serif;color:var(--yellow-h);margin-bottom:.25rem}
.tr-step-l{font-size:10px;color:var(--ink4);font-family:'DM Mono',monospace;text-transform:uppercase;letter-spacing:.06em}
.cr-section{background:var(--bg2);border:1.5px solid var(--border);border-radius:var(--r2);padding:1rem;margin-bottom:.75rem}
.cr-section-title{font-size:11px;font-weight:700;font-family:'DM Mono',monospace;color:var(--ink4);text-transform:uppercase;letter-spacing:.08em;margin-bottom:.625rem}
.mas-i{display:flex;align-items:flex-start;gap:.625rem;padding:.45rem 0;border-bottom:1px solid var(--border);font-size:13px;color:var(--ink2)}
.mas-i:last-child{border-bottom:none}
.mas-n{width:22px;height:22px;border-radius:6px;background:var(--yellow-m);color:var(--amber);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:'DM Mono',monospace}
.fin-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem;margin-bottom:1.25rem}
.fin-card{background:#fff;border:1.5px solid var(--border);border-radius:var(--r2);padding:1rem 1.125rem}
.fin-k{font-size:9px;font-weight:600;font-family:'DM Mono',monospace;color:var(--ink4);text-transform:uppercase;letter-spacing:.1em;margin-bottom:.375rem}
.fin-val{font-family:'Syne',sans-serif;font-size:22px;font-weight:800;color:var(--ink);letter-spacing:-.03em;line-height:1}
.fin-val.ok{color:var(--green)}.fin-val.warn{color:var(--amber)}.fin-val.ko{color:var(--red)}
.fin-sub{font-size:10px;color:var(--ink4);font-family:'DM Mono',monospace;margin-top:.2rem}
.lot-table{width:100%;border-collapse:collapse;font-size:13px}
.lot-table th{background:var(--bg3);color:var(--ink3);font-size:10px;font-family:'DM Mono',monospace;text-transform:uppercase;letter-spacing:.06em;padding:.5rem .75rem;text-align:left;border-bottom:1.5px solid var(--border)}
.lot-table td{padding:.55rem .75rem;border-bottom:1px solid var(--border);color:var(--ink2);vertical-align:middle}
.lot-table tr:hover td{background:var(--bg2)}
.lot-row{display:flex;align-items:center;gap:8px}
.lot-bar-wrap{flex:1;height:6px;background:var(--border);border-radius:3px;overflow:hidden}
.lot-bar-fill{height:100%;border-radius:3px;background:var(--yellow);transition:width .3s}
.cl-section-head{font-size:11px;font-weight:700;font-family:'DM Mono',monospace;color:var(--ink3);text-transform:uppercase;letter-spacing:.1em;padding:.625rem 0;border-bottom:1.5px solid var(--border);margin-bottom:.375rem;display:flex;align-items:center;gap:.5rem}
.cl-item{display:flex;align-items:center;gap:.75rem;padding:.45rem .5rem;border-radius:8px;cursor:pointer;transition:.12s}
.cl-item:hover{background:var(--bg2)}
.cl-check{width:20px;height:20px;border-radius:6px;border:1.5px solid var(--border2);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:.15s;background:#fff}
.cl-check.ok{background:var(--green);border-color:var(--green);color:#fff;font-size:11px;font-weight:700}
.cl-label{font-size:13px;color:var(--ink2);flex:1;line-height:1.4}
.cl-item.checked .cl-label{text-decoration:line-through;color:var(--ink4)}
.cl-ref{font-size:10px;font-family:'DM Mono',monospace;color:var(--ink4)}
.reserve-item{background:#fff;border:1.5px solid var(--border);border-radius:var(--r2);padding:1rem 1.25rem;margin-bottom:.75rem}
.res-head{display:flex;align-items:flex-start;gap:.75rem;margin-bottom:.5rem}
.res-badge{padding:2px 9px;border-radius:5px;font-size:10px;font-weight:700;font-family:'DM Mono',monospace;text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}
.res-haute{background:#FEE2E2;color:#991B1B}
.res-moyenne{background:#FEF3C7;color:#92400E}
.res-basse{background:var(--bg3);color:var(--ink4)}
.res-desc{font-size:13px;font-weight:600;color:var(--ink);flex:1}
.res-meta{font-size:11px;color:var(--ink4);font-family:'DM Mono',monospace;margin-bottom:.5rem}
.res-actions{display:flex;gap:.5rem;flex-wrap:wrap}
.courrier-grid,.courrier-list{display:grid;grid-template-columns:repeat(3,1fr);gap:.875rem}
.courrier-card{background:#fff;border:1.5px solid var(--border);border-radius:var(--r2);padding:1.25rem;cursor:pointer;transition:.18s;text-align:left}
.courrier-card:hover{border-color:var(--yellow-h);box-shadow:var(--shadow-md);transform:translateY(-2px)}
.courrier-ico{width:40px;height:40px;border-radius:10px;background:var(--yellow-l);border:1px solid var(--yellow-m);display:flex;align-items:center;justify-content:center;margin-bottom:.875rem}
.courrier-ico svg{width:20px;height:20px;stroke:var(--amber);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.courrier-nom{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:.25rem;letter-spacing:-.01em}
.courrier-desc{font-size:11px;color:var(--ink3);line-height:1.5}
.pub-native{background:var(--yellow-l);border:1.5px solid var(--yellow-m);border-radius:var(--r2);padding:1rem 1.25rem;margin-bottom:1.25rem;display:flex;align-items:flex-start;gap:.875rem}
.pub-native-left{}
.pub-native-tag{font-size:9px;font-weight:700;font-family:'DM Mono',monospace;text-transform:uppercase;letter-spacing:.08em;color:var(--amber);margin-bottom:.3rem}
.pub-native-title{font-size:14px;font-weight:700;color:var(--ink);margin-bottom:.25rem}
.pub-native-sub{font-size:12px;color:var(--ink3);line-height:1.5}
.pub-native-cta{padding:8px 16px;border-radius:var(--r);font-size:12px;font-weight:700;background:var(--yellow);color:#000;border:none;cursor:pointer;white-space:nowrap;flex-shrink:0;font-family:'DM Sans',sans-serif;transition:.12s;display:block;margin-top:.5rem}
.pub-native-cta:hover{background:var(--yellow-h)}
.pub-native-dismiss{background:transparent;border:none;color:var(--ink4);cursor:pointer;font-size:18px;line-height:1;margin-left:auto;flex-shrink:0;padding:0 2px}
.modal-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:500;align-items:center;justify-content:center;backdrop-filter:blur(4px)}
.modal-overlay.open{display:flex}
.modal{background:#fff;border-radius:var(--r3);width:560px;max-width:92vw;max-height:88vh;overflow-y:auto;box-shadow:var(--shadow-lg)}
.modal-head{padding:1.25rem 1.5rem;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}
.modal-title{font-family:'Syne',sans-serif;font-size:17px;font-weight:800;color:var(--ink);letter-spacing:-.02em}
.modal-close{width:30px;height:30px;border-radius:8px;border:1.5px solid var(--border);background:#fff;color:var(--ink3);cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;transition:.12s}
.modal-close:hover{border-color:var(--red);color:var(--red)}
.modal-body{padding:1.5rem}
.modal-foot{padding:1rem 1.5rem;border-top:1px solid var(--border);display:flex;gap:.5rem;justify-content:flex-end;background:var(--bg2)}
.nav-b{position:sticky;bottom:0;background:rgba(255,255,255,.97);border-top:1px solid var(--border);padding:10px 2rem;display:flex;align-items:center;gap:1rem;backdrop-filter:blur(12px);padding-bottom:calc(10px + env(safe-area-inset-bottom))}
#navBasInfo{font-size:11px;color:var(--ink4);font-family:'DM Mono',monospace;flex:1;text-align:center}
.spinner{display:inline-block;width:16px;height:16px;border-radius:50%;border:2px solid var(--yellow-m);border-top-color:var(--yellow);animation:sp .6s linear infinite;vertical-align:middle;margin-right:6px}
@keyframes sp{to{transform:rotate(360deg)}}
.toast{position:fixed;bottom:24px;right:24px;z-index:999;padding:11px 20px;border-radius:10px;font-size:13px;font-weight:500;font-family:'DM Mono',monospace;animation:tin .2s ease;pointer-events:none;background:#0D1117;color:rgba(255,255,255,.9);box-shadow:0 8px 32px rgba(0,0,0,.3)}
@keyframes tin{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
.part-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.75rem}
.part-c{background:#fff;border:1.5px solid var(--border);border-radius:var(--r2);padding:1rem;text-align:center;cursor:pointer;transition:.18s}
.part-c:hover{border-color:var(--yellow-h);box-shadow:var(--shadow-md);transform:translateY(-2px)}
.part-c.sel{border-color:var(--yellow);background:var(--yellow-l)}
.part-ico{font-size:28px;margin-bottom:.5rem}
.part-nom{font-size:12px;font-weight:700;color:var(--ink);margin-bottom:.2rem}
.part-spec{font-size:10px;color:var(--ink4);font-family:'DM Mono',monospace}
.bandeau{background:var(--yellow-m);border:1.5px solid var(--yellow);border-radius:var(--r2);padding:1rem 1.25rem;display:flex;align-items:center;gap:.875rem;margin-top:1rem}
.bandeau-txt{font-size:13px;color:var(--amber);font-weight:600;flex:1}
.bandeau-code{font-family:'Syne',sans-serif;font-size:20px;font-weight:900;color:var(--ink);letter-spacing:.05em;cursor:pointer}
.cart-row{display:grid;grid-template-columns:1fr auto auto;gap:.625rem;align-items:center;padding:.35rem 0;border-bottom:1px solid var(--border)}
.rg{display:grid;grid-template-columns:1fr 1fr;gap:1rem}
footer{background:var(--ink);color:rgba(255,255,255,.5);padding:2rem;font-size:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem}
footer a{color:rgba(255,255,255,.5);text-decoration:none;transition:.15s}
footer a:hover{color:var(--yellow-h)}
.footer-links{display:flex;gap:1.5rem;flex-wrap:wrap}
.footer-logo{font-family:'Syne',sans-serif;font-weight:900;font-size:15px;color:#fff}
.footer-logo span{color:var(--yellow-h)}
@media(max-width:1024px){.layout{grid-template-columns:220px 1fr}.fin-grid{grid-template-columns:1fr 1fr}.courrier-grid,.courrier-list{grid-template-columns:1fr 1fr}}
@media(max-width:768px){.layout{grid-template-columns:1fr}.sidebar{display:none}.main{padding:1.25rem}.form-row,.form-row.tri{grid-template-columns:1fr}.fin-grid{grid-template-columns:1fr 1fr}.tr-steps{grid-template-columns:1fr 1fr}.courrier-grid,.courrier-list{grid-template-columns:1fr 1fr}}
@media(max-width:480px){.fin-grid,.courrier-grid,.courrier-list{grid-template-columns:1fr}}
@media(max-width:640px){
  nav{padding:0 1rem}
  .nav-links{display:none}
  .btn-ghost{display:none}
  .hero{padding:6rem 1.25rem 3.5rem}
  .hero-ctas{flex-direction:column;align-items:center}
  .hero-cta-main,.hero-cta-sec{width:100%;justify-content:center}
  .hero-proof{gap:.875rem;flex-direction:column;align-items:center}
  .hero-scroll{display:none}
  .faq-section{padding:3rem 1.25rem}
}
/* ── NAV ADAPTIVE ── */
nav{position:fixed;top:0;left:0;right:0;z-index:100;height:60px;display:flex;align-items:center;padding:0 1.5rem;gap:1rem;transition:background .3s,border-color .3s}
nav.nav-dark{background:rgba(7,17,29,.85);border-bottom:1px solid rgba(255,255,255,.07);backdrop-filter:blur(16px)}
nav.nav-light{background:rgba(255,255,255,.97);border-bottom:1px solid var(--border);backdrop-filter:blur(12px);box-shadow:0 1px 0 var(--border)}
nav.nav-dark .nav-logo-text{color:#fff}
nav.nav-dark .nav-logo-text span{color:var(--yellow)}
nav.nav-light .nav-logo-text{color:var(--ink)}
nav.nav-light .nav-logo-text span{color:var(--yellow-h)}
nav.nav-dark .nav-item-btn{color:rgba(255,255,255,.65)}
nav.nav-dark .nav-item-btn:hover{background:rgba(255,255,255,.09);color:#fff}
nav.nav-light .nav-item-btn{color:var(--ink3)}
nav.nav-light .nav-item-btn:hover{background:var(--bg2);color:var(--ink)}
nav.nav-dark .btn-connexion,nav.nav-dark .btn-launch{background:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.15);box-shadow:none}
nav.nav-dark .btn-connexion:hover,nav.nav-dark .btn-launch:hover{background:rgba(255,255,255,.18)}
.nav-r{margin-left:auto;display:flex;gap:.5rem;align-items:center}
.btn-ghost{padding:9px 18px;border-radius:var(--r);font-size:13px;font-weight:700;cursor:pointer;font-family:'DM Sans',sans-serif;transition:.15s;text-decoration:none;display:inline-flex;align-items:center;border:none}
nav.nav-dark .btn-ghost{color:rgba(255,255,255,.8);background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.15)}
nav.nav-dark .btn-ghost:hover{background:rgba(255,255,255,.18);color:#fff}
nav.nav-light .btn-ghost{color:var(--ink2);background:transparent;border:1.5px solid var(--border2)}
nav.nav-light .btn-ghost:hover{border-color:var(--ink2);color:var(--ink)}
/* Hero */
.hero{min-height:100svh;background:#07111D;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:7rem 2rem 5rem;text-align:center;position:relative;overflow:hidden}
.hero::before{content:'';position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px);background-size:64px 64px;pointer-events:none}
.hero::after{content:'';position:absolute;inset:0;background:radial-gradient(ellipse 70% 55% at 50% 20%,rgba(37,99,235,.15),transparent 70%);pointer-events:none}
.hero-inner{position:relative;z-index:1;max-width:820px}
.hero-badge{display:inline-flex;align-items:center;gap:7px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:50px;padding:6px 18px;font-size:11px;font-weight:600;color:rgba(255,255,255,.75);font-family:'DM Mono',monospace;letter-spacing:.09em;text-transform:uppercase;margin-bottom:2rem}
.hero-badge-dot{width:6px;height:6px;border-radius:50%;background:var(--yellow);box-shadow:0 0 8px var(--yellow)}
.hero-title{font-family:'Syne',sans-serif;font-size:clamp(40px,6.5vw,78px);font-weight:900;letter-spacing:-.04em;line-height:1.0;color:#fff;margin-bottom:1.5rem;text-wrap:balance}
.hero-title .t-yellow{color:transparent;background:linear-gradient(135deg,var(--yellow),#F59E0B);-webkit-background-clip:text;background-clip:text}
.hero-sub{font-size:clamp(15px,2vw,19px);color:rgba(255,255,255,.55);max-width:520px;margin:0 auto 2.75rem;line-height:1.7}
.hero-ctas{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap;margin-bottom:3rem}
.hero-cta-main{padding:15px 34px;border-radius:var(--r2);font-size:15px;font-weight:700;color:#000;background:var(--yellow);border:none;cursor:pointer;font-family:'DM Sans',sans-serif;transition:.2s;box-shadow:0 4px 24px rgba(37,99,235,.45);display:inline-flex;align-items:center;gap:8px}
.hero-cta-main:hover{background:var(--yellow-h);transform:translateY(-2px);box-shadow:0 8px 32px rgba(37,99,235,.5)}
.hero-cta-sec{padding:15px 28px;border-radius:var(--r2);font-size:15px;font-weight:600;color:rgba(255,255,255,.8);background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.15);cursor:pointer;font-family:'DM Sans',sans-serif;transition:.15s}
.hero-cta-sec:hover{background:rgba(255,255,255,.14);color:#fff}
.hero-proof{display:flex;align-items:center;justify-content:center;gap:2rem;flex-wrap:wrap}
.hero-proof-item{display:flex;align-items:center;gap:6px;font-size:12.5px;color:rgba(255,255,255,.45);font-family:'DM Mono',monospace;letter-spacing:.03em}
.hero-proof-item::before{content:'✓';color:var(--yellow);font-weight:700}
.hero-scroll{position:absolute;bottom:2rem;left:50%;transform:translateX(-50%);z-index:1;display:flex;flex-direction:column;align-items:center;gap:6px;color:rgba(255,255,255,.2);font-size:10px;font-family:'DM Mono',monospace;letter-spacing:.1em;text-transform:uppercase}
.hero-scroll-line{width:1px;height:36px;background:linear-gradient(to bottom,rgba(255,255,255,.25),transparent);animation:scrollLine 2s ease-in-out infinite}
@keyframes scrollLine{0%,100%{opacity:.4}50%{opacity:1}}
/* FAQ section */
.faq-section{padding:5rem 2rem;background:#fff;border-top:1px solid var(--border)}
.faq-inner{max-width:720px;margin:0 auto}
.faq-eyebrow{display:inline-flex;align-items:center;gap:7px;font-size:11px;font-family:'DM Mono',monospace;font-weight:500;letter-spacing:.13em;text-transform:uppercase;color:var(--amber);margin-bottom:.875rem}
.faq-eyebrow::before{content:'';width:18px;height:1.5px;background:var(--yellow)}
.faq-section-title{font-family:'Syne',sans-serif;font-size:clamp(26px,3.8vw,44px);font-weight:800;letter-spacing:-.035em;color:var(--ink);line-height:1.1;margin-bottom:2.5rem}
.faq-list{}
.faq-item{border-bottom:1px solid var(--border);overflow:hidden}
.faq-q{font-size:15px;font-weight:600;color:var(--ink2);cursor:pointer;padding:1.125rem 0;display:flex;justify-content:space-between;align-items:center;gap:1rem;transition:color .15s;user-select:none}
.faq-q:hover{color:var(--ink)}
.faq-q::after{display:none}
.faq-icon{width:26px;height:26px;border-radius:50%;background:var(--bg2);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:.2s;color:var(--ink3);font-size:16px;font-weight:300}
.faq-item.open .faq-icon{background:var(--yellow);border-color:var(--yellow);color:#000;transform:rotate(45deg)}
.faq-a{font-size:14px;color:var(--ink3);line-height:1.75;max-height:0;overflow:hidden;transition:max-height .35s ease,padding .35s;padding:0}
.faq-item.open .faq-a{max-height:240px;padding-bottom:1.25rem}
/* App section label */
.app-anchor{scroll-margin-top:60px}

</style>

  <!-- Google Analytics GA4 — MonPermisIA -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=G-N0JHGHRG5H"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag('js', new Date());
    gtag('config', 'G-N0JHGHRG5H', {
      page_title: document.title,
      send_page_view: true
    });
    // Events personnalisés MonPermisIA
    function trackProcedure(type){gtag('event','procedure_selectionnee',{type_procedure:type});}
    function trackPLU(commune, doc){gtag('event','analyse_plu',{commune:commune,document:doc});}
    function trackDossier(type){gtag('event','dossier_genere',{type_dossier:type});}
    function trackAWIN(partenaire, montant){gtag('event','clic_affiliation',{partenaire:partenaire,valeur:montant});}
  </script>
  
  
  
</head>
<body>
<nav style="position:fixed;top:0;left:0;right:0;z-index:200;height:60px;background:rgba(255,255,255,.97);border-bottom:1px solid #E2E8F0;backdrop-filter:blur(12px);display:flex;align-items:center;padding:0 1.5rem;gap:1rem;box-shadow:0 1px 3px rgba(0,0,0,.06);font-family:'DM Sans',sans-serif">
  <a href="/index.html" style="display:flex;align-items:center;gap:10px;text-decoration:none;flex-shrink:0">
    <img src="data:image/png;base64,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" width="36" height="36" alt="MonPermisIA" style="border-radius:10px;flex-shrink:0">
    <span style="font-family:'Syne',sans-serif;font-weight:900;font-size:15px;letter-spacing:-.03em;color:#0F172A">Mon<span style="color:#2563EB">Permis</span>IA</span>
  </a>
  <div style="display:flex;gap:.25rem;margin-left:.5rem">
    <a href="/assistant.html" style="padding:5px 12px;border-radius:8px;font-size:13px;font-weight:500;color:#64748B;text-decoration:none">Créer dossier</a>
    <a href="/assistant.html" style="padding:5px 12px;border-radius:8px;font-size:13px;font-weight:500;color:#64748B;text-decoration:none">Analyse PLU</a>
    <a href="/editeur-plan.html" style="padding:5px 12px;border-radius:8px;font-size:13px;font-weight:500;color:#64748B;text-decoration:none">Plan de masse</a>
  </div>
  <div style="margin-left:auto;display:flex;gap:.5rem;align-items:center">
    <a href="https://monchantieria.fr" style="padding:7px 16px;border-radius:8px;font-size:12px;font-weight:600;color:#334155;border:1.5px solid #CBD5E1;text-decoration:none">MonChantierIA →</a>
    <a href="/index.html" style="padding:8px 18px;border-radius:8px;font-size:12px;font-weight:700;color:#fff;background:#2563EB;text-decoration:none;box-shadow:0 2px 8px rgba(37,99,235,.3)">← Accueil</a>
  </div>
</nav>

<!-- TOP -->
<div class="top" style="margin-top:60px">
  <div class="logo">Mon<b>Permis</b>IA</div>
  <div class="sep"></div>
  <div class="top-label">Simulation graphique — PCMI 1 & 6</div>
  <div class="top-right">
    <button class="tbtn tbtn-ghost" onclick="resetAll()">Réinitialiser</button>
    <button class="tbtn tbtn-vert" onclick="exportBoth()">↓ Exporter PCMI 1 + 6</button>
  </div>
</div>

<div class="ws">

<!-- ═══ PANEL GAUCHE ═══ -->
<div class="panel left">

  <!-- INFOS PROJET -->
  <div class="pblock">
    <div class="pt">Projet</div>
    <label>Maître d'ouvrage</label>
    <input id="pMO" type="text" placeholder="M. & Mme Dupont">
    <label>Adresse du terrain</label>
    <input id="pAdr" type="text" placeholder="7 imp. des Pins, 85300 Challans">
    <label>Commune</label>
    <input id="pCom" type="text" placeholder="Challans">
    <label>Référence cadastrale</label>
    <input id="pRef" type="text" placeholder="85 044 AB 0023">
    <label>Nature des travaux</label>
    <select id="pNat">
      <option>Maison individuelle neuve</option>
      <option>Extension de maison</option>
      <option>Surélévation</option>
      <option>Garage / carport</option>
      <option>Annexe / dépendance</option>
    </select>
  </div>

  <!-- PHOTO TERRAIN (fond) -->
  <div class="pblock">
    <div class="pt">Photo terrain</div>
    <div class="upz" id="upzTerrain" onclick="trigUp('inTerrain')"
      ondragover="event.preventDefault();this.classList.add('drag')"
      ondragleave="this.classList.remove('drag')"
      ondrop="handleDrop(event,'terrain')">
      <img id="thumbTerrain" class="upz-thumb">
      <div class="upz-main" id="upzTerrainTxt">Vue du terrain / rue</div>
      <div class="upz-sub">JPG · PNG · HEIC · jusqu'à 20Mo</div>
      <input type="file" id="inTerrain" accept="image/*" style="display:none" onchange="loadTerrain(event)">
    </div>
    <label>Orientation</label>
    <select id="pOrient">
      <option value="N">Vue vers le Nord</option>
      <option value="S">Vue vers le Sud</option>
      <option value="E">Vue vers l'Est</option>
      <option value="O" selected>Vue vers l'Ouest</option>
      <option value="NE">Vue vers le Nord-Est</option>
      <option value="SO">Vue vers le Sud-Ouest</option>
    </select>
  </div>

  <!-- FAÇADE / MAISON -->
  <div class="pblock">
    <div class="pt">Façade du projet</div>
    <div class="upz" id="upzFacade" onclick="trigUp('inFacade')"
      ondragover="event.preventDefault();this.classList.add('drag')"
      ondragleave="this.classList.remove('drag')"
      ondrop="handleDrop(event,'facade')">
      <img id="thumbFacade" class="upz-thumb">
      <div class="upz-main" id="upzFacadeTxt">Image façade / 3D du projet</div>
      <div class="upz-sub">Rendu architecte, croquis, 3D...</div>
      <input type="file" id="inFacade" accept="image/*" style="display:none" onchange="loadFacade(event)">
    </div>

    <!-- Remove.bg -->
    <div id="rbgSection" style="display:none">
      <div class="prev-strip">
        <div class="prev-box" id="prevOrig">
          <span>Original</span>
          <div class="prev-lbl">Avant</div>
        </div>
        <div class="prev-box checker-bg" id="prevRbg">
          <span>Sans fond</span>
          <div class="prev-lbl">Après</div>
        </div>
      </div>
      <div id="rbgChip" class="stat-chip chip-info">Fond non supprimé</div>
      <button class="btn btn-v" id="btnRbg" onclick="supprimerFond()">
        Supprimer le fond
      </button>

      <!-- API Key (optionnel HD) -->
      <details style="margin-bottom:.55rem">
        <summary style="font-size:10px;color:var(--gris);font-family:'DM Mono',monospace;cursor:pointer;margin-bottom:.4rem;letter-spacing:.04em">CLÉ API REMOVE.BG (OPTIONNEL)</summary>
        <div class="ak-row" style="margin-top:.4rem">
          <input type="password" id="rbgKey" placeholder="Clé pour HD" value="">
          <button class="ak-btn" onclick="saveKey()">Sauver</button>
        </div>
        <div style="font-size:9px;color:var(--gris);margin-top:4px;line-height:1.5;font-family:'DM Mono',monospace">
          Sans clé → suppression SD locale (gratuit)<br>
          Avec clé → HD, 50 img/mois gratuites
        </div>
      </details>
    </div>
  </div>

</div>

<!-- ═══ ZONE CENTRALE ═══ -->
<div class="canvas-zone">
  <div class="cv-tabs">
    <div class="cv-tab on" id="ctab1" onclick="switchView('pcmi1')">PCMI 1 — Vue lointaine</div>
    <div class="cv-tab" id="ctab6" onclick="switchView('pcmi6')">PCMI 6 — Vue rapprochée</div>
    <div class="cv-tab" id="ctabComp" onclick="switchView('compare')">Comparaison</div>
  </div>
  <div class="cv-wrap" id="cvWrap">
    <!-- Placeholder -->
    <div class="ph" id="ph">
      <div class="ph-ring">
        <svg viewBox="0 0 24 24"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"/><polyline points="17 8 12 3 7 8"/><line x1="12" y1="3" x2="12" y2="15"/></svg>
      </div>
      <div class="ph-t">Simulation graphique PCMI</div>
      <div class="ph-s">Uploadez la photo du terrain et l'image de la façade — l'IA supprime le fond et compose automatiquement PCMI 1 et PCMI 6</div>
    </div>
    <canvas id="mainCanvas"></canvas>
  </div>
  <div class="cv-bar">
    <button class="cv-mini-btn" onclick="zoom(1.15)">+ Zoom</button>
    <button class="cv-mini-btn" onclick="zoom(0.87)">− Zoom</button>
    <button class="cv-mini-btn" onclick="zoomFit()">Ajuster</button>
    <div class="cv-bar-sep"></div>
    <button class="cv-mini-btn" onclick="toggleCartouche()">Cartouche</button>
    <button class="cv-mini-btn" onclick="toggleNord()">Nord</button>
    <div style="margin-left:auto;display:flex;gap:.75rem">
      <span id="cvZoom">100%</span>
      <div class="cv-bar-sep"></div>
      <span id="cvMode">Mode : PCMI 1</span>
    </div>
  </div>
</div>

<!-- ═══ PANEL DROIT ═══ -->
<div class="panel right">

  <!-- COMPOSITION -->
  <div class="pblock">
    <div class="pt">Composition</div>

    <div class="sl-row">
      <label>Opacité</label>
      <input type="range" id="slOp" min="20" max="100" value="88" oninput="updateComp()">
      <span class="sl-val" id="vOp">88%</span>
    </div>
    <div class="sl-row">
      <label>Taille %</label>
      <input type="range" id="slSc" min="5" max="95" value="32" oninput="updateComp()">
      <span class="sl-val" id="vSc">32%</span>
    </div>
    <div class="sl-row">
      <label>Horiz.</label>
      <input type="range" id="slX" min="0" max="100" value="28" oninput="updateComp()">
      <span class="sl-val" id="vX">28%</span>
    </div>
    <div class="sl-row">
      <label>Vertical</label>
      <input type="range" id="slY" min="0" max="100" value="25" oninput="updateComp()">
      <span class="sl-val" id="vY">25%</span>
    </div>

    <div style="display:flex;gap:5px;margin-bottom:.55rem">
      <button class="btn btn-g" style="flex:1;padding:6px" onclick="flipH()">⟺ Miroir</button>
      <button class="btn btn-g" style="flex:1;padding:6px" onclick="resetComp()">↺ Reset</button>
    </div>

    <!-- Positions rapides -->
    <label>Placement rapide</label>
    <div class="pg" id="pgrid">
      <div class="pb" onclick="qpos(15,15,28)">↖ Fond G</div>
      <div class="pb on" onclick="qpos(35,20,32)">↑ Fond C</div>
      <div class="pb" onclick="qpos(55,15,28)">↗ Fond D</div>
      <div class="pb" onclick="qpos(10,40,35)">← Mil. G</div>
      <div class="pb" onclick="qpos(32,38,36)">⊙ Centre</div>
      <div class="pb" onclick="qpos(55,40,35)">→ Mil. D</div>
      <div class="pb" onclick="qpos(8,58,40)">↙ Avant G</div>
      <div class="pb" onclick="qpos(30,60,42)">↓ Avant C</div>
      <div class="pb" onclick="qpos(52,58,40)">↘ Avant D</div>
    </div>
  </div>

  <!-- OMBRE & EFFETS -->
  <div class="pblock">
    <div class="pt">Effets visuels</div>
    <div class="sl-row">
      <label>Ombre</label>
      <input type="range" id="slShadow" min="0" max="40" value="12" oninput="updateComp()">
      <span class="sl-val" id="vShadow">12</span>
    </div>
    <div class="sl-row">
      <label>Flou bas</label>
      <input type="range" id="slBlur" min="0" max="20" value="4" oninput="updateComp()">
      <span class="sl-val" id="vBlur">4</span>
    </div>
    <div class="sl-row">
      <label>Luminosité</label>
      <input type="range" id="slBright" min="60" max="140" value="100" oninput="updateComp()">
      <span class="sl-val" id="vBright">100%</span>
    </div>
    <div class="sl-row">
      <label>Contraste</label>
      <input type="range" id="slContrast" min="60" max="140" value="100" oninput="updateComp()">
      <span class="sl-val" id="vContrast">100%</span>
    </div>
    <button class="btn btn-ia" onclick="analyseIA()">✦ Décrire l'insertion par IA</button>
  </div>

  <!-- EXPORT -->
  <div class="pblock">
    <div class="pt">Export officiel</div>
    <div class="export-cards">
      <div class="exp-card" onclick="exportSingle('pcmi1')">
        <div class="exp-card-num">1</div>
        <div class="exp-card-label">PCMI 1</div>
        <div class="exp-card-desc">Vue lointaine<br>1/500e · A3</div>
      </div>
      <div class="exp-card" onclick="exportSingle('pcmi6')">
        <div class="exp-card-num">6</div>
        <div class="exp-card-label">PCMI 6</div>
        <div class="exp-card-desc">Vue rapprochée<br>1/200e · A3</div>
      </div>
    </div>
    <button class="btn btn-v" onclick="exportBoth()">↓ Exporter PCMI 1 + 6 ensemble</button>
    <button class="btn btn-g" onclick="exportPNG()">↓ Export PNG haute résolution</button>
    <div style="font-size:9px;color:var(--gris);font-family:'DM Mono',monospace;line-height:1.6;margin-top:.25rem">
      PDF A3 prêt pour impression mairie.<br>
      Cartouche CERFA 13703 complet.
    </div>
  </div>

  <!-- IA DESCRIPTION -->
  <div class="pblock" id="iaSection" style="display:none">
    <div class="pt">Notice IA</div>
    <div id="iaText" style="font-size:11px;color:rgba(255,255,255,.6);line-height:1.7;font-family:'DM Mono',monospace;background:rgba(16,185,129,.05);border:1px solid rgba(16,185,129,.12);border-radius:var(--r);padding:.75rem;max-height:160px;overflow-y:auto"></div>
    <button class="btn btn-g" style="margin-top:.45rem" onclick="copierNotice()">Copier la notice</button>
  </div>

</div>
</div>

<script>
// ══════════════════════════════════════════════
// ÉTAT GLOBAL
// ══════════════════════════════════════════════
const canvas = document.getElementById('mainCanvas');
const ctx = canvas.getContext('2d');

let imgTerrain = null;   // ImageBitmap photo terrain
let imgFacade = null;    // ImageBitmap façade originale
let imgFacadeRbg = null; // ImageBitmap façade sans fond
let rbgDone = false;
let flipped = false;
let showCartouche = true;
let showNord = true;
let viewMode = 'pcmi1'; // pcmi1 | pcmi6 | compare
let zoomLevel = 1;
let iaDesc = '';

let comp = {x:28, y:25, scale:32, opacity:88, shadow:12, blur:4, bright:100, contrast:100};

// Clé API sauvegardée
let rbgApiKey = localStorage.getItem('mpia_rbg_key') || '';
if(rbgApiKey) document.getElementById('rbgKey').value = rbgApiKey;

// ══════════════════════════════════════════════
// CANVAS RESIZE
// ══════════════════════════════════════════════
function resizeCanvas(){
  const wrap = document.getElementById('cvWrap');
  canvas.width = wrap.clientWidth;
  canvas.height = wrap.clientHeight;
  render();
}
window.addEventListener('resize', resizeCanvas);
setTimeout(resizeCanvas, 60);

// ══════════════════════════════════════════════
// CHARGEMENT IMAGES
// ══════════════════════════════════════════════
function trigUp(id){ document.getElementById(id).click(); }

function handleDrop(e, type){
  e.preventDefault();
  e.currentTarget.classList.remove('drag');
  const f = e.dataTransfer.files[0];
  if(f && f.type.startsWith('image/')){
    if(type==='terrain') processFile(f, 'terrain');
    else processFile(f, 'facade');
  }
}

async function processFile(file, type){
  try{
    const bmp = await createImageBitmap(file);
    if(type === 'terrain'){
      imgTerrain = bmp;
      // Thumbnail
      const th = document.getElementById('thumbTerrain');
      const offC = bmpToCanvas(bmp, 120);
      th.src = offC.toDataURL();
      th.style.display = 'block';
      document.getElementById('upzTerrainTxt').textContent = file.name.substring(0,22);
    } else {
      imgFacade = bmp;
      imgFacadeRbg = null; rbgDone = false;
      const th = document.getElementById('thumbFacade');
      const offC = bmpToCanvas(bmp, 120);
      th.src = offC.toDataURL();
      th.style.display = 'block';
      document.getElementById('upzFacadeTxt').textContent = file.name.substring(0,22);
      document.getElementById('rbgSection').style.display = 'block';
      // Preview avant
      const prev = document.getElementById('prevOrig');
      const img = new Image();
      img.src = offC.toDataURL();
      img.style.cssText='width:100%;height:100%;object-fit:contain';
      prev.innerHTML=''; prev.appendChild(img);
      prev.insertAdjacentHTML('beforeend','<div class="prev-lbl">Original</div>');
      setChip('info','Fond non supprimé');
    }
    document.getElementById('ph').style.opacity = '0';
    document.getElementById('ph').style.pointerEvents = 'none';
    render();
    showToast(type==='terrain'?'Photo terrain chargée':'Façade chargée');
  } catch(e){
    showToast('Erreur de chargement','err');
  }
}

function loadTerrain(e){ if(e.target.files[0]) processFile(e.target.files[0],'terrain'); }
function loadFacade(e){ if(e.target.files[0]) processFile(e.target.files[0],'facade'); }

function bmpToCanvas(bmp, maxW){
  const offC = document.createElement('canvas');
  const r = Math.min(1, maxW/bmp.width);
  offC.width = bmp.width*r; offC.height = bmp.height*r;
  offC.getContext('2d').drawImage(bmp, 0, 0, offC.width, offC.height);
  return offC;
}

// ══════════════════════════════════════════════
// SUPPRESSION DE FOND — Local + API
// ══════════════════════════════════════════════
async function supprimerFond(){
  if(!imgFacade){ showToast('Uploadez d\'abord la façade','err'); return; }

  const btn = document.getElementById('btnRbg');
  btn.innerHTML = '<span class="spin"></span> Traitement…';
  btn.disabled = true;
  setChip('proc','Analyse en cours…');

  try{
    const key = document.getElementById('rbgKey').value.trim() || rbgApiKey;

    if(key){
      await supprimerFondAPI(key);
    } else {
      await supprimerFondLocal();
    }
  } catch(e){
    setChip('warn','Erreur — essai local');
    await supprimerFondLocal();
  } finally {
    btn.innerHTML = 'Supprimer le fond';
    btn.disabled = false;
  }
}

// ── API remove.bg ──
async function supprimerFondAPI(key){
  setChip('proc','Envoi vers remove.bg…');
  const offC = bmpToCanvas(imgFacade, 1200);
  const blob = await new Promise(res => offC.toBlob(res, 'image/png'));
  const fd = new FormData();
  fd.append('image_file', blob, 'facade.png');
  fd.append('size', 'auto');

  const res = await fetch('https://api.remove.bg/v1.0/removebg', {
    method: 'POST',
    headers: {'X-Api-Key': key},
    body: fd
  });

  if(res.status === 403 || res.status === 401){
    setChip('warn','Clé invalide — passage local');
    await supprimerFondLocal();
    return;
  }
  if(res.status === 402){
    setChip('warn','Crédits épuisés — passage local');
    await supprimerFondLocal();
    return;
  }
  if(!res.ok) throw new Error('API error '+res.status);

  const arrBuf = await res.arrayBuffer();
  const blob2 = new Blob([arrBuf], {type:'image/png'});
  imgFacadeRbg = await createImageBitmap(blob2);
  rbgDone = true;
  setChip('ok','Fond supprimé — Qualité HD ✓');
  afficherPreviewRbg();
  render();
  showToast('Fond supprimé avec remove.bg HD');
}

// ── Algorithme local — détection couleur de fond ──
async function supprimerFondLocal(){
  setChip('proc','Suppression locale…');

  return new Promise(resolve => {
    setTimeout(async () => {
      try{
        const offC = bmpToCanvas(imgFacade, 800);
        const offCtx = offC.getContext('2d');
        const imageData = offCtx.getImageData(0, 0, offC.width, offC.height);
        const data = imageData.data;
        const w = offC.width, h = offC.height;

        // Détecter la couleur dominante des bords (fond probable)
        const bgColors = [];
        const sampleBord = (x, y) => {
          const i = (y*w+x)*4;
          bgColors.push([data[i], data[i+1], data[i+2]]);
        };
        // Échantillonner les bords
        for(let x=0; x<w; x+=8){ sampleBord(x,0); sampleBord(x,h-1); }
        for(let y=0; y<h; y+=8){ sampleBord(0,y); sampleBord(w-1,y); }

        // Calculer la couleur médiane des bords
        const avgR = Math.round(bgColors.reduce((s,c)=>s+c[0],0)/bgColors.length);
        const avgG = Math.round(bgColors.reduce((s,c)=>s+c[1],0)/bgColors.length);
        const avgB = Math.round(bgColors.reduce((s,c)=>s+c[2],0)/bgColors.length);

        // Seuil de tolérance adaptatif
        const isLight = (avgR+avgG+avgB) > 600; // fond clair
        const tol = isLight ? 45 : 35;

        // Supprimer les pixels similaires au fond + flood fill depuis les bords
        const visited = new Uint8Array(w*h);
        const queue = [];

        // Ajouter tous les pixels de bord à la queue
        for(let x=0; x<w; x++){ queue.push(x, 0); queue.push(x, h-1); }
        for(let y=0; y<h; y++){ queue.push(0, y); queue.push(w-1, y); }

        let qi = 0;
        while(qi < queue.length){
          const qx = queue[qi++], qy = queue[qi++];
          if(qx<0||qx>=w||qy<0||qy>=h) continue;
          const idx = qy*w+qx;
          if(visited[idx]) continue;
          const pi = idx*4;
          const r=data[pi], g=data[pi+1], b=data[pi+2];
          const dist = Math.sqrt((r-avgR)**2+(g-avgG)**2+(b-avgB)**2);
          if(dist > tol) continue;
          visited[idx] = 1;
          data[pi+3] = 0; // transparent
          // 4 voisins
          queue.push(qx+1,qy); queue.push(qx-1,qy);
          queue.push(qx,qy+1); queue.push(qx,qy-1);
        }

        // Lissage des bords (anti-aliasing simple)
        for(let y=1; y<h-1; y++){
          for(let x=1; x<w-1; x++){
            const idx = (y*w+x)*4;
            if(data[idx+3] === 0) continue;
            // Si un voisin est transparent, adoucir
            const neighbors = [
              ((y-1)*w+x)*4, ((y+1)*w+x)*4,
              (y*w+(x-1))*4, (y*w+(x+1))*4
            ];
            const transparentNeighbors = neighbors.filter(n=>data[n+3]===0).length;
            if(transparentNeighbors > 0){
              data[idx+3] = Math.round(255 * (1 - transparentNeighbors/4 * 0.7));
            }
          }
        }

        offCtx.putImageData(imageData, 0, 0);
        imgFacadeRbg = await createImageBitmap(offC);
        rbgDone = true;
        setChip('ok','Fond supprimé — Qualité SD ✓');
        afficherPreviewRbg();
        render();
        showToast('Fond supprimé localement');
        resolve();
      } catch(e){
        setChip('warn','Erreur locale : '+e.message.substring(0,30));
        resolve();
      }
    }, 50);
  });
}

function afficherPreviewRbg(){
  if(!imgFacadeRbg) return;
  const prev = document.getElementById('prevRbg');
  const offC = bmpToCanvas(imgFacadeRbg, 120);
  const img = new Image();
  img.src = offC.toDataURL();
  img.style.cssText = 'width:100%;height:100%;object-fit:contain';
  prev.innerHTML = '';
  prev.appendChild(img);
  prev.insertAdjacentHTML('beforeend','<div class="prev-lbl">Sans fond</div>');
}

function setChip(type, msg){
  const el = document.getElementById('rbgChip');
  el.className = 'stat-chip chip-'+type;
  el.textContent = msg;
}

function saveKey(){
  const k = document.getElementById('rbgKey').value.trim();
  rbgApiKey = k;
  localStorage.setItem('mpia_rbg_key', k);
  showToast(k ? 'Clé API sauvegardée' : 'Clé effacée');
}

// ══════════════════════════════════════════════
// RENDU CANVAS
// ══════════════════════════════════════════════
function render(){
  if(!canvas.width) return;
  ctx.clearRect(0,0,canvas.width,canvas.height);
  ctx.fillStyle = '#0A0A0C';
  ctx.fillRect(0,0,canvas.width,canvas.height);

  if(!imgTerrain && !imgFacade){ renderGrid(); return; }

  if(viewMode === 'compare'){
    renderCompare();
  } else {
    renderSimulation(viewMode);
  }
}

function renderGrid(){
  ctx.strokeStyle = 'rgba(255,255,255,.03)';
  ctx.lineWidth = 1;
  for(let x=0;x<canvas.width;x+=40){ ctx.beginPath();ctx.moveTo(x,0);ctx.lineTo(x,canvas.height);ctx.stroke(); }
  for(let y=0;y<canvas.height;y+=40){ ctx.beginPath();ctx.moveTo(0,y);ctx.lineTo(canvas.width,y);ctx.stroke(); }
}

function renderSimulation(mode){
  const isPcmi1 = mode === 'pcmi1';
  const scaleFactor = isPcmi1 ? 0.75 : 1.0; // PCMI1 plus loin, PCMI6 plus proche

  // Calculer l'espace (cartouche en bas si activé)
  const cartH = showCartouche ? 130 : 0;
  const imgAreaH = canvas.height - cartH - 16;
  const imgAreaW = canvas.width - 16;

  // Photo terrain
  if(imgTerrain){
    const iw = imgTerrain.width, ih = imgTerrain.height;
    const sc = Math.min(imgAreaW/iw, imgAreaH/ih) * zoomLevel;
    const ix = (canvas.width - iw*sc)/2;
    const iy = 8;

    // PCMI1 : léger dézoom pour simuler la distance
    const finalSc = isPcmi1 ? sc * scaleFactor : sc;
    const finalIx = (canvas.width - iw*finalSc)/2;

    // Filtre luminosité/contraste via CSS filter sur offscreen
    ctx.save();
    ctx.filter = `brightness(${comp.bright}%) contrast(${comp.contrast}%)`;
    ctx.drawImage(imgTerrain, finalIx, iy, iw*finalSc, ih*finalSc);
    ctx.filter = 'none';
    ctx.restore();

    // Composition façade (si dispo)
    const facade = imgFacadeRbg || imgFacade;
    if(facade){
      const fw = facade.width, fh = facade.height;
      // Taille relative au terrain
      const facW = iw*finalSc * (comp.scale/100);
      const facH = fh * (facW/fw);
      const facX = finalIx + (iw*finalSc) * (comp.x/100);
      const facY = iy + (ih*finalSc) * (comp.y/100);

      ctx.save();

      // Ombre portée
      if(comp.shadow > 0){
        ctx.shadowColor = 'rgba(0,0,0,.55)';
        ctx.shadowBlur = comp.shadow * 2;
        ctx.shadowOffsetY = comp.shadow * 0.6;
        ctx.shadowOffsetX = comp.shadow * 0.2;
      }

      // Opacité
      ctx.globalAlpha = comp.opacity/100;

      // Miroir horizontal
      if(flipped){
        ctx.scale(-1,1);
        ctx.drawImage(facade, -(facX+facW), facY, facW, facH);
      } else {
        ctx.drawImage(facade, facX, facY, facW, facH);
      }

      ctx.globalAlpha = 1;
      ctx.shadowColor = 'transparent';

      // Flou au sol pour l'ancrage
      if(comp.blur > 0 && (imgFacadeRbg || !imgFacade)){
        ctx.globalAlpha = 0.35;
        ctx.filter = `blur(${comp.blur}px)`;
        const blurH = facH * 0.12;
        const grad = ctx.createLinearGradient(0, facY+facH-blurH, 0, facY+facH+blurH);
        grad.addColorStop(0,'rgba(0,0,0,.6)');
        grad.addColorStop(1,'rgba(0,0,0,0)');
        ctx.fillStyle = grad;
        ctx.fillRect(facX, facY+facH-blurH, facW, blurH*2);
        ctx.filter = 'none';
        ctx.globalAlpha = 1;
      }

      ctx.restore();
    }

    // Étiquette mode
    ctx.font='bold 11px "DM Mono"';
    ctx.fillStyle='rgba(255,255,255,.35)';
    ctx.textAlign='left';
    ctx.fillText(isPcmi1?'Vue d\'ensemble — Échelle indicative 1/500':'Vue rapprochée — Échelle indicative 1/200', finalIx+8, iy+18);

    // Nord
    if(showNord) renderNord(finalIx+iw*finalSc-52, iy+14);

    // Cartouche
    if(showCartouche) renderCartouche(finalIx, iy+ih*finalSc+10, iw*finalSc, 118, mode);
  }
}

function renderCompare(){
  if(!imgTerrain) return;
  const halfW = canvas.width/2 - 4;
  const imgH = canvas.height - (showCartouche?130:0) - 16;

  // PCMI 1 à gauche
  ctx.save();
  ctx.beginPath();ctx.rect(0,0,halfW,canvas.height);ctx.clip();
  canvas.width = halfW; // temporaire
  renderSimulation('pcmi1');
  canvas.width = canvas.width;
  ctx.restore();

  // Ligne séparatrice
  ctx.strokeStyle='rgba(16,185,129,.3)';ctx.lineWidth=2;
  ctx.beginPath();ctx.moveTo(canvas.width/2,0);ctx.lineTo(canvas.width/2,canvas.height);ctx.stroke();
  ctx.fillStyle='rgba(16,185,129,.15)';ctx.fillRect(canvas.width/2-20,8,40,20);
  ctx.fillStyle='#10B981';ctx.font='bold 10px "DM Mono"';ctx.textAlign='center';
  ctx.fillText('PCMI 1',canvas.width/2-10,20);
  ctx.fillText('PCMI 6',canvas.width/2+10,20);
}

// ── ROSE DES VENTS ──
function renderNord(cx, cy){
  const r = 24;
  ctx.save();
  ctx.globalAlpha = 0.9;
  ctx.fillStyle='rgba(255,255,255,.92)';
  ctx.beginPath();ctx.arc(cx,cy,r+5,0,Math.PI*2);ctx.fill();
  ctx.strokeStyle='rgba(0,0,0,.15)';ctx.lineWidth=1;
  ctx.beginPath();ctx.arc(cx,cy,r+5,0,Math.PI*2);ctx.stroke();

  const dirs=[{a:-Math.PI/2,l:'N',long:true,red:true},{a:Math.PI/2,l:'S',long:true},{a:0,l:'E',long:true},{a:Math.PI,l:'O',long:true},
    {a:-Math.PI/4,l:'',long:false},{a:Math.PI/4,l:'',long:false},{a:3*Math.PI/4,l:'',long:false},{a:-3*Math.PI/4,l:'',long:false}];
  dirs.forEach(d=>{
    const len=d.long?r:r*0.55;
    ctx.strokeStyle=d.red?'#EF4444':'#333';ctx.lineWidth=d.long?2:1;
    ctx.beginPath();ctx.moveTo(cx,cy);ctx.lineTo(cx+Math.cos(d.a)*len,cy+Math.sin(d.a)*len);ctx.stroke();
    if(d.l){
      ctx.fillStyle=d.red?'#EF4444':'#333';
      ctx.font=`bold ${d.red?10:8}px "DM Mono"`;ctx.textAlign='center';ctx.textBaseline='middle';
      ctx.fillText(d.l,cx+Math.cos(d.a)*(len+9),cy+Math.sin(d.a)*(len+9));
    }
  });
  ctx.beginPath();ctx.arc(cx,cy,2.5,0,Math.PI*2);ctx.fillStyle='#333';ctx.fill();
  ctx.restore();
}

// ── CARTOUCHE PCMI ──
function renderCartouche(ix, cy, cw, ch, mode){
  if(cy+ch > canvas.height-4) return;
  const isPcmi1 = mode==='pcmi1';
  const pnum = isPcmi1?'1':'6';
  const ptitle = isPcmi1?'Plan de situation — Vue d\'ensemble':'Document graphique — Insertion paysagère';
  const echelle = isPcmi1?'1/500':'1/200';

  const mo = document.getElementById('pMO').value||'—';
  const adr = document.getElementById('pAdr').value||'—';
  const com = document.getElementById('pCom').value||'—';
  const ref = document.getElementById('pRef').value||'—';
  const nat = document.getElementById('pNat').value||'—';
  const orient = document.getElementById('pOrient').value||'N';

  // Fond
  ctx.fillStyle='#fff';ctx.fillRect(ix,cy,cw,ch);
  ctx.strokeStyle='#1a1a1a';ctx.lineWidth=1.5;ctx.strokeRect(ix,cy,cw,ch);

  // Bandeau vert titre
  ctx.fillStyle='#064E3B';ctx.fillRect(ix,cy,cw,28);
  ctx.fillStyle='#10B981';ctx.font='bold 11px "DM Mono"';ctx.textAlign='left';ctx.textBaseline='middle';
  ctx.fillText('MONPERMISIA.FR',ix+8,cy+14);
  ctx.fillStyle='#fff';ctx.font='bold 12px "DM Mono"';
  ctx.fillText(`PCMI ${pnum} — ${ptitle.toUpperCase()}`,ix+130,cy+14);

  // Badge échelle
  ctx.fillStyle='#10B981';ctx.fillRect(ix+cw-90,cy+4,82,20);
  ctx.fillStyle='#fff';ctx.font='bold 11px "DM Mono"';ctx.textAlign='center';ctx.textBaseline='middle';
  ctx.fillText(`Échelle ${echelle}`,ix+cw-49,cy+14);

  // Infos en colonnes
  const colW = cw/4;
  const fields=[
    ['Maître d\'ouvrage',mo],['Adresse terrain',adr.substring(0,30)],
    ['Commune / Code postal',com],['Réf. cadastrale',ref],
  ];
  ctx.textBaseline='alphabetic';
  fields.forEach((f,i)=>{
    const fx = ix+(i%4)*colW+8;
    const fy = cy+34+Math.floor(i/4)*30;
    ctx.fillStyle='#888';ctx.font='8px "DM Mono"';ctx.textAlign='left';
    ctx.fillText(f[0].toUpperCase(),fx,fy);
    ctx.fillStyle='#111';ctx.font='bold 11px "DM Mono"';
    ctx.fillText(f[1],fx,fy+14);
  });

  // 2ème ligne
  const fields2=[
    ['Nature des travaux',nat.substring(0,28)],
    ['Orientation vue',orient],
    ['Date',new Date().toLocaleDateString('fr-FR')],
    ['CERFA','13703*03'],
  ];
  fields2.forEach((f,i)=>{
    const fx=ix+(i%4)*colW+8;
    const fy=cy+70;
    ctx.fillStyle='#888';ctx.font='8px "DM Mono"';ctx.textAlign='left';
    ctx.fillText(f[0].toUpperCase(),fx,fy);
    ctx.fillStyle='#111';ctx.font='bold 11px "DM Mono"';
    ctx.fillText(f[1],fx,fy+14);
  });

  // Séparateurs colonnes
  ctx.strokeStyle='#e5e5e5';ctx.lineWidth=0.75;
  for(let i=1;i<4;i++){ctx.beginPath();ctx.moveTo(ix+colW*i,cy+28);ctx.lineTo(ix+colW*i,cy+ch-14);ctx.stroke();}
  ctx.beginPath();ctx.moveTo(ix,cy+62);ctx.lineTo(ix+cw,cy+62);ctx.stroke();
  ctx.beginPath();ctx.moveTo(ix,cy+90);ctx.lineTo(ix+cw,cy+90);ctx.stroke();

  // Footer
  ctx.fillStyle='#999';ctx.font='8px "DM Mono"';ctx.textAlign='left';
  ctx.fillText('Pièce générée par MonPermisIA.fr — Document indicatif à compléter par un professionnel si nécessaire',ix+8,cy+ch-5);

  // Barre échelle graphique
  const ex=ix+cw-170,ey=cy+ch-26;
  const barLen=80;
  ctx.strokeStyle='#333';ctx.lineWidth=1.5;
  ctx.beginPath();ctx.moveTo(ex,ey);ctx.lineTo(ex+barLen,ey);ctx.stroke();
  ctx.beginPath();ctx.moveTo(ex,ey-5);ctx.lineTo(ex,ey+5);ctx.stroke();
  ctx.beginPath();ctx.moveTo(ex+barLen,ey-5);ctx.lineTo(ex+barLen,ey+5);ctx.stroke();
  // Alternance noir/blanc
  ctx.fillStyle='#333';ctx.fillRect(ex,ey-4,barLen/2,8);
  ctx.fillStyle='#fff';ctx.fillRect(ex+barLen/2,ey-4,barLen/2,8);
  ctx.strokeStyle='#333';ctx.lineWidth=0.75;ctx.strokeRect(ex,ey-4,barLen,8);
  ctx.fillStyle='#333';ctx.font='bold 8px "DM Mono"';ctx.textAlign='center';
  ctx.fillText('0',ex,ey-7);
  ctx.fillText(isPcmi1?'25m':'10m',ex+barLen,ey-7);
}

// ══════════════════════════════════════════════
// CONTRÔLES
// ══════════════════════════════════════════════
function updateComp(){
  comp.x=parseInt(document.getElementById('slX').value);
  comp.y=parseInt(document.getElementById('slY').value);
  comp.scale=parseInt(document.getElementById('slSc').value);
  comp.opacity=parseInt(document.getElementById('slOp').value);
  comp.shadow=parseInt(document.getElementById('slShadow').value);
  comp.blur=parseInt(document.getElementById('slBlur').value);
  comp.bright=parseInt(document.getElementById('slBright').value);
  comp.contrast=parseInt(document.getElementById('slContrast').value);

  document.getElementById('vX').textContent=comp.x+'%';
  document.getElementById('vY').textContent=comp.y+'%';
  document.getElementById('vSc').textContent=comp.scale+'%';
  document.getElementById('vOp').textContent=comp.opacity+'%';
  document.getElementById('vShadow').textContent=comp.shadow;
  document.getElementById('vBlur').textContent=comp.blur;
  document.getElementById('vBright').textContent=comp.bright+'%';
  document.getElementById('vContrast').textContent=comp.contrast+'%';
  render();
}

function qpos(x,y,sc){
  document.getElementById('slX').value=x;
  document.getElementById('slY').value=y;
  document.getElementById('slSc').value=sc;
  document.querySelectorAll('.pb').forEach(b=>b.classList.remove('on'));
  event.target.classList.add('on');
  updateComp();
}

function flipH(){ flipped=!flipped; render(); }
function resetComp(){
  comp={x:28,y:25,scale:32,opacity:88,shadow:12,blur:4,bright:100,contrast:100};
  ['slX','slY','slSc','slOp','slShadow','slBlur','slBright','slContrast'].forEach(id=>{
    const el=document.getElementById(id);
    if(el) el.value=comp[id.replace('sl','').toLowerCase()]||(id==='slBright'||id==='slContrast'?100:comp[Object.keys(comp)[['slX','slY','slSc','slOp','slShadow','slBlur','slBright','slContrast'].indexOf(id)]]);
  });
  flipped=false;updateComp();
}

function switchView(mode){
  viewMode=mode;
  ['ctab1','ctab6','ctabComp'].forEach(id=>document.getElementById(id).classList.remove('on'));
  const map={pcmi1:'ctab1',pcmi6:'ctab6',compare:'ctabComp'};
  document.getElementById(map[mode]).classList.add('on');
  document.getElementById('cvMode').textContent='Mode : '+mode.toUpperCase();
  render();
}

function toggleCartouche(){ showCartouche=!showCartouche; render(); }
function toggleNord(){ showNord=!showNord; render(); }
function zoom(f){ zoomLevel=Math.max(0.4,Math.min(3,zoomLevel*f)); document.getElementById('cvZoom').textContent=Math.round(zoomLevel*100)+'%'; render(); }
function zoomFit(){ zoomLevel=1; render(); }

// ══════════════════════════════════════════════
// ANALYSE IA
// ══════════════════════════════════════════════
async function analyseIA(){
  const adr=document.getElementById('pAdr').value||'terrain';
  const nat=document.getElementById('pNat').value||'maison individuelle';
  const com=document.getElementById('pCom').value||'commune';
  const orient=document.getElementById('pOrient').value||'N';

  document.getElementById('iaSection').style.display='block';
  document.getElementById('iaText').innerHTML='<span class="spin"></span> Génération en cours…';

  try{
    const res = await fetch('https://anthropicapi.venceslas.workers.dev',{
      method:'POST',
      headers:{'Content-Type':'application/json'},
      body:JSON.stringify({
        model:'claude-sonnet-4-20250514',max_tokens:600,
        messages:[{role:'user',content:`Tu es expert en dossiers PCMI (Permis de Construire Maison Individuelle) en France.

Rédige la notice d'insertion paysagère pour les pièces PCMI 1 et PCMI 6 :

Projet : ${nat}
Adresse : ${adr}
Commune : ${com}
Vue depuis : ${orient}

Format : 2 paragraphes distincts étiquetés "PCMI 1 —" et "PCMI 6 —", style officiel, 80 mots chacun maximum.`}]
      })
    });
    const data=await res.json();
    const txt=data.content?.find(b=>b.type==='text')?.text||'Indisponible.';
    iaDesc=txt;
    document.getElementById('iaText').textContent=txt;
  }catch(e){
    document.getElementById('iaText').textContent='Erreur IA.';
  }
}

function copierNotice(){
  navigator.clipboard.writeText(iaDesc).then(()=>showToast('Notice copiée'));
}

// ══════════════════════════════════════════════
// EXPORT
// ══════════════════════════════════════════════
function exportSingle(mode){
  const prev = viewMode;
  viewMode = mode;
  render();
  const dataUrl = canvas.toDataURL('image/png',0.95);
  viewMode = prev;
  render();
  openPrintWindow(dataUrl, mode);
}

function exportBoth(){
  // Exporter les deux en séquence
  exportSingle('pcmi1');
  setTimeout(()=>exportSingle('pcmi6'), 500);
}

function exportPNG(){
  render();
  const a=document.createElement('a');
  a.href=canvas.toDataURL('image/png',0.95);
  a.download=`PCMI-simulation-${viewMode}-${new Date().toISOString().split('T')[0]}.png`;
  a.click();
  showToast('PNG exporté');
}

function openPrintWindow(dataUrl, mode){
  const isPcmi1=mode==='pcmi1';
  const pnum=isPcmi1?'1':'6';
  const ptitle=isPcmi1?'Plan de situation':'Insertion paysagère';
  const adr=document.getElementById('pAdr').value||'—';
  const mo=document.getElementById('pMO').value||'—';
  const win=window.open('','_blank');
  win.document.write(`<!DOCTYPE html><html><head>
  <title>PCMI ${pnum} — ${adr}</title>
  <style>
    @page{size:A3 landscape;margin:10mm}
    body{margin:0;padding:10px;font-family:'DM Mono',monospace;background:#FFFFFF;margin-bottom:6px;color:#064E3B;font-family:'DM Mono',monospace}
    .meta{font-size:10px;color:#666;margin-bottom:10px;display:flex;gap:20px}
    img{width:100%;max-width:100%;display:block;border:1px solid #ccc}
    .footer{font-size:9px;color:#999;margin-top:6px;text-align:center}
    @media print{button{display:none}body{background:var(--bg);color:#fff;border:none;padding:10px 24px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;font-family:'DM Mono',monospace">
    Imprimer / Enregistrer en PDF A3
  </button>
  
</html>`);
  win.document.close();
  setTimeout(()=>win.print(),700);
}

function resetAll(){
  imgTerrain=null;imgFacade=null;imgFacadeRbg=null;rbgDone=false;flipped=false;
  document.getElementById('ph').style.opacity='1';
  document.getElementById('ph').style.pointerEvents='auto';
  document.getElementById('rbgSection').style.display='none';
  document.getElementById('iaSection').style.display='none';
  ['thumbTerrain','thumbFacade'].forEach(id=>{document.getElementById(id).style.display='none';});
  document.getElementById('upzTerrainTxt').textContent='Vue du terrain / rue';
  document.getElementById('upzFacadeTxt').textContent='Image façade / 3D du projet';
  render();
}

// ══════════════════════════════════════════════
// TOAST
// ══════════════════════════════════════════════
function showToast(msg, type='ok'){
  const t=document.createElement('div');
  t.className=`toast ${type}`;t.textContent=msg;
  document.body.appendChild(t);
  setTimeout(()=>t.remove(),3000);
}

// ══════════════════════════════════════════════
// INIT
// ══════════════════════════════════════════════
// Pré-remplir démo
document.getElementById('pMO').value='M. & Mme Dupont';
document.getElementById('pAdr').value='7 impasse des Pins, 85300 Challans';
document.getElementById('pCom').value='Challans (85300)';
document.getElementById('pRef').value='85 044 AB 0023';

render();
</script>

<footer style="background:#0F172A;color:rgba(255,255,255,.5);padding:2rem;font-size:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:1rem;font-family:'DM Sans',sans-serif">
  <div style="font-family:'Syne',sans-serif;font-weight:900;font-size:14px;color:#fff">Mon<span style="color:#93C5FD">PermisIA</span></div>
  <div style="font-size:11px;opacity:.5">MonPermisIA prépare votre dossier — ne remplace pas un professionnel agréé.</div>
  <div style="display:flex;gap:1.5rem;flex-wrap:wrap">
    <a href="/legal.html" style="color:rgba(255,255,255,.5);text-decoration:none">Mentions légales</a>
    <a href="/legal.html#rgpd" style="color:rgba(255,255,255,.5);text-decoration:none">Confidentialité</a>
    <a href="/legal.html#cgu" style="color:rgba(255,255,255,.5);text-decoration:none">CGU</a>
    <a href="https://monchantieria.fr" style="color:#93C5FD;text-decoration:none">MonChantierIA →</a>
  </div>
</footer>
<div id="cookieBanner" style="display:none;position:fixed;bottom:0;left:0;right:0;z-index:9999;background:#fff;border-top:2px solid #E2E8F0;padding:1rem 1.5rem;display:flex;align-items:center;gap:1rem;flex-wrap:wrap;box-shadow:0 -4px 20px rgba(0,0,0,.08);font-family:'DM Sans',sans-serif">
  <div style="flex:1;min-width:200px">
    <div style="font-size:13px;font-weight:700;color:#0F172A;margin-bottom:.25rem">Cookies & confidentialité</div>
    <div style="font-size:12px;color:#64748B;line-height:1.5">Nous utilisons Google Analytics (données anonymisées) pour améliorer l'outil. Aucun cookie publicitaire. <a href="/legal.html#cookies" style="color:#2563EB;text-decoration:none">En savoir plus</a></div>
  </div>
  <div style="display:flex;gap:.5rem;flex-shrink:0">
    <button onclick="acceptCookies()" style="padding:8px 18px;border-radius:8px;background:#2563EB;color:#fff;border:none;font-size:12px;font-weight:700;cursor:pointer;font-family:'DM Sans',sans-serif">Accepter</button>
    <button onclick="refuseCookies()" style="padding:8px 14px;border-radius:8px;background:#F1F5F9;color:#334155;border:1.5px solid #CBD5E1;font-size:12px;font-weight:600;cursor:pointer;font-family:'DM Sans',sans-serif">Refuser</button>
  </div>
</div>
<script>
(function(){
  var consent = localStorage.getItem('cookie_consent');
  if(!consent){
    var b = document.getElementById('cookieBanner');
    if(b) b.style.display='flex';
  }
})();
function acceptCookies(){
  localStorage.setItem('cookie_consent','accepted');
  document.getElementById('cookieBanner').style.display='none';
}
function refuseCookies(){
  localStorage.setItem('cookie_consent','refused');
  document.getElementById('cookieBanner').style.display='none';
  // Désactiver GA
  window['ga-disable-G-N0JHGHRG5H'] = true;
}
</script>
</body>
</html>
