{
  "version": 3,
  "sources": ["/cdn/shop/t/9/assets/cp-jambages.js?cb=140727092"],
  "sourcesContent": ["/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n   CR\u00C9APANEL \u2014 jambages. Moteur intact : enveloppe\n   autour des m\u00E9thodes de snippet-cfg-legs.liquid et de configurator-main.js.\n   1. Hauteur : bornes du champ du moteur (#leg-height, min 100 / max 900). Au clic\n      \u00AB Appliquer \u00BB : hors bornes \u2192 ramen\u00E9e avec un message ; d\u00E9cimale \u2192 arrondie au\n      mm avec un message ; vide ou illisible \u2192 valeur pr\u00E9c\u00E9dente, sans message. Le moteur lisait parseInt(...) || 720 et acceptait 5 000 mm.\n   2. \u00C9paisseur : au choix parmi celles du d\u00E9cor (CP_legThkAllowed),\n      celle du plan par d\u00E9faut. Tant que le client n'en choisit pas une autre, les jambages\n      suivent le plan ; un choix que le nouveau d\u00E9cor ne propose plus est ramen\u00E9, avec un\n      message.\n   3. Ligne de suppl\u00E9ment : une ligne par jambage, \u00AB Jambage gauche : P \u00D7 H \u00D7 \u00E9p. mm \u00BB. En 20 mm,\n      m\u00EAme prix total que le moteur ; en 40 et 60 mm, tarif par jambage. Profondeur de chaque jambage selon la forme (en G\n      \u00E0 gauche, le bouton gauche est le bout du retour, comme dans l'aper\u00E7u du moteur).\n   4. : produit sans jambages (r\u00E8gle legsSupplementEnabled = false) : bouton masqu\u00E9, jambages retir\u00E9s.\n   5. : le bouton dit l'\u00E9tat (\u00AB \u2713 Jambages (2) \u00BB, \u00AB \u2713 Jambage gauche \u00BB\u2026), texte blanc sur le dor\u00E9.\n   6. : retrait de chaque jambage depuis son bout (S.legs.retraitLeft / retraitRight, mm). Champ\n      dans la fen\u00EAtre, born\u00E9 par cp-modele (CP_legLimits : minimum = partie usin\u00E9e du bout, maximum s\u00FBr) ;\n      bout usin\u00E9 : recul d'office au minimum ; aper\u00E7u d\u00E9cal\u00E9 ; \u00AB \u00E0 300 mm du bout droit du plan \u00BB au\n      r\u00E9capitulatif ; retrait_mm au mod\u00E8le.\n   7. : aper\u00E7u de la fen\u00EAtre en 3D (CP_3d.legsPreview : forme usin\u00E9e, d\u00E9cor, jambages \u00E0 leur retrait), mis\n      \u00E0 jour \u00E0 chaque saisie (cases, hauteur, retraits) ; l\u00E9gende sous l'aper\u00E7u (hauteur, retrait de chaque\n      jambage). Sans WebGL : croquis du moteur et message. Au t\u00E9l\u00E9phone, aper\u00E7u sur toute la largeur.\n   window.CP_legs(A) : jambages pos\u00E9s, pour cp-modele (_cfg_model.jambages.pieces).\n   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550*/\n(function () {\n  'use strict';\n  function getApp() { try { return (typeof App !== 'undefined') ? App : window.App; } catch (e) { return window.App; } }\n  function num(v) { var n = Number(v); return isFinite(n) ? n : 0; }\n  function fmtMm(v) { return String(Math.round(num(v))).replace(/\\B(?=(\\d{3})+(?!\\d))/g, '\u00A0'); }   /* \u00AB 1 200 \u00BB, espace ins\u00E9cable */\n  function toast(msg) { if (window.CFG_UI && window.CFG_UI.toast) window.CFG_UI.toast(msg, 'info', 6000); }\n\n  function bounds() {\n    var f = document.getElementById('leg-height');\n    return { min: (f && num(f.getAttribute('min'))) || 100, max: (f && num(f.getAttribute('max'))) || 900 };\n  }\n  function readHeight(raw, prev) {\n    var s = String(raw == null ? '' : raw).trim().replace(',', '.'), b = bounds();\n    if (!/^[+-]?(\\d+\\.?\\d*|\\.\\d+)$/.test(s)) return { v: prev, msg: '' };\n    var n = Number(s), r = Math.round(n), c = Math.max(b.min, Math.min(b.max, r));\n    if (c !== r) return { v: c, msg: 'La hauteur d\\'un jambage va de ' + b.min + ' \u00E0 ' + b.max + ' mm : valeur ramen\u00E9e \u00E0 ' + c + ' mm.' };\n    if (r !== n) return { v: c, msg: 'Hauteur arrondie au millim\u00E8tre : ' + c + ' mm.' };\n    return { v: c, msg: '' };\n  }\n\n  /* jambages pos\u00E9s : c\u00F4t\u00E9 du bouton, pi\u00E8ce et extr\u00E9mit\u00E9 qui le portent, profondeur de cette pi\u00E8ce, hauteur, \u00E9paisseur. Noms des pi\u00E8ces : ceux\n     du mod\u00E8le (cp-modele : plan principal, retour, jambe, montant, par position r\u00E9elle).*/\n  function legsOf(A, all) {                             /* all : les deux jambages, pos\u00E9s ou non (noms des boutons) */\n    var S = A.S, L = all ? { left: true, right: true } : (S.legs || {}), lay = S.layout || 'linear', d = {}, w = {};\n    if (lay === 'angle') {\n      var r = S.angleDir === 'right';\n      d.gauche = num(r ? S.P1 : S.P2) || 600; d.droit = num(r ? S.P2 : S.P1) || 600;\n      w.gauche = r ? ['plan principal', 'extr\u00E9mit\u00E9 gauche'] : ['retour', 'extr\u00E9mit\u00E9']; w.droit = r ? ['retour', 'extr\u00E9mit\u00E9'] : ['plan principal', 'extr\u00E9mit\u00E9 droite'];\n    } else if (lay === 'u-shape') {\n      d.gauche = num(S.Pl) || 600; d.droit = num(S.Pr) || 600;\n      w.gauche = ['jambe gauche', 'extr\u00E9mit\u00E9']; w.droit = ['jambe droite', 'extr\u00E9mit\u00E9'];\n    } else if (lay === 'g-shape') {\n      var gr = S.gDir !== 'left', pl = num(S.Pgleft) || 600, pr = num(S.Pgreturn) || 400;\n      d.gauche = gr ? pl : pr; d.droit = gr ? pr : pl;\n      w.gauche = gr ? ['montant gauche', 'bas'] : ['retour', 'extr\u00E9mit\u00E9']; w.droit = gr ? ['retour', 'extr\u00E9mit\u00E9'] : ['montant droit', 'bas'];\n    } else { d.gauche = d.droit = num(S.P) || 600; w.gauche = ['plan', 'extr\u00E9mit\u00E9 gauche']; w.droit = ['plan', 'extr\u00E9mit\u00E9 droite']; }\n    var h = num((S.legs || {}).height) || 720, t = num((S.legs || {}).thickness) || num(S.thk) || 30, out = [];\n    ['gauche', 'droit'].forEach(function (c) {\n      if (!L[c === 'gauche' ? 'left' : 'right']) return;\n      var x = { cote: c, piece: w[c][0], extremite: w[c][1], profondeur_mm: d[c], hauteur_mm: h, epaisseur_mm: t,\n        retrait_mm: Math.max(0, Math.round(num((S.legs || {})[RK[c]]))) };                /*  retrait depuis le bout*/\n      var a = legArticle(A, t, d[c], h); if (a) x.article = a;                             /*  prix du jambage, au tarif de la r\u00E8gle */\n      if (a && a.sans_coupe) { x.profondeur_plan_mm = d[c]; x.profondeur_mm = a.sans_coupe.profondeur_jambage_mm; }   /* R36 (Q5) : jambage moins profond que le plan, affleurant l'avant */\n      out.push(x);\n    });\n    return out;\n  }\n  /* Lot de prix du stratifi\u00E9 (tableau 2.3 accept\u00E9, AUDIT Tours 557, 615) : tarif des jambages lu dans la r\u00E8gle, plus dans le\n     code (A-210) :\n     - prix au ml de hauteur par \u00E9paisseur et par bande de profondeur du plan (\u00AB 20=600:209,1200:249 ; 40=800:239,1200:269 \u00BB) ;\n       au-del\u00E0 de la derni\u00E8re bande, non propos\u00E9 et bloquant ;\n     - quincaillerie (\u00AB 20=0,40=59 \u00BB) et hauteur factur\u00E9e minimale (\u00AB 20=0.3,40=0.3 \u00BB) par \u00E9paisseur ;\n     - une profondeur qui n'est pas une borne de bande : coup\u00E9 dans la bande, plus la r\u00E9duction de profondeur de la r\u00E8gle\n       (plan de 500 en 20 mm : P60 + 89 ; plan de 600 en 40 mm : P80 + 89).\n     Sans tarif dans la r\u00E8gle : le prix par jambage du moteur. */\n  function regle(A) {\n    var id = Number(A && A._eff && A._eff.matchedCollectionId) || 0, rs = (window.CONFIGURATOR_CONFIG && window.CONFIGURATOR_CONFIG.collectionRules) || [];\n    for (var i = 0; i < rs.length; i++) if (Number(rs[i].collectionId) === id) return rs[i];\n    return null;\n  }\n  function parEp(txt) {                                 /* \u00AB 20=0,40=59 \u00BB \u2192 { 20: 0, 40: 59 } */\n    var o = {}; String(txt || '').split(/[,;]/).forEach(function (x) { var p = x.split('='); if (p.length === 2 && num(p[0]) > 0 && p[1].trim() !== '') o[num(p[0])] = num(p[1].trim().replace(',', '.')); });\n    return o;\n  }\n  /* R36 (AUDIT, plan accept\u00E9 vers 20:22 ; docs\\r36-plan-code.md) : \u00AB v \u00BB \u00E0 la place d'un prix = prix de la variante (m\u00E9tachamp\n     custom.prix_jambage, CP_JAMB_VAR) ; \u00AB 600-600:v \u00BB = bande ferm\u00E9e ; \u00AB 0:v \u00BB = sans bande (m\u00B2, ml de profondeur). Les lignes du\n     stratifi\u00E9 (prix en \u20AC, bandes ouvertes) se lisent comme avant. */\n  function tarifs(A) {\n    var r = regle(A) || {}, t = {};\n    String(r.legsTarifParEp || '').split(';').forEach(function (x) {   /* \u00AB 20=600:209,1200:249 \u00BB */\n      var p = x.split('='); if (p.length !== 2 || !(num(p[0]) > 0)) return;\n      var rows = p[1].split(',').map(function (b) {\n        var q = b.split(':'), k = String(q[0] || '').trim(), v = String(q[1] || '').trim(), m = k.match(/^(\\d+)\\s*-\\s*(\\d+)$/);\n        return m ? { min: num(m[1]), max: num(m[2]), eur: v === 'v' ? 'v' : num(v.replace(',', '.')) } : { max: num(k), eur: v === 'v' ? 'v' : num(v.replace(',', '.')) };\n      }).filter(function (b) { return (b.eur === 'v' || b.eur > 0) && (b.max >= 0 || b.min != null); }).sort(function (a, b) { return a.max - b.max; });   /* \u00AB 0:\u2026 \u00BB : sans bande (m\u00B2, ml de profondeur) */\n      if (rows.length) t[num(p[0])] = rows;\n    });\n    var u = {}; String(r.legsUniteParEp || '').split(/[,;]/).forEach(function (x) { var p = x.split('='); if (p.length === 2 && num(p[0]) > 0 && /^(ml_haut|ml_long|m2|piece)$/.test(p[1].trim())) u[num(p[0])] = p[1].trim(); });\n    var mx = {}; String(r.legsMaxParEp || '').split(/[,;]/).forEach(function (x) { var p = x.split('='); if (p.length !== 2 || !(num(p[0]) > 0)) return; var d = p[1].trim().split(/\\s*[x\u00D7]\\s*/); if (num(d[0]) > 0) mx[num(p[0])] = { p: num(d[0]), h: num(d[1]) || 0 }; });\n    return { tarif: t, quinc: parEp(r.legsQuincParEp), min: parEp(r.legsMinMlParEp), reduc: num(r.reducProfEur), unite: u, max: mx, sansCoupe: parEp(r.legsSansCoupeParEp),\n      note: String(r.legsNote || '').trim(),     /* R36-2 : phrase de la fen\u00EAtre (Neolith, COMMERCIAL \u00A7 7) */\n      epPlan: r.legsEpPlan === true,             /* R36-5 (AUDIT, option b) : jambage \u00E0 l'\u00E9paisseur du plan seulement (quartz, Silestone) */\n      sousPlan: sousPlanParEp(r.legsSousPlanParEp) };   /* R183 : \u00AB 40=12,20 \u00BB, un jambage de 40 aussi sous un plan de 12 ou 20 */\n  }\n  /* R183 (Romain 01/11 ; AUDIT Tours 1150 et 1164 ; COMMERCIAL Tour 193) : r\u00E9glage \u00AB Jambages : aussi sous un plan de \u00BB ; HPL :\n     un jambage de 40 mm (seule ligne du tarif) sous un plan de 12 ou de 20 mm. Sans le r\u00E9glage, rien ne change (R36, Q2) */\n  function sousPlanParEp(s) {\n    var o = {}; String(s || '').split(';').forEach(function (x) { var p = x.split('='); if (p.length === 2 && num(p[0]) > 0) o[num(p[0])] = p[1].split(',').map(num).filter(function (v) { return v > 0; }); });\n    return o;\n  }\n  /* \u00E9paisseurs de jambage du tarif qui vont sous un plan d'\u00E9paisseur t : la sienne, ou celles qui l'acceptent (R183) */\n  function legPourPlan(T, t) {\n    return Object.keys(T.tarif).map(Number).filter(function (e) { return e === t || (T.sousPlan[e] || []).indexOf(t) >= 0; });\n  }\n  /* R36 : 4 unit\u00E9s. ml_haut (d\u00E9faut : le calcul du stratifi\u00E9, inchang\u00E9 ; \u00AB v \u00BB et \u00AB sans coupe \u00BB en plus), ml_long, m2, piece.\n     Prix par variante absent, bande ou dimension hors tarif : non propos\u00E9, ajout bloqu\u00E9 (message \u00E0 reprendre de COMMERCIAL). */\n  /* A-383 (AUDIT, MAJEUR) : le prix \u00AB v \u00BB est celui de la variante du m\u00EAme d\u00E9cor \u00E0 l'\u00E9paisseur DU JAMBAGE (gr\u00E8s : l'\u00E9paisseur est une\n     option de la variante ; un jambage de 26 sous un plan de 12 prend le prix du 26). M\u00EAmes options que la variante choisie, sauf\n     l'\u00E9paisseur, lues par les options et non par le titre ; une autre tranche de profondeur sert de repli (m\u00EAme prix sur les deux).\n     Options rep\u00E9r\u00E9es par leur valeur (App.options est vide sur la fiche) : \u00E9paisseur \u00AB 12 mm \u00BB, profondeur \u00AB 60/65 cm \u00BB.\n     Sans option d'\u00E9paisseur (Dekton) : la variante choisie. */\n  function varianteJambage(A, v, t) {\n    var iE = -1, iP = -1;\n    if (!v) return v;\n    for (var i = 0; i < 3; i++) { var s = String(v['option' + (i + 1)] || '').trim(); if (iE < 0 && /^\\d+(?:[.,]\\d+)?\\s*mm$/i.test(s)) iE = i; else if (iP < 0 && /\\d\\s*cm$/i.test(s)) iP = i; }\n    if (iE < 0) return v;\n    var kE = 'option' + (iE + 1), ep = function (w) { return parseFloat(String(w[kE] || '').replace(',', '.')) || 0; };\n    if (ep(v) === t) return v;\n    var meme = function (w, saufP) { for (var j = 1; j <= 3; j++) { if (j === iE + 1 || (saufP && j === iP + 1)) continue; if (String(w['option' + j] || '') !== String(v['option' + j] || '')) return false; } return true; };\n    var vs = A.shopifyVariants || [];\n    return vs.filter(function (w) { return ep(w) === t && meme(w, false); })[0] || (iP >= 0 ? vs.filter(function (w) { return ep(w) === t && meme(w, true); })[0] : null) || null;\n  }\n  function articleR36(A, T, t, rows, U, sc, depth, h) {\n    var v = A.getSelectedShopifyVariant ? A.getSelectedShopifyVariant() : null, vj = varianteJambage(A, v, t), jv = vj ? (window.CP_JAMB_VAR || {})[vj.title] : null;\n    var prix = function (r) { if (r.eur !== 'v') return r.eur; if (jv == null) return 0; return typeof jv === 'object' ? num(jv[String(r.max)]) : num(jv); };\n    var cm = function (mm) { return String(mm / 10).replace('.', ','); }, hors = function (msg) { return { hors_tarif: true, message: msg, unite: U }; };\n    var r, P = depth, mx = T.max[t] || null;\n    if (U === 'piece') r = rows.filter(function (x) { return depth >= (x.min != null ? x.min : 0) && depth <= x.max; })[0];\n    else if (sc) { r = rows.filter(function (x) { return x.max > 0 && x.max <= depth; }).pop(); if (r) P = r.max; }\n    else if (U === 'm2' || U === 'ml_long') r = rows.filter(function (x) { return x.max === 0 || depth <= x.max; })[0];\n    else r = rows.filter(function (x) { return depth <= x.max && (x.min == null || depth >= x.min); })[0];\n    /* R36-5 (COMMERCIAL \u00A7 3 ; AUDIT, Q3) : joue \u00E0 la pi\u00E8ce hors de ses bandes : \u00AB pas propos\u00E9 pour un plan de 605 mm de profondeur.\n       Choisissez 600 mm, ou de 610 \u00E0 900 mm. \u00BB ; au-del\u00E0 de la derni\u00E8re : \u00AB propos\u00E9 jusqu'\u00E0 900 mm de profondeur de plan. \u2026 \u00BB */\n    if (!r && U === 'piece') {\n      var top = rows[rows.length - 1].max, parts = rows.map(function (x) { return x.min != null && x.min !== x.max ? 'de ' + fmtMm(x.min) + ' \u00E0 ' + fmtMm(x.max) + ' mm' : fmtMm(x.max) + ' mm'; });\n      return hors(depth > top ? 'propos\u00E9 jusqu\\'\u00E0 ' + fmtMm(top) + ' mm de profondeur de plan. R\u00E9duisez la profondeur \u00E0 ' + fmtMm(top) + ' mm au plus, ou retirez le jambage.'\n        : 'pas propos\u00E9 pour un plan de ' + fmtMm(depth) + ' mm de profondeur. Choisissez ' + parts.join(', ou ') + '.');\n    }\n    if (!r) return hors(U === 'piece' || sc ? 'profondeur du plan hors des tailles propos\u00E9es (' + rows.map(function (x) { return x.min != null && x.min !== x.max ? 'de ' + cm(x.min) + ' \u00E0 ' + cm(x.max) : cm(x.max); }).join(', ') + ' cm)'\n      : cm(rows[rows.length - 1].max) + ' cm de profondeur au plus. R\u00E9duisez la profondeur du plan');\n    /* R36-3 : d\u00E9cor sans prix de jambage (COMMERCIAL, docs\\commercial-r36-textes.md \u00A7 3 ; cp-modele \u00E9crit \u00AB Jambage {c\u00F4t\u00E9} : \u00BB devant) */\n    var e = prix(r);\n    if (!(e > 0)) {\n      var dc = typeof window.CP_currentDecor === 'function' ? window.CP_currentDecor() : null, dn = dc ? dc.name : v ? (v.option1 || String(v.title || '').split(' / ')[0]) : '';\n      return hors(dn ? 'pas propos\u00E9 pour le d\u00E9cor \u00AB ' + dn + ' \u00BB. Choisissez un autre d\u00E9cor, ou retirez le jambage.' : 'non propos\u00E9 sur ce d\u00E9cor');\n    }\n    /* R36-2, m\u00B2 (COMMERCIAL, docs\\commercial-r36-textes.md \u00A7 3 ; cp-modele \u00E9crit \u00AB Jambage {c\u00F4t\u00E9} : \u00BB devant) */\n    if (mx && U === 'm2' && ((mx.p && P > mx.p) || (mx.h && h > mx.h))) return hors(fmtMm(P) + ' \u00D7 ' + fmtMm(h) + ' mm, c\\'est plus que la plus grande pi\u00E8ce (' + fmtMm(mx.p) + ' \u00D7 ' + fmtMm(mx.h) + ' mm). ' +\n      (mx.h && h > mx.h ? 'R\u00E9duisez sa hauteur \u00E0 ' + fmtMm(mx.h) + ' mm au plus' : 'R\u00E9duisez la profondeur du plan \u00E0 ' + fmtMm(mx.p) + ' mm au plus') + ', ou retirez le jambage.');\n    if (mx && ((mx.p && P > mx.p) || (mx.h && h > mx.h))) return hors(mx.h ? cm(mx.p) + ' \u00D7 ' + cm(mx.h) + ' cm au plus (profondeur \u00D7 hauteur)' : cm(mx.p) + ' cm de profondeur au plus');\n    /* R36-2 (AUDIT, d\u00E9cision du 26/10) : au m\u00B2, surface factur\u00E9e = celle qu'\u00E9crit la ligne, au milli\u00E8me de m\u00B2 le plus proche :\n       milli\u00E8mes = Math.round(profondeur \u00D7 hauteur en mm\u00B2 / 1 000), surface = milli\u00E8mes / 1 000 ; prix en centimes entiers :\n       Math.round(prix au m\u00B2 en centimes \u00D7 milli\u00E8mes / 1 000), sans flottant (289 \u20AC/m\u00B2 \u00D7 0,415 m\u00B2 = 119,935 \u2192 119,94 \u20AC ; en\n       flottant, 119,93). M\u00EAme calcul dans l'outil A-175. */\n    /* R36-4 : au ml (de hauteur, ou de profondeur pour ml_long), m\u00EAme calcul en centimes entiers sur la longueur en mm, au moins le\n       minimum : Math.round(prix au ml en centimes \u00D7 mm / 1 000) ; \u00AB minimum \u00BB dit dans la ligne quand il s'applique (COMMERCIAL \u00A7 2) */\n    var mn = T.min[t] || 0, lmm = U === 'ml_long' ? P : h;\n    var mill = U === 'm2' ? Math.max(Math.round(P * h / 1000), Math.round(mn * 1000)) : U === 'piece' ? 0 : Math.max(Math.round(lmm), Math.round(mn * 1000));\n    var minimum = U !== 'piece' && U !== 'm2' && Math.round(mn * 1000) > Math.round(lmm);\n    var q = U === 'piece' ? 1 : mill / 1000;\n    var c = U === 'piece' ? Math.round(e * 100) : Math.round(Math.round(e * 100) * mill / 1000), qq = Math.round((T.quinc[t] || 0) * 100);\n    var o = { unite: U, borne: r.max ? (r.min != null && r.min !== r.max ? r.min + '-' + r.max : String(r.max)) : null, source: r.eur === 'v' ? 'variante' : 'r\u00E8gle',\n      profondeur_tarif: r.max ? 'P' + cm(r.max) : (U === 'm2' ? 'm\u00B2' : 'ml'),   /* lu par le contr\u00F4le de cp-modele (comme le stratifi\u00E9) */\n      prix_unitaire_centimes: Math.round(e * 100), quantite: Math.round(q * 10000) / 10000, bois_centimes: c, quincaillerie_centimes: qq, reduction_centimes: 0,\n      prix_centimes: c + qq, plafond: null, note_prix: '',\n      sans_coupe: sc ? { profondeur_jambage_mm: P, retrait_cote_mur_mm: depth - P } : null };\n    if (U === 'm2') o.surface_mm2 = P * h;   /* R36-2 : pour l'outil A-175 (milli\u00E8mes = Math.round(surface_mm2 / 1 000)) ; cl\u00E9 pos\u00E9e au m\u00B2 seulement */\n    if (minimum) o.minimum = true;           /* R36-4 : longueur factur\u00E9e = minimum de la ligne ; cl\u00E9 pos\u00E9e seulement alors */\n    /* R206 (Romain ; AUDIT, d\u00E9cision du 02/11 ; COMMERCIAL, ux-r207 \u00A7 3) : au ml de hauteur, le jambage a la profondeur du plan et le\n       prix de la tranche qui la couvre ; la tranche, quand ce n'est pas la profondeur du plan (630 \u2192 900), est dite. Cl\u00E9 pos\u00E9e alors */\n    if (U === 'ml_haut' && !sc && r.max && r.min == null && r.max !== depth) o.tranche_mm = r.max;\n    return o;\n  }\n  function legArticle(A, t, depth, h) {\n    var T = tarifs(A), rows = T.tarif[t]; if (!rows) return null;\n    var U = T.unite[t] || 'ml_haut', sc = !!T.sansCoupe[t];\n    if (U !== 'ml_haut' || sc || rows.some(function (x) { return x.eur === 'v' || x.min != null || !(x.max > 0); })) return articleR36(A, T, t, rows, U, sc, depth, h);\n    var r = rows.filter(function (x) { return depth <= x.max; })[0];\n    /* L10 (lot \u00AB messages 1 \u00BB) : le dernier palier du tarif, en cm, et ce qu'il faut changer (cp-modele met \u00AB Jambage {c\u00F4t\u00E9} : \u00BB) */\n    if (!r) return { hors_tarif: true, message: String(rows[rows.length - 1].max / 10).replace('.', ',') + ' cm de profondeur au plus. R\u00E9duisez la profondeur du plan' };\n    var ml = Math.max(h / 1000, T.min[t] || 0), c = Math.round(r.eur * ml * 100), q = Math.round((T.quinc[t] || 0) * 100);\n    var red = depth !== r.max && T.reduc > 0 ? Math.round(T.reduc * 100) : 0, bande = 'P' + String(r.max / 10).replace('.', ',');\n    /* plafond \u00AB jamais plus cher \u00BB (AUDIT Tour 622) : pas plus que le m\u00EAme jambage dans la bande qui contient le 800 (20 mm :\n       P120 ; 40 et 60 mm : P80), ou dans la bande de sa profondeur au-del\u00E0 de 800 */\n    var rc = rows.filter(function (x) { return Math.max(depth, 800) <= x.max; })[0] || r, cap = Math.round(rc.eur * ml * 100) + q;\n    var redF = Math.max(0, Math.min(red, cap - c - q)), plafond = red > 0 && redF < red;\n    return { profondeur_tarif: bande, eur_ml: r.eur, ml_factures: Math.round(ml * 1000) / 1000, bois_centimes: c,\n      quincaillerie_centimes: q, reduction_centimes: redF, prix_centimes: c + q + redF,\n      plafond: plafond ? { profondeur_mm: rc.max, prix_centimes: c + q + redF } : null,\n      note_prix: red ? 'plan de ' + depth + ' mm : jambage coup\u00E9 dans un ' + bande + (plafond ? ', au prix d\\'un jambage de ' + rc.max + ' mm de profondeur' : ', mise \u00E0 la profondeur') : '' };\n  }\n  var RK = { gauche: 'retraitLeft', droit: 'retraitRight' };\n  /* \u00AB bout du retour \u00BB, \u00AB bout gauche du plan principal \u00BB, \u00AB bas du montant gauche \u00BB, \u00AB bout de la jambe droite \u00BB */\n  function duLieu(x) { var w = where(x); return (/^extr\u00E9mit\u00E9/.test(w) ? 'de l\\'' : 'du ') + w; }   /* R148-b */\n  function where(x) { var de = /^(jambe|plan|retour|montant)/.test(x.piece) ? (/^(jambe)/.test(x.piece) ? 'de la ' : 'du ') : 'de '; return x.extremite + ' ' + de + x.piece; }\n  window.CP_legWhere = where;\n  window.CP_legs = function (A) { A = A || getApp(); return A && A.S ? legsOf(A) : []; };\n  window.CP_legsAll = function (A) { A = A || getApp(); return A && A.S ? legsOf(A, true) : []; };   /* les deux bouts, pos\u00E9s ou non */\n  window.CP_legBounds = bounds;\n\n  /* 1. \u00AB Appliquer \u00BB : ce clic passe avant celui du moteur, qui copie _legsTemp dans S.legs */\n  document.addEventListener('click', function (e) {\n    if (!(e.target && e.target.closest && e.target.closest('#legs-apply'))) return;\n    var A = getApp(), f = document.getElementById('leg-height');\n    if (!A || !A.S || !A._legsTemp) return;\n    var prev = num((A.S.legs || {}).height), b = bounds();\n    if (!(prev >= b.min && prev <= b.max)) prev = 720;\n    var a = readHeight(f && !(f.validity && f.validity.badInput) ? f.value : '', prev);\n    A._legsTemp.height = a.v;\n    if (f) f.value = a.v;\n    /* 2. : \u00E9paisseur choisie si le d\u00E9cor la propose, sinon celle du plan ; \u00AB libre \u00BB = diff\u00E9rente du plan*/\n    var okT = legThkAllowed(A), tt = num(A._legsTemp.thickness), pt = num(A.S.thk);\n    if (okT.indexOf(tt) < 0) tt = pt || tt;\n    A._legsTemp.thickness = tt; A._legsTemp.thkLibre = tt !== pt;\n    if (a.msg) setTimeout(function () { toast(a.msg); }, 0);\n    /*  retrait de chaque jambage pos\u00E9, born\u00E9 (minimum du bout usin\u00E9, maximum s\u00FBr)*/\n    var lim = limits(A);\n    ['gauche', 'droit'].forEach(function (c) {\n      if (!A._legsTemp[c === 'gauche' ? 'left' : 'right']) return;\n      var inp = document.getElementById('cp-retrait-' + c), r = readRetrait(c, inp ? inp.value : A._legsTemp[RK[c]], lim[c], num(A._legsTemp[RK[c]]));\n      A._legsTemp[RK[c]] = r.v; if (inp) inp.value = r.v;\n      if (r.msg) setTimeout(function () { toast(r.msg); }, 0);\n    });\n  }, true);\n\n  /*  \u00E9paisseurs\n     possibles = celles du moteur (thicknessOptions, r\u00E8gle de collection, comme renderLegsThicknessUI) qui existent\n     dans le d\u00E9cor*/\n  function legThkAllowed(A) {\n    var opts = ((window.CONFIGURATOR_CONFIG || {}).thicknessOptions || []).map(function (o) { return num(o.mm); }).filter(Boolean);\n    if (!opts.length) opts = [30, 40];                                  /* repli du moteur */\n    var tr = A && A._eff && A._eff.thicknessRule;\n    if (tr && tr.enabled && Array.isArray(tr.allowed) && tr.allowed.length) {\n      var al = tr.allowed.map(Number), f = opts.filter(function (m) { return al.indexOf(m) >= 0; });\n      if (f.length) opts = f;\n    }\n    var d = typeof window.CP_currentDecor === 'function' ? window.CP_currentDecor() : null;\n    if (d) { var g = opts.filter(function (m) { return d.thk.indexOf(m) >= 0; }); if (g.length) opts = g; }\n    var T0 = tarifs(A), lt = Object.keys(T0.tarif).map(Number);           /* R36 (Q2) : avec un tarif dans la r\u00E8gle, seules les \u00E9paisseurs qui y ont une ligne */\n    if (lt.length) { var h2 = opts.filter(function (m) { return lt.indexOf(m) >= 0; }); if (h2.length) opts = h2; }\n    /* R36-5 (AUDIT, option b) : \u00AB jambage \u00E0 l'\u00E9paisseur du plan \u00BB : celle du plan seulement (le bouton est masqu\u00E9 si elle n'a pas de ligne) */\n    if (T0.epPlan) { var pt = num(A.S && A.S.thk); if (opts.indexOf(pt) >= 0) opts = [pt]; }\n    return opts.sort(function (a, b) { return a - b; });\n  }\n  window.CP_legThkAllowed = function (A) { A = A || getApp(); return A && A.S ? legThkAllowed(A) : []; };\n\n  /*  bornes du retrait (cp-modele : minimum = partie usin\u00E9e du bout, maximum s\u00FBr)*/\n  var LEG_MAX = 600;\n  function limits(A) { try { return typeof window.CP_legLimits === 'function' ? window.CP_legLimits(A) || {} : {}; } catch (e) { return {}; } }\n  function bout(m) { return m && m.raisons.length ? 'extr\u00E9mit\u00E9 en ' + m.raisons.join(' et ') : 'extr\u00E9mit\u00E9'; }\n  function readRetrait(c, raw, m, prev) {\n    m = m || { min: 0, max: LEG_MAX, raisons: [] };\n    var s = String(raw == null ? '' : raw).trim().replace(',', '.');\n    var n = /^[+-]?(\\d+\\.?\\d*|\\.\\d+)$/.test(s) ? Math.round(Number(s)) : Math.round(prev || 0);\n    if (n < m.min) return { v: m.min, msg: 'Jambage ' + c + ' plac\u00E9 \u00E0 ' + m.min + ' mm de l\\'extr\u00E9mit\u00E9 : ' + bout(m) + ' (au moins ' + m.min + ' mm).' };\n    if (n > m.max) return { v: m.max, msg: 'Retrait du jambage ' + c + ' ramen\u00E9 \u00E0 ' + m.max + ' mm (au plus ' + m.max + ' mm).' };\n    return { v: n, msg: '' };\n  }\n  function clampTo(v, m) { m = m || { min: 0, max: LEG_MAX }; return Math.min(Math.max(Math.round(num(v)), m.min), m.max); }\n  /* champ \u00AB retrait depuis le bout \u00BB de chaque jambage pos\u00E9, dans la fen\u00EAtre (apr\u00E8s Hauteur et \u00C9paisseur) */\n  function retraitUI(A) {\n    var host = document.querySelector('#legs-popup .legs-params'); if (!host || !A._legsTemp) return;\n    var box = document.getElementById('cp-leg-retrait');\n    if (!box) {\n      box = document.createElement('div'); box.id = 'cp-leg-retrait'; box.style.display = 'contents'; host.appendChild(box);\n      box.addEventListener('input', function (e) {\n        var i = e.target.closest('input[data-cote]'); if (!i) return;\n        var B = getApp(); if (!B || !B._legsTemp) return;\n        B._legsTemp[RK[i.getAttribute('data-cote')]] = i.value;\n        try { B.renderLegsPreview(); } catch (err) {}\n      });\n      /*  sous le minimum du bout usin\u00E9 (30 apr\u00E8s une encoche de 100), la valeur n'\u00E9tait\n         ramen\u00E9e, avec son message, qu'au clic sur \u00AB Appliquer \u00BB : \u00E0 la saisie, rien ne disait qu'elle \u00E9tait refus\u00E9e.\n         M\u00EAme r\u00E8gle (readRetrait) d\u00E8s que le champ est quitt\u00E9 ou valid\u00E9.*/\n      box.addEventListener('change', function (e) {\n        var i = e.target.closest('input[data-cote]'); if (!i) return;\n        var B = getApp(); if (!B || !B._legsTemp) return;\n        var c = i.getAttribute('data-cote'), r = readRetrait(c, i.value, limits(B)[c], num(B._legsTemp[RK[c]]));\n        if (String(r.v) !== String(i.value)) { i.value = r.v; B._legsTemp[RK[c]] = r.v; try { B.renderLegsPreview(); } catch (err) {} }\n        if (r.msg) toast(r.msg);\n      });\n    }\n    var T = A._legsTemp, lim = limits(A), html = '';\n    ['gauche', 'droit'].forEach(function (c) {\n      if (!T[c === 'gauche' ? 'left' : 'right']) return;\n      var m = lim[c] || { min: 0, max: LEG_MAX, raisons: [] }, v = clampTo(T[RK[c]], m);\n      T[RK[c]] = v;                                                      /* bout usin\u00E9 : recul\u00E9 d'office au minimum */\n      var hint = m.min > 0 ? 'Extr\u00E9mit\u00E9 en ' + m.raisons.join(' et ') + ' : au moins ' + m.min + ' mm de l\\'extr\u00E9mit\u00E9, au plus ' + m.max + ' mm.'\n        : 'De 0 (au ras de l\\'extr\u00E9mit\u00E9) \u00E0 ' + m.max + ' mm.';\n      html += '<div class=\"legs-param-group\"><label for=\"cp-retrait-' + c + '\">Jambage ' + c + ' : retrait depuis l\\'extr\u00E9mit\u00E9</label>' +\n        '<div class=\"legs-param-input\"><input type=\"number\" id=\"cp-retrait-' + c + '\" data-cote=\"' + c + '\" min=\"' + m.min + '\" max=\"' + m.max +\n        '\" step=\"10\" value=\"' + v + '\" inputmode=\"numeric\" aria-describedby=\"cp-retrait-' + c + '-aide\"><span class=\"legs-param-unit\">mm</span></div>' +\n        '<small id=\"cp-retrait-' + c + '-aide\">' + hint + '</small></div>';\n    });\n    box.innerHTML = html;\n  }\n  /* aper\u00E7u de la fen\u00EAtre (moteur, _drawLeg3D) : chaque jambage d\u00E9cal\u00E9 de son retrait, dans l'ordre des appels\n     de renderLegsPreviewLinear / Angle / U / G (gauche puis droit ; en G \u00E0 gauche, montant puis retour) */\n  function previewQueue(A, kind) {\n    var T = A._legsTemp || {}, S = A.S, lim = limits(A), q = [];\n    var r = function (c) { return clampTo(T[RK[c]], lim[c]); }, L = !!T.left, R = !!T.right;\n    if (kind === 'Linear') { if (L) q.push({ dx: r('gauche') }); if (R) q.push({ dx: -r('droit') }); }\n    else if (kind === 'Angle') {\n      if (S.angleDir === 'right') { if (L) q.push({ dx: r('gauche') }); if (R) q.push({ dy: -r('droit') }); }\n      else { if (L) q.push({ dy: -r('gauche') }); if (R) q.push({ dx: -r('droit') }); }\n    } else if (kind === 'U') { if (L) q.push({ dy: -r('gauche') }); if (R) q.push({ dy: -r('droit') }); }\n    else if (kind === 'G') {\n      if (S.gDir === 'right') { if (L) q.push({ dy: -r('gauche') }); if (R) q.push({ dx: r('droit') }); }\n      else { if (R) q.push({ dy: -r('droit') }); if (L) q.push({ dx: r('gauche') }); }\n    }\n    return q;\n  }\n\n  /*  aper\u00E7u 3D de la fen\u00EAtre. Plan calcul\u00E9 avec les jambages de la fen\u00EAtre (_legsTemp : cases, hauteur\n     born\u00E9e, retraits born\u00E9s), S.legs remis aussit\u00F4t ; rendu par cp-3d ; l\u00E9gende sous l'aper\u00E7u*/\n  function tempPlan(A) {\n    var keep = A.S.legs, T = A._legsTemp || {}, lim = limits(A), b = bounds(), L = {};\n    for (var k in T) L[k] = T[k];\n    L.height = Math.min(b.max, Math.max(b.min, Math.round(num(T.height)) || 720));\n    L.thickness = legThkAllowed(A).indexOf(num(T.thickness)) >= 0 ? num(T.thickness) : num(A.S.thk);    \n    ['gauche', 'droit'].forEach(function (c) { L[RK[c]] = clampTo(T[RK[c]], lim[c]); });\n    A.S.legs = L;\n    try { return window.CP_plan(); } finally { A.S.legs = keep; }\n  }\n  function previewCss() {\n    if (document.getElementById('cp-l3d-wrap-css')) return;\n    var st = document.createElement('style'); st.id = 'cp-l3d-wrap-css';\n    st.textContent = '.cp-l3d-cap{margin:10px 0 0;font-size:13px;line-height:1.4;color:#374151;text-align:center}' +\n      '@media (max-width:600px){#legs-popup .legs-preview-container{padding:12px}' +\n      '.legs-preview.cp-l3d-wrap{flex-wrap:wrap;justify-content:space-between;gap:10px}' +\n      '.legs-preview.cp-l3d-wrap .legs-preview-svg,.legs-preview.cp-l3d-wrap .cp-l3d{order:-1;flex:1 1 100%}' +\n      '.legs-preview.cp-l3d-wrap .legs-preview-svg{height:200px}.legs-preview.cp-l3d-wrap .cp-l3d{height:220px}}';\n    document.head.appendChild(st);\n  }\n  function caption(A, st) {\n    var c = document.getElementById('cp-l3d-cap'); if (!c) return;\n    if (st === 'loading') { c.textContent = 'Chargement de l\\'aper\u00E7u 3D\u2026'; return; }\n    var T = A._legsTemp || {}, lim = limits(A), b = bounds(), parts = [];\n    var h = Math.min(b.max, Math.max(b.min, Math.round(num(T.height)) || 720));\n    var th = legThkAllowed(A).indexOf(num(T.thickness)) >= 0 ? num(T.thickness) : num(A.S.thk);\n    ['gauche', 'droit'].forEach(function (x) {\n      if (!T[x === 'gauche' ? 'left' : 'right']) return;\n      var r = clampTo(T[RK[x]], lim[x]);\n      parts.push('jambage ' + x + (r > 0 ? ' \u00E0 ' + r + ' mm de l\\'extr\u00E9mit\u00E9' : ' au ras de l\\'extr\u00E9mit\u00E9'));\n    });\n    var txt = parts.length ? 'Hauteur ' + h + ' mm \u00B7 \u00E9paisseur ' + th + ' mm \u00B7 ' + parts.join(' \u00B7 ') : 'Utilisez les boutons + \u00E0 gauche et \u00E0 droite pour poser un jambage.';\n    var why = st === 'ok' ? '' : st === 'error' ? 'Aper\u00E7u simplifi\u00E9 : la vue 3D n\\'a pas pu se charger. ' : 'Aper\u00E7u simplifi\u00E9 : la vue 3D n\\'est pas disponible sur ce navigateur. ';\n    c.textContent = why + txt;\n  }\n  function legs3d(A) {\n    var pop = document.getElementById('legs-popup'), host = pop && pop.querySelector('.legs-preview');\n    if (!host) return;\n    var C3 = window.CP_3d;\n    if (pop.classList.contains('hidden')) { if (C3 && C3.legsPreviewStop) C3.legsPreviewStop(); return; }\n    if (!document.getElementById('cp-l3d-cap')) {\n      var p = document.createElement('p'); p.id = 'cp-l3d-cap'; p.className = 'cp-l3d-cap';\n      host.parentNode.insertBefore(p, host.nextSibling);\n    }\n    if (!C3 || !C3.legsPreview || typeof window.CP_plan !== 'function') { caption(A, 'nogl'); return; }\n    var st = C3.legsPreview(host, tempPlan(A), function (s) { var B = getApp(); if (B) caption(B, s); });\n    caption(A, st);\n  }\n\n  /*  le bouton du moteur (custom-configV2 l. 839) n'a pas de <span>, or updateLegsButtonState ne\n     change que ce <span> : jambages pos\u00E9s, il restait \u00AB + Ajouter des jambages \u00BB, vert fonc\u00E9 sur dor\u00E9 (2,3 : 1).\n     Libell\u00E9 et aria-label qui disent l'\u00E9tat, texte blanc sur le dor\u00E9 (5,8 : 1). Au chargement, apr\u00E8s\n     \u00AB Appliquer \u00BB et \u00E0 chaque rendu.*/\n  function legsButton(A) {\n    var b = document.getElementById('btn-add-legs'); if (!b || !A || !A.S) return;\n    if (!document.getElementById('cp-legs-btn-css')) {\n      var st = document.createElement('style'); st.id = 'cp-legs-btn-css';\n      st.textContent = '#btn-add-legs.has-legs{color:#fff}';\n      document.head.appendChild(st);\n    }\n    var L = A.S.legs || {}, g = !!L.left, d = !!L.right;\n    var t = g && d ? '\u2713 Jambages (2)' : g ? '\u2713 Jambage gauche' : d ? '\u2713 Jambage droit' : '+ Ajouter des jambages';\n    if (b.textContent.trim() !== t) b.textContent = t;\n    b.classList.toggle('has-legs', g || d);\n    if (g || d) b.setAttribute('aria-label', (g && d ? 'Jambages : gauche et droit' : 'Jambage ' + (g ? 'gauche' : 'droit')) + '. Modifier');\n    else b.removeAttribute('aria-label');\n  }\n\n  /* \u2500\u2500 R146 (Romain ; AUDIT Tour 910 ; textes de COMMERCIAL, Tour 166) : l'image du dessin jointe au panier (configurator-export,\n     getExportSvgClone) n'avait que le plan vu de dessus : un jambage command\u00E9 n'y avait ni dessin ni cote. Sous le plan, une bande\n     \u00AB Jambages \u00BB (\u00AB Jambage \u00BB s'il n'y en a qu'un) : chaque jambage de face, profondeur \u00D7 hauteur, cotes en nombres seuls comme sur\n     le plan, son nom (celui de sa ligne des Options du panier, octet pour octet), \u00AB \u00C9paisseur : 20 mm \u00BB, et \u00AB En retrait de 50 mm\n     c\u00F4t\u00E9 mur \u00BB s'il y en a un ; ni prix ni code du tarif. \u00C0 l'\u00E9chelle du plan (unit\u00E9s du dessin par mm, lues sur les pi\u00E8ces trac\u00E9es\n     par cp-trace et leur contour du mod\u00E8le) ; plus grand que le plan permet : r\u00E9duit, avec \u00AB \u00C9chelle r\u00E9duite \u00BB. Sans jambage : rien\n     n'est ajout\u00E9, l'image reste celle d'avant \u2500\u2500 */\n  var SVGNS = 'http://www.w3.org/2000/svg';\n  function nomJambage(x) { return 'Jambage ' + x.cote + ' (' + (x.retrait_mm > 0 ? '\u00E0 ' + x.retrait_mm + ' mm ' + duLieu(x) : where(x)) + ')'; }   /* le d\u00E9but du libell\u00E9 des Options (calculateLegsSupplements) */\n  function echellePlan() {                                           /* unit\u00E9s du dessin par mm ; null si on ne peut pas la lire */\n    var svg = document.getElementById('svg'), gs = svg ? svg.querySelectorAll('.cp-trace g[data-piece]') : [], u0 = Infinity, u1 = -Infinity;\n    Array.prototype.forEach.call(gs, function (g) { try { var b = g.getBBox(); if (b.width > 0) { u0 = Math.min(u0, b.x); u1 = Math.max(u1, b.x + b.width); } } catch (e) {} });\n    var plan = typeof window.CP_plan === 'function' ? window.CP_plan() : null, m0 = Infinity, m1 = -Infinity;\n    ((plan && plan.pieces) || []).forEach(function (p) { (p.contour || []).forEach(function (q) { m0 = Math.min(m0, num(q[0])); m1 = Math.max(m1, num(q[0])); }); });\n    return u1 > u0 && m1 > m0 ? (u1 - u0) / (m1 - m0) : null;\n  }\n  function bandeJambages(c) {\n    var A = getApp(), legs = A && A.S ? legsOf(A) : []; if (!c || !legs.length) return c;\n    var vb = String(c.getAttribute('viewBox') || '').trim().split(/[\\s,]+/).map(Number); if (vb.length !== 4 || !(vb[2] > 0)) return c;\n    var el = function (n, a, t) { var e = document.createElementNS(SVGNS, n); for (var k in a) e.setAttribute(k, a[k]); if (t != null) e.textContent = t; return e; };\n    var PAD = 260, x0 = vb[0] + PAD, large = vb[2] - 2 * PAD, f0 = echellePlan(), f = f0 || 0.5, reduit = !f0;\n    /* une ligne par jambage : 110 de cote debout \u00E0 gauche, le jambage, 80, puis ses mentions (environ 900) */\n    var hMax = Math.max.apply(null, legs.map(function (x) { return num(x.hauteur_mm); })), pMax = Math.max.apply(null, legs.map(function (x) { return num(x.profondeur_mm); }));\n    if (110 + pMax * f + 80 + 900 > large) { var f2 = Math.max(0.05, (large - 1090) / pMax); if (f2 < f) { f = f2; reduit = true; } }\n    if (hMax * f > 2.5 * vb[3]) { f = 2.5 * vb[3] / hMax; reduit = true; }    /* un jambage jamais plus de 2,5 fois la hauteur du plan */\n    var g = el('g', { id: 'cp-export-jambages' }), y = vb[1] + vb[3] + 40;\n    g.appendChild(el('line', { x1: x0, y1: y, x2: x0 + large, y2: y, stroke: 'rgba(15,23,42,.25)', 'stroke-width': 4 }));\n    y += 90; g.appendChild(el('text', { x: x0, y: y, 'class': 'exp-dim-label' }, legs.length > 1 ? 'Jambages' : 'Jambage'));\n    if (reduit) { y += 52; g.appendChild(el('text', { x: x0, y: y, 'class': 'exp-sub-label', style: 'font-size:32px' }, '\u00C9chelle r\u00E9duite')); }\n    legs.forEach(function (x) {\n      var w = num(x.profondeur_mm) * f, h = num(x.hauteur_mm) * f, sc = x.article && x.article.sans_coupe && x.article.sans_coupe.retrait_cote_mur_mm > 0 ? x.article.sans_coupe.retrait_cote_mur_mm : 0;\n      y += 80; g.appendChild(el('text', { x: x0, y: y, 'class': 'exp-sub-label' }, nomJambage(x)));\n      var ry = y + 50, rx = x0 + 110;\n      g.appendChild(el('rect', { x: rx, y: ry, width: w, height: h, fill: '#e5e7eb', stroke: '#374151', 'stroke-width': 4 }));\n      /* cote de hauteur, debout \u00E0 gauche ; cote de profondeur, dessous */\n      g.appendChild(el('line', { x1: rx - 50, y1: ry, x2: rx - 50, y2: ry + h, 'class': 'exp-dim-tick', 'marker-start': 'url(#exp-arrow-start)', 'marker-end': 'url(#exp-arrow-end)' }));\n      g.appendChild(el('text', { x: rx - 70, y: ry + h / 2, 'class': 'exp-sub-label', 'text-anchor': 'middle', transform: 'rotate(-90 ' + (rx - 70) + ' ' + (ry + h / 2) + ')' }, String(Math.round(num(x.hauteur_mm)))));\n      g.appendChild(el('line', { x1: rx, y1: ry + h + 50, x2: rx + w, y2: ry + h + 50, 'class': 'exp-dim-tick', 'marker-start': 'url(#exp-arrow-start)', 'marker-end': 'url(#exp-arrow-end)' }));\n      g.appendChild(el('text', { x: rx + w / 2, y: ry + h + 105, 'class': 'exp-sub-label', 'text-anchor': 'middle' }, String(Math.round(num(x.profondeur_mm)))));\n      var tx = rx + w + 80, ty = ry + Math.min(h / 2, 60);\n      g.appendChild(el('text', { x: tx, y: ty, 'class': 'exp-sub-label' }, '\u00C9paisseur : ' + fmtMm(x.epaisseur_mm) + ' mm'));\n      if (sc) g.appendChild(el('text', { x: tx, y: ty + 56, 'class': 'exp-sub-label' }, 'En retrait de ' + fmtMm(sc) + ' mm c\u00F4t\u00E9 mur'));\n      y = ry + h + 105;\n    });\n    c.appendChild(g);\n    c.setAttribute('viewBox', [vb[0], vb[1], vb[2], y + 60 - vb[1]].join(' '));\n    return c;\n  }\n\n  function wrap(A) {\n    if (A.__cpLegsWrapped) return;\n    A.__cpLegsWrapped = true;\n    try {                                                                /* R146 : la bande des jambages sur l'image du panier */\n      if (typeof EXPORT !== 'undefined' && EXPORT && typeof EXPORT.getExportSvgClone === 'function' && !EXPORT.__cpLegs) {\n        var oExp = EXPORT.getExportSvgClone; EXPORT.__cpLegs = true;\n        EXPORT.getExportSvgClone = function () { var c = oExp.apply(this, arguments); try { return bandeJambages(c); } catch (e) { console.warn('[cp-jambages] R146', e); return c; } };\n      }\n    } catch (e) {}\n\n    /*  champ de retrait dans la fen\u00EAtre ; aper\u00E7u d\u00E9cal\u00E9 du retrait*/\n    var oPop = A.updateLegsPopupUI;\n    if (typeof oPop === 'function') A.updateLegsPopupUI = function () {\n      var r = oPop.apply(this, arguments);\n      try { retraitUI(this); } catch (e) { console.warn('[cp-jambages]', e); }\n      return r;\n    };\n    ['Linear', 'Angle', 'U', 'G'].forEach(function (k) {\n      var o = A['renderLegsPreview' + k]; if (typeof o !== 'function') return;\n      A['renderLegsPreview' + k] = function () {\n        this.__cpLegQ = previewQueue(this, k);\n        try { return o.apply(this, arguments); } finally { this.__cpLegQ = null; }\n      };\n    });\n    /*  apr\u00E8s le croquis du moteur (gard\u00E9 en repli), l'aper\u00E7u 3D ; fermeture de la fen\u00EAtre : toile lib\u00E9r\u00E9e ;\n       Three.js pr\u00E9charg\u00E9 d\u00E8s que la souris, le doigt ou le clavier arrive sur le bouton des jambages*/\n    var oPrev = A.renderLegsPreview;\n    if (typeof oPrev === 'function') A.renderLegsPreview = function () {\n      var r = oPrev.apply(this, arguments);\n      try { legs3d(this); } catch (e) { console.warn('[cp-jambages]', e); }\n      return r;\n    };\n    var pop = document.getElementById('legs-popup'), lp = pop && pop.querySelector('.legs-preview');\n    if (lp) { previewCss(); lp.classList.add('cp-l3d-wrap'); }             /* mise en page pos\u00E9e avant le 1er trac\u00E9 du croquis */\n    if (pop && window.MutationObserver) new MutationObserver(function () {\n      if (pop.classList.contains('hidden') && window.CP_3d && window.CP_3d.legsPreviewStop) window.CP_3d.legsPreviewStop();\n    }).observe(pop, { attributes: true, attributeFilter: ['class'] });\n    var bl = document.getElementById('btn-add-legs');\n    if (bl) ['pointerenter', 'focus', 'touchstart'].forEach(function (ev) {\n      bl.addEventListener(ev, function () { if (window.CP_3d && window.CP_3d.preload) window.CP_3d.preload(); }, { passive: true, once: true });\n    });\n    var oLeg = A._drawLeg3D;\n    if (typeof oLeg === 'function') A._drawLeg3D = function (isoX, isoY, x, y) {\n      var q = this.__cpLegQ && this.__cpLegQ.shift(), args = [].slice.call(arguments);\n      if (q) { args[2] = x + (q.dx || 0); args[3] = y + (q.dy || 0); }\n      return oLeg.apply(this, args);\n    };\n\n    var oState = A.updateLegsButtonState;\n    A.updateLegsButtonState = function () {\n      var r = typeof oState === 'function' ? oState.apply(this, arguments) : undefined;\n      legsButton(this);\n      return r;\n    };\n\n    /*  les boutons de la fen\u00EAtre portent les m\u00EAmes noms que les lignes de commande*/\n    var oLab = A.updateLegsButtonLabels;\n    if (typeof oLab === 'function') A.updateLegsButtonLabels = function () {\n      var r = oLab.apply(this, arguments), B = this;\n      legsOf(B, true).forEach(function (x) {\n        var b = document.getElementById(x.cote === 'gauche' ? 'leg-toggle-left' : 'leg-toggle-right');\n        if (b) { var t = 'Jambage ' + x.cote + ' (' + where(x) + ')'; b.title = t; b.setAttribute('aria-label', t); }\n      });\n      return r;\n    };\n\n    /* A-384 (AUDIT, MINEUR) : l'encadr\u00E9 \u00AB Dimensions \u00BB de la fen\u00EAtre (moteur, updateLegsSummary) donnait la profondeur du plan (630).\n       Jambage \u00AB sans coupe \u00BB : la profondeur fabriqu\u00E9e et le retrait c\u00F4t\u00E9 mur, comme la ligne (\u00AB 600 \u00D7 720 \u00D7 40 mm (P \u00D7 H \u00D7 \u00E9p.), en\n       retrait de 30 mm c\u00F4t\u00E9 mur \u00BB en droit ; \u00AB gauche (600 mm, en retrait de 30 mm c\u00F4t\u00E9 mur) \u00BB en L, U, G) */\n    var oSum = A.updateLegsSummary;\n    if (typeof oSum === 'function') A.updateLegsSummary = function () {\n      var r = oSum.apply(this, arguments);\n      try {\n        var T = this._legsTemp || {}, box = document.getElementById('legs-summary'), B = this;\n        if (!box || !(T.left || T.right)) return r;\n        var h = num(T.height) || 720, t = num(T.thickness) || num(this.S.thk) || 30;\n        var info = legsOf(this, true).filter(function (x) { return T[x.cote === 'gauche' ? 'left' : 'right']; }).map(function (x) {\n          var P = x.profondeur_plan_mm || x.profondeur_mm, a = legArticle(B, t, P, h), s = a && a.sans_coupe && a.sans_coupe.retrait_cote_mur_mm > 0 ? a.sans_coupe : null;\n          return { c: x.cote, P: P, s: s, tr: a && !a.hors_tarif && a.tranche_mm ? a.tranche_mm : 0 };\n        });\n        /* R206 (COMMERCIAL, ux-r207 \u00A7 3) : sous \u00AB Dimensions \u00BB, une note grise quand le prix est celui d'une autre tranche que la\n           profondeur du plan ; une phrase si les jambages ont le m\u00EAme cas, sinon une par jambage, pr\u00E9c\u00E9d\u00E9e de son c\u00F4t\u00E9 */\n        var trs = info.filter(function (o) { return o.tr; });\n        if (trs.length) {\n          var phT = function (o) { return 'au prix d\\'un jambage de ' + fmtMm(o.tr) + ' mm de profondeur, la taille juste au-dessus de votre plan de ' + fmtMm(o.P) + ' mm.'; };   /* R206-b (UX ; COMMERCIAL Tour 248) */\n          var memeT = trs.length === info.length && trs.every(function (o) { return o.tr === trs[0].tr && o.P === trs[0].P; });\n          var nT = document.createElement('p'); nT.className = 'cp-leg-tr'; nT.style.cssText = 'margin:.25rem 0 0;font-size:12px;color:#4b5563';\n          nT.textContent = memeT ? 'A' + phT(trs[0]).slice(1) : trs.map(function (o) { return 'Jambage ' + o.c + ' : ' + phT(o); }).join(' ');\n          var pD = [].filter.call(box.querySelectorAll('p'), function (p) { return /^Dimensions\\s*:/.test(p.textContent.trim()); })[0] || box.querySelector('p strong') && box.querySelector('p strong').parentNode;\n          if (pD) pD.parentNode.insertBefore(nT, pD.nextSibling); else box.appendChild(nT);\n        }\n        if (!info.some(function (o) { return o.s; })) return r;\n        var ps = box.querySelectorAll('p'), lin = (this.S.layout || 'linear') === 'linear';\n        if (lin) {\n          var o = info[0], d = [].filter.call(ps, function (p) { return /^Dimensions\\s*:/.test(p.textContent.trim()); })[0];\n          if (d && o.s) d.textContent = 'Dimensions : ' + fmtMm(o.s.profondeur_jambage_mm) + ' \u00D7 ' + h + ' \u00D7 ' + t + ' mm (P \u00D7 H \u00D7 \u00E9p.), en retrait de ' + fmtMm(o.s.retrait_cote_mur_mm) + ' mm c\u00F4t\u00E9 mur';\n        } else {\n          var st = box.querySelector('p strong');\n          if (st) st.textContent = 'Jambage' + (info.length > 1 ? 's ' : ' ') + info.map(function (o) {\n            return o.c + ' (' + (o.s ? fmtMm(o.s.profondeur_jambage_mm) + ' mm, en retrait de ' + fmtMm(o.s.retrait_cote_mur_mm) + ' mm c\u00F4t\u00E9 mur' : fmtMm(o.P) + ' mm') + ')';\n          }).join(' + ');\n        }\n      } catch (e) { console.warn('[cp-jambages]', e); }\n      return r;\n    };\n\n    /* 2. : fen\u00EAtre : \u00E9paisseurs du d\u00E9cor ; par d\u00E9faut celle du plan, tant que le client n'en choisit pas une autre\n       (_legsTemp.thkLibre, pos\u00E9 au choix ci-dessous)*/\n    document.addEventListener('change', function (e) {\n      var i = e.target && e.target.closest && e.target.closest('#leg-thk-container input[name=\"leg-thk\"]'), B = getApp();\n      if (i && B && B._legsTemp) B._legsTemp.thkLibre = num(i.value) !== num(B.S.thk);\n    }, true);\n    var oThk = A.renderLegsThicknessUI;\n    if (typeof oThk === 'function') A.renderLegsThicknessUI = function () {\n      var r = oThk.apply(this, arguments), t = num(this.S.thk), ok = legThkAllowed(this);\n      if (t && this._legsTemp) {\n        var cur = num(this._legsTemp.thickness);\n        if (!this._legsTemp.thkLibre || ok.indexOf(cur) < 0) cur = ok.indexOf(t) >= 0 ? t : ok[0];\n        this._legsTemp.thickness = cur;\n        var host = document.getElementById('leg-thk-container'), dec = typeof window.CP_currentDecor === 'function' ? window.CP_currentDecor() : null, anyNa = false;\n        Array.prototype.forEach.call(document.querySelectorAll('#leg-thk-container input[name=\"leg-thk\"]'), function (i) {\n          var mm = num(i.value), na = ok.indexOf(mm) < 0; if (na) anyNa = true;\n          i.checked = mm === cur; i.disabled = na;\n          var lab = i.id && host && host.querySelector('label[for=\"' + i.id + '\"]');   /*  les autres \u00E9paisseurs se voient indisponibles*/\n          var why = na ? mm + ' mm, indisponible' + (dec ? ' pour ' + dec.name : '') : '';\n          if (na) { i.setAttribute('aria-disabled', 'true'); i.setAttribute('aria-label', why); } else { i.removeAttribute('aria-disabled'); i.removeAttribute('aria-label'); }\n          i.removeAttribute('title');\n          if (lab) { lab.style.opacity = na ? '0.6' : ''; lab.style.cursor = na ? 'not-allowed' : ''; lab.title = na ? why : ''; }\n        });\n        var n = host && host.querySelector('.cp-leg-thk-note');\n        if (host && !n) {\n          n = document.createElement('p'); n.className = 'cp-leg-thk-note';\n          n.style.cssText = 'flex-basis:100%;margin:.25rem 0 0;font-size:12px;color:#4b5563'; host.appendChild(n);\n        }\n        /* R36-4 (AUDIT, \u00A7 5 de COMMERCIAL) : une seule \u00E9paisseur a une ligne au tarif du jambage (HPL 40, Dekton 20) : \u00AB \u00C9paisseur : 40 mm,\n           la seule propos\u00E9e. \u00BB, sans la phrase du d\u00E9cor ni \u00AB Par d\u00E9faut\u2026 \u00BB ; avec 2 \u00E9paisseurs ou plus, la note d'avant */\n        var T1 = tarifs(this), lgT = Object.keys(T1.tarif), seule = lgT.length === 1 ? lgT[0] : T1.epPlan && ok.length === 1 ? ok[0] : 0;   /* R36-5 : \u00E0 l'\u00E9paisseur du plan, m\u00EAme phrase */\n        /* R183 (COMMERCIAL Tour 193 ; AUDIT Tour 1150, Q3) : jambage plus \u00E9pais que le plan (HPL : 40 sous 12 ou 20) */\n        var labP = typeof window.CP_epLabel === 'function' ? window.CP_epLabel(t) : t + ' mm';\n        if (n) n.textContent = seule && num(seule) > t && (T1.sousPlan[num(seule)] || []).indexOf(t) >= 0 ? '\u00C9paisseur du jambage : ' + seule + ' mm, plus \u00E9pais que votre plan de ' + labP + '.'\n          : seule ? '\u00C9paisseur : ' + seule + ' mm, la seule propos\u00E9e.'\n          : 'Par d\u00E9faut, celle du plan de travail (' + t + ' mm).' + (dec && anyNa && window.CP_thkText ? ' ' + window.CP_thkText(dec) : '');\n        /* R36-2 : phrase de la r\u00E8gle (rule_legs_note ; Neolith : \u00AB Face int\u00E9rieure finie sur 10 cm seulement. \u00BB) */\n        var nt = tarifs(this).note, nr = host && host.querySelector('.cp-leg-note');\n        if (host && nt && !nr) { nr = document.createElement('p'); nr.className = 'cp-leg-note'; nr.style.cssText = 'flex-basis:100%;margin:.25rem 0 0;font-size:12px;color:#4b5563'; host.appendChild(nr); }\n        if (nr) { nr.textContent = nt; nr.hidden = !nt; }\n        /* A-426 (AUDIT Tour 1170) : seulement les \u00E9paisseurs de jambage vendues (une ligne au tarif de la r\u00E8gle) ; une seule\n           (\u00AB la seule propos\u00E9e \u00BB, \u00AB plus \u00E9pais que votre plan \u00BB) : la note, sans choix. HPL : rien que la note du 40 ; stratifi\u00E9\n           (20, 40, 60, toutes au tarif) : inchang\u00E9 */\n        var vend = lgT.length ? lgT.map(Number) : null;\n        Array.prototype.forEach.call(document.querySelectorAll('#leg-thk-container input[name=\"leg-thk\"]'), function (i) {\n          var lb = i.id && host && host.querySelector('label[for=\"' + i.id + '\"]'), cache = !!seule || !!(vend && vend.indexOf(num(i.value)) < 0);\n          [i, lb].forEach(function (e) { if (!e) return; if (cache) { e.hidden = true; e.style.display = 'none'; } else if (e.hidden) { e.hidden = false; e.style.display = ''; } });\n          if (cache) i.tabIndex = -1; else if (i.getAttribute('tabindex') === '-1') i.removeAttribute('tabindex');\n        });\n        /* R36-4 (COMMERCIAL \u00A7 4 ; AUDIT, Q5) : jambage \u00AB sans coupe \u00BB moins profond que sa pi\u00E8ce : profondeur fabriqu\u00E9e, retrait c\u00F4t\u00E9 mur.\n           Une phrase si les deux bouts ont le m\u00EAme cas ; sinon une par jambage, pr\u00E9c\u00E9d\u00E9e de son c\u00F4t\u00E9 */\n        var scs = legsOf(this, true).map(function (x) { var s = x.article && x.article.sans_coupe; return s && s.retrait_cote_mur_mm > 0 ? { c: x.cote, s: s, P: x.profondeur_plan_mm } : null; });\n        var phr = function (o) { return 'fabriqu\u00E9 en ' + fmtMm(o.s.profondeur_jambage_mm) + ' mm de profondeur, la plus proche sous celle du plan (' + fmtMm(o.P) + ' mm) : il affleure l\\'avant, en retrait de ' + fmtMm(o.s.retrait_cote_mur_mm) + ' mm c\u00F4t\u00E9 mur.'; };\n        var meme = scs.every(function (o) { return o && scs[0] && o.P === scs[0].P && o.s.profondeur_jambage_mm === scs[0].s.profondeur_jambage_mm; });\n        var txs = meme && scs[0] ? ['Le jambage est ' + phr(scs[0])] : scs.filter(Boolean).map(function (o) { return 'Jambage ' + o.c + ' : ' + phr(o); });\n        var ns = host && host.querySelector('.cp-leg-sc');\n        if (host && txs.length && !ns) { ns = document.createElement('p'); ns.className = 'cp-leg-sc'; ns.style.cssText = 'flex-basis:100%;margin:.25rem 0 0;font-size:12px;color:#4b5563'; host.appendChild(ns); }\n        if (ns) { ns.textContent = txs.join(' '); ns.hidden = !txs.length; }\n        /*  la phrase du moteur \u00AB M\u00EAme choix que pour le plan de travail \u00BB (custom-configV2 l. 1169)\n           redisait la note ci-dessus : masqu\u00E9e*/\n        var grp = host && host.parentNode;\n        Array.prototype.forEach.call(grp ? grp.querySelectorAll(':scope > small') : [], function (s) {\n          if (/m\u00EAme choix que pour le plan/i.test(s.textContent)) { s.hidden = true; s.style.display = 'none'; }   /* display:block impos\u00E9 par configurator-custom l. 761 */\n        });\n      }\n      return r;\n    };\n\n    /* 2. le plan change d'\u00E9paisseur : les jambages suivent */\n    var oRender = A.render;\n    A.render = function () {\n      var S = this.S, L = S.legs, t = num(S.thk);\n      /*  produit sans jambages (r\u00E8gle de collection legsSupplementEnabled = false : cr\u00E9dence,\n         panneau plaqu\u00E9). Le moteur y mettait seulement le prix \u00E0 0 et laissait le bouton : jambages gratuits,\n         absents de la ligne de commande, mais inscrits au mod\u00E8le. Bouton masqu\u00E9 comme sur le m\u00E9lamin\u00E9,\n         fen\u00EAtre ferm\u00E9e, jambages retir\u00E9s.*/\n      /* R36 (Q2, HPL) : avec un tarif dans la r\u00E8gle, un plan dont l'\u00E9paisseur n'y a pas de ligne n'a pas de jambage ; le bouton\n         revient quand l'\u00E9paisseur du plan en a une */\n      var Tl = tarifs(this), sansLigne = Object.keys(Tl.tarif).length > 0 && t > 0 && !legPourPlan(Tl, t).length, blR = document.getElementById('btn-add-legs');   /* R183 : ou un jambage qui l'accepte */\n      if ((this._eff && this._eff.legsSupplementEnabled === false) || sansLigne) {\n        var bl = blR, pl = document.getElementById('legs-popup');\n        if (bl) { bl.style.display = 'none'; bl.setAttribute('aria-hidden', 'true'); bl.tabIndex = -1; if (sansLigne) bl.setAttribute('data-cp-sans-ligne', '1'); }\n        if (pl) pl.classList.add('hidden');\n        if (L && (L.left || L.right)) { L.left = false; L.right = false; }\n        if (this._legsTemp) { this._legsTemp.left = false; this._legsTemp.right = false; }\n      } else if (blR && blR.getAttribute('data-cp-sans-ligne')) {\n        blR.removeAttribute('data-cp-sans-ligne'); blR.style.display = ''; blR.removeAttribute('aria-hidden'); blR.removeAttribute('tabindex');\n      }\n      /* R36-4 (COMMERCIAL \u00A7 3, dernier cas) : bouton masqu\u00E9 faute de ligne pour l'\u00E9paisseur du plan (HPL 12 et 20) : la phrase se lit\n         \u00E0 sa place, sans pr\u00E9fixe de blocage ; \u00E9paisseurs = celles du tarif que le d\u00E9cor propose */\n      var nsl = document.getElementById('cp-leg-sans-ligne'), dk = sansLigne && typeof window.CP_currentDecor === 'function' ? window.CP_currentDecor() : null;\n      var eps = sansLigne ? Object.keys(Tl.tarif).map(Number).filter(function (x) { return !dk || dk.thk.indexOf(x) >= 0; }).sort(function (p, q) { return p - q; }) : [];\n      if (eps.length && blR) {\n        if (!nsl) { nsl = document.createElement('p'); nsl.id = 'cp-leg-sans-ligne'; nsl.style.cssText = 'margin:.25rem 0 0;font-size:12px;color:#4b5563'; blR.insertAdjacentElement('afterend', nsl); }\n        /* R180 (AUDIT Tour 1143, UX) : l'\u00E9paisseur du plan dite avec le libell\u00E9 de la liste (\u00AB plan de 18 cm d'\u00E9paisseur \u00BB) */\n        var labT = typeof window.CP_epLabel === 'function' ? window.CP_epLabel(t) : t + ' mm';\n        nsl.textContent = 'Jambage : pas propos\u00E9 pour un plan de ' + labT + ' d\\'\u00E9paisseur. Il l\\'est en ' + (eps.length > 1 ? eps.slice(0, -1).join(', ') + ' ou ' + eps[eps.length - 1] : eps[0]) + ' mm.';\n        nsl.hidden = false;\n      } else if (nsl) nsl.hidden = true;\n      /*  les jambages suivent le plan, sauf \u00E9paisseur choisie (thkLibre) et encore propos\u00E9e par le d\u00E9cor*/\n      if (L && t) {\n        var okL = legThkAllowed(this), lt = num(L.thickness);\n        if (!L.thkLibre || okL.indexOf(lt) < 0) {\n          var nt = okL.indexOf(t) >= 0 ? t : (okL[0] || t), had = lt > 0 && (L.left || L.right), was = !!L.thkLibre;\n          if (lt !== nt) {\n            L.thickness = nt; L.thkLibre = false;\n            if (had) setTimeout(function () { toast(was ? 'Jambages de ' + lt + ' mm indisponibles dans ce d\u00E9cor : \u00E9paisseur ramen\u00E9e \u00E0 ' + nt + ' mm, celle du plan.' : '\u00C9paisseur des jambages align\u00E9e sur celle du plan : ' + nt + ' mm.'); }, 0);\n          }\n        }\n      }\n      var r = oRender.apply(this, arguments);\n      try { legsButton(this); } catch (e) { console.warn('[cp-jambages]', e); }    \n      /*  un bout usin\u00E9 apr\u00E8s la pose (arrondi, demi-rond, chanfrein, encoche) recule d'office son\n         jambage au minimum ; retrait au-del\u00E0 du maximum ramen\u00E9. Un seul nouveau rendu, pour le r\u00E9capitulatif.*/\n      if (!this.__cpLegClamp && L && (L.left || L.right)) {\n        var lim = limits(this), msgs = [], B = this;\n        ['gauche', 'droit'].forEach(function (c) {\n          if (!L[c === 'gauche' ? 'left' : 'right'] || !lim[c]) return;\n          var m = lim[c], was = Math.round(num(L[RK[c]])), v = clampTo(was, m);\n          if (v === was) return;\n          L[RK[c]] = v;\n          msgs.push(v > was ? 'Jambage ' + c + ' recul\u00E9 \u00E0 ' + v + ' mm de l\\'extr\u00E9mit\u00E9 : ' + bout(m) + '.' : 'Jambage ' + c + ' ramen\u00E9 \u00E0 ' + v + ' mm de l\\'extr\u00E9mit\u00E9 (au plus ' + m.max + ' mm).');\n        });\n        if (msgs.length) {\n          this.__cpLegClamp = true;\n          try { oRender.apply(B, arguments); legsButton(B); } finally { this.__cpLegClamp = false; }\n          setTimeout(function () { msgs.forEach(toast); }, 0);\n        }\n      }\n      return r;\n    };\n\n    /* profondeur de prix : celle des jambages r\u00E9ellement pos\u00E9s (G \u00E0 gauche compris) */\n    var oDepth = A.getLegsDepthMm;\n    if (typeof oDepth === 'function') A.getLegsDepthMm = function () {\n      var p = legsOf(this);\n      return p.length ? Math.max.apply(null, p.map(function (x) { return x.profondeur_mm; })) : oDepth.apply(this, arguments);\n    };\n\n    /* 3. une ligne par jambage, m\u00EAme total */\n    var oSup = A.calculateLegsSupplements;\n    if (typeof oSup === 'function') A.calculateLegsSupplements = function () {\n      var res = oSup.apply(this, arguments), p = legsOf(this);\n      if (!res || !p.length || (this._eff && this._eff.legsSupplementEnabled === false)) return res;\n      if (p[0].article) {                                                /*  au tarif de la r\u00E8gle, jambage par jambage*/\n        var sum = 0, items = [];\n        p.forEach(function (x) {\n          var a = x.article, c = a.hors_tarif ? 0 : a.prix_centimes; sum += c;\n          var at = x.retrait_mm > 0 ? '\u00E0 ' + x.retrait_mm + ' mm ' + duLieu(x) : where(x), dims = fmtMm(x.profondeur_mm) + ' \u00D7 ' + fmtMm(x.hauteur_mm) + ' \u00D7 ' + fmtMm(x.epaisseur_mm) + ' mm';   /* T5 */\n          /* lot de prix du stratifi\u00E9, textes de COMMERCIAL : plafond (C4), la ligne du jambage le dit ; sinon la mise \u00E0 la\n             profondeur (R4) sur sa propre ligne */\n          if (a.plafond) { items.push({ label: 'Jambage ' + x.cote + ' (' + at + '), ' + dims + ', au prix d\\'un jambage de ' + String(a.plafond.profondeur_mm).replace(/\\B(?=(\\d{3})+(?!\\d))/g, '\u00A0') + ' mm de profondeur, moins cher ici que la mise \u00E0 la profondeur', cents: c }); return; }\n          /* R36-2 : au m\u00B2, le calcul de la ligne (\u00AB : 0,432 m\u00B2 \u00D7 1 199 \u20AC/m\u00B2 = +517,97 \u20AC \u00BB, COMMERCIAL \u00A7 2) ; cp-modele (rewriteOptions)\n             remplace les marqueurs \u00AB \u00A7m2\u00A7surface\u00A7prix \u00BB */\n          var m2 = a.unite === 'm2' && !a.hors_tarif && !(a.quincaillerie_centimes > 0) ? '\u00A7m2\u00A7' + a.quantite + '\u00A7' + a.prix_unitaire_centimes / 100 : '';\n          /* R36-4 (COMMERCIAL \u00A7 2) : au ml, \u00AB : 0,72 ml \u00D7 789 \u20AC/ml + plaque de fixation 99 \u20AC = +667,08 \u20AC \u00BB (marqueurs \u00AB \u00A7ml\u00A7longueur\u00A7prix\n             \u00A7plaque\u00A7minimum \u00BB, \u00E9crits par cp-modele) ; HPL \u00AB sans coupe \u00BB : \u00AB \u2026, en retrait de 30 mm c\u00F4t\u00E9 mur \u00BB (Q5) */\n          var ml = (a.unite === 'ml_haut' || a.unite === 'ml_long') && !a.hors_tarif ? '\u00A7ml\u00A7' + a.quantite + '\u00A7' + a.prix_unitaire_centimes / 100 + '\u00A7' + (a.quincaillerie_centimes || 0) / 100 + '\u00A7' + (a.minimum ? 1 : 0) : '';\n          var sc = a.sans_coupe && a.sans_coupe.retrait_cote_mur_mm > 0 ? ', en retrait de ' + fmtMm(a.sans_coupe.retrait_cote_mur_mm) + ' mm c\u00F4t\u00E9 mur' : '';\n          var tr = a.tranche_mm && !a.hors_tarif ? ', au prix d\\'un jambage de ' + fmtMm(a.tranche_mm) + ' mm de profondeur' : '';   /* R206 */\n          items.push({ label: 'Jambage ' + x.cote + ' (' + at + '), ' + dims + sc + tr + m2 + ml, cents: c - (a.reduction_centimes || 0) });   /* lot \u00AB messages 2 \u00BB, N16 */\n          if (a.reduction_centimes > 0) items.push({ label: 'Mise \u00E0 la profondeur (jambage ' + x.cote + ', ' + fmtMm(x.profondeur_mm) + ' mm)', cents: a.reduction_centimes });\n        });\n        res.items = items; res.total = sum;\n        return res;\n      }\n      if (!(res.total > 0)) return res;\n      var each = Math.round(res.total / p.length), left = res.total;\n      res.items = p.map(function (x, i) {\n        var c = i === p.length - 1 ? left : each; left -= c;\n        var at = x.retrait_mm > 0 ? '\u00E0 ' + x.retrait_mm + ' mm ' + duLieu(x) : where(x);   /*  retrait dit, prix inchang\u00E9*/\n        return { label: 'Jambage ' + x.cote + ' (' + at + '), ' + fmtMm(x.profondeur_mm) + ' \u00D7 ' + fmtMm(x.hauteur_mm) + ' \u00D7 ' + fmtMm(x.epaisseur_mm) + ' mm', cents: c };   /* N16, T5 */\n      });\n      return res;\n    };\n    try { A.render(); } catch (e) { console.warn('[cp-jambages]', e); }\n  }\n\n  var tries = 0;\n  var timer = setInterval(function () {\n    var A = getApp();\n    if (A && A.S && A.svg && typeof A.calculateLegsSupplements === 'function' && typeof A.renderLegsThicknessUI === 'function') { clearInterval(timer); wrap(A); }\n    else if (++tries > 400) clearInterval(timer);\n  }, 50);\n})();\n"],
  "mappings": "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",
  "names": ["r", "o", "bl", "was"]
}
