{
  "version": 3,
  "sources": ["/cdn/shop/files/stt-personalizer-v47.js?x=1792630965823"],
  "sourcesContent": ["/* Small Town Timbers live sign personalizer v15: per-design templates from theme assets */\n(function () {\n  const NS = 'http://www.w3.org/2000/svg';\n\n  const LETTER_COLORS = {\n    'White': '#FFFFFF', 'Black': '#1A1A1A', 'Dark Grey': '#757575', 'Grey': '#B6B7B1', 'Light Grey': '#DCE0DF',\n    'Dusty Blue': '#818F9A', 'Navy Blue': '#3B4859', 'Blue': '#3B4B7F', 'Sky Blue': '#9AC1DE', 'Teal': '#007378',\n    'Turquoise': '#75CED2', 'Soft Mint': '#D2EDE6', 'Green': '#5FB56C', 'Olive': '#5E6555', 'Ash Rose': '#9A7273',\n    'Coral': '#DF867E', 'Blush': '#E6CAC7', 'Lavender': '#CBBBDF', 'Purple': '#655280', 'Deep Purple': '#705F71',\n    'Burgundy': '#7F5058', 'Brown': '#8A6754', 'Creme': '#FDE4BB', 'Ivory': '#EDE0CF', 'Yellow': '#FFC71C',\n    'Gold': '#A98339', 'Silver': '#9A9B99', 'Copper': '#88542D', 'Champagne': '#CEBD93', 'Rose Gold': '#A1705F'\n  };\n  /* Apparel: sweatshirt colors and embroidery thread colors */\n  const SHIRTS = { 'white': '#F3F3F5', 'ash': '#DFDFE1', 'sport grey': '#D0CFD4', 'sand': '#D6C8B9', 'brown savana': '#967C6D', 'cocoa': '#724836',\n    'dusty rose': '#E1BBAE', 'pink lemonade': '#F9779E', 'paragon': '#AB949A', 'maroon': '#5C2E40', 'sage': '#929A89', 'military green': '#666A58',\n    'forest green': '#323E32', 'stone blue': '#8A9BAB', 'navy': '#272C3F', 'charcoal': '#595759', 'black': '#242528',\n    'olive': '#666A58', 'heather grey': '#D0CFD4', 'savana': '#967C6D', 'pink': '#F9779E', 'wine': '#5C2E40', 'green': '#323E32' };\n  const THREADS = {\n    'White': '#FBFBF8', 'Ivory': '#EFE6D2', 'Cream': '#E9DCC0', 'Tan': '#C8AE88', 'Champagne': '#D4BF95', 'Gold': '#B8913F',\n    'Light Pink': '#F2C6CE', 'Blush': '#E6B9B0', 'Dusty Rose': '#BE8C8A', 'Mauve': '#9C6F7A', 'Burgundy': '#6E2433', 'Red': '#B32630',\n    'Sage': '#9FAD92', 'Olive': '#5E6448', 'Hunter Green': '#2E4A35', 'Light Blue': '#A9C4DC', 'Dusty Blue': '#7F93A6', 'Navy': '#24304A',\n    'Lavender': '#BDB0D6', 'Light Grey': '#C9C9C6', 'Grey': '#8D8E8C', 'Charcoal': '#4A4B4D', 'Brown': '#6E4E38', 'Black': '#1B1B1B'\n  };\n  const METALLIC = ['Gold', 'Silver', 'Copper', 'Champagne', 'Rose Gold'];\n  const PAINTS = {\n    'olive paint': '#5E6555', 'white paint': '#FFFFFF', 'black paint': '#1A1A1A',\n    'dark grey paint': '#767676', 'dk grey paint': '#767676', 'navy paint': '#3B4859', 'ivory paint': '#EDE0CE'\n  };\n\n  /* Design templates, coordinates in 1/1000 inch from the CorelDRAW file */\n  const TEMPLATES = {\n    'curly-welcome': {\n      w: 23500, h: 17500, cx: 11750,\n      paths: [\"M13063.27 6803.78c-79.41,0 -98.04,-41.12 -98.04,-110.24 0,-79.48 30.04,-170.49 53.1,-228.65 9.59,-24.19 69.68,-177.1 89.87,-191.89 6.05,22.65 49.18,63.39 66.38,80.64 23.85,23.92 55.82,49.49 84.92,66.19 87.94,50.46 118.87,54.09 220.42,77.74 -35.81,67.65 -208.68,225.74 -277.71,261.37 -34.6,17.85 -87.53,44.85 -138.94,44.85zm1690.44 -493.35l5.68 -7.93c3.31,-6.16 1.98,-4.15 5,-11.33 3.68,-8.74 5.08,-11.56 9.08,-19.5 7.77,-15.44 11.26,-26.81 18.99,-42.26 13.86,-27.69 24.28,-52.51 38.22,-80.2 20.75,-41.22 66.67,-130.52 66.67,-170.17l0 -20.41c0,-130.92 -230.68,-239.6 -306.25,-122.37 -19.37,30.06 -31.51,64.07 -46.38,96.54 -30.8,67.27 -142.06,140.44 -205.36,182.62 -164.75,109.76 -344.98,189.93 -537.49,238.51 -26.73,6.75 -56.42,12.99 -85.04,12.99 39.62,-74.83 68.71,-152.62 92.51,-234.17 34.74,-119.05 50.55,-280.04 -1.22,-396.01 -33.46,-74.95 -85.07,-132.59 -163.02,-163.69 -136.9,-54.62 -276.22,-33.3 -395.61,49.12 -74,51.08 -130.87,123.22 -174.76,200.94 -18.42,32.6 -31.57,39.57 -61.53,69.16 -50.29,49.69 -93.06,112.37 -129.49,172.7 -47.31,78.37 -33.78,73.87 -96.93,152.17l-69.82 85.36c-42.64,48.87 -121.66,147 -163.23,187.98l-122.59 130.6c-41.98,41.95 -82.12,87.33 -126.66,126.54 -148.19,130.44 -356.22,325.64 -552.44,325.64 -16.17,0 -35.17,-4.24 -47.22,-9.96 -15.51,-7.36 -21.35,-17.39 -29.16,-32.09 -45.4,-85.44 -13.85,-251.65 3.95,-344.72 11.13,-58.2 28.8,-117.06 42.98,-173.44 14.07,-55.98 34.04,-109.03 53.44,-162.98l45.34 -113.91c5.89,-13.21 10.71,-27.37 16.56,-40.61 22.42,-50.77 45.04,-98.53 69.34,-147.09l76.77 -139.66c40.89,-65.61 138.08,-219.63 221.42,-219.63 20.87,0 32.68,39.53 32.68,61.24 0,58.5 -15.94,104.17 -39.44,152.48 -16.07,33.04 -28.15,61.09 -0.43,91.52 28.23,30.98 84.77,23.59 105.2,-7.21 10.59,-15.97 22.7,-38.94 30.98,-58.85 36.65,-88.24 60.15,-197.75 14.1,-288.29 -27.55,-54.16 -80.34,-84.46 -140.07,-96.81 -123.52,-25.53 -261.14,20.24 -357.18,98.16l-63.7 54.73c-25.43,21.28 -38.85,33.17 -59.46,58.97l-55 63.43c-35.95,44.46 -66.54,91.3 -97.55,139.31 -30.17,46.71 -47.14,76.96 -83.72,120.46 -67.32,80.06 -134.93,162.03 -208.65,236.48l-265.48 269.5c-20.41,18.87 -38.05,41.7 -59.88,58.55 -44.14,34.07 -80.72,77.8 -124.3,112.57 -22.88,18.26 -39.9,36.26 -63.62,54.81l-64.57 53.86c-105.48,93.98 -263.3,205.1 -407.53,205.1 -59.87,0 -53.1,-72.04 -53.1,-118.4 0,-81.17 23.96,-164.11 40.04,-229.46 17.72,-72.02 40.87,-137.64 63.63,-205.87l71.94 -197.56c6.31,-15.85 11.06,-29.76 18.08,-47.25l40.56 -98.28c8.09,-17.91 11.83,-31.4 20.38,-49.04 7.72,-15.91 12.4,-30.84 19.17,-46.17 6.94,-15.7 14.33,-31.37 21.49,-47.93l60.15 -139.94c12.74,-28.55 39.21,-102.03 61.67,-122.08 49.3,-44 108.59,-87.79 161.16,-128.81 26.11,-20.38 49.91,-39.03 74.4,-60.37l221.5 -186.89c38.03,-29.28 74.62,-68.91 112.13,-100.24 0.65,-0.54 1.59,-1.3 2.24,-1.84 0.65,-0.54 1.59,-1.3 2.24,-1.84l333.8 -323.71c84.5,-84.04 248.2,-289.79 297.12,-380.78 58.01,-107.89 127.21,-249.41 65.44,-375.72 -16.44,-33.64 -28.93,-43.31 -54.13,-68.38 -84.02,-83.58 -251.86,-67.78 -358.03,-29.02 -11.5,4.2 -17.02,8.17 -31.64,13.29 -103.52,36.21 -174.06,103.34 -257.16,167.58 -30.52,23.59 -58.33,52.81 -86.48,80.95 -15.29,15.29 -27.56,27.63 -42.89,42.87 -16.26,16.15 -25.12,29.52 -40.81,44.94 -35.81,35.19 -68,74.06 -98.83,113.53l-93.37 118.98c-61.31,81.93 -120.94,166.76 -175.24,253.55 -22.62,36.15 -43.28,69.54 -65.33,106.19 -21.57,35.87 -41.29,67.82 -61.91,105.52l-121 222.02c-5.41,9.52 -7.7,17.43 -13.24,27.6 -35.33,64.95 -66.87,133.67 -97.12,200.98l-103.6 239.41c-56.83,125.83 -15.78,85.96 -134.41,204.53 -29.59,29.57 -56.19,56.16 -85.78,85.74 -29.91,29.89 -57.74,53.59 -87.76,83.76l-273.71 236.78c-30.36,27.08 -63.11,50.68 -96.18,75.35 -9.56,7.13 -14.21,11.45 -22.72,18.12 -8.88,6.95 -16.7,11.39 -26.31,18.61 -17.52,13.18 -31.56,23.19 -49.56,36.21 -122.47,88.56 -326.46,218.12 -468.02,218.12 -94.15,0 -85.78,-80.89 -85.78,-151.07 0,-70.08 20.84,-160 36.76,-216.4 30.34,-107.52 67.82,-218.83 125.68,-315.33 12.09,-20.17 15.09,-18.4 39.25,-26.09 122.26,-38.94 254.8,-102.47 347.3,-187.72 289.07,-266.39 -65.8,-554.41 -415.48,-272.37 -95.87,77.33 -167.22,179.19 -229.84,284.71 -46.32,78.06 -80.51,163.52 -109.37,249.98 -5.59,16.77 -8.56,20.91 -13.28,39.8 -7.12,28.5 -15.37,54.3 -21.02,81.07 -6.35,30.1 -12.24,56.1 -16.15,85.93 -17.59,134.24 -15.37,272.2 45.04,393.53 29.58,59.39 77.68,103.99 136.18,133.35 129.29,64.91 293.75,25.76 414,-34.01 12.27,-6.09 26.54,-11.17 39.05,-18.13l198.09 -116.39c142.44,-91.67 274.26,-201.98 401.04,-313.66 42.5,-37.44 187.94,-179.9 207.33,-192.89 -15.82,67.87 -39.71,133.88 -56.38,200.87 -40.1,161.15 -93.69,363.58 -40.22,528.53 16.45,50.76 32.16,76.33 61.5,114.09 44.74,57.58 156,111.9 251.59,111.9 168.88,0 343.39,-124.06 471.04,-227.36 58.31,-47.19 132.85,-106.45 187.72,-159.41 59.7,-57.63 122.97,-110.79 181.69,-169.52 39.79,-39.8 76.61,-76.57 116.42,-116.36l42.69 -43.07c22.6,-24.71 47.78,-58.3 74.75,-76.35 -31.6,135.57 -44.93,208.54 -44.93,351.13 0,92.66 30.23,193.62 64.02,254.48 97.08,174.87 314.88,229.37 503.23,161.44 18.54,-6.69 38.8,-14.77 58.91,-22.78l108.28 -55.09c16.63,-10.48 32.37,-17.81 49.06,-28.53 17.26,-11.07 32.02,-21.11 49.04,-32.65 67.46,-45.72 160.81,-119.67 220.28,-179.95l42.94 -38.73c27.47,-27.61 52.11,-52.09 79.65,-79.62 14.61,-14.61 26.22,-26.25 40.85,-40.83l38.72 -42.95c14.74,-14.89 24.2,-22.78 37.55,-40.05 14.81,-19.17 99.96,-117.06 116.74,-128.29l-4.09 61.24c0,144 47.45,270.79 163.33,330.78 181.15,93.78 369.11,-3.06 511.28,-117.85 12.23,-9.88 19.22,-17.86 32.67,-28.59 29.43,-23.47 68.29,-63.57 90.99,-92.79 9.75,-12.55 17.59,-19.98 28.15,-33.1 22.15,-27.5 68.8,-75.18 76.32,-107.44 98.15,0 241.48,-38.57 333.39,-70.97l122.43 -45.02c48.19,-19.14 115.18,-49.9 160.24,-76.65 29.07,-17.26 57.75,-31.38 86.3,-48.48l86.01 -52.85c-1.49,17.91 -12.7,39.87 -18.87,58.71 -32.01,97.71 -67.28,194.24 -92.23,295.69 -24.07,97.91 -56.44,183.71 24.22,267.31 48.67,50.44 132.04,84.4 193.17,31.63 15.17,-13.1 53.34,-90.27 78.08,-126.09l127.24 -179.04c15.54,-20.82 29.5,-36.33 44.94,-57.15 36.07,-48.6 74.79,-97.48 116.27,-141.01 42.26,-44.36 79.11,-91.31 122.55,-134.73 33.12,-33.1 67.83,-71.83 102.15,-102.04 10.85,-9.55 15.62,-11.36 26.55,-22.46 11.44,-11.63 16.24,-14.56 28.47,-24.62 13.11,-10.8 48.69,-37.55 64.44,-41.75 -0.89,40.02 -39.51,132.12 -54.23,166.27 -42.48,98.51 -96.64,208.42 -132.16,308.86 -32.12,90.81 -75.55,179.09 -32.52,274.45 48.07,106.55 203.7,160.4 258.03,28.53 7.33,-17.79 11.31,-25.52 19.42,-41.83 7.83,-15.76 14.15,-24.74 21.43,-39.82 32.69,-67.71 75.86,-131.59 115.31,-195.04 46.77,-75.21 99.62,-148.63 152.51,-219.1l189.05 -239.74c6.36,-8.09 9.33,-10.26 15.17,-17.5 53.45,-66.2 211.2,-245.54 281.28,-245.54 13.96,0 16.34,34.09 16.34,48.99 0,119.59 -80.57,256.67 -127.8,366.29 -8.87,20.58 -15.23,36.69 -24.71,56.96 -26.88,57.48 -48.66,118.32 -72.12,176.97 -43.39,108.48 -102.16,287.5 -102.16,400.08 0,94.55 -2.12,192.12 68.35,262.39 51.69,51.54 121.7,76.49 197.16,76.49 124.04,0 293.89,-132.51 372.68,-211.35 11.6,-11.61 19.1,-14.83 30.78,-26.4 11.81,-11.7 18.09,-18.78 31.38,-29.88 41.63,-34.78 81.02,-78.54 119.68,-117.18l287.98 -296.01c21.36,-21.24 35.69,-39.98 57.2,-61.22 12.41,-12.24 15.76,-18.35 26.57,-30.61 16.34,-18.54 70.89,-82.29 86.77,-92.91 -27.8,119.26 -33,274.53 5.61,390.43 22.35,67.11 55.26,119.92 107.48,162.05 21.9,17.67 28.7,22.61 54.37,35.48 19.1,9.57 40.4,19.63 64.45,25.41 89.14,21.44 186.94,4.17 270.04,-25.91 130.78,-47.33 252.48,-117.53 365.16,-198.45 32,-22.98 67.48,-44.39 97.88,-69.56l185.85 -157.2c11.92,-11.98 19.14,-15.2 30.78,-26.39 38.87,-37.4 74.04,-74.17 112.25,-112.36 46.56,-46.54 98.99,-90.54 139.93,-141.86 29.88,-37.46 200.18,-205.24 246.53,-247.62 103.03,-94.21 208.24,-181.53 324.5,-259.51 42.31,-28.38 100.27,-59.59 147.94,-80.78 288.94,-128.44 566.69,-96.02 863.65,-22.28 186.98,46.43 369.02,116.23 547.35,187.83 18.3,7.35 28.16,11.7 46.66,18.69l242.16 96.83c63.72,25.77 128.36,49.73 191.99,73.49 82.7,30.89 166.96,56.02 250.8,84.12l156.26 43.87c87.04,21.95 187.71,41.69 282.68,52.25l187.82 12.44 127.41 -7.67c112.08,-12 221.68,-31.21 323.42,-76.85 33.28,-14.93 59.86,-26.85 91.22,-43.57l80.7 -54.07c37.62,-29.63 69.41,-60.16 99.44,-96.59 9.87,-11.97 21.51,-27.94 29.31,-40.11 25.62,-39.91 73.72,-133.57 73.72,-195.78 0,-69.26 -81.66,-135.26 -128.55,-71.33 -17.91,24.43 -12.01,34.83 -14.62,71.13 -6.85,95.35 -59.72,159.95 -127.35,215.67 -56.73,46.74 -148.09,90.05 -224.67,114.31l-66.2 19.57c-213.94,53.83 -420.1,39.19 -635.8,-6.06 -144.36,-30.28 -275.06,-74.15 -410.74,-120.23 -88.04,-29.9 -170.98,-63.72 -257.09,-98.25l-642.54 -247.83c-132.31,-44.07 -289.07,-90.41 -429.43,-105.63 -53.8,-5.84 -103.17,-16.33 -163.39,-16.33 -188.25,0 -262.9,-1.74 -439.73,50.42 -79.66,23.5 -158.85,61.24 -228.44,102.38 -94.27,55.73 -174.48,118.87 -258.51,186.65l-118.01 106.6c-60.57,60.74 -172.48,163.37 -220.99,224.15 -30.43,38.12 -181.77,182.5 -220.17,220.89l-114.35 106.18c-11.17,11.35 -17.09,14.27 -28.59,24.5l-62.33 52.03c-10.69,8.34 -20.51,16.26 -31.74,25.44l-261.57 183.58c-79.94,50.44 -315.81,174.14 -392.05,108.56 -63.29,-54.44 -2.35,-327.19 27.72,-407.39 25.35,-67.61 46.57,-138.09 78.94,-202.81 48.01,-95.98 33.86,-65.42 167.33,-118.55 122.77,-48.87 254.74,-125.4 323.92,-239.67 39.1,-64.58 45.45,-151.53 -1.8,-211.28 -46.18,-58.41 -116.34,-89.2 -196.7,-89.2 -218.3,0 -383.67,188.81 -473.03,323.36 -13.9,20.93 -24.93,38.85 -37.81,60.2 -6.72,11.14 -10.72,17.86 -17.41,31.59 -11.34,23.27 -25.37,36.57 -41.25,56.76 -8.72,11.09 -14.65,15.61 -22.83,26.17 -14.32,18.48 -29.78,38 -45.95,56.14 -31.56,35.42 -59.04,74.61 -91.83,108.28 -16.45,16.88 -30.72,34.39 -45.4,52.61 -59.78,74.16 -195.48,215.3 -261.06,286.17l-173.56 177.65c-17.33,17.33 -31.71,31.64 -49.02,49 -18.71,18.76 -34.56,30.34 -53.11,48.99l-75.49 71.54c-10.77,10.4 -17.39,13.68 -28.67,24.42 -58.47,55.67 -170.64,141.59 -242.03,158.21 -31.87,-47.58 -0.31,-144.06 18.65,-193.67l48.25 -127.33c15.26,-43.43 35.25,-82.65 51.56,-124.03 53.26,-135.11 94.69,-216.48 147.57,-375.1 46.68,-140 91.98,-340.56 10.1,-476.59 -20.42,-33.92 -51.98,-66.17 -87.07,-84.46 -5.72,-2.98 -13.2,-6.06 -19.56,-9.03 -95.44,-44.62 -204.22,-10.25 -283.13,43.62 -70.36,48.04 -179.33,157.77 -233,224.4l-105.52 123.17c-18,22.24 -33.41,41.64 -50.84,63.51 -19.96,25.04 -83.52,117.96 -101.58,131.19 0.41,-18.29 6.69,-38.89 9.96,-59.45 12.61,-79.22 17.84,-198.22 -37.53,-260.05 -104.18,-116.32 -247.7,-36.4 -340.66,33.1 -38.34,28.66 -73.43,64.49 -110.31,93.89l-40.94 40.74c-0.8,0.88 -3.08,3.41 -3.88,4.29l-5.95 6.3c-6.07,6.71 -5.44,6.7 -11.14,13.36 -25.41,29.72 -54.7,53.59 -78.72,84.63 -24.72,31.94 -53.28,59.39 -75.25,92.18l-4.77 -3.4zm2823.3 -380.39c3,-11.22 29.31,-45.19 38.03,-55.89 8.2,-10.07 13.66,-17.25 22.19,-26.82 9.32,-10.46 12.46,-16.5 22.42,-26.59 41.37,-41.93 72.92,-66.26 129.78,-66.26 -4.1,49.22 -104.93,118.54 -147.23,142.72l-65.18 32.84zm-8390.24 0c26.97,-50.95 87.39,-120.96 136.37,-153.58 27.11,-18.06 32.73,-21.98 76.04,-21.98 -5.21,62.64 -176.63,167.23 -212.41,175.56zm4301.32 -261.3c333.04,0 213.74,438.69 129.4,607.04 -8.89,17.74 -16.22,31 -24.32,49.18 -5.88,13.2 -5.8,12.55 -12.42,24.33 -5.52,9.83 -8.37,14.69 -10.96,25.79 -70.69,0 -174.64,-28.92 -233.66,-64.51 -58.32,-35.17 -119.27,-87.16 -147.84,-150.67 -8.27,-18.38 -7.23,-20.85 13.25,-46.74 36.76,-46.46 66.26,-75.37 109.92,-114.7l43.06 -30.45c17.1,-10.37 31.68,-19.22 51.26,-26.34 48,-17.44 82.31,-12.62 82.31,-93.29 0,-46.45 -57.36,-130.65 -142.97,-130.65 14.95,-13 43.22,-27.42 60.69,-33.25 19,-6.35 56.65,-15.74 82.28,-15.74zm-2704.84 -174.88l7.44 -10.26c2.14,-3.63 3.98,-7.83 5.52,-10.81l36.92 -69.25c61,-104.91 126.34,-231.88 191.04,-331.67l178.06 -279.31c19.55,-29.35 37.28,-52.83 57.22,-81.63l87.23 -121.04c11.29,-13.62 19.68,-25.34 30.13,-39.3l94.65 -117.7c11.48,-13.63 20,-24.81 32.42,-37.01l23.87 -25.13c4.24,-4.66 5.31,-6.34 9.45,-10.97 8.74,-9.77 8.09,-7.3 17.54,-15.13 20.17,-16.71 19.14,-21.28 56.64,-49.54 47.74,-35.98 148.61,-106.69 200.87,-42.06 93.47,115.59 -149.31,410.12 -234.89,506.16l-113.72 123.14c-0.57,0.61 -1.42,1.48 -1.99,2.09 -7.24,7.87 -9.46,11.68 -16.95,19.8l-139.09 138.61c-36.94,30.87 -89.56,85.81 -124.43,116.52l-166.74 147.72c-8.49,6.59 -9.77,9.02 -17.11,15.56l-57.57 48.61c-13.1,10.6 -25.43,20 -38.25,31.18l-118.23 91.41z\", \"M5289.85 5521.76c6.88,5.52 -2.02,13.35 -11.11,33.81l-44.69 98.24c-99.51,223.69 -165.04,380.17 -238.82,610.53 -32.57,101.67 -52.6,203.87 -66.01,309.65 -18.83,148.52 -7.96,348.16 100.22,461.51 10.72,11.24 13.36,18.42 24.37,28.71 6.66,6.22 6.8,5.42 13.7,10.8l46.07 35.61c157.37,109.98 343.13,74.41 495.67,-24.31l106.61 -73.08c18.37,-13.68 31.19,-25.96 49.59,-40.25 57.2,-44.45 160.52,-143.41 207.53,-196.77 63.58,-72.17 129.02,-143.41 190.06,-218.32 37.28,-45.75 106,-126.73 139.04,-175.41l95.92 -128.68c13.8,-18.31 23.95,-33.36 37.91,-51.93 14.09,-18.74 23.54,-34.05 37.36,-52.48l147.61 -211.75c22.73,-32.79 128.98,-202.13 147.65,-215.8 -10.33,44.33 -51.53,164.34 -67.04,218.79 -10.79,37.9 -22.61,74.28 -30.62,112.3l-28.14 114.78c-20.57,80.98 -61.19,297.46 -62.12,366.61 -0.64,46.91 -8.15,87.12 -8.15,138.84 0,124.62 3.47,252.46 36.27,363.87l64.56 155.94c26.33,47.42 62.05,86.53 100.27,124.34 50.73,50.19 122.74,88.41 191,107.14 225.63,61.91 411.1,-36.37 582.39,-165.15 51.59,-38.79 100.25,-82.34 145.78,-127.85 15.98,-15.96 28.96,-28.94 44.93,-44.91l85.76 -93.93c44.99,-45.22 84.48,-99.71 122.7,-150.91 13.85,-18.57 25.87,-31.85 38.88,-50.96 36.56,-53.69 77.43,-103.07 110.87,-158.66l139.93 -223.51c11.79,-19.66 20.86,-37.58 32.65,-57.19 11.84,-19.69 20.85,-38.35 32.08,-57.76 136.06,-235.27 246.97,-483.66 352.3,-733.91 36.64,-87.06 68.1,-174.83 99.35,-264.07 126.69,-361.78 250.09,-822.12 250.61,-1198.93 0.04,-28.58 4.13,-51.78 4.24,-85.61 0.19,-59.99 -7.33,-207.39 -17.97,-255.59 -26.41,-119.6 -186.29,-111.65 -186.29,-1.61 0,16.12 28.91,114.02 36.47,151.37 44.92,221.82 -0.19,495.64 -44.35,710.41l-28.05 123.03c-5.61,22.19 -9.79,39.29 -15.49,62.09l-16.56 61.02c-27.17,100.12 -60.34,197.35 -92.87,295.05 -37.93,113.91 -81.07,224.11 -125.67,335.75 -14.52,36.34 -29.46,72.35 -45.48,109.69l-195.17 421.44c-35.7,64.18 -69.21,136.13 -106.16,200.11l-84.28 144.41c-84.14,140.97 -180.28,283.57 -282.61,411.61l-85.12 102.73c-53.18,62.84 -111.37,122.65 -169.71,181.5l-167.56 138.74c-14.74,10.61 -32.4,20.77 -47.69,29.91 -97.57,58.36 -248.8,122.45 -362.22,47.18 -16.17,-10.73 -27.52,-19.98 -39.02,-34.48 -111.64,-140.77 -86.37,-432.58 -61.83,-602.13 34.56,-238.85 106.96,-541.63 183.53,-767.87l87.8 -267.46c48.87,-146.16 109.76,-288.91 162.4,-433.78l34.74 -83.68c10.37,-29.7 23.62,-56.37 34.59,-83.83l72.46 -164.38c28.12,-62.5 58.29,-100.86 37.76,-185.41 -7.91,-32.54 -21.67,-53.85 -43.12,-75.31 -16.51,-16.52 -49.72,-37.92 -81.83,-34.76 -86.46,8.49 -126.78,124.6 -167.66,191.81 -15.54,25.55 -25.57,51.91 -40.91,77.52 -28.15,47 -53.29,109.63 -81.14,159.79 -48.16,86.75 -137.08,215.06 -179.63,294.07 -26.57,49.32 -80.25,131.42 -113.32,180.7l-405.17 607.57 -176.76 239.78c-59.37,79.29 -122.79,154.65 -184.95,231.59l-112.83 128.11c-66.24,71.56 -135.37,143.44 -208.31,208.24 -81.3,72.22 -225.54,186.83 -352.28,186.83 -122.6,0 -171.56,-105.39 -171.56,-228.64 0,-133.34 39.72,-281.19 80.15,-401.67 10.37,-30.89 19.32,-60.33 29.62,-88.8 10.93,-30.21 23.06,-59.16 33.67,-88.83 41.09,-114.87 95.81,-226.02 143.65,-338.2 12.5,-29.3 25.83,-51.04 37.97,-80.45 38.75,-93.85 154.89,-311.7 203.23,-401.13 4.82,-8.92 6.96,-11.06 10.61,-17.98l635.42 -1140.94c39.59,-73.37 42.6,-135.43 -8.32,-203.86 -41.06,-55.18 -113.18,-65.83 -167.71,-25.17 -33.68,25.12 -91.53,123.07 -131.29,162.74 -87.58,87.4 -132.24,117.7 -230.33,186.24 -7.45,5.21 -4.91,4.49 -14.47,10.04l-160.68 84.37c-11.58,5.22 -21.74,8.46 -34.98,14.04 -143.55,60.46 -306.24,97.78 -462.75,71.2 -53.67,-9.11 -113.63,-41.99 -164.65,-24.64 -94.11,32 -29.76,184.43 90.56,184.43 157.53,0 312.12,-5.57 461.08,-53.58l113.12 -38c13.87,-5.6 26.21,-9.27 38.46,-14.63l103.6 -47.51c15.02,-7.66 19.75,-14.12 35.35,-17.75 -6.73,12.71 -13.28,21.31 -20.24,32.85 -80.91,134.2 -156.32,272.1 -232.12,409 -3.66,6.61 -6.31,12 -9.98,18.61l-58.63 112.89c-14.01,25.17 -23.02,48.61 -37.07,73.18 -7.17,12.54 -14.85,19.44 -25.33,27.76 -12.08,9.6 -18.96,15.8 -31.57,25.6l-88.54 78.9c-10.48,10.61 -17.1,18.5 -29.28,27.89 -58.94,45.48 -115.32,112.59 -168.82,166.06l-56.46 57.89c-52.89,63.94 -116.53,117.75 -173.73,177.48l-102.68 101.52c-178.62,165.14 -380.31,330.48 -621.6,391.25 -132.25,33.31 -198.38,30.26 -333.28,30.26 -140.09,0 -319.04,-41.95 -448.83,-82.16l-201.18 -64.3c-32.41,-11.71 -62.68,-22.31 -95.79,-34.91l-427.74 -168.57c-145.03,-61.3 -289.7,-110.73 -442.51,-161.96 -138.56,-46.45 -281.51,-80.11 -429.17,-101.81 -57.92,-8.51 -118.64,-14.16 -181.17,-14.89 -24.34,-0.29 -36.78,-4.6 -65.31,-4.41 -63.58,0.42 -180.72,13.85 -239.87,25.69 -195.91,39.19 -389.22,124.23 -502.65,293.75 -30.71,45.9 -74.33,135.1 -74.33,195.17 0,48.73 29.7,91.54 75.11,96.59 73.8,8.2 66.59,-85.78 68.88,-103.73 24.75,-194.45 208.94,-269.68 367.16,-327.1 96.69,-35.09 225.98,-49.54 330.33,-49.54 214.82,0 428.02,48.02 625.5,113.8 113.04,37.66 229.41,74.69 338.59,122.93 86.07,38.04 179.1,67.97 265.33,106.34 11.52,5.13 19,7.71 32.22,12.7l134.22 53.66c13.51,5.43 21.06,8.59 35.35,13.66l274.75 96.92c48.28,15.76 91.64,27.57 141.75,42.05 269.79,77.95 594.57,102.91 861.04,14.15 68.68,-22.87 136.48,-51.34 197.91,-87.99l89.15 -53.8c72.23,-48.14 142.26,-96.05 203.7,-155.69 7.38,-7.16 10.88,-11.78 18.72,-18.03 52.51,-41.9 97.24,-93.83 146.76,-139.12l12.75 -11.76c0.12,-0.13 4.65,-5.28 5.76,-6.5 51,-56.39 109.95,-105.28 160.06,-162.57 4.79,-5.48 3.33,-3.72 7.78,-8.56l46.38 -47.54c32.98,-32.96 122.5,-113.88 143.99,-145.96z\"],\n      fonts: { script: 'STT Love Rose', print: 'STT Montserrat Medium' },\n      fields: [\n        { key: 'Top Line', label: 'Top line', def: 'TO OUR FOREVER', font: 'print', track: 0.35, size: 1041.67, y: 9113.33, stroke: 13.89, maxW: 15000, upper: true, max: 30 },\n        { key: 'Names', label: 'Names', def: 'Emily & James', font: 'script', size: 2291.67, y: 11720.24, stroke: 41.67, maxW: 19500, required: true, max: 40 },\n        { key: 'Wedding Date', label: 'Date', def: '06.14.2027', font: 'print', track: 0.35, size: 1041.67, y: 13483.85, stroke: 13.89, maxW: 12000, max: 20 }\n      ]\n    }\n  };\n\n  function el(tag, attrs, parent) {\n    const e = document.createElementNS(NS, tag);\n    for (const k in attrs) e.setAttribute(k, attrs[k]);\n    if (parent) parent.appendChild(e);\n    return e;\n  }\n\n  const PRINT_FONTS = new Set(['stt montserrat medium', 'montserrat', 'montserrat medium', 'flower & honey', 'indira k', 'alpas', 'arial',\n    'cambria', 'felix titling', 'baskerville old face', 'made sunflower', 'sunydale serif', 'la luxes serif', 'steelfish', 'bodoni bd bt',\n    'mongolian baiti', 'microsoft himalaya']);\n\n  class STTPersonalizer extends HTMLElement {\n    connectedCallback() {\n      if (this._init) return; this._init = true;\n      this.cfg = JSON.parse(this.querySelector('script[type=\"application/json\"]').textContent);\n      const name = this.cfg.template || 'curly-welcome';\n      if (TEMPLATES[name]) return this.start(TEMPLATES[name]);\n      /* Per-design templates live in theme assets as stt-tpl-<name>.json */\n      fetch(`${this.cfg.assetBase}stt-tpl-${name}.json`).then(r => { if (!r.ok) throw 0; return r.json(); })\n        .then(t => { TEMPLATES[name] = t; this.start(t); })\n        .catch(() => this.start(TEMPLATES['curly-welcome']));\n    }\n\n    start(tpl) {\n      this.tpl = tpl;\n      /* Laser thickening, set per font in points like the Corel outline (1000 units per inch, 72 pt per inch).\n         Fonts not listed keep the template outline, or about 1.8% of the font size when the file had none. */\n      const PT = 1000 / 72;\n      const FONT_PT = { 'stt montserrat medium': 1, 'montserrat': 1, 'montserrat medium': 1, 'indira k': 2.5,\n        'stt love rose': 4, 'caramel': 4, 'segatha': 5, 'beautiful bloom': 3 };\n      (tpl.fields || []).forEach(f => {\n        const fam = String((tpl.fonts || {})[f.font] || f.font || '').toLowerCase();\n        if (FONT_PT[fam] != null) f.stroke = Math.round(FONT_PT[fam] * PT * 100) / 100;\n        else if (!f.stroke) f.stroke = Math.round(f.size * 0.018 * 100) / 100;\n      });\n      /* Lines that sit within 3.5% of the middle are centered on the sign so longer names stay balanced */\n      (tpl.fields || []).forEach(f => { if (f.x != null && !f.anchor && Math.abs(f.x - tpl.w / 2) < tpl.w * 0.035) f.x = tpl.w / 2; });\n      this.paths = this.tpl.paths || [];\n      this.state = { letter: 'White', stain: null, print: false };\n      this.parseShownIn();\n      /* Template defaults from the example photo win over the description */\n      if (tpl.letterDefault) this.state.letter = tpl.letterDefault;\n      if (tpl.stainDefault) this.state.stain = tpl.stainDefault;\n      this.tpl.fields.forEach(f => (this.state[f.key] = ''));\n      this.loadFonts().then(() => this.render());\n      this.buildUI();\n      this.addSizeChart();\n      this.hookVariants();\n      this.render();\n    }\n\n    /* \"Shown in Honey stain with white lettering\" -> preselect what the example photo shows */\n    parseShownIn() {\n      const txt = (this.cfg.shownIn || '').toLowerCase();\n      this.shown = {};\n      if (!txt) return;\n      const byLen = a => a.sort((x, y) => y.length - x.length);\n      const stains = byLen([...Object.keys(this.cfg.stains), ...Object.keys(PAINTS).map(k => k[0].toUpperCase() + k.slice(1) + ' Paint')]);\n      const before = txt.split(/ with /)[0];\n      const st = stains.find(n => before.includes(n.toLowerCase().replace(' paint', '')));\n      if (st) this.shown.stain = st;\n      const after = txt.split(/ with /)[1] || '';\n      const lc = byLen(Object.keys(LETTER_COLORS)).find(n => after.includes(n.toLowerCase()));\n      if (lc) { this.shown.letter = lc; this.state.letter = lc; }\n    }\n\n    /* Open on a 3D size + the stain from the example photo, unless the link already picks a variant */\n    applyStartVariant() {\n      if (this._started) return; this._started = true;\n      if (/[?&]variant=/.test(location.search)) return;\n      /* Horizon re-renders the picker after each change, so pick size first, then stain */\n      const pick = (re, want) => {\n        const sel = this.optionControls(re).find(c => c.tagName === 'SELECT');\n        if (!sel) return false;\n        const o = [...sel.options].find(want);\n        if (!o || sel.value === o.value) return false;\n        sel.value = o.value; sel.dispatchEvent(new Event('change', { bubbles: true }));\n        return true;\n      };\n      const stainStep = () => {\n        const want = (this.tpl.stainDefault || this.shown.stain || 'Dark Walnut').toLowerCase();\n        pick(/stain|paint|color/i, o => o.value.toLowerCase() === want);\n      };\n      const sizeSel = this.optionControls(/size/i).find(c => c.tagName === 'SELECT');\n      if (sizeSel && /print/i.test(sizeSel.value) && pick(/size/i, o => o.value && !/print/i.test(o.value))) setTimeout(stainStep, 900);\n      else stainStep();\n    }\n\n    addSizeChart() {\n      if (!this.cfg.sizeChart) return;\n      const dlg = document.createElement('dialog'); dlg.className = 'stt-pz__dialog';\n      dlg.innerHTML = `<button type=\"button\" class=\"stt-pz__close\" aria-label=\"Close size chart\">&times;</button><img src=\"${this.cfg.sizeChart}\" alt=\"Sign size chart\" width=\"1536\" height=\"1024\">`;\n      dlg.querySelector('button').addEventListener('click', () => dlg.close());\n      dlg.addEventListener('click', e => { if (e.target === dlg) dlg.close(); });\n      document.body.appendChild(dlg); this.sizeDialog = dlg;\n      this.placeSizeButton();\n      new MutationObserver(() => this.placeSizeButton()).observe(document.querySelector('variant-picker') || document.body, { childList: true, subtree: true });\n    }\n\n    placeSizeButton() {\n      const sel = this.optionControls(/size/i).find(c => c.tagName === 'SELECT');\n      if (!sel) return;\n      const box = sel.closest('.variant-option') || sel.closest('fieldset') || sel.parentElement.parentElement;\n      const lab = box && box.querySelector(':scope > legend, :scope > label');\n      const host = lab || sel.parentElement;\n      if (!host || host.querySelector('.stt-pz__chartbtn')) return;\n      const b = document.createElement('button');\n      b.type = 'button'; b.className = 'stt-pz__chartbtn'; b.textContent = 'Size chart';\n      b.addEventListener('click', e => { e.preventDefault(); e.stopPropagation(); this.sizeDialog.showModal(); this.sizeDialog.scrollTop = 0; window.scrollTo({ left: 0 }); });\n      host.appendChild(b);\n    }\n\n    loadFonts() {\n      const faces = [\n        new FontFace('STT Love Rose', `url(${this.cfg.fontScript})`),\n        new FontFace('STT Montserrat Medium', `url(${this.cfg.fontPrint})`)\n      ];\n      Object.entries(this.tpl.fontFiles || {}).forEach(([fam, file]) => faces.push(new FontFace(fam, `url(${this.cfg.assetBase}${file})`)));\n      return Promise.all(faces.map(f => f.load().then(ff => document.fonts.add(ff)).catch(() => {})));\n    }\n\n    buildUI() {\n      const form = this.findForm();\n      const fieldsBox = this.querySelector('[data-fields]');\n      this.tpl.fields.forEach(f => {\n        if (f.fixed) { this.state[f.key] = ''; return; } /* fixed artwork words (like 'the' or '+'), not editable */\n        const wrap = document.createElement('label'); wrap.className = 'stt-pz__field';\n        wrap.innerHTML = `<span>${f.label}${f.required ? ' <em>*</em>' : ''}</span>`;\n        const inp = document.createElement('input');\n        inp.type = 'text'; inp.maxLength = f.max; inp.placeholder = f.def;\n        inp.name = `properties[${f.key}]`; inp.autocomplete = 'off';\n        if (form) inp.setAttribute('form', form.id);\n        if (f.key === 'Top Line' || f.prefill) inp.value = f.def;\n        inp.addEventListener('input', () => { this.state[f.key] = inp.value; this.render(); });\n        this.state[f.key] = inp.value;\n        wrap.appendChild(inp); fieldsBox.appendChild(wrap);\n        f.input = inp;\n      });\n\n      /* Color pickers. Multi-color designs (tpl.multiColor) get a second picker for the artwork,\n         and both pickers also offer the wood stains, so letters or artwork can be stained wood. */\n      const STAIN_ORDER = ['Natural', 'American', 'Honey', 'Dark Walnut', 'Kona', 'Sunbleached', 'Briarsmoke', 'Grey', 'Carbon Grey', 'Espresso', 'Ebony'];\n      const withStains = true; /* stain letters are offered on every 3D sign; hidden when UV print is chosen */\n      const stainNames = withStains ? STAIN_ORDER.filter(n => this.cfg.stains[n]) : [];\n      const picker = (box, nameEl, propName, key) => {\n        const hidden = document.createElement('input');\n        hidden.type = 'hidden'; hidden.name = `properties[${propName}]`; hidden.value = this.state[key];\n        if (form) hidden.setAttribute('form', form.id);\n        this.appendChild(hidden);\n        const add = (name, hex, img) => {\n          const b = document.createElement('button');\n          b.type = 'button'; b.className = 'stt-pz__swatch' + (img ? ' is-stain' : '');\n          if (img) b.style.backgroundImage = `url(${img})`; else b.style.setProperty('--c', hex);\n          b.title = name; b.setAttribute('aria-label', name);\n          if (name === this.state[key]) b.setAttribute('aria-pressed', 'true');\n          b.addEventListener('click', () => {\n            box.querySelectorAll('[aria-pressed]').forEach(x => x.removeAttribute('aria-pressed'));\n            b.setAttribute('aria-pressed', 'true');\n            this.state[key] = name; hidden.value = name; nameEl.textContent = name; this.render();\n          });\n          box.appendChild(b);\n        };\n        if (this.tpl.apparel) Object.entries(THREADS).forEach(([name, hex]) => add(name, hex));\n        else { Object.entries(LETTER_COLORS).forEach(([name, hex]) => add(name, hex));\n          stainNames.forEach(n => add(n + ' Stain', null, this.cfg.stains[n])); }\n        nameEl.textContent = this.state[key];\n        return hidden;\n      };\n      const sw = this.querySelector('[data-letters]');\n      const lbl = this.querySelector('[data-letter-name]');\n      if (this.tpl.apparel) { const p = lbl.closest('.stt-pz__label'); if (p && p.firstChild) p.firstChild.textContent = 'Thread color: ';\n        const sp = this.querySelector('[data-stain-name]'); const pp = sp && sp.closest('.stt-pz__label'); if (pp && pp.firstChild) pp.firstChild.textContent = 'Shirt color: '; }\n      if (this.tpl.apparel) { const nt = this.querySelector('.stt-pz__note'); if (nt) nt.textContent = 'This preview shows your shirt color, thread color and font. Our designer reviews every design before it is stitched. Thread and shirt colors may look slightly different in person.';\n        const eb = this.querySelector('.stt-pz__eyebrow'); if (eb) eb.textContent = 'Design your shirt'; }\n      this.letterInput = picker(sw, lbl, this.tpl.apparel ? 'Thread Color' : 'Letter Color', 'letter');\n      if (this.tpl.multiColor) {\n        const grp = document.createElement('div'); grp.className = 'stt-pz__group';\n        grp.innerHTML = `<p class=\"stt-pz__label\">${this.tpl.artLabel || 'Design color'}: <strong data-art-name></strong></p><div class=\"stt-pz__swatches\" data-art></div>`;\n        sw.closest('.stt-pz__group').before(grp);\n        if (!this.state.art) this.state.art = this.tpl.artDefault || 'White';\n        this.artInput = picker(grp.querySelector('[data-art]'), grp.querySelector('[data-art-name]'), this.tpl.artProp || this.tpl.artLabel || 'Design Color', 'art');\n      }\n      /* Extra color pickers (tpl.colors): e.g. greenery separate from the frame. Paths use them via pathRoles, fields via f.color */\n      this.extraInputs = {};\n      (this.tpl.colors || []).forEach(c => {\n        const grp = document.createElement('div'); grp.className = 'stt-pz__group';\n        grp.innerHTML = `<p class=\"stt-pz__label\">${c.label}: <strong data-xname></strong></p><div class=\"stt-pz__swatches\" data-x></div>`;\n        grp.dataset.colorKey = c.key;\n        sw.closest('.stt-pz__group').before(grp);\n        if (!this.state[c.key]) this.state[c.key] = c.def || 'White';\n        this.extraInputs[c.key] = picker(grp.querySelector('[data-x]'), grp.querySelector('[data-xname]'), c.prop || c.label, c.key);\n      });\n\n      const stainBox = this.querySelector('[data-stains]');\n      this.stainButtons = {};\n      const sel = this.optionControls(/stain|paint|color/i).find(c => c.tagName === 'SELECT');\n      const offered = sel ? [...sel.options].map(o => o.value).filter(Boolean)\n        : [...document.querySelectorAll('variant-picker input[type=\"radio\"]')].map(i => i.value).filter(v => this.cfg.stains[v] || PAINTS[v.toLowerCase()]);\n      const list = offered.length ? offered : Object.keys(this.cfg.stains);\n      list.forEach(name => {\n        const b = document.createElement('button');\n        b.type = 'button'; b.className = 'stt-pz__stain'; b.title = name; b.setAttribute('aria-label', name);\n                const key = Object.keys(this.cfg.stains).find(k => k.toLowerCase() === name.toLowerCase());\n        if (this.tpl.apparel) b.style.background = SHIRTS[name.toLowerCase()] || '#ccc'; else if (key) b.style.backgroundImage = `url(${this.cfg.stains[key]})`; else b.style.background = PAINTS[name.toLowerCase()] || '#ccc';\n        b.addEventListener('click', () => this.chooseStain(name));\n        stainBox.appendChild(b); this.stainButtons[name.toLowerCase()] = b;\n      });\n\n      if (form) form.addEventListener('submit', e => {\n        const miss = this.tpl.fields.find(f => f.required && !f.input.value.trim());\n        if (miss) { e.preventDefault(); e.stopImmediatePropagation(); miss.input.focus(); miss.input.classList.add('is-error'); }\n      }, true);\n    }\n\n    findForm() {\n      const sec = this.closest('section, .shopify-section') || document;\n      return sec.querySelector('form[action*=\"/cart/add\"]') || document.querySelector('form[action*=\"/cart/add\"]');\n    }\n\n    optionControls(match) {\n      const out = [];\n      document.querySelectorAll('variant-picker select, variant-picker fieldset, select[name^=\"options\"]').forEach(c => {\n        const name = (c.name || '') + ' ' + (c.closest('fieldset, .variant-option, div')?.querySelector('legend, label')?.textContent || '');\n        if (match.test(name)) out.push(c);\n      });\n      return out;\n    }\n\n    readVariantState() {\n      const stainSel = this.optionControls(/stain|paint|color/i).find(c => c.tagName === 'SELECT');\n      const sizeSel = this.optionControls(/size/i).find(c => c.tagName === 'SELECT');\n      if (stainSel) this.setStain(stainSel.value, false);\n      else { const r = document.querySelector('variant-picker input[type=\"radio\"]:checked[name*=\"tain\" i]'); if (r) this.setStain(r.value, false); }\n      if (sizeSel) { this.state.print = /print/i.test(sizeSel.value); this.state.size = sizeSel.value; }\n      this.render();\n    }\n\n    hookVariants() {\n      document.addEventListener('change', e => { if (e.target.closest('variant-picker, [data-variant-picker], select[name^=\"options\"]')) setTimeout(() => this.readVariantState(), 30); });\n      document.addEventListener('variant:update', () => setTimeout(() => this.readVariantState(), 30));\n      setTimeout(() => { this.applyStartVariant(); this.readVariantState(); }, 300);\n    }\n\n    chooseStain(name) {\n      this.setStain(name, true);\n      const sel = this.optionControls(/stain|paint|color/i).find(c => c.tagName === 'SELECT');\n      if (sel) {\n        const opt = [...sel.options].find(o => o.value.toLowerCase() === name.toLowerCase());\n        if (opt) { sel.value = opt.value; sel.dispatchEvent(new Event('change', { bubbles: true })); }\n      } else {\n        const r = [...document.querySelectorAll('variant-picker input[type=\"radio\"]')].find(i => i.value.toLowerCase() === name.toLowerCase());\n        if (r) r.click();\n      }\n    }\n\n    setStain(name, render) {\n      if (!name) return;\n      this.state.stain = name;\n      Object.values(this.stainButtons || {}).forEach(b => b.removeAttribute('aria-pressed'));\n      const b = this.stainButtons && this.stainButtons[name.toLowerCase()]; if (b) b.setAttribute('aria-pressed', 'true');\n      const l = this.querySelector('[data-stain-name]'); if (l) l.textContent = name;\n      if (render) this.render();\n    }\n\n    /* Stained-wood letters only exist for 3D letters: hide them for UV print and fall back to White */\n    syncStainSwatches() {\n      const p = !!this.state.print;\n      this.querySelectorAll('.stt-pz__swatch.is-stain').forEach(b => { b.hidden = p; });\n      if (!p) return;\n      [['letter', this.letterInput, '[data-letters]', '[data-letter-name]'], ['art', this.artInput, '[data-art]', '[data-art-name]'],\n        ...Object.entries(this.extraInputs || {}).map(([k, inp]) => [k, inp, `[data-color-key=\"${k}\"] [data-x]`, `[data-color-key=\"${k}\"] [data-xname]`])].forEach(([k, inp, box, lab]) => {\n        if (!/ Stain$/.test(this.state[k] || '')) return;\n        this.state[k] = 'White'; if (inp) inp.value = 'White';\n        const l = this.querySelector(lab); if (l) l.textContent = 'White';\n        const bx = this.querySelector(box);\n        if (bx) bx.querySelectorAll('.stt-pz__swatch').forEach(b => b.toggleAttribute('aria-pressed', b.title === 'White'));\n      });\n    }\n\n    render() {\n      this.syncStainSwatches();\n      const t = this.tpl, s = this.state;\n      const host = this.querySelector('[data-preview]');\n      /* Board shape follows the chosen size: rectangle by default, square or circle when that size is picked.\n         The design keeps its own coordinates; only the board frame around it changes. */\n      const F = (() => {\n        const v = String(s.size || '').toLowerCase(), w = t.w, h = t.h;\n        const m = v.match(/(\\d+)\\s*x\\s*(\\d+)/);\n        const want = /round|circle/.test(v) ? 'circle' : (/square/.test(v) || (m && m[1] === m[2])) ? 'square' : 'rect';\n        const base = t.round ? 'circle' : Math.abs(w - h) < 1 ? 'square' : 'rect';\n        if (want === base) return { x: 0, y: 0, w, h, round: !!t.round };\n        let W, H;\n        if (want === 'rect') { if (base === 'rect') { W = w; H = h; } else { W = w * 4 / 3; H = h; } }\n        else { W = H = base === 'rect' ? Math.max(w, h) * (want === 'circle' ? 1.02 : 0.94) : w; }\n        return { x: (w - W) / 2, y: (h - H) / 2, w: W, h: H, round: want === 'circle' };\n      })();\n      const svg = el('svg', { viewBox: `${F.x} ${F.y} ${F.w} ${F.h}`, role: 'img', 'aria-label': 'Live preview of your sign' });\n      const defs = el('defs', {}, svg);\n      const sh = el('filter', { id: 'stt-sh', x: '-10%', y: '-10%', width: '120%', height: '130%' }, defs);\n      el('feDropShadow', { dx: 55, dy: 85, stdDeviation: 38, 'flood-color': '#000', 'flood-opacity': 0.5 }, sh);\n      const metal = el('linearGradient', { id: 'stt-metal', x1: 0, y1: 0, x2: 0, y2: 1 }, defs);\n      const hex = LETTER_COLORS[s.letter] || '#fff';\n      el('stop', { offset: '0%', 'stop-color': hex }, metal);\n      el('stop', { offset: '42%', 'stop-color': '#ffffff', 'stop-opacity': 0.28 }, metal);\n      el('stop', { offset: '62%', 'stop-color': hex }, metal);\n      el('stop', { offset: '100%', 'stop-color': hex }, metal);\n\n      const stainKey = (s.stain || this.cfg.defaultStain || 'Honey');\n      const img = this.cfg.stains[Object.keys(this.cfg.stains).find(k => k.toLowerCase() === stainKey.toLowerCase())];\n      const clip = el('clipPath', { id: 'stt-board' }, defs); el('rect', { x: F.x, y: F.y, width: F.w, height: F.h, rx: F.round ? F.w / 2 : 120 }, clip); /* round signs clip to a circle */\n      const bg = el('g', { 'clip-path': 'url(#stt-board)' }, svg);\n      if (t.apparel) {\n        /* Sweatshirt fabric: the shirt color with a soft fleece grain, no shirt outline */\n        const fab = el('filter', { id: 'stt-fab', x: 0, y: 0, width: '100%', height: '100%' }, defs);\n        el('feTurbulence', { type: 'fractalNoise', baseFrequency: 0.012, numOctaves: 2, seed: 4, result: 'n' }, fab);\n        el('feColorMatrix', { in: 'n', type: 'matrix', values: '0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.10 0' }, fab);\n        el('rect', { x: F.x, y: F.y, width: F.w, height: F.h, fill: SHIRTS[stainKey.toLowerCase()] || '#F6F5F1' }, bg);\n        el('rect', { x: F.x, y: F.y, width: F.w, height: F.h, fill: '#000', filter: 'url(#stt-fab)' }, bg);\n      } else if (img) el('image', { href: img, x: F.x, y: F.y, width: F.w, height: F.h, preserveAspectRatio: 'xMidYMid slice' }, bg);\n      else el('rect', { x: F.x, y: F.y, width: F.w, height: F.h, fill: PAINTS[stainKey.toLowerCase()] || '#d8c3a0' }, bg);\n      /* Shiplap: the board is three planks, so two dark seams split it into even thirds, behind the letters */\n      if (s.shiplap) { const gap = Math.max(t.h * 0.012, 90); [1, 2].forEach(k => el('rect', { x: 0, y: t.h * k / 3 - gap / 2, width: t.w, height: gap, fill: '#16120f', 'fill-opacity': 0.92 }, bg)); }\n\n      /* A color name is a paint color, or \"<stain> Stain\" which fills with that wood texture */\n      const paint = name => {\n        const m = /^(.*) Stain$/.exec(name || '');\n        if (t.apparel) return THREADS[name] || LETTER_COLORS[name] || '#fff';\n        if (!m || !this.cfg.stains[m[1]]) return LETTER_COLORS[name] || '#fff';\n        const id = 'stt-wood-' + m[1].replace(/\\W/g, '');\n        if (!defs.querySelector('#' + id)) {\n          const p = el('pattern', { id, patternUnits: 'userSpaceOnUse', x: 0, y: 0, width: t.w, height: t.h }, defs);\n          el('image', { href: this.cfg.stains[m[1]], x: 0, y: 0, width: t.w, height: t.h, preserveAspectRatio: 'xMidYMid slice' }, p);\n        }\n        return `url(#${id})`;\n      };\n      const fill = paint(s.letter); const baseFill = fill; /* metallics shown flat, no shine */\n      const artFill = t.multiColor ? paint(s.art || 'White') : fill;\n      if (t.apparel) { /* embroidery sits just above the fabric: a tight soft shadow */\n        /* raised thread: light the blurred letter shape so every stroke looks puffed up off the fabric */\n        const em = el('filter', { id: 'stt-emb', x: '-5%', y: '-5%', width: '110%', height: '115%', 'color-interpolation-filters': 'sRGB' }, defs);\n        const B = t.embBlur || 38, S = t.embRelief || 9;\n        el('feGaussianBlur', { in: 'SourceAlpha', stdDeviation: B, result: 'bump' }, em);\n        const dl = el('feDiffuseLighting', { in: 'bump', surfaceScale: S, diffuseConstant: 1.22, 'lighting-color': '#fff', result: 'diff' }, em);\n        el('feDistantLight', { azimuth: 235, elevation: 52 }, dl);\n        el('feComposite', { in: 'SourceGraphic', in2: 'diff', operator: 'arithmetic', k1: 1, k2: 0, k3: 0, k4: 0, result: 'shaded' }, em);\n        const sl = el('feSpecularLighting', { in: 'bump', surfaceScale: S, specularConstant: 0.55, specularExponent: 22, 'lighting-color': '#fff', result: 'spec' }, em);\n        el('feDistantLight', { azimuth: 235, elevation: 52 }, sl);\n        el('feComposite', { in: 'spec', in2: 'SourceAlpha', operator: 'in', result: 'specIn' }, em);\n        el('feComposite', { in: 'shaded', in2: 'specIn', operator: 'arithmetic', k1: 0, k2: 1, k3: 0.7, k4: 0, result: 'lit' }, em);\n        el('feComposite', { in: 'lit', in2: 'SourceAlpha', operator: 'in', result: 'thread' }, em);\n        el('feGaussianBlur', { in: 'SourceAlpha', stdDeviation: 10, result: 'sb' }, em);\n        el('feOffset', { in: 'sb', dx: 10, dy: 16, result: 'so' }, em);\n        el('feFlood', { 'flood-color': '#000', 'flood-opacity': 0.38, result: 'sc' }, em);\n        el('feComposite', { in: 'sc', in2: 'so', operator: 'in', result: 'shadow' }, em);\n        const mg = el('feMerge', {}, em); el('feMergeNode', { in: 'shadow' }, mg); el('feMergeNode', { in: 'thread' }, mg);\n      }\n      const g = el('g', t.apparel ? { filter: 'url(#stt-emb)' } : s.print ? {} : { filter: 'url(#stt-sh)' }, svg);\n      const pg = (t.ox || t.oy) ? el('g', { transform: `translate(${-(t.ox || 0)},${-(t.oy || 0)})` }, g) : g;\n      const fr = t.fillRule || (t.ox != null ? 'evenodd' : 'nonzero'); /* CorelDRAW art uses even-odd holes */\n      /* pathRoles marks artwork lettering (like a cut Welcome) that follows the letter color */\n      /* pathStroke thickens (and with nonzero fill, welds) cut artwork the way the Corel outline does */\n      const colorOf = k => (k && k[0] === '#') ? k : k === 'text' ? fill : (t.colors || []).some(c => c.key === k) ? paint(s[k] || ((t.colors.find(c => c.key === k) || {}).def) || 'White') : (k === 'art' ? artFill : fill);\n      this.paths.forEach((d, i) => { const c = colorOf((t.pathRoles && t.pathRoles[i]) || 'art');\n        el('path', Object.assign({ d, fill: c, 'fill-rule': fr, 'data-i': i }, t.pathStroke ? { stroke: c, 'stroke-width': t.pathStroke, 'stroke-linejoin': 'round', 'stroke-linecap': 'round', 'paint-order': 'stroke' } : {}), pg); });\n      host.style.aspectRatio = `${Math.round(F.w)} / ${Math.round(F.h)}`; host.style.width = `min(100%, calc(var(--stt-pz-maxh, 9999px) * ${(F.w / F.h).toFixed(4)}))`; host.style.marginInline = 'auto'; host.style.borderRadius = F.round ? '50%' : ''; host.style.overflow = F.round ? 'hidden' : '';\n      t.fields.forEach(f => {\n        const fill = f.color ? colorOf(f.color) : baseFill;\n        let txt = (s[f.key] || '').trim() || f.def; txt = (f.prefix || '') + txt + (f.suffix || ''); if (f.upper) txt = txt.toUpperCase();\n        /* ampPad: script fonts whose & or + crowds the names get an en space on each side */\n        if (f.ampPad) txt = txt.replace(/\\s*([&+])\\s*/g, '\\u2002$1\\u2002');\n        /* Print (non-script) fonts: the Corel export drops letter spacing, and the laser outline closes the gaps between letters.\n           Add the outline width back between letters, plus the design's spacing (or a light default of 5%). */\n        const fam = String(t.fonts[f.font] || '').toLowerCase();\n        const isPrint = f.print != null ? f.print : PRINT_FONTS.has(fam);\n        const ls = (f.track != null ? f.track * 0.269 * f.size : (isPrint ? 0.05 * f.size : 0)) + (isPrint ? (f.stroke || 0) : 0);\n        /* Letter spacing is done with per-letter dx offsets: Safari (all iPhones) ignores letter-spacing on SVG text.\n           Laser thickening: a real outline in the letter color, same width as the CorelDRAW outline. */\n        const dx = ls ? Array.from(txt).map((c, i) => (i ? ls : 0)).join(' ') : null;\n        const te = el('text', Object.assign({\n          x: (f.x != null ? f.x : t.cx), y: f.y, 'text-anchor': f.anchor || 'middle', 'font-family': `'${t.fonts[f.font]}'`, 'font-size': f.size, fill\n        }, dx ? { dx } : {}, f.stroke ? { stroke: fill, 'stroke-width': f.stroke, 'stroke-linejoin': 'round', 'stroke-linecap': 'round', 'paint-order': 'stroke' } : {}), g);\n        te._ls = ls;\n        if (f.noLig) te.setAttribute('style', 'font-feature-settings:\"liga\" 0,\"calt\" 0,\"dlig\" 0,\"swsh\" 0;font-variant-ligatures:none');\n        te.textContent = txt; te._f = f; te.setAttribute('data-key', f.key);\n      });\n      host.replaceChildren(svg);\n      svg.querySelectorAll('text').forEach(te => {\n        try { te._k = 1; const w = te.getBBox().width; const fw = te._f.fitW; if (fw ? Math.abs(w - fw) > 1 : w > te._f.maxW) { const k = fw ? Math.min(te._f.fitMax || 1.5, Math.max(te._f.fitMin || 0.5, fw / w)) : te._f.maxW / w; te._k = k; te.setAttribute('font-size', te._f.size * k); if (te._ls) te.setAttribute('dx', Array.from(te.textContent).map((c, i) => (i ? te._ls * k : 0)).join(' ')); } } catch (e) {}\n      });\n      /* scaleWith: a line (like the date) shrinks by the same amount as the line it belongs with (the names) */\n      svg.querySelectorAll('text').forEach(te => { const sw = te._f && te._f.scaleWith; if (!sw) return;\n        const other = svg.querySelector(`text[data-key=\"${sw}\"]`); if (!other || !(other._k < te._k)) return;\n        const k = other._k; te._k = k; te.setAttribute('font-size', te._f.size * k); if (te._ls) te.setAttribute('dx', Array.from(te.textContent).map((c, i) => (i ? te._ls * k : 0)).join(' ')); });\n      /* Stack (tpl.stack): lines spaced by their actual ink (long swashes and tails included),\n         bottom line sits the same distance under the middle line as the top line sits above it (or stack.gap),\n         then the whole group is re-centered on the board */\n      if (t.stack) try {\n        const st = t.stack, cv = this._inkCv || (this._inkCv = document.createElement('canvas')), cx = cv.getContext('2d');\n        const ink = te => { const fs = parseFloat(te.getAttribute('font-size')); cx.font = `${fs}px ${te.getAttribute('font-family')}`;\n          const m = cx.measureText(te.textContent || ' '), y = parseFloat(te.getAttribute('y')), s = (parseFloat(te.getAttribute('stroke-width')) || 0) / 2;\n          return { top: y - m.actualBoundingBoxAscent - s, bot: y + m.actualBoundingBoxDescent + s }; };\n        const els = st.keys.map(k => svg.querySelector(`text[data-key=\"${k}\"]`)).filter(e => e && e.textContent.trim());\n        if (els.length >= 1) {\n          for (let i = 1; i < els.length; i++) {\n            if (st.anchor != null && i <= st.anchor) continue;\n            const a = ink(els[i - 1]), b = ink(els[i]);\n            let gap = st.gap; if (gap == null) { const p = ink(els[0]), q = ink(els[1]); gap = Math.max(q.top - p.bot, st.minGap || 0); }\n            els[i].setAttribute('y', parseFloat(els[i].getAttribute('y')) + (a.bot + gap - b.top));\n          }\n          const boxes = els.map(ink), top = Math.min(...boxes.map(b => b.top)), bot = Math.max(...boxes.map(b => b.bot));\n          const dy = (st.cy != null ? st.cy : t.h / 2) - (top + bot) / 2;\n          if (st.center !== false) els.forEach(e => e.setAttribute('y', parseFloat(e.getAttribute('y')) + dy));\n        }\n      } catch (e) {}\n      /* Follow (tpl.follow): art that sits at a fixed spot relative to a line's left or right edge, like THE over a last name */\n      (t.follow || []).forEach(fo => { try {\n        const te = svg.querySelector(`text[data-key=\"${fo.key}\"]`); if (!te) return;\n        const b = te.getBBox(); const edge = fo.edge === 'right' ? b.x + b.width : b.x;\n        let dy = fo.base != null ? parseFloat(te.getAttribute('y')) - fo.base : 0;\n        if (fo.top != null) { const cv = this._inkCv || (this._inkCv = document.createElement('canvas')), cx = cv.getContext('2d');\n          cx.font = `${parseFloat(te.getAttribute('font-size'))}px ${te.getAttribute('font-family')}`;\n          dy = parseFloat(te.getAttribute('y')) - cx.measureText(te.textContent || ' ').actualBoundingBoxAscent - fo.top; }\n        fo.paths.forEach(i => { const pth = svg.querySelector(`path[data-i=\"${i}\"]`); if (pth) pth.setAttribute('transform', `translate(${fo.fixX ? 0 : edge - fo.at},${dy})`); });\n      } catch (e) {} });\n      /* Attach (tpl.attach): a text line pinned to the left/right end of another line, like an EST. date ending where the name ends */\n      (t.attach || []).forEach(at => { try {\n        const te = svg.querySelector(`text[data-key=\"${at.key}\"]`), to = svg.querySelector(`text[data-key=\"${at.to}\"]`); if (!te || !to) return;\n        const b = to.getBBox();\n        if (at.edge === 'left') { te.setAttribute('text-anchor', 'start'); te.setAttribute('x', b.x + (at.dx || 0)); }\n        else { te.setAttribute('text-anchor', 'end'); te.setAttribute('x', b.x + b.width + (at.dx || 0)); }\n      } catch (e) {} });\n      /* Row layout (tpl.row): Name 1 + center art (anchor) + Name 2 kept centered as one line,\n         and side art (birds) keeps its distance from the outer edge of the name it sits by */\n      if (t.row) try {\n        const r = t.row, tl = svg.querySelector(`text[data-key=\"${r.left}\"]`), tr = svg.querySelector(`text[data-key=\"${r.right}\"]`);\n        const scale = (te, k) => { te.setAttribute('font-size', te._f.size * k); if (te._ls) te.setAttribute('dx', Array.from(te.textContent).map((c, i) => (i ? te._ls * k : 0)).join(' ')); };\n        let wl = tl.getBBox().width, wr = tr.getBBox().width;\n        let total = wl + wr + r.midW + 2 * r.gap;\n        if (r.maxW && total > r.maxW) { const k = (r.maxW - r.midW - 2 * r.gap) / (wl + wr); scale(tl, k); scale(tr, k); wl = tl.getBBox().width; wr = tr.getBBox().width; total = wl + wr + r.midW + 2 * r.gap; }\n        const start = t.w / 2 - total / 2, midLeft = start + wl + r.gap, rightX = midLeft + r.midW + r.gap;\n        tl.setAttribute('text-anchor', 'start'); tl.setAttribute('x', start);\n        tr.setAttribute('text-anchor', 'start'); tr.setAttribute('x', rightX);\n        const move = (idx, dx) => (idx || []).forEach(i => { const pth = svg.querySelector(`path[data-i=\"${i}\"]`); if (pth) pth.setAttribute('transform', `translate(${dx},0)`); });\n        move(r.mid, midLeft - r.midX);\n        move(r.followLeft, start - r.leftEdge);\n        move(r.followRight, rightX + wr - r.rightEdge);\n      } catch (e) {}\n      /* centerIn: a letter (like a monogram initial) centered by its ink inside an art piece (like a hexagon) */\n      t.fields.forEach(f => { if (f.centerIn == null) return; try {\n        const te = svg.querySelector(`text[data-key=\"${f.key}\"]`), pth = svg.querySelector(`path[data-i=\"${f.centerIn}\"]`); if (!te || !pth || !te.textContent.trim()) return;\n        const inv = svg.getScreenCTM().inverse(), pt = svg.createSVGPoint(), r = pth.getBoundingClientRect();\n        pt.x = r.left + r.width / 2; pt.y = r.top + r.height / 2; const c = pt.matrixTransform(inv);\n        const cv = this._inkCv || (this._inkCv = document.createElement('canvas')), cx = cv.getContext('2d');\n        cx.font = `${parseFloat(te.getAttribute('font-size'))}px ${te.getAttribute('font-family')}`;\n        const m = cx.measureText(te.textContent);\n        te.setAttribute('text-anchor', 'start');\n        te.setAttribute('x', c.x - (m.actualBoundingBoxRight - m.actualBoundingBoxLeft) / 2 + m.actualBoundingBoxLeft);\n        te.setAttribute('y', c.y + (m.actualBoundingBoxAscent - m.actualBoundingBoxDescent) / 2);\n      } catch (e) {} });\n      /* pathShift: fixed nudges for individual art pieces, { index: [dx, dy] } */\n      Object.entries(t.pathShift || {}).forEach(([i, d]) => { const pth = svg.querySelector(`path[data-i=\"${i}\"]`); if (pth) pth.setAttribute('transform', `translate(${d[0]},${d[1] || 0}) ` + (pth.getAttribute('transform') || '')); });\n      /* centerAll: the whole design (letters and art, by ink) is centered on the board */\n      if (t.centerAll) try {\n        const cv = this._inkCv || (this._inkCv = document.createElement('canvas')), cx = cv.getContext('2d');\n        let L = Infinity, T = Infinity, R = -Infinity, B = -Infinity;\n        const add = (l, tp, r, b) => { L = Math.min(L, l); T = Math.min(T, tp); R = Math.max(R, r); B = Math.max(B, b); };\n        const ca = typeof t.centerAll === 'object' ? t.centerAll : null; let gl = Infinity, gr = -Infinity;\n        g.querySelectorAll('text').forEach(te => { if (!te.textContent.trim()) return;\n          const fs = parseFloat(te.getAttribute('font-size')); cx.font = `${fs}px ${te.getAttribute('font-family')}`;\n          const m = cx.measureText(te.textContent), n = te.textContent.length, lsx = te._ls ? te._ls * (te._k || 1) * (n - 1) : 0, adv = m.width + lsx;\n          const an = te.getAttribute('text-anchor'), x0 = parseFloat(te.getAttribute('x')) - (an === 'middle' ? adv / 2 : an === 'end' ? adv : 0);\n          const y = parseFloat(te.getAttribute('y')), sw = (parseFloat(te.getAttribute('stroke-width')) || 0) / 2;\n          const bb = te.getBBox(), l = Math.min(bb.x, x0 - m.actualBoundingBoxLeft) - sw, r = te._f && te._f.noLig ? bb.x + bb.width + sw : x0 + m.actualBoundingBoxRight + lsx + sw;\n          if (ca && ca.keys.includes(te.dataset.key)) { gl = Math.min(gl, l); gr = Math.max(gr, r); }\n          add(l, y - m.actualBoundingBoxAscent - sw, r, y + m.actualBoundingBoxDescent + sw); });\n        const inv = svg.getScreenCTM().inverse(), pt = svg.createSVGPoint();\n        g.querySelectorAll('path').forEach(pth => { const r = pth.getBoundingClientRect(); if (!r.width && !r.height) return;\n          [[r.left, r.top], [r.right, r.bottom]].forEach(([X, Y]) => { pt.x = X; pt.y = Y; const q = pt.matrixTransform(inv); add(q.x, q.y, q.x, q.y);\n            if (ca && (ca.paths || []).includes(+pth.dataset.i)) { gl = Math.min(gl, q.x); gr = Math.max(gr, q.x); } }); });\n        if (isFinite(L)) {\n          const dy = t.centerAll === 'x' ? 0 : t.h / 2 - (T + B) / 2;\n          if (ca && isFinite(gl)) { /* center a named group (like the two names and the 'and') on its own; the rest keeps its own centering */\n            const gdx = t.w / 2 - (gl + gr) / 2;\n            g.querySelectorAll('text').forEach(te => { if (ca.keys.includes(te.dataset.key)) te.setAttribute('transform', `translate(${gdx},0)`); });\n            g.querySelectorAll('path').forEach(pth => { if ((ca.paths || []).includes(+pth.dataset.i)) pth.setAttribute('transform', `translate(${gdx},0) ` + (pth.getAttribute('transform') || '')); });\n            g.setAttribute('transform', `translate(0,${dy})`);\n          } else { const dx = t.w / 2 - (L + R) / 2; g.setAttribute('transform', `translate(${dx},${dy})`); }\n        }\n      } catch (e) {}\n      if (t.apparel) this.satin(svg, defs, g);\n    }\n\n    /* Satin stitch look: fine slanted thread lines and a soft sheen laid over every letter and art piece */\n    satin(svg, defs, g) {\n      const t = this.tpl, sp = t.stitch || 34;\n      const pat = el('pattern', { id: 'stt-satin', patternUnits: 'userSpaceOnUse', width: sp, height: sp * 6, patternTransform: `rotate(${t.stitchAngle || 32})` }, defs);\n      el('rect', { x: 0, y: 0, width: sp * 0.45, height: sp * 6, fill: '#fff', 'fill-opacity': 0.2 }, pat);\n      el('rect', { x: sp * 0.56, y: 0, width: sp * 0.28, height: sp * 6, fill: '#000', 'fill-opacity': 0.2 }, pat);\n      const sheen = el('linearGradient', { id: 'stt-sheen', x1: 0, y1: 0, x2: 0, y2: 1 }, defs);\n      el('stop', { offset: '0%', 'stop-color': '#fff', 'stop-opacity': 0.22 }, sheen);\n      el('stop', { offset: '55%', 'stop-color': '#fff', 'stop-opacity': 0 }, sheen);\n      el('stop', { offset: '100%', 'stop-color': '#000', 'stop-opacity': 0.18 }, sheen);\n      [...g.querySelectorAll('text, path')].forEach(n => {\n        ['url(#stt-satin)', 'url(#stt-sheen)'].forEach(f => {\n          const c = n.cloneNode(true); c.removeAttribute('data-key'); c.removeAttribute('data-i');\n          c.setAttribute('fill', f); if (c.getAttribute('stroke')) c.setAttribute('stroke', f);\n          c.setAttribute('pointer-events', 'none'); n.after(c);\n        });\n      });\n    }\n  }\n  if (!customElements.get('stt-personalizer')) customElements.define('stt-personalizer', STTPersonalizer);\n})();\n"],
  "mappings": "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",
  "names": ["b", "fill", "s"]
}
