{"id":1523,"date":"2026-05-05T09:49:16","date_gmt":"2026-05-05T07:49:16","guid":{"rendered":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/?page_id=1523"},"modified":"2026-05-05T09:49:16","modified_gmt":"2026-05-05T07:49:16","slug":"devis","status":"publish","type":"page","link":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/devis\/","title":{"rendered":"D\u00e9poser un fichier \u2014 Devis en ligne"},"content":{"rendered":"<style>\n:root{--rouge:#C60C30;--rouge-light:#F5D5DB;--rouge-mid:#9B0925;--gris:#4D4F53;--gris-light:#F4F3F0;--gris-mid:#E8E7E3;--gris-dark:#2C2C2A;--blanc:#FFFFFF;--noir:#1A1A1A;--success:#1E6E3E;--success-bg:#E8F5EF;--warning:#9A4B00;--warning-bg:#FFF4E5;--radius:10px;--shadow:0 1px 3px rgba(0,0,0,.08),0 4px 16px rgba(0,0,0,.04)}\n*{box-sizing:border-box;margin:0;padding:0}\nbody{font-family:'Roboto Slab',serif;background:var(--gris-light);color:var(--noir);min-height:100vh}\n#login-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--noir);position:fixed;inset:0;z-index:1000;transition:opacity .4s ease,visibility .4s}\n#login-screen.hidden{opacity:0;visibility:hidden;pointer-events:none}\n.login-box{background:var(--blanc);border-radius:16px;padding:48px 44px;width:420px;text-align:center;animation:slideUp .4s ease both}\n@keyframes slideUp{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}\n.login-logo{font-family:'Poppins',sans-serif;font-size:26px;font-weight:800;color:var(--noir);margin-bottom:4px;letter-spacing:-0.5px}\n.login-logo span{color:var(--rouge)}\n.login-sub{font-size:12px;color:#999;letter-spacing:.08em;text-transform:uppercase;margin-bottom:36px;font-family:'Poppins',sans-serif}\n.login-label{display:block;text-align:left;font-size:11px;font-weight:500;color:var(--gris);margin-bottom:6px;font-family:'Poppins',sans-serif;letter-spacing:.04em;text-transform:uppercase}\n.login-input{width:100%;padding:12px 16px;border:1.5px solid var(--gris-mid);border-radius:var(--radius);font-size:15px;font-family:'Roboto Slab',serif;outline:none;transition:border-color .2s,box-shadow .2s;margin-bottom:20px}\n.login-input:focus{border-color:var(--rouge);box-shadow:0 0 0 3px rgba(198,12,48,.08)}\n.login-btn{width:100%;padding:14px;background:var(--rouge);color:white;border:none;border-radius:var(--radius);font-size:14px;font-weight:600;font-family:'Poppins',sans-serif;cursor:pointer;transition:background .15s,transform .1s;letter-spacing:.02em}\n.login-btn:hover{background:var(--rouge-mid)}\n.login-btn:active{transform:scale(.98)}\n.login-error{color:var(--rouge);font-size:12px;margin-top:10px;font-family:'Poppins',sans-serif;display:none}\n#app{display:none;flex-direction:column;min-height:100vh}\n#app.visible{display:flex}\n.topbar{background:var(--blanc);border-bottom:1px solid var(--gris-mid);padding:0 28px;height:60px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;box-shadow:0 1px 4px rgba(0,0,0,.06)}\n.topbar-logo{font-family:'Poppins',sans-serif;font-size:18px;font-weight:800;color:var(--noir);letter-spacing:-.4px}\n.topbar-logo span{color:var(--rouge)}\n.topbar-right{display:flex;align-items:center;gap:12px}\n.mode-toggle{display:flex;background:var(--gris-light);border-radius:8px;padding:3px;gap:2px}\n.mode-btn{font-family:'Poppins',sans-serif;font-size:12px;font-weight:600;padding:6px 16px;border:none;border-radius:6px;cursor:pointer;transition:all .15s;color:var(--gris);background:transparent}\n.mode-btn.active{background:var(--blanc);color:var(--rouge);box-shadow:0 1px 3px rgba(0,0,0,.1)}\n.logout-btn{font-family:'Poppins',sans-serif;font-size:11px;color:#999;background:none;border:none;cursor:pointer}\n.logout-btn:hover{color:var(--rouge)}\n.content{flex:1;padding:28px;display:grid;grid-template-columns:1fr 340px;gap:20px;align-items:start;max-width:1400px;margin:0 auto;width:100%}\n.mode-banner{grid-column:1\/-1;background:var(--gris-dark);color:white;border-radius:var(--radius);padding:10px 18px;display:flex;align-items:center;gap:10px;font-family:'Poppins',sans-serif;font-size:12px;font-weight:500;display:none}\n.mode-banner.visible{display:flex}\n.mode-banner .dot{width:8px;height:8px;border-radius:50%;background:#4CAF50;animation:pulse 2s infinite}\n@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}\n.sec-label{font-family:'Poppins',sans-serif;font-size:10px;font-weight:700;color:#999;letter-spacing:.1em;text-transform:uppercase;margin-bottom:12px}\n.client-selector{background:white;border-radius:var(--radius);padding:16px;margin-bottom:14px;box-shadow:var(--shadow);display:none}\n.client-selector.visible{display:block}\n.zones-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-bottom:12px}\n.drop-zone{background:var(--blanc);border:2px dashed var(--gris-mid);border-radius:var(--radius);padding:14px;cursor:pointer;transition:all .2s;min-height:118px;position:relative;user-select:none}\n.drop-zone:hover{border-color:#bbb;background:#fafafa}\n.drop-zone.drag-over{border-color:var(--rouge);border-style:solid;background:rgba(198,12,48,.03)}\n.drop-zone.filled{border-style:solid;border-color:var(--rouge);background:#FFFAFA}\n.dz-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}\n.dz-icon{width:28px;height:28px;border-radius:6px;background:var(--gris-light);display:flex;align-items:center;justify-content:center;flex-shrink:0}\n.dz-icon svg{width:14px;height:14px}\n.drop-zone.filled .dz-icon{background:rgba(198,12,48,.08)}\n.drop-zone.filled .dz-icon svg{stroke:var(--rouge)}\n.dz-title{font-family:'Poppins',sans-serif;font-size:13px;font-weight:700;color:var(--noir)}\n.dz-tarif{font-size:10px;color:#999;font-family:'Poppins',sans-serif}\n.dz-hint{font-size:10px;color:#bbb;font-family:'Poppins',sans-serif}\n.dz-file-name{font-size:10px;color:var(--rouge);font-weight:500;margin-bottom:3px;word-break:break-all;font-family:'Poppins',sans-serif}\n.dz-generated{font-size:9px;color:var(--gris);font-family:'Courier New',monospace;background:var(--gris-light);padding:3px 6px;border-radius:4px;margin:4px 0;word-break:break-all}\n.dz-badge{display:inline-flex;align-items:center;gap:3px;font-size:9px;font-weight:700;padding:2px 7px;border-radius:20px;font-family:'Poppins',sans-serif}\n.dz-badge.ok{background:var(--success-bg);color:var(--success)}\n.dz-badge.warn{background:var(--warning-bg);color:var(--warning)}\n.dz-remove{position:absolute;top:8px;right:8px;width:18px;height:18px;border-radius:50%;background:var(--rouge-light);border:none;cursor:pointer;font-size:10px;color:var(--rouge);display:none;align-items:center;justify-content:center;font-weight:700}\n.drop-zone.filled .dz-remove{display:flex}\n.dim-form{margin-top:8px;display:flex;gap:4px;flex-wrap:wrap}\n.dim-input{font-size:11px;width:70px;padding:3px 6px;border:1px solid var(--gris-mid);border-radius:5px;font-family:'Poppins',sans-serif}\n.dim-input:focus{outline:none;border-color:var(--rouge)}\n.dim-label{font-size:9px;color:#999;font-family:'Poppins',sans-serif;display:block;margin-bottom:1px}\n.add-zone-row{display:flex;gap:8px;align-items:center}\n.add-select{flex:1;font-size:12px;padding:8px 12px;border:1.5px solid var(--gris-mid);border-radius:var(--radius);font-family:'Poppins',sans-serif;background:white;cursor:pointer;outline:none}\n.add-select:focus{border-color:var(--rouge)}\n.add-btn{font-size:12px;padding:8px 16px;border:1.5px solid var(--rouge);border-radius:var(--radius);background:white;color:var(--rouge);font-family:'Poppins',sans-serif;font-weight:600;cursor:pointer;transition:all .15s;white-space:nowrap}\n.add-btn:hover{background:var(--rouge);color:white}\n.right-panel{display:flex;flex-direction:column;gap:14px}\n.card{background:var(--blanc);border-radius:var(--radius);padding:18px;box-shadow:var(--shadow)}\n.field-row{display:flex;align-items:center;gap:10px;margin-bottom:10px}\n.field-row:last-child{margin-bottom:0}\n.field-label{font-family:'Poppins',sans-serif;font-size:10px;font-weight:600;color:#999;text-transform:uppercase;letter-spacing:.06em;min-width:58px}\n.field-input,.field-select{flex:1;font-size:12px;padding:7px 10px;border:1.5px solid var(--gris-mid);border-radius:7px;font-family:'Poppins',sans-serif;outline:none;transition:border-color .2s;background:white;color:var(--noir)}\n.field-input:focus,.field-select:focus{border-color:var(--rouge)}\n.devis-empty{text-align:center;padding:24px;color:#ccc;font-size:12px;font-family:'Poppins',sans-serif}\n.devis-item{margin-bottom:10px}\n.devis-item-header{display:flex;justify-content:space-between;align-items:baseline}\n.devis-item-name{font-family:'Poppins',sans-serif;font-size:12px;font-weight:700;color:var(--noir)}\n.devis-item-price{font-family:'Poppins',sans-serif;font-size:13px;font-weight:700;color:var(--rouge)}\n.devis-item-detail{font-size:10px;color:#999;font-family:'Poppins',sans-serif;margin-top:1px}\n.devis-sep{height:1px;background:var(--gris-mid);margin:10px 0}\n.devis-sub-row{display:flex;justify-content:space-between;font-size:11px;font-family:'Poppins',sans-serif;color:#777;margin-bottom:5px}\n.devis-sub-row span:last-child{font-weight:600}\n.devis-total-row{display:flex;justify-content:space-between;align-items:baseline;padding-top:12px;border-top:2px solid var(--rouge);margin-top:8px}\n.devis-total-label{font-family:'Poppins',sans-serif;font-size:14px;font-weight:700;color:var(--noir)}\n.devis-total-val{font-family:'Poppins',sans-serif;font-size:20px;font-weight:800;color:var(--rouge)}\n.btn-gen{width:100%;padding:14px;background:var(--rouge);color:white;border:none;border-radius:var(--radius);font-size:14px;font-weight:700;font-family:'Poppins',sans-serif;cursor:pointer;transition:all .15s;letter-spacing:.02em;margin-top:4px}\n.btn-gen:hover:not(:disabled){background:var(--rouge-mid)}\n.btn-gen:disabled{background:#ddd;color:#aaa;cursor:not-allowed}\n.toast{position:fixed;bottom:28px;right:28px;background:var(--gris-dark);color:white;padding:14px 20px;border-radius:var(--radius);font-family:'Poppins',sans-serif;font-size:13px;font-weight:500;display:flex;align-items:center;gap:10px;transform:translateY(80px);opacity:0;transition:all .3s cubic-bezier(.34,1.56,.64,1);z-index:9999}\n.toast.show{transform:none;opacity:1}\n.toast-check{width:22px;height:22px;border-radius:50%;background:#4CAF50;display:flex;align-items:center;justify-content:center;flex-shrink:0}\n.devis-num{font-family:'Poppins',sans-serif;font-size:11px;color:#bbb;text-align:right;margin-bottom:8px}\n.history-item{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--gris-mid);cursor:pointer}\n.history-item:last-child{border-bottom:none}\n.history-ref{font-family:'Poppins',sans-serif;font-size:12px;font-weight:600;color:var(--noir)}\n.history-client{font-size:10px;color:#999;font-family:'Poppins',sans-serif}\n.history-price{font-family:'Poppins',sans-serif;font-size:13px;font-weight:700;color:var(--rouge)}\ninput[type=file]{display:none}\n@media(max-width:900px){.content{grid-template-columns:1fr}.zones-grid{grid-template-columns:1fr 1fr}}\n<\/style>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;500;600;700;800&#038;family=Roboto+Slab:wght@300;400;500&#038;display=swap\" rel=\"stylesheet\">\n<div id=\"login-screen\">\n<div class=\"login-box\">\n<div class=\"login-logo\">Leader<span>Print<\/span> Paris<\/div>\n<div class=\"login-sub\">Outil de d\u00e9p\u00f4t &#038; devis<\/div>\n<p>    <label class=\"login-label\" for=\"pwd\">Mot de passe<\/label><br \/>\n    <input class=\"login-input\" type=\"password\" id=\"pwd\" placeholder=\"\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\" onkeydown=\"if(event.key==='Enter') lpLogin()\"><br \/>\n    <button class=\"login-btn\" onclick=\"lpLogin()\">Acc\u00e9der \u00e0 l&rsquo;outil<\/button><\/p>\n<div class=\"login-error\" id=\"login-error\">Mot de passe incorrect<\/div>\n<\/p><\/div>\n<\/div>\n<div id=\"app\">\n<div class=\"topbar\">\n<div class=\"topbar-logo\">Leader<span>Print<\/span> Paris<\/div>\n<div class=\"topbar-right\">\n<div class=\"mode-toggle\">\n        <button class=\"mode-btn active\" id=\"btn-client\" onclick=\"lpSetMode('client')\">Client<\/button><br \/>\n        <button class=\"mode-btn\" id=\"btn-interne\" onclick=\"lpSetMode('interne')\">Interne<\/button>\n      <\/div>\n<p>      <button class=\"logout-btn\" onclick=\"lpLogout()\">D\u00e9connexion<\/button>\n    <\/div>\n<\/p><\/div>\n<div class=\"content\">\n<div class=\"mode-banner\" id=\"mode-banner\">\n<div class=\"dot\"><\/div>\n<p>Mode interne \u2014 Vous d\u00e9posez les fichiers pour le compte d&rsquo;un client<\/p><\/div>\n<div class=\"zones-panel\">\n<div class=\"client-selector card\" id=\"client-selector\">\n<div class=\"sec-label\" style=\"margin-bottom:10px\">S\u00e9lectionner le client<\/div>\n<div class=\"field-row\">\n          <label class=\"field-label\">Client<\/label><br \/>\n          <select class=\"field-select\" id=\"client-interne\" onchange=\"lpSyncClient()\"><option value=\"\">&#8212; Choisir un client &#8212;<\/option><option value=\"Agence Dupont &amp; Associ\u00e9s\">Agence Dupont &amp; Associ\u00e9s<\/option><option value=\"Enseigne Nationale SAS\">Enseigne Nationale SAS<\/option><option value=\"Studio Cr\u00e9atif XYZ\">Studio Cr\u00e9atif XYZ<\/option><option value=\"\u00c9v\u00e9nement Paris 2025\">\u00c9v\u00e9nement Paris 2025<\/option><\/select>\n        <\/div>\n<\/p><\/div>\n<div class=\"sec-label\">D\u00e9posez vos fichiers par mati\u00e8re<\/div>\n<div class=\"zones-grid\" id=\"zones-grid\"><\/div>\n<div class=\"add-zone-row\">\n        <select class=\"add-select\" id=\"add-select\"><option value=\"\">+ Ajouter une mati\u00e8re&#8230;<\/option><option value=\"Adhesif\">Adh\u00e9sif vinyl<\/option><option value=\"Alu\">Alu dibond<\/option><option value=\"Carton\">Carton mousse<\/option><option value=\"PP\">PP ondul\u00e9<\/option><option value=\"Textile\">Textile<\/option><option value=\"Plexi\">Plexiglas<\/option><\/select><br \/>\n        <button class=\"add-btn\" onclick=\"lpAddZone()\">Ajouter<\/button>\n      <\/div>\n<\/p><\/div>\n<div class=\"right-panel\">\n<div class=\"card\">\n<div class=\"sec-label\" style=\"margin-bottom:12px\">Informations<\/div>\n<div class=\"field-row\"><label class=\"field-label\">Client<\/label><input class=\"field-input\" type=\"text\" id=\"client-name\" placeholder=\"Nom du client\" oninput=\"lpRefreshDevis()\"><\/div>\n<div class=\"field-row\"><label class=\"field-label\">Profil<\/label><select class=\"field-select\" id=\"profil\" onchange=\"lpRefreshDevis()\"><option value=\"1\">Standard \u2014 prix catalogue<\/option><option value=\"0.9\">Pro \u2014 \u221210 %<\/option><option value=\"0.8\">Grand compte \u2014 \u221220 %<\/option><\/select><\/div>\n<div class=\"field-row\"><label class=\"field-label\">Urgence<\/label><select class=\"field-select\" id=\"urgence\" onchange=\"lpRefreshDevis()\"><option value=\"1\">Normale<\/option><option value=\"1.15\">Sous 48h \u2014 +15 %<\/option><option value=\"1.3\">Sous 24h \u2014 +30 %<\/option><\/select><\/div>\n<\/p><\/div>\n<div class=\"card\">\n<div class=\"devis-num\" id=\"devis-num\">DEV-001<\/div>\n<div class=\"sec-label\" style=\"margin-bottom:12px\">R\u00e9capitulatif devis<\/div>\n<div id=\"devis-content\">\n<div class=\"devis-empty\">Aucun fichier d\u00e9pos\u00e9<\/div>\n<\/div>\n<p>        <button class=\"btn-gen\" id=\"btn-gen\" disabled onclick=\"lpGenererDevis()\">G\u00e9n\u00e9rer le devis PDF<\/button>\n      <\/div>\n<div class=\"card\" id=\"historique-card\" style=\"display:none\">\n<div class=\"sec-label\" style=\"margin-bottom:12px\">Derniers devis<\/div>\n<div id=\"historique-list\"><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<div class=\"toast\" id=\"toast\">\n<div class=\"toast-check\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M2 6l3 3 5-5\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><\/div>\n<p><span id=\"toast-msg\">Devis g\u00e9n\u00e9r\u00e9 avec succ\u00e8s<\/span><\/div>\n<p><input type=\"file\" id=\"file-input\" accept=\".pdf,.ai,.eps,.jpg,.png,.tif\" multiple><br \/>\n<script>\n(function(){\nconst PWD='Leaderprint93500';\nconst TARIFS={PVC:{label:'PVC',prix:18,unit:'m\u00b2'},Bache:{label:'B\u00e2che',prix:14,unit:'m\u00b2'},Papier:{label:'Papier',prix:5,unit:'m\u00b2'},Forex:{label:'Forex',prix:22,unit:'m\u00b2'},Alu:{label:'Alu dibond',prix:32,unit:'m\u00b2'},Adhesif:{label:'Adh\u00e9sif vinyl',prix:20,unit:'m\u00b2'},Carton:{label:'Carton mousse',prix:8,unit:'m\u00b2'},PP:{label:'PP ondul\u00e9',prix:15,unit:'m\u00b2'},Textile:{label:'Textile',prix:25,unit:'m\u00b2'},Plexi:{label:'Plexiglas',prix:35,unit:'m\u00b2'}};\nconst NOMS=['AfficheEte','BanniereEntree','PanneauAccueil','VisuelVitrine','LogoClient','BanniereNoel','AfficheEvenement','FacadeCommerciale','StandExpo','Enseigne'];\nconst LARGEURS=[420,500,600,800,1000,1200,1500,2000,3000];\nconst HAUTEURS=[297,350,400,600,800,1000,800,1000];\nlet zones=['PVC','Bache','Papier','Forex','Alu'];\nlet files={};\nlet mode='client';\nlet devisNum=parseInt(localStorage.getItem('lp_devis_num')||'1');\nlet historique=JSON.parse(localStorage.getItem('lp_historique')||'[]');\nlet currentZone=null;\nwindow.lpLogin=function(){\n  const v=document.getElementById('pwd').value;\n  if(v===PWD){\n    document.getElementById('login-screen').classList.add('hidden');\n    document.getElementById('app').classList.add('visible');\n    lpRenderZones();lpRenderHistorique();\n  } else {\n    document.getElementById('login-error').style.display='block';\n    document.getElementById('pwd').style.borderColor='var(--rouge)';\n    setTimeout(()=>{document.getElementById('login-error').style.display='none';document.getElementById('pwd').style.borderColor='';},2500);\n  }\n};\nwindow.lpLogout=function(){\n  document.getElementById('login-screen').classList.remove('hidden');\n  document.getElementById('app').classList.remove('visible');\n  document.getElementById('pwd').value='';\n  lpResetAll();\n};\nwindow.lpSetMode=function(m){\n  mode=m;\n  document.getElementById('btn-client').classList.toggle('active',m==='client');\n  document.getElementById('btn-interne').classList.toggle('active',m==='interne');\n  document.getElementById('mode-banner').classList.toggle('visible',m==='interne');\n  document.getElementById('client-selector').classList.toggle('visible',m==='interne');\n};\nwindow.lpSyncClient=function(){\n  const v=document.getElementById('client-interne').value;\n  document.getElementById('client-name').value=v;\n  if(v.includes('Enseigne'))document.getElementById('profil').value='0.8';\n  else if(v.includes('Studio')||v.includes('Agence'))document.getElementById('profil').value='0.9';\n  else document.getElementById('profil').value='1';\n  lpRefreshDevis();\n};\nwindow.lpRenderZones=function(){\n  const grid=document.getElementById('zones-grid');\n  grid.innerHTML='';\n  zones.forEach(mat=>{\n    const t=TARIFS[mat];\n    const f=files[mat];\n    const div=document.createElement('div');\n    div.className='drop-zone'+(f?' filled':'');\n    div.dataset.mat=mat;\n    div.innerHTML='<button class=\"dz-remove\" onclick=\"lpRemoveFile(''+mat+'',event)\" title=\"Retirer\">\u2715<\/button><\/p>\n<div class=\"dz-header\">\n<div class=\"dz-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#888\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 16V8M8 12l4-4 4 4\"\/><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"3\"\/><\/svg><\/div>\n<div>\n<div class=\"dz-title\">'+(t?t.label:mat)+'<\/div>\n<div class=\"dz-tarif\">'+(t?t.prix+' \u20ac\/'+t.unit:'')+'<\/div>\n<\/div>\n<\/div>\n<p>'+(f?'<\/p>\n<div class=\"dz-file-name\">'+f.originalName+'<\/div>\n<div class=\"dz-generated\">'+f.generated+'<\/div>\n<p><span class=\"dz-badge '+(f.ok?'ok':'warn')+'\">'+(f.ok?'\u2713 Conforme':'\u26a0 V\u00e9rifier fond perdu')+'<\/span><\/p>\n<div class=\"dim-form\">\n<div>\n<div class=\"dim-label\">Largeur (mm)<\/div>\n<p><input class=\"dim-input\" type=\"number\" value=\"'+f.largeur+'\" onchange=\"lpUpdateDim(''+mat+'','largeur',this.value)\" min=\"1\"><\/div>\n<div>\n<div class=\"dim-label\">Hauteur (mm)<\/div>\n<p><input class=\"dim-input\" type=\"number\" value=\"'+f.hauteur+'\" onchange=\"lpUpdateDim(''+mat+'','hauteur',this.value)\" min=\"1\"><\/div>\n<div>\n<div class=\"dim-label\">Quantit\u00e9<\/div>\n<p><input class=\"dim-input\" type=\"number\" value=\"'+f.qte+'\" onchange=\"lpUpdateDim(''+mat+'','qte',this.value)\" min=\"1\" style=\"width:55px\"><\/div>\n<\/div>\n<p>':'<\/p>\n<div class=\"dz-hint\">Cliquer ou glisser un PDF ici<\/div>\n<p>');\n    div.addEventListener('click',(e)=>{if(e.target.closest('.dz-remove')||e.target.closest('.dim-input'))return;currentZone=mat;document.getElementById('file-input').click();});\n    div.addEventListener('dragover',(e)=>{e.preventDefault();div.classList.add('drag-over');});\n    div.addEventListener('dragleave',()=>div.classList.remove('drag-over'));\n    div.addEventListener('drop',(e)=>{e.preventDefault();div.classList.remove('drag-over');lpSimulateDrop(mat,e.dataTransfer.files[0]?.name);});\n    grid.appendChild(div);\n  });\n};\nwindow.lpAddZone=function(){\n  const sel=document.getElementById('add-select');\n  const v=sel.value;\n  if(!v||zones.includes(v))return;\n  zones.push(v);sel.value='';lpRenderZones();\n};\nwindow.lpRemoveFile=function(mat,e){\n  e.stopPropagation();delete files[mat];lpRenderZones();lpRefreshDevis();\n};\nwindow.lpUpdateDim=function(mat,key,val){\n  if(!files[mat])return;\n  files[mat][key]=parseFloat(val)||1;\n  const f=files[mat];\n  f.generated=mat+'_'+f.nomVisuel+'_'+f.largeur+'x'+f.hauteur+'mm_'+f.qte+'ex.pdf';\n  lpRefreshDevis();\n};\ndocument.getElementById('file-input').addEventListener('change',function(){\n  if(this.files.length>0&&currentZone){lpSimulateDrop(currentZone,this.files[0].name);this.value='';}\n});\nwindow.lpSimulateDrop=function(mat,originalName){\n  const nom=NOMS[Math.floor(Math.random()*NOMS.length)];\n  const l=LARGEURS[Math.floor(Math.random()*LARGEURS.length)];\n  const h=HAUTEURS[Math.floor(Math.random()*HAUTEURS.length)];\n  const q=[1,2,3,5,10,25][Math.floor(Math.random()*6)];\n  const ok=Math.random()>0.25;\n  files[mat]={originalName:originalName||'fichier_client.pdf',nomVisuel:nom,largeur:l,hauteur:h,qte:q,generated:mat+'_'+nom+'_'+l+'x'+h+'mm_'+q+'ex.pdf',surface:(l\/1000)*(h\/1000),ok};\n  lpRenderZones();lpRefreshDevis();\n};\nwindow.lpRefreshDevis=function(){\n  const profil=parseFloat(document.getElementById('profil').value);\n  const urgence=parseFloat(document.getElementById('urgence').value);\n  const content=document.getElementById('devis-content');\n  const btnGen=document.getElementById('btn-gen');\n  const entries=Object.entries(files);\n  if(entries.length===0){content.innerHTML='<\/p>\n<div class=\"devis-empty\">Aucun fichier d\u00e9pos\u00e9<\/div>\n<p>';btnGen.disabled=true;return;}\n  let totalHT=0,html='';\n  entries.forEach(([mat,f])=>{\n    const t=TARIFS[mat]||{prix:15};\n    const surfTot=Math.max(f.surface*f.qte,0.01);\n    const prixFinal=surfTot*t.prix*profil*urgence;\n    totalHT+=prixFinal;\n    html+='<\/p>\n<div class=\"devis-item\">\n<div class=\"devis-item-header\"><span class=\"devis-item-name\">'+(t.label||mat)+' \u00d7'+f.qte+'<\/span><span class=\"devis-item-price\">'+prixFinal.toFixed(2)+' \u20ac<\/span><\/div>\n<div class=\"devis-item-detail\">'+f.largeur+'\u00d7'+f.hauteur+' mm \u00b7 '+surfTot.toFixed(3)+' m\u00b2 \u00b7 '+t.prix+' \u20ac\/m\u00b2<\/div>\n<\/div>\n<p>';\n  });\n  html+='<\/p>\n<div class=\"devis-sep\"><\/div>\n<p>';\n  if(urgence>1){const urg=totalHT\/urgence*(urgence-1);html+='<\/p>\n<div class=\"devis-sub-row\"><span>Majoration urgence<\/span><span>+'+urg.toFixed(2)+' \u20ac<\/span><\/div>\n<p>';}\n  if(profil<1){const remPct=Math.round((1-profil)*100);html+='\n\n<div class=\"devis-sub-row\"><span>Remise '+remPct+' %<\/span><span style=\"color:var(--success)\">\u2212'+(totalHT\/profil*(1-profil)).toFixed(2)+' \u20ac<\/span><\/div>\n<p>';}\n  const tva=totalHT*0.2,ttc=totalHT+tva;\n  html+='<\/p>\n<div class=\"devis-sub-row\"><span>Total HT<\/span><span>'+totalHT.toFixed(2)+' \u20ac<\/span><\/div>\n<p>';\n  html+='<\/p>\n<div class=\"devis-sub-row\"><span>TVA 20 %<\/span><span>'+tva.toFixed(2)+' \u20ac<\/span><\/div>\n<p>';\n  html+='<\/p>\n<div class=\"devis-total-row\"><span class=\"devis-total-label\">Total TTC<\/span><span class=\"devis-total-val\">'+ttc.toFixed(2)+' \u20ac<\/span><\/div>\n<p>';\n  content.innerHTML=html;btnGen.disabled=false;\n};\nwindow.lpGenererDevis=function(){\n  const client=document.getElementById('client-name').value||'Client';\n  const profil=parseFloat(document.getElementById('profil').value);\n  const urgence=parseFloat(document.getElementById('urgence').value);\n  const entries=Object.entries(files);\n  let totalHT=0;\n  entries.forEach(([mat,f])=>{const t=TARIFS[mat]||{prix:15};totalHT+=Math.max(f.surface*f.qte,0.01)*t.prix*profil*urgence;});\n  const ttc=totalHT*1.2;\n  const ref='DEV-'+String(devisNum).padStart(3,'0');\n  historique.unshift({ref,client,ttc:ttc.toFixed(2),date:new Date().toLocaleDateString('fr-FR'),fichiers:entries.length});\n  localStorage.setItem('lp_historique',JSON.stringify(historique.slice(0,20)));\n  devisNum++;localStorage.setItem('lp_devis_num',devisNum);\n  document.getElementById('devis-num').textContent='DEV-'+String(devisNum).padStart(3,'0');\n  lpShowToast(ref+' g\u00e9n\u00e9r\u00e9 \u2014 '+ttc.toFixed(2)+' \u20ac TTC');\n  lpRenderHistorique();\n  setTimeout(()=>lpResetAll(),1800);\n};\nwindow.lpResetAll=function(){\n  files={};\n  document.getElementById('client-name').value='';\n  document.getElementById('profil').value='1';\n  document.getElementById('urgence').value='1';\n  document.getElementById('client-interne').value='';\n  lpRenderZones();lpRefreshDevis();\n};\nwindow.lpRenderHistorique=function(){\n  const card=document.getElementById('historique-card');\n  const list=document.getElementById('historique-list');\n  if(historique.length===0){card.style.display='none';return;}\n  card.style.display='block';\n  list.innerHTML=historique.slice(0,5).map(h=>'<\/p>\n<div class=\"history-item\">\n<div>\n<div class=\"history-ref\">'+h.ref+'<\/div>\n<div class=\"history-client\">'+h.client+' \u00b7 '+h.date+' \u00b7 '+h.fichiers+' fichier'+(h.fichiers>1?'s':'')+'<\/div>\n<\/div>\n<div class=\"history-price\">'+h.ttc+' \u20ac<\/div>\n<\/div>\n<p>').join('');\n};\nwindow.lpShowToast=function(msg){\n  const t=document.getElementById('toast');\n  document.getElementById('toast-msg').textContent=msg;\n  t.classList.add('show');\n  setTimeout(()=>t.classList.remove('show'),3500);\n};\nlpRenderHistorique();\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>LeaderPrint Paris Outil de d\u00e9p\u00f4t &#038; devis Mot de passe Acc\u00e9der \u00e0 l&rsquo;outil Mot de passe incorrect LeaderPrint Paris Client Interne D\u00e9connexion Mode interne \u2014 Vous d\u00e9posez les fichiers pour le compte d&rsquo;un client S\u00e9lectionner le client Client &#8212; Choisir un client &#8212;Agence Dupont &amp; Associ\u00e9sEnseigne Nationale SASStudio Cr\u00e9atif XYZ\u00c9v\u00e9nement Paris 2025 D\u00e9posez vos fichiers [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"folder":[],"class_list":["post-1523","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/wp-json\/wp\/v2\/pages\/1523","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/wp-json\/wp\/v2\/comments?post=1523"}],"version-history":[{"count":0,"href":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/wp-json\/wp\/v2\/pages\/1523\/revisions"}],"wp:attachment":[{"href":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/wp-json\/wp\/v2\/media?parent=1523"}],"wp:term":[{"taxonomy":"folder","embeddable":true,"href":"https:\/\/zuqhqpfdapzrpwq.lagencedefab.com\/Prepod\/wp-json\/wp\/v2\/folder?post=1523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}