{
  "version": 3,
  "sources": ["/cdn/shop/t/31/assets/carron-table-composer.js?cb=24"],
  "sourcesContent": ["/* ======================================================================\n   CARRON TABLE COMPOSER - custom element <table-composer>\n   Port vanilla hi-fi du prototype design_handoff_wedding_table_composer/\n   (Wedding Table Composer.dc.html + composer-data.js). Unites monde : mm.\n   Donnees serialisees par sections/carron-table-composer.liquid :\n     [data-ctc-pool]   catalogue (metaobjects composer_piece)\n     [data-ctc-config] config (scene, copies, defauts, moneyFormat...)\n   Rendu : rail regenere en innerHTML sur changement d'etat ; camera et\n   drag imperatifs (transform), jamais de re-render pendant un geste.\n   Panier/precommande : branches en Phase 2 (voir _confirm()).\n   ====================================================================== */\n(function () {\n  'use strict';\n  if (customElements.get('table-composer')) return;\n\n  /* ---------- utils ---------- */\n  function esc(s) { return String(s == null ? '' : s).replace(/[&<>\"]/g, function (c) { return ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' })[c]; }); }\n  function formatMoney(cents, fmt) {\n    fmt = fmt || '{{amount}} \u20AC';\n    var v = (cents / 100);\n    var useComma = /comma_separator/.test(fmt);\n    var noDec = /no_decimals/.test(fmt);\n    var dec = noDec ? 0 : 2;\n    var s = Math.abs(v).toFixed(dec);\n    var parts = s.split('.');\n    var thou = useComma ? '.' : ' ';\n    var decSep = ',';\n    parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, thou);\n    var amount = parts[1] ? parts[0] + decSep + parts[1] : parts[0];\n    return fmt.replace(/\\{\\{\\s*(amount[^}]*)\\s*\\}\\}/g, amount);\n  }\n  function cm(mm) { var v = mm / 10; return (Math.round(v * 10) / 10).toString().replace(/\\.0$/, ''); }\n\n  /* ================== geometrie (port composer-data.js, mm) ================== */\n  var GOLD = '#B68C45', RULE = '#CBC5B4', WELL = '#E7E2D4', INK = '#3A3733';\n  function C(r, cx, cy) { cx = cx || 0; cy = cy || 0; return 'M ' + (cx - r) + ' ' + cy + ' a ' + r + ' ' + r + ' 0 1 0 ' + (r * 2) + ' 0 a ' + r + ' ' + r + ' 0 1 0 ' + (-r * 2) + ' 0 Z'; }\n  function E(rx, ry) { return 'M ' + (-rx) + ' 0 a ' + rx + ' ' + ry + ' 0 1 0 ' + (rx * 2) + ' 0 a ' + rx + ' ' + ry + ' 0 1 0 ' + (-rx * 2) + ' 0 Z'; }\n  function RR(x, y, w, h, r) { return 'M ' + (x + r) + ' ' + y + ' h ' + (w - 2 * r) + ' a ' + r + ' ' + r + ' 0 0 1 ' + r + ' ' + r + ' v ' + (h - 2 * r) + ' a ' + r + ' ' + r + ' 0 0 1 ' + (-r) + ' ' + r + ' h ' + (-(w - 2 * r)) + ' a ' + r + ' ' + r + ' 0 0 1 ' + (-r) + ' ' + (-r) + ' v ' + (-(h - 2 * r)) + ' a ' + r + ' ' + r + ' 0 0 1 ' + r + ' ' + (-r) + ' Z'; }\n  function SC(r, n, dep) {\n    var p = '';\n    for (var i = 0; i <= n; i++) {\n      var a0 = i / n * 2 * Math.PI;\n      var x0 = +(r * Math.cos(a0)).toFixed(1), y0 = +(r * Math.sin(a0)).toFixed(1);\n      if (i === 0) { p = 'M ' + x0 + ' ' + y0 + ' '; continue; }\n      var am = (i - 0.5) / n * 2 * Math.PI;\n      var xm = +((r + dep) * Math.cos(am)).toFixed(1), ym = +((r + dep) * Math.sin(am)).toFixed(1);\n      p += 'Q ' + xm + ' ' + ym + ' ' + x0 + ' ' + y0 + ' ';\n    }\n    return p + 'Z';\n  }\n  function plate(R, look) {\n    var s = [];\n    if (look === 'pivoine') {\n      s.push({ d: SC(R, 18, R * 0.05), f: '#FCFBF6', s: RULE, w: 1 });\n      s.push({ d: C(R * 0.63), f: 'none', s: WELL, w: 1.6 });\n      s.push({ d: SC(R * 0.9, 18, R * 0.03), f: 'none', s: '#E3DECE', w: 1.2 });\n      return s;\n    }\n    s.push({ d: C(R), f: '#FCFBF6', s: RULE, w: 1 });\n    s.push({ d: C(R * 0.63), f: 'none', s: WELL, w: 1.6 });\n    if (look === 'paris') { s.push({ d: C(R - 6), f: 'none', s: INK, w: 1.8 }); s.push({ d: C(R * 0.63 + 6), f: 'none', s: INK, w: 0.9 }); }\n    if (look === 'campagne') s.push({ d: C(R - 9), f: 'none', s: '#B9B29E', w: 1.4 });\n    if (look === 'ma' || look === 'noeud') { s.push({ d: C(R - 5), f: 'none', s: GOLD, w: 2.4 }); s.push({ d: C(R * 0.63 + 5), f: 'none', s: GOLD, w: 0.9 }); }\n    if (look === 'mlle') { s.push({ d: C(R - 4), f: 'none', s: '#6B675E', w: 0.8 }); s.push({ d: C(R - 11), f: 'none', s: '#6B675E', w: 0.8 }); }\n    if (look === 'rose') { s.push({ d: C(R * 0.8), f: 'none', s: '#EFEADC', w: 5 }); s.push({ d: C(R - 7), f: 'none', s: '#D8D2C2', w: 1 }); }\n    return s;\n  }\n  function glassShapes(R, look) {\n    return [\n      { d: C(R), f: 'rgba(252,251,246,0.62)', s: '#C9C3B2', w: 1.2 },\n      { d: C(R - 7), f: 'none', s: look === 'ma' ? GOLD : (look === 'noeud' ? '#EDE9DD' : (look === 'rose' ? '#EFEADC' : '#D5CFBE')), w: look === 'ma' ? 1.8 : (look === 'noeud' || look === 'rose' ? 2.5 : 1) },\n      { d: C(R * 0.32), f: 'rgba(190,184,168,0.35)' }\n    ];\n  }\n  function stemShapes(R) {\n    return [\n      { d: C(R), f: 'rgba(252,251,246,0.62)', s: '#C9C3B2', w: 1.2 },\n      { d: C(R - 6), f: 'none', s: '#D5CFBE', w: 1 },\n      { d: C(R * 0.45), f: 'none', s: '#C9C3B2', w: 1 },\n      { d: C(R * 0.16), f: '#D8D2C2' }\n    ];\n  }\n  function mugShapes(R, look) {\n    return [\n      { d: C(11.5, R + 11, 0), f: 'none', s: '#DAD4C3', w: 4.5 },\n      { d: C(11.5, R + 11, 0), f: 'none', s: '#C4BEAC', w: 1 },\n      { d: C(R), f: '#FCFBF6', s: RULE, w: 1 },\n      { d: C(R - 6), f: 'none', s: look === 'gold' ? GOLD : (look === 'noeud' ? '#EDE9DD' : '#D8D2C2'), w: look === 'gold' ? 1.6 : 2.2 },\n      { d: C(R * 0.72), f: '#F1EDE0' }\n    ];\n  }\n  function bowlShapes(R) {\n    return [\n      { d: C(R), f: '#FAF8F1', s: RULE, w: 1.2 },\n      { d: C(R * 0.84), f: '#F1ECDD' },\n      { d: C(R * 0.5), f: '#E9E3D1' }\n    ];\n  }\n  var shapeCache = {};\n  function shapesFor(p) {\n    if (shapeCache[p.id]) return shapeCache[p.id];\n    var R = p.d / 2;\n    var s;\n    switch (p.shape) {\n      case 'plate': s = plate(R, p.look); break;\n      case 'glass': s = glassShapes(R, p.look); break;\n      case 'stem': s = stemShapes(R); break;\n      case 'mug': s = mugShapes(R, p.look); break;\n      case 'bowl': s = bowlShapes(R); break;\n      case 'footed': s = bowlShapes(R).concat([{ d: C(R - 5), f: 'none', s: GOLD, w: 2 }]); break;\n      case 'crown': s = plate(R, 'plain').concat([{ d: C(R * 0.8), f: 'none', s: '#E4DECC', w: 7 }, { d: C(R * 0.8), f: 'none', s: '#D2CBB6', w: 1 }]); break;\n      case 'cake': s = [\n        { d: C(R + 16), f: '#F3EFE2', s: RULE, w: 1 },\n        { d: C(R), f: '#FCFBF6', s: RULE, w: 1 },\n        { d: C(R * 0.66), f: 'none', s: WELL, w: 1.6 },\n        { d: C(R - 6), f: 'none', s: '#D8D2C2', w: 1 }\n      ]; break;\n      case 'oval': s = [\n        { d: E(p.d / 2, p.d2 / 2), f: '#FCFBF6', s: RULE, w: 1 },\n        { d: E(p.d / 2 - 8, p.d2 / 2 - 8), f: 'none', s: '#D8D2C2', w: 1 },\n        { d: E(p.d / 2 * 0.78, p.d2 / 2 * 0.72), f: 'none', s: WELL, w: 1.6 }\n      ]; break;\n      case 'carafe': s = [\n        { d: C(60), f: '#FAF8F1', s: '#C9C3B2', w: 1.2 },\n        { d: C(40), f: 'none', s: '#DDD7C6', w: 1 },\n        { d: C(24), f: '#F0EBDC', s: '#C9C3B2', w: 1 },\n        { d: C(11), f: '#E2DBC8' }\n      ]; break;\n      case 'candle': s = [\n        { d: C(50), f: '#FCFBF6', s: RULE, w: 1 },\n        { d: C(40), f: 'none', s: '#D8D2C2', w: 1 },\n        { d: C(16), f: '#F7F3E7', s: '#D8D2C2', w: 1 },\n        { d: C(3.5), f: '#3A3226' }\n      ]; break;\n      case 'taper': s = [\n        { d: C(15), f: '#F7F3E7', s: '#D8D2C2', w: 1 },\n        { d: C(3), f: '#3A3226' }\n      ]; break;\n      case 'candlejar': s = [\n        { d: C(45), f: 'rgba(252,251,246,0.72)', s: '#C9C3B2', w: 1.2 },\n        { d: C(38), f: '#F4EFE2' },\n        { d: C(4), f: '#3A3226' }\n      ]; break;\n      case 'vase': s = [\n        { d: C(R), f: '#FAF8F1', s: '#C9C3B2', w: 1.2 },\n        { d: C(R * 0.62), f: '#EAE3D0' },\n        { d: C(R * 0.4), f: '#DFD7C1' }\n      ]; break;\n      default: s = [{ d: C(R), f: '#FCFBF6', s: RULE, w: 1 }];\n    }\n    shapeCache[p.id] = s;\n    return s;\n  }\n  function maxR(p) {\n    if (p.shape === 'oval') return p.d / 2 + 5;\n    if (p.shape === 'mug') return p.d / 2 + 24;\n    if (p.shape === 'cake') return p.d / 2 + 18;\n    if (p.shape === 'carafe') return 62;\n    return p.d / 2;\n  }\n  function pathsMarkup(shapes, minW) {\n    var out = '';\n    for (var i = 0; i < shapes.length; i++) {\n      var sp = shapes[i];\n      out += '<path d=\"' + sp.d + '\" fill=\"' + (sp.f || 'none') + '\"' +\n        (sp.fr ? ' fill-rule=\"' + sp.fr + '\"' : '') +\n        (sp.s ? ' stroke=\"' + sp.s + '\"' : '') +\n        (sp.w ? ' stroke-width=\"' + (minW ? Math.max(sp.w, minW) : sp.w) + '\"' : '') +\n        (sp.o ? ' opacity=\"' + sp.o + '\"' : '') + '></path>';\n    }\n    return out;\n  }\n  function thumbMarkup(p) {\n    if (p.img) return '<img class=\"ctc-card__thumb\" src=\"' + esc(p.img) + '\" alt=\"' + esc(p.name) + '\" loading=\"lazy\">';\n    var R = maxR(p) + 10;\n    var k = (32 - 2) / R;\n    return '<svg class=\"ctc-card__thumb\" viewBox=\"0 0 64 64\" aria-hidden=\"true\"><g transform=\"translate(32 32) scale(' + k.toFixed(3) + ')\">' + pathsMarkup(shapesFor(p), 0.9 / k) + '</g></svg>';\n  }\n  /* Rotation (deg) appliquee au rendu de certaines pieces dont la photo n'a pas\n     la bonne orientation (ex Apolline : plat ovale photographie en portrait ->\n     90 pour l'afficher a l'horizontale). Image centree en (0,0) : rotate autour\n     de l'origine = rotation sur place, sans casser le drag (translate exterieur). */\n  var PIECE_ROTATE = { 'apolline-platter': 90 };\n\n  function pieceInner(p, winter, darkGlass) {\n    if (p.img) {\n      /* w = diametre reel ; h conserve le ratio du fichier (photos de profil\n         detourees pour verres/tasses/centre : hauteur naturelle, pas d'ecrasement) */\n      var w = p.d;\n      var h = p.d2 || (p.iw && p.ih ? Math.round(w * p.ih / p.iw) : w);\n      /* verres transparents (photos sur fond blanc non detourees) : multiply fait\n         disparaitre le blanc sur la nappe et conserve les nuances du verre */\n      var blend = (p.shape === 'glass' || p.shape === 'stem') && !(winter && p.id === 'noeud-noeud-tumbler') ? (darkGlass ? ' filter=\"url(#ctcGlassOnDark)\"' : ' style=\"mix-blend-mode:multiply\"') : '';\n      var img = '<image href=\"' + esc(p.img) + '\" x=\"' + (-w / 2) + '\" y=\"' + (-h / 2) + '\" width=\"' + w + '\" height=\"' + h + '\"' + blend + '></image>';\n      var rot = PIECE_ROTATE[p.id];\n      return rot ? '<g transform=\"rotate(' + rot + ')\">' + img + '</g>' : img;\n    }\n    return pathsMarkup(shapesFor(p));\n  }\n\n  /* Hauteur de rendu d'une piece (mm) : ovale explicite, sinon ratio naturel\n     du fichier image (photos de profil), sinon disque (d). */\n  function pieceH(p) {\n    if (p.d2) return p.d2;\n    if (p.img && p.iw && p.ih) return Math.round(p.d * p.ih / p.iw);\n    return p.d;\n  }\n  /* Couverts de mariage : service a la francaise (2 fourchettes a gauche,\n     couteau + cuillere a soupe a droite, cuillere a dessert au-dessus).\n     Rendu argente via le gradient ctcSilver (DEFS). cu.r = rotation, cu.k = echelle. */\n  var SILVER_EDGE = '#A8A193', SILVER_FILL = 'url(#ctcSilver)';\n  var FORK_SHAPES = [\n    { d: RR(-23, -120, 46, 78, 16) + ' ' + RR(-15.4, -114, 5.2, 58, 2.6) + ' ' + RR(-2.6, -114, 5.2, 58, 2.6) + ' ' + RR(10.2, -114, 5.2, 58, 2.6), f: SILVER_FILL, s: SILVER_EDGE, w: 0.8, fr: 'evenodd' },\n    { d: 'M -15 -48 C -9 -24 -6.5 -12 -6.5 2 L 6.5 2 C 6.5 -12 9 -24 15 -48 Q 0 -40 -15 -48 Z', f: SILVER_FILL, s: SILVER_EDGE, w: 0.8 },\n    { d: 'M -6.5 0 C -7.5 40 -8.5 78 -7.5 102 C -7 112 7 112 7.5 102 C 8.5 78 7.5 40 6.5 0 Z', f: SILVER_FILL, s: SILVER_EDGE, w: 0.8 }\n  ];\n  var KNIFE_SHAPES = [\n    { d: 'M -8.5 4 L -8.5 -72 C -8.5 -108 -3 -122 0.5 -122 C 5 -116 8.5 -92 8.5 -64 L 8.5 4 Z', f: SILVER_FILL, s: SILVER_EDGE, w: 0.8 },\n    { d: 'M -7 2 C -8 44 -8.5 82 -7.5 104 C -7 113 7 113 7.5 104 C 8.5 82 8 44 7 2 Z', f: SILVER_FILL, s: SILVER_EDGE, w: 0.8 }\n  ];\n  var SPOON_SHAPES = [\n    { d: 'M 0 -114 C 12.5 -114 17 -99 17 -85 C 17 -69 9.5 -59 5.5 -55 L 6.5 0 C 7.5 42 8 80 7.2 102 C 6.8 112 -6.8 112 -7.2 102 C -8 80 -7.5 42 -6.5 0 L -5.5 -55 C -9.5 -59 -17 -69 -17 -85 C -17 -99 -12.5 -114 0 -114 Z', f: SILVER_FILL, s: SILVER_EDGE, w: 0.8 },\n    { d: 'M 0 -106 C 8.5 -106 11.5 -96 11.5 -85 C 11.5 -74 6.5 -66 0 -66 C -6.5 -66 -11.5 -74 -11.5 -85 C -11.5 -96 -8.5 -106 0 -106 Z', f: 'none', s: '#B8B2A4', w: 0.7 }\n  ];\n  /* img = cle dans config.cutleryImgs (photos reelles detourees, prioritaires\n     sur les silhouettes SVG) ; iw/ih = taille de rendu en mm de l'image.\n     Les POSITIONS sont calculees a chaque rendu selon le rayon de la plus\n     grande assiette choisie (dressage a la francaise, cf. buildSetting). */\n  var CUTLERY_DEFS = {\n    fork:  { shapes: FORK_SHAPES,  img: 'fork',  iw: 31, ih: 210 },\n    knife: { shapes: KNIFE_SHAPES, img: 'knife', iw: 24, ih: 228 },\n    spoon: { shapes: SPOON_SHAPES, img: 'spoon', iw: 48, ih: 205 }\n  };\n  function merge(def, pos) { var o = { shapes: def.shapes, img: def.img, iw: def.iw, ih: def.ih }; for (var k in pos) o[k] = pos[k]; return o; }\n  /* Regles verifiees (la-carafe.fr, vessiere-cristaux.fr, lepetitbroc.fr) :\n     couverts au ras de l'assiette (fourchettes a gauche, couteau puis cuillere\n     a droite), couverts a dessert horizontaux au-dessus (cuillere bol a gauche),\n     assiette a pain au-dessus des fourchettes a gauche, verres en diagonale\n     au-dessus a droite (le plus grand d'abord), tasse a droite des verres. */\n  function buildCutlery(Rp) {\n    var GAP = 18;\n    var fx = -(Rp + GAP + 15);\n    var kx = Rp + GAP + 12;\n    return [\n      merge(CUTLERY_DEFS.fork,  { x: fx, y: 8 }),\n      merge(CUTLERY_DEFS.fork,  { x: fx - 46, y: 12, k: 0.86 }),\n      merge(CUTLERY_DEFS.knife, { x: kx, y: 8 }),\n      merge(CUTLERY_DEFS.spoon, { x: kx + 44, y: 10, k: 0.94 }),\n      merge(CUTLERY_DEFS.spoon, { x: 0, y: -(Rp + 34), r: -90, k: 0.62 })\n    ];\n  }\n  function cutleryInner(cu, imgs) {\n    var u = imgs && cu.img && imgs[cu.img];\n    if (u) return '<image href=\"' + esc(u) + '\" x=\"' + (-cu.iw / 2) + '\" y=\"' + (-cu.ih / 2) + '\" width=\"' + cu.iw + '\" height=\"' + cu.ih + '\"></image>';\n    return pathsMarkup(cu.shapes);\n  }\n  var DEFS =\n    '<filter id=\"ctcShP\" x=\"-40%\" y=\"-40%\" width=\"180%\" height=\"180%\"><feDropShadow dx=\"0\" dy=\"3\" stdDeviation=\"4.5\" flood-color=\"#42392a\" flood-opacity=\"0.30\"/></filter>' +\n    '<filter id=\"ctcShC\" x=\"-40%\" y=\"-40%\" width=\"180%\" height=\"180%\"><feDropShadow dx=\"0\" dy=\"4\" stdDeviation=\"6\" flood-color=\"#42392a\" flood-opacity=\"0.28\"/></filter>' +\n    '<filter id=\"ctcShT\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\"><feDropShadow dx=\"0\" dy=\"12\" stdDeviation=\"20\" flood-color=\"#3a3226\" flood-opacity=\"0.20\"/></filter>' +\n    '<radialGradient id=\"ctcVig\" cx=\"50%\" cy=\"42%\" r=\"80%\"><stop offset=\"55%\" stop-color=\"#FFFDF6\" stop-opacity=\"0.10\"/><stop offset=\"100%\" stop-color=\"#3A3226\" stop-opacity=\"0.13\"/></radialGradient>' +\n    '<linearGradient id=\"ctcSilver\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\"><stop offset=\"0\" stop-color=\"#DAD5CA\"/><stop offset=\"0.42\" stop-color=\"#C2BCAE\"/><stop offset=\"0.55\" stop-color=\"#D3CDC0\"/><stop offset=\"1\" stop-color=\"#B4AE9F\"/></linearGradient>' +\n    '<pattern id=\"ctcWood\" width=\"260\" height=\"1600\" patternUnits=\"userSpaceOnUse\"><rect width=\"260\" height=\"1600\" fill=\"#CBB28D\"/><path d=\"M0 0 V1600\" stroke=\"#B2966C\" stroke-width=\"4\"/><path d=\"M0 800 H260\" stroke=\"#B2966C\" stroke-width=\"3\" opacity=\"0.7\"/><path d=\"M70 0 V1600 M150 0 V1600 M210 0 V1600\" stroke=\"#BFA57C\" stroke-width=\"1.6\" opacity=\"0.55\"/></pattern>' +\n    '<pattern id=\"ctcGrass\" width=\"90\" height=\"90\" patternUnits=\"userSpaceOnUse\"><rect width=\"90\" height=\"90\" fill=\"#A4AF93\"/><path d=\"M12 20 l6 -12 M40 60 l6 -12 M70 30 l6 -12 M24 78 l6 -12 M60 12 l5 -10 M82 70 l5 -10\" stroke=\"#93A080\" stroke-width=\"2.5\" opacity=\"0.7\" stroke-linecap=\"round\"/><path d=\"M30 40 l5 -10 M52 84 l5 -10 M8 60 l5 -10\" stroke=\"#AEB99E\" stroke-width=\"2.5\" opacity=\"0.8\" stroke-linecap=\"round\"/></pattern>' +\n    /* texture nappe : tissage de lin (fils chaine clairs + trame sombres) + grain fin -> aspect tissu realiste sur l'aplat de couleur */\n    '<pattern id=\"ctcLinen\" patternUnits=\"userSpaceOnUse\" width=\"20\" height=\"20\"><path d=\"M0 5 h20 M0 15 h20\" stroke=\"#5b5040\" stroke-width=\"3\" stroke-opacity=\"0.06\"/><path d=\"M5 0 v20 M15 0 v20\" stroke=\"#ffffff\" stroke-width=\"3\" stroke-opacity=\"0.10\"/></pattern>' +\n    '<filter id=\"ctcLinenGrain\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.09\" numOctaves=\"2\" seed=\"5\" stitchTiles=\"stitch\" result=\"n\"/><feColorMatrix in=\"n\" type=\"matrix\" values=\"0 0 0 0 0.3 0 0 0 0 0.27 0 0 0 0 0.2 0 0 0 0.35 0\"/></filter>';\n\n  function banquetLayout(g) {\n    var nb = Math.ceil(g / 2), nt = g - nb, sp = 720;\n    var L = Math.max(1800, Math.max(nb, nt) * sp + 260);\n    var seats = [];\n    var row = function (n, y, rot) {\n      var xs = [];\n      for (var i = 0; i < n; i++) xs.push((i - (n - 1) / 2) * sp);\n      xs.sort(function (a, b) { return Math.abs(a) - Math.abs(b); });\n      xs.forEach(function (x) { seats.push({ x: x, y: y, rot: rot }); });\n    };\n    row(nb, 430, 0);\n    row(nt, -430, 180);\n    return { kind: 'banquet', L: L, seats: seats };\n  }\n  function roundLayout(g) {\n    /* DELTA-round-table : sp = espacement d'arc AU RAYON DES PLACES (900mm\n       evite le chevauchement des elements interieurs en resserrant vers le centre) */\n    var sp = 900;\n    var Rs = Math.max(560, g * sp / (2 * Math.PI));\n    /* rebord de nappe serre autour des places (retour Charles : trop de vide au bord) */\n    var Rt = Rs + 250;\n    var seats = [];\n    for (var i = 0; i < g; i++) {\n      var th = Math.PI / 2 + i * 2 * Math.PI / g;\n      seats.push({ x: +(Rs * Math.cos(th)).toFixed(1), y: +(Rs * Math.sin(th)).toFixed(1), rot: +(th * 180 / Math.PI - 90).toFixed(2) });\n    }\n    return { kind: 'round', Rt: Rt, seats: seats };\n  }\n\n  var CLOTHS = [{ k: 'charcoal', c: '#111110' }, { k: 'white', c: '#FCFBF8' }, { k: 'ivory', c: '#F0EBDD' }, { k: 'sage', c: '#AEB59E' }, { k: 'blush', c: '#E4D0C6' }, { k: 'taupe', c: '#CBBFA9' }, { k: 'burgundy', c: '#6C1F2F' }, { k: 'forest', c: '#30483B' }, { k: 'noir', c: '#17130F' }];\n  var RUNNERS = [{ k: 'none' }, { k: 'white', c: '#FCFBF8' }, { k: 'ivory', c: '#F0EBDD' }, { k: 'sage', c: '#AEB59E' }, { k: 'blush', c: '#E4D0C6' }, { k: 'taupe', c: '#CBBFA9' }, { k: 'burgundy', c: '#6C1F2F' }, { k: 'forest', c: '#30483B' }, { k: 'noir', c: '#17130F' }];\n  var FLOORS = [{ k: 'cream', c: '#FAF9F5' }, { k: 'porcelain', c: '#F1EEE7' }, { k: 'parquet', c: 'url(#ctcWood)' }, { k: 'grass', c: 'url(#ctcGrass)' }, { k: 'noir', c: '#26221E' }];\n\n  var TABLE_SCENE_DEFS =\n    '<filter id=\"ctcWinterPieceShadow\" x=\"-40%\" y=\"-40%\" width=\"180%\" height=\"190%\"><feDropShadow dx=\"5\" dy=\"9\" stdDeviation=\"7\" flood-color=\"#171410\" flood-opacity=\".28\"/></filter>' +\n    // Extract the photographed glass edges into alpha instead of inverting its opaque background.\n    '<filter id=\"ctcGlassOnDark\" color-interpolation-filters=\"sRGB\"><feColorMatrix type=\"matrix\" values=\"0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  -.2126 -.7152 -.0722 0 1\"/><feComponentTransfer><feFuncA type=\"linear\" slope=\"3\" intercept=\"-.06\"/></feComponentTransfer><feComposite in2=\"SourceAlpha\" operator=\"in\"/></filter>' +\n    '<filter id=\"ctcWinterCentreShadow\" x=\"-40%\" y=\"-40%\" width=\"180%\" height=\"190%\"><feDropShadow dx=\"9\" dy=\"13\" stdDeviation=\"9\" flood-color=\"#171410\" flood-opacity=\".32\"/></filter>' +\n    '<filter id=\"ctcWinterShadow\" x=\"-30%\" y=\"-40%\" width=\"170%\" height=\"210%\"><feDropShadow dx=\"45\" dy=\"100\" stdDeviation=\"65\" flood-color=\"#17130f\" flood-opacity=\".48\"/></filter>' +\n    '<filter id=\"ctcWeave\" x=\"0\" y=\"0\" width=\"100%\" height=\"100%\"><feTurbulence type=\"fractalNoise\" baseFrequency=\".48 .32\" numOctaves=\"3\" seed=\"17\"/><feColorMatrix type=\"saturate\" values=\"0\"/><feComponentTransfer><feFuncA type=\"linear\" slope=\".035\"/></feComponentTransfer><feBlend in=\"SourceGraphic\" mode=\"soft-light\"/></filter>' +\n    '<linearGradient id=\"ctcWinterLight\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\".8\"><stop stop-color=\"#fffdf3\" stop-opacity=\".13\"/><stop offset=\".4\" stop-color=\"#fffdf3\" stop-opacity=\"0\"/><stop offset=\"1\" stop-color=\"#171c22\" stop-opacity=\".22\"/></linearGradient>' +\n    '<linearGradient id=\"ctcWax\"><stop stop-color=\"#d6c9ad\"/><stop offset=\".36\" stop-color=\"#fff8e5\"/><stop offset=\"1\" stop-color=\"#e6d8ba\"/></linearGradient>' +\n    '<radialGradient id=\"ctcFlameGlow\"><stop stop-color=\"#f6c87c\" stop-opacity=\".23\"/><stop offset=\"1\" stop-color=\"#f6c87c\" stop-opacity=\"0\"/></radialGradient>' +\n    '<linearGradient id=\"ctcDrop\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop stop-color=\"#20170e\" stop-opacity=\".05\"/><stop offset=\".2\" stop-color=\"#20170e\" stop-opacity=\".21\"/><stop offset=\"1\" stop-color=\"#20170e\" stop-opacity=\".36\"/></linearGradient>' +\n    '<linearGradient id=\"ctcFold\"><stop stop-color=\"#fff\" stop-opacity=\"0\"/><stop offset=\".43\" stop-color=\"#fff\" stop-opacity=\".15\"/><stop offset=\".56\" stop-color=\"#35281b\" stop-opacity=\".13\"/><stop offset=\"1\" stop-color=\"#35281b\" stop-opacity=\"0\"/></linearGradient>' +\n    '<pattern id=\"ctcWinterWood\" width=\"1700\" height=\"750\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(-24)\">' +\n    '<rect width=\"1700\" height=\"750\" fill=\"#957d67\"/>' +\n    '<path d=\"M0 0H980V150H0Z M510 300H1700V450H510Z M0 600H730V750H0Z\" fill=\"#9b836d\"/>' +\n    '<path d=\"M0 150H510V300H0Z M1120 450H1700V600H1120Z\" fill=\"#8f7762\"/>' +\n    '<path d=\"M0 0H1700M0 150H1700M0 300H1700M0 450H1700M0 600H1700M0 750H1700M980 0V150M510 150V300M1350 300V450M1120 450V600M730 600V750\" fill=\"none\" stroke=\"#48372a\" stroke-opacity=\".33\" stroke-width=\"3\"/>' +\n    '<path d=\"M0 38Q270 5 570 42T1100 34T1700 41M0 93Q380 120 730 86T1700 94M0 218Q540 183 830 215T1700 209M0 361Q280 333 590 366T1700 357M0 518Q330 547 660 515T1700 512M0 673Q590 641 850 675T1700 680\" fill=\"none\" stroke=\"#503b2b\" stroke-opacity=\".14\" stroke-width=\"2\"/>' +\n    '</pattern>';\n\n  /* Textile details keep their physical scale as the table grows. */\n  function textileFinish(lay, finish, texture) {\n    if (finish !== 'hemstitch' && (finish !== 'damask' || !texture)) return '';\n    var round = lay.kind === 'round';\n    function outline(inset) {\n      return round ? '<circle r=\"' + (lay.Rt - inset) + '\"' : '<rect x=\"' + (-lay.L / 2 + inset) + '\" y=\"' + (-650 + inset) + '\" width=\"' + (lay.L - inset * 2) + '\" height=\"' + (1300 - inset * 2) + '\" rx=\"24\"';\n    }\n    if (finish === 'damask') {\n      return '<g data-ctc-textile=\"damask\"><defs><pattern id=\"ctcDamaskTile\" width=\"1000\" height=\"1000\" patternUnits=\"userSpaceOnUse\"><image href=\"' + esc(texture) + '\" width=\"1000\" height=\"1000\"/></pattern></defs>' + outline(12) + ' fill=\"url(#ctcDamaskTile)\" opacity=\".76\" style=\"mix-blend-mode:soft-light\"/></g>';\n    }\n    return '<g data-ctc-textile=\"hemstitch\" fill=\"none\">' +\n      outline(32) + ' stroke=\"#a69b88\" stroke-opacity=\".48\" stroke-width=\"5\" stroke-dasharray=\"2 7\"/>' +\n      outline(27) + ' stroke=\"#fffcf3\" stroke-opacity=\".8\" stroke-width=\"1.4\"/>' +\n      outline(37) + ' stroke=\"#fffcf3\" stroke-opacity=\".65\" stroke-width=\"1.4\"/>' +\n      outline(10) + ' stroke=\"#b4aa98\" stroke-opacity=\".28\" stroke-width=\"1\"/></g>';\n  }\n\n  function tableSupports(lay, texture, groundOpacity) {\n    var round = lay.kind === 'round', half = round ? lay.Rt : lay.L / 2;\n    /* Fixed dining height, inset supports, modestly wider on larger tops. */\n    var front = round ? lay.Rt * .52 : 360, spread = half * (round ? .63 : .74);\n    var legWidth = Math.min(1.7, 1.35 + Math.max(0, half - 900) / 4000);\n    var supportXs = !round && lay.L >= 3600 ? [-spread, 0, spread] : [-spread, spread];\n    var floorY = 940, out = '<defs><linearGradient id=\"ctcLegWood\"><stop stop-color=\"#100f0d\"/><stop offset=\".28\" stop-color=\"#262521\"/><stop offset=\".46\" stop-color=\"#1b1b18\"/><stop offset=\".8\" stop-color=\"#181612\"/><stop offset=\"1\" stop-color=\"#0e0d0b\"/></linearGradient><filter id=\"ctcGroundBlur\" x=\"-30%\" y=\"-60%\" width=\"160%\" height=\"220%\"><feGaussianBlur stdDeviation=\"52\"/></filter></defs><g data-ctc-supports=\"true\">';\n    if (texture) out += '<defs><pattern id=\"ctcLegGrain\" x=\"-72\" width=\"360\" height=\"680\" patternUnits=\"userSpaceOnUse\"><image href=\"' + esc(texture) + '\" width=\"360\" height=\"680\" preserveAspectRatio=\"none\"/></pattern></defs>';\n    out += '<ellipse cx=\"55\" cy=\"' + floorY + '\" rx=\"' + (half * .92) + '\" ry=\"' + (round ? lay.Rt * .82 : 600) + '\" fill=\"#17120e\" opacity=\"' + groundOpacity + '\" filter=\"url(#ctcGroundBlur)\"/>';\n    [-front, front].forEach(function (anchorY) {\n      var sy = anchorY - 55;\n      supportXs.forEach(function (sx) {\n        var foot = sy + floorY;\n        out += '<ellipse cx=\"' + (sx+9) + '\" cy=\"' + (foot+5) + '\" rx=\"' + (63 * legWidth) + '\" ry=\"17\" fill=\"#16110c\" opacity=\".26\"/>';\n        var profile = 'M-42 0 H42 V230 Q42 254 29 264 L29 308 Q47 317 45 335 L32 352 C31 376 67 390 68 429 C71 472 42 496 26 508 L26 535 Q44 542 42 558 C41 569 30 576 25 581 C24 599 44 611 44 632 Q44 650 30 657 L30 670 Q0 688 -30 670 L-30 657 Q-44 650 -44 632 C-44 611 -24 599 -25 581 C-30 576 -41 569 -42 558 Q-44 542 -26 535 L-26 508 C-42 496 -71 472 -68 429 C-67 390 -31 376 -32 352 L-45 335 Q-47 317 -29 308 L-29 264 Q-42 254 -42 230 Z';\n        out += '<g transform=\"translate(' + sx + ' ' + sy + ') scale(' + legWidth + ' ' + (floorY / 680) + ')\" data-ctc-leg=\"turned\"><path d=\"' + profile + '\" fill=\"url(#ctcLegWood)\"/>';\n        if (texture) out += '<path d=\"' + profile + '\" fill=\"url(#ctcLegGrain)\" opacity=\".18\"/>';\n        [320,346,538,570,657].forEach(function (cy) {\n          out += '<path d=\"M-28 ' + cy + ' Q0 ' + (cy+7) + ' 28 ' + cy + '\" fill=\"none\" stroke=\"#978c74\" stroke-opacity=\".08\" stroke-width=\"1.5\"/>';\n        });\n        out += '</g>';\n      });\n    });\n    return out + '</g>';\n  }\n\n  function banquetSideDrapes(lay, cloth, texture, pale, longDrop) {\n    var out = '<g data-ctc-side-drapes=\"true\"' + (longDrop ? ' transform=\"translate(0 62.5) scale(1 1.1)\"' : '') + '>', half = lay.L / 2;\n    [-1, 1].forEach(function (side) {\n      var id = side < 0 ? 'ctcDrapeLeft' : 'ctcDrapeRight';\n      var path = 'M0 -625 C-12 -430 -8 292 0 608 L36 1035 Q67 1003 73 910 C56 575 57 300 46 65 Q39 -260 0 -625 Z';\n      out += '<g transform=\"translate(' + (side*half) + ' 0) scale(' + side + ' 1)\"><defs><clipPath id=\"' + id + '\"><path d=\"' + path + '\"/></clipPath></defs><g clip-path=\"url(#' + id + ')\"><path d=\"' + path + '\" fill=\"' + cloth + '\"/>';\n      if (texture) out += '<image href=\"' + esc(texture) + '\" x=\"-12\" y=\"-650\" width=\"105\" height=\"1600\" preserveAspectRatio=\"none\" opacity=\".5\" style=\"mix-blend-mode:soft-light\"/>';\n      out += '<path d=\"' + path + '\" fill=\"url(#ctcDrop)\" opacity=\"' + (pale ? .22 : 1) + '\"/><path d=\"M8 -385 C13 -30 19 473 49 1002\" fill=\"none\" stroke=\"#ded3be\" stroke-opacity=\".065\" stroke-width=\"8\"/></g></g>';\n    });\n    return out + '</g>';\n  }\n\n  function dressedTable(lay, cloth, runner, materials) {\n    var texture = materials.linen, drape = materials.drape, finish = materials.finish, damask = materials.damask, legTexture = materials.legs;\n    var pale = parseInt(cloth.slice(1,3),16) * .2126 + parseInt(cloth.slice(3,5),16) * .7152 + parseInt(cloth.slice(5,7),16) * .0722 > 155;\n    var clothBlend = pale ? 'multiply' : 'soft-light';\n    var round = lay.kind === 'round', x = round ? -lay.Rt : -lay.L / 2;\n    var w = -x * 2, y = round ? -lay.Rt : -650, h = -y * 2;\n    var top = round ? '<ellipse cx=\"0\" cy=\"0\" rx=\"' + lay.Rt + '\" ry=\"' + lay.Rt + '\"' : '<path d=\"M ' + (x+40) + ' ' + y + ' Q 0 ' + (y+12) + ' ' + (-x-40) + ' ' + y + ' Q ' + (-x+5) + ' ' + y + ' ' + (-x) + ' ' + (y+45) + ' L ' + (-x+4) + ' 608 Q ' + (-x) + ' 657 ' + (-x-45) + ' 649 Q 0 638 ' + (x+40) + ' 650 Q ' + (x-5) + ' 653 ' + x + ' 610 L ' + (x-3) + ' ' + (y+48) + ' Q ' + (x-5) + ' ' + y + ' ' + (x+40) + ' ' + y + ' Z\"';\n    var edge;\n    if (round) {\n      edge = 'M ' + x + ' 0 A ' + lay.Rt + ' ' + lay.Rt + ' 0 0 0 ' + (-x) + ' 0 L ' + (-x + 24) + ' 310 A ' + (lay.Rt + 24) + ' ' + lay.Rt + ' 0 0 1 ' + (x - 24) + ' 310 Z';\n    } else {\n      edge = 'M ' + x + ' 594 Q 0 625 ' + (-x) + ' 594 C ' + (-x+8) + ' 690 ' + (-x+22) + ' 838 ' + (-x+38) + ' 920 Q ' + (-x-48) + ' 895 ' + (-x-125) + ' 843 C ' + (w*.2) + ' 805 ' + (w*.14) + ' 831 0 818 S ' + (x+160) + ' 805 ' + (x+118) + ' 846 Q ' + (x+45) + ' 891 ' + (x-34) + ' 925 C ' + (x-18) + ' 820 ' + (x-8) + ' 688 ' + x + ' 594 Z';\n    }\n    var out = '<g class=\"ctc-table-surface ctc-winter-table\">' + tableSupports(lay, legTexture, materials.groundOpacity) + (round ? '' : banquetSideDrapes(lay, cloth, drape || texture, pale, materials.longDrop)) + '<g transform=\"' + (round ? (materials.longDrop ? 'scale(1 1.16)' : '') : (materials.longDrop ? 'translate(0 -534) scale(1 1.9)' : 'translate(0 -216) scale(1 1.36)')) + '\"><path d=\"' + edge + '\" fill=\"' + cloth + '\"/>' +\n      '<path d=\"' + edge + '\" fill=\"url(#ctcDrop)\" opacity=\"' + (pale ? .22 : 1) + '\"/>';\n    out += '<clipPath id=\"ctcWinterDrape\"><path d=\"' + edge + '\"/></clipPath><g clip-path=\"url(#ctcWinterDrape)\"><path d=\"' + edge + '\" fill=\"' + cloth + '\"/>';\n    if (drape || texture) out += '<image href=\"' + esc(drape || texture) + '\" x=\"' + (x-30) + '\" y=\"' + (round ? 0 : 590) + '\" width=\"' + (w+60) + '\" height=\"' + (round ? -y+330 : 350) + '\" preserveAspectRatio=\"none\" opacity=\"' + (pale ? .32 : .8) + '\" style=\"mix-blend-mode:' + clothBlend + '\"/>';\n    if (!round) {\n      [-1, 1].forEach(function (side) {\n        var cx = side * (w / 2 - 18);\n        out += '<path d=\"M ' + cx + ' 620 C ' + (cx-side*12) + ' 705 ' + (cx-side*28) + ' 820 ' + (cx-side*60) + ' 898 L ' + (cx-side*37) + ' 908 C ' + (cx-side*6) + ' 808 ' + (cx+side*6) + ' 711 ' + cx + ' 620 Z\" fill=\"url(#ctcFold)\"/>';\n        out += '<path d=\"M ' + (cx-side*52) + ' 644 Q ' + (cx-side*68) + ' 738 ' + (cx-side*98) + ' 852\" fill=\"none\" stroke=\"#080807\" stroke-opacity=\".26\" stroke-width=\"5\"/>';\n      });\n    }\n    out += '<path d=\"' + edge + '\" fill=\"url(#ctcDrop)\" opacity=\"' + (pale ? .22 : 1) + '\"/></g>';\n    out += '</g>';\n    out += top + ' fill=\"' + cloth + '\"/>';\n    if (texture) out += '<clipPath id=\"ctcWinterCloth\">' + top + '/></clipPath><image href=\"' + esc(texture) + '\" x=\"' + x + '\" y=\"' + y + '\" width=\"' + w + '\" height=\"' + h + '\" preserveAspectRatio=\"xMidYMid slice\" clip-path=\"url(#ctcWinterCloth)\" opacity=\"' + (pale ? .32 : .72) + '\" style=\"mix-blend-mode:' + clothBlend + '\"/>';\n    out += textileFinish(lay, finish, damask);\n    out += top + ' fill=\"url(#ctcWinterLight)\" opacity=\"' + (pale ? '.15' : '.45') + '\"/>';\n    if (runner && runner.c) {\n      var rw=round?w*.82:w-4, rx=-rw/2;\n      var path='M '+rx+' -125 Q '+(-rw*.2)+' -140 0 -124 T '+(-rx)+' -126 L '+(-rx)+' 122 Q '+(rw*.2)+' 140 0 126 T '+rx+' 125 Z';\n      if (!round) {\n        [-1,1].forEach(function (side) {\n          var end=side*rw/2;\n          var tail='M '+end+' -125 L '+(end+side*23)+' 130 L '+(end+side*30)+' 338 Q '+(end+side*12)+' 363 '+end+' 325 L '+end+' 125 Z';\n          out += '<path d=\"'+tail+'\" fill=\"'+runner.c+'\"/><path d=\"'+tail+'\" fill=\"url(#ctcDrop)\" opacity=\"' + (pale ? .22 : 1) + '\"/>';\n        });\n      }\n      out += '<path d=\"'+path+'\" transform=\"translate(0 5)\" fill=\"#241a15\" opacity=\".12\"/><path d=\"'+path+'\" fill=\"'+runner.c+'\" stroke=\"#241a15\" stroke-opacity=\".12\" stroke-width=\"2\" filter=\"url(#ctcWeave)\"/>';\n      if (texture) out += '<clipPath id=\"ctcWinterRunner\"><path d=\"' + path + '\"/></clipPath><image href=\"' + esc(texture) + '\" x=\"' + rx + '\" y=\"-140\" width=\"' + rw + '\" height=\"290\" preserveAspectRatio=\"xMidYMid slice\" clip-path=\"url(#ctcWinterRunner)\" opacity=\".52\" style=\"mix-blend-mode:multiply\"/>';\n      out += '<path d=\"'+path+'\" fill=\"url(#ctcWinterLight)\"/>';\n      out += '<path d=\"M '+(rx+18)+' -105 Q 0 -115 '+(-rx-18)+' -106 M '+(rx+18)+' 105 Q 0 115 '+(-rx-18)+' 106\" fill=\"none\" stroke=\"#eee5d5\" stroke-opacity=\".2\" stroke-width=\"1.5\"/>';\n    }\n    return out+'</g>';\n  }\n\n  var COPY = {\n    steps: { presentation: 'Presentation plate', dinner: 'Dinner plate', dessert: 'Dessert plate', bread: 'Bread & butter plate', glasses: 'Glasses', cup: 'Cup & saucer', center: 'Table centre', table: 'The table' },\n    hints: { glasses: 'Choose up to two.', center: 'Added pieces can be dragged on the table.' },\n    none: 'None', edit: 'Edit', next: 'Continue', guests: 'guests',\n    guestsLess: 'Fewer guests', guestsMore: 'More guests', close: 'Close',\n    matching: 'matching', withSaucer: 'with saucer', pieces: 'pieces', perSetting: 'per setting',\n    oos: 'Out of stock', total: 'Total',\n    basketTitle: 'Your table', preTitle: 'Pre-order enquiry',\n    cta: 'Add to basket', preCta: 'Send pre-order request',\n    preNote: 'Quantities above stock are made to order in the atelier - allow 6 to 8 weeks from 8 pieces.',\n    addedToast: 'Added to basket - {n} pieces', preToast: 'Pre-order request noted',\n    emptyBasket: 'Your table is empty.',\n    cartErr: 'Some pieces could not be added to the basket.',\n    cartOos: 'Some pieces are out of stock or short on stock. You can pre-order them from the atelier.',\n    switchPre: 'Switch to pre-order',\n    coreMissing: 'Service temporarily unavailable, please try again.',\n    share: {\n      trigger: 'Save this table', title: 'Save your table',\n      lede: 'Enter your email and we will send you the link to reopen your table.',\n      nameField: 'First name (optional)', emailField: 'Email',\n      notice: 'By entering your email you will receive the link and our wedding updates.',\n      send: 'Send me the link', sending: 'Sending\u2026', sent: 'Check your inbox, we have sent you the link.',\n      errEmail: 'Please enter a valid email.', errSend: 'Something went wrong, please try again.'\n    },\n    pre: {\n      name: 'Full name', email: 'Email', phone: 'Phone',\n      ship: 'Shipping address', billdiff: 'Different billing address', bill: 'Billing address',\n      addr1: 'Address', addr2: 'Apartment, suite, etc. (optional)', zip: 'Postal code', city: 'City', country: 'Country',\n      nopay: 'No payment is required to send this request.',\n      err: 'Please provide your name, email, phone and shipping address.',\n      errSend: 'Something went wrong, please try again.',\n      minPieces: 'Pre-order starts at {n} pieces. Add more settings or guests.',\n      sending: 'Sending\u2026',\n      thanks: \"Thank you, we've received your request. We'll come back to you shortly.\"\n    }\n  };\n\n  var STEP_DEFS = [\n    { k: 'presentation', opt: true },\n    { k: 'dinner' },\n    { k: 'dessert' },\n    { k: 'bread', opt: true },\n    { k: 'glasses', multi: true },\n    { k: 'cup', opt: true },\n    { k: 'center', multi: true },\n    { k: 'table', guests: true }\n  ];\n\n  class TableComposer extends HTMLElement {\n    connectedCallback() {\n      if (this._init) return; this._init = true;\n      var read = function (el) { try { return JSON.parse(el.textContent); } catch (e) { return null; } };\n      var poolEl = this.querySelector('[data-ctc-pool]');\n      var cfgEl = this.querySelector('[data-ctc-config]');\n      this.cfg = (cfgEl && read(cfgEl)) || {};\n      var pool = ((poolEl && read(poolEl)) || []).filter(function (p) { return p && p.id && p.cat && p.d; });\n      pool.sort(function (a, b) { return (a.pos || 0) - (b.pos || 0); });\n      this.pool = pool;\n      this.byId = {};\n      pool.forEach(function (p) { this.byId[p.id] = p; }, this);\n      this.copy = Object.assign({}, COPY, this.cfg.copy || {});\n      this.copy.steps = Object.assign({}, COPY.steps, (this.cfg.copy || {}).steps || {});\n      this.copy.hints = Object.assign({}, COPY.hints, (this.cfg.copy || {}).hints || {});\n      this.copy.pre = Object.assign({}, COPY.pre, (this.cfg.copy || {}).pre || {});\n      this.money = this.cfg.moneyFormat || '{{amount }} \u20AC';\n      this.preEndpoint = this.cfg.preEndpoint || (window.CarronComposer && window.CarronComposer.defaultPreorderEndpoint) || 'https://prod.carron.paris/api/preorders/create';\n      this.minPieces = this.cfg.minPieces || 8;\n      this.isChristmas = this.cfg.visualTheme === 'christmas' || this.classList.contains('ctc--christmas');\n      this.source = this.cfg.source || 'wedding-composer';\n      this.defaultShape = this.cfg.tableShape === 'round' ? 'round' : 'banquet';\n      this.minG = this.cfg.minGuests || 2;\n      this.maxG = this.cfg.maxGuests || 40;\n      this.autoAdvance = !!this.cfg.autoAdvance;\n      this.showCutlery = this.cfg.showCutlery !== false;\n      this.cutleryImgs = this.cfg.cutleryImgs || null;\n      this.reduced = matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n      var d = this.cfg.defaults || {};\n      var has = function (id) { return id && this.byId[id] ? id : null; }.bind(this);\n      var CPOS = this.cfg.sceneDepth ? [[-130, 0], [-570, 45], [235, 70], [540, -30]] : [[0, -15], [-560, 25], [450, -35], [-260, -70], [260, 70]];\n      this.iidSeq = 0;\n      var centers = (d.centers || []).filter(function (id) { return this.byId[id]; }, this)\n        .map(function (id, i) { return { iid: ++this.iidSeq, pid: id, autoPosition: true, x: CPOS[i % CPOS.length][0], y: CPOS[i % CPOS.length][1] }; }, this);\n      this.state = {\n        step: 0, view: this.isChristmas ? 'table' : 'setting', shape: this.defaultShape,\n        guests: Math.max(this.minG, Math.min(this.maxG, this.cfg.defaultGuests || 10)),\n        cloth: CLOTHS.some(function (c) { return c.k === this.cfg.defaultCloth; }, this) ? this.cfg.defaultCloth : 'ivory',\n        runner: RUNNERS.some(function (r) { return r.k === this.cfg.defaultRunner; }, this) ? this.cfg.defaultRunner : 'none',\n        floor: FLOORS.some(function (f) { return f.k === this.cfg.defaultFloor; }, this) ? this.cfg.defaultFloor : 'cream',\n        decor: this.cfg.sceneDecor || 'none',\n        basketMode: 'basket',\n        sel: {\n          presentation: has(d.presentation), dinner: has(d.dinner), dessert: has(d.dessert), bread: has(d.bread),\n          cup: has(d.cup), saucer: null,\n          glasses: (d.glasses || []).filter(function (id) { return this.byId[id]; }, this).slice(0, this.isChristmas ? 4 : 2)\n        },\n        centers: centers\n      };\n\n      if (this.isChristmas && window.CarronChristmas) window.CarronChristmas.init(this);\n\n      /* table partagee : restaure une composition encodee dans l'URL (?table=) */\n      this._restoreFromUrl();\n      this.reflowCenters();\n      if (this.isChristmas && this.state.floor === 'grass') this.state.floor = 'parquet';\n\n      /* refs DOM */\n      this.svg = this.querySelector('[data-ctc-svg]');\n      this.world = this.querySelector('[data-ctc-world]');\n      this.defsEl = this.querySelector('[data-ctc-defs]');\n      this.barsEl = this.querySelector('[data-ctc-bars]');\n      this.stepsEl = this.querySelector('[data-ctc-steps]');\n      this.totalEl = this.querySelector('[data-ctc-total]');\n      this.countEl = this.querySelector('[data-ctc-count]');\n      this.toastHost = this.querySelector('[data-ctc-toast]');\n      this.modalHost = this.querySelector('[data-ctc-modal]');\n      if (!this.svg || !this.world) return;\n      if (this.defsEl) this.defsEl.innerHTML = DEFS + ((this.hasTableDepth() || this.isChristmas) ? TABLE_SCENE_DEFS : \"\") + (window.CarronTableScene ? window.CarronTableScene.defs : \"\");\n\n      this._bind();\n      if (this.isChristmas && window.CarronChristmas) window.CarronChristmas.bind(this);\n      this.vb = this.target();\n      this.renderStage();\n      this.renderRail();\n      this.renderFooter();\n      this.syncLinens();\n      var self = this;\n      requestAnimationFrame(function () { self.applyCam(); });\n    }\n\n    disconnectedCallback() {\n      removeEventListener('resize', this._onResize);\n      cancelAnimationFrame(this.raf); cancelAnimationFrame(this.iner);\n      clearTimeout(this.advT); clearTimeout(this.toastT); clearTimeout(this.landT);\n    }\n\n    /* ---------- events ---------- */\n    _bind() {\n      var self = this;\n      this._onResize = function () { self.applyCam(); };\n      addEventListener('resize', this._onResize);\n\n      /* molette = scroll de page (retour Charles 2026-07-17) : le zoom passe par les boutons +/-/Fit.\n         Souris : cliquer-glisser sur la scene = pan de la camera (le drag d'une piece du centre reste prioritaire) ; au tactile on ne pan pas (scroll de page naturel) */\n      this.svg.addEventListener('pointerdown', function (e) {\n        var g = e.target.closest ? e.target.closest('[data-iid]') : null;\n        if (g) { self._dragStart(e, g); return; }\n        if (e.pointerType === 'mouse' && e.button === 0 && self.vb) {\n          cancelAnimationFrame(self.raf);\n          self.pan = { sx: e.clientX, sy: e.clientY, vb: { x: self.vb.x, y: self.vb.y, w: self.vb.w, h: self.vb.h } };\n          try { self.svg.setPointerCapture(e.pointerId); } catch (err) {}\n          self.svg.classList.add('is-panning');\n        }\n      });\n      this.svg.addEventListener('pointermove', function (e) {\n        if (self.pan && self.cam) {\n          self.vb.x = self.pan.vb.x - (e.clientX - self.pan.sx) / self.cam.s;\n          self.vb.y = self.pan.vb.y - (e.clientY - self.pan.sy) / self.cam.sy;\n          self.applyCam();\n        }\n        self._dragMove(e);\n      });\n      this.svg.addEventListener('pointerup', function () { self.pan = null; self.svg.classList.remove('is-panning'); self._dragEnd(); });\n      this.svg.addEventListener('pointercancel', function () { self.pan = null; self.svg.classList.remove('is-panning'); self._dragEnd(); });\n      document.addEventListener('keydown', function (e) { if (e.key === 'Escape' && self.modalHost && self.modalHost.firstChild) self.closeModal(); });\n      this._hideChat();\n      this.svg.addEventListener('keydown', function (e) {\n        var el = e.target.closest('[data-iid]');\n        var delta = {ArrowLeft:[-20,0],ArrowRight:[20,0],ArrowUp:[0,-20],ArrowDown:[0,20]}[e.key];\n        if (!el || !delta) return;\n        e.preventDefault();\n        var c = self.state.centers.find(function (c) { return c.iid === Number(el.dataset.iid); });\n        var cl = self.clampC(c.x + delta[0], c.y + delta[1]);\n        c.autoPosition = false; c.x = cl.x; c.y = cl.y; el.setAttribute('transform', 'translate(' + c.x + ' ' + c.y + ')');\n      });\n      this.addEventListener('error', function (e) {\n        var src = e.target.getAttribute && (e.target.getAttribute('src') || e.target.getAttribute('href'));\n        if (!src) return;\n        var p = self.pool.find(function (p) { return p.img === src; });\n        if (!p) {\n          var materialKey = ['flowerAsset','floorTexture','linenTexture','drapeTexture','damaskTexture','legTexture'].find(function (key) { return src === self.cfg[key]; });\n          if (materialKey) { self.cfg[materialKey] = ''; self.renderStage(); }\n          return;\n        }\n        p.img = ''; self.renderStage(); self.renderRail();\n      }, true);\n\n      this.addEventListener('click', function (e) {\n        var t = e.target.closest ? e.target.closest('[data-ctc-act],[data-jump],[data-pick],[data-ctc-cloth],[data-ctc-runner],[data-ctc-floor],[data-ctc-shape],[data-ctc-decor]') : null;\n        if (!t) return;\n        if (t.hasAttribute('data-ctc-shape')) { self._setShape(t.getAttribute('data-ctc-shape')); return; }\n        if (t.getAttribute('data-ctc-act') === 'linens') { var lp = t.closest('.ctc-linens'); var op = lp.classList.toggle('is-open'); t.setAttribute('aria-expanded', op ? 'true' : 'false'); return; }\n        if (t.hasAttribute('data-jump')) { self.setStep(+t.getAttribute('data-jump')); return; }\n        if (t.hasAttribute('data-pick')) { self._onPick(t); return; }\n        if (t.hasAttribute('data-ctc-decor')) { self.state.decor = t.dataset.ctcDecor; self.renderStage(); self.syncLinens(); return; }\n        if (t.hasAttribute('data-ctc-cloth')) { self.state.cloth = t.getAttribute('data-ctc-cloth'); self.renderStage(); self.syncLinens(); return; }\n        if (t.hasAttribute('data-ctc-runner')) { self.state.runner = t.getAttribute('data-ctc-runner'); self.renderStage(); self.syncLinens(); return; }\n        if (t.hasAttribute('data-ctc-floor')) { self.state.floor = t.getAttribute('data-ctc-floor'); self.renderStage(); self.syncLinens(); return; }\n        var act = t.getAttribute('data-ctc-act');\n        if (act === 'next') self.setStep(Math.min(STEP_DEFS.length - 1, self.state.step + 1));\n        else if (act === 'gdec') self.setGuests(self.state.guests - 1);\n        else if (act === 'ginc') self.setGuests(self.state.guests + 1);\n        else if (act === 'zin') self.zoomBy(0.8);\n        else if (act === 'zout') self.zoomBy(1.25);\n        else if (act === 'fit') self.goCam(self.target());\n        else if (act === 'basket') self.openModal('basket');\n        else if (act === 'pre') self.openModal('pre');\n        else if (act === 'switch') self.openModal('pre');\n        else if (act === 'close') { if (e.target === t || t.classList.contains('ctc-modal__close')) self.closeModal(); }\n        else if (act === 'confirm') self._confirm();\n        else if (act === 'share') self.openShare();\n        else if (act === 'savetable') self._saveTable();\n      });\n    }\n\n    /* ---------- table partagee (etat encode dans l'URL, sans backend) ---------- */\n    _encodeState() {\n      var s = this.state;\n      var data = {\n        p: s.sel.presentation, d: s.sel.dinner, e: s.sel.dessert, b: s.sel.bread,\n        c: s.sel.cup, a: s.sel.saucer, g: s.sel.glasses,\n        x: s.centers.map(function (c) { return [c.pid, c.x, c.y]; }),\n        noel: this.isChristmas ? { options: s.options, alternate: s.alternate, selB: s.selB, roles: s.glassRoles } : undefined,\n        u: s.guests, cl: s.cloth, r: s.runner, f: s.floor, sh: s.shape, dc: s.decor\n      };\n      try { return encodeURIComponent(btoa(unescape(encodeURIComponent(JSON.stringify(data))))); }\n      catch (e) { return ''; }\n    }\n\n    _shareUrl() {\n      return location.origin + location.pathname + '?table=' + this._encodeState();\n    }\n\n    _restoreFromUrl() {\n      try {\n        var raw = new URLSearchParams(location.search).get('table');\n        if (!raw) return;\n        var data = JSON.parse(decodeURIComponent(escape(atob(decodeURIComponent(raw)))));\n        var sel = this.state.sel, self = this;\n        var pick = function (v) { return (v && self.byId[v]) ? v : null; };\n        ['p:presentation', 'd:dinner', 'e:dessert', 'b:bread', 'c:cup', 'a:saucer'].forEach(function (m) {\n          var kv = m.split(':'); if (kv[0] in data) sel[kv[1]] = pick(data[kv[0]]);\n        });\n        if (Array.isArray(data.g)) sel.glasses = data.g.filter(function (id) { return self.byId[id]; }).slice(0, this.isChristmas ? 4 : 2);\n        if (!sel.cup) sel.saucer = null;\n        if (Array.isArray(data.x)) {\n          this.state.centers = data.x.filter(function (c) { return c && self.byId[c[0]]; })\n            .map(function (c) { return { iid: ++self.iidSeq, pid: c[0], x: +c[1] || 0, y: +c[2] || 0 }; });\n        }\n        if (data.u) this.state.guests = Math.max(this.minG, Math.min(this.maxG, +data.u || 10));\n        if (CLOTHS.some(function (c) { return c.k === data.cl; })) this.state.cloth = data.cl;\n        if (RUNNERS.some(function (r) { return r.k === data.r; })) this.state.runner = data.r;\n        if (FLOORS.some(function (f) { return f.k === data.f; })) this.state.floor = data.f;\n        if (this.cfg.sceneDepth && ['winter','candles','none'].indexOf(data.dc) >= 0) this.state.decor = data.dc;\n        if (this.isChristmas && window.CarronChristmas && data.noel) window.CarronChristmas.restore(this, data.noel);\n        if (data.sh === 'round' || data.sh === 'banquet') this.state.shape = data.sh;\n      } catch (e) { /* URL invalide : on garde la composition par defaut */ }\n    }\n\n    openShare() {\n      if (!this.modalHost) return;\n      var c = this.copy.share || {};\n      this.modalHost.innerHTML =\n        '<div class=\"ctc-modal\" data-ctc-act=\"close\">' +\n          '<div class=\"ctc-modal__sheet\" data-ctc-sheet>' +\n            '<button type=\"button\" class=\"ctc-modal__close\" data-ctc-act=\"close\" aria-label=\"' + esc(this.copy.close || 'Close') + '\">\u00D7</button>' +\n            '<div class=\"ctc-modal__title\">' + esc(c.title || 'Save your table') + '</div>' +\n            '<p class=\"ctc-modal__note\" style=\"margin-top:0\">' + esc(c.lede || 'Enter your email and we will send you the link to reopen your table.') + '</p>' +\n            '<div class=\"ctc-form\" data-ctc-save>' +\n              '<input type=\"text\" class=\"ctc-form__in\" data-sf=\"name\" placeholder=\"' + esc(c.nameField || 'First name (optional)') + '\" autocomplete=\"given-name\">' +\n              '<input type=\"email\" class=\"ctc-form__in\" data-sf=\"email\" placeholder=\"' + esc(c.emailField || 'Email') + '\" autocomplete=\"email\" required>' +\n              '<input type=\"text\" class=\"ctc-form__hp\" data-sf=\"company\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">' +\n              '<p class=\"ctc-form__nopay\">' + esc(c.notice || 'By entering your email you will receive the link and our wedding updates.') + '</p>' +\n            '</div>' +\n            '<p class=\"ctc-modal__err\" data-ctc-save-err role=\"alert\" hidden></p>' +\n            '<button type=\"button\" class=\"ctc-modal__cta\" data-ctc-act=\"savetable\">' + esc(c.send || 'Send me the link') + '</button>' +\n            '<div class=\"ctc-modal__done\" data-ctc-save-done role=\"status\" hidden></div>' +\n          '</div>' +\n        '</div>';\n      var sheet = this.modalHost.querySelector('[data-ctc-sheet]');\n      if (sheet) sheet.addEventListener('click', function (e) { if (!e.target.closest('[data-ctc-act]')) e.stopPropagation(); });\n      var em = this.modalHost.querySelector('[data-sf=\"email\"]'); if (em) em.focus();\n    }\n\n    _saveEndpoint() {\n      if (this.cfg && this.cfg.saveEndpoint) return this.cfg.saveEndpoint;\n      var pe = (this.cfg && this.cfg.preEndpoint) || 'https://prod.carron.paris/api/preorders/create';\n      try { return new URL(pe).origin + '/api/wedding-table/save'; }\n      catch (e) { return 'https://prod.carron.paris/api/wedding-table/save'; }\n    }\n\n    /* Save this table : capture l'email -> contact Shopify (tag wedding-composer\n       + newsletter) et envoi du lien par mail (endpoint CARRONPROD). */\n    _saveTable() {\n      var host = this.modalHost, c = this.copy.share || {};\n      var val = function (sel) { var el = host.querySelector(sel); return el ? el.value : ''; };\n      var errEl = host.querySelector('[data-ctc-save-err]');\n      var doneEl = host.querySelector('[data-ctc-save-done]');\n      var btn = host.querySelector('[data-ctc-act=\"savetable\"]');\n      var email = val('[data-sf=\"email\"]').trim();\n      if (!/^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$/.test(email)) {\n        if (errEl) { errEl.textContent = c.errEmail || 'Please enter a valid email.'; errEl.hidden = false; }\n        return;\n      }\n      if (errEl) errEl.hidden = true;\n      if (btn) { btn.disabled = true; btn.textContent = c.sending || 'Sending\u2026'; }\n      fetch(this._saveEndpoint(), {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          email: email,\n          name: val('[data-sf=\"name\"]').trim(),\n          table: this._shareUrl(),\n          company: val('[data-sf=\"company\"]'),\n          locale: (document.documentElement.lang || 'en').slice(0, 2).toLowerCase(),\n        }),\n      }).then(function (r) {\n        if (!r.ok) throw new Error('http ' + r.status);\n        return r.json();\n      }).then(function () {\n        var form = host.querySelector('[data-ctc-save]'); if (form) form.style.display = 'none';\n        if (btn) btn.style.display = 'none';\n        if (doneEl) { doneEl.textContent = c.sent || 'Check your inbox, we have sent you the link.'; doneEl.hidden = false; }\n      }).catch(function () {\n        if (btn) { btn.disabled = false; btn.textContent = c.send || 'Send me the link'; }\n        if (errEl) { errEl.textContent = c.errSend || 'Something went wrong, please try again.'; errEl.hidden = false; }\n      });\n    }\n\n    _copyLink(btn) {\n      var url = this._shareUrl();\n      var done = function () { btn.textContent = (this.copy.share && this.copy.share.copied) || 'Link copied'; }.bind(this);\n      if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(url).then(done, done);\n      else { var f = this.modalHost.querySelector('[data-ctc-link]'); if (f) { f.select(); try { document.execCommand('copy'); } catch (e) {} } done(); }\n    }\n\n    /* ---------- layout / camera ---------- */\n    layout() { return this.state.shape === 'round' ? roundLayout(this.state.guests) : banquetLayout(this.state.guests); }\n\n    reflowCenters() {\n      if (!this.cfg || !this.cfg.sceneDepth || !window.CarronTableScene) return;\n      var lay = this.layout();\n      this.state.centers.forEach(function (c, i) {\n        if (!c.autoPosition) return;\n        var pos = window.CarronTableScene.position(lay, i), cl = this.clampC(pos.x, pos.y);\n        c.x = cl.x; c.y = cl.y;\n      }, this);\n    }\n\n    _setShape(s) {\n      s = s === 'round' ? 'round' : 'banquet';\n      if (s === this.state.shape) return;\n      this.state.shape = s;\n      this.reflowCenters();\n      /* re-clamp immediat des pieces du centre avec le clamp de la nouvelle forme (DELTA \u00A76) */\n      var self = this;\n      this.state.centers.forEach(function (c) {\n        var cl = self.clampC(c.x, c.y);\n        c.x = Math.round(cl.x); c.y = Math.round(cl.y);\n      });\n      this.renderStage();\n      this.syncLinens();\n      this.goCam(this.target());\n    }\n\n    target() {\n      var lay = this.layout();\n      var m = this.isChristmas ? 230 : 380;\n      if (this.state.view === 'table') {\n        if (lay.kind === 'round') return { x: -lay.Rt - m, y: -lay.Rt - m, w: 2 * (lay.Rt + m), h: 2 * (lay.Rt + m) + (this.hasTableDepth() ? 940 : 0) };\n        return { x: -lay.L / 2 - m, y: -650 - m, w: lay.L + 2 * m, h: 1300 + 2 * m + (this.hasTableDepth() ? 940 : 0) };\n      }\n      var s = lay.seats[0];\n      if (STEP_DEFS[this.state.step].k === 'center') {\n        var cs = this.state.centers;\n        var minX = Math.min.apply(null, [s.x - 640].concat(cs.map(function (c) { return c.x - 440; })));\n        var maxX = Math.max.apply(null, [s.x + 640].concat(cs.map(function (c) { return c.x + 440; })));\n        if (lay.kind === 'round') {\n          /* DELTA \u00A75 : en rond, union du siege 0 et des pieces sur x ET y */\n          var minY = Math.min.apply(null, [s.y - 640].concat(cs.map(function (c) { return c.y - 440; })));\n          var maxY = Math.max.apply(null, [s.y + 640].concat(cs.map(function (c) { return c.y + 440; })));\n          return { x: minX, y: minY, w: maxX - minX, h: maxY - minY };\n        }\n        return { x: minX, y: -720, w: maxX - minX, h: 1500 };\n      }\n      return { x: s.x - 620, y: s.y - 560, w: 1240, h: 860 };\n    }\n\n    hasTableDepth() { return !!(this.cfg && (this.cfg.tableDepth || this.cfg.sceneDepth)); }\n\n    sceneTilt() { return this.hasTableDepth() ? .68 : (this.isChristmas ? .82 : 1); }\n\n    applyCam() {\n      if (!this.svg || !this.world || !this.vb) return;\n      var r = this.svg.getBoundingClientRect(); if (!r.width || !r.height) return;\n      var tilt = this.sceneTilt();\n      var v = this.vb, s = Math.min(r.width / v.w, r.height / (v.h * tilt));\n      var tx = r.width / 2 - s * (v.x + v.w / 2), ty = r.height / 2 - s * tilt * (v.y + v.h / 2);\n      this.cam = { s: s, sy: s * tilt, tx: tx, ty: ty };\n      this.world.setAttribute('transform', 'translate(' + tx + ' ' + ty + ') scale(' + s + ' ' + (s * tilt) + ')');\n    }\n\n    goCam(t, dur) {\n      dur = this.reduced ? 0 : (dur || 680);\n      cancelAnimationFrame(this.raf);\n      if (!dur) { this.vb = t; this.applyCam(); return; }\n      var f = this.vb ? { x: this.vb.x, y: this.vb.y, w: this.vb.w, h: this.vb.h } : t;\n      var t0 = performance.now(), ease = function (x) { return 1 - Math.pow(1 - x, 3); };\n      var self = this;\n      var step = function (now) {\n        var k = Math.min(1, (now - t0) / dur), q = ease(k);\n        self.vb = { x: f.x + (t.x - f.x) * q, y: f.y + (t.y - f.y) * q, w: f.w + (t.w - f.w) * q, h: f.h + (t.h - f.h) * q };\n        self.applyCam();\n        if (k < 1) self.raf = requestAnimationFrame(step);\n      };\n      this.raf = requestAnimationFrame(step);\n    }\n\n    zoomBy(f) {\n      if (!this.vb) return;\n      cancelAnimationFrame(this.raf);\n      var v = this.vb, nw = Math.min(40000, Math.max(420, v.w * f)), k = nw / v.w, nh = v.h * k;\n      this.vb = { x: v.x + (v.w - nw) / 2, y: v.y + (v.h - nh) / 2, w: nw, h: nh };\n      this.applyCam();\n    }\n\n    /* ---------- state transitions ---------- */\n    setStep(i) {\n      clearTimeout(this.advT);\n      this.state.step = i;\n      this.state.view = this.isChristmas || STEP_DEFS[i].k === 'table' ? 'table' : 'setting';\n      this.renderRail();\n      this.goCam(this.target());\n    }\n\n    setGuests(n) {\n      n = Math.max(this.minG, Math.min(this.maxG, n));\n      if (n === this.state.guests) return;\n      this.state.guests = n;\n      this.reflowCenters();\n      this.state.centers.forEach(function (c) { var cl = this.clampC(c.x, c.y); c.x = cl.x; c.y = cl.y; }, this);\n      this.renderStage();\n      this.renderRail();\n      this.renderFooter();\n      this.goCam(this.target(), 420);\n    }\n\n    _onPick(btn) {\n      var stepIdx = +btn.getAttribute('data-stepi');\n      var val = btn.getAttribute('data-pick');\n      if (val.indexOf('none:') === 0) { this.pick({ cat: val.slice(5), none: true }, stepIdx); return; }\n      var p = this.byId[val];\n      if (p) this.pick(p, stepIdx);\n    }\n\n    pick(p, stepIdx) {\n      var st = this.state;\n      var landId = null;\n      if (this.isChristmas && st.options && p.cat === 'bread') st.options.bread = 'plate';\n      if (p.cat === 'center') {\n        var i = -1;\n        for (var j = 0; j < st.centers.length; j++) if (st.centers[j].pid === p.id) { i = j; break; }\n        if (i >= 0) st.centers.splice(i, 1);\n        else {\n          var iid = ++this.iidSeq;\n          st.centers.push({ iid: iid, pid: p.id, x: Math.round(Math.random() * 500 - 250), y: Math.round(Math.random() * 140 - 80) });\n          landId = 'c' + iid;\n        }\n        this.renderStage(landId); this.renderRail(); this.renderFooter();\n        if (STEP_DEFS[st.step].k === 'center') this.goCam(this.target(), 420);\n        return;\n      }\n      var sel = this._activeSelection();\n      var advance = false;\n      if (p.cat === 'saucer') {\n        sel.saucer = sel.saucer === p.id ? null : p.id;\n        if (sel.saucer) landId = p.id;\n      } else if (p.cat === 'glass') {\n        var gi = sel.glasses.indexOf(p.id);\n        if (gi >= 0) sel.glasses.splice(gi, 1);\n        else { sel.glasses.push(p.id); if (sel.glasses.length > (this.isChristmas ? 4 : 2)) sel.glasses.shift(); landId = p.id; }\n      } else if (p.none) { sel[p.cat] = null; advance = true; }\n      else if (sel[p.cat] === p.id) sel[p.cat] = null;\n      else {\n        sel[p.cat] = p.id; landId = p.id; advance = true;\n        if (p.cat === 'cup' && sel.saucer) sel.saucer = p.saucer || null;\n      }\n      if (!sel.cup) sel.saucer = null;\n      this.renderStage(landId); this.renderRail(); this.renderFooter();\n      if (advance && this.autoAdvance && stepIdx === st.step && stepIdx < STEP_DEFS.length - 1) {\n        clearTimeout(this.advT);\n        var self = this;\n        this.advT = setTimeout(function () { if (self.state.step === stepIdx) self.setStep(stepIdx + 1); }, 450);\n      }\n    }\n\n    /* ---------- drag du centre de table ---------- */\n    clampC(x, y) {\n      var lay = this.layout();\n      if (lay.kind === 'round') {\n        var maxD = Math.max(220, lay.Rt - (this.isChristmas ? 460 : 560));\n        var d0 = Math.hypot(x, y);\n        if (d0 > maxD && d0 > 0) { var k = maxD / d0; x *= k; y *= k; }\n        return { x: x, y: y };\n      }\n      return { x: Math.max(-lay.L / 2 + 300, Math.min(lay.L / 2 - 300, x)), y: Math.max(-215, Math.min(215, y)) };\n    }\n\n    _dragStart(e, el) {\n      if (!this.cam) return;\n      e.preventDefault(); e.stopPropagation();\n      try { el.setPointerCapture(e.pointerId); } catch (err) {}\n      var iid = +el.getAttribute('data-iid');\n      var c = null;\n      for (var j = 0; j < this.state.centers.length; j++) if (this.state.centers[j].iid === iid) { c = this.state.centers[j]; break; }\n      if (!c) return;\n      c.autoPosition = false;\n      cancelAnimationFrame(this.iner);\n      this.dr = { iid: iid, el: el, x: c.x, y: c.y, cx: c.x, cy: c.y, sx: e.clientX, sy: e.clientY, lx: e.clientX, ly: e.clientY, lt: performance.now(), vx: 0, vy: 0 };\n    }\n\n    _dragMove(e) {\n      var d = this.dr; if (!d || !this.cam) return;\n      var s = this.cam.s;\n      var nx = d.x + (e.clientX - d.sx) / s, ny = d.y + (e.clientY - d.sy) / this.cam.sy;\n      var now = performance.now(), dt = Math.max(1, now - d.lt);\n      d.vx = ((e.clientX - d.lx) / dt) * 16 / s; d.vy = ((e.clientY - d.ly) / dt) * 16 / this.cam.sy;\n      d.lx = e.clientX; d.ly = e.clientY; d.lt = now;\n      var cl = this.clampC(nx, ny); d.cx = cl.x; d.cy = cl.y;\n      d.el.setAttribute('transform', 'translate(' + cl.x + ' ' + cl.y + ')');\n    }\n\n    _dragEnd() {\n      var d = this.dr; if (!d) return; this.dr = null;\n      var cx = d.cx, cy = d.cy, vx = this.reduced ? 0 : d.vx, vy = this.reduced ? 0 : d.vy, el = d.el, iid = d.iid;\n      var self = this;\n      var step = function () {\n        vx *= 0.9; vy *= 0.9;\n        var cl = self.clampC(cx + vx, cy + vy); cx = cl.x; cy = cl.y;\n        el.setAttribute('transform', 'translate(' + cx + ' ' + cy + ')');\n        if (Math.abs(vx) > 0.6 || Math.abs(vy) > 0.6) self.iner = requestAnimationFrame(step);\n        else {\n          for (var j = 0; j < self.state.centers.length; j++) {\n            if (self.state.centers[j].iid === iid) { self.state.centers[j].x = Math.round(cx); self.state.centers[j].y = Math.round(cy); }\n          }\n        }\n      };\n      step();\n    }\n\n    /* ---------- totaux ---------- */\n    _activeSelection() {\n      return this.isChristmas && this.state.alternate && this.state.editSetting === 'b' ? this.state.selB : this.state.sel;\n    }\n    _settingIds(selection) {\n      var s = selection || this.state.sel;\n      var coasters = this.isChristmas && this.state.options && this.state.options.coaster === 'mademoiselle' && this.byId['mademoiselle-coaster'] ? Array(this.state.options.personalGlass === 'complete' ? 4 : s.glasses.length).fill('mademoiselle-coaster') : [];\n      return coasters.concat([s.presentation, s.dinner, s.dessert, (this.isChristmas && this.state.options && this.state.options.bread === 'soap') ? null : s.bread].concat(s.glasses, [s.saucer, s.cup])).filter(Boolean);\n    }\n    _pieceLines() {\n      var self = this, st = this.state, counts = {};\n      function add(id, n) { if (self.byId[id] && n) counts[id] = (counts[id] || 0) + n; }\n      var alternate = this.isChristmas && st.alternate && st.selB;\n      this._settingIds().forEach(function (id) { add(id, alternate ? Math.ceil(st.guests / 2) : st.guests); });\n      if (alternate) this._settingIds(st.selB).forEach(function (id) { add(id, Math.floor(st.guests / 2)); });\n      st.centers.forEach(function (c) { add(c.pid, 1); });\n      return Object.keys(counts).map(function (id) { return { id: id, quantity: counts[id] }; });\n    }\n    _totals() {\n      var self = this, lines = this._pieceLines();\n      return {\n        sIds: this._settingIds(), lines: lines,\n        total: lines.reduce(function (sum, line) { return sum + (self.byId[line.id].price || 0) * line.quantity; }, 0),\n        count: lines.reduce(function (sum, line) { return sum + line.quantity; }, 0)\n      };\n    }\n    fmt(cents) { return formatMoney(cents, this.money); }\n    dimOf(p) {\n      return (p.shape === 'oval' && p.d2) ? (cm(p.d) + ' \u00D7 ' + cm(p.d2) + ' cm') : ('\u2300 ' + cm(p.d) + ' cm');\n    }\n    metaOf(p) {\n      var m = this.dimOf(p) + ' \u00B7 ' + this.fmt(p.price);\n      if (p.available === false) m += ' \u00B7 ' + this.copy.oos;\n      return m;\n    }\n\n    /* ---------- rendu : stage ---------- */\n    _settingMarkup(sel, landId, variant) {\n      var self = this, inner = '';\n      /* ----- dressage a la francaise : tout se calcule sur le rayon Rp de la\n         plus grande assiette empilee (presentation > dinner > dessert) ----- */\n      var radii = [];\n      ['presentation', 'dinner', 'dessert'].forEach(function (k) {\n        var id = sel[k];\n        if (id && self.byId[id]) radii.push(self.byId[id].d / 2);\n      });\n      var Rp = radii.length ? Math.max.apply(null, radii) : 110;\n\n      if (this.showCutlery) {\n        buildCutlery(Rp).forEach(function (cu) {\n          var tf = 'translate(' + cu.x + ' ' + cu.y + ')' + (cu.r ? ' rotate(' + cu.r + ')' : '') + (cu.k ? ' scale(' + cu.k + ')' : '');\n          inner += '<g transform=\"' + tf + '\">' + cutleryInner(cu, self.cutleryImgs) + '</g>';\n        });\n      }\n      var addP = function (id, x, y, baseAnchor) {\n        if (!id || !self.byId[id]) return;\n        var land = landId === id ? ' ctc-land' : '';\n        var pp = self.byId[id];\n        /* verres en photo fond blanc : PAS de filtre d'ombre (il isolerait le\n           mix-blend-mode multiply, qui doit fusionner avec la nappe en dessous) */\n        var pf = (pp.img && (pp.shape === 'glass' || pp.shape === 'stem') && !(self.isChristmas && pp.id === 'noeud-noeud-tumbler')) ? '' : ' filter=\"url(#' + (self.isChristmas ? 'ctcWinterPieceShadow' : 'ctcShP') + ')\"';\n        inner += '<g transform=\"translate(' + x + ' ' + y + ')\"><g' + ((self.hasTableDepth() || self.isChristmas) && ['glass','stem','mug'].includes(pp.shape) ? ' data-ctc-upright' : '') + '><g transform=\"translate(0 ' + (baseAnchor ? -pieceH(pp)*.45 : 0) + ')\"><g class=\"ctc-piece-inner' + land + '\"' + pf + '>' + pieceInner(pp, self.isChristmas, self.isChristmas && ['charcoal','noir','burgundy','forest'].includes(self.state.cloth)) + (self.isChristmas && window.CarronChristmas ? window.CarronChristmas.glassBow(self, pp, {x:0,y:pieceH(pp)*.36+36}) : '') + '</g></g></g></g>';\n      };\n      addP(sel.presentation, 0, 0); addP(sel.dinner, 0, 0); addP(sel.dessert, 0, 0);\n      /* assiette a pain : au-dessus des fourchettes, a gauche */\n      if (!(this.isChristmas && this.state.options && this.state.options.bread === 'soap')) addP(sel.bread, -(Rp + 85), -(Rp + 60));\n      /* verres : au-dessus du couteau et de la cuillere (a droite de l'assiette),\n         en diagonale montante, le plus grand (eau) en premier (retour Charles) */\n      var glassIds = sel.glasses.filter(function (gid) { return self.byId[gid]; });\n      if (!this.isChristmas) glassIds.sort(function (a, b) { return self.byId[b].d - self.byId[a].d; });\n      var gx0 = Rp + 38, gStepX = 74, gBase0 = -(Rp + 20), gStepY = 38;\n      glassIds.forEach(function (gid, gi) {\n        var gp = self.byId[gid];\n        var pos = self.isChristmas && window.CarronChristmas ? window.CarronChristmas.glassPosition(self, gid, gi, Rp, sel.glasses) : { x: gx0 + gi * gStepX, y: gBase0 - gi * gStepY };\n        if (self.isChristmas && window.CarronChristmas) inner += window.CarronChristmas.coaster(self, pos.x, pos.y);\n        addP(gid, Math.round(pos.x), Math.round(self.isChristmas ? pos.y : pos.y - pieceH(gp) / 2), self.isChristmas);\n      });\n      /* tasse : eloignee, dans la meme zone que les verres (haut a droite, dans\n         le prolongement bas de la diagonale des verres) - retour Charles.\n         La sous-tasse reste PROPOSEE dans le selecteur + comptee au panier, mais\n         n'est PAS posee sur la table (photos zenithales de soucoupe pas au niveau). */\n      var cupCx = Rp + 165, cupCy = -(Rp + 55);\n      if (sel.cup && self.byId[sel.cup]) addP(sel.cup, cupCx, cupCy);\n      if (this.isChristmas && window.CarronChristmas) inner += window.CarronChristmas.setting(this, sel, Rp, variant);\n      return inner;\n    }\n\n    renderStage(landId) {\n      var st = this.state, lay = this.layout(), self = this;\n      var cloth = (CLOTHS.filter(function (c) { return c.k === st.cloth; })[0] || CLOTHS[0]).c;\n      var floor = (FLOORS.filter(function (f) { return f.k === st.floor; })[0] || FLOORS[0]).c;\n      var html = '<rect x=\"-40000\" y=\"-40000\" width=\"80000\" height=\"80000\" fill=\"' + floor + '\"></rect>';\n      /* Shared parquet material and window reflection for both occasions. */\n      if (st.floor === 'parquet' && (this.cfg.floorTexture || this.isChristmas)) {\n        html = this.cfg.floorTexture\n          ? '<defs><pattern id=\"ctcOakPhoto\" x=\"-1440\" y=\"-960\" width=\"2880\" height=\"1920\" patternUnits=\"userSpaceOnUse\" patternTransform=\"rotate(0)\"><image id=\"ctcOakTile\" href=\"' + esc(this.cfg.floorTexture) + '\" width=\"1440\" height=\"960\" preserveAspectRatio=\"xMidYMid slice\"/><use href=\"#ctcOakTile\" transform=\"translate(2880 0) scale(-1 1)\"/><use href=\"#ctcOakTile\" transform=\"translate(0 1920) scale(1 -1)\"/><use href=\"#ctcOakTile\" transform=\"translate(2880 1920) scale(-1 -1)\"/></pattern></defs><rect x=\"-40000\" y=\"-40000\" width=\"80000\" height=\"80000\" fill=\"#514435\"/><rect x=\"-40000\" y=\"-40000\" width=\"80000\" height=\"80000\" fill=\"url(#ctcOakPhoto)\"/>'\n          : '<rect x=\"-40000\" y=\"-40000\" width=\"80000\" height=\"80000\" fill=\"url(#ctcWinterWood)\"/>';\n      }\n      if (st.floor === 'parquet' && this.cfg.floorTexture) {\n        var lightX = -(lay.kind === 'round' ? lay.Rt : lay.L / 2) - 220;\n        html += '<defs><radialGradient id=\"ctcOakSheen\"><stop stop-color=\"#fff6e7\" stop-opacity=\".24\"/><stop offset=\".45\" stop-color=\"#fff6e7\" stop-opacity=\".09\"/><stop offset=\"1\" stop-color=\"#fff6e7\" stop-opacity=\"0\"/></radialGradient></defs><ellipse cx=\"' + lightX + '\" cy=\"-700\" rx=\"1400\" ry=\"3100\" fill=\"url(#ctcOakSheen)\"/>';\n      }\n      if (this.hasTableDepth() || this.isChristmas) {\n        html += dressedTable(lay, cloth, (!this.isChristmas && lay.kind === 'round') ? null : RUNNERS.find(function (r) { return r.k === st.runner; }), {\n          linen: this.cfg.linenTexture, drape: this.cfg.drapeTexture, legs: this.cfg.legTexture, damask: this.cfg.damaskTexture,\n          finish: (this.isChristmas ? st.cloth === 'charcoal' : ['white','ivory'].includes(st.cloth)) ? this.cfg.textileFinish : 'plain',\n          longDrop: this.isChristmas && st.options && st.options.drop === 'long',\n          groundOpacity: ['cream','porcelain'].includes(st.floor) ? .11 : .3\n        });\n      } else if (lay.kind === 'round') {\n        /* DELTA \u00A74 : tombe de nappe + cercle principal + texture lin */\n        html += '<circle cx=\"0\" cy=\"0\" r=\"' + (lay.Rt + 45) + '\" fill=\"' + cloth + '\" opacity=\"0.55\" filter=\"url(#ctcShT)\"></circle>';\n        html += '<circle cx=\"0\" cy=\"0\" r=\"' + lay.Rt + '\" fill=\"' + cloth + '\" stroke=\"#D8D2C2\" stroke-width=\"2\"></circle>';\n        if (this.cfg.linenTexture) {\n          html += '<defs><clipPath id=\"ctcSharedLinenClip\">' + '<circle r=\"' + lay.Rt + '\"/>' + '</clipPath></defs><image href=\"' + esc(this.cfg.linenTexture) + '\" x=\"' + (-lay.Rt) + '\" y=\"' + (-lay.Rt) + '\" width=\"' + (lay.Rt * 2) + '\" height=\"' + (lay.Rt * 2) + '\" preserveAspectRatio=\"xMidYMid slice\" clip-path=\"url(#ctcSharedLinenClip)\" opacity=\".62\" style=\"mix-blend-mode:' + (['white', 'ivory', 'sage', 'blush', 'taupe'].indexOf(st.cloth) >= 0 ? 'multiply' : 'soft-light') + '\"/>';\n        } else {\n          html += '<circle cx=\"0\" cy=\"0\" r=\"' + lay.Rt + '\" fill=\"url(#ctcLinen)\"></circle>';\n          html += '<circle cx=\"0\" cy=\"0\" r=\"' + lay.Rt + '\" filter=\"url(#ctcLinenGrain)\" opacity=\"0.5\" style=\"mix-blend-mode:multiply\"></circle>';\n        }\n      } else {\n        var bx = -lay.L / 2;\n        html += '<rect x=\"' + bx + '\" y=\"-650\" width=\"' + lay.L + '\" height=\"1300\" rx=\"18\" fill=\"' + cloth + '\" stroke=\"#D8D2C2\" stroke-width=\"2\" filter=\"url(#ctcShT)\"></rect>';\n        if (this.cfg.linenTexture) {\n          html += '<defs><clipPath id=\"ctcSharedLinenClip\">' + '<rect x=\"' + bx + '\" y=\"-650\" width=\"' + lay.L + '\" height=\"1300\" rx=\"18\"/>' + '</clipPath></defs><image href=\"' + esc(this.cfg.linenTexture) + '\" x=\"' + (bx) + '\" y=\"' + (-650) + '\" width=\"' + (lay.L) + '\" height=\"' + (1300) + '\" preserveAspectRatio=\"xMidYMid slice\" clip-path=\"url(#ctcSharedLinenClip)\" opacity=\".62\" style=\"mix-blend-mode:' + (['white', 'ivory', 'sage', 'blush', 'taupe'].indexOf(st.cloth) >= 0 ? 'multiply' : 'soft-light') + '\"/>';\n        } else {\n          html += '<rect x=\"' + bx + '\" y=\"-650\" width=\"' + lay.L + '\" height=\"1300\" rx=\"18\" fill=\"url(#ctcLinen)\"></rect>';\n          html += '<rect x=\"' + bx + '\" y=\"-650\" width=\"' + lay.L + '\" height=\"1300\" rx=\"18\" filter=\"url(#ctcLinenGrain)\" opacity=\"0.5\" style=\"mix-blend-mode:multiply\"></rect>';\n        }\n        if (st.runner !== 'none') {\n          var run = RUNNERS.filter(function (r) { return r.k === st.runner; })[0];\n          if (run && run.c) {\n            html += '<rect x=\"' + (bx + 110) + '\" y=\"-235\" width=\"' + (lay.L - 220) + '\" height=\"470\" fill=\"' + run.c + '\"' + (st.runner === 'noir' ? '' : ' stroke=\"#D8D2C2\" stroke-width=\"1\"') + '></rect>';\n            html += '<rect x=\"' + (bx + 110) + '\" y=\"-235\" width=\"' + (lay.L - 220) + '\" height=\"470\" fill=\"url(#ctcLinen)\"></rect>';\n          }\n        }\n      }\n      if (!this.hasTableDepth() && !this.isChristmas && (st.cloth === 'white' || st.cloth === 'ivory')) html += textileFinish(lay, this.cfg.textileFinish);\n      /* place composee (siege 0) */\n      var s0 = lay.seats[0];\n      var inner = this._settingMarkup(st.sel, landId, 'a'), s0 = lay.seats[0];\n      var innerB = this.isChristmas ? this._settingMarkup(st.alternate ? st.selB : st.sel, landId, 'b') : inner;\n      var seatOrder = lay.seats.map(function (seat, i) { return { i: i, angle: Math.atan2(seat.y, seat.x) }; }).sort(function (a,b) { return a.angle-b.angle; }).map(function (seat) { return seat.i; });\n      var settingAt = function (i) { return seatOrder.indexOf(i) % 2 ? innerB : inner; };\n      /* tous les couverts en inline (repliques + siege 0) : le mix-blend-mode\n         des verres doit fusionner avec la nappe ; un <use> isolerait le blend\n         -> fond blanc sur les repliques (bug corrige). */\n      for (var i = 1; i < lay.seats.length; i++) {\n        var sr = lay.seats[i];\n        html += '<g class=\"ctc-rep\" data-seat-rotation=\"' + sr.rot + '\" transform=\"translate(' + sr.x + ' ' + sr.y + ') rotate(' + sr.rot + ')\">' + settingAt(i) + '</g>';\n      }\n      html += '<g data-seat-rotation=\"' + s0.rot + '\" transform=\"translate(' + s0.x + ' ' + s0.y + ') rotate(' + s0.rot + ')\">' + settingAt(0) + '</g>';\n      /* centre de table */\n      var sceneCenters = this.hasTableDepth() ? st.centers.slice().sort(function (a,b) { return a.y-b.y; }) : st.centers;\n      sceneCenters.forEach(function (c) {\n        var p = self.byId[c.pid]; if (!p) return;\n        var land = landId === ('c' + c.iid) ? ' ctc-land' : '';\n        var candle = '';\n        if (self.isChristmas && !self.cfg.sceneDepth && p.shape === 'candle') {\n          var height = p.id === 'paris-candle-holder' ? 170 : 110;\n          var width = p.id === 'paris-candle-holder' ? 20 : 36;\n          candle = '<g aria-hidden=\"true\"><ellipse cx=\"0\" cy=\"' + (-height) + '\" rx=\"95\" ry=\"95\" fill=\"url(#ctcFlameGlow)\"/><rect x=\"' + (-width/2) + '\" y=\"' + (-height) + '\" width=\"' + width + '\" height=\"' + height + '\" rx=\"3\" fill=\"url(#ctcWax)\"/><ellipse cx=\"0\" cy=\"' + (-height-9) + '\" rx=\"4\" ry=\"11\" fill=\"#f3cc8a\"/><ellipse cx=\"0\" cy=\"' + (-height-7) + '\" rx=\"2\" ry=\"7\" fill=\"#fff9e6\"/></g>';\n        }\n        html += '<g class=\"ctc-center-piece\" tabindex=\"0\" role=\"img\" aria-label=\"' + esc(p.name + (document.documentElement.lang === 'fr' ? ', d\u00E9placer avec les fl\u00E8ches' : ', move with arrow keys')) + '\" data-iid=\"' + c.iid + '\" transform=\"translate(' + c.x + ' ' + c.y + ')\"><g class=\"ctc-piece-inner' + land + '\" filter=\"url(#' + (self.isChristmas ? 'ctcWinterCentreShadow' : 'ctcShC') + ')\">' + (self.hasTableDepth() && window.CarronTableScene ? window.CarronTableScene.center(p, self.isChristmas ? st.decor : 'none', self.isChristmas && st.options ? '' : self.cfg.flowerAsset, self.sceneTilt(), pieceInner(p)) : candle + pieceInner(p)) + '</g></g>';\n      });\n      if (this.cfg.sceneDepth && window.CarronTableScene && st.decor !== 'none' && st.centers.length) html += window.CarronTableScene.accents(lay, st.decor);\n      if (this.isChristmas && window.CarronChristmas) html += window.CarronChristmas.table(this, lay);\n      this.world.innerHTML = html;\n      if (this.hasTableDepth() || this.isChristmas) this.world.querySelectorAll('[data-ctc-upright]').forEach(function (el) {\n        var seat = el.closest('[data-seat-rotation]');\n        el.setAttribute('transform', 'rotate(' + (-Number(seat.dataset.seatRotation)) + ') scale(1 ' + (1 / self.sceneTilt()) + ')');\n      });\n    }\n\n    /* ---------- rendu : rail ---------- */\n    _summaryOf(def) {\n      var st = this.state, sel = this._activeSelection(), self = this;\n      var name = function (id) { return self.byId[id] ? self.byId[id].name : ''; };\n      if (def.k === 'bread' && this.isChristmas && st.options && st.options.bread === 'soap') return document.documentElement.lang === 'fr' ? 'Mon porte-savon (non inclus)' : 'My soap dish (not included)';\n      if (def.k === 'glasses') return sel.glasses.length ? sel.glasses.map(name).join(' \u00B7 ') : this.copy.none;\n      if (def.k === 'center') return st.centers.length ? (st.centers.length + ' ' + (st.centers.length > 1 ? this.copy.pieces : this.copy.pieces.replace(/s$/, ''))) : this.copy.none;\n      if (def.k === 'table') { var t = this._totals(); return st.guests + ' ' + this.copy.guests + ' \u00B7 ' + t.count + ' ' + this.copy.pieces; }\n      if (def.k === 'cup') return sel.cup ? (name(sel.cup) + (sel.saucer ? ' \u00B7 ' + this.copy.withSaucer : '')) : this.copy.none;\n      return sel[def.k] ? name(sel[def.k]) : this.copy.none;\n    }\n\n    _cardHTML(p, on, stepIdx, extraMeta) {\n      return '<button type=\"button\" class=\"ctc-card' + (on ? ' is-on' : '') + (p.available === false ? ' is-oos' : '') + '\" data-pick=\"' + esc(p.id) + '\" data-stepi=\"' + stepIdx + '\" aria-pressed=\"' + !!on + '\">' +\n        thumbMarkup(p) +\n        '<span class=\"ctc-card__name\">' + esc(p.name) + '</span>' +\n        '<span class=\"ctc-card__meta\">' + esc(this.metaOf(p) + (extraMeta || '')) + '</span>' +\n        '</button>';\n    }\n\n    renderRail() {\n      var st = this.state, sel = this._activeSelection(), self = this;\n      if (this.barsEl) {\n        var bars = '';\n        for (var b = 0; b < STEP_DEFS.length; b++) bars += '<span class=\"' + (b <= st.step ? 'is-done' : '') + '\"></span>';\n        this.barsEl.innerHTML = bars;\n      }\n      if (!this.stepsEl) return;\n      var t = this._totals();\n      var html = '';\n      STEP_DEFS.forEach(function (def, i) {\n        var active = i === st.step, done = i < st.step;\n        html += '<div class=\"ctc-step' + (active ? ' is-active' : '') + (done ? ' is-done' : '') + '\">';\n        html += '<button type=\"button\" class=\"ctc-step__head\" aria-expanded=\"' + active + '\" data-jump=\"' + i + '\">' +\n          '<span class=\"ctc-step__num\">' + (i + 1) + '</span>' +\n          '<span class=\"ctc-step__meta\">' +\n            '<span class=\"ctc-step__label\">' + esc(self.copy.steps[def.k] || def.k) + '</span>' +\n            '<span class=\"ctc-step__summary\">' + esc(self._summaryOf(def)) + '</span>' +\n          '</span>' +\n          (!active ? '<span class=\"ctc-step__edit\">' + esc(self.copy.edit) + '</span>' : '') +\n          '</button>';\n        if (active) {\n          html += '<div class=\"ctc-step__body\">';\n          var hint = self.isChristmas && def.k === 'glasses' ? (document.documentElement.lang === 'fr' ? 'Jusqu\u2019\u00E0 quatre verres. Leur usage se r\u00E8gle ci-dessous.' : 'Up to four glasses. Choose their purpose below.') : self.copy.hints[def.k];\n          if (hint) html += '<p class=\"ctc-hint\">' + esc(hint) + '</p>';\n          if (def.guests) {\n            html += '<div class=\"ctc-guests\">' +\n              '<div class=\"ctc-guests__ctrl\">' +\n                '<button type=\"button\" data-ctc-act=\"gdec\" aria-label=\"' + esc(self.copy.guestsLess || 'Fewer guests') + '\">\u2212</button>' +\n                '<span class=\"ctc-guests__n\">' + st.guests + ' ' + esc(self.copy.guests) + '</span>' +\n                '<button type=\"button\" data-ctc-act=\"ginc\" aria-label=\"' + esc(self.copy.guestsMore || 'More guests') + '\">+</button>' +\n              '</div>' +\n              '<span class=\"ctc-guests__note\">' + t.count + ' ' + esc(self.copy.pieces) + ' \u00B7 ' + self.fmt(t.total) + '</span>' +\n            '</div>';\n          } else {\n            var cat = def.k === 'glasses' ? 'glass' : def.k;\n            var cards = '';\n            self.pool.forEach(function (p) {\n              if (p.cat !== cat) return;\n              var on = def.k === 'glasses' ? sel.glasses.indexOf(p.id) >= 0\n                : (def.k === 'center' ? st.centers.some(function (c) { return c.pid === p.id; }) : sel[def.k] === p.id);\n              cards += self._cardHTML(p, on, i);\n            });\n            if (def.opt) {\n              var noneOn = !sel[def.k];\n              cards += '<button type=\"button\" class=\"ctc-card ctc-card--none' + (noneOn ? ' is-on' : '') + '\" data-pick=\"none:' + def.k + '\" aria-pressed=\"' + noneOn + '\" data-stepi=\"' + i + '\">' +\n                '<span class=\"ctc-card__name\">' + esc(self.copy.none) + '</span>' +\n                '</button>';\n            }\n            if (def.k === 'cup' && sel.cup) {\n              var cupP = self.byId[sel.cup];\n              var sp = cupP && cupP.saucer ? self.byId[cupP.saucer] : null;\n              if (sp) cards += self._cardHTML(sp, sel.saucer === sp.id, i, ' \u00B7 ' + self.copy.matching);\n            }\n            if (!cards) cards = '<p class=\"ctc-hint\">' + (document.documentElement.lang === 'fr' ? 'Aucune pi\u00E8ce pour cette \u00E9tape. Vous pouvez continuer.' : 'No pieces for this step. You can continue.') + '</p>';\n            html += '<div class=\"ctc-cards\">' + cards + '</div>';\n            if (self.isChristmas && def.k === 'glasses' && window.CarronChristmas) html += window.CarronChristmas.glassControls(self, sel);\n          }\n          var hasNext = i < STEP_DEFS.length - 1 && (!!def.multi || !self.autoAdvance);\n          if (hasNext) html += '<button type=\"button\" class=\"ctc-next\" data-ctc-act=\"next\">' + esc(self.copy.next) + '</button>';\n          html += '</div>';\n        }\n        html += '</div>';\n      });\n      if (this.isChristmas && window.CarronChristmas) window.CarronChristmas.controls(this);\n      var focused = document.activeElement;\n      var focusKey = focused && this.stepsEl.contains(focused) ? ['data-pick', 'data-jump', 'data-ctc-act', 'data-noel-role'].find(function (k) { return focused.hasAttribute(k); }) : null;\n      var focusValue = focusKey ? focused.getAttribute(focusKey) : null;\n      this.stepsEl.innerHTML = html;\n      if (focusKey) {\n        var nextFocus = Array.from(this.stepsEl.querySelectorAll('[' + focusKey + ']')).find(function (el) { return el.getAttribute(focusKey) === focusValue; });\n        if (nextFocus && nextFocus.disabled) nextFocus = this.stepsEl.querySelector('[data-ctc-act=\"' + (focusValue === 'gdec' ? 'ginc' : 'gdec') + '\"]');\n        if (!nextFocus) nextFocus = this.stepsEl.querySelector('.is-active .ctc-step__head');\n        if (nextFocus) nextFocus.focus({ preventScroll: true });\n      }\n      this.querySelectorAll('[data-ctc-act=\"gdec\"]').forEach(function (b) { b.disabled = st.guests <= self.minG; });\n      this.querySelectorAll('[data-ctc-act=\"ginc\"]').forEach(function (b) { b.disabled = st.guests >= self.maxG; });\n    }\n\n    /* ---------- rendu : footer / linges ---------- */\n    renderFooter() {\n      var t = this._totals();\n      if (this.totalEl) this.totalEl.textContent = this.fmt(t.total);\n      if (this.countEl) this.countEl.textContent = t.count + ' ' + this.copy.pieces + ' \u00B7 ' + this.state.guests + ' ' + this.copy.guests + ' \u00B7 ' + (this.isChristmas && this.state.alternate ? (document.documentElement.lang === 'fr' ? 'deux couverts altern\u00E9s' : 'two alternating settings') : t.sIds.length + ' ' + this.copy.perSetting);\n    }\n\n    syncLinens() {\n      var st = this.state;\n      this.querySelectorAll('[data-ctc-decor]').forEach(function (b) { b.classList.toggle('is-on', b.dataset.ctcDecor === st.decor); });\n      this.querySelectorAll('[data-ctc-cloth]').forEach(function (b) { b.classList.toggle('is-on', b.getAttribute('data-ctc-cloth') === st.cloth); });\n      this.querySelectorAll('[data-ctc-runner]').forEach(function (b) { b.classList.toggle('is-on', b.getAttribute('data-ctc-runner') === st.runner); });\n      this.querySelectorAll('[data-ctc-floor]').forEach(function (b) { b.classList.toggle('is-on', b.getAttribute('data-ctc-floor') === st.floor); });\n      this.querySelectorAll('[data-ctc-shape]').forEach(function (b) { b.classList.toggle('is-on', b.getAttribute('data-ctc-shape') === st.shape); });\n      var rr = this.querySelector('[data-ctc-runner-row]');\n      if (rr) rr.style.display = !this.isChristmas && st.shape === 'round' ? 'none' : '';\n      this.querySelectorAll('[data-ctc-cloth],[data-ctc-runner],[data-ctc-floor],[data-ctc-shape],[data-ctc-decor]').forEach(function (b) { b.setAttribute('aria-pressed', b.classList.contains('is-on') ? 'true' : 'false'); });\n    }\n\n    /* ---------- modale + toast ---------- */\n    openModal(mode) {\n      if (!this.modalHost) return;\n      this.state.basketMode = mode;\n      var t = this._totals(), st = this.state, self = this;\n      var isPre = mode === 'pre';\n      var lines = '';\n      t.lines.forEach(function (line) {\n        var p = self.byId[line.id];\n        lines += '<div class=\"ctc-modal__line\"><span>' + esc(p.name) + '<span class=\"ctc-modal__sub\">' + line.quantity + ' \u00D7 ' + self.fmt(p.price) + ' \u00B7 ' + self.dimOf(p) + '</span></span><span>' + self.fmt(p.price * line.quantity) + '</span></div>';\n      });\n      if (this.isChristmas) lines += '<p class=\"ctc-modal__note\">' + (document.documentElement.lang === 'fr' ? 'Seules les pi\u00E8ces CARRON list\u00E9es sont compt\u00E9es. Linge, rubans, fleurs, bougies, verrerie personnelle et objets de la maison sont des \u00E9l\u00E9ments de d\u00E9cor non inclus.' : 'Only the listed CARRON pieces are counted. Linen, ribbons, flowers, candles, personal glassware and household objects are decorative and not included.') + '</p>';\n      var pre = this.copy.pre || {};\n      var formHTML = '';\n      if (isPre) {\n        var addr = function (pfx, ac) {\n          return '<div class=\"ctc-form__addr\" data-ctc-addr=\"' + pfx + '\">' +\n            '<input type=\"text\" class=\"ctc-form__in\" data-f=\"address1\" placeholder=\"' + esc(pre.addr1) + '\" autocomplete=\"' + ac + ' address-line1\">' +\n            '<input type=\"text\" class=\"ctc-form__in\" data-f=\"address2\" placeholder=\"' + esc(pre.addr2) + '\" autocomplete=\"' + ac + ' address-line2\">' +\n            '<div class=\"ctc-form__pair\">' +\n              '<input type=\"text\" class=\"ctc-form__in\" data-f=\"zip\" placeholder=\"' + esc(pre.zip) + '\" autocomplete=\"' + ac + ' postal-code\">' +\n              '<input type=\"text\" class=\"ctc-form__in\" data-f=\"city\" placeholder=\"' + esc(pre.city) + '\" autocomplete=\"' + ac + ' address-level2\">' +\n            '</div>' +\n            '<input type=\"text\" class=\"ctc-form__in\" data-f=\"country\" placeholder=\"' + esc(pre.country) + '\" autocomplete=\"' + ac + ' country-name\">' +\n          '</div>';\n        };\n        formHTML =\n          '<div class=\"ctc-form\" data-ctc-form>' +\n            '<input type=\"text\" class=\"ctc-form__in\" data-ctc-f=\"name\" placeholder=\"' + esc(pre.name) + '\" autocomplete=\"name\">' +\n            '<input type=\"email\" class=\"ctc-form__in\" data-ctc-f=\"email\" placeholder=\"' + esc(pre.email) + '\" autocomplete=\"email\">' +\n            '<input type=\"tel\" class=\"ctc-form__in\" data-ctc-f=\"phone\" placeholder=\"' + esc(pre.phone) + '\" autocomplete=\"tel\">' +\n            '<input type=\"text\" class=\"ctc-form__hp\" data-ctc-f=\"company\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\">' +\n            '<p class=\"ctc-form__lbl\">' + esc(pre.ship) + '</p>' + addr('ship', 'shipping') +\n            '<label class=\"ctc-form__check\"><input type=\"checkbox\" data-ctc-billdiff><span>' + esc(pre.billdiff) + '</span></label>' +\n            '<div data-ctc-billwrap hidden><p class=\"ctc-form__lbl\">' + esc(pre.bill) + '</p>' + addr('bill', 'billing') + '</div>' +\n            '<p class=\"ctc-form__nopay\">' + esc(pre.nopay) + '</p>' +\n          '</div>';\n      }\n      this.modalHost.innerHTML =\n        '<div class=\"ctc-modal\" data-ctc-act=\"close\">' +\n          '<div class=\"ctc-modal__sheet\" data-ctc-sheet>' +\n            '<button type=\"button\" class=\"ctc-modal__close\" data-ctc-act=\"close\" aria-label=\"' + esc(this.copy.close || 'Close') + '\">\u00D7</button>' +\n            '<div class=\"ctc-modal__title\">' + esc(isPre ? this.copy.preTitle : this.copy.basketTitle) + '</div>' +\n            lines +\n            '<div class=\"ctc-modal__totrow\"><span class=\"ctc-modal__totlbl\">' + esc(this.copy.total) + '</span><span class=\"ctc-modal__totval\">' + this.fmt(t.total) + '</span></div>' +\n            (isPre ? '<p class=\"ctc-modal__note\">' + esc(this.copy.preNote) + '</p>' : '') +\n            formHTML +\n            '<p class=\"ctc-modal__err\" data-ctc-err role=\"alert\" hidden></p>' +\n            '<button type=\"button\" class=\"ctc-modal__cta\" data-ctc-act=\"confirm\">' + esc(isPre ? this.copy.preCta : this.copy.cta) + '</button>' +\n            '<div class=\"ctc-modal__done\" data-ctc-done role=\"status\" hidden></div>' +\n          '</div>' +\n        '</div>';\n      this._modalFocus = document.activeElement;\n      var sheet = this.modalHost.querySelector('[data-ctc-sheet]');\n      sheet.setAttribute('role', 'dialog'); sheet.setAttribute('aria-modal', 'true');\n      sheet.setAttribute('aria-label', isPre ? this.copy.preTitle : this.copy.basketTitle);\n      sheet.querySelectorAll('input[placeholder]').forEach(function (el) { el.setAttribute('aria-label', el.placeholder); });\n      sheet.querySelector('button').focus();\n      sheet.addEventListener('keydown', function (e) {\n        if (e.key !== 'Tab') return;\n        var controls = Array.from(sheet.querySelectorAll('button:not([disabled]), input, a[href]')).filter(function (el) { return el.getClientRects().length && !el.closest('[hidden]'); });\n        var first = controls[0], last = controls[controls.length - 1];\n        if (e.shiftKey && document.activeElement === first) { e.preventDefault(); last.focus(); }\n        else if (!e.shiftKey && document.activeElement === last) { e.preventDefault(); first.focus(); }\n      });\n      // laisse remonter tous les boutons d'action (confirm/switch) ; stoppe le reste\n      // pour ne pas fermer la modale au clic dans le formulaire.\n      if (sheet) sheet.addEventListener('click', function (e) { if (!e.target.closest('[data-ctc-act]')) e.stopPropagation(); });\n      var bd = this.modalHost.querySelector('[data-ctc-billdiff]');\n      if (bd) bd.addEventListener('change', function () {\n        var w = self.modalHost.querySelector('[data-ctc-billwrap]');\n        if (w) w.hidden = !bd.checked;\n      });\n    }\n\n    closeModal() { if (this.modalHost) this.modalHost.innerHTML = ''; if (this._modalFocus && this._modalFocus.isConnected) this._modalFocus.focus({ preventScroll: true }); }\n    /* masque la bulle de chat Shopify Inbox sur la page composer : elle recouvre le CTA\n       et reste au-dessus des modales. Inline !important bat la feuille de style du widget\n       (qui, elle, gagnait contre notre CSS). MutationObserver au cas ou elle arrive apres. */\n    _hideChat() {\n      var hide = function () {\n        // cibler le conteneur DIV #shopify-chat : le custom element #ShopifyChat\n        // ignore son propre display (quirk shadow DOM), mais le wrapper obeit.\n        var el = document.getElementById('shopify-chat');\n        if (el) { el.style.setProperty('display', 'none', 'important'); return true; }\n        return false;\n      };\n      if (hide()) return;\n      try {\n        var mo = new MutationObserver(function () { if (hide()) mo.disconnect(); });\n        mo.observe(document.documentElement, { childList: true, subtree: true });\n        setTimeout(function () { mo.disconnect(); }, 15000);\n      } catch (e) {}\n    }\n\n    _modalErr(msg) {\n      var el = this.modalHost && this.modalHost.querySelector('[data-ctc-err]');\n      if (el) { el.textContent = msg; el.hidden = false; }\n    }\n\n    /* propose de basculer en precommande apres un echec panier (stock) */\n    _offerPreorderSwitch() {\n      if (!this.modalHost) return;\n      if (this.modalHost.querySelector('[data-ctc-act=\"switch\"]')) return;\n      var errEl = this.modalHost.querySelector('[data-ctc-err]');\n      if (!errEl) return;\n      var btn = document.createElement('button');\n      btn.type = 'button';\n      btn.className = 'ctc-modal__switch';\n      btn.setAttribute('data-ctc-act', 'switch');\n      btn.textContent = this.copy.switchPre || 'Switch to pre-order';\n      errEl.insertAdjacentElement('afterend', btn);\n    }\n\n    toast(msg) {\n      if (!this.toastHost) return;\n      this.toastHost.innerHTML = '<div class=\"ctc-toast\">' + esc(msg) + '</div>';\n      clearTimeout(this.toastT);\n      var self = this;\n      this.toastT = setTimeout(function () { self.toastHost.innerHTML = ''; }, 2600);\n    }\n\n    /* ---------- confirmation (panier reel + precommande via core) ---------- */\n    /* lignes panier : chaque piece du couvert x invites, chaque centre x 1.\n       Fusionne les variantId identiques (ex. 2 fois le meme centre). */\n    _basketItems() {\n      var self = this, st = this.state;\n      var merged = {};\n      var add = function (variantId, qty) {\n        if (!variantId) return;\n        merged[variantId] = (merged[variantId] || 0) + qty;\n      };\n      this._pieceLines().forEach(function (line) {\n        add(self.byId[line.id].variantId, line.quantity);\n      });\n      return Object.keys(merged).map(function (k) {\n        var n = Number(k);\n        return { id: isNaN(n) ? k : n, quantity: merged[k] };\n      });\n    }\n\n    /* lignes precommande (endpoint api/preorders/create). Le couvert = l'unite\n       repetee (sets = invites). Les centres sont joints pour que CARRON ait le\n       detail complet ; l'endpoint applique quantity=sets a chaque ligne (draft\n       relu et valide manuellement par l'atelier). */\n    _preorderItems() {\n      var self = this, out = [];\n      var lbl = function (cat) { return self.copy.steps[cat === 'glass' ? 'glasses' : cat] || cat; };\n      var push = function (p, catLabel) {\n        if (!p || !p.variantId) return;\n        out.push({ id: p.variantId, coll: p.name, type: catLabel, dia: cm(p.d), variant: '' });\n      };\n      this._settingIds().forEach(function (id) { var p = self.byId[id]; if (p) push(p, lbl(p.cat)); });\n      this.state.centers.forEach(function (c) { var p = self.byId[c.pid]; if (p) push(p, self.copy.steps.center); });\n      return out.slice(0, 24); // borne dure de l'endpoint (items max 24)\n    }\n\n    _confirm() {\n      var core = window.CarronComposer;\n      if (!core || typeof core.addToCart !== 'function') {\n        if (window.console) console.error('[table-composer] CarronComposer core absent : impossible de finaliser (verifier le chargement de carron-composer-core.js avant carron-table-composer.js).');\n        this._modalErr((this.copy.pre && this.copy.pre.errSend) || 'Service unavailable.');\n        this.toast(this.copy.coreMissing || 'Service temporarily unavailable.');\n        return;\n      }\n      if (this.state.basketMode === 'pre') this._submitPreorder(core);\n      else this._submitBasket(core);\n    }\n\n    _submitBasket(core) {\n      var self = this;\n      var items = this._basketItems();\n      if (!items.length) { this._modalErr(this.copy.emptyBasket || 'Your table is empty.'); return; }\n      var cta = this.modalHost.querySelector('[data-ctc-act=\"confirm\"]');\n      var errEl = this.modalHost.querySelector('[data-ctc-err]');\n      if (cta) cta.disabled = true;\n      if (errEl) errEl.hidden = true;\n      core.addToCart(items, { source: this }).then(function () {\n        var t = self._totals();\n        self.closeModal();\n        self.toast(self.copy.addedToast.replace('{n}', t.count));\n      }).catch(function (err) {\n        if (cta) cta.disabled = false;\n        var stockIssue = err && (err.status === 422);\n        self._modalErr((stockIssue ? (self.copy.cartOos || self.copy.cartErr) : self.copy.cartErr) || 'Some pieces could not be added.');\n        self._offerPreorderSwitch();\n      });\n    }\n\n    _submitPreorder(core) {\n      var self = this, pre = this.copy.pre || {}, host = this.modalHost;\n      var val = function (sel) { var el = host.querySelector(sel); return el ? (el.value || '').trim() : ''; };\n      var name = val('[data-ctc-f=\"name\"]'), email = val('[data-ctc-f=\"email\"]'), phone = val('[data-ctc-f=\"phone\"]');\n      var company = val('[data-ctc-f=\"company\"]');\n      var billEl = host.querySelector('[data-ctc-billdiff]');\n      var billDiff = billEl && billEl.checked;\n      var readAddr = function (pfx) {\n        var w = host.querySelector('[data-ctc-addr=\"' + pfx + '\"]'); if (!w) return null;\n        var g = function (f) { var el = w.querySelector('[data-f=\"' + f + '\"]'); return el ? (el.value || '').trim() : ''; };\n        return { address1: g('address1'), address2: g('address2'), zip: g('zip'), city: g('city'), country: g('country') };\n      };\n      var addrOk = function (a) { return !!(a && a.address1 && a.zip && a.city && a.country); };\n      var ship = readAddr('ship');\n      var bill = billDiff ? readAddr('bill') : null;\n      var miss = (!name) || (email.indexOf('@') < 1) || (!phone) || (!addrOk(ship)) || (billDiff && !addrOk(bill));\n      if (miss) { this._modalErr(pre.err || 'Missing fields.'); return; }\n      var items = this._preorderItems();\n      if (!items.length) { this._modalErr(this.copy.emptyBasket || 'Your table is empty.'); return; }\n      var t = this._totals();\n      var pieces = Math.max(1, Math.min(9999, t.count));\n      var minP = this.minPieces || 8;\n      if (pieces < minP) { this._modalErr((pre.minPieces || 'Pre-order starts at {n} pieces.').replace('{n}', minP)); return; }\n      var errEl = host.querySelector('[data-ctc-err]');\n      if (errEl) errEl.hidden = true;\n      var payload = {\n        name: name, email: email, phone: phone,\n        shipping: ship, billing: billDiff ? bill : ship,\n        sets: Math.max(1, Math.min(99, this.state.guests)),\n        pieces: pieces,\n        items: items,\n        company: company,\n        /* declenche la capture contact (tag wedding-composer + newsletter) cote CARRONPROD */\n        source: this.source,\n        table: this._shareUrl()\n      };\n      var cta = host.querySelector('[data-ctc-act=\"confirm\"]');\n      var done = host.querySelector('[data-ctc-done]');\n      if (cta) { cta.disabled = true; cta.setAttribute('data-label', cta.textContent); cta.textContent = pre.sending || '\u2026'; }\n      core.preorder(payload, this.preEndpoint).then(function () {\n        if (done) { done.textContent = pre.thanks || 'Thank you.'; done.hidden = false; }\n        if (cta) cta.style.display = 'none';\n        self.toast(self.copy.preToast);\n      }).catch(function (err) {\n        if (cta) { cta.disabled = false; cta.textContent = cta.getAttribute('data-label') || (self.copy.preCta || ''); }\n        var msg = pre.errSend || 'Something went wrong.';\n        if (err && err.status === 422) msg = (pre.minPieces || msg).replace('{n}', (self.minPieces || 8));\n        else if (err && err.data && err.data.error) msg = err.data.error;\n        self._modalErr(msg);\n      });\n    }\n  }\n\n  customElements.define('table-composer', TableComposer);\n})();\n"],
  "mappings": "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",
  "names": ["c", "p", "i", "b"]
}
