{
  "version": 3,
  "sources": ["/cdn/shop/t/9/assets/cp-trace.js?cb=140726621"],
  "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\n   CR\u00C9APANEL \u2014 assets/cp-trace.js (charg\u00E9 par snippets/cp-decor-data.liquid)\n   TRAC\u00C9 PAR POINTS \u2014 droit, L, U et G\n   Plan : docs/plan-hors-equerre-par-points.md (\u00A7 7 : toutes les formes).\n   Le dessin principal est le trac\u00E9 par points, \u00E0 TOUS les angles (6a) : les\n   rectangles textur\u00E9s du moteur sont remplac\u00E9s par les contours calcul\u00E9s par\n   window.CP_geomLinear / CP_geomAngle / CP_geomU / CP_geomG (cp-modele.js, la m\u00EAme g\u00E9om\u00E9trie que\n   _cfg_model : le dessin EST le mod\u00E8le command\u00E9), avec une seule primitive\n   (drawPieces). \u00C0 90\u00B0, les contours sont ceux du moteur.\n   D\u00E9cor : motif en millim\u00E8tres (cp-texture.js), fil le long de la plus\n     longue ar\u00EAte de chaque pi\u00E8ce ; sans donn\u00E9e d'\u00E9chelle, l'image du d\u00E9cor\n     est pos\u00E9e dans le rep\u00E8re de la pi\u00E8ce (jamais \u00E9tir\u00E9e) ; uni : aplat.\n   Ligne de jonction et \u00E9tiquette d'angle : pos\u00E9es sur le trac\u00E9 r\u00E9el.\n   L'image jointe \u00E0 la commande clone ce dessin (configurator-export).\n   Hors d'\u00E9querre seulement, cases, chants, coins et cotes sont port\u00E9s sur le\n   trac\u00E9 r\u00E9el (\u00E0 90\u00B0 ils sont d\u00E9j\u00E0 \u00E0 leur place). Le moteur n'est pas modifi\u00E9 :\n   on enveloppe App.renderLinear et App.renderAngle, avant le placement des\n   cotes (updateDims).\n   5a : jonctions \u00AB retour filant \u00BB et \u00AB plan filant \u00BB, L \u00E0 droite et \u00E0 gauche.\n   5c : pendant renderAngle, cases et traits de chants, zones de clic des coins\n   et cotes sont port\u00E9s sur le trac\u00E9 r\u00E9el (chaque rectangle du moteur -> son\n   quadrilat\u00E8re r\u00E9el) ; coins usin\u00E9s gard\u00E9s (retour tourn\u00E9 avec lui) ; cotes\n   calcul\u00E9es = vraies longueurs. Champ \u00AB Angle entre les murs \u00BB et\n   message quand la valeur est ramen\u00E9e \u00E0 85\u201395\u00B0.\n   Pas encore trait\u00E9s : coupe \u00E0 45\u00B0 (5b) ; \u00E9vier et jambages pos\u00E9s sur le retour.\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*/\n(function () {\n  'use strict';\n\n  var NS = 'http://www.w3.org/2000/svg', XL = 'http://www.w3.org/1999/xlink';\n  var OVERLAY_R = 156;            /* rayon de l'\u00E9tiquette d'angle du moteur : 260 \u00D7 0,6 */\n\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 el(n, a) { var e = document.createElementNS(NS, n); for (var k in a) e.setAttribute(k, a[k]); return e; }\n  function ptsAttr(p) { return p.map(function (q) { return q[0].toFixed(2) + ',' + q[1].toFixed(2); }).join(' '); }\n  function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n\n  /* plus longue ar\u00EAte : direction en degr\u00E9s (0\u2013180, un fil n'a pas de sens) et point de d\u00E9part */\n  function longest(p) {\n    var best = { l: -1, deg: 0, at: p[0] };\n    p.forEach(function (a, i) {\n      var b = p[(i + 1) % p.length], l = Math.hypot(b[0] - a[0], b[1] - a[1]);\n      if (l > best.l + 1e-6) best = { l: l, deg: Math.atan2(b[1] - a[1], b[0] - a[0]) * 180 / Math.PI, at: a };\n    });\n    best.deg = ((best.deg % 180) + 180) % 180;\n    return best;\n  }\n\n  function junctionOf(S) { return S.cpJ45 ? 'onglet' : (S.junctionType === 'overlap' ? 'barre' : 'retour'); }\n\n  /* Angle int\u00E9rieur de la pi\u00E8ce en L (point o\u00F9 le bord avant de la barre\n     rencontre le bord int\u00E9rieur du retour), en coordonn\u00E9es du mod\u00E8le. */\n  function innerCorner(s) {\n    var d = (s.ang - 90) * Math.PI / 180, dir = [Math.sin(d), Math.cos(d)], nrm = [-Math.cos(d), Math.sin(d)];\n    var t = (s.P1 - s.P2 * nrm[1]) / dir[1];\n    var p = [s.L1 + t * dir[0] + s.P2 * nrm[0], s.P1];\n    return s.dir === 'left' ? [s.L1 - p[0], p[1]] : p;\n  }\n\n  /* \u2500\u2500 G\u00E9om\u00E9trie r\u00E9elle, dans le rep\u00E8re \u00AB L \u00E0 droite \u00BB du mod\u00E8le (L \u00E0 gauche = miroir) \u2500\u2500\n     M\u00EAmes formules que CP_geomAngle (cp-modele.js). Lw = P1 + L2 = longueur du mur du retour. */\n  function realGeom(s) {\n    var d = (s.ang - 90) * Math.PI / 180, dir = [Math.sin(d), Math.cos(d)], nrm = [-Math.cos(d), Math.sin(d)];\n    var C = [s.L1, 0], Lw = s.P1 + s.L2, xj = s.L1 - s.P2;\n    var on = function (t, v) { return [C[0] + t * dir[0] + v * nrm[0], C[1] + t * dir[1] + v * nrm[1]]; };\n    var tAt = function (y, v) { return (y - v * nrm[1]) / dir[1]; };\n    var g = { C: C, Lw: Lw, I0: on(tAt(0, s.P2), s.P2), I1: on(tAt(s.P1, s.P2), s.P2), I2: on(Lw, s.P2),\n      O1: on(tAt(s.P1, 0), 0), O2: on(Lw, 0), Cu1: on(tAt(s.P1, s.P2), 0) };\n    /* chaque rectangle du moteur -> le quadrilat\u00E8re r\u00E9el (coins HG, HD, BD, BG) */\n    g.quads = (s.jn === 'barre') ? [\n      { r: [0, 0, xj, s.P1], q: [[0, 0], [xj, 0], g.I1, [0, s.P1]] },\n      { r: [xj, 0, s.L1, s.P1], q: [[xj, 0], C, g.O1, g.I1] },\n      { r: [xj, s.P1, s.L1, Lw], q: [g.I1, g.O1, g.O2, g.I2] }\n    ] : [\n      { r: [0, 0, xj, s.P1], q: [[0, 0], g.I0, g.I1, [0, s.P1]] },\n      { r: [xj, 0, s.L1, s.P1], q: [g.I0, C, g.Cu1, g.I1] },\n      { r: [xj, s.P1, s.L1, Lw], q: [g.I1, g.Cu1, g.O2, g.I2] }\n    ];\n    return g;\n  }\n  function toR(s, pad, X, Y) { var x = X - pad; return [s.dir === 'left' ? s.L1 - x : x, Y - pad]; }\n  function fromR(s, pad, p) { return [(s.dir === 'left' ? s.L1 - p[0] : p[0]) + pad, p[1] + pad]; }\n  /* point du dessin du moteur -> point du trac\u00E9 r\u00E9el (interpolation dans le quadrilat\u00E8re de sa zone) */\n  function warp(s, g, pad, X, Y) {\n    var p = toR(s, pad, X, Y), x = p[0], y = p[1], xj = s.L1 - s.P2;\n    var i = (s.jn === 'barre') ? (y <= s.P1 ? (x <= xj ? 0 : 1) : 2) : (x >= xj ? (y <= s.P1 ? 1 : 2) : 0);\n    var r = g.quads[i].r, q = g.quads[i].q, u = (x - r[0]) / (r[2] - r[0]), v = (y - r[1]) / (r[3] - r[1]);\n    var w = [(1 - u) * (1 - v), u * (1 - v), u * v, (1 - u) * v];\n    return fromR(s, pad, [w[0] * q[0][0] + w[1] * q[1][0] + w[2] * q[2][0] + w[3] * q[3][0],\n                          w[0] * q[0][1] + w[1] * q[1][1] + w[2] * q[2][1] + w[3] * q[3][1]]);\n  }\n  /* rotation qui am\u00E8ne le retour du moteur sur le retour r\u00E9el (autour du coin des murs) */\n  function retourRotation(s, pad) {\n    var a = s.ang - 90, c = s.dir === 'left' ? [pad, pad] : [pad + s.L1, pad];\n    return 'rotate(' + (s.dir === 'left' ? a : -a) + ' ' + c[0] + ' ' + c[1] + ')';\n  }\n  function params(S) {\n    return { L1: num(S.L1), P1: num(S.P1), L2: num(S.L2), P2: num(S.P2), ang: num(S.innerAngle || 90),\n      jn: junctionOf(S), dir: S.angleDir === 'left' ? 'left' : 'right' };\n  }\n  function active(S) {\n    return S.layout === 'angle' && num(S.innerAngle || 90) !== 90 && typeof window.CP_geomAngle === 'function';\n  }\n\n  /* Cotes du moteur (addDim) : les cotes de saisie gardent leur valeur ; les cotes calcul\u00E9es\n     prennent les vraies longueurs ; celles qui longent le mur du retour s'\u00E9cartent de son d\u00E9bord. */\n  function adjustSubs(subs, delta, total) {\n    if (!subs || !subs.length) return [{ value: Math.round(total), position: 1 }];\n    var k = 0; subs.forEach(function (x, i) { if (num(x.value) > num(subs[k].value)) k = i; });\n    return subs.map(function (x, i) { return { value: Math.round(num(x.value) + (i === k ? delta : 0)), position: x.position }; });\n  }\n  function rewriteDim(s, g, pad, args) {\n    var o = args[4] || {}, a = toR(s, pad, args[0], args[1]), b = toR(s, pad, args[2], args[3]);\n    var H = s.P1 + s.L2, near = function (v, t) { return Math.abs(v - t) <= 1; };\n    var ex = Math.max(0, g.O2[0] - s.L1);                                   /* d\u00E9bord ext\u00E9rieur du retour (> 90\u00B0) */\n    var set = function (p, q) {\n      var P = fromR(s, pad, p), Q = fromR(s, pad, q);\n      if (o.vertical ? P[1] > Q[1] : P[0] > Q[0]) { var t = P; P = Q; Q = t; }\n      args[0] = P[0]; args[1] = P[1]; args[2] = Q[0]; args[3] = Q[1];\n    };\n    if (!o.vertical) {\n      if (o.calculated && near(a[1], s.P1 + 30)) {                          /* bord avant de la barre */\n        set([0, a[1]], [g.I1[0], a[1]]);\n        o.subdivisions = adjustSubs(o.subdivisions, g.I1[0] - (s.L1 - s.P2), g.I1[0]);\n      } else if (o.calculated && near(a[1], H + 100)) {\n        return null;                                                         /* largeur hors-tout du bas : sans objet */\n      } else if (o.isDepth && near(a[1], H + 70)) {                          /* P2 : sous l'extr\u00E9mit\u00E9 r\u00E9elle du retour */\n        var yb = Math.max(g.I2[1], g.O2[1]) + 70;\n        set([Math.min(g.I2[0], g.O2[0]), yb], [Math.max(g.I2[0], g.O2[0]), yb]);\n      }\n      return args;\n    }\n    if (o.calculated && near(a[0], s.L1 - s.P2 - 30)) {                     /* bord int\u00E9rieur libre du retour */\n      var inner = Math.hypot(g.I2[0] - g.I1[0], g.I2[1] - g.I1[1]), xi = Math.min(g.I1[0], g.I2[0]) - 30;\n      set([xi, g.I1[1]], [xi, g.I2[1]]);\n      o.subdivisions = adjustSubs(o.subdivisions, inner - s.L2, inner);\n    } else if (a[0] > s.L1 && Math.max(a[1], b[1]) > s.P1 + 1 && ex > 0) { /* le long du mur du retour */\n      set([a[0] + ex, a[1]], [b[0] + ex, b[1]]);\n    }\n    return args;\n  }\n\n  /*  hors d'\u00E9querre, le moteur fait suivre au chant le tour d'un usinage (encoche, chanfrein,\n     arrondi) ; l'interpolation des zones \u00E9tirait ces traits avec la pi\u00E8ce (encoche de 800 mm trac\u00E9e \u00E0\n     763 mm \u00E0 85\u00B0), alors que la d\u00E9coupe du d\u00E9cor (cornerCutPath) garde les cotes depuis le sommet r\u00E9el, le\n     long des deux murs. Apr\u00E8s le rendu, chaque bout de trait situ\u00E9 dans la zone d'un usinage (rectangle du\n     moteur au coin, dx \u00D7 dy) est report\u00E9 comme la d\u00E9coupe : sommet r\u00E9el + dx le long du mur \u00AB horizontal \u00BB\n     + dy le long de l'autre. lines : { el, a, b } en coordonn\u00E9es du moteur ; hits : { key, rect, corner } ;\n     polys : pi\u00E8ces r\u00E9elles (rep\u00E8re du dessin) ; mapV : sommet du moteur -> point du trac\u00E9 r\u00E9el.*/\n  /* Signal\u00E9 par . Le moteur\n     dessine le chant d'un coin arrondi (ou chanfrein\u00E9) par drawCornerBanding : un quart de cercle au coin de SON\n     rectangle, \u00E0 90\u00B0. Hors d'\u00E9querre, l'arrondi r\u00E9el (celui que cornerCutPath d\u00E9coupe dans le d\u00E9cor) est tangent\n     aux deux murs, \u00E0 r / tan(\u03B8/2) du sommet : le trait bleu s'arr\u00EAtait \u00E0 c\u00F4t\u00E9 du contour (marche au bas de l'arc,\n     L \u00E0 95\u00B0). bands : { key, els } relev\u00E9s pendant le rendu ; chaque trac\u00E9 est refait au sommet r\u00E9el, et les\n     traits droits du chant s'arr\u00EAtent aux m\u00EAmes points de tangence.*/\n  function bandsAfter(svg, last, key) {                                     /* trac\u00E9s ajout\u00E9s par drawCornerBanding */\n    var els = []; for (var n = last ? last.nextSibling : svg.firstChild; n; n = n.nextSibling) if (n.setAttribute) els.push(n);\n    return { key: key, els: els };\n  }\n  function machinedMarks(S, lines, hits, polys, mapV, bands) {\n    var near = function (a, b) { return Math.hypot(a[0] - b[0], a[1] - b[1]) < 1; }, boxes = [];\n    var onPoly = function (p, q) { return p.some(function (a, i) { var b = p[(i + 1) % p.length]; return Math.abs(Math.hypot(q[0] - a[0], q[1] - a[1]) + Math.hypot(b[0] - q[0], b[1] - q[1]) - Math.hypot(b[0] - a[0], b[1] - a[1])) < 0.01; }); };\n    hits.forEach(function (h) {\n      var t = (S.edges || {})[h.key], r = h.rect; if (!t || t === 'straight' || !r || !h.corner) return;\n      var R = /r$/.test(h.corner), B = /^b/.test(h.corner), Ve = [num(r.x) + (R ? num(r.w) : 0), num(r.y) + (B ? num(r.h) : 0)], sx = R ? -1 : 1, sy = B ? -1 : 1, bw, bh;\n      if (t === 'bevel' || t === 'notch') { var b = ((t === 'bevel' ? S.bevel : S.notch) || {})[h.key] || {}; bw = (num(b.dx) || 50) + (t === 'notch' ? num(b.offset) : 0); bh = num(b.dy) || 50; }\n      else { bw = bh = t === 'semi' ? Math.min(num(r.w), num(r.h)) / 2 : Math.min(num(S.roundRadius) || 30, Math.min(num(r.w), num(r.h)) / 2); }\n      bw = Math.min(bw, num(r.w)); bh = Math.min(bh, num(r.h));\n      var Vw = mapV(Ve), Vr = null, bd = 2;                                   /* sommet r\u00E9el : le sommet de pi\u00E8ce au point port\u00E9 */\n      polys.forEach(function (p) { p.forEach(function (q) { var d = Math.hypot(q[0] - Vw[0], q[1] - Vw[1]); if (d < bd) { bd = d; Vr = q; } }); });\n      if (!Vr) return;\n      var walls = [];                                                          /* murs du sommet : ar\u00EAtes qui ne sont pas une jonction */\n      polys.forEach(function (p, pi) {\n        var n = p.length, k = p.findIndex(function (q) { return near(q, Vr); }); if (k < 0) return;\n        [p[(k + n - 1) % n], p[(k + 1) % n]].forEach(function (w) {\n          var l = Math.hypot(w[0] - Vr[0], w[1] - Vr[1]); if (l < 1) return;\n          var mid = [(Vr[0] + w[0]) / 2, (Vr[1] + w[1]) / 2];\n          if (polys.some(function (o, oi) { return oi !== pi && onPoly(o, mid); })) return;\n          var u = [(w[0] - Vr[0]) / l, (w[1] - Vr[1]) / l];\n          if (!walls.some(function (x) { return Math.abs(x[0] - u[0]) < 1e-6 && Math.abs(x[1] - u[1]) < 1e-6; })) walls.push(u);\n        });\n      });\n      if (walls.length !== 2) return;\n      var h1 = Math.abs(walls[0][0]) >= Math.abs(walls[0][1]), uh = h1 ? walls[0] : walls[1], uv = h1 ? walls[1] : walls[0];\n      var round = t === 'round1' || t === 'semi', k = 1, band = null;\n      if (round) {                                                             /* arrondi tangent aux deux murs r\u00E9els */\n        var th = Math.acos(Math.max(-1, Math.min(1, uh[0] * uv[0] + uh[1] * uv[1]))), tt = bw / Math.tan(th / 2);\n        k = tt / bw;\n        var T1 = [Vr[0] + tt * uh[0], Vr[1] + tt * uh[1]], T2 = [Vr[0] + tt * uv[0], Vr[1] + tt * uv[1]];\n        band = 'M ' + T1[0] + ',' + T1[1] + ' A ' + bw + ',' + bw + ' 0 0 ' + ((uh[0] * uv[1] - uh[1] * uv[0]) < 0 ? 1 : 0) + ' ' + T2[0] + ',' + T2[1];\n      } else if (t === 'bevel') {\n        band = 'M ' + (Vr[0] + bw * uh[0]) + ',' + (Vr[1] + bw * uh[1]) + ' L ' + (Vr[0] + bh * uv[0]) + ',' + (Vr[1] + bh * uv[1]);\n      }\n      if (band) (bands || []).forEach(function (bd) {\n        if (bd.key !== h.key) return;\n        bd.els.forEach(function (e, i) {\n          if (i) { e.remove(); return; }                                       /* un seul trac\u00E9 par coin */\n          e.setAttribute('d', band); e.removeAttribute('transform');\n        });\n      });\n      boxes.push({ Ve: Ve, Vr: Vr, sx: sx, sy: sy, uh: uh, uv: uv, k: k,\n        x0: Math.min(Ve[0], Ve[0] + sx * bw) - 1, x1: Math.max(Ve[0], Ve[0] + sx * bw) + 1, y0: Math.min(Ve[1], Ve[1] + sy * bh) - 1, y1: Math.max(Ve[1], Ve[1] + sy * bh) + 1 });\n    });\n    if (!boxes.length) return;\n    var fix = function (p) {\n      var b = boxes.filter(function (x) { return p[0] >= x.x0 && p[0] <= x.x1 && p[1] >= x.y0 && p[1] <= x.y1; })[0];\n      if (!b) return null;\n      var dh = (p[0] - b.Ve[0]) * b.sx * b.k, dv = (p[1] - b.Ve[1]) * b.sy * b.k;   /* arrondi : jusqu'au point de tangence */\n      return [b.Vr[0] + dh * b.uh[0] + dv * b.uv[0], b.Vr[1] + dh * b.uh[1] + dv * b.uv[1]];\n    };\n    lines.forEach(function (l) {\n      if (!l.el || !l.el.setAttribute) return;\n      var a = fix(l.a), c = fix(l.b);\n      if (a) { l.el.setAttribute('x1', a[0]); l.el.setAttribute('y1', a[1]); }\n      if (c) { l.el.setAttribute('x2', c[0]); l.el.setAttribute('y2', c[1]); }\n    });\n  }\n\n  /* Pendant renderAngle : les coordonn\u00E9es que le moteur donne en \u00AB rectangles \u00BB sont\n     port\u00E9es sur le trac\u00E9 r\u00E9el au moment de l'appel (cases et cotes sont plac\u00E9es l\u00E0). */\n  function interceptDuring(A, fn) {\n    var S = A.S;\n    if (!active(S)) return fn();\n    var s = params(S), g = realGeom(s), svg = A.svg, pad = null;\n    var P = function () {\n      if (pad === null) { var vb = (svg.getAttribute('viewBox') || '').split(/\\s+/).map(Number); pad = (vb.length === 4 && vb[2] > s.L1) ? (vb[2] - s.L1) / 2 : 350; }\n      return pad;\n    };\n    /* Cadre du dessin : renderAngle le fixe en premier (L1 + 2 \u00D7 pad). Si le retour r\u00E9el\n       d\u00E9borde (mur long, angle ouvert) au-del\u00E0 de la marge, on l'\u00E9largit de ce c\u00F4t\u00E9-l\u00E0\n       seulement, AVANT que cases et cotes soient plac\u00E9es (le rep\u00E8re des pi\u00E8ces ne bouge pas). */\n    var setAttr = svg.setAttribute;\n    svg.setAttribute = function (k, v) {\n      if (k === 'viewBox' && pad === null) {\n        var vb = String(v).split(/\\s+/).map(Number);\n        if (vb.length === 4 && vb[2] > s.L1) {\n          pad = (vb[2] - s.L1) / 2;\n          var over = Math.max(0, Math.max(g.O1[0], g.O2[0], g.I2[0]) + 160 - s.L1 - pad);   /* 160 : cotes du mur */\n          if (over > 0) v = (s.dir === 'left' ? vb[0] - over : vb[0]) + ' ' + vb[1] + ' ' + (vb[2] + over) + ' ' + vb[3];\n        }\n      }\n      return setAttr.call(this, k, v);\n    };\n    var W = function (x, y) { return warp(s, g, P(), x, y); };\n    var o = { ind: A.addEdgeBandingIndicator, cb: A.addEdgeCheckbox, hit: A.addHit, corner: A.drawCornerBanding, dim: A.addDim };\n    var recL = [], recH = [], recB = [];                                     /*  traits et coins, en coordonn\u00E9es du moteur ; chants d'usinage*/\n    A.addEdgeBandingIndicator = function () {\n      var a = [].slice.call(arguments), e = [[num(a[0]), num(a[1])], [num(a[2]), num(a[3])]], p = W(a[0], a[1]), q = W(a[2], a[3]);\n      a[0] = p[0]; a[1] = p[1]; a[2] = q[0]; a[3] = q[1];\n      var el = o.ind.apply(this, a);\n      recL.push({ el: el, a: e[0], b: e[1] });\n      return el;\n    };\n    A.addEdgeCheckbox = function () {\n      var a = [].slice.call(arguments), p = W(a[0], a[1]); a[0] = p[0]; a[1] = p[1];\n      return o.cb.apply(this, a);\n    };\n    A.addHit = function () {\n      var a = [].slice.call(arguments), c = W(a[0] + a[2] / 2, a[1] + a[3] / 2);\n      recH.push({ key: a[4], rect: a[5], corner: a[6] });\n      a[0] = c[0] - a[2] / 2; a[1] = c[1] - a[3] / 2;\n      return o.hit.apply(this, a);\n    };\n    A.drawCornerBanding = function (rect) {                                  /* coins usin\u00E9s du retour : ils tournent avec lui */\n      var last = svg.lastChild, r = o.corner.apply(this, arguments);\n      if (rect && rect.h === s.L2 && rect.y >= P() + s.P1 - 0.5) {\n        for (var n = last ? last.nextSibling : svg.firstChild; n; n = n.nextSibling) if (n.setAttribute) n.setAttribute('transform', retourRotation(s, P()));\n      }\n      recB.push(bandsAfter(svg, last, arguments[2]));\n      return r;\n    };\n    A.addDim = function () {\n      var a = rewriteDim(s, g, P(), [].slice.call(arguments));\n      return a ? o.dim.apply(this, a) : null;\n    };\n    try { return fn(); }\n    finally {\n      A.addEdgeBandingIndicator = o.ind; A.addEdgeCheckbox = o.cb; A.addHit = o.hit; A.drawCornerBanding = o.corner; A.addDim = o.dim;\n      delete svg.setAttribute;                                               /* retour \u00E0 la m\u00E9thode du prototype */\n      A.__cpTracePad = pad;\n      try {\n        var pp = P(), polys = window.CP_geomAngle(s).pieces.map(function (p) { return p.pts.map(function (q) { return [q[0] + pp, q[1] + pp]; }); });\n        machinedMarks(S, recL, recH, polys, function (v) { return W(v[0], v[1]); }, recB);\n      } catch (e) { console.warn('[cp-trace]', e); }\n    }\n  }\n\n  /* Contour ferm\u00E9 (points du dessin) dont UN sommet porte un usinage, au vrai angle du sommet :\n     arrondi (rayon du moteur, au plus la moiti\u00E9 de la profondeur, comme capR), demi-rond (moiti\u00E9 de\n     la profondeur), chanfrein (dx le long de l'ar\u00EAte la plus horizontale, dy de l'autre), encoche\n     (dx \u00D7 dy, d\u00E9cal\u00E9e de \u00AB offset \u00BB le long de l'ar\u00EAte la plus horizontale, comme pathWithFeatures).\n     Renvoie le \u00AB d \u00BB d'un chemin. */\n  function cornerCutPath(pts, idx, type, S, key, depth) {\n    var n = pts.length, V = pts[idx], Pp = pts[(idx + n - 1) % n], Nn = pts[(idx + 1) % n];\n    var unit = function (a, b) { var dx = b[0] - a[0], dy = b[1] - a[1], l = Math.hypot(dx, dy) || 1; return [dx / l, dy / l, l]; };\n    var u1 = unit(V, Pp), u2 = unit(V, Nn), at = function (u, t) { return [V[0] + u[0] * t, V[1] + u[1] * t]; };\n    var cross = u1[0] * u2[1] - u1[1] * u2[0], sweep = cross < 0 ? 1 : 0;   /* sens du contour */\n    var L = function (p) { return 'L ' + p[0] + ',' + p[1]; }, cut = [];\n    if (type === 'round1' || type === 'semi') {\n      var r = type === 'semi' ? depth / 2 : Math.min(num(S.roundRadius) || 30, depth / 2);\n      var half = Math.tan(Math.acos(Math.max(-1, Math.min(1, u1[0] * u2[0] + u1[1] * u2[1]))) / 2), tt = r / half;\n      var cap = Math.min(u1[2], u2[2]) * (type === 'semi' ? 1 : 0.49);\n      if (tt > cap) { tt = cap; r = tt * half; }                             /* arc toujours tangent aux deux ar\u00EAtes */\n      var T1 = at(u1, tt), T2 = at(u2, tt);\n      cut = [L(T1), 'A ' + r + ' ' + r + ' 0 0 ' + sweep + ' ' + T2[0] + ',' + T2[1]];\n    } else if (type === 'bevel' || type === 'notch') {\n      var b = ((type === 'bevel' ? S.bevel : S.notch) || {})[key] || {};\n      var h1 = Math.abs(u1[0]) >= Math.abs(u1[1]), dx = num(b.dx) || 50, dy = num(b.dy) || 50, off = type === 'notch' ? num(b.offset) : 0;\n      var a1 = h1 ? dx : dy, a2 = h1 ? dy : dx, A1 = at(u1, a1), A2 = at(u2, a2);\n      if (off > 0) {                                                         /* encoche d\u00E9cal\u00E9e : le sommet reste */\n        var uh = h1 ? u1 : u2, uv = h1 ? u2 : u1, q = function (s, t) { return [V[0] + uh[0] * s + uv[0] * t, V[1] + uh[1] * s + uv[1] * t]; };\n        var slot = [q(off + dx, 0), q(off + dx, dy), q(off, dy), q(off, 0)];\n        cut = (h1 ? slot : slot.reverse()).map(L);\n        cut = h1 ? cut.concat([L(V)]) : [L(V)].concat(cut);\n      } else cut = type === 'bevel' ? [L(A1), L(A2)] : [L(A1), L([A1[0] + u2[0] * a2, A1[1] + u2[1] * a2]), L(A2)];\n    } else return null;\n    var out = [];\n    for (var k = 0; k < n; k++) {\n      var i = (idx + 1 + k) % n;                                           /* d\u00E9part juste apr\u00E8s le sommet usin\u00E9 */\n      if (i === idx) out = out.concat(cut); else out.push((k === 0 ? 'M ' : 'L ') + pts[i][0] + ',' + pts[i][1]);\n    }\n    return out.join(' ') + ' Z';\n  }\n\n  /*  en coupe \u00E0 45\u00B0, le plan va jusqu'au coin\n     ext\u00E9rieur. Le moteur, qui dessine alors en \u00AB retour filant \u00BB (cp-jonction), coupe le bord\n     arri\u00E8re en deux chants : \u00AB back \u00BB sur le plan et \u00AB angleReturnTop \u00BB sur le bout du retour, qui\n     n'existe plus. Pendant renderAngle : pas de case ni de trait angleReturnTop ; un seul trait\n     \u00AB back \u00BB sur tout le bord arri\u00E8re (usinage du coin ext\u00E9rieur d\u00E9duit, comme le moteur le fait),\n     sa case au milieu ; la cl\u00E9 angleReturnTop quitte l'\u00E9tat AVANT le calcul du prix et du panier.*/\n  function onglet45(A, fn) {\n    var S = A.S;\n    if (!S.cpJ45 || S.layout !== 'angle') return fn();\n    var right = S.angleDir !== 'left', L1 = num(S.L1), P2 = num(S.P2), marks = [], pad = null;\n    var outerKey = right ? 'endHTR' : 'endHTL', outer = (S.edges || {})[outerKey];\n    var imposed = !!outer && outer !== 'straight' && outer !== 'notch';\n    if (imposed) {                                                          /* coin ext\u00E9rieur usin\u00E9 : son chant est celui du bord arri\u00E8re */\n      S.edgeBanding = S.edgeBanding || {}; S.edgeBanding.back = true;\n    }\n    var o = { ind: A.addEdgeBandingIndicator, cb: A.addEdgeCheckbox };\n    A.addEdgeBandingIndicator = function (x1, y1, x2, y2) {\n      var el = o.ind.apply(this, arguments);\n      marks.push({ a: [num(x1), num(y1)], b: [num(x2), num(y2)], el: el, args: [].slice.call(arguments) });\n      return el;\n    };\n    A.addEdgeCheckbox = function (x, y, key) {\n      if (key === 'angleReturnTop') return null;\n      if (key === 'back') {\n        pad = num(y); var a = [].slice.call(arguments); a[0] = pad + L1 / 2;\n        /*  impos\u00E9 comme les autres (case gris\u00E9e, raison \u00AB edge \u00BB, lien au coin) : le moteur le\n           d\u00E9coche lui-m\u00EAme quand l'usinage est retir\u00E9, et la ligne des chants impos\u00E9s le compte*/\n        if (imposed) { a[3] = true; a[4] = true; a[5] = 'edge'; a[6] = outerKey; }\n        return o.cb.apply(this, a);\n      }\n      return o.cb.apply(this, arguments);\n    };\n    try { return fn(); }\n    finally {\n      A.addEdgeBandingIndicator = o.ind; A.addEdgeCheckbox = o.cb;\n      if (pad !== null) {\n        var jx = right ? pad + L1 - P2 : pad + P2, near = function (u, v) { return Math.abs(u - v) < 0.5; };\n        var onBack = function (m) { return near(m.a[1], pad) && near(m.b[1], pad); };\n        var back = marks.filter(function (m) { return onBack(m) && (right ? near(Math.max(m.a[0], m.b[0]), jx) : near(Math.min(m.a[0], m.b[0]), jx)); })[0];\n        var top = marks.filter(function (m) { return onBack(m) && (right ? near(Math.min(m.a[0], m.b[0]), jx) : near(Math.max(m.a[0], m.b[0]), jx)); })[0];\n        [back, top].forEach(function (m) { if (m && m.el && m.el.remove) m.el.remove(); });\n        if (back && S.edgeBanding && S.edgeBanding.back) {\n          var bx = [back.a[0], back.b[0]], tx = top ? [top.a[0], top.b[0]] : null;\n          var x0 = right ? Math.min.apply(null, bx) : (tx ? Math.min.apply(null, tx) : pad);\n          var x1 = right ? (tx ? Math.max.apply(null, tx) : pad + L1) : Math.max.apply(null, bx);\n          var args = back.args.slice(); args[0] = x0; args[1] = pad; args[2] = x1; args[3] = pad;\n          A.addEdgeBandingIndicator.apply(A, args);                           /* par l'habillage en cours (trac\u00E9 r\u00E9el) */\n        }\n      }\n      if (S.edgeBanding) delete S.edgeBanding.angleReturnTop;\n    }\n  }\n\n  /* Remplissage d'une pi\u00E8ce : motif en mm, image dans le rep\u00E8re de la pi\u00E8ce, ou aplat */\n  function fillPiece(A, svg, g, poly, i, axis) {\n    var d = (typeof window.CP_decorFull === 'function') ? window.CP_decorFull() : null;\n    var url = A.getWorkImageUrl && A.getWorkImageUrl();\n    var lg = longest(poly), xs = poly.map(function (q) { return q[0]; }), ys = poly.map(function (q) { return q[1]; });\n    if (axis) {                                                             /*  fil le long de l'axe de la pi\u00E8ce (son mur, ou le front)*/\n      var ad = ((Math.atan2(axis[1], axis[0]) * 180 / Math.PI) % 180 + 180) % 180;\n      var ai = 0, best = Infinity;                                           /* ancre : sommet le plus \u00AB en amont \u00BB sur l'axe */\n      poly.forEach(function (q, k) { var t = q[0] * axis[0] + q[1] * axis[1] + 1e-6 * (q[0] * -axis[1] + q[1] * axis[0]); if (t < best) { best = t; ai = k; } });\n      lg = { deg: ad, at: poly[ai] };\n    }\n    var bx = Math.min.apply(null, xs), by = Math.min.apply(null, ys);\n    var bw = Math.max.apply(null, xs) - bx, bh = Math.max.apply(null, ys) - by;\n    if (d && d.tex && url && window.CP_texture) {\n      var pid = window.CP_texture.makePattern(svg, 'cp-trace-pat-' + i, url, d.tex, lg.at[0], lg.at[1],\n        window.CP_texture.grainAngle(d.tex.fil, lg.deg), poly);                  /*  une image par pi\u00E8ce*/\n      g.appendChild(el('rect', { x: bx, y: by, width: bw, height: bh, fill: 'url(#' + pid + ')', style: 'pointer-events:none' }));\n      return;\n    }\n    if (d && d.hex) {\n      g.appendChild(el('rect', { x: bx, y: by, width: bw, height: bh, fill: d.hex, style: 'pointer-events:none' }));\n      return;\n    }\n    if (url) {\n      /* rep\u00E8re de la pi\u00E8ce : origine au d\u00E9but de la plus longue ar\u00EAte, x le long de celle-ci */\n      var a = -lg.deg * Math.PI / 180, o = lg.at;\n      var loc = poly.map(function (q) {\n        var dx = q[0] - o[0], dy = q[1] - o[1];\n        return [dx * Math.cos(a) - dy * Math.sin(a), dx * Math.sin(a) + dy * Math.cos(a)];\n      });\n      var lx = loc.map(function (q) { return q[0]; }), ly = loc.map(function (q) { return q[1]; });\n      var mx = Math.min.apply(null, lx), my = Math.min.apply(null, ly);\n      var img = el('image', { x: o[0] + mx, y: o[1] + my, width: Math.max.apply(null, lx) - mx, height: Math.max.apply(null, ly) - my,\n        preserveAspectRatio: 'xMidYMid slice', transform: 'rotate(' + lg.deg.toFixed(3) + ' ' + o[0] + ' ' + o[1] + ')', style: 'pointer-events:none' });\n      img.setAttribute('href', url); img.setAttributeNS(XL, 'xlink:href', url);\n      g.appendChild(img);\n      return;\n    }\n    var meta = (A.variantsMeta && A.variantsMeta[A.S.variant]) || {};\n    g.appendChild(el('rect', { x: bx, y: by, width: bw, height: bh, fill: meta.fallbackColor || '#e5e7eb', style: 'pointer-events:none' }));\n  }\n\n  /* \u2500\u2500 LA primitive de dessin (6a) : des pi\u00E8ces = contours en points, rep\u00E8re du dessin \u2500\u2500\n     Les blocs textur\u00E9s du moteur (addTextureBlock) sont remplac\u00E9s par une pi\u00E8ce par contour,\n     d\u00E9coup\u00E9e \u00E0 ce contour et remplie du d\u00E9cor (fillPiece : motif \u00E0 l'\u00E9chelle, fil le long de la\n     plus longue ar\u00EAte). p.feat : d\u00E9coupe des usinages \u00E0 ajouter (arrondi, biseau, encoche), ou rien.\n     opt.assembly : #clip-assembly devient la r\u00E9union des contours. Renvoie false si le dessin du\n     moteur n'a pas la forme attendue (on le laisse alors tel quel). */\n  function drawPieces(A, pieces, opt) {\n    var svg = A.svg;\n    var blocks = Array.prototype.filter.call(svg.children, function (n) {\n      return n.tagName === 'g' && /clip-assembly/.test(n.getAttribute('clip-path') || '');\n    });\n    if (!blocks.length || blocks.length < pieces.length) return false;\n    var defs = svg.querySelector('defs') || svg.insertBefore(el('defs', {}), svg.firstChild);\n    Array.prototype.forEach.call(defs.querySelectorAll('[id^=\"cp-trace-\"]'), function (n) { n.remove(); });\n    var ca = defs.querySelector('#clip-assembly');\n    if (opt.assembly && ca) {\n      while (ca.firstChild) ca.removeChild(ca.firstChild);\n      pieces.forEach(function (p) { ca.appendChild(el('polygon', { points: ptsAttr(p.pts) })); });\n    }\n    var host = el('g', { class: 'cp-trace', 'data-forme': opt.forme });\n    if (opt.angle) host.setAttribute('data-angle', String(opt.angle));\n    pieces.forEach(function (p, i) {\n      var cp = el('clipPath', { id: 'cp-trace-clip-' + i, clipPathUnits: 'userSpaceOnUse' });\n      cp.appendChild(el('polygon', { points: ptsAttr(p.pts) }));\n      defs.appendChild(cp);\n      var g = el('g', { 'clip-path': 'url(#cp-trace-clip-' + i + ')', 'data-piece': p.id }), inner = g;\n      if (p.feat && p.feat.length) {\n        var fc = el('clipPath', { id: 'cp-trace-feat-' + i, clipPathUnits: 'userSpaceOnUse' });\n        p.feat.forEach(function (n) { fc.appendChild(n); });\n        defs.appendChild(fc);\n        inner = el('g', { 'clip-path': 'url(#cp-trace-feat-' + i + ')' });\n        g.appendChild(inner);\n      }\n      (p.feat2 ? [p.feat2] : []).concat(p.cuts || []).forEach(function (cut, j) {   /* d\u00E9coupes suivantes, embo\u00EEt\u00E9es (intersection) */\n        var id = 'cp-trace-feat2-' + i + (j ? '-' + j : '');\n        var fc2 = el('clipPath', { id: id, clipPathUnits: 'userSpaceOnUse' });\n        fc2.appendChild(cut.cloneNode(true));\n        defs.appendChild(fc2);\n        var inner2 = el('g', { 'clip-path': 'url(#' + id + ')' });\n        inner.appendChild(inner2); inner = inner2;\n      });\n      fillPiece(A, svg, inner, p.pts, i, p.axis);\n      host.appendChild(g);\n    });\n    svg.insertBefore(host, blocks[0]);\n    blocks.forEach(function (b) { b.remove(); });\n    return true;\n  }\n  /* origine des pi\u00E8ces dans le dessin : coin haut gauche de l'ensemble des blocs du moteur,\n     (pad, pad) dans toutes les formes (relev\u00E9 de cp-texture, App._cpPieces) ; sinon, marge du cadre */\n  function origin(A, fallback) {\n    var bs = (A._cpPieces || []).filter(function (b) { return isFinite(b.x) && isFinite(b.y); });\n    if (!bs.length) return [fallback, fallback];\n    return [Math.min.apply(null, bs.map(function (b) { return num(b.x); })), Math.min.apply(null, bs.map(function (b) { return num(b.y); }))];\n  }\n  /* copie du contour d'assemblage du moteur (r\u00E9union des pi\u00E8ces avec leurs usinages) */\n  function assemblyClone(svg) {\n    var ca = svg.querySelector('defs #clip-assembly');\n    return ca ? Array.prototype.map.call(ca.childNodes, function (n) { return n.cloneNode(true); }) : null;\n  }\n\n  /* \u2500\u2500 Angle par coin : U = 2 coins, G = 3 coins \u2500\u2500\n     \u00C9tat : S.cpAng['u-shape'] = { g, d }, S.cpAng['g-shape'] = { top, mid, ret }, de 85 \u00E0 95\u00B0. Le\n     moteur n'a qu'un angle (S.innerAngle) pour toute la forme et le facture deux fois : en U et en G\n     il reste \u00E0 90\u00B0, et le suppl\u00E9ment est ajout\u00E9 coin par coin (69 \u20AC par coin r\u00E9ellement hors\n     d'\u00E9querre, Q6).*/\n  var CORNERS = {\n    'u-shape': [{ k: 'g', label: 'Angle gauche', nom: 'coin gauche' }, { k: 'd', label: 'Angle droit', nom: 'coin droit' }],\n    'g-shape': [{ k: 'top', label: 'Angle haut gauche', nom: 'coin haut gauche' }, { k: 'mid', label: 'Angle haut droit', nom: 'coin haut droit' },\n                { k: 'ret', label: 'Angle du retour', nom: 'coin du retour' }]\n  };\n  var lastCorner = null, cornerSet = false;          /* coin de la derni\u00E8re \u00E9tiquette d'angle cliqu\u00E9e ; coin d\u00E9j\u00E0 pos\u00E9 par la fen\u00EAtre */\n  function corners(A) {\n    var S = A.S, list = CORNERS[S.layout];\n    if (!list) return null;\n    S.cpAng = S.cpAng || {};\n    var c = S.cpAng[S.layout] = S.cpAng[S.layout] || {};\n    list.forEach(function (x) { var v = num(c[x.k]); c[x.k] = (v >= 85 && v <= 95) ? v : 90; });\n    return c;\n  }\n  var jnUx = function (v) { return v === 'overlap' ? 'barre' : 'retour'; };\n  function jnU(S) { return typeof window.CP_jnU === 'function' ? window.CP_jnU(S) : { g: jnUx(S.junctionLeftU), d: jnUx(S.junctionRightU) }; }\n  function uParams(S, aL, aR) {\n    var j = jnU(S);\n    return { Lc: num(S.Lc), Pc: num(S.Pc), Lg: num(S.Lg), Ld: num(S.Ld), Pl: num(S.Pl), Pr: num(S.Pr),\n      jl: j.g, jr: j.d, aL: aL, aR: aR };\n  }\n\n  /*  coupe \u00E0 45\u00B0 en U. Le moteur dessine le coin en\n     \u00AB retour filant \u00BB (la jambe va jusqu'au mur) ; en onglet, le fond va pourtant jusqu'au coin\n     ext\u00E9rieur. Pendant renderU : ni case ni trait pour le haut de la jambe coup\u00E9e ; le chant arri\u00E8re du\n     fond couvre tout son bord, sa case au milieu, impos\u00E9 si le coin ext\u00E9rieur est usin\u00E9 (le moteur\n     l'impose au haut de jambe) ; la cl\u00E9 du haut de jambe quitte l'\u00E9tat avant le prix et le panier.\n     Cl\u00E9s du moteur (render-u, drawBackSeg) selon les jonctions : haut de jambe / bord du fond.*/\n  var U_LEGTOP = { g: ['backLeftU', 'backflol_left'], d: ['backRightU', 'backolfl_right'] }, U_BACK = ['backMidU', 'backflol_right', 'backolfl_left'];\n  function ongletU(A, fn) {\n    var S = A.S, j = jnU(S), gO = j.g === 'onglet', dO = j.d === 'onglet';\n    if (S.layout !== 'u-shape' || !(gO || dO)) return fn();\n    var Pl = num(S.Pl), Lc = num(S.Lc), marks = [], boxes = {}, o = { ind: A.addEdgeBandingIndicator, cb: A.addEdgeCheckbox };\n    var special = function (k) { var t = (S.edges || {})[k]; return !!t && t !== 'straight' && t !== 'notch'; };\n    A.addEdgeBandingIndicator = function (xa, ya, xb, yb) {\n      var e = o.ind.apply(this, arguments);\n      marks.push({ x: [num(xa), num(xb)], y: [num(ya), num(yb)], el: e });\n      return e;\n    };\n    A.addEdgeCheckbox = function (x, y, key) {\n      var side = U_LEGTOP.g.indexOf(key) >= 0 ? 'g' : (U_LEGTOP.d.indexOf(key) >= 0 ? 'd' : (U_BACK.indexOf(key) >= 0 ? 'f' : null));\n      if (side === 'f' || (side === 'g' && gO) || (side === 'd' && dO)) { boxes[side] = { key: key, args: [].slice.call(arguments) }; return null; }\n      return o.cb.apply(this, arguments);\n    };\n    try { return fn(); }\n    finally {\n      A.addEdgeBandingIndicator = o.ind; A.addEdgeCheckbox = o.cb;\n      var f = boxes.f;\n      if (f) {\n        var pad = num(f.args[1]), xl = pad + Pl, xr = pad + Pl + Lc, cx = num(f.args[0]);\n        var a = f.key === 'backolfl_left' ? 2 * cx - xr : xl, b = f.key === 'backflol_right' ? 2 * cx - xl : xr;\n        if (gO && boxes.g) a = 2 * num(boxes.g.args[0]) - xl;              /* d\u00E9but du haut de jambe (usinage d\u00E9duit) */\n        if (dO && boxes.d) b = 2 * num(boxes.d.args[0]) - xr;\n        var src = gO && special('footLTL') ? 'footLTL' : (dO && special('footRTR') ? 'footRTR' : null);\n        S.edgeBanding = S.edgeBanding || {};\n        if (src) S.edgeBanding[f.key] = true;\n        marks.forEach(function (m) {                                       /* haut de jambe coup\u00E9e et bord du fond \u2192 un seul trait */\n          if (Math.abs(m.y[0] - pad) < 0.5 && Math.abs(m.y[1] - pad) < 0.5 && Math.min(m.x[0], m.x[1]) >= a - 0.5 && Math.max(m.x[0], m.x[1]) <= b + 0.5 && m.el && m.el.remove) m.el.remove();\n        });\n        if (S.edgeBanding[f.key]) o.ind.call(A, a, pad, b, pad, true);\n        var args = f.args.slice(); args[0] = (a + b) / 2;\n        if (src) { args[3] = true; args[4] = true; args[5] = 'edge'; args[6] = src; }\n        o.cb.apply(A, args);\n      }\n      if (S.edgeBanding) [gO ? U_LEGTOP.g : [], dO ? U_LEGTOP.d : []].forEach(function (ks) { ks.forEach(function (k) { delete S.edgeBanding[k]; }); });\n    }\n  }\n  /* d\u00E9cor dessin\u00E9 au point (x, y) : dans une pi\u00E8ce de .cp-trace, apr\u00E8s toutes ses d\u00E9coupes */\n  function decorAt(A, x, y) {\n    var svg = A.svg, id = function (s) { return (s || '').replace(/^url\\(#|\\)$/g, ''); };\n    var inFill = function (n) {\n      var p = new DOMPoint(x, y), tl = n.transform && n.transform.baseVal;\n      if (tl && tl.numberOfItems) p = p.matrixTransform(tl.consolidate().matrix.inverse());\n      return typeof n.isPointInFill === 'function' && n.isPointInFill(p);\n    };\n    var inClip = function (ref) { var c = svg.querySelector('#' + id(ref)); return !c || Array.prototype.some.call(c.children, inFill); };\n    return Array.prototype.some.call(svg.querySelectorAll('.cp-trace [data-piece]'), function (g) {\n      if (!inClip(g.getAttribute('clip-path'))) return false;\n      for (var n = g.firstElementChild; n && n.getAttribute && n.getAttribute('clip-path'); n = n.firstElementChild) if (!inClip(n.getAttribute('clip-path'))) return false;\n      return true;\n    });\n  }\n  /* un coin usin\u00E9 (zone de clic du moteur, usinage autre que droit) \u00E0 moins de 150 mm de P */\n  function machinedNear(A, P) {\n    var e = A.S.edges || {};\n    return Array.prototype.some.call(A.svg.querySelectorAll('rect.hit[data-cp-id]'), function (h) {\n      var k = h.getAttribute('data-cp-id'), c = [num(h.getAttribute('x')) + num(h.getAttribute('width')) / 2, num(h.getAttribute('y')) + num(h.getAttribute('height')) / 2];\n      return e[k] && e[k] !== 'straight' && Math.hypot(c[0] - P[0], c[1] - P[1]) < 150;\n    });\n  }\n  /*  segment de jonction ramen\u00E9 au contour r\u00E9el \u00E0 un bout port\u00E9 par un coin usin\u00E9*/\n  function trimSeg(A, a, b) {\n    var at = function (t) { return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]; };\n    var ok = function (t) { var q = at(t); return decorAt(A, q[0], q[1]); };\n    var edge = function (out, inn) { for (var i = 0; i < 24; i++) { var m = (out + inn) / 2; if (ok(m)) inn = m; else out = m; } return inn; };\n    var t0 = !machinedNear(A, a) || ok(0.002) ? 0 : (ok(0.5) ? edge(0, 0.5) : 0), t1 = !machinedNear(A, b) || ok(0.998) ? 1 : (ok(0.5) ? edge(1, 0.5) : 1);\n    return [at(t0), at(t1)];\n  }\n  /* ligne de jonction d'un coin en onglet : diagonale r\u00E9elle (coin ext\u00E9rieur \u2192 coin int\u00E9rieur) ;\n     le rep\u00E8re bomb\u00E9 du moteur (drawJunction) n'a pas de sens pour une coupe d'onglet */\n  function ongletSeamsU(A, geo, O) {\n    var j = jnU(A.S);\n    ['g', 'd'].forEach(function (s, i) {\n      if (j[s] !== 'onglet') return;\n      var ab = trimSeg(A, add(geo.seams[i][0], O), add(geo.seams[i][1], O)), a = ab[0], b = ab[1];\n      Array.prototype.forEach.call(A.svg.querySelectorAll('.junction-group[data-cp-jn=\"' + (s === 'g' ? 'leftU' : 'rightU') + '\"]'), function (g) {\n        var ls = g.querySelectorAll('line');\n        if (!ls.length) { g.remove(); return; }\n        Array.prototype.forEach.call(ls, function (l) {\n          l.setAttribute('x1', a[0]); l.setAttribute('y1', a[1]); l.setAttribute('x2', b[0]); l.setAttribute('y2', b[1]);\n          if (/junction-line/.test(l.getAttribute('class') || '')) l.setAttribute('class', 'junction-line flush cp-miter');\n        });\n      });\n    });\n  }\n  /* point du dessin du moteur -> dessin r\u00E9el : zone la plus proche (rectangle du moteur -> quadrilat\u00E8re r\u00E9el) */\n  function nearestZone(zs, x, y) {\n    var best = zs[0], bd = Infinity;\n    zs.forEach(function (z) { var r = z.r, d = Math.hypot(Math.max(r[0] - x, 0, x - r[2]), Math.max(r[1] - y, 0, y - r[3])); if (d < bd - 1e-9) { bd = d; best = z; } });\n    return best;\n  }\n  function bil(z, x, y) {\n    var r = z.r, q = z.q, u = (x - r[0]) / (r[2] - r[0]), v = (y - r[1]) / (r[3] - r[1]);\n    var w = [(1 - u) * (1 - v), u * (1 - v), u * v, (1 - u) * v];\n    return [w[0] * q[0][0] + w[1] * q[1][0] + w[2] * q[2][0] + w[3] * q[3][0], w[0] * q[0][1] + w[1] * q[1][1] + w[2] * q[2][1] + w[3] * q[3][1]];\n  }\n  function warpPt(zs, x, y) { return bil(nearestZone(zs, x, y), x, y); }\n\n  /* Pendant renderU : \u00E9tiquettes d'angle rattach\u00E9es \u00E0 leur coin (valeur du coin) ; hors d'\u00E9querre,\n     cases, traits, zones de coin, cotes et jonctions sont port\u00E9s sur le trac\u00E9 r\u00E9el. */\n  function interceptU(A, fn) {\n    var S = A.S;\n    if (S.layout !== 'u-shape' || typeof window.CP_geomU !== 'function') return fn();\n    var c = corners(A), tilted = c.g !== 90 || c.d !== 90, svg = A.svg, pad = null;\n    var s0 = uParams(S, 90, 90), g0 = window.CP_geomU(s0), g1 = window.CP_geomU(uParams(S, c.g, c.d));\n    var W = s0.Pl + s0.Lc + s0.Pr, zs = null;\n    /* zones : chaque jambe est coup\u00E9e \u00E0 la hauteur du fond (Pc), comme le retour du L, pour que le\n       point de jonction du moteur tombe exactement sur l'angle int\u00E9rieur r\u00E9el */\n    var zones = function () {\n      if (zs) return zs;\n      var p = pad === null ? 450 : pad, L = g1.sides.g, R = g1.sides.d, Pc = s0.Pc, xl = s0.Pl, xr = W - s0.Pr;\n      var Z = function (x0, y0, x1, y1, q, rot) { return { r: [x0 + p, y0 + p, x1 + p, y1 + p], q: q.map(function (v) { return [v[0] + p, v[1] + p]; }), rot: rot }; };\n      var rg = { deg: g1.rot.g, c: [p, p] }, rd = { deg: g1.rot.d, c: [p + W, p] };\n      zs = [Z(xl, 0, xr, Pc, [L.I0, R.I0, R.I1, L.I1], null),                                    /* fond, entre les jambes */\n            Z(0, 0, xl, Pc, [L.C, L.I0, L.I1, L.O1], rg), Z(0, Pc, xl, Pc + s0.Lg, [L.O1, L.I1, L.I2, L.O2], rg),   /* jambe gauche */\n            Z(xr, 0, W, Pc, [R.I0, R.C, R.O1, R.I1], rd), Z(xr, Pc, W, Pc + s0.Ld, [R.I1, R.O1, R.O2, R.I2], rd)];  /* jambe droite */\n      return zs;\n    };\n    var o = { ov: A.drawInnerAngleOverlay, ind: A.addEdgeBandingIndicator, cb: A.addEdgeCheckbox, hit: A.addHit, corner: A.drawCornerBanding,\n      dim: A.addDim, jl: A.addJunctionLine, dj: A.drawJunction };\n    var hadSet = Object.prototype.hasOwnProperty.call(svg, 'setAttribute'), setAttr = svg.setAttribute;\n    svg.setAttribute = function (k, v) {\n      if (k === 'viewBox' && pad === null) {\n        var vb = String(v).split(/\\s+/).map(Number);\n        if (vb.length === 4 && vb[2] > W) {\n          pad = (vb[2] - W) / 2;\n          if (tilted) {                                                        /* une jambe qui s'ouvre peut sortir du cadre */\n            var xs = [].concat.apply([], g1.pieces.map(function (p) { return p.pts.map(function (q) { return q[0]; }); }));\n            var oL = Math.max(0, -Math.min.apply(null, xs) + 160 - pad), oR = Math.max(0, Math.max.apply(null, xs) - W + 160 - pad);\n            if (oL + oR > 0) v = (vb[0] - oL) + ' ' + vb[1] + ' ' + (vb[2] + oL + oR) + ' ' + vb[3];\n          }\n        }\n      }\n      return setAttr.call(this, k, v);\n    };\n    A.drawInnerAngleOverlay = function (x, y, size, isRight) {\n      var k = isRight ? 'd' : 'g', a = [].slice.call(arguments), p = pad === null ? 450 : pad;\n      if (tilted) { a[0] = g1.corners[k][0] + p; a[1] = g1.corners[k][1] + p; }\n      var last = svg.lastChild, r = o.ov.apply(this, a), grp = svg.lastChild;\n      if (grp && grp !== last && grp.getAttribute && /inner-angle-overlay/.test(grp.getAttribute('class') || '')) {\n        grp.setAttribute('data-cp-corner', k);\n        var t = grp.querySelector('text'); if (t) t.textContent = c[k] + '\u00B0';\n        var d = (c[k] - 90) * Math.PI / 180, R = size * 0.6, X = a[0], Y = a[1], wedge = grp.querySelector('path');\n        var from = isRight ? [-1, 0] : [1, 0], to = isRight ? [Math.sin(d), Math.cos(d)] : [-Math.sin(d), Math.cos(d)];\n        if (wedge && c[k] !== 90) wedge.setAttribute('d', 'M ' + X + ',' + Y + ' L ' + (X + R * from[0]) + ',' + (Y + R * from[1]) +\n          ' A ' + R + ' ' + R + ' 0 0 ' + (isRight ? 0 : 1) + ' ' + (X + R * to[0]) + ' ' + (Y + R * to[1]) + ' Z');\n      }\n      return r;\n    };\n    var recL = [], recH = [], recB = [];                                     /*  traits et coins, en coordonn\u00E9es du moteur ; chants d'usinage*/\n    if (tilted) {\n      A.addEdgeBandingIndicator = function (x1, y1, x2, y2) {             /* chaque bout par sa zone (coins communs exacts) */\n        var a = [].slice.call(arguments), P0 = warpPt(zones(), num(x1), num(y1)), P1 = warpPt(zones(), num(x2), num(y2));\n        a[0] = P0[0]; a[1] = P0[1]; a[2] = P1[0]; a[3] = P1[1];\n        var el = o.ind.apply(this, a);\n        recL.push({ el: el, a: [num(x1), num(y1)], b: [num(x2), num(y2)] });\n        return el;\n      };\n      A.addEdgeCheckbox = function (x, y) { var a = [].slice.call(arguments), P = warpPt(zones(), num(x), num(y)); a[0] = P[0]; a[1] = P[1]; return o.cb.apply(this, a); };\n      A.addHit = function (x, y, w, h) {\n        var a = [].slice.call(arguments), P = warpPt(zones(), num(x) + num(w) / 2, num(y) + num(h) / 2);\n        recH.push({ key: a[4], rect: a[5], corner: a[6] });\n        a[0] = P[0] - num(w) / 2; a[1] = P[1] - num(h) / 2;\n        return o.hit.apply(this, a);\n      };\n      A.drawCornerBanding = function (rect) {                               /* usinages des jambes : ils tournent avec elles */\n        var last = svg.lastChild, r = o.corner.apply(this, arguments);\n        var z = rect ? nearestZone(zones(), rect.x + rect.w / 2, rect.y + rect.h / 2) : null;\n        if (z && z.rot && z.rot.deg) for (var n = last ? last.nextSibling : svg.firstChild; n; n = n.nextSibling)\n          if (n.setAttribute) n.setAttribute('transform', 'rotate(' + z.rot.deg + ' ' + z.rot.c[0] + ' ' + z.rot.c[1] + ')');\n        recB.push(bandsAfter(svg, last, arguments[2]));\n        return r;\n      };\n      A.addDim = function (x1, y1, x2, y2, opt) {                         /* cotes : m\u00EAmes points ; cotes calcul\u00E9es = vraies longueurs */\n        var a = [].slice.call(arguments), op = Object.assign({}, opt || {}), zz = zones();\n        var P0 = warpPt(zz, num(x1), num(y1)), P1 = warpPt(zz, num(x2), num(y2));\n        if (op.calculated && op.subdivisions && op.subdivisions.length) {\n          var L = Math.hypot(num(x2) - num(x1), num(y2) - num(y1)) || 1, ux = (num(x2) - num(x1)) / L, uy = (num(y2) - num(y1)) / L, acc = 0, pts = [[num(x1), num(y1)]];\n          op.subdivisions.forEach(function (sd) { acc += num(sd.value); pts.push([num(x1) + ux * acc, num(y1) + uy * acc]); });\n          var wp = pts.map(function (q) { return warpPt(zz, q[0], q[1]); });\n          op.subdivisions = op.subdivisions.map(function (sd, i) { return { value: Math.round(Math.hypot(wp[i + 1][0] - wp[i][0], wp[i + 1][1] - wp[i][1])), position: sd.position }; });\n        }\n        a[0] = P0[0]; a[1] = P0[1]; a[2] = P1[0]; a[3] = P1[1]; a[4] = op;\n        return o.dim.apply(this, a);\n      };\n      var seg = function (fnOrig) {\n        return function (x1, y1, x2, y2) {\n          var a = [].slice.call(arguments), P0 = warpPt(zones(), num(x1), num(y1)), P1 = warpPt(zones(), num(x2), num(y2));\n          a[0] = P0[0]; a[1] = P0[1]; a[2] = P1[0]; a[3] = P1[1];\n          return fnOrig.apply(this, a);\n        };\n      };\n      if (typeof o.jl === 'function') A.addJunctionLine = seg(o.jl);\n      if (typeof o.dj === 'function') A.drawJunction = seg(o.dj);\n    }\n    try { return fn(); }\n    finally {\n      A.drawInnerAngleOverlay = o.ov; A.addEdgeBandingIndicator = o.ind; A.addEdgeCheckbox = o.cb; A.addHit = o.hit;\n      A.drawCornerBanding = o.corner; A.addDim = o.dim; A.addJunctionLine = o.jl; A.drawJunction = o.dj;\n      if (hadSet) svg.setAttribute = setAttr; else delete svg.setAttribute;\n      if (tilted) try {\n        var pp = pad === null ? 450 : pad;\n        machinedMarks(S, recL, recH, g1.pieces.map(function (p) { return p.pts.map(function (q) { return [q[0] + pp, q[1] + pp]; }); }), function (v) { return warpPt(zones(), v[0], v[1]); }, recB);\n      } catch (e) { console.warn('[cp-trace]', e); }\n    }\n  }\n\n  /* Pendant renderG : les 3 \u00E9tiquettes d'angle rattach\u00E9es \u00E0 leur coin (haut gauche, haut droit, retour,\n     dans l'ordre des appels de renderG l. 2455-2461) avec la valeur de ce coin ; hors d'\u00E9querre, cases,\n     traits, zones de coin, chants des coins usin\u00E9s, cotes et jonctions sont port\u00E9s sur le trac\u00E9 r\u00E9el\n     (zones de CP_geomG : rectangle du moteur \u00E0 90\u00B0 -> quadrilat\u00E8re r\u00E9el), comme en U. */\n  var G_OVERLAYS = ['top', 'mid', 'ret'];\n  function wedgePath(P, a, b, R) {                        /* secteur d'angle entre les bords a et b du sommet P */\n    var sweep = (a[0] * b[1] - a[1] * b[0]) > 0 ? 1 : 0;\n    return 'M ' + P[0] + ',' + P[1] + ' L ' + (P[0] + R * a[0]) + ',' + (P[1] + R * a[1]) +\n      ' A ' + R + ' ' + R + ' 0 0 ' + sweep + ' ' + (P[0] + R * b[0]) + ' ' + (P[1] + R * b[1]) + ' Z';\n  }\n  function gGeom(S, c) {\n    var s = window.CP_gParams(S); s.aTop = c.top; s.aMid = c.mid; s.aRet = c.ret;\n    return { s: s, g: window.CP_geomG(s) };\n  }\n  function interceptG(A, fn) {\n    var S = A.S;\n    if (S.layout !== 'g-shape' || typeof window.CP_geomG !== 'function' || typeof window.CP_gParams !== 'function') return fn();\n    var c = corners(A), tilted = c.top !== 90 || c.mid !== 90 || c.ret !== 90, svg = A.svg, pad = null, nOv = 0;\n    var gg = gGeom(S, c), g1 = gg.g, R = gg.s.dir !== 'left', W = (R ? gg.s.Pgleft : gg.s.Pgright) + gg.s.Gtop, zs = null;\n    var P = function () { return pad === null ? 450 : pad; };\n    var zones = function () {\n      if (zs) return zs;\n      var p = P();\n      zs = g1.zones.map(function (z) {\n        return { r: [z.r[0] + p, z.r[1] + p, z.r[2] + p, z.r[3] + p], q: z.q.map(function (v) { return [v[0] + p, v[1] + p]; }), rot: z.rot };\n      });\n      return zs;\n    };\n    var o = { ov: A.drawInnerAngleOverlay, ind: A.addEdgeBandingIndicator, cb: A.addEdgeCheckbox, hit: A.addHit, corner: A.drawCornerBanding,\n      dim: A.addDim, jl: A.addJunctionLine, dj: A.drawJunction };\n    var hadSet = Object.prototype.hasOwnProperty.call(svg, 'setAttribute'), setAttr = svg.setAttribute;\n    svg.setAttribute = function (k, v) {\n      if (k === 'viewBox' && pad === null) {\n        var vb = String(v).split(/\\s+/).map(Number);\n        if (vb.length === 4 && vb[2] > W) {\n          pad = (vb[2] - W) / 2;\n          if (tilted) {                                                        /* un montant ou le retour qui s'ouvre peut sortir du cadre */\n            var all = [].concat.apply([], g1.pieces.map(function (p) { return p.pts; }));\n            var xs = all.map(function (q) { return q[0]; }), ys = all.map(function (q) { return q[1]; });\n            var oL = Math.max(0, -Math.min.apply(null, xs) + 160 - pad), oR = Math.max(0, Math.max.apply(null, xs) - W + 160 - pad);\n            var oB = Math.max(0, Math.max.apply(null, ys) + 160 + pad - vb[3]);\n            if (oL + oR + oB > 0) v = (vb[0] - oL) + ' ' + vb[1] + ' ' + (vb[2] + oL + oR) + ' ' + (vb[3] + oB);\n          }\n        }\n      }\n      return setAttr.call(this, k, v);\n    };\n    A.drawInnerAngleOverlay = function (x, y, size) {\n      var k = G_OVERLAYS[nOv++] || null, a = [].slice.call(arguments), p = P(), inn = k && g1.inner[k];\n      if (tilted && inn) { a[0] = inn.p[0] + p; a[1] = inn.p[1] + p; }\n      var last = svg.lastChild, r = o.ov.apply(this, a), grp = svg.lastChild;\n      if (k && grp && grp !== last && grp.getAttribute && /inner-angle-overlay/.test(grp.getAttribute('class') || '')) {\n        grp.setAttribute('data-cp-corner', k);\n        var t = grp.querySelector('text'); if (t) t.textContent = c[k] + '\u00B0';\n        var wedge = grp.querySelector('path');                             /* le coin du retour suit aussi le montant qui le porte */\n        if (wedge && tilted && inn) wedge.setAttribute('d', wedgePath([a[0], a[1]], inn.a, inn.b, size * 0.6));\n      }\n      return r;\n    };\n    var recL = [], recH = [], recB = [];                                     /*  traits et coins, en coordonn\u00E9es du moteur ; chants d'usinage*/\n    if (tilted) {\n      A.addEdgeBandingIndicator = function (x1, y1, x2, y2) {\n        var a = [].slice.call(arguments), P0 = warpPt(zones(), num(x1), num(y1)), P1 = warpPt(zones(), num(x2), num(y2));\n        a[0] = P0[0]; a[1] = P0[1]; a[2] = P1[0]; a[3] = P1[1];\n        var el = o.ind.apply(this, a);\n        recL.push({ el: el, a: [num(x1), num(y1)], b: [num(x2), num(y2)] });\n        return el;\n      };\n      A.addEdgeCheckbox = function (x, y) { var a = [].slice.call(arguments), Q = warpPt(zones(), num(x), num(y)); a[0] = Q[0]; a[1] = Q[1]; return o.cb.apply(this, a); };\n      A.addHit = function (x, y, w, h) {\n        var a = [].slice.call(arguments), Q = warpPt(zones(), num(x) + num(w) / 2, num(y) + num(h) / 2);\n        recH.push({ key: a[4], rect: a[5], corner: a[6] });\n        a[0] = Q[0] - num(w) / 2; a[1] = Q[1] - num(h) / 2;\n        return o.hit.apply(this, a);\n      };\n      A.drawCornerBanding = function (rect, corner) {                     /* chant d'un coin usin\u00E9 : il suit sa pi\u00E8ce */\n        var last = svg.lastChild, r = o.corner.apply(this, arguments);\n        if (!rect) return r;\n        var cx = rect.x + rect.w / 2, cy = rect.y + rect.h / 2;\n        var X = /r$/.test(corner || '') ? rect.x + rect.w : rect.x, Y = /^b/.test(corner || '') ? rect.y + rect.h : rect.y;\n        var z = nearestZone(zones(), X + Math.sign(cx - X), Y + Math.sign(cy - Y)), Q = bil(z, X, Y);\n        var tr = 'rotate(' + (z.rot || 0) + ' ' + Q[0] + ' ' + Q[1] + ') translate(' + (Q[0] - X) + ' ' + (Q[1] - Y) + ')';\n        for (var n = last ? last.nextSibling : svg.firstChild; n; n = n.nextSibling) if (n.setAttribute) n.setAttribute('transform', tr);\n        recB.push(bandsAfter(svg, last, arguments[2]));\n        return r;\n      };\n      A.addDim = function (x1, y1, x2, y2, opt) {                         /* cotes : m\u00EAmes points ; cotes calcul\u00E9es = vraies longueurs */\n        var a = [].slice.call(arguments), op = Object.assign({}, opt || {}), zz = zones();\n        var P0 = warpPt(zz, num(x1), num(y1)), P1 = warpPt(zz, num(x2), num(y2));\n        if (op.calculated && op.subdivisions && op.subdivisions.length) {\n          var L = Math.hypot(num(x2) - num(x1), num(y2) - num(y1)) || 1, ux = (num(x2) - num(x1)) / L, uy = (num(y2) - num(y1)) / L, acc = 0, pts = [[num(x1), num(y1)]];\n          op.subdivisions.forEach(function (sd) { acc += num(sd.value); pts.push([num(x1) + ux * acc, num(y1) + uy * acc]); });\n          var wp = pts.map(function (q) { return warpPt(zz, q[0], q[1]); });\n          op.subdivisions = op.subdivisions.map(function (sd, i) { return { value: Math.round(Math.hypot(wp[i + 1][0] - wp[i][0], wp[i + 1][1] - wp[i][1])), position: sd.position }; });\n        }\n        a[0] = P0[0]; a[1] = P0[1]; a[2] = P1[0]; a[3] = P1[1]; a[4] = op;\n        return o.dim.apply(this, a);\n      };\n      var seg = function (fnOrig) {\n        return function (x1, y1, x2, y2) {\n          var a = [].slice.call(arguments), P0 = warpPt(zones(), num(x1), num(y1)), P1 = warpPt(zones(), num(x2), num(y2));\n          a[0] = P0[0]; a[1] = P0[1]; a[2] = P1[0]; a[3] = P1[1];\n          return fnOrig.apply(this, a);\n        };\n      };\n      if (typeof o.jl === 'function') A.addJunctionLine = seg(o.jl);\n      if (typeof o.dj === 'function') A.drawJunction = seg(o.dj);\n    }\n    try { return fn(); }\n    finally {\n      A.drawInnerAngleOverlay = o.ov; A.addEdgeBandingIndicator = o.ind; A.addEdgeCheckbox = o.cb; A.addHit = o.hit;\n      A.drawCornerBanding = o.corner; A.addDim = o.dim; A.addJunctionLine = o.jl; A.drawJunction = o.dj;\n      if (hadSet) svg.setAttribute = setAttr; else delete svg.setAttribute;\n      if (tilted) try {\n        var pp = P();\n        machinedMarks(S, recL, recH, g1.pieces.map(function (p) { return p.pts.map(function (q) { return [q[0] + pp, q[1] + pp]; }); }), function (v) { return warpPt(zones(), v[0], v[1]); }, recB);\n      } catch (e) { console.warn('[cp-trace]', e); }\n    }\n  }\n\n  /* coins usinables du U (moteur, render-u) : c\u00F4t\u00E9 ('g' / 'd') et sommet r\u00E9el dans CP_geomU().sides */\n  var U_CORNERS = { footLTL: ['g', 'C'], footLBL: ['g', 'O2'], footLBR: ['g', 'I2'], footRTR: ['d', 'C'], footRBL: ['d', 'I2'], footRBR: ['d', 'O2'] };\n\n  /* Forme en U (6b) : 3 pi\u00E8ces par points, angle par coin. \u00C0 90\u00B0 : chaque pi\u00E8ce est aussi\n     d\u00E9coup\u00E9e par le contour d'assemblage du moteur (usinages). Hors d'\u00E9querre : chaque usinage est\n     d\u00E9coup\u00E9 sur le contour r\u00E9el du U, \u00E0 son sommet r\u00E9el.*/\n  function traceU(A) {\n    var S = A.S, svg = A.svg;\n    if (!svg || S.layout !== 'u-shape' || typeof window.CP_geomU !== 'function') return;\n    var c = corners(A), tilted = c.g !== 90 || c.d !== 90, O = origin(A, 450);\n    var geo = window.CP_geomU(uParams(S, c.g, c.d));\n    if (!tilted) {\n      drawPieces(A, geo.pieces.map(function (p) {\n        return { id: p.id, axis: p.axis, pts: p.pts.map(function (q) { return add(q, O); }), feat: assemblyClone(svg) };\n      }), { forme: 'u-shape' });\n      ongletSeamsU(A, geo, O);\n      return;\n    }\n    /*  chaque coin usin\u00E9 est d\u00E9coup\u00E9 sur le contour r\u00E9el du U entier, \u00E0 son vrai\n       sommet, et la d\u00E9coupe s'applique \u00E0 toutes les pi\u00E8ces (embo\u00EEt\u00E9e) : celle du sommet, et la voisine\n       quand l'usinage longe le contour jusque sur elle (coin ext\u00E9rieur en jonction superpos\u00E9e : l'encoche\n       descend du bout du fond sur la jambe). Le contour du moteur n'est plus repris (ses demi-plans c\u00F4t\u00E9\n       jonction cachaient les grandes d\u00E9coupes).*/\n    var sd = geo.sides, Lg = sd.g, Rd = sd.d;\n    var outline = [Lg.C, Rd.C, Rd.O2, Rd.I2, Rd.I1, Lg.I1, Lg.I2, Lg.O2].map(function (q) { return add(q, O); });\n    var AT = { g: { C: 0, I2: 6, O2: 7 }, d: { C: 1, O2: 2, I2: 3 } }, cuts = [];\n    Object.keys(U_CORNERS).forEach(function (key) {\n      var type = (S.edges || {})[key], cn = U_CORNERS[key];\n      if (!type || type === 'straight') return;\n      var d = cornerCutPath(outline, AT[cn[0]][cn[1]], type, S, key, num(cn[0] === 'g' ? S.Pl : S.Pr));\n      if (d) cuts.push(el('path', { d: d }));\n    });\n    drawPieces(A, geo.pieces.map(function (p) {\n      return { id: p.id, axis: p.axis, pts: p.pts.map(function (q) { return add(q, O); }), cuts: cuts };\n    }), { forme: 'u-shape', assembly: true, angle: c.g + '/' + c.d });\n    ongletSeamsU(A, geo, O);\n  }\n\n  /* Plan droit (6a) : un rectangle par points ; usinages = contour du moteur (#clip-assembly) */\n  function traceLinear(A) {\n    var S = A.S, svg = A.svg;\n    if (!svg || S.layout !== 'linear' || typeof window.CP_geomLinear !== 'function') return;\n    var O = origin(A, 450);\n    var geo = window.CP_geomLinear({ L: num(S.L), P: num(S.P) });\n    drawPieces(A, geo.pieces.map(function (p) {\n      return { id: p.id, axis: p.axis, pts: p.pts.map(function (q) { return add(q, O); }), feat: assemblyClone(svg) };\n    }), { forme: 'linear' });\n  }\n\n  /* Forme en G (6c) : 4 pi\u00E8ces par points, chaque coin \u00E0 UNE pi\u00E8ce (le moteur superpose ses\n     blocs). Un angle par coin (Q5, Q6 valid\u00E9s) : les montants tournent autour de leur coin de murs,\n     le retour autour du coin ext\u00E9rieur du bas de son montant (CP_geomG). */\n  function traceG(A, seq) {\n    var S = A.S, svg = A.svg;\n    if (!svg || S.layout !== 'g-shape' || typeof window.CP_geomG !== 'function' || typeof window.CP_gParams !== 'function') return;\n    var O = origin(A, 450), c = corners(A), gg = gGeom(S, c), s = gg.s, geo = gg.g, j = { top: s.top, mid: s.mid, ret: s.ret };\n    var tilted = c.top !== 90 || c.mid !== 90 || c.ret !== 90;\n    var pts = geo.pieces.map(function (p) { return p.pts.map(function (q) { return add(q, O); }); });\n    if (!tilted) {\n      drawPieces(A, geo.pieces.map(function (p, i) { return { id: p.id, axis: p.axis, pts: pts[i], feat: assemblyClone(svg) }; }), { forme: 'g-shape' });\n    } else {\n      /* hors d'\u00E9querre : le contour du moteur (\u00E0 90\u00B0) ne sert plus. Comme en L et en U, chaque\n         coin usin\u00E9 est d\u00E9coup\u00E9 sur le contour r\u00E9el du G entier, \u00E0 son sommet r\u00E9el (zone de clic du moteur,\n         port\u00E9e sur le trac\u00E9 par interceptG), et la d\u00E9coupe s'applique \u00E0 toutes les pi\u00E8ces*/\n      var outline = geo.outline.map(function (q) { return add(q, O); }), cuts = [];\n      Array.prototype.forEach.call(svg.querySelectorAll('rect.hit[data-cp-id]'), function (h) {\n        var key = h.getAttribute('data-cp-id'), type = (S.edges || {})[key];\n        if (!type || type === 'straight') return;\n        var cc = [num(h.getAttribute('x')) + num(h.getAttribute('width')) / 2, num(h.getAttribute('y')) + num(h.getAttribute('height')) / 2], bi = -1, bd = Infinity;\n        outline.forEach(function (q, i) { var d = Math.hypot(q[0] - cc[0], q[1] - cc[1]); if (geo.outlineDepth[i] > 0 && d < bd) { bd = d; bi = i; } });   /* 0 : angle rentrant */\n        if (bi < 0 || bd > 400) return;\n        var d = cornerCutPath(outline, bi, type, S, key, geo.outlineDepth[bi]);\n        if (d) cuts.push(el('path', { d: d }));\n      });\n      drawPieces(A, geo.pieces.map(function (p, i) { return { id: p.id, axis: p.axis, pts: pts[i], cuts: cuts }; }),\n        { forme: 'g-shape', assembly: true, angle: c.top + '/' + c.mid + '/' + c.ret });\n    }\n    /*  bouts de pi\u00E8ce o\u00F9 le moteur (coin dessin\u00E9 en \u00AB retour filant \u00BB) pose un chant qui, en onglet,\n       appartient \u00E0 l'ar\u00EAte de la pi\u00E8ce voisine (haut de montant, bout du haut, bas de montant)*/\n    var caps = ['top', 'mid', 'ret'].filter(function (k) { return j[k] === 'onglet'; }).map(function (k) { return geo.caps[k].map(function (q) { return add(q, O); }); });\n    if (seq) normalizeEdges(A, seq, pts, caps);\n    /* lignes de jonction en onglet : diagonale r\u00E9elle, bouts au contour r\u00E9el ; rep\u00E8re bomb\u00E9 retir\u00E9 */\n    [['top', 'topG'], ['mid', 'midG'], ['ret', 'returnG']].forEach(function (c, i) {\n      if (j[c[0]] !== 'onglet') return;\n      var ab = trimSeg(A, add(geo.seams[i][0], O), add(geo.seams[i][1], O));\n      Array.prototype.forEach.call(svg.querySelectorAll('.junction-group[data-cp-jn=\"' + c[1] + '\"]'), function (g) {\n        var ls = g.querySelectorAll('line');\n        if (!ls.length) { g.remove(); return; }\n        Array.prototype.forEach.call(ls, function (l) {\n          l.setAttribute('x1', ab[0][0]); l.setAttribute('y1', ab[0][1]); l.setAttribute('x2', ab[1][0]); l.setAttribute('y2', ab[1][1]);\n          if (/junction-line/.test(l.getAttribute('class') || '')) l.setAttribute('class', 'junction-line flush cp-miter');\n        });\n      });\n    });\n  }\n\n  /* \u2500\u2500 Chants rattach\u00E9s aux ar\u00EAtes r\u00E9elles \u2500\u2500\n     Relev\u00E9 pendant le rendu du moteur : chaque case de chant et les traits dessin\u00E9s juste avant\n     elle (m\u00EAme cl\u00E9, dans le code du moteur).*/\n  function captureMarks(A, fn) {\n    var seq = [], pending = [], o = { ind: A.addEdgeBandingIndicator, cb: A.addEdgeCheckbox };\n    A.addEdgeBandingIndicator = function () { var el = o.ind.apply(this, arguments); if (el) pending.push(el); return el; };\n    A.addEdgeCheckbox = function () { var c = o.cb.apply(this, arguments); if (c) seq.push({ c: c, lines: pending }); pending = []; return c; };\n    try { fn(); } finally { A.addEdgeBandingIndicator = o.ind; A.addEdgeCheckbox = o.cb; }\n    return seq;\n  }\n  function ivUnion(iv) {\n    var s = iv.slice().sort(function (a, b) { return a[0] - b[0]; }), out = [];\n    s.forEach(function (c) { var l = out[out.length - 1]; if (l && c[0] <= l[1] + 0.5) l[1] = Math.max(l[1], c[1]); else out.push([c[0], c[1]]); });\n    return out;\n  }\n  function ivMinus(A0, B) {\n    var out = A0.map(function (a) { return a.slice(); });\n    B.forEach(function (b) {\n      var nx = [];\n      out.forEach(function (a) { if (b[1] <= a[0] || b[0] >= a[1]) { nx.push(a); return; } if (b[0] > a[0]) nx.push([a[0], b[0]]); if (b[1] < a[1]) nx.push([b[1], a[1]]); });\n      out = nx;\n    });\n    return out.filter(function (a) { return a[1] - a[0] > 0.5; });\n  }\n  /* ar\u00EAtes des pi\u00E8ces (rep\u00E8re du dessin) et leur partie visible (hors jonctions avec une autre pi\u00E8ce) */\n  function pieceEdges(pieces) {\n    var E = [];\n    pieces.forEach(function (p, i) { p.forEach(function (a, j) { var b = p[(j + 1) % p.length], L = Math.hypot(b[0] - a[0], b[1] - a[1]); if (L > 0.5) E.push({ i: i, a: a, b: b, L: L }); }); });\n    var proj = function (e, q) { var ux = (e.b[0] - e.a[0]) / e.L, uy = (e.b[1] - e.a[1]) / e.L, dx = q[0] - e.a[0], dy = q[1] - e.a[1]; return { t: dx * ux + dy * uy, d: Math.abs(dx * uy - dy * ux) }; };\n    E.forEach(function (e) {\n      var j = [];\n      E.forEach(function (f) {\n        if (f.i === e.i) return;\n        var s = proj(e, f.a), t = proj(e, f.b);\n        if (s.d > 1 || t.d > 1) return;\n        var lo = Math.max(0, Math.min(s.t, t.t)), hi = Math.min(e.L, Math.max(s.t, t.t));\n        if (hi - lo > 1) j.push([lo, hi]);\n      });\n      e.exposed = ivMinus([[0, e.L]], ivUnion(j));\n    });\n    return { E: E, proj: proj, at: function (e, t) { return [e.a[0] + (e.b[0] - e.a[0]) * t / e.L, e.a[1] + (e.b[1] - e.a[1]) * t / e.L]; } };\n  }\n  /*  le moteur du G pose parfois deux cases (deux cl\u00E9s) pour la m\u00EAme partie\n     d'ar\u00EAte \u2014 ex. G gauche : backLeftGL_FF verrouill\u00E9e + backRightTopGL libre (+49 \u20AC au clic) ;\n     et il trace parfois un chant sur une jonction (G gauche, haut et retour affleurants :\n     sidesRightLeftGL_FF descend le long du retour). Ici : chaque trait est ramen\u00E9 \u00E0 la partie\n     visible de son ar\u00EAte ; une seule case par partie visible (la verrouill\u00E9e, sinon la coch\u00E9e,\n     sinon celle dont le trait \u00E9tait le plus juste) ; les autres cases et leurs traits sont retir\u00E9s\n     et leur cl\u00E9 quitte l'\u00E9tat, AVANT le calcul du prix.*/\n  /* retrait d'un chant au sommet V, le long de l'ar\u00EAte e : usinage du coin le plus proche (zone de clic du\n     moteur), selon la r\u00E8gle du moteur (getCornerBandOffset : encoche dx/dy, chanfrein dx/dy, arrondi et\n     demi-rond capR) */\n  function cornerRetract(A, V, e, poly) {\n    var S = A.S, best = null;\n    Array.prototype.forEach.call(A.svg.querySelectorAll('rect.hit[data-cp-id]'), function (h) {\n      var c = [num(h.getAttribute('x')) + num(h.getAttribute('width')) / 2, num(h.getAttribute('y')) + num(h.getAttribute('height')) / 2], d = Math.hypot(c[0] - V[0], c[1] - V[1]);\n      if (d < 250 && (!best || d < best.d)) best = { d: d, k: h.getAttribute('data-cp-id') };\n    });\n    var t = best && (S.edges || {})[best.k];\n    if (!t || t === 'straight') return 0;\n    var horiz = Math.abs(e.b[0] - e.a[0]) >= Math.abs(e.b[1] - e.a[1]);\n    if (t === 'bevel' || t === 'notch') { var b = ((t === 'bevel' ? S.bevel : S.notch) || {})[best.k] || {}; return horiz ? (num(b.dx) || 50) : (num(b.dy) || 50); }\n    var dep = minWidth(poly);                                                  /* largeur vraie (pi\u00E8ce inclin\u00E9e : pas sa bo\u00EEte) */\n    return t === 'semi' ? dep / 2 : Math.min(num(S.roundRadius) || 30, dep / 2);\n  }\n  /* plus petite largeur d'un contour convexe : pour chaque ar\u00EAte, distance du sommet le plus \u00E9loign\u00E9 ;\n     le minimum. Rectangle inclin\u00E9 : son petit c\u00F4t\u00E9 (la bo\u00EEte englobante le surestime) */\n  function minWidth(p) {\n    return Math.min.apply(null, p.map(function (a, i) {\n      var b = p[(i + 1) % p.length], L = Math.hypot(b[0] - a[0], b[1] - a[1]); if (L < 1e-9) return Infinity;\n      return Math.max.apply(null, p.map(function (q) { return Math.abs((q[0] - a[0]) * (b[1] - a[1]) - (q[1] - a[1]) * (b[0] - a[0])) / L; }));\n    }));\n  }\n  /* caps : segments du dessin o\u00F9 le moteur, qui dessine le coin en \u00AB retour filant \u00BB,\n     pose le chant du bout d'une pi\u00E8ce ; en onglet ce bout fait partie de l'ar\u00EAte de la pi\u00E8ce voisine.*/\n  function normalizeEdges(A, seq, pieces, caps) {\n    var G = pieceEdges(pieces), TOL = 3, slots = {};\n    var onCap = function (p) {\n      return !!p && (caps || []).some(function (c) {\n        var dx = c[1][0] - c[0][0], dy = c[1][1] - c[0][1], L = Math.hypot(dx, dy) || 1, t = ((p[0] - c[0][0]) * dx + (p[1] - c[0][1]) * dy) / L;\n        return t >= -TOL && t <= L + TOL && Math.abs((p[0] - c[0][0]) * dy - (p[1] - c[0][1]) * dx) / L <= TOL;\n      });\n    };\n    var locate = function (p, q) {\n      for (var k = 0; k < G.E.length; k++) {\n        var e = G.E[k], s = G.proj(e, p), t = G.proj(e, q);\n        if (s.d <= TOL && t.d <= TOL && Math.min(s.t, t.t) >= -TOL && Math.max(s.t, t.t) <= e.L + TOL)\n          return { e: e, k: k, lo: Math.max(0, Math.min(s.t, t.t)), hi: Math.min(e.L, Math.max(s.t, t.t)) };\n      }\n      return null;\n    };\n    var xy = function (el) { return [[num(el.getAttribute('x1')), num(el.getAttribute('y1'))], [num(el.getAttribute('x2')), num(el.getAttribute('y2'))]]; };\n    seq.forEach(function (it) {\n      var v = it.c.isConnected && it.c.querySelector('.edge-checkbox-visual');\n      if (!v) return;\n      var on = v.classList.contains('checked');\n      it.key = v.dataset.edge; it.rank = (on && v.dataset.disabled === '1') ? 3 : (on ? 2 : 1); it.len = 0; it.slot = null;\n      var kept = [];\n      it.lines.forEach(function (el) {\n        if (!el.isConnected) return;\n        var s = xy(el), hit = locate(s[0], s[1]);\n        it.len += Math.hypot(s[1][0] - s[0][0], s[1][1] - s[0][1]);\n        if (!hit) {\n          /*  reste d'un chant raccourci par l'usinage d'un coin (le moteur du G retire aussi le c\u00F4t\u00E9\n             int\u00E9rieur du montant) tomb\u00E9 hors de l'ar\u00EAte, dans une pi\u00E8ce (d\u00E9cor des deux c\u00F4t\u00E9s : coupe \u00E0 45\u00B0).\n             Il est retir\u00E9 ; sa case rejoint la partie expos\u00E9e de l'ar\u00EAte dont il prolonge la ligne.*/\n          var m = [(s[0][0] + s[1][0]) / 2, (s[0][1] + s[1][1]) / 2], L0 = Math.hypot(s[1][0] - s[0][0], s[1][1] - s[0][1]) || 1;\n          var nx = -(s[1][1] - s[0][1]) / L0 * 3, ny = (s[1][0] - s[0][0]) / L0 * 3;\n          var ln = G.E.map(function (e, k) { return { e: e, k: k, a: G.proj(e, s[0]), b: G.proj(e, s[1]) }; })\n            .filter(function (x) { return x.a.d <= TOL && x.b.d <= TOL && x.e.exposed.length; })[0];\n          if (ln && decorAt(A, m[0] + nx, m[1] + ny) && decorAt(A, m[0] - nx, m[1] - ny)) {\n            el.remove();\n            if (!it.slot) {\n              var t0 = Math.min(ln.a.t, ln.b.t), t1 = Math.max(ln.a.t, ln.b.t), gap = function (x) { return Math.max(0, x[0] - t1, t0 - x[1]); };\n              var ix0 = ln.e.exposed.slice().sort(function (x, y) { return gap(x) - gap(y); })[0];\n              it.slot = ln.k + ':' + Math.round(ix0[0]);\n            }\n            return;\n          }\n          kept.push(el); return;\n        }\n        var vis = ivMinus([[hit.lo, hit.hi]], ivMinus([[0, hit.e.L]], hit.e.exposed));\n        if (!it.slot && vis.length) {                                          /* partie visible port\u00E9e par ce trait */\n          var ix = hit.e.exposed.filter(function (x) { return Math.min(x[1], vis[0][1]) - Math.max(x[0], vis[0][0]) > 0.5; })[0];\n          if (ix) it.slot = hit.k + ':' + Math.round(ix[0]);\n        }\n        if (vis.length === 1 && Math.abs(vis[0][0] - hit.lo) < 0.5 && Math.abs(vis[0][1] - hit.hi) < 0.5) { kept.push(el); return; }\n        el.remove();                                                           /* trait ramen\u00E9 \u00E0 la partie visible */\n        vis.forEach(function (iv) { var P0 = G.at(hit.e, iv[0]), P1 = G.at(hit.e, iv[1]); var n = A.addEdgeBandingIndicator(P0[0], P0[1], P1[0], P1[1], true); if (n) kept.push(n); });\n      });\n      it.lines = kept;\n      if (!it.slot && it.c.__cpXY) {                                           /* case sans trait : partie visible sous la case */\n        var p = it.c.__cpXY;\n        G.E.forEach(function (e, k) {\n          if (it.slot) return;\n          var q = G.proj(e, p);\n          if (q.d <= TOL && q.t >= -TOL && q.t <= e.L + TOL) {\n            var ix = e.exposed.filter(function (x) { return q.t >= x[0] - TOL && q.t <= x[1] + TOL; })[0] || e.exposed[0];\n            if (ix) it.slot = k + ':' + Math.round(ix[0]);\n          }\n        });\n      }\n      if (it.slot) (slots[it.slot] = slots[it.slot] || []).push(it);\n      it.cap = onCap(it.c.__cpXY);\n      it.src = (on && v.dataset.forceReason === 'edge') ? (v.dataset.sourceEdgeKey || null) : null;\n    });\n    Object.keys(slots).forEach(function (k) {\n      var g = slots[k]; if (g.length < 2) return;\n      var cand = g.filter(function (it) { return !it.cap; }); if (!cand.length) cand = g;   /*  la pi\u00E8ce qui continue garde sa cl\u00E9*/\n      var keep = cand.reduce(function (b, c) { return (c.rank > b.rank || (c.rank === b.rank && c.len > 0 && (b.len === 0 || c.len < b.len))) ? c : b; }, cand[0]);\n      /* couverture de toutes les parties (avant retrait), projet\u00E9e sur l'ar\u00EAte */\n      var e = G.E[+k.split(':')[0]], cov = [];\n      g.forEach(function (it) { it.lines.forEach(function (el) { if (!el || !el.isConnected) return; var s = xy(el), a = G.proj(e, s[0]).t, b = G.proj(e, s[1]).t; cov.push([Math.min(a, b), Math.max(a, b)]); }); });\n      var forced = g.filter(function (it) { return it !== keep && it.src; })[0];\n      g.forEach(function (it) {\n        if (it === keep) return;\n        it.c.remove(); it.lines.forEach(function (el) { if (el && el.remove) el.remove(); });\n        if (it.key && A.S.edgeBanding && !A.dims.querySelector('.edge-checkbox-visual[data-edge=\"' + it.key + '\"]')) delete A.S.edgeBanding[it.key];\n      });\n      var kv = keep.c.querySelector && keep.c.querySelector('.edge-checkbox-visual');\n      if (forced && kv && keep.key) {                                        /* chant impos\u00E9 par un usinage : il le reste */\n        A.S.edgeBanding = A.S.edgeBanding || {}; A.S.edgeBanding[keep.key] = true;\n        A.S.edgeBandingByEdge = A.S.edgeBandingByEdge || {}; (A.S.edgeBandingByEdge[forced.src] = A.S.edgeBandingByEdge[forced.src] || {})[keep.key] = true;\n        kv.classList.add('checked'); kv.classList.add('disabled'); kv.dataset.disabled = '1'; kv.dataset.forceReason = 'edge'; kv.dataset.sourceEdgeKey = forced.src;\n        keep.c.style.pointerEvents = 'none'; keep.c.style.opacity = '0.45'; keep.rank = 3;\n      }\n      /* parties diff\u00E9rentes d'une m\u00EAme ar\u00EAte (onglet) : le chant gard\u00E9 couvre toute la partie visible,\n         retir\u00E9e aux sommets usin\u00E9s ; sa case au milieu */\n      var ix = e.exposed.filter(function (x) { return Math.round(x[0]) === +k.split(':')[1]; })[0];\n      var u = ivUnion(cov), own = 0; keep.lines.forEach(function (el) { if (el && el.isConnected) { var s = xy(el); own += Math.hypot(s[1][0] - s[0][0], s[1][1] - s[0][1]); } });\n      if (!ix || (!forced && ivLen(u) - own <= TOL)) return;\n      var poly = pieces[e.i], lo = ix[0], hi = ix[1];\n      if (lo < 0.5) lo += cornerRetract(A, e.a, e, poly);\n      if (hi > e.L - 0.5) hi -= cornerRetract(A, e.b, e, poly);\n      keep.lines.forEach(function (el) { if (el && el.remove) el.remove(); }); keep.lines = [];\n      if (keep.rank >= 2 && hi > lo) { var P0 = G.at(e, lo), P1 = G.at(e, hi), n = A.addEdgeBandingIndicator(P0[0], P0[1], P1[0], P1[1], true); if (n) keep.lines.push(n); }\n      var M = G.at(e, (lo + hi) / 2), pos = A.svgToClient ? A.svgToClient(M[0], M[1]) : null, host = A.dims.getBoundingClientRect();\n      keep.c.__cpXY = M;\n      if (pos) { keep.c.style.left = (pos.x - host.left) + 'px'; keep.c.style.top = (pos.y - host.top) + 'px'; }\n      (A._cpMarks && A._cpMarks.boxes || []).forEach(function (b) { if (b.el === keep.c) b.p = M; });\n    });\n  }\n  function ivLen(iv) { return iv.reduce(function (s, a) { return s + a[1] - a[0]; }, 0); }\n\n  /* Forme en L, \u00E0 tous les angles (5a, 6a) : appel\u00E9 juste apr\u00E8s renderAngle du moteur */\n  function trace(A) {\n    var S = A.S, svg = A.svg;\n    if (!svg || S.layout !== 'angle' || typeof window.CP_geomAngle !== 'function') return;\n    var ang = num(S.innerAngle || 90);\n    /* coupe \u00E0 45\u00B0 (5b) : le moteur dessine alors en \u00AB retour filant \u00BB (cp-jonction force\n       junctionType = flush) ; CP_geomAngle trace l'onglet (coin ext\u00E9rieur -> coin int\u00E9rieur).\n       cp-jonction.drawMiter, qui ne trouve plus de rectangles, ne redessine rien. */\n\n    var L1 = num(S.L1), P1 = num(S.P1), L2 = num(S.L2), P2 = num(S.P2);\n    var O = origin(A, (A.__cpTracePad > 0) ? A.__cpTracePad : 350), pad = O[0];\n    var s = { L1: L1, P1: P1, L2: L2, P2: P2, ang: ang, jn: junctionOf(S), dir: S.angleDir === 'left' ? 'left' : 'right' };\n    var geo = window.CP_geomAngle(s);\n    var defs = svg.querySelector('defs') || svg.insertBefore(el('defs', {}), svg.firstChild);\n\n    /* Coins usin\u00E9s (arrondi, biseau, encoche) : chacun est d\u00E9coup\u00E9 sur le contour r\u00E9el de tout le L, \u00E0\n       son vrai sommet, et la d\u00E9coupe s'applique aux deux pi\u00E8ces (embo\u00EEt\u00E9e) : celle du sommet, et la\n       voisine quand l'usinage longe le contour jusque sur elle. : c'\u00E9tait d\u00E9j\u00E0 le cas du\n       coin ext\u00E9rieur. : les autres coins gardaient le contour du moteur r\u00E9uni \u00E0 un\n       demi-plan c\u00F4t\u00E9 jonction, qui cachait toute d\u00E9coupe au-del\u00E0 de la moiti\u00E9 de la pi\u00E8ce (encoche de\n       1 170 mm au bas d'un retour de 1 200 mm non dessin\u00E9e, puis son chant refus\u00E9 au panier).*/\n    var rg = realGeom(s), Pt = function (q) { return fromR(s, pad, q); };\n    var outline = [Pt([0, 0]), Pt(rg.C), Pt(rg.O2), Pt(rg.I2), Pt(rg.I1), Pt([0, P1])];\n    var depthAt = [P1, Math.min(P1, P2), P2, P2, 0, P1];                        /* profondeur de la pi\u00E8ce \u00E0 chaque sommet */\n    var cuts = [], feat2 = null;\n    Array.prototype.forEach.call(svg.querySelectorAll('rect.hit[data-cp-id]'), function (h) {\n      var key = h.getAttribute('data-cp-id'), type = (S.edges || {})[key];\n      if (!type || type === 'straight') return;\n      var cc = [num(h.getAttribute('x')) + num(h.getAttribute('width')) / 2, num(h.getAttribute('y')) + num(h.getAttribute('height')) / 2], bi = -1, bd = Infinity;\n      outline.forEach(function (q, i) { var d = Math.hypot(q[0] - cc[0], q[1] - cc[1]); if (i !== 4 && d < bd) { bd = d; bi = i; } });   /* 4 : angle int\u00E9rieur */\n      if (bi < 0 || bd > 400) return;\n      var d = cornerCutPath(outline, bi, type, S, key, depthAt[bi]);\n      if (!d) return;\n      var n = el('path', { d: d }); cuts.push(n);\n      if (bi === 1) feat2 = n;                                                 /* coin ext\u00E9rieur : la ligne de jonction s'y arr\u00EAte*/\n    });\n    /* contour d'assemblage = r\u00E9union des contours r\u00E9els ; chaque pi\u00E8ce dans son contour */\n    var ok = drawPieces(A, geo.pieces.map(function (p) {\n      return { id: p.id, axis: p.axis, pts: p.pts.map(function (q) { return add(q, O); }), cuts: cuts };\n    }), { forme: 'angle', angle: ang, assembly: true });\n    if (!ok) return;\n\n    /* 3. Ligne de jonction sur le trac\u00E9 r\u00E9el */\n    var jg = svg.querySelector('.junction-group');\n    if (jg) {\n      var ab = trimSeg(A, add(geo.seam[0], O), add(geo.seam[1], O)), a = ab[0], b = ab[1];   /*  bouts au contour r\u00E9el*/\n      Array.prototype.forEach.call(jg.querySelectorAll('line'), function (l) {\n        l.setAttribute('x1', a[0]); l.setAttribute('y1', a[1]); l.setAttribute('x2', b[0]); l.setAttribute('y2', b[1]);\n      });\n      /*  coin ext\u00E9rieur usin\u00E9, la ligne d'onglet partait du sommet vif supprim\u00E9 et d\u00E9bordait\n         dans le vide ; elle s'arr\u00EAte au contour r\u00E9el (le m\u00EAme que la d\u00E9coupe du d\u00E9cor, feat2)*/\n      if (feat2) {\n        var jc = el('clipPath', { id: 'cp-trace-seam-clip', clipPathUnits: 'userSpaceOnUse' });\n        jc.appendChild(feat2.cloneNode(true));\n        defs.appendChild(jc);\n        jg.setAttribute('clip-path', 'url(#cp-trace-seam-clip)');\n      } else jg.removeAttribute('clip-path');\n    }\n\n    /* 4. \u00C9tiquette d'angle : \u00E0 l'angle int\u00E9rieur r\u00E9el, secteur ouvert du vrai angle */\n    var ov = svg.querySelector('.inner-angle-overlay');\n    if (ov) {\n      var right = s.dir !== 'left';\n      var eng = right ? [pad + L1 - P2, pad + P1] : [pad + P2, pad + P1];      /* point pos\u00E9 par renderAngle */\n      var real = add(innerCorner(s), O), dx = real[0] - eng[0], dy = real[1] - eng[1];\n      var dd = (ang - 90) * Math.PI / 180, r = OVERLAY_R;\n      var along = right ? [-1, 0] : [1, 0];                                  /* le long du bord avant de la barre */\n      var wall = right ? [Math.sin(dd), Math.cos(dd)] : [-Math.sin(dd), Math.cos(dd)];   /* le long du retour */\n      var p0 = [real[0] + r * along[0], real[1] + r * along[1]], p1 = [real[0] + r * wall[0], real[1] + r * wall[1]];\n      var wedge = ov.querySelector('path');\n      if (wedge) wedge.setAttribute('d', 'M ' + real[0] + ',' + real[1] + ' L ' + p0[0] + ',' + p0[1] +\n        ' A ' + r + ' ' + r + ' 0 0 ' + (right ? 0 : 1) + ' ' + p1[0] + ' ' + p1[1] + ' Z');\n      Array.prototype.forEach.call(ov.querySelectorAll('line, text'), function (n) {\n        n.setAttribute('transform', 'translate(' + dx + ' ' + dy + ')');\n      });\n    }\n  }\n  window.CP_trace = trace;\n\n  /* \u2500\u2500 : champ visible \u00AB Angle entre les murs \u00BB (forme en L) \u2500\u2500\n     Le moteur ne propose l'angle que par un petit secteur cliquable sur le plan\n     (illisible sur mobile) et ram\u00E8ne 97 \u00E0 95 sans rien dire. Bornes : celles du\n     moteur (85\u201395\u00B0, configurator-main.js l. 3455-3459). Suppl\u00E9ment : r\u00E9glage de\n     la r\u00E8gle produit (_eff.edgePricesEuro.innerAngle), affich\u00E9 avant validation.*/\n  var ANG_MIN = 85, ANG_MAX = 95;\n  function toast(msg) { if (window.CFG_UI && window.CFG_UI.toast) window.CFG_UI.toast(msg, 'info', 6000); }\n  function anglePrice(A) { var e = A._eff && A._eff.edgePricesEuro; return e ? num(e.innerAngle) : 0; }\n  function hint(A, v) {\n    if (!(v >= ANG_MIN && v <= ANG_MAX) || v === 90) return v === 90 ? 'Murs d\\'\u00E9querre (90\u00B0)' : '';\n    var p = anglePrice(A);\n    return 'Hors d\\'\u00E9querre' + (p > 0 ? ' : +' + p.toFixed(2).replace('.', ',') + ' \u20AC' : '');\n  }\n  /*  un champ vide ou illisible garde la valeur pr\u00E9c\u00E9dente, sans message\n     (Number('') valait 0, ramen\u00E9 \u00E0 85\u00B0). Hors 85\u201395 : borne et message ; d\u00E9cimale :\n     arrondi au degr\u00E9 et message.*/\n  function readAngle(raw, prev) {\n    var s = String(raw == null ? '' : raw).trim().replace(',', '.');\n    if (!/^[+-]?(\\d+\\.?\\d*|\\.\\d+)$/.test(s)) return { v: prev, msg: '' };\n    var n = Number(s), r = Math.round(n), c = Math.max(ANG_MIN, Math.min(ANG_MAX, r));\n    if (c !== r) return { v: c, msg: 'L\\'angle entre les murs va de ' + ANG_MIN + ' \u00E0 ' + ANG_MAX + '\u00B0 : valeur ramen\u00E9e \u00E0 ' + c + '\u00B0.' };\n    if (r !== n) return { v: c, msg: 'Angle arrondi au degr\u00E9 : ' + c + '\u00B0.' };\n    return { v: c, msg: '' };\n  }\n  function stepAngle(e, prev, apply) {                                     /* fl\u00E8ches haut/bas : le champ n'est plus de type number */\n    if (e.key !== 'ArrowUp' && e.key !== 'ArrowDown') return;\n    e.preventDefault();\n    var a = readAngle(e.target.value, prev);\n    apply(String(Math.max(ANG_MIN, Math.min(ANG_MAX, a.v + (e.key === 'ArrowUp' ? 1 : -1)))));\n  }\n  function applyAngle(A, raw) {\n    var prev = num(A.S.innerAngle || 90), a = readAngle(raw, prev);\n    if (a.msg) toast(a.msg);\n    var inp = document.getElementById('cp-ang-input');\n    if (inp) inp.value = a.v;                                              /*  m\u00EAme si le champ a le focus*/\n    if (a.v === prev) { syncAngleField(A); return; }\n    A.S.innerAngle = a.v;\n    A.render();\n  }\n  function syncAngleField(A) {\n    var bar = document.getElementById('stage-toolbar');\n    if (!bar) return;\n    var box = document.getElementById('cp-ang');\n    if (!box) {\n      if (!document.getElementById('cp-ang-css')) {\n        var st = document.createElement('style'); st.id = 'cp-ang-css';\n        st.textContent = '.cp-ang{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:13px}' +\n          '.cp-ang[hidden]{display:none}.cp-ang label{font-weight:600;color:#374151}' +\n          '.cp-ang input{width:64px;min-height:36px;font-size:16px;padding:4px 6px;border:1px solid #d1d5db;border-radius:6px;text-align:center}' +\n          '.cp-ang__hint{color:#4b5563;font-size:12px}' +\n          '@media (max-width:767px){.cp-ang input{min-height:44px;width:72px}}';\n        document.head.appendChild(st);\n      }\n      box = document.createElement('div'); box.id = 'cp-ang'; box.className = 'cp-ang';\n      box.innerHTML = '<label for=\"cp-ang-input\">Angle entre les murs</label>' +\n        '<input id=\"cp-ang-input\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" spellcheck=\"false\"> \u00B0' +\n        '<span class=\"cp-ang__hint\" aria-live=\"polite\"></span>';\n      var jct = document.getElementById('cp-jct'), spacer = bar.querySelector('.stage-toolbar-spacer');\n      (jct ? jct.parentNode : bar).insertBefore(box, jct ? jct.nextSibling : (spacer || null));   /*  barre ou bloc sous le dessin*/\n      var input = box.querySelector('input'), h = box.querySelector('.cp-ang__hint');\n      input.addEventListener('input', function () { var a = readAngle(input.value, NaN); h.textContent = isFinite(a.v) ? hint(getApp(), a.v) : ''; });\n      input.addEventListener('change', function () { applyAngle(getApp(), input.value); });\n      input.addEventListener('keydown', function (e) {\n        if (e.key === 'Enter') { e.preventDefault(); applyAngle(getApp(), input.value); }\n        stepAngle(e, num(getApp().S.innerAngle || 90), function (v) { applyAngle(getApp(), v); });\n      });\n    }\n    var isAngle = A.S.layout === 'angle';\n    box.hidden = !isAngle;\n    /*  en plein \u00E9cran, la r\u00E8gle \u00AB #stage.cfgfs-on #cp-ang { display:flex } \u00BB\n       l'emportait sur [hidden] : champ \u00AB Angle entre les murs \u00BB VIDE sur une forme droite et en G. Masqu\u00E9 aussi en\n       style en ligne, qui passe devant la feuille de style.*/\n    box.style.display = isAngle ? '' : 'none';\n    if (!isAngle) return;\n    var cur = num(A.S.innerAngle || 90), inp = box.querySelector('input');\n    if (document.activeElement !== inp) inp.value = cur;\n    box.querySelector('.cp-ang__hint').textContent = hint(A, cur);\n  }\n  /* \u2500\u2500 Angle par coin (U) : suppl\u00E9ment coin par coin, champs de saisie \u2500\u2500 */\n  function euros(cents) { return (cents / 100).toFixed(2).replace('.', ','); }\n  function addCornerLines(A) {\n    var list = CORNERS[A.S.layout]; if (!list) return;\n    var c = corners(A), unit = Math.round(anglePrice(A) * 100);\n    if (!(unit > 0)) return;\n    var lines = list.filter(function (x) { return c[x.k] !== 90; }).map(function (x) {\n      return 'Hors d\\'\u00E9querre, ' + x.nom + ' (' + c[x.k] + '\u00B0) : +' + euros(unit) + '\u00A0\u20AC';   /* lot \u00AB messages 2 \u00BB, N13 : une ligne par coin */\n    });\n    if (!lines.length) return;\n    A.S.optionsTotalCents = num(A.S.optionsTotalCents) + unit * lines.length;   /* m\u00EAme total : prix, panier, contr\u00F4le */\n    var td = document.getElementById('td-options'); if (!td) return;\n    var ul = td.querySelector('.td-options-list');\n    if (!ul) {\n      td.innerHTML = '<details class=\"td-options-dropdown\" open><summary></summary><div class=\"td-options-scroll\"><ul class=\"td-options-list\"></ul></div></details>';\n      ul = td.querySelector('ul');\n    }\n    lines.forEach(function (t) { var li = document.createElement('li'); li.textContent = t; ul.appendChild(li); });\n    var sum = td.querySelector('.td-options-dropdown > summary');\n    if (sum) sum.textContent = 'Suppl\u00E9ments : +' + euros(A.S.optionsTotalCents) + '\u20AC';\n  }\n  function applyCorner(A, k, raw) {\n    var c = corners(A), a = readAngle(raw, c[k]);\n    if (a.msg) toast(a.msg);\n    var inp = document.getElementById('cp-ang-' + k); if (inp) inp.value = a.v;\n    if (a.v === c[k]) { syncCornerFields(A); return; }\n    c[k] = a.v;\n    A.render();\n  }\n  /*  sous 769 px, le cadre du dessin (.config-stage-wrap, moteur) a une hauteur fixe\n     (90vh) et coupe ce qui d\u00E9passe. La barre des jonctions (#cp-jct, cp-jonction.js) et les champs d'angle\n     (#cp-ang, #cp-angles), ajout\u00E9s dans sa barre d'outils, y prenaient jusqu'\u00E0 507 px en G : dessin r\u00E9duit \u00E0\n     0 px \u00E0 375 \u00D7 667, cotes coup\u00E9es. Ils vont dans un bloc juste apr\u00E8s le cadre. Appel\u00E9 apr\u00E8s chaque rendu, au changement de largeur, et par cp-jonction.\n     Dans le bloc : angle(s) puis jonctions, le m\u00EAme ordre \u00E0 l'\u00E9cran et dans la page, donc au clavier, \u00E0 toutes les\n     largeurs (A-342). Angles par coin sur une\n     ligne chacun (libell\u00E9, champ, \u00B0). Feuille inject\u00E9e, pas de style en ligne : [hidden] doit rester effectif.*/\n  /*  la liste \u00AB Usinage des coins \u00BB de cp-a11y (#cp-coins) vient apr\u00E8s les jonctions ; elle est remise ici par\n     window.CP_stageExtras, m\u00EAme quand elle n'est pas encore dans la page.*/\n  /*  m\u00EAme d\u00E9faut sur ordinateur (1 280 \u00D7 720 : G de 269 px de haut contre 490 sur le site en\n     ligne, cotes calcul\u00E9es qui se chevauchent). Le bloc passe sous le cadre \u00E0 toutes les largeurs. De 769 \u00E0\n     1 024 px, la grille du moteur (.config-main) n'a qu'une colonne : le bloc suit le cadre. Au-del\u00E0, il va en\n     colonne 1, rang\u00E9e 2, et le r\u00E9capitulatif (collant) couvre les deux rang\u00E9es. Au-del\u00E0 de 768 px, la ligne\n     d'aide de cp-a11y (#cp-aide-cotes, 32 px au-dessus du dessin) passe \u00E0 gauche dans la barre d'outils, o\u00F9\n     elle ne prend pas de hauteur. En plein \u00E9cran au-del\u00E0 de 768 px (#stage.cfgfs-on : seul #stage est peint),\n     jonctions et angles reviennent dans la barre, comme avant.*/\n  /* A-342 (AUDIT Tours 633 et 638, docs\\a342-ordre-blocs-sous-dessin.md) : cp-trace range seul les blocs sous le dessin, \u00E0\n     toutes les largeurs, dans l'ordre de construction : angles, jonctions, usinage des coins, d\u00E9coupes (cp-decoupes), puis\n     les notes : composition (cp-pierre-angle), passage \u00E9troit (cp-forme), aide de l'arri\u00E8re (cp-modele). Chaque module cr\u00E9e\n     son bloc \u00E0 son rendu, dans un ordre qui changeait d'un chargement \u00E0 l'autre : le bloc est retrouv\u00E9 par son id, o\u00F9 qu'il\n     soit (\u00E0 c\u00F4t\u00E9 du dessin si l'h\u00F4te n'existait pas encore), et un bloc qui arrive apr\u00E8s le rangement est remis \u00E0 sa place.\n     La note L1 (cp-l1-note, \u00AB Garder / Passer \u00E0 \u00BB) reste o\u00F9 cp-modele la pose, en t\u00EAte : elle r\u00E9pond au changement qui vient\n     d'\u00EAtre fait */\n  var STAGE_EXTRAS = ['cp-jct', 'cp-ang', 'cp-angles'], HOST_ORDER = ['cp-ang', 'cp-angles', 'cp-jct', 'cp-coins', 'cp-dec', 'cp-pierre-compo', 'cp-passage', 'cp-back-aide'], MOBILE_Q = '(max-width: 768px)';\n  function stageExtrasCss() {\n    if (document.getElementById('cp-stage-extras-css')) return;\n    var st = document.createElement('style'); st.id = 'cp-stage-extras-css';\n    st.textContent = '#cp-stage-extras:not([hidden]){display:flex;flex-direction:column;gap:12px;padding:10px 12px;margin-top:6px;' +\n        'background:#f8f8f7;border:1px solid #ddd;border-radius:5px;min-width:0}' +\n      '#cp-stage-extras #cp-angles:not([hidden]){display:grid;grid-template-columns:max-content max-content 1fr;align-items:center;gap:6px}' +\n      '#cp-stage-extras #cp-angles .cp-ang__hint{grid-column:1/-1}' +\n      /* barre de 45 px au lieu de 49 (marges verticales de 6 -> 4 px ; le plein \u00E9cran garde les siennes) :\n         le dessin atteint au moins la hauteur du site en ligne (491 contre 490 px \u00E0 1 280 \u00D7 720) */\n      '@media (min-width:769px){#cp-stage-extras:not([hidden]){margin-top:0}#stage-toolbar{padding-top:4px;padding-bottom:4px}' +\n        /*  base 0, l'aide prend la place qui reste et passe \u00E0 la ligne dans sa case (2 lignes\n           de 18 px sous les boutons de 37 px) au lieu de renvoyer les boutons sur une 2e ligne de barre\n           (1 025 \u00E0 1 110 px, plan de travail : barre de 90 px)*/\n        '#stage-toolbar > #cp-aide-cotes{flex:1 1 0;min-width:0;margin:0 8px 0 0}}' +\n      /*  colonnes fix\u00E9es pour les trois. Sans colonne, le r\u00E9capitulatif (rang\u00E9e fix\u00E9e) \u00E9tait\n         plac\u00E9 en colonne 1 quand le bloc est cach\u00E9 (panneaux, cr\u00E9dence : aucun usinage), et le dessin passait\n         en colonne 2, dans 340 px.*/\n      '@media (min-width:1025px){.config-main > .config-stage-wrap{grid-column:1;grid-row:1}' +\n        '.config-main > #cp-stage-extras{grid-column:1;grid-row:2}.config-main > .recap-panel{grid-column:2;grid-row:1 / span 2}}';\n    document.head.appendChild(st);\n  }\n  function placeHelp(bar, mobile) {\n    var help = document.getElementById('cp-aide-cotes'), stage = document.getElementById('stage');\n    if (!help || !stage || !stage.parentNode) return;\n    if (!mobile) { if (bar.firstElementChild !== help) bar.insertBefore(help, bar.firstChild); }\n    else if (help.nextElementSibling !== stage || help.parentNode !== stage.parentNode) stage.parentNode.insertBefore(help, stage);\n  }\n  /*  la ligne d'aide (\u00E9l\u00E9ment LCP de la fiche) est pos\u00E9e par cp-a11y d\u00E8s la lecture de la page, sans attendre\n     le moteur (window.load) ; elle va tout de suite \u00E0 sa place finale, avec les r\u00E8gles de mise en page*/\n  window.CP_placeHelp = function () {\n    var bar = document.getElementById('stage-toolbar'); if (!bar) return;\n    stageExtrasCss();\n    placeHelp(bar, !!(window.matchMedia && window.matchMedia(MOBILE_Q).matches));\n  };\n  function placeStageExtras() {\n    var bar = document.getElementById('stage-toolbar'), wrap = bar && bar.closest ? bar.closest('.config-stage-wrap') : null;\n    if (!bar || !wrap || !wrap.parentNode) return;\n    stageExtrasCss();\n    var byId = function (id) { return document.getElementById(id) || (window.CP_stageExtras || {})[id] || null; };\n    var els = STAGE_EXTRAS.map(byId).filter(Boolean);\n    var host = document.getElementById('cp-stage-extras');\n    var mobile = !!(window.matchMedia && window.matchMedia(MOBILE_Q).matches), stage = document.getElementById('stage');\n    placeHelp(bar, mobile);\n    if (mobile || !(stage && stage.classList.contains('cfgfs-on'))) {\n      if (!host) { host = document.createElement('div'); host.id = 'cp-stage-extras'; host.className = 'cp-stage-extras'; }\n      if (host.parentNode !== wrap.parentNode || host.previousElementSibling !== wrap) wrap.parentNode.insertBefore(host, wrap.nextSibling);\n      /* R169 (AUDIT Tour 990) : en plein \u00E9cran, un bloc que cfg-coeur a mis dans le stage (#cp-dec) y reste : le ranger ici\n         relan\u00E7ait son observateur, qui le remettait dans le stage, et la page gelait au t\u00E9l\u00E9phone */\n      var pe = !!(stage && stage.classList.contains('cfgfs-on'));\n      var want = HOST_ORDER.map(byId).filter(Boolean).filter(function (e) { return !(pe && stage.contains(e)); }), actif = document.activeElement;\n      /* du dernier au premier, chaque bloc avant le suivant ; seuls ceux qui ne sont pas \u00E0 leur place bougent, jamais celui qui\n         a le focus (un champ d\u00E9plac\u00E9 le perd : il sera rang\u00E9 au passage suivant) ; un autre enfant de l'h\u00F4te ne bouge pas */\n      for (var i = want.length - 1, ref = null; i >= 0; ref = want[i], i--) {\n        var e = want[i], bien = e.parentNode === host && (!ref || !!(e.compareDocumentPosition(ref) & 4));   /* 4 : ref le suit */\n        if (!bien && !(actif && e.contains(actif))) host.insertBefore(e, ref && ref.parentNode === host ? ref : null);\n      }\n      if (!host.__cpOrdre && typeof MutationObserver === 'function') {\n        host.__cpOrdre = new MutationObserver(placeStageExtras); host.__cpOrdre.observe(host, { childList: true });\n      }\n      host.hidden = !Array.prototype.some.call(host.children, function (e) { return !e.hidden; });   /* la note L1 et les notes comptent aussi */\n    } else {\n      var spacer = bar.querySelector('.stage-toolbar-spacer');\n      if (els.some(function (e) { return e.parentNode !== bar; })) els.forEach(function (e) { bar.insertBefore(e, spacer || null); });\n      if (host) host.hidden = true;\n    }\n  }\n  window.CP_placeStageExtras = placeStageExtras;\n  if (window.matchMedia) {\n    var mqStage = window.matchMedia(MOBILE_Q);\n    if (mqStage.addEventListener) mqStage.addEventListener('change', placeStageExtras); else if (mqStage.addListener) mqStage.addListener(placeStageExtras);\n  }\n  window.addEventListener('resize', function () { setTimeout(placeStageExtras, 50); });\n\n  /*  sur une colonne (1 024 px et moins), le cadre du\n     dessin (.config-stage-wrap, moteur) garde 90vh quelle que soit la forme. Mesur\u00E9 \u00E0 375 \u00D7 812 : cadre\n     de 731 px, plan droit dessin\u00E9 avec ses cotes dans 206 px, 295 px vides au-dessus. Le dessin y est limit\u00E9 par\n     la largeur : le cadre prend la hauteur de ce qu'il montre (pi\u00E8ces, cotes, \u00E9tiquettes, cases, boutons), plus\n     FIT_PAD, entre FIT_MIN et 90vh. Il ne descend jamais sous la hauteur o\u00F9 le dessin garderait sa largeur\n     (sinon il rapetisserait). Hauteur pos\u00E9e en style sur le cadre, recalcul\u00E9e apr\u00E8s chaque placement ; rien en\n     plein \u00E9cran. Le contenu reste centr\u00E9 dans le SVG : r\u00E9duire le cadre de d le remonte de d/2.*/\n  var FIT_Q = '(max-width: 1024px)', FIT_MIN = 300, FIT_PAD = 14, fitBusy = false;\n  /* sortie du plein \u00E9cran : le moteur redessine en plusieurs fois apr\u00E8s la sortie\n     (multiRenderStabilize : 80 \u00E0 520 ms, puis au repos) ; mesur\u00E9 sur un rendu interm\u00E9diaire, le cadre passait de 366 \u00E0 355, 360 puis 363 px. Apr\u00E8s une sortie, un seul calcul, une fois les rendus du moteur finis.*/\n  var FIT_HOLD = 750, fitWasFs = false, fitHold = 0, fitHoldT = null;\n  function fitStage() {\n    var A = getApp(), bar = document.getElementById('stage-toolbar'), box = bar && bar.closest ? bar.closest('.config-stage-wrap') : null;\n    var stage = document.getElementById('stage'), svg = A && A.svg;\n    if (!box || !stage || !svg || !A.dims || fitBusy) return;\n    var fs = stage.classList.contains('cfgfs-on') || stage.classList.contains('is-fullscreen-mobile') ||\n      document.body.classList.contains('fullscreen-mobile-active') || !!document.fullscreenElement;\n    if (!(window.matchMedia && window.matchMedia(FIT_Q).matches) || fs) { fitWasFs = fs; if (box.style.height) box.style.height = ''; return; }\n    if (fitWasFs) { fitWasFs = false; fitHold = Date.now() + FIT_HOLD; }\n    if (Date.now() < fitHold) { clearTimeout(fitHoldT); fitHoldT = setTimeout(fitStage, fitHold - Date.now() + 20); return; }\n    var sv = svg.getBoundingClientRect(), vb = (svg.getAttribute('viewBox') || '').split(/\\s+/).map(Number);\n    if (!(sv.width > 0 && sv.height > 0) || vb.length !== 4 || !(vb[2] > 0 && vb[3] > 0)) return;\n    var top = Infinity, bot = -Infinity;\n    var take = function (el) { var r = el.getBoundingClientRect(); if (r.width > 0 && r.height > 0) { top = Math.min(top, r.top); bot = Math.max(bot, r.bottom); } };\n    /* [data-cp-fit] : contenu d'un autre trac\u00E9 (\u00E9tag\u00E8res de cp-etagere, vue d'ensemble sans cotes) */\n    Array.prototype.forEach.call(svg.querySelectorAll('.cp-trace [data-piece], .inner-angle-overlay, [data-cp-fit]'), take);\n    Array.prototype.forEach.call(A.dims.querySelectorAll('.dim > .label, .track-std, .dim-subdivisions, .subdivision-label, .edge-checkbox-visual, .cp-a11y-btn'), take);\n    if (!isFinite(top)) return;\n    var b = box.getBoundingClientRect(), st = stage.getBoundingClientRect(), h = b.height;\n    var d = Math.max(2 * (bot + FIT_PAD - b.bottom), 2 * (st.top + FIT_PAD - top),   /* marge sous le contenu et au-dessus */\n      sv.width * vb[3] / vb[2] - sv.height);                                           /* dessin limit\u00E9 par sa largeur */\n    var want = Math.round(Math.max(FIT_MIN, Math.min(window.innerHeight * 0.9, h + d)));\n    if (Math.abs(want - h) < 3) return;\n    fitBusy = true; box.style.height = want + 'px';\n    setTimeout(function () { fitBusy = false; }, 0);\n  }\n  window.CP_fitStage = fitStage;\n  window.addEventListener('resize', function () { setTimeout(fitStage, 120); });\n\n  function syncCornerFields(A) {\n    var bar = document.getElementById('stage-toolbar'); if (!bar) return;\n    var list = CORNERS[A.S.layout], box = document.getElementById('cp-angles');\n    if (!list) { if (box) { box.hidden = true; box.style.display = 'none'; } return; }   /*  comme #cp-ang*/\n    if (!box || box.getAttribute('data-forme') !== A.S.layout) {\n      if (box) box.remove();\n      box = document.createElement('div'); box.id = 'cp-angles'; box.className = 'cp-ang'; box.setAttribute('data-forme', A.S.layout);\n      box.setAttribute('role', 'group'); box.setAttribute('aria-label', 'Angles entre les murs');\n      box.innerHTML = list.map(function (x) {\n        return '<label for=\"cp-ang-' + x.k + '\">' + x.label + '</label><input id=\"cp-ang-' + x.k + '\" data-k=\"' + x.k +\n          '\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" spellcheck=\"false\"> \u00B0';\n      }).join('') + '<span class=\"cp-ang__hint\" aria-live=\"polite\"></span>';\n      var after = document.getElementById('cp-ang') || document.getElementById('cp-jct'), spacer = bar.querySelector('.stage-toolbar-spacer');\n      (after ? after.parentNode : bar).insertBefore(box, after ? after.nextSibling : (spacer || null));   /*  barre ou bloc sous le dessin*/\n      Array.prototype.forEach.call(box.querySelectorAll('input'), function (input) {\n        var k = input.getAttribute('data-k');\n        input.addEventListener('change', function () { applyCorner(getApp(), k, input.value); });\n        input.addEventListener('keydown', function (e) {\n          if (e.key === 'Enter') { e.preventDefault(); applyCorner(getApp(), k, input.value); }\n          stepAngle(e, corners(getApp())[k], function (v) { applyCorner(getApp(), k, v); });\n        });\n      });\n    }\n    box.hidden = false; box.style.display = '';\n    var c = corners(A), n = 0;\n    list.forEach(function (x) { var inp = document.getElementById('cp-ang-' + x.k); if (inp && document.activeElement !== inp) inp.value = c[x.k]; if (c[x.k] !== 90) n++; });\n    var p = anglePrice(A);\n    box.querySelector('.cp-ang__hint').textContent = n\n      ? (n === 1 ? '1 coin hors d\\'\u00E9querre' : n + ' coins hors d\\'\u00E9querre') + (p > 0 ? ' : +' + (p * n).toFixed(2).replace('.', ',') + ' \u20AC' : '')\n      : 'Murs d\\'\u00E9querre (90\u00B0)';\n  }\n\n  /*  aussi dans la fen\u00EAtre du moteur (clic sur l'angle du plan). Ce clic passe\n     avant celui du moteur, qui relit le champ : on y remet la valeur arrondie, born\u00E9e, ou la\n     pr\u00E9c\u00E9dente si le champ est vide. En U, le coin d\u00E9sign\u00E9 est pos\u00E9 ici, m\u00EAme revenu \u00E0 90\u00B0.*/\n  document.addEventListener('click', function (e) {\n    if (!(e.target && e.target.id === 'edge-apply')) return;\n    var inp = document.getElementById('inner-angle-input'), A = getApp();\n    if (!inp || !A || !A.S) return;\n    var list = CORNERS[A.S.layout], c = list ? corners(A) : null;\n    var k = list ? ((lastCorner && c.hasOwnProperty(lastCorner)) ? lastCorner : list[0].k) : null;\n    var a = readAngle(inp.validity && inp.validity.badInput ? '' : inp.value, list ? c[k] : num(A.S.innerAngle || 90));\n    inp.value = a.v;\n    if (list) { c[k] = a.v; cornerSet = true; }\n    if (a.msg) setTimeout(function () { toast(a.msg); }, 0);\n  }, true);\n\n  /* R215 (Romain : \u00AB qui prend l'initiative d'\u00E9crire fond, jambe droite, jambe gauche ? \u2026 virez-moi \u00E7a \u00BB ; AUDIT Tours 1202 et 1203) :\n     plus aucun nom de pi\u00E8ce sur le dessin (A-416 retir\u00E9), \u00E0 l'\u00E9cran, en plein \u00E9cran et sur l'image du panier ; les noms restent dans\n     la fen\u00EAtre des d\u00E9coupes (cp-decoupes) */\n\n  function wrap(A) {\n    if (A.__cpTraceWrapped || typeof A.renderAngle !== 'function') return;\n    A.__cpTraceWrapped = true;\n    var orig = A.renderAngle;\n    A.renderAngle = function () {\n      var that = this, args = arguments;\n      var r = interceptDuring(this, function () { return onglet45(that, function () { return orig.apply(that, args); }); });\n      try { trace(this); } catch (e) { console.warn('[cp-trace]', e); }\n      return r;\n    };\n    var interceptOngletU = function (B, run) { return interceptU(B, function () { return ongletU(B, run); }); };   /*  chants de l'onglet en coordonn\u00E9es du moteur*/\n    [['renderLinear', traceLinear], ['renderU', traceU, interceptOngletU], ['renderG', traceG, interceptG]].forEach(function (w) {   /* 6a\u20136c : droit, U, G par points */\n      var orig = A[w[0]];\n      if (typeof orig !== 'function') return;\n      A[w[0]] = function () {\n        var that = this, args = arguments, r;\n        var run = function () { r = orig.apply(that, args); };\n        var seq = captureMarks(this, w[2] ? function () { w[2](that, run); } : run);   /* cases et traits du moteur */\n        try { w[1](this, seq); } catch (e) { console.warn('[cp-trace]', e); }\n        return r;\n      };\n    });\n    /* angle par coin : l'\u00E9tiquette d'angle cliqu\u00E9e d\u00E9signe le coin (fen\u00EAtre d'angle du moteur) */\n    var lastLayout = null;\n    document.addEventListener('click', function (e) {\n      var ov = e.target && e.target.closest && e.target.closest('.inner-angle-overlay[data-cp-corner]');\n      if (ov) lastCorner = ov.getAttribute('data-cp-corner');\n    }, true);\n    var oPop = A.showInnerAnglePopup;\n    if (typeof oPop === 'function') A.showInnerAnglePopup = function () {\n      var list = CORNERS[this.S.layout];\n      if (!list) return oPop.apply(this, arguments);\n      var c = corners(this), k = (lastCorner && c.hasOwnProperty(lastCorner)) ? lastCorner : list[0].k;\n      this.S.innerAngle = c[k];                                              /* la fen\u00EAtre affiche l'angle de CE coin */\n      try { return oPop.apply(this, arguments); } finally { this.S.innerAngle = 90; }\n    };\n    var oOpts = A.updateTdOptionsList;\n    if (typeof oOpts === 'function') A.updateTdOptionsList = function () {\n      var r = oOpts.apply(this, arguments);\n      try { addCornerLines(this); } catch (e) { console.warn('[cp-trace]', e); }\n      return r;\n    };\n    var origRender = A.render;\n    A.render = function () {\n      var S = this.S, list = CORNERS[S.layout];\n      if (list) {\n        var c = corners(this);\n        if (lastLayout !== null && lastLayout !== S.layout) list.forEach(function (x) { c[x.k] = 90; });   /* changer de forme remet 90\u00B0*/\n        var ia = num(S.innerAngle || 90);\n        if (ia !== 90 && !cornerSet) {                                       /* valeur pos\u00E9e par le moteur hors de sa fen\u00EAtre d'angle */\n          var v = Math.max(ANG_MIN, Math.min(ANG_MAX, ia));\n          if (lastCorner && c.hasOwnProperty(lastCorner)) c[lastCorner] = v; else list.forEach(function (x) { c[x.k] = v; });\n        }\n        S.innerAngle = 90;                                                   /* le moteur ne facture plus l'angle du U */\n      }\n      cornerSet = false;\n      var r = origRender.apply(this, arguments);\n      lastLayout = S.layout;\n      try { syncAngleField(this); syncCornerFields(this); placeStageExtras(); } catch (e) { console.warn('[cp-trace]', e); }\n      setTimeout(fitStage, 60);                                              /*  apr\u00E8s le placement des cotes (cp-a11y)*/\n      return r;\n    };\n    try { A.render(); } catch (e) { console.warn('[cp-trace]', e); }\n  }\n\n  var tries = 0;\n  var timer = setInterval(function () {\n    var A = getApp();\n    if (A && A.S && A.svg && A.__cpTexWrapped && typeof window.CP_geomAngle === 'function' && typeof window.CP_geomLinear === 'function' && typeof window.CP_geomU === 'function' && typeof window.CP_geomG === 'function') { clearInterval(timer); wrap(A); }\n    else if (++tries > 400) clearInterval(timer);\n  }, 50);\n})();\n"],
  "mappings": "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",
  "names": ["k", "bd", "el", "b", "dx", "dy", "x1", "d", "c", "wrap", "e", "orig"]
}
